<?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>31469</bug_id>
          
          <creation_ts>2009-11-13 05:51:15 -0800</creation_ts>
          <short_desc>[Gtk] Create a TextBreakIterator implementation based on GLib (without ICU)</short_desc>
          <delta_ts>2010-02-17 14:50:26 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>
          <dependson>31468</dependson>
          <blocked>15914</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Dominik Röttsches (drott)">d-r</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>a.butenka</cc>
    
    <cc>commit-queue</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>163293</commentid>
    <comment_count>0</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-11-13 05:51:15 -0800</bug_when>
    <thetext>In order to complete bug 15914, there needs to be a TextBreakIterator implementation that only uses pango instead of ICU.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167201</commentid>
    <comment_count>1</comment_count>
      <attachid>44010</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-11-30 01:00:38 -0800</bug_when>
    <thetext>Created attachment 44010
TextBreakIterator implementation based on GLib and pango

Removing compilation switches for hybrid version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167385</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-11-30 12:50:17 -0800</bug_when>
    <thetext>Attachment 44010 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/text/gtk/TextBreakIteratorGtk.cpp:25:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
WebCore/platform/text/gtk/TextBreakIteratorGtk.cpp:67:  Missing space before ( in if(  [whitespace/parens] [5]
WebCore/platform/text/gtk/TextBreakIteratorGtk.cpp:116:  Missing space before ( in while(  [whitespace/parens] [5]
Done processing WebCore/platform/text/gtk/TextBreakIteratorGtk.cpp
Total errors found: 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167481</commentid>
    <comment_count>3</comment_count>
      <attachid>44048</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-11-30 17:18:45 -0800</bug_when>
    <thetext>Created attachment 44048
TextBreakIterator implementation based on GLib and pango 

Fixed style-bot issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167483</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-11-30 17:19:54 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44048 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169659</commentid>
    <comment_count>5</comment_count>
      <attachid>44048</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-12-08 06:47:28 -0800</bug_when>
    <thetext>Comment on attachment 44048
TextBreakIterator implementation based on GLib and pango 

It looks good to me. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169660</commentid>
    <comment_count>6</comment_count>
      <attachid>44048</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-08 06:58:59 -0800</bug_when>
    <thetext>Comment on attachment 44048
TextBreakIterator implementation based on GLib and pango 

Clearing flags on attachment: 44048

Committed r51848: &lt;http://trac.webkit.org/changeset/51848&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169661</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-08 06:59:04 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190316</commentid>
    <comment_count>8</comment_count>
    <who name="Alexander Butenko">a.butenka</who>
    <bug_when>2010-02-14 07:49:37 -0800</bug_when>
    <thetext>Reopening bug because this patch is leading webkit to freeze whyle typing text. 

Open text and type &apos;test test&apos; there. Go to the end of line and press Ctrl-Left, Ctrl-Left. You will 
get a a hang. 

Issue is quite major

Program received signal SIGINT, Interrupt.
0xb761ff74 in WebCore::textBreakPrevious(WebCore::TextBreakIterator*) ()
   from /usr/lib/libwebkit-1.0.so.2
(gdb) bt
#0  0xb761ff74 in WebCore::textBreakPrevious(WebCore::TextBreakIterator*) ()
   from /usr/lib/libwebkit-1.0.so.2
#1  0xb7467f5b in WebCore::findNextWordFromIndex(unsigned short const*, int, int, bool) () from /usr/lib/libwebkit-1.0.so.2
#2  0xb729f474 in WebCore::previousWordPositionBoundary(unsigned short const*, unsigned int, unsigned int, WebCore::BoundarySearchContextAvailability, bool&amp;)
    () from /usr/lib/libwebkit-1.0.so.2
#3  0xb72a21de in WebCore::previousBoundary(WebCore::VisiblePosition const&amp;, unsigned int (*)(unsigned short const*, unsigned int, unsigned int, WebCore::BoundarySearchContextAvailability, bool&amp;)) () from /usr/lib/libwebkit-1.0.so.2
#4  0xb72a2872 in WebCore::previousWordPosition(WebCore::VisiblePosition const&amp;) () from /usr/lib/libwebkit-1.0.so.2
#5  0xb7273d54 in WebCore::SelectionController::modifyMovingBackward(WebCore::TextGranularity) () from /usr/lib/libwebkit-1.0.so.2
#6  0xb72747b2 in WebCore::SelectionController::modifyMovingLeft(WebCore::TextGranularity) () from /usr/lib/libwebkit-1.0.so.2
#7  0xb7278784 in WebCore::SelectionController::modify(WebCore::SelectionController::EAlteration, WebCore::SelectionController::EDirection, WebCore::TextGranularity, bool) () from /usr/lib/libwebkit-1.0.so.2
#8  0xb72785c8 in WebCore::SelectionController::modify(WebCore::SelectionController::EAlteration, WebCore::SelectionController::EDirection, WebCore::TextGranularity, bool) () from /usr/lib/libwebkit-1.0.so.2
#9  0xb724e4d5 in WebCore::executeMoveWordLeft(WebCore::Frame*, WebCore::Event*, WebCore::EditorCommandSource, WebCore::String const&amp;) ()
   from /usr/lib/libwebkit-1.0.so.2
#10 0xb724dd0e in WebCore::Editor::Command::execute(WebCore::String const&amp;, WebCore::Event*) const () from /usr/lib/libwebkit-1.0.so.2
#11 0xb7251efa in WebCore::Editor::Command::execute(WebCore::Event*) const ()
   from /usr/lib/libwebkit-1.0.so.2
#12 0xb762eee1 in WebKit::EditorClient::handleKeyboardEvent(WebCore::KeyboardEvent*) () from /usr/lib/libwebkit-1.0.so.2
#13 0xb72418e9 in WebCore::Editor::handleKeyboardEvent(WebCore::KeyboardEvent*)
    () from /usr/lib/libwebkit-1.0.so.2
#14 0xb73c7cbc in WebCore::EventHandler::defaultKeyboardEventHandler(WebCore::KeyboardEvent*) () from /usr/lib/libwebkit-1.0.so.2
#15 0xb71ee44d in WebCore::Node::defaultEventHandler(WebCore::Event*) ()
   from /usr/lib/libwebkit-1.0.so.2
#16 0xb7309a24 in WebCore::HTMLTextAreaElement::defaultEventHandler(WebCore::Eve
nt*) () from /usr/lib/libwebkit-1.0.so.2
#17 0xb71ee895 in WebCore::Node::dispatchGenericEvent(WTF::PassRefPtr&lt;WebCore::Event&gt;) () from /usr/lib/libwebkit-1.0.so.2
#18 0xb71eec0b in WebCore::Node::dispatchEvent(WTF::PassRefPtr&lt;WebCore::Event&gt;)
    () from /usr/lib/libwebkit-1.0.so.2
#19 0xb71dd015 in WebCore::EventTarget::dispatchEvent(WTF::PassRefPtr&lt;WebCore::Event&gt;, int&amp;) () from /usr/lib/libwebkit-1.0.so.2
#20 0xb73c5879 in WebCore::EventHandler::keyEvent(WebCore::PlatformKeyboardEvent const&amp;) () from /usr/lib/libwebkit-1.0.so.2
#21 0xb7654b6c in webkit_web_view_key_press_event(_GtkWidget*, _GdkEventKey*)
    () from /usr/lib/libwebkit-1.0.so.2
#22 0xb7d6b1a4 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#23 0x414cd5e9 in ?? () from /usr/lib/libgobject-2.0.so.0
#24 0x414cee88 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#25 0x414e309e in ?? () from /usr/lib/libgobject-2.0.so.0
#26 0x414e45b8 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
---Type &lt;return&gt; to continue, or q &lt;return&gt; to quit---
#27 0x414e4ba6 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#28 0xb7e8747e in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#29 0xb7e9bf7a in gtk_window_propagate_key_event ()
   from /usr/lib/libgtk-x11-2.0.so.0
#30 0x0807d321 in midori_browser_key_press_event (widget=0x8461080, 
    event=0x845fe00) at ../midori/midori-browser.c:1784
#31 0xb7d6b1a4 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#32 0x414cd5e9 in ?? () from /usr/lib/libgobject-2.0.so.0
#33 0x414cef62 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#34 0x414e309e in ?? () from /usr/lib/libgobject-2.0.so.0
#35 0x414e45b8 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#36 0x414e4ba6 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#37 0xb7e8747e in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#38 0xb7d63a1b in gtk_propagate_event () from /usr/lib/libgtk-x11-2.0.so.0
#39 0xb7d64bd9 in gtk_main_do_event () from /usr/lib/libgtk-x11-2.0.so.0
#40 0xb7bee53a in ?? () from /usr/lib/libgdk-x11-2.0.so.0
#41 0x4123db38 in g_main_context_dispatch () from /lib/libglib-2.0.so.0
#42 0x412413d0 in ?? () from /lib/libglib-2.0.so.0
#43 0x4124183f in g_main_loop_run () from /lib/libglib-2.0.so.0
#44 0xb7d65149 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#45 0x08062521 in main (argc=135444520, argv=0x1) at ../midori/main.c:1953</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190321</commentid>
    <comment_count>9</comment_count>
    <who name="Alexander Butenko">a.butenka</who>
    <bug_when>2010-02-14 08:32:02 -0800</bug_when>
    <thetext>fix was partly explained in https://bugs.webkit.org/show_bug.cgi?id=15914#c58 comment from Kalle Vahlman

Hovewer returning TextBreakDone instead of textBreakFirst was leading to a freeze on new lines.

Attached patch fixing problem for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190325</commentid>
    <comment_count>10</comment_count>
      <attachid>48723</attachid>
    <who name="Alexander Butenko">a.butenka</who>
    <bug_when>2010-02-14 08:35:56 -0800</bug_when>
    <thetext>Created attachment 48723
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191238</commentid>
    <comment_count>11</comment_count>
      <attachid>48723</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-17 14:50:26 -0800</bug_when>
    <thetext>Comment on attachment 48723
patch

Every change requires a ChangeLog entry.  See http://webkit.org/coding/contributing.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44010</attachid>
            <date>2009-11-30 01:00:38 -0800</date>
            <delta_ts>2009-11-30 17:18:45 -0800</delta_ts>
            <desc>TextBreakIterator implementation based on GLib and pango</desc>
            <filename>txtbreakiterator_pango.patch</filename>
            <type>text/plain</type>
            <size>13027</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDUxNDgx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMTEt
MjkgIERvbWluaWsgUsO2dHRzY2hlcyAgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFu
eS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W0d0a10gQ3JlYXRlIGEgVGV4dEJyZWFrSXRlcmF0b3IgaW1wbGVtZW50YXRpb24gYmFzZWQgb24g
R0xpYiAod2l0aG91dCBJQ1UpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMTQ2OQorCisgICAgICAgIFJlbW92aW5nIGh5YnJpZCBjb25maWd1cmF0aW9u
IGZvciAtLXdpdGgtdW5pY29kZS1iYWNrZW5kPWdsaWIKKyAgICAgICAgSUNVIG5vdCByZXF1aXJl
ZCBhbnltb3JlLgorCisgICAgICAgICogYXV0b3Rvb2xzL3dlYmtpdC5tNDoKKwogMjAwOS0xMS0y
NiAgTGFzemxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNTE0ODEpCisrKyBXZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDA5LTExLTI5ICBEb21p
bmlrIFLDtnR0c2NoZXMgIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHdGtdIENy
ZWF0ZSBhIFRleHRCcmVha0l0ZXJhdG9yIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIEdMaWIgKHdp
dGhvdXQgSUNVKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzE0NjkKKworICAgICAgICBBZGRlZCBhIFRleHRCcmVha0l0ZXJhdG9yIGltcGxlbWVudGF0
aW9uIGJhc2VkIG9uIEdMaWIgYW5kIHBhbmdvLAorICAgICAgICB3aGljaCBhbGxvd3MgY29tcGls
aW5nIFdlYkNvcmUgd2l0aG91dCBJQ1UuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFVwSXRlcmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Y2hhcmFjdGVyQnJlYWtJdGVyYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OndvcmRC
cmVha0l0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVCcmVha0l0ZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNlbnRlbmNlQnJlYWtJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
Ojp0ZXh0QnJlYWtGaXJzdCk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtMYXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OnRleHRCcmVha05leHQpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dEJy
ZWFrUHJldmlvdXMpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dEJyZWFrUHJlY2VkaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRleHRCcmVha0ZvbGxvd2luZyk6CisgICAgICAgIChXZWJDb3JlOjp0
ZXh0QnJlYWtDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmlzVGV4dEJyZWFrKToKKwogMjAw
OS0xMS0yOSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
QnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1MTQ4MCkKKysrIFdlYkNvcmUvR05VbWFr
ZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE2NDMsOCArMTY0Myw2IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmggXAogCVdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAgXAogCVdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEJyZWFrSXRlcmF0b3JJQ1UuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFr
SXRlcmF0b3JJbnRlcm5hbElDVS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5oIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcCBcCkBAIC0yMDIzLDcgKzIwMjEsNiBAQCB3
ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlUmVzcG9uc2VTb3VwLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VSZXF1ZXN0LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlUmVzcG9uc2UuaCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVy
YXRvckludGVybmFsSUNVR3RrLmNwcCBcCiAJV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlclJl
cG9zaXRvcnkuaAogCiAjIC0tLS0KQEAgLTIwMzIsNyArMjAyOSwxMCBAQCB3ZWJjb3JlZ3RrX3Nv
dXJjZXMgKz0gXAogaWYgVVNFX0lDVV9VTklDT0RFCiB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwIFwKLQlXZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENvZGVjSUNVLmgKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
SUNVLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAg
XAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmgg
XAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElD
VUd0ay5jcHAKIGVuZGlmCiAKICMgLS0tLQpAQCAtMjA0MSw3ICsyMDQxLDggQEAgZW5kaWYKIGlm
IFVTRV9HTElCX1VOSUNPREUKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
Z3RrL1RleHRDb2RlY0d0ay5oCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNH
dGsuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5j
cHAKIGVuZGlmCiAKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJ
dGVyYXRvckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9U
ZXh0QnJlYWtJdGVyYXRvckd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9yR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGFycyBLbm9sbCA8bGFyc0B0cm9s
bHRlY2guY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24u
Y2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJv
ZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCisjaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KKyNp
bmNsdWRlIDx3dGYvZ3RrL0dPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVt
IFVCcmVha0l0ZXJhdG9yVHlwZSB7CisgICAgVUJSS19DSEFSQUNURVIsCisgICAgVUJSS19XT1JE
LAorICAgIFVCUktfTElORSwKKyAgICBVQlJLX1NFTlRFTkNFCit9OworCitjbGFzcyBUZXh0QnJl
YWtJdGVyYXRvciB7CitwdWJsaWM6CisgICAgVUJyZWFrSXRlcmF0b3JUeXBlIG1fdHlwZTsKKyAg
ICBpbnQgbV9sZW5ndGg7CisgICAgUGFuZ29Mb2dBdHRyKiBtX2xvZ0F0dHJzOworICAgIGludCBt
X2luZGV4OworfTsKKworc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzZXRVcEl0ZXJhdG9yKGJv
b2wmIGNyZWF0ZWRJdGVyYXRvciwgVGV4dEJyZWFrSXRlcmF0b3IqJiBpdGVyYXRvciwKKyAgICBV
QnJlYWtJdGVyYXRvclR5cGUgdHlwZSwgY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkK
K3sKKyAgICBpZiAoIXN0cmluZykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWNyZWF0
ZWRJdGVyYXRvcikgeworICAgICAgICBpdGVyYXRvciA9IG5ldyBUZXh0QnJlYWtJdGVyYXRvcigp
OworICAgICAgICBjcmVhdGVkSXRlcmF0b3IgPSB0cnVlOworICAgIH0KKyAgICBpZiAoIWl0ZXJh
dG9yKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGxvbmcgdXRmOGxlbjsKKyAgICBHT3duUHRy
PGNoYXI+IHV0Zjg7CisgICAgdXRmOC5zZXQoZ191dGYxNl90b191dGY4KHN0cmluZywgbGVuZ3Ro
LCAwLCAmdXRmOGxlbiwgMCkpOworCisgICAgLy8gRklYTUU6IGFzc3VtZXMgbm8gc3Vycm9nYXRl
IHBhaXJzCisKKyAgICBpdGVyYXRvci0+bV90eXBlID0gdHlwZTsKKyAgICBpdGVyYXRvci0+bV9s
ZW5ndGggPSBsZW5ndGg7CisgICAgaWYoY3JlYXRlZEl0ZXJhdG9yKQorICAgICAgICBnX2ZyZWUo
aXRlcmF0b3ItPm1fbG9nQXR0cnMpOworICAgIGl0ZXJhdG9yLT5tX2xvZ0F0dHJzID0gZ19uZXcw
KFBhbmdvTG9nQXR0ciwgbGVuZ3RoICsgMSk7CisgICAgaXRlcmF0b3ItPm1faW5kZXggPSAtMTsK
KyAgICBwYW5nb19nZXRfbG9nX2F0dHJzKHV0ZjguZ2V0KCksIHV0ZjhsZW4sIC0xLCAwLCBpdGVy
YXRvci0+bV9sb2dBdHRycywgbGVuZ3RoICsgMSk7CisKKyAgICByZXR1cm4gaXRlcmF0b3I7Cit9
CisKK1RleHRCcmVha0l0ZXJhdG9yKiBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFy
KiBzdHJpbmcsIGludCBsZW5ndGgpCit7CisgICAgc3RhdGljIGJvb2wgY3JlYXRlZENoYXJhY3Rl
ckJyZWFrSXRlcmF0b3IgPSBmYWxzZTsKKyAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0
YXRpY0NoYXJhY3RlckJyZWFrSXRlcmF0b3I7CisgICAgcmV0dXJuIHNldFVwSXRlcmF0b3IoY3Jl
YXRlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IsIHN0YXRpY0NoYXJhY3RlckJyZWFrSXRlcmF0b3Is
IFVCUktfQ0hBUkFDVEVSLCBzdHJpbmcsIGxlbmd0aCk7Cit9CisKK1RleHRCcmVha0l0ZXJhdG9y
KiBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgp
Cit7CisgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgY2xvc2VyIGluc3BlY3Rpb24gdG8gYWNoaWV2
ZSBiZWhhdmlvdXIgaWRlbnRpY2FsIHRvIHRoZSBJQ1UgdmVyc2lvbi4KKyAgICByZXR1cm4gY2hh
cmFjdGVyQnJlYWtJdGVyYXRvcihzdHJpbmcsIGxlbmd0aCk7Cit9CisKK1RleHRCcmVha0l0ZXJh
dG9yKiB3b3JkQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQor
eworICAgIHN0YXRpYyBib29sIGNyZWF0ZWRXb3JkQnJlYWtJdGVyYXRvciA9IGZhbHNlOworICAg
IHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljV29yZEJyZWFrSXRlcmF0b3I7CisgICAg
cmV0dXJuIHNldFVwSXRlcmF0b3IoY3JlYXRlZFdvcmRCcmVha0l0ZXJhdG9yLCBzdGF0aWNXb3Jk
QnJlYWtJdGVyYXRvciwgVUJSS19XT1JELCBzdHJpbmcsIGxlbmd0aCk7Cit9CisKK1RleHRCcmVh
a0l0ZXJhdG9yKiBsaW5lQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVu
Z3RoKQoreworICAgIHN0YXRpYyBib29sIGNyZWF0ZWRMaW5lQnJlYWtJdGVyYXRvciA9IGZhbHNl
OworICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljTGluZUJyZWFrSXRlcmF0b3I7
CisgICAgcmV0dXJuIHNldFVwSXRlcmF0b3IoY3JlYXRlZExpbmVCcmVha0l0ZXJhdG9yLCBzdGF0
aWNMaW5lQnJlYWtJdGVyYXRvciwgVUJSS19MSU5FLCBzdHJpbmcsIGxlbmd0aCk7Cit9CisKK1Rl
eHRCcmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmlu
ZywgaW50IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVkU2VudGVuY2VCcmVha0l0
ZXJhdG9yID0gZmFsc2U7CisgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNTZW50
ZW5jZUJyZWFrSXRlcmF0b3I7CisgICAgcmV0dXJuIHNldFVwSXRlcmF0b3IoY3JlYXRlZFNlbnRl
bmNlQnJlYWtJdGVyYXRvciwgc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yLCBVQlJLX1NFTlRF
TkNFLCBzdHJpbmcsIGxlbmd0aCk7Cit9CisKK2ludCB0ZXh0QnJlYWtGaXJzdChUZXh0QnJlYWtJ
dGVyYXRvciogYmkpCit7CisgICAgLy8gc2VlIHRleHRCcmVha0xhc3QKKyAgICAKKyAgICBpbnQg
Zmlyc3RDdXJzb3JQb3NpdGlvbiA9IC0xOworICAgIGludCBwb3MgPSAwOworICAgIHdoaWxlKHBv
cyA8PSBiaS0+bV9sZW5ndGggJiYgKGZpcnN0Q3Vyc29yUG9zaXRpb24gPCAwKSkgeworICAgICAg
ICBpZiAoYmktPm1fbG9nQXR0cnNbcG9zXS5pc19jdXJzb3JfcG9zaXRpb24pCisgICAgICAgICAg
ICBmaXJzdEN1cnNvclBvc2l0aW9uID0gcG9zOworICAgIH0KKyAgICBiaS0+bV9pbmRleCA9IGZp
cnN0Q3Vyc29yUG9zaXRpb247CisgICAgcmV0dXJuIGZpcnN0Q3Vyc29yUG9zaXRpb247Cit9CisK
K2ludCB0ZXh0QnJlYWtMYXN0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICAvLyBUZXh0
QnJlYWtMYXN0IGlzIG5vdCBtZWFudCB0byBmaW5kIGp1c3QgYW55IGJyZWFrIGFjY29yZGluZyB0
byBiaS0+bV90eXBlIAorICAgIC8vIGJ1dCByZWFsbHkgdGhlIG9uZSBuZWFyIHRoZSBsYXN0IGNo
YXJhY3Rlci4KKyAgICAvLyAoY21wIElDVSBkb2N1bWVudGF0aW9uIGZvciB1YnJrX2ZpcnN0IGFu
ZCB1YnJrX2xhc3QpCisgICAgLy8gRnJvbSBJQ1UgZG9jcyBmb3IgdWJya19sYXN0OgorICAgIC8v
ICJEZXRlcm1pbmUgdGhlIGluZGV4IGltbWVkaWF0ZWx5IGJleW9uZCB0aGUgbGFzdCBjaGFyYWN0
ZXIgaW4gdGhlIHRleHQgYmVpbmcgc2Nhbm5lZC4iIAorCisgICAgLy8gU28gd2Ugc2hvdWxkIGFk
dmFuY2Ugb3IgdHJhdmVyc2UgYmFjayBiYXNlZCBvbiBiaS0+bV9sb2dBdHRycyBjdXJzb3IgcG9z
aXRpb25zLgorICAgIC8vIElmIGxhc3QgY2hhcmFjdGVyIHBvc2l0aW9uIGluIHRoZSBvcmlnaW5h
bCBzdHJpbmcgaXMgYSB3aGl0ZXNwYWNlLAorICAgIC8vIHRyYXZlcnNlIHRvIHRoZSBsZWZ0IHVu
dGlsIHRoZSBmaXJzdCBub24td2hpdGUgY2hhcmFjdGVyIHBvc2l0aW9uIGlzIGZvdW5kCisgICAg
Ly8gYW5kIHJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IHdoaXRlLXNwYWNlIGNoYXIg
YWZ0ZXIgdGhpcyBvbmUuCisgICAgLy8gT3RoZXJ3aXNlIHJldHVybiBtX2xlbmd0aCwgYXMgInRo
ZSBmaXJzdCBjaGFyYWN0ZXIgYmV5b25kIHRoZSBsYXN0IiBpcyBvdXRzaWRlIG91ciBzdHJpbmcu
CisgICAgCisgICAgYm9vbCB3aGl0ZVNwYWNlQXRUaGVFbmQgPSB0cnVlOworICAgIGludCBuZXh0
V2hpdGVTcGFjZVBvcyA9IGJpLT5tX2xlbmd0aDsKKyAgICAKKyAgICBpbnQgcG9zID0gYmktPm1f
bGVuZ3RoOworICAgIHdoaWxlIChwb3MgPj0gMCAmJiB3aGl0ZVNwYWNlQXRUaGVFbmQpIHsKKyAg
ICAgICAgaWYgKGJpLT5tX2xvZ0F0dHJzW3Bvc10uaXNfY3Vyc29yX3Bvc2l0aW9uKSB7CisgICAg
ICAgICAgICBpZiAod2hpdGVTcGFjZUF0VGhlRW5kID0gYmktPm1fbG9nQXR0cnNbcG9zXS5pc193
aGl0ZSkKKyAgICAgICAgICAgICAgICBuZXh0V2hpdGVTcGFjZVBvcyA9IHBvczsKKyAgICAgICAg
fQorICAgICAgICBwb3MtLTsKKyAgICB9CisgICAgYmktPm1faW5kZXggPSBuZXh0V2hpdGVTcGFj
ZVBvczsKKyAgICByZXR1cm4gbmV4dFdoaXRlU3BhY2VQb3M7Cit9CisKK2ludCB0ZXh0QnJlYWtO
ZXh0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICBmb3IgKGludCBpID0gYmktPm1faW5k
ZXggKyAxOyBpIDw9IGJpLT5tX2xlbmd0aDsgaSsrKSB7CisKKyAgICAgICAgLy8gRklYTUU6IFVC
UktfV09SRCBjYXNlOiBTaW5nbGUgbXVsdGlieXRlIGNoYXJhY3RlcnMgKGkuZS4gd2hpdGUgc3Bh
Y2UgYXJvdW5kIHRoZW0pLCBzdWNoIGFzIHRoZSBldXJvIHN5bWJvbCDigqwsIAorICAgICAgICAv
LyBhcmUgbm90IG1hcmtlZCBhcyB3b3JkX3N0YXJ0ICYgd29yZF9lbmQgYXMgb3Bwb3NlZCB0byB0
aGUgd2F5IElDVSBkb2VzIGl0LgorICAgICAgICAvLyBUaGlzIGxlYWRzIHRvIC0gZm9yIGV4YW1w
bGUgLSBkaWZmZXJlbnQgd29yZCBzZWxlY3Rpb24gYmVoYXZpb3VyIHdoZW4gcmlnaHQgY2xpY2tp
bmcuCisKKyAgICAgICAgaWYgKChiaS0+bV90eXBlID09IFVCUktfTElORSAmJiBiaS0+bV9sb2dB
dHRyc1tpXS5pc19saW5lX2JyZWFrKQorICAgICAgICAgICAgfHwgKGJpLT5tX3R5cGUgPT0gVUJS
S19XT1JEICYmIChiaS0+bV9sb2dBdHRyc1tpXS5pc193b3JkX3N0YXJ0IHx8IGJpLT5tX2xvZ0F0
dHJzW2ldLmlzX3dvcmRfZW5kKSkKKyAgICAgICAgICAgIHx8IChiaS0+bV90eXBlID09IFVCUktf
Q0hBUkFDVEVSICYmIGJpLT5tX2xvZ0F0dHJzW2ldLmlzX2N1cnNvcl9wb3NpdGlvbikKKyAgICAg
ICAgICAgIHx8IChiaS0+bV90eXBlID09IFVCUktfU0VOVEVOQ0UgJiYgKGJpLT5tX2xvZ0F0dHJz
W2ldLmlzX3NlbnRlbmNlX3N0YXJ0IHx8IGJpLT5tX2xvZ0F0dHJzW2ldLmlzX3NlbnRlbmNlX2Vu
ZCkpICkgeworICAgICAgICAgICAgYmktPm1faW5kZXggPSBpOworICAgICAgICAgICAgcmV0dXJu
IGk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRleHRCcmVha0RvbmU7Cit9CisKK2lu
dCB0ZXh0QnJlYWtQcmV2aW91cyhUZXh0QnJlYWtJdGVyYXRvciogYmkpCit7CisgICAgZm9yIChp
bnQgaSA9IGJpLT5tX2luZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgaWYgKChiaS0+
bV90eXBlID09IFVCUktfTElORSAmJiBiaS0+bV9sb2dBdHRyc1tpXS5pc19saW5lX2JyZWFrKQor
ICAgICAgICAgICAgfHwgKGJpLT5tX3R5cGUgPT0gVUJSS19XT1JEICYmIChiaS0+bV9sb2dBdHRy
c1tpXS5pc193b3JkX3N0YXJ0IHx8IGJpLT5tX2xvZ0F0dHJzW2ldLmlzX3dvcmRfZW5kKSkKKyAg
ICAgICAgICAgIHx8IChiaS0+bV90eXBlID09IFVCUktfQ0hBUkFDVEVSICYmIGJpLT5tX2xvZ0F0
dHJzW2ldLmlzX2N1cnNvcl9wb3NpdGlvbikKKyAgICAgICAgICAgIHx8IChiaS0+bV90eXBlID09
IFVCUktfU0VOVEVOQ0UgJiYgKGJpLT5tX2xvZ0F0dHJzW2ldLmlzX3NlbnRlbmNlX3N0YXJ0IHx8
IGJpLT5tX2xvZ0F0dHJzW2ldLmlzX3NlbnRlbmNlX2VuZCkpICkgeworICAgICAgICAgICAgYmkt
Pm1faW5kZXggPSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIHRleHRCcmVha0ZpcnN0KGJpKTsKK30KKworaW50IHRleHRCcmVha1ByZWNlZGlu
ZyhUZXh0QnJlYWtJdGVyYXRvciogYmksIGludCBwb3MpCit7CisgICAgYmktPm1faW5kZXggPSBw
b3M7CisgICAgcmV0dXJuIHRleHRCcmVha1ByZXZpb3VzKGJpKTsKK30KKworaW50IHRleHRCcmVh
a0ZvbGxvd2luZyhUZXh0QnJlYWtJdGVyYXRvciogYmksIGludCBwb3MpCit7CisgICAgaWYgKHBv
cyA8IDApCisgICAgICAgIHBvcyA9IC0xOworICAgIGJpLT5tX2luZGV4ID0gcG9zOworICAgIHJl
dHVybiB0ZXh0QnJlYWtOZXh0KGJpKTsKK30KKworaW50IHRleHRCcmVha0N1cnJlbnQoVGV4dEJy
ZWFrSXRlcmF0b3IqIGJpKQoreworICAgIHJldHVybiBiaS0+bV9pbmRleDsKK30KKworYm9vbCBp
c1RleHRCcmVhayhUZXh0QnJlYWtJdGVyYXRvciogYmksIGludCBwb3MpCit7CisgICAgaWYgKGJp
LT5tX2luZGV4IDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuICgoYmkt
Pm1fdHlwZSA9PSBVQlJLX0xJTkUgJiYgYmktPm1fbG9nQXR0cnNbYmktPm1faW5kZXhdLmlzX2xp
bmVfYnJlYWspCisgICAgICAgIHx8IChiaS0+bV90eXBlID09IFVCUktfV09SRCAmJiBiaS0+bV9s
b2dBdHRyc1tiaS0+bV9pbmRleF0uaXNfd29yZF9lbmQpCisgICAgICAgIHx8IChiaS0+bV90eXBl
ID09IFVCUktfQ0hBUkFDVEVSICYmIGJpLT5tX2xvZ0F0dHJzW2JpLT5tX2luZGV4XS5pc19jaGFy
X2JyZWFrKQorICAgICAgICB8fCAoYmktPm1fdHlwZSA9PSBVQlJLX1NFTlRFTkNFICYmIGJpLT5t
X2xvZ0F0dHJzW2JpLT5tX2luZGV4XS5pc19zZW50ZW5jZV9lbmQpICk7Cit9CisKK30KSW5kZXg6
IGF1dG90b29scy93ZWJraXQubTQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXV0b3Rvb2xzL3dlYmtpdC5tNAko
cmV2aXNpb24gNTE0ODApCisrKyBhdXRvdG9vbHMvd2Via2l0Lm00CSh3b3JraW5nIGNvcHkpCkBA
IC0xMzksMTEgKzEzOSw3IEBAIGVzYWMKIAogQUNfTVNHX1JFU1VMVChbJHdpdGhfdW5pY29kZV9i
YWNrZW5kXSkKIAotIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5
MTQKLSMgU3BsaXR0aW5nIElDVSByZW1vdmFsIHBhdGNoIGludG8gc21hbGxlciBwb3J0aW9ucy4g
V2UgY29tcGlsZSBhIGh5YnJpZCB2ZXJzaW9uCi0jIHdpdGggdGhlIFdURiBVbmljb2RlIGJhY2tl
bmQgYmVpbmcgYmFzZWQgb24gR0xpYiB3aGlsZSB0ZXh0IGNvZGVjcyBhbmQgVGV4dEJyZWFrSXRl
cmF0b3IKLSMga2VlcCB0aGUgSUNVIGRlcGVuZGVuY3kuIFRoYXQncyB3aHkgd2UgdGVtcG9yYXJp
bHkgYWRkIGljdSBoZWFkZXJzIGFuZCBsaWJzIGZvciBnbGliIGNvbmZpZyBjYXNlIGFzIHdlbGwu
Ci1pZiB0ZXN0ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImljdSIgLW8gIiR3aXRoX3VuaWNv
ZGVfYmFja2VuZCIgPSAiZ2xpYiI7IHRoZW4KK2lmIHRlc3QgIiR3aXRoX3VuaWNvZGVfYmFja2Vu
ZCIgPSAiaWN1IjsgdGhlbgogICAgICAgICBjYXNlICIkaG9zdCIgaW4KICAgICAgICAgICAgICot
Ki1kYXJ3aW4qKQogCQlVTklDT0RFX0NGTEFHUz0iLUkkc3JjZGlyL0phdmFTY3JpcHRDb3JlL2lj
dSAtSSRzcmNkaXIvV2ViQ29yZS9pY3UiCkBAIC0xNjksMTQgKzE2NSw3IEBAIGlmIHRlc3QgIiR3
aXRoX3VuaWNvZGVfYmFja2VuZCIgPSAiaWN1IiAKIGZpCiAKIGlmIHRlc3QgIiR3aXRoX3VuaWNv
ZGVfYmFja2VuZCIgPSAiZ2xpYiI7IHRoZW4KLQkjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTkxNAotCSMgU3BsaXR0aW5nIElDVSByZW1vdmFsIHBhdGNoIGludG8g
c21hbGxlciBwb3J0aW9ucywgdGhhdCdzIHdoeSB3ZQotCSMgdGVtcG9yYXJpbHkgcmV0cmlldmUg
ZmxhZ3MgJiBsaWJzIGluZm8gZm9yIGdsaWIgaW50byBVTklDT0RFR0xJQgotCSMgaW5zdGVhZCBv
ZiBVTklDT0RFIHZhcmlhYmxlLCB0aGVuIGNvbmNhdGVuYXRlLgotCSMgUGF0Y2ggMy80IG9mIHRo
ZSBhYm92ZSBpc3N1ZSB3aWxsIHJlbmFtZSB0aGUgdmFyaWFibGUgYmFjayB0byBVTklDT0RFLgot
CVBLR19DSEVDS19NT0RVTEVTKFtVTklDT0RFR0xJQl0sIFtnbGliLTIuMCBwYW5nbyA+PSAxLjIx
LjBdKQotCVVOSUNPREVfQ0ZMQUdTPSIkVU5JQ09ERV9DRkxBR1MgJFVOSUNPREVHTElCX0NGTEFH
UyIKLQlVTklDT0RFX0xJQlM9IiRVTklDT0RFX0xJQlMgJFVOSUNPREVHTElCX0xJQlMiCisJUEtH
X0NIRUNLX01PRFVMRVMoW1VOSUNPREVdLCBbZ2xpYi0yLjAgcGFuZ28gPj0gMS4yMS4wXSkKIGZp
CiAKIEFDX1NVQlNUKFtVTklDT0RFX0NGTEFHU10pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44048</attachid>
            <date>2009-11-30 17:18:45 -0800</date>
            <delta_ts>2009-12-08 06:58:58 -0800</delta_ts>
            <desc>TextBreakIterator implementation based on GLib and pango </desc>
            <filename>txtbreakiterator_pango.patch</filename>
            <type>text/plain</type>
            <size>13031</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDUxNDgx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMTEt
MjkgIERvbWluaWsgUsO2dHRzY2hlcyAgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFu
eS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W0d0a10gQ3JlYXRlIGEgVGV4dEJyZWFrSXRlcmF0b3IgaW1wbGVtZW50YXRpb24gYmFzZWQgb24g
R0xpYiAod2l0aG91dCBJQ1UpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMTQ2OQorCisgICAgICAgIFJlbW92aW5nIGh5YnJpZCBjb25maWd1cmF0aW9u
IGZvciAtLXdpdGgtdW5pY29kZS1iYWNrZW5kPWdsaWIKKyAgICAgICAgSUNVIG5vdCByZXF1aXJl
ZCBhbnltb3JlLgorCisgICAgICAgICogYXV0b3Rvb2xzL3dlYmtpdC5tNDoKKwogMjAwOS0xMS0y
NiAgTGFzemxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNTE0ODEpCisrKyBXZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDA5LTExLTI5ICBEb21p
bmlrIFLDtnR0c2NoZXMgIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHdGtdIENy
ZWF0ZSBhIFRleHRCcmVha0l0ZXJhdG9yIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIEdMaWIgKHdp
dGhvdXQgSUNVKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzE0NjkKKworICAgICAgICBBZGRlZCBhIFRleHRCcmVha0l0ZXJhdG9yIGltcGxlbWVudGF0
aW9uIGJhc2VkIG9uIEdMaWIgYW5kIHBhbmdvLAorICAgICAgICB3aGljaCBhbGxvd3MgY29tcGls
aW5nIFdlYkNvcmUgd2l0aG91dCBJQ1UuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFVwSXRlcmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Y2hhcmFjdGVyQnJlYWtJdGVyYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OndvcmRC
cmVha0l0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVCcmVha0l0ZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNlbnRlbmNlQnJlYWtJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
Ojp0ZXh0QnJlYWtGaXJzdCk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtMYXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OnRleHRCcmVha05leHQpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dEJy
ZWFrUHJldmlvdXMpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dEJyZWFrUHJlY2VkaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRleHRCcmVha0ZvbGxvd2luZyk6CisgICAgICAgIChXZWJDb3JlOjp0
ZXh0QnJlYWtDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmlzVGV4dEJyZWFrKToKKwogMjAw
OS0xMS0yOSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
QnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1MTQ4MCkKKysrIFdlYkNvcmUvR05VbWFr
ZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE2NDMsOCArMTY0Myw2IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmggXAogCVdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5jcHAgXAogCVdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEJyZWFrSXRlcmF0b3JJQ1UuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFr
SXRlcmF0b3JJbnRlcm5hbElDVS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5oIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcCBcCkBAIC0yMDIzLDcgKzIwMjEsNiBAQCB3
ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlUmVzcG9uc2VTb3VwLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VSZXF1ZXN0LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlUmVzcG9uc2UuaCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVy
YXRvckludGVybmFsSUNVR3RrLmNwcCBcCiAJV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlclJl
cG9zaXRvcnkuaAogCiAjIC0tLS0KQEAgLTIwMzIsNyArMjAyOSwxMCBAQCB3ZWJjb3JlZ3RrX3Nv
dXJjZXMgKz0gXAogaWYgVVNFX0lDVV9VTklDT0RFCiB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwIFwKLQlXZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENvZGVjSUNVLmgKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
SUNVLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAg
XAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmgg
XAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElD
VUd0ay5jcHAKIGVuZGlmCiAKICMgLS0tLQpAQCAtMjA0MSw3ICsyMDQxLDggQEAgZW5kaWYKIGlm
IFVTRV9HTElCX1VOSUNPREUKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
Z3RrL1RleHRDb2RlY0d0ay5oCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNH
dGsuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5j
cHAKIGVuZGlmCiAKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJ
dGVyYXRvckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9U
ZXh0QnJlYWtJdGVyYXRvckd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9yR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGFycyBLbm9sbCA8bGFyc0B0cm9s
bHRlY2guY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24u
Y2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJv
ZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCisKKyNpbmNsdWRlIDxwYW5nby9wYW5nby5oPgor
I2luY2x1ZGUgPHd0Zi9ndGsvR093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Vu
dW0gVUJyZWFrSXRlcmF0b3JUeXBlIHsKKyAgICBVQlJLX0NIQVJBQ1RFUiwKKyAgICBVQlJLX1dP
UkQsCisgICAgVUJSS19MSU5FLAorICAgIFVCUktfU0VOVEVOQ0UKK307CisKK2NsYXNzIFRleHRC
cmVha0l0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBVQnJlYWtJdGVyYXRvclR5cGUgbV90eXBlOwor
ICAgIGludCBtX2xlbmd0aDsKKyAgICBQYW5nb0xvZ0F0dHIqIG1fbG9nQXR0cnM7CisgICAgaW50
IG1faW5kZXg7Cit9OworCitzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHNldFVwSXRlcmF0b3Io
Ym9vbCYgY3JlYXRlZEl0ZXJhdG9yLCBUZXh0QnJlYWtJdGVyYXRvciomIGl0ZXJhdG9yLAorICAg
IFVCcmVha0l0ZXJhdG9yVHlwZSB0eXBlLCBjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3Ro
KQoreworICAgIGlmICghc3RyaW5nKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghY3Jl
YXRlZEl0ZXJhdG9yKSB7CisgICAgICAgIGl0ZXJhdG9yID0gbmV3IFRleHRCcmVha0l0ZXJhdG9y
KCk7CisgICAgICAgIGNyZWF0ZWRJdGVyYXRvciA9IHRydWU7CisgICAgfQorICAgIGlmICghaXRl
cmF0b3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgbG9uZyB1dGY4bGVuOworICAgIEdPd25Q
dHI8Y2hhcj4gdXRmODsKKyAgICB1dGY4LnNldChnX3V0ZjE2X3RvX3V0Zjgoc3RyaW5nLCBsZW5n
dGgsIDAsICZ1dGY4bGVuLCAwKSk7CisKKyAgICAvLyBGSVhNRTogYXNzdW1lcyBubyBzdXJyb2dh
dGUgcGFpcnMKKworICAgIGl0ZXJhdG9yLT5tX3R5cGUgPSB0eXBlOworICAgIGl0ZXJhdG9yLT5t
X2xlbmd0aCA9IGxlbmd0aDsKKyAgICBpZiAoY3JlYXRlZEl0ZXJhdG9yKQorICAgICAgICBnX2Zy
ZWUoaXRlcmF0b3ItPm1fbG9nQXR0cnMpOworICAgIGl0ZXJhdG9yLT5tX2xvZ0F0dHJzID0gZ19u
ZXcwKFBhbmdvTG9nQXR0ciwgbGVuZ3RoICsgMSk7CisgICAgaXRlcmF0b3ItPm1faW5kZXggPSAt
MTsKKyAgICBwYW5nb19nZXRfbG9nX2F0dHJzKHV0ZjguZ2V0KCksIHV0ZjhsZW4sIC0xLCAwLCBp
dGVyYXRvci0+bV9sb2dBdHRycywgbGVuZ3RoICsgMSk7CisKKyAgICByZXR1cm4gaXRlcmF0b3I7
Cit9CisKK1RleHRCcmVha0l0ZXJhdG9yKiBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGNvbnN0IFVD
aGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCit7CisgICAgc3RhdGljIGJvb2wgY3JlYXRlZENoYXJh
Y3RlckJyZWFrSXRlcmF0b3IgPSBmYWxzZTsKKyAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3Iq
IHN0YXRpY0NoYXJhY3RlckJyZWFrSXRlcmF0b3I7CisgICAgcmV0dXJuIHNldFVwSXRlcmF0b3Io
Y3JlYXRlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IsIHN0YXRpY0NoYXJhY3RlckJyZWFrSXRlcmF0
b3IsIFVCUktfQ0hBUkFDVEVSLCBzdHJpbmcsIGxlbmd0aCk7Cit9CisKK1RleHRCcmVha0l0ZXJh
dG9yKiBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5n
dGgpCit7CisgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgY2xvc2VyIGluc3BlY3Rpb24gdG8gYWNo
aWV2ZSBiZWhhdmlvdXIgaWRlbnRpY2FsIHRvIHRoZSBJQ1UgdmVyc2lvbi4KKyAgICByZXR1cm4g
Y2hhcmFjdGVyQnJlYWtJdGVyYXRvcihzdHJpbmcsIGxlbmd0aCk7Cit9CisKK1RleHRCcmVha0l0
ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3Ro
KQoreworICAgIHN0YXRpYyBib29sIGNyZWF0ZWRXb3JkQnJlYWtJdGVyYXRvciA9IGZhbHNlOwor
ICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljV29yZEJyZWFrSXRlcmF0b3I7Cisg
ICAgcmV0dXJuIHNldFVwSXRlcmF0b3IoY3JlYXRlZFdvcmRCcmVha0l0ZXJhdG9yLCBzdGF0aWNX
b3JkQnJlYWtJdGVyYXRvciwgVUJSS19XT1JELCBzdHJpbmcsIGxlbmd0aCk7Cit9CisKK1RleHRC
cmVha0l0ZXJhdG9yKiBsaW5lQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQg
bGVuZ3RoKQoreworICAgIHN0YXRpYyBib29sIGNyZWF0ZWRMaW5lQnJlYWtJdGVyYXRvciA9IGZh
bHNlOworICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljTGluZUJyZWFrSXRlcmF0
b3I7CisgICAgcmV0dXJuIHNldFVwSXRlcmF0b3IoY3JlYXRlZExpbmVCcmVha0l0ZXJhdG9yLCBz
dGF0aWNMaW5lQnJlYWtJdGVyYXRvciwgVUJSS19MSU5FLCBzdHJpbmcsIGxlbmd0aCk7Cit9CisK
K1RleHRCcmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0
cmluZywgaW50IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVkU2VudGVuY2VCcmVh
a0l0ZXJhdG9yID0gZmFsc2U7CisgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNT
ZW50ZW5jZUJyZWFrSXRlcmF0b3I7CisgICAgcmV0dXJuIHNldFVwSXRlcmF0b3IoY3JlYXRlZFNl
bnRlbmNlQnJlYWtJdGVyYXRvciwgc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yLCBVQlJLX1NF
TlRFTkNFLCBzdHJpbmcsIGxlbmd0aCk7Cit9CisKK2ludCB0ZXh0QnJlYWtGaXJzdChUZXh0QnJl
YWtJdGVyYXRvciogYmkpCit7CisgICAgLy8gc2VlIHRleHRCcmVha0xhc3QKKyAgICAKKyAgICBp
bnQgZmlyc3RDdXJzb3JQb3NpdGlvbiA9IC0xOworICAgIGludCBwb3MgPSAwOworICAgIHdoaWxl
IChwb3MgPD0gYmktPm1fbGVuZ3RoICYmIChmaXJzdEN1cnNvclBvc2l0aW9uIDwgMCkpIHsKKyAg
ICAgICAgaWYgKGJpLT5tX2xvZ0F0dHJzW3Bvc10uaXNfY3Vyc29yX3Bvc2l0aW9uKQorICAgICAg
ICAgICAgZmlyc3RDdXJzb3JQb3NpdGlvbiA9IHBvczsKKyAgICB9CisgICAgYmktPm1faW5kZXgg
PSBmaXJzdEN1cnNvclBvc2l0aW9uOworICAgIHJldHVybiBmaXJzdEN1cnNvclBvc2l0aW9uOwor
fQorCitpbnQgdGV4dEJyZWFrTGFzdChUZXh0QnJlYWtJdGVyYXRvciogYmkpCit7CisgICAgLy8g
VGV4dEJyZWFrTGFzdCBpcyBub3QgbWVhbnQgdG8gZmluZCBqdXN0IGFueSBicmVhayBhY2NvcmRp
bmcgdG8gYmktPm1fdHlwZSAKKyAgICAvLyBidXQgcmVhbGx5IHRoZSBvbmUgbmVhciB0aGUgbGFz
dCBjaGFyYWN0ZXIuCisgICAgLy8gKGNtcCBJQ1UgZG9jdW1lbnRhdGlvbiBmb3IgdWJya19maXJz
dCBhbmQgdWJya19sYXN0KQorICAgIC8vIEZyb20gSUNVIGRvY3MgZm9yIHVicmtfbGFzdDoKKyAg
ICAvLyAiRGV0ZXJtaW5lIHRoZSBpbmRleCBpbW1lZGlhdGVseSBiZXlvbmQgdGhlIGxhc3QgY2hh
cmFjdGVyIGluIHRoZSB0ZXh0IGJlaW5nIHNjYW5uZWQuIiAKKworICAgIC8vIFNvIHdlIHNob3Vs
ZCBhZHZhbmNlIG9yIHRyYXZlcnNlIGJhY2sgYmFzZWQgb24gYmktPm1fbG9nQXR0cnMgY3Vyc29y
IHBvc2l0aW9ucy4KKyAgICAvLyBJZiBsYXN0IGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGUgb3Jp
Z2luYWwgc3RyaW5nIGlzIGEgd2hpdGVzcGFjZSwKKyAgICAvLyB0cmF2ZXJzZSB0byB0aGUgbGVm
dCB1bnRpbCB0aGUgZmlyc3Qgbm9uLXdoaXRlIGNoYXJhY3RlciBwb3NpdGlvbiBpcyBmb3VuZAor
ICAgIC8vIGFuZCByZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCB3aGl0ZS1zcGFjZSBj
aGFyIGFmdGVyIHRoaXMgb25lLgorICAgIC8vIE90aGVyd2lzZSByZXR1cm4gbV9sZW5ndGgsIGFz
ICJ0aGUgZmlyc3QgY2hhcmFjdGVyIGJleW9uZCB0aGUgbGFzdCIgaXMgb3V0c2lkZSBvdXIgc3Ry
aW5nLgorICAgIAorICAgIGJvb2wgd2hpdGVTcGFjZUF0VGhlRW5kID0gdHJ1ZTsKKyAgICBpbnQg
bmV4dFdoaXRlU3BhY2VQb3MgPSBiaS0+bV9sZW5ndGg7CisgICAgCisgICAgaW50IHBvcyA9IGJp
LT5tX2xlbmd0aDsKKyAgICB3aGlsZSAocG9zID49IDAgJiYgd2hpdGVTcGFjZUF0VGhlRW5kKSB7
CisgICAgICAgIGlmIChiaS0+bV9sb2dBdHRyc1twb3NdLmlzX2N1cnNvcl9wb3NpdGlvbikgewor
ICAgICAgICAgICAgaWYgKHdoaXRlU3BhY2VBdFRoZUVuZCA9IGJpLT5tX2xvZ0F0dHJzW3Bvc10u
aXNfd2hpdGUpCisgICAgICAgICAgICAgICAgbmV4dFdoaXRlU3BhY2VQb3MgPSBwb3M7CisgICAg
ICAgIH0KKyAgICAgICAgcG9zLS07CisgICAgfQorICAgIGJpLT5tX2luZGV4ID0gbmV4dFdoaXRl
U3BhY2VQb3M7CisgICAgcmV0dXJuIG5leHRXaGl0ZVNwYWNlUG9zOworfQorCitpbnQgdGV4dEJy
ZWFrTmV4dChUZXh0QnJlYWtJdGVyYXRvciogYmkpCit7CisgICAgZm9yIChpbnQgaSA9IGJpLT5t
X2luZGV4ICsgMTsgaSA8PSBiaS0+bV9sZW5ndGg7IGkrKykgeworCisgICAgICAgIC8vIEZJWE1F
OiBVQlJLX1dPUkQgY2FzZTogU2luZ2xlIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIChpLmUuIHdoaXRl
IHNwYWNlIGFyb3VuZCB0aGVtKSwgc3VjaCBhcyB0aGUgZXVybyBzeW1ib2wg4oKsLCAKKyAgICAg
ICAgLy8gYXJlIG5vdCBtYXJrZWQgYXMgd29yZF9zdGFydCAmIHdvcmRfZW5kIGFzIG9wcG9zZWQg
dG8gdGhlIHdheSBJQ1UgZG9lcyBpdC4KKyAgICAgICAgLy8gVGhpcyBsZWFkcyB0byAtIGZvciBl
eGFtcGxlIC0gZGlmZmVyZW50IHdvcmQgc2VsZWN0aW9uIGJlaGF2aW91ciB3aGVuIHJpZ2h0IGNs
aWNraW5nLgorCisgICAgICAgIGlmICgoYmktPm1fdHlwZSA9PSBVQlJLX0xJTkUgJiYgYmktPm1f
bG9nQXR0cnNbaV0uaXNfbGluZV9icmVhaykKKyAgICAgICAgICAgIHx8IChiaS0+bV90eXBlID09
IFVCUktfV09SRCAmJiAoYmktPm1fbG9nQXR0cnNbaV0uaXNfd29yZF9zdGFydCB8fCBiaS0+bV9s
b2dBdHRyc1tpXS5pc193b3JkX2VuZCkpCisgICAgICAgICAgICB8fCAoYmktPm1fdHlwZSA9PSBV
QlJLX0NIQVJBQ1RFUiAmJiBiaS0+bV9sb2dBdHRyc1tpXS5pc19jdXJzb3JfcG9zaXRpb24pCisg
ICAgICAgICAgICB8fCAoYmktPm1fdHlwZSA9PSBVQlJLX1NFTlRFTkNFICYmIChiaS0+bV9sb2dB
dHRyc1tpXS5pc19zZW50ZW5jZV9zdGFydCB8fCBiaS0+bV9sb2dBdHRyc1tpXS5pc19zZW50ZW5j
ZV9lbmQpKSApIHsKKyAgICAgICAgICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAgIHJl
dHVybiBpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUZXh0QnJlYWtEb25lOworfQor
CitpbnQgdGV4dEJyZWFrUHJldmlvdXMoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQoreworICAgIGZv
ciAoaW50IGkgPSBiaS0+bV9pbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIGlmICgo
YmktPm1fdHlwZSA9PSBVQlJLX0xJTkUgJiYgYmktPm1fbG9nQXR0cnNbaV0uaXNfbGluZV9icmVh
aykKKyAgICAgICAgICAgIHx8IChiaS0+bV90eXBlID09IFVCUktfV09SRCAmJiAoYmktPm1fbG9n
QXR0cnNbaV0uaXNfd29yZF9zdGFydCB8fCBiaS0+bV9sb2dBdHRyc1tpXS5pc193b3JkX2VuZCkp
CisgICAgICAgICAgICB8fCAoYmktPm1fdHlwZSA9PSBVQlJLX0NIQVJBQ1RFUiAmJiBiaS0+bV9s
b2dBdHRyc1tpXS5pc19jdXJzb3JfcG9zaXRpb24pCisgICAgICAgICAgICB8fCAoYmktPm1fdHlw
ZSA9PSBVQlJLX1NFTlRFTkNFICYmIChiaS0+bV9sb2dBdHRyc1tpXS5pc19zZW50ZW5jZV9zdGFy
dCB8fCBiaS0+bV9sb2dBdHRyc1tpXS5pc19zZW50ZW5jZV9lbmQpKSApIHsKKyAgICAgICAgICAg
IGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiB0ZXh0QnJlYWtGaXJzdChiaSk7Cit9CisKK2ludCB0ZXh0QnJlYWtQcmVj
ZWRpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGJpLCBpbnQgcG9zKQoreworICAgIGJpLT5tX2luZGV4
ID0gcG9zOworICAgIHJldHVybiB0ZXh0QnJlYWtQcmV2aW91cyhiaSk7Cit9CisKK2ludCB0ZXh0
QnJlYWtGb2xsb3dpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGJpLCBpbnQgcG9zKQoreworICAgIGlm
IChwb3MgPCAwKQorICAgICAgICBwb3MgPSAtMTsKKyAgICBiaS0+bV9pbmRleCA9IHBvczsKKyAg
ICByZXR1cm4gdGV4dEJyZWFrTmV4dChiaSk7Cit9CisKK2ludCB0ZXh0QnJlYWtDdXJyZW50KFRl
eHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICByZXR1cm4gYmktPm1faW5kZXg7Cit9CisKK2Jv
b2wgaXNUZXh0QnJlYWsoVGV4dEJyZWFrSXRlcmF0b3IqIGJpLCBpbnQgcG9zKQoreworICAgIGlm
IChiaS0+bV9pbmRleCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiAo
KGJpLT5tX3R5cGUgPT0gVUJSS19MSU5FICYmIGJpLT5tX2xvZ0F0dHJzW2JpLT5tX2luZGV4XS5p
c19saW5lX2JyZWFrKQorICAgICAgICB8fCAoYmktPm1fdHlwZSA9PSBVQlJLX1dPUkQgJiYgYmkt
Pm1fbG9nQXR0cnNbYmktPm1faW5kZXhdLmlzX3dvcmRfZW5kKQorICAgICAgICB8fCAoYmktPm1f
dHlwZSA9PSBVQlJLX0NIQVJBQ1RFUiAmJiBiaS0+bV9sb2dBdHRyc1tiaS0+bV9pbmRleF0uaXNf
Y2hhcl9icmVhaykKKyAgICAgICAgfHwgKGJpLT5tX3R5cGUgPT0gVUJSS19TRU5URU5DRSAmJiBi
aS0+bV9sb2dBdHRyc1tiaS0+bV9pbmRleF0uaXNfc2VudGVuY2VfZW5kKSApOworfQorCit9Cklu
ZGV4OiBhdXRvdG9vbHMvd2Via2l0Lm00Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGF1dG90b29scy93ZWJraXQu
bTQJKHJldmlzaW9uIDUxNDgwKQorKysgYXV0b3Rvb2xzL3dlYmtpdC5tNAkod29ya2luZyBjb3B5
KQpAQCAtMTM5LDExICsxMzksNyBAQCBlc2FjCiAKIEFDX01TR19SRVNVTFQoWyR3aXRoX3VuaWNv
ZGVfYmFja2VuZF0pCiAKLSMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1OTE0Ci0jIFNwbGl0dGluZyBJQ1UgcmVtb3ZhbCBwYXRjaCBpbnRvIHNtYWxsZXIgcG9ydGlv
bnMuIFdlIGNvbXBpbGUgYSBoeWJyaWQgdmVyc2lvbgotIyB3aXRoIHRoZSBXVEYgVW5pY29kZSBi
YWNrZW5kIGJlaW5nIGJhc2VkIG9uIEdMaWIgd2hpbGUgdGV4dCBjb2RlY3MgYW5kIFRleHRCcmVh
a0l0ZXJhdG9yCi0jIGtlZXAgdGhlIElDVSBkZXBlbmRlbmN5LiBUaGF0J3Mgd2h5IHdlIHRlbXBv
cmFyaWx5IGFkZCBpY3UgaGVhZGVycyBhbmQgbGlicyBmb3IgZ2xpYiBjb25maWcgY2FzZSBhcyB3
ZWxsLgotaWYgdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNrZW5kIiA9ICJpY3UiIC1vICIkd2l0aF91
bmljb2RlX2JhY2tlbmQiID0gImdsaWIiOyB0aGVuCitpZiB0ZXN0ICIkd2l0aF91bmljb2RlX2Jh
Y2tlbmQiID0gImljdSI7IHRoZW4KICAgICAgICAgY2FzZSAiJGhvc3QiIGluCiAgICAgICAgICAg
ICAqLSotZGFyd2luKikKIAkJVU5JQ09ERV9DRkxBR1M9Ii1JJHNyY2Rpci9KYXZhU2NyaXB0Q29y
ZS9pY3UgLUkkc3JjZGlyL1dlYkNvcmUvaWN1IgpAQCAtMTY5LDE0ICsxNjUsNyBAQCBpZiB0ZXN0
ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImljdSIgCiBmaQogCiBpZiB0ZXN0ICIkd2l0aF91
bmljb2RlX2JhY2tlbmQiID0gImdsaWIiOyB0aGVuCi0JIyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU5MTQKLQkjIFNwbGl0dGluZyBJQ1UgcmVtb3ZhbCBwYXRjaCBp
bnRvIHNtYWxsZXIgcG9ydGlvbnMsIHRoYXQncyB3aHkgd2UKLQkjIHRlbXBvcmFyaWx5IHJldHJp
ZXZlIGZsYWdzICYgbGlicyBpbmZvIGZvciBnbGliIGludG8gVU5JQ09ERUdMSUIKLQkjIGluc3Rl
YWQgb2YgVU5JQ09ERSB2YXJpYWJsZSwgdGhlbiBjb25jYXRlbmF0ZS4KLQkjIFBhdGNoIDMvNCBv
ZiB0aGUgYWJvdmUgaXNzdWUgd2lsbCByZW5hbWUgdGhlIHZhcmlhYmxlIGJhY2sgdG8gVU5JQ09E
RS4KLQlQS0dfQ0hFQ0tfTU9EVUxFUyhbVU5JQ09ERUdMSUJdLCBbZ2xpYi0yLjAgcGFuZ28gPj0g
MS4yMS4wXSkKLQlVTklDT0RFX0NGTEFHUz0iJFVOSUNPREVfQ0ZMQUdTICRVTklDT0RFR0xJQl9D
RkxBR1MiCi0JVU5JQ09ERV9MSUJTPSIkVU5JQ09ERV9MSUJTICRVTklDT0RFR0xJQl9MSUJTIgor
CVBLR19DSEVDS19NT0RVTEVTKFtVTklDT0RFXSwgW2dsaWItMi4wIHBhbmdvID49IDEuMjEuMF0p
CiBmaQogCiBBQ19TVUJTVChbVU5JQ09ERV9DRkxBR1NdKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48723</attachid>
            <date>2010-02-14 08:35:56 -0800</date>
            <delta_ts>2010-02-17 14:50:25 -0800</delta_ts>
            <desc>patch</desc>
            <filename>TextBreakIteratorGtk.diff</filename>
            <type>text/plain</type>
            <size>457</size>
            <attacher name="Alexander Butenko">a.butenka</attacher>
            
              <data encoding="base64">LS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JHdGsuY3BwLm9s
ZAkyMDEwLTAyLTE0IDExOjI5OjE0LjAwMDAwMDAwMCAtMDQwMAorKysgV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5jcHAJMjAxMC0wMi0xNCAxMjoyNjozMy4w
MDAwMDAwMDAgLTA0MDAKQEAgLTE4MSw3ICsxODEsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBp
OwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiB0ZXh0QnJlYWtGaXJzdChiaSk7CisgICAg
aWYgKGJpLT5tX3R5cGUgPT0gVUJSS19DSEFSQUNURVIpCisgICAgICAgIHJldHVybiB0ZXh0QnJl
YWtGaXJzdChiaSk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gVGV4dEJyZWFrRG9uZTsKIH0K
IAogaW50IHRleHRCcmVha1ByZWNlZGluZyhUZXh0QnJlYWtJdGVyYXRvciogYmksIGludCBwb3Mp
Cg==
</data>
<flag name="review"
          id="31447"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>