<?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>106202</bug_id>
          
          <creation_ts>2013-01-06 18:07:21 -0800</creation_ts>
          <short_desc>DFG should constant fold GetScope, and accesses to the scope register in the ByteCodeParser should not pretend that it&apos;s a constant as that breaks OSR exit liveness tracking</short_desc>
          <delta_ts>2015-03-03 21:27:43 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>106067</dependson>
          <blocked>142229</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>801125</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-06 18:07:21 -0800</bug_when>
    <thetext>If we know that the JSFunction operand is a constant, then we could turn GetScope into a constant as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073873</commentid>
    <comment_count>1</comment_count>
      <attachid>247814</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-03 16:45:29 -0800</bug_when>
    <thetext>Created attachment 247814
the basic idea

This will require a lot of testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073931</commentid>
    <comment_count>2</comment_count>
      <attachid>247826</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-03 19:19:44 -0800</bug_when>
    <thetext>Created attachment 247826
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073933</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-03 19:30:42 -0800</bug_when>
    <thetext>Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quartary/OpenSource/WebKitBuild/Release/jsc (r180964)
&quot;FixScopeWatch&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r180964)

Collected 6 samples per benchmark/VM, with 6 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               FixScopeWatch                                   
SunSpider:
   3d-cube                                            4.8818+-0.0648     ?      5.0219+-0.4331        ? might be 1.0287x slower
   3d-morph                                           6.0559+-0.1039     ?      6.1942+-0.2190        ? might be 1.0228x slower
   3d-raytrace                                        6.6930+-0.6535            6.3181+-0.1064          might be 1.0593x faster
   access-binary-trees                                1.9760+-0.0167            1.9712+-0.0184        
   access-fannkuch                                    5.9154+-0.1496     ?      5.9910+-0.3628        ? might be 1.0128x slower
   access-nbody                                       2.8868+-0.0662     ?      2.9536+-0.2406        ? might be 1.0232x slower
   access-nsieve                                      3.6418+-0.1828            3.5806+-0.0663          might be 1.0171x faster
   bitops-3bit-bits-in-byte                           1.5943+-0.0775            1.5447+-0.0171          might be 1.0321x faster
   bitops-bits-in-byte                                3.5695+-0.0702            3.5365+-0.0352        
   bitops-bitwise-and                                 2.1845+-0.1878            2.1298+-0.0427          might be 1.0257x faster
   bitops-nsieve-bits                                 3.7052+-0.0578            3.6862+-0.0347        
   controlflow-recursive                              2.3047+-0.1799            2.2660+-0.1643          might be 1.0171x faster
   crypto-aes                                         4.3910+-0.4677            4.2024+-0.1471          might be 1.0449x faster
   crypto-md5                                         2.5719+-0.1345            2.4967+-0.0491          might be 1.0301x faster
   crypto-sha1                                        2.8722+-0.2743            2.7679+-0.4077          might be 1.0377x faster
   date-format-tofte                                  9.5362+-0.2367            9.4816+-0.1821        
   date-format-xparb                                  5.1246+-0.1100     ?      5.2005+-0.0930        ? might be 1.0148x slower
   math-cordic                                        3.1307+-0.1317            3.0744+-0.1068          might be 1.0183x faster
   math-partial-sums                                  5.2037+-0.1117            5.1359+-0.1071          might be 1.0132x faster
   math-spectral-norm                                 1.9014+-0.0328            1.8841+-0.0550        
   regexp-dna                                         7.9770+-1.2647     ?      8.2120+-1.4100        ? might be 1.0295x slower
   string-base64                                      4.3436+-0.0824     ?      4.3465+-0.1579        ?
   string-fasta                                       6.8934+-0.6654            6.6233+-0.1021          might be 1.0408x faster
   string-tagcloud                                   10.0256+-0.1550            9.9666+-0.3847        
   string-unpack-code                                20.5290+-0.3683           20.3044+-0.8957          might be 1.0111x faster
   string-validate-input                              4.7103+-0.0800            4.6520+-0.0780          might be 1.0125x faster

   &lt;arithmetic&gt; *                                     5.1777+-0.1165            5.1362+-0.0782          might be 1.0081x faster
   &lt;geometric&gt;                                        4.2941+-0.0772            4.2513+-0.0501          might be 1.0101x faster
   &lt;harmonic&gt;                                         3.6815+-0.0618            3.6348+-0.0281          might be 1.0129x faster

                                                        TipOfTree               FixScopeWatch                                   
LongSpider:
   3d-cube                                         1100.6284+-15.7735        1095.5994+-6.6646        
   3d-morph                                        1558.2181+-22.9648        1549.0689+-12.1008       
   3d-raytrace                                      744.3870+-10.8926         729.1478+-9.6368          might be 1.0209x faster
   access-binary-trees                              986.5206+-4.4922     ?    989.1923+-10.3722       ?
   access-fannkuch                                  330.4147+-12.9497    ?    337.4410+-14.4272       ? might be 1.0213x slower
   access-nbody                                     618.8371+-4.2948     ?    625.5186+-9.0834        ? might be 1.0108x slower
   access-nsieve                                    941.5618+-8.4859     !    971.8967+-14.5108       ! definitely 1.0322x slower
   bitops-3bit-bits-in-byte                          45.7198+-2.0410           45.5826+-2.1404        
   bitops-bits-in-byte                              105.4943+-3.3351          104.7314+-2.4370        
   bitops-nsieve-bits                               695.3454+-6.1057     ?    703.6340+-9.5449        ? might be 1.0119x slower
   controlflow-recursive                            502.1332+-5.5546     ?    506.9505+-5.2676        ?
   crypto-aes                                       716.1024+-3.3483          715.7314+-8.6985        
   crypto-md5                                       620.7645+-6.9020          615.4005+-8.5855        
   crypto-sha1                                      653.1191+-6.8585          653.0269+-9.2926        
   date-format-tofte                                808.8141+-15.8915         794.0575+-21.4639         might be 1.0186x faster
   date-format-xparb                                753.3946+-11.0760    ?    774.3418+-21.5291       ? might be 1.0278x slower
   math-cordic                                      595.5793+-7.1088     ?    596.1919+-7.4955        ?
   math-partial-sums                                513.2996+-7.3164     ?    514.2115+-6.8522        ?
   math-spectral-norm                               571.1936+-8.9008     ?    573.1126+-3.2463        ?
   string-base64                                    363.0661+-8.1732          362.5895+-8.8489        
   string-fasta                                     441.4485+-5.9410     ?    445.4162+-10.8534       ?
   string-tagcloud                                  225.4155+-1.8776     ^    218.0723+-2.2954        ^ definitely 1.0337x faster

   &lt;arithmetic&gt;                                     631.4299+-1.2320     ?    632.7689+-1.3563        ? might be 1.0021x slower
   &lt;geometric&gt; *                                    514.8797+-2.1591     ?    515.4841+-1.6397        ? might be 1.0012x slower
   &lt;harmonic&gt;                                       331.5053+-5.0703          330.7837+-5.3529          might be 1.0022x faster

                                                        TipOfTree               FixScopeWatch                                   
V8Spider:
   crypto                                            55.7063+-1.8521           55.6180+-1.6411        
   deltablue                                         86.3322+-3.9432     ?     90.7857+-7.0118        ? might be 1.0516x slower
   earley-boyer                                      43.3649+-1.5815           42.3847+-0.6693          might be 1.0231x faster
   raytrace                                          39.6401+-1.3013     ?     39.8878+-1.1962        ?
   regexp                                            69.1650+-1.6454           69.1000+-2.3284        
   richards                                          78.0308+-2.9192     ?     78.4458+-2.3281        ?
   splay                                             37.0502+-2.2428           35.4827+-1.5673          might be 1.0442x faster

   &lt;arithmetic&gt;                                      58.4699+-0.8519     ?     58.8150+-0.8004        ? might be 1.0059x slower
   &lt;geometric&gt; *                                     55.6219+-0.8734           55.5636+-0.6198          might be 1.0010x faster
   &lt;harmonic&gt;                                        52.9391+-0.9549           52.5551+-0.5870          might be 1.0073x faster

                                                        TipOfTree               FixScopeWatch                                   
Octane:
   encrypt                                           0.20522+-0.00430          0.20308+-0.00138         might be 1.0106x faster
   decrypt                                           3.62736+-0.02218    ?     3.64513+-0.06049       ?
   deltablue                                x2       0.20812+-0.00226          0.20695+-0.00296       
   earley                                            0.68911+-0.00890          0.68154+-0.00959         might be 1.0111x faster
   boyer                                             5.83184+-0.02611    ?     5.84028+-0.04294       ?
   navier-stokes                            x2       5.25105+-0.06272    ?     5.28606+-0.03827       ?
   raytrace                                 x2       1.29463+-0.03771    ?     1.31356+-0.03923       ? might be 1.0146x slower
   richards                                 x2       0.12509+-0.00068          0.12391+-0.00108       
   splay                                    x2       0.37731+-0.00378          0.37235+-0.00480         might be 1.0133x faster
   regexp                                   x2      33.22525+-0.36126    ?    33.36372+-0.17874       ?
   pdfjs                                    x2      51.69228+-0.39503         51.32574+-0.25539       
   mandreel                                 x2      51.00733+-0.75990         50.51836+-0.24494       
   gbemu                                    x2      44.45000+-0.20517    ?    44.98643+-2.07512       ? might be 1.0121x slower
   closure                                           0.56950+-0.00581    ^     0.55731+-0.00302       ^ definitely 1.0219x faster
   jquery                                            7.24390+-0.05847          7.13562+-0.06815         might be 1.0152x faster
   box2d                                    x2      13.02334+-0.06835         12.89889+-0.10292       
   zlib                                     x2     395.68880+-13.96756   ?   396.89996+-1.81329       ?
   typescript                               x2     849.44714+-7.77155    ?   855.51298+-14.29822      ?

   &lt;arithmetic&gt;                                     96.99159+-0.93940    ?    97.45603+-0.98901       ? might be 1.0048x slower
   &lt;geometric&gt; *                                     6.91976+-0.01672          6.90439+-0.03318         might be 1.0022x faster
   &lt;harmonic&gt;                                        0.71706+-0.00409          0.71092+-0.00312         might be 1.0086x faster

                                                        TipOfTree               FixScopeWatch                                   
Kraken:
   ai-astar                                          268.412+-5.060            267.039+-3.313         
   audio-beat-detection                              111.641+-0.899            111.256+-0.854         
   audio-dft                                         160.957+-5.775            156.736+-1.528           might be 1.0269x faster
   audio-fft                                          79.765+-4.078      !      84.882+-0.234         ! definitely 1.0642x slower
   audio-oscillator                                  239.163+-5.888            237.089+-2.193         
   imaging-darkroom                                  130.609+-4.452      ?     134.976+-1.635         ? might be 1.0334x slower
   imaging-desaturate                                 62.998+-1.376      ?      63.021+-0.930         ?
   imaging-gaussian-blur                             115.971+-2.896            114.727+-2.699           might be 1.0108x faster
   json-parse-financial                               48.091+-1.307             45.870+-1.989           might be 1.0484x faster
   json-stringify-tinderbox                           59.513+-3.635             57.049+-2.132           might be 1.0432x faster
   stanford-crypto-aes                                60.150+-2.399             59.947+-2.870         
   stanford-crypto-ccm                                50.705+-2.094             48.910+-1.483           might be 1.0367x faster
   stanford-crypto-pbkdf2                            169.464+-2.168            167.272+-3.358           might be 1.0131x faster
   stanford-crypto-sha256-iterative                   55.330+-2.213             54.985+-1.799         

   &lt;arithmetic&gt; *                                    115.198+-0.678            114.554+-0.377           might be 1.0056x faster
   &lt;geometric&gt;                                        97.624+-0.359      ^      96.897+-0.313         ^ definitely 1.0075x faster
   &lt;harmonic&gt;                                         84.413+-0.679             83.413+-0.380           might be 1.0120x faster

                                                        TipOfTree               FixScopeWatch                                   
JSRegress:
   abs-boolean                                        2.6487+-0.0813            2.6250+-0.0317        
   adapt-to-double-divide                            17.1166+-0.6436           16.9493+-0.3536        
   aliased-arguments-getbyval                         0.8510+-0.1043     ?      0.8964+-0.1686        ? might be 1.0533x slower
   allocate-big-object                                2.2979+-0.0317     ?      2.3337+-0.1216        ? might be 1.0156x slower
   arguments-out-of-bounds                           18.4977+-1.4952           17.9851+-1.2759          might be 1.0285x faster
   arity-mismatch-inlining                            0.8437+-0.0593            0.8145+-0.0184          might be 1.0359x faster
   array-access-polymorphic-structure                 6.4804+-0.1407     ?      6.8251+-0.5844        ? might be 1.0532x slower
   array-nonarray-polymorhpic-access                 36.3266+-1.2128           35.7397+-2.3332          might be 1.0164x faster
   array-prototype-every                             90.4097+-2.4881     ?     91.1521+-3.5069        ?
   array-prototype-forEach                           89.5922+-1.9220     ?     91.7344+-1.6994        ? might be 1.0239x slower
   array-prototype-map                              107.7304+-1.9639     ?    112.3070+-4.5522        ? might be 1.0425x slower
   array-prototype-some                              90.1558+-3.4172     ?     91.1971+-4.0743        ? might be 1.0116x slower
   array-splice-contiguous                           42.3068+-1.7470           42.0109+-1.8544        
   array-with-double-add                              4.2355+-0.2623            4.0736+-0.0394          might be 1.0397x faster
   array-with-double-increment                        3.2598+-0.2360            3.2395+-0.0464        
   array-with-double-mul-add                          5.0776+-0.1026     ?      5.1941+-0.1437        ? might be 1.0229x slower
   array-with-double-sum                              3.2948+-0.1218            3.2820+-0.1562        
   array-with-int32-add-sub                           6.7727+-0.0153     ^      6.6862+-0.0364        ^ definitely 1.0130x faster
   array-with-int32-or-double-sum                     3.3317+-0.0650            3.3071+-0.0241        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     36.5284+-1.7122           35.3626+-1.3884          might be 1.0330x faster
   ArrayBuffer-DataView-alloc-long-lived             16.6987+-1.7038           14.2071+-1.2730          might be 1.1754x faster
   ArrayBuffer-Int32Array-byteOffset                  3.5568+-0.0852            3.5273+-0.1329        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     34.8643+-1.6115     ?     35.2524+-2.3943        ? might be 1.0111x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     24.7555+-2.8060           22.2649+-1.5528          might be 1.1119x faster
   ArrayBuffer-Int8Array-alloc-long-lived            15.2381+-0.9736           13.8343+-1.2645          might be 1.1015x faster
   ArrayBuffer-Int8Array-alloc                       13.1582+-1.3380           11.9024+-1.3989          might be 1.1055x faster
   asmjs_bool_bug                                     7.7462+-0.2118     ?      7.9991+-0.3645        ? might be 1.0327x slower
   assign-custom-setter-polymorphic                   3.0258+-0.1265     ?      3.1619+-0.0710        ? might be 1.0450x slower
   assign-custom-setter                               4.1283+-0.1147     !      4.4414+-0.0648        ! definitely 1.0758x slower
   basic-set                                         10.5227+-0.5711     ?     10.7120+-0.6091        ? might be 1.0180x slower
   big-int-mul                                        3.9867+-0.0461            3.9120+-0.0343          might be 1.0191x faster
   boolean-test                                       3.0627+-0.0699            3.0481+-0.0927        
   branch-fold                                        3.8466+-0.4396            3.6540+-0.0365          might be 1.0527x faster
   by-val-generic                                     7.7045+-0.1103     ?      7.8875+-0.2075        ? might be 1.0237x slower
   call-spread-apply                                 13.9705+-0.5725     ?     14.1681+-0.7794        ? might be 1.0141x slower
   call-spread-call                                   5.9695+-0.5546     ?      6.1251+-0.8886        ? might be 1.0261x slower
   captured-assignments                               0.4436+-0.0317            0.4423+-0.0172        
   cast-int-to-double                                 5.3187+-0.0804            5.2542+-0.0203          might be 1.0123x faster
   cell-argument                                      8.8110+-0.4010            8.5900+-0.4174          might be 1.0257x faster
   cfg-simplify                                       2.8683+-0.1377            2.7900+-0.0199          might be 1.0281x faster
   chain-getter-access                               10.2814+-0.4951            9.9417+-0.1416          might be 1.0342x faster
   cmpeq-obj-to-obj-other                            11.0201+-0.7532           10.6249+-1.1699          might be 1.0372x faster
   constant-test                                      4.9163+-0.1086            4.8894+-0.0376        
   DataView-custom-properties                        42.0777+-1.1860     ^     38.8163+-1.1218        ^ definitely 1.0840x faster
   delay-tear-off-arguments-strictmode               23.0496+-2.3461     ?     23.4046+-1.7486        ? might be 1.0154x slower
   deltablue-varargs                                182.6706+-3.0160     ?    183.7074+-1.9689        ?
   destructuring-arguments                            5.2561+-0.1239            5.2060+-0.0516        
   destructuring-swap                                 5.0702+-0.0597            4.9886+-0.0360          might be 1.0164x faster
   direct-arguments-getbyval                          0.9124+-0.0694            0.8957+-0.0448          might be 1.0187x faster
   div-boolean-double                                 5.2573+-0.1247            5.1829+-0.0049          might be 1.0144x faster
   div-boolean                                        7.8658+-0.2272            7.7560+-0.0276          might be 1.0142x faster
   double-get-by-val-out-of-bounds                    4.3036+-0.0737     ?      4.3733+-0.2728        ? might be 1.0162x slower
   double-pollution-getbyval                          8.8908+-0.1497            8.8180+-0.0898        
   double-pollution-putbyoffset                       4.1417+-0.2944     ?      4.1645+-0.2537        ?
   double-to-int32-typed-array-no-inline              2.2939+-0.2062     ?      2.2981+-0.2134        ?
   double-to-int32-typed-array                        2.0423+-0.0921            2.0000+-0.0858          might be 1.0211x faster
   double-to-uint32-typed-array-no-inline             2.3408+-0.0412            2.3049+-0.1097          might be 1.0156x faster
   double-to-uint32-typed-array                       2.0878+-0.1099            2.0750+-0.1138        
   elidable-new-object-dag                           43.2961+-2.3774     ?     44.2493+-2.6152        ? might be 1.0220x slower
   elidable-new-object-roflcopter                    49.2076+-1.4465           48.9808+-1.5034        
   elidable-new-object-then-call                     39.7385+-2.3194           38.4414+-1.1547          might be 1.0337x faster
   elidable-new-object-tree                          45.6972+-2.7990           44.7347+-1.2973          might be 1.0215x faster
   empty-string-plus-int                              5.6546+-0.7518            5.2321+-0.0527          might be 1.0808x faster
   emscripten-cube2hash                              40.0480+-1.2478     ?     40.6900+-2.4296        ? might be 1.0160x slower
   exit-length-on-plain-object                       15.3117+-2.2505           13.7933+-0.6483          might be 1.1101x faster
   external-arguments-getbyval                        1.2768+-0.0339     ?      1.3869+-0.1880        ? might be 1.0862x slower
   external-arguments-putbyval                        2.1805+-0.1790     ?      2.2715+-0.4608        ? might be 1.0417x slower
   fixed-typed-array-storage-var-index                1.2017+-0.0102     ?      1.2058+-0.0315        ?
   fixed-typed-array-storage                          0.9497+-0.1214            0.8747+-0.0213          might be 1.0857x faster
   Float32Array-matrix-mult                           4.3309+-0.1464     ?      4.5851+-0.8047        ? might be 1.0587x slower
   Float32Array-to-Float64Array-set                  54.4957+-4.9925     ?     58.2524+-3.1760        ? might be 1.0689x slower
   Float64Array-alloc-long-lived                     66.7236+-1.1267     ?     67.6910+-2.6008        ? might be 1.0145x slower
   Float64Array-to-Int16Array-set                    68.6000+-1.7176           66.9167+-1.5746          might be 1.0252x faster
   fold-double-to-int                                15.9098+-1.5063           15.1627+-0.3982          might be 1.0493x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.0523+-0.9491            9.9700+-1.2080        
   fold-get-by-id-to-multi-get-by-offset              9.6719+-0.5478            9.6540+-0.9121        
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.5170+-0.2362            8.1814+-0.6432          might be 1.0410x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.6396+-0.9415     ?      8.9288+-0.6581        ? might be 1.0335x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      8.3433+-1.5916     ?      8.7255+-0.8909        ? might be 1.0458x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      5.1364+-0.7523            4.8988+-0.6234          might be 1.0485x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.7964+-1.1807            8.9507+-0.6694          might be 1.0945x faster
   fold-put-by-id-to-multi-put-by-offset              9.7359+-0.7960     ?     10.1344+-1.3762        ? might be 1.0409x slower
   fold-put-structure                                 4.9878+-1.0411            4.9823+-1.3966        
   for-of-iterate-array-entries                       5.6586+-0.0823     ?      6.1174+-1.0127        ? might be 1.0811x slower
   for-of-iterate-array-keys                          2.7791+-0.1589     ?      2.8326+-0.1387        ? might be 1.0193x slower
   for-of-iterate-array-values                        2.5576+-0.1051     ?      2.6866+-0.4918        ? might be 1.0504x slower
   fround                                            20.3826+-0.5859     ?     20.8285+-1.7940        ? might be 1.0219x slower
   ftl-library-inlining-dataview                     83.8385+-2.4468     ?     84.0439+-2.4079        ?
   ftl-library-inlining                              67.9330+-2.1387     ?     71.1065+-10.2351       ? might be 1.0467x slower
   function-dot-apply                                 1.5966+-0.1493            1.4825+-0.0529          might be 1.0769x faster
   function-test                                      3.3384+-0.0432     ?      3.3416+-0.0494        ?
   function-with-eval                               128.4874+-4.5722          125.7065+-3.3695          might be 1.0221x faster
   gcse-poly-get-less-obvious                        19.3588+-1.0973     ?     19.5163+-1.0112        ?
   gcse-poly-get                                     20.4125+-1.2814     ?     22.7005+-3.5323        ? might be 1.1121x slower
   gcse                                               4.3962+-0.2208            4.3024+-0.0502          might be 1.0218x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7579+-0.0964            2.7236+-0.0811          might be 1.0126x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.0708+-0.0472            6.0579+-0.2007        
   get-by-id-chain-from-try-block                     9.0181+-1.6393            7.8025+-0.1411          might be 1.1558x faster
   get-by-id-check-structure-elimination              5.1684+-0.2421            5.0940+-0.0752          might be 1.0146x faster
   get-by-id-proto-or-self                           17.4556+-0.6086     ?     18.4931+-1.2940        ? might be 1.0594x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8646+-0.0241     ?      2.9451+-0.0673        ? might be 1.0281x slower
   get-by-id-self-or-proto                           18.7268+-0.7321     ?     18.7407+-1.3908        ?
   get-by-val-out-of-bounds                           4.2526+-0.0216     !      4.3596+-0.0493        ! definitely 1.0252x slower
   get_callee_monomorphic                             3.9534+-0.2213     ?      3.9558+-0.2310        ?
   get_callee_polymorphic                             3.5378+-0.3109            3.4897+-0.1491          might be 1.0138x faster
   getter-no-activation                               5.0227+-1.3911            4.9282+-0.6288          might be 1.0192x faster
   getter-richards                                  132.1864+-4.2405          127.9328+-5.8186          might be 1.0332x faster
   getter                                             5.1398+-0.0679            5.0656+-0.0499          might be 1.0147x faster
   global-var-const-infer-fire-from-opt               0.8646+-0.0343     ?      0.9258+-0.0735        ? might be 1.0708x slower
   global-var-const-infer                             0.9485+-0.0511            0.8875+-0.2322          might be 1.0687x faster
   HashMap-put-get-iterate-keys                      27.7736+-0.4529           27.5104+-0.8592        
   HashMap-put-get-iterate                           27.4629+-0.4726           27.1496+-0.8510          might be 1.0115x faster
   HashMap-string-put-get-iterate                    27.3636+-1.1479     ?     28.7497+-1.3888        ? might be 1.0507x slower
   hoist-make-rope                                   11.5487+-1.0880     ?     12.3691+-1.5094        ? might be 1.0710x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.9853+-0.1862     ?      5.0438+-0.3217        ? might be 1.0117x slower
   hoist-poly-check-structure                         3.6707+-0.1249            3.6160+-0.0590          might be 1.0151x faster
   imul-double-only                                   8.3403+-0.4227            8.2857+-0.0993        
   imul-int-only                                     10.4554+-1.0142            9.8590+-0.0899          might be 1.0605x faster
   imul-mixed                                         8.6490+-0.4996            8.2548+-0.6066          might be 1.0477x faster
   in-four-cases                                     18.8822+-0.3020     ?     18.9926+-0.2289        ?
   in-one-case-false                                 10.2473+-0.4483     ?     10.3069+-0.6321        ?
   in-one-case-true                                  10.0060+-0.3482     ?     10.2429+-0.4642        ? might be 1.0237x slower
   in-two-cases                                      10.7238+-0.5146     ^     10.1020+-0.0939        ^ definitely 1.0616x faster
   indexed-properties-in-objects                      2.8907+-0.0429            2.8335+-0.1029          might be 1.0202x faster
   infer-closure-const-then-mov-no-inline             3.6884+-0.0529     ?      3.7279+-0.1187        ? might be 1.0107x slower
   infer-closure-const-then-mov                      19.7770+-1.4909           19.4694+-1.8833          might be 1.0158x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.7218+-0.2726     ?     11.7241+-0.2206        ?
   infer-closure-const-then-put-to-scope             20.6169+-1.4604     ?     22.1382+-0.6520        ? might be 1.0738x slower
   infer-closure-const-then-reenter-no-inline   
                                                     51.3099+-2.8822     ?     52.2773+-2.0394        ? might be 1.0189x slower
   infer-closure-const-then-reenter                  18.8804+-1.0082     !     23.3024+-1.1287        ! definitely 1.2342x slower
   infer-constant-global-property                    30.9268+-1.5617           30.8008+-1.6095        
   infer-constant-property                            2.6828+-0.1077     ?      2.6971+-0.1172        ?
   infer-one-time-closure-ten-vars                   12.4943+-0.4993     ?     12.8271+-0.8578        ? might be 1.0266x slower
   infer-one-time-closure-two-vars                   11.8252+-0.0718     ?     11.8927+-0.2508        ?
   infer-one-time-closure                            12.2103+-0.7604     ?     12.5166+-1.2734        ? might be 1.0251x slower
   infer-one-time-deep-closure                       21.4027+-1.3720     ?     21.7456+-1.4904        ? might be 1.0160x slower
   inline-arguments-access                            1.4251+-0.0326            1.4049+-0.0227          might be 1.0143x faster
   inline-arguments-aliased-access                    1.6705+-0.0152     ?      1.6715+-0.0514        ?
   inline-arguments-local-escape                     13.6145+-1.3604           13.4452+-1.4949          might be 1.0126x faster
   inline-get-scoped-var                              4.2216+-0.1322     !      4.5600+-0.0653        ! definitely 1.0802x slower
   inlined-put-by-id-transition                       9.6582+-0.1607     ?      9.7417+-0.3075        ?
   int-or-other-abs-then-get-by-val                   4.9132+-0.0235     ?      4.9365+-0.0604        ?
   int-or-other-abs-zero-then-get-by-val             16.9377+-0.8799     ?     18.5035+-1.1289        ? might be 1.0924x slower
   int-or-other-add-then-get-by-val                   4.3253+-0.1960            4.2301+-0.0338          might be 1.0225x faster
   int-or-other-add                                   5.2714+-0.0327     ?      5.3017+-0.1526        ?
   int-or-other-div-then-get-by-val                   4.1906+-0.0294     ?      4.2958+-0.1918        ? might be 1.0251x slower
   int-or-other-max-then-get-by-val                   4.2965+-0.0436     ?      4.3072+-0.0472        ?
   int-or-other-min-then-get-by-val                   4.4329+-0.0982            4.3972+-0.1396        
   int-or-other-mod-then-get-by-val                   3.8856+-0.0871            3.8807+-0.0582        
   int-or-other-mul-then-get-by-val                   3.9961+-0.0902     ?      4.0183+-0.1097        ?
   int-or-other-neg-then-get-by-val                   4.6194+-0.0881            4.5472+-0.0139          might be 1.0159x faster
   int-or-other-neg-zero-then-get-by-val             17.3876+-1.3085           17.2575+-0.6636        
   int-or-other-sub-then-get-by-val                   4.2925+-0.0347     ?      4.3085+-0.0460        ?
   int-or-other-sub                                   3.6018+-0.1280            3.4957+-0.0526          might be 1.0303x faster
   int-overflow-local                                 4.2941+-0.0789     ?      4.3354+-0.0246        ?
   Int16Array-alloc-long-lived                       49.4705+-3.0822           48.0822+-1.4054          might be 1.0289x faster
   Int16Array-bubble-sort-with-byteLength            21.1527+-0.5512     ?     23.2466+-3.2154        ? might be 1.0990x slower
   Int16Array-bubble-sort                            25.2425+-2.1376           23.9976+-2.5006          might be 1.0519x faster
   Int16Array-load-int-mul                            1.5856+-0.1798            1.5288+-0.1779          might be 1.0371x faster
   Int16Array-to-Int32Array-set                      53.1141+-5.6434     ?     53.1622+-4.4053        ?
   Int32Array-alloc-large                            24.4822+-1.1562           24.1956+-0.6273          might be 1.0118x faster
   Int32Array-alloc-long-lived                       54.4914+-1.8157     ?     54.6369+-2.0889        ?
   Int32Array-alloc                                   3.2544+-0.4778     ?      3.3197+-0.4899        ? might be 1.0201x slower
   Int32Array-Int8Array-view-alloc                    7.9723+-1.3835            7.8086+-1.6217          might be 1.0210x faster
   int52-spill                                        6.5472+-0.1747     ?      6.5980+-0.2479        ?
   Int8Array-alloc-long-lived                        45.8716+-1.0171           45.0514+-1.4730          might be 1.0182x faster
   Int8Array-load-with-byteLength                     3.3686+-0.1360            3.3311+-0.0745          might be 1.0113x faster
   Int8Array-load                                     3.3000+-0.0299     ?      3.4148+-0.2501        ? might be 1.0348x slower
   integer-divide                                    11.2163+-0.3019           11.1563+-0.2877        
   integer-modulo                                     2.0441+-0.1315            1.9688+-0.0779          might be 1.0383x faster
   large-int-captured                                 6.7282+-0.1464     ?      7.0793+-1.1061        ? might be 1.0522x slower
   large-int-neg                                     17.1100+-1.3775           16.9482+-1.2018        
   large-int                                         15.3799+-1.3693     ?     15.8046+-1.3513        ? might be 1.0276x slower
   logical-not                                        4.5812+-0.1192            4.5141+-0.0684          might be 1.0149x faster
   lots-of-fields                                    12.6919+-0.6832     ?     13.0502+-0.4364        ? might be 1.0282x slower
   make-indexed-storage                               2.9485+-0.0526            2.8962+-0.1998          might be 1.0181x faster
   make-rope-cse                                      4.2493+-0.3805     ?      4.4280+-0.5224        ? might be 1.0420x slower
   marsaglia-larger-ints                             37.0515+-1.9599           36.5626+-1.4979          might be 1.0134x faster
   marsaglia-osr-entry                               24.1124+-1.6696           23.4042+-1.1463          might be 1.0303x faster
   max-boolean                                        2.4350+-0.0299     ?      2.4587+-0.0245        ?
   method-on-number                                  18.6000+-0.6293           17.5892+-1.0265          might be 1.0575x faster
   min-boolean                                        2.4480+-0.0345     ?      2.4501+-0.0238        ?
   minus-boolean-double                               3.1535+-0.0215     ?      3.4152+-0.3943        ? might be 1.0830x slower
   minus-boolean                                      2.3483+-0.0462     ^      2.2670+-0.0200        ^ definitely 1.0359x faster
   misc-strict-eq                                    37.2103+-0.6481     ?     38.4065+-0.7791        ? might be 1.0321x slower
   mod-boolean-double                                10.9682+-0.2090     ?     10.9694+-0.2255        ?
   mod-boolean                                        7.9917+-0.2549            7.8161+-0.0273          might be 1.0225x faster
   mul-boolean-double                                 3.7066+-0.0633     ?      3.7077+-0.0650        ?
   mul-boolean                                        2.8790+-0.0347     ?      2.9493+-0.1634        ? might be 1.0244x slower
   neg-boolean                                        3.2208+-0.0265     ?      3.2339+-0.1418        ?
   negative-zero-divide                               0.3291+-0.0098            0.3269+-0.0104        
   negative-zero-modulo                               0.3629+-0.0501            0.3300+-0.0157          might be 1.0998x faster
   negative-zero-negate                               0.3128+-0.0182            0.3101+-0.0046        
   nested-function-parsing                           20.8500+-0.2196     ?     21.0886+-0.8165        ? might be 1.0114x slower
   new-array-buffer-dead                              2.7268+-0.0238     ?      2.7546+-0.0550        ? might be 1.0102x slower
   new-array-buffer-push                              7.1215+-0.2901            7.0613+-0.5591        
   new-array-dead                                    12.3449+-0.2106     ?     12.7515+-1.0964        ? might be 1.0329x slower
   new-array-push                                     5.4430+-0.3324     ?      5.5147+-0.4097        ? might be 1.0132x slower
   number-test                                        3.0253+-0.0621            2.9964+-0.0275        
   object-closure-call                                5.5119+-0.1210            5.4504+-0.0619          might be 1.0113x faster
   object-test                                        3.2701+-0.2840            3.1639+-0.2312          might be 1.0336x faster
   obvious-sink-pathology-taken                     146.7008+-2.3642          145.6205+-3.3130        
   obvious-sink-pathology                           139.9385+-2.1581     ?    141.0060+-2.0899        ?
   obviously-elidable-new-object                     34.3156+-0.5987     ?     35.5563+-1.8956        ? might be 1.0362x slower
   plus-boolean-arith                                 2.4845+-0.0420     ?      2.4918+-0.0182        ?
   plus-boolean-double                                3.2230+-0.0627     ?      3.2979+-0.2993        ? might be 1.0232x slower
   plus-boolean                                       2.4230+-0.1478     ?      2.4491+-0.1882        ? might be 1.0108x slower
   poly-chain-access-different-prototypes-simple   
                                                      3.3706+-0.1546            3.2748+-0.0286          might be 1.0293x faster
   poly-chain-access-different-prototypes             2.7994+-0.0706     ?      3.0865+-0.6138        ? might be 1.1026x slower
   poly-chain-access-simpler                          3.2745+-0.0556     ?      3.2941+-0.0487        ?
   poly-chain-access                                  2.9673+-0.6810            2.6779+-0.2305          might be 1.1081x faster
   poly-stricteq                                     59.4508+-3.1628     ?     59.8458+-3.0489        ?
   polymorphic-array-call                             1.7893+-0.0838     ?      1.8442+-0.1118        ? might be 1.0307x slower
   polymorphic-get-by-id                              3.0990+-0.0389     ?      3.1760+-0.0857        ? might be 1.0249x slower
   polymorphic-put-by-id                             30.4488+-1.5188           28.9930+-1.9179          might be 1.0502x faster
   polymorphic-structure                             14.9955+-0.1447     ?     15.1687+-0.7919        ? might be 1.0115x slower
   polyvariant-monomorphic-get-by-id                  8.5373+-0.1812     ?      8.7954+-0.4617        ? might be 1.0302x slower
   proto-getter-access                                9.8432+-0.1300     ?      9.9282+-0.1132        ?
   put-by-id-replace-and-transition                   8.5701+-0.3818            8.3542+-0.1956          might be 1.0258x faster
   put-by-id-slightly-polymorphic                     2.8316+-0.0343     ?      2.8347+-0.0338        ?
   put-by-id                                         13.3614+-0.7100           12.9407+-0.6769          might be 1.0325x faster
   put-by-val-direct                                  0.5614+-0.0229            0.5599+-0.0182        
   put-by-val-large-index-blank-indexing-type   
                                                      5.9287+-0.3912     ?      6.0675+-0.6097        ? might be 1.0234x slower
   put-by-val-machine-int                             2.4263+-0.0472     ?      2.4747+-0.1092        ? might be 1.0200x slower
   rare-osr-exit-on-local                            15.5075+-0.8456           14.9412+-0.1920          might be 1.0379x faster
   register-pressure-from-osr                        21.7576+-0.4090           21.5243+-0.3046          might be 1.0108x faster
   setter                                             5.2311+-0.0884     ?      5.4144+-0.1498        ? might be 1.0350x slower
   simple-activation-demo                            25.2681+-0.6331     ?     26.8905+-1.7783        ? might be 1.0642x slower
   simple-getter-access                              12.8017+-0.1970           12.7620+-0.7732        
   simple-poly-call-nested                            8.2098+-0.2405            7.9786+-0.2460          might be 1.0290x faster
   simple-poly-call                                   1.3556+-0.1334            1.2842+-0.0828          might be 1.0556x faster
   sin-boolean                                       22.8663+-1.4847     ?     24.3697+-1.8229        ? might be 1.0657x slower
   sinkable-new-object-dag                           69.1835+-1.6499     ?     69.9971+-3.0611        ? might be 1.0118x slower
   sinkable-new-object-taken                         52.1927+-2.7315     ?     53.8577+-1.1351        ? might be 1.0319x slower
   sinkable-new-object                               38.5998+-1.2861           38.2748+-1.0538        
   slow-array-profile-convergence                     2.9017+-0.4325            2.7742+-0.0516          might be 1.0460x faster
   slow-convergence                                   3.3162+-0.1511            3.1982+-0.0946          might be 1.0369x faster
   sparse-conditional                                 1.0981+-0.0167            1.0933+-0.0521        
   splice-to-remove                                  18.3218+-2.3337           17.1922+-1.7737          might be 1.0657x faster
   string-char-code-at                               16.0196+-0.2208     ?     16.2870+-0.4666        ? might be 1.0167x slower
   string-concat-object                               2.2061+-0.3297            2.1204+-0.1832          might be 1.0404x faster
   string-concat-pair-object                          2.1062+-0.1189            2.0886+-0.1188        
   string-concat-pair-simple                         10.6641+-0.3812     ?     10.9228+-0.9776        ? might be 1.0243x slower
   string-concat-simple                              11.2246+-1.2490           10.8890+-0.6683          might be 1.0308x faster
   string-cons-repeat                                 7.7460+-0.8757            7.1683+-0.4689          might be 1.0806x faster
   string-cons-tower                                  7.7888+-0.8989            7.6854+-0.7778          might be 1.0134x faster
   string-equality                                   17.7032+-0.6453           17.6422+-0.8344        
   string-get-by-val-big-char                         7.1570+-0.1437            7.0146+-0.2631          might be 1.0203x faster
   string-get-by-val-out-of-bounds-insane             3.9580+-0.1201            3.9516+-0.1440        
   string-get-by-val-out-of-bounds                    5.2054+-0.0327     ?      5.2252+-0.0746        ?
   string-get-by-val                                  3.4185+-0.1495     ?      3.4698+-0.1464        ? might be 1.0150x slower
   string-hash                                        2.0516+-0.1199            2.0177+-0.0799          might be 1.0168x faster
   string-long-ident-equality                        14.4205+-0.1888           14.3978+-0.3768        
   string-out-of-bounds                              15.2197+-0.7379           15.0188+-0.6588          might be 1.0134x faster
   string-repeat-arith                               32.2249+-1.5952     ?     32.6528+-2.3705        ? might be 1.0133x slower
   string-sub                                        67.4901+-1.2528     ^     62.1280+-1.4815        ^ definitely 1.0863x faster
   string-test                                        2.9690+-0.0431            2.9434+-0.0705        
   string-var-equality                               31.4433+-1.9899           29.9235+-0.6591          might be 1.0508x faster
   structure-hoist-over-transitions                   2.4035+-0.0320     ?      2.4058+-0.0363        ?
   substring-concat-weird                            40.1316+-1.3752     ?     40.7996+-1.7261        ? might be 1.0166x slower
   substring-concat                                  41.7932+-2.3356     ?     42.1058+-1.0034        ?
   substring                                         47.5568+-2.5668     ?     47.8192+-2.8245        ?
   switch-char-constant                               2.7146+-0.0438     ?      2.7434+-0.1115        ? might be 1.0106x slower
   switch-char                                        7.4245+-0.6862            7.3234+-1.0336          might be 1.0138x faster
   switch-constant                                    9.5985+-0.2074            9.4740+-0.4579          might be 1.0131x faster
   switch-string-basic-big-var                       15.0121+-0.1511     ?     15.0950+-0.5064        ?
   switch-string-basic-big                           14.3547+-1.5301           13.7932+-0.3381          might be 1.0407x faster
   switch-string-basic-var                           15.0741+-1.4342     ?     15.5256+-1.6341        ? might be 1.0299x slower
   switch-string-basic                               13.8524+-1.5005     ?     13.8996+-1.3671        ?
   switch-string-big-length-tower-var                20.7062+-1.9491     ?     21.4915+-1.8856        ? might be 1.0379x slower
   switch-string-length-tower-var                    16.2952+-1.9500           14.9924+-0.7845          might be 1.0869x faster
   switch-string-length-tower                        13.0844+-1.0293     ?     13.8825+-1.8948        ? might be 1.0610x slower
   switch-string-short                               14.3742+-1.8559           13.9345+-1.6566          might be 1.0316x faster
   switch                                            11.9159+-0.7100     ?     11.9211+-0.7334        ?
   tear-off-arguments-simple                          1.8586+-0.0711            1.8547+-0.0481        
   tear-off-arguments                                 2.7631+-0.0550     ^      2.6707+-0.0169        ^ definitely 1.0346x faster
   temporal-structure                                12.4395+-0.4494     ?     12.4846+-0.4091        ?
   to-int32-boolean                                  13.6075+-0.0792     ?     13.8922+-0.7283        ? might be 1.0209x slower
   undefined-property-access                        384.9645+-3.7653     ?    388.2348+-5.3169        ?
   undefined-test                                     3.0744+-0.0282            3.0430+-0.0418          might be 1.0103x faster
   unprofiled-licm                                   23.1536+-0.4872     ?     23.6820+-2.2715        ? might be 1.0228x slower
   weird-inlining-const-prop                          2.1232+-0.1320     ?      2.1650+-0.0933        ? might be 1.0197x slower

   &lt;arithmetic&gt;                                      18.0680+-0.0400     ?     18.0838+-0.0708        ? might be 1.0009x slower
   &lt;geometric&gt; *                                      8.2389+-0.0182            8.2200+-0.0270          might be 1.0023x faster
   &lt;harmonic&gt;                                         4.1054+-0.0231            4.0720+-0.0179          might be 1.0082x faster

                                                        TipOfTree               FixScopeWatch                                   
AsmBench:
   bigfib.cpp                                       502.1099+-4.5136          500.6292+-4.1497        
   cray.c                                           435.5160+-2.9687          435.4919+-4.7503        
   dry.c                                            492.4881+-10.1834    ?    493.6556+-6.3062        ?
   FloatMM.c                                        738.7523+-11.5013    ?    741.8955+-7.7642        ?
   gcc-loops.cpp                                   4576.1697+-748.7347       4289.2809+-18.1577         might be 1.0669x faster
   n-body.c                                        1001.8194+-12.0359    ?   1011.4697+-14.8828       ?
   Quicksort.c                                      446.2690+-2.8736          445.8959+-9.5492        
   stepanov_container.cpp                          3607.7000+-11.4234    ?   3626.6026+-25.5220       ?
   Towers.c                                         266.9207+-2.0538          265.7710+-3.2162        

   &lt;arithmetic&gt;                                    1340.8606+-82.6522        1312.2991+-4.3582          might be 1.0218x faster
   &lt;geometric&gt; *                                    813.1618+-12.9884         809.2278+-2.7980          might be 1.0049x faster
   &lt;harmonic&gt;                                       593.7464+-1.3391          593.1946+-2.2074          might be 1.0009x faster

                                                        TipOfTree               FixScopeWatch                                   
CompressionBench:
   huffman                                          504.6232+-4.6186     ^    485.0496+-13.0504       ^ definitely 1.0404x faster
   arithmetic-simple                                419.7004+-3.0163          414.8155+-5.2493          might be 1.0118x faster
   arithmetic-precise                               318.6183+-2.2796          316.4543+-3.4958        
   arithmetic-complex-precise                       318.3165+-5.0031          315.7588+-4.5303        
   arithmetic-precise-order-0                       454.1493+-5.1597          443.8042+-5.9946          might be 1.0233x faster
   arithmetic-precise-order-1                       358.4477+-4.9916          356.4295+-5.8794        
   arithmetic-precise-order-2                       389.2369+-4.4262     ?    392.3912+-7.0996        ?
   arithmetic-simple-order-1                        450.9943+-6.4564          444.6961+-5.4135          might be 1.0142x faster
   arithmetic-simple-order-2                        496.6518+-4.7088          494.2913+-9.8081        
   lz-string                                        340.4488+-6.0759          335.6356+-1.8921          might be 1.0143x faster

   &lt;arithmetic&gt;                                     405.1187+-0.8772     ^    399.9326+-1.9149        ^ definitely 1.0130x faster
   &lt;geometric&gt; *                                    399.5683+-0.8247     ^    394.7948+-1.7318        ^ definitely 1.0121x faster
   &lt;harmonic&gt;                                       394.0692+-0.8941     ^    389.6772+-1.6030        ^ definitely 1.0113x faster

                                                        TipOfTree               FixScopeWatch                                   
All benchmarks:
   &lt;arithmetic&gt;                                     100.4300+-1.9447           99.7581+-0.1594          might be 1.0067x faster
   &lt;geometric&gt;                                       13.4793+-0.0268           13.4381+-0.0311          might be 1.0031x faster
   &lt;harmonic&gt;                                         3.3899+-0.0122     ^      3.3609+-0.0085        ^ definitely 1.0086x faster

                                                        TipOfTree               FixScopeWatch                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                   64.9407+-0.4128           64.6593+-0.2560          might be 1.0044x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073941</commentid>
    <comment_count>4</comment_count>
      <attachid>247826</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-03 20:23:03 -0800</bug_when>
    <thetext>Comment on attachment 247826
the patch

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

Overall I think this is a better approach. Honestly, I don&apos;t know enough about this code to catch a bug in review.

rs=me but if you are not confident about everything, better get a second review.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3626
&gt; +            // loads from the scope register later, as that would prevent the DFG from trackign the

Typo here: trackign

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3633
&gt; +            if (JSFunction* function = callee-&gt;dynamicCastConstant&lt;JSFunction*&gt;())
&gt; +                result = weakJSConstant(function-&gt;scope());
&gt; +            else
&gt; +                result = addToGraph(GetScope, callee);

Personally I would not bother with this unless it makes a difference in benchmarks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073966</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-03 21:27:43 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/180989</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247814</attachid>
            <date>2015-03-03 16:45:29 -0800</date>
            <delta_ts>2015-03-03 19:19:44 -0800</delta_ts>
            <desc>the basic idea</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30952</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4MDk2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTMyOSw3ICsxMzI5LDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAgICAgbV9ncmFwaCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgCi0gICAgY2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50
OgogICAgIGNhc2UgVHlwZWRBcnJheVdhdGNocG9pbnQ6CiAgICAgICAgIGJyZWFrOwogICAgIApA
QCAtMTQ1MCw3ICsxNDQ5LDEzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIEdldFNjb3Bl
OiAvLyBGSVhNRTogV2UgY291bGQgZ2V0IHJpZCBvZiB0aGVzZSBpZiB3ZSBrbm93IHRoYXQgdGhl
IEpTRnVuY3Rpb24gaXMgYSBjb25zdGFudC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwNjIwMgorICAgIGNhc2UgR2V0U2NvcGU6CisgICAgICAgIGlmIChKU1ZhbHVl
IGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3ZhbHVlKSB7CisgICAgICAgICAgICBp
ZiAoSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPihiYXNl
KSkgeworICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShm
dW5jdGlvbi0+c2NvcGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjT2JqZWN0T3Ro
ZXIpOwogICAgICAgICBicmVhazsKIApAQCAtMTQ2OSw2ICsxNDc0LDEwIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IEdldENsb3N1cmVWYXI6CisgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC50cnlH
ZXRDb25zdGFudENsb3N1cmVWYXIoZm9yTm9kZShub2RlLT5jaGlsZDEoKSksIFZpcnR1YWxSZWdp
c3Rlcihub2RlLT52YXJOdW1iZXIoKSkpKSB7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2Rl
LCAqbV9ncmFwaC5mcmVlemUodmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKQEAgLTE5NjgsNyArMTk3Nyw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6CiAg
ICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50OgogICAgIGNhc2UgUHV0R2xvYmFsVmFyOgog
ICAgIGNhc2UgTm90aWZ5V3JpdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTgwOTY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3Nyw4ICsyNzcsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGNh
bGxlZSA9IGlubGluZUNhbGxGcmFtZSgpLT5jYWxsZWVDb25zdGFudCgpOwogICAgICAgICAgICAg
ICAgIGlmIChvcGVyYW5kLm9mZnNldCgpID09IEpTU3RhY2s6OkNhbGxlZSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNhbGxlZSk7Ci0gICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQgPT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0
ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNhbGxlZS0+
c2NvcGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAob3BlcmFuZC5vZmZz
ZXQoKSA9PSBKU1N0YWNrOjpDYWxsZWUpCiAgICAgICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChH
ZXRDYWxsZWUpOwpAQCAtMzQ3LDE2ICszNDUsNiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAg
dW5zaWduZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKIAotICAgICAgICBpZiAobG9jYWwg
PCBtX2xvY2FsV2F0Y2hwb2ludHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoVmFyaWFibGVX
YXRjaHBvaW50U2V0KiBzZXQgPSBtX2xvY2FsV2F0Y2hwb2ludHNbbG9jYWxdKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzZXQtPmluZmVycmVkVmFsdWUoKSkgewotICAg
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9pbnQsIE9w
SW5mbyhtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkpOwotICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFZhcmlhYmxlV2F0Y2hwb2ludCwgT3BJbmZvKHNldCkpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQodmFsdWUpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKICAgICAgICAgYm9vbCBpc0Nh
cHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwgaW5saW5lQ2FsbEZyYW1l
KCkpOwogICAgICAgICAKQEAgLTg5MSw4ICs4NzksNiBAQCBwcml2YXRlOgogCiAgICAgSGFzaE1h
cDxDb25zdGFudEJ1ZmZlcktleSwgdW5zaWduZWQ+IG1fY29uc3RhbnRCdWZmZXJDYWNoZTsKICAg
ICAKLSAgICBWZWN0b3I8VmFyaWFibGVXYXRjaHBvaW50U2V0KiwgMTY+IG1fbG9jYWxXYXRjaHBv
aW50czsKLSAgICAKICAgICBzdHJ1Y3QgSW5saW5lU3RhY2tFbnRyeSB7CiAgICAgICAgIEJ5dGVD
b2RlUGFyc2VyKiBtX2J5dGVDb2RlUGFyc2VyOwogICAgICAgICAKQEAgLTM0MzIsNyArMzQxOCw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
ICAgICBKU0xleGljYWxFbnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25tZW50ID0gY3VycmVudElu
c3RydWN0aW9uWzZdLnUubGV4aWNhbEVudmlyb25tZW50LmdldCgpOwogICAgICAgICAgICAgICAg
IGlmIChsZXhpY2FsRW52aXJvbm1lbnQKICAgICAgICAgICAgICAgICAgICAgJiYgbGV4aWNhbEVu
dmlyb25tZW50LT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UuaXNTdGlsbFZh
bGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChGdW5jdGlvblJlZW50cnlX
YXRjaHBvaW50LCBPcEluZm8obGV4aWNhbEVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkobGV4aWNh
bEVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UpOwogICAg
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldERpcmVjdChtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpKSkpOwogICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KGRzdCksIHdlYWtKU0NvbnN0YW50KGxleGljYWxFbnZpcm9ubWVudCkpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTM0OTEsNyArMzQ3Nyw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAg
ICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwot
ICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5
bWJvbFRhYmxlKCktPmdldCh1aWQpOworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+bV9sb2NrKTsKKyAgICAgICAg
ICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLT5nZXQobG9ja2VyLCB1aWQpOwogICAgICAgICAgICAgICAgIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldCogd2F0Y2hwb2ludFNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKTsKICAgICAgICAgICAg
ICAgICBKU1ZhbHVlIGluZmVycmVkVmFsdWUgPQogICAgICAgICAgICAgICAgICAgICB3YXRjaHBv
aW50U2V0ID8gd2F0Y2hwb2ludFNldC0+aW5mZXJyZWRWYWx1ZSgpIDogSlNWYWx1ZSgpOwpAQCAt
MzUwMSw3ICszNDg4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChWYXJpYWJsZVdhdGNocG9pbnQs
IE9wSW5mbyh3YXRjaHBvaW50U2V0KSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBv
aW50cygpLmFkZExhemlseSh3YXRjaHBvaW50U2V0KTsKICAgICAgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KGluZmVycmVkVmFsdWUpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTM1MDksMjUgKzM0OTYsMTYgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICAgICAgICAgIE5vZGUqIHNjb3BlTm9kZSA9IGdldChWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUpKTsKLSAgICAgICAgICAgICAgICBpZiAoSlNMZXhpY2FsRW52aXJvbm1l
bnQqIGxleGljYWxFbnZpcm9ubWVudCA9IG1fZ3JhcGgudHJ5R2V0QWN0aXZhdGlvbihzY29wZU5v
ZGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGxl
eGljYWxFbnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKTsKLSAgICAgICAgICAgICAgICAgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7Ci0gICAgICAgICAg
ICAgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS0+
ZmluZChsb2NrZXIsIHVpZCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyICE9IHN5
bWJvbFRhYmxlLT5lbmQobG9ja2VyKSk7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlV2F0
Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHdhdGNocG9pbnRTZXQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gd2F0Y2hwb2ludFNldC0+aW5mZXJyZWRWYWx1
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBz
Y29wZU5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoVmFyaWFi
bGVXYXRjaHBvaW50LCBPcEluZm8od2F0Y2hwb2ludFNldCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQodmFsdWUp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChKU1Zh
bHVlIHZhbHVlID0gbV9ncmFwaC50cnlHZXRDb25zdGFudENsb3N1cmVWYXIoc2NvcGVOb2RlLCBW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgc2NvcGVOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudCh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKGRzdCksCi0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0Q2xv
c3VyZVZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbiksIAotICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChHZXRDbG9zdXJlUmVnaXN0ZXJzLCBzY29wZU5vZGUp
KSk7CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoCisgICAgICAgICAgICAgICAgICAg
ICAgICBHZXRDbG9zdXJlVmFyLCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhwcmVkaWN0aW9uKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlTm9kZSwgYWRkVG9HcmFwaChHZXRDbG9zdXJl
UmVnaXN0ZXJzLCBzY29wZU5vZGUpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYXNlIER5bmFtaWM6CkBAIC0zNjQzLDcgKzM2MjEsMTcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBvcF9nZXRfc2NvcGU6IHsKLSAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3Jh
cGgoR2V0U2NvcGUsIGdldChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkpKTsKKyAg
ICAgICAgICAgIC8vIEhlbHAgdGhlIGxhdGVyIHN0YWdlcyBhIGJpdCBieSBkb2luZyBzb21lIHNt
YWxsIGNvbnN0YW50IGZvbGRpbmcgaGVyZS4gTm90ZSB0aGF0IHRoaXMKKyAgICAgICAgICAgIC8v
IG9ubHkgaGVscHMgZm9yIHRoZSBmaXJzdCBiYXNpYyBibG9jay4gSXQncyBleHRyZW1lbHkgaW1w
b3J0YW50IG5vdCB0byBjb25zdGFudCBmb2xkCisgICAgICAgICAgICAvLyBsb2FkcyBmcm9tIHRo
ZSBzY29wZSByZWdpc3RlciBsYXRlciwgYXMgdGhhdCB3b3VsZCBwcmV2ZW50IHRoZSBERkcgZnJv
bSB0cmFja2lnbiB0aGUKKyAgICAgICAgICAgIC8vIGJ5dGVjb2RlLWxldmVsIGxpdmVuZXNzIG9m
IHRoZSBzY29wZSByZWdpc3Rlci4KKyAgICAgICAgICAgIE5vZGUqIGNhbGxlZSA9IGdldChWaXJ0
dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgICAgICAgICBOb2RlKiByZXN1bHQ7
CisgICAgICAgICAgICBpZiAoSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsZWUtPmR5bmFtaWND
YXN0Q29uc3RhbnQ8SlNGdW5jdGlvbio+KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gd2Vh
a0pTQ29uc3RhbnQoZnVuY3Rpb24tPnNjb3BlKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGFkZFRvR3JhcGgoR2V0U2NvcGUsIGNhbGxlZSk7CisgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
LCByZXN1bHQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Njb3BlKTsKICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC00MTI4LDIyICs0MTE2LDYgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgbV9kZmdDb2RlQmxvY2stPmdldFN0dWJJbmZvTWFw
KG1fZGZnU3R1YkluZm9zKTsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jYXB0
dXJlQ291bnQoKSkgewotICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBtX2NvZGVC
bG9jay0+c3ltYm9sVGFibGUoKTsKLSAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
c3ltYm9sVGFibGUtPm1fbG9jayk7Ci0gICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBzeW1ib2xUYWJsZS0+YmVnaW4obG9ja2VyKTsKLSAgICAgICAgU3ltYm9sVGFibGU6
Ok1hcDo6aXRlcmF0b3IgZW5kID0gc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpOwotICAgICAgICBm
b3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICAgICAgVmFyaWFibGVXYXRjaHBv
aW50U2V0KiBzZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7Ci0gICAgICAgICAgICBp
ZiAoIXNldCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHNpemVfdCBp
bmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4oVmlydHVhbFJlZ2lzdGVyKGl0ZXItPnZhbHVlLmdl
dEluZGV4KCkpLnRvTG9jYWwoKSk7Ci0gICAgICAgICAgICB3aGlsZSAobV9sb2NhbFdhdGNocG9p
bnRzLnNpemUoKSA8PSBpbmRleCkKLSAgICAgICAgICAgICAgICBtX2xvY2FsV2F0Y2hwb2ludHMu
YXBwZW5kKG51bGxwdHIpOwotICAgICAgICAgICAgbV9sb2NhbFdhdGNocG9pbnRzW2luZGV4XSA9
IHNldDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGlu
ZVN0YWNrRW50cnkoCiAgICAgICAgIHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkQmxvY2ss
IDAsIDAsIFZpcnR1YWxSZWdpc3RlcigpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwKICAgICAgICAgbV9j
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgSW5saW5lQ2FsbEZyYW1lOjpDYWxsKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxODA5
NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAwLDcgKzMwMCw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6CiAgICAgY2FzZSBUeXBlZEFycmF5V2F0Y2hw
b2ludDoKICAgICAgICAgcmVhZChXYXRjaHBvaW50X2ZpcmUpOwogICAgICAgICB3cml0ZShTaWRl
U3RhdGUpOwpAQCAtMzI2LDEwICszMjUsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlCiAgICAgICAgIHdyaXRlKFdhdGNocG9pbnRfZmlyZSk7CiAgICAgICAgIHJl
dHVybjsKIAotICAgIGNhc2UgRnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludDoKLSAgICAgICAgcmVh
ZChXYXRjaHBvaW50X2ZpcmUpOwotICAgICAgICByZXR1cm47Ci0KICAgICBjYXNlIFRvVGhpczoK
ICAgICBjYXNlIENyZWF0ZVRoaXM6CiAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CkBAIC03ODYs
NyArNzgxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAg
ICAgICAKICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVh
cChWYXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRp
b24oQ2xvc3VyZVZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT52YXJO
dW1iZXIoKSksIG5vZGUtPmNoaWxkMigpKSwgbm9kZS0+Y2hpbGQzKCkubm9kZSgpKTsKKyAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihDbG9zdXJlVmFyaWFibGVMb2MsIEFic3RyYWN0SGVhcChWYXJp
YWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSwgbm9kZS0+Y2hpbGQxKCkpLCBub2RlLT5jaGlsZDMo
KS5ub2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0R2xvYmFs
VmFyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNp
b24gMTgwOTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDYgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlKQogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKICAgICBjYXNlIEdldEdsb2Jh
bFZhcjoKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKLSAgICBjYXNlIFZhcmlhYmxlV2F0Y2hwb2lu
dDoKICAgICBjYXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6CiAgICAgY2FzZSBDaGVja0NlbGw6
CiAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CkBAIC0xNjgsNyArMTY3LDYg
QEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgU3RvcmVC
YXJyaWVyV2l0aE51bGxDaGVjazoKICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgogICAgIGNh
c2UgTm90aWZ5V3JpdGU6Ci0gICAgY2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgogICAg
IGNhc2UgVHlwZWRBcnJheVdhdGNocG9pbnQ6CiAgICAgY2FzZSBDaGVja0luQm91bmRzOgogICAg
IGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTgwOTY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk1
LDYgKzg5NSwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAor
ICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25D
ZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CiAgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjogewogICAgICAgICAgICAgZml4RWRnZTxLbm93
bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGluc2VydFN0b3JlQmFycmll
cihtX2luZGV4SW5CbG9jaywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMygpKTsKQEAgLTEy
MjYsNyArMTIzMSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIGNh
c2UgUGhhbnRvbUxvY2FsOgogICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6Ci0gICAgICAg
IGNhc2UgR2V0Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgICAg
IGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgICAgIGNhc2UgVmFyaWFibGVXYXRjaHBvaW50OgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4MDk2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTIsOCArMzEyLDYgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBj
b25zdAogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJeIiwgbm9kZS0+cGhpKCktPmluZGV4KCkp
OwogICAgIGlmIChub2RlLT5oYXNFeGVjdXRpb25Db3VudGVyKCkpCiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgUmF3UG9pbnRlcihub2RlLT5leGVjdXRpb25Db3VudGVyKCkpKTsKLSAgICBpZiAo
bm9kZS0+aGFzVmFyaWFibGVXYXRjaHBvaW50U2V0KCkpCi0gICAgICAgIG91dC5wcmludChjb21t
YSwgUmF3UG9pbnRlcihub2RlLT52YXJpYWJsZVdhdGNocG9pbnRTZXQoKSkpOwogICAgIGlmIChu
b2RlLT5oYXNUeXBlZEFycmF5KCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5Db250ZXh0
KEpTVmFsdWUobm9kZS0+dHlwZWRBcnJheSgpKSwgY29udGV4dCkpOwogICAgIGlmIChub2RlLT5o
YXNTdG9yYWdlUG9pbnRlcigpKQpAQCAtMTAxNCw2ICsxMDEyLDUxIEBAIEpTVmFsdWUgR3JhcGg6
OnRyeUdldENvbnN0YW50UHJvcGVydHkoY28KICAgICByZXR1cm4gdHJ5R2V0Q29uc3RhbnRQcm9w
ZXJ0eShiYXNlLm1fdmFsdWUsIGJhc2UubV9zdHJ1Y3R1cmUsIG9mZnNldCk7CiB9CiAKK0pTVmFs
dWUgR3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZhcihKU1ZhbHVlIGJhc2UsIFZpcnR1YWxS
ZWdpc3RlciByZWcpCit7CisgICAgaWYgKCFiYXNlKQorICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OworICAgIAorICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBhY3RpdmF0aW9uID0ganNEeW5hbWlj
Q2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGJhc2UpOworICAgIGlmICghYWN0aXZhdGlvbikK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAKKyAgICBTeW1ib2xUYWJsZSogc3ltYm9s
VGFibGUgPSBhY3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgpOworICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgIAorICAgIGlmIChzeW1ib2xUYWJs
ZS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLmhhc0JlZW5JbnZhbGlkYXRlZCgpKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSgpOworICAgIAorICAgIFN5bWJvbFRhYmxlRW50cnkqIGVudHJ5ID0gc3lt
Ym9sVGFibGUtPmVudHJ5Rm9yKGxvY2tlciwgcmVnKTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOworICAgIAorICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0
ID0gZW50cnktPndhdGNocG9pbnRTZXQoKTsKKyAgICBpZiAoIXNldCkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKKyAgICAKKyAgICBKU1ZhbHVlIHZhbHVlID0gc2V0LT5pbmZlcnJlZFZhbHVl
KCk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAKKyAg
ICB3YXRjaHBvaW50cygpLmFkZExhemlseShzeW1ib2xUYWJsZS0+bV9mdW5jdGlvbkVudGVyZWRP
bmNlKTsKKyAgICB3YXRjaHBvaW50cygpLmFkZExhemlseShzZXQpOworICAgIAorICAgIHJldHVy
biB2YWx1ZTsKK30KKworSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRDbG9zdXJlVmFyKGNv
bnN0IEFic3RyYWN0VmFsdWUmIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQoreworICAgIHJl
dHVybiB0cnlHZXRDb25zdGFudENsb3N1cmVWYXIodmFsdWUubV92YWx1ZSwgcmVnKTsKK30KKwor
SlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRDbG9zdXJlVmFyKE5vZGUqIG5vZGUsIFZpcnR1
YWxSZWdpc3RlciByZWcpCit7CisgICAgaWYgKCFub2RlLT5oYXNDb25zdGFudCgpKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOworICAgIHJldHVybiB0cnlHZXRDb25zdGFudENsb3N1cmVWYXIo
bm9kZS0+YXNKU1ZhbHVlKCksIHJlZyk7Cit9CisKIEpTTGV4aWNhbEVudmlyb25tZW50KiBHcmFw
aDo6dHJ5R2V0QWN0aXZhdGlvbihOb2RlKiBub2RlKQogewogICAgIHJldHVybiBub2RlLT5keW5h
bWljQ2FzdENvbnN0YW50PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4MDk2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNzQxLDcgKzc0MSw5
IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIHRyeUdldENvbnN0YW50UHJvcGVydHkoSlNWYWx1ZSBi
YXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiwgUHJvcGVydHlPZmZzZXQpOwogICAg
IEpTVmFsdWUgdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShjb25zdCBBYnN0cmFjdFZhbHVlJiwgUHJv
cGVydHlPZmZzZXQpOwogICAgIAotICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiB0cnlHZXRBY3Rp
dmF0aW9uKE5vZGUqKTsKKyAgICBKU1ZhbHVlIHRyeUdldENvbnN0YW50Q2xvc3VyZVZhcihKU1Zh
bHVlIGJhc2UsIFZpcnR1YWxSZWdpc3Rlcik7CisgICAgSlNWYWx1ZSB0cnlHZXRDb25zdGFudENs
b3N1cmVWYXIoY29uc3QgQWJzdHJhY3RWYWx1ZSYsIFZpcnR1YWxSZWdpc3Rlcik7CisgICAgSlNW
YWx1ZSB0cnlHZXRDb25zdGFudENsb3N1cmVWYXIoTm9kZSosIFZpcnR1YWxSZWdpc3Rlcik7CiAg
ICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogdHJ5R2V0UmVnaXN0ZXJzKE5vZGUqKTsKICAg
ICAKICAgICBKU0FycmF5QnVmZmVyVmlldyogdHJ5R2V0Rm9sZGFibGVWaWV3KE5vZGUqKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxODA5NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIw
MSwxNiArMTIwMSw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFzVmFyaWFi
bGVXYXRjaHBvaW50U2V0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IE5vdGlmeVdy
aXRlIHx8IG9wKCkgPT0gVmFyaWFibGVXYXRjaHBvaW50OwotICAgIH0KLSAgICAKLSAgICBWYXJp
YWJsZVdhdGNocG9pbnRTZXQqIHZhcmlhYmxlV2F0Y2hwb2ludFNldCgpCi0gICAgewotICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWYXJpYWJsZVdhdGNocG9pbnRTZXQqPihtX29wSW5m
byk7Ci0gICAgfQotICAgIAogICAgIGJvb2wgaGFzVHlwZWRBcnJheSgpCiAgICAgewogICAgICAg
ICByZXR1cm4gb3AoKSA9PSBUeXBlZEFycmF5V2F0Y2hwb2ludDsKQEAgLTEzNjQsMTcgKzEzNTQs
NiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBoYXNTeW1ib2xUYWJsZSgpCi0gICAgewotICAgICAgICByZXR1cm4gb3AoKSA9
PSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OwotICAgIH0KLSAgICAKLSAgICBTeW1ib2xUYWJs
ZSogc3ltYm9sVGFibGUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1N5bWJvbFRhYmxlKCkp
OwotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTeW1ib2xUYWJsZSo+KG1fb3BJbmZv
KTsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCBoYXNBcnJheU1vZGUoKQogICAgIHsKICAgICAgICAg
c3dpdGNoIChvcCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCShyZXZpc2lvbiAxODA5NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw5ICsxODgsNyBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0R2xvYmFsVmFyLCBOb2RlUmVzdWx0SlMp
IFwKICAgICBtYWNybyhQdXRHbG9iYWxWYXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNy
byhOb3RpZnlXcml0ZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFZhcmlhYmxlV2F0
Y2hwb2ludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFZhckluamVjdGlvbldhdGNo
cG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhGdW5jdGlvblJlZW50cnlXYXRj
aHBvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ2hlY2tDZWxsLCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ2hlY2tCYWRDZWxsLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50LCBOb2RlTXVzdEdlbmVyYXRl
KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAkocmV2aXNpb24gMTgwOTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
VG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNiBAQCBib29sIHNhZmVU
b0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgog
ICAgIGNhc2UgR2V0R2xvYmFsVmFyOgogICAgIGNhc2UgUHV0R2xvYmFsVmFyOgotICAgIGNhc2Ug
VmFyaWFibGVXYXRjaHBvaW50OgogICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDoKICAg
ICBjYXNlIENoZWNrQ2VsbDoKICAgICBjYXNlIENoZWNrQmFkQ2VsbDoKQEAgLTI1Myw3ICsyNTIs
NiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBT
dG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAg
ICAgY2FzZSBOb3RpZnlXcml0ZToKLSAgICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9pbnQ6
CiAgICAgY2FzZSBUeXBlZEFycmF5V2F0Y2hwb2ludDoKICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6
CiAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lv
biAxODA5NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjA5LDcgKzM2MDksOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIEdldENsb3N1cmVWYXI6IHsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgcmVnaXN0ZXJz
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNo
aWxkMSgpKTsKKworICAgICAgICBTdG9yYWdlT3BlcmFuZCByZWdpc3RlcnModGhpcywgbm9kZS0+
Y2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwogICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlZ2lz
dGVyc0dQUiA9IHJlZ2lzdGVycy5ncHIoKTsKQEAgLTM2MjEsNiArMzYyMyw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjogeworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+
Y2hpbGQxKCkpOworCiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHJlZ2lzdGVycyh0aGlzLCBub2Rl
LT5jaGlsZDIoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMygpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2hSZWdpc3Rlcih0aGlzKTsKQEAg
LTM2MjksOCArMzYzMyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAgICAg
IEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CiAKLSAgICAgICAg
c3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsKLQogICAgICAgICBtX2ppdC5zdG9yZTMy
KHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUtPnZh
ck51bWJlcigpICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVl
UGF5bG9hZEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVnaXN0ZXJzR1BSLCBub2RlLT52YXJO
dW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwpA
QCAtNDAzNCw4ICs0MDM2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIFZhckluamVjdGlvbldhdGNo
cG9pbnQ6Ci0gICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6IHsKKyAgICBjYXNlIFZhckluamVj
dGlvbldhdGNocG9pbnQ6IHsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTQzMTIsMTEgKzQzMTMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2Fz
ZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OiB7Ci0gICAgICAgIG5vUmVzdWx0KG5vZGUpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRz
OiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAx
ODA5NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzExLDYgKzM3MTEsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IEdldENsb3N1cmVWYXI6IHsKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNoaWxkMSgp
KTsKKwogICAgICAgICBTdG9yYWdlT3BlcmFuZCByZWdpc3RlcnModGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcg
cmVnaXN0ZXJzR1BSID0gcmVnaXN0ZXJzLmdwcigpOwpAQCAtMzcyMSwxNCArMzcyMywxNCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIFB1dENsb3N1cmVWYXI6IHsKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUs
IG5vZGUtPmNoaWxkMSgpKTsKKwogICAgICAgICBTdG9yYWdlT3BlcmFuZCByZWdpc3RlcnModGhp
cywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLT5jaGlsZDMoKSk7CiAKICAgICAgICAgR1BSUmVnIHJlZ2lzdGVyc0dQUiA9IHJlZ2lzdGVy
cy5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAKLSAgICAg
ICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsKLQogICAgICAgICBtX2ppdC5zdG9y
ZTY0KHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUtPnZh
ck51bWJlcigpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsK
ICAgICAgICAgYnJlYWs7CkBAIC00MDg3LDggKzQwODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2Ug
VmFySW5qZWN0aW9uV2F0Y2hwb2ludDoKLSAgICBjYXNlIFZhcmlhYmxlV2F0Y2hwb2ludDogewor
ICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDogewogICAgICAgICBub1Jlc3VsdChub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDM2NywxMSArNDM2OCw2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAKLSAgICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9pbnQ6IHsKLSAgICAgICAg
bm9SZXN1bHQobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCiAgICAgY2Fz
ZSBDcmVhdGVBcmd1bWVudHM6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hw
b2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4MDk2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTE3LDE4ICsxMTcsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFkZExh
emlseShqc0Nhc3Q8SlNGdW5jdGlvbio+KG1fbm9kZS0+Y2VsbE9wZXJhbmQoKS0+dmFsdWUoKSkt
PmFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVmFyaWFibGVXYXRjaHBvaW50OgotICAgICAgICAg
ICAgYWRkTGF6aWx5KG1fbm9kZS0+dmFyaWFibGVXYXRjaHBvaW50U2V0KCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKICAgICAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBv
aW50OgogICAgICAgICAgICAgYWRkTGF6aWx5KGdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25X
YXRjaHBvaW50KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgotICAgICAgICAgICAgYWRkTGF6aWx5KG1f
bm9kZS0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgVHlwZWRBcnJheVdhdGNocG9pbnQ6
CiAgICAgICAgICAgICBhZGRMYXppbHkobV9ub2RlLT50eXBlZEFycmF5KCkpOwogICAgICAgICAg
ICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCShyZXZpc2lvbiAxODA5NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxMCArMTEyLDggQEAg
aW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgU3RyaW5n
Q2hhckNvZGVBdDoKICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2Ug
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNo
cG9pbnQ6CiAgICAgY2FzZSBUeXBlZEFycmF5V2F0Y2hwb2ludDoKICAgICBjYXNlIEdldFR5cGVk
QXJyYXlCeXRlT2Zmc2V0OgotICAgIGNhc2UgVmFyaWFibGVXYXRjaHBvaW50OgogICAgIGNhc2Ug
Tm90aWZ5V3JpdGU6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBTdG9yZUJhcnJp
ZXJXaXRoTnVsbENoZWNrOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4MDk2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTgs
OCArODE4LDYgQEAgcHJpdmF0ZToKIAogICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAg
ICAgY2FzZSBMb29wSGludDoKLSAgICAgICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6Ci0gICAg
ICAgIGNhc2UgRnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBUeXBlZEFy
cmF5V2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6
CiAgICAgICAgIGNhc2UgTW92SGludDoKQEAgLTM1OTksNyArMzU5Nyw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjb21waWxlR2V0Q2xvc3VyZVZhcigpCiAgICAgewogICAgICAgICBzZXRKU1ZhbHVl
KG1fb3V0LmxvYWQ2NCgKLSAgICAgICAgICAgIGFkZHJlc3NGb3IobG93U3RvcmFnZShtX25vZGUt
PmNoaWxkMSgpKSwgbV9ub2RlLT52YXJOdW1iZXIoKSkpKTsKKyAgICAgICAgICAgIGFkZHJlc3NG
b3IobG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigpKSwgbV9ub2RlLT52YXJOdW1iZXIoKSkpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlUHV0Q2xvc3VyZVZhcigpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAx
ODA5NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNyw2ICsxMTcsMTAgQEAgdm9pZCBTeW1ib2xU
YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIH0KICAgICAKICAgICB2aXNpdG9yLmFk
ZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIodGhpc1N5bWJvbFRhYmxlLT5tX3dhdGNocG9pbnRDbGVh
bnVwLmdldCgpKTsKKyAgICAKKyAgICAvLyBTYXZlIHNvbWUgbWVtb3J5LiBUaGlzIGlzIE8obikg
dG8gcmVidWlsZCBhbmQgd2UgZG8gc28gb24gdGhlIGZseS4KKyAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2xvY2spOworICAgIG1fbG9jYWxUb0VudHJ5ID0gbnVsbHB0cjsKIH0KIAog
U3ltYm9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpXYXRjaHBvaW50Q2xlYW51cChTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUpCkBAIC0xMzcsNiArMTQxLDM0IEBAIHZvaWQgU3ltYm9sVGFibGU6
OldhdGNocG9pbnRDbGVhbnVwOjpmaW4KICAgICB9CiB9CiAKK2NvbnN0IFN5bWJvbFRhYmxlOjpM
b2NhbFRvV2F0Y2hwb2ludFZlYyYgU3ltYm9sVGFibGU6OmxvY2FsVG9FbnRyeShjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJikKK3sKKyAgICBpZiAoVU5MSUtFTFkoIW1fbG9jYWxUb0VudHJ5KSkg
eworICAgICAgICB1bnNpZ25lZCBzaXplID0gMDsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6
IG1fbWFwKSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnKGVudHJ5LnZhbHVlLmdl
dEluZGV4KCkpOworICAgICAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkpCisgICAgICAgICAgICAg
ICAgc2l6ZSA9IHN0ZDo6bWF4KHNpemUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZWcudG9Mb2Nh
bCgpKSArIDEpOworICAgICAgICB9CisgICAgCisgICAgICAgIG1fbG9jYWxUb0VudHJ5ID0gc3Rk
OjptYWtlX3VuaXF1ZTxMb2NhbFRvRW50cnlWZWM+KHNpemUsIG51bGxwdHIpOworICAgICAgICBm
b3IgKGF1dG8mIGVudHJ5IDogbV9tYXApIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWcoZW50cnkudmFsdWUuZ2V0SW5kZXgoKSk7CisgICAgICAgICAgICBpZiAocmVnLmlzTG9jYWwo
KSkKKyAgICAgICAgICAgICAgICBtX2xvY2FsVG9FbnRyeS0+YXQocmVnLnRvTG9jYWwoKSkgPSAm
ZW50cnkudmFsdWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuICptX2xvY2Fs
VG9FbnRyeTsKK30KKworU3ltYm9sVGFibGVFbnRyeSogU3ltYm9sVGFibGU6OmVudHJ5Rm9yKGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sK
KyAgICBpZiAoIXJlZy5pc0xvY2FsKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiBsb2NhbFRvRW50cnkobG9ja2VyKVtyZWcudG9Mb2NhbCgpXTsKK30KKwogU3ltYm9sVGFi
bGUqIFN5bWJvbFRhYmxlOjpjbG9uZUNhcHR1cmVkTmFtZXMoVk0mIHZtKQogewogICAgIFN5bWJv
bFRhYmxlKiByZXN1bHQgPSBTeW1ib2xUYWJsZTo6Y3JlYXRlKHZtKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTgwOTY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIw
MTItMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0MCw2ICszNDAsNyBAQCBwdWJsaWM6
CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgR2xvYmFsVmFyaWFibGVJ
RD4gVW5pcXVlSURNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwg
UmVmUHRyPFR5cGVTZXQ+PiBVbmlxdWVUeXBlU2V0TWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxp
bnQsIFJlZlB0cjxTdHJpbmdJbXBsPiwgV1RGOjpJbnRIYXNoPGludD4sIFdURjo6VW5zaWduZWRX
aXRoWmVyb0tleUhhc2hUcmFpdHM8aW50Pj4gUmVnaXN0ZXJUb1ZhcmlhYmxlTWFwOworICAgIHR5
cGVkZWYgVmVjdG9yPFN5bWJvbFRhYmxlRW50cnkqPiBMb2NhbFRvRW50cnlWZWM7CiAKICAgICBz
dGF0aWMgU3ltYm9sVGFibGUqIGNyZWF0ZShWTSYgdm0pCiAgICAgewpAQCAtNDI1LDYgKzQyNiw3
IEBAIHB1YmxpYzoKICAgICAKICAgICBNYXA6OkFkZFJlc3VsdCBhZGQoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50
cnkpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9sb2NhbFRvRW50cnkpOwogICAg
ICAgICByZXR1cm4gbV9tYXAuYWRkKGtleSwgZW50cnkpOwogICAgIH0KICAgICAKQEAgLTQzNiw2
ICs0MzgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgTWFwOjpBZGRSZXN1bHQgc2V0KGNvbnN0IENv
bmN1cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50
cnkmIGVudHJ5KQogICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbG9jYWxUb0VudHJ5
KTsKICAgICAgICAgcmV0dXJuIG1fbWFwLnNldChrZXksIGVudHJ5KTsKICAgICB9CiAgICAgCkBA
IC00NTYsNiArNDU5LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY29udGFpbnMobG9ja2Vy
LCBrZXkpOwogICAgIH0KICAgICAKKyAgICBjb25zdCBMb2NhbFRvRW50cnlWZWMmIGxvY2FsVG9F
bnRyeShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJik7CisgICAgU3ltYm9sVGFibGVFbnRyeSog
ZW50cnlGb3IoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFZpcnR1YWxSZWdpc3Rlcik7Cisg
ICAgCiAgICAgR2xvYmFsVmFyaWFibGVJRCB1bmlxdWVJREZvclZhcmlhYmxlKGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXksIFZNJiB2bSk7CiAgICAgR2xvYmFsVmFy
aWFibGVJRCB1bmlxdWVJREZvclJlZ2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxv
Y2tlciwgaW50IHJlZ2lzdGVySW5kZXgsIFZNJiB2bSk7CiAgICAgUmVmUHRyPFR5cGVTZXQ+IGds
b2JhbFR5cGVTZXRGb3JSZWdpc3Rlcihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIs
IGludCByZWdpc3RlckluZGV4LCBWTSYgdm0pOwpAQCAtNTI5LDYgKzUzNSw3IEBAIHByaXZhdGU6
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dBcmd1bWVudFtdPiBtX3Nsb3dBcmd1bWVudHM7CiAg
ICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRDbGVhbnVwPiBtX3dhdGNocG9pbnRD
bGVhbnVwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxMb2NhbFRvRW50cnlWZWM+IG1fbG9jYWxUb0Vu
dHJ5OwogCiBwdWJsaWM6CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2Z1bmN0aW9uRW50ZXJl
ZE9uY2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z1bmN0aW9u
LWV4cHJlc3Npb24tZXhpdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2Z1bmN0aW9uLWV4cHJlc3Npb24tZXhpdC5qcwkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnVuY3Rpb24tZXhwcmVzc2lvbi1l
eGl0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKK2Z1bmN0aW9uIGZvbyh4KSB7
CisgICAgdmFyIHRtcCA9IHggKyAxOworICAgIHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIDQy
OyB9Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsr
aSkgeworICAgIHZhciByZXN1bHQgPSBmb28oNDIpKCk7CisgICAgaWYgKHJlc3VsdCAhPSA0MikK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGluIGxvb3A6ICIgKyByZXN1bHQ7Cit9
CisKK3ZhciByZXN1bHQgPSBmb28oNDIuNSkoKTsKK2lmIChyZXN1bHQgIT0gNDIpCisgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnVuY3Rpb24tcmVlbnRyeS1pbmZlci1vbi1zZWxm
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnVu
Y3Rpb24tcmVlbnRyeS1pbmZlci1vbi1zZWxmLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdW5jdGlvbi1yZWVudHJ5LWluZmVyLW9uLXNlbGYu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOCBAQAorZnVuY3Rpb24gdGhpbmd5KGYpIHsK
KyAgICBmKCk7Cit9Citub0lubGluZSh0aGluZ3kpOworCitmdW5jdGlvbiBmb28oYSkgeworICAg
IHZhciB4OworICAgIGlmIChhKQorICAgICAgICB4ID0gYTsKKyAgICB0aGluZ3koZnVuY3Rpb24o
KSB7IHJldHVybiB4OyB9KTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwMDsgKytpKQorICAgICAgICByZXN1bHQgKz0geDsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitub0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kp
IHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKDQyKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyMDAwMDAp
CisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGZpcnN0IHJlc3VsdDogIiArIHJlc3VsdDsKK30K
KwordmFyIHJlc3VsdCA9IGZvbygwKTsKK2lmICgiIiArIHJlc3VsdCAhPSAiTmFOIikKKyAgICB0
aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2dvb2Z5LWZ1bmN0aW9uLXJlZW50cnktaW5j
b3JyZWN0LWluZmVyZW5jZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2dvb2Z5LWZ1bmN0aW9uLXJlZW50cnktaW5jb3JyZWN0LWluZmVyZW5jZS5q
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ29v
ZnktZnVuY3Rpb24tcmVlbnRyeS1pbmNvcnJlY3QtaW5mZXJlbmNlLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9uIGZvbyhhKSB7CisgICAgdmFyIHg7CisgICAgaWYg
KGEpCisgICAgICAgIHggPSBhOworICAgIHJldHVybiBbZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiB4OworICAgIH0sIGZ1bmN0aW9uKGEpIHsKKyAgICAgICAgeCA9IGE7CisgICAgfV07Cit9
CisKK3ZhciBhcnJheSA9IGZvbyhmYWxzZSk7Citub0lubGluZShhcnJheVswXSk7Citub0lubGlu
ZShhcnJheVsxXSk7CithcnJheVsxXSg0Mik7Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyAr
K2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gYXJyYXlbMF0oKTsKKyAgICBpZiAocmVzdWx0ICE9IDQy
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgaW4gbG9vcDogIiArIHJlc3VsdDsK
K30KKworYXJyYXlbMV0oNDMpOwordmFyIHJlc3VsdCA9IGFycmF5WzBdKCk7CitpZiAocmVzdWx0
ICE9IDQzKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1bHQ7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247826</attachid>
            <date>2015-03-03 19:19:44 -0800</date>
            <delta_ts>2015-03-03 20:23:03 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>35913</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwOTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBA
CisyMDE1LTAzLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBjb25zdGFudCBmb2xkIEdldFNjb3BlLCBhbmQgYWNjZXNzZXMgdG8gdGhlIHNj
b3BlIHJlZ2lzdGVyIGluIHRoZSBCeXRlQ29kZVBhcnNlciBzaG91bGQgbm90IHByZXRlbmQgdGhh
dCBpdCdzIGEgY29uc3RhbnQgYXMgdGhhdCBicmVha3MgT1NSIGV4aXQgbGl2ZW5lc3MgdHJhY2tp
bmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIw
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBmaXhlcyBhIGJ1ZyBkaXNjb3ZlcmVkIGJ5IHdvcmtpbmcgb24gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjIyOSwKKyAgICAgICAgd2hpY2ggd2FzIGlu
IHR1cm4gZGlzY292ZXJlZCBieSB3b3JraW5nIG9uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDExNzQuCisgICAgICAgIE91ciB3YXkgb2YgZGVhbGluZyB3aXRoIHNj
b3BlcyBrbm93biB0byBiZSBjb25zdGFudCBpcyB2ZXJ5IHNrZXRjaHksIGFuZCBvbmx5IHJlYWxs
eSB3b3JrcworICAgICAgICB3aGVuIGEgZnVuY3Rpb24gaXMgaW5saW5lZC4gV2hlbiBpdCBpcywg
d2UgcHJldGVuZCB0aGF0IGV2ZXJ5IGxvYWQgb2YgdGhlIHNjb3BlUmVnaXN0ZXIgc2VlcworICAg
ICAgICBhIGNvbnN0YW50LiBCdXQgdGhpcyBicmVha3MgdGhlIERGRydzIHRyYWNraW5nIG9mIHRo
ZSBsaXZlbmVzcyBvZiB0aGUgc2NvcGVSZWdpc3Rlci4gVGhlIHdheQorICAgICAgICB0aGlzIHdv
cmtlZCBtYWRlIHVzIG1pc3Mgb3BwcG9ydHVuaXRpZXMgZm9yIG9wdGltaXppbmcgYmFzZWQgb24g
YSBjb25zdGFudCBzY29wZSwgYW5kIGl0IGFsc28KKyAgICAgICAgbWVhbnQgdGhhdCBpbiBzb21l
IGNhc2VzIC0gcGFydGljdWxhcmx5IGxpa2Ugd2hlbiB3ZSBpbmxpbmUgY29kZSB0aGF0IHVzZXMg
TmV3RnVjdGlvbiBhbmQKKyAgICAgICAgZnJpZW5kcywgYXMgSSBkbyBpbiBidWcgMTQyMjI5IC0g
aXQgbWFrZXMgT1NSIGV4aXQgdGhpbmsgdGhhdCB0aGUgc2NvcGUgaXMgZGVhZCBldmVuIHRob3Vn
aAorICAgICAgICBpdCdzIG1vc3QgZGVmaW5pdGVseSBhbGl2ZSBhbmQgaXQncyBhIGNvbnN0YW50
LgorICAgICAgICAKKyAgICAgICAgVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IHdlIHdlcmUgZG9p
bmcgdG9vIG1hbnkgb3B0aW1pemF0aW9ucyBpbiB0aGUgQnl0ZUNvZGVQYXJzZXIsIGFuZCBub3QK
KyAgICAgICAgbGF0ZXIuIExhdGVyIG9wdGltaXphdGlvbiBwaGFzZXMga25vdyBob3cgdG8gcHJl
c2VydmUgT1NSIGV4aXQgbGl2ZW5lc3MuIFRoZXkncmUgYWN0dWFsbHkKKyAgICAgICAgcmVhbGx5
IGdvb2QgYXQgaXQuIEFsc28sIGxhdGVyIHBoYXNlcyBrbm93IGhvdyB0byBpbmZlciB0aGF0IGFu
eSB2YXJpYWJsZSBpcyBhIGNvbnN0YW50IG5vCisgICAgICAgIG1hdHRlciBob3cgdGhhdCBjb25z
dGFudCBhcm9zZSAtIHJhdGhlciB0aGFuIHRoZSBpbmxpbmluZy1zcGVjaWZpYyB0aGluZyBpbiBC
eXRlQ29kZVBhcnNlci4KKyAgICAgICAgCisgICAgICAgIFRoaXMgY2hhbmdlcyB0aGUgQnl0ZUNv
ZGVQYXJzZXIgdG8gbGFyZ2VseSBhdm9pZCBkb2luZyBjb25zdGFudCBmb2xkaW5nIG9uIHRoZSBz
Y29wZSwgZXhjZXB0CisgICAgICAgIG1ha2luZyB0aGUgR2V0U2NvcGUgb3BlcmF0aW9uIGl0c2Vs
ZiBhIGNvbnN0YW50LiBUaGlzIGlzIGEgY29tcGlsYXRpb24tdGltZSBoYWNrIGZvciBzbWFsbAor
ICAgICAgICBmdW5jdGlvbnMsIGFuZCBpdCBkb2Vzbid0IGJyZWFrIHRoZSBsb2FkcyBvZiBsb2Nh
bCB2YXJpYWJsZXMgLSBzbyBPU1IgZXhpdCBsaXZlbmVzcyBzdGlsbAorICAgICAgICBzZWVzIHRo
YXQgdGhlIHNjb3BlUmVnaXN0ZXIgaXMgaW4gdXNlLiBUaGlzIHRoZW4gYWRkcyBhIHZhc3RseSBt
b3JlIHBvd2VyZnVsIEdldFNjb3BlIGFuZAorICAgICAgICBHZXRDbG9zdXJlVmFyIGNvbnN0YW50
IGZvbGRlciBpbiB0aGUgQWJzdHJhY3RJbnRlcnByZXRlci4gVGhpcyBoYW5kbGVzIG1vc3QgZ2Vu
ZXJhbCBjYXNlcworICAgICAgICBpbmNsdWRpbmcgdGhvc2UgdGhhdCBhcmlzZSBpbiBjb21wbGV4
IGNvbnRyb2wgZmxvdy4gVGhpcyB3aWxsIGNhdGNoIGNhc2VzIHdoZXJlIHRoZSBzY29wZQorICAg
ICAgICBpcyBjb25zdGFudCBmb3IgYW55IG51bWJlciBvZiByZWFzb25zLiBCYXNpY2FsbHkgYW55
dGltZSB0aGF0IHRoZSBjYWxsZWUgaXMgaW5mZXJyZWQgY29uc3RhbnQKKyAgICAgICAgdGhpcyB3
aWxsIGdpdmUgdXMgYSBjb25zdGFudCBzY29wZS4gQWxzbywgd2Ugc3RpbGwgaGF2ZSB0aGUgcGFy
c2UtdGltZSBjb25zdGFudCBmb2xkaW5nIG9mCisgICAgICAgIFJlc29sdmVTY29wZSBiYXNlZCBv
biB0aGUgcmVlbnRyeSB3YXRjaHBvaW50LCB3aGljaCBsdWNraWx5IGRpZCB0aGUgcmlnaHQgdGhp
bmcgd2l0aCByZXNwZWN0CisgICAgICAgIHRvIE9TUiBleGl0IGxpdmVuZXNzIChpdCBzcGxhdHMg
YSBQaGFudG9tIG9uIGl0cyBpbnB1dHMsIGFuZCBpdCBwcm9kdWNlcyBhIGNvbnN0YW50IHJlc3Vs
dAorICAgICAgICB3aGljaCBpcyB0aGVuIHNldCgpIG5vcm1hbGx5KS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgYXBwZWFycyB0byBiZSBhIGJyb2FkIHNwZWVkLXVwLCBhbGJlaXQgYSBzbWFsbCBv
bmUuIEJ1dCBtYWlubHkgaXQgdW5ibG9ja3MgYnVnIDE0MjIyOSwKKyAgICAgICAgd2hpY2ggdGhl
biBzaG91bGQgdW5ibG9jayBidWcgMTQxMTc0LgorCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpnZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2Ji
ZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcv
REZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRm
Zy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1
cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OnRyeUdldFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldEFj
dGl2YXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAq
IGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVmFyaWFibGVXYXRj
aHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTeW1ib2xUYWJsZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3ltYm9sVGFibGUpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVj
dXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAq
IGRmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlOjpoYW5kbGUpOgorICAgICAgICAqIGZ0bC9GVExD
YXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAg
ICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUdldENsb3N1cmVWYXIpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUu
Y3BwOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAg
IChKU0M6OlN5bWJvbFRhYmxlOjpsb2NhbFRvRW50cnkpOgorICAgICAgICAoSlNDOjpTeW1ib2xU
YWJsZTo6ZW50cnlGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuaDoKKyAgICAg
ICAgKEpTQzo6U3ltYm9sVGFibGU6OmFkZCk6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpz
ZXQpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9mdW5jdGlvbi1leHByZXNzaW9uLWV4aXQuanM6
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9mdW5jdGlvbi1yZWVudHJ5LWluZmVyLW9u
LXNlbGYuanM6IEFkZGVkLgorICAgICAgICAodGhpbmd5KToKKyAgICAgICAgKiB0ZXN0cy9zdHJl
c3MvZ29vZnktZnVuY3Rpb24tcmVlbnRyeS1pbmNvcnJlY3QtaW5mZXJlbmNlLmpzOiBBZGRlZC4K
KwogMjAxNS0wMy0wMyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZSB1bnVzZWQgY29tcHJlc3Npb24gY29kZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAkocmV2aXNpb24gMTgwOTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzI5LDcgKzEz
MjksNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
ICAgICBtX2dyYXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKLSAgICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9pbnQ6CiAgICAgY2FzZSBUeXBlZEFy
cmF5V2F0Y2hwb2ludDoKICAgICAgICAgYnJlYWs7CiAgICAgCkBAIC0xNDUwLDcgKzE0NDksMTMg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgR2V0U2NvcGU6IC8vIEZJWE1FOiBXZSBjb3Vs
ZCBnZXQgcmlkIG9mIHRoZXNlIGlmIHdlIGtub3cgdGhhdCB0aGUgSlNGdW5jdGlvbiBpcyBhIGNv
bnN0YW50LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2MjAyCisg
ICAgY2FzZSBHZXRTY29wZToKKyAgICAgICAgaWYgKEpTVmFsdWUgYmFzZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fdmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChKU0Z1bmN0aW9uKiBmdW5j
dGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KGJhc2UpKSB7CisgICAgICAgICAgICAg
ICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKGZ1bmN0aW9uLT5zY29wZSgpKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgIGJyZWFr
OwogCkBAIC0xNDY5LDYgKzE0NzQsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKKyAg
ICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50Q2xvc3VyZVZh
cihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSwgVmlydHVhbFJlZ2lzdGVyKG5vZGUtPnZhck51bWJl
cigpKSkpIHsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZSh2
YWx1ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgZm9yTm9kZShu
b2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTk2
OCw3ICsxOTc3LDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAKLSAgICBjYXNlIFZhcmlhYmxlV2F0Y2hwb2ludDoKICAgICBjYXNlIFZhckluamVjdGlv
bldhdGNocG9pbnQ6CiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgY2FzZSBOb3RpZnlXcml0
ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCShyZXZpc2lvbiAxODA5NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDggKzI3Nyw2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gaW5saW5lQ2FsbEZy
YW1lKCktPmNhbGxlZUNvbnN0YW50KCk7CiAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQub2Zm
c2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vh
a0pTQ29uc3RhbnQoY2FsbGVlKTsKLSAgICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSBtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQoY2FsbGVlLT5zY29wZSgpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChvcGVyYW5kLm9mZnNldCgpID09IEpTU3RhY2s6OkNh
bGxlZSkKICAgICAgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKEdldENhbGxlZSk7CkBAIC0zNDcs
MTYgKzM0NSw2IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9w
ZXJhbmQudG9Mb2NhbCgpOwogCi0gICAgICAgIGlmIChsb2NhbCA8IG1fbG9jYWxXYXRjaHBvaW50
cy5zaXplKCkpIHsKLSAgICAgICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9
IG1fbG9jYWxXYXRjaHBvaW50c1tsb2NhbF0pIHsKLSAgICAgICAgICAgICAgICBpZiAoSlNWYWx1
ZSB2YWx1ZSA9IHNldC0+aW5mZXJyZWRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoRnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludCwgT3BJbmZvKG1fY29kZUJsb2NrLT5z
eW1ib2xUYWJsZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoVmFyaWFibGVX
YXRjaHBvaW50LCBPcEluZm8oc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFr
SlNDb25zdGFudCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwubG9jYWwobG9jYWwpOwogICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9j
ay0+aXNDYXB0dXJlZChvcGVyYW5kLCBpbmxpbmVDYWxsRnJhbWUoKSk7CiAgICAgICAgIApAQCAt
ODkxLDggKzg3OSw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPENvbnN0YW50QnVmZmVyS2V5
LCB1bnNpZ25lZD4gbV9jb25zdGFudEJ1ZmZlckNhY2hlOwogICAgIAotICAgIFZlY3RvcjxWYXJp
YWJsZVdhdGNocG9pbnRTZXQqLCAxNj4gbV9sb2NhbFdhdGNocG9pbnRzOwotICAgIAogICAgIHN0
cnVjdCBJbmxpbmVTdGFja0VudHJ5IHsKICAgICAgICAgQnl0ZUNvZGVQYXJzZXIqIG1fYnl0ZUNv
ZGVQYXJzZXI7CiAgICAgICAgIApAQCAtMzQzMiw3ICszNDE4LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIEpTTGV4aWNhbEVudmly
b25tZW50KiBsZXhpY2FsRW52aXJvbm1lbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5sZXhp
Y2FsRW52aXJvbm1lbnQuZ2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKGxleGljYWxFbnZpcm9u
bWVudAogICAgICAgICAgICAgICAgICAgICAmJiBsZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRh
YmxlKCktPm1fZnVuY3Rpb25FbnRlcmVkT25jZS5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9pbnQsIE9wSW5mbyhs
ZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseShsZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJv
bFRhYmxlKCktPm1fZnVuY3Rpb25FbnRlcmVkT25jZSk7CiAgICAgICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUGhhbnRvbSwgZ2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3Rh
bnQobGV4aWNhbEVudmlyb25tZW50KSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MzQ5MSw3ICszNDc3LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBo
YW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7Ci0gICAgICAgICAgICAgICAgU3lt
Ym9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHVp
ZCk7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZ2xvYmFsT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2spOworICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxl
RW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChsb2NrZXIsIHVp
ZCk7CiAgICAgICAgICAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0
ID0gZW50cnkud2F0Y2hwb2ludFNldCgpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUgaW5mZXJy
ZWRWYWx1ZSA9CiAgICAgICAgICAgICAgICAgICAgIHdhdGNocG9pbnRTZXQgPyB3YXRjaHBvaW50
U2V0LT5pbmZlcnJlZFZhbHVlKCkgOiBKU1ZhbHVlKCk7CkBAIC0zNTAxLDcgKzM0ODgsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFZhcmlhYmxlV2F0Y2hwb2ludCwgT3BJbmZvKHdhdGNocG9pbnRT
ZXQpKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHdh
dGNocG9pbnRTZXQpOwogICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwg
d2Vha0pTQ29uc3RhbnQoaW5mZXJyZWRWYWx1ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQpAQCAtMzUwOSwyNSArMzQ5NiwxNiBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAg
ICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAg
ICAgICAgICAgTm9kZSogc2NvcGVOb2RlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpOwot
ICAgICAgICAgICAgICAgIGlmIChKU0xleGljYWxFbnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25t
ZW50ID0gbV9ncmFwaC50cnlHZXRBY3RpdmF0aW9uKHNjb3BlTm9kZSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbGV4aWNhbEVudmlyb25tZW50LT5z
eW1ib2xUYWJsZSgpOwotICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFi
bGU6Ok1hcDo6aXRlcmF0b3IgaXRlciA9IHN5bWJvbFRhYmxlLT5maW5kKGxvY2tlciwgdWlkKTsK
LSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gc3ltYm9sVGFibGUtPmVuZChsb2Nr
ZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBv
aW50U2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAod2F0Y2hwb2ludFNldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEpTVmFs
dWUgdmFsdWUgPSB3YXRjaHBvaW50U2V0LT5pbmZlcnJlZFZhbHVlKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIHNjb3BlTm9kZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChWYXJpYWJsZVdhdGNocG9pbnQsIE9wSW5m
byh3YXRjaHBvaW50U2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudCh2YWx1ZSkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBo
LnRyeUdldENvbnN0YW50Q2xvc3VyZVZhcihzY29wZU5vZGUsIFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBzY29wZU5v
ZGUpOworICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtK
U0NvbnN0YW50KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0
UHJlZGljdGlvbigpOwogICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwK
LSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChHZXRDbG9zdXJlVmFyLCBPcEluZm8ob3Bl
cmFuZCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKEdldENsb3N1cmVSZWdpc3RlcnMsIHNjb3BlTm9kZSkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAgICAgICAgICAgIEdldENsb3N1cmVWYXIs
IE9wSW5mbyhvcGVyYW5kKSwgT3BJbmZvKHByZWRpY3Rpb24pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgc2NvcGVOb2RlLCBhZGRUb0dyYXBoKEdldENsb3N1cmVSZWdpc3RlcnMsIHNjb3BlTm9k
ZSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGNhc2UgRHluYW1pYzoKQEAgLTM2NDMsNyArMzYyMSwxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIG9wX2dldF9zY29wZTogewotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChHZXRTY29wZSwgZ2V0KFZp
cnR1YWxSZWdpc3RlcihKU1N0YWNrOjpDYWxsZWUpKSkpOworICAgICAgICAgICAgLy8gSGVscCB0
aGUgbGF0ZXIgc3RhZ2VzIGEgYml0IGJ5IGRvaW5nIHNvbWUgc21hbGwgY29uc3RhbnQgZm9sZGlu
ZyBoZXJlLiBOb3RlIHRoYXQgdGhpcworICAgICAgICAgICAgLy8gb25seSBoZWxwcyBmb3IgdGhl
IGZpcnN0IGJhc2ljIGJsb2NrLiBJdCdzIGV4dHJlbWVseSBpbXBvcnRhbnQgbm90IHRvIGNvbnN0
YW50IGZvbGQKKyAgICAgICAgICAgIC8vIGxvYWRzIGZyb20gdGhlIHNjb3BlIHJlZ2lzdGVyIGxh
dGVyLCBhcyB0aGF0IHdvdWxkIHByZXZlbnQgdGhlIERGRyBmcm9tIHRyYWNraWduIHRoZQorICAg
ICAgICAgICAgLy8gYnl0ZWNvZGUtbGV2ZWwgbGl2ZW5lc3Mgb2YgdGhlIHNjb3BlIHJlZ2lzdGVy
LgorICAgICAgICAgICAgTm9kZSogY2FsbGVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNr
OjpDYWxsZWUpKTsKKyAgICAgICAgICAgIE5vZGUqIHJlc3VsdDsKKyAgICAgICAgICAgIGlmIChK
U0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU0Z1bmN0
aW9uKj4oKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB3ZWFrSlNDb25zdGFudChmdW5jdGlv
bi0+c2NvcGUoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
YWRkVG9HcmFwaChHZXRTY29wZSwgY2FsbGVlKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIHJlc3VsdCk7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9nZXRfc2NvcGUpOwogICAgICAgICB9CiAgICAgICAgICAgICAK
QEAgLTQxMjgsMjIgKzQxMTYsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAg
ICAgICAgICBtX2RmZ0NvZGVCbG9jay0+Z2V0U3R1YkluZm9NYXAobV9kZmdTdHViSW5mb3MpOwog
ICAgIH0KICAgICAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNhcHR1cmVDb3VudCgpKSB7Ci0gICAg
ICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
OwotICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2Nr
KTsKLSAgICAgICAgU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXRlciA9IHN5bWJvbFRhYmxl
LT5iZWdpbihsb2NrZXIpOwotICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBlbmQg
PSBzeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcik7Ci0gICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsg
KytpdGVyKSB7Ci0gICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGl0ZXIt
PnZhbHVlLndhdGNocG9pbnRTZXQoKTsKLSAgICAgICAgICAgIGlmICghc2V0KQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gc3RhdGljX2Nhc3Q8
c2l6ZV90PihWaXJ0dWFsUmVnaXN0ZXIoaXRlci0+dmFsdWUuZ2V0SW5kZXgoKSkudG9Mb2NhbCgp
KTsKLSAgICAgICAgICAgIHdoaWxlIChtX2xvY2FsV2F0Y2hwb2ludHMuc2l6ZSgpIDw9IGluZGV4
KQotICAgICAgICAgICAgICAgIG1fbG9jYWxXYXRjaHBvaW50cy5hcHBlbmQobnVsbHB0cik7Ci0g
ICAgICAgICAgICBtX2xvY2FsV2F0Y2hwb2ludHNbaW5kZXhdID0gc2V0OwotICAgICAgICB9Ci0g
ICAgfQotICAgIAogICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSgKICAgICAg
ICAgdGhpcywgbV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRCbG9jaywgMCwgMCwgVmlydHVhbFJlZ2lz
dGVyKCksIFZpcnR1YWxSZWdpc3RlcigpLAogICAgICAgICBtX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpLCBJbmxpbmVDYWxsRnJhbWU6OkNhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4MDk2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNyAr
MzAwLDYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAg
ICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAKLSAgICBjYXNlIFZhcmlhYmxl
V2F0Y2hwb2ludDoKICAgICBjYXNlIFR5cGVkQXJyYXlXYXRjaHBvaW50OgogICAgICAgICByZWFk
KFdhdGNocG9pbnRfZmlyZSk7CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CkBAIC0zMjYsMTAg
KzMyNSw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAg
ICAgd3JpdGUoV2F0Y2hwb2ludF9maXJlKTsKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2FzZSBG
dW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgotICAgICAgICByZWFkKFdhdGNocG9pbnRfZmlyZSk7
Ci0gICAgICAgIHJldHVybjsKLQogICAgIGNhc2UgVG9UaGlzOgogICAgIGNhc2UgQ3JlYXRlVGhp
czoKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKQEAgLTc4Niw3ICs3ODEsNyBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIAogICAgIGNhc2UgUHV0
Q2xvc3VyZVZhcjoKICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+
dmFyTnVtYmVyKCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihDbG9zdXJlVmFyaWFibGVM
b2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSwgbm9kZS0+Y2hp
bGQyKCkpLCBub2RlLT5jaGlsZDMoKS5ub2RlKCkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KENsb3N1cmVWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVt
YmVyKCkpLCBub2RlLT5jaGlsZDEoKSksIG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxODA5NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
Miw3ICsxMDIsNiBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAg
Y2FzZSBQdXRDbG9zdXJlVmFyOgogICAgIGNhc2UgR2V0R2xvYmFsVmFyOgogICAgIGNhc2UgUHV0
R2xvYmFsVmFyOgotICAgIGNhc2UgVmFyaWFibGVXYXRjaHBvaW50OgogICAgIGNhc2UgVmFySW5q
ZWN0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIENoZWNrQ2VsbDoKICAgICBjYXNlIEFsbG9jYXRp
b25Qcm9maWxlV2F0Y2hwb2ludDoKQEAgLTE2OCw3ICsxNjcsNiBAQCBib29sIGRvZXNHQyhHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNr
OgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKLSAg
ICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9pbnQ6CiAgICAgY2FzZSBUeXBlZEFycmF5V2F0
Y2hwb2ludDoKICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6CiAgICAgY2FzZSBDb25zdGFudFN0b3Jh
Z2VQb2ludGVyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCShyZXZpc2lvbiAxODA5NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTUsNiArODk1LDExIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgR2V0Q2xv
c3VyZVZhcjogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBQdXRD
bG9zdXJlVmFyOiB7CiAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICAgICAgaW5zZXJ0U3RvcmVCYXJyaWVyKG1faW5kZXhJbkJsb2NrLCBu
b2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQzKCkpOwpAQCAtMTIyNiw3ICsxMjMxLDYgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAg
ICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKLSAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFy
OgogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBOb3RpZnlXcml0ZToK
ICAgICAgICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTgwOTY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTQsMTQgKzEwMTQs
NTQgQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShjbwogICAgIHJldHVy
biB0cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UubV92YWx1ZSwgYmFzZS5tX3N0cnVjdHVyZSwg
b2Zmc2V0KTsKIH0KIAotSlNMZXhpY2FsRW52aXJvbm1lbnQqIEdyYXBoOjp0cnlHZXRBY3RpdmF0
aW9uKE5vZGUqIG5vZGUpCitKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudENsb3N1cmVWYXIo
SlNWYWx1ZSBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIHJldHVybiBub2RlLT5k
eW5hbWljQ2FzdENvbnN0YW50PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oKTsKKyAgICBpZiAoIWJh
c2UpCisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgCisgICAgSlNMZXhpY2FsRW52aXJv
bm1lbnQqIGFjdGl2YXRpb24gPSBqc0R5bmFtaWNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4o
YmFzZSk7CisgICAgaWYgKCFhY3RpdmF0aW9uKQorICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwor
ICAgIAorICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGFjdGl2YXRpb24tPnN5bWJvbFRh
YmxlKCk7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9j
ayk7CisgICAgCisgICAgaWYgKHN5bWJvbFRhYmxlLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UuaGFz
QmVlbkludmFsaWRhdGVkKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgCisgICAg
U3ltYm9sVGFibGVFbnRyeSogZW50cnkgPSBzeW1ib2xUYWJsZS0+ZW50cnlGb3IobG9ja2VyLCBy
ZWcpOworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgCisg
ICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBlbnRyeS0+d2F0Y2hwb2ludFNldCgpOwor
ICAgIGlmICghc2V0KQorICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIAorICAgIEpTVmFs
dWUgdmFsdWUgPSBzZXQtPmluZmVycmVkVmFsdWUoKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOworICAgIAorICAgIHdhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHN5
bWJvbFRhYmxlLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UpOworICAgIHdhdGNocG9pbnRzKCkuYWRk
TGF6aWx5KHNldCk7CisgICAgCisgICAgcmV0dXJuIHZhbHVlOworfQorCitKU1ZhbHVlIEdyYXBo
Ojp0cnlHZXRDb25zdGFudENsb3N1cmVWYXIoY29uc3QgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIFZp
cnR1YWxSZWdpc3RlciByZWcpCit7CisgICAgcmV0dXJuIHRyeUdldENvbnN0YW50Q2xvc3VyZVZh
cih2YWx1ZS5tX3ZhbHVlLCByZWcpOworfQorCitKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFu
dENsb3N1cmVWYXIoTm9kZSogbm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK3sKKyAgICBpZiAo
IW5vZGUtPmhhc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgcmV0
dXJuIHRyeUdldENvbnN0YW50Q2xvc3VyZVZhcihub2RlLT5hc0pTVmFsdWUoKSwgcmVnKTsKIH0K
IAogV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogR3JhcGg6OnRyeUdldFJlZ2lzdGVycyhOb2Rl
KiBub2RlKQogewotICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhpY2FsRW52aXJvbm1lbnQg
PSB0cnlHZXRBY3RpdmF0aW9uKG5vZGUpOworICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhp
Y2FsRW52aXJvbm1lbnQgPSBub2RlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTTGV4aWNhbEVudmly
b25tZW50Kj4oKTsKICAgICBpZiAoIWxleGljYWxFbnZpcm9ubWVudCkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgcmV0dXJuIGxleGljYWxFbnZpcm9ubWVudC0+cmVnaXN0ZXJzKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxODA5NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0MSw3
ICs3NDEsOSBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSB0cnlHZXRDb25zdGFudFByb3BlcnR5KEpT
VmFsdWUgYmFzZSwgY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYsIFByb3BlcnR5T2Zmc2V0
KTsKICAgICBKU1ZhbHVlIHRyeUdldENvbnN0YW50UHJvcGVydHkoY29uc3QgQWJzdHJhY3RWYWx1
ZSYsIFByb3BlcnR5T2Zmc2V0KTsKICAgICAKLSAgICBKU0xleGljYWxFbnZpcm9ubWVudCogdHJ5
R2V0QWN0aXZhdGlvbihOb2RlKik7CisgICAgSlNWYWx1ZSB0cnlHZXRDb25zdGFudENsb3N1cmVW
YXIoSlNWYWx1ZSBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIpOworICAgIEpTVmFsdWUgdHJ5R2V0Q29u
c3RhbnRDbG9zdXJlVmFyKGNvbnN0IEFic3RyYWN0VmFsdWUmLCBWaXJ0dWFsUmVnaXN0ZXIpOwor
ICAgIEpTVmFsdWUgdHJ5R2V0Q29uc3RhbnRDbG9zdXJlVmFyKE5vZGUqLCBWaXJ0dWFsUmVnaXN0
ZXIpOwogICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHRyeUdldFJlZ2lzdGVycyhOb2Rl
Kik7CiAgICAgCiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRyeUdldEZvbGRhYmxlVmlldyhOb2Rl
Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTgwOTY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyMDMsNyArMTIwMyw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAKICAgICBib29sIGhhc1Zh
cmlhYmxlV2F0Y2hwb2ludFNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBOb3Rp
ZnlXcml0ZSB8fCBvcCgpID09IFZhcmlhYmxlV2F0Y2hwb2ludDsKKyAgICAgICAgcmV0dXJuIG9w
KCkgPT0gTm90aWZ5V3JpdGU7CiAgICAgfQogICAgIAogICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dCogdmFyaWFibGVXYXRjaHBvaW50U2V0KCkKQEAgLTEzNjQsMTcgKzEzNjQsNiBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzsKICAgICB9CiAgICAgCi0gICAgYm9vbCBo
YXNTeW1ib2xUYWJsZSgpCi0gICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBGdW5jdGlvblJl
ZW50cnlXYXRjaHBvaW50OwotICAgIH0KLSAgICAKLSAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1N5bWJvbFRhYmxlKCkpOwotICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTeW1ib2xUYWJsZSo+KG1fb3BJbmZvKTsKLSAgICB9Ci0g
ICAgCiAgICAgYm9vbCBoYXNBcnJheU1vZGUoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgp
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lv
biAxODA5NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE4OCw5ICsxODgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgbWFjcm8oR2V0R2xvYmFsVmFyLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNy
byhQdXRHbG9iYWxWYXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhOb3RpZnlXcml0
ZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFZhcmlhYmxlV2F0Y2hwb2ludCwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFZhckluamVjdGlvbldhdGNocG9pbnQsIE5vZGVN
dXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50LCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ2hlY2tDZWxsLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oQ2hlY2tCYWRDZWxsLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8o
QWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24g
MTgwOTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJz
dHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAgIGNhc2UgR2V0
R2xvYmFsVmFyOgogICAgIGNhc2UgUHV0R2xvYmFsVmFyOgotICAgIGNhc2UgVmFyaWFibGVXYXRj
aHBvaW50OgogICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIENoZWNr
Q2VsbDoKICAgICBjYXNlIENoZWNrQmFkQ2VsbDoKQEAgLTI1Myw3ICsyNTIsNiBAQCBib29sIHNh
ZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBTdG9yZUJhcnJpZXJX
aXRoTnVsbENoZWNrOgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3Rp
ZnlXcml0ZToKLSAgICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9pbnQ6CiAgICAgY2FzZSBU
eXBlZEFycmF5V2F0Y2hwb2ludDoKICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6CiAgICAgY2FzZSBD
b25zdGFudFN0b3JhZ2VQb2ludGVyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxODA5NjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjA5LDcgKzM2MDksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldENs
b3N1cmVWYXI6IHsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgcmVnaXN0ZXJzKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsKKwor
ICAgICAgICBTdG9yYWdlT3BlcmFuZCByZWdpc3RlcnModGhpcywgbm9kZS0+Y2hpbGQyKCkpOwog
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlZ2lzdGVyc0dQUiA9IHJl
Z2lzdGVycy5ncHIoKTsKQEAgLTM2MjEsNiArMzYyMyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgUHV0
Q2xvc3VyZVZhcjogeworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+Y2hpbGQxKCkpOwor
CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHJlZ2lzdGVycyh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2hSZWdpc3Rlcih0aGlzKTsKQEAgLTM2MjksOCArMzYz
Myw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
R1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1
ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CiAKLSAgICAgICAgc3BlY3VsYXRlKG5v
ZGUsIG5vZGUtPmNoaWxkMSgpKTsKLQogICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFnR1BS
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUtPnZhck51bWJlcigpICog
c2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSkpOwogICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5bG9hZEdQUiwg
SklUQ29tcGlsZXI6OkFkZHJlc3MocmVnaXN0ZXJzR1BSLCBub2RlLT52YXJOdW1iZXIoKSAqIHNp
emVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpKSk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtNDAzNCw4ICs0
MDM2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6Ci0gICAg
Y2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6IHsKKyAgICBjYXNlIFZhckluamVjdGlvbldhdGNocG9p
bnQ6IHsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTQzMTIsMTEgKzQzMTMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBGdW5jdGlvblJl
ZW50cnlXYXRjaHBvaW50OiB7Ci0gICAgICAgIG5vUmVzdWx0KG5vZGUpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOiB7CiAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxODA5NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNzExLDcgKzM3MTEsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldENsb3N1cmVW
YXI6IHsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgcmVnaXN0ZXJzKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsKKworICAgICAg
ICBTdG9yYWdlT3BlcmFuZCByZWdpc3RlcnModGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVnaXN0ZXJzR1BS
ID0gcmVnaXN0ZXJzLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwpAQCAtMzcyMSwxNCArMzcyMywxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFB1dENsb3N1cmVW
YXI6IHsKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsKKwogICAgICAg
ICBTdG9yYWdlT3BlcmFuZCByZWdpc3RlcnModGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAKICAgICAgICAg
R1BSUmVnIHJlZ2lzdGVyc0dQUiA9IHJlZ2lzdGVycy5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAKLSAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNo
aWxkMSgpKTsKLQogICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUtPnZhck51bWJlcigpICogc2l6ZW9mKFJlZ2lzdGVy
KSkpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC00MDg3LDgg
KzQwODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDoKLSAg
ICBjYXNlIFZhcmlhYmxlV2F0Y2hwb2ludDogeworICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hw
b2ludDogewogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpA
QCAtNDM2NywxMSArNDM2OCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIEZ1bmN0aW9u
UmVlbnRyeVdhdGNocG9pbnQ6IHsKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6IHsKICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDE4MDk2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2lu
dENvbGxlY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE3LDE4ICsxMTcsMTAg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFkZExhemlseShqc0Nhc3Q8SlNGdW5jdGlvbio+KG1f
bm9kZS0+Y2VsbE9wZXJhbmQoKS0+dmFsdWUoKSktPmFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2lu
dFNldCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
VmFyaWFibGVXYXRjaHBvaW50OgotICAgICAgICAgICAgYWRkTGF6aWx5KG1fbm9kZS0+dmFyaWFi
bGVXYXRjaHBvaW50U2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50OgogICAgICAgICAgICAgYWRkTGF6aWx5
KGdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBv
aW50OgotICAgICAgICAgICAgYWRkTGF6aWx5KG1fbm9kZS0+c3ltYm9sVGFibGUoKS0+bV9mdW5j
dGlvbkVudGVyZWRPbmNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgVHlwZWRBcnJheVdhdGNocG9pbnQ6CiAgICAgICAgICAgICBhZGRMYXppbHkobV9u
b2RlLT50eXBlZEFycmF5KCkpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODA5NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMiwxMCArMTEyLDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKE5vZGUqIAogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKICAgICBjYXNlIEFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToK
LSAgICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9pbnQ6CiAgICAgY2FzZSBUeXBlZEFycmF5
V2F0Y2hwb2ludDoKICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0OgotICAgIGNhc2Ug
VmFyaWFibGVXYXRjaHBvaW50OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBTdG9y
ZUJhcnJpZXI6CiAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlz
aW9uIDE4MDk2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTgsOCArODE4LDYgQEAgcHJpdmF0ZToKIAogICAg
ICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgY2FzZSBMb29wSGludDoKLSAgICAgICAg
Y2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6Ci0gICAgICAgIGNhc2UgRnVuY3Rpb25SZWVudHJ5V2F0
Y2hwb2ludDoKICAgICAgICAgY2FzZSBUeXBlZEFycmF5V2F0Y2hwb2ludDoKICAgICAgICAgY2Fz
ZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgTW92SGludDoKQEAg
LTM1OTksNyArMzU5Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlR2V0Q2xvc3VyZVZh
cigpCiAgICAgewogICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NCgKLSAgICAgICAgICAg
IGFkZHJlc3NGb3IobG93U3RvcmFnZShtX25vZGUtPmNoaWxkMSgpKSwgbV9ub2RlLT52YXJOdW1i
ZXIoKSkpKTsKKyAgICAgICAgICAgIGFkZHJlc3NGb3IobG93U3RvcmFnZShtX25vZGUtPmNoaWxk
MigpKSwgbV9ub2RlLT52YXJOdW1iZXIoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlUHV0Q2xvc3VyZVZhcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
eW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAxODA5NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTExNyw2ICsxMTcsMTAgQEAgdm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IAogICAgIH0KICAgICAKICAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIodGhp
c1N5bWJvbFRhYmxlLT5tX3dhdGNocG9pbnRDbGVhbnVwLmdldCgpKTsKKyAgICAKKyAgICAvLyBT
YXZlIHNvbWUgbWVtb3J5LiBUaGlzIGlzIE8obikgdG8gcmVidWlsZCBhbmQgd2UgZG8gc28gb24g
dGhlIGZseS4KKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcih0aGlzU3ltYm9sVGFibGUt
Pm1fbG9jayk7CisgICAgdGhpc1N5bWJvbFRhYmxlLT5tX2xvY2FsVG9FbnRyeSA9IG51bGxwdHI7
CiB9CiAKIFN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6V2F0Y2hwb2ludENsZWFudXAo
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQpAQCAtMTM3LDYgKzE0MSwzNCBAQCB2b2lkIFN5bWJv
bFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6ZmluCiAgICAgfQogfQogCitjb25zdCBTeW1ib2xU
YWJsZTo6TG9jYWxUb0VudHJ5VmVjJiBTeW1ib2xUYWJsZTo6bG9jYWxUb0VudHJ5KGNvbnN0IENv
bmN1cnJlbnRKSVRMb2NrZXImKQoreworICAgIGlmIChVTkxJS0VMWSghbV9sb2NhbFRvRW50cnkp
KSB7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSAwOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogbV9tYXApIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcoZW50cnkudmFsdWUu
Z2V0SW5kZXgoKSk7CisgICAgICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSkKKyAgICAgICAgICAg
ICAgICBzaXplID0gc3RkOjptYXgoc2l6ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlZy50b0xv
Y2FsKCkpICsgMSk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgbV9sb2NhbFRvRW50cnkgPSBz
dGQ6Om1ha2VfdW5pcXVlPExvY2FsVG9FbnRyeVZlYz4oc2l6ZSwgbnVsbHB0cik7CisgICAgICAg
IGZvciAoYXV0byYgZW50cnkgOiBtX21hcCkgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyhlbnRyeS52YWx1ZS5nZXRJbmRleCgpKTsKKyAgICAgICAgICAgIGlmIChyZWcuaXNMb2Nh
bCgpKQorICAgICAgICAgICAgICAgIG1fbG9jYWxUb0VudHJ5LT5hdChyZWcudG9Mb2NhbCgpKSA9
ICZlbnRyeS52YWx1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gKm1fbG9j
YWxUb0VudHJ5OworfQorCitTeW1ib2xUYWJsZUVudHJ5KiBTeW1ib2xUYWJsZTo6ZW50cnlGb3Io
Y29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQor
eworICAgIGlmICghcmVnLmlzTG9jYWwoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIGxvY2FsVG9FbnRyeShsb2NrZXIpW3JlZy50b0xvY2FsKCldOworfQorCiBTeW1ib2xU
YWJsZSogU3ltYm9sVGFibGU6OmNsb25lQ2FwdHVyZWROYW1lcyhWTSYgdm0pCiB7CiAgICAgU3lt
Ym9sVGFibGUqIHJlc3VsdCA9IFN5bWJvbFRhYmxlOjpjcmVhdGUodm0pOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxODA5NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwg
MjAxMi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQwLDYgKzM0MCw3IEBAIHB1Ymxp
YzoKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBHbG9iYWxWYXJpYWJs
ZUlEPiBVbmlxdWVJRE1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+
LCBSZWZQdHI8VHlwZVNldD4+IFVuaXF1ZVR5cGVTZXRNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFw
PGludCwgUmVmUHRyPFN0cmluZ0ltcGw+LCBXVEY6OkludEhhc2g8aW50PiwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ+PiBSZWdpc3RlclRvVmFyaWFibGVNYXA7CisgICAg
dHlwZWRlZiBWZWN0b3I8U3ltYm9sVGFibGVFbnRyeSo+IExvY2FsVG9FbnRyeVZlYzsKIAogICAg
IHN0YXRpYyBTeW1ib2xUYWJsZSogY3JlYXRlKFZNJiB2bSkKICAgICB7CkBAIC00MjUsNiArNDI2
LDcgQEAgcHVibGljOgogICAgIAogICAgIE1hcDo6QWRkUmVzdWx0IGFkZChjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5LCBjb25zdCBTeW1ib2xUYWJsZUVudHJ5JiBl
bnRyeSkKICAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2xvY2FsVG9FbnRyeSk7CiAg
ICAgICAgIHJldHVybiBtX21hcC5hZGQoa2V5LCBlbnRyeSk7CiAgICAgfQogICAgIApAQCAtNDM2
LDYgKzQzOCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBNYXA6OkFkZFJlc3VsdCBzZXQoY29uc3Qg
Q29uY3VycmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVF
bnRyeSYgZW50cnkpCiAgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9sb2NhbFRvRW50
cnkpOwogICAgICAgICByZXR1cm4gbV9tYXAuc2V0KGtleSwgZW50cnkpOwogICAgIH0KICAgICAK
QEAgLTQ1Niw2ICs0NTksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb250YWlucyhsb2Nr
ZXIsIGtleSk7CiAgICAgfQogICAgIAorICAgIGNvbnN0IExvY2FsVG9FbnRyeVZlYyYgbG9jYWxU
b0VudHJ5KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKTsKKyAgICBTeW1ib2xUYWJsZUVudHJ5
KiBlbnRyeUZvcihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgVmlydHVhbFJlZ2lzdGVyKTsK
KyAgICAKICAgICBHbG9iYWxWYXJpYWJsZUlEIHVuaXF1ZUlERm9yVmFyaWFibGUoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgVk0mIHZtKTsKICAgICBHbG9iYWxW
YXJpYWJsZUlEIHVuaXF1ZUlERm9yUmVnaXN0ZXIoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYg
bG9ja2VyLCBpbnQgcmVnaXN0ZXJJbmRleCwgVk0mIHZtKTsKICAgICBSZWZQdHI8VHlwZVNldD4g
Z2xvYmFsVHlwZVNldEZvclJlZ2lzdGVyKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tl
ciwgaW50IHJlZ2lzdGVySW5kZXgsIFZNJiB2bSk7CkBAIC01MjksNiArNTM1LDcgQEAgcHJpdmF0
ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50W10+IG1fc2xvd0FyZ3VtZW50czsK
ICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludENsZWFudXA+IG1fd2F0Y2hwb2lu
dENsZWFudXA7CisgICAgc3RkOjp1bmlxdWVfcHRyPExvY2FsVG9FbnRyeVZlYz4gbV9sb2NhbFRv
RW50cnk7CiAKIHB1YmxpYzoKICAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fZnVuY3Rpb25FbnRl
cmVkT25jZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnVuY3Rp
b24tZXhwcmVzc2lvbi1leGl0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvZnVuY3Rpb24tZXhwcmVzc2lvbi1leGl0LmpzCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdW5jdGlvbi1leHByZXNzaW9u
LWV4aXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorZnVuY3Rpb24gZm9vKHgp
IHsKKyAgICB2YXIgdG1wID0geCArIDE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyByZXR1cm4g
NDI7IH0KK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsg
KytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyg0MikoKTsKKyAgICBpZiAocmVzdWx0ICE9IDQy
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgaW4gbG9vcDogIiArIHJlc3VsdDsK
K30KKwordmFyIHJlc3VsdCA9IGZvbyg0Mi41KSgpOworaWYgKHJlc3VsdCAhPSA0MikKKyAgICB0
aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdW5jdGlvbi1yZWVudHJ5LWluZmVyLW9uLXNl
bGYuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9m
dW5jdGlvbi1yZWVudHJ5LWluZmVyLW9uLXNlbGYuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z1bmN0aW9uLXJlZW50cnktaW5mZXItb24tc2Vs
Zi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4IEBACitmdW5jdGlvbiB0aGluZ3koZikg
eworICAgIGYoKTsKK30KK25vSW5saW5lKHRoaW5neSk7CisKK2Z1bmN0aW9uIGZvbyhhKSB7Cisg
ICAgdmFyIHg7CisgICAgaWYgKGEpCisgICAgICAgIHggPSBhOworICAgIHRoaW5neShmdW5jdGlv
bigpIHsgcmV0dXJuIHg7IH0pOworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDAwOyArK2kpCisgICAgICAgIHJlc3VsdCArPSB4OworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsr
aSkgeworICAgIHZhciByZXN1bHQgPSBmb28oNDIpOworICAgIGlmIChyZXN1bHQgIT0gNDIwMDAw
MCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgZmlyc3QgcmVzdWx0OiAiICsgcmVzdWx0Owor
fQorCit2YXIgcmVzdWx0ID0gZm9vKDApOworaWYgKCIiICsgcmVzdWx0ICE9ICJOYU4iKQorICAg
IHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1bHQ7CisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZ29vZnktZnVuY3Rpb24tcmVlbnRyeS1p
bmNvcnJlY3QtaW5mZXJlbmNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvZ29vZnktZnVuY3Rpb24tcmVlbnRyeS1pbmNvcnJlY3QtaW5mZXJlbmNl
LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9n
b29meS1mdW5jdGlvbi1yZWVudHJ5LWluY29ycmVjdC1pbmZlcmVuY2UuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyNSBAQAorZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgeDsKKyAgICBp
ZiAoYSkKKyAgICAgICAgeCA9IGE7CisgICAgcmV0dXJuIFtmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIHg7CisgICAgfSwgZnVuY3Rpb24oYSkgeworICAgICAgICB4ID0gYTsKKyAgICB9XTsK
K30KKwordmFyIGFycmF5ID0gZm9vKGZhbHNlKTsKK25vSW5saW5lKGFycmF5WzBdKTsKK25vSW5s
aW5lKGFycmF5WzFdKTsKK2FycmF5WzFdKDQyKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7
ICsraSkgeworICAgIHZhciByZXN1bHQgPSBhcnJheVswXSgpOworICAgIGlmIChyZXN1bHQgIT0g
NDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBpbiBsb29wOiAiICsgcmVzdWx0
OworfQorCithcnJheVsxXSg0Myk7Cit2YXIgcmVzdWx0ID0gYXJyYXlbMF0oKTsKK2lmIChyZXN1
bHQgIT0gNDMpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3Vs
dDsK
</data>
<flag name="review"
          id="272739"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>