<?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>44795</bug_id>
          
          <creation_ts>2010-08-27 14:31:35 -0700</creation_ts>
          <short_desc>audio engine: add Biquad files</short_desc>
          <delta_ts>2010-09-09 17:41:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="Chris Rogers">crogers</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kbr</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>270756</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-27 14:31:35 -0700</bug_when>
    <thetext>audio engine: add Biquad files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270757</commentid>
    <comment_count>1</comment_count>
      <attachid>65768</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-27 14:32:46 -0700</bug_when>
    <thetext>Created attachment 65768
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275542</commentid>
    <comment_count>2</comment_count>
      <attachid>65768</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-07 19:18:53 -0700</bug_when>
    <thetext>Comment on attachment 65768
Patch

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

I trust that the math is correct and is in some generally standard form for signal processing which is why the equations are in certain forms with certain variable names. I have one main question, which we&apos;ve discussed offline, about a double negative which might imply changing where some negation occurs throughout the code. Also a couple of minor formatting issues. Will wait for your feedback before updating the review status of the patch.

&gt; WebCore/platform/audio/Biquad.cpp:69
&gt; +
Unnecessary newline

&gt; WebCore/platform/audio/Biquad.cpp:165
&gt; +    destP[1] = destP[framesToProcess - 1 + 2];
These are subtle since they would look like out of bounds accesses on arrays simply of length framesToProcess. Could you add a comment referencing the allocation of two extra samples for the input and output buffers in the constructor?

&gt; WebCore/platform/audio/Biquad.cpp:190
&gt; +        resonance = 0.0; // for now can&apos;t go negative
resonance = std::max(0.0, resonance);

&gt; WebCore/platform/audio/Biquad.cpp:212
&gt; +        resonance = 0.0; // for now can&apos;t go negative
Same std::max as above.

&gt; WebCore/platform/audio/Biquad.cpp:266
&gt; +    m_b1 = - (-2.0 * pole.real());
Why do you have a double negative here? Why not just write &quot;2.0 * pole.real()&quot;?

&gt; WebCore/platform/audio/Biquad.cpp:269
&gt; +    m_b2 = - (poleMag * poleMag);
Extra space between - and (

&gt; WebCore/platform/audio/Biquad.h:90
&gt; +
Unnecessary newline?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276184</commentid>
    <comment_count>3</comment_count>
      <attachid>66967</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-08 16:59:17 -0700</bug_when>
    <thetext>Created attachment 66967
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276188</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-08 17:03:25 -0700</bug_when>
    <thetext>Ken, I&apos;ve addressed your comments.  I&apos;ve also fixed an issue where the filter coefficients (m_b1 and m_b2) were being used with negative values from what is normally used in biquad filter difference equations.  I&apos;ve negated their use both in the processing math and when the coefficient values are calculated, so overall there is no change mathematically, but the code now looks cleaner and is in a more standard form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276754</commentid>
    <comment_count>5</comment_count>
      <attachid>66967</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-09 14:15:57 -0700</bug_when>
    <thetext>Comment on attachment 66967
Patch

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276877</commentid>
    <comment_count>6</comment_count>
      <attachid>66967</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-09 17:41:37 -0700</bug_when>
    <thetext>Comment on attachment 66967
Patch

Clearing flags on attachment: 66967

Committed r67132: &lt;http://trac.webkit.org/changeset/67132&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276880</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-09 17:41:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65768</attachid>
            <date>2010-08-27 14:32:46 -0700</date>
            <delta_ts>2010-09-08 16:59:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44795-20100827143244.patch</filename>
            <type>text/plain</type>
            <size>13219</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjI1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDgtMjcgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBh
dWRpbyBlbmdpbmU6IGFkZCBCaXF1YWQgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0Nzk1CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNpbmNl
IGF1ZGlvIEFQSSBpcyBub3QgeWV0IGltcGxlbWVudGVkLgorCisgICAgICAgICogcGxhdGZvcm0v
YXVkaW86IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjpCaXF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6
QmlxdWFkOjpwcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6cHJvY2Vzc0Zhc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjpwcm9jZXNzU2xpY2VGYXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpcXVhZDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjpzZXRM
b3dwYXNzUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0SGlnaHBhc3NQYXJh
bXMpOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjpzZXRMb3dTaGVsZlBhcmFtcyk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXF1YWQ6OnNldFplcm9Qb2xlUGFpcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlxdWFkOjpzZXRBbGxwYXNzUG9sZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQmlx
dWFkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjp+QmlxdWFkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9hdWRpby9tYWM6IEFkZGVkLgorCiAyMDEwLTA4LTI3ICBKYW1lcyBSb2Jp
bnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRy
aSBHbGF6a292LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElP
KQorCisjaW5jbHVkZSAiQmlxdWFkLmgiCisKKyNpbmNsdWRlICJBY2NlbGVyYXRlLmgiCisjaW5j
bHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBpbnQga0J1ZmZlclNpemUgPSAxMDI0OworCitC
aXF1YWQ6OkJpcXVhZCgpCit7CisjaWYgT1MoREFSV0lOKQorICAgIC8vIEFsbG9jYXRlIHR3byBz
YW1wbGVzIG1vcmUgZm9yIGZpbHRlciBoaXN0b3J5CisgICAgbV9pbnB1dEJ1ZmZlci5hbGxvY2F0
ZShrQnVmZmVyU2l6ZSArIDIpOworICAgIG1fb3V0cHV0QnVmZmVyLmFsbG9jYXRlKGtCdWZmZXJT
aXplICsgMik7CisjZW5kaWYKKworICAgIC8vIEluaXRpYWxpemUgYXMgcGFzcy10aHJ1IChzdHJh
aWdodC13aXJlLCBubyBmaWx0ZXIgZWZmZWN0KQorICAgIG1fYTAgPSAxLjA7CisgICAgbV9hMSA9
IDAuMDsKKyAgICBtX2EyID0gMC4wOworICAgIG1fYjEgPSAwLjA7CisgICAgbV9iMiA9IDAuMDsK
KworICAgIG1fZyA9IDEuMDsKKworICAgIHJlc2V0KCk7IC8vIGNsZWFyIGZpbHRlciBtZW1vcnkK
K30KKwordm9pZCBCaXF1YWQ6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZVAsIGZsb2F0KiBk
ZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyNpZiBPUyhEQVJXSU4pCisgICAgLy8g
VXNlIHZlY0xpYiBpZiBhdmFpbGFibGUKKyAgICBwcm9jZXNzRmFzdChzb3VyY2VQLCBkZXN0UCwg
ZnJhbWVzVG9Qcm9jZXNzKTsKKworI2Vsc2UKKyAgICBpbnQgbiA9IGZyYW1lc1RvUHJvY2VzczsK
KworICAgIC8vIENyZWF0ZSBsb2NhbCBjb3BpZXMgb2YgbWVtYmVyIHZhcmlhYmxlcworICAgIGRv
dWJsZSB4MSA9IG1feDE7CisgICAgZG91YmxlIHgyID0gbV94MjsKKyAgICBkb3VibGUgeTEgPSBt
X3kxOworICAgIGRvdWJsZSB5MiA9IG1feTI7CisKKyAgICBkb3VibGUgYTAgPSBtX2EwOworICAg
IGRvdWJsZSBhMSA9IG1fYTE7CisgICAgZG91YmxlIGEyID0gbV9hMjsKKyAgICBkb3VibGUgYjEg
PSBtX2IxOworICAgIGRvdWJsZSBiMiA9IG1fYjI7CisKKyAgICB3aGlsZSAobi0tKSB7CisgICAg
ICAgIC8vIEZJWE1FOiB0aGlzIGNhbiBiZSBvcHRpbWl6ZWQgYnkgcGlwZWxpbmluZyB0aGUgbXVs
dGlwbHkgYWRkcy4uLgorICAgICAgICBmbG9hdCB4ID0gKnNvdXJjZVArKzsKKyAgICAgICAgZmxv
YXQgeSA9IGEwKnggKyBhMSp4MSArIGEyKngyICsgYjEqeTEgKyBiMip5MjsKKworICAgICAgICB5
ICo9IG1fZzsKKworICAgICAgICAqZGVzdFArKyA9IHk7CisKKyAgICAgICAgLy8gVXBkYXRlIHN0
YXRlIHZhcmlhYmxlcworICAgICAgICB4MiA9IHgxOworICAgICAgICB4MSA9IHg7CisgICAgICAg
IHkyID0geTE7CisgICAgICAgIHkxID0geTsKKyAgICB9CisKKyAgICAvLyBMb2NhbCB2YXJpYWJs
ZXMgYmFjayB0byBtZW1iZXIKKyAgICBtX3gxID0geDE7CisgICAgbV94MiA9IHgyOworICAgIG1f
eTEgPSB5MTsKKyAgICBtX3kyID0geTI7CisKKyAgICBtX2EwID0gYTA7CisgICAgbV9hMSA9IGEx
OworICAgIG1fYTIgPSBhMjsKKyAgICBtX2IxID0gYjE7CisgICAgbV9iMiA9IGIyOworI2VuZGlm
Cit9CisKKyNpZiBPUyhEQVJXSU4pCisKKy8vIEhlcmUgd2UgaGF2ZSBvcHRpbWl6ZWQgdmVyc2lv
biB1c2luZyBBY2NlbGVyYXRlLmZyYW1ld29yaworCit2b2lkIEJpcXVhZDo6cHJvY2Vzc0Zhc3Qo
Y29uc3QgZmxvYXQqIHNvdXJjZVAsIGZsb2F0KiBkZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vz
cykKK3sKKyAgICAvLyBGaWx0ZXIgY29lZmZpY2llbnRzCisgICAgZG91YmxlIEJbNV07CisgICAg
QlswXSA9IG1fYTA7CisgICAgQlsxXSA9IG1fYTE7CisgICAgQlsyXSA9IG1fYTI7CisgICAgQlsz
XSA9IC1tX2IxOyAvLyBvdXIgc2Vuc2UgaXMgYmFja3dhcmRzIGhlcmUgOikKKyAgICBCWzRdID0g
LW1fYjI7CisKKyAgICBkb3VibGUqIGlucHV0UCA9IG1faW5wdXRCdWZmZXIuZGF0YSgpOworICAg
IGRvdWJsZSogb3V0cHV0UCA9IG1fb3V0cHV0QnVmZmVyLmRhdGEoKTsKKworICAgIGRvdWJsZSog
aW5wdXQyUCA9IGlucHV0UCArIDI7CisgICAgZG91YmxlKiBvdXRwdXQyUCA9IG91dHB1dFAgKyAy
OworCisgICAgLy8gQnJlYWsgdXAgcHJvY2Vzc2luZyBpbnRvIHNtYWxsZXIgc2xpY2VzIChrQnVm
ZmVyU2l6ZSkgaWYgbmVjZXNzYXJ5LgorCisgICAgaW50IG4gPSBmcmFtZXNUb1Byb2Nlc3M7CisK
KyAgICB3aGlsZSAobiA+IDApIHsKKyAgICAgICAgaW50IGZyYW1lc1RoaXNUaW1lID0gbiA8IGtC
dWZmZXJTaXplID8gbiA6IGtCdWZmZXJTaXplOworCisgICAgICAgIC8vIENvcHkgaW5wdXQgdG8g
aW5wdXQgYnVmZmVyCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhbWVzVGhpc1RpbWU7
ICsraSkKKyAgICAgICAgICAgIGlucHV0MlBbaV0gPSAqc291cmNlUCsrOworCisgICAgICAgIHBy
b2Nlc3NTbGljZUZhc3QoaW5wdXRQLCBvdXRwdXRQLCBCLCBmcmFtZXNUaGlzVGltZSk7CisKKyAg
ICAgICAgLy8gQ29weSBvdXRwdXQgYnVmZmVyIHRvIG91dHB1dCAoY29udmVydHMgZmxvYXQgLT4g
ZG91YmxlKS4KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZXNUaGlzVGltZTsgKytp
KQorICAgICAgICAgICAgKmRlc3RQKysgPSBzdGF0aWNfY2FzdDxmbG9hdD4ob3V0cHV0MlBbaV0p
OworCisgICAgICAgIG4gLT0gZnJhbWVzVGhpc1RpbWU7CisgICAgfQorfQorCit2b2lkIEJpcXVh
ZDo6cHJvY2Vzc1NsaWNlRmFzdChkb3VibGUqIHNvdXJjZVAsIGRvdWJsZSogZGVzdFAsIGRvdWJs
ZSogY29lZmZpY2llbnRzUCwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICAvLyBVc2Ug
ZG91YmxlLXByZWNpc2lvbiBmb3IgZmlsdGVyIHN0YWJpbGl0eQorICAgIHZEU1BfZGVxMjJEKHNv
dXJjZVAsIDEsIGNvZWZmaWNpZW50c1AsIGRlc3RQLCAxLCBmcmFtZXNUb1Byb2Nlc3MpOworCisg
ICAgLy8gU2F2ZSBoaXN0b3J5CisgICAgc291cmNlUFswXSA9IHNvdXJjZVBbZnJhbWVzVG9Qcm9j
ZXNzIC0gMiArIDJdOworICAgIHNvdXJjZVBbMV0gPSBzb3VyY2VQW2ZyYW1lc1RvUHJvY2VzcyAt
IDEgKyAyXTsKKyAgICBkZXN0UFswXSA9IGRlc3RQW2ZyYW1lc1RvUHJvY2VzcyAtIDIgKyAyXTsK
KyAgICBkZXN0UFsxXSA9IGRlc3RQW2ZyYW1lc1RvUHJvY2VzcyAtIDEgKyAyXTsKK30KKworI2Vu
ZGlmIC8vIE9TKERBUldJTikKKworCit2b2lkIEJpcXVhZDo6cmVzZXQoKQoreworICAgIG1feDEg
PSBtX3gyID0gbV95MSA9IG1feTIgPSAwLjA7CisKKyNpZiBPUyhEQVJXSU4pCisgICAgLy8gVHdv
IGV4dHJhIHNhbXBsZXMgZm9yIGZpbHRlciBoaXN0b3J5CisgICAgZG91YmxlKiBpbnB1dFAgPSBt
X2lucHV0QnVmZmVyLmRhdGEoKTsKKyAgICBpbnB1dFBbMF0gPSAwLjA7CisgICAgaW5wdXRQWzFd
ID0gMC4wOworCisgICAgZG91YmxlKiBvdXRwdXRQID0gbV9vdXRwdXRCdWZmZXIuZGF0YSgpOwor
ICAgIG91dHB1dFBbMF0gPSAwLjA7CisgICAgb3V0cHV0UFsxXSA9IDAuMDsKKyNlbmRpZgorfQor
Cit2b2lkIEJpcXVhZDo6c2V0TG93cGFzc1BhcmFtcyhkb3VibGUgY3V0b2ZmLCBkb3VibGUgcmVz
b25hbmNlKQoreworICAgIGlmIChyZXNvbmFuY2UgPCAwLjApCisgICAgICAgIHJlc29uYW5jZSA9
IDAuMDsgLy8gZm9yIG5vdyBjYW4ndCBnbyBuZWdhdGl2ZQorCisgICAgZG91YmxlIGcgPSBwb3co
MTAuMCwgMC4wNSAqIHJlc29uYW5jZSk7CisgICAgZG91YmxlIGQgPSBzcXJ0KCg0LjAgLSBzcXJ0
KDE2LjAgLSAxNi4wIC8gKGcgKiBnKSkpIC8gMi4wKTsKKworICAgIC8vIENvbXB1dGUgYmlxdWFk
IGNvZWZmaWNpZW50cyBmb3IgbG9wYXNzIGZpbHRlcgorICAgIGRvdWJsZSB0aGV0YSA9IE1fUEkg
KiBjdXRvZmY7CisgICAgZG91YmxlIHNuID0gMC41ICogZCAqIHNpbih0aGV0YSk7CisgICAgZG91
YmxlIGJldGEgPSAwLjUgKiAoMS4wIC0gc24pIC8gKDEuMCArIHNuKTsKKyAgICBkb3VibGUgZ2Ft
bWEgPSAoMC41ICsgYmV0YSkgKiBjb3ModGhldGEpOworICAgIGRvdWJsZSBhbHBoYSA9IDAuMjUg
KiAoMC41ICsgYmV0YSAtIGdhbW1hKTsKKworICAgIG1fYTAgPSAyLjAgKiBhbHBoYTsKKyAgICBt
X2ExID0gMi4wICogMi4wKmFscGhhOworICAgIG1fYTIgPSAyLjAgKiBhbHBoYTsKKyAgICBtX2Ix
ID0gMi4wICogZ2FtbWE7CisgICAgbV9iMiA9IDIuMCAqIC1iZXRhOworfQorCit2b2lkIEJpcXVh
ZDo6c2V0SGlnaHBhc3NQYXJhbXMoZG91YmxlIGN1dG9mZiwgZG91YmxlIHJlc29uYW5jZSkKK3sK
KyAgICBpZiAocmVzb25hbmNlIDwgMC4wKQorICAgICAgICByZXNvbmFuY2UgPSAwLjA7IC8vIGZv
ciBub3cgY2FuJ3QgZ28gbmVnYXRpdmUKKworICAgIGRvdWJsZSBnID0gcG93KDEwLjAsIDAuMDUg
KiByZXNvbmFuY2UpOworICAgIGRvdWJsZSBkID0gc3FydCgoNC4wIC0gc3FydCgxNi4wIC0gMTYu
MCAvIChnICogZykpKSAvIDIuMCk7CisKKyAgICAvLyBDb21wdXRlIGJpcXVhZCBjb2VmZmljaWVu
dHMgZm9yIGhpZ2hwYXNzIGZpbHRlcgorICAgIGRvdWJsZSB0aGV0YSA9IE1fUEkgKiBjdXRvZmY7
CisgICAgZG91YmxlIHNuID0gMC41ICogZCAqIHNpbih0aGV0YSk7CisgICAgZG91YmxlIGJldGEg
PSAwLjUgKiAoMS4wIC0gc24pIC8gKDEuMCArIHNuKTsKKyAgICBkb3VibGUgZ2FtbWEgPSAoMC41
ICsgYmV0YSkgKiBjb3ModGhldGEpOworICAgIGRvdWJsZSBhbHBoYSA9IDAuMjUgKiAoMC41ICsg
YmV0YSArIGdhbW1hKTsKKworICAgIG1fYTAgPSAyLjAgKiBhbHBoYTsKKyAgICBtX2ExID0gMi4w
ICogLTIuMCphbHBoYTsKKyAgICBtX2EyID0gMi4wICogYWxwaGE7CisgICAgbV9iMSA9IDIuMCAq
IGdhbW1hOworICAgIG1fYjIgPSAyLjAgKiAtYmV0YTsKK30KKwordm9pZCBCaXF1YWQ6OnNldExv
d1NoZWxmUGFyYW1zKGRvdWJsZSBjdXRvZmYsIGRvdWJsZSBkYkdhaW4pCit7CisgICAgZG91Ymxl
IHRoZXRhID0gTV9QSSAqIGN1dG9mZjsKKworICAgIGRvdWJsZSBBID0gcG93KDEwLjAsIGRiR2Fp
biAvIDQwLjApOworICAgIGRvdWJsZSBTID0gMS4wOyAvLyBmaWx0ZXIgc2xvcGUgKDEuMCBpcyBt
YXggdmFsdWUpCisgICAgZG91YmxlIGFscGhhID0gMC41ICogc2luKHRoZXRhKSAqIHNxcnQoKEEg
KyAxLjAgLyBBKSAqICgxLjAgLyBTIC0gMS4wKSArIDIuMCk7CisKKyAgICBkb3VibGUgayA9IGNv
cyh0aGV0YSk7CisgICAgZG91YmxlIGsyID0gMi4wICogc3FydChBKSAqIGFscGhhOworCisgICAg
ZG91YmxlIGIwID0gQSAqICgoQSArIDEuMCkgLSAoQSAtIDEuMCkgKiBrICsgazIpOworICAgIGRv
dWJsZSBiMSA9IDIuMCAqIEEgKiAoKEEgLSAxLjApIC0gKEEgKyAxLjApICogayk7CisgICAgZG91
YmxlIGIyID0gQSAqICgoQSArIDEuMCkgLSAoQSAtIDEuMCkgKiBrIC0gazIpOworICAgIGRvdWJs
ZSBhMCA9IChBICsgMS4wKSArIChBIC0gMS4wKSAqIGsgKyBrMjsKKyAgICBkb3VibGUgYTEgPSAt
Mi4wICogKChBIC0gMS4wKSArIChBICsgMS4wKSAqIGspOworICAgIGRvdWJsZSBhMiA9IChBICsg
MS4wKSArIChBIC0gMS4wKSAqIGsgLSBrMjsKKworICAgIGRvdWJsZSBhMEludmVyc2UgPSAxLjAg
LyBhMDsKKyAgICAKKyAgICBtX2EwID0gYjAgKiBhMEludmVyc2U7CisgICAgbV9hMSA9IGIxICog
YTBJbnZlcnNlOworICAgIG1fYTIgPSBiMiAqIGEwSW52ZXJzZTsKKyAgICBtX2IxID0gLShhMSAq
IGEwSW52ZXJzZSk7CisgICAgbV9iMiA9IC0oYTIgKiBhMEludmVyc2UpOworfQorCit2b2lkIEJp
cXVhZDo6c2V0WmVyb1BvbGVQYWlycyhjb25zdCBDb21wbGV4ICZ6ZXJvLCBjb25zdCBDb21wbGV4
ICZwb2xlKQoreworICAgIG1fYTAgPSAxLjA7CisgICAgbV9hMSA9IC0yLjAgKiB6ZXJvLnJlYWwo
KTsKKworICAgIGRvdWJsZSB6ZXJvTWFnID0gYWJzKHplcm8pOworICAgIG1fYTIgPSB6ZXJvTWFn
ICogemVyb01hZzsKKworICAgIG1fYjEgPSAtICgtMi4wICogcG9sZS5yZWFsKCkpOworCisgICAg
ZG91YmxlIHBvbGVNYWcgPSBhYnMocG9sZSk7CisgICAgbV9iMiA9IC0gKHBvbGVNYWcgKiBwb2xl
TWFnKTsKK30KKwordm9pZCBCaXF1YWQ6OnNldEFsbHBhc3NQb2xlKGNvbnN0IENvbXBsZXggJnBv
bGUpCit7CisgICAgQ29tcGxleCB6ZXJvID0gQ29tcGxleCgxLjAsIDAuMCkgLyBwb2xlOworICAg
IHNldFplcm9Qb2xlUGFpcnMoemVybywgcG9sZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0JpcXVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlx
dWFkLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmlxdWFkX2gKKyNkZWZpbmUg
QmlxdWFkX2gKKworI2luY2x1ZGUgIkF1ZGlvRmxvYXRBcnJheS5oIgorI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Db21wbGV4Lmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisgCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEEgYmFzaWMgYmlxdWFkICh0d28temVy
byAvIHR3by1wb2xlIGRpZ2l0YWwgZmlsdGVyKQorLy8KKy8vIEl0IGNhbiBiZSBjb25maWd1cmVk
IHRvIGEgbnVtYmVyIG9mIGNvbW1vbiBhbmQgdmVyeSB1c2VmdWwgZmlsdGVyczoKKy8vICAgIGxv
d3Bhc3MsIGhpZ2hwYXNzLCBzaGVsdmluZywgcGFyYW1ldGVyaWMsIG5vdGNoLCBhbGxwYXNzLCAu
Li4KKworY2xhc3MgQmlxdWFkIHsKK3B1YmxpYzogICAKKyAgICBCaXF1YWQoKTsKKyAgICB2aXJ0
dWFsIH5CaXF1YWQoKSB7IH0KKworICAgIHZvaWQgcHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNl
UCwgZmxvYXQqIGRlc3RQLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKworICAgIC8vIGN1dG9m
ZiBpcyAwLTEgbm9ybWFsaXplZCwgcmVzb25hbmNlIGlzIGluIGRCID49IDAuMAorICAgIHZvaWQg
c2V0TG93cGFzc1BhcmFtcyhkb3VibGUgY3V0b2ZmLCBkb3VibGUgcmVzb25hbmNlKTsKKyAgICB2
b2lkIHNldEhpZ2hwYXNzUGFyYW1zKGRvdWJsZSBjdXRvZmYsIGRvdWJsZSByZXNvbmFuY2UpOwor
CisgICAgdm9pZCBzZXRMb3dTaGVsZlBhcmFtcyhkb3VibGUgY3V0b2ZmLCBkb3VibGUgZGJHYWlu
KTsKKworICAgIC8vIEZJWE1FOiBuZWVkIHRvIGltcGxlbWVudCBhIGZldyBtb3JlIGNvbW1vbiBm
aWx0ZXJzCisgICAgLy8gdm9pZCBzZXRIaWdoU2hlbGZQYXJhbXMoZG91YmxlIGN1dG9mZiwgZG91
YmxlIGRiR2Fpbik7CisgICAgLy8gdm9pZCBzZXRQYXJhbWV0cmljRVFQYXJhbXMoZG91YmxlIGN1
dG9mZiwgZG91YmxlIHJlc29uYW5jZSk7CisKKyAgICAvLyBTZXQgdGhlIGJpcXVhZCBjb2VmZmlj
aWVudHMgZ2l2ZW4gYSBzaW5nbGUgemVybyAob3RoZXIgemVybyB3aWxsIGJlIGNvbmp1Z2F0ZSkK
KyAgICAvLyBhbmQgYSBzaW5nbGUgcG9sZSAob3RoZXIgcG9sZSB3aWxsIGJlIGNvbmp1Z2F0ZSkK
KyAgICB2b2lkIHNldFplcm9Qb2xlUGFpcnMoY29uc3QgQ29tcGxleCYgemVybywgY29uc3QgQ29t
cGxleCYgcG9sZSk7CisKKyAgICAvLyBTZXQgdGhlIGJpcXVhZCBjb2VmZmljaWVudHMgZ2l2ZW4g
YSBzaW5nbGUgcG9sZSAob3RoZXIgcG9sZSB3aWxsIGJlIGNvbmp1Z2F0ZSkKKyAgICAvLyAoVGhl
IHplcm9lcyB3aWxsIGJlIHRoZSBpbnZlcnNlIG9mIHRoZSBwb2xlcykKKyAgICB2b2lkIHNldEFs
bHBhc3NQb2xlKGNvbnN0IENvbXBsZXgmIHBvbGUpOworCisgICAgLy8gUmVzZXRzIGZpbHRlciBz
dGF0ZQorICAgIHZvaWQgcmVzZXQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBGaWx0ZXIgY29lZmZp
Y2llbnRzCisgICAgZG91YmxlIG1fYTA7CisgICAgZG91YmxlIG1fYTE7CisgICAgZG91YmxlIG1f
YTI7CisgICAgZG91YmxlIG1fYjE7CisgICAgZG91YmxlIG1fYjI7CisKKyAgICBkb3VibGUgbV9n
OworCisgICAgLy8gRmlsdGVyIG1lbW9yeQorICAgIGRvdWJsZSBtX3gxOyAvLyBpbnB1dCBkZWxh
eWVkIGJ5IDEgc2FtcGxlCisgICAgZG91YmxlIG1feDI7IC8vIGlucHV0IGRlbGF5ZWQgYnkgMiBz
YW1wbGVzCisgICAgZG91YmxlIG1feTE7IC8vIG91dHB1dCBkZWxheWVkIGJ5IDEgc2FtcGxlCisg
ICAgZG91YmxlIG1feTI7IC8vIG91dHB1dCBkZWxheWVkIGJ5IDIgc2FtcGxlcworCisjaWYgT1Mo
REFSV0lOKQorICAgIHZvaWQgcHJvY2Vzc0Zhc3QoY29uc3QgZmxvYXQqIHNvdXJjZVAsIGZsb2F0
KiBkZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisKKyAgICB2b2lkIHByb2Nlc3NTbGlj
ZUZhc3QoZG91YmxlKiBzb3VyY2VQLCBkb3VibGUqIGRlc3RQLCBkb3VibGUqIGNvZWZmaWNpZW50
c1AsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOworCisgICAgQXVkaW9Eb3VibGVBcnJheSBtX2lu
cHV0QnVmZmVyOworICAgIEF1ZGlvRG91YmxlQXJyYXkgbV9vdXRwdXRCdWZmZXI7CisjZW5kaWYK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJpcXVhZF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66967</attachid>
            <date>2010-09-08 16:59:17 -0700</date>
            <delta_ts>2010-09-09 17:41:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44795-20100908165916.patch</filename>
            <type>text/plain</type>
            <size>13318</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzAzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDktMDggIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBh
dWRpbyBlbmdpbmU6IGFkZCBCaXF1YWQgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0Nzk1CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNpbmNl
IGF1ZGlvIEFQSSBpcyBub3QgeWV0IGltcGxlbWVudGVkLgorCisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vQmlxdWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OkJpcXVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OnByb2Nlc3MpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlxdWFkOjpwcm9jZXNzRmFzdCk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OnByb2Nl
c3NTbGljZUZhc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjpyZXNldCk6CisgICAgICAg
IChXZWJDb3JlOjpCaXF1YWQ6OnNldExvd3Bhc3NQYXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6
QmlxdWFkOjpzZXRIaWdocGFzc1BhcmFtcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OnNl
dExvd1NoZWxmUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0WmVyb1BvbGVQ
YWlycyk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OnNldEFsbHBhc3NQb2xlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9hdWRpby9CaXF1YWQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpC
aXF1YWQ6On5CaXF1YWQpOgorCiAyMDEwLTA5LTA4ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vQmlxdWFkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyODAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAi
QmlxdWFkLmgiCisKKyNpbmNsdWRlICJBY2NlbGVyYXRlLmgiCisjaW5jbHVkZSA8YWxnb3JpdGht
PgorI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGlv
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgaW50IGtCdWZmZXJTaXplID0gMTAy
NDsKKworQmlxdWFkOjpCaXF1YWQoKQoreworI2lmIE9TKERBUldJTikKKyAgICAvLyBBbGxvY2F0
ZSB0d28gc2FtcGxlcyBtb3JlIGZvciBmaWx0ZXIgaGlzdG9yeQorICAgIG1faW5wdXRCdWZmZXIu
cmVzaXplKGtCdWZmZXJTaXplICsgMik7CisgICAgbV9vdXRwdXRCdWZmZXIucmVzaXplKGtCdWZm
ZXJTaXplICsgMik7CisjZW5kaWYKKworICAgIC8vIEluaXRpYWxpemUgYXMgcGFzcy10aHJ1IChz
dHJhaWdodC13aXJlLCBubyBmaWx0ZXIgZWZmZWN0KQorICAgIG1fYTAgPSAxLjA7CisgICAgbV9h
MSA9IDAuMDsKKyAgICBtX2EyID0gMC4wOworICAgIG1fYjEgPSAwLjA7CisgICAgbV9iMiA9IDAu
MDsKKworICAgIG1fZyA9IDEuMDsKKworICAgIHJlc2V0KCk7IC8vIGNsZWFyIGZpbHRlciBtZW1v
cnkKK30KKwordm9pZCBCaXF1YWQ6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZVAsIGZsb2F0
KiBkZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyNpZiBPUyhEQVJXSU4pCisgICAg
Ly8gVXNlIHZlY0xpYiBpZiBhdmFpbGFibGUKKyAgICBwcm9jZXNzRmFzdChzb3VyY2VQLCBkZXN0
UCwgZnJhbWVzVG9Qcm9jZXNzKTsKKyNlbHNlCisgICAgaW50IG4gPSBmcmFtZXNUb1Byb2Nlc3M7
CisKKyAgICAvLyBDcmVhdGUgbG9jYWwgY29waWVzIG9mIG1lbWJlciB2YXJpYWJsZXMKKyAgICBk
b3VibGUgeDEgPSBtX3gxOworICAgIGRvdWJsZSB4MiA9IG1feDI7CisgICAgZG91YmxlIHkxID0g
bV95MTsKKyAgICBkb3VibGUgeTIgPSBtX3kyOworCisgICAgZG91YmxlIGEwID0gbV9hMDsKKyAg
ICBkb3VibGUgYTEgPSBtX2ExOworICAgIGRvdWJsZSBhMiA9IG1fYTI7CisgICAgZG91YmxlIGIx
ID0gbV9iMTsKKyAgICBkb3VibGUgYjIgPSBtX2IyOworCisgICAgd2hpbGUgKG4tLSkgeworICAg
ICAgICAvLyBGSVhNRTogdGhpcyBjYW4gYmUgb3B0aW1pemVkIGJ5IHBpcGVsaW5pbmcgdGhlIG11
bHRpcGx5IGFkZHMuLi4KKyAgICAgICAgZmxvYXQgeCA9ICpzb3VyY2VQKys7CisgICAgICAgIGZs
b2F0IHkgPSBhMCp4ICsgYTEqeDEgKyBhMip4MiAtIGIxKnkxIC0gYjIqeTI7CisKKyAgICAgICAg
eSAqPSBtX2c7CisKKyAgICAgICAgKmRlc3RQKysgPSB5OworCisgICAgICAgIC8vIFVwZGF0ZSBz
dGF0ZSB2YXJpYWJsZXMKKyAgICAgICAgeDIgPSB4MTsKKyAgICAgICAgeDEgPSB4OworICAgICAg
ICB5MiA9IHkxOworICAgICAgICB5MSA9IHk7CisgICAgfQorCisgICAgLy8gTG9jYWwgdmFyaWFi
bGVzIGJhY2sgdG8gbWVtYmVyCisgICAgbV94MSA9IHgxOworICAgIG1feDIgPSB4MjsKKyAgICBt
X3kxID0geTE7CisgICAgbV95MiA9IHkyOworCisgICAgbV9hMCA9IGEwOworICAgIG1fYTEgPSBh
MTsKKyAgICBtX2EyID0gYTI7CisgICAgbV9iMSA9IGIxOworICAgIG1fYjIgPSBiMjsKKyNlbmRp
ZgorfQorCisjaWYgT1MoREFSV0lOKQorCisvLyBIZXJlIHdlIGhhdmUgb3B0aW1pemVkIHZlcnNp
b24gdXNpbmcgQWNjZWxlcmF0ZS5mcmFtZXdvcmsKKwordm9pZCBCaXF1YWQ6OnByb2Nlc3NGYXN0
KGNvbnN0IGZsb2F0KiBzb3VyY2VQLCBmbG9hdCogZGVzdFAsIHNpemVfdCBmcmFtZXNUb1Byb2Nl
c3MpCit7CisgICAgLy8gRmlsdGVyIGNvZWZmaWNpZW50cworICAgIGRvdWJsZSBCWzVdOworICAg
IEJbMF0gPSBtX2EwOworICAgIEJbMV0gPSBtX2ExOworICAgIEJbMl0gPSBtX2EyOworICAgIEJb
M10gPSBtX2IxOworICAgIEJbNF0gPSBtX2IyOworCisgICAgZG91YmxlKiBpbnB1dFAgPSBtX2lu
cHV0QnVmZmVyLmRhdGEoKTsKKyAgICBkb3VibGUqIG91dHB1dFAgPSBtX291dHB1dEJ1ZmZlci5k
YXRhKCk7CisKKyAgICBkb3VibGUqIGlucHV0MlAgPSBpbnB1dFAgKyAyOworICAgIGRvdWJsZSog
b3V0cHV0MlAgPSBvdXRwdXRQICsgMjsKKworICAgIC8vIEJyZWFrIHVwIHByb2Nlc3NpbmcgaW50
byBzbWFsbGVyIHNsaWNlcyAoa0J1ZmZlclNpemUpIGlmIG5lY2Vzc2FyeS4KKworICAgIGludCBu
ID0gZnJhbWVzVG9Qcm9jZXNzOworCisgICAgd2hpbGUgKG4gPiAwKSB7CisgICAgICAgIGludCBm
cmFtZXNUaGlzVGltZSA9IG4gPCBrQnVmZmVyU2l6ZSA/IG4gOiBrQnVmZmVyU2l6ZTsKKworICAg
ICAgICAvLyBDb3B5IGlucHV0IHRvIGlucHV0IGJ1ZmZlcgorICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGZyYW1lc1RoaXNUaW1lOyArK2kpCisgICAgICAgICAgICBpbnB1dDJQW2ldID0gKnNv
dXJjZVArKzsKKworICAgICAgICBwcm9jZXNzU2xpY2VGYXN0KGlucHV0UCwgb3V0cHV0UCwgQiwg
ZnJhbWVzVGhpc1RpbWUpOworCisgICAgICAgIC8vIENvcHkgb3V0cHV0IGJ1ZmZlciB0byBvdXRw
dXQgKGNvbnZlcnRzIGZsb2F0IC0+IGRvdWJsZSkuCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZnJhbWVzVGhpc1RpbWU7ICsraSkKKyAgICAgICAgICAgICpkZXN0UCsrID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG91dHB1dDJQW2ldKTsKKworICAgICAgICBuIC09IGZyYW1lc1RoaXNUaW1lOwor
ICAgIH0KK30KKwordm9pZCBCaXF1YWQ6OnByb2Nlc3NTbGljZUZhc3QoZG91YmxlKiBzb3VyY2VQ
LCBkb3VibGUqIGRlc3RQLCBkb3VibGUqIGNvZWZmaWNpZW50c1AsIHNpemVfdCBmcmFtZXNUb1By
b2Nlc3MpCit7CisgICAgLy8gVXNlIGRvdWJsZS1wcmVjaXNpb24gZm9yIGZpbHRlciBzdGFiaWxp
dHkKKyAgICB2RFNQX2RlcTIyRChzb3VyY2VQLCAxLCBjb2VmZmljaWVudHNQLCBkZXN0UCwgMSwg
ZnJhbWVzVG9Qcm9jZXNzKTsKKworICAgIC8vIFNhdmUgaGlzdG9yeS4gIE5vdGUgdGhhdCBzb3Vy
Y2VQIGFuZCBkZXN0UCByZWZlcmVuY2UgbV9pbnB1dEJ1ZmZlciBhbmQgbV9vdXRwdXRCdWZmZXIg
cmVzcGVjdGl2ZWx5LgorICAgIC8vIFRoZXNlIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCAoaW4gdGhl
IGNvbnN0cnVjdG9yKSB3aXRoIHNwYWNlIGZvciB0d28gZXh0cmEgc2FtcGxlcyBzbyBpdCdzIE9L
IHRvIGFjY2VzcworICAgIC8vIGFycmF5IHZhbHVlcyB0d28gYmV5b25kIGZyYW1lc1RvUHJvY2Vz
cy4KKyAgICBzb3VyY2VQWzBdID0gc291cmNlUFtmcmFtZXNUb1Byb2Nlc3MgLSAyICsgMl07Cisg
ICAgc291cmNlUFsxXSA9IHNvdXJjZVBbZnJhbWVzVG9Qcm9jZXNzIC0gMSArIDJdOworICAgIGRl
c3RQWzBdID0gZGVzdFBbZnJhbWVzVG9Qcm9jZXNzIC0gMiArIDJdOworICAgIGRlc3RQWzFdID0g
ZGVzdFBbZnJhbWVzVG9Qcm9jZXNzIC0gMSArIDJdOworfQorCisjZW5kaWYgLy8gT1MoREFSV0lO
KQorCisKK3ZvaWQgQmlxdWFkOjpyZXNldCgpCit7CisgICAgbV94MSA9IG1feDIgPSBtX3kxID0g
bV95MiA9IDAuMDsKKworI2lmIE9TKERBUldJTikKKyAgICAvLyBUd28gZXh0cmEgc2FtcGxlcyBm
b3IgZmlsdGVyIGhpc3RvcnkKKyAgICBkb3VibGUqIGlucHV0UCA9IG1faW5wdXRCdWZmZXIuZGF0
YSgpOworICAgIGlucHV0UFswXSA9IDAuMDsKKyAgICBpbnB1dFBbMV0gPSAwLjA7CisKKyAgICBk
b3VibGUqIG91dHB1dFAgPSBtX291dHB1dEJ1ZmZlci5kYXRhKCk7CisgICAgb3V0cHV0UFswXSA9
IDAuMDsKKyAgICBvdXRwdXRQWzFdID0gMC4wOworI2VuZGlmCit9CisKK3ZvaWQgQmlxdWFkOjpz
ZXRMb3dwYXNzUGFyYW1zKGRvdWJsZSBjdXRvZmYsIGRvdWJsZSByZXNvbmFuY2UpCit7CisgICAg
cmVzb25hbmNlID0gc3RkOjptYXgoMC4wLCByZXNvbmFuY2UpOyAvLyBjYW4ndCBnbyBuZWdhdGl2
ZQorCisgICAgZG91YmxlIGcgPSBwb3coMTAuMCwgMC4wNSAqIHJlc29uYW5jZSk7CisgICAgZG91
YmxlIGQgPSBzcXJ0KCg0LjAgLSBzcXJ0KDE2LjAgLSAxNi4wIC8gKGcgKiBnKSkpIC8gMi4wKTsK
KworICAgIC8vIENvbXB1dGUgYmlxdWFkIGNvZWZmaWNpZW50cyBmb3IgbG9wYXNzIGZpbHRlcgor
ICAgIGRvdWJsZSB0aGV0YSA9IE1fUEkgKiBjdXRvZmY7CisgICAgZG91YmxlIHNuID0gMC41ICog
ZCAqIHNpbih0aGV0YSk7CisgICAgZG91YmxlIGJldGEgPSAwLjUgKiAoMS4wIC0gc24pIC8gKDEu
MCArIHNuKTsKKyAgICBkb3VibGUgZ2FtbWEgPSAoMC41ICsgYmV0YSkgKiBjb3ModGhldGEpOwor
ICAgIGRvdWJsZSBhbHBoYSA9IDAuMjUgKiAoMC41ICsgYmV0YSAtIGdhbW1hKTsKKworICAgIG1f
YTAgPSAyLjAgKiBhbHBoYTsKKyAgICBtX2ExID0gMi4wICogMi4wKmFscGhhOworICAgIG1fYTIg
PSAyLjAgKiBhbHBoYTsKKyAgICBtX2IxID0gMi4wICogLWdhbW1hOworICAgIG1fYjIgPSAyLjAg
KiBiZXRhOworfQorCit2b2lkIEJpcXVhZDo6c2V0SGlnaHBhc3NQYXJhbXMoZG91YmxlIGN1dG9m
ZiwgZG91YmxlIHJlc29uYW5jZSkKK3sKKyAgICByZXNvbmFuY2UgPSBzdGQ6Om1heCgwLjAsIHJl
c29uYW5jZSk7IC8vIGNhbid0IGdvIG5lZ2F0aXZlCisKKyAgICBkb3VibGUgZyA9IHBvdygxMC4w
LCAwLjA1ICogcmVzb25hbmNlKTsKKyAgICBkb3VibGUgZCA9IHNxcnQoKDQuMCAtIHNxcnQoMTYu
MCAtIDE2LjAgLyAoZyAqIGcpKSkgLyAyLjApOworCisgICAgLy8gQ29tcHV0ZSBiaXF1YWQgY29l
ZmZpY2llbnRzIGZvciBoaWdocGFzcyBmaWx0ZXIKKyAgICBkb3VibGUgdGhldGEgPSBNX1BJICog
Y3V0b2ZmOworICAgIGRvdWJsZSBzbiA9IDAuNSAqIGQgKiBzaW4odGhldGEpOworICAgIGRvdWJs
ZSBiZXRhID0gMC41ICogKDEuMCAtIHNuKSAvICgxLjAgKyBzbik7CisgICAgZG91YmxlIGdhbW1h
ID0gKDAuNSArIGJldGEpICogY29zKHRoZXRhKTsKKyAgICBkb3VibGUgYWxwaGEgPSAwLjI1ICog
KDAuNSArIGJldGEgKyBnYW1tYSk7CisKKyAgICBtX2EwID0gMi4wICogYWxwaGE7CisgICAgbV9h
MSA9IDIuMCAqIC0yLjAqYWxwaGE7CisgICAgbV9hMiA9IDIuMCAqIGFscGhhOworICAgIG1fYjEg
PSAyLjAgKiAtZ2FtbWE7CisgICAgbV9iMiA9IDIuMCAqIGJldGE7Cit9CisKK3ZvaWQgQmlxdWFk
OjpzZXRMb3dTaGVsZlBhcmFtcyhkb3VibGUgY3V0b2ZmLCBkb3VibGUgZGJHYWluKQoreworICAg
IGRvdWJsZSB0aGV0YSA9IE1fUEkgKiBjdXRvZmY7CisKKyAgICBkb3VibGUgQSA9IHBvdygxMC4w
LCBkYkdhaW4gLyA0MC4wKTsKKyAgICBkb3VibGUgUyA9IDEuMDsgLy8gZmlsdGVyIHNsb3BlICgx
LjAgaXMgbWF4IHZhbHVlKQorICAgIGRvdWJsZSBhbHBoYSA9IDAuNSAqIHNpbih0aGV0YSkgKiBz
cXJ0KChBICsgMS4wIC8gQSkgKiAoMS4wIC8gUyAtIDEuMCkgKyAyLjApOworCisgICAgZG91Ymxl
IGsgPSBjb3ModGhldGEpOworICAgIGRvdWJsZSBrMiA9IDIuMCAqIHNxcnQoQSkgKiBhbHBoYTsK
KworICAgIGRvdWJsZSBiMCA9IEEgKiAoKEEgKyAxLjApIC0gKEEgLSAxLjApICogayArIGsyKTsK
KyAgICBkb3VibGUgYjEgPSAyLjAgKiBBICogKChBIC0gMS4wKSAtIChBICsgMS4wKSAqIGspOwor
ICAgIGRvdWJsZSBiMiA9IEEgKiAoKEEgKyAxLjApIC0gKEEgLSAxLjApICogayAtIGsyKTsKKyAg
ICBkb3VibGUgYTAgPSAoQSArIDEuMCkgKyAoQSAtIDEuMCkgKiBrICsgazI7CisgICAgZG91Ymxl
IGExID0gLTIuMCAqICgoQSAtIDEuMCkgKyAoQSArIDEuMCkgKiBrKTsKKyAgICBkb3VibGUgYTIg
PSAoQSArIDEuMCkgKyAoQSAtIDEuMCkgKiBrIC0gazI7CisKKyAgICBkb3VibGUgYTBJbnZlcnNl
ID0gMS4wIC8gYTA7CisgICAgCisgICAgbV9hMCA9IGIwICogYTBJbnZlcnNlOworICAgIG1fYTEg
PSBiMSAqIGEwSW52ZXJzZTsKKyAgICBtX2EyID0gYjIgKiBhMEludmVyc2U7CisgICAgbV9iMSA9
IGExICogYTBJbnZlcnNlOworICAgIG1fYjIgPSBhMiAqIGEwSW52ZXJzZTsKK30KKwordm9pZCBC
aXF1YWQ6OnNldFplcm9Qb2xlUGFpcnMoY29uc3QgQ29tcGxleCAmemVybywgY29uc3QgQ29tcGxl
eCAmcG9sZSkKK3sKKyAgICBtX2EwID0gMS4wOworICAgIG1fYTEgPSAtMi4wICogemVyby5yZWFs
KCk7CisKKyAgICBkb3VibGUgemVyb01hZyA9IGFicyh6ZXJvKTsKKyAgICBtX2EyID0gemVyb01h
ZyAqIHplcm9NYWc7CisKKyAgICBtX2IxID0gLTIuMCAqIHBvbGUucmVhbCgpOworCisgICAgZG91
YmxlIHBvbGVNYWcgPSBhYnMocG9sZSk7CisgICAgbV9iMiA9IHBvbGVNYWcgKiBwb2xlTWFnOwor
fQorCit2b2lkIEJpcXVhZDo6c2V0QWxscGFzc1BvbGUoY29uc3QgQ29tcGxleCAmcG9sZSkKK3sK
KyAgICBDb21wbGV4IHplcm8gPSBDb21wbGV4KDEuMCwgMC4wKSAvIHBvbGU7CisgICAgc2V0WmVy
b1BvbGVQYWlycyh6ZXJvLCBwb2xlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
QmlxdWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJpcXVhZF9oCisjZGVmaW5lIEJpcXVhZF9o
CisKKyNpbmNsdWRlICJBdWRpb0FycmF5LmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5j
bHVkZSA8d3RmL0NvbXBsZXguaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyAKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gQSBiYXNpYyBiaXF1YWQgKHR3by16ZXJvIC8gdHdvLXBvbGUg
ZGlnaXRhbCBmaWx0ZXIpCisvLworLy8gSXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gYSBudW1iZXIg
b2YgY29tbW9uIGFuZCB2ZXJ5IHVzZWZ1bCBmaWx0ZXJzOgorLy8gICAgbG93cGFzcywgaGlnaHBh
c3MsIHNoZWx2aW5nLCBwYXJhbWV0ZXJpYywgbm90Y2gsIGFsbHBhc3MsIC4uLgorCitjbGFzcyBC
aXF1YWQgeworcHVibGljOiAgIAorICAgIEJpcXVhZCgpOworICAgIHZpcnR1YWwgfkJpcXVhZCgp
IHsgfQorCisgICAgdm9pZCBwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VQLCBmbG9hdCogZGVz
dFAsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOworCisgICAgLy8gY3V0b2ZmIGlzIDAtMSBub3Jt
YWxpemVkLCByZXNvbmFuY2UgaXMgaW4gZEIgPj0gMC4wCisgICAgdm9pZCBzZXRMb3dwYXNzUGFy
YW1zKGRvdWJsZSBjdXRvZmYsIGRvdWJsZSByZXNvbmFuY2UpOworICAgIHZvaWQgc2V0SGlnaHBh
c3NQYXJhbXMoZG91YmxlIGN1dG9mZiwgZG91YmxlIHJlc29uYW5jZSk7CisKKyAgICB2b2lkIHNl
dExvd1NoZWxmUGFyYW1zKGRvdWJsZSBjdXRvZmYsIGRvdWJsZSBkYkdhaW4pOworCisgICAgLy8g
RklYTUU6IG5lZWQgdG8gaW1wbGVtZW50IGEgZmV3IG1vcmUgY29tbW9uIGZpbHRlcnMKKyAgICAv
LyB2b2lkIHNldEhpZ2hTaGVsZlBhcmFtcyhkb3VibGUgY3V0b2ZmLCBkb3VibGUgZGJHYWluKTsK
KyAgICAvLyB2b2lkIHNldFBhcmFtZXRyaWNFUVBhcmFtcyhkb3VibGUgY3V0b2ZmLCBkb3VibGUg
cmVzb25hbmNlKTsKKworICAgIC8vIFNldCB0aGUgYmlxdWFkIGNvZWZmaWNpZW50cyBnaXZlbiBh
IHNpbmdsZSB6ZXJvIChvdGhlciB6ZXJvIHdpbGwgYmUgY29uanVnYXRlKQorICAgIC8vIGFuZCBh
IHNpbmdsZSBwb2xlIChvdGhlciBwb2xlIHdpbGwgYmUgY29uanVnYXRlKQorICAgIHZvaWQgc2V0
WmVyb1BvbGVQYWlycyhjb25zdCBDb21wbGV4JiB6ZXJvLCBjb25zdCBDb21wbGV4JiBwb2xlKTsK
KworICAgIC8vIFNldCB0aGUgYmlxdWFkIGNvZWZmaWNpZW50cyBnaXZlbiBhIHNpbmdsZSBwb2xl
IChvdGhlciBwb2xlIHdpbGwgYmUgY29uanVnYXRlKQorICAgIC8vIChUaGUgemVyb2VzIHdpbGwg
YmUgdGhlIGludmVyc2Ugb2YgdGhlIHBvbGVzKQorICAgIHZvaWQgc2V0QWxscGFzc1BvbGUoY29u
c3QgQ29tcGxleCYgcG9sZSk7CisKKyAgICAvLyBSZXNldHMgZmlsdGVyIHN0YXRlCisgICAgdm9p
ZCByZXNldCgpOworCitwcml2YXRlOgorICAgIC8vIEZpbHRlciBjb2VmZmljaWVudHMKKyAgICBk
b3VibGUgbV9hMDsKKyAgICBkb3VibGUgbV9hMTsKKyAgICBkb3VibGUgbV9hMjsKKyAgICBkb3Vi
bGUgbV9iMTsKKyAgICBkb3VibGUgbV9iMjsKKworICAgIGRvdWJsZSBtX2c7CisKKyAgICAvLyBG
aWx0ZXIgbWVtb3J5CisgICAgZG91YmxlIG1feDE7IC8vIGlucHV0IGRlbGF5ZWQgYnkgMSBzYW1w
bGUKKyAgICBkb3VibGUgbV94MjsgLy8gaW5wdXQgZGVsYXllZCBieSAyIHNhbXBsZXMKKyAgICBk
b3VibGUgbV95MTsgLy8gb3V0cHV0IGRlbGF5ZWQgYnkgMSBzYW1wbGUKKyAgICBkb3VibGUgbV95
MjsgLy8gb3V0cHV0IGRlbGF5ZWQgYnkgMiBzYW1wbGVzCisKKyNpZiBPUyhEQVJXSU4pCisgICAg
dm9pZCBwcm9jZXNzRmFzdChjb25zdCBmbG9hdCogc291cmNlUCwgZmxvYXQqIGRlc3RQLCBzaXpl
X3QgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2b2lkIHByb2Nlc3NTbGljZUZhc3QoZG91YmxlKiBz
b3VyY2VQLCBkb3VibGUqIGRlc3RQLCBkb3VibGUqIGNvZWZmaWNpZW50c1AsIHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpOworCisgICAgQXVkaW9Eb3VibGVBcnJheSBtX2lucHV0QnVmZmVyOworICAg
IEF1ZGlvRG91YmxlQXJyYXkgbV9vdXRwdXRCdWZmZXI7CisjZW5kaWYKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJpcXVhZF9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>