<?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>72878</bug_id>
          
          <creation_ts>2011-11-21 06:41:44 -0800</creation_ts>
          <short_desc>Strength reduction for Mul and Mod operations for known constants in DFG</short_desc>
          <delta_ts>2011-11-23 11:33:46 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Yuqiang Xian">yuqiang.xian</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>wingo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>506918</commentid>
    <comment_count>0</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-11-21 06:41:44 -0800</bug_when>
    <thetext>We can do strength reduction for some expensive arithmetic operations like Mul, Mod etc., especially it would be easier for known constants such as power-of-two constants.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506925</commentid>
    <comment_count>1</comment_count>
      <attachid>116079</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-11-21 06:57:02 -0800</bug_when>
    <thetext>Created attachment 116079
the patch

No obvious performance gains on v8, sunspider and kraken benchmarks, though. Also currently only for 32_64 DFG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507076</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-21 10:57:16 -0800</bug_when>
    <thetext>Can you add 64-bit code for this?  It would be great if we could keep the two JITs in sync whenever possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507375</commentid>
    <comment_count>3</comment_count>
      <attachid>116168</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-11-21 19:21:02 -0800</bug_when>
    <thetext>Created attachment 116168
patch updated

Adding 64bit support, and also try to share the code between 64 and 32_64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507382</commentid>
    <comment_count>4</comment_count>
      <attachid>116168</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-11-21 19:47:06 -0800</bug_when>
    <thetext>Comment on attachment 116168
patch updated

Sorry. Seems one failure in 64-bit layout test. Still under investigation. So clear review flags for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507405</commentid>
    <comment_count>5</comment_count>
      <attachid>116177</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-11-21 21:51:15 -0800</bug_when>
    <thetext>Created attachment 116177
patch fixing the 64bit regression

In the ArithMod fast path, the dividend value could be the final result (in case of |dividend| &lt; |divisor|) and the result cannot be a tagged integer, so we speculate it as strict int32.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507903</commentid>
    <comment_count>6</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-11-22 18:59:13 -0800</bug_when>
    <thetext>Performance results on &quot;64-bit&quot;: 1% on SunSpider, neutral elsewhere.

SunSpider:

TEST                   COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:           1.011x as fast    181.7ms +/- 0.9%   179.7ms +/- 0.6%     significant

=============================================================================

  3d:                  -                  26.7ms +/- 1.8%    26.4ms +/- 1.4%
    cube:              -                  10.0ms +/- 0.0%    10.0ms +/- 0.0%
    morph:             -                   8.0ms +/- 0.0%     8.0ms +/- 0.0%
    raytrace:          -                   8.7ms +/- 5.5%     8.4ms +/- 4.4%

  access:              -                  17.1ms +/- 6.4%    16.9ms +/- 4.2%
    binary-trees:      -                   2.6ms +/- 23.2%     2.4ms +/- 25.1%
    fannkuch:          -                   7.3ms +/- 4.7%     7.1ms +/- 3.2%
    nbody:             -                   4.0ms +/- 0.0%     4.0ms +/- 0.0%
    nsieve:            ??                  3.2ms +/- 14.1%     3.4ms +/- 10.9%     not conclusive: might be *1.063x as slow*

  bitops:              -                  13.5ms +/- 3.7%    13.1ms +/- 1.7%
    3bit-bits-in-byte: -                   1.0ms +/- 0.0%     1.0ms +/- 0.0%
    bits-in-byte:      -                   4.3ms +/- 8.0%     4.1ms +/- 5.5%
    bitwise-and:       -                   3.1ms +/- 7.3%     3.0ms +/- 0.0%
    nsieve-bits:       -                   5.1ms +/- 4.4%     5.0ms +/- 0.0%

  controlflow:         -                   2.0ms +/- 0.0%     2.0ms +/- 0.0%
    recursive:         -                   2.0ms +/- 0.0%     2.0ms +/- 0.0%

  crypto:              ??                 11.0ms +/- 0.0%    11.1ms +/- 2.0%     not conclusive: might be *1.009x as slow*
    aes:               ??                  7.0ms +/- 0.0%     7.1ms +/- 3.2%     not conclusive: might be *1.014x as slow*
    md5:               -                   2.0ms +/- 0.0%     2.0ms +/- 0.0%
    sha1:              -                   2.0ms +/- 0.0%     2.0ms +/- 0.0%

  date:                1.052x as fast     24.4ms +/- 1.5%    23.2ms +/- 1.3%     significant
    format-tofte:      -                  12.4ms +/- 3.0%    12.2ms +/- 2.5%
    format-xparb:      1.091x as fast     12.0ms +/- 0.0%    11.0ms +/- 0.0%     significant

  math:                -                  19.0ms +/- 0.0%    19.0ms +/- 0.0%
    cordic:            -                   7.0ms +/- 0.0%     7.0ms +/- 0.0%
    partial-sums:      -                  10.0ms +/- 0.0%    10.0ms +/- 0.0%
    spectral-norm:     -                   2.0ms +/- 0.0%     2.0ms +/- 0.0%

  regexp:              -                  14.0ms +/- 0.0%    14.0ms +/- 0.0%
    dna:               -                  14.0ms +/- 0.0%    14.0ms +/- 0.0%

  string:              -                  54.0ms +/- 0.0%    54.0ms +/- 0.0%
    base64:            -                   4.0ms +/- 0.0%     4.0ms +/- 0.0%
    fasta:             -                   8.0ms +/- 0.0%     8.0ms +/- 0.0%
    tagcloud:          -                  13.0ms +/- 0.0%    13.0ms +/- 0.0%
    unpack-code:       -                  23.0ms +/- 0.0%    23.0ms +/- 0.0%
    validate-input:    -                   6.0ms +/- 0.0%     6.0ms +/- 0.0%


Kraken:

TEST                         COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:                 -                 3782.4ms +/- 0.4%   3766.0ms +/- 0.3%

=============================================================================

  ai:                        -                  803.6ms +/- 1.0%    800.3ms +/- 0.5%
    astar:                   -                  803.6ms +/- 1.0%    800.3ms +/- 0.5%

  audio:                     -                 1049.8ms +/- 0.3%   1049.5ms +/- 0.1%
    beat-detection:          -                  208.1ms +/- 0.1%    207.9ms +/- 0.1%
    dft:                     -                  436.4ms +/- 0.5%    435.0ms +/- 0.1%
    fft:                     ??                 137.3ms +/- 0.3%    138.0ms +/- 0.6%     not conclusive: might be *1.005x as slow*
    oscillator:              ??                 268.0ms +/- 0.4%    268.6ms +/- 0.1%     not conclusive: might be *1.002x as slow*

  imaging:                   1.010x as fast    1159.8ms +/- 0.6%   1148.0ms +/- 0.5%     significant
    gaussian-blur:           -                  585.7ms +/- 0.3%    585.0ms +/- 0.1%
    darkroom:                -                  341.0ms +/- 2.0%    334.9ms +/- 1.8%
    desaturate:              1.022x as fast     233.1ms +/- 0.2%    228.1ms +/- 0.1%     significant

  json:                      ??                 170.1ms +/- 0.4%    170.3ms +/- 0.3%     not conclusive: might be *1.001x as slow*
    parse-financial:         *1.014x as slow*    74.0ms +/- 0.5%     75.0ms +/- 0.6%     significant
    stringify-tinderbox:     1.008x as fast      96.1ms +/- 0.5%     95.3ms +/- 0.4%     significant

  stanford:                  -                  599.1ms +/- 0.4%    597.9ms +/- 0.3%
    crypto-aes:              -                  127.9ms +/- 0.8%    128.0ms +/- 0.4%
    crypto-ccm:              ??                 127.9ms +/- 0.3%    128.2ms +/- 0.4%     not conclusive: might be *1.002x as slow*
    crypto-pbkdf2:           -                  237.0ms +/- 0.5%    236.2ms +/- 0.8%
    crypto-sha256-iterative: 1.008x as fast     106.3ms +/- 0.3%    105.5ms +/- 0.4%     significant


V8:

FROM -
Richards: 9613
DeltaBlue: 6407
Crypto: 15087
RayTrace: 8427
EarleyBoyer: 8602
RegExp: 1838
Splay: 6306
----
Score (version 6): 6947

TO -
Richards: 9616
DeltaBlue: 6341
Crypto: 15109
RayTrace: 8312
EarleyBoyer: 8648
RegExp: 1856
Splay: 6275
----
Score (version 6): 6935</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507905</commentid>
    <comment_count>7</comment_count>
      <attachid>116177</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-22 19:13:14 -0800</bug_when>
    <thetext>Comment on attachment 116177
patch fixing the 64bit regression

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

Looks great!  Two comments:

1) Can you check that the indentation is 4 spaces, no tabs, in the one place I pointed out?

2) Since there is no clear win on major benchmarks, can you construct a micro benchmark that demonstrates the win?  It can be arbitrarily simple.  I think that this patch is a good idea, and it&apos;s the right direction, but we just need to make sure that it does what we think it does.

I&apos;m marking it r+ and cq- so that you can check the indentation.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1602
&gt; +        if (x) {
&gt; +          num = x;
&gt; +          log += shift;
&gt; +        }

Is the indentation right here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507906</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-22 19:16:34 -0800</bug_when>
    <thetext>&gt;     format-xparb:      1.091x as fast     12.0ms +/- 0.0%    11.0ms +/- 0.0%     significant

Something to keep in mind: date-format-xparb fluctuates by 10% every time I breathe on the DFG, for any reason.  So I tend to ignore it.  That&apos;s not to say that this isn&apos;t a true progression.  But taking progressions on xparb seriously is bad luck: next time you make a patch you might find xparb regressing by 10%, for no reason at all! ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507914</commentid>
    <comment_count>9</comment_count>
      <attachid>116309</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-11-22 20:00:21 -0800</bug_when>
    <thetext>Created attachment 116309
simple test case

Filip, thanks for the comments!

Here&apos;s a very simple test case for constant power of two mul and mod.

Tested on 64bit:

ToT -
constant multiply result: 9999999900000000, in 878 ms
constant modulo result: 50000000, in 784 ms

Patched -
constant multiply result: 9999999900000000, in 721 ms
constant modulo result: 50000000, in 721 ms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507918</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-22 20:04:13 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=116309) [details]
&gt; simple test case
&gt; 
&gt; Filip, thanks for the comments!
&gt; 
&gt; Here&apos;s a very simple test case for constant power of two mul and mod.
&gt; 
&gt; Tested on 64bit:
&gt; 
&gt; ToT -
&gt; constant multiply result: 9999999900000000, in 878 ms
&gt; constant modulo result: 50000000, in 784 ms
&gt; 
&gt; Patched -
&gt; constant multiply result: 9999999900000000, in 721 ms
&gt; constant modulo result: 50000000, in 721 ms

That&apos;s great!  Note that &apos;i&apos; and &apos;iter&apos; are global variables in your test, so probably you could get even better performance by making &apos;iter&apos; an argument to the test functions (so it&apos;s local) or maybe loading it into a local &apos;var&apos; at the top of those functions, and then declaring &apos;i&apos; as a var.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507919</commentid>
    <comment_count>11</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-11-22 20:19:23 -0800</bug_when>
    <thetext>Landed as r101042 - http://trac.webkit.org/changeset/101042</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507920</commentid>
    <comment_count>12</comment_count>
      <attachid>116177</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-11-22 20:20:08 -0800</bug_when>
    <thetext>Comment on attachment 116177
patch fixing the 64bit regression

Clear flags for landed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508156</commentid>
    <comment_count>13</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2011-11-23 08:32:30 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt;     format-xparb:      1.091x as fast     12.0ms +/- 0.0%    11.0ms +/- 0.0%     significant
&gt; 
&gt; Something to keep in mind: date-format-xparb fluctuates by 10% every time I breathe on the DFG, for any reason.  So I tend to ignore it.  That&apos;s not to say that this isn&apos;t a true progression.  But taking progressions on xparb seriously is bad luck: next time you make a patch you might find xparb regressing by 10%, for no reason at all! ;-)

Sounds like the integral milliseconds truncation of bug 71801.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508257</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-23 11:33:46 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #8)
&gt; &gt; &gt;     format-xparb:      1.091x as fast     12.0ms +/- 0.0%    11.0ms +/- 0.0%     significant
&gt; &gt; 
&gt; &gt; Something to keep in mind: date-format-xparb fluctuates by 10% every time I breathe on the DFG, for any reason.  So I tend to ignore it.  That&apos;s not to say that this isn&apos;t a true progression.  But taking progressions on xparb seriously is bad luck: next time you make a patch you might find xparb regressing by 10%, for no reason at all! ;-)
&gt; 
&gt; Sounds like the integral milliseconds truncation of bug 71801.

This pathology shows up even when doing microsecond timing with Tools/Scripts/bencher.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116079</attachid>
            <date>2011-11-21 06:57:02 -0800</date>
            <delta_ts>2011-11-21 19:21:02 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>72878.patch</filename>
            <type>text/plain</type>
            <size>7217</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwOTA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDExLTExLTIxICBZdXFpYW5nIFhpYW4gIDx5dXFpYW5nLnhpYW5AaW50ZWwuY29tPgorCisg
ICAgICAgIFN0cmVuZ3RoIHJlZHVjdGlvbiBmb3IgTXVsIGFuZCBNb2Qgb3BlcmF0aW9ucyBmb3Ig
a25vd24gY29uc3RhbnRzIGluIDMyYml0IERGRworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
bm9kZU1heU92ZXJmbG93KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6aXNQb3dlck9mVHdvKToKKyAgICAgICAgKEpTQzo6REZH
Ojpsb2dUd28pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU29m
dE1vZHVsbyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
CiAyMDExLTExLTIxICBBbmR5IFdpbmdvICA8d2luZ29AaWdhbGlhLmNvbT4KIAogICAgICAgICBB
ZGQgLmRpci1sb2NhbHMuZWwgZmlsZSBmb3IgYmV0dGVyIEVtYWNzIGRlZmF1bHRzCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTAwOTA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgw
LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuSWdub3JlTmVnYXRpdmUKICAgICByZXR1
cm4gIShmbGFncyAmIE5vZGVOZWVkc05lZ1plcm8pOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wg
bm9kZU1heU92ZXJmbG93KEFyaXRoTm9kZUZsYWdzIGZsYWdzKQoreworICAgIHJldHVybiAhIShm
bGFncyAmIE5vZGVNYXlPdmVyZmxvdyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2Fu
U3BlY3VsYXRlSW50ZWdlcihBcml0aE5vZGVGbGFncyBmbGFncykKIHsKICAgICBpZiAoZmxhZ3Mg
JiBOb2RlTWF5T3ZlcmZsb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDEwMDkwOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwNTIsMTEgKzIwNTIsNzUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEJyYW5jaChOb2RlJiBubwogICAgIH0KIH0KIAorc3RhdGljIGJvb2wgaXNQb3dlck9mVHdvKGlu
dDMyX3QgbnVtKQoreworICAgIHJldHVybiBudW0gJiYgIShudW0gJiAobnVtIC0gMSkpOworfQor
CisvLyBUaGlzIHJvdXRpbmUgaXMgY29waWVkIGZyb20gRmFzdE1hbGxvYworc3RhdGljIGludCBs
b2dUd28oaW50MzJfdCBudW0pCit7CisgICAgaW50IGxvZyA9IDA7CisgICAgZm9yIChpbnQgaSA9
IDQ7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGludCBzaGlmdCA9ICgxIDw8IGkpOworICAgICAg
ICBpbnQzMl90IHggPSBudW0gPj4gc2hpZnQ7CisgICAgICAgIGlmICh4KSB7CisgICAgICAgICAg
bnVtID0geDsKKyAgICAgICAgICBsb2cgKz0gc2hpZnQ7CisgICAgICAgIH0KKyAgICB9CisgICAg
QVNTRVJUKG51bSA9PSAxKTsKKyAgICByZXR1cm4gbG9nOworfQorCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlU29mdE1vZHVsbyhOb2RlJiBub2RlKQogeworICAgIGJvb2wgc2hvdWxkR2Vu
ZXJhdGVQb3dlck9mVHdvQ2hlY2sgPSB0cnVlOwogICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIG9wMUdwciA9IG9wMS5ncHIoKTsK
KworICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgaW50
MzJfdCBkaXZpc29yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSk7CisgICAg
ICAgIGlmIChkaXZpc29yIDwgMCkKKyAgICAgICAgICAgIGRpdmlzb3IgPSAtZGl2aXNvcjsKKwor
ICAgICAgICBpZiAoaXNQb3dlck9mVHdvKGRpdmlzb3IpKSB7CisgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR3ByLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgcG9zaXRpdmVEaXZpZGVuZCA9IG1faml0LmJyYW5j
aDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wMUdwciwgVHJ1c3RlZEltbTMy
KDApKTsKKyAgICAgICAgICAgIG1faml0Lm5lZzMyKHJlc3VsdEdQUik7CisgICAgICAgICAgICBt
X2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoZGl2aXNvciAtIDEpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgbV9qaXQubmVnMzIocmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgICAgIHBvc2l0aXZlRGl2aWRlbmQu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKGRpdmlz
b3IgLSAxKSwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Cisg
ICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjaWYgQ1BVKFg4NikKKyAgICAgICAgaWYgKGRp
dmlzb3IpIHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBlYXgodGhpcywgWDg2UmVnaXN0ZXJz
OjplYXgpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IGVkeCh0aGlzLCBYODZSZWdpc3RlcnM6
OmVkeCk7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgbV9q
aXQubW92ZShvcDFHcHIsIGVheC5ncHIoKSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMihkaXZpc29yKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBtX2ppdC5hc3NlbWJs
ZXIoKS5jZHEoKTsKKyAgICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLmlkaXZsX3Ioc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KGVkeC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgLy8g
RmFsbGJhY2sgdG8gbm9uLWNvbnN0YW50IGNhc2UgYnV0IGF2b2lkIHVubmVjZXNzYXJ5IGNoZWNr
cy4KKyAgICAgICAgc2hvdWxkR2VuZXJhdGVQb3dlck9mVHdvQ2hlY2sgPSBmYWxzZTsKKyAgICB9
CisKKyAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CiAgICAgR1BSUmVnIG9wMkdwciA9IG9wMi5ncHIoKTsKIAogICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olpl
cm8sIG9wMkdwcikpOwpAQCAtMjEwOSwxMyArMjE3MywxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlU29mdE1vZHVsbyhOCiAgICAgZXhpdEJyYW5jaC5hcHBlbmQobV9qaXQuYnJhbmNo
MzIoSklUQ29tcGlsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIyKSk7CiAKICAg
ICAvLyBQb3dlciBvZiB0d28gZmFzdCBjYXNlCi0gICAgbV9qaXQubW92ZShzY3JhdGNoR1BSMiwg
c2NyYXRjaEdQUik7Ci0gICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BS
KTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBub3RQb3dlck9mVHdvID0gbV9qaXQuYnJhbmNoVGVz
dDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSMik7Ci0gICAg
bV9qaXQuYW5kMzIoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAgICBleGl0QnJhbmNoLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworICAgIGlmIChzaG91bGRHZW5lcmF0ZVBvd2VyT2ZUd29DaGVjaykg
eworICAgICAgICBtX2ppdC5tb3ZlKHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
bV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgbm90UG93ZXJPZlR3byA9IG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxl
cjo6Tm9uWmVybywgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIpOworICAgICAgICBtX2ppdC5hbmQz
MihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICBleGl0QnJhbmNoLmFwcGVuZChtX2pp
dC5qdW1wKCkpOwogCi0gICAgbm90UG93ZXJPZlR3by5saW5rKCZtX2ppdCk7CisgICAgICAgIG5v
dFBvd2VyT2ZUd28ubGluaygmbV9qaXQpOworICAgIH0KIAogI2lmIENQVShYODYpCiAgICAgbV9q
aXQubW92ZShyZXN1bHRHUFIsIGVheC5ncHIoKSk7CkBAIC0yNTQ0LDYgKzI2MTAsNDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgY2FzZSBBcml0aE11
bDogewogICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2RlLmNo
aWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigp
KSB7CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpICYmICFu
b2RlTWF5T3ZlcmZsb3cobm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAgICAgICAg
IGludDMyX3QgbXVsdGlwbGllciA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkp
OworICAgICAgICAgICAgICAgIGJvb2wgbmVnYXRpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBpZiAobXVsdGlwbGllciA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGllciA9
IC1tdWx0aXBsaWVyOworICAgICAgICAgICAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFtdWx0aXBsaWVyKSB7CisgICAg
ICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICAg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3Mo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW4sIG9wMS5ncHIoKSwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGlzUG93ZXJPZlR3byhtdWx0aXBs
aWVyKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgbG9nID0gbG9nVHdvKG11bHRpcGxpZXIp
OworICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgb3AxKTsKKyAgICAgICAgICAgICAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIo
KTsKKyAgICAgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUgJiYgIW5vZGVDYW5JZ25vcmVOZWdh
dGl2ZVplcm8obm9kZS5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9wMUdQUikpOworCisgICAgICAgICAgICAgICAgICAg
IG1faml0LmxzaGlmdDMyKG9wMUdQUiwgVHJ1c3RlZEltbTMyKGxvZyksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1faml0Lm5lZzMyKHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgaW50ZWdlclJl
c3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116168</attachid>
            <date>2011-11-21 19:21:02 -0800</date>
            <delta_ts>2011-11-21 21:51:15 -0800</delta_ts>
            <desc>patch updated</desc>
            <filename>72878.1.patch</filename>
            <type>text/plain</type>
            <size>26363</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwOTc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBA
CisyMDExLTExLTIxICBZdXFpYW5nIFhpYW4gIDx5dXFpYW5nLnhpYW5AaW50ZWwuY29tPgorCisg
ICAgICAgIFN0cmVuZ3RoIHJlZHVjdGlvbiBmb3IgTXVsIGFuZCBNb2Qgb3BlcmF0aW9ucyBmb3Ig
a25vd24gY29uc3RhbnRzIGluIERGRworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzI4NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBbHNvIHRoZSBjb2RlIHNob3VsZCBiZSBjb21tb25seSBzaGFyZWQgYnkg
Ym90aCAzMl82NCBhbmQgNjQuCisKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAo
SlNDOjpERkc6Om5vZGVNYXlPdmVyZmxvdyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpmbW9kQXNERkdPcGVyYXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZik6CisgICAgICAg
IChKU0M6OkRGRzo6aXNQb3dlck9mVHdvKToKKyAgICAgICAgKEpTQzo6REZHOjpsb2dUd28pOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU29mdE1vZHVsbyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZCk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorCiAyMDExLTExLTIxICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIHNob3VsZCBoYXZlIHJpY2hlciBk
ZWJ1ZyBvdXRwdXQgZm9yIENGQSBhbmQgcGhpIHByb2Nlc3NpbmcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxMDA5NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsMTEgQEAgc3Rh
dGljIGlubGluZSBib29sIG5vZGVDYW5JZ25vcmVOZWdhdGl2ZQogICAgIHJldHVybiAhKGZsYWdz
ICYgTm9kZU5lZWRzTmVnWmVybyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBub2RlTWF5T3Zl
cmZsb3coQXJpdGhOb2RlRmxhZ3MgZmxhZ3MpCit7CisgICAgcmV0dXJuICEhKGZsYWdzICYgTm9k
ZU1heU92ZXJmbG93KTsKK30KKwogc3RhdGljIGlubGluZSBib29sIG5vZGVDYW5TcGVjdWxhdGVJ
bnRlZ2VyKEFyaXRoTm9kZUZsYWdzIGZsYWdzKQogewogICAgIGlmIChmbGFncyAmIE5vZGVNYXlP
dmVyZmxvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTAwOTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsMTcgKzMzLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi0v
LyBPbiBXaW5kb3dzIHdlIG5lZWQgdG8gd3JhcCBmbW9kOyBvbiBvdGhlciBwbGF0Zm9ybXMgd2Ug
Y2FuIGNhbGwgaXQgZGlyZWN0bHkuCi0vLyBPbiBBUk12NyB3ZSBhc3NlcnQgdGhhdCBhbGwgZnVu
Y3Rpb24gcG9pbnRlcnMgaGF2ZSB0byBsb3cgYml0IHNldCAocG9pbnQgdG8gdGh1bWIgY29kZSku
Ci0jaWYgQ0FMTElOR19DT05WRU5USU9OX0lTX1NURENBTEwgfHwgQ1BVKEFSTV9USFVNQjIpCi1z
dGF0aWMgZG91YmxlIERGR19PUEVSQVRJT04gZm1vZEFzREZHT3BlcmF0aW9uKGRvdWJsZSB4LCBk
b3VibGUgeSkKLXsKLSAgICByZXR1cm4gZm1vZCh4LCB5KTsKLX0KLSNlbHNlCi0jZGVmaW5lIGZt
b2RBc0RGR09wZXJhdGlvbiBmbW9kCi0jZW5kaWYKLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAK
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoTm9kZUluZGV4IG5vZGVJbmRleCwg
RGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQpAQCAtMjA1MiwxMjEgKzIwNDEsNiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgfQogfQogCi12b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlU29mdE1vZHVsbyhOb2RlJiBub2RlKQotewotICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgR1BSUmVnIG9wMUdw
ciA9IG9wMS5ncHIoKTsKLSAgICBHUFJSZWcgb3AyR3ByID0gb3AyLmdwcigpOwotCi0gICAgc3Bl
Y3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihK
SVRDb21waWxlcjo6WmVybywgb3AyR3ByKSk7Ci0KLSNpZiBDUFUoWDg2KQotICAgIEdQUlRlbXBv
cmFyeSBlYXgodGhpcywgWDg2UmVnaXN0ZXJzOjplYXgpOwotICAgIEdQUlRlbXBvcmFyeSBlZHgo
dGhpcywgWDg2UmVnaXN0ZXJzOjplZHgpOwotICAgIEdQUlJlZyB0ZW1wMiA9IEludmFsaWRHUFJS
ZWc7Ci0gICAgaWYgKG9wMkdwciA9PSBYODZSZWdpc3RlcnM6OmVheCB8fCBvcDJHcHIgPT0gWDg2
UmVnaXN0ZXJzOjplZHgpIHsKLSAgICAgICAgdGVtcDIgPSBhbGxvY2F0ZSgpOwotICAgICAgICBt
X2ppdC5tb3ZlKG9wMkdwciwgdGVtcDIpOwotICAgICAgICBvcDJHcHIgPSB0ZW1wMjsKLSAgICB9
Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IGVkeC5ncHIoKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IGVheC5ncHIoKTsKLSNlbHNlCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSNlbmRp
ZgotCi0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwotICAgIEdQUlJlZyBzY3JhdGNo
R1BSMiA9IHNjcmF0Y2gyLmdwcigpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBleGl0QnJh
bmNoOwotCi0gICAgLy8gcmVzdWx0R1BSIGlzIHRvIGhvbGQgdGhlIEFCUyB2YWx1ZSBvZiB0aGUg
ZGl2aWRlbmQgYmVmb3JlIGZpbmFsIHJlc3VsdCBpcyBwcm9kdWNlZAotICAgIG1faml0Lm1vdmUo
b3AxR3ByLCByZXN1bHRHUFIpOwotICAgIC8vIHNjcmF0Y2hHUFIyIGlzIHRvIGhvbGQgdGhlIEFC
UyB2YWx1ZSBvZiB0aGUgZGl2aXNvcgotICAgIG1faml0Lm1vdmUob3AyR3ByLCBzY3JhdGNoR1BS
Mik7Ci0KLSAgICAvLyBDaGVjayBmb3IgbmVnYXRpdmUgcmVzdWx0IHJlbWFpbmRlcgotICAgIC8v
IEFjY29yZGluZyB0byBFQ01BLTI2MiwgdGhlIHNpZ24gb2YgdGhlIHJlc3VsdCBlcXVhbHMgdGhl
IHNpZ24gb2YgdGhlIGRpdmlkZW5kCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgcG9zaXRpdmVEaXZp
ZGVuZCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9w
MUdwciwgVHJ1c3RlZEltbTMyKDApKTsKLSAgICBtX2ppdC5uZWczMihyZXN1bHRHUFIpOwotICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKLSAgICBKSVRDb21waWxl
cjo6SnVtcCBzYXZlQ29uZGl0aW9uID0gbV9qaXQuanVtcCgpOwotCi0gICAgcG9zaXRpdmVEaXZp
ZGVuZC5saW5rKCZtX2ppdCk7Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHNjcmF0
Y2hHUFIpOwotCi0gICAgLy8gU2F2ZSB0aGUgY29uZGl0aW9uIGZvciBuZWdhdGl2ZSByZW1haW5k
ZXIKLSAgICBzYXZlQ29uZGl0aW9uLmxpbmsoJm1faml0KTsKLSAgICBtX2ppdC5wdXNoKHNjcmF0
Y2hHUFIpOwotCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgcG9zaXRpdmVEaXZpc29yID0gbV9qaXQu
YnJhbmNoMzIoSklUQ29tcGlsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgb3AyR3ByLCBUcnVzdGVk
SW1tMzIoMCkpOwotICAgIG1faml0Lm5lZzMyKHNjcmF0Y2hHUFIyKTsKLQotICAgIHBvc2l0aXZl
RGl2aXNvci5saW5rKCZtX2ppdCk7Ci0gICAgZXhpdEJyYW5jaC5hcHBlbmQobV9qaXQuYnJhbmNo
MzIoSklUQ29tcGlsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIyKSk7Ci0KLSAg
ICAvLyBQb3dlciBvZiB0d28gZmFzdCBjYXNlCi0gICAgbV9qaXQubW92ZShzY3JhdGNoR1BSMiwg
c2NyYXRjaEdQUik7Ci0gICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BS
KTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBub3RQb3dlck9mVHdvID0gbV9qaXQuYnJhbmNoVGVz
dDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSMik7Ci0gICAg
bV9qaXQuYW5kMzIoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAgICBleGl0QnJhbmNoLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOwotCi0gICAgbm90UG93ZXJPZlR3by5saW5rKCZtX2ppdCk7Ci0KLSNp
ZiBDUFUoWDg2KQotICAgIG1faml0Lm1vdmUocmVzdWx0R1BSLCBlYXguZ3ByKCkpOwotICAgIG1f
aml0LmFzc2VtYmxlcigpLmNkcSgpOwotICAgIG1faml0LmFzc2VtYmxlcigpLmlkaXZsX3Ioc2Ny
YXRjaEdQUjIpOwotI2VsaWYgQ1BVKEFSTV9USFVNQjIpCi0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2gzKHRoaXMpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigpOwotICAg
IG1faml0LmNvdW50TGVhZGluZ1plcm9zMzIoc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIpOwotICAg
IG1faml0LmNvdW50TGVhZGluZ1plcm9zMzIocmVzdWx0R1BSLCBzY3JhdGNoR1BSMyk7Ci0gICAg
bV9qaXQuc3ViMzIoc2NyYXRjaEdQUjMsIHNjcmF0Y2hHUFIpOwotCi0gICAgSklUQ29tcGlsZXI6
Okp1bXAgdXNlRnVsbFRhYmxlID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBz
Y3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoMzEpKTsKLQotICAgIG1faml0Lm5lZzMyKHNjcmF0Y2hH
UFIpOwotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigzMSksIHNjcmF0Y2hHUFIpOwotCi0g
ICAgaW50IGVsZW1lbnRTaXplQnlTaGlmdCA9IC0xOwotICAgIGVsZW1lbnRTaXplQnlTaGlmdCA9
IDM7Ci0gICAgbV9qaXQucmVsYXRpdmVUYWJsZUp1bXAoc2NyYXRjaEdQUiwgZWxlbWVudFNpemVC
eVNoaWZ0KTsKLQotICAgIHVzZUZ1bGxUYWJsZS5saW5rKCZtX2ppdCk7Ci0gICAgLy8gTW9kdWxv
IHRhYmxlCi0gICAgZm9yIChpbnQgaSA9IDMxOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgIFNoaWZ0
VHlwZUFuZEFtb3VudCBzaGlmdChTUlR5cGVfTFNMLCBpKTsKLSAgICAgICAgbV9qaXQuYXNzZW1i
bGVyKCkuc3ViX1Moc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSMiwgc2hpZnQpOwot
ICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5pdChBUk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uQ1Mp
OwotICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5tb3YocmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsK
LSAgICB9Ci0KLSAgICBKSVRDb21waWxlcjo6SnVtcCBsb3dlciA9IG1faml0LmJyYW5jaDMyKEpJ
VENvbXBpbGVyOjpCZWxvdywgcmVzdWx0R1BSLCBzY3JhdGNoR1BSMik7Ci0gICAgbV9qaXQuc3Vi
MzIoc2NyYXRjaEdQUjIsIHJlc3VsdEdQUik7Ci0gICAgbG93ZXIubGluaygmbV9qaXQpOwotI2Vu
ZGlmIC8vIENQVShYODYpCi0KLSAgICBleGl0QnJhbmNoLmxpbmsoJm1faml0KTsKLQotICAgIC8v
IENoZWNrIGZvciBuZWdhdGl2ZSByZW1haW5kZXIKLSAgICBtX2ppdC5wb3Aoc2NyYXRjaEdQUik7
Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgcG9zaXRpdmVSZXN1bHQgPSBtX2ppdC5icmFuY2gzMihK
SVRDb21waWxlcjo6RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMigwKSk7Ci0gICAgbV9q
aXQubmVnMzIocmVzdWx0R1BSKTsKLSAgICBwb3NpdGl2ZVJlc3VsdC5saW5rKCZtX2ppdCk7Ci0K
LSAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwotCi0jaWYgQ1BV
KFg4NikKLSAgICBpZiAodGVtcDIgIT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgdW5sb2NrKHRl
bXAyKTsKLSNlbmRpZgotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwpAQCAtMjU0Myw0NiArMjQxNyw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBj
YXNlIEFyaXRoTXVsOiB7Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkgJiYgbm9kZS5jYW5TcGVjdWxh
dGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7Ci0KLSAgICAgICAgICAgIEdQUlJlZyByZWcxID0gb3AxLmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIHJlZzIgPSBvcDIuZ3ByKCk7Ci0KLSAgICAgICAgICAgIC8vIFdoYXQgaXMg
dW5mb3J0dW5hdGUgaXMgdGhhdCB3ZSBjYW5ub3QgdGFrZSBhZHZhbnRhZ2Ugb2Ygbm9kZUNhblRy
dW5jYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAvLyBoZXJlLiBBIG11bHRpcGx5IG9uIGludGVn
ZXJzIHBlcmZvcm1lZCBpbiB0aGUgZG91YmxlIGRvbWFpbiBhbmQgdGhlbiB0cnVuY2F0ZWQgdG8K
LSAgICAgICAgICAgIC8vIGFuIGludGVnZXIgd2lsbCBnaXZlIGEgZGlmZmVyZW50IHJlc3VsdCB0
aGFuIGEgbXVsdGlwbHkgcGVyZm9ybWVkIGluIHRoZSBpbnRlZ2VyCi0gICAgICAgICAgICAvLyBk
b21haW4gYW5kIHRoZW4gdHJ1bmNhdGVkLCBpZiB0aGUgaW50ZWdlciBkb21haW4gcmVzdWx0IHdv
dWxkIGhhdmUgcmVzdWx0ZWQgaW4KLSAgICAgICAgICAgIC8vIHNvbWV0aGluZyBiaWdnZXIgdGhh
biB3aGF0IGEgMzItYml0IGludGVnZXIgY2FuIGhvbGQuIEphdmFTY3JpcHQgbWFuZGF0ZXMgdGhh
dAotICAgICAgICAgICAgLy8gdGhlIHNlbWFudGljcyBhcmUgYWx3YXlzIGFzIGlmIHRoZSBtdWx0
aXBseSBoYWQgYmVlbiBwZXJmb3JtZWQgaW4gdGhlIGRvdWJsZQotICAgICAgICAgICAgLy8gZG9t
YWluLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoTXVsMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93
LCByZWcxLCByZWcyLCByZXN1bHQuZ3ByKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gQ2hlY2sgZm9yIG5lZ2F0aXZlIHplcm8sIGlmIHRoZSB1c2VycyBvZiB0aGlzIG5vZGUgY2Fy
ZSBhYm91dCBzdWNoIHRoaW5ncy4KLSAgICAgICAgICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0
aXZlWmVybyhub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgcmVzdWx0Tm9uWmVybyA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuLCByZWcxLCBUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcyLCBUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAg
ICAgICAgICAgICByZXN1bHROb25aZXJvLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKLQotICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIo
KTsKLSAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAgICAgIAotICAgICAgICBt
X2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgCi0gICAg
ICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
Y29tcGlsZUFyaXRoTXVsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI2NTYs
MjUgKzI0OTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICBpZiAoIWF0KG5vZGUuY2hpbGQx
KCkpLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSAmJiAhYXQobm9kZS5jaGlsZDIoKSkuc2hv
dWxkTm90U3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0
ZUludGVnZXIoKSkgewotICAgICAgICAgICAgY29tcGlsZVNvZnRNb2R1bG8obm9kZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAKLSAgICAgICAg
RlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKLSAgICAgICAgRlBSUmVnIG9wMkZQUiA9IG9wMi5m
cHIoKTsKLSAgICAgICAgCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIAotICAg
ICAgICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotCi0gICAgICAgIGNhbGxPcGVyYXRpb24oZm1v
ZEFzREZHT3BlcmF0aW9uLCByZXN1bHQuZnByKCksIG9wMUZQUiwgb3AyRlBSKTsKLSAgICAgICAg
Ci0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgY29tcGlsZUFyaXRoTW9kKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkocmV2aXNpb24gMTAwOTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQyNiw0NiArMjQyNiw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBj
YXNlIEFyaXRoTXVsOiB7Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkgJiYgbm9kZS5jYW5TcGVjdWxh
dGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7Ci0KLSAgICAgICAgICAgIEdQUlJlZyByZWcxID0gb3AxLmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIHJlZzIgPSBvcDIuZ3ByKCk7Ci0KLSAgICAgICAgICAgIC8vIFdoYXQgaXMg
dW5mb3J0dW5hdGUgaXMgdGhhdCB3ZSBjYW5ub3QgdGFrZSBhZHZhbnRhZ2Ugb2Ygbm9kZUNhblRy
dW5jYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAvLyBoZXJlLiBBIG11bHRpcGx5IG9uIGludGVn
ZXJzIHBlcmZvcm1lZCBpbiB0aGUgZG91YmxlIGRvbWFpbiBhbmQgdGhlbiB0cnVuY2F0ZWQgdG8K
LSAgICAgICAgICAgIC8vIGFuIGludGVnZXIgd2lsbCBnaXZlIGEgZGlmZmVyZW50IHJlc3VsdCB0
aGFuIGEgbXVsdGlwbHkgcGVyZm9ybWVkIGluIHRoZSBpbnRlZ2VyCi0gICAgICAgICAgICAvLyBk
b21haW4gYW5kIHRoZW4gdHJ1bmNhdGVkLCBpZiB0aGUgaW50ZWdlciBkb21haW4gcmVzdWx0IHdv
dWxkIGhhdmUgcmVzdWx0ZWQgaW4KLSAgICAgICAgICAgIC8vIHNvbWV0aGluZyBiaWdnZXIgdGhh
biB3aGF0IGEgMzItYml0IGludGVnZXIgY2FuIGhvbGQuIEphdmFTY3JpcHQgbWFuZGF0ZXMgdGhh
dAotICAgICAgICAgICAgLy8gdGhlIHNlbWFudGljcyBhcmUgYWx3YXlzIGFzIGlmIHRoZSBtdWx0
aXBseSBoYWQgYmVlbiBwZXJmb3JtZWQgaW4gdGhlIGRvdWJsZQotICAgICAgICAgICAgLy8gZG9t
YWluLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoTXVsMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93
LCByZWcxLCByZWcyLCByZXN1bHQuZ3ByKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gQ2hlY2sgZm9yIG5lZ2F0aXZlIHplcm8sIGlmIHRoZSB1c2VycyBvZiB0aGlzIG5vZGUgY2Fy
ZSBhYm91dCBzdWNoIHRoaW5ncy4KLSAgICAgICAgICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0
aXZlWmVybyhub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgcmVzdWx0Tm9uWmVybyA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuLCByZWcxLCBUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcyLCBUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAg
ICAgICAgICAgICByZXN1bHROb25aZXJvLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKLQotICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIo
KTsKLSAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAgICAgIAotICAgICAgICBt
X2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgCi0gICAg
ICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
Y29tcGlsZUFyaXRoTXVsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI1MjMs
NDggKzI0ODQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpIHx8IGF0KG5vZGUuY2hpbGQyKCkpLnNob3Vs
ZE5vdFNwZWN1bGF0ZUludGVnZXIoKQotICAgICAgICAgICAgfHwgIW5vZGUuY2FuU3BlY3VsYXRl
SW50ZWdlcigpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBGUFJSZWcg
b3AxRlBSID0gb3AxLmZwcigpOwotICAgICAgICAgICAgRlBSUmVnIG9wMkZQUiA9IG9wMi5mcHIo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgRlBSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLQotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihmbW9kLCByZXN1bHQuZnByKCksIG9wMUZQUiwgb3AyRlBSKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxl
SW5kZXgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAg
ICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAg
ICAgICBHUFJUZW1wb3JhcnkgZWF4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKLSAgICAgICAg
R1BSVGVtcG9yYXJ5IGVkeCh0aGlzLCBYODZSZWdpc3RlcnM6OmVkeCk7Ci0gICAgICAgIEdQUlJl
ZyBvcDFHcHIgPSBvcDEuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBvcDJHcHIgPSBvcDIuZ3ByKCk7
Ci0KLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgb3AyR3ByKSk7Ci0KLSAgICAgICAgR1BS
UmVnIHRlbXAyID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgaWYgKG9wMkdwciA9PSBYODZSZWdp
c3RlcnM6OmVheCB8fCBvcDJHcHIgPT0gWDg2UmVnaXN0ZXJzOjplZHgpIHsKLSAgICAgICAgICAg
IHRlbXAyID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3AyR3ByLCB0ZW1w
Mik7Ci0gICAgICAgICAgICBvcDJHcHIgPSB0ZW1wMjsKLSAgICAgICAgfQotCi0gICAgICAgIG1f
aml0Lm1vdmUob3AxR3ByLCBlYXguZ3ByKCkpOwotICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5j
ZHEoKTsKLSAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuaWRpdmxfcihvcDJHcHIpOwotCi0gICAg
ICAgIGlmICh0ZW1wMiAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgdW5sb2NrKHRlbXAy
KTsKLQotICAgICAgICBpbnRlZ2VyUmVzdWx0KGVkeC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICBjb21waWxlQXJpdGhNb2Qobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDEwMDk3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywxNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKKy8vIE9uIFdpbmRvd3Mgd2UgbmVlZCB0byB3
cmFwIGZtb2Q7IG9uIG90aGVyIHBsYXRmb3JtcyB3ZSBjYW4gY2FsbCBpdCBkaXJlY3RseS4KKy8v
IE9uIEFSTXY3IHdlIGFzc2VydCB0aGF0IGFsbCBmdW5jdGlvbiBwb2ludGVycyBoYXZlIHRvIGxv
dyBiaXQgc2V0IChwb2ludCB0byB0aHVtYiBjb2RlKS4KKyNpZiBDQUxMSU5HX0NPTlZFTlRJT05f
SVNfU1REQ0FMTCB8fCBDUFUoQVJNX1RIVU1CMikKK3N0YXRpYyBkb3VibGUgREZHX09QRVJBVElP
TiBmbW9kQXNERkdPcGVyYXRpb24oZG91YmxlIHgsIGRvdWJsZSB5KQoreworICAgIHJldHVybiBm
bW9kKHgsIHkpOworfQorI2Vsc2UKKyNkZWZpbmUgZm1vZEFzREZHT3BlcmF0aW9uIGZtb2QKKyNl
bmRpZgorCiBjb25zdCBkb3VibGUgU3BlY3VsYXRpdmVKSVQ6OnR3b1RvVGhlMzIgPSAoZG91Ymxl
KTB4MTAwMDAwMDAwdWxsOwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjbGVhckdlbmVyYXRpb25J
bmZvKCkKQEAgLTE1NzMsNiArMTU4NCwyOTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUluc3RhbmNlT2YoTgogI2VuZGlmCiB9CiAKK3N0YXRpYyBib29sIGlzUG93ZXJPZlR3byhpbnQz
Ml90IG51bSkKK3sKKyAgICByZXR1cm4gbnVtICYmICEobnVtICYgKG51bSAtIDEpKTsKK30KKwor
Ly8gVGhpcyByb3V0aW5lIGlzIGNvcGllZCBmcm9tIEZhc3RNYWxsb2MKK3N0YXRpYyBpbnQzMl90
IGxvZ1R3byhpbnQzMl90IG51bSkKK3sKKyAgICBpbnQzMl90IGxvZyA9IDA7CisgICAgZm9yIChp
bnQzMl90IGkgPSA0OyBpID49IDA7IC0taSkgeworICAgICAgICBpbnQzMl90IHNoaWZ0ID0gKDEg
PDwgaSk7CisgICAgICAgIGludDMyX3QgeCA9IG51bSA+PiBzaGlmdDsKKyAgICAgICAgaWYgKHgp
IHsKKyAgICAgICAgICBudW0gPSB4OworICAgICAgICAgIGxvZyArPSBzaGlmdDsKKyAgICAgICAg
fQorICAgIH0KKyAgICBBU1NFUlQobnVtID09IDEpOworICAgIHJldHVybiBsb2c7Cit9CisKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTb2Z0TW9kdWxvKE5vZGUmIG5vZGUpCit7CisgICAg
Ym9vbCBzaG91bGRHZW5lcmF0ZVBvd2VyT2ZUd29DaGVjayA9IHRydWU7CisgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEdQUlJlZyBvcDFH
cHIgPSBvcDEuZ3ByKCk7CisKKyAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkp
KSB7CisgICAgICAgIGludDMyX3QgZGl2aXNvciA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQyKCkpOworICAgICAgICBpZiAoZGl2aXNvciA8IDApCisgICAgICAgICAgICBkaXZpc29y
ID0gLWRpdmlzb3I7CisKKyAgICAgICAgaWYgKGlzUG93ZXJPZlR3byhkaXZpc29yKSkgeworICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdwciwg
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHBvc2l0aXZlRGl2aWRl
bmQgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBvcDFH
cHIsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgICAgICAgICBtX2ppdC5uZWczMihyZXN1bHRHUFIp
OworICAgICAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKGRpdmlzb3IgLSAxKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0Lm5lZzMyKHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgICAgICAgICBw
b3NpdGl2ZURpdmlkZW5kLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0LmFuZDMyKFRy
dXN0ZWRJbW0zMihkaXZpc29yIC0gMSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2lmIENQVShYODYp
IHx8IENQVShYODZfNjQpCisgICAgICAgIGlmIChkaXZpc29yKSB7CisgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgZWF4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSBlZHgodGhpcywgWDg2UmVnaXN0ZXJzOjplZHgpOworICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR3ByLCBlYXguZ3ByKCkp
OworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoZGl2aXNvciksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuY2RxKCk7CisgICAgICAgICAgICBt
X2ppdC5hc3NlbWJsZXIoKS5pZGl2bF9yKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaW50ZWdl
clJlc3VsdChlZHguZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIC8vIEZhbGxiYWNrIHRvIG5vbi1jb25zdGFudCBj
YXNlIGJ1dCBhdm9pZCB1bm5lY2Vzc2FyeSBjaGVja3MuCisgICAgICAgIHNob3VsZEdlbmVyYXRl
UG93ZXJPZlR3b0NoZWNrID0gZmFsc2U7CisgICAgfQorCisgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIEdQUlJlZyBvcDJHcHIgPSBvcDIu
Z3ByKCk7CisKKyAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCBvcDJHcHIpKTsKKworI2lmIENQVShY
ODYpIHx8IENQVShYODZfNjQpCisgICAgR1BSVGVtcG9yYXJ5IGVheCh0aGlzLCBYODZSZWdpc3Rl
cnM6OmVheCk7CisgICAgR1BSVGVtcG9yYXJ5IGVkeCh0aGlzLCBYODZSZWdpc3RlcnM6OmVkeCk7
CisgICAgR1BSUmVnIHRlbXAyID0gSW52YWxpZEdQUlJlZzsKKyAgICBpZiAob3AyR3ByID09IFg4
NlJlZ2lzdGVyczo6ZWF4IHx8IG9wMkdwciA9PSBYODZSZWdpc3RlcnM6OmVkeCkgeworICAgICAg
ICB0ZW1wMiA9IGFsbG9jYXRlKCk7CisgICAgICAgIG1faml0Lm1vdmUob3AyR3ByLCB0ZW1wMik7
CisgICAgICAgIG9wMkdwciA9IHRlbXAyOworICAgIH0KKyAgICBHUFJSZWcgcmVzdWx0R1BSID0g
ZWR4LmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gZWF4LmdwcigpOworI2Vsc2UKKyAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworI2VuZGlmCisKKyAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaDIodGhpcyk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7Cisg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGV4aXRCcmFuY2g7CisKKyAgICAvLyByZXN1bHRHUFIg
aXMgdG8gaG9sZCB0aGUgQUJTIHZhbHVlIG9mIHRoZSBkaXZpZGVuZCBiZWZvcmUgZmluYWwgcmVz
dWx0IGlzIHByb2R1Y2VkCisgICAgbV9qaXQubW92ZShvcDFHcHIsIHJlc3VsdEdQUik7CisgICAg
Ly8gc2NyYXRjaEdQUjIgaXMgdG8gaG9sZCB0aGUgQUJTIHZhbHVlIG9mIHRoZSBkaXZpc29yCisg
ICAgbV9qaXQubW92ZShvcDJHcHIsIHNjcmF0Y2hHUFIyKTsKKworICAgIC8vIENoZWNrIGZvciBu
ZWdhdGl2ZSByZXN1bHQgcmVtYWluZGVyCisgICAgLy8gQWNjb3JkaW5nIHRvIEVDTUEtMjYyLCB0
aGUgc2lnbiBvZiB0aGUgcmVzdWx0IGVxdWFscyB0aGUgc2lnbiBvZiB0aGUgZGl2aWRlbmQKKyAg
ICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2ZURpdmlkZW5kID0gbV9qaXQuYnJhbmNoMzIoSklU
Q29tcGlsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgb3AxR3ByLCBUcnVzdGVkSW1tMzIoMCkpOwor
ICAgIG1faml0Lm5lZzMyKHJlc3VsdEdQUik7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIo
MSksIHNjcmF0Y2hHUFIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIHNhdmVDb25kaXRpb24gPSBt
X2ppdC5qdW1wKCk7CisKKyAgICBwb3NpdGl2ZURpdmlkZW5kLmxpbmsoJm1faml0KTsKKyAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgc2NyYXRjaEdQUik7CisKKyAgICAvLyBTYXZlIHRo
ZSBjb25kaXRpb24gZm9yIG5lZ2F0aXZlIHJlbWFpbmRlcgorICAgIHNhdmVDb25kaXRpb24ubGlu
aygmbV9qaXQpOworICAgIG1faml0LnB1c2goc2NyYXRjaEdQUik7CisKKyAgICBKSVRDb21waWxl
cjo6SnVtcCBwb3NpdGl2ZURpdmlzb3IgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6R3Jl
YXRlclRoYW5PckVxdWFsLCBvcDJHcHIsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgbV9qaXQubmVn
MzIoc2NyYXRjaEdQUjIpOworCisgICAgcG9zaXRpdmVEaXZpc29yLmxpbmsoJm1faml0KTsKKyAg
ICBleGl0QnJhbmNoLmFwcGVuZChtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6TGVzc1RoYW4s
IHJlc3VsdEdQUiwgc2NyYXRjaEdQUjIpKTsKKworICAgIC8vIFBvd2VyIG9mIHR3byBmYXN0IGNh
c2UKKyAgICBpZiAoc2hvdWxkR2VuZXJhdGVQb3dlck9mVHdvQ2hlY2spIHsKKyAgICAgICAgbV9q
aXQubW92ZShzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0LnN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dFBvd2VyT2ZUd28gPSBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHNj
cmF0Y2hHUFIsIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgbV9qaXQuYW5kMzIoc2NyYXRjaEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZXhpdEJyYW5jaC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKwor
ICAgICAgICBub3RQb3dlck9mVHdvLmxpbmsoJm1faml0KTsKKyAgICB9CisKKyNpZiBDUFUoWDg2
KSB8fCBDUFUoWDg2XzY0KQorICAgIG1faml0Lm1vdmUocmVzdWx0R1BSLCBlYXguZ3ByKCkpOwor
ICAgIG1faml0LmFzc2VtYmxlcigpLmNkcSgpOworICAgIG1faml0LmFzc2VtYmxlcigpLmlkaXZs
X3Ioc2NyYXRjaEdQUjIpOworI2VsaWYgQ1BVKEFSTV9USFVNQjIpCisgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2gzKHRoaXMpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigp
OworICAgIG1faml0LmNvdW50TGVhZGluZ1plcm9zMzIoc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIp
OworICAgIG1faml0LmNvdW50TGVhZGluZ1plcm9zMzIocmVzdWx0R1BSLCBzY3JhdGNoR1BSMyk7
CisgICAgbV9qaXQuc3ViMzIoc2NyYXRjaEdQUjMsIHNjcmF0Y2hHUFIpOworCisgICAgSklUQ29t
cGlsZXI6Okp1bXAgdXNlRnVsbFRhYmxlID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVx
dWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoMzEpKTsKKworICAgIG1faml0Lm5lZzMyKHNj
cmF0Y2hHUFIpOworICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigzMSksIHNjcmF0Y2hHUFIp
OworCisgICAgaW50IGVsZW1lbnRTaXplQnlTaGlmdCA9IC0xOworICAgIGVsZW1lbnRTaXplQnlT
aGlmdCA9IDM7CisgICAgbV9qaXQucmVsYXRpdmVUYWJsZUp1bXAoc2NyYXRjaEdQUiwgZWxlbWVu
dFNpemVCeVNoaWZ0KTsKKworICAgIHVzZUZ1bGxUYWJsZS5saW5rKCZtX2ppdCk7CisgICAgLy8g
TW9kdWxvIHRhYmxlCisgICAgZm9yIChpbnQgaSA9IDMxOyBpID4gMDsgLS1pKSB7CisgICAgICAg
IFNoaWZ0VHlwZUFuZEFtb3VudCBzaGlmdChTUlR5cGVfTFNMLCBpKTsKKyAgICAgICAgbV9qaXQu
YXNzZW1ibGVyKCkuc3ViX1Moc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSMiwgc2hp
ZnQpOworICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5pdChBUk12N0Fzc2VtYmxlcjo6Q29uZGl0
aW9uQ1MpOworICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5tb3YocmVzdWx0R1BSLCBzY3JhdGNo
R1BSKTsKKyAgICB9CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBsb3dlciA9IG1faml0LmJyYW5j
aDMyKEpJVENvbXBpbGVyOjpCZWxvdywgcmVzdWx0R1BSLCBzY3JhdGNoR1BSMik7CisgICAgbV9q
aXQuc3ViMzIoc2NyYXRjaEdQUjIsIHJlc3VsdEdQUik7CisgICAgbG93ZXIubGluaygmbV9qaXQp
OworI2VuZGlmIC8vIENQVShYODYpIHx8IENQVShYODZfNjQpCisKKyAgICBleGl0QnJhbmNoLmxp
bmsoJm1faml0KTsKKworICAgIC8vIENoZWNrIGZvciBuZWdhdGl2ZSByZW1haW5kZXIKKyAgICBt
X2ppdC5wb3Aoc2NyYXRjaEdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgcG9zaXRpdmVSZXN1
bHQgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0
ZWRJbW0zMigwKSk7CisgICAgbV9qaXQubmVnMzIocmVzdWx0R1BSKTsKKyAgICBwb3NpdGl2ZVJl
c3VsdC5saW5rKCZtX2ppdCk7CisKKyAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21w
aWxlSW5kZXgpOworCisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICBpZiAodGVtcDIg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgdW5sb2NrKHRlbXAyKTsKKyNlbmRpZgorfQorCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9kZSYgbm9kZSkKK3sKKyAgICBp
ZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9k
ZS5jaGlsZDIoKSkpICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIGlm
IChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkgJiYgIW5vZGVNYXlPdmVyZmxvdyhub2Rl
LmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICBpbnQzMl90IG11bHRpcGxpZXIgPSB2
YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJvb2wgbmVn
YXRpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChtdWx0aXBsaWVyIDwgMCkgeworICAgICAg
ICAgICAgICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKKyAgICAgICAgICAgICAgICBuZWdh
dGl2ZSA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbXVsdGlwbGll
cikgeworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAg
ICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICAgICAg
ICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLmFyaXRoTm9kZUZsYWdzKCkp
KSB7CisgICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiwgb3AxLmdwcigpLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGlzUG93ZXJPZlR3byhtdWx0aXBsaWVyKSkgeworICAgICAgICAgICAgICAgIGludCBsb2cg
PSBsb2dUd28obXVsdGlwbGllcik7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgb3AxR1BSID0g
b3AxLmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisKKyAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUgJiYgIW5vZGVDYW5JZ25vcmVOZWdh
dGl2ZVplcm8obm9kZS5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxR1BSKSk7CisKKyAgICAgICAgICAgICAgICBtX2ppdC5s
c2hpZnQzMihvcDFHUFIsIFRydXN0ZWRJbW0zMihsb2cpLCByZXN1bHRHUFIpOworICAgICAgICAg
ICAgICAgIGlmIChuZWdhdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubmVnMzIocmVz
dWx0R1BSKTsKKworICAgICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAg
ICAgR1BSUmVnIHJlZzEgPSBvcDEuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZWcyID0gb3AyLmdw
cigpOworCisgICAgICAgIC8vIFdoYXQgaXMgdW5mb3J0dW5hdGUgaXMgdGhhdCB3ZSBjYW5ub3Qg
dGFrZSBhZHZhbnRhZ2Ugb2Ygbm9kZUNhblRydW5jYXRlSW50ZWdlcigpCisgICAgICAgIC8vIGhl
cmUuIEEgbXVsdGlwbHkgb24gaW50ZWdlcnMgcGVyZm9ybWVkIGluIHRoZSBkb3VibGUgZG9tYWlu
IGFuZCB0aGVuIHRydW5jYXRlZCB0bworICAgICAgICAvLyBhbiBpbnRlZ2VyIHdpbGwgZ2l2ZSBh
IGRpZmZlcmVudCByZXN1bHQgdGhhbiBhIG11bHRpcGx5IHBlcmZvcm1lZCBpbiB0aGUgaW50ZWdl
cgorICAgICAgICAvLyBkb21haW4gYW5kIHRoZW4gdHJ1bmNhdGVkLCBpZiB0aGUgaW50ZWdlciBk
b21haW4gcmVzdWx0IHdvdWxkIGhhdmUgcmVzdWx0ZWQgaW4KKyAgICAgICAgLy8gc29tZXRoaW5n
IGJpZ2dlciB0aGFuIHdoYXQgYSAzMi1iaXQgaW50ZWdlciBjYW4gaG9sZC4gSmF2YVNjcmlwdCBt
YW5kYXRlcyB0aGF0CisgICAgICAgIC8vIHRoZSBzZW1hbnRpY3MgYXJlIGFsd2F5cyBhcyBpZiB0
aGUgbXVsdGlwbHkgaGFkIGJlZW4gcGVyZm9ybWVkIGluIHRoZSBkb3VibGUKKyAgICAgICAgLy8g
ZG9tYWluLgorICAgICAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hNdWwzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3cs
IHJlZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgCisgICAgICAgIC8vIENo
ZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCBpZiB0aGUgdXNlcnMgb2YgdGhpcyBub2RlIGNhcmUgYWJv
dXQgc3VjaCB0aGluZ3MuCisgICAgICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhu
b2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCByZXN1bHROb25aZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwg
cmVnMSwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NU
aGFuLCByZWcyLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgIHJlc3VsdE5vblplcm8u
bGluaygmbV9qaXQpOworICAgICAgICB9CisKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIEZQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOworCisgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnBy
KCk7CisgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7CisgICAgICAgIAorICAgIG1faml0Lm11
bERvdWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOworICAgICAgICAKKyAgICBkb3VibGVS
ZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2RlJiBub2RlKQoreworICAgIGlmICghYXQobm9kZS5j
aGlsZDEoKSkuc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpICYmICFhdChub2RlLmNoaWxkMigp
KS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkKKyAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxh
dGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgY29tcGlsZVNvZnRNb2R1bG8obm9kZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAKKyAgICBGUFJSZWcgb3AxRlBSID0gb3AxLmZw
cigpOworICAgIEZQUlJlZyBvcDJGUFIgPSBvcDIuZnByKCk7CisgICAgICAgIAorICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CisgICAgICAgIAorICAgIEZQUlJlc3VsdCByZXN1bHQodGhpcyk7CisKKyAg
ICBjYWxsT3BlcmF0aW9uKGZtb2RBc0RGR09wZXJhdGlvbiwgcmVzdWx0LmZwcigpLCBvcDFGUFIs
IG9wMkZQUik7CisgICAgICAgIAorICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29t
cGlsZUluZGV4KTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJl
dmlzaW9uIDEwMDk3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTkxNyw5ICsxOTE3LDkgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGNvbXBpbGVWYWx1ZVRvSW50MzIoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZUdldEJ5
VmFsT25CeXRlQXJyYXkoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yQnl0ZUFy
cmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUmKTsKLSNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgIHZvaWQgY29tcGlsZUFyaXRoTXVsKE5vZGUmKTsKKyAgICB2b2lkIGNvbXBp
bGVBcml0aE1vZChOb2RlJik7CiAgICAgdm9pZCBjb21waWxlU29mdE1vZHVsbyhOb2RlJik7Ci0j
ZW5kaWYKIAogICAgIC8vIEl0IGlzIGFjY2VwdGFibGUgdG8gaGF2ZSBzdHJ1Y3R1cmUgYmUgZXF1
YWwgdG8gc2NyYXRjaCwgc28gbG9uZyBhcyB5b3UncmUgZmluZQogICAgIC8vIHdpdGggdGhlIHN0
cnVjdHVyZSBHUFIgYmVpbmcgY2xvYmJlcmVkLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116177</attachid>
            <date>2011-11-21 21:51:15 -0800</date>
            <delta_ts>2011-11-22 20:20:08 -0800</delta_ts>
            <desc>patch fixing the 64bit regression</desc>
            <filename>72878.2.patch</filename>
            <type>text/plain</type>
            <size>26521</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwOTc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBA
CisyMDExLTExLTIxICBZdXFpYW5nIFhpYW4gIDx5dXFpYW5nLnhpYW5AaW50ZWwuY29tPgorCisg
ICAgICAgIFN0cmVuZ3RoIHJlZHVjdGlvbiBmb3IgTXVsIGFuZCBNb2Qgb3BlcmF0aW9ucyBmb3Ig
a25vd24gY29uc3RhbnRzIGluIERGRworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzI4NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBbHNvIHRoZSBjb2RlIHNob3VsZCBiZSBjb21tb25seSBzaGFyZWQgYnkg
Ym90aCAzMl82NCBhbmQgNjQuCisKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAo
SlNDOjpERkc6Om5vZGVNYXlPdmVyZmxvdyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpmbW9kQXNERkdPcGVyYXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZik6CisgICAgICAg
IChKU0M6OkRGRzo6aXNQb3dlck9mVHdvKToKKyAgICAgICAgKEpTQzo6REZHOjpsb2dUd28pOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU29mdE1vZHVsbyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZCk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorCiAyMDExLTExLTIxICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIHNob3VsZCBoYXZlIHJpY2hlciBk
ZWJ1ZyBvdXRwdXQgZm9yIENGQSBhbmQgcGhpIHByb2Nlc3NpbmcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxMDA5NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsMTEgQEAgc3Rh
dGljIGlubGluZSBib29sIG5vZGVDYW5JZ25vcmVOZWdhdGl2ZQogICAgIHJldHVybiAhKGZsYWdz
ICYgTm9kZU5lZWRzTmVnWmVybyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBub2RlTWF5T3Zl
cmZsb3coQXJpdGhOb2RlRmxhZ3MgZmxhZ3MpCit7CisgICAgcmV0dXJuICEhKGZsYWdzICYgTm9k
ZU1heU92ZXJmbG93KTsKK30KKwogc3RhdGljIGlubGluZSBib29sIG5vZGVDYW5TcGVjdWxhdGVJ
bnRlZ2VyKEFyaXRoTm9kZUZsYWdzIGZsYWdzKQogewogICAgIGlmIChmbGFncyAmIE5vZGVNYXlP
dmVyZmxvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTAwOTc4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsMTcgKzMzLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi0v
LyBPbiBXaW5kb3dzIHdlIG5lZWQgdG8gd3JhcCBmbW9kOyBvbiBvdGhlciBwbGF0Zm9ybXMgd2Ug
Y2FuIGNhbGwgaXQgZGlyZWN0bHkuCi0vLyBPbiBBUk12NyB3ZSBhc3NlcnQgdGhhdCBhbGwgZnVu
Y3Rpb24gcG9pbnRlcnMgaGF2ZSB0byBsb3cgYml0IHNldCAocG9pbnQgdG8gdGh1bWIgY29kZSku
Ci0jaWYgQ0FMTElOR19DT05WRU5USU9OX0lTX1NURENBTEwgfHwgQ1BVKEFSTV9USFVNQjIpCi1z
dGF0aWMgZG91YmxlIERGR19PUEVSQVRJT04gZm1vZEFzREZHT3BlcmF0aW9uKGRvdWJsZSB4LCBk
b3VibGUgeSkKLXsKLSAgICByZXR1cm4gZm1vZCh4LCB5KTsKLX0KLSNlbHNlCi0jZGVmaW5lIGZt
b2RBc0RGR09wZXJhdGlvbiBmbW9kCi0jZW5kaWYKLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAK
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoTm9kZUluZGV4IG5vZGVJbmRleCwg
RGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQpAQCAtMjA1MiwxMjEgKzIwNDEsNiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgfQogfQogCi12b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlU29mdE1vZHVsbyhOb2RlJiBub2RlKQotewotICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgR1BSUmVnIG9wMUdw
ciA9IG9wMS5ncHIoKTsKLSAgICBHUFJSZWcgb3AyR3ByID0gb3AyLmdwcigpOwotCi0gICAgc3Bl
Y3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihK
SVRDb21waWxlcjo6WmVybywgb3AyR3ByKSk7Ci0KLSNpZiBDUFUoWDg2KQotICAgIEdQUlRlbXBv
cmFyeSBlYXgodGhpcywgWDg2UmVnaXN0ZXJzOjplYXgpOwotICAgIEdQUlRlbXBvcmFyeSBlZHgo
dGhpcywgWDg2UmVnaXN0ZXJzOjplZHgpOwotICAgIEdQUlJlZyB0ZW1wMiA9IEludmFsaWRHUFJS
ZWc7Ci0gICAgaWYgKG9wMkdwciA9PSBYODZSZWdpc3RlcnM6OmVheCB8fCBvcDJHcHIgPT0gWDg2
UmVnaXN0ZXJzOjplZHgpIHsKLSAgICAgICAgdGVtcDIgPSBhbGxvY2F0ZSgpOwotICAgICAgICBt
X2ppdC5tb3ZlKG9wMkdwciwgdGVtcDIpOwotICAgICAgICBvcDJHcHIgPSB0ZW1wMjsKLSAgICB9
Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IGVkeC5ncHIoKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IGVheC5ncHIoKTsKLSNlbHNlCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSNlbmRp
ZgotCi0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwotICAgIEdQUlJlZyBzY3JhdGNo
R1BSMiA9IHNjcmF0Y2gyLmdwcigpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBleGl0QnJh
bmNoOwotCi0gICAgLy8gcmVzdWx0R1BSIGlzIHRvIGhvbGQgdGhlIEFCUyB2YWx1ZSBvZiB0aGUg
ZGl2aWRlbmQgYmVmb3JlIGZpbmFsIHJlc3VsdCBpcyBwcm9kdWNlZAotICAgIG1faml0Lm1vdmUo
b3AxR3ByLCByZXN1bHRHUFIpOwotICAgIC8vIHNjcmF0Y2hHUFIyIGlzIHRvIGhvbGQgdGhlIEFC
UyB2YWx1ZSBvZiB0aGUgZGl2aXNvcgotICAgIG1faml0Lm1vdmUob3AyR3ByLCBzY3JhdGNoR1BS
Mik7Ci0KLSAgICAvLyBDaGVjayBmb3IgbmVnYXRpdmUgcmVzdWx0IHJlbWFpbmRlcgotICAgIC8v
IEFjY29yZGluZyB0byBFQ01BLTI2MiwgdGhlIHNpZ24gb2YgdGhlIHJlc3VsdCBlcXVhbHMgdGhl
IHNpZ24gb2YgdGhlIGRpdmlkZW5kCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgcG9zaXRpdmVEaXZp
ZGVuZCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9w
MUdwciwgVHJ1c3RlZEltbTMyKDApKTsKLSAgICBtX2ppdC5uZWczMihyZXN1bHRHUFIpOwotICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKLSAgICBKSVRDb21waWxl
cjo6SnVtcCBzYXZlQ29uZGl0aW9uID0gbV9qaXQuanVtcCgpOwotCi0gICAgcG9zaXRpdmVEaXZp
ZGVuZC5saW5rKCZtX2ppdCk7Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHNjcmF0
Y2hHUFIpOwotCi0gICAgLy8gU2F2ZSB0aGUgY29uZGl0aW9uIGZvciBuZWdhdGl2ZSByZW1haW5k
ZXIKLSAgICBzYXZlQ29uZGl0aW9uLmxpbmsoJm1faml0KTsKLSAgICBtX2ppdC5wdXNoKHNjcmF0
Y2hHUFIpOwotCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgcG9zaXRpdmVEaXZpc29yID0gbV9qaXQu
YnJhbmNoMzIoSklUQ29tcGlsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgb3AyR3ByLCBUcnVzdGVk
SW1tMzIoMCkpOwotICAgIG1faml0Lm5lZzMyKHNjcmF0Y2hHUFIyKTsKLQotICAgIHBvc2l0aXZl
RGl2aXNvci5saW5rKCZtX2ppdCk7Ci0gICAgZXhpdEJyYW5jaC5hcHBlbmQobV9qaXQuYnJhbmNo
MzIoSklUQ29tcGlsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIyKSk7Ci0KLSAg
ICAvLyBQb3dlciBvZiB0d28gZmFzdCBjYXNlCi0gICAgbV9qaXQubW92ZShzY3JhdGNoR1BSMiwg
c2NyYXRjaEdQUik7Ci0gICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BS
KTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBub3RQb3dlck9mVHdvID0gbV9qaXQuYnJhbmNoVGVz
dDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSMik7Ci0gICAg
bV9qaXQuYW5kMzIoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAgICBleGl0QnJhbmNoLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOwotCi0gICAgbm90UG93ZXJPZlR3by5saW5rKCZtX2ppdCk7Ci0KLSNp
ZiBDUFUoWDg2KQotICAgIG1faml0Lm1vdmUocmVzdWx0R1BSLCBlYXguZ3ByKCkpOwotICAgIG1f
aml0LmFzc2VtYmxlcigpLmNkcSgpOwotICAgIG1faml0LmFzc2VtYmxlcigpLmlkaXZsX3Ioc2Ny
YXRjaEdQUjIpOwotI2VsaWYgQ1BVKEFSTV9USFVNQjIpCi0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2gzKHRoaXMpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigpOwotICAg
IG1faml0LmNvdW50TGVhZGluZ1plcm9zMzIoc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIpOwotICAg
IG1faml0LmNvdW50TGVhZGluZ1plcm9zMzIocmVzdWx0R1BSLCBzY3JhdGNoR1BSMyk7Ci0gICAg
bV9qaXQuc3ViMzIoc2NyYXRjaEdQUjMsIHNjcmF0Y2hHUFIpOwotCi0gICAgSklUQ29tcGlsZXI6
Okp1bXAgdXNlRnVsbFRhYmxlID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBz
Y3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoMzEpKTsKLQotICAgIG1faml0Lm5lZzMyKHNjcmF0Y2hH
UFIpOwotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigzMSksIHNjcmF0Y2hHUFIpOwotCi0g
ICAgaW50IGVsZW1lbnRTaXplQnlTaGlmdCA9IC0xOwotICAgIGVsZW1lbnRTaXplQnlTaGlmdCA9
IDM7Ci0gICAgbV9qaXQucmVsYXRpdmVUYWJsZUp1bXAoc2NyYXRjaEdQUiwgZWxlbWVudFNpemVC
eVNoaWZ0KTsKLQotICAgIHVzZUZ1bGxUYWJsZS5saW5rKCZtX2ppdCk7Ci0gICAgLy8gTW9kdWxv
IHRhYmxlCi0gICAgZm9yIChpbnQgaSA9IDMxOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgIFNoaWZ0
VHlwZUFuZEFtb3VudCBzaGlmdChTUlR5cGVfTFNMLCBpKTsKLSAgICAgICAgbV9qaXQuYXNzZW1i
bGVyKCkuc3ViX1Moc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSMiwgc2hpZnQpOwot
ICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5pdChBUk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uQ1Mp
OwotICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5tb3YocmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsK
LSAgICB9Ci0KLSAgICBKSVRDb21waWxlcjo6SnVtcCBsb3dlciA9IG1faml0LmJyYW5jaDMyKEpJ
VENvbXBpbGVyOjpCZWxvdywgcmVzdWx0R1BSLCBzY3JhdGNoR1BSMik7Ci0gICAgbV9qaXQuc3Vi
MzIoc2NyYXRjaEdQUjIsIHJlc3VsdEdQUik7Ci0gICAgbG93ZXIubGluaygmbV9qaXQpOwotI2Vu
ZGlmIC8vIENQVShYODYpCi0KLSAgICBleGl0QnJhbmNoLmxpbmsoJm1faml0KTsKLQotICAgIC8v
IENoZWNrIGZvciBuZWdhdGl2ZSByZW1haW5kZXIKLSAgICBtX2ppdC5wb3Aoc2NyYXRjaEdQUik7
Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgcG9zaXRpdmVSZXN1bHQgPSBtX2ppdC5icmFuY2gzMihK
SVRDb21waWxlcjo6RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMigwKSk7Ci0gICAgbV9q
aXQubmVnMzIocmVzdWx0R1BSKTsKLSAgICBwb3NpdGl2ZVJlc3VsdC5saW5rKCZtX2ppdCk7Ci0K
LSAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwotCi0jaWYgQ1BV
KFg4NikKLSAgICBpZiAodGVtcDIgIT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgdW5sb2NrKHRl
bXAyKTsKLSNlbmRpZgotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwpAQCAtMjU0Myw0NiArMjQxNyw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBj
YXNlIEFyaXRoTXVsOiB7Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkgJiYgbm9kZS5jYW5TcGVjdWxh
dGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7Ci0KLSAgICAgICAgICAgIEdQUlJlZyByZWcxID0gb3AxLmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIHJlZzIgPSBvcDIuZ3ByKCk7Ci0KLSAgICAgICAgICAgIC8vIFdoYXQgaXMg
dW5mb3J0dW5hdGUgaXMgdGhhdCB3ZSBjYW5ub3QgdGFrZSBhZHZhbnRhZ2Ugb2Ygbm9kZUNhblRy
dW5jYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAvLyBoZXJlLiBBIG11bHRpcGx5IG9uIGludGVn
ZXJzIHBlcmZvcm1lZCBpbiB0aGUgZG91YmxlIGRvbWFpbiBhbmQgdGhlbiB0cnVuY2F0ZWQgdG8K
LSAgICAgICAgICAgIC8vIGFuIGludGVnZXIgd2lsbCBnaXZlIGEgZGlmZmVyZW50IHJlc3VsdCB0
aGFuIGEgbXVsdGlwbHkgcGVyZm9ybWVkIGluIHRoZSBpbnRlZ2VyCi0gICAgICAgICAgICAvLyBk
b21haW4gYW5kIHRoZW4gdHJ1bmNhdGVkLCBpZiB0aGUgaW50ZWdlciBkb21haW4gcmVzdWx0IHdv
dWxkIGhhdmUgcmVzdWx0ZWQgaW4KLSAgICAgICAgICAgIC8vIHNvbWV0aGluZyBiaWdnZXIgdGhh
biB3aGF0IGEgMzItYml0IGludGVnZXIgY2FuIGhvbGQuIEphdmFTY3JpcHQgbWFuZGF0ZXMgdGhh
dAotICAgICAgICAgICAgLy8gdGhlIHNlbWFudGljcyBhcmUgYWx3YXlzIGFzIGlmIHRoZSBtdWx0
aXBseSBoYWQgYmVlbiBwZXJmb3JtZWQgaW4gdGhlIGRvdWJsZQotICAgICAgICAgICAgLy8gZG9t
YWluLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoTXVsMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93
LCByZWcxLCByZWcyLCByZXN1bHQuZ3ByKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gQ2hlY2sgZm9yIG5lZ2F0aXZlIHplcm8sIGlmIHRoZSB1c2VycyBvZiB0aGlzIG5vZGUgY2Fy
ZSBhYm91dCBzdWNoIHRoaW5ncy4KLSAgICAgICAgICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0
aXZlWmVybyhub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgcmVzdWx0Tm9uWmVybyA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuLCByZWcxLCBUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcyLCBUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAg
ICAgICAgICAgICByZXN1bHROb25aZXJvLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKLQotICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIo
KTsKLSAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAgICAgIAotICAgICAgICBt
X2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgCi0gICAg
ICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
Y29tcGlsZUFyaXRoTXVsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI2NTYs
MjUgKzI0OTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICBpZiAoIWF0KG5vZGUuY2hpbGQx
KCkpLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSAmJiAhYXQobm9kZS5jaGlsZDIoKSkuc2hv
dWxkTm90U3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0
ZUludGVnZXIoKSkgewotICAgICAgICAgICAgY29tcGlsZVNvZnRNb2R1bG8obm9kZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAKLSAgICAgICAg
RlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKLSAgICAgICAgRlBSUmVnIG9wMkZQUiA9IG9wMi5m
cHIoKTsKLSAgICAgICAgCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIAotICAg
ICAgICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotCi0gICAgICAgIGNhbGxPcGVyYXRpb24oZm1v
ZEFzREZHT3BlcmF0aW9uLCByZXN1bHQuZnByKCksIG9wMUZQUiwgb3AyRlBSKTsKLSAgICAgICAg
Ci0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgY29tcGlsZUFyaXRoTW9kKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkocmV2aXNpb24gMTAwOTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQyNiw0NiArMjQyNiw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBj
YXNlIEFyaXRoTXVsOiB7Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkgJiYgbm9kZS5jYW5TcGVjdWxh
dGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7Ci0KLSAgICAgICAgICAgIEdQUlJlZyByZWcxID0gb3AxLmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIHJlZzIgPSBvcDIuZ3ByKCk7Ci0KLSAgICAgICAgICAgIC8vIFdoYXQgaXMg
dW5mb3J0dW5hdGUgaXMgdGhhdCB3ZSBjYW5ub3QgdGFrZSBhZHZhbnRhZ2Ugb2Ygbm9kZUNhblRy
dW5jYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAvLyBoZXJlLiBBIG11bHRpcGx5IG9uIGludGVn
ZXJzIHBlcmZvcm1lZCBpbiB0aGUgZG91YmxlIGRvbWFpbiBhbmQgdGhlbiB0cnVuY2F0ZWQgdG8K
LSAgICAgICAgICAgIC8vIGFuIGludGVnZXIgd2lsbCBnaXZlIGEgZGlmZmVyZW50IHJlc3VsdCB0
aGFuIGEgbXVsdGlwbHkgcGVyZm9ybWVkIGluIHRoZSBpbnRlZ2VyCi0gICAgICAgICAgICAvLyBk
b21haW4gYW5kIHRoZW4gdHJ1bmNhdGVkLCBpZiB0aGUgaW50ZWdlciBkb21haW4gcmVzdWx0IHdv
dWxkIGhhdmUgcmVzdWx0ZWQgaW4KLSAgICAgICAgICAgIC8vIHNvbWV0aGluZyBiaWdnZXIgdGhh
biB3aGF0IGEgMzItYml0IGludGVnZXIgY2FuIGhvbGQuIEphdmFTY3JpcHQgbWFuZGF0ZXMgdGhh
dAotICAgICAgICAgICAgLy8gdGhlIHNlbWFudGljcyBhcmUgYWx3YXlzIGFzIGlmIHRoZSBtdWx0
aXBseSBoYWQgYmVlbiBwZXJmb3JtZWQgaW4gdGhlIGRvdWJsZQotICAgICAgICAgICAgLy8gZG9t
YWluLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoTXVsMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93
LCByZWcxLCByZWcyLCByZXN1bHQuZ3ByKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gQ2hlY2sgZm9yIG5lZ2F0aXZlIHplcm8sIGlmIHRoZSB1c2VycyBvZiB0aGlzIG5vZGUgY2Fy
ZSBhYm91dCBzdWNoIHRoaW5ncy4KLSAgICAgICAgICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0
aXZlWmVybyhub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgcmVzdWx0Tm9uWmVybyA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuLCByZWcxLCBUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcyLCBUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAg
ICAgICAgICAgICByZXN1bHROb25aZXJvLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKLQotICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIo
KTsKLSAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAgICAgIAotICAgICAgICBt
X2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgCi0gICAg
ICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
Y29tcGlsZUFyaXRoTXVsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI1MjMs
NDggKzI0ODQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpIHx8IGF0KG5vZGUuY2hpbGQyKCkpLnNob3Vs
ZE5vdFNwZWN1bGF0ZUludGVnZXIoKQotICAgICAgICAgICAgfHwgIW5vZGUuY2FuU3BlY3VsYXRl
SW50ZWdlcigpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBGUFJSZWcg
b3AxRlBSID0gb3AxLmZwcigpOwotICAgICAgICAgICAgRlBSUmVnIG9wMkZQUiA9IG9wMi5mcHIo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgRlBSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLQotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihmbW9kLCByZXN1bHQuZnByKCksIG9wMUZQUiwgb3AyRlBSKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxl
SW5kZXgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAg
ICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAg
ICAgICBHUFJUZW1wb3JhcnkgZWF4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKLSAgICAgICAg
R1BSVGVtcG9yYXJ5IGVkeCh0aGlzLCBYODZSZWdpc3RlcnM6OmVkeCk7Ci0gICAgICAgIEdQUlJl
ZyBvcDFHcHIgPSBvcDEuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBvcDJHcHIgPSBvcDIuZ3ByKCk7
Ci0KLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgb3AyR3ByKSk7Ci0KLSAgICAgICAgR1BS
UmVnIHRlbXAyID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgaWYgKG9wMkdwciA9PSBYODZSZWdp
c3RlcnM6OmVheCB8fCBvcDJHcHIgPT0gWDg2UmVnaXN0ZXJzOjplZHgpIHsKLSAgICAgICAgICAg
IHRlbXAyID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3AyR3ByLCB0ZW1w
Mik7Ci0gICAgICAgICAgICBvcDJHcHIgPSB0ZW1wMjsKLSAgICAgICAgfQotCi0gICAgICAgIG1f
aml0Lm1vdmUob3AxR3ByLCBlYXguZ3ByKCkpOwotICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5j
ZHEoKTsKLSAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuaWRpdmxfcihvcDJHcHIpOwotCi0gICAg
ICAgIGlmICh0ZW1wMiAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgdW5sb2NrKHRlbXAy
KTsKLQotICAgICAgICBpbnRlZ2VyUmVzdWx0KGVkeC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICBjb21waWxlQXJpdGhNb2Qobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDEwMDk3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywxNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKKy8vIE9uIFdpbmRvd3Mgd2UgbmVlZCB0byB3
cmFwIGZtb2Q7IG9uIG90aGVyIHBsYXRmb3JtcyB3ZSBjYW4gY2FsbCBpdCBkaXJlY3RseS4KKy8v
IE9uIEFSTXY3IHdlIGFzc2VydCB0aGF0IGFsbCBmdW5jdGlvbiBwb2ludGVycyBoYXZlIHRvIGxv
dyBiaXQgc2V0IChwb2ludCB0byB0aHVtYiBjb2RlKS4KKyNpZiBDQUxMSU5HX0NPTlZFTlRJT05f
SVNfU1REQ0FMTCB8fCBDUFUoQVJNX1RIVU1CMikKK3N0YXRpYyBkb3VibGUgREZHX09QRVJBVElP
TiBmbW9kQXNERkdPcGVyYXRpb24oZG91YmxlIHgsIGRvdWJsZSB5KQoreworICAgIHJldHVybiBm
bW9kKHgsIHkpOworfQorI2Vsc2UKKyNkZWZpbmUgZm1vZEFzREZHT3BlcmF0aW9uIGZtb2QKKyNl
bmRpZgorCiBjb25zdCBkb3VibGUgU3BlY3VsYXRpdmVKSVQ6OnR3b1RvVGhlMzIgPSAoZG91Ymxl
KTB4MTAwMDAwMDAwdWxsOwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjbGVhckdlbmVyYXRpb25J
bmZvKCkKQEAgLTE1NzMsNiArMTU4NCwyOTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUluc3RhbmNlT2YoTgogI2VuZGlmCiB9CiAKK3N0YXRpYyBib29sIGlzUG93ZXJPZlR3byhpbnQz
Ml90IG51bSkKK3sKKyAgICByZXR1cm4gbnVtICYmICEobnVtICYgKG51bSAtIDEpKTsKK30KKwor
Ly8gVGhpcyByb3V0aW5lIGlzIGNvcGllZCBmcm9tIEZhc3RNYWxsb2MKK3N0YXRpYyBpbnQzMl90
IGxvZ1R3byhpbnQzMl90IG51bSkKK3sKKyAgICBpbnQzMl90IGxvZyA9IDA7CisgICAgZm9yIChp
bnQzMl90IGkgPSA0OyBpID49IDA7IC0taSkgeworICAgICAgICBpbnQzMl90IHNoaWZ0ID0gKDEg
PDwgaSk7CisgICAgICAgIGludDMyX3QgeCA9IG51bSA+PiBzaGlmdDsKKyAgICAgICAgaWYgKHgp
IHsKKyAgICAgICAgICBudW0gPSB4OworICAgICAgICAgIGxvZyArPSBzaGlmdDsKKyAgICAgICAg
fQorICAgIH0KKyAgICBBU1NFUlQobnVtID09IDEpOworICAgIHJldHVybiBsb2c7Cit9CisKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTb2Z0TW9kdWxvKE5vZGUmIG5vZGUpCit7CisgICAg
Ym9vbCBzaG91bGRHZW5lcmF0ZVBvd2VyT2ZUd29DaGVjayA9IHRydWU7CisKKyAgICAvLyBJbiB0
aGUgZmFzdCBwYXRoLCB0aGUgZGl2aWRlbmQgdmFsdWUgY291bGQgYmUgdGhlIGZpbmFsIHJlc3Vs
dAorICAgIC8vIChpbiBjYXNlIG9mIHxkaXZpZGVuZHwgPCB8ZGl2aXNvcnwpLCBzbyB3ZSBzcGVj
dWxhdGUgaXQgYXMgc3RyaWN0IGludDMyLgorICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgR1BSUmVnIG9wMUdwciA9IG9wMS5ncHIo
KTsKKworICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAg
aW50MzJfdCBkaXZpc29yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSk7Cisg
ICAgICAgIGlmIChkaXZpc29yIDwgMCkKKyAgICAgICAgICAgIGRpdmlzb3IgPSAtZGl2aXNvcjsK
KworICAgICAgICBpZiAoaXNQb3dlck9mVHdvKGRpdmlzb3IpKSB7CisgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR3ByLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgcG9zaXRpdmVEaXZpZGVuZCA9IG1faml0LmJy
YW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wMUdwciwgVHJ1c3RlZElt
bTMyKDApKTsKKyAgICAgICAgICAgIG1faml0Lm5lZzMyKHJlc3VsdEdQUik7CisgICAgICAgICAg
ICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoZGl2aXNvciAtIDEpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgbV9qaXQubmVnMzIocmVzdWx0R1BSKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgICAgIHBvc2l0aXZlRGl2aWRl
bmQubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKGRp
dmlzb3IgLSAxKSwgcmVzdWx0R1BSKTsKKworICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82
NCkKKyAgICAgICAgaWYgKGRpdmlzb3IpIHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBlYXgo
dGhpcywgWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IGVkeCh0
aGlzLCBYODZSZWdpc3RlcnM6OmVkeCk7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KworICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHcHIsIGVheC5ncHIoKSk7CisgICAgICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihkaXZpc29yKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBtX2ppdC5hc3NlbWJsZXIoKS5jZHEoKTsKKyAgICAgICAgICAgIG1faml0LmFzc2VtYmxl
cigpLmlkaXZsX3Ioc2NyYXRjaEdQUik7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KGVkeC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisj
ZW5kaWYKKyAgICAgICAgLy8gRmFsbGJhY2sgdG8gbm9uLWNvbnN0YW50IGNhc2UgYnV0IGF2b2lk
IHVubmVjZXNzYXJ5IGNoZWNrcy4KKyAgICAgICAgc2hvdWxkR2VuZXJhdGVQb3dlck9mVHdvQ2hl
Y2sgPSBmYWxzZTsKKyAgICB9CisKKyAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhp
cywgbm9kZS5jaGlsZDIoKSk7CisgICAgR1BSUmVnIG9wMkdwciA9IG9wMi5ncHIoKTsKKworICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0
MzIoSklUQ29tcGlsZXI6Olplcm8sIG9wMkdwcikpOworCisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4
Nl82NCkKKyAgICBHUFJUZW1wb3JhcnkgZWF4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAg
ICBHUFJUZW1wb3JhcnkgZWR4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWR4KTsKKyAgICBHUFJSZWcg
dGVtcDIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmIChvcDJHcHIgPT0gWDg2UmVnaXN0ZXJzOjpl
YXggfHwgb3AyR3ByID09IFg4NlJlZ2lzdGVyczo6ZWR4KSB7CisgICAgICAgIHRlbXAyID0gYWxs
b2NhdGUoKTsKKyAgICAgICAgbV9qaXQubW92ZShvcDJHcHIsIHRlbXAyKTsKKyAgICAgICAgb3Ay
R3ByID0gdGVtcDI7CisgICAgfQorICAgIEdQUlJlZyByZXN1bHRHUFIgPSBlZHguZ3ByKCk7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBlYXguZ3ByKCk7CisjZWxzZQorICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNj
cmF0Y2guZ3ByKCk7CisjZW5kaWYKKworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICBKSVRDb21waWxl
cjo6SnVtcExpc3QgZXhpdEJyYW5jaDsKKworICAgIC8vIHJlc3VsdEdQUiBpcyB0byBob2xkIHRo
ZSBBQlMgdmFsdWUgb2YgdGhlIGRpdmlkZW5kIGJlZm9yZSBmaW5hbCByZXN1bHQgaXMgcHJvZHVj
ZWQKKyAgICBtX2ppdC5tb3ZlKG9wMUdwciwgcmVzdWx0R1BSKTsKKyAgICAvLyBzY3JhdGNoR1BS
MiBpcyB0byBob2xkIHRoZSBBQlMgdmFsdWUgb2YgdGhlIGRpdmlzb3IKKyAgICBtX2ppdC5tb3Zl
KG9wMkdwciwgc2NyYXRjaEdQUjIpOworCisgICAgLy8gQ2hlY2sgZm9yIG5lZ2F0aXZlIHJlc3Vs
dCByZW1haW5kZXIKKyAgICAvLyBBY2NvcmRpbmcgdG8gRUNNQS0yNjIsIHRoZSBzaWduIG9mIHRo
ZSByZXN1bHQgZXF1YWxzIHRoZSBzaWduIG9mIHRoZSBkaXZpZGVuZAorICAgIEpJVENvbXBpbGVy
OjpKdW1wIHBvc2l0aXZlRGl2aWRlbmQgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6R3Jl
YXRlclRoYW5PckVxdWFsLCBvcDFHcHIsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgbV9qaXQubmVn
MzIocmVzdWx0R1BSKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQ
Uik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgc2F2ZUNvbmRpdGlvbiA9IG1faml0Lmp1bXAoKTsK
KworICAgIHBvc2l0aXZlRGl2aWRlbmQubGluaygmbV9qaXQpOworICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTMyKDApLCBzY3JhdGNoR1BSKTsKKworICAgIC8vIFNhdmUgdGhlIGNvbmRpdGlvbiBm
b3IgbmVnYXRpdmUgcmVtYWluZGVyCisgICAgc2F2ZUNvbmRpdGlvbi5saW5rKCZtX2ppdCk7Cisg
ICAgbV9qaXQucHVzaChzY3JhdGNoR1BSKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIHBvc2l0
aXZlRGl2aXNvciA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1
YWwsIG9wMkdwciwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICBtX2ppdC5uZWczMihzY3JhdGNoR1BS
Mik7CisKKyAgICBwb3NpdGl2ZURpdmlzb3IubGluaygmbV9qaXQpOworICAgIGV4aXRCcmFuY2gu
YXBwZW5kKG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpMZXNzVGhhbiwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSMikpOworCisgICAgLy8gUG93ZXIgb2YgdHdvIGZhc3QgY2FzZQorICAgIGlmIChz
aG91bGRHZW5lcmF0ZVBvd2VyT2ZUd29DaGVjaykgeworICAgICAgICBtX2ppdC5tb3ZlKHNjcmF0
Y2hHUFIyLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90UG93ZXJPZlR3byA9
IG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUiwgc2Ny
YXRjaEdQUjIpOworICAgICAgICBtX2ppdC5hbmQzMihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICBleGl0QnJhbmNoLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIG5vdFBv
d2VyT2ZUd28ubGluaygmbV9qaXQpOworICAgIH0KKworI2lmIENQVShYODYpIHx8IENQVShYODZf
NjQpCisgICAgbV9qaXQubW92ZShyZXN1bHRHUFIsIGVheC5ncHIoKSk7CisgICAgbV9qaXQuYXNz
ZW1ibGVyKCkuY2RxKCk7CisgICAgbV9qaXQuYXNzZW1ibGVyKCkuaWRpdmxfcihzY3JhdGNoR1BS
Mik7CisjZWxpZiBDUFUoQVJNX1RIVU1CMikKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDModGhp
cyk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3ByKCk7CisgICAgbV9qaXQu
Y291bnRMZWFkaW5nWmVyb3MzMihzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUik7CisgICAgbV9qaXQu
Y291bnRMZWFkaW5nWmVyb3MzMihyZXN1bHRHUFIsIHNjcmF0Y2hHUFIzKTsKKyAgICBtX2ppdC5z
dWIzMihzY3JhdGNoR1BSMywgc2NyYXRjaEdQUik7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCB1
c2VGdWxsVGFibGUgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW0zMigzMSkpOworCisgICAgbV9qaXQubmVnMzIoc2NyYXRjaEdQUik7Cisg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDMxKSwgc2NyYXRjaEdQUik7CisKKyAgICBpbnQg
ZWxlbWVudFNpemVCeVNoaWZ0ID0gLTE7CisgICAgZWxlbWVudFNpemVCeVNoaWZ0ID0gMzsKKyAg
ICBtX2ppdC5yZWxhdGl2ZVRhYmxlSnVtcChzY3JhdGNoR1BSLCBlbGVtZW50U2l6ZUJ5U2hpZnQp
OworCisgICAgdXNlRnVsbFRhYmxlLmxpbmsoJm1faml0KTsKKyAgICAvLyBNb2R1bG8gdGFibGUK
KyAgICBmb3IgKGludCBpID0gMzE7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgU2hpZnRUeXBlQW5k
QW1vdW50IHNoaWZ0KFNSVHlwZV9MU0wsIGkpOworICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5z
dWJfUyhzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIyLCBzaGlmdCk7CisgICAgICAg
IG1faml0LmFzc2VtYmxlcigpLml0KEFSTXY3QXNzZW1ibGVyOjpDb25kaXRpb25DUyk7CisgICAg
ICAgIG1faml0LmFzc2VtYmxlcigpLm1vdihyZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOworICAgIH0K
KworICAgIEpJVENvbXBpbGVyOjpKdW1wIGxvd2VyID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGls
ZXI6OkJlbG93LCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIyKTsKKyAgICBtX2ppdC5zdWIzMihzY3Jh
dGNoR1BSMiwgcmVzdWx0R1BSKTsKKyAgICBsb3dlci5saW5rKCZtX2ppdCk7CisjZW5kaWYgLy8g
Q1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKworICAgIGV4aXRCcmFuY2gubGluaygmbV9qaXQpOwor
CisgICAgLy8gQ2hlY2sgZm9yIG5lZ2F0aXZlIHJlbWFpbmRlcgorICAgIG1faml0LnBvcChzY3Jh
dGNoR1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2ZVJlc3VsdCA9IG1faml0LmJy
YW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKDApKTsK
KyAgICBtX2ppdC5uZWczMihyZXN1bHRHUFIpOworICAgIHBvc2l0aXZlUmVzdWx0LmxpbmsoJm1f
aml0KTsKKworICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisK
KyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorICAgIGlmICh0ZW1wMiAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICB1bmxvY2sodGVtcDIpOworI2VuZGlmCit9CisKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2RlJiBub2RlKQoreworICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkg
JiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKGlzSW50MzJDb25z
dGFudChub2RlLmNoaWxkMigpKSAmJiAhbm9kZU1heU92ZXJmbG93KG5vZGUuYXJpdGhOb2RlRmxh
Z3MoKSkpIHsKKyAgICAgICAgICAgIGludDMyX3QgbXVsdGlwbGllciA9IHZhbHVlT2ZJbnQzMkNv
bnN0YW50KG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZSA9IGZhbHNl
OworICAgICAgICAgICAgaWYgKG11bHRpcGxpZXIgPCAwKSB7CisgICAgICAgICAgICAgICAgbXVs
dGlwbGllciA9IC1tdWx0aXBsaWVyOworICAgICAgICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFtdWx0aXBsaWVyKSB7CisgICAgICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgICAgICAgICAgaWYgKCFub2Rl
Q2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBvcDEuZ3By
KCksIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXNQb3dlck9m
VHdvKG11bHRpcGxpZXIpKSB7CisgICAgICAgICAgICAgICAgaW50IGxvZyA9IGxvZ1R3byhtdWx0
aXBsaWVyKTsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBvcDEpOworICAgICAgICAgICAgICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICAgICAgICAgIGlmIChuZWdhdGl2ZSAmJiAhbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2Rl
LmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBvcDFHUFIpKTsKKworICAgICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKG9wMUdQ
UiwgVHJ1c3RlZEltbTMyKGxvZyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgaWYgKG5l
Z2F0aXZlKQorICAgICAgICAgICAgICAgICAgICBtX2ppdC5uZWczMihyZXN1bHRHUFIpOworCisg
ICAgICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgcmVn
MSA9IG9wMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlZzIgPSBvcDIuZ3ByKCk7CisKKyAgICAg
ICAgLy8gV2hhdCBpcyB1bmZvcnR1bmF0ZSBpcyB0aGF0IHdlIGNhbm5vdCB0YWtlIGFkdmFudGFn
ZSBvZiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKCkKKyAgICAgICAgLy8gaGVyZS4gQSBtdWx0aXBs
eSBvbiBpbnRlZ2VycyBwZXJmb3JtZWQgaW4gdGhlIGRvdWJsZSBkb21haW4gYW5kIHRoZW4gdHJ1
bmNhdGVkIHRvCisgICAgICAgIC8vIGFuIGludGVnZXIgd2lsbCBnaXZlIGEgZGlmZmVyZW50IHJl
c3VsdCB0aGFuIGEgbXVsdGlwbHkgcGVyZm9ybWVkIGluIHRoZSBpbnRlZ2VyCisgICAgICAgIC8v
IGRvbWFpbiBhbmQgdGhlbiB0cnVuY2F0ZWQsIGlmIHRoZSBpbnRlZ2VyIGRvbWFpbiByZXN1bHQg
d291bGQgaGF2ZSByZXN1bHRlZCBpbgorICAgICAgICAvLyBzb21ldGhpbmcgYmlnZ2VyIHRoYW4g
d2hhdCBhIDMyLWJpdCBpbnRlZ2VyIGNhbiBob2xkLiBKYXZhU2NyaXB0IG1hbmRhdGVzIHRoYXQK
KyAgICAgICAgLy8gdGhlIHNlbWFudGljcyBhcmUgYWx3YXlzIGFzIGlmIHRoZSBtdWx0aXBseSBo
YWQgYmVlbiBwZXJmb3JtZWQgaW4gdGhlIGRvdWJsZQorICAgICAgICAvLyBkb21haW4uCisgICAg
ICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaE11bDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgcmVnMSwgcmVnMiwg
cmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgZm9yIG5lZ2F0
aXZlIHplcm8sIGlmIHRoZSB1c2VycyBvZiB0aGlzIG5vZGUgY2FyZSBhYm91dCBzdWNoIHRoaW5n
cy4KKyAgICAgICAgaWYgKCFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUuYXJpdGhOb2Rl
RmxhZ3MoKSkpIHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJlc3VsdE5vblpl
cm8gPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcxLCBUcnVzdGVk
SW1tMzIoMCkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlZzIsIFRy
dXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgcmVzdWx0Tm9uWmVyby5saW5rKCZtX2ppdCk7
CisgICAgICAgIH0KKworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBvcDEsIG9wMik7CisKKyAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKKyAgICBGUFJS
ZWcgcmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAgCisgICAgbV9qaXQubXVsRG91YmxlKHJlZzEs
IHJlZzIsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgIAorICAgIGRvdWJsZVJlc3VsdChyZXN1bHQu
ZnByKCksIG1fY29tcGlsZUluZGV4KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFyaXRoTW9kKE5vZGUmIG5vZGUpCit7CisgICAgaWYgKCFhdChub2RlLmNoaWxkMSgpKS5zaG91
bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgIWF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZE5vdFNw
ZWN1bGF0ZUludGVnZXIoKQorICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkg
eworICAgICAgICBjb21waWxlU29mdE1vZHVsbyhub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAgICAgCisgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGls
ZDIoKSk7CisgICAgICAgIAorICAgIEZQUlJlZyBvcDFGUFIgPSBvcDEuZnByKCk7CisgICAgRlBS
UmVnIG9wMkZQUiA9IG9wMi5mcHIoKTsKKyAgICAgICAgCisgICAgZmx1c2hSZWdpc3RlcnMoKTsK
KyAgICAgICAgCisgICAgRlBSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKworICAgIGNhbGxPcGVyYXRp
b24oZm1vZEFzREZHT3BlcmF0aW9uLCByZXN1bHQuZnByKCksIG9wMUZQUiwgb3AyRlBSKTsKKyAg
ICAgICAgCisgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwor
fQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTAwOTc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTE3LDkgKzE5MTcsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGls
ZVZhbHVlVG9JbnQzMihOb2RlJik7CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkJ5dGVBcnJh
eShOb2RlJik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JCeXRlQXJyYXkoR1BSUmVnIGJh
c2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
dm9pZCBjb21waWxlQXJpdGhNdWwoTm9kZSYpOworICAgIHZvaWQgY29tcGlsZUFyaXRoTW9kKE5v
ZGUmKTsKICAgICB2b2lkIGNvbXBpbGVTb2Z0TW9kdWxvKE5vZGUmKTsKLSNlbmRpZgogCiAgICAg
Ly8gSXQgaXMgYWNjZXB0YWJsZSB0byBoYXZlIHN0cnVjdHVyZSBiZSBlcXVhbCB0byBzY3JhdGNo
LCBzbyBsb25nIGFzIHlvdSdyZSBmaW5lCiAgICAgLy8gd2l0aCB0aGUgc3RydWN0dXJlIEdQUiBi
ZWluZyBjbG9iYmVyZWQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>116309</attachid>
            <date>2011-11-22 20:00:21 -0800</date>
            <delta_ts>2011-11-22 20:02:26 -0800</delta_ts>
            <desc>simple test case</desc>
            <filename>mulmod.js</filename>
            <type>text/plain</type>
            <size>598</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">dmFyIGl0ZXIgPSAxMDAwMDAwMDA7CgpmdW5jdGlvbiBtdWxDb25zdGFudCgpCnsKICAgIHZhciBy
ZXN1bHQgPSAwOwoKICAgIGZvciAoaSA9IDA7IGkgPCBpdGVyOyBpKyspIHsKICAgICAgICByZXN1
bHQgKz0gaSAqIDI7CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKfQoKZnVuY3Rpb24gbW9kQ29u
c3RhbnQoKQp7CiAgICB2YXIgcmVzdWx0ID0gMDsKCiAgICBmb3IgKGkgPSAwOyBpIDwgaXRlcjsg
aSsrKSB7CiAgICAgICAgcmVzdWx0ICs9IGkgJSAyOwogICAgfQoKICAgIHJldHVybiByZXN1bHQ7
Cn0KCnZhciBtdWxTdGFydFRpbWUgPSBuZXcgRGF0ZTsKdmFyIG11bE91dHB1dCA9ICJjb25zdGFu
dCBtdWx0aXBseSByZXN1bHQ6ICIgKyBtdWxDb25zdGFudCgpICsgIiwgaW4gIiArIChuZXcgRGF0
ZSAtIG11bFN0YXJ0VGltZSkgKyAiIG1zIjsKcHJpbnQobXVsT3V0cHV0KTsKCnZhciBtb2RTdGFy
dFRpbWUgPSBuZXcgRGF0ZTsKdmFyIG1vZE91dHB1dCA9ICJjb25zdGFudCBtb2R1bG8gcmVzdWx0
OiAiICsgbW9kQ29uc3RhbnQoKSArICIsIGluICIgKyAobmV3IERhdGUgLSBtb2RTdGFydFRpbWUp
ICsgIiBtcyI7CnByaW50KG1vZE91dHB1dCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>