<?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>57124</bug_id>
          
          <creation_ts>2011-03-25 14:43:57 -0700</creation_ts>
          <short_desc>When the scroller style is changed via delegate method, the page needs a full relayout and repaint</short_desc>
          <delta_ts>2011-03-28 16:15:36 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>bdakin</cc>
    
    <cc>hyatt</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>373733</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-25 14:43:57 -0700</bug_when>
    <thetext>In the delegate method updateScrollerStyleForNewRecommendedScrollerStyle (which is is ScrollAnimatorMac), to avoid paint artifacts when the styles switch, we need a full relayout and repaint. Since this is an uncommon operation, I think the easiest way to do this with certainty is to just reload the page in this case. Patch forthcoming.

&lt;rdar://problem/9059129&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373735</commentid>
    <comment_count>1</comment_count>
      <attachid>86984</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-25 14:48:06 -0700</bug_when>
    <thetext>Created attachment 86984
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373738</commentid>
    <comment_count>2</comment_count>
      <attachid>86984</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-03-25 14:56:44 -0700</bug_when>
    <thetext>Comment on attachment 86984
Patch

I don&apos;t think a reload is right. Changing system preferences shouldn&apos;t reload all your pages - that&apos;s likely to change the content. Why can&apos;t you just schedule a full relayout and repaint? It seems like calling setNeedsLayout() on the FrameView should do the trick.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373787</commentid>
    <comment_count>3</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-25 16:45:45 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 86984 [details])
&gt; I don&apos;t think a reload is right. Changing system preferences shouldn&apos;t reload all your pages - that&apos;s likely to change the content. Why can&apos;t you just schedule a full relayout and repaint? It seems like calling setNeedsLayout() on the FrameView should do the trick.

A simple setNeedsLayout() does not seem to be sufficient actually, but I&apos;m sure I can make something less intrusive work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373823</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-03-25 18:17:28 -0700</bug_when>
    <thetext>I would think that

setNeedsRecalcStyleInAllFrames

would work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374840</commentid>
    <comment_count>5</comment_count>
      <attachid>87222</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-28 15:36:28 -0700</bug_when>
    <thetext>Created attachment 87222
New patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374851</commentid>
    <comment_count>6</comment_count>
      <attachid>87222</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-28 15:51:13 -0700</bug_when>
    <thetext>Comment on attachment 87222
New patch

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

review-, but mainly because of the function name.

&gt; Source/WebCore/page/Page.h:122
&gt; +        void setNeedsRecalcStyleInAllFrames();

This is at the top of the Page class. Is it really the most important function in the entire class!? I suppose that theme() wasn’t either, but still, I suggest putting this function much further down, ideally grouped with other similar functions.

&gt; Source/WebCore/platform/ScrollableArea.h:119
&gt; +    virtual void setNeedsRecalcStyleInAllFrames() { }

This function should be named scrollerStyleChanged or something like that. It’s none of ScrollableArea’s business what exactly will be done, and “all frames” is certainly nothing the scrollable area should know about.

The implementation in FrameView will still call setNeedsRecalcStyle, of course.

&gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:272
&gt; +    _animator-&gt;scrollableArea()-&gt;setNeedsRecalcStyleInAllFrames();

How many times will this be called? Will we end up iterating over all the frames once for every scroller? That could add up and be too slow.

What if all the scrollers are in overflow areas? This code only works based on the FrameView, but really it should get to the page and do the work even if it’s not a frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374853</commentid>
    <comment_count>7</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-28 15:57:07 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 87222 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=87222&amp;action=review
&gt; 
&gt; review-, but mainly because of the function name.
&gt; 
&gt; &gt; Source/WebCore/page/Page.h:122
&gt; &gt; +        void setNeedsRecalcStyleInAllFrames();
&gt; 
&gt; This is at the top of the Page class. Is it really the most important function in the entire class!? I suppose that theme() wasn’t either, but still, I suggest putting this function much further down, ideally grouped with other similar functions.
&gt; 

I put it at the top mainly because it is very similar to the static function scheduleForcedStyleRecalcForAllPages(); which is listed at the very, very top of the page class…even before the constructor and destructor. And placing my new function near the top in the .h also means the implementations of these two similar functions are right next to each other in the .cpp. Perhaps the existing static function is only so high because it&apos;s static. But nevertheless, this new function is more similar to that static function than it is to any other function in the class.


&gt; &gt; Source/WebCore/platform/ScrollableArea.h:119
&gt; &gt; +    virtual void setNeedsRecalcStyleInAllFrames() { }
&gt; 
&gt; This function should be named scrollerStyleChanged or something like that. It’s none of ScrollableArea’s business what exactly will be done, and “all frames” is certainly nothing the scrollable area should know about.
&gt; 
&gt; The implementation in FrameView will still call setNeedsRecalcStyle, of course.

Okay.

&gt; 
&gt; &gt; Source/WebCore/platform/mac/ScrollAnimatorMac.mm:272
&gt; &gt; +    _animator-&gt;scrollableArea()-&gt;setNeedsRecalcStyleInAllFrames();
&gt; 
&gt; How many times will this be called? Will we end up iterating over all the frames once for every scroller? That could add up and be too slow.
&gt; 
&gt; What if all the scrollers are in overflow areas? This code only works based on the FrameView, but really it should get to the page and do the work even if it’s not a frame.

This might be a slow operation on some pages, but it is only called when a System Preference is changed. Therefore, it is a very uncommon operation. Also, it works for all ScrollableAreas because telling the Page that all frames need a style reclac means that all frames and everything insides those frames (including overflow areas) will be recalculated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374855</commentid>
    <comment_count>8</comment_count>
      <attachid>87228</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-28 15:59:37 -0700</bug_when>
    <thetext>Created attachment 87228
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374859</commentid>
    <comment_count>9</comment_count>
      <attachid>87229</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-28 16:04:58 -0700</bug_when>
    <thetext>Created attachment 87229
Patch that builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374874</commentid>
    <comment_count>10</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-28 16:15:36 -0700</bug_when>
    <thetext>Thanks! Fixed with r 82171.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86984</attachid>
            <date>2011-03-25 14:48:06 -0700</date>
            <delta_ts>2011-03-28 15:36:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>3432</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxOTkxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDMtMjUgIEJldGggRGFr
aW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZpeCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU3MTI0IFdoZW4gdGhlIHNjcm9sbGVyIHN0eWxlIGlzIAorICAgICAgICBjaGFuZ2Vk
IHZpYSBkZWxlZ2F0ZSBtZXRob2QsIHRoZSBwYWdlIG5lZWRzIGEgZnVsbCByZWxheW91dCBhbmQg
cmVwYWludAorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS85MDU5MTI5PgorCisgICAgICAgIFdoZW4gdGhlIHNjcm9sbGVyIHN0eWxlIGNoYW5nZXMg
KHdoaWNoIGlzIHZlcnkgdW5jb21tb24pLCBqdXN0IHJlbG9hZCB0aGUgcGFnZS4gCisgICAgICAg
IENoYW5naW5nIHRoZSBzY3JvbGxlciBzdHlsZSBub3Qgb25seSBhZmZlY3RzIHRoZSBhcHBlYXJh
bmNlIG9mIHRoZSBzY3JvbGxiYXJzLCBidXQgCisgICAgICAgIGFsc28gdGhlIGxheW91dCBvZiB0
aGUgd2hvbGUgcGFnZS4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVZpZXc6Om5lZWRzUmVsb2FkKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmll
dy5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmg6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYTo6bmVlZHNSZWxvYWQpOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9TY3JvbGxBbmltYXRvck1hYy5tbToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6dXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5ld1Jl
Y29tbWVuZGVkU2Nyb2xsZXJTdHlsZTpdKToKKwogMjAxMS0wMy0yNSAgTWFydGluIFJvYmluc29u
ICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgRml4IHRoZSBHVEsrIGJ1aWxkIHVu
dGlsIHdlIGNhbiBpbXBsZW1lbnQgdGhlIG5ldyBjcm9zcy1wbGF0Zm9ybQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gODE5ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNjAsNiArMjA2MCwxMSBAQCB2
b2lkIEZyYW1lVmlldzo6ZGlkQ29tcGxldGVSdWJiZXJCYW5kKGNvCiAgICAgcmV0dXJuIHBhZ2Ut
PmNocm9tZSgpLT5jbGllbnQoKS0+ZGlkQ29tcGxldGVSdWJiZXJCYW5kRm9yTWFpbkZyYW1lKGlu
aXRpYWxPdmVyaGFuZyk7CiB9CiAKK3ZvaWQgRnJhbWVWaWV3OjpuZWVkc1JlbG9hZCgpCit7Cisg
ICAgbV9mcmFtZS0+bG9hZGVyKCktPnJlbG9hZCgpOworfQorCiBib29sIEZyYW1lVmlldzo6c2hv
dWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAogewogICAgIHJldHVybiBtX2ZyYW1l
LT5sb2FkZXIoKS0+c3RhdGUoKSAhPSBGcmFtZVN0YXRlQ29tcGxldGU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmgJKHJldmlzaW9uIDgxOTcyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMzE4LDYgKzMxOCw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG8oY29uc3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRDb21wbGV0ZVJ1YmJlckJhbmQoY29uc3QgSW50U2l6ZSYpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBuZWVkc1JlbG9hZCgpOwogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBhZ2VUaGF0
Q29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVj
dEZyb21QYWdlKCkgeyBtX3BhZ2UgPSAwOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxhYmxlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGFibGVBcmVhLmgJKHJldmlzaW9uIDgxOTcyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFBvaW50IGN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gSW50UG9pbnQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVJ1
YmJlckJhbmQoY29uc3QgSW50U2l6ZSYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIG5lZWRzUmVsb2FkKCkgeyB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdEZyb21QYWdlKCkgeyB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0JKHJldmlzaW9u
IDgxOTcyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDcgQEAgLSAodm9pZClzY3JvbGxlcklt
cFBhaXI6KGlkKXNjcm9sbGVySW1wUAogICAgIH0KIAogICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJTdHlsZShwYWludGVyQ29udHJvbGxlciwgbmV3UmVjb21tZW5kZWRTY3JvbGxl
clN0eWxlKTsKKyAgICBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPm5lZWRzUmVsb2FkKCk7
CiB9CiAKIEBlbmQK
</data>
<flag name="review"
          id="79360"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87222</attachid>
            <date>2011-03-28 15:36:28 -0700</date>
            <delta_ts>2011-03-28 15:59:37 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>13423</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyMTY2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMDMtMjggIEJldGggRGFr
aW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZpeCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU3MTI0IFdoZW4gdGhlIHNjcm9sbGVyIHN0eWxlIGlzIAorICAgICAgICBjaGFuZ2Vk
IHZpYSBkZWxlZ2F0ZSBtZXRob2QsIHRoZSBwYWdlIG5lZWRzIGEgZnVsbCByZWxheW91dCBhbmQg
cmVwYWludAorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS85MDU5MTI5PgorCisgICAgICAgIENhbGwgaW50byBXZWJLaXRTeXN0ZW1JbnRlcmZhY2Ug
dG8gYXNzb2NpYXRlIHRoZSBuZXcgcGFpbnRlciB3aXRoIHRoZSBleGlzdGluZyAKKyAgICAgICAg
cGFpbnRlciBjb250cm9sbGVyLiBSZXNldCB0aGUgc2Nyb2xsYmFyIGZyYW1lIHJlY3RzIHRvIHRo
ZSBuZXcgdGhpY2tuZXNzIC0tIG5vcm1hbGx5IAorICAgICAgICB0aGlzIG9ubHkgaGFwcGVucyB3
aGVuIGEgc2Nyb2xsYmFyIGlzIGNyZWF0ZWQsIHNvIHdlIGhhdmUgdG8gcmVzZXQgdGhlIHRoaWNr
bmVzcyAKKyAgICAgICAgaGVyZSB0byBwaWNrIHVwIHRoZSBuZXcgdGhlbWUgdGhpY2tuZXNzLiBG
aW5hbGx5LCBmb3JjZSBhIGZ1bGwgcmVsYXlvdXQgYW5kIHN0eWxlIAorICAgICAgICByZWNhbGwg
d2l0aCBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKQorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9TY3JvbGxBbmltYXRvck1hYy5tbToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6dXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5l
d1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZTpdKToKKworICAgICAgICBzZXROZWVkc1JlY2FsY1N0
eWxlSW5BbGxGcmFtZXMoKSB1c2VkIHRvIGJlIGEgc3RhdGljIG1ldGhvZCBpbiBTZXR0aW5ncy5j
cHAuIFRoaXMgCisgICAgICAgIHBhdGNoIG1vdmVzIGl0IHRvIGJlIGEgbWVtYmVyIGZ1bmN0aW9u
IG9uIFBhZ2Ugc28gdGhhdCBpdCBjYW4gYmUgY2FsbGVkIGZyb20gCisgICAgICAgIEZyYW1lVmll
dyB3aGVuIHRoZSBzY3JvbGxiYXIgc3R5bGUgY2hhbmdlcy4KKyAgICAgICAgKiBwYWdlL0ZyYW1l
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldE5lZWRzUmVjYWxjU3R5
bGVJbkFsbEZyYW1lcyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKiBw
YWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0TmVlZHNSZWNhbGNTdHls
ZUluQWxsRnJhbWVzKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAgICAgICAgKiBwYWdlL1Nl
dHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRTdGFuZGFyZEZvbnRG
YW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldEZpeGVkRm9udEZhbWlseSk6
CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0U2VyaWZGb250RmFtaWx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRTYW5zU2VyaWZGb250RmFtaWx5KToKKyAgICAgICAg
KFdlYkNvcmU6OlNldHRpbmdzOjpzZXRDdXJzaXZlRm9udEZhbWlseSk6CisgICAgICAgIChXZWJD
b3JlOjpTZXR0aW5nczo6c2V0RmFudGFzeUZvbnRGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6
U2V0dGluZ3M6OnNldE1pbmltdW1Gb250U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5n
czo6c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5n
czo6c2V0RGVmYXVsdEZvbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRE
ZWZhdWx0Rml4ZWRGb250U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0VGV4
dEFyZWFzQXJlUmVzaXphYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRBdXRo
b3JBbmRVc2VyU3R5bGVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0
Rm9udFJlbmRlcmluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpz
ZXRTaG93RGVidWdCb3JkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRTaG93
UmVwYWludENvdW50ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxs
RnJhbWVzKToKKwogMjAxMS0wMy0yOCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDgyMTQwKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYwLDYgKzIwNjAsMTEgQEAgdm9p
ZCBGcmFtZVZpZXc6OmRpZENvbXBsZXRlUnViYmVyQmFuZChjbwogICAgIHJldHVybiBwYWdlLT5j
aHJvbWUoKS0+Y2xpZW50KCktPmRpZENvbXBsZXRlUnViYmVyQmFuZEZvck1haW5GcmFtZShpbml0
aWFsT3ZlcmhhbmcpOwogfQogCit2b2lkIEZyYW1lVmlldzo6c2V0TmVlZHNSZWNhbGNTdHlsZUlu
QWxsRnJhbWVzKCkKK3sKKyAgICBtX2ZyYW1lLT5wYWdlKCktPnNldE5lZWRzUmVjYWxjU3R5bGVJ
bkFsbEZyYW1lcygpOworfQorCiBib29sIEZyYW1lVmlldzo6c2hvdWxkU3VzcGVuZFNjcm9sbEFu
aW1hdGlvbnMoKSBjb25zdAogewogICAgIHJldHVybiBtX2ZyYW1lLT5sb2FkZXIoKS0+c3RhdGUo
KSAhPSBGcmFtZVN0YXRlQ29tcGxldGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHJl
dmlzaW9uIDgyMTQwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzE4LDYgKzMxOCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGdl
dFRpY2ttYXJrcyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2Ny
b2xsVG8oY29uc3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVJ1YmJl
ckJhbmQoY29uc3QgSW50U2l6ZSYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1Jl
Y2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlVGhh
dENvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5l
Y3RGcm9tUGFnZSgpIHsgbV9wYWdlID0gMDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZp
c2lvbiA4MjE0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5MSw2ICszOTEsMTIgQEAgdm9pZCBQYWdlOjpzY2hlZHVsZUZvcmNlZFN0eWxlUmVj
YWxjRm9yQQogICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNjaGVkdWxlRm9yY2VkU3R5
bGVSZWNhbGMoKTsKIH0KIAordm9pZCBQYWdlOjpzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFt
ZXMoKQoreworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKQorICAgICAgICBmcmFtZS0+ZG9jdW1l
bnQoKS0+c3R5bGVTZWxlY3RvckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7Cit9CisKIHZvaWQg
UGFnZTo6dXBkYXRlVmlld3BvcnRBcmd1bWVudHMoKQogewogICAgIGlmICghbWFpbkZyYW1lKCkg
fHwgIW1haW5GcmFtZSgpLT5kb2N1bWVudCgpIHx8IG1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT52
aWV3cG9ydEFyZ3VtZW50cygpID09IG1fdmlld3BvcnRBcmd1bWVudHMpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuaAkocmV2aXNpb24gODIxNDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgUGFnZShjb25zdCBQYWdlQ2xpZW50cyYpOwogICAgICAgICB+UGFnZSgpOwogCisgICAgICAg
IHZvaWQgc2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CisKICAgICAgICAgUmVuZGVy
VGhlbWUqIHRoZW1lKCkgY29uc3QgeyByZXR1cm4gbV90aGVtZS5nZXQoKTsgfTsKIAogICAgICAg
ICBWaWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9ydEFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1f
dmlld3BvcnRBcmd1bWVudHM7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZp
c2lvbiA4MjE0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSwxMiArNDUsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB2b2lkIHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1l
cyhQYWdlKiBwYWdlKQotewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gcGFnZS0+bWFpbkZyYW1l
KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKQotICAgICAg
ICBmcmFtZS0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvckNoYW5nZWQoRGVmZXJSZWNhbGNTdHls
ZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseUluQWxsRnJh
bWVzKFBhZ2UqIHBhZ2UpCiB7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBwYWdlLT5tYWluRnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpCkBAIC0x
ODksNyArMTgzLDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0U3RhbmRhcmRGb250RmFtaWx5KGNvbgog
ICAgICAgICByZXR1cm47CiAKICAgICBtX3N0YW5kYXJkRm9udEZhbWlseSA9IHN0YW5kYXJkRm9u
dEZhbWlseTsKLSAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMobV9wYWdlKTsKKyAg
ICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCiB2b2lkIFNl
dHRpbmdzOjpzZXRGaXhlZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmaXhlZEZvbnRG
YW1pbHkpCkBAIC0xOTgsNyArMTkyLDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0Rml4ZWRGb250RmFt
aWx5KGNvbnN0IAogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIG1fZml4ZWRGb250RmFt
aWx5ID0gZml4ZWRGb250RmFtaWx5OwotICAgIHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1l
cyhtX3BhZ2UpOworICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7
CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNldFNlcmlmRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJp
bmcmIHNlcmlmRm9udEZhbWlseSkKQEAgLTIwNyw3ICsyMDEsNyBAQCB2b2lkIFNldHRpbmdzOjpz
ZXRTZXJpZkZvbnRGYW1pbHkoY29uc3QgCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
bV9zZXJpZkZvbnRGYW1pbHkgPSBzZXJpZkZvbnRGYW1pbHk7Ci0gICAgc2V0TmVlZHNSZWNhbGNT
dHlsZUluQWxsRnJhbWVzKG1fcGFnZSk7CisgICAgbV9wYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxl
SW5BbGxGcmFtZXMoKTsKIH0KIAogdm9pZCBTZXR0aW5nczo6c2V0U2Fuc1NlcmlmRm9udEZhbWls
eShjb25zdCBBdG9taWNTdHJpbmcmIHNhbnNTZXJpZkZvbnRGYW1pbHkpCkBAIC0yMTYsNyArMjEw
LDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0U2Fuc1NlcmlmRm9udEZhbWlseShjbwogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgIG1fc2Fuc1NlcmlmRm9udEZhbWlseSA9IHNhbnNTZXJpZkZv
bnRGYW1pbHk7IAotICAgIHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcyhtX3BhZ2UpOwor
ICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiB9CiAKIHZvaWQg
U2V0dGluZ3M6OnNldEN1cnNpdmVGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgY3Vyc2l2
ZUZvbnRGYW1pbHkpCkBAIC0yMjUsNyArMjE5LDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0Q3Vyc2l2
ZUZvbnRGYW1pbHkoY29ucwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIG1fY3Vyc2l2
ZUZvbnRGYW1pbHkgPSBjdXJzaXZlRm9udEZhbWlseTsKLSAgICBzZXROZWVkc1JlY2FsY1N0eWxl
SW5BbGxGcmFtZXMobV9wYWdlKTsKKyAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFs
bEZyYW1lcygpOwogfQogCiB2b2lkIFNldHRpbmdzOjpzZXRGYW50YXN5Rm9udEZhbWlseShjb25z
dCBBdG9taWNTdHJpbmcmIGZhbnRhc3lGb250RmFtaWx5KQpAQCAtMjM0LDcgKzIyOCw3IEBAIHZv
aWQgU2V0dGluZ3M6OnNldEZhbnRhc3lGb250RmFtaWx5KGNvbnMKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICBtX2ZhbnRhc3lGb250RmFtaWx5ID0gZmFudGFzeUZvbnRGYW1pbHk7Ci0g
ICAgc2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKG1fcGFnZSk7CisgICAgbV9wYWdlLT5z
ZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKIH0KIAogdm9pZCBTZXR0aW5nczo6c2V0
TWluaW11bUZvbnRTaXplKGludCBtaW5pbXVtRm9udFNpemUpCkBAIC0yNDMsNyArMjM3LDcgQEAg
dm9pZCBTZXR0aW5nczo6c2V0TWluaW11bUZvbnRTaXplKGludCBtaQogICAgICAgICByZXR1cm47
CiAKICAgICBtX21pbmltdW1Gb250U2l6ZSA9IG1pbmltdW1Gb250U2l6ZTsKLSAgICBzZXROZWVk
c1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMobV9wYWdlKTsKKyAgICBtX3BhZ2UtPnNldE5lZWRzUmVj
YWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCiB2b2lkIFNldHRpbmdzOjpzZXRNaW5pbXVtTG9n
aWNhbEZvbnRTaXplKGludCBtaW5pbXVtTG9naWNhbEZvbnRTaXplKQpAQCAtMjUyLDcgKzI0Niw3
IEBAIHZvaWQgU2V0dGluZ3M6OnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUKICAgICAgICAgcmV0
dXJuOwogCiAgICAgbV9taW5pbXVtTG9naWNhbEZvbnRTaXplID0gbWluaW11bUxvZ2ljYWxGb250
U2l6ZTsKLSAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMobV9wYWdlKTsKKyAgICBt
X3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCiB2b2lkIFNldHRp
bmdzOjpzZXREZWZhdWx0Rm9udFNpemUoaW50IGRlZmF1bHRGb250U2l6ZSkKQEAgLTI2MSw3ICsy
NTUsNyBAQCB2b2lkIFNldHRpbmdzOjpzZXREZWZhdWx0Rm9udFNpemUoaW50IGRlCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fZGVmYXVsdEZvbnRTaXplID0gZGVmYXVsdEZvbnRTaXplOwotICAg
IHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcyhtX3BhZ2UpOworICAgIG1fcGFnZS0+c2V0
TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNldERl
ZmF1bHRGaXhlZEZvbnRTaXplKGludCBkZWZhdWx0Rm9udFNpemUpCkBAIC0yNzAsNyArMjY0LDcg
QEAgdm9pZCBTZXR0aW5nczo6c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoaQogICAgICAgICByZXR1
cm47CiAKICAgICBtX2RlZmF1bHRGaXhlZEZvbnRTaXplID0gZGVmYXVsdEZvbnRTaXplOwotICAg
IHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcyhtX3BhZ2UpOworICAgIG1fcGFnZS0+c2V0
TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNldExv
YWRzSW1hZ2VzQXV0b21hdGljYWxseShib29sIGxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSkKQEAg
LTM4OCw3ICszODIsNyBAQCB2b2lkIFNldHRpbmdzOjpzZXRUZXh0QXJlYXNBcmVSZXNpemFibGUo
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdGV4dEFyZWFzQXJlUmVzaXphYmxlID0gdGV4dEFy
ZWFzQXJlUmVzaXphYmxlOwotICAgIHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcyhtX3Bh
Z2UpOworICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiB9CiAK
IHZvaWQgU2V0dGluZ3M6OnNldEVkaXRhYmxlTGlua0JlaGF2aW9yKEVkaXRhYmxlTGlua0JlaGF2
aW9yIGVkaXRhYmxlTGlua0JlaGF2aW9yKQpAQCAtNTA5LDcgKzUwMyw3IEBAIHZvaWQgU2V0dGlu
Z3M6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmEKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9h
dXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCA9IGF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkOwot
ICAgIHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcyhtX3BhZ2UpOworICAgIG1fcGFnZS0+
c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNl
dEZvbnRSZW5kZXJpbmdNb2RlKEZvbnRSZW5kZXJpbmdNb2RlIG1vZGUpCkBAIC01MTcsNyArNTEx
LDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0Rm9udFJlbmRlcmluZ01vZGUoRm9udAogICAgIGlmIChm
b250UmVuZGVyaW5nTW9kZSgpID09IG1vZGUpCiAgICAgICAgIHJldHVybjsKICAgICBtX2ZvbnRS
ZW5kZXJpbmdNb2RlID0gbW9kZTsKLSAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMo
bV9wYWdlKTsKKyAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwog
fQogCiBGb250UmVuZGVyaW5nTW9kZSBTZXR0aW5nczo6Zm9udFJlbmRlcmluZ01vZGUoKSBjb25z
dApAQCAtNjE5LDcgKzYxMyw3IEBAIHZvaWQgU2V0dGluZ3M6OnNldEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmcKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBtX2FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdFbmFibGVkID0gZW5hYmxlZDsKLSAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFt
ZXMobV9wYWdlKTsKKyAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygp
OwogfQogCiB2b2lkIFNldHRpbmdzOjpzZXRDYW52YXNVc2VzQWNjZWxlcmF0ZWREcmF3aW5nKGJv
b2wgZW5hYmxlZCkKQEAgLTY2Myw3ICs2NTcsNyBAQCB2b2lkIFNldHRpbmdzOjpzZXRTaG93RGVi
dWdCb3JkZXJzKGJvb2wgCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgbV9zaG93RGVi
dWdCb3JkZXJzID0gZW5hYmxlZDsKLSAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMo
bV9wYWdlKTsKKyAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwog
fQogCiB2b2lkIFNldHRpbmdzOjpzZXRTaG93UmVwYWludENvdW50ZXIoYm9vbCBlbmFibGVkKQpA
QCAtNjcyLDcgKzY2Niw3IEBAIHZvaWQgU2V0dGluZ3M6OnNldFNob3dSZXBhaW50Q291bnRlcihi
b28KICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBtX3Nob3dSZXBhaW50Q291bnRlciA9
IGVuYWJsZWQ7Ci0gICAgc2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKG1fcGFnZSk7Cisg
ICAgbV9wYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKIH0KIAogdm9pZCBT
ZXR0aW5nczo6c2V0RXhwZXJpbWVudGFsTm90aWZpY2F0aW9uc0VuYWJsZWQoYm9vbCBlbmFibGVk
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCShyZXZpc2lv
biA4MjE0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRQ
b2ludCBjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIEludFBvaW50KCk7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVSdWJiZXJCYW5kKGNvbnN0IEludFNpemUmKSBj
b25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCBib29sIHNob3VsZFN1
c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKSB7IH0KIAogICAgIHZpcnR1
YWwgdm9pZCBkaXNjb25uZWN0RnJvbVBhZ2UoKSB7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQkocmV2aXNpb24gODIxNDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI0MCw2ICsyNDAsMTMgQEAgLSAodm9pZClzY3JvbGxlckltcFBhaXI6
KGlkKXNjcm9sbGVySW1wUAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsU2Ny
b2xsYmFyLT5jb250cm9sU2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNl
KTsKICAgICAgICAgbWFjVGhlbWUtPnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIodmVydGljYWxT
Y3JvbGxiYXIsIG5ld1ZlcnRpY2FsUGFpbnRlcik7CisgICAgICAgIHdrU2V0UGFpbnRlckZvclBh
aW50ZXJDb250cm9sbGVyKHBhaW50ZXJDb250cm9sbGVyLCBuZXdWZXJ0aWNhbFBhaW50ZXIsIGZh
bHNlKTsKKworICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgaGF2ZSBk
aWZmZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUtc2V0IHRoZSAKKyAgICAgICAgLy8g
ZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQgdGhlIHJlLWxheW91dCBiZWxvdyB3
aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24KKyAgICAgICAgLy8gYW5kIGxlbmd0aCBhcmUgcHJvcGVy
bHkgdXBkYXRlZC4KKyAgICAgICAgaW50IHRoaWNrbmVzcyA9IG1hY1RoZW1lLT5zY3JvbGxiYXJU
aGlja25lc3ModmVydGljYWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOworICAgICAgICB2ZXJ0
aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwgMCwgdGhpY2tu
ZXNzLCB0aGlja25lc3MpKTsKICAgICB9CiAKICAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgb2xk
SG9yaXpvbnRhbFBhaW50ZXIgPSB3a0hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJv
bGxlcihwYWludGVyQ29udHJvbGxlcik7CkBAIC0yNTAsOSArMjU3LDE5IEBAIC0gKHZvaWQpc2Ny
b2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhvcml6b250YWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgbWFjVGhlbWUtPnNldE5ld1BhaW50ZXJGb3JT
Y3JvbGxiYXIoaG9yaXpvbnRhbFNjcm9sbGJhciwgbmV3SG9yaXpvbnRhbFBhaW50ZXIpOworICAg
ICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihwYWludGVyQ29udHJvbGxlciwg
bmV3SG9yaXpvbnRhbFBhaW50ZXIsIHRydWUpOworCisgICAgICAgIC8vIFRoZSBkaWZmZXJlbnQg
c2Nyb2xsYmFyIHN0eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCBy
ZS1zZXQgdGhlIAorICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFu
ZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAv
LyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJseSB1cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNz
ID0gbWFjVGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyhob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250
cm9sU2l6ZSgpKTsKKyAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KFdl
YkNvcmU6OkludFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKICAgICB9CiAKICAg
ICB3a1NldFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyU3R5bGUocGFpbnRlckNvbnRyb2xsZXIs
IG5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSk7CisKKyAgICAvLyBUaGUgZGlmZmVyZW50IHNj
cm9sbGJhciBzdHlsZXMgYWZmZWN0IGxheW91dCwgc28gd2UgbXVzdCByZS1sYXlvdXQgZXZlcnl0
aGluZy4KKyAgICBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnNldE5lZWRzUmVjYWxjU3R5
bGVJbkFsbEZyYW1lcygpOwogfQogCiBAZW5kCg==
</data>
<flag name="review"
          id="79629"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87228</attachid>
            <date>2011-03-28 15:59:37 -0700</date>
            <delta_ts>2011-03-28 16:04:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>13396</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyMTY2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMDMtMjggIEJldGggRGFr
aW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZpeCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU3MTI0IFdoZW4gdGhlIHNjcm9sbGVyIHN0eWxlIGlzIAorICAgICAgICBjaGFuZ2Vk
IHZpYSBkZWxlZ2F0ZSBtZXRob2QsIHRoZSBwYWdlIG5lZWRzIGEgZnVsbCByZWxheW91dCBhbmQg
cmVwYWludAorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS85MDU5MTI5PgorCisgICAgICAgIENhbGwgaW50byBXZWJLaXRTeXN0ZW1JbnRlcmZhY2Ug
dG8gYXNzb2NpYXRlIHRoZSBuZXcgcGFpbnRlciB3aXRoIHRoZSBleGlzdGluZyAKKyAgICAgICAg
cGFpbnRlciBjb250cm9sbGVyLiBSZXNldCB0aGUgc2Nyb2xsYmFyIGZyYW1lIHJlY3RzIHRvIHRo
ZSBuZXcgdGhpY2tuZXNzIC0tIG5vcm1hbGx5IAorICAgICAgICB0aGlzIG9ubHkgaGFwcGVucyB3
aGVuIGEgc2Nyb2xsYmFyIGlzIGNyZWF0ZWQsIHNvIHdlIGhhdmUgdG8gcmVzZXQgdGhlIHRoaWNr
bmVzcyAKKyAgICAgICAgaGVyZSB0byBwaWNrIHVwIHRoZSBuZXcgdGhlbWUgdGhpY2tuZXNzLiBG
aW5hbGx5LCBmb3JjZSBhIGZ1bGwgcmVsYXlvdXQgYW5kIHN0eWxlIAorICAgICAgICByZWNhbGwg
d2l0aCBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKQorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9TY3JvbGxBbmltYXRvck1hYy5tbToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6dXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5l
d1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZTpdKToKKworICAgICAgICBzZXROZWVkc1JlY2FsY1N0
eWxlSW5BbGxGcmFtZXMoKSB1c2VkIHRvIGJlIGEgc3RhdGljIG1ldGhvZCBpbiBTZXR0aW5ncy5j
cHAuIFRoaXMgCisgICAgICAgIHBhdGNoIG1vdmVzIGl0IHRvIGJlIGEgbWVtYmVyIGZ1bmN0aW9u
IG9uIFBhZ2Ugc28gdGhhdCBpdCBjYW4gYmUgY2FsbGVkIGZyb20gCisgICAgICAgIEZyYW1lVmll
dyB3aGVuIHRoZSBzY3JvbGxiYXIgc3R5bGUgY2hhbmdlcy4KKyAgICAgICAgKiBwYWdlL0ZyYW1l
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldE5lZWRzUmVjYWxjU3R5
bGVJbkFsbEZyYW1lcyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKiBw
YWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0TmVlZHNSZWNhbGNTdHls
ZUluQWxsRnJhbWVzKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAgICAgICAgKiBwYWdlL1Nl
dHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRTdGFuZGFyZEZvbnRG
YW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldEZpeGVkRm9udEZhbWlseSk6
CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0U2VyaWZGb250RmFtaWx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRTYW5zU2VyaWZGb250RmFtaWx5KToKKyAgICAgICAg
KFdlYkNvcmU6OlNldHRpbmdzOjpzZXRDdXJzaXZlRm9udEZhbWlseSk6CisgICAgICAgIChXZWJD
b3JlOjpTZXR0aW5nczo6c2V0RmFudGFzeUZvbnRGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6
U2V0dGluZ3M6OnNldE1pbmltdW1Gb250U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5n
czo6c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5n
czo6c2V0RGVmYXVsdEZvbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRE
ZWZhdWx0Rml4ZWRGb250U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0VGV4
dEFyZWFzQXJlUmVzaXphYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRBdXRo
b3JBbmRVc2VyU3R5bGVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0
Rm9udFJlbmRlcmluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpz
ZXRTaG93RGVidWdCb3JkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRTaG93
UmVwYWludENvdW50ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxs
RnJhbWVzKToKKwogMjAxMS0wMy0yOCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDgyMTQwKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYwLDYgKzIwNjAsMTEgQEAgdm9p
ZCBGcmFtZVZpZXc6OmRpZENvbXBsZXRlUnViYmVyQmFuZChjbwogICAgIHJldHVybiBwYWdlLT5j
aHJvbWUoKS0+Y2xpZW50KCktPmRpZENvbXBsZXRlUnViYmVyQmFuZEZvck1haW5GcmFtZShpbml0
aWFsT3ZlcmhhbmcpOwogfQogCit2b2lkIEZyYW1lVmlldzo6c2Nyb2xsYmFyU3R5bGVDaGFuZ2Vk
KCkKK3sKKyAgICBtX2ZyYW1lLT5wYWdlKCktPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1l
cygpOworfQorCiBib29sIEZyYW1lVmlldzo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMo
KSBjb25zdAogewogICAgIHJldHVybiBtX2ZyYW1lLT5sb2FkZXIoKS0+c3RhdGUoKSAhPSBGcmFt
ZVN0YXRlQ29tcGxldGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHJldmlzaW9uIDgy
MTQwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpA
QCAtMzE4LDYgKzMxOCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJr
cyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG8oY29u
c3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVJ1YmJlckJhbmQoY29u
c3QgSW50U2l6ZSYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJTdHlsZUNoYW5n
ZWQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlVGhhdENvbnRlbnRBcmVhV2lsbFBh
aW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3RGcm9tUGFnZSgpIHsgbV9w
YWdlID0gMDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiA4MjE0MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MSw2ICszOTEs
MTIgQEAgdm9pZCBQYWdlOjpzY2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjRm9yQQogICAgICAgICAg
ICAgZnJhbWUtPmRvY3VtZW50KCktPnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKIH0KIAor
dm9pZCBQYWdlOjpzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKQoreworICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkt
PnRyYXZlcnNlTmV4dCgpKQorICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rv
ckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7Cit9CisKIHZvaWQgUGFnZTo6dXBkYXRlVmlld3Bv
cnRBcmd1bWVudHMoKQogewogICAgIGlmICghbWFpbkZyYW1lKCkgfHwgIW1haW5GcmFtZSgpLT5k
b2N1bWVudCgpIHx8IG1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT52aWV3cG9ydEFyZ3VtZW50cygp
ID09IG1fdmlld3BvcnRBcmd1bWVudHMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkocmV2aXNpb24gODIx
NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5
LDYgKzExOSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFnZShjb25zdCBQYWdl
Q2xpZW50cyYpOwogICAgICAgICB+UGFnZSgpOwogCisgICAgICAgIHZvaWQgc2V0TmVlZHNSZWNh
bGNTdHlsZUluQWxsRnJhbWVzKCk7CisKICAgICAgICAgUmVuZGVyVGhlbWUqIHRoZW1lKCkgY29u
c3QgeyByZXR1cm4gbV90aGVtZS5nZXQoKTsgfTsKIAogICAgICAgICBWaWV3cG9ydEFyZ3VtZW50
cyB2aWV3cG9ydEFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRBcmd1bWVudHM7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiA4MjE0MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiAr
NDUsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyB2b2lkIHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcyhQYWdlKiBwYWdlKQotewot
ICAgIGZvciAoRnJhbWUqIGZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQo
KS0+c3R5bGVTZWxlY3RvckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7Ci19Ci0KIHN0YXRpYyB2
b2lkIHNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseUluQWxsRnJhbWVzKFBhZ2UqIHBhZ2UpCiB7
CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpCkBAIC0xODksNyArMTgzLDcgQEAgdm9p
ZCBTZXR0aW5nczo6c2V0U3RhbmRhcmRGb250RmFtaWx5KGNvbgogICAgICAgICByZXR1cm47CiAK
ICAgICBtX3N0YW5kYXJkRm9udEZhbWlseSA9IHN0YW5kYXJkRm9udEZhbWlseTsKLSAgICBzZXRO
ZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMobV9wYWdlKTsKKyAgICBtX3BhZ2UtPnNldE5lZWRz
UmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCiB2b2lkIFNldHRpbmdzOjpzZXRGaXhlZEZv
bnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmaXhlZEZvbnRGYW1pbHkpCkBAIC0xOTgsNyAr
MTkyLDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0Rml4ZWRGb250RmFtaWx5KGNvbnN0IAogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIG1fZml4ZWRGb250RmFtaWx5ID0gZml4ZWRGb250RmFt
aWx5OwotICAgIHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcyhtX3BhZ2UpOworICAgIG1f
cGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiB9CiAKIHZvaWQgU2V0dGlu
Z3M6OnNldFNlcmlmRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIHNlcmlmRm9udEZhbWls
eSkKQEAgLTIwNyw3ICsyMDEsNyBAQCB2b2lkIFNldHRpbmdzOjpzZXRTZXJpZkZvbnRGYW1pbHko
Y29uc3QgCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgbV9zZXJpZkZvbnRGYW1pbHkg
PSBzZXJpZkZvbnRGYW1pbHk7Ci0gICAgc2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKG1f
cGFnZSk7CisgICAgbV9wYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKIH0K
IAogdm9pZCBTZXR0aW5nczo6c2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJp
bmcmIHNhbnNTZXJpZkZvbnRGYW1pbHkpCkBAIC0yMTYsNyArMjEwLDcgQEAgdm9pZCBTZXR0aW5n
czo6c2V0U2Fuc1NlcmlmRm9udEZhbWlseShjbwogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIG1fc2Fuc1NlcmlmRm9udEZhbWlseSA9IHNhbnNTZXJpZkZvbnRGYW1pbHk7IAotICAgIHNl
dE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcyhtX3BhZ2UpOworICAgIG1fcGFnZS0+c2V0TmVl
ZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNldEN1cnNp
dmVGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgY3Vyc2l2ZUZvbnRGYW1pbHkpCkBAIC0y
MjUsNyArMjE5LDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoY29ucwog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIG1fY3Vyc2l2ZUZvbnRGYW1pbHkgPSBjdXJz
aXZlRm9udEZhbWlseTsKLSAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMobV9wYWdl
KTsKKyAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCiB2
b2lkIFNldHRpbmdzOjpzZXRGYW50YXN5Rm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZh
bnRhc3lGb250RmFtaWx5KQpAQCAtMjM0LDcgKzIyOCw3IEBAIHZvaWQgU2V0dGluZ3M6OnNldEZh
bnRhc3lGb250RmFtaWx5KGNvbnMKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBtX2Zh
bnRhc3lGb250RmFtaWx5ID0gZmFudGFzeUZvbnRGYW1pbHk7Ci0gICAgc2V0TmVlZHNSZWNhbGNT
dHlsZUluQWxsRnJhbWVzKG1fcGFnZSk7CisgICAgbV9wYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxl
SW5BbGxGcmFtZXMoKTsKIH0KIAogdm9pZCBTZXR0aW5nczo6c2V0TWluaW11bUZvbnRTaXplKGlu
dCBtaW5pbXVtRm9udFNpemUpCkBAIC0yNDMsNyArMjM3LDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0
TWluaW11bUZvbnRTaXplKGludCBtaQogICAgICAgICByZXR1cm47CiAKICAgICBtX21pbmltdW1G
b250U2l6ZSA9IG1pbmltdW1Gb250U2l6ZTsKLSAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxG
cmFtZXMobV9wYWdlKTsKKyAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1l
cygpOwogfQogCiB2b2lkIFNldHRpbmdzOjpzZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKGludCBt
aW5pbXVtTG9naWNhbEZvbnRTaXplKQpAQCAtMjUyLDcgKzI0Niw3IEBAIHZvaWQgU2V0dGluZ3M6
OnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9taW5p
bXVtTG9naWNhbEZvbnRTaXplID0gbWluaW11bUxvZ2ljYWxGb250U2l6ZTsKLSAgICBzZXROZWVk
c1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMobV9wYWdlKTsKKyAgICBtX3BhZ2UtPnNldE5lZWRzUmVj
YWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCiB2b2lkIFNldHRpbmdzOjpzZXREZWZhdWx0Rm9u
dFNpemUoaW50IGRlZmF1bHRGb250U2l6ZSkKQEAgLTI2MSw3ICsyNTUsNyBAQCB2b2lkIFNldHRp
bmdzOjpzZXREZWZhdWx0Rm9udFNpemUoaW50IGRlCiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
ZGVmYXVsdEZvbnRTaXplID0gZGVmYXVsdEZvbnRTaXplOwotICAgIHNldE5lZWRzUmVjYWxjU3R5
bGVJbkFsbEZyYW1lcyhtX3BhZ2UpOworICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUlu
QWxsRnJhbWVzKCk7CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNldERlZmF1bHRGaXhlZEZvbnRTaXpl
KGludCBkZWZhdWx0Rm9udFNpemUpCkBAIC0yNzAsNyArMjY0LDcgQEAgdm9pZCBTZXR0aW5nczo6
c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoaQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RlZmF1
bHRGaXhlZEZvbnRTaXplID0gZGVmYXVsdEZvbnRTaXplOwotICAgIHNldE5lZWRzUmVjYWxjU3R5
bGVJbkFsbEZyYW1lcyhtX3BhZ2UpOworICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUlu
QWxsRnJhbWVzKCk7CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNldExvYWRzSW1hZ2VzQXV0b21hdGlj
YWxseShib29sIGxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSkKQEAgLTM4OCw3ICszODIsNyBAQCB2
b2lkIFNldHRpbmdzOjpzZXRUZXh0QXJlYXNBcmVSZXNpemFibGUoCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fdGV4dEFyZWFzQXJlUmVzaXphYmxlID0gdGV4dEFyZWFzQXJlUmVzaXphYmxlOwot
ICAgIHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcyhtX3BhZ2UpOworICAgIG1fcGFnZS0+
c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNl
dEVkaXRhYmxlTGlua0JlaGF2aW9yKEVkaXRhYmxlTGlua0JlaGF2aW9yIGVkaXRhYmxlTGlua0Jl
aGF2aW9yKQpAQCAtNTA5LDcgKzUwMyw3IEBAIHZvaWQgU2V0dGluZ3M6OnNldEF1dGhvckFuZFVz
ZXJTdHlsZXNFbmEKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9hdXRob3JBbmRVc2VyU3R5bGVz
RW5hYmxlZCA9IGF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkOwotICAgIHNldE5lZWRzUmVjYWxj
U3R5bGVJbkFsbEZyYW1lcyhtX3BhZ2UpOworICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHls
ZUluQWxsRnJhbWVzKCk7CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNldEZvbnRSZW5kZXJpbmdNb2Rl
KEZvbnRSZW5kZXJpbmdNb2RlIG1vZGUpCkBAIC01MTcsNyArNTExLDcgQEAgdm9pZCBTZXR0aW5n
czo6c2V0Rm9udFJlbmRlcmluZ01vZGUoRm9udAogICAgIGlmIChmb250UmVuZGVyaW5nTW9kZSgp
ID09IG1vZGUpCiAgICAgICAgIHJldHVybjsKICAgICBtX2ZvbnRSZW5kZXJpbmdNb2RlID0gbW9k
ZTsKLSAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMobV9wYWdlKTsKKyAgICBtX3Bh
Z2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCiBGb250UmVuZGVyaW5n
TW9kZSBTZXR0aW5nczo6Zm9udFJlbmRlcmluZ01vZGUoKSBjb25zdApAQCAtNjE5LDcgKzYxMyw3
IEBAIHZvaWQgU2V0dGluZ3M6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmcKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkID0gZW5h
YmxlZDsKLSAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMobV9wYWdlKTsKKyAgICBt
X3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCiB2b2lkIFNldHRp
bmdzOjpzZXRDYW52YXNVc2VzQWNjZWxlcmF0ZWREcmF3aW5nKGJvb2wgZW5hYmxlZCkKQEAgLTY2
Myw3ICs2NTcsNyBAQCB2b2lkIFNldHRpbmdzOjpzZXRTaG93RGVidWdCb3JkZXJzKGJvb2wgCiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgbV9zaG93RGVidWdCb3JkZXJzID0gZW5hYmxl
ZDsKLSAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMobV9wYWdlKTsKKyAgICBtX3Bh
Z2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCiB2b2lkIFNldHRpbmdz
OjpzZXRTaG93UmVwYWludENvdW50ZXIoYm9vbCBlbmFibGVkKQpAQCAtNjcyLDcgKzY2Niw3IEBA
IHZvaWQgU2V0dGluZ3M6OnNldFNob3dSZXBhaW50Q291bnRlcihib28KICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICBtX3Nob3dSZXBhaW50Q291bnRlciA9IGVuYWJsZWQ7Ci0gICAgc2V0
TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKG1fcGFnZSk7CisgICAgbV9wYWdlLT5zZXROZWVk
c1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKIH0KIAogdm9pZCBTZXR0aW5nczo6c2V0RXhwZXJp
bWVudGFsTm90aWZpY2F0aW9uc0VuYWJsZWQoYm9vbCBlbmFibGVkKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCShyZXZpc2lvbiA4MjE0MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
Niw2ICsxMTYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRQb2ludCBjdXJyZW50TW91c2VQ
b3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIEludFBvaW50KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ29tcGxldGVSdWJiZXJCYW5kKGNvbnN0IEludFNpemUmKSBjb25zdCB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRp
b25zKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1Jl
Y2FsY1N0eWxlSW5BbGxGcmFtZXMoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0
RnJvbVBhZ2UoKSB7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bEFuaW1hdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9TY3JvbGxBbmltYXRvck1hYy5tbQkocmV2aXNpb24gODIxNDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0
MCw2ICsyNDAsMTMgQEAgLSAodm9pZClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5jb250cm9sU2l6
ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKICAgICAgICAgbWFjVGhl
bWUtPnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIodmVydGljYWxTY3JvbGxiYXIsIG5ld1ZlcnRp
Y2FsUGFpbnRlcik7CisgICAgICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVyKHBh
aW50ZXJDb250cm9sbGVyLCBuZXdWZXJ0aWNhbFBhaW50ZXIsIGZhbHNlKTsKKworICAgICAgICAv
LyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgaGF2ZSBkaWZmZXJlbnQgdGhpY2tuZXNz
ZXMsIHNvIHdlIG11c3QgcmUtc2V0IHRoZSAKKyAgICAgICAgLy8gZnJhbWVSZWN0IHRvIHRoZSBu
ZXcgdGhpY2tuZXNzLCBhbmQgdGhlIHJlLWxheW91dCBiZWxvdyB3aWxsIGVuc3VyZSB0aGUgcG9z
aXRpb24KKyAgICAgICAgLy8gYW5kIGxlbmd0aCBhcmUgcHJvcGVybHkgdXBkYXRlZC4KKyAgICAg
ICAgaW50IHRoaWNrbmVzcyA9IG1hY1RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3ModmVydGljYWxT
Y3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOworICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+c2V0
RnJhbWVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsK
ICAgICB9CiAKICAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgb2xkSG9yaXpvbnRhbFBhaW50ZXIg
PSB3a0hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJvbGxlcihwYWludGVyQ29udHJv
bGxlcik7CkBAIC0yNTAsOSArMjU3LDE5IEBAIC0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClz
Y3JvbGxlckltcFAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTY3Jv
bGxiYXItPmNvbnRyb2xTaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVl
KTsKICAgICAgICAgbWFjVGhlbWUtPnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoaG9yaXpvbnRh
bFNjcm9sbGJhciwgbmV3SG9yaXpvbnRhbFBhaW50ZXIpOworICAgICAgICB3a1NldFBhaW50ZXJG
b3JQYWludGVyQ29udHJvbGxlcihwYWludGVyQ29udHJvbGxlciwgbmV3SG9yaXpvbnRhbFBhaW50
ZXIsIHRydWUpOworCisgICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBo
YXZlIGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhlIAorICAgICAg
ICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJl
bG93IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBw
cm9wZXJseSB1cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNjcm9s
bGJhclRoaWNrbmVzcyhob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKKyAgICAg
ICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwg
MCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKICAgICB9CiAKICAgICB3a1NldFNjcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyU3R5bGUocGFpbnRlckNvbnRyb2xsZXIsIG5ld1JlY29tbWVuZGVkU2Ny
b2xsZXJTdHlsZSk7CisKKyAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgYWZm
ZWN0IGxheW91dCwgc28gd2UgbXVzdCByZS1sYXlvdXQgZXZlcnl0aGluZy4KKyAgICBfYW5pbWF0
b3ItPnNjcm9sbGFibGVBcmVhKCktPnNjcm9sbGJhclN0eWxlQ2hhbmdlZCgpOwogfQogCiBAZW5k
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87229</attachid>
            <date>2011-03-28 16:04:58 -0700</date>
            <delta_ts>2011-03-28 16:07:47 -0700</delta_ts>
            <desc>Patch that builds</desc>
            <filename>for-review-4.txt</filename>
            <type>text/plain</type>
            <size>13387</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyMTY2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMDMtMjggIEJldGggRGFr
aW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZpeCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU3MTI0IFdoZW4gdGhlIHNjcm9sbGVyIHN0eWxlIGlzIAorICAgICAgICBjaGFuZ2Vk
IHZpYSBkZWxlZ2F0ZSBtZXRob2QsIHRoZSBwYWdlIG5lZWRzIGEgZnVsbCByZWxheW91dCBhbmQg
cmVwYWludAorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS85MDU5MTI5PgorCisgICAgICAgIENhbGwgaW50byBXZWJLaXRTeXN0ZW1JbnRlcmZhY2Ug
dG8gYXNzb2NpYXRlIHRoZSBuZXcgcGFpbnRlciB3aXRoIHRoZSBleGlzdGluZyAKKyAgICAgICAg
cGFpbnRlciBjb250cm9sbGVyLiBSZXNldCB0aGUgc2Nyb2xsYmFyIGZyYW1lIHJlY3RzIHRvIHRo
ZSBuZXcgdGhpY2tuZXNzIC0tIG5vcm1hbGx5IAorICAgICAgICB0aGlzIG9ubHkgaGFwcGVucyB3
aGVuIGEgc2Nyb2xsYmFyIGlzIGNyZWF0ZWQsIHNvIHdlIGhhdmUgdG8gcmVzZXQgdGhlIHRoaWNr
bmVzcyAKKyAgICAgICAgaGVyZSB0byBwaWNrIHVwIHRoZSBuZXcgdGhlbWUgdGhpY2tuZXNzLiBG
aW5hbGx5LCBmb3JjZSBhIGZ1bGwgcmVsYXlvdXQgYW5kIHN0eWxlIAorICAgICAgICByZWNhbGwg
d2l0aCBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKQorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9TY3JvbGxBbmltYXRvck1hYy5tbToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6dXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5l
d1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZTpdKToKKworICAgICAgICBzZXROZWVkc1JlY2FsY1N0
eWxlSW5BbGxGcmFtZXMoKSB1c2VkIHRvIGJlIGEgc3RhdGljIG1ldGhvZCBpbiBTZXR0aW5ncy5j
cHAuIFRoaXMgCisgICAgICAgIHBhdGNoIG1vdmVzIGl0IHRvIGJlIGEgbWVtYmVyIGZ1bmN0aW9u
IG9uIFBhZ2Ugc28gdGhhdCBpdCBjYW4gYmUgY2FsbGVkIGZyb20gCisgICAgICAgIEZyYW1lVmll
dyB3aGVuIHRoZSBzY3JvbGxiYXIgc3R5bGUgY2hhbmdlcy4KKyAgICAgICAgKiBwYWdlL0ZyYW1l
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldE5lZWRzUmVjYWxjU3R5
bGVJbkFsbEZyYW1lcyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKiBw
YWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0TmVlZHNSZWNhbGNTdHls
ZUluQWxsRnJhbWVzKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAgICAgICAgKiBwYWdlL1Nl
dHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRTdGFuZGFyZEZvbnRG
YW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldEZpeGVkRm9udEZhbWlseSk6
CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0U2VyaWZGb250RmFtaWx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRTYW5zU2VyaWZGb250RmFtaWx5KToKKyAgICAgICAg
KFdlYkNvcmU6OlNldHRpbmdzOjpzZXRDdXJzaXZlRm9udEZhbWlseSk6CisgICAgICAgIChXZWJD
b3JlOjpTZXR0aW5nczo6c2V0RmFudGFzeUZvbnRGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6
U2V0dGluZ3M6OnNldE1pbmltdW1Gb250U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5n
czo6c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5n
czo6c2V0RGVmYXVsdEZvbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRE
ZWZhdWx0Rml4ZWRGb250U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0VGV4
dEFyZWFzQXJlUmVzaXphYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRBdXRo
b3JBbmRVc2VyU3R5bGVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0
Rm9udFJlbmRlcmluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpz
ZXRTaG93RGVidWdCb3JkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRTaG93
UmVwYWludENvdW50ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxs
RnJhbWVzKToKKwogMjAxMS0wMy0yOCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDgyMTQwKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYwLDYgKzIwNjAsMTEgQEAgdm9p
ZCBGcmFtZVZpZXc6OmRpZENvbXBsZXRlUnViYmVyQmFuZChjbwogICAgIHJldHVybiBwYWdlLT5j
aHJvbWUoKS0+Y2xpZW50KCktPmRpZENvbXBsZXRlUnViYmVyQmFuZEZvck1haW5GcmFtZShpbml0
aWFsT3ZlcmhhbmcpOwogfQogCit2b2lkIEZyYW1lVmlldzo6c2Nyb2xsYmFyU3R5bGVDaGFuZ2Vk
KCkKK3sKKyAgICBtX2ZyYW1lLT5wYWdlKCktPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1l
cygpOworfQorCiBib29sIEZyYW1lVmlldzo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMo
KSBjb25zdAogewogICAgIHJldHVybiBtX2ZyYW1lLT5sb2FkZXIoKS0+c3RhdGUoKSAhPSBGcmFt
ZVN0YXRlQ29tcGxldGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHJldmlzaW9uIDgy
MTQwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpA
QCAtMzE4LDYgKzMxOCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJr
cyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG8oY29u
c3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVJ1YmJlckJhbmQoY29u
c3QgSW50U2l6ZSYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJTdHlsZUNoYW5n
ZWQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlVGhhdENvbnRlbnRBcmVhV2lsbFBh
aW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3RGcm9tUGFnZSgpIHsgbV9w
YWdlID0gMDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiA4MjE0MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MSw2ICszOTEs
MTIgQEAgdm9pZCBQYWdlOjpzY2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjRm9yQQogICAgICAgICAg
ICAgZnJhbWUtPmRvY3VtZW50KCktPnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKIH0KIAor
dm9pZCBQYWdlOjpzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKQoreworICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkt
PnRyYXZlcnNlTmV4dCgpKQorICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rv
ckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7Cit9CisKIHZvaWQgUGFnZTo6dXBkYXRlVmlld3Bv
cnRBcmd1bWVudHMoKQogewogICAgIGlmICghbWFpbkZyYW1lKCkgfHwgIW1haW5GcmFtZSgpLT5k
b2N1bWVudCgpIHx8IG1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT52aWV3cG9ydEFyZ3VtZW50cygp
ID09IG1fdmlld3BvcnRBcmd1bWVudHMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkocmV2aXNpb24gODIx
NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5
LDYgKzExOSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFnZShjb25zdCBQYWdl
Q2xpZW50cyYpOwogICAgICAgICB+UGFnZSgpOwogCisgICAgICAgIHZvaWQgc2V0TmVlZHNSZWNh
bGNTdHlsZUluQWxsRnJhbWVzKCk7CisKICAgICAgICAgUmVuZGVyVGhlbWUqIHRoZW1lKCkgY29u
c3QgeyByZXR1cm4gbV90aGVtZS5nZXQoKTsgfTsKIAogICAgICAgICBWaWV3cG9ydEFyZ3VtZW50
cyB2aWV3cG9ydEFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRBcmd1bWVudHM7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiA4MjE0MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiAr
NDUsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyB2b2lkIHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcyhQYWdlKiBwYWdlKQotewot
ICAgIGZvciAoRnJhbWUqIGZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQo
KS0+c3R5bGVTZWxlY3RvckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7Ci19Ci0KIHN0YXRpYyB2
b2lkIHNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseUluQWxsRnJhbWVzKFBhZ2UqIHBhZ2UpCiB7
CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpCkBAIC0xODksNyArMTgzLDcgQEAgdm9p
ZCBTZXR0aW5nczo6c2V0U3RhbmRhcmRGb250RmFtaWx5KGNvbgogICAgICAgICByZXR1cm47CiAK
ICAgICBtX3N0YW5kYXJkRm9udEZhbWlseSA9IHN0YW5kYXJkRm9udEZhbWlseTsKLSAgICBzZXRO
ZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMobV9wYWdlKTsKKyAgICBtX3BhZ2UtPnNldE5lZWRz
UmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCiB2b2lkIFNldHRpbmdzOjpzZXRGaXhlZEZv
bnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmaXhlZEZvbnRGYW1pbHkpCkBAIC0xOTgsNyAr
MTkyLDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0Rml4ZWRGb250RmFtaWx5KGNvbnN0IAogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIG1fZml4ZWRGb250RmFtaWx5ID0gZml4ZWRGb250RmFt
aWx5OwotICAgIHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcyhtX3BhZ2UpOworICAgIG1f
cGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiB9CiAKIHZvaWQgU2V0dGlu
Z3M6OnNldFNlcmlmRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIHNlcmlmRm9udEZhbWls
eSkKQEAgLTIwNyw3ICsyMDEsNyBAQCB2b2lkIFNldHRpbmdzOjpzZXRTZXJpZkZvbnRGYW1pbHko
Y29uc3QgCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgbV9zZXJpZkZvbnRGYW1pbHkg
PSBzZXJpZkZvbnRGYW1pbHk7Ci0gICAgc2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKG1f
cGFnZSk7CisgICAgbV9wYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKIH0K
IAogdm9pZCBTZXR0aW5nczo6c2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJp
bmcmIHNhbnNTZXJpZkZvbnRGYW1pbHkpCkBAIC0yMTYsNyArMjEwLDcgQEAgdm9pZCBTZXR0aW5n
czo6c2V0U2Fuc1NlcmlmRm9udEZhbWlseShjbwogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIG1fc2Fuc1NlcmlmRm9udEZhbWlseSA9IHNhbnNTZXJpZkZvbnRGYW1pbHk7IAotICAgIHNl
dE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcyhtX3BhZ2UpOworICAgIG1fcGFnZS0+c2V0TmVl
ZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNldEN1cnNp
dmVGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgY3Vyc2l2ZUZvbnRGYW1pbHkpCkBAIC0y
MjUsNyArMjE5LDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoY29ucwog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIG1fY3Vyc2l2ZUZvbnRGYW1pbHkgPSBjdXJz
aXZlRm9udEZhbWlseTsKLSAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMobV9wYWdl
KTsKKyAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCiB2
b2lkIFNldHRpbmdzOjpzZXRGYW50YXN5Rm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZh
bnRhc3lGb250RmFtaWx5KQpAQCAtMjM0LDcgKzIyOCw3IEBAIHZvaWQgU2V0dGluZ3M6OnNldEZh
bnRhc3lGb250RmFtaWx5KGNvbnMKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBtX2Zh
bnRhc3lGb250RmFtaWx5ID0gZmFudGFzeUZvbnRGYW1pbHk7Ci0gICAgc2V0TmVlZHNSZWNhbGNT
dHlsZUluQWxsRnJhbWVzKG1fcGFnZSk7CisgICAgbV9wYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxl
SW5BbGxGcmFtZXMoKTsKIH0KIAogdm9pZCBTZXR0aW5nczo6c2V0TWluaW11bUZvbnRTaXplKGlu
dCBtaW5pbXVtRm9udFNpemUpCkBAIC0yNDMsNyArMjM3LDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0
TWluaW11bUZvbnRTaXplKGludCBtaQogICAgICAgICByZXR1cm47CiAKICAgICBtX21pbmltdW1G
b250U2l6ZSA9IG1pbmltdW1Gb250U2l6ZTsKLSAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxG
cmFtZXMobV9wYWdlKTsKKyAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1l
cygpOwogfQogCiB2b2lkIFNldHRpbmdzOjpzZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKGludCBt
aW5pbXVtTG9naWNhbEZvbnRTaXplKQpAQCAtMjUyLDcgKzI0Niw3IEBAIHZvaWQgU2V0dGluZ3M6
OnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9taW5p
bXVtTG9naWNhbEZvbnRTaXplID0gbWluaW11bUxvZ2ljYWxGb250U2l6ZTsKLSAgICBzZXROZWVk
c1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMobV9wYWdlKTsKKyAgICBtX3BhZ2UtPnNldE5lZWRzUmVj
YWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCiB2b2lkIFNldHRpbmdzOjpzZXREZWZhdWx0Rm9u
dFNpemUoaW50IGRlZmF1bHRGb250U2l6ZSkKQEAgLTI2MSw3ICsyNTUsNyBAQCB2b2lkIFNldHRp
bmdzOjpzZXREZWZhdWx0Rm9udFNpemUoaW50IGRlCiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
ZGVmYXVsdEZvbnRTaXplID0gZGVmYXVsdEZvbnRTaXplOwotICAgIHNldE5lZWRzUmVjYWxjU3R5
bGVJbkFsbEZyYW1lcyhtX3BhZ2UpOworICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUlu
QWxsRnJhbWVzKCk7CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNldERlZmF1bHRGaXhlZEZvbnRTaXpl
KGludCBkZWZhdWx0Rm9udFNpemUpCkBAIC0yNzAsNyArMjY0LDcgQEAgdm9pZCBTZXR0aW5nczo6
c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoaQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RlZmF1
bHRGaXhlZEZvbnRTaXplID0gZGVmYXVsdEZvbnRTaXplOwotICAgIHNldE5lZWRzUmVjYWxjU3R5
bGVJbkFsbEZyYW1lcyhtX3BhZ2UpOworICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUlu
QWxsRnJhbWVzKCk7CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNldExvYWRzSW1hZ2VzQXV0b21hdGlj
YWxseShib29sIGxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSkKQEAgLTM4OCw3ICszODIsNyBAQCB2
b2lkIFNldHRpbmdzOjpzZXRUZXh0QXJlYXNBcmVSZXNpemFibGUoCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fdGV4dEFyZWFzQXJlUmVzaXphYmxlID0gdGV4dEFyZWFzQXJlUmVzaXphYmxlOwot
ICAgIHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcyhtX3BhZ2UpOworICAgIG1fcGFnZS0+
c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNl
dEVkaXRhYmxlTGlua0JlaGF2aW9yKEVkaXRhYmxlTGlua0JlaGF2aW9yIGVkaXRhYmxlTGlua0Jl
aGF2aW9yKQpAQCAtNTA5LDcgKzUwMyw3IEBAIHZvaWQgU2V0dGluZ3M6OnNldEF1dGhvckFuZFVz
ZXJTdHlsZXNFbmEKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9hdXRob3JBbmRVc2VyU3R5bGVz
RW5hYmxlZCA9IGF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkOwotICAgIHNldE5lZWRzUmVjYWxj
U3R5bGVJbkFsbEZyYW1lcyhtX3BhZ2UpOworICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHls
ZUluQWxsRnJhbWVzKCk7CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNldEZvbnRSZW5kZXJpbmdNb2Rl
KEZvbnRSZW5kZXJpbmdNb2RlIG1vZGUpCkBAIC01MTcsNyArNTExLDcgQEAgdm9pZCBTZXR0aW5n
czo6c2V0Rm9udFJlbmRlcmluZ01vZGUoRm9udAogICAgIGlmIChmb250UmVuZGVyaW5nTW9kZSgp
ID09IG1vZGUpCiAgICAgICAgIHJldHVybjsKICAgICBtX2ZvbnRSZW5kZXJpbmdNb2RlID0gbW9k
ZTsKLSAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMobV9wYWdlKTsKKyAgICBtX3Bh
Z2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCiBGb250UmVuZGVyaW5n
TW9kZSBTZXR0aW5nczo6Zm9udFJlbmRlcmluZ01vZGUoKSBjb25zdApAQCAtNjE5LDcgKzYxMyw3
IEBAIHZvaWQgU2V0dGluZ3M6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmcKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkID0gZW5h
YmxlZDsKLSAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMobV9wYWdlKTsKKyAgICBt
X3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCiB2b2lkIFNldHRp
bmdzOjpzZXRDYW52YXNVc2VzQWNjZWxlcmF0ZWREcmF3aW5nKGJvb2wgZW5hYmxlZCkKQEAgLTY2
Myw3ICs2NTcsNyBAQCB2b2lkIFNldHRpbmdzOjpzZXRTaG93RGVidWdCb3JkZXJzKGJvb2wgCiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgbV9zaG93RGVidWdCb3JkZXJzID0gZW5hYmxl
ZDsKLSAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMobV9wYWdlKTsKKyAgICBtX3Bh
Z2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCiB2b2lkIFNldHRpbmdz
OjpzZXRTaG93UmVwYWludENvdW50ZXIoYm9vbCBlbmFibGVkKQpAQCAtNjcyLDcgKzY2Niw3IEBA
IHZvaWQgU2V0dGluZ3M6OnNldFNob3dSZXBhaW50Q291bnRlcihib28KICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICBtX3Nob3dSZXBhaW50Q291bnRlciA9IGVuYWJsZWQ7Ci0gICAgc2V0
TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKG1fcGFnZSk7CisgICAgbV9wYWdlLT5zZXROZWVk
c1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKIH0KIAogdm9pZCBTZXR0aW5nczo6c2V0RXhwZXJp
bWVudGFsTm90aWZpY2F0aW9uc0VuYWJsZWQoYm9vbCBlbmFibGVkKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCShyZXZpc2lvbiA4MjE0MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
Niw2ICsxMTYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRQb2ludCBjdXJyZW50TW91c2VQ
b3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIEludFBvaW50KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ29tcGxldGVSdWJiZXJCYW5kKGNvbnN0IEludFNpemUmKSBjb25zdCB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRp
b25zKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJT
dHlsZUNoYW5nZWQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0RnJvbVBhZ2Uo
KSB7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9y
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5tbQkocmV2aXNpb24gODIxNDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0MCw2ICsyNDAs
MTMgQEAgLSAodm9pZClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKICAgICAgICAgbWFjVGhlbWUtPnNldE5l
d1BhaW50ZXJGb3JTY3JvbGxiYXIodmVydGljYWxTY3JvbGxiYXIsIG5ld1ZlcnRpY2FsUGFpbnRl
cik7CisgICAgICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVyKHBhaW50ZXJDb250
cm9sbGVyLCBuZXdWZXJ0aWNhbFBhaW50ZXIsIGZhbHNlKTsKKworICAgICAgICAvLyBUaGUgZGlm
ZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgaGF2ZSBkaWZmZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdl
IG11c3QgcmUtc2V0IHRoZSAKKyAgICAgICAgLy8gZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tu
ZXNzLCBhbmQgdGhlIHJlLWxheW91dCBiZWxvdyB3aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24KKyAg
ICAgICAgLy8gYW5kIGxlbmd0aCBhcmUgcHJvcGVybHkgdXBkYXRlZC4KKyAgICAgICAgaW50IHRo
aWNrbmVzcyA9IG1hY1RoZW1lLT5zY3JvbGxiYXJUaGlja25lc3ModmVydGljYWxTY3JvbGxiYXIt
PmNvbnRyb2xTaXplKCkpOworICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0
KFdlYkNvcmU6OkludFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKICAgICB9CiAK
ICAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgb2xkSG9yaXpvbnRhbFBhaW50ZXIgPSB3a0hvcml6
b250YWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJvbGxlcihwYWludGVyQ29udHJvbGxlcik7CkBA
IC0yNTAsOSArMjU3LDE5IEBAIC0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlcklt
cFAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPmNv
bnRyb2xTaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAg
ICAgbWFjVGhlbWUtPnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoaG9yaXpvbnRhbFNjcm9sbGJh
ciwgbmV3SG9yaXpvbnRhbFBhaW50ZXIpOworICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVy
Q29udHJvbGxlcihwYWludGVyQ29udHJvbGxlciwgbmV3SG9yaXpvbnRhbFBhaW50ZXIsIHRydWUp
OworCisgICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBoYXZlIGRpZmZl
cmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhlIAorICAgICAgICAvLyBmcmFt
ZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdpbGwg
ZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJseSB1
cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJhclRoaWNr
bmVzcyhob3Jpem9udGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKKyAgICAgICAgaG9yaXpv
bnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwgMCwgdGhpY2tu
ZXNzLCB0aGlja25lc3MpKTsKICAgICB9CiAKICAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyU3R5bGUocGFpbnRlckNvbnRyb2xsZXIsIG5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHls
ZSk7CisKKyAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgYWZmZWN0IGxheW91
dCwgc28gd2UgbXVzdCByZS1sYXlvdXQgZXZlcnl0aGluZy4KKyAgICBfYW5pbWF0b3ItPnNjcm9s
bGFibGVBcmVhKCktPnNjcm9sbGJhclN0eWxlQ2hhbmdlZCgpOwogfQogCiBAZW5kCg==
</data>
<flag name="review"
          id="79637"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>