<?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>143727</bug_id>
          
          <creation_ts>2015-04-14 14:19:31 -0700</creation_ts>
          <short_desc>DFG register fillSpeculate*() functions should validate incoming spill format is compatible with requested fill format</short_desc>
          <delta_ts>2015-05-14 15:54:46 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>mark.lam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1085260</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-04-14 14:19:31 -0700</bug_when>
    <thetext>The fillSpeculate*() functions like fillSpeculateCell() should check that current spill format for the virtual register is compatible.  If it isn&apos;t, then we should force and OSR exit.  There are some spot checks in these functions, but we can use the return result from the call to AbstractInterpreter&lt;&gt;::filter() at the top of each function to perform the checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085261</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-04-14 14:20:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/20541588&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085304</commentid>
    <comment_count>2</comment_count>
      <attachid>250751</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-04-14 16:06:03 -0700</bug_when>
    <thetext>Created attachment 250751
Patch

Appears neutral overall on performance with a few variations.  Notable is that sunspider:string-base64 is reported to be 5% faster, but that could be noise.

VMs tested:
&quot;Baseline&quot; at /Volumes/Data/src/webkit.baseline/WebKitBuild/Release/jsc (r182806)
&quot;143727&quot; at /Volumes/Data/src/webkit/WebKitBuild/Release/jsc (r182806)

Collected 4 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.

                                                         Baseline                   143727                                      
SunSpider:
   3d-cube                                            6.6951+-0.2440     ?      6.7707+-0.3619        ? might be 1.0113x slower
   3d-morph                                           7.8648+-0.1546     ?      7.8941+-0.1884        ?
   3d-raytrace                                        8.5908+-0.2727     ?      8.7690+-0.1159        ? might be 1.0208x slower
   access-binary-trees                                2.9194+-0.1589     ?      3.0078+-0.0492        ? might be 1.0303x slower
   access-fannkuch                                    7.9238+-0.2817     ?      8.0009+-0.2831        ?
   access-nbody                                       4.2805+-0.1937     ?      4.3350+-0.1628        ? might be 1.0127x slower
   access-nsieve                                      4.9242+-0.1054            4.7366+-0.3863          might be 1.0396x faster
   bitops-3bit-bits-in-byte                           1.8680+-0.1505            1.7475+-0.1081          might be 1.0690x faster
   bitops-bits-in-byte                                5.5717+-0.0880     ?      5.5908+-0.1382        ?
   bitops-bitwise-and                                 2.7184+-0.1716     ?      2.7535+-0.2034        ? might be 1.0129x slower
   bitops-nsieve-bits                                 5.0280+-0.2265            5.0228+-0.1496        
   controlflow-recursive                              2.7967+-0.1881     ?      2.8382+-0.1525        ? might be 1.0148x slower
   crypto-aes                                         5.7721+-0.1032            5.6432+-0.3392          might be 1.0228x faster
   crypto-md5                                         3.3722+-0.1628     ?      3.3975+-0.0320        ?
   crypto-sha1                                        3.2269+-0.1154            3.2017+-0.2253        
   date-format-tofte                                 12.3098+-0.4333           12.0205+-1.0824          might be 1.0241x faster
   date-format-xparb                                  7.6066+-0.4051            7.4769+-0.2108          might be 1.0173x faster
   math-cordic                                        4.1104+-0.1710     ?      4.1535+-0.0542        ? might be 1.0105x slower
   math-partial-sums                                  9.0890+-0.0958     ?      9.1769+-0.2290        ?
   math-spectral-norm                                 2.9006+-0.0721            2.8894+-0.0845        
   regexp-dna                                         9.5349+-0.4512     ?      9.7933+-0.3790        ? might be 1.0271x slower
   string-base64                                      6.0475+-0.1177     ^      5.7366+-0.1585        ^ definitely 1.0542x faster
   string-fasta                                       9.2220+-0.2754     ?      9.2825+-0.2248        ?
   string-tagcloud                                   13.5172+-0.4320           13.4819+-0.3588        
   string-unpack-code                                26.7908+-1.3774     ?     26.8724+-0.5808        ?
   string-validate-input                              6.6559+-0.1416     ?      6.9228+-0.7314        ? might be 1.0401x slower

   &lt;arithmetic&gt;                                       6.9745+-0.0493     ?      6.9814+-0.0841        ? might be 1.0010x slower

                                                         Baseline                   143727                                      
Octane:
   encrypt                                           0.31574+-0.00897    ?     0.32287+-0.00940       ? might be 1.0226x slower
   decrypt                                           5.65659+-0.02111          5.65017+-0.02365       
   deltablue                                x2       0.26609+-0.00050    ?     0.26661+-0.00269       ?
   earley                                            0.81587+-0.00663          0.81095+-0.00692       
   boyer                                            10.33068+-0.09405         10.31035+-0.04910       
   navier-stokes                            x2       6.41370+-0.06852          6.39819+-0.01887       
   raytrace                                 x2       1.71317+-0.06833    ?     1.76390+-0.09317       ? might be 1.0296x slower
   richards                                 x2       0.16647+-0.00480    ?     0.16811+-0.00521       ?
   splay                                    x2       0.52492+-0.01753          0.52429+-0.00490       
   regexp                                   x2      44.81353+-0.17889         44.45178+-0.34867       
   pdfjs                                    x2      62.55568+-0.39999    ?    62.61614+-0.58267       ?
   mandreel                                 x2      71.69652+-0.21810         71.60592+-1.53774       
   gbemu                                    x2      56.09795+-0.49104    ?    56.10090+-0.39067       ?
   closure                                           0.76699+-0.00535    ?     0.77035+-0.00192       ?
   jquery                                            9.61660+-0.04316          9.61625+-0.05188       
   box2d                                    x2      16.85752+-0.13343    ?    17.01420+-0.28640       ?
   zlib                                     x2     526.71844+-42.07698       525.24186+-38.40360      
   typescript                               x2    1104.50177+-13.87379      1091.16248+-17.64856        might be 1.0122x faster

   &lt;geometric&gt;                                       9.22295+-0.04102    ?     9.24270+-0.07206       ? might be 1.0021x slower

                                                         Baseline                   143727                                      
Kraken:
   ai-astar                                          469.689+-1.068            466.823+-12.643        
   audio-beat-detection                              153.569+-4.686            152.523+-4.125         
   audio-dft                                         206.638+-8.557            203.708+-3.627           might be 1.0144x faster
   audio-fft                                         113.852+-8.211            112.517+-7.424           might be 1.0119x faster
   audio-oscillator                                  265.707+-4.698            263.981+-1.014         
   imaging-darkroom                                  139.822+-0.684      ?     140.755+-3.112         ?
   imaging-desaturate                                 95.119+-0.455             94.625+-0.463         
   imaging-gaussian-blur                             156.583+-2.880      ?     156.854+-0.417         ?
   json-parse-financial                               66.596+-1.528             65.127+-0.816           might be 1.0225x faster
   json-stringify-tinderbox                           77.678+-1.587             76.882+-1.150           might be 1.0104x faster
   stanford-crypto-aes                                88.093+-2.553             86.838+-5.296           might be 1.0144x faster
   stanford-crypto-ccm                                66.703+-1.397      ?      72.410+-15.095        ? might be 1.0856x slower
   stanford-crypto-pbkdf2                            225.513+-1.096      ?     226.186+-1.652         ?
   stanford-crypto-sha256-iterative                   73.553+-1.066             73.502+-1.084         

   &lt;arithmetic&gt;                                      157.080+-1.402            156.624+-1.256           might be 1.0029x faster

                                                         Baseline                   143727                                      
JSRegress:
   abs-boolean                                        3.6832+-0.0995            3.6381+-0.1115          might be 1.0124x faster
   adapt-to-double-divide                            18.0697+-0.5780           17.6843+-0.1364          might be 1.0218x faster
   aliased-arguments-getbyval                         1.6911+-0.0398     ?      1.7546+-0.1153        ? might be 1.0375x slower
   allocate-big-object                                3.6746+-0.4463     ?      3.7822+-0.3241        ? might be 1.0293x slower
   arguments-named-and-reflective                    14.6545+-0.4213     ?     14.7844+-0.2388        ?
   arguments-out-of-bounds                           18.1047+-1.3071           17.7922+-0.4487          might be 1.0176x faster
   arguments-strict-mode                             13.8130+-0.4097           13.3796+-0.4407          might be 1.0324x faster
   arguments                                         12.0327+-0.6359           11.8663+-0.2127          might be 1.0140x faster
   arity-mismatch-inlining                            1.1000+-0.1074     ?      1.1740+-0.1148        ? might be 1.0673x slower
   array-access-polymorphic-structure                 9.2925+-0.1003            9.1429+-0.4231          might be 1.0164x faster
   array-nonarray-polymorhpic-access                 47.1545+-2.7377           47.1072+-4.0002        
   array-prototype-every                            118.9837+-2.4395     ?    119.5703+-4.1424        ?
   array-prototype-forEach                          117.3148+-2.9472     ?    117.8513+-1.2471        ?
   array-prototype-map                              129.7469+-3.1162     ?    132.8765+-3.3928        ? might be 1.0241x slower
   array-prototype-some                             119.7091+-3.7419          118.3590+-2.1894          might be 1.0114x faster
   array-splice-contiguous                           57.3076+-1.6176     ?     58.9095+-3.2983        ? might be 1.0280x slower
   array-with-double-add                              5.6701+-0.5087            5.6560+-0.1762        
   array-with-double-increment                        4.0297+-0.1468     ?      4.0671+-0.1101        ?
   array-with-double-mul-add                          7.0412+-0.0785     ?      7.2471+-0.2108        ? might be 1.0292x slower
   array-with-double-sum                              4.4521+-0.1456            4.4016+-0.1464          might be 1.0115x faster
   array-with-int32-add-sub                           9.5637+-0.3037            9.5309+-0.1467        
   array-with-int32-or-double-sum                     4.4882+-0.1748     ?      4.5848+-0.6026        ? might be 1.0215x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     45.1507+-1.1367     ?     46.2133+-1.8932        ? might be 1.0235x slower
   ArrayBuffer-DataView-alloc-long-lived             18.5651+-0.1542           18.3342+-0.3606          might be 1.0126x faster
   ArrayBuffer-Int32Array-byteOffset                  5.0153+-0.2657            4.9817+-0.3182        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     48.3492+-2.9078           47.4785+-1.3865          might be 1.0183x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     31.5641+-0.4340           31.3622+-0.7006        
   ArrayBuffer-Int8Array-alloc-long-lived            18.0937+-0.6177           17.8484+-0.3441          might be 1.0137x faster
   ArrayBuffer-Int8Array-alloc                       15.3066+-0.1885           14.8665+-0.4276          might be 1.0296x faster
   asmjs_bool_bug                                     8.8420+-0.1137            8.7374+-0.2682          might be 1.0120x faster
   assign-custom-setter-polymorphic                   4.4225+-0.1138            4.4219+-0.2467        
   assign-custom-setter                               5.6971+-0.2169     ?      5.8922+-0.2404        ? might be 1.0342x slower
   basic-set                                         12.6847+-0.5399           12.1803+-0.9787          might be 1.0414x faster
   big-int-mul                                        5.8146+-0.1920     ?      5.9888+-0.4068        ? might be 1.0299x slower
   boolean-test                                       4.2387+-0.0762     ?      4.2722+-0.1509        ?
   branch-fold                                        4.5798+-0.0810     ?      4.6478+-0.1579        ? might be 1.0148x slower
   by-val-generic                                    10.8729+-0.4481           10.8701+-0.2971        
   call-spread-apply                                 40.1239+-0.4979     ?     40.8217+-1.2363        ? might be 1.0174x slower
   call-spread-call                                  33.3540+-0.9923     !     35.4169+-0.9084        ! definitely 1.0618x slower
   captured-assignments                               0.5679+-0.0167     ?      0.6376+-0.1101        ? might be 1.1227x slower
   cast-int-to-double                                 8.0920+-0.2307            8.0008+-0.2433          might be 1.0114x faster
   cell-argument                                      9.9703+-0.4215            9.9406+-0.2009        
   cfg-simplify                                       3.6942+-0.1573     ?      3.7335+-0.0345        ? might be 1.0106x slower
   chain-getter-access                               12.8613+-0.4463     ?     12.8750+-0.1904        ?
   cmpeq-obj-to-obj-other                            13.0319+-0.5420           12.7548+-0.4316          might be 1.0217x faster
   constant-test                                      7.6102+-0.2010     ?      7.8897+-0.5390        ? might be 1.0367x slower
   create-lots-of-functions                          32.1183+-1.1508           31.6409+-0.3933          might be 1.0151x faster
   DataView-custom-properties                        53.5148+-2.3179           53.0017+-2.7890        
   deconstructing-parameters-overridden-by-function   
                                                      0.6980+-0.1974     ?      0.6983+-0.1646        ?
   delay-tear-off-arguments-strictmode               18.7353+-0.1462     ?     18.8301+-0.0972        ?
   deltablue-varargs                                256.8453+-2.0385          256.1028+-6.0280        
   destructuring-arguments                           21.9749+-0.2221     ?     22.3100+-1.0657        ? might be 1.0152x slower
   destructuring-swap                                 7.6900+-0.1418            7.6169+-0.1377        
   direct-arguments-getbyval                          1.4437+-0.0987     ?      1.6404+-0.1972        ? might be 1.1363x slower
   div-boolean-double                                 5.4897+-0.1071            5.4175+-0.1312          might be 1.0133x faster
   div-boolean                                        9.7052+-0.1638     ?      9.8074+-0.0878        ? might be 1.0105x slower
   double-get-by-val-out-of-bounds                    5.7213+-0.2227     !      6.1357+-0.0678        ! definitely 1.0724x slower
   double-pollution-getbyval                          9.6314+-0.2787     ?      9.7254+-0.1475        ?
   double-pollution-putbyoffset                       5.4895+-0.2774     ?      5.6146+-0.2425        ? might be 1.0228x slower
   double-to-int32-typed-array-no-inline              2.9285+-0.1471     ?      2.9311+-0.1301        ?
   double-to-int32-typed-array                        2.5053+-0.1455            2.4415+-0.2163          might be 1.0261x faster
   double-to-uint32-typed-array-no-inline             2.9061+-0.1481     ?      2.9935+-0.2730        ? might be 1.0301x slower
   double-to-uint32-typed-array                       2.5685+-0.2304     ?      2.5690+-0.2103        ?
   elidable-new-object-dag                           54.9875+-1.2415     ?     55.0366+-1.4285        ?
   elidable-new-object-roflcopter                    60.2272+-0.7276     ?     61.3841+-3.0177        ? might be 1.0192x slower
   elidable-new-object-then-call                     52.9955+-3.8982           50.5580+-1.3398          might be 1.0482x faster
   elidable-new-object-tree                          64.0610+-1.0193           63.2074+-2.0112          might be 1.0135x faster
   empty-string-plus-int                              7.5704+-0.2562            7.4539+-0.1685          might be 1.0156x faster
   emscripten-cube2hash                              45.3801+-0.4851           44.7535+-0.8213          might be 1.0140x faster
   exit-length-on-plain-object                       18.7822+-0.2135           18.4063+-0.5068          might be 1.0204x faster
   external-arguments-getbyval                        1.6140+-0.1814            1.5614+-0.2621          might be 1.0337x faster
   external-arguments-putbyval                        3.1501+-0.0992     ?      3.2399+-0.2782        ? might be 1.0285x slower
   fixed-typed-array-storage-var-index                1.5746+-0.1810            1.4970+-0.1606          might be 1.0518x faster
   fixed-typed-array-storage                          1.2123+-0.1407     ?      1.2866+-0.1893        ? might be 1.0613x slower
   Float32Array-matrix-mult                           5.8850+-0.3038     ?      5.9540+-0.2647        ? might be 1.0117x slower
   Float32Array-to-Float64Array-set                  75.3255+-3.7368     ?     76.0145+-5.5955        ?
   Float64Array-alloc-long-lived                     93.7083+-0.5569     ?     94.2015+-0.3238        ?
   Float64Array-to-Int16Array-set                   101.1656+-0.3744     ?    105.6171+-4.6733        ? might be 1.0440x slower
   fold-double-to-int                                20.5146+-0.4067     !     21.6608+-0.6138        ! definitely 1.0559x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.3411+-0.5078     ?     10.4304+-0.4086        ?
   fold-get-by-id-to-multi-get-by-offset              9.0780+-0.4407     ?      9.1000+-0.2010        ?
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.6281+-1.2641            7.8265+-1.1989          might be 1.1024x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.1868+-0.8343     ?      8.4438+-0.8462        ? might be 1.0314x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.3401+-0.7200     ?      7.4749+-0.7009        ? might be 1.0184x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      6.5112+-0.7173            6.2652+-0.7588          might be 1.0393x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     12.8248+-1.0691           12.3017+-1.2229          might be 1.0425x faster
   fold-put-by-id-to-multi-put-by-offset              8.6852+-1.0315            8.6730+-1.0906        
   fold-put-structure                                 6.2204+-0.7618            6.1633+-0.1120        
   for-of-iterate-array-entries                       6.3524+-0.1138            6.2445+-0.0580          might be 1.0173x faster
   for-of-iterate-array-keys                          5.1888+-0.1351            5.1508+-0.2326        
   for-of-iterate-array-values                        5.0550+-0.1976     ?      5.0583+-0.5086        ?
   fround                                            21.7065+-0.5407     ?     22.2723+-1.2071        ? might be 1.0261x slower
   ftl-library-inlining-dataview                     90.9430+-1.9200           90.2015+-3.0495        
   ftl-library-inlining                             112.4117+-15.6981    ?    114.6644+-4.8106        ? might be 1.0200x slower
   function-dot-apply                                 2.8652+-0.1710     ?      2.8729+-0.2057        ?
   function-test                                      4.8790+-0.0822     ?      4.9973+-0.4062        ? might be 1.0242x slower
   function-with-eval                               133.1198+-1.1478     ?    134.3550+-3.0813        ?
   gcse-poly-get-less-obvious                        25.0759+-0.9704           25.0520+-0.8056        
   gcse-poly-get                                     24.6019+-0.0802     ?     24.7795+-0.4499        ?
   gcse                                               6.4210+-0.2558     ?      6.5438+-0.1969        ? might be 1.0191x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.2976+-0.1312     ?      3.3403+-0.1473        ? might be 1.0129x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      8.3458+-0.1079            8.3195+-0.2952        
   get-by-id-chain-from-try-block                    11.3985+-0.0976           11.3826+-0.1749        
   get-by-id-check-structure-elimination              7.3347+-0.2285     ?      7.6223+-0.1275        ? might be 1.0392x slower
   get-by-id-proto-or-self                           22.5237+-1.3097           22.1998+-0.9897          might be 1.0146x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.9831+-0.0616     ?      4.0162+-0.1143        ?
   get-by-id-self-or-proto                           22.6560+-1.5152           22.4652+-1.4889        
   get-by-val-out-of-bounds                           5.7322+-0.3710     ?      5.9993+-0.4309        ? might be 1.0466x slower
   get_callee_monomorphic                             5.1404+-0.4548     ?      5.1851+-0.2689        ?
   get_callee_polymorphic                             4.3513+-0.3403            4.2195+-0.1752          might be 1.0312x faster
   getter-no-activation                               5.7789+-0.1406            5.7550+-0.0979        
   getter-richards                                  128.2052+-2.5427     ?    128.2664+-5.1315        ?
   getter                                             7.1855+-0.0562     ?      7.2230+-0.1067        ?
   global-var-const-infer-fire-from-opt               1.2318+-0.1453     ?      1.3099+-0.0891        ? might be 1.0635x slower
   global-var-const-infer                             1.2999+-0.1511            1.1618+-0.2845          might be 1.1188x faster
   HashMap-put-get-iterate-keys                      34.7606+-0.5577           34.3834+-0.6389          might be 1.0110x faster
   HashMap-put-get-iterate                           34.8658+-1.4332     ?     35.1343+-0.7995        ?
   HashMap-string-put-get-iterate                    35.4775+-2.0143     ?     35.6600+-1.1483        ?
   hoist-make-rope                                   15.2250+-1.7818           13.4758+-0.7035          might be 1.1298x faster
   hoist-poly-check-structure-effectful-loop   
                                                      6.7720+-0.2944     ?      7.0695+-0.5495        ? might be 1.0439x slower
   hoist-poly-check-structure                         4.8701+-0.0936     ?      4.9697+-0.0656        ? might be 1.0204x slower
   imul-double-only                                  10.0265+-0.4813     ?     10.1379+-0.8136        ? might be 1.0111x slower
   imul-int-only                                     11.7772+-1.0445     ?     12.4283+-0.7395        ? might be 1.0553x slower
   imul-mixed                                         9.7637+-0.7230     ?      9.9225+-0.9500        ? might be 1.0163x slower
   in-four-cases                                     23.7491+-0.3667     ?     23.8334+-0.4580        ?
   in-one-case-false                                 12.5684+-0.2618           12.5215+-0.1952        
   in-one-case-true                                  12.4813+-0.2361     ?     12.4912+-0.1845        ?
   in-two-cases                                      12.9849+-0.1977           12.9382+-0.1264        
   indexed-properties-in-objects                      3.7418+-0.0593            3.6436+-0.1166          might be 1.0269x faster
   infer-closure-const-then-mov-no-inline             4.3319+-0.1404     ?      4.3530+-0.0263        ?
   infer-closure-const-then-mov                      24.9031+-1.0847     ?     24.9205+-1.1894        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.1152+-0.1801           16.9490+-0.1379        
   infer-closure-const-then-put-to-scope             30.0213+-1.0400     ?     30.0497+-0.2930        ?
   infer-closure-const-then-reenter-no-inline   
                                                     80.7958+-0.2172     ?     81.3198+-2.1794        ?
   infer-closure-const-then-reenter                  30.1017+-0.6374     ?     30.3847+-0.6250        ?
   infer-constant-global-property                    37.3363+-0.7653     ?     37.4379+-1.0401        ?
   infer-constant-property                            3.3432+-0.1572            3.3255+-0.1098        
   infer-one-time-closure-ten-vars                   15.0338+-0.4418           14.7272+-0.3288          might be 1.0208x faster
   infer-one-time-closure-two-vars                   14.3091+-0.4445           14.1312+-0.4135          might be 1.0126x faster
   infer-one-time-closure                            14.2449+-0.4014           13.9420+-0.4348          might be 1.0217x faster
   infer-one-time-deep-closure                       24.8617+-0.4569           24.5095+-0.3968          might be 1.0144x faster
   inline-arguments-access                            5.6998+-0.2500     ?      5.8360+-0.2594        ? might be 1.0239x slower
   inline-arguments-aliased-access                    5.7664+-0.1101     ?      5.8210+-0.2753        ?
   inline-arguments-local-escape                      5.9590+-0.5793            5.9349+-0.2441        
   inline-get-scoped-var                              5.7143+-0.1840            5.7037+-0.1525        
   inlined-put-by-id-transition                      14.8660+-0.4295           14.5943+-0.4865          might be 1.0186x faster
   int-or-other-abs-then-get-by-val                   6.8052+-0.3257     ?      6.8676+-0.3811        ?
   int-or-other-abs-zero-then-get-by-val             27.2778+-0.9229     ?     27.6646+-0.6937        ? might be 1.0142x slower
   int-or-other-add-then-get-by-val                   6.0018+-0.2821            5.8478+-0.1617          might be 1.0263x faster
   int-or-other-add                                   7.8127+-0.2230     ?      7.9340+-0.1393        ? might be 1.0155x slower
   int-or-other-div-then-get-by-val                   5.1697+-0.1813     ?      5.2258+-0.0554        ? might be 1.0108x slower
   int-or-other-max-then-get-by-val                   6.5150+-0.2566            6.4810+-0.7896        
   int-or-other-min-then-get-by-val                   5.2440+-0.2388     ?      5.4130+-0.2045        ? might be 1.0322x slower
   int-or-other-mod-then-get-by-val                   5.0398+-0.2261     ?      5.1074+-0.1664        ? might be 1.0134x slower
   int-or-other-mul-then-get-by-val                   4.9562+-0.2354     ?      5.0333+-0.1646        ? might be 1.0156x slower
   int-or-other-neg-then-get-by-val                   6.2012+-0.1558            6.1985+-0.1578        
   int-or-other-neg-zero-then-get-by-val             26.9248+-0.3669     ?     27.2697+-0.4654        ? might be 1.0128x slower
   int-or-other-sub-then-get-by-val                   5.9010+-0.1804            5.8435+-0.2201        
   int-or-other-sub                                   4.7698+-0.1447     ?      4.8132+-0.1799        ?
   int-overflow-local                                 5.8281+-0.1794            5.7505+-0.1700          might be 1.0135x faster
   Int16Array-alloc-long-lived                       63.4922+-0.8037           63.3909+-0.9284        
   Int16Array-bubble-sort-with-byteLength            37.9282+-0.8458           37.2159+-0.2734          might be 1.0191x faster
   Int16Array-bubble-sort                            37.3541+-0.2119     ?     37.7584+-0.8336        ? might be 1.0108x slower
   Int16Array-load-int-mul                            2.0120+-0.1855            1.9370+-0.0846          might be 1.0387x faster
   Int16Array-to-Int32Array-set                      73.5837+-2.1801     ?     73.6262+-0.4041        ?
   Int32Array-alloc-large                            35.0888+-1.4214           33.9891+-1.8661          might be 1.0324x faster
   Int32Array-alloc-long-lived                       72.5142+-0.5010     ?     72.7043+-1.0689        ?
   Int32Array-alloc                                   4.5682+-0.5480            4.4721+-0.0405          might be 1.0215x faster
   Int32Array-Int8Array-view-alloc                    9.8177+-0.2786     ?     10.0126+-0.4405        ? might be 1.0199x slower
   int52-spill                                        8.9645+-0.2154     ?      9.2405+-0.4667        ? might be 1.0308x slower
   Int8Array-alloc-long-lived                        57.9207+-1.6310     ?     58.1138+-1.3799        ?
   Int8Array-load-with-byteLength                     4.7917+-0.1533            4.7891+-0.1664        
   Int8Array-load                                     4.7863+-0.0970            4.7473+-0.1287        
   integer-divide                                    14.0909+-0.1472           14.0120+-0.3021        
   integer-modulo                                     2.7492+-0.2130     ?      2.7623+-0.1777        ?
   large-int-captured                                 8.0454+-0.2286     ?      8.0660+-0.1610        ?
   large-int-neg                                     20.7856+-1.0879           20.4080+-0.1134          might be 1.0185x faster
   large-int                                         18.2613+-0.5043           18.2182+-0.4205        
   logical-not                                        6.0845+-0.3834     ?      6.3435+-0.8566        ? might be 1.0426x slower
   lots-of-fields                                    18.7712+-0.1689           18.6628+-0.3172        
   make-indexed-storage                               4.2336+-0.4875     ?      4.3915+-0.1334        ? might be 1.0373x slower
   make-rope-cse                                      6.1550+-0.0378            6.1533+-0.0855        
   marsaglia-larger-ints                             55.5128+-0.7541     ?     55.5353+-0.5884        ?
   marsaglia-osr-entry                               28.1095+-0.6591           28.0898+-0.2063        
   max-boolean                                        3.3043+-0.0857            3.2988+-0.1554        
   method-on-number                                  24.7257+-0.5517     ?     25.6224+-0.9194        ? might be 1.0363x slower
   min-boolean                                        3.2396+-0.1621            3.2073+-0.0767          might be 1.0101x faster
   minus-boolean-double                               4.1873+-0.0839     ?      4.2345+-0.1323        ? might be 1.0113x slower
   minus-boolean                                      3.2734+-0.0397            3.2038+-0.0992          might be 1.0217x faster
   misc-strict-eq                                    52.3315+-1.3247           51.2353+-1.1387          might be 1.0214x faster
   mod-boolean-double                                11.7344+-0.0596     ?     11.9423+-0.7332        ? might be 1.0177x slower
   mod-boolean                                        8.7850+-0.2016     ?      8.8699+-0.1313        ?
   mul-boolean-double                                 4.8585+-0.0999            4.8234+-0.0935        
   mul-boolean                                        3.4742+-0.1541            3.4465+-0.1707        
   neg-boolean                                        4.3657+-0.0917            4.2991+-0.1350          might be 1.0155x faster
   negative-zero-divide                               0.5114+-0.0992     ?      0.5437+-0.1115        ? might be 1.0631x slower
   negative-zero-modulo                               0.5188+-0.1145     ?      0.5245+-0.0997        ? might be 1.0109x slower
   negative-zero-negate                               0.4936+-0.0975            0.4484+-0.0883          might be 1.1007x faster
   nested-function-parsing                           58.8552+-0.6856     ?     59.1370+-0.8599        ?
   new-array-buffer-dead                              3.8118+-0.1075     ?      3.8547+-0.2265        ? might be 1.0113x slower
   new-array-buffer-push                              8.9529+-0.3644     ?      9.2654+-0.2111        ? might be 1.0349x slower
   new-array-dead                                    14.9910+-1.0760     ?     15.2504+-1.8320        ? might be 1.0173x slower
   new-array-push                                     5.2435+-0.3325     ?      5.5261+-0.3861        ? might be 1.0539x slower
   no-inline-constructor                            152.0026+-1.5529          151.6688+-0.9927        
   number-test                                        4.2701+-0.1210            4.2093+-0.1652          might be 1.0145x faster
   object-closure-call                                7.5890+-0.1450            7.5555+-0.3864        
   object-test                                        4.4857+-0.1182     ?      4.4963+-0.0366        ?
   obvious-sink-pathology-taken                     170.1875+-2.1206     ?    171.3854+-5.1715        ?
   obvious-sink-pathology                           162.5636+-1.2617     ?    162.7296+-4.1510        ?
   obviously-elidable-new-object                     45.8965+-5.0232     ?     46.9008+-4.8869        ? might be 1.0219x slower
   plus-boolean-arith                                 3.2112+-0.0738     ?      3.2177+-0.1405        ?
   plus-boolean-double                                4.2200+-0.1809            4.2009+-0.1241        
   plus-boolean                                       3.1868+-0.1490            3.1653+-0.1357        
   poly-chain-access-different-prototypes-simple   
                                                      3.8439+-0.1499     ?      3.8771+-0.0375        ?
   poly-chain-access-different-prototypes             3.2590+-0.1088     ?      3.3239+-0.0981        ? might be 1.0199x slower
   poly-chain-access-simpler                          3.8117+-0.2083     ?      3.8688+-0.0811        ? might be 1.0150x slower
   poly-chain-access                                  3.0971+-0.1617            3.0480+-0.1245          might be 1.0161x faster
   poly-stricteq                                     68.2525+-1.2170     ?     69.3685+-1.6732        ? might be 1.0164x slower
   polymorphic-array-call                             1.9932+-0.4922     ?      2.0095+-0.3491        ?
   polymorphic-get-by-id                              4.0605+-0.1390     ?      4.3147+-0.7370        ? might be 1.0626x slower
   polymorphic-put-by-id                             38.1545+-6.1494     ?     40.0676+-5.4364        ? might be 1.0501x slower
   polymorphic-structure                             21.7722+-0.2217           21.6404+-0.3947        
   polyvariant-monomorphic-get-by-id                 12.2614+-0.2128     ?     12.2868+-0.0974        ?
   proto-getter-access                               13.1175+-0.4099           12.9016+-0.3751          might be 1.0167x faster
   put-by-id-replace-and-transition                  11.8304+-0.9738           11.5258+-0.5703          might be 1.0264x faster
   put-by-id-slightly-polymorphic                     3.5153+-0.0592     ?      3.5557+-0.1171        ? might be 1.0115x slower
   put-by-id                                         17.8141+-0.5456     ?     18.0328+-0.2828        ? might be 1.0123x slower
   put-by-val-direct                                  0.8193+-0.1323     ?      0.9025+-0.1340        ? might be 1.1015x slower
   put-by-val-large-index-blank-indexing-type   
                                                      8.1998+-0.5175     ?      8.5166+-0.6385        ? might be 1.0386x slower
   put-by-val-machine-int                             3.3901+-0.1955            3.3740+-0.1456        
   rare-osr-exit-on-local                            18.4877+-0.3705           18.2715+-0.3339          might be 1.0118x faster
   register-pressure-from-osr                        26.4394+-0.7365     ?     26.7149+-0.7900        ? might be 1.0104x slower
   setter                                             6.4805+-0.1774     ?      6.5632+-0.1305        ? might be 1.0128x slower
   simple-activation-demo                            30.9162+-0.4224     ?     31.1877+-0.9158        ?
   simple-getter-access                              18.0295+-0.5032     ?     18.0688+-0.3607        ?
   simple-poly-call-nested                           10.0445+-0.1911           10.0123+-0.1814        
   simple-poly-call                                   1.6366+-0.0741     ?      1.6670+-0.0938        ? might be 1.0186x slower
   sin-boolean                                       24.2407+-4.3232     ?     25.8521+-4.1658        ? might be 1.0665x slower
   singleton-scope                                   86.7270+-0.1130           86.7228+-0.2818        
   sinkable-new-object-dag                           93.1264+-1.3167     ?     93.3135+-1.0346        ?
   sinkable-new-object-taken                         69.6967+-0.6111     ?     69.9041+-4.3163        ?
   sinkable-new-object                               52.4207+-0.8008     ?     52.7608+-1.2507        ?
   slow-array-profile-convergence                     3.8120+-0.2532     ?      3.9662+-0.2637        ? might be 1.0405x slower
   slow-convergence                                   3.7896+-0.4217            3.7825+-0.3316        
   sorting-benchmark                                 28.4336+-1.2762     ?     28.5738+-1.2388        ?
   sparse-conditional                                 1.6603+-0.0725            1.6085+-0.0565          might be 1.0322x faster
   splice-to-remove                                  21.7463+-0.4711           21.4300+-0.3675          might be 1.0148x faster
   string-char-code-at                               20.0610+-0.3219     ?     20.1116+-0.4718        ?
   string-concat-object                               3.1594+-0.4018     ?      3.1693+-0.2902        ?
   string-concat-pair-object                          3.0463+-0.2800            2.9934+-0.2059          might be 1.0177x faster
   string-concat-pair-simple                         16.0303+-0.3035           16.0302+-0.5618        
   string-concat-simple                              16.6632+-0.1979     ^     16.1061+-0.2265        ^ definitely 1.0346x faster
   string-cons-repeat                                10.6597+-0.5696           10.4426+-0.1695          might be 1.0208x faster
   string-cons-tower                                 10.4323+-0.1898     ?     10.4560+-0.1287        ?
   string-equality                                   21.8538+-0.3482     ?     21.8724+-0.6109        ?
   string-get-by-val-big-char                         9.8223+-0.2602     ?      9.9375+-0.6576        ? might be 1.0117x slower
   string-get-by-val-out-of-bounds-insane             6.2908+-1.8982            5.4880+-0.1652          might be 1.1463x faster
   string-get-by-val-out-of-bounds                    6.8745+-0.0801            6.7972+-0.1949          might be 1.0114x faster
   string-get-by-val                                  4.7074+-0.0716            4.6479+-0.0384          might be 1.0128x faster
   string-hash                                        2.7343+-0.1375     ?      2.8042+-0.0717        ? might be 1.0256x slower
   string-long-ident-equality                        17.8735+-0.2064     ?     18.2411+-1.2365        ? might be 1.0206x slower
   string-out-of-bounds                              17.3430+-0.5082     ?     17.4003+-0.5622        ?
   string-repeat-arith                               42.3940+-0.6312     ^     41.5699+-0.0850        ^ definitely 1.0198x faster
   string-sub                                        81.5804+-2.5071     ?     81.7614+-0.9854        ?
   string-test                                        4.2355+-0.1774     ?      4.2424+-0.1083        ?
   string-var-equality                               43.4485+-0.2077           43.3173+-0.2606        
   structure-hoist-over-transitions                   3.3890+-0.0881            3.3539+-0.0909          might be 1.0104x faster
   substring-concat-weird                            53.7742+-0.5426           53.5283+-0.4597        
   substring-concat                                  56.4106+-1.0145           56.1638+-1.5924        
   substring                                         61.8919+-0.5330     ?     62.4438+-0.7624        ?
   switch-char-constant                               3.3887+-0.0741            3.3887+-0.1296        
   switch-char                                        7.8750+-0.1923     ?      7.9001+-0.0579        ?
   switch-constant                                   10.8351+-0.2999     ?     10.9232+-0.4263        ?
   switch-string-basic-big-var                       25.1897+-4.4325     ?     25.9348+-1.4076        ? might be 1.0296x slower
   switch-string-basic-big                           18.7584+-1.4635           18.6484+-1.7771        
   switch-string-basic-var                           28.6392+-3.2773           28.3292+-3.5770          might be 1.0109x faster
   switch-string-basic                               21.1318+-2.5262           20.3491+-2.4462          might be 1.0385x faster
   switch-string-big-length-tower-var                24.9944+-0.1527           24.9183+-0.1721        
   switch-string-length-tower-var                    19.6554+-0.2339     ?     19.8168+-0.3263        ?
   switch-string-length-tower                        14.0645+-0.3312           13.8892+-0.2916          might be 1.0126x faster
   switch-string-short                               13.9894+-0.3528     ?     14.0222+-0.2074        ?
   switch                                            14.5886+-0.6231     ?     14.6350+-0.5577        ?
   tear-off-arguments-simple                          4.4011+-0.1511            4.2543+-0.4407          might be 1.0345x faster
   tear-off-arguments                                 6.1454+-0.3866            5.9039+-0.4522          might be 1.0409x faster
   temporal-structure                                16.9724+-0.1662     ?     17.0052+-0.3276        ?
   to-int32-boolean                                  21.2393+-0.3647           21.1669+-0.4563        
   try-catch-get-by-val-cloned-arguments             18.9767+-0.2715           18.8947+-0.1481        
   try-catch-get-by-val-direct-arguments              8.2734+-0.5865     ?      8.5180+-0.3788        ? might be 1.0296x slower
   try-catch-get-by-val-scoped-arguments             10.1182+-0.1332     ?     10.2683+-0.1584        ? might be 1.0148x slower
   undefined-property-access                        432.1925+-10.4127         425.7377+-3.3271          might be 1.0152x faster
   undefined-test                                     4.3992+-0.0908     ?      4.5065+-0.1703        ? might be 1.0244x slower
   unprofiled-licm                                   27.0419+-0.5430     ?     27.1466+-0.8547        ?
   varargs-call                                      18.9021+-0.2435     ?     19.0057+-0.3980        ?
   varargs-construct-inline                          29.5133+-0.4769     ?     30.1278+-0.2342        ? might be 1.0208x slower
   varargs-construct                                 42.3535+-1.6087     ?     42.4584+-1.8058        ?
   varargs-inline                                    11.9781+-0.3236     ?     12.0016+-0.3649        ?
   varargs-strict-mode                               14.0560+-0.1409           13.8088+-0.3871          might be 1.0179x faster
   varargs                                           13.9841+-0.2656     ?     14.0099+-0.3455        ?
   weird-inlining-const-prop                          2.8838+-0.1848            2.8153+-0.2822          might be 1.0243x faster

   &lt;geometric&gt;                                       11.2668+-0.0296     ?     11.2949+-0.0279        ? might be 1.0025x slower

                                                         Baseline                   143727                                      
AsmBench:
   bigfib.cpp                                       656.0960+-2.4786     ?    660.0327+-4.2235        ?
   cray.c                                           622.4896+-2.7524     ?    624.2029+-5.1927        ?
   dry.c                                            640.9047+-15.1779    ?    649.0897+-12.7497       ? might be 1.0128x slower
   FloatMM.c                                        957.8546+-1.9209          956.5390+-1.3765        
   gcc-loops.cpp                                   5874.8479+-9.8641     ?   5877.9625+-20.9874       ?
   n-body.c                                        1672.8197+-4.6147         1669.5305+-1.6165        
   Quicksort.c                                      577.2261+-14.3923    ?    587.1200+-4.7258        ? might be 1.0171x slower
   stepanov_container.cpp                          4839.1768+-19.6526    ?   4856.3395+-19.8868       ?
   Towers.c                                         376.1375+-2.3617     ?    377.3905+-1.6067        ?

   &lt;geometric&gt;                                     1111.4566+-5.2123     ?   1116.7242+-3.6366        ? might be 1.0047x slower

                                                         Baseline                   143727                                      
CompressionBench:
   huffman                                          503.9668+-3.8761          502.3233+-5.0106        
   arithmetic-simple                                527.0562+-2.6899          525.1830+-0.6031        
   arithmetic-precise                               400.9268+-6.8895          400.5740+-4.6006        
   arithmetic-complex-precise                       399.0178+-0.4564          397.0725+-3.6927        
   arithmetic-precise-order-0                       580.8662+-9.1488          576.5144+-10.1525       
   arithmetic-precise-order-1                       429.0465+-21.3222         419.7703+-2.6844          might be 1.0221x faster
   arithmetic-precise-order-2                       472.9880+-4.1944     ?    473.1099+-1.3579        ?
   arithmetic-simple-order-1                        528.6113+-3.9115          527.4030+-2.6000        
   arithmetic-simple-order-2                        591.4443+-3.4363          590.6199+-5.4291        
   lz-string                                        418.2889+-3.5944     ?    419.0020+-8.3839        ?

   &lt;geometric&gt;                                      480.4041+-1.6238          478.3243+-1.1365          might be 1.0043x faster

                                                         Baseline                   143727                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                                   62.7044+-0.0601     ?     62.7367+-0.0550        ? might be 1.0005x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085332</commentid>
    <comment_count>3</comment_count>
      <attachid>250751</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-14 16:52:32 -0700</bug_when>
    <thetext>Comment on attachment 250751
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:849
&gt; +    if (m_interpreter.filter(value, SpecInt32) == Contradiction) {

Can you merge this block with the constant check below?

If the edge is constant, and not int32, the abstract interpreter should know it, and so we shouldn&apos;t need a separate constant check.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:821
&gt; +    if (m_interpreter.filter(value, SpecInt32) == Contradiction) {

Same question about constants.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:972
&gt; +    if (m_interpreter.filter(value, SpecMachineInt) == Contradiction) {

Same question about constants.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:1106
&gt; +    if (m_interpreter.filter(value, SpecCell) == Contradiction) {

Same question about constants.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085358</commentid>
    <comment_count>4</comment_count>
      <attachid>250766</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-04-14 17:37:52 -0700</bug_when>
    <thetext>Created attachment 250766
Updated Patch

As suggested, I eliminated all other spill/fill consistency checks as the AbstractInterpreter&lt;&gt;::filter() covers them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085360</commentid>
    <comment_count>5</comment_count>
      <attachid>250766</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-14 17:44:08 -0700</bug_when>
    <thetext>Comment on attachment 250766
Updated Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085365</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-04-14 17:50:02 -0700</bug_when>
    <thetext>Committed r182827: &lt;http://trac.webkit.org/changeset/182827&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1094946</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-05-14 15:54:46 -0700</bug_when>
    <thetext>*** Bug 145023 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250751</attachid>
            <date>2015-04-14 16:06:03 -0700</date>
            <delta_ts>2015-04-14 17:37:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>143727.patch</filename>
            <type>text/plain</type>
            <size>8975</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyODE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBA
CisyMDE1LTA0LTE0ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIERGRyByZWdpc3RlciBmaWxsU3BlY3VsYXRlKigpIGZ1bmN0aW9ucyBzaG91bGQgdmFsaWRh
dGUgaW5jb21pbmcgc3BpbGwgZm9ybWF0IGlzIGNvbXBhdGlibGUgd2l0aCByZXF1ZXN0ZWQgZmls
bCBmb3JtYXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MzcyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVzZWQgdGhlIHJlc3VsdCBvZiBBYnN0cmFjdEludGVycHJldGVyPD46OmZpbHRlcigpIHRvIGNo
ZWNrIHRoYXQgdGhlIGN1cnJlbnQgc3BpbGwgZm9ybWF0IGlzIGNvbXBhdGlibGUKKyAgICAgICAg
d2l0aCB0aGUgcmVxdWVzdGVkIGZpbGwgZm9ybWF0LiAgSWYgZmlsdGVyKCkgcmVwb3J0cyBhIGNv
bnRyYWRpY3Rpb24sIHRoZW4gd2UgZm9yY2UgYW4gT1NSIGV4aXQuCisgICAgICAgIFJlbW92ZWQg
aW5kaXZpZHVhbCBjaGVja3MgbWFkZSByZWR1bmRhbnQgYnkgdGhlIG5ldyBjaGVjay4KKworICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDMySW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQzMkludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDUyKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6CisKIDIwMTUtMDQtMTQgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBKU0NfZGZnRnVu
Y3Rpb25XaGl0ZWxpc3RGaWxlIHRvIEpTQ19kZmdXaGl0ZWxpc3QuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJl
dmlzaW9uIDE4MjgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0NSw3ICs4NDUsMTMgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50MwogICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOwogICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2
YWx1ZS5tX3R5cGU7CiAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtub3duSW50MzJVc2Ug
fHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0ludDMyKSk7Ci0gICAgbV9pbnRlcnByZXRlci5maWx0
ZXIodmFsdWUsIFNwZWNJbnQzMik7CisKKyAgICBpZiAobV9pbnRlcnByZXRlci5maWx0ZXIodmFs
dWUsIFNwZWNJbnQzMikgPT0gQ29udHJhZGljdGlvbikgeworICAgICAgICB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CisgICAgICAg
IHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnQzMjsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRl
KCk7CisgICAgfQorCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2Ut
PnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlv
bkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CiAKQEAgLTg2OSwxMiAr
ODc1LDYgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50MwogCiAgICAg
ICAgIERhdGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7CiAKLSAgICAg
ICAgaWYgKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsKSB7Ci0gICAgICAgICAgICB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihCYWRUeXBlLCBKU1ZhbHVlUmVncygpLCBlZGdlKTsK
LSAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnQzMjsKLSAgICAgICAgICAg
IHJldHVybiBhbGxvY2F0ZSgpOwotICAgICAgICB9Ci0KICAgICAgICAgQVNTRVJUX1VOVVNFRChz
cGlsbEZvcm1hdCwgKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB8fCBzcGlsbEZvcm1hdCA9
PSBEYXRhRm9ybWF0SW50MzIpOwogCiAgICAgICAgIC8vIElmIHdlIGtub3cgdGhpcyB3YXMgc3Bp
bGxlZCBhcyBhbiBpbnRlZ2VyIHdlIGNhbiBmaWxsIHdpdGhvdXQgY2hlY2tpbmcuCkBAIC05MjAs
MTAgKzkyMCw2IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDMKICAg
ICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CiAg
ICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7Ci0gICAgICAgIHJldHVy
bkZvcm1hdCA9IERhdGFGb3JtYXRJbnQzMjsKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7Ci0K
ICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToK
ICAgICBkZWZhdWx0OgpAQCAtOTgyLDcgKzk3OCwxMiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZv
ck5vZGUoZWRnZSk7CiAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKICAg
ICBBU1NFUlQoKGVkZ2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSAmJiBlZGdlLnVzZUtpbmQo
KSAhPSBLbm93blN0cmluZ1VzZSkgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsKLSAg
ICBtX2ludGVycHJldGVyLmZpbHRlcih2YWx1ZSwgU3BlY0NlbGwpOworCisgICAgaWYgKG1faW50
ZXJwcmV0ZXIuZmlsdGVyKHZhbHVlLCBTcGVjQ2VsbCkgPT0gQ29udHJhZGljdGlvbikgeworICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgMCk7CisgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOworICAgIH0KKwogICAgIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rl
cih2aXJ0dWFsUmVnaXN0ZXIpOwogICAgIApAQCAtOTk3LDExICs5OTgsNiBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0
ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKLSAgICAgICAgaWYgKGlu
Zm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50MzIpIHsKLSAgICAgICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwKTsK
LSAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwotICAgICAgICB9Ci0KICAgICAgICAgaWYg
KGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGVk
Z2UtPmFzSlNWYWx1ZSgpOwogICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CkBA
IC0xMDU5LDkgKzEwNTUsNiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVD
ZWxsCiAgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNC
b29sZWFuOgogICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46Ci0gICAgICAgIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwKTsKLSAgICAg
ICAgcmV0dXJuIGFsbG9jYXRlKCk7Ci0KICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAg
Y2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTEwNzYsMTcgKzEwNjksMTcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlQm9vbAogewogICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JO
b2RlKGVkZ2UpOwogICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5tX3R5cGU7Ci0gICAg
bV9pbnRlcnByZXRlci5maWx0ZXIodmFsdWUsIFNwZWNCb29sZWFuKTsKKworICAgIGlmIChtX2lu
dGVycHJldGVyLmZpbHRlcih2YWx1ZSwgU3BlY0Jvb2xlYW4pID09IENvbnRyYWRpY3Rpb24pIHsK
KyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIDApOworICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKKyAgICB9CisKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7
CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVn
aXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1h
dCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewotICAgICAgICBpZiAoaW5mby5zcGls
bEZvcm1hdCgpID09IERhdGFGb3JtYXRJbnQzMikgewotICAgICAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOwotICAgICAg
ICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIGlm
IChlZGdlLT5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBl
ZGdlLT5hc0pTVmFsdWUoKTsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwpA
QCAtMTE0MCw5ICsxMTMzLDYgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Qm9vbAogICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgogICAgIGNhc2UgRGF0YUZvcm1hdEpT
Q2VsbDoKICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7Ci0gICAgICAgIHJl
dHVybiBhbGxvY2F0ZSgpOwotCiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2Ug
RGF0YUZvcm1hdFN0b3JhZ2U6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDE4MjgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxNyw3ICs4MTcsMTMg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50MwogICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOwogICAgIFNwZWN1bGF0ZWRUeXBl
IHR5cGUgPSB2YWx1ZS5tX3R5cGU7CiAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtub3du
SW50MzJVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0ludDMyKSk7Ci0gICAgbV9pbnRlcnBy
ZXRlci5maWx0ZXIodmFsdWUsIFNwZWNJbnQzMik7CisKKyAgICBpZiAobV9pbnRlcnByZXRlci5m
aWx0ZXIodmFsdWUsIFNwZWNJbnQzMikgPT0gQ29udHJhZGljdGlvbikgeworICAgICAgICB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7
CisgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnQzMjsKKyAgICAgICAgcmV0dXJu
IGFsbG9jYXRlKCk7CisgICAgfQorCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
Z2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CiAKQEAg
LTkyOSwxMiArOTM1LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50
MwogICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CiAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoK
ICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFu
OiB7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCAwKTsKLSAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludDMy
OwotICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKLSAgICB9Ci0KKyAgICBjYXNlIERhdGFGb3Jt
YXRKU0Jvb2xlYW46CiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2UgRGF0YUZv
cm1hdFN0b3JhZ2U6CiAgICAgY2FzZSBEYXRhRm9ybWF0SW50NTI6CkBAIC05NjcsNyArOTY4LDEy
IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDUKIHsKICAgICBBU1NF
UlQoZGVzaXJlZEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50NTIgfHwgZGVzaXJlZEZvcm1hdCA9PSBE
YXRhRm9ybWF0U3RyaWN0SW50NTIpOwogICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0
ZS5mb3JOb2RlKGVkZ2UpOwotICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKHZhbHVlLCBTcGVjTWFj
aGluZUludCk7CisKKyAgICBpZiAobV9pbnRlcnByZXRlci5maWx0ZXIodmFsdWUsIFNwZWNNYWNo
aW5lSW50KSA9PSBDb250cmFkaWN0aW9uKSB7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwKTsKKyAgICAgICAgcmV0dXJu
IGFsbG9jYXRlKCk7CisgICAgfQorCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
Z2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CiAKQEAg
LTEwOTYsNyArMTEwMiwxMiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVD
ZWxsCiAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CiAg
ICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKICAgICBBU1NFUlQoKGVkZ2Uu
dXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSAmJiBlZGdlLnVzZUtpbmQoKSAhPSBLbm93blN0cmlu
Z1VzZSkgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsKLSAgICBtX2ludGVycHJldGVy
LmZpbHRlcih2YWx1ZSwgU3BlY0NlbGwpOworCisgICAgaWYgKG1faW50ZXJwcmV0ZXIuZmlsdGVy
KHZhbHVlLCBTcGVjQ2VsbCkgPT0gQ29udHJhZGljdGlvbikgeworICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CisgICAg
ICAgIHJldHVybiBhbGxvY2F0ZSgpOworICAgIH0KKwogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5m
byYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0
ZXIpOwogCkBAIC0xMTc5LDcgKzExOTAsMTIgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlQm9vbAogewogICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JO
b2RlKGVkZ2UpOwogICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5tX3R5cGU7Ci0gICAg
bV9pbnRlcnByZXRlci5maWx0ZXIodmFsdWUsIFNwZWNCb29sZWFuKTsKKworICAgIGlmIChtX2lu
dGVycHJldGVyLmZpbHRlcih2YWx1ZSwgU3BlY0Jvb2xlYW4pID09IENvbnRyYWRpY3Rpb24pIHsK
KyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIDApOworICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKKyAgICB9CisKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7
CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVn
aXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250766</attachid>
            <date>2015-04-14 17:37:52 -0700</date>
            <delta_ts>2015-04-14 17:44:08 -0700</delta_ts>
            <desc>Updated Patch</desc>
            <filename>143727-2.patch</filename>
            <type>text/plain</type>
            <size>13936</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyODE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBA
CisyMDE1LTA0LTE0ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIERGRyByZWdpc3RlciBmaWxsU3BlY3VsYXRlKigpIGZ1bmN0aW9ucyBzaG91bGQgdmFsaWRh
dGUgaW5jb21pbmcgc3BpbGwgZm9ybWF0IGlzIGNvbXBhdGlibGUgd2l0aCByZXF1ZXN0ZWQgZmls
bCBmb3JtYXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MzcyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVzZWQgdGhlIHJlc3VsdCBvZiBBYnN0cmFjdEludGVycHJldGVyPD46OmZpbHRlcigpIHRvIGNo
ZWNrIHRoYXQgdGhlIGN1cnJlbnQgc3BpbGwgZm9ybWF0IGlzIGNvbXBhdGlibGUKKyAgICAgICAg
d2l0aCB0aGUgcmVxdWVzdGVkIGZpbGwgZm9ybWF0LiAgSWYgZmlsdGVyKCkgcmVwb3J0cyBhIGNv
bnRyYWRpY3Rpb24sIHRoZW4gd2UgZm9yY2UgYW4gT1NSIGV4aXQuCisgICAgICAgIFJlbW92ZWQg
aW5kaXZpZHVhbCBjaGVja3MgbWFkZSByZWR1bmRhbnQgYnkgdGhlIG5ldyBjaGVjay4KKworICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDMySW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQzMkludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDUyKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6CisKIDIwMTUtMDQtMTQgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBKU0NfZGZnRnVu
Y3Rpb25XaGl0ZWxpc3RGaWxlIHRvIEpTQ19kZmdXaGl0ZWxpc3QuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJl
dmlzaW9uIDE4MjgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0NSwxNiArODQ1LDE2IEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDMKICAgICBBYnN0cmFjdFZhbHVlJiB2
YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdlKTsKICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0g
dmFsdWUubV90eXBlOwogICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSAhPSBLbm93bkludDMyVXNl
IHx8ICEodmFsdWUubV90eXBlICYgflNwZWNJbnQzMikpOwotICAgIG1faW50ZXJwcmV0ZXIuZmls
dGVyKHZhbHVlLCBTcGVjSW50MzIpOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwogCi0g
ICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkgJiYgIWVkZ2UtPmlzSW50MzJDb25zdGFudCgpKSB7
CisgICAgaWYgKG1faW50ZXJwcmV0ZXIuZmlsdGVyKHZhbHVlLCBTcGVjSW50MzIpID09IENvbnRy
YWRpY3Rpb24pIHsKICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9y
bWF0SW50MzI7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgIH0KLSAgICAKKworICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxS
ZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOworCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9y
bWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CiAgICAgICAgIGlmIChlZGdlLT5o
YXNDb25zdGFudCgpKSB7CkBAIC04NjksMTIgKzg2OSw2IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUludDMKIAogICAgICAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0g
aW5mby5zcGlsbEZvcm1hdCgpOwogCi0gICAgICAgIGlmIChzcGlsbEZvcm1hdCA9PSBEYXRhRm9y
bWF0Q2VsbCkgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oQmFk
VHlwZSwgSlNWYWx1ZVJlZ3MoKSwgZWRnZSk7Ci0gICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBE
YXRhRm9ybWF0SW50MzI7Ci0gICAgICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKLSAgICAgICAg
fQotCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3BpbGxGb3JtYXQsIChzcGlsbEZvcm1hdCAmIERh
dGFGb3JtYXRKUykgfHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEludDMyKTsKIAogICAgICAg
ICAvLyBJZiB3ZSBrbm93IHRoaXMgd2FzIHNwaWxsZWQgYXMgYW4gaW50ZWdlciB3ZSBjYW4gZmls
bCB3aXRob3V0IGNoZWNraW5nLgpAQCAtOTIwLDEwICs5MTQsNiBAQCBHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQzCiAgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6CiAg
ICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoK
LSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIDApOwotICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50MzI7Ci0g
ICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwotCiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgog
ICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6CiAgICAgZGVmYXVsdDoKQEAgLTk4MiwyNiArOTcy
LDE3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdlKTsKICAgICBTcGVjdWxhdGVk
VHlwZSB0eXBlID0gdmFsdWUubV90eXBlOwogICAgIEFTU0VSVCgoZWRnZS51c2VLaW5kKCkgIT0g
S25vd25DZWxsVXNlICYmIGVkZ2UudXNlS2luZCgpICE9IEtub3duU3RyaW5nVXNlKSB8fCAhKHZh
bHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOwotICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKHZhbHVl
LCBTcGVjQ2VsbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2Ut
PnZpcnR1YWxSZWdpc3RlcigpOwotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlv
bkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgCi0gICAgaWYg
KGVkZ2UtPmhhc0NvbnN0YW50KCkgJiYgIWVkZ2UtPmlzQ2VsbENvbnN0YW50KCkpIHsKLSAgICAg
ICAgLy8gUHJvdGVjdCB0aGUgc2lsZW50IHNwaWxsL2ZpbGwgbG9naWMgYnkgZmFpbGluZyBlYXJs
eS4gSWYgd2UgInNwZWN1bGF0ZSIgb24KLSAgICAgICAgLy8gdGhlIGNvbnN0YW50IHRoZW4gdGhl
IHNpbGVudCBmaWxsZXIgbWF5IHRoaW5rIHRoYXQgd2UgaGF2ZSBhIGNlbGwgYW5kIGEKLSAgICAg
ICAgLy8gY29uc3RhbnQsIHNvIGl0IHdpbGwgdHJ5IHRvIGZpbGwgdGhpcyBhcyBhbiBjZWxsIGNv
bnN0YW50LiBCYWQgdGhpbmdzIHdpbGwKLSAgICAgICAgLy8gaGFwcGVuLgorCisgICAgaWYgKG1f
aW50ZXJwcmV0ZXIuZmlsdGVyKHZhbHVlLCBTcGVjQ2VsbCkgPT0gQ29udHJhZGljdGlvbikgewog
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgMCk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgIH0KIAorICAgIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsK
KyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdp
c3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOworCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0
KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7Ci0gICAgICAgIGlmIChpbmZvLnNwaWxs
Rm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludDMyKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7Ci0gICAgICAg
ICAgICByZXR1cm4gYWxsb2NhdGUoKTsKLSAgICAgICAgfQotCiAgICAgICAgIGlmIChlZGdlLT5o
YXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBlZGdlLT5hc0pT
VmFsdWUoKTsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwpAQCAtMTA1OSw5
ICsxMDQwLDYgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAg
IGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoK
ICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7Ci0gICAgICAgIHJldHVy
biBhbGxvY2F0ZSgpOwotCiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2UgRGF0
YUZvcm1hdFN0b3JhZ2U6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC0xMDc2LDI3ICsxMDU0LDIzIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUJvb2wKIHsKICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdl
KTsKICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOwotICAgIG1faW50ZXJw
cmV0ZXIuZmlsdGVyKHZhbHVlLCBTcGVjQm9vbGVhbik7CisKKyAgICBpZiAobV9pbnRlcnByZXRl
ci5maWx0ZXIodmFsdWUsIFNwZWNCb29sZWFuKSA9PSBDb250cmFkaWN0aW9uKSB7CisgICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCAwKTsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CisgICAgfQorCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZp
cnR1YWxSZWdpc3Rlcik7CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewog
ICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKLSAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQo
KSA9PSBEYXRhRm9ybWF0SW50MzIpIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwKTsKLSAgICAgICAgICAgIHJl
dHVybiBhbGxvY2F0ZSgpOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBpZiAoZWRnZS0+
aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gZWRnZS0+YXNK
U1ZhbHVlKCk7CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKLSAgICAgICAg
ICAgIGlmIChqc1ZhbHVlLmlzQm9vbGVhbigpKSB7Ci0gICAgICAgICAgICAgICAgbV9ncHJzLnJl
dGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNWYWx1ZS5h
c0Jvb2xlYW4oKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsQm9vbGVhbigqbV9z
dHJlYW0sIGdwcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCAwKTsKKyAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNWYWx1ZS5hc0Jvb2xlYW4oKSksIGdwcik7Cisg
ICAgICAgICAgICBpbmZvLmZpbGxCb29sZWFuKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAg
IHJldHVybiBncHI7CiAgICAgICAgIH0KIApAQCAtMTE0MCw5ICsxMTE0LDYgQEAgR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91
YmxlOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKICAgICBjYXNlIERhdGFGb3JtYXRDZWxs
OgotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgMCk7Ci0gICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwotCiAgICAgY2FzZSBE
YXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4MjgwNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgxNywyMCArODE3LDE2IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUludDMKICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9k
ZShlZGdlKTsKICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOwogICAgIEFT
U0VSVChlZGdlLnVzZUtpbmQoKSAhPSBLbm93bkludDMyVXNlIHx8ICEodmFsdWUubV90eXBlICYg
flNwZWNJbnQzMikpOwotICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKHZhbHVlLCBTcGVjSW50MzIp
OwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVn
aXN0ZXIoKTsKLSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZp
cnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwogCi0gICAgaWYgKGVkZ2UtPmhhc0NvbnN0
YW50KCkgJiYgIWVkZ2UtPmlzSW50MzJDb25zdGFudCgpKSB7Ci0gICAgICAgIC8vIFByb3RlY3Qg
dGhlIHNpbGVudCBzcGlsbC9maWxsIGxvZ2ljIGJ5IGZhaWxpbmcgZWFybHkuIElmIHdlICJzcGVj
dWxhdGUiIG9uCi0gICAgICAgIC8vIHRoZSBjb25zdGFudCB0aGVuIHRoZSBzaWxlbnQgZmlsbGVy
IG1heSB0aGluayB0aGF0IHdlIGhhdmUgYW4gaW50MzIgYW5kIGEKLSAgICAgICAgLy8gY29uc3Rh
bnQsIHNvIGl0IHdpbGwgdHJ5IHRvIGZpbGwgdGhpcyBhcyBhbiBpbnQzMiBjb25zdGFudC4gQmFk
IHRoaW5ncyB3aWxsCi0gICAgICAgIC8vIGhhcHBlbi4KKyAgICBpZiAobV9pbnRlcnByZXRlci5m
aWx0ZXIodmFsdWUsIFNwZWNJbnQzMikgPT0gQ29udHJhZGljdGlvbikgewogICAgICAgICB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7
CiAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnQzMjsKICAgICAgICAgcmV0dXJu
IGFsbG9jYXRlKCk7CiAgICAgfQotICAgIAorCisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEdlbmVyYXRpb25JbmZvJiBp
bmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7
CisKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZv
cm1hdE5vbmU6IHsKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CkBAIC05MjksMTIg
KzkyNSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDMKICAgICBj
YXNlIERhdGFGb3JtYXRDZWxsOgogICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CiAgICAgY2Fz
ZSBEYXRhRm9ybWF0SlNDZWxsOgotICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjogewotICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgMCk7Ci0gICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnQzMjsKLSAgICAg
ICAgcmV0dXJuIGFsbG9jYXRlKCk7Ci0gICAgfQotCisgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29s
ZWFuOgogICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRTdG9y
YWdlOgogICAgIGNhc2UgRGF0YUZvcm1hdEludDUyOgpAQCAtOTY3LDE3ICs5NTgsMTcgQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50NQogewogICAgIEFTU0VSVChkZXNp
cmVkRm9ybWF0ID09IERhdGFGb3JtYXRJbnQ1MiB8fCBkZXNpcmVkRm9ybWF0ID09IERhdGFGb3Jt
YXRTdHJpY3RJbnQ1Mik7CiAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5v
ZGUoZWRnZSk7Ci0gICAgbV9pbnRlcnByZXRlci5maWx0ZXIodmFsdWUsIFNwZWNNYWNoaW5lSW50
KTsKKworICAgIGlmIChtX2ludGVycHJldGVyLmZpbHRlcih2YWx1ZSwgU3BlY01hY2hpbmVJbnQp
ID09IENvbnRyYWRpY3Rpb24pIHsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOworICAgICAgICByZXR1cm4gYWxsb2Nh
dGUoKTsKKyAgICB9CisKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRn
ZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0
aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKIAogICAgIHN3aXRj
aCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewot
ICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSAmJiAhZWRnZS0+aXNNYWNoaW5lSW50Q29u
c3RhbnQoKSkgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOwotICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRl
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgp
OwogCiAgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CkBAIC0xMDk2LDE2ICsxMDg3
LDE1IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdlKTsKICAgICBTcGVjdWxhdGVk
VHlwZSB0eXBlID0gdmFsdWUubV90eXBlOwogICAgIEFTU0VSVCgoZWRnZS51c2VLaW5kKCkgIT0g
S25vd25DZWxsVXNlICYmIGVkZ2UudXNlS2luZCgpICE9IEtub3duU3RyaW5nVXNlKSB8fCAhKHZh
bHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOwotICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKHZhbHVl
LCBTcGVjQ2VsbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2Ut
PnZpcnR1YWxSZWdpc3RlcigpOwotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlv
bkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICBpZiAoZWRn
ZS0+aGFzQ29uc3RhbnQoKSAmJiAhZWRnZS0+aXNDZWxsQ29uc3RhbnQoKSkgewotICAgICAgICAv
LyBCZXR0ZXIgdG8gZmFpbCBlYXJseSBvbiBjb25zdGFudHMuCisgICAgaWYgKG1faW50ZXJwcmV0
ZXIuZmlsdGVyKHZhbHVlLCBTcGVjQ2VsbCkgPT0gQ29udHJhZGljdGlvbikgewogICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
MCk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgIH0KIAorICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBHZW5l
cmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0
dWFsUmVnaXN0ZXIpOworCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAg
ICBjYXNlIERhdGFGb3JtYXROb25lOiB7CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgp
OwpAQCAtMTExNywxMiArMTEwNyw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUNlbGwKICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERh
dGFGb3JtYXRKU0NlbGwpOwogICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaWYgKCEoaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKSkg
ewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIDApOwotICAgICAgICAgICAgcmV0dXJuIGdwcjsKLSAgICAgICAgfQot
ICAgICAgICAKKwogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBT
cGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogCkBAIC0xMTU4LDExICsxMTQzLDcgQEAg
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgIGNhc2UgRGF0YUZv
cm1hdEludDMyOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgogICAgIGNhc2UgRGF0YUZv
cm1hdEpTQm9vbGVhbjoKLSAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOiB7Ci0gICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAw
KTsKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7Ci0gICAgfQotCisgICAgY2FzZSBEYXRhRm9y
bWF0Qm9vbGVhbjoKICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAgY2FzZSBEYXRhRm9y
bWF0U3RvcmFnZToKICAgICBjYXNlIERhdGFGb3JtYXRJbnQ1MjoKQEAgLTExNzksMjggKzExNjAs
MjQgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogewogICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOwogICAgIFNwZWN1bGF0
ZWRUeXBlIHR5cGUgPSB2YWx1ZS5tX3R5cGU7Ci0gICAgbV9pbnRlcnByZXRlci5maWx0ZXIodmFs
dWUsIFNwZWNCb29sZWFuKTsKKworICAgIGlmIChtX2ludGVycHJldGVyLmZpbHRlcih2YWx1ZSwg
U3BlY0Jvb2xlYW4pID09IENvbnRyYWRpY3Rpb24pIHsKKyAgICAgICAgdGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOworICAgICAgICBy
ZXR1cm4gYWxsb2NhdGUoKTsKKyAgICB9CisKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsK
IAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9y
bWF0Tm9uZTogewotICAgICAgICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRJ
bnQzMikgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIDApOwotICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwog
CiAgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBKU1ZhbHVl
IGpzVmFsdWUgPSBlZGdlLT5hc0pTVmFsdWUoKTsKLSAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlz
Qm9vbGVhbigpKSB7Ci0gICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwg
Z3ByKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBE
YXRhRm9ybWF0SlNCb29sZWFuKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIDApOworICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIs
IHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKKyAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1
ZSkpLCBncHIpOworICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwg
RGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9
CiAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgaW5mby5z
cGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKQEAgLTEyNDEsOSArMTIxOCw2IEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICBjYXNlIERhdGFGb3JtYXRK
U0RvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CiAgICAgY2FzZSBEYXRhRm9ybWF0
Q2VsbDoKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIDApOwotICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKLSAgICAgICAg
CiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6
CiAgICAgY2FzZSBEYXRhRm9ybWF0SW50NTI6Cg==
</data>
<flag name="review"
          id="275558"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>