<?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>56995</bug_id>
          
          <creation_ts>2011-03-23 21:25:00 -0700</creation_ts>
          <short_desc>Dictionary text extraction is not correctly detecting word boundaries on bing.com</short_desc>
          <delta_ts>2011-03-24 13:06:20 -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>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>372663</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-03-23 21:25:00 -0700</bug_when>
    <thetext>Dictionary text extraction is not correctly detecting word boundaries on bing.com</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372664</commentid>
    <comment_count>1</comment_count>
      <attachid>86740</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-03-23 21:32:18 -0700</bug_when>
    <thetext>Created attachment 86740
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372872</commentid>
    <comment_count>2</comment_count>
      <attachid>86740</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-24 10:05:26 -0700</bug_when>
    <thetext>Comment on attachment 86740
Patch

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

&gt; Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm:429
&gt; +    // Convert to screen coordinates.
&gt; +    textBaselineOrigin = [m_wkView convertPoint:textBaselineOrigin toView:nil];
&gt; +    textBaselineOrigin = [m_wkView.window convertRectToScreen:NSMakeRect(textBaselineOrigin.x, textBaselineOrigin.y, 0, 0)].origin;

Did you test this in scale factors other than 1X?

&gt; Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm:431
&gt; +    NSMutableDictionary *options = [NSMutableDictionary dictionaryWithCapacity:dictionaryPopupInfo.options.size()];

Normally we avoid autoreleased objects. I would have expected alloc/init and RetainPtr here instead. Probably fine either way, though.

&gt; Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm:436
&gt; +    HashMap&lt;String, String&gt;::const_iterator it = dictionaryPopupInfo.options.begin();
&gt; +    HashMap&lt;String, String&gt;::const_iterator end = dictionaryPopupInfo.options.end();
&gt; +    for (; it != end; ++it)
&gt; +        [options setObject:nsStringFromWebCoreString(it-&gt;second) forKey:nsStringFromWebCoreString(it-&gt;first)];

Seems to me we should have a helper function to turn a HashMap&lt;String, String&gt; into a NSDictionary *, rather than doing it in the middle of this function.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:251
&gt; +static bool shouldUseSelection(const VisiblePosition&amp; position, const VisibleSelection&amp; selection)

I find this function slightly confusing. Too much of it is connective tissue converting things to Range and then Range’s API is so awkward. If the whole body of the function once the ranges were created was a named helper function then I could probably understand it perfectly. It’s not clear what compareBoundaryPoints and isPointInRange are accomplishing and the function name would probably clear that up.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:318
&gt; +    VisiblePosition wordStart = startOfWord(position);
&gt; +    VisiblePosition wordEnd = endOfWord(position);
&gt; +
&gt; +    RefPtr&lt;Range&gt; finalRange = makeRange(wordStart, wordEnd);

I don’t think the wordStart and wordEnd locals are needed or helpful.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:322
&gt; +    NSDictionary *options = nil;

Would be nice to only define this once instead of defining it in both sides of the #if.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:335
&gt; +    if (selection.isNone())
&gt; +        return;
&gt; +
&gt; +    RefPtr&lt;Range&gt; selectedRange = selection.toNormalizedRange();
&gt; +    if (!selectedRange)
&gt; +        return;

The isNone check is redundant and could be omitted.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:355
&gt; +    NSDictionary *options = nil;

Would be nice to only define this once instead of on both sides of the #if.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:390
&gt; +    for (NSString *key in options)
&gt; +        dictionaryPopupInfo.options.add(key, (NSString *)[options valueForKey:key]);

Would be nice to have a function to convert a NSDictionary of strings into a HashMap&lt;String, String&gt; instead of doing it inline in a loop. Although that is a pretty tight loop!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373017</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-03-24 13:06:20 -0700</bug_when>
    <thetext>Fixed in r81890.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86740</attachid>
            <date>2011-03-23 21:32:18 -0700</date>
            <delta_ts>2011-03-24 10:05:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56995-20110323213217.patch</filename>
            <type>text/plain</type>
            <size>19417</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxODUzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDMtMjMgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBEaWN0aW9uYXJ5IHRleHQgZXh0cmFjdGlvbiBpcyBub3QgY29ycmVjdGx5
IGRldGVjdGluZyB3b3JkIGJvdW5kYXJpZXMgb24gYmluZy5jb20KKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzkwNzg1Njk+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01Njk5NQorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgIEFkZCBz
b21lIGVkaXRpbmcgcmVsYXRlZCBleHBvcnRzIG5lZWRlZCBieSBXZWJLaXQyLgorCiAyMDExLTAz
LTIzICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24g
ODE4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpA
QCAtMjE2LDYgKzIxNiw3IEBAIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUyNXJlbW92ZVJlc291
cmMKIF9fWk43V2ViQ29yZTExUmVuZGVyTGF5ZXIxOXNjcm9sbFJlY3RUb1Zpc2libGVFUktOU183
SW50UmVjdEViUktOU18xNVNjcm9sbEFsaWdubWVudEVTNl8KIF9fWk43V2ViQ29yZTExZ2xvYmFs
UG9pbnRFUks4X05TUG9pbnRQOE5TV2luZG93CiBfX1pON1dlYkNvcmUxMW1lbW9yeUNhY2hlRXYK
K19fWk43V2ViQ29yZTExc3RhcnRPZldvcmRFUktOU18xNVZpc2libGVQb3NpdGlvbkVOU185RVdv
cmRTaWRlRQogX19aTjdXZWJDb3JlMTF0b1VzZXJTcGFjZUVSSzdfTlNSZWN0UDhOU1dpbmRvdwog
X19aTjdXZWJDb3JlMTF3cml0ZVRvRmlsZUVpUEtjaQogX19aTjdXZWJDb3JlMTJDaHJvbWVDbGll
bnQyMHBhaW50Q3VzdG9tU2Nyb2xsYmFyRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9h
dFJlY3RFTlNfMjBTY3JvbGxiYXJDb250cm9sU2l6ZUVqTlNfMTNTY3JvbGxiYXJQYXJ0RWJmZmoK
QEAgLTI5NSw2ICsyOTYsNyBAQCBfX1pON1dlYkNvcmUxMlRleHRFbmNvZGluZ0MxRVJLTjNXVEY2
U3RyCiBfX1pON1dlYkNvcmUxMlRleHRJdGVyYXRvcjExcmFuZ2VMZW5ndGhFUEtOU181UmFuZ2VF
YgogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3IyNnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3Ro
RVBOU183RWxlbWVudEVpaWIKIF9fWk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9yN2FkdmFuY2VFdgor
X19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3I4c3VicmFuZ2VFUE5TXzVSYW5nZUVpaQogX19aTjdX
ZWJDb3JlMTJUZXh0SXRlcmF0b3JDMUVQS05TXzVSYW5nZUVOU18yMFRleHRJdGVyYXRvckJlaGF2
aW9yRQogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3JEMUV2CiBfX1pON1dlYkNvcmUxMldvcmtl
clRocmVhZDE3d29ya2VyVGhyZWFkQ291bnRFdgpAQCAtMzY1LDYgKzM2Nyw3IEBAIF9fWk43V2Vi
Q29yZTE0U2VjdXJpdHlPcmlnaW4zMnJlbW92ZU9yaWcKIF9fWk43V2ViQ29yZTE0U2VjdXJpdHlP
cmlnaW40MHNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWVFYlJLTjNXVEY2
U3RyaW5nRQogX19aTjdXZWJDb3JlMTRTZWN1cml0eU9yaWdpbjZjcmVhdGVFUktOM1dURjZTdHJp
bmdFUzRfaQogX19aTjdXZWJDb3JlMTRTZWN1cml0eU9yaWdpbjZjcmVhdGVFUktOU180S1VSTEVp
CitfX1pON1dlYkNvcmUxNGVuZE9mUGFyYWdyYXBoRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FTlNf
MjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pON1dlYkNvcmUxNUFyY2hpdmVSZXNv
dXJjZTZjcmVhdGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTJTaGFyZWRCdWZmZXJFRUVSS05TXzRL
VVJMRVJLTlMxXzZTdHJpbmdFU0FfU0FfUktOU18xNlJlc291cmNlUmVzcG9uc2VFCiBfX1pON1dl
YkNvcmUxNURPTVdyYXBwZXJXb3JsZDEzY2xlYXJXcmFwcGVyc0V2CiBfX1pON1dlYkNvcmUxNURP
TVdyYXBwZXJXb3JsZEQxRXYKQEAgLTQ2Myw2ICs0NjYsNyBAQCBfX1pON1dlYkNvcmUxNmRlbGV0
ZUFsbENvb2tpZXNFdgogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLN19OU1JlY3QK
IF9fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVjdEVSS05TXzlGbG9hdFJlY3RFCiBfX1pON1dl
YkNvcmUxNmlzRW5kT2ZQYXJhZ3JhcGhFUktOU18xNVZpc2libGVQb3NpdGlvbkVOU18yN0VkaXRp
bmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKK19fWk43V2ViQ29yZTE2c3RhcnRPZlBhcmFncmFwaEVS
S05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQog
X19aTjdXZWJDb3JlMTdDcmVkZW50aWFsU3RvcmFnZTNnZXRFUktOU18xNVByb3RlY3Rpb25TcGFj
ZUUKIF9fWk43V2ViQ29yZTE3RE9NSW1wbGVtZW50YXRpb24xM2lzWE1MTUlNRVR5cGVFUktOM1dU
RjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxN0RPTUltcGxlbWVudGF0aW9uMTRpc1RleHRNSU1FVHlw
ZUVSS04zV1RGNlN0cmluZ0UKQEAgLTk3OSw2ICs5ODMsNyBAQCBfX1pON1dlYkNvcmU5VGltZXJC
YXNlNXN0YXJ0RWRkCiBfX1pON1dlYkNvcmU5VGltZXJCYXNlQzJFdgogX19aTjdXZWJDb3JlOVRp
bWVyQmFzZUQyRXYKIF9fWk43V2ViQ29yZTljbG9zZUZpbGVFUmkKK19fWk43V2ViQ29yZTllbmRP
ZldvcmRFUktOU18xNVZpc2libGVQb3NpdGlvbkVOU185RVdvcmRTaWRlRQogX19aTjdXZWJDb3Jl
OWZvbnRDYWNoZUV2CiBfX1pON1dlYkNvcmU5bWFrZVJhbmdlRVJLTlNfMTVWaXNpYmxlUG9zaXRp
b25FUzJfCiBfX1pON1dlYkNvcmU5cGFnZUNhY2hlRXYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDgxODUzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsNTAgQEAKKzIwMTEtMDMtMjMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEaWN0aW9uYXJ5
IHRleHQgZXh0cmFjdGlvbiBpcyBub3QgY29ycmVjdGx5IGRldGVjdGluZyB3b3JkIGJvdW5kYXJp
ZXMgb24gYmluZy5jb20KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzkwNzg1Njk+CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Njk5NQorCisgICAgICAg
ICogU2hhcmVkL0RpY3Rpb25hcnlQb3B1cEluZm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpEaWN0
aW9uYXJ5UG9wdXBJbmZvOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpEaWN0aW9uYXJ5UG9w
dXBJbmZvOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9EaWN0aW9uYXJ5UG9wdXBJbmZvLmg6
CisgICAgICAgIEFkZCBvcHRpb25zIGRpY3Rpb25hcnkuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OmRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKToKKyAgICAgICAgQWRkIHBhdGggdGhhdCBj
YW4gcGFzcyBvcHRpb25zIHRocm91Z2guCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L21hYy9XZWJDb250ZXh0TWVudUNsaWVudE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29udGV4dE1lbnVDbGllbnQ6Omxvb2tVcEluRGljdGlvbmFyeSk6CisgICAgICAgIFVzZSB0
aGUgbmV3IHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uIHdoaWNoIGNhbiBleHRy
YWN0IGNvbnRleHQKKyAgICAgICAgaWYgc3VwcG9ydGVkLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OmNoYXJhY3RlclJhbmdlQXRQb3NpdGlvbkZv
clBvaW50KToKKyAgICAgICAgKFdlYktpdDo6Y2hhcmFjdGVyUmFuZ2VBdFBvaW50KToKKyAgICAg
ICAgU3BsaXQgZnVuY3Rpb25hbGl0eSBvdXQgb2YgY2hhcmFjdGVyUmFuZ2VBdFBvaW50IGFuZCBp
bnRvIAorICAgICAgICBjaGFyYWN0ZXJSYW5nZUF0UG9zaXRpb25Gb3JQb2ludCB0byBhdm9pZCBk
b2luZyBkdXBsaWNhdGUgd29yayAKKyAgICAgICAgaWYgeW91IGFscmVhZHkgaGF2ZSB0aGUgcG9z
aXRpb24uCisKKyAgICAgICAgKFdlYktpdDo6c2hvdWxkVXNlU2VsZWN0aW9uKToKKyAgICAgICAg
QWRkIHByZWRpY2F0ZSB0byBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHVzZSB0aGUgc2VsZWN0aW9u
IGluc3RlYWQKKyAgICAgICAgb2YgZXhwYW5kaW5nIHRvIGZpbmQgdGhlIHdvcmQgd2UgYXJlIG92
ZXIuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBB
dExvY2F0aW9uKToKKyAgICAgICAgSWYgYXZhaWxhYmxlLCB1c2UgdGhlIHN1cnJvdW5kaW5nIHBh
cmFncmFwaCBhcyBjb250ZXh0IHRvIGdldCBiZXR0ZXIgZXh0cmFjdGlvbgorICAgICAgICBhbmQg
dG8gZ2V0IGxleGljb2dyYXBoaWNhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgd29yZC4gQWxzbywg
Y2xlYW4gdXAgYW5kIHVzZSAKKyAgICAgICAgZWRpdGluZyBBUElzIHRvIG1ha2UgdGhlIGNvZGUg
bW9yZSBjb25jaXNlIGFuZCB1bmRlcnN0YW5kYWJsZS4KKworICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbik6CisgICAgICAgIFVzZSBz
aW1pbGFyIGxvZ2ljIGFzIGluIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbiB0byBl
eHRyYWN0IGFkZHRpb25hbAorICAgICAgICBkZXRhaWxzIGZyb20gYSBzZWxlY3Rpb24gZm9yIHVz
ZSBpbiB0aGUgZGljdGlvbmFyeSBwb3B1cC4KKworICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKToKKyAgICAgICAgUGFzcyBvcHRpb25zIHRv
IFdlYlByb2Nlc3MgaWYgYXZhaWxhYmxlLgorCiAyMDExLTAzLTIzICBKaWEgUHUgIDxqcHVAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL0RpY3Rpb25hcnlQb3B1cEluZm8uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9EaWN0aW9uYXJ5UG9wdXBJbmZvLmNwcAkocmV2aXNpb24gODE4
MTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRGljdGlvbmFyeVBvcHVwSW5mby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgdm9pZCBEaWN0aW9uYXJ5UG9wdXBJbmZvOjpl
bmNvZGUoQ29yZUlQQwogICAgIGVuY29kZXItPmVuY29kZShvcmlnaW4pOwogICAgIGVuY29kZXIt
PmVuY29kZShmb250SW5mbyk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bSh0eXBlKTsKKyAgICBl
bmNvZGVyLT5lbmNvZGUob3B0aW9ucyk7CiB9CiAKIGJvb2wgRGljdGlvbmFyeVBvcHVwSW5mbzo6
ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRGljdGlvbmFyeVBvcHVw
SW5mbyYgcmVzdWx0KQpAQCAtNDUsNiArNDYsOCBAQCBib29sIERpY3Rpb25hcnlQb3B1cEluZm86
OmRlY29kZShDb3JlSVBDCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIt
PmRlY29kZUVudW0ocmVzdWx0LnR5cGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUocmVzdWx0Lm9wdGlvbnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9EaWN0
aW9uYXJ5UG9wdXBJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0Rp
Y3Rpb25hcnlQb3B1cEluZm8uaAkocmV2aXNpb24gODE4MTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRGljdGlvbmFyeVBvcHVwSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw5
IEBACiAKICNpbmNsdWRlICJGb250SW5mby5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2lu
dC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgQ29y
ZUlQQyB7CiAgICAgY2xhc3MgQXJndW1lbnREZWNvZGVyOwpAQCAtNDgsNiArNTEsNyBAQCBzdHJ1
Y3QgRGljdGlvbmFyeVBvcHVwSW5mbyB7CiAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW47
CiAgICAgRm9udEluZm8gZm9udEluZm87CiAgICAgVHlwZSB0eXBlOworICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IG9wdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBs
Lm1tCShyZXZpc2lvbiA4MTgxMykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1BhZ2VDbGllbnRJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW1w
b3J0IDx3dGYvUGFzc093blB0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2lt
cG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZh
Y2UuaD4KIAogQGludGVyZmFjZSBOU0FwcGxpY2F0aW9uIChXZWJOU0FwcGxpY2F0aW9uRGV0YWls
cykKIC0gKE5TQ3Vyc29yICopX2N1cnNvclJlY3RDdXJzb3I7CkBAIC00MjIsOSArNDIzLDI0IEBA
IHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFBlcmZvcm1EaWN0aW9uYXIKICAgICBOU1BvaW50IHRl
eHRCYXNlbGluZU9yaWdpbiA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luOwogICAgIHRleHRC
YXNlbGluZU9yaWdpbi55ICs9IFtmb250IGFzY2VuZGVyXTsKICAgICAKKyNpZiAhZGVmaW5lZChC
VUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgLy8gQ29udmVydCB0byBzY3JlZW4gY29vcmRp
bmF0ZXMuCisgICAgdGV4dEJhc2VsaW5lT3JpZ2luID0gW21fd2tWaWV3IGNvbnZlcnRQb2ludDp0
ZXh0QmFzZWxpbmVPcmlnaW4gdG9WaWV3Om5pbF07CisgICAgdGV4dEJhc2VsaW5lT3JpZ2luID0g
W21fd2tWaWV3LndpbmRvdyBjb252ZXJ0UmVjdFRvU2NyZWVuOk5TTWFrZVJlY3QodGV4dEJhc2Vs
aW5lT3JpZ2luLngsIHRleHRCYXNlbGluZU9yaWdpbi55LCAwLCAwKV0ub3JpZ2luOworCisgICAg
TlNNdXRhYmxlRGljdGlvbmFyeSAqb3B0aW9ucyA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoQ2FwYWNpdHk6ZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zLnNpemUoKV07CisK
KyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkaWN0aW9u
YXJ5UG9wdXBJbmZvLm9wdGlvbnMuYmVnaW4oKTsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zLmVuZCgp
OworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIFtvcHRpb25zIHNldE9iamVj
dDpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKGl0LT5zZWNvbmQpIGZvcktleTpuc1N0cmluZ0Zy
b21XZWJDb3JlU3RyaW5nKGl0LT5maXJzdCldOworCisgICAgV0tTaG93V29yZERlZmluaXRpb25X
aW5kb3coYXR0cmlidXRlZFN0cmluZy5nZXQoKSwgdGV4dEJhc2VsaW5lT3JpZ2luLCBvcHRpb25z
KTsKKyNlbHNlCiAgICAgLy8gSWYgdGhlIGRpY3Rpb25hcnkgbG9va3VwIGlzIGJlaW5nIHRyaWdn
ZXJlZCBieSBhIGhvdCBrZXksIGZvcmNlIHRoZSBvdmVybGF5IHN0eWxlLgogICAgIE5TRGljdGlv
bmFyeSAqb3B0aW9ucyA9IChkaWN0aW9uYXJ5UG9wdXBJbmZvLnR5cGUgPT0gRGljdGlvbmFyeVBv
cHVwSW5mbzo6SG90S2V5KSA/IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6TlNE
ZWZpbml0aW9uUHJlc2VudGF0aW9uVHlwZU92ZXJsYXkgZm9yS2V5Ok5TRGVmaW5pdGlvblByZXNl
bnRhdGlvblR5cGVLZXldIDogMDsKICAgICBbbV93a1ZpZXcgc2hvd0RlZmluaXRpb25Gb3JBdHRy
aWJ1dGVkU3RyaW5nOmF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCkgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
W2F0dHJpYnV0ZWRTdHJpbmcuZ2V0KCkgbGVuZ3RoXSkgb3B0aW9uczpvcHRpb25zIGJhc2VsaW5l
T3JpZ2luUHJvdmlkZXI6XihOU1JhbmdlIGFkanVzdGVkUmFuZ2UpIHsgcmV0dXJuIChOU1BvaW50
KXRleHRCYXNlbGluZU9yaWdpbjsgfV07CisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9X
ZWJDb250ZXh0TWVudUNsaWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJDb250ZXh0TWVudUNsaWVudE1hYy5tbQko
cmV2aXNpb24gODE4MTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L21hYy9XZWJDb250ZXh0TWVudUNsaWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDEs
MTEgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViQ29udGV4dE1lbnVDbGll
bnQ6Omxvb2tVcEluRGljdGlvbmFyeShGcmFtZSogZnJhbWUpCiB7Ci0gICAgUmVmUHRyPFJhbmdl
PiBzZWxlY3RlZFJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9wYWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKERpY3Rpb25hcnlQ
b3B1cEluZm86OkNvbnRleHRNZW51LCBmcmFtZSwgc2VsZWN0ZWRSYW5nZS5nZXQoKSk7CisgICAg
bV9wYWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihEaWN0aW9uYXJ5UG9w
dXBJbmZvOjpDb250ZXh0TWVudSwgZnJhbWUsIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9u
KCkpOwogfQogCiBib29sIFdlYkNvbnRleHRNZW51Q2xpZW50Ojppc1NwZWFraW5nKCkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24g
ODE4MTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAiRGljdGlvbmFyeVBvcHVw
SW5mby5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIE9CSkNfQ0xBU1MgQWNjZXNzaWJp
bGl0eVdlYlBhZ2VPYmplY3Q7CitPQkpDX0NMQVNTIE5TRGljdGlvbmFyeTsKIE9CSkNfQ0xBU1Mg
TlNPYmplY3Q7CiAjZW5kaWYKIApAQCAtNzgsNiArNzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgUmFuZ2U7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogICAgIGNsYXNz
IFNoYXJlZEJ1ZmZlcjsKKyAgICBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogfQogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKQEAgLTMxNiw3ICszMTgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1teShi
b29sJik7CiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEZvclJhbmdlKERpY3Rpb25hcnlQb3B1cEluZm86OlR5cGUsIFdlYkNvcmU6OkZyYW1lKiwg
V2ViQ29yZTo6UmFuZ2UqKTsKKyAgICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2Vs
ZWN0aW9uKERpY3Rpb25hcnlQb3B1cEluZm86OlR5cGUsIFdlYkNvcmU6OkZyYW1lKiwgY29uc3Qg
V2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYpOwogCiAgICAgYm9vbCBpc1NwZWFraW5nKCk7CiAg
ICAgdm9pZCBzcGVhayhjb25zdCBTdHJpbmcmKTsKQEAgLTQ0MCw2ICs0NDIsNyBAQCBwcml2YXRl
OgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBB
dExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHBlcmZvcm1E
aWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRGljdGlvbmFyeVBvcHVwSW5mbzo6VHlwZSwgV2ViQ29y
ZTo6RnJhbWUqLCBXZWJDb3JlOjpSYW5nZSosIE5TRGljdGlvbmFyeSAqb3B0aW9ucyk7CiAKICAg
ICB2b2lkIHNldFdpbmRvd0lzVmlzaWJsZShib29sIHdpbmRvd0lzVmlzaWJsZSk7CiAgICAgdm9p
ZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5k
b3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdG
cmFtZUluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBhY2Nlc3Np
YmlsaXR5Vmlld0Nvb3JkaW5hdGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHJldmlzaW9uIDgxODEzKQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbFZpZXcu
aD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dp
bmRvd3NLZXlib2FyZENvZGVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL3Zpc2libGVfdW5pdHMuaD4K
ICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKQEAgLTE2NCwxMiArMTY1LDEyIEBAIHZvaWQgV2ViUGFnZTo6Z2V0TWFya2VkUmFuZ2Uo
dWludDY0X3QmIGwKICAgICBnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShmcmFtZS0+ZWRp
dG9yKCktPmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKSwgbG9jYXRpb24sIGxlbmd0aCk7CiB9CiAK
LXN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBjaGFyYWN0ZXJSYW5nZUF0UG9pbnQoRnJhbWUqIGZy
YW1lLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCisKK3N0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBj
aGFyYWN0ZXJSYW5nZUF0UG9zaXRpb25Gb3JQb2ludChGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKLSAgICBWaXNp
YmxlUG9zaXRpb24gcG9zaXRpb24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQocG9p
bnQpOwogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
CisKICAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMgPSBwb3NpdGlvbi5wcmV2aW91cygpOwog
ICAgIGlmIChwcmV2aW91cy5pc05vdE51bGwoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHBy
ZXZpb3VzQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocHJldmlvdXMsIHBvc2l0aW9uKTsKQEAg
LTE4OCw3ICsxODksMTIgQEAgc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IGNoYXJhY3RlclJhbmdl
QQogICAgIAogICAgIHJldHVybiAwOwogfQotICAgIAorCitzdGF0aWMgUGFzc1JlZlB0cjxSYW5n
ZT4gY2hhcmFjdGVyUmFuZ2VBdFBvaW50KEZyYW1lKiBmcmFtZSwgY29uc3QgSW50UG9pbnQmIHBv
aW50KQoreworICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZUF0UG9zaXRpb25Gb3JQb2ludChmcmFt
ZSwgZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHBvaW50KSwgcG9pbnQpOworfQorCiB2
b2lkIFdlYlBhZ2U6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnQoSW50UG9pbnQgcG9pbnQsIHVpbnQ2
NF90JiBpbmRleCkKIHsKICAgICBpbmRleCA9IE5TTm90Rm91bmQ7CkBAIC0yNDIsNiArMjQ4LDI3
IEBAIHZvaWQgV2ViUGFnZTo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UKICAgICByZXN1bHRS
ZWN0ID0gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKIH0KIAorc3RhdGlj
IGJvb2wgc2hvdWxkVXNlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24s
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAgICBSZWZQdHI8UmFuZ2U+
IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAo
IXNlbGVjdGVkUmFuZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxSYW5n
ZT4gcG9zaXRpb25SYW5nZSA9IG1ha2VSYW5nZShwb3NpdGlvbiwgcG9zaXRpb24pOworCisgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgc2VsZWN0ZWRSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5
UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgcG9zaXRpb25SYW5nZS5nZXQoKSwgZWMpOwor
ICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFzZWxlY3RlZFJh
bmdlLT5pc1BvaW50SW5SYW5nZShwb3NpdGlvblJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBwb3Np
dGlvblJhbmdlLT5zdGFydE9mZnNldCgpLCBlYykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoZWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQor
CiB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBG
bG9hdFBvaW50JiBmbG9hdFBvaW50KQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFp
bkZyYW1lKCk7CkBAIC0yNTQsNDIgKzI4MSw4NCBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwQXRMCiAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KHBvaW50LCBmYWxzZSk7CiAgICAgZnJhbWUg
PSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgPyByZXN1bHQuaW5uZXJOb25TaGFyZWROb2Rl
KCktPmRvY3VtZW50KCktPmZyYW1lKCkgOiBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKIAotICAgIC8vIEZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBj
aGFyYWN0ZXJzIHVuZGVyIHRoZSBwb2ludC4KLSAgICBSZWZQdHI8UmFuZ2U+IGNoYXJhY3RlclJh
bmdlID0gY2hhcmFjdGVyUmFuZ2VBdFBvaW50KGZyYW1lLCBmcmFtZS0+dmlldygpLT53aW5kb3dU
b0NvbnRlbnRzKHBvaW50KSk7Ci0gICAgaWYgKCFjaGFyYWN0ZXJSYW5nZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gR3JhYiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRleHQuCi0gICAgUmVm
UHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9j
dXNlZE9yTWFpbkZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOwotCi0gICAgLy8gVXNlIHRoZSBzZWxlY3RlZCB0ZXh0IGlmIHRoZSBwb2ludCB3YXMg
YW55d2hlcmUgaW4gaXQuIEFzc2VydGFpbiB0aGlzIGJ5IHNlZWluZyBpZiBlaXRoZXIgY2hhcmFj
dGVyIHJhbmdlCi0gICAgLy8gdGhlIG1vdXNlIGlzIG92ZXIgaXMgY29udGFpbmVkIGJ5IHRoZSBz
ZWxlY3Rpb24gcmFuZ2UuCi0gICAgaWYgKGNoYXJhY3RlclJhbmdlICYmIHNlbGVjdGVkUmFuZ2Up
IHsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIHNlbGVjdGVkUmFuZ2Ut
PmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsIGNoYXJhY3RlclJh
bmdlLmdldCgpLCBlYyk7Ci0gICAgICAgIGlmICghZWMpIHsKLSAgICAgICAgICAgIGlmIChzZWxl
Y3RlZFJhbmdlLT5pc1BvaW50SW5SYW5nZShjaGFyYWN0ZXJSYW5nZS0+c3RhcnRDb250YWluZXIo
KSwgY2hhcmFjdGVyUmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIGVjKSkgewotICAgICAgICAgICAgICAg
IGlmICghZWMpCi0gICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlclJhbmdlID0gc2VsZWN0ZWRS
YW5nZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAgICBJbnRQb2ludCB0cmFu
c2xhdGVkUG9pbnQgPSBmcmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHBvaW50KTsKIAot
ICAgIGlmICghY2hhcmFjdGVyUmFuZ2UpCisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0g
ZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHRyYW5zbGF0ZWRQb2ludCk7CisKKyAgICAv
LyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBvaW50
LgorICAgIGlmICghY2hhcmFjdGVyUmFuZ2VBdFBvc2l0aW9uRm9yUG9pbnQoZnJhbWUsIHBvc2l0
aW9uLCB0cmFuc2xhdGVkUG9pbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbiA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1h
aW5GcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CisgICAgaWYgKHNob3VsZFVzZVNl
bGVjdGlvbihwb3NpdGlvbiwgc2VsZWN0aW9uKSkgeworICAgICAgICBwZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEZvclNlbGVjdGlvbihEaWN0aW9uYXJ5UG9wdXBJbmZvOjpIb3RLZXksIGZyYW1lLCBz
ZWxlY3Rpb24pOwogICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKQorICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1
c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaCBvZiB0ZXh0LgorICAgIFZpc2libGVQb3NpdGlv
biBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgocG9zaXRpb24pOworICAgIFZpc2li
bGVQb3NpdGlvbiBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChwb3NpdGlvbik7CisKKyAg
ICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBvc2l0aW9uKS5nZXQoKSksIDApOwogCi0g
ICAgLy8gRW5zdXJlIHdlIGhhdmUgd2hvbGUgd29yZHMuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24oY2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgIHNlbGVjdGlvbi5leHBhbmRVc2lu
Z0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7CisgICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hh
cmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7Cisg
ICAgU3RyaW5nIGZ1bGxQbGFpblRleHRTdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJh
bmdlLmdldCgpKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gZmluYWxSYW5nZSA9IHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKKyAg
ICBOU1JhbmdlIGV4dHJhY3RlZFJhbmdlID0gV0tFeHRyYWN0V29yZERlZmluaXRpb25Ub2tlblJh
bmdlRnJvbUNvbnRleHR1YWxTdHJpbmcoZnVsbFBsYWluVGV4dFN0cmluZywgcmFuZ2VUb1Bhc3Ms
ICZvcHRpb25zKTsKKworICAgIFJlZlB0cjxSYW5nZT4gZmluYWxSYW5nZSA9IFRleHRJdGVyYXRv
cjo6c3VicmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpLCBleHRyYWN0ZWRSYW5nZS5sb2Nh
dGlvbiwgZXh0cmFjdGVkUmFuZ2UubGVuZ3RoKTsKKyAgICBpZiAoIWZpbmFsUmFuZ2UpCisgICAg
ICAgIHJldHVybjsKKyNlbHNlCisgICAgVmlzaWJsZVBvc2l0aW9uIHdvcmRTdGFydCA9IHN0YXJ0
T2ZXb3JkKHBvc2l0aW9uKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gd29yZEVuZCA9IGVuZE9mV29y
ZChwb3NpdGlvbik7CisKKyAgICBSZWZQdHI8UmFuZ2U+IGZpbmFsUmFuZ2UgPSBtYWtlUmFuZ2Uo
d29yZFN0YXJ0LCB3b3JkRW5kKTsKICAgICBpZiAoIWZpbmFsUmFuZ2UpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRGljdGlvbmFyeVBvcHVw
SW5mbzo6SG90S2V5LCBmcmFtZSwgZmluYWxSYW5nZS5nZXQoKSk7CisgICAgTlNEaWN0aW9uYXJ5
ICpvcHRpb25zID0gbmlsOworI2VuZGlmCisKKyAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZv
clJhbmdlKERpY3Rpb25hcnlQb3B1cEluZm86OkhvdEtleSwgZnJhbWUsIGZpbmFsUmFuZ2UuZ2V0
KCksIG9wdGlvbnMpOwogfQogCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
Rm9yUmFuZ2UoRGljdGlvbmFyeVBvcHVwSW5mbzo6VHlwZSB0eXBlLCBGcmFtZSogZnJhbWUsIFJh
bmdlKiByYW5nZSkKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxl
Y3Rpb24oRGljdGlvbmFyeVBvcHVwSW5mbzo6VHlwZSB0eXBlLCBGcmFtZSogZnJhbWUsIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAgICBpZiAoc2VsZWN0aW9uLmlzTm9u
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2Ug
PSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVjdGVkUmFuZ2Up
CisgICAgICAgIHJldHVybjsKKworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFS
RCkKKyAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJs
ZVN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52
aXNpYmxlRW5kKCk7CisKKyAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRo
ZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCisgICAgVmlzaWJsZVBvc2l0aW9uIHBh
cmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CisgICAgVmlz
aWJsZVBvc2l0aW9uIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7
CisKKyAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwor
ICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
bWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKKyAgICBOU1Jh
bmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVu
Z3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKKworICAgIFN0cmlu
ZyBmdWxsUGxhaW5UZXh0U3RyaW5nID0gcGxhaW5UZXh0KG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFy
dCwgcGFyYWdyYXBoRW5kKS5nZXQoKSk7CisKKyAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUg
dGhlIHJhbmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSByZXR1cm5lZCBvcHRp
b25zLgorICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKKyAgICBXS0V4dHJhY3RXb3Jk
RGVmaW5pdGlvblRva2VuUmFuZ2VGcm9tQ29udGV4dHVhbFN0cmluZyhmdWxsUGxhaW5UZXh0U3Ry
aW5nLCByYW5nZVRvUGFzcywgJm9wdGlvbnMpOworI2Vsc2UKKyAgICBOU0RpY3Rpb25hcnkgKm9w
dGlvbnMgPSBuaWw7CisjZW5kaWYKKworICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFu
Z2UodHlwZSwgZnJhbWUsIHNlbGVjdGVkUmFuZ2UuZ2V0KCksIG9wdGlvbnMpOworfQorCit2b2lk
IFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRGljdGlvbmFyeVBvcHVw
SW5mbzo6VHlwZSB0eXBlLCBGcmFtZSogZnJhbWUsIFJhbmdlKiByYW5nZSwgTlNEaWN0aW9uYXJ5
ICpvcHRpb25zKQogewogICAgIFN0cmluZyByYW5nZVRleHQgPSByYW5nZS0+dGV4dCgpOwogICAg
IGlmIChyYW5nZVRleHQuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKQpAQCAtMzE3LDYgKzM4
Niw5IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3IKICAgICBkaWN0
aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbiA9IEZsb2F0UG9pbnQocmFuZ2VSZWN0LngoKSwgcmFuZ2VS
ZWN0LnkoKSk7CiAgICAgZGljdGlvbmFyeVBvcHVwSW5mby5mb250SW5mby5mb250QXR0cmlidXRl
RGljdGlvbmFyeSA9IGZvbnREZXNjcmlwdG9yQXR0cmlidXRlczsKIAorICAgIGZvciAoTlNTdHJp
bmcgKmtleSBpbiBvcHRpb25zKQorICAgICAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMu
YWRkKGtleSwgKE5TU3RyaW5nICopW29wdGlvbnMgdmFsdWVGb3JLZXk6a2V5XSk7CisKICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKHJh
bmdlVGV4dCwgZGljdGlvbmFyeVBvcHVwSW5mbykpOwogfQogCg==
</data>
<flag name="review"
          id="79060"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>