<?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>110295</bug_id>
          
          <creation_ts>2013-02-19 20:21:58 -0800</creation_ts>
          <short_desc>Transformed SVG background images can be blurry/pixelated</short_desc>
          <delta_ts>2013-02-21 02:49:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>110442</dependson>
          <blocked>109609</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Philip Rogers">pdr</reporter>
          <assigned_to name="Philip Rogers">pdr</assigned_to>
          <cc>d-r</cc>
    
    <cc>fmalita</cc>
    
    <cc>japhet</cc>
    
    <cc>schenney</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>837091</commentid>
    <comment_count>0</comment_count>
      <attachid>189227</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2013-02-19 20:21:58 -0800</bug_when>
    <thetext>Created attachment 189227
Testcase

When an SVG image is used as a background image and there are CSS transforms, the result can be blurry/pixelated. This is because our buffer used for tiling does not account for CSS transforms.

See the attached testcase for an example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837095</commentid>
    <comment_count>1</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2013-02-19 20:28:13 -0800</bug_when>
    <thetext>*** Bug 110272 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837182</commentid>
    <comment_count>2</comment_count>
      <attachid>189246</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2013-02-19 22:37:06 -0800</bug_when>
    <thetext>Created attachment 189246
Account for transform in SVG background images</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837608</commentid>
    <comment_count>3</comment_count>
      <attachid>189246</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-02-20 11:42:15 -0800</bug_when>
    <thetext>Comment on attachment 189246
Account for transform in SVG background images

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

LGTM. Just some snippets.

&gt; Source/WebCore/loader/cache/CachedImage.cpp:198
&gt; +        UNUSED_PARAM(renderer);

indentation wrong.

&gt; Source/WebCore/svg/graphics/SVGImage.cpp:153
&gt; +    ASSERT(imageBufferScale.width() &amp;&amp; imageBufferScale.height());

Can you make this two asserts please?

&gt; Source/WebCore/svg/graphics/SVGImage.cpp:159
&gt; +    drawForContainer(buffer-&gt;context(), containerSize, zoom, imageBufferSize, zoomedContainerRect, ColorSpaceDeviceRGB, CompositeSourceOver, BlendModeNormal);

Aren&apos;t the last two or three options default for this function anyway? Not sure if we should keep it or remove it.

&gt; LayoutTests/svg/as-background-image/svg-transformed-background.html:17
&gt; +  -ie-transform:scale(5);
&gt; +  -ie-transform-origin:0 0;
&gt; +  -moz-transform:scale(5);
&gt; +  -moz-transform-origin:0 0;

This is unnecessary. please remove these.

&gt; LayoutTests/svg/as-background-image/svg-transformed-background.html:33
&gt; +  -ie-transform:scale(2.5, 10);
&gt; +  -ie-transform-origin:0 0;
&gt; +  -moz-transform:scale(2.5, 10);
&gt; +  -moz-transform-origin:0 0;

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837930</commentid>
    <comment_count>4</comment_count>
      <attachid>189414</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2013-02-20 16:46:17 -0800</bug_when>
    <thetext>Created attachment 189414
Update per reviewer comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837941</commentid>
    <comment_count>5</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2013-02-20 16:51:42 -0800</bug_when>
    <thetext>Thank you for the review as always Dirk!

(In reply to comment #3)
&gt; (From update of attachment 189246 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=189246&amp;action=review
&gt; 
&gt; LGTM. Just some snippets.
&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedImage.cpp:198
&gt; &gt; +        UNUSED_PARAM(renderer);
&gt; 
&gt; indentation wrong.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/graphics/SVGImage.cpp:153
&gt; &gt; +    ASSERT(imageBufferScale.width() &amp;&amp; imageBufferScale.height());
&gt; 
&gt; Can you make this two asserts please?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/graphics/SVGImage.cpp:159
&gt; &gt; +    drawForContainer(buffer-&gt;context(), containerSize, zoom, imageBufferSize, zoomedContainerRect, ColorSpaceDeviceRGB, CompositeSourceOver, BlendModeNormal);
&gt; 
&gt; Aren&apos;t the last two or three options default for this function anyway? Not sure if we should keep it or remove it.

They aren&apos;t default for this one yet. I&apos;d like to hold-off on making these default at the moment, but lets definitely address this in a followup.

&gt; 
&gt; &gt; LayoutTests/svg/as-background-image/svg-transformed-background.html:17
&gt; &gt; +  -ie-transform:scale(5);
&gt; &gt; +  -ie-transform-origin:0 0;
&gt; &gt; +  -moz-transform:scale(5);
&gt; &gt; +  -moz-transform-origin:0 0;
&gt; 
&gt; This is unnecessary. please remove these.

Done.

&gt; 
&gt; &gt; LayoutTests/svg/as-background-image/svg-transformed-background.html:33
&gt; &gt; +  -ie-transform:scale(2.5, 10);
&gt; &gt; +  -ie-transform-origin:0 0;
&gt; &gt; +  -moz-transform:scale(2.5, 10);
&gt; &gt; +  -moz-transform-origin:0 0;
&gt; 
&gt; ditto.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837975</commentid>
    <comment_count>6</comment_count>
      <attachid>189414</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-20 17:21:09 -0800</bug_when>
    <thetext>Comment on attachment 189414
Update per reviewer comments

Clearing flags on attachment: 189414

Committed r143541: &lt;http://trac.webkit.org/changeset/143541&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837976</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-20 17:21:12 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>189227</attachid>
            <date>2013-02-19 20:21:58 -0800</date>
            <delta_ts>2013-02-19 20:21:58 -0800</delta_ts>
            <desc>Testcase</desc>
            <filename>svg-scaled-background.html</filename>
            <type>text/html</type>
            <size>654</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPHRpdGxlPlNWRyBiYWNrZ3JvdW5kIHdpdGgg
Q1NTIHNjYWxlPC90aXRsZT4KPHN0eWxlPgojY2lyY2xlIHsKICB3aWR0aDogNDBweDsKICBoZWln
aHQ6IDIwcHg7CiAgYmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3Zn
IHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzIwJyBoZWlnaHQ9JzIw
Jz48Y2lyY2xlIGN4PScxMCcgY3k9JzEwJyByPScxMCcgZmlsbD0nZ3JlZW4nIC8+PC9zdmc+Iik7
CiAgdHJhbnNmb3JtOnNjYWxlKDUpOwogIHRyYW5zZm9ybS1vcmlnaW46MCAwOwogIC1pZS10cmFu
c2Zvcm06c2NhbGUoNSk7CiAgLWllLXRyYW5zZm9ybS1vcmlnaW46MCAwOwogIC1tb3otdHJhbnNm
b3JtOnNjYWxlKDUpOwogIC1tb3otdHJhbnNmb3JtLW9yaWdpbjowIDA7CiAgLXdlYmtpdC10cmFu
c2Zvcm06c2NhbGUoNSk7CiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDsKfQo8L3N0eWxl
Pgo8L2hlYWQ+Cjxib2R5PgpUaGlzIHRlc3QgcGFzc2VzIGlmIHRoZXJlIGFyZSB0d28gZ3JlZW4g
Y2lyY2xlcyB3aXRoIHNoYXJwIGVkZ2VzIChub3QgYmx1cnJ5KS48YnIvPgo8ZGl2IGlkPSJjaXJj
bGUiPjwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189246</attachid>
            <date>2013-02-19 22:37:06 -0800</date>
            <delta_ts>2013-02-20 16:46:17 -0800</delta_ts>
            <desc>Account for transform in SVG background images</desc>
            <filename>110295.1.patch</filename>
            <type>text/plain</type>
            <size>18068</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzQzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDEzLTAyLTE5ICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWNjb3VudCBmb3IgdHJhbnNmb3Jt
IGluIFNWRyBiYWNrZ3JvdW5kIGltYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMjk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGlsZWQgU1ZHIGJhY2tncm91bmQgaW1hZ2VzIGFyZSByZW5kZXJl
cmQgYnkgZHJhd2luZyB0aGUgU1ZHIGNvbnRlbnQgaW50byBhIHRlbXBvcmFyeQorICAgICAgICBp
bWFnZSBidWZmZXIsIHRoZW4gc3RhbXBpbmcgb3V0IGEgdGlsZWQgcGF0dGVybiB1c2luZyB0aGlz
IGJ1ZmZlci4gUHJldmlvdXNseSB0aGUKKyAgICAgICAgaW1hZ2UgYnVmZmVyIGRpZCBub3QgYWNj
b3VudCBmb3IgQ1NTIHRyYW5zZm9ybXMgd2hpY2ggY291bGQgcmVzdWx0IGluIHBpeGVsYXRlZCBi
YWNrZ3JvdW5kcy4KKworICAgICAgICBUaGlzIHBhdGNoIHRha2VzIGFkdmFudGFnZSBvZiB0aGUg
Y29udGV4dCdzIHRyYW5zZm9ybSB3aGVuIHNpemluZyB0aGUgdGVtcG9yYXJ5IHRpbGluZworICAg
ICAgICBpbWFnZSBidWZmZXIuIEJlY2F1c2UgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gYWxzbyBp
bmNsdWRlcyBzY2FsZSwgdGhpcyBwYXRjaCBzaW1wbGlmaWVzCisgICAgICAgIHRoZSBTVkcgaW1h
Z2UgY29kZSB0byBubyBsb25nZXIgdHJhY2sgc2NhbGUuCisKKyAgICAgICAgVGVzdDogc3ZnL2Fz
LWJhY2tncm91bmQtaW1hZ2Uvc3ZnLXRyYW5zZm9ybWVkLWJhY2tncm91bmQuaHRtbAorCisgICAg
ICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmltYWdlRm9yUmVuZGVyZXIpOgorCisgICAg
ICAgICAgICBDYWNoZWRJbWFnZTo6bG9va3VwT3JDcmVhdGVJbWFnZUZvclJlbmRlcmVyIG5vIGxv
bmdlciBjcmVhdGVzIGltYWdlcyBzbyBpdCBoYXMgYmVlbgorICAgICAgICAgICAgcmVmYWN0b3Jl
ZCBpbnRvIGp1c3QgImltYWdlRm9yUmVuZGVyZXIiLiBQcmV2aW91c2x5IHRoZXJlIHdlcmUgdHdv
IHZlcnNpb25zIG9mCisgICAgICAgICAgICBsb29rdXBPckNyZWF0ZUltYWdlRm9yUmVuZGVyZXI7
IHRoZXNlIGhhdmUgYmVlbiBmb2xkZWQgaW50byBpbWFnZUZvclJlbmRlcmVyLgorCisgICAgICAg
ICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpkcmF3UGF0dGVybkZvckNv
bnRhaW5lcik6CisKKyAgICAgICAgICAgIFRvIGNyZWF0ZSB0aGUgdGVtcG9yYXJ5IHRpbGluZyBp
bWFnZSBidWZmZXIsIHRoZSBmaW5hbCBzaXplIGluIHNjcmVlbiBjb29yZGluYXRlcyBpcworICAg
ICAgICAgICAgbmVlZGVkLiBUaGlzIGlzIG5vdyBjb21wdXRlZCB1c2luZyB0aGUgY3VycmVudCBj
b250ZXh0J3MgQ1RNLiBCZWNhdXNlIHRoZSBDVE0KKyAgICAgICAgICAgIGFscmVhZHkgaW5jbHVk
ZXMgdGhlIHBhZ2Ugc2NhbGUsIGFsbCBwYWdlIHNjYWxlIHRyYWNraW5nIGNhbiBiZSByZW1vdmVk
LgorCisgICAgICAgICAgICBUaGUgYWRqdXN0bWVudHMgdG8gc3JjUmVjdCBhbmQgdGhlIHBhdHRl
cm4gdHJhbnNmb3JtIGFyZSB0aGUgc2FtZSBhcyBiZWZvcmUsIGp1c3QKKyAgICAgICAgICAgIHJl
ZmFjdG9yZWQgdG8gdXNlIGltYWdlQnVmZmVyU2NhbGUgd2hpY2ggaGFzIHggYW5kIHkgY29tcG9u
ZW50cy4KKworICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5oOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdl
Q2FjaGU6OnNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcik6CisKKyAgICAgICAgICAgIEJlY2F1
c2UgdGhlIHBhZ2Ugc2NhbGUgbmVlZGVkIHRvIGJlIGNhY2hlZCBiZXR3ZWVuIGNhbGxzIHRvCisg
ICAgICAgICAgICBzZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIsIHRoaXMgZnVuY3Rpb24gd2Fz
IHdyaXR0ZW4gdG8gbW9kaWZ5IGFuIGV4aXN0aW5nIGNhY2hlCisgICAgICAgICAgICBlbnRyeS4g
QmVjYXVzZSB0aGUgcGFnZSBzY2FsZSBubyBsb25nZXIgbmVlZHMgdG8gYmUgdHJhY2tlZCwgdGhp
cyBjb2RlIGhhcyBiZWVuCisgICAgICAgICAgICBzaW1wbGlmaWVkIHRvIHJlLXdyaXRlIGFueSBl
eGlzdGluZyBjYWNoZSBlbnRyeS4KKworICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VDYWNoZTo6
aW1hZ2VTaXplRm9yUmVuZGVyZXIpOgorCisgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGhhcyBi
ZWVuIHNpbXBsaWZpZWQgYnkgY2FsbGluZyBTVkdJbWFnZUZvckNvbnRhaW5lcjo6c2l6ZSgpIGlu
c3RlYWQKKyAgICAgICAgICAgIG9mIGNvbXB1dGluZyB0aGlzIHZhbHVlIG1hbnVhbGx5LiBUaGUg
dmFsdWUgcmV0dXJuZWQgcmVtYWlucyB0aGUgc2FtZSwgY29udGFpbmluZworICAgICAgICAgICAg
dGhlIGNvbnRhaW5lciBzaXplIG11bHRpcGxpZWQgYnkgem9vbS4KKworICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW1hZ2VDYWNoZTo6aW1hZ2VGb3JSZW5kZXJlcik6CisKKyAgICAgICAgICAgIFByZXZp
b3VzbHkgd2Ugc2V0IHRoZSBwYWdlIHNjYWxlIG9uIGV2ZXJ5IGNhbGwgdG8gaW1hZ2VGb3JSZW5k
ZXJlci4gQmVjYXVzZSBwYWdlIHNjYWxlCisgICAgICAgICAgICBubyBsb25nZXIgbmVlZHMgdG8g
YmUgdHJhY2tlZCwgdGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBzaW1wbGlmaWVkIHRvIHNpbXBseSBy
ZXR1cm4KKyAgICAgICAgICAgIHRoZSBjYWNoZWQgU1ZHSW1hZ2VGb3JDb250YWluZXIuCisKKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW1hZ2VGb3JDb250YWluZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ltYWdlRm9yQ29udGFpbmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VG
b3JDb250YWluZXI6OlNWR0ltYWdlRm9yQ29udGFpbmVyKToKKyAgICAgICAgKFNWR0ltYWdlRm9y
Q29udGFpbmVyKToKKwogMjAxMy0wMi0xOSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFw
cGxlLmNvbT4KIAogICAgICAgICBDbGFyaWZ5IGlzSW5XaW5kb3cgdnMuIGlzVmlzaWJsZSBwYXRo
IHRocm91Z2ggdG8gUmVuZGVyTGF5ZXJDb21wb3NpdG9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9uIDE0MzI2NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1NywyNSArMTU3LDYgQEAgYm9vbCBDYWNoZWRJbWFnZTo6d2lsbFBhaW50QnJva2VuSW1hZ2Uo
KQogICAgIHJldHVybiBlcnJvck9jY3VycmVkKCkgJiYgbV9zaG91bGRQYWludEJyb2tlbkltYWdl
OwogfQogCi0jaWYgRU5BQkxFKFNWRykKLWlubGluZSBJbWFnZSogQ2FjaGVkSW1hZ2U6Omxvb2t1
cE9yQ3JlYXRlSW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQot
ewotICAgIGlmICghbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFtX2ltYWdl
LT5pc1NWR0ltYWdlKCkpCi0gICAgICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwotICAgIEltYWdl
KiB1c2VJbWFnZSA9IG1fc3ZnSW1hZ2VDYWNoZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcik7
Ci0gICAgaWYgKHVzZUltYWdlID09IEltYWdlOjpudWxsSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJu
IG1faW1hZ2UuZ2V0KCk7Ci0gICAgcmV0dXJuIHVzZUltYWdlOwotfQotI2Vsc2UKLWlubGluZSBJ
bWFnZSogQ2FjaGVkSW1hZ2U6Omxvb2t1cE9yQ3JlYXRlSW1hZ2VGb3JSZW5kZXJlcihjb25zdCBS
ZW5kZXJPYmplY3QqKQotewotICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwotfQotI2VuZGlmCi0K
IEltYWdlKiBDYWNoZWRJbWFnZTo6aW1hZ2UoKQogewogICAgIEFTU0VSVCghaXNQdXJnZWFibGUo
KSk7CkBAIC0yMDQsMTAgKzE4NSwxOSBAQCBJbWFnZSogQ2FjaGVkSW1hZ2U6OmltYWdlRm9yUmVu
ZGVyZXIoY29uCiAgICAgICAgIHJldHVybiBicm9rZW5JbWFnZSgxKS5maXJzdDsKICAgICB9CiAK
LSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIGxvb2t1cE9yQ3JlYXRlSW1hZ2VGb3JS
ZW5kZXJlcihyZW5kZXJlcik7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICByZXR1cm4gSW1h
Z2U6Om51bGxJbWFnZSgpOwogCi0gICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKKyNpZiBF
TkFCTEUoU1ZHKQorICAgIGlmIChtX2ltYWdlLT5pc1NWR0ltYWdlKCkpIHsKKyAgICAgICAgSW1h
Z2UqIGltYWdlID0gbV9zdmdJbWFnZUNhY2hlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsK
KyAgICAgICAgaWYgKGltYWdlICE9IEltYWdlOjpudWxsSW1hZ2UoKSkKKyAgICAgICAgICAgIHJl
dHVybiBpbWFnZTsKKyAgICB9CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0ocmVuZGVyZXIp
OworI2VuZGlmCisgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CiB9CiAKIHZvaWQgQ2FjaGVkSW1h
Z2U6OnNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcihjb25zdCBDYWNoZWRJbWFnZUNsaWVudCog
cmVuZGVyZXIsIGNvbnN0IEludFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IGNvbnRhaW5lclpv
b20pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkocmV2
aXNpb24gMTQzMjY2KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDggKzk3LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3QgT1ZFUlJJREU7
CiAKIHByaXZhdGU6Ci0gICAgSW1hZ2UqIGxvb2t1cE9yQ3JlYXRlSW1hZ2VGb3JSZW5kZXJlcihj
b25zdCBSZW5kZXJPYmplY3QqKTsKLQogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIHZvaWQgY3Jl
YXRlSW1hZ2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNw
cAkocmV2aXNpb24gMTQzMjY2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDI2ICsxNDEsMjkgQEAgdm9pZCBTVkdJbWFn
ZTo6ZHJhd0ZvckNvbnRhaW5lcihHcmFwaGljcwogICAgIHNldEltYWdlT2JzZXJ2ZXIob2JzZXJ2
ZXIpOwogfQogCi12b2lkIFNWR0ltYWdlOjpkcmF3UGF0dGVybkZvckNvbnRhaW5lcihHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSBjb250YWluZXJTaXplLCBmbG9hdCBw
YWdlU2NhbGUsIGZsb2F0IHpvb20sIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKK3ZvaWQgU1ZH
SW1hZ2U6OmRyYXdQYXR0ZXJuRm9yQ29udGFpbmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRTaXplIGNvbnRhaW5lclNpemUsIGZsb2F0IHpvb20sIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QpCiB7Ci0gICAg
QVNTRVJUKHBhZ2VTY2FsZSk7Ci0KICAgICBGbG9hdFJlY3Qgem9vbWVkQ29udGFpbmVyUmVjdCA9
IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvbnRhaW5lclNpemUpOwogICAgIHpvb21lZENvbnRh
aW5lclJlY3Quc2NhbGUoem9vbSk7Ci0gICAgRmxvYXRSZWN0IHpvb21lZEFuZFNjYWxlZENvbnRh
aW5lclJlY3QgPSB6b29tZWRDb250YWluZXJSZWN0OwotICAgIHpvb21lZEFuZFNjYWxlZENvbnRh
aW5lclJlY3Quc2NhbGUocGFnZVNjYWxlKTsKIAotICAgIC8vIEZJWE1FKFdLMTEwMDY1KTogVGhp
cyBzaG91bGQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIEltYWdlQnVmZmVyIHJlc29sdXRpb24gaW5z
dGVhZCBvZiBzY2FsaW5nIHRoZSBidWZmZXIgbWFudWFsbHkuCi0gICAgT3duUHRyPEltYWdlQnVm
ZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZSh6b29tZWRB
bmRTY2FsZWRDb250YWluZXJSZWN0LnNpemUoKSksIDEpOwotICAgIGRyYXdGb3JDb250YWluZXIo
YnVmZmVyLT5jb250ZXh0KCksIGNvbnRhaW5lclNpemUsIHpvb20sIHpvb21lZEFuZFNjYWxlZENv
bnRhaW5lclJlY3QsIHpvb21lZENvbnRhaW5lclJlY3QsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENv
bXBvc2l0ZVNvdXJjZU92ZXIsIEJsZW5kTW9kZU5vcm1hbCk7CisgICAgLy8gVGhlIEltYWdlQnVm
ZmVyIHNpemUgbmVlZHMgdG8gYmUgc2NhbGVkIHRvIG1hdGNoIHRoZSBmaW5hbCByZXNvbHV0aW9u
LgorICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBjb250ZXh0LT5nZXRDVE0oKTsKKyAg
ICBGbG9hdFNpemUgaW1hZ2VCdWZmZXJTY2FsZSA9IEZsb2F0U2l6ZSh0cmFuc2Zvcm0ueFNjYWxl
KCksIHRyYW5zZm9ybS55U2NhbGUoKSk7CisgICAgQVNTRVJUKGltYWdlQnVmZmVyU2NhbGUud2lk
dGgoKSAmJiBpbWFnZUJ1ZmZlclNjYWxlLmhlaWdodCgpKTsKKworICAgIEZsb2F0UmVjdCBpbWFn
ZUJ1ZmZlclNpemUgPSB6b29tZWRDb250YWluZXJSZWN0OworICAgIGltYWdlQnVmZmVyU2l6ZS5z
Y2FsZShpbWFnZUJ1ZmZlclNjYWxlLndpZHRoKCksIGltYWdlQnVmZmVyU2NhbGUuaGVpZ2h0KCkp
OworCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGV4cGFuZGVkSW50U2l6ZShpbWFnZUJ1ZmZlclNpemUuc2l6ZSgpKSwgMSk7CisgICAgZHJhd0Zv
ckNvbnRhaW5lcihidWZmZXItPmNvbnRleHQoKSwgY29udGFpbmVyU2l6ZSwgem9vbSwgaW1hZ2VC
dWZmZXJTaXplLCB6b29tZWRDb250YWluZXJSZWN0LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21w
b3NpdGVTb3VyY2VPdmVyLCBCbGVuZE1vZGVOb3JtYWwpOwogICAgIFJlZlB0cjxJbWFnZT4gaW1h
Z2UgPSBidWZmZXItPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlLCBVbnNjYWxlZCk7CiAKLSAg
ICAvLyBBZGp1c3QgdGhlIHNvdXJjZSByZWN0IGFuZCB0cmFuc2Zvcm0gZm9yIGltYWdlIGJ1ZmZl
ciBzY2FsZSBkdWUgdG8gcGFnZVNjYWxlLgorICAgIC8vIEFkanVzdCB0aGUgc291cmNlIHJlY3Qg
YW5kIHRyYW5zZm9ybSBkdWUgdG8gdGhlIGltYWdlIGJ1ZmZlcidzIHNjYWxpbmcuCiAgICAgRmxv
YXRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIHNjYWxlZFNyY1JlY3Quc2NhbGUo
cGFnZVNjYWxlKTsKKyAgICBzY2FsZWRTcmNSZWN0LnNjYWxlKGltYWdlQnVmZmVyU2NhbGUud2lk
dGgoKSwgaW1hZ2VCdWZmZXJTY2FsZS5oZWlnaHQoKSk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVu
c2NhbGVkUGF0dGVyblRyYW5zZm9ybShwYXR0ZXJuVHJhbnNmb3JtKTsKLSAgICB1bnNjYWxlZFBh
dHRlcm5UcmFuc2Zvcm0uc2NhbGUoMSAvIHBhZ2VTY2FsZSk7CisgICAgdW5zY2FsZWRQYXR0ZXJu
VHJhbnNmb3JtLnNjYWxlKDEgLyBpbWFnZUJ1ZmZlclNjYWxlLndpZHRoKCksIDEgLyBpbWFnZUJ1
ZmZlclNjYWxlLmhlaWdodCgpKTsKIAogICAgIGltYWdlLT5kcmF3UGF0dGVybihjb250ZXh0LCBz
Y2FsZWRTcmNSZWN0LCB1bnNjYWxlZFBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBjb2xvclNwYWNl
LCBjb21wb3NpdGVPcCwgZHN0UmVjdCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24gMTQzMjY2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDggKzg5LDggQEAgcHJpdmF0
ZToKICAgICBTVkdJbWFnZShJbWFnZU9ic2VydmVyKik7CiAgICAgdmlydHVhbCB2b2lkIGRyYXco
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBmcm9tUmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0b1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciwgQmxlbmRNb2RlKTsKICAgICB2b2lkIGRyYXdGb3JDb250YWluZXIoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRTaXplLCBmbG9hdCwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRS
ZWN0JiwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7Ci0gICAgdm9p
ZCBkcmF3UGF0dGVybkZvckNvbnRhaW5lcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFNp
emUsIGZsb2F0LCBmbG9hdCwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiwKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuRm9yQ29udGFpbmVy
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0U2l6ZSwgZmxvYXQsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBDb2xvclNwYWNl
LAorICAgICAgICBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICBP
d25QdHI8U1ZHSW1hZ2VDaHJvbWVDbGllbnQ+IG1fY2hyb21lQ2xpZW50OwogICAgIE93blB0cjxQ
YWdlPiBtX3BhZ2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VD
YWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlQ2FjaGUuY3BwCShyZXZpc2lvbiAxNDMyNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDE4ICs1NiwxMiBA
QCB2b2lkIFNWR0ltYWdlQ2FjaGU6OnNldENvbnRhaW5lclNpemVGb3JSCiB7CiAgICAgQVNTRVJU
KGNsaWVudCk7CiAgICAgQVNTRVJUKCFjb250YWluZXJTaXplLmlzRW1wdHkoKSk7CisgICAgQVNT
RVJUKGNvbnRhaW5lclpvb20pOwogCiAgICAgRmxvYXRTaXplIGNvbnRhaW5lclNpemVXaXRob3V0
Wm9vbShjb250YWluZXJTaXplKTsKICAgICBjb250YWluZXJTaXplV2l0aG91dFpvb20uc2NhbGUo
MSAvIGNvbnRhaW5lclpvb20pOwogCi0gICAgSW1hZ2VGb3JDb250YWluZXJNYXA6Oml0ZXJhdG9y
IGltYWdlSXQgPSBtX2ltYWdlRm9yQ29udGFpbmVyTWFwLmZpbmQoY2xpZW50KTsKLSAgICBpZiAo
aW1hZ2VJdCA9PSBtX2ltYWdlRm9yQ29udGFpbmVyTWFwLmVuZCgpKSB7Ci0gICAgICAgIFJlZlB0
cjxTVkdJbWFnZUZvckNvbnRhaW5lcj4gaW1hZ2UgPSBTVkdJbWFnZUZvckNvbnRhaW5lcjo6Y3Jl
YXRlKG1fc3ZnSW1hZ2UsIGNvbnRhaW5lclNpemVXaXRob3V0Wm9vbSwgMSwgY29udGFpbmVyWm9v
bSk7Ci0gICAgICAgIG1faW1hZ2VGb3JDb250YWluZXJNYXAuc2V0KGNsaWVudCwgaW1hZ2UpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGltYWdlSXQtPnZhbHVlLT5zZXRTaXplKGNvbnRhaW5lclNp
emVXaXRob3V0Wm9vbSk7Ci0gICAgICAgIGltYWdlSXQtPnZhbHVlLT5zZXRab29tKGNvbnRhaW5l
clpvb20pOwotICAgIH0KKyAgICBtX2ltYWdlRm9yQ29udGFpbmVyTWFwLnNldChjbGllbnQsIFNW
R0ltYWdlRm9yQ29udGFpbmVyOjpjcmVhdGUobV9zdmdJbWFnZSwgY29udGFpbmVyU2l6ZVdpdGhv
dXRab29tLCBjb250YWluZXJab29tKSk7CiB9CiAKIEludFNpemUgU1ZHSW1hZ2VDYWNoZTo6aW1h
Z2VTaXplRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QKQEAg
LTgxLDE0ICs3NSw4IEBAIEludFNpemUgU1ZHSW1hZ2VDYWNoZTo6aW1hZ2VTaXplRm9yUmVuZGUK
ICAgICAgICAgcmV0dXJuIGltYWdlU2l6ZTsKIAogICAgIFJlZlB0cjxTVkdJbWFnZUZvckNvbnRh
aW5lcj4gaW1hZ2UgPSBpdC0+dmFsdWU7Ci0gICAgRmxvYXRTaXplIHNpemUgPSBpbWFnZS0+Y29u
dGFpbmVyU2l6ZSgpOwotICAgIGlmICghc2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgc2l6ZS5z
Y2FsZShpbWFnZS0+em9vbSgpKTsKLSAgICAgICAgaW1hZ2VTaXplLnNldFdpZHRoKHNpemUud2lk
dGgoKSk7Ci0gICAgICAgIGltYWdlU2l6ZS5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGltYWdlU2l6ZTsKKyAgICBBU1NFUlQoIWltYWdlLT5zaXplKCkuaXNF
bXB0eSgpKTsKKyAgICByZXR1cm4gaW1hZ2UtPnNpemUoKTsKIH0KIAogLy8gRklYTUU6IFRoaXMg
ZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0aGUgYW5pbWF0aW9uIHRpbWVsaW5lIHNvIGFuaW1h
dGlvbnMgd2lsbCBub3QKQEAgLTk4LDE4ICs4NiwxMiBAQCBJbWFnZSogU1ZHSW1hZ2VDYWNoZTo6
aW1hZ2VGb3JSZW5kZXJlcihjCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIElt
YWdlOjpudWxsSW1hZ2UoKTsKIAotICAgIC8vIFRoZSBjYWNoZSBuZWVkcyB0byBrbm93IHRoZSBz
aXplIG9mIHRoZSByZW5kZXJlciBiZWZvcmUgcXVlcnlpbmcgYW4gaW1hZ2UgZm9yIGl0LgogICAg
IEltYWdlRm9yQ29udGFpbmVyTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VGb3JDb250YWluZXJN
YXAuZmluZChyZW5kZXJlcik7CiAgICAgaWYgKGl0ID09IG1faW1hZ2VGb3JDb250YWluZXJNYXAu
ZW5kKCkpCiAgICAgICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7CiAKICAgICBSZWZQdHI8
U1ZHSW1hZ2VGb3JDb250YWluZXI+IGltYWdlID0gaXQtPnZhbHVlOwotICAgIEFTU0VSVCghaW1h
Z2UtPmNvbnRhaW5lclNpemUoKS5pc0VtcHR5KCkpOwotCi0gICAgLy8gRklYTUU6IFNldCB0aGUg
cGFnZSBzY2FsZSBpbiBzZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIgaW5zdGVhZCBvZiBsb29r
aW5nIGl0IHVwIGhlcmUuCi0gICAgUGFnZSogcGFnZSA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLT5w
YWdlKCk7Ci0gICAgaW1hZ2UtPnNldFBhZ2VTY2FsZShwYWdlLT5kZXZpY2VTY2FsZUZhY3Rvcigp
ICogcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCkpOwotCisgICAgQVNTRVJUKCFpbWFnZS0+c2l6ZSgp
LmlzRW1wdHkoKSk7CiAgICAgcmV0dXJuIGltYWdlLmdldCgpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHAJ
KHJldmlzaW9uIDE0MzI2NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZUZvckNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdm9pZCBT
VkdJbWFnZUZvckNvbnRhaW5lcjo6ZHJhdyhHcmFwaGljcwogdm9pZCBTVkdJbWFnZUZvckNvbnRh
aW5lcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAg
ICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBCbGVuZE1v
ZGUpCiB7Ci0gICAgbV9pbWFnZS0+ZHJhd1BhdHRlcm5Gb3JDb250YWluZXIoY29udGV4dCwgbV9j
b250YWluZXJTaXplLCBtX3BhZ2VTY2FsZSwgbV96b29tLCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgY29sb3JTcGFjZSwgY29tcG9zaXRlT3AsIGRzdFJlY3QpOworICAgIG1faW1h
Z2UtPmRyYXdQYXR0ZXJuRm9yQ29udGFpbmVyKGNvbnRleHQsIG1fY29udGFpbmVyU2l6ZSwgbV96
b29tLCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgY29sb3JTcGFjZSwgY29tcG9z
aXRlT3AsIGRzdFJlY3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaAko
cmV2aXNpb24gMTQzMjY2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
Rm9yQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBTVkdJbWFnZUZvckNvbnRhaW5lciA6IHB1YmxpYyBJbWFnZSB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHSW1hZ2VGb3JDb250YWluZXI+IGNy
ZWF0ZShTVkdJbWFnZSogaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgY29udGFpbmVyU2l6ZSwgZmxv
YXQgcGFnZVNjYWxlLCBmbG9hdCB6b29tKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0ltYWdl
Rm9yQ29udGFpbmVyPiBjcmVhdGUoU1ZHSW1hZ2UqIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGNv
bnRhaW5lclNpemUsIGZsb2F0IHpvb20pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNWR0ltYWdlRm9yQ29udGFpbmVyKGltYWdlLCBjb250YWluZXJTaXplLCBwYWdlU2NhbGUs
IHpvb20pKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdJbWFnZUZvckNvbnRhaW5l
cihpbWFnZSwgY29udGFpbmVyU2l6ZSwgem9vbSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgYm9v
bCBpc1NWR0ltYWdlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNjIsMjUg
KzYyLDIwIEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgdG8gYmUgbGVz
cyBjb25zZXJ2YXRpdmUuCiAgICAgdmlydHVhbCBib29sIGN1cnJlbnRGcmFtZUtub3duVG9CZU9w
YXF1ZSgpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBGbG9hdFNpemUgY29udGFp
bmVyU2l6ZSgpIHsgcmV0dXJuIG1fY29udGFpbmVyU2l6ZTsgfQotICAgIGZsb2F0IHBhZ2VTY2Fs
ZSgpIHsgcmV0dXJuIG1fcGFnZVNjYWxlOyB9Ci0gICAgZmxvYXQgem9vbSgpIHsgcmV0dXJuIG1f
em9vbTsgfQotCi0gICAgdm9pZCBzZXRTaXplKEZsb2F0U2l6ZSYgc2l6ZSkgeyBtX2NvbnRhaW5l
clNpemUgPSBzaXplOyB9Ci0gICAgdm9pZCBzZXRab29tKGZsb2F0IHpvb20pIHsgbV96b29tID0g
em9vbTsgfQotICAgIHZvaWQgc2V0UGFnZVNjYWxlKGZsb2F0IHBhZ2VTY2FsZSkgeyBtX3BhZ2VT
Y2FsZSA9IHBhZ2VTY2FsZTsgfQotCiBwcml2YXRlOgotICAgIFNWR0ltYWdlRm9yQ29udGFpbmVy
KFNWR0ltYWdlKiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBw
YWdlU2NhbGUsIGZsb2F0IHpvb20pCi0gICAgICAgIDogbV9pbWFnZShpbWFnZSksIG1fY29udGFp
bmVyU2l6ZShjb250YWluZXJTaXplKSwgbV9wYWdlU2NhbGUocGFnZVNjYWxlKSwgbV96b29tKHpv
b20pIHsgfQorICAgIFNWR0ltYWdlRm9yQ29udGFpbmVyKFNWR0ltYWdlKiBpbWFnZSwgY29uc3Qg
RmxvYXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCB6b29tKQorICAgICAgICA6IG1faW1hZ2Uo
aW1hZ2UpCisgICAgICAgICwgbV9jb250YWluZXJTaXplKGNvbnRhaW5lclNpemUpCisgICAgICAg
ICwgbV96b29tKHpvb20pCisgICAgeworICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95
RGVjb2RlZERhdGEoYm9vbCAvKmRlc3Ryb3lBbGwqLyA9IHRydWUpIHsgfQogICAgIHZpcnR1YWwg
dW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICBTVkdJbWFn
ZSogbV9pbWFnZTsKLSAgICBGbG9hdFNpemUgbV9jb250YWluZXJTaXplOwotICAgIGZsb2F0IG1f
cGFnZVNjYWxlOwotICAgIGZsb2F0IG1fem9vbTsKKyAgICBjb25zdCBGbG9hdFNpemUgbV9jb250
YWluZXJTaXplOworICAgIGNvbnN0IGZsb2F0IG1fem9vbTsKIH07CiB9CiAKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE0MzQzMCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDEzLTAyLTE5ICBQaGlsaXAgUm9nZXJzICA8cGRyQGdvb2dsZS5j
b20+CisKKyAgICAgICAgQWNjb3VudCBmb3IgdHJhbnNmb3JtIGluIFNWRyBiYWNrZ3JvdW5kIGlt
YWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEw
Mjk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBz
dmcvYXMtYmFja2dyb3VuZC1pbWFnZS9zdmctdHJhbnNmb3JtZWQtYmFja2dyb3VuZC1leHBlY3Rl
ZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvYXMtYmFja2dyb3VuZC1pbWFnZS9zdmctdHJh
bnNmb3JtZWQtYmFja2dyb3VuZC5odG1sOiBBZGRlZC4KKwogMjAxMy0wMi0xOSAgU2ltb24gRnJh
c2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggVGlsZUNhY2hlIHRp
bGUgc2l6ZSB3aGVuIHpvb21lZCBvbiBzbG93LXNjcm9sbGluZyBzaXRlCkluZGV4OiBMYXlvdXRU
ZXN0cy9zdmcvYXMtYmFja2dyb3VuZC1pbWFnZS9zdmctdHJhbnNmb3JtZWQtYmFja2dyb3VuZC1l
eHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9hcy1iYWNrZ3JvdW5k
LWltYWdlL3N2Zy10cmFuc2Zvcm1lZC1iYWNrZ3JvdW5kLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9zdmcvYXMtYmFja2dyb3VuZC1pbWFnZS9zdmctdHJhbnNmb3Jt
ZWQtYmFja2dyb3VuZC1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyNjaXJjbGVzIHsK
KyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAxMHB4OworICB0b3A6IDQwcHg7CisgIHdp
ZHRoOiA0MDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoImRh
dGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycg
d2lkdGg9JzEwMCcgaGVpZ2h0PScxMDAnPjxjaXJjbGUgY3g9JzUwJyBjeT0nNTAnIHI9JzUwJyBm
aWxsPSdncmVlbicgLz48L3N2Zz4iKTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KK1Rl
c3QgZm9yIFdLMTEwMjk1OiBUaGlzIHRlc3QgcGFzc2VzIGlmIHRoZXJlIGFyZSBmb3VyIGdyZWVu
IGNpcmNsZXMgd2l0aCBzaGFycCBlZGdlcy48YnIvPgorPGRpdiBpZD0iY2lyY2xlcyI+PC9kaXY+
Cis8L2JvZHk+Cis8L2h0bWw+CisKSW5kZXg6IExheW91dFRlc3RzL3N2Zy9hcy1iYWNrZ3JvdW5k
LWltYWdlL3N2Zy10cmFuc2Zvcm1lZC1iYWNrZ3JvdW5kLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvc3ZnL2FzLWJhY2tncm91bmQtaW1hZ2Uvc3ZnLXRyYW5zZm9ybWVkLWJhY2tncm91
bmQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9hcy1iYWNrZ3JvdW5kLWlt
YWdlL3N2Zy10cmFuc2Zvcm1lZC1iYWNrZ3JvdW5kLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorI2Np
cmNsZSB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogMTBweDsKKyAgdG9wOiA0MHB4
OworICB3aWR0aDogNDBweDsKKyAgaGVpZ2h0OiAyMHB4OworICBiYWNrZ3JvdW5kLWltYWdlOnVy
bCgiZGF0YTppbWFnZS9zdmcreG1sLDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnJyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnPjxjaXJjbGUgY3g9JzEwJyBjeT0nMTAnIHI9JzEw
JyBmaWxsPSdncmVlbicgLz48L3N2Zz4iKTsKKyAgdHJhbnNmb3JtOnNjYWxlKDUpOworICB0cmFu
c2Zvcm0tb3JpZ2luOjAgMDsKKyAgLWllLXRyYW5zZm9ybTpzY2FsZSg1KTsKKyAgLWllLXRyYW5z
Zm9ybS1vcmlnaW46MCAwOworICAtbW96LXRyYW5zZm9ybTpzY2FsZSg1KTsKKyAgLW1vei10cmFu
c2Zvcm0tb3JpZ2luOjAgMDsKKyAgLXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoNSk7CisgIC13ZWJr
aXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7Cit9CisjZWxsaXBzZSB7CisgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgbGVmdDogMjEwcHg7CisgIHRvcDogNDBweDsKKyAgd2lkdGg6IDgwcHg7CisgIGhl
aWdodDogMTBweDsKKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCw8
c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzQwJyBoZWlnaHQ9
JzEwJz48ZWxsaXBzZSBjeD0nMjAnIGN5PSc1JyByeD0nMjAnIHJ5PSc1JyBmaWxsPSdncmVlbicg
Lz48L3N2Zz4iKTsKKyAgdHJhbnNmb3JtOnNjYWxlKDIuNSwgMTApOworICB0cmFuc2Zvcm0tb3Jp
Z2luOjAgMDsKKyAgLWllLXRyYW5zZm9ybTpzY2FsZSgyLjUsIDEwKTsKKyAgLWllLXRyYW5zZm9y
bS1vcmlnaW46MCAwOworICAtbW96LXRyYW5zZm9ybTpzY2FsZSgyLjUsIDEwKTsKKyAgLW1vei10
cmFuc2Zvcm0tb3JpZ2luOjAgMDsKKyAgLXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMi41LCAxMCk7
CisgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgor
PGJvZHk+CitUZXN0IGZvciBXSzExMDI5NTogVGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGVyZSBhcmUg
Zm91ciBncmVlbiBjaXJjbGVzIHdpdGggc2hhcnAgZWRnZXMuPGJyLz4KKzxkaXYgaWQ9ImNpcmNs
ZSI+PC9kaXY+Cis8ZGl2IGlkPSJlbGxpcHNlIj48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KKwo=
</data>
<flag name="review"
          id="209589"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189414</attachid>
            <date>2013-02-20 16:46:17 -0800</date>
            <delta_ts>2013-02-20 17:21:09 -0800</delta_ts>
            <desc>Update per reviewer comments</desc>
            <filename>110295.2.patch</filename>
            <type>text/plain</type>
            <size>17861</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzUzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDEzLTAyLTIwICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWNjb3VudCBmb3IgdHJhbnNmb3Jt
IGluIFNWRyBiYWNrZ3JvdW5kIGltYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMjk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1
bHplLgorCisgICAgICAgIFRpbGVkIFNWRyBiYWNrZ3JvdW5kIGltYWdlcyBhcmUgcmVuZGVyZXJk
IGJ5IGRyYXdpbmcgdGhlIFNWRyBjb250ZW50IGludG8gYSB0ZW1wb3JhcnkKKyAgICAgICAgaW1h
Z2UgYnVmZmVyLCB0aGVuIHN0YW1waW5nIG91dCBhIHRpbGVkIHBhdHRlcm4gdXNpbmcgdGhpcyBi
dWZmZXIuIFByZXZpb3VzbHkgdGhlCisgICAgICAgIGltYWdlIGJ1ZmZlciBkaWQgbm90IGFjY291
bnQgZm9yIENTUyB0cmFuc2Zvcm1zIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBwaXhlbGF0ZWQgYmFj
a2dyb3VuZHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGNv
bnRleHQncyB0cmFuc2Zvcm0gd2hlbiBzaXppbmcgdGhlIHRlbXBvcmFyeSB0aWxpbmcKKyAgICAg
ICAgaW1hZ2UgYnVmZmVyLiBCZWNhdXNlIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGFsc28gaW5j
bHVkZXMgc2NhbGUsIHRoaXMgcGF0Y2ggc2ltcGxpZmllcworICAgICAgICB0aGUgU1ZHIGltYWdl
IGNvZGUgdG8gbm8gbG9uZ2VyIHRyYWNrIHNjYWxlLgorCisgICAgICAgIFRlc3Q6IHN2Zy9hcy1i
YWNrZ3JvdW5kLWltYWdlL3N2Zy10cmFuc2Zvcm1lZC1iYWNrZ3JvdW5kLmh0bWwKKworICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjppbWFnZUZvclJlbmRlcmVyKToKKworICAgICAg
ICAgICAgQ2FjaGVkSW1hZ2U6Omxvb2t1cE9yQ3JlYXRlSW1hZ2VGb3JSZW5kZXJlciBubyBsb25n
ZXIgY3JlYXRlcyBpbWFnZXMgc28gaXQgaGFzIGJlZW4KKyAgICAgICAgICAgIHJlZmFjdG9yZWQg
aW50byBqdXN0ICJpbWFnZUZvclJlbmRlcmVyIi4gUHJldmlvdXNseSB0aGVyZSB3ZXJlIHR3byB2
ZXJzaW9ucyBvZgorICAgICAgICAgICAgbG9va3VwT3JDcmVhdGVJbWFnZUZvclJlbmRlcmVyOyB0
aGVzZSBoYXZlIGJlZW4gZm9sZGVkIGludG8gaW1hZ2VGb3JSZW5kZXJlci4KKworICAgICAgICAq
IGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6ZHJhd1BhdHRlcm5Gb3JDb250
YWluZXIpOgorCisgICAgICAgICAgICBUbyBjcmVhdGUgdGhlIHRlbXBvcmFyeSB0aWxpbmcgaW1h
Z2UgYnVmZmVyLCB0aGUgZmluYWwgc2l6ZSBpbiBzY3JlZW4gY29vcmRpbmF0ZXMgaXMKKyAgICAg
ICAgICAgIG5lZWRlZC4gVGhpcyBpcyBub3cgY29tcHV0ZWQgdXNpbmcgdGhlIGN1cnJlbnQgY29u
dGV4dCdzIENUTS4gQmVjYXVzZSB0aGUgQ1RNCisgICAgICAgICAgICBhbHJlYWR5IGluY2x1ZGVz
IHRoZSBwYWdlIHNjYWxlLCBhbGwgcGFnZSBzY2FsZSB0cmFja2luZyBjYW4gYmUgcmVtb3ZlZC4K
KworICAgICAgICAgICAgVGhlIGFkanVzdG1lbnRzIHRvIHNyY1JlY3QgYW5kIHRoZSBwYXR0ZXJu
IHRyYW5zZm9ybSBhcmUgdGhlIHNhbWUgYXMgYmVmb3JlLCBqdXN0CisgICAgICAgICAgICByZWZh
Y3RvcmVkIHRvIHVzZSBpbWFnZUJ1ZmZlclNjYWxlIHdoaWNoIGhhcyB4IGFuZCB5IGNvbXBvbmVu
dHMuCisKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUNh
Y2hlOjpzZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIpOgorCisgICAgICAgICAgICBCZWNhdXNl
IHRoZSBwYWdlIHNjYWxlIG5lZWRlZCB0byBiZSBjYWNoZWQgYmV0d2VlbiBjYWxscyB0bworICAg
ICAgICAgICAgc2V0Q29udGFpbmVyU2l6ZUZvclJlbmRlcmVyLCB0aGlzIGZ1bmN0aW9uIHdhcyB3
cml0dGVuIHRvIG1vZGlmeSBhbiBleGlzdGluZyBjYWNoZQorICAgICAgICAgICAgZW50cnkuIEJl
Y2F1c2UgdGhlIHBhZ2Ugc2NhbGUgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIHRyYWNrZWQsIHRoaXMg
Y29kZSBoYXMgYmVlbgorICAgICAgICAgICAgc2ltcGxpZmllZCB0byByZS13cml0ZSBhbnkgZXhp
c3RpbmcgY2FjaGUgZW50cnkuCisKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlQ2FjaGU6Omlt
YWdlU2l6ZUZvclJlbmRlcmVyKToKKworICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBoYXMgYmVl
biBzaW1wbGlmaWVkIGJ5IGNhbGxpbmcgU1ZHSW1hZ2VGb3JDb250YWluZXI6OnNpemUoKSBpbnN0
ZWFkCisgICAgICAgICAgICBvZiBjb21wdXRpbmcgdGhpcyB2YWx1ZSBtYW51YWxseS4gVGhlIHZh
bHVlIHJldHVybmVkIHJlbWFpbnMgdGhlIHNhbWUsIGNvbnRhaW5pbmcKKyAgICAgICAgICAgIHRo
ZSBjb250YWluZXIgc2l6ZSBtdWx0aXBsaWVkIGJ5IHpvb20uCisKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ltYWdlQ2FjaGU6OmltYWdlRm9yUmVuZGVyZXIpOgorCisgICAgICAgICAgICBQcmV2aW91
c2x5IHdlIHNldCB0aGUgcGFnZSBzY2FsZSBvbiBldmVyeSBjYWxsIHRvIGltYWdlRm9yUmVuZGVy
ZXIuIEJlY2F1c2UgcGFnZSBzY2FsZQorICAgICAgICAgICAgbm8gbG9uZ2VyIG5lZWRzIHRvIGJl
IHRyYWNrZWQsIHRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gc2ltcGxpZmllZCB0byBzaW1wbHkgcmV0
dXJuCisgICAgICAgICAgICB0aGUgY2FjaGVkIFNWR0ltYWdlRm9yQ29udGFpbmVyLgorCisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ltYWdlRm9yQ29udGFpbmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgICogc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdJ
bWFnZUZvckNvbnRhaW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlRm9y
Q29udGFpbmVyOjpTVkdJbWFnZUZvckNvbnRhaW5lcik6CisgICAgICAgIChTVkdJbWFnZUZvckNv
bnRhaW5lcik6CisKIDIwMTMtMDItMjAgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdl
YmtpdC5vcmc+CiAKICAgICAgICAgW0NTUyBHcmlkIExheW91dF0gSW1wbGVtZW50IHRoZSBhdXRv
LXBsYWNlbWVudCBhbGdvcml0aG0gd2l0aG91dCBncmlkIGdyb3d0aApJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAxNDM1MTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTcsMjUgKzE1Nyw2IEBAIGJvb2wgQ2FjaGVkSW1hZ2U6OndpbGxQYWludEJyb2tl
bkltYWdlKCkKICAgICByZXR1cm4gZXJyb3JPY2N1cnJlZCgpICYmIG1fc2hvdWxkUGFpbnRCcm9r
ZW5JbWFnZTsKIH0KIAotI2lmIEVOQUJMRShTVkcpCi1pbmxpbmUgSW1hZ2UqIENhY2hlZEltYWdl
Ojpsb29rdXBPckNyZWF0ZUltYWdlRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcikKLXsKLSAgICBpZiAoIW1faW1hZ2UpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICgh
bV9pbWFnZS0+aXNTVkdJbWFnZSgpKQotICAgICAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKLSAg
ICBJbWFnZSogdXNlSW1hZ2UgPSBtX3N2Z0ltYWdlQ2FjaGUtPmltYWdlRm9yUmVuZGVyZXIocmVu
ZGVyZXIpOwotICAgIGlmICh1c2VJbWFnZSA9PSBJbWFnZTo6bnVsbEltYWdlKCkpCi0gICAgICAg
IHJldHVybiBtX2ltYWdlLmdldCgpOwotICAgIHJldHVybiB1c2VJbWFnZTsKLX0KLSNlbHNlCi1p
bmxpbmUgSW1hZ2UqIENhY2hlZEltYWdlOjpsb29rdXBPckNyZWF0ZUltYWdlRm9yUmVuZGVyZXIo
Y29uc3QgUmVuZGVyT2JqZWN0KikKLXsKLSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKLX0KLSNl
bmRpZgotCiBJbWFnZSogQ2FjaGVkSW1hZ2U6OmltYWdlKCkKIHsKICAgICBBU1NFUlQoIWlzUHVy
Z2VhYmxlKCkpOwpAQCAtMjA0LDEwICsxODUsMTkgQEAgSW1hZ2UqIENhY2hlZEltYWdlOjppbWFn
ZUZvclJlbmRlcmVyKGNvbgogICAgICAgICByZXR1cm4gYnJva2VuSW1hZ2UoMSkuZmlyc3Q7CiAg
ICAgfQogCi0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIHJldHVybiBsb29rdXBPckNyZWF0ZUlt
YWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOworICAgIGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0
dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKIAotICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7
CisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAobV9pbWFnZS0+aXNTVkdJbWFnZSgpKSB7CisgICAg
ICAgIEltYWdlKiBpbWFnZSA9IG1fc3ZnSW1hZ2VDYWNoZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5k
ZXJlcik7CisgICAgICAgIGlmIChpbWFnZSAhPSBJbWFnZTo6bnVsbEltYWdlKCkpCisgICAgICAg
ICAgICByZXR1cm4gaW1hZ2U7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVuZGVy
ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CiB9CiAKIHZvaWQgQ2FjaGVk
SW1hZ2U6OnNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcihjb25zdCBDYWNoZWRJbWFnZUNsaWVu
dCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IGNvbnRhaW5l
clpvb20pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAko
cmV2aXNpb24gMTQzNTE2KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZElt
YWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDggKzk3LDYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3QgT1ZFUlJJ
REU7CiAKIHByaXZhdGU6Ci0gICAgSW1hZ2UqIGxvb2t1cE9yQ3JlYXRlSW1hZ2VGb3JSZW5kZXJl
cihjb25zdCBSZW5kZXJPYmplY3QqKTsKLQogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIHZvaWQg
Y3JlYXRlSW1hZ2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmNwcAkocmV2aXNpb24gMTQzNTE2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDI2ICsxNDEsMzAgQEAgdm9pZCBTVkdJ
bWFnZTo6ZHJhd0ZvckNvbnRhaW5lcihHcmFwaGljcwogICAgIHNldEltYWdlT2JzZXJ2ZXIob2Jz
ZXJ2ZXIpOwogfQogCi12b2lkIFNWR0ltYWdlOjpkcmF3UGF0dGVybkZvckNvbnRhaW5lcihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSBjb250YWluZXJTaXplLCBmbG9h
dCBwYWdlU2NhbGUsIGZsb2F0IHpvb20sIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKK3ZvaWQg
U1ZHSW1hZ2U6OmRyYXdQYXR0ZXJuRm9yQ29udGFpbmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgRmxvYXRTaXplIGNvbnRhaW5lclNpemUsIGZsb2F0IHpvb20sIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QpCiB7Ci0g
ICAgQVNTRVJUKHBhZ2VTY2FsZSk7Ci0KICAgICBGbG9hdFJlY3Qgem9vbWVkQ29udGFpbmVyUmVj
dCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvbnRhaW5lclNpemUpOwogICAgIHpvb21lZENv
bnRhaW5lclJlY3Quc2NhbGUoem9vbSk7Ci0gICAgRmxvYXRSZWN0IHpvb21lZEFuZFNjYWxlZENv
bnRhaW5lclJlY3QgPSB6b29tZWRDb250YWluZXJSZWN0OwotICAgIHpvb21lZEFuZFNjYWxlZENv
bnRhaW5lclJlY3Quc2NhbGUocGFnZVNjYWxlKTsKIAotICAgIC8vIEZJWE1FKFdLMTEwMDY1KTog
VGhpcyBzaG91bGQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIEltYWdlQnVmZmVyIHJlc29sdXRpb24g
aW5zdGVhZCBvZiBzY2FsaW5nIHRoZSBidWZmZXIgbWFudWFsbHkuCi0gICAgT3duUHRyPEltYWdl
QnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZSh6b29t
ZWRBbmRTY2FsZWRDb250YWluZXJSZWN0LnNpemUoKSksIDEpOwotICAgIGRyYXdGb3JDb250YWlu
ZXIoYnVmZmVyLT5jb250ZXh0KCksIGNvbnRhaW5lclNpemUsIHpvb20sIHpvb21lZEFuZFNjYWxl
ZENvbnRhaW5lclJlY3QsIHpvb21lZENvbnRhaW5lclJlY3QsIENvbG9yU3BhY2VEZXZpY2VSR0Is
IENvbXBvc2l0ZVNvdXJjZU92ZXIsIEJsZW5kTW9kZU5vcm1hbCk7CisgICAgLy8gVGhlIEltYWdl
QnVmZmVyIHNpemUgbmVlZHMgdG8gYmUgc2NhbGVkIHRvIG1hdGNoIHRoZSBmaW5hbCByZXNvbHV0
aW9uLgorICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBjb250ZXh0LT5nZXRDVE0oKTsK
KyAgICBGbG9hdFNpemUgaW1hZ2VCdWZmZXJTY2FsZSA9IEZsb2F0U2l6ZSh0cmFuc2Zvcm0ueFNj
YWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7CisgICAgQVNTRVJUKGltYWdlQnVmZmVyU2NhbGUu
d2lkdGgoKSk7CisgICAgQVNTRVJUKGltYWdlQnVmZmVyU2NhbGUuaGVpZ2h0KCkpOworCisgICAg
RmxvYXRSZWN0IGltYWdlQnVmZmVyU2l6ZSA9IHpvb21lZENvbnRhaW5lclJlY3Q7CisgICAgaW1h
Z2VCdWZmZXJTaXplLnNjYWxlKGltYWdlQnVmZmVyU2NhbGUud2lkdGgoKSwgaW1hZ2VCdWZmZXJT
Y2FsZS5oZWlnaHQoKSk7CisKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGltYWdlQnVmZmVyU2l6ZS5zaXplKCkpLCAx
KTsKKyAgICBkcmF3Rm9yQ29udGFpbmVyKGJ1ZmZlci0+Y29udGV4dCgpLCBjb250YWluZXJTaXpl
LCB6b29tLCBpbWFnZUJ1ZmZlclNpemUsIHpvb21lZENvbnRhaW5lclJlY3QsIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIEJsZW5kTW9kZU5vcm1hbCk7CiAgICAgUmVm
UHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUsIFVu
c2NhbGVkKTsKIAotICAgIC8vIEFkanVzdCB0aGUgc291cmNlIHJlY3QgYW5kIHRyYW5zZm9ybSBm
b3IgaW1hZ2UgYnVmZmVyIHNjYWxlIGR1ZSB0byBwYWdlU2NhbGUuCisgICAgLy8gQWRqdXN0IHRo
ZSBzb3VyY2UgcmVjdCBhbmQgdHJhbnNmb3JtIGR1ZSB0byB0aGUgaW1hZ2UgYnVmZmVyJ3Mgc2Nh
bGluZy4KICAgICBGbG9hdFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgc2NhbGVk
U3JjUmVjdC5zY2FsZShwYWdlU2NhbGUpOworICAgIHNjYWxlZFNyY1JlY3Quc2NhbGUoaW1hZ2VC
dWZmZXJTY2FsZS53aWR0aCgpLCBpbWFnZUJ1ZmZlclNjYWxlLmhlaWdodCgpKTsKICAgICBBZmZp
bmVUcmFuc2Zvcm0gdW5zY2FsZWRQYXR0ZXJuVHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0pOwot
ICAgIHVuc2NhbGVkUGF0dGVyblRyYW5zZm9ybS5zY2FsZSgxIC8gcGFnZVNjYWxlKTsKKyAgICB1
bnNjYWxlZFBhdHRlcm5UcmFuc2Zvcm0uc2NhbGUoMSAvIGltYWdlQnVmZmVyU2NhbGUud2lkdGgo
KSwgMSAvIGltYWdlQnVmZmVyU2NhbGUuaGVpZ2h0KCkpOwogCiAgICAgaW1hZ2UtPmRyYXdQYXR0
ZXJuKGNvbnRleHQsIHNjYWxlZFNyY1JlY3QsIHVuc2NhbGVkUGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIGNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBkc3RSZWN0KTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCShyZXZpc2lvbiAxNDM1MTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtODksOCAr
ODksOCBAQCBwcml2YXRlOgogICAgIFNWR0ltYWdlKEltYWdlT2JzZXJ2ZXIqKTsKICAgICB2aXJ0
dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGZyb21SZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRvUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOwogICAgIHZvaWQgZHJhd0ZvckNvbnRhaW5lcihH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFNpemUsIGZsb2F0LCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRN
b2RlKTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuRm9yQ29udGFpbmVyKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEZsb2F0U2l6ZSwgZmxvYXQsIGZsb2F0LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLAotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiwgQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgZHJhd1BhdHRl
cm5Gb3JDb250YWluZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRTaXplLCBmbG9hdCwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2lu
dCYsIENvbG9yU3BhY2UsCisgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJl
Y3QmKTsKIAogICAgIE93blB0cjxTVkdJbWFnZUNocm9tZUNsaWVudD4gbV9jaHJvbWVDbGllbnQ7
CiAgICAgT3duUHRyPFBhZ2U+IG1fcGFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAJKHJldmlzaW9uIDE0MzUxNikKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYsMTggKzU2LDEyIEBAIHZvaWQgU1ZHSW1hZ2VDYWNoZTo6c2V0Q29udGFpbmVyU2l6ZUZvclIK
IHsKICAgICBBU1NFUlQoY2xpZW50KTsKICAgICBBU1NFUlQoIWNvbnRhaW5lclNpemUuaXNFbXB0
eSgpKTsKKyAgICBBU1NFUlQoY29udGFpbmVyWm9vbSk7CiAKICAgICBGbG9hdFNpemUgY29udGFp
bmVyU2l6ZVdpdGhvdXRab29tKGNvbnRhaW5lclNpemUpOwogICAgIGNvbnRhaW5lclNpemVXaXRo
b3V0Wm9vbS5zY2FsZSgxIC8gY29udGFpbmVyWm9vbSk7CiAKLSAgICBJbWFnZUZvckNvbnRhaW5l
ck1hcDo6aXRlcmF0b3IgaW1hZ2VJdCA9IG1faW1hZ2VGb3JDb250YWluZXJNYXAuZmluZChjbGll
bnQpOwotICAgIGlmIChpbWFnZUl0ID09IG1faW1hZ2VGb3JDb250YWluZXJNYXAuZW5kKCkpIHsK
LSAgICAgICAgUmVmUHRyPFNWR0ltYWdlRm9yQ29udGFpbmVyPiBpbWFnZSA9IFNWR0ltYWdlRm9y
Q29udGFpbmVyOjpjcmVhdGUobV9zdmdJbWFnZSwgY29udGFpbmVyU2l6ZVdpdGhvdXRab29tLCAx
LCBjb250YWluZXJab29tKTsKLSAgICAgICAgbV9pbWFnZUZvckNvbnRhaW5lck1hcC5zZXQoY2xp
ZW50LCBpbWFnZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW1hZ2VJdC0+dmFsdWUtPnNldFNp
emUoY29udGFpbmVyU2l6ZVdpdGhvdXRab29tKTsKLSAgICAgICAgaW1hZ2VJdC0+dmFsdWUtPnNl
dFpvb20oY29udGFpbmVyWm9vbSk7Ci0gICAgfQorICAgIG1faW1hZ2VGb3JDb250YWluZXJNYXAu
c2V0KGNsaWVudCwgU1ZHSW1hZ2VGb3JDb250YWluZXI6OmNyZWF0ZShtX3N2Z0ltYWdlLCBjb250
YWluZXJTaXplV2l0aG91dFpvb20sIGNvbnRhaW5lclpvb20pKTsKIH0KIAogSW50U2l6ZSBTVkdJ
bWFnZUNhY2hlOjppbWFnZVNpemVGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKSBjb25zdApAQCAtODEsMTQgKzc1LDggQEAgSW50U2l6ZSBTVkdJbWFnZUNhY2hlOjppbWFn
ZVNpemVGb3JSZW5kZQogICAgICAgICByZXR1cm4gaW1hZ2VTaXplOwogCiAgICAgUmVmUHRyPFNW
R0ltYWdlRm9yQ29udGFpbmVyPiBpbWFnZSA9IGl0LT52YWx1ZTsKLSAgICBGbG9hdFNpemUgc2l6
ZSA9IGltYWdlLT5jb250YWluZXJTaXplKCk7Ci0gICAgaWYgKCFzaXplLmlzRW1wdHkoKSkgewot
ICAgICAgICBzaXplLnNjYWxlKGltYWdlLT56b29tKCkpOwotICAgICAgICBpbWFnZVNpemUuc2V0
V2lkdGgoc2l6ZS53aWR0aCgpKTsKLSAgICAgICAgaW1hZ2VTaXplLnNldEhlaWdodChzaXplLmhl
aWdodCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2VTaXplOworICAgIEFTU0VSVCghaW1h
Z2UtPnNpemUoKS5pc0VtcHR5KCkpOworICAgIHJldHVybiBpbWFnZS0+c2l6ZSgpOwogfQogCiAv
LyBGSVhNRTogVGhpcyBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRoZSBhbmltYXRpb24gdGlt
ZWxpbmUgc28gYW5pbWF0aW9ucyB3aWxsIG5vdApAQCAtOTgsMTggKzg2LDEyIEBAIEltYWdlKiBT
VkdJbWFnZUNhY2hlOjppbWFnZUZvclJlbmRlcmVyKGMKICAgICBpZiAoIXJlbmRlcmVyKQogICAg
ICAgICByZXR1cm4gSW1hZ2U6Om51bGxJbWFnZSgpOwogCi0gICAgLy8gVGhlIGNhY2hlIG5lZWRz
IHRvIGtub3cgdGhlIHNpemUgb2YgdGhlIHJlbmRlcmVyIGJlZm9yZSBxdWVyeWluZyBhbiBpbWFn
ZSBmb3IgaXQuCiAgICAgSW1hZ2VGb3JDb250YWluZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFn
ZUZvckNvbnRhaW5lck1hcC5maW5kKHJlbmRlcmVyKTsKICAgICBpZiAoaXQgPT0gbV9pbWFnZUZv
ckNvbnRhaW5lck1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsK
IAogICAgIFJlZlB0cjxTVkdJbWFnZUZvckNvbnRhaW5lcj4gaW1hZ2UgPSBpdC0+dmFsdWU7Ci0g
ICAgQVNTRVJUKCFpbWFnZS0+Y29udGFpbmVyU2l6ZSgpLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBG
SVhNRTogU2V0IHRoZSBwYWdlIHNjYWxlIGluIHNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlciBp
bnN0ZWFkIG9mIGxvb2tpbmcgaXQgdXAgaGVyZS4KLSAgICBQYWdlKiBwYWdlID0gcmVuZGVyZXIt
PmRvY3VtZW50KCktPnBhZ2UoKTsKLSAgICBpbWFnZS0+c2V0UGFnZVNjYWxlKHBhZ2UtPmRldmlj
ZVNjYWxlRmFjdG9yKCkgKiBwYWdlLT5wYWdlU2NhbGVGYWN0b3IoKSk7Ci0KKyAgICBBU1NFUlQo
IWltYWdlLT5zaXplKCkuaXNFbXB0eSgpKTsKICAgICByZXR1cm4gaW1hZ2UuZ2V0KCk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9y
Q29udGFpbmVyLmNwcAkocmV2aXNpb24gMTQzNTE2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyAr
NDUsNyBAQCB2b2lkIFNWR0ltYWdlRm9yQ29udGFpbmVyOjpkcmF3KEdyYXBoaWNzCiB2b2lkIFNW
R0ltYWdlRm9yQ29udGFpbmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLAogICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBjb25zdCBGbG9hdFJlY3QmIGRz
dFJlY3QsIEJsZW5kTW9kZSkKIHsKLSAgICBtX2ltYWdlLT5kcmF3UGF0dGVybkZvckNvbnRhaW5l
cihjb250ZXh0LCBtX2NvbnRhaW5lclNpemUsIG1fcGFnZVNjYWxlLCBtX3pvb20sIHNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBjb2xvclNwYWNlLCBjb21wb3NpdGVPcCwgZHN0UmVj
dCk7CisgICAgbV9pbWFnZS0+ZHJhd1BhdHRlcm5Gb3JDb250YWluZXIoY29udGV4dCwgbV9jb250
YWluZXJTaXplLCBtX3pvb20sIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBjb2xv
clNwYWNlLCBjb21wb3NpdGVPcCwgZHN0UmVjdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5l
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZv
ckNvbnRhaW5lci5oCShyZXZpc2lvbiAxNDM1MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNWR0ltYWdlRm9yQ29udGFpbmVyIDog
cHVibGljIEltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdJbWFnZUZv
ckNvbnRhaW5lcj4gY3JlYXRlKFNWR0ltYWdlKiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBjb250
YWluZXJTaXplLCBmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IHpvb20pCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U1ZHSW1hZ2VGb3JDb250YWluZXI+IGNyZWF0ZShTVkdJbWFnZSogaW1hZ2UsIGNvbnN0
IEZsb2F0U2l6ZSYgY29udGFpbmVyU2l6ZSwgZmxvYXQgem9vbSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU1ZHSW1hZ2VGb3JDb250YWluZXIoaW1hZ2UsIGNvbnRhaW5lclNp
emUsIHBhZ2VTY2FsZSwgem9vbSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0lt
YWdlRm9yQ29udGFpbmVyKGltYWdlLCBjb250YWluZXJTaXplLCB6b29tKSk7CiAgICAgfQogCiAg
ICAgdmlydHVhbCBib29sIGlzU1ZHSW1hZ2UoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVl
OyB9CkBAIC02MiwyNSArNjIsMjAgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcyB0byBiZSBsZXNzIGNvbnNlcnZhdGl2ZS4KICAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZy
YW1lS25vd25Ub0JlT3BhcXVlKCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIEZs
b2F0U2l6ZSBjb250YWluZXJTaXplKCkgeyByZXR1cm4gbV9jb250YWluZXJTaXplOyB9Ci0gICAg
ZmxvYXQgcGFnZVNjYWxlKCkgeyByZXR1cm4gbV9wYWdlU2NhbGU7IH0KLSAgICBmbG9hdCB6b29t
KCkgeyByZXR1cm4gbV96b29tOyB9Ci0KLSAgICB2b2lkIHNldFNpemUoRmxvYXRTaXplJiBzaXpl
KSB7IG1fY29udGFpbmVyU2l6ZSA9IHNpemU7IH0KLSAgICB2b2lkIHNldFpvb20oZmxvYXQgem9v
bSkgeyBtX3pvb20gPSB6b29tOyB9Ci0gICAgdm9pZCBzZXRQYWdlU2NhbGUoZmxvYXQgcGFnZVNj
YWxlKSB7IG1fcGFnZVNjYWxlID0gcGFnZVNjYWxlOyB9Ci0KIHByaXZhdGU6Ci0gICAgU1ZHSW1h
Z2VGb3JDb250YWluZXIoU1ZHSW1hZ2UqIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGNvbnRhaW5l
clNpemUsIGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQgem9vbSkKLSAgICAgICAgOiBtX2ltYWdlKGlt
YWdlKSwgbV9jb250YWluZXJTaXplKGNvbnRhaW5lclNpemUpLCBtX3BhZ2VTY2FsZShwYWdlU2Nh
bGUpLCBtX3pvb20oem9vbSkgeyB9CisgICAgU1ZHSW1hZ2VGb3JDb250YWluZXIoU1ZHSW1hZ2Uq
IGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IHpvb20pCisgICAg
ICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAgICAgLCBtX2NvbnRhaW5lclNpemUoY29udGFpbmVy
U2l6ZSkKKyAgICAgICAgLCBtX3pvb20oem9vbSkKKyAgICB7CisgICAgfQogCiAgICAgdmlydHVh
bCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIC8qZGVzdHJveUFsbCovID0gdHJ1ZSkgeyB9
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
IAogICAgIFNWR0ltYWdlKiBtX2ltYWdlOwotICAgIEZsb2F0U2l6ZSBtX2NvbnRhaW5lclNpemU7
Ci0gICAgZmxvYXQgbV9wYWdlU2NhbGU7Ci0gICAgZmxvYXQgbV96b29tOworICAgIGNvbnN0IEZs
b2F0U2l6ZSBtX2NvbnRhaW5lclNpemU7CisgICAgY29uc3QgZmxvYXQgbV96b29tOwogfTsKIH0K
IApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMTQzNTM1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTMtMDItMjAgIFBoaWxpcCBSb2dlcnMg
IDxwZHJAZ29vZ2xlLmNvbT4KKworICAgICAgICBBY2NvdW50IGZvciB0cmFuc2Zvcm0gaW4gU1ZH
IGJhY2tncm91bmQgaW1hZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTAyOTUKKworICAgICAgICBSZXZpZXdlZCBieSBEaXJrIFNjaHVsemUuCisK
KyAgICAgICAgKiBzdmcvYXMtYmFja2dyb3VuZC1pbWFnZS9zdmctdHJhbnNmb3JtZWQtYmFja2dy
b3VuZC1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvYXMtYmFja2dyb3VuZC1p
bWFnZS9zdmctdHJhbnNmb3JtZWQtYmFja2dyb3VuZC5odG1sOiBBZGRlZC4KKwogMjAxMy0wMi0y
MCAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBb
Q1NTIEdyaWQgTGF5b3V0XSBJbXBsZW1lbnQgdGhlIGF1dG8tcGxhY2VtZW50IGFsZ29yaXRobSB3
aXRob3V0IGdyaWQgZ3Jvd3RoCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvYXMtYmFja2dyb3VuZC1p
bWFnZS9zdmctdHJhbnNmb3JtZWQtYmFja2dyb3VuZC1leHBlY3RlZC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3N2Zy9hcy1iYWNrZ3JvdW5kLWltYWdlL3N2Zy10cmFuc2Zvcm1lZC1i
YWNrZ3JvdW5kLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcv
YXMtYmFja2dyb3VuZC1pbWFnZS9zdmctdHJhbnNmb3JtZWQtYmFja2dyb3VuZC1leHBlY3RlZC5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyNjaXJjbGVzIHsKKyAgcG9zaXRpb246IGFic29sdXRlOwor
ICBsZWZ0OiAxMHB4OworICB0b3A6IDQwcHg7CisgIHdpZHRoOiA0MDBweDsKKyAgaGVpZ2h0OiAx
MDBweDsKKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHht
bG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzEwMCcgaGVpZ2h0PScxMDAn
PjxjaXJjbGUgY3g9JzUwJyBjeT0nNTAnIHI9JzUwJyBmaWxsPSdncmVlbicgLz48L3N2Zz4iKTsK
K30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KK1Rlc3QgZm9yIFdLMTEwMjk1OiBUaGlzIHRl
c3QgcGFzc2VzIGlmIHRoZXJlIGFyZSBmb3VyIGdyZWVuIGNpcmNsZXMgd2l0aCBzaGFycCBlZGdl
cy48YnIvPgorPGRpdiBpZD0iY2lyY2xlcyI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CisKSW5k
ZXg6IExheW91dFRlc3RzL3N2Zy9hcy1iYWNrZ3JvdW5kLWltYWdlL3N2Zy10cmFuc2Zvcm1lZC1i
YWNrZ3JvdW5kLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2FzLWJhY2tncm91
bmQtaW1hZ2Uvc3ZnLXRyYW5zZm9ybWVkLWJhY2tncm91bmQuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL3N2Zy9hcy1iYWNrZ3JvdW5kLWltYWdlL3N2Zy10cmFuc2Zvcm1lZC1iYWNr
Z3JvdW5kLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNyBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorI2NpcmNsZSB7CisgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgbGVmdDogMTBweDsKKyAgdG9wOiA0MHB4OworICB3aWR0aDogNDBweDsKKyAgaGVp
Z2h0OiAyMHB4OworICBiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sLDxz
dmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjAnIGhlaWdodD0n
MjAnPjxjaXJjbGUgY3g9JzEwJyBjeT0nMTAnIHI9JzEwJyBmaWxsPSdncmVlbicgLz48L3N2Zz4i
KTsKKyAgdHJhbnNmb3JtOnNjYWxlKDUpOworICB0cmFuc2Zvcm0tb3JpZ2luOjAgMDsKKyAgLXdl
YmtpdC10cmFuc2Zvcm06c2NhbGUoNSk7CisgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7
Cit9CisjZWxsaXBzZSB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogMjEwcHg7Cisg
IHRvcDogNDBweDsKKyAgd2lkdGg6IDgwcHg7CisgIGhlaWdodDogMTBweDsKKyAgYmFja2dyb3Vu
ZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3Lncz
Lm9yZy8yMDAwL3N2Zycgd2lkdGg9JzQwJyBoZWlnaHQ9JzEwJz48ZWxsaXBzZSBjeD0nMjAnIGN5
PSc1JyByeD0nMjAnIHJ5PSc1JyBmaWxsPSdncmVlbicgLz48L3N2Zz4iKTsKKyAgdHJhbnNmb3Jt
OnNjYWxlKDIuNSwgMTApOworICB0cmFuc2Zvcm0tb3JpZ2luOjAgMDsKKyAgLXdlYmtpdC10cmFu
c2Zvcm06c2NhbGUoMi41LCAxMCk7CisgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7Cit9
Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CitUZXN0IGZvciBXSzExMDI5NTogVGhpcyB0ZXN0
IHBhc3NlcyBpZiB0aGVyZSBhcmUgZm91ciBncmVlbiBjaXJjbGVzIHdpdGggc2hhcnAgZWRnZXMu
PGJyLz4KKzxkaXYgaWQ9ImNpcmNsZSI+PC9kaXY+Cis8ZGl2IGlkPSJlbGxpcHNlIj48L2Rpdj4K
KzwvYm9keT4KKzwvaHRtbD4KKwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>