<?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>47941</bug_id>
          
          <creation_ts>2010-10-19 15:47:19 -0700</creation_ts>
          <short_desc>Add ConvolverNode files</short_desc>
          <delta_ts>2010-11-02 18:00:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jamesr</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>296478</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-10-19 15:47:19 -0700</bug_when>
    <thetext>Add ConvolverNode files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296480</commentid>
    <comment_count>1</comment_count>
      <attachid>71214</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-10-19 15:49:37 -0700</bug_when>
    <thetext>Created attachment 71214
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296493</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-10-19 16:04:49 -0700</bug_when>
    <thetext>This is the implementation for ConvolverNode as described in the web audio specification:
http://chromium.googlecode.com/svn/trunk/samples/audio/specification/specification.html#ConvolverNode-section</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303145</commentid>
    <comment_count>3</comment_count>
      <attachid>71214</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-01 18:35:36 -0700</bug_when>
    <thetext>Comment on attachment 71214
Patch

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

Overall the code looks okay though I have one high-level comment. r- only for the lack of an assertion in process().

&gt; WebCore/webaudio/ConvolverNode.cpp:62
&gt; +void ConvolverNode::process(size_t framesToProcess)

Please add an assertion about being on the audio thread in this method.

&gt; WebCore/webaudio/ConvolverNode.cpp:133
&gt; +    OwnPtr&lt;Reverb&gt; reverb = adoptPtr(new Reverb(&amp;bufferBus, AudioNode::ProcessingSizeInFrames, MaxFFTSize, 2, true));

It is really hard just by looking at the code to prove to oneself that passing this pointer to the temporary AudioBus is safe. The Reverb and ReverbConvolver classes reference the AudioChannels in the AudioBus and then the ReverbConvolver seems to store a persistent pointer to the AudioChannel&apos;s data. Maybe I don&apos;t understand the lifetimes of these classes and I necessarily leave this to your discretion, but I would suggest rethinking how these objects are maintained, possibly by using reference counting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303152</commentid>
    <comment_count>4</comment_count>
      <attachid>71214</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-01 18:47:05 -0700</bug_when>
    <thetext>Comment on attachment 71214
Patch

After looking back through some of the other node implementations and noting that they do not have assertions about process() being called on the audio thread, I&apos;m changing this to r+. My comment about the pointer to the AudioBus temporary variable still stands, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303566</commentid>
    <comment_count>5</comment_count>
      <attachid>72715</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-11-02 12:43:47 -0700</bug_when>
    <thetext>Created attachment 72715
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303571</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-11-02 12:46:13 -0700</bug_when>
    <thetext>This was previously R+.  I simply added a comment about the memory use for the AudioBus passed into the Reverb constructor.  It is memory only used in the constructor, and no persistent pointers are kept to it in that class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303572</commentid>
    <comment_count>7</comment_count>
      <attachid>72715</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-02 12:47:52 -0700</bug_when>
    <thetext>Comment on attachment 72715
Patch

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303829</commentid>
    <comment_count>8</comment_count>
      <attachid>72715</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-02 18:00:31 -0700</bug_when>
    <thetext>Comment on attachment 72715
Patch

Clearing flags on attachment: 72715

Committed r71195: &lt;http://trac.webkit.org/changeset/71195&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303830</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-02 18:00:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71214</attachid>
            <date>2010-10-19 15:49:37 -0700</date>
            <delta_ts>2010-11-02 12:43:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47941-20101019154936.patch</filename>
            <type>text/plain</type>
            <size>11047</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDA5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMTAtMTkgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgQ29udm9sdmVyTm9kZSBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDc5NDEKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8g
QVBJIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiB3ZWJhdWRpby9Db252b2x2
ZXJOb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpDb252
b2x2ZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6On5Db252b2x2ZXJO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6OnByb2Nlc3MpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udm9sdmVyTm9kZTo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dm9sdmVyTm9kZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2Rl
Ojp1bmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udm9sdmVyTm9kZTo6c2V0QnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6OmJ1ZmZlcik6CisgICAgICAg
ICogd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bnZvbHZlck5vZGU6OmNyZWF0ZSk6CisgICAgICAgICogd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5p
ZGw6IEFkZGVkLgorCiAyMDEwLTEwLTE5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYkNv
cmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93ZWJh
dWRpby9Db252b2x2ZXJOb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd2ViYXVkaW8v
Q29udm9sdmVyTm9kZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2lu
Y2x1ZGUgIkNvbnZvbHZlck5vZGUuaCIKKworI2luY2x1ZGUgIkF1ZGlvQnVmZmVyLmgiCisjaW5j
bHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKKyNp
bmNsdWRlICJSZXZlcmIuaCIKKworLy8gTm90ZSBhYm91dCBlbXBpcmljYWwgdHVuaW5nOgorLy8g
VGhlIG1heGltdW0gRkZUIHNpemUgYWZmZWN0cyByZXZlcmIgcGVyZm9ybWFuY2UgYW5kIGFjY3Vy
YWN5LgorLy8gSWYgdGhlIHJldmVyYiBpcyBzaW5nbGUtdGhyZWFkZWQgYW5kIHByb2Nlc3NlcyBl
bnRpcmVseSBpbiB0aGUgcmVhbC10aW1lIGF1ZGlvIHRocmVhZCwKKy8vIGl0J3MgaW1wb3J0YW50
IG5vdCB0byBtYWtlIHRoaXMgdG9vIGhpZ2guICBJbiB0aGlzIGNhc2UgODE5MiBpcyBhIGdvb2Qg
dmFsdWUuCisvLyBCdXQsIHRoZSBSZXZlcmIgb2JqZWN0IGlzIG11bHRpLXRocmVhZGVkLCBzbyB3
ZSB3YW50IHRoaXMgYXMgaGlnaCBhcyBwb3NzaWJsZSB3aXRob3V0IGxvc2luZyB0b28gbXVjaCBh
Y2N1cmFjeS4KKy8vIFZlcnkgbGFyZ2UgRkZUcyB3aWxsIGhhdmUgd29yc2UgcGhhc2UgZXJyb3Jz
LiAgR2l2ZW4gdGhlc2UgY29uc3RyYWludHMgMTYzODQgaXMgYSBnb29kIGNvbXByb21pc2UuCitj
b25zdCBzaXplX3QgTWF4RkZUU2l6ZSA9IDE2Mzg0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0NvbnZvbHZlck5vZGU6OkNvbnZvbHZlck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBkb3Vi
bGUgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQorewor
ICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOworICAgIGFk
ZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDIpKSk7CisgICAgCisg
ICAgc2V0VHlwZShOb2RlVHlwZUNvbnZvbHZlcik7CisgICAgCisgICAgaW5pdGlhbGl6ZSgpOwor
fQorCitDb252b2x2ZXJOb2RlOjp+Q29udm9sdmVyTm9kZSgpCit7CisgICAgdW5pbml0aWFsaXpl
KCk7Cit9CisKK3ZvaWQgQ29udm9sdmVyTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9j
ZXNzKQoreworICAgIEF1ZGlvQnVzKiBvdXRwdXRCdXMgPSBvdXRwdXQoMCktPmJ1cygpOworICAg
IEFTU0VSVChvdXRwdXRCdXMpOworCisgICAgLy8gU3luY2hyb25pemUgd2l0aCBwb3NzaWJsZSBk
eW5hbWljIGNoYW5nZXMgdG8gdGhlIGltcHVsc2UgcmVzcG9uc2UuCisgICAgaWYgKG1fcHJvY2Vz
c0xvY2sudHJ5TG9jaygpKSB7CisgICAgICAgIGlmICghaXNJbml0aWFsaXplZCgpIHx8ICFtX3Jl
dmVyYi5nZXQoKSkKKyAgICAgICAgICAgIG91dHB1dEJ1cy0+emVybygpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIC8vIFByb2Nlc3MgdXNpbmcgdGhlIGNvbnZvbHV0aW9uIGVuZ2luZS4K
KyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG5v
dGhpbmcgaXMgY29ubmVjdGVkIHRvIHRoZSBpbnB1dCwgaW4gd2hpY2ggY2FzZSB3ZSdsbCBqdXN0
IGZlZWQgc2lsZW5jZSBpbnRvIHRoZSBjb252b2x2ZXIuCisgICAgICAgICAgICAvLyBGSVhNRTog
IElmIHdlIHdhbnRlZCB0byBnZXQgZmFuY3kgd2UgY291bGQgdHJ5IHRvIGZhY3RvciBpbiB0aGUg
J3RhaWwgdGltZScgYW5kIHN0b3AgcHJvY2Vzc2luZyBvbmNlIHRoZSB0YWlsIGRpZXMgZG93biBp
ZgorICAgICAgICAgICAgLy8gd2Uga2VlcCBnZXR0aW5nIGZlZCBzaWxlbmNlLgorICAgICAgICAg
ICAgbV9yZXZlcmItPnByb2Nlc3MoaW5wdXQoMCktPmJ1cygpLCBvdXRwdXRCdXMsIGZyYW1lc1Rv
UHJvY2Vzcyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fcHJvY2Vzc0xvY2sudW5s
b2NrKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVG9vIGJhZCAtIHRoZSB0cnlMb2NrKCkg
ZmFpbGVkLiAgV2UgbXVzdCBiZSBpbiB0aGUgbWlkZGxlIG9mIHNldHRpbmcgYSBuZXcgaW1wdWxz
ZSByZXNwb25zZS4KKyAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CisgICAgfQorfQorCit2b2lk
IENvbnZvbHZlck5vZGU6OnJlc2V0KCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9wcm9j
ZXNzTG9jayk7CisgICAgaWYgKG1fcmV2ZXJiLmdldCgpKQorICAgICAgICBtX3JldmVyYi0+cmVz
ZXQoKTsKK30KKwordm9pZCBDb252b2x2ZXJOb2RlOjppbml0aWFsaXplKCkKK3sKKyAgICBpZiAo
aXNJbml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIEF1ZGlvTm9k
ZTo6aW5pdGlhbGl6ZSgpOworfQorCit2b2lkIENvbnZvbHZlck5vZGU6OnVuaW5pdGlhbGl6ZSgp
Cit7CisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cmV2ZXJiLmNsZWFyKCk7CisgICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKTsKK30KKwordm9p
ZCBDb252b2x2ZXJOb2RlOjpzZXRCdWZmZXIoQXVkaW9CdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIAorICAgIEFTU0VSVChidWZmZXIpOworICAgIGlm
ICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5u
ZWxzID0gYnVmZmVyLT5udW1iZXJPZkNoYW5uZWxzKCk7CisgICAgc2l6ZV90IGJ1ZmZlckxlbmd0
aCA9IGJ1ZmZlci0+bGVuZ3RoKCk7CisKKyAgICAvLyBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlv
biBzdXBwb3J0cyB1cCB0byBmb3VyIGNoYW5uZWwgaW1wdWxzZSByZXNwb25zZXMsIHdoaWNoIGFy
ZSBpbnRlcnByZXRlZCBhcyB0cnVlLXN0ZXJlbyAoc2VlIFJldmVyYiBjbGFzcykuCisgICAgYm9v
bCBpc0J1ZmZlckdvb2QgPSBudW1iZXJPZkNoYW5uZWxzID4gMCAmJiBudW1iZXJPZkNoYW5uZWxz
IDw9IDQgJiYgYnVmZmVyTGVuZ3RoOworICAgIEFTU0VSVChpc0J1ZmZlckdvb2QpOworICAgIGlm
ICghaXNCdWZmZXJHb29kKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXcmFwIHRoZSBBdWRp
b0J1ZmZlciBieSBhbiBBdWRpb0J1cy4gSXQncyBhbiBlZmZpY2llbnQgcG9pbnRlciBzZXQgYW5k
IG5vdCBhIG1lbWNweSgpLgorICAgIEF1ZGlvQnVzIGJ1ZmZlckJ1cyhudW1iZXJPZkNoYW5uZWxz
LCBidWZmZXJMZW5ndGgsIGZhbHNlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
YmVyT2ZDaGFubmVsczsgKytpKQorICAgICAgICBidWZmZXJCdXMuc2V0Q2hhbm5lbE1lbW9yeShp
LCBidWZmZXItPmdldENoYW5uZWxEYXRhKGkpLT5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CisgICAg
CisgICAgLy8gQ3JlYXRlIHRoZSByZXZlcmIgd2l0aCB0aGUgZ2l2ZW4gaW1wdWxzZSByZXNwb25z
ZS4KKyAgICBPd25QdHI8UmV2ZXJiPiByZXZlcmIgPSBhZG9wdFB0cihuZXcgUmV2ZXJiKCZidWZm
ZXJCdXMsIEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcywgTWF4RkZUU2l6ZSwgMiwg
dHJ1ZSkpOworCisgICAgeworICAgICAgICAvLyBTeW5jaHJvbml6ZSB3aXRoIHByb2Nlc3MoKS4K
KyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcHJvY2Vzc0xvY2spOworICAgICAgICBtX3Jl
dmVyYiA9IHJldmVyYi5yZWxlYXNlKCk7CisgICAgICAgIG1fYnVmZmVyID0gYnVmZmVyOworICAg
IH0KK30KKworQXVkaW9CdWZmZXIqIENvbnZvbHZlck5vZGU6OmJ1ZmZlcigpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9idWZmZXIuZ2V0KCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4
OiBXZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd2ViYXVk
aW8vQ29udm9sdmVyTm9kZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBDb252b2x2ZXJOb2RlX2gKKyNkZWZpbmUgQ29udm9sdmVyTm9kZV9oCisK
KyNpbmNsdWRlICJBdWRpb05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1ZmZlcjsKK2NsYXNzIFJldmVyYjsKKyAgICAKK2Ns
YXNzIENvbnZvbHZlck5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDb252b2x2ZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0
LCBkb3VibGUgc2FtcGxlUmF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q29udm9sdmVyTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAgCisgICAgfQorICAgIAor
ICAgIHZpcnR1YWwgfkNvbnZvbHZlck5vZGUoKTsKKyAgICAKKyAgICAvLyBBdWRpb05vZGUKKyAg
ICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVzZXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZp
cnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKKworICAgIC8vIEltcHVsc2UgcmVzcG9uc2VzCisg
ICAgdm9pZCBzZXRCdWZmZXIoQXVkaW9CdWZmZXIqKTsKKyAgICBBdWRpb0J1ZmZlciogYnVmZmVy
KCk7CisKK3ByaXZhdGU6CisgICAgQ29udm9sdmVyTm9kZShBdWRpb0NvbnRleHQqLCBkb3VibGUg
c2FtcGxlUmF0ZSk7CisKKyAgICBPd25QdHI8UmV2ZXJiPiBtX3JldmVyYjsKKyAgICBSZWZQdHI8
QXVkaW9CdWZmZXI+IG1fYnVmZmVyOworCisgICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgZHluYW1p
YyBjaGFuZ2VzIHRvIHRoZSBjb252b2x1dGlvbiBpbXB1bHNlIHJlc3BvbnNlIHdpdGggcHJvY2Vz
cygpLgorICAgIG11dGFibGUgTXV0ZXggbV9wcm9jZXNzTG9jazsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENvbnZvbHZlck5vZGVfaApJbmRleDogV2ViQ29yZS93
ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dlYmF1ZGlv
L0NvbnZvbHZlck5vZGUuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93ZWJhdWRpby9Db252
b2x2ZXJOb2RlLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K21vZHVsZSBhdWRpbyB7CisgICAgLy8gQSBsaW5lYXIgY29udm9sdXRpb24gZWZmZWN0CisgICAg
aW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAorICAgICAgICBHZW5l
cmF0ZVRvSlMKKyAgICBdIENvbnZvbHZlck5vZGUgOiBBdWRpb05vZGUgeworICAgICAgICBhdHRy
aWJ1dGUgW0N1c3RvbV0gQXVkaW9CdWZmZXIgYnVmZmVyOworICAgIH07Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72715</attachid>
            <date>2010-11-02 12:43:47 -0700</date>
            <delta_ts>2010-11-02 18:00:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47941-20101102124346.patch</filename>
            <type>text/plain</type>
            <size>11167</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTE1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMTEtMDIgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgQ29udm9sdmVyTm9kZSBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDc5NDEKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8g
QVBJIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiB3ZWJhdWRpby9Db252b2x2
ZXJOb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpDb252
b2x2ZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6On5Db252b2x2ZXJO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6OnByb2Nlc3MpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udm9sdmVyTm9kZTo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dm9sdmVyTm9kZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2Rl
Ojp1bmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udm9sdmVyTm9kZTo6c2V0QnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6OmJ1ZmZlcik6CisgICAgICAg
ICogd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bnZvbHZlck5vZGU6OmNyZWF0ZSk6CisgICAgICAgICogd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5p
ZGw6IEFkZGVkLgorCiAyMDEwLTExLTAyICBJbHlhIFNoZXJtYW4gIDxpc2hlcm1hbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJbmRleDogV2ViQ29y
ZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dlYmF1
ZGlvL0NvbnZvbHZlck5vZGUuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93ZWJhdWRpby9D
b252b2x2ZXJOb2RlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5j
bHVkZSAiQ29udm9sdmVyTm9kZS5oIgorCisjaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKKyNpbmNs
dWRlICJBdWRpb05vZGVJbnB1dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgorI2lu
Y2x1ZGUgIlJldmVyYi5oIgorCisvLyBOb3RlIGFib3V0IGVtcGlyaWNhbCB0dW5pbmc6CisvLyBU
aGUgbWF4aW11bSBGRlQgc2l6ZSBhZmZlY3RzIHJldmVyYiBwZXJmb3JtYW5jZSBhbmQgYWNjdXJh
Y3kuCisvLyBJZiB0aGUgcmV2ZXJiIGlzIHNpbmdsZS10aHJlYWRlZCBhbmQgcHJvY2Vzc2VzIGVu
dGlyZWx5IGluIHRoZSByZWFsLXRpbWUgYXVkaW8gdGhyZWFkLAorLy8gaXQncyBpbXBvcnRhbnQg
bm90IHRvIG1ha2UgdGhpcyB0b28gaGlnaC4gIEluIHRoaXMgY2FzZSA4MTkyIGlzIGEgZ29vZCB2
YWx1ZS4KKy8vIEJ1dCwgdGhlIFJldmVyYiBvYmplY3QgaXMgbXVsdGktdGhyZWFkZWQsIHNvIHdl
IHdhbnQgdGhpcyBhcyBoaWdoIGFzIHBvc3NpYmxlIHdpdGhvdXQgbG9zaW5nIHRvbyBtdWNoIGFj
Y3VyYWN5LgorLy8gVmVyeSBsYXJnZSBGRlRzIHdpbGwgaGF2ZSB3b3JzZSBwaGFzZSBlcnJvcnMu
ICBHaXZlbiB0aGVzZSBjb25zdHJhaW50cyAxNjM4NCBpcyBhIGdvb2QgY29tcHJvbWlzZS4KK2Nv
bnN0IHNpemVfdCBNYXhGRlRTaXplID0gMTYzODQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Q29udm9sdmVyTm9kZTo6Q29udm9sdmVyTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGRvdWJs
ZSBzYW1wbGVSYXRlKQorICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCit7Cisg
ICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7CisgICAgYWRk
T3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKKyAgICAKKyAg
ICBzZXRUeXBlKE5vZGVUeXBlQ29udm9sdmVyKTsKKyAgICAKKyAgICBpbml0aWFsaXplKCk7Cit9
CisKK0NvbnZvbHZlck5vZGU6On5Db252b2x2ZXJOb2RlKCkKK3sKKyAgICB1bmluaXRpYWxpemUo
KTsKK30KKwordm9pZCBDb252b2x2ZXJOb2RlOjpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nl
c3MpCit7CisgICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7CisgICAg
QVNTRVJUKG91dHB1dEJ1cyk7CisKKyAgICAvLyBTeW5jaHJvbml6ZSB3aXRoIHBvc3NpYmxlIGR5
bmFtaWMgY2hhbmdlcyB0byB0aGUgaW1wdWxzZSByZXNwb25zZS4KKyAgICBpZiAobV9wcm9jZXNz
TG9jay50cnlMb2NrKCkpIHsKKyAgICAgICAgaWYgKCFpc0luaXRpYWxpemVkKCkgfHwgIW1fcmV2
ZXJiLmdldCgpKQorICAgICAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgLy8gUHJvY2VzcyB1c2luZyB0aGUgY29udm9sdXRpb24gZW5naW5lLgor
ICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGNhbiBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbm90
aGluZyBpcyBjb25uZWN0ZWQgdG8gdGhlIGlucHV0LCBpbiB3aGljaCBjYXNlIHdlJ2xsIGp1c3Qg
ZmVlZCBzaWxlbmNlIGludG8gdGhlIGNvbnZvbHZlci4KKyAgICAgICAgICAgIC8vIEZJWE1FOiAg
SWYgd2Ugd2FudGVkIHRvIGdldCBmYW5jeSB3ZSBjb3VsZCB0cnkgdG8gZmFjdG9yIGluIHRoZSAn
dGFpbCB0aW1lJyBhbmQgc3RvcCBwcm9jZXNzaW5nIG9uY2UgdGhlIHRhaWwgZGllcyBkb3duIGlm
CisgICAgICAgICAgICAvLyB3ZSBrZWVwIGdldHRpbmcgZmVkIHNpbGVuY2UuCisgICAgICAgICAg
ICBtX3JldmVyYi0+cHJvY2VzcyhpbnB1dCgwKS0+YnVzKCksIG91dHB1dEJ1cywgZnJhbWVzVG9Q
cm9jZXNzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9wcm9jZXNzTG9jay51bmxv
Y2soKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUb28gYmFkIC0gdGhlIHRyeUxvY2soKSBm
YWlsZWQuICBXZSBtdXN0IGJlIGluIHRoZSBtaWRkbGUgb2Ygc2V0dGluZyBhIG5ldyBpbXB1bHNl
IHJlc3BvbnNlLgorICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKKyAgICB9Cit9CisKK3ZvaWQg
Q29udm9sdmVyTm9kZTo6cmVzZXQoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Byb2Nl
c3NMb2NrKTsKKyAgICBpZiAobV9yZXZlcmIuZ2V0KCkpCisgICAgICAgIG1fcmV2ZXJiLT5yZXNl
dCgpOworfQorCit2b2lkIENvbnZvbHZlck5vZGU6OmluaXRpYWxpemUoKQoreworICAgIGlmIChp
c0luaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgQXVkaW9Ob2Rl
Ojppbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgQ29udm9sdmVyTm9kZTo6dW5pbml0aWFsaXplKCkK
K3sKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9y
ZXZlcmIuY2xlYXIoKTsKKyAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOworfQorCit2b2lk
IENvbnZvbHZlck5vZGU6OnNldEJ1ZmZlcihBdWRpb0J1ZmZlciogYnVmZmVyKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgCisgICAgQVNTRVJUKGJ1ZmZlcik7CisgICAgaWYg
KCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5l
bHMgPSBidWZmZXItPm51bWJlck9mQ2hhbm5lbHMoKTsKKyAgICBzaXplX3QgYnVmZmVyTGVuZ3Ro
ID0gYnVmZmVyLT5sZW5ndGgoKTsKKworICAgIC8vIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u
IHN1cHBvcnRzIHVwIHRvIGZvdXIgY2hhbm5lbCBpbXB1bHNlIHJlc3BvbnNlcywgd2hpY2ggYXJl
IGludGVycHJldGVkIGFzIHRydWUtc3RlcmVvIChzZWUgUmV2ZXJiIGNsYXNzKS4KKyAgICBib29s
IGlzQnVmZmVyR29vZCA9IG51bWJlck9mQ2hhbm5lbHMgPiAwICYmIG51bWJlck9mQ2hhbm5lbHMg
PD0gNCAmJiBidWZmZXJMZW5ndGg7CisgICAgQVNTRVJUKGlzQnVmZmVyR29vZCk7CisgICAgaWYg
KCFpc0J1ZmZlckdvb2QpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdyYXAgdGhlIEF1ZGlv
QnVmZmVyIGJ5IGFuIEF1ZGlvQnVzLiBJdCdzIGFuIGVmZmljaWVudCBwb2ludGVyIHNldCBhbmQg
bm90IGEgbWVtY3B5KCkuCisgICAgLy8gVGhpcyBtZW1vcnkgaXMgc2ltcGx5IHVzZWQgaW4gdGhl
IFJldmVyYiBjb25zdHJ1Y3RvciBhbmQgbm8gcmVmZXJlbmNlIHRvIGl0IGlzIGtlcHQgZm9yIGxh
dGVyIHVzZSBpbiB0aGF0IGNsYXNzLgorICAgIEF1ZGlvQnVzIGJ1ZmZlckJ1cyhudW1iZXJPZkNo
YW5uZWxzLCBidWZmZXJMZW5ndGgsIGZhbHNlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKQorICAgICAgICBidWZmZXJCdXMuc2V0Q2hhbm5lbE1l
bW9yeShpLCBidWZmZXItPmdldENoYW5uZWxEYXRhKGkpLT5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7
CisgICAgCisgICAgLy8gQ3JlYXRlIHRoZSByZXZlcmIgd2l0aCB0aGUgZ2l2ZW4gaW1wdWxzZSBy
ZXNwb25zZS4KKyAgICBPd25QdHI8UmV2ZXJiPiByZXZlcmIgPSBhZG9wdFB0cihuZXcgUmV2ZXJi
KCZidWZmZXJCdXMsIEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcywgTWF4RkZUU2l6
ZSwgMiwgdHJ1ZSkpOworCisgICAgeworICAgICAgICAvLyBTeW5jaHJvbml6ZSB3aXRoIHByb2Nl
c3MoKS4KKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcHJvY2Vzc0xvY2spOworICAgICAg
ICBtX3JldmVyYiA9IHJldmVyYi5yZWxlYXNlKCk7CisgICAgICAgIG1fYnVmZmVyID0gYnVmZmVy
OworICAgIH0KK30KKworQXVkaW9CdWZmZXIqIENvbnZvbHZlck5vZGU6OmJ1ZmZlcigpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9idWZmZXIuZ2V0KCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8p
CkluZGV4OiBXZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
d2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDb252b2x2ZXJOb2RlX2gKKyNkZWZpbmUgQ29udm9sdmVyTm9k
ZV9oCisKKyNpbmNsdWRlICJBdWRpb05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1ZmZlcjsKK2NsYXNzIFJldmVyYjsKKyAg
ICAKK2NsYXNzIENvbnZvbHZlck5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDb252b2x2ZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBj
b250ZXh0LCBkb3VibGUgc2FtcGxlUmF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ29udm9sdmVyTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAgCisgICAgfQor
ICAgIAorICAgIHZpcnR1YWwgfkNvbnZvbHZlck5vZGUoKTsKKyAgICAKKyAgICAvLyBBdWRpb05v
ZGUKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOwor
ICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKKworICAgIC8vIEltcHVsc2UgcmVzcG9u
c2VzCisgICAgdm9pZCBzZXRCdWZmZXIoQXVkaW9CdWZmZXIqKTsKKyAgICBBdWRpb0J1ZmZlciog
YnVmZmVyKCk7CisKK3ByaXZhdGU6CisgICAgQ29udm9sdmVyTm9kZShBdWRpb0NvbnRleHQqLCBk
b3VibGUgc2FtcGxlUmF0ZSk7CisKKyAgICBPd25QdHI8UmV2ZXJiPiBtX3JldmVyYjsKKyAgICBS
ZWZQdHI8QXVkaW9CdWZmZXI+IG1fYnVmZmVyOworCisgICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMg
ZHluYW1pYyBjaGFuZ2VzIHRvIHRoZSBjb252b2x1dGlvbiBpbXB1bHNlIHJlc3BvbnNlIHdpdGgg
cHJvY2VzcygpLgorICAgIG11dGFibGUgTXV0ZXggbV9wcm9jZXNzTG9jazsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENvbnZvbHZlck5vZGVfaApJbmRleDogV2Vi
Q29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dl
YmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK21vZHVsZSBhdWRpbyB7CisgICAgLy8gQSBsaW5lYXIgY29udm9sdXRpb24gZWZmZWN0
CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAorICAgICAg
ICBHZW5lcmF0ZVRvSlMKKyAgICBdIENvbnZvbHZlck5vZGUgOiBBdWRpb05vZGUgeworICAgICAg
ICBhdHRyaWJ1dGUgW0N1c3RvbV0gQXVkaW9CdWZmZXIgYnVmZmVyOworICAgIH07Cit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>