<?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>117377</bug_id>
          
          <creation_ts>2013-06-08 18:35:13 -0700</creation_ts>
          <short_desc>fourthTier: DFG GetById patching shouldn&apos;t distinguish between self lists and proto lists</short_desc>
          <delta_ts>2013-06-09 12:19:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="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>898434</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-08 18:35:13 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898437</commentid>
    <comment_count>1</comment_count>
      <attachid>204106</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-08 18:39:38 -0700</bug_when>
    <thetext>Created attachment 204106
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898440</commentid>
    <comment_count>2</comment_count>
      <attachid>204106</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-08 18:44:33 -0700</bug_when>
    <thetext>Comment on attachment 204106
the patch

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

&gt; LayoutTests/ChangeLog:8
&gt; +        Add tests that show why this is important. These tests speed up by more than 2x.

Make that more than 3x.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898445</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-08 19:33:48 -0700</bug_when>
    <thetext>Benchmark report for SunSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;Old&quot; at /Volumes/Data/pizlo/fourthTier/secondary/OpenSource/WebKitBuild/Release/jsc (r150814)
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/fourthTier/OpenSource/WebKitBuild/Release/jsc (r151350)
&quot;UnifiedPolyGet&quot; at /Volumes/Data/fromMiniMe/fourthTier/primary/OpenSource/WebKitBuild/Release/jsc (r151350)

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

                                                        Old                    TipOfTree               UnifiedPolyGet          UnifiedPolyGet v. Old   
SunSpider:
   3d-cube                                         6.6471+-0.0872     ?      6.7610+-0.1102            6.7123+-0.0994        ?
   3d-morph                                        8.4750+-0.0945     !      8.7180+-0.1189     ^      8.4305+-0.0936        
   3d-raytrace                                     8.3790+-0.1352     ?      8.5237+-0.1071     !      8.7268+-0.0880        ! definitely 1.0415x slower
   access-binary-trees                             1.8393+-0.0093     ^      1.8163+-0.0117            1.8015+-0.0083        ^ definitely 1.0210x faster
   access-fannkuch                                 7.4534+-0.0782     ?      7.4711+-0.0609     ?      7.5981+-0.0821        ? might be 1.0194x slower
   access-nbody                                    3.9661+-0.0366     !      4.0346+-0.0125     ?      4.0468+-0.0224        ! definitely 1.0203x slower
   access-nsieve                                   4.7838+-0.1122     ?      4.8524+-0.0383            4.8131+-0.0722        ?
   bitops-3bit-bits-in-byte                        1.7762+-0.0195     ?      1.7808+-0.0177     ?      1.7855+-0.0165        ?
   bitops-bits-in-byte                             6.6059+-0.1160     ?      6.7170+-0.0697     ?      6.7579+-0.0764        ? might be 1.0230x slower
   bitops-bitwise-and                              2.7229+-0.0209            2.7201+-0.0223            2.6960+-0.0464        
   bitops-nsieve-bits                              4.1852+-0.0543     !      4.3269+-0.0136     ?      4.3665+-0.0583        ! definitely 1.0433x slower
   controlflow-recursive                           3.2911+-0.1894     ^      2.9942+-0.0316     ?      3.0361+-0.0584        ^ definitely 1.0840x faster
   crypto-aes                                      5.1810+-0.0760     ?      5.3060+-0.1041            5.2623+-0.0788        ? might be 1.0157x slower
   crypto-md5                                      3.0676+-0.0240     !      3.1571+-0.0269     ^      3.0803+-0.0226        ?
   crypto-sha1                                     2.8331+-0.0192     ?      2.9095+-0.0594            2.8688+-0.0265        ? might be 1.0126x slower
   date-format-tofte                              14.8885+-0.2787           14.8012+-0.1904     ?     14.8552+-0.3156        
   date-format-xparb                               8.4939+-0.1451     ?      8.5746+-0.1437            8.5548+-0.1553        ?
   math-cordic                                     3.9247+-0.0116     ?      3.9491+-0.0161     ?      3.9831+-0.0504        ? might be 1.0149x slower
   math-partial-sums                              12.0567+-0.1119           11.9006+-0.1233     ?     11.9331+-0.1408          might be 1.0104x faster
   math-spectral-norm                              2.6987+-0.0083     !      2.7282+-0.0208            2.7224+-0.0203        ?
   regexp-dna                                     11.3417+-0.1724           11.2975+-0.1811     ?     11.3029+-0.1503        
   string-base64                                   4.8564+-0.1765            4.8344+-0.0544     ?      4.9263+-0.0801        ? might be 1.0144x slower
   string-fasta                                   10.6780+-0.1316     ?     10.8243+-0.2779           10.6765+-0.1150        
   string-tagcloud                                14.1440+-0.1619     ?     14.4411+-0.1403     ?     14.4978+-0.2362        ? might be 1.0250x slower
   string-unpack-code                             28.0420+-0.0826     !     29.1296+-0.0498     ?     29.7608+-0.7922        ! definitely 1.0613x slower
   string-validate-input                           6.4606+-0.1019            6.4459+-0.1200            6.4360+-0.1109        

   &lt;arithmetic&gt; *                                  7.2612+-0.0457     ?      7.3467+-0.0481     ?      7.3704+-0.0660        ? might be 1.0150x slower
   &lt;geometric&gt;                                     5.7589+-0.0338     ?      5.8019+-0.0313     ?      5.8021+-0.0319        ? might be 1.0075x slower
   &lt;harmonic&gt;                                      4.6686+-0.0241     ?      4.6878+-0.0189            4.6799+-0.0170        ? might be 1.0024x slower

                                                        Old                    TipOfTree               UnifiedPolyGet          UnifiedPolyGet v. Old   
V8Spider:
   crypto                                         79.5437+-0.1945     ?     79.8214+-0.2113     ?     79.9207+-0.1710        ! definitely 1.0047x slower
   deltablue                                     104.3275+-0.4176     ^    101.4076+-1.1714     ?    102.8474+-1.9719          might be 1.0144x faster
   earley-boyer                                   69.6713+-0.3008     !     71.8912+-0.3518           71.7349+-0.2236        ! definitely 1.0296x slower
   raytrace                                       37.9899+-0.3217     !     40.0980+-0.3664     ^     39.3617+-0.2623        ! definitely 1.0361x slower
   regexp                                         99.9139+-0.4498     !    100.8937+-0.3541          100.7127+-0.2652        ! definitely 1.0080x slower
   richards                                      113.0453+-1.2847          112.0754+-0.8933     ?    113.6185+-1.6951        ?
   splay                                          47.2896+-0.3000           47.2642+-0.4259           47.2028+-0.2990        

   &lt;arithmetic&gt;                                   78.8259+-0.2532     ?     79.0645+-0.2861     ?     79.3427+-0.4336        ? might be 1.0066x slower
   &lt;geometric&gt; *                                  73.6269+-0.2232     !     74.2710+-0.2501     ?     74.3232+-0.2861        ! definitely 1.0095x slower
   &lt;harmonic&gt;                                     68.0661+-0.2384     !     69.1424+-0.2613           68.9566+-0.1636        ! definitely 1.0131x slower

                                                        Old                    TipOfTree               UnifiedPolyGet          UnifiedPolyGet v. Old   
Octane and V8v7:
   encrypt                                        0.46636+-0.00069    ^     0.46389+-0.00056          0.46314+-0.00039       ^ definitely 1.0069x faster
   decrypt                                        8.62195+-0.01466    ^     8.56890+-0.02393    ?     8.59384+-0.02992       
   deltablue                             x2       0.56651+-0.00204    !     0.57500+-0.00302    ?     0.57558+-0.00205       ! definitely 1.0160x slower
   earley                                         0.89447+-0.01052    ^     0.86218+-0.00828    ?     0.86842+-0.00396       ^ definitely 1.0300x faster
   boyer                                         12.77044+-0.04179    !    12.94519+-0.03646         12.91063+-0.04799       ! definitely 1.0110x slower
   raytrace                              x2       4.46441+-0.04492    ?     4.52141+-0.04287    ^     4.36084+-0.05215       ^ definitely 1.0237x faster
   regexp                                x2      32.69172+-0.38203    ?    32.79450+-0.26411         32.49730+-0.30661       
   richards                              x2       0.30838+-0.00377          0.30744+-0.00103    ?     0.30995+-0.00274       ?
   splay                                 x2       0.64749+-0.02873          0.64046+-0.01432          0.64018+-0.01698         might be 1.0114x faster
   navier-stokes                         x2      10.77583+-0.00841    !    10.80567+-0.00737         10.80197+-0.00670       ! definitely 1.0024x slower
   closure                                        0.31883+-0.03436    ?     0.32020+-0.03532    ?     0.32250+-0.03556       ? might be 1.0115x slower
   jquery                                         4.53347+-0.55644    ?     4.55121+-0.55619    ?     4.56849+-0.55526       ?
   gbemu                                 x2     253.92247+-16.72937   ^   142.70076+-2.92763    ^   136.96312+-1.94993       ^ definitely 1.8539x faster
   box2d                                 x2      32.38644+-0.18687    !    32.89246+-0.10297    ?    33.29310+-0.44378       ! definitely 1.0280x slower

V8v7:
   &lt;arithmetic&gt;                                   7.60387+-0.04809    ?     7.63307+-0.03578          7.57548+-0.04394         might be 1.0037x faster
   &lt;geometric&gt; *                                  2.42678+-0.01627    ?     2.42790+-0.00891          2.41754+-0.01175         might be 1.0038x faster
   &lt;harmonic&gt;                                     0.92656+-0.00875          0.92444+-0.00392    ?     0.92666+-0.00541       ? might be 1.0001x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                  31.77873+-1.53879    ^    21.73577+-0.27812    ^    21.20960+-0.21233       ^ definitely 1.4983x faster
   &lt;geometric&gt; *                                  4.39042+-0.06040    ^     4.17672+-0.04836          4.15487+-0.04692       ^ definitely 1.0567x faster
   &lt;harmonic&gt;                                     1.05920+-0.01690          1.05772+-0.01815    ?     1.06099+-0.01763       ? might be 1.0017x slower

                                                        Old                    TipOfTree               UnifiedPolyGet          UnifiedPolyGet v. Old   
Kraken:
   ai-astar                                       491.433+-0.387      ?     492.072+-0.573            491.861+-0.616         ?
   audio-beat-detection                           246.806+-3.988            242.642+-0.560      !     246.800+-2.100         
   audio-dft                                      316.236+-10.418           307.348+-1.048            306.855+-0.634           might be 1.0306x faster
   audio-fft                                      143.414+-0.220      !     144.970+-0.076            144.778+-0.135         ! definitely 1.0095x slower
   audio-oscillator                               232.337+-0.734      !     245.766+-5.690      ?     246.395+-6.033         ! definitely 1.0605x slower
   imaging-darkroom                               290.120+-0.657            290.039+-9.462            285.362+-1.089         ^ definitely 1.0167x faster
   imaging-desaturate                             159.958+-0.093      ^     157.669+-0.106            157.640+-0.081         ^ definitely 1.0147x faster
   imaging-gaussian-blur                          403.314+-0.235      ^     399.818+-0.136      ?     399.880+-0.147         ^ definitely 1.0086x faster
   json-parse-financial                            80.426+-0.158      !      81.449+-0.673             81.235+-0.407         ! definitely 1.0101x slower
   json-stringify-tinderbox                       101.580+-0.743      ^      99.099+-0.404      ?      99.473+-1.030         ^ definitely 1.0212x faster
   stanford-crypto-aes                             94.325+-0.572      ^      93.052+-0.381             92.935+-0.469         ^ definitely 1.0150x faster
   stanford-crypto-ccm                            100.648+-2.493             96.690+-1.465             94.232+-4.201           might be 1.0681x faster
   stanford-crypto-pbkdf2                         268.477+-0.860            268.418+-0.701            267.601+-2.615         
   stanford-crypto-sha256-iterative               116.105+-0.389      ?     116.555+-1.522            115.437+-0.180         ^ definitely 1.0058x faster

   &lt;arithmetic&gt; *                                 217.513+-1.018            216.828+-0.518            216.463+-0.538           might be 1.0048x faster
   &lt;geometric&gt;                                    185.636+-0.736            184.803+-0.290            184.282+-0.780           might be 1.0074x faster
   &lt;harmonic&gt;                                     159.309+-0.607      ^     158.280+-0.363            157.577+-1.066         ^ definitely 1.0110x faster

                                                        Old                    TipOfTree               UnifiedPolyGet          UnifiedPolyGet v. Old   
JSRegress:
   adapt-to-double-divide                         22.5317+-0.0627     ?     22.5739+-0.0772     ?     22.5898+-0.1272        ?
   aliased-arguments-getbyval                      0.8337+-0.0068     !      0.8547+-0.0071            0.8499+-0.0072        ! definitely 1.0194x slower
   allocate-big-object                             2.4885+-0.0255     ?      2.5051+-0.0251            2.4983+-0.0274        ?
   arity-mismatch-inlining                         0.7917+-0.0303     ?      0.8053+-0.0204     ?      0.8069+-0.0203        ? might be 1.0192x slower
   array-access-polymorphic-structure              6.7949+-0.1070     ?      6.8556+-0.1687            6.7986+-0.1092        ?
   array-with-double-add                           5.8730+-0.1407            5.8717+-0.0689     ?      5.9266+-0.0530        ?
   array-with-double-increment                     4.2224+-0.0857            4.1434+-0.0814     ?      4.1485+-0.0428          might be 1.0178x faster
   array-with-double-mul-add                       7.0769+-0.0562     ^      6.6465+-0.0506     ?      6.7018+-0.0632        ^ definitely 1.0560x faster
   array-with-double-sum                           7.8998+-0.0934     ?      7.9135+-0.0986            7.8590+-0.0720        
   array-with-int32-add-sub                       10.5511+-0.0940     ?     10.5793+-0.0840     ?     10.5842+-0.0708        ?
   array-with-int32-or-double-sum                  7.9422+-0.0948     ?      7.9892+-0.0687     ?      8.0244+-0.1096        ? might be 1.0103x slower
   big-int-mul                                     4.7901+-0.0506     ?      4.8486+-0.0421     ?      4.8878+-0.0170        ! definitely 1.0204x slower
   boolean-test                                    4.4370+-0.0697            4.4099+-0.0610            4.3988+-0.0897        
   cast-int-to-double                             13.9027+-0.1203           13.8970+-0.0933           13.7902+-0.0983        
   cell-argument                                  14.4202+-0.1095     ?     14.4537+-0.1048           14.4184+-0.0801        
   cfg-simplify                                    3.9510+-0.0735     ^      3.8530+-0.0150     ?      3.8551+-0.0136        ^ definitely 1.0249x faster
   cmpeq-obj-to-obj-other                         10.6184+-0.1939     ?     10.9971+-0.2446     ?     11.0871+-0.1825        ! definitely 1.0441x slower
   constant-test                                   8.5114+-0.1413     ?      8.6566+-0.1623            8.6543+-0.0782        ? might be 1.0168x slower
   direct-arguments-getbyval                       0.7325+-0.0098            0.7316+-0.0084     ?      0.7402+-0.0083        ? might be 1.0105x slower
   double-pollution-getbyval                      10.8447+-0.0959           10.8290+-0.0798           10.8073+-0.0672        
   double-pollution-putbyoffset                    4.8126+-0.0841     ?      4.9423+-0.0836            4.9403+-0.0698        ? might be 1.0265x slower
   external-arguments-getbyval                     1.9975+-0.0170     ^      1.9237+-0.0230            1.9128+-0.0192        ^ definitely 1.0443x faster
   external-arguments-putbyval                     3.1447+-0.0205     ^      3.0390+-0.0174            3.0321+-0.0106        ^ definitely 1.0371x faster
   Float32Array-matrix-mult                       13.9539+-0.3143           13.9397+-0.1615     ?     14.2772+-0.3376        ? might be 1.0232x slower
   fold-double-to-int                             22.7797+-0.3908     ^     22.0659+-0.1207           22.0575+-0.2714        ^ definitely 1.0327x faster
   function-dot-apply                              3.1141+-0.0133     ^      3.0587+-0.0139            3.0572+-0.0135        ^ definitely 1.0186x faster
   function-test                                   5.1683+-0.0735            5.0165+-0.0795            4.9732+-0.1306          might be 1.0392x faster
   get-by-id-chain-from-try-block                  6.6736+-0.1546     ?      6.7177+-0.1703            6.7154+-0.1221        ?
   get-by-id-proto-or-self                        88.5038+-10.9461    ?     93.9929+-7.7281     ^     22.9150+-0.3986        ^ definitely 3.8623x faster
   get-by-id-self-or-proto                        77.4939+-8.3832     ?     93.5840+-9.0334     ^     23.2360+-0.4549        ^ definitely 3.3351x faster
   HashMap-put-get-iterate-keys                   85.9905+-0.6022           85.2178+-0.4312           84.9744+-0.6584          might be 1.0120x faster
   HashMap-put-get-iterate                        89.1902+-0.8937     ?     90.9055+-0.8570     ?     91.0667+-0.6971        ! definitely 1.0210x slower
   HashMap-string-put-get-iterate                 72.5963+-0.5256     ?     73.4586+-0.6337     ?     73.6254+-0.3767        ! definitely 1.0142x slower
   indexed-properties-in-objects                   4.3451+-0.0636     !      4.4402+-0.0113            4.4325+-0.0156        ! definitely 1.0201x slower
   inline-arguments-access                         1.2758+-0.0330     !      1.3632+-0.0138     ?      1.3656+-0.0148        ! definitely 1.0704x slower
   inline-arguments-local-escape                  25.4749+-0.4816     ^     23.1775+-0.3295           22.9538+-0.2450        ^ definitely 1.1098x faster
   inline-get-scoped-var                           6.4871+-0.0684     ?      6.5056+-0.0745     ?      6.5531+-0.0795        ? might be 1.0102x slower
   inlined-put-by-id-transition                   16.2780+-0.3036     ^     14.8304+-0.2027           14.5252+-0.2582        ^ definitely 1.1207x faster
   int-or-other-abs-then-get-by-val                8.7706+-0.0887     !      8.9808+-0.0881            8.9360+-0.0897        ? might be 1.0189x slower
   int-or-other-abs-zero-then-get-by-val          36.8646+-0.0844     ?     36.9991+-0.1302     ?     37.1567+-0.2785        ?
   int-or-other-add-then-get-by-val               10.1781+-0.0850     ?     10.2212+-0.0914     ?     10.2762+-0.1145        ?
   int-or-other-add                               10.4812+-0.0667     ?     10.4980+-0.1084     ?     10.5137+-0.0718        ?
   int-or-other-div-then-get-by-val                6.3658+-0.0831     ?      6.3999+-0.0746            6.3035+-0.0790        
   int-or-other-max-then-get-by-val                7.2332+-0.0767     ?      7.3387+-0.1070            7.3274+-0.0954        ? might be 1.0130x slower
   int-or-other-min-then-get-by-val                7.3011+-0.0862            7.2822+-0.0701     ?      7.3933+-0.0948        ? might be 1.0126x slower
   int-or-other-mod-then-get-by-val                6.2039+-0.0763            6.1833+-0.1012            6.1624+-0.0738        
   int-or-other-mul-then-get-by-val                6.5467+-0.0965            6.4610+-0.0752     ?      6.5724+-0.0835        ?
   int-or-other-neg-then-get-by-val                8.0529+-0.0923            7.9717+-0.0752     ?      8.0986+-0.1006        ?
   int-or-other-neg-zero-then-get-by-val          36.7673+-0.3192           36.5204+-0.2644     ?     36.6889+-0.2520        
   int-or-other-sub-then-get-by-val               10.1413+-0.0670     ?     10.2789+-0.0947           10.2339+-0.1124        ?
   int-or-other-sub                                8.1879+-0.0926     ?      8.2793+-0.1179            8.1801+-0.0815        
   int-overflow-local                             11.9078+-0.2204           11.8227+-0.1812           11.7633+-0.1304          might be 1.0123x faster
   Int16Array-bubble-sort                         49.1989+-0.1528     !     49.7234+-0.1660           49.6636+-0.0730        ! definitely 1.0094x slower
   Int16Array-load-int-mul                         1.9200+-0.0099     ?      1.9251+-0.0072     ?      1.9341+-0.0150        ?
   Int8Array-load                                  4.8002+-0.0659     ?      4.8134+-0.0526     ?      4.8180+-0.0593        ?
   integer-divide                                 15.3799+-0.2384     ?     15.3955+-0.1370           15.3171+-0.1149        
   integer-modulo                                  1.9954+-0.0201            1.9795+-0.0138            1.9727+-0.0103          might be 1.0115x faster
   make-indexed-storage                            3.7304+-0.0342     ?      3.7599+-0.1022     ?      3.9216+-0.1453        ! definitely 1.0512x slower
   marsaglia                                     521.5661+-0.6712          520.8473+-0.5476     ?    521.3623+-0.2989        
   method-on-number                               27.2531+-0.3917           26.5825+-0.3032     ^     25.8539+-0.3782        ^ definitely 1.0541x faster
   nested-function-parsing-random                385.0966+-13.3681         380.6488+-13.0704    ?    394.6828+-13.3224       ? might be 1.0249x slower
   nested-function-parsing                        47.8988+-0.9486     ?     48.2393+-1.1056           48.2193+-1.0325        ?
   new-array-buffer-dead                           3.6648+-0.0202     ?      3.6960+-0.0657     ?      3.6992+-0.0683        ?
   new-array-buffer-push                          10.2172+-0.1273     ?     10.2424+-0.1712           10.1984+-0.1949        
   new-array-dead                                 28.4345+-0.1260           28.3978+-0.0902     ?     28.8231+-0.4293        ? might be 1.0137x slower
   new-array-push                                  6.7966+-0.0513     ?      6.8387+-0.0498            6.8305+-0.0565        ?
   number-test                                     4.3675+-0.0630            4.3266+-0.0696     ?      4.3807+-0.0733        ?
   object-closure-call                            12.9149+-1.4157           10.5454+-1.9110     ?     10.5542+-1.9159          might be 1.2237x faster
   object-test                                     4.8190+-0.0575     ?      4.8691+-0.0737     ?      4.9385+-0.1423        ? might be 1.0248x slower
   poly-stricteq                                  92.0432+-0.2317           91.8998+-0.2668     ?     93.0736+-1.2031        ? might be 1.0112x slower
   polymorphic-structure                          20.9705+-0.1892           20.8193+-0.0833     ?     21.0303+-0.5561        ?
   polyvariant-monomorphic-get-by-id              12.5440+-0.0828           12.5417+-0.0999     ?     12.5760+-0.1046        ?
   rare-osr-exit-on-local                         20.0151+-0.1034     ?     20.0200+-0.0636     ?     20.1111+-0.0574        ?
   register-pressure-from-osr                     31.6860+-0.0844           31.4304+-0.1804           31.2382+-0.0460        ^ definitely 1.0143x faster
   simple-activation-demo                         34.3251+-0.1015     ?     34.6341+-0.4088           34.2606+-0.0801        
   slow-array-profile-convergence                  3.8994+-0.0213            3.8418+-0.0498            3.8202+-0.0569        ^ definitely 1.0207x faster
   slow-convergence                                3.4244+-0.0144     ?      3.4535+-0.0189     ?      3.4645+-0.0131        ! definitely 1.0117x slower
   sparse-conditional                              1.3228+-0.0186            1.3160+-0.0249     ^      1.2622+-0.0235        ^ definitely 1.0480x faster
   splice-to-remove                               49.4806+-0.2197     !     50.1436+-0.2307     ?     50.3002+-0.4603        ! definitely 1.0166x slower
   string-concat-object                            2.7493+-0.0488            2.7247+-0.0316     ?      2.7474+-0.0409        
   string-concat-pair-object                       2.6498+-0.0449     ?      2.6506+-0.0122     ?      2.6623+-0.0295        ?
   string-concat-pair-simple                      17.2728+-0.2463           17.0527+-0.2037           17.0116+-0.2578          might be 1.0154x faster
   string-concat-simple                           17.2851+-0.3536           16.9752+-0.3118     ?     17.4068+-0.3865        ?
   string-cons-repeat                             10.2054+-0.0219           10.1925+-0.0180     ?     10.1934+-0.0175        
   string-cons-tower                              10.9177+-0.0293           10.8838+-0.0351           10.8716+-0.0349        
   string-hash                                     2.5622+-0.0138     ?      2.5721+-0.0104            2.5715+-0.0099        ?
   string-repeat-arith                            45.0630+-0.3495     ^     43.3468+-0.3528     ?     43.8571+-0.8397        ^ definitely 1.0275x faster
   string-sub                                     87.9294+-0.7877     ^     85.7649+-0.6254     ?     86.5203+-0.5675        ^ definitely 1.0163x faster
   string-test                                     4.2099+-0.0438     ?      4.2458+-0.0715     !      4.3853+-0.0487        ! definitely 1.0417x slower
   structure-hoist-over-transitions                3.1782+-0.0287     ?      3.1891+-0.0190            3.1829+-0.0211        ?
   tear-off-arguments-simple                       1.7572+-0.0100     !      1.9795+-0.0126            1.9785+-0.0121        ! definitely 1.1259x slower
   tear-off-arguments                              3.1917+-0.0099     !      3.3206+-0.0053     ?      3.3321+-0.0063        ! definitely 1.0440x slower
   temporal-structure                             21.0500+-0.1098     ?     21.2926+-0.3760           21.0476+-0.0753        
   to-int32-boolean                               23.1854+-0.1147     ^     21.3925+-0.1140           21.3353+-0.0611        ^ definitely 1.0867x faster
   undefined-test                                  4.5156+-0.0519            4.4975+-0.0314            4.4863+-0.0483        

   &lt;arithmetic&gt;                                   26.4314+-0.1533     ?     26.5036+-0.1908     ^     25.1952+-0.1629        ^ definitely 1.0491x faster
   &lt;geometric&gt; *                                   9.7911+-0.0302            9.7798+-0.0424     ^      9.5115+-0.0402        ^ definitely 1.0294x faster
   &lt;harmonic&gt;                                      5.0970+-0.0294     ?      5.1259+-0.0195            5.1099+-0.0201        ? might be 1.0025x slower

                                                        Old                    TipOfTree               UnifiedPolyGet          UnifiedPolyGet v. Old   
All benchmarks:
   &lt;arithmetic&gt;                                   42.6577+-0.3166     ^     41.3176+-0.1554     ^     40.4736+-0.0999        ^ definitely 1.0540x faster
   &lt;geometric&gt;                                    11.3249+-0.0459           11.2551+-0.0537     ^     11.0651+-0.0514        ^ definitely 1.0235x faster
   &lt;harmonic&gt;                                      3.6303+-0.0296     ?      3.6383+-0.0307            3.6380+-0.0300        ? might be 1.0021x slower

                                                        Old                    TipOfTree               UnifiedPolyGet          UnifiedPolyGet v. Old   
Geomean of preferred means:
   &lt;scaled-result&gt;                                21.8654+-0.1020           21.7184+-0.1010           21.5848+-0.0996        ^ definitely 1.0130x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898487</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-09 10:13:35 -0700</bug_when>
    <thetext>   gbemu                                 x2     253.92247+-16.72937   ^   142.70076+-2.92763    ^   136.96312+-1.94993       ^ definitely 1.8539x faster

Delicious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898488</commentid>
    <comment_count>5</comment_count>
      <attachid>204106</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-09 10:18:16 -0700</bug_when>
    <thetext>Comment on attachment 204106
the patch

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

r=me, but I think I spotted a bug.

&gt; Source/JavaScriptCore/ChangeLog:17
&gt; +        I believe that this was introduced way back in the days of the old interpreter,
&gt; +        where distinguishing between self lists, proto lists, and chain lists was meaningful
&gt; +        for interpreter performance: it meant fewer branches to evaluate those lists. Then

Yup.

&gt; Source/JavaScriptCore/bytecode/PolymorphicAccessStructureList.h:69
&gt; -            this-&gt;isDirect = isDirect;
&gt; +            isDirect = _isDirect;

I prefer the this-&gt; style, but I guess it&apos;s the minority in this function.

&gt; Source/JavaScriptCore/dfg/DFGRepatch.cpp:423
&gt; +        || baseValue.asCell()-&gt;structure()-&gt;isUncacheableDictionary())

I think we need to check propertyAccessesAreCacheable() instead of isUncacheableDictionary(), to account for prohibitsPropertyCaching().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898492</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-09 10:36:49 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt;    gbemu                                 x2     253.92247+-16.72937   ^   142.70076+-2.92763    ^   136.96312+-1.94993       ^ definitely 1.8539x faster
&gt; 
&gt; Delicious.

Note most of that is from merging some fixes from trunk!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898494</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-09 11:22:45 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 204106 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=204106&amp;action=review
&gt; 
&gt; r=me, but I think I spotted a bug.
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:17
&gt; &gt; +        I believe that this was introduced way back in the days of the old interpreter,
&gt; &gt; +        where distinguishing between self lists, proto lists, and chain lists was meaningful
&gt; &gt; +        for interpreter performance: it meant fewer branches to evaluate those lists. Then
&gt; 
&gt; Yup.
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PolymorphicAccessStructureList.h:69
&gt; &gt; -            this-&gt;isDirect = isDirect;
&gt; &gt; +            isDirect = _isDirect;
&gt; 
&gt; I prefer the this-&gt; style, but I guess it&apos;s the minority in this function.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGRepatch.cpp:423
&gt; &gt; +        || baseValue.asCell()-&gt;structure()-&gt;isUncacheableDictionary())
&gt; 
&gt; I think we need to check propertyAccessesAreCacheable() instead of isUncacheableDictionary(), to account for prohibitsPropertyCaching().

Yup, we do that check everywhere else.  Will change and retest performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898498</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-09 12:19:37 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/151355</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204106</attachid>
            <date>2013-06-08 18:39:38 -0700</date>
            <delta_ts>2013-06-09 10:18:16 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>25293</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxMzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDEzLTA2LTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogREZHIEdldEJ5SWQgcGF0Y2hpbmcgc2hvdWxkbid0IGRpc3Rpbmd1aXNoIGJl
dHdlZW4gc2VsZiBsaXN0cyBhbmQgcHJvdG8gbGlzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzM3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSBpZiB5b3UgZGlkIHNl
bGYgYWNjZXNzZXMgYW5kIHRoZW4gd2FudGVkIHRvIGRvIGEgcHJvdG90eXBlIGFjY2VzcywgeW91
J2QKKyAgICAgICAgaGF2ZSBhIGJhZCB0aW1lOiB0aGUgcHJvdG90eXBlIGFjY2Vzc2VzIHdvdWxk
IGJlIGZvcmNlZCB0byB0YWtlIHNsb3cgcGF0aCBiZWNhdXNlCisgICAgICAgIHRoZSBzZWxmIGxp
c3Qgd291bGRuJ3QgYWxsb3cgcHJvdG90eXBlIGFjY2Vzc2VzLiBMaWtld2lzZSBpZiB5b3UgZGlk
IHByb3RvdHlwZSAob3IKKyAgICAgICAgY2hhaW4pIGFjY2Vzc2VzIGFuZCB0aGVuIHdhbnRlZCB0
byBkbyBhIHNlbGYgYWNjZXNzLCBzaW1pbGFyIHN0dXBpZGl0eSB3b3VsZCBlbnN1ZS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgZml4ZXMgdGhlIHN0dXBpZGl0eS4KKworICAgICAgICBJIGJlbGll
dmUgdGhhdCB0aGlzIHdhcyBpbnRyb2R1Y2VkIHdheSBiYWNrIGluIHRoZSBkYXlzIG9mIHRoZSBv
bGQgaW50ZXJwcmV0ZXIsCisgICAgICAgIHdoZXJlIGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4gc2Vs
ZiBsaXN0cywgcHJvdG8gbGlzdHMsIGFuZCBjaGFpbiBsaXN0cyB3YXMgbWVhbmluZ2Z1bAorICAg
ICAgICBmb3IgaW50ZXJwcmV0ZXIgcGVyZm9ybWFuY2U6IGl0IG1lYW50IGZld2VyIGJyYW5jaGVz
IHRvIGV2YWx1YXRlIHRob3NlIGxpc3RzLiBUaGVuCisgICAgICAgIGl0IGdvdCBtb3N0bHkgY2Fy
cmllZCBvdmVyIHRvIHRoZSBvbGQgSklUIHNpbmNlIHRoZSBvbGQgSklUIHdhcyBqdXN0IGluaXRp
YWxseSBhbgorICAgICAgICBvcHRpbWl6ZWQgdmVyc2lvbiBvZiB0aGUgb2xkIGludGVycHJldGVy
LCBhbmQgdGhlbiBsYXRlciBpdCBnb3QgY2FycmllZCBvdmVyIHRvIHRoZQorICAgICAgICBERkcg
YmVjYXVzZSBJIGRpZG4ndCBrbm93IGFueSBiZXR0ZXIgYXQgdGhlIHRpbWUuIE5vdyBJIGRvIGtu
b3cgYmV0dGVyIGFuZCBJJ20KKyAgICAgICAgZml4aW5nIGl0LgorCisgICAgICAgICogYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0Lmg6CisgICAgICAgIChKU0M6OlBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdDo6UG9seW1vcnBoaWNTdHViSW5mbzo6c2V0KToKKyAg
ICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmTGlzdCk6CisgICAgICAgICogZGZnL0RGR09w
ZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICog
ZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNhY2hlR2V0QnlJRCk6
CisgICAgICAgIChKU0M6OkRGRzo6Z2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KToKKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6cGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yik6Cisg
ICAgICAgIChKU0M6OkRGRzo6dHJ5QnVpbGRHZXRCeUlETGlzdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6ZGZnQnVpbGRHZXRCeUlETGlzdCk6CisKIDIwMTMtMDYtMDggIE1hcmsgTGFtICA8bWFyay5s
YW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZWQgYm9ndXMgYXNzZXJ0aW9uIGluIENhbGxG
cmFtZTo6c2V0TG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdC5oCShyZXZpc2lvbiAxNTEzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDMxICs2MCwzMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICB1LnByb3RvLmNsZWFy
KCk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldChWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFz
ZSwgYm9vbCBpc0RpcmVjdCkKKyAgICAgICAgdm9pZCBzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jh
c2UsIGJvb2wgX2lzRGlyZWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBzdHViUm91dGluZSA9
IF9zdHViUm91dGluZTsKICAgICAgICAgICAgIGJhc2Uuc2V0KHZtLCBvd25lciwgX2Jhc2UpOwog
ICAgICAgICAgICAgdS5wcm90by5jbGVhcigpOwogICAgICAgICAgICAgaXNDaGFpbiA9IGZhbHNl
OwotICAgICAgICAgICAgdGhpcy0+aXNEaXJlY3QgPSBpc0RpcmVjdDsKKyAgICAgICAgICAgIGlz
RGlyZWN0ID0gX2lzRGlyZWN0OwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgdm9p
ZCBzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBf
c3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVyZSogX3Byb3RvLCBib29sIGlz
RGlyZWN0KQorICAgICAgICB2b2lkIHNldChWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwgU3RydWN0
dXJlKiBfcHJvdG8sIGJvb2wgX2lzRGlyZWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBzdHVi
Um91dGluZSA9IF9zdHViUm91dGluZTsKICAgICAgICAgICAgIGJhc2Uuc2V0KHZtLCBvd25lciwg
X2Jhc2UpOwogICAgICAgICAgICAgdS5wcm90by5zZXQodm0sIG93bmVyLCBfcHJvdG8pOwogICAg
ICAgICAgICAgaXNDaGFpbiA9IGZhbHNlOwotICAgICAgICAgICAgdGhpcy0+aXNEaXJlY3QgPSBp
c0RpcmVjdDsKKyAgICAgICAgICAgIGlzRGlyZWN0ID0gX2lzRGlyZWN0OwogICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgdm9pZCBzZXQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQYXNz
UmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0
cnVjdHVyZUNoYWluKiBfY2hhaW4sIGJvb2wgaXNEaXJlY3QpCisgICAgICAgIHZvaWQgc2V0KFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gX3N0dWJSb3V0
aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmVDaGFpbiogX2NoYWluLCBib29sIF9pc0Rp
cmVjdCkKICAgICAgICAgewogICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBfc3R1YlJvdXRpbmU7
CiAgICAgICAgICAgICBiYXNlLnNldCh2bSwgb3duZXIsIF9iYXNlKTsKICAgICAgICAgICAgIHUu
Y2hhaW4uc2V0KHZtLCBvd25lciwgX2NoYWluKTsKICAgICAgICAgICAgIGlzQ2hhaW4gPSB0cnVl
OwotICAgICAgICAgICAgdGhpcy0+aXNEaXJlY3QgPSBpc0RpcmVjdDsKKyAgICAgICAgICAgIGlz
RGlyZWN0ID0gX2lzRGlyZWN0OwogICAgICAgICB9CiAgICAgfSBsaXN0W1BPTFlNT1JQSElDX0xJ
U1RfQ0FDSEVfU0laRV07CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE1MTM1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjcsMTIgKzEyNywxMyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8g
ewogICAgICAgICB1LmdldEJ5SWRDaGFpbi5pc0RpcmVjdCA9IGlzRGlyZWN0OwogICAgIH0KIAot
ICAgIHZvaWQgaW5pdEdldEJ5SWRTZWxmTGlzdChQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QqIHN0cnVjdHVyZUxpc3QsIGludCBsaXN0U2l6ZSkKKyAgICB2b2lkIGluaXRHZXRCeUlkU2Vs
Zkxpc3QoUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBzdHJ1Y3R1cmVMaXN0LCBpbnQg
bGlzdFNpemUsIGJvb2wgZGlkU2VsZlBhdGNoaW5nID0gZmFsc2UpCiAgICAgewogICAgICAgICBh
Y2Nlc3NUeXBlID0gYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3Q7CiAKICAgICAgICAgdS5nZXRC
eUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdCA9IHN0cnVjdHVyZUxpc3Q7CiAgICAgICAgIHUuZ2V0
QnlJZFNlbGZMaXN0Lmxpc3RTaXplID0gbGlzdFNpemU7CisgICAgICAgIHUuZ2V0QnlJZFNlbGZM
aXN0LmRpZFNlbGZQYXRjaGluZyA9IGRpZFNlbGZQYXRjaGluZzsKICAgICB9CiAKICAgICB2b2lk
IGluaXRHZXRCeUlkUHJvdG9MaXN0KFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogc3Ry
dWN0dXJlTGlzdCwgaW50IGxpc3RTaXplKQpAQCAtMjc3LDcgKzI3OCw4IEBAIHN0cnVjdCBTdHJ1
Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIH0gZ2V0QnlJZENoYWluOwogICAgICAgICBzdHJ1Y3Qg
ewogICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBzdHJ1Y3R1cmVM
aXN0OwotICAgICAgICAgICAgaW50IGxpc3RTaXplOworICAgICAgICAgICAgaW50IGxpc3RTaXpl
IDogMzE7CisgICAgICAgICAgICBib29sIGRpZFNlbGZQYXRjaGluZyA6IDE7CiAgICAgICAgIH0g
Z2V0QnlJZFNlbGZMaXN0OwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBzdHJ1Y3R1cmVMaXN0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNTEzNTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MTUsMjYgKzUxNSw2IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uR2UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUpfRlVOQ1RJ
T05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKSShvcGVyYXRpb25HZXRCeUlkUHJvdG9C
dWlsZExpc3QpOwotRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlk
UHJvdG9CdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGJhc2UsIFN0cmluZ0ltcGwqIHVpZCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVp
ZCk7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCkt
PmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9
IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOwotCi0gICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7Ci0gICAgUHJvcGVydHlTbG90
IHNsb3QoYmFzZVZhbHVlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhl
YywgaWRlbnQsIHNsb3QpOwotICAgIAotICAgIGlmIChhY2Nlc3NUeXBlID09IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpKQotICAgICAgICBkZmdCdWlsZEdldEJ5
SURQcm90b0xpc3QoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgc3R1YkluZm8pOwotCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotfQotCiBKX0ZVTkNUSU9OX1dSQVBQ
RVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkkob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplV2l0aFJl
dHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBTdHJpbmdJ
bXBsKiB1aWQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTEzNTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTM2LDcgKzEzNiw2IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uR2UKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxBcnJh
eUludChFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwogRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeUlkUHJvdG9CdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQ2FsbEN1c3RvbUdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYywgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEdldHRlcihFeGVjU3RhdGUqLCBK
U0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE1MTM1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NSw3ICszNTUs
NyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgCiAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgcmVwbGFjZVdpdGhK
dW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkUHJvdG9CdWlsZExpc3QpOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1
aWxkTGlzdCk7CiAgICAgCiAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50
LCB0cnVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2OCw0OCArMzY4LDgzIEBAIHZvaWQgZGZn
UmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCAKICAgICAgICAgZGZnUmVwYXRjaENhbGwo
ZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9u
R2V0QnlJZCk7CiB9CiAKLXN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorc3RhdGlj
IGJvb2wgZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KAorICAgIFZNKiB2bSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QqJiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGludCYgbGlz
dEluZGV4KQogewotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpCi0gICAgICAgIHx8ICFzbG90
LmlzQ2FjaGVhYmxlKCkKLSAgICAgICAgfHwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
KS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKQotICAgICAgICB8fCBzbG90LnNsb3RCYXNlKCkg
IT0gYmFzZVZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCFzdHVi
SW5mby5wYXRjaC5kZmcucmVnaXN0ZXJzRmx1c2hlZCkgewotICAgICAgICAvLyBXZSBjYW5ub3Qg
ZG8gYXMgbXVjaCBpbmxpbmUgY2FjaGluZyBpZiB0aGUgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNo
ZWQgcHJpb3IgdG8gdGhpcyBHZXRCeUlkLiBJbiBwYXJ0aWN1bGFyLAotICAgICAgICAvLyBub24t
VmFsdWUgY2FjaGVkIHByb3BlcnRpZXMgcmVxdWlyZSBwbGFudGluZyBjYWxscywgd2hpY2ggcmVx
dWlyZXMgcmVnaXN0ZXJzIHRvIGhhdmUgYmVlbiBmbHVzaGVkLiBUaHVzLAotICAgICAgICAvLyBp
ZiByZWdpc3RlcnMgd2VyZSBub3QgZmx1c2hlZCwgZG9uJ3QgZG8gbm9uLVZhbHVlIGNhY2hpbmcu
Ci0gICAgICAgIGlmIChzbG90LmNhY2hlZFByb3BlcnR5VHlwZSgpICE9IFByb3BlcnR5U2xvdDo6
VmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgSlNDZWxsKiBiYXNlQ2Vs
bCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VD
ZWxsLT5zdHJ1Y3R1cmUoKTsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAKLSAgICBB
U1NFUlQoc2xvdC5zbG90QmFzZSgpLmlzT2JqZWN0KCkpOwotICAgIAotICAgIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OwotICAgIGludCBs
aXN0SW5kZXg7Ci0gICAgCiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vu
c2V0KSB7Ci0gICAgICAgIEFTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOwogICAgICAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCk7Ci0g
ICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LCAwKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QsIDAsIGZhbHNlKTsKICAgICAgICAgbGlzdEluZGV4ID0gMDsKICAgICB9
IGVsc2UgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7
Ci0gICAgICAgIEFTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOwogICAgICAgICBwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgSklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2Vk
Um91dGluZShzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpLCBzdHViSW5mby51LmdldEJ5SWRTZWxm
LmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwotICAgICAgICBzdHViSW5mby5pbml0
R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CisgICAgICAgIHN0
dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxLCB0
cnVlKTsKKyAgICAgICAgbGlzdEluZGV4ID0gMTsKKyAgICB9IGVsc2UgaWYgKHN0dWJJbmZvLmFj
Y2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9jaGFpbikgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVCghIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqdm0sIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLnN0dWJSb3V0aW5lLCBzdHViSW5mby51Lmdl
dEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby51LmdldEJ5SWRD
aGFpbi5jaGFpbi5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNs
ZWFyKCk7CisgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNT
dHJ1Y3R1cmVMaXN0LCAxLCBmYWxzZSk7CiAgICAgICAgIGxpc3RJbmRleCA9IDE7CiAgICAgfSBl
bHNlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nl
c3NfZ2V0X2J5X2lkX3NlbGZfbGlzdCk7CiAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7CiAgICAgICAgIGxp
c3RJbmRleCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplOwogICAgIH0KICAg
ICAKLSAgICBpZiAobGlzdEluZGV4IDwgUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKSB7Cisg
ICAgaWYgKGxpc3RJbmRleCA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChsaXN0SW5kZXggPCBQT0xZ
TU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
dm9pZCBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIEpJVFN0dWJSb3V0aW5lKiBzdHViUm91dGluZSkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRf
c2VsZl9saXN0KTsKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsK
KyAgICBpZiAoc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3QuZGlkU2VsZlBhdGNoaW5nKSB7Cisg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAorICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKKyAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRj
aC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksCisgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOworfQorCitzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5
SURMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKK3sKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKQorICAgICAgICB8fCAhc2xv
dC5pc0NhY2hlYWJsZSgpCisgICAgICAgIHx8IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJl
KCktPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwo
KTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKKyAg
ICAKKyAgICBpZiAoc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgeworICAgICAgICBpZiAo
IXN0dWJJbmZvLnBhdGNoLmRmZy5yZWdpc3RlcnNGbHVzaGVkKSB7CisgICAgICAgICAgICAvLyBX
ZSBjYW5ub3QgZG8gYXMgbXVjaCBpbmxpbmUgY2FjaGluZyBpZiB0aGUgcmVnaXN0ZXJzIHdlcmUg
bm90IGZsdXNoZWQgcHJpb3IgdG8gdGhpcyBHZXRCeUlkLiBJbiBwYXJ0aWN1bGFyLAorICAgICAg
ICAgICAgLy8gbm9uLVZhbHVlIGNhY2hlZCBwcm9wZXJ0aWVzIHJlcXVpcmUgcGxhbnRpbmcgY2Fs
bHMsIHdoaWNoIHJlcXVpcmVzIHJlZ2lzdGVycyB0byBoYXZlIGJlZW4gZmx1c2hlZC4gVGh1cywK
KyAgICAgICAgICAgIC8vIGlmIHJlZ2lzdGVycyB3ZXJlIG5vdCBmbHVzaGVkLCBkb24ndCBkbyBu
b24tVmFsdWUgY2FjaGluZy4KKyAgICAgICAgICAgIGlmIChzbG90LmNhY2hlZFByb3BlcnR5VHlw
ZSgpICE9IFByb3BlcnR5U2xvdDo6VmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgCisgICAgICAgIEFTU0VSVChzbG90LnNsb3RCYXNlKCkuaXNPYmpl
Y3QoKSk7CisgICAgCisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OworICAgICAgICBpbnQgbGlzdEluZGV4OworCisgICAgICAg
IGlmICghZ2V0UG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0KHZtLCBjb2RlQmxvY2ssIHN0dWJJbmZv
LCBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAogICAgICAgICBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5s
aXN0U2l6ZSsrOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5iYXNlR1BSKTsKQEAgLTUyOSw4ICs1NjQsOCBA
QCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICAg
ICAgRklOQUxJWkVfREZHX0NPREUoCiAgICAgICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAog
ICAgICAgICAgICAgICAgICAgICAoIkRGRyBHZXRCeUlkIHBvbHltb3JwaGljIGxpc3QgYWNjZXNz
IGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvQ1N0
cmluZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAg
ICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRk
cmVzcygpKSksCiAgICAgICAgICAgICAgICAgKnZtLAogICAgICAgICAgICAgICAgIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICAgICAgc2xvdC5jYWNoZWRQcm9wZXJ0
eVR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkdldHRlcgpAQCAtNTM4LDg3ICs1NzMsNDcgQEAgc3Rh
dGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAKICAgICAgICAg
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgaXNEaXJlY3Qp
OwogICAgICAgICAKLSAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9j
ayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAotICAgICAgICAgICAgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKLSAgICAgICAgICAgICAgICBzdHViSW5m
by5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksCi0gICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBwYXRjaEp1bXBUb0dldEJ5SWRTdHViKGNv
ZGVCbG9jaywgc3R1YkluZm8sIHN0dWJSb3V0aW5lLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGxp
c3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKTsKICAgICB9CiAgICAg
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIGRmZ0J1aWxkR2V0QnlJRExpc3QoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKLXsKLSAgICBib29sIGRvbnRDaGFuZ2VDYWxsID0gdHJ5QnVpbGRHZXRCeUlETGlzdChleGVj
LCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pOwotICAgIGlmICghZG9u
dENoYW5nZUNhbGwpCi0gICAgICAgIGRmZ1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwotfQotCi1zdGF0
aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoIWJh
c2VWYWx1ZS5pc0NlbGwoKQotICAgICAgICB8fCAhc2xvdC5pc0NhY2hlYWJsZSgpCi0gICAgICAg
IHx8IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpCi0gICAg
ICAgIHx8IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkucHJvaGli
aXRzUHJvcGVydHlDYWNoaW5nKCkKLSAgICAgICAgfHwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VW
YWx1ZQorICAgIGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygp
LnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpCiAgICAgICAgIHx8IHNsb3QuY2FjaGVkUHJvcGVy
dHlUeXBlKCkgIT0gUHJvcGVydHlTbG90OjpWYWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAorCiAgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS5pc09iamVjdCgpKTsKICAgICAKICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotICAgIHNpemVf
dCBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFz
ZVZhbHVlLCBzbG90LnNsb3RCYXNlKCksIHByb3BlcnR5TmFtZSwgb2Zmc2V0KTsKKyAgICBzaXpl
X3QgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJh
c2VWYWx1ZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudCwgb2Zmc2V0KTsKICAgICBpZiAoY291bnQg
PT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7CiAg
ICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVD
aGFpbihleGVjKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIAogICAgIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OwotICAgIGludCBsaXN0SW5k
ZXggPSAxOworICAgIGludCBsaXN0SW5kZXg7CisgICAgaWYgKCFnZXRQb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3Qodm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dCwgbGlzdEluZGV4KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmIChzdHVi
SW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4pIHsKLSAgICAgICAgQVNT
RVJUKCEhc3R1YkluZm8uc3R1YlJvdXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVy
ZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCp2bSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0
QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENo
YWluLmNoYWluLmdldCgpLCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUuY2xl
YXIoKTsKLSAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRQcm90b0xpc3QocG9seW1vcnBoaWNT
dHJ1Y3R1cmVMaXN0LCAxKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQoc3R1YkluZm8u
YWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpOwotICAgICAgICBwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3Quc3RydWN0
dXJlTGlzdDsKLSAgICAgICAgbGlzdEluZGV4ID0gc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0
Lmxpc3RTaXplOwotICAgIH0KKyAgICBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3QubGlzdFNp
emUrKzsKICAgICAKLSAgICBpZiAobGlzdEluZGV4IDwgUE9MWU1PUlBISUNfTElTVF9DQUNIRV9T
SVpFKSB7Ci0gICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZSsrOwot
ICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2Rl
TG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0g
MV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgICAgICBBU1NFUlQoISFsYXN0UHJv
dG9CZWdpbik7Ci0KLSAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsK
LSAgICAgICAgCi0gICAgICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1
YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb0RvbmUpLCBsYXN0UHJvdG9CZWdpbiwgc3R1YlJvdXRpbmUpOwotICAgICAgICAKLSAg
ICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgdHJ1
ZSk7Ci0gICAgICAgIAotICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJs
b2NrKTsKLSAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBz
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobGlzdElu
ZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQorICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0g
Q29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRl
eCAtIDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKKyAgICBBU1NFUlQoISFsYXN0UHJv
dG9CZWdpbik7CiAgICAgCi0gICAgcmV0dXJuIGZhbHNlOworICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmU7CisgICAgCisgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1
YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVy
ZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSksIGxhc3RQcm90b0JlZ2luLCBzdHViUm91dGluZSk7Cisg
ICAgCisgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2
bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwg
dHJ1ZSk7CisgICAgCisgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBzdHViUm91dGluZS5nZXQoKSk7CisgICAgCisgICAgcmV0dXJuIGxpc3RJbmRleCA8IChQ
T0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKTsKIH0KIAotdm9pZCBkZmdCdWlsZEdldEJ5
SURQcm90b0xpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgZGZnQnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQog
ewotICAgIGJvb2wgZG9udENoYW5nZUNhbGwgPSB0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QoZXhl
YywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvKTsKKyAgICBib29sIGRv
bnRDaGFuZ2VDYWxsID0gdHJ5QnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3Bl
cnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pOwogICAgIGlmICghZG9udENoYW5nZUNhbGwpCiAgICAg
ICAgIGRmZ1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxMzUw
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTMtMDYtMDggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAg
ICBmb3VydGhUaWVyOiBERkcgR2V0QnlJZCBwYXRjaGluZyBzaG91bGRuJ3QgZGlzdGluZ3Vpc2gg
YmV0d2VlbiBzZWxmIGxpc3RzIGFuZCBwcm90byBsaXN0cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3Mzc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGQgdGVzdHMgdGhhdCBzaG93IHdo
eSB0aGlzIGlzIGltcG9ydGFudC4gVGhlc2UgdGVzdHMgc3BlZWQgdXAgYnkgbW9yZSB0aGFuIDJ4
LgorCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL2dldC1ieS1pZC1wcm90by1vci1zZWxmLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL2dldC1ieS1pZC1w
cm90by1vci1zZWxmLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9nZXQt
YnktaWQtc2VsZi1vci1wcm90by1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
anMvcmVncmVzcy9nZXQtYnktaWQtc2VsZi1vci1wcm90by5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1wcm90by1vci1zZWxmLmpz
OiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAoRm9vKToK
KyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1zZWxmLW9y
LXByb3RvLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorICAgICAg
ICAoRm9vKToKKwogMjAxMy0wNi0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIGZvdXJ0aFRpZXI6IGRvbid0IGluc2VydCBGb3JjZU9TUkV4aXRzIGV4Y2VwdCBm
b3IgaW5hZGVxdWF0ZSBjb3ZlcmFnZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L2dldC1ieS1pZC1wcm90by1vci1zZWxmLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXByb3RvLW9yLXNlbGYtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL2dldC1ieS1p
ZC1wcm90by1vci1zZWxmLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
IEBACitKU1JlZ3Jlc3MvZ2V0LWJ5LWlkLXByb3RvLW9yLXNlbGYKKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9nZXQtYnktaWQtcHJvdG8tb3Itc2VsZi5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9nZXQtYnktaWQtcHJvdG8tb3Itc2VsZi5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL2dldC1ieS1pZC1w
cm90by1vci1zZWxmLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NU
WVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLXByb3RvLW9yLXNlbGYu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L2dldC1ieS1pZC1zZWxmLW9yLXByb3RvLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXNlbGYtb3ItcHJvdG8tZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL2dldC1ieS1p
ZC1zZWxmLW9yLXByb3RvLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
IEBACitKU1JlZ3Jlc3MvZ2V0LWJ5LWlkLXNlbGYtb3ItcHJvdG8KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9nZXQtYnktaWQtc2VsZi1vci1wcm90by5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9nZXQtYnktaWQtc2VsZi1vci1wcm90by5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL2dldC1ieS1pZC1z
ZWxmLW9yLXByb3RvLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NU
WVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLXNlbGYtb3ItcHJvdG8u
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtcHJvdG8tb3Itc2VsZi5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1wcm90by1v
ci1zZWxmLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9nZXQtYnktaWQtcHJvdG8tb3Itc2VsZi5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIyIEBACitmdW5jdGlvbiBmb28obykgeworICAgIHJldHVybiBvLmY7Cit9CisKK2Z1
bmN0aW9uIGJhcihhKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAyMDAwMDAwOyArK2kpIHsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhLmxlbmd0
aDsgKytqKQorICAgICAgICAgICAgcmVzdWx0ICs9IGZvbyhhW2pdKTsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZnVuY3Rpb24gRm9vKCkgeworfQorCitGb28ucHJvdG90eXBlLmYg
PSA0MjsKKwordmFyIHJlc3VsdCA9IGJhcihbbmV3IEZvbygpLCB7ZjoyNH1dKTsKKworaWYgKHJl
c3VsdCAhPSAxMzIwMDAwMDApCisgICAgdGhyb3cgIkVycm9yIGJhZCByZXN1bHQ6ICIgKyByZXN1
bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1i
eS1pZC1zZWxmLW9yLXByb3RvLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLXNlbGYtb3ItcHJvdG8uanMJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1p
ZC1zZWxmLW9yLXByb3RvLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAKK2Z1bmN0
aW9uIGZvbyhvKSB7CisgICAgcmV0dXJuIG8uZjsKK30KKworZnVuY3Rpb24gYmFyKGEpIHsKKyAg
ICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDIwMDAwMDA7ICsraSkg
eworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGEubGVuZ3RoOyArK2opCisgICAgICAgICAg
ICByZXN1bHQgKz0gZm9vKGFbal0pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitm
dW5jdGlvbiBGb28oKSB7Cit9CisKK0Zvby5wcm90b3R5cGUuZiA9IDQyOworCit2YXIgcmVzdWx0
ID0gYmFyKFt7ZjoyNH0sIG5ldyBGb28oKV0pOworCitpZiAocmVzdWx0ICE9IDEzMjAwMDAwMCkK
KyAgICB0aHJvdyAiRXJyb3IgYmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
</data>
<flag name="review"
          id="225626"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>