<?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>72065</bug_id>
          
          <creation_ts>2011-11-10 15:16:13 -0800</creation_ts>
          <short_desc>ValueProfile/PredictedType contains dead code, and doesn&apos;t recognize functions</short_desc>
          <delta_ts>2011-11-10 16:02:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>72072</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>500338</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-10 15:16:13 -0800</bug_when>
    <thetext>The ValueProfile/PredictedType code works great but could use some clean-up.  ValueProfiles still contain statistics gathering code, which I thought we would use, but which never ended up being needed.  We can bring it back later if it&apos;s useful but right now it isn&apos;t, so it should go away.  Furthermore, PredictedType could use some improvement; right now it does not track JSFunctions even though it probably should.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500343</commentid>
    <comment_count>1</comment_count>
      <attachid>114586</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-10 15:25:11 -0800</bug_when>
    <thetext>Created attachment 114586
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500344</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-10 15:31:47 -0800</bug_when>
    <thetext>It&apos;s performance neutral.




Sending VM builds to bigmac...
Running on bigmac...
376/376                                                          
Generating benchmark report at TipOfTree_PredictFunc_SunSpiderV8Kraken_20111110_1524_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on bigmac.local (MacPro5,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r99899)
&quot;PredictFunc&quot; at /Volumes/Data/pizlo/octonary/OpenSource/WebKitBuild/Release/jsc (r99899)

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.

                                            TipOfTree              PredictFunc                                   
SunSpider:
   3d-cube                                7.4510+-0.0215          7.4487+-0.0168       
   3d-morph                               8.4666+-0.1296          8.3534+-0.0271         might be 1.0136x faster
   3d-raytrace                            7.7256+-0.0332          7.7219+-0.0417       
   access-binary-trees                    1.5951+-0.0065    ?     1.6034+-0.0170       ?
   access-fannkuch                        7.5668+-0.0134          7.5647+-0.0093       
   access-nbody                           4.1635+-0.0068    ?     4.1658+-0.0045       ?
   access-nsieve                          3.1892+-0.0520          3.1573+-0.0487         might be 1.0101x faster
   bitops-3bit-bits-in-byte               1.2522+-0.0146    ^     1.2337+-0.0024       ^ definitely 1.0150x faster
   bitops-bits-in-byte                    5.0903+-0.0081          5.0813+-0.0161       
   bitops-bitwise-and                     3.2933+-0.0140          3.2892+-0.0067       
   bitops-nsieve-bits                     5.6496+-0.0380    ?     5.6565+-0.0369       ?
   controlflow-recursive                  2.2660+-0.0178    ?     2.2819+-0.0237       ?
   crypto-aes                             7.1344+-0.0375          7.1180+-0.0203       
   crypto-md5                             2.5696+-0.0381          2.5291+-0.0130         might be 1.0160x faster
   crypto-sha1                            2.2153+-0.0275    ?     2.2205+-0.0309       ?
   date-format-tofte                     10.5814+-0.1046    ?    10.7014+-0.1813       ? might be 1.0113x slower
   date-format-xparb                     10.0452+-0.1624          9.9214+-0.1113         might be 1.0125x faster
   math-cordic                            7.8559+-0.2555          7.7849+-0.3140       
   math-partial-sums                     10.5903+-0.0456         10.5575+-0.0379       
   math-spectral-norm                     2.6130+-0.0280          2.5970+-0.0056       
   regexp-dna                            13.3270+-0.1365    ?    13.3857+-0.1502       ?
   string-base64                          3.9525+-0.0218    ?     3.9714+-0.0225       ?
   string-fasta                           7.0352+-0.0195    ?     7.0393+-0.0164       ?
   string-tagcloud                       13.2607+-0.0986         13.1443+-0.0786       
   string-unpack-code                    22.1875+-0.1085    ?    22.3615+-0.1546       ?
   string-validate-input                  5.7459+-0.0148    ^     5.6923+-0.0267       ^ definitely 1.0094x faster

   &lt;arithmetic&gt; *                         6.8009+-0.0269          6.7916+-0.0254       
   &lt;geometric&gt;                            5.4229+-0.0218          5.4094+-0.0181       
   &lt;harmonic&gt;                             4.2230+-0.0174          4.2089+-0.0155       

                                            TipOfTree              PredictFunc                                   
V8:
   crypto                                77.7920+-0.2599    ?    77.9735+-0.2164       ?
   deltablue                            178.9092+-2.0112        176.4471+-0.5436         might be 1.0140x faster
   earley-boyer                         106.4854+-0.7788    ?   107.2163+-1.0060       ?
   raytrace                              64.5322+-0.5924    ^    63.5356+-0.2555       ^ definitely 1.0157x faster
   regexp                               124.4345+-0.4450    ?   124.9947+-0.7584       ?
   richards                             139.2642+-0.3284    ^   138.7288+-0.1305       ^ definitely 1.0039x faster
   splay                                 89.9584+-1.0182         89.4596+-0.8661       

   &lt;arithmetic&gt;                         111.6251+-0.2546        111.1937+-0.2534       
   &lt;geometric&gt; *                        105.8648+-0.2100        105.4880+-0.2587       
   &lt;harmonic&gt;                           100.4689+-0.2284        100.0714+-0.2591       

                                            TipOfTree              PredictFunc                                   
Kraken:
   ai-astar                             827.8993+-2.3569    ^   808.0137+-12.7757      ^ definitely 1.0246x faster
   audio-beat-detection                 210.1012+-1.3983        209.6153+-0.3732       
   audio-dft                            263.6122+-2.2761        261.2122+-2.1073       
   audio-fft                            136.8735+-0.4714        136.8724+-0.1836       
   audio-oscillator                     291.2965+-1.1678        289.9692+-0.6588       
   imaging-darkroom                     333.8628+-4.6868    ?   335.7773+-4.6733       ?
   imaging-desaturate                   240.8557+-0.1845    ?   240.9225+-0.1073       ?
   imaging-gaussian-blur                621.9453+-2.0887        620.8088+-0.1601       
   json-parse-financial                  72.9938+-0.3702    ^    71.8812+-0.3071       ^ definitely 1.0155x faster
   json-stringify-tinderbox              79.1508+-0.4047    ^    78.5816+-0.1603       ^ definitely 1.0072x faster
   stanford-crypto-aes                  115.3544+-0.6206    ?   116.2910+-0.7732       ?
   stanford-crypto-ccm                  116.5024+-2.1756        115.7590+-0.7849       
   stanford-crypto-pbkdf2               232.0226+-0.5668    ?   232.4018+-0.6303       ?
   stanford-crypto-sha256-iterative      97.2512+-0.2678    ?    97.7409+-0.4190       ?

   &lt;arithmetic&gt; *                       259.9801+-0.5405    ^   258.2748+-0.9047       ^ definitely 1.0066x faster
   &lt;geometric&gt;                          199.6667+-0.4347        198.9506+-0.2938       
   &lt;harmonic&gt;                           160.1019+-0.3986        159.5524+-0.2051       

                                            TipOfTree              PredictFunc                                   
All benchmarks:
   &lt;arithmetic&gt;                          97.8281+-0.1604    ^    97.2507+-0.2719       ^ definitely 1.0059x faster
   &lt;geometric&gt;                           24.7129+-0.0551         24.6395+-0.0472       
   &lt;harmonic&gt;                             7.4439+-0.0299          7.4190+-0.0267       

                                            TipOfTree              PredictFunc                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       57.2027+-0.0946    ^    56.9834+-0.0889       ^ definitely 1.0038x faster

Sending VM builds to oldmac...
Running on oldmac...
376/376                                                          
Generating benchmark report at TipOfTree_PredictFunc_SunSpiderV8Kraken_20111110_1527_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on oldmac.local (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r99899)
&quot;PredictFunc&quot; at /Volumes/Data/pizlo/octonary/OpenSource/WebKitBuild/Release/jsc (r99899)

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.

                                            TipOfTree              PredictFunc                                   
SunSpider:
   3d-cube                                8.9898+-0.0385          8.9537+-0.0341       
   3d-morph                              10.2417+-0.1811    ?    10.3491+-0.1554       ? might be 1.0105x slower
   3d-raytrace                            9.2165+-0.0476    ?     9.2964+-0.0945       ?
   access-binary-trees                    1.9049+-0.0066    ?     1.9101+-0.0047       ?
   access-fannkuch                        9.1498+-0.0116    ?     9.1826+-0.0593       ?
   access-nbody                           5.0165+-0.0032          5.0109+-0.0049       
   access-nsieve                          3.7681+-0.0562          3.7620+-0.0486       
   bitops-3bit-bits-in-byte               1.5011+-0.0142    ?     1.5016+-0.0215       ?
   bitops-bits-in-byte                    6.1195+-0.0193    ?     6.1539+-0.0357       ?
   bitops-bitwise-and                     3.9702+-0.0042    ?     3.9706+-0.0050       ?
   bitops-nsieve-bits                     6.8475+-0.0466          6.8378+-0.0613       
   controlflow-recursive                  2.7286+-0.0236    ?     2.7371+-0.0261       ?
   crypto-aes                             8.5967+-0.0606    ?     8.5999+-0.0724       ?
   crypto-md5                             3.0754+-0.0349    ?     3.0959+-0.0385       ?
   crypto-sha1                            2.6352+-0.0359          2.6252+-0.0303       
   date-format-tofte                     12.9906+-0.1273    ?    13.0785+-0.2130       ?
   date-format-xparb                     12.4281+-0.1846         12.3483+-0.2553       
   math-cordic                            9.0897+-0.3508    ?     9.3206+-0.3536       ? might be 1.0254x slower
   math-partial-sums                     12.7186+-0.0439         12.6985+-0.0144       
   math-spectral-norm                     3.1236+-0.0033          3.1231+-0.0074       
   regexp-dna                            16.4704+-0.1150         16.4544+-0.1057       
   string-base64                          4.7766+-0.0494    ?     4.7917+-0.0501       ?
   string-fasta                           8.4870+-0.0365          8.4698+-0.0167       
   string-tagcloud                       16.0770+-0.1289    ?    16.1057+-0.1213       ?
   string-unpack-code                    27.5033+-0.1275    !    27.8781+-0.1207       ! definitely 1.0136x slower
   string-validate-input                  6.9261+-0.0593    ?     6.9312+-0.0600       ?

   &lt;arithmetic&gt; *                         8.2443+-0.0350    ?     8.2764+-0.0373       ?
   &lt;geometric&gt;                            6.5359+-0.0298    ?     6.5532+-0.0310       ?
   &lt;harmonic&gt;                             5.0689+-0.0241    ?     5.0778+-0.0266       ?

                                            TipOfTree              PredictFunc                                   
V8:
   crypto                                94.1843+-0.4827         93.9954+-0.3382       
   deltablue                            211.0106+-1.5365    ?   213.4590+-1.9532       ? might be 1.0116x slower
   earley-boyer                         128.4136+-1.2743    ?   128.9901+-1.2956       ?
   raytrace                              78.0415+-1.0843         77.7479+-0.8351       
   regexp                               149.4752+-0.3642    ?   149.7779+-0.4526       ?
   richards                             168.1811+-0.3349        167.8198+-0.2328       
   splay                                106.9681+-1.5036    ?   107.9561+-1.3623       ?

   &lt;arithmetic&gt;                         133.7535+-0.3986    ?   134.2495+-0.4467       ?
   &lt;geometric&gt; *                        127.0818+-0.4709    ?   127.4342+-0.4001       ?
   &lt;harmonic&gt;                           120.7889+-0.5493    ?   121.0132+-0.3952       ?

                                            TipOfTree              PredictFunc                                   
Kraken:
   ai-astar                             896.1359+-1.0085        895.8207+-0.8926       
   audio-beat-detection                 257.0216+-1.2096        255.7971+-1.0268       
   audio-dft                            330.9272+-20.8776       315.8478+-4.9373         might be 1.0477x faster
   audio-fft                            166.9879+-0.4969    ?   167.0918+-0.5274       ?
   audio-oscillator                     351.5738+-1.2613    ?   353.4022+-2.5978       ?
   imaging-darkroom                     402.9250+-5.4301    ?   403.7289+-5.3890       ?
   imaging-desaturate                   291.2053+-0.0447    ?   291.2375+-0.1234       ?
   imaging-gaussian-blur                751.7957+-2.2305        751.2858+-1.1248       
   json-parse-financial                  88.8598+-0.5030    ^    87.0018+-0.0599       ^ definitely 1.0214x faster
   json-stringify-tinderbox              96.4554+-0.3616    ^    95.4017+-0.3104       ^ definitely 1.0110x faster
   stanford-crypto-aes                  138.4090+-0.8483        138.3940+-0.4388       
   stanford-crypto-ccm                  137.4009+-0.5853    ?   138.2496+-0.7503       ?
   stanford-crypto-pbkdf2               283.0195+-2.3140        282.3200+-2.1872       
   stanford-crypto-sha256-iterative     118.0068+-0.4938    !   119.3586+-0.2099       ! definitely 1.0115x slower

   &lt;arithmetic&gt; *                       307.9088+-1.5475        306.7812+-0.5348       
   &lt;geometric&gt;                          240.2929+-1.0974        239.2977+-0.3964       
   &lt;harmonic&gt;                           193.7307+-0.5735    ^   192.8179+-0.2686       ^ definitely 1.0047x faster

                                            TipOfTree              PredictFunc                                   
All benchmarks:
   &lt;arithmetic&gt;                         116.1989+-0.4660        115.9547+-0.1736       
   &lt;geometric&gt;                           29.7540+-0.0933    ?    29.7733+-0.0847       ?
   &lt;harmonic&gt;                             8.9361+-0.0417    ?     8.9510+-0.0459       ?

                                            TipOfTree              PredictFunc                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       68.5827+-0.1840    ?    68.6513+-0.1383       ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500351</commentid>
    <comment_count>3</comment_count>
      <attachid>114586</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-10 15:42:43 -0800</bug_when>
    <thetext>Comment on attachment 114586
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500372</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-10 16:00:02 -0800</bug_when>
    <thetext>Landed in  http://trac.webkit.org/changeset/99910</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114586</attachid>
            <date>2011-11-10 15:25:11 -0800</date>
            <delta_ts>2011-11-10 15:42:42 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>predictfunction_patch_1.diff</filename>
            <type>text/plain</type>
            <size>14928</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTk5MDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAK
KzIwMTEtMTEtMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBW
YWx1ZVByb2ZpbGUvUHJlZGljdGVkVHlwZSBjb250YWlucyBkZWFkIGNvZGUsIGFuZCBkb2Vzbid0
IHJlY29nbml6ZSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcyMDY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIAorICAgICAgICBBZGRlZCBQcmVkaWN0RnVuY3Rpb24gc3VwcG9ydCwgYW5kIGRp
ZCBzb21lIGNsZWFuaW5nIHVwIGFsb25nIHRoZSB3YXkuCisgICAgICAgIFZhbHVlUHJvZmlsZSBu
byBsb25nZXIgaGFzIHN0YXRpc3RpY3MgbWFjaGluZXJ5LCBiZWNhdXNlIHdlIG5ldmVyIHVzZWQK
KyAgICAgICAgaXQuIFJlYXJyYW5nZWQgc29tZSBiaXRzIGluIFByZWRpY3RlZFR5cGUgdG8gbW9y
ZSBlYXNpbHkgbWFrZSByb29tIGZvcgorICAgICAgICBvbmUgbW9yZSBvYmplY3QgdHlwZS4gQ2hh
bmdlZCBzb21lIGRlYnVnIGNvZGUgdG8gdXNlIG1vcmUgY29uc2lzdGVudAorICAgICAgICBjb252
ZW50aW9ucyAoQnl0ZUFycmF5IGJlY29tZXMgQnl0ZWFycmF5IHNvIHRoYXQgaWYgd2UgZXZlciBo
YXZlIGEKKyAgICAgICAgIkJ5dGUiIHByZWRpY3Rpb24gd2UgZG9uJ3QgZ2V0IGNvbmZ1c2VkIGJl
dHdlZW4gYSBwcmVkaWN0aW9uIHRoYXQgaXMKKyAgICAgICAgdGhlIHVuaW9uIG9mIEJ5dGUgYW5k
IEFycmF5IGFuZCBhIHByZWRpY3Rpb24gdGhhdCBpbmRpY2F0ZXMgcHJlY2lzZWx5CisgICAgICAg
IGEgQnl0ZUFycmF5KS4KKworICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpwcmVkaWN0aW9uVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpwcmVkaWN0
aW9uRnJvbUNsYXNzSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oOgor
ICAgICAgICAoSlNDOjppc0Z1bmN0aW9uUHJlZGljdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUv
VmFsdWVQcm9maWxlLmNwcDoKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVByb2ZpbGUuaDoKKyAg
ICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBy
b3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyk6CisKIDIwMTEtMTEtMTAgIEdhdmlu
IEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBBUk12
NyBzdXBwb3J0IHRvIHRoZSBERkcgSklUCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCShyZXZpc2lvbiA5OTg5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKIAogI2luY2x1
ZGUgIkpTQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIlZh
bHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5oPgogCkBA
IC02OCw3ICs2OSwxMiBAQCBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJlZGljdGVk
CiAgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdEJ5
dGVBcnJheSkKLSAgICAgICAgcHRyLnN0cmNhdCgiQnl0ZUFycmF5Iik7CisgICAgICAgIHB0ci5z
dHJjYXQoIkJ5dGVhcnJheSIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKKyAg
ICAKKyAgICBpZiAodmFsdWUgJiBQcmVkaWN0RnVuY3Rpb24pCisgICAgICAgIHB0ci5zdHJjYXQo
IkZ1bmN0aW9uIik7CiAgICAgZWxzZQogICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIApAQCAt
MTE2LDYgKzEyMiw5IEBAIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZyb21DbGFzc0luZm8oY28K
ICAgICAKICAgICBpZiAoY2xhc3NJbmZvID09ICZKU1N0cmluZzo6c19pbmZvKQogICAgICAgICBy
ZXR1cm4gUHJlZGljdFN0cmluZzsKKyAgICAKKyAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNz
T2YoJkpTRnVuY3Rpb246OnNfaW5mbykpCisgICAgICAgIHJldHVybiBQcmVkaWN0RnVuY3Rpb247
CiAKICAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoJkpTQnl0ZUFycmF5OjpzX2luZm8p
KQogICAgICAgICByZXR1cm4gUHJlZGljdEJ5dGVBcnJheTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAkocmV2aXNpb24gOTk4OTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw4ICszOSw5IEBAIHR5cGVkZWYgdWludDE2X3QgUHJlZGljdGVkVHlwZTsK
IHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3ROb25lICAgICAgICAgID0gMHgwMDAw
OyAvLyBXZSBkb24ndCBrbm93IGFueXRoaW5nIHlldC4KIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRU
eXBlIFByZWRpY3RGaW5hbE9iamVjdCAgID0gMHgwMDAxOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBK
U0ZpbmFsT2JqZWN0Lgogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEFycmF5ICAg
ICAgICAgPSAweDAwMDI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQXJyYXkuCi1zdGF0aWMgY29u
c3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0Qnl0ZUFycmF5ICAgICA9IDB4MDAwNDsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgSlNCeXRlQXJyYXkuCi1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVk
aWN0T2JqZWN0T3RoZXIgICA9IDB4MDAxMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIG9iamVjdCBi
dXQgbm90IEpTRmluYWxPYmplY3Qgb3IgSlNBcnJheS4KK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRU
eXBlIFByZWRpY3RCeXRlQXJyYXkgICAgID0gMHgwMDA0OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBK
U0J5dGVBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgUHJlZGlj
dGVkVHlwZSBQcmVkaWN0RnVuY3Rpb24gICAgICA9IDB4MDAwODsgLy8gSXQncyBkZWZpbml0ZWx5
IGEgSlNGdW5jdGlvbiBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgUHJl
ZGljdGVkVHlwZSBQcmVkaWN0T2JqZWN0T3RoZXIgICA9IDB4MDAyMDsgLy8gSXQncyBkZWZpbml0
ZWx5IGFuIG9iamVjdCBidXQgbm90IEpTRmluYWxPYmplY3QsIEpTQXJyYXksIEpTQnl0ZUFycmF5
LCBvciBKU0Z1bmN0aW9uLgogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdE9iamVj
dE1hc2sgICAgPSAweDAwM2Y7IC8vIEJpdG1hc2sgdXNlZCBmb3IgdGVzdGluZyBmb3IgYW55IGtp
bmQgb2Ygb2JqZWN0IHByZWRpY3Rpb24uCiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVk
aWN0U3RyaW5nICAgICAgICA9IDB4MDA0MDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcu
CiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0Q2VsbE90aGVyICAgICA9IDB4MDA4
MDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09i
amVjdCBhbmQgZGVmaW5pdGVseSBub3QgYSBKU1N0cmluZy4KQEAgLTg0LDYgKzg1LDExIEBAIGlu
bGluZSBib29sIGlzQXJyYXlQcmVkaWN0aW9uKFByZWRpY3RlZFQKICAgICByZXR1cm4gdmFsdWUg
PT0gUHJlZGljdEFycmF5OwogfQogCitpbmxpbmUgYm9vbCBpc0Z1bmN0aW9uUHJlZGljdGlvbihQ
cmVkaWN0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSA9PSBQcmVkaWN0RnVuY3Rp
b247Cit9CisKIGlubGluZSBib29sIGlzQnl0ZUFycmF5UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBl
IHZhbHVlKQogewogICAgIHJldHVybiB2YWx1ZSA9PSBQcmVkaWN0Qnl0ZUFycmF5OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5jcHAJKHJl
dmlzaW9uIDk5ODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJv
ZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDUxICszMiw2IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLXZvaWQgVmFsdWVQcm9maWxlOjpjb21w
dXRlU3RhdGlzdGljcyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgU3RhdGlzdGljcyYgc3Rh
dGlzdGljcykKLXsKLSAgICBzdGF0aXN0aWNzLmNlbGxzKys7Ci0gICAgCi0gICAgaWYgKGNsYXNz
SW5mbyA9PSAmSlNGaW5hbE9iamVjdDo6c19pbmZvKSB7Ci0gICAgICAgIHN0YXRpc3RpY3MuZmlu
YWxPYmplY3RzKys7Ci0gICAgICAgIHN0YXRpc3RpY3Mub2JqZWN0cysrOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIGlmIChjbGFzc0luZm8gPT0gJkpTQXJyYXk6OnNfaW5mbykg
ewotICAgICAgICBzdGF0aXN0aWNzLmFycmF5cysrOwotICAgICAgICBzdGF0aXN0aWNzLm9iamVj
dHMrKzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoY2xhc3NJbmZvID09
ICZKU1N0cmluZzo6c19pbmZvKSB7Ci0gICAgICAgIHN0YXRpc3RpY3Muc3RyaW5ncysrOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChjbGFzc0luZm8tPmlzU3ViQ2xhc3NP
ZigmSlNPYmplY3Q6OnNfaW5mbykpCi0gICAgICAgIHN0YXRpc3RpY3Mub2JqZWN0cysrOwotfQot
Ci12b2lkIFZhbHVlUHJvZmlsZTo6Y29tcHV0ZVN0YXRpc3RpY3MoU3RhdGlzdGljcyYgc3RhdGlz
dGljcykgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJP
ZkJ1Y2tldHM7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KG1fYnVja2V0c1tpXSk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgCi0gICAgICAgIHN0YXRpc3RpY3Muc2FtcGxlcysrOwotICAgICAgICAKLSAg
ICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIHN0YXRpc3RpY3MuaW50MzJz
Kys7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLmlzRG91YmxlKCkpCi0gICAgICAgICAgICBzdGF0
aXN0aWNzLmRvdWJsZXMrKzsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNDZWxsKCkpCi0gICAg
ICAgICAgICBjb21wdXRlU3RhdGlzdGljcyh2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmNs
YXNzSW5mbygpLCBzdGF0aXN0aWNzKTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNCb29sZWFu
KCkpCi0gICAgICAgICAgICBzdGF0aXN0aWNzLmJvb2xlYW5zKys7Ci0gICAgfQotfQotCiBQcmVk
aWN0ZWRUeXBlIFZhbHVlUHJvZmlsZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCkKIHsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAko
cmV2aXNpb24gOTk4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQ
cm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDYgQEAgc3RydWN0IFZhbHVlUHJv
ZmlsZSB7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRz
ID0gMTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgYnVja2V0SW5kZXhNYXNrID0gbnVtYmVy
T2ZCdWNrZXRzIC0gMTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1
Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNGYWlsQnVja2V0czsKLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgY2VydGFpbnR5ID0gdG90YWxOdW1iZXJPZkJ1Y2tldHMgKiB0
b3RhbE51bWJlck9mQnVja2V0czsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWFqb3JpdHkg
PSBjZXJ0YWludHkgLyAyOwogICAgIAogICAgIFZhbHVlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZz
ZXQpCiAgICAgICAgIDogbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkKQEAgLTk2LDE1
NCArOTQsMTMgQEAgc3RydWN0IFZhbHVlUHJvZmlsZSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCi0gICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVQcm9iYWJpbGl0eSh1bnNp
Z25lZCBjb3VudHMsIHVuc2lnbmVkIG51bWJlck9mU2FtcGxlcykKLSAgICB7Ci0gICAgICAgIGlm
ICghbnVtYmVyT2ZTYW1wbGVzKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVy
biBjb3VudHMgKiBjZXJ0YWludHkgLyBudW1iZXJPZlNhbXBsZXM7Ci0gICAgfQotICAgIAotICAg
IHVuc2lnbmVkIG51bWJlck9mSW50MzJzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVk
IHJlc3VsdCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJl
ck9mQnVja2V0czsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoSlNWYWx1ZTo6ZGVjb2RlKG1fYnVj
a2V0c1tpXSkuaXNJbnQzMigpKQotICAgICAgICAgICAgICAgIHJlc3VsdCsrOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgICAgICAKLSAgICB1bnNpZ25lZCBu
dW1iZXJPZkRvdWJsZXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0g
MDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRz
OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChKU1ZhbHVlOjpkZWNvZGUobV9idWNrZXRzW2ldKS5p
c0RvdWJsZSgpKQotICAgICAgICAgICAgICAgIHJlc3VsdCsrOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgICAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZkNl
bGxzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7Ci0g
ICAgICAgICAgICBpZiAoISFjbGFzc0luZm8oaSkpCi0gICAgICAgICAgICAgICAgcmVzdWx0Kys7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgdW5z
aWduZWQgbnVtYmVyT2ZPYmplY3RzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJl
c3VsdCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9m
QnVja2V0czsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNpID0gY2xhc3NJ
bmZvKGkpOwotICAgICAgICAgICAgaWYgKCEhY2kgJiYgY2ktPmlzU3ViQ2xhc3NPZigmSlNPYmpl
Y3Q6OnNfaW5mbykpCi0gICAgICAgICAgICAgICAgcmVzdWx0Kys7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZGaW5h
bE9iamVjdHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kp
IHsKLSAgICAgICAgICAgIGlmIChjbGFzc0luZm8oaSkgPT0gJkpTRmluYWxPYmplY3Q6OnNfaW5m
bykKLSAgICAgICAgICAgICAgICByZXN1bHQrKzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZlN0cmluZ3MoKSBjb25z
dAotICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKLSAgICAgICAgICAg
IGlmIChjbGFzc0luZm8oaSkgPT0gJkpTU3RyaW5nOjpzX2luZm8pCi0gICAgICAgICAgICAgICAg
cmVzdWx0Kys7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAg
Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgdW5z
aWduZWQgcmVzdWx0ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFs
TnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChjbGFzc0luZm8oaSkgPT0g
JkpTQXJyYXk6OnNfaW5mbykKLSAgICAgICAgICAgICAgICByZXN1bHQrKzsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJP
ZkJvb2xlYW5zKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytp
KSB7Ci0gICAgICAgICAgICBpZiAoSlNWYWx1ZTo6ZGVjb2RlKG1fYnVja2V0c1tpXSkuaXNCb29s
ZWFuKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0Kys7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgICAgIAotICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIG5v
dCBwYXJ0aWN1bGFybHkgb3B0aW1pemVkLCBpbiB0aGF0IHRoZXkgd2lsbCBlYWNoCi0gICAgLy8g
cGVyZm9ybSB0d28gcGFzc2VzIG92ZXIgdGhlIGJ1Y2tldHMgYXJyYXkuIEhvd2V2ZXIsIHRoZXkg
YXJlCi0gICAgLy8gcHJvYmFibHkgdGhlIGJlc3QgYmV0IHVubGVzcyB5b3UgYXJlIHN1cmUgdGhh
dCB5b3Ugd2lsbCBiZSBtYWtpbmcKLSAgICAvLyB0aGVzZSBjYWxscyB3aXRoIGhpZ2ggZnJlcXVl
bmN5LgotICAgICAgICAKLSAgICB1bnNpZ25lZCBwcm9iYWJpbGl0eU9mSW50MzIoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVQcm9iYWJpbGl0eShudW1iZXJPZkludDMycygp
LCBudW1iZXJPZlNhbXBsZXMoKSk7Ci0gICAgfQotICAgICAgICAKLSAgICB1bnNpZ25lZCBwcm9i
YWJpbGl0eU9mRG91YmxlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb21wdXRlUHJv
YmFiaWxpdHkobnVtYmVyT2ZEb3VibGVzKCksIG51bWJlck9mU2FtcGxlcygpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdW5zaWduZWQgcHJvYmFiaWxpdHlPZkNlbGwoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGNvbXB1dGVQcm9iYWJpbGl0eShudW1iZXJPZkNlbGxzKCksIG51bWJlck9mU2Ft
cGxlcygpKTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgcHJvYmFiaWxpdHlPZk9iamVjdCgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gY29tcHV0ZVByb2JhYmlsaXR5KG51bWJlck9m
T2JqZWN0cygpLCBudW1iZXJPZlNhbXBsZXMoKSk7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVk
IHByb2JhYmlsaXR5T2ZGaW5hbE9iamVjdCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
Y29tcHV0ZVByb2JhYmlsaXR5KG51bWJlck9mRmluYWxPYmplY3RzKCksIG51bWJlck9mU2FtcGxl
cygpKTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgcHJvYmFiaWxpdHlPZkFycmF5KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb21wdXRlUHJvYmFiaWxpdHkobnVtYmVyT2ZBcnJh
eXMoKSwgbnVtYmVyT2ZTYW1wbGVzKCkpOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBwcm9i
YWJpbGl0eU9mU3RyaW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb21wdXRlUHJv
YmFiaWxpdHkobnVtYmVyT2ZTdHJpbmdzKCksIG51bWJlck9mU2FtcGxlcygpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdW5zaWduZWQgcHJvYmFiaWxpdHlPZkJvb2xlYW4oKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNvbXB1dGVQcm9iYWJpbGl0eShudW1iZXJPZkJvb2xlYW5zKCksIG51bWJl
ck9mU2FtcGxlcygpKTsKLSAgICB9Ci0KICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBkdW1wKEZJ
TEUqIG91dCkKICAgICB7CiAgICAgICAgIGZwcmludGYob3V0LAotICAgICAgICAgICAgICAgICJz
YW1wbGVzID0gJXUsIGludDMyID0gJXUgKCV1KSwgZG91YmxlID0gJXUgKCV1KSwgY2VsbCA9ICV1
ICgldSksIG9iamVjdCA9ICV1ICgldSksIGZpbmFsIG9iamVjdCA9ICV1ICgldSksIGFycmF5ID0g
JXUgKCV1KSwgc3RyaW5nID0gJXUgKCV1KSwgYm9vbGVhbiA9ICV1ICgldSksIHByZWRpY3Rpb24g
PSAlcywgc2FtcGxlcyBpbiBwcmVkaWN0aW9uID0gJXUiLAotICAgICAgICAgICAgICAgIG51bWJl
ck9mU2FtcGxlcygpLAotICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZJbnQzMigpLCBudW1i
ZXJPZkludDMycygpLAotICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZEb3VibGUoKSwgbnVt
YmVyT2ZEb3VibGVzKCksCi0gICAgICAgICAgICAgICAgcHJvYmFiaWxpdHlPZkNlbGwoKSwgbnVt
YmVyT2ZDZWxscygpLAotICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZPYmplY3QoKSwgbnVt
YmVyT2ZPYmplY3RzKCksCi0gICAgICAgICAgICAgICAgcHJvYmFiaWxpdHlPZkZpbmFsT2JqZWN0
KCksIG51bWJlck9mRmluYWxPYmplY3RzKCksCi0gICAgICAgICAgICAgICAgcHJvYmFiaWxpdHlP
ZkFycmF5KCksIG51bWJlck9mQXJyYXlzKCksCi0gICAgICAgICAgICAgICAgcHJvYmFiaWxpdHlP
ZlN0cmluZygpLCBudW1iZXJPZlN0cmluZ3MoKSwKLSAgICAgICAgICAgICAgICBwcm9iYWJpbGl0
eU9mQm9vbGVhbigpLCBudW1iZXJPZkJvb2xlYW5zKCksCi0gICAgICAgICAgICAgICAgcHJlZGlj
dGlvblRvU3RyaW5nKG1fcHJlZGljdGlvbiksIG1fbnVtYmVyT2ZTYW1wbGVzSW5QcmVkaWN0aW9u
KTsKKyAgICAgICAgICAgICAgICAic2FtcGxlcyA9ICV1LCBwcmVkaWN0aW9uID0gJXMiLAorICAg
ICAgICAgICAgICAgIHRvdGFsTnVtYmVyT2ZTYW1wbGVzKCksCisgICAgICAgICAgICAgICAgcHJl
ZGljdGlvblRvU3RyaW5nKG1fcHJlZGljdGlvbikpOwogICAgICAgICBib29sIGZpcnN0ID0gdHJ1
ZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRz
OyArK2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUobV9i
dWNrZXRzW2ldKTsKQEAgLTI1OSwzMSArMTE2LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZSB7CiAg
ICAgfQogI2VuZGlmCiAgICAgCi0gICAgc3RydWN0IFN0YXRpc3RpY3MgewotICAgICAgICB1bnNp
Z25lZCBzYW1wbGVzOwotICAgICAgICB1bnNpZ25lZCBpbnQzMnM7Ci0gICAgICAgIHVuc2lnbmVk
IGRvdWJsZXM7Ci0gICAgICAgIHVuc2lnbmVkIGNlbGxzOwotICAgICAgICB1bnNpZ25lZCBvYmpl
Y3RzOwotICAgICAgICB1bnNpZ25lZCBmaW5hbE9iamVjdHM7Ci0gICAgICAgIHVuc2lnbmVkIGFy
cmF5czsKLSAgICAgICAgdW5zaWduZWQgc3RyaW5nczsKLSAgICAgICAgdW5zaWduZWQgYm9vbGVh
bnM7Ci0gICAgICAgIAotICAgICAgICBTdGF0aXN0aWNzKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgYnplcm8odGhpcywgc2l6ZW9mKFN0YXRpc3RpY3MpKTsKLSAgICAgICAgfQotICAgIH07Ci0g
ICAgCi0gICAgLy8gTWV0aG9kIGZvciBpbmNyZW1lbnRpbmcgYWxsIHJlbGV2YW50IHN0YXRpc3Rp
Y3MgZm9yIGEgQ2xhc3NJbmZvLCBleGNlcHQgZm9yCi0gICAgLy8gaW5jcmVtZW50aW5nIHRoZSBu
dW1iZXIgb2Ygc2FtcGxlcywgd2hpY2ggdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKLSAg
ICAvLyBkb2luZy4KLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlU3RhdGlzdGljcyhjb25zdCBDbGFz
c0luZm8qLCBTdGF0aXN0aWNzJik7Ci0KLSAgICAvLyBPcHRpbWl6ZWQgbWV0aG9kIGZvciBnZXR0
aW5nIGFsbCBjb3VudHMgYXQgb25jZS4KLSAgICB2b2lkIGNvbXB1dGVTdGF0aXN0aWNzKFN0YXRp
c3RpY3MmKSBjb25zdDsKLSAgICAKICAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCBy
ZXR1cm5zIHRoZSBuZXcgb25lLgogICAgIFByZWRpY3RlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDk5ODk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk4LDcgKzQ5
OCw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZShOb2RlSW5kZXggbm8KICAgICAgICAg
ICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgICAgIAorICAgICAgICAKICAgICAgICAgaWYgKGlzT3RoZXJQcmVkaWN0aW9uKGNo
aWxkLnByZWRpY3Rpb24oKSkpIHsKICAgICAgICAgICAgIHNvdXJjZS5maWx0ZXIoUHJlZGljdE90
aGVyKTsKICAgICAgICAgICAgIGRlc3RpbmF0aW9uLnNldChQcmVkaWN0T2JqZWN0T3RoZXIpOwpA
QCAtNTM0LDcgKzUzNCw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZShOb2RlSW5kZXgg
bm8KICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldENhbGxlZToKLSAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0T2JqZWN0T3RoZXIpOworICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RGdW5jdGlvbik7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRTY29wZUNoYWluOgpAQCAtNjA0LDEyICs2MDQs
MTIgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKE5vZGVJbmRleCBubwogICAgIGNhc2Ug
Q2hlY2tNZXRob2Q6CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBwcm9w
YWdhdGUgdGhlIHN0cnVjdHVyZSBzZXRzIG9mIGNvbnN0YW50cyAoaS5lLiBwcm90b3R5cGVzKS4K
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIobV9ncmFwaC5tX21ldGhvZENo
ZWNrRGF0YVtub2RlLm1ldGhvZENoZWNrRGF0YUluZGV4KCldLnN0cnVjdHVyZSk7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdE9iamVjdE90aGVyKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RnVuY3Rpb24pOwogICAgICAgICBtX2hhdmVTdHJ1
Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tG
dW5jdGlvbjoKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE9i
amVjdE90aGVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGlj
dEZ1bmN0aW9uKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0
ZSB0aGUgZmFjdCB0aGF0IHdlIGtub3cgd2hhdCB0aGUgZnVuY3Rpb24gaXMuCiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
b3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk5ODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI2LDcgKzUyNiw3IEBA
IHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldENhbGxl
ZTogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RPYmplY3RP
dGhlcik7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGljdEZ1bmN0
aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
</data>
<flag name="review"
          id="113278"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>