<?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>71350</bug_id>
          
          <creation_ts>2011-11-02 00:54:37 -0700</creation_ts>
          <short_desc>Added TileCairo and TiledBackingStoreBackendCairo files</short_desc>
          <delta_ts>2011-11-11 14:18:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          
          <blocked>71352</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Tomasz Morawski">t.morawski</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hausmann</cc>
    
    <cc>joone.hur</cc>
    
    <cc>leandro</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>494483</commentid>
    <comment_count>0</comment_count>
    <who name="Tomasz Morawski">t.morawski</who>
    <bug_when>2011-11-02 00:54:37 -0700</bug_when>
    <thetext>Added TileCairo and TiledBackingStoreBackend files needed by Tiled Backing Store implementation that uses cairo library eg. EFL and Gtk WebKit port.

This patch contains some parts of rebased and updated code from 45423 bug. Originals authors of the code are:
Julien Chaffraix  &lt;jchaffraix@codeaurora.org&gt;, Zaheer Ahmad  &lt;zahmad@codeaurora.org&gt;, Joone Hur  &lt;joone.hur@collabora.co.uk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494486</commentid>
    <comment_count>1</comment_count>
      <attachid>113287</attachid>
    <who name="Tomasz Morawski">t.morawski</who>
    <bug_when>2011-11-02 00:59:52 -0700</bug_when>
    <thetext>Created attachment 113287
Initial implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494491</commentid>
    <comment_count>2</comment_count>
      <attachid>113287</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-02 01:15:13 -0700</bug_when>
    <thetext>Comment on attachment 113287
Initial implementation

In principle I think this looks pretty good actually. But are you sure that you don&apos;t want to have a back and a front buffer to benefit from atomic tile switching? It&apos;s rather simple to do I&apos;d say.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494500</commentid>
    <comment_count>3</comment_count>
    <who name="Tomasz Morawski">t.morawski</who>
    <bug_when>2011-11-02 01:42:21 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 113287 [details])
&gt; In principle I think this looks pretty good actually. But are you sure that you don&apos;t want to have a back and a front buffer to benefit from atomic tile switching? It&apos;s rather simple to do I&apos;d say.
Yes, this is a very good feature. Due to that I still don&apos;t know if this patch will be applied. I would like to commit this patch as is it firstly. Next, new features can be added to existing code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494676</commentid>
    <comment_count>4</comment_count>
      <attachid>113287</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-02 09:45:57 -0700</bug_when>
    <thetext>Comment on attachment 113287
Initial implementation

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

&gt; Source/WebCore/platform/graphics/cairo/OwnPtrCairo.cpp:56
&gt; +template &lt;&gt; void deleteOwnedPtr&lt;cairo_region_t&gt;(cairo_region_t* ptr)
&gt; +{
&gt; +    if (ptr)
&gt; +        cairo_region_destroy(ptr);
&gt; +}

cairo_region_t should not be wrapped in an OwnPtr because it&apos;s reference counted. Instead you should use RefPtrCairo.

&gt; Source/WebCore/platform/graphics/cairo/OwnPtrCairo.cpp:62
&gt; +template &lt;&gt; void deleteOwnedPtr&lt;cairo_rectangle_t&gt;(cairo_rectangle_t* ptr)
&gt; +{
&gt; +    if (ptr)
&gt; +        free(ptr);
&gt; +}

I think you can aovid this, because the default implementation calls delete.

&gt; Source/WebCore/platform/graphics/cairo/TileCairo.cpp:78
&gt; +    OwnPtr&lt;cairo_rectangle_int_t&gt; rects = adoptPtr(new cairo_rectangle_int_t[rectCount]);

It&apos;s probably better here to use OwnFastMallocPtr and fastAlloc.

&gt; Source/WebCore/platform/graphics/cairo/TileCairo.cpp:91
&gt; +        m_buffer = adoptRef(cairo_image_surface_create(CAIRO_FORMAT_ARGB32, m_backingStore-&gt;tileSize().width(), m_backingStore-&gt;tileSize().height()));

This line is pretty long. I&apos;d prefer it shorter, at least.

m_buffer = adoptRef(cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
                                               m_backingStore-&gt;tileSize().width(),
                                               m_backingStore-&gt;tileSize().height()));

&gt; Source/WebCore/platform/graphics/cairo/TileCairo.cpp:126
&gt; +    PlatformContextCairo* platformContext = context-&gt;platformContext();
&gt; +    cairo_t* cr = platformContext-&gt;cr();

No need to cache platformContext here. You can just do:
cairo_t* cr =  context-&gt;platformContext()-&gt;cr();

&gt; Source/WebCore/platform/graphics/cairo/TileCairo.cpp:127
&gt; +    cairo_set_source_surface(cr, m_buffer.get(), target.x() - source.x(), target.y() - source.y());

Okay. 

The result is target.x() - source.x()
source.x() = target.x() - m_rect.x()
Therefore the result is target.x() - target.x() + m_rect.x()

Am I missing something here or can you just write m_rect.x() and m_rect.y() and get rid of source altogether?

&gt; Source/WebCore/platform/graphics/cairo/TiledBackingStoreBackendCairo.cpp:46
&gt; +static const unsigned checkerColor1 = 0xff555555;
&gt; +static const unsigned checkerColor2 = 0xffaaaaaa;

What colors are these?

&gt; Source/WebCore/platform/graphics/cairo/TiledBackingStoreBackendCairo.cpp:63
&gt; +            if (alternate)
&gt; +                setSourceRGBAFromColor(cr.get(), checkerColor1);
&gt; +            else
&gt; +                setSourceRGBAFromColor(cr.get(), checkerColor2);

I think it&apos;s much clearer to call cairo_set_source_rgba directly here!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495268</commentid>
    <comment_count>5</comment_count>
    <who name="Tomasz Morawski">t.morawski</who>
    <bug_when>2011-11-03 01:50:33 -0700</bug_when>
    <thetext>Thanks for review. I will put a new version of patch soon.

&gt; &gt; Source/WebCore/platform/graphics/cairo/TiledBackingStoreBackendCairo.cpp:46
&gt; &gt; +static const unsigned checkerColor1 = 0xff555555;
&gt; &gt; +static const unsigned checkerColor2 = 0xffaaaaaa;
&gt; 
&gt; What colors are these?
I am sorry I don&apos;t know names of these colors (I am a men) but it are generally grey (light and dark). These colors are defined in TileQt also. May be the better idea will be to have one checker color definition for all port. 

&gt; &gt; Source/WebCore/platform/graphics/cairo/TiledBackingStoreBackendCairo.cpp:63
&gt; &gt; +            if (alternate)
&gt; &gt; +                setSourceRGBAFromColor(cr.get(), checkerColor1);
&gt; &gt; +            else
&gt; &gt; +                setSourceRGBAFromColor(cr.get(), checkerColor2);
&gt; 
&gt; I think it&apos;s much clearer to call cairo_set_source_rgba directly here!
Yes, it could be done. But if the above colors definition will stay the use of  
setSourceRGBAFromColor is simpler then cairo_set_source_rgba.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496095</commentid>
    <comment_count>6</comment_count>
      <attachid>113630</attachid>
    <who name="Tomasz Morawski">t.morawski</who>
    <bug_when>2011-11-04 00:51:55 -0700</bug_when>
    <thetext>Created attachment 113630
Updated

Updated according to Martin Robinson&apos;s suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499341</commentid>
    <comment_count>7</comment_count>
      <attachid>113630</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-09 14:08:37 -0800</bug_when>
    <thetext>Comment on attachment 113630
Updated

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

This looks pretty close, but I have a few more comments. Sorry for the delay in reviewing.

&gt; Source/WebCore/ChangeLog:12
&gt; +        Added TileCairo and TiledBackingStoreBackend files needed by Tiled Backing Store implementation that uses cairo
&gt; +        library eg. EFL and Gtk WebKit port.
&gt; +        This patch contains some parts of rebased and updated code from 45423 bug. Originals authors of the code are:
&gt; +        Julien Chaffraix  &lt;jchaffraix@codeaurora.org&gt;, Zaheer Ahmad  &lt;zahmad@codeaurora.org&gt;,
&gt; +        Joone Hur  &lt;joone.hur@collabora.co.uk&gt;

In the future please try to align these lines into a paragraph.

&gt; Source/WebCore/ChangeLog:35
&gt; +        * platform/graphics/cairo/RefPtrCairo.cpp:
&gt; +        (WTF::refIfNotNull):
&gt; +        (WTF::derefIfNotNull):
&gt; +        * platform/graphics/cairo/RefPtrCairo.h:
&gt; +        * platform/graphics/cairo/TileCairo.cpp: Added.
&gt; +        (WebCore::TileCairo::TileCairo):
&gt; +        (WebCore::TileCairo::~TileCairo):
&gt; +        (WebCore::TileCairo::isDirty):
&gt; +        (WebCore::TileCairo::isReadyToPaint):
&gt; +        (WebCore::TileCairo::invalidate):
&gt; +        (WebCore::TileCairo::updateBackBuffer):
&gt; +        (WebCore::TileCairo::swapBackBufferToFront):
&gt; +        (WebCore::TileCairo::paint):
&gt; +        (WebCore::TileCairo::resize):
&gt; +        * platform/graphics/cairo/TileCairo.h: Added.
&gt; +        (WebCore::TileCairo::create):
&gt; +        (WebCore::TileCairo::coordinate):
&gt; +        (WebCore::TileCairo::rect):
&gt; +        * platform/graphics/cairo/TiledBackingStoreBackendCairo.cpp: Added.
&gt; +        (WebCore::TiledBackingStoreBackend::createTile):
&gt; +        (WebCore::checkeredSurface):
&gt; +        (WebCore::TiledBackingStoreBackend::paintCheckerPattern):

It&apos;s a good idea to fill in these as well. Take a look at other ChangeLog entries for an example.

&gt; Source/WebCore/platform/graphics/cairo/RefPtrCairo.cpp:116
&gt; -
&gt;  #endif
&gt; -
&gt;  }

It seems these lines were removed accidentally.

&gt; Source/WebCore/platform/graphics/cairo/TileCairo.cpp:120
&gt; +    cairo_t* cr =  context-&gt;platformContext()-&gt;cr();

Extra space after &apos;=&apos;

&gt; Source/WebCore/platform/graphics/cairo/TileCairo.h:3
&gt; +/*
&gt; + Copyright (C) 2011 Samsung Electronics
&gt; +

Doesn&apos;t it make sense for this file to have the same license as TileCairo.cpp? I think it&apos;s pretty weird to give them different licenses randomly. I&apos;m unsure exactly what legal problems this could pose, but it&apos;s best to make them the same.

&gt; Source/WebCore/platform/graphics/cairo/TileCairo.h:39
&gt; +    static PassRefPtr&lt;Tile&gt; create(TiledBackingStore* backingStore, const Coordinate&amp; tileCoordinate) { return adoptRef(new TileCairo(backingStore, tileCoordinate)); }

Please reformat this to be across multiple lines. It&apos;s quite a long line right now.

&gt; Source/WebCore/platform/graphics/cairo/TiledBackingStoreBackendCairo.cpp:46
&gt; +static const unsigned checkerColor1 = 0xff555555;
&gt; +static const unsigned checkerColor2 = 0xffaaaaaa;

My issue with this is that it&apos;s really hard to tell just by looking at this lines what the colors are. I think they should be renamed to reflect what colors they are.

&gt; Source/WebCore/platform/graphics/cairo/TiledBackingStoreBackendCairo.cpp:68
&gt; +    for (unsigned y = 0; y &lt; checkerSize; y += checkerSize / 2) {
&gt; +        bool alternate = y % checkerSize;
&gt; +        for (unsigned x = 0; x &lt; checkerSize; x += checkerSize / 2) {
&gt; +            if (alternate)
&gt; +                setSourceRGBAFromColor(cr.get(), checkerColor1);
&gt; +            else
&gt; +                setSourceRGBAFromColor(cr.get(), checkerColor2);
&gt; +            cairo_rectangle(cr.get(), x, y, checkerSize / 2, checkerSize / 2);
&gt; +            cairo_fill(cr.get());
&gt; +            alternate = !alternate;
&gt; +        }
&gt; +    }

I think it will be much more readable to unroll this loop:

unsigned halfCheckerSize = checkerSize / 2;
cairo_rectangle(cr.get(), 0, 0, halfCheckerSize, halfCheckerSize);
cairo_rectangle(cr.get(), halfCheckerSize, halfCheckerSize, halfCheckerSize, halfCheckerSize);
setSourceRGBAFromColor(cr.get(), checkerColor1);
cairo_fill(cr.get());

cairo_rectangle(cr.get(), halfCheckerSize, 0, halfCheckerSize, halfCheckerSize);
cairo_rectangle(cr.get(), 0, halfCheckerSize, halfCheckerSize, halfCheckerSize);
setSourceRGBAFromColor(cr.get(), checkerColor2);
cairo_fill(cr.get());

It&apos;s even fewer lines!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499594</commentid>
    <comment_count>8</comment_count>
      <attachid>113630</attachid>
    <who name="Joone Hur">joone.hur</who>
    <bug_when>2011-11-09 19:21:10 -0800</bug_when>
    <thetext>Comment on attachment 113630
Updated

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

&gt;&gt; Source/WebCore/platform/graphics/cairo/TiledBackingStoreBackendCairo.cpp:46
&gt;&gt; +static const unsigned checkerColor2 = 0xffaaaaaa;
&gt; 
&gt; My issue with this is that it&apos;s really hard to tell just by looking at this lines what the colors are. I think they should be renamed to reflect what colors they are.

How about using checkerColorDarkGrey(0xff555555) and checkerColorLightGrey(0xffaaaaaa)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499598</commentid>
    <comment_count>9</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-09 19:27:19 -0800</bug_when>
    <thetext>(In reply to comment #8)

&gt; How about using checkerColorDarkGrey(0xff555555) and checkerColorLightGrey(0xffaaaaaa)?

That would definitely be an improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499811</commentid>
    <comment_count>10</comment_count>
      <attachid>114477</attachid>
    <who name="Tomasz Morawski">t.morawski</who>
    <bug_when>2011-11-10 05:27:07 -0800</bug_when>
    <thetext>Created attachment 114477
Updated according to suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499826</commentid>
    <comment_count>11</comment_count>
    <who name="Tomasz Morawski">t.morawski</who>
    <bug_when>2011-11-10 05:51:47 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 113630 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=113630&amp;action=review
&gt; 
&gt; This looks pretty close, but I have a few more comments. Sorry for the delay in reviewing.
I realy thank you for your review. After your and Joone Hur&apos;s comments the code looks much better and it has chance to be commited.

&gt; Doesn&apos;t it make sense for this file to have the same license as TileCairo.cpp?
The license issue was due to that I tried to save Joone Hur&apos;s license in code that was orginaly written by him. Yes, it was poor solution. I have unified the licens to BSD for all files. 

I have uploaded a patch that contains all your suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499831</commentid>
    <comment_count>12</comment_count>
    <who name="Tomasz Morawski">t.morawski</who>
    <bug_when>2011-11-10 05:58:01 -0800</bug_when>
    <thetext>Hello Joone Hur,
I have changed slightly a license that you have used in your patch. It is still BSD license but I have changed:

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS insted of
THIS SOFTWARE IS PROVIDED BY THE AUTHOR

and
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS insted of
IN NO EVENT SHALL THE AUTHOR 

Do you agree for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499930</commentid>
    <comment_count>13</comment_count>
      <attachid>114477</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-10 08:25:25 -0800</bug_when>
    <thetext>Comment on attachment 114477
Updated according to suggestions 

Thanks. This looks fine to me. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500489</commentid>
    <comment_count>14</comment_count>
    <who name="Joone Hur">joone.hur</who>
    <bug_when>2011-11-10 20:50:26 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Hello Joone Hur,
&gt; I have changed slightly a license that you have used in your patch. It is still BSD license but I have changed:
&gt; 
&gt; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS insted of
&gt; THIS SOFTWARE IS PROVIDED BY THE AUTHOR
&gt; 
&gt; and
&gt; IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS insted of
&gt; IN NO EVENT SHALL THE AUTHOR 
&gt; 
&gt; Do you agree for this?

This license was written by Julien or Zaheer. 
Anyway, thank you for your contribution. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501094</commentid>
    <comment_count>15</comment_count>
      <attachid>114477</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-11 14:18:44 -0800</bug_when>
    <thetext>Comment on attachment 114477
Updated according to suggestions 

Clearing flags on attachment: 114477

Committed r100021: &lt;http://trac.webkit.org/changeset/100021&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501095</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-11 14:18:51 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113287</attachid>
            <date>2011-11-02 00:59:52 -0700</date>
            <delta_ts>2011-11-04 00:51:55 -0700</delta_ts>
            <desc>Initial implementation</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>14979</size>
            <attacher name="Tomasz Morawski">t.morawski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5MTU1MTcyLi5kNzgzZjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAg
QEAKKzIwMTEtMTEtMDIgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QGNvZGVhdXJvcmEu
b3JnPiwgWmFoZWVyIEFobWFkICA8emFobWFkQGNvZGVhdXJvcmEub3JnPiwgSm9vbmUgSHVyICA8
am9vbmUuaHVyQGNvbGxhYm9yYS5jby51az4sIFRvbWFzeiBNb3Jhd3NraSAgPHQubW9yYXdza2lA
c2Ftc3VuZy5jb20+CisKKyAgICAgICAgQWRkZWQgVGlsZUNhaXJvIGFuZCBUaWxlZEJhY2tpbmdT
dG9yZUJhY2tlbmRDYWlybyBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzEzNTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRlZCBUaWxlQ2Fpcm8gYW5kIFRpbGVkQmFja2luZ1N0b3JlQmFja2Vu
ZCBmaWxlcyBuZWVkZWQgYnkgVGlsZWQgQmFja2luZyBTdG9yZSBpbXBsZW1lbnRhdGlvbiB0aGF0
IHVzZXMgY2Fpcm8KKyAgICAgICAgbGlicmFyeSBlZy4gRUZMIGFuZCBHdGsgV2ViS2l0IHBvcnQu
CisgICAgICAgIFRoaXMgcGF0Y2ggY29udGFpbnMgc29tZSBwYXJ0cyBvZiByZWJhc2VkIGFuZCB1
cGRhdGVkIGNvZGUgZnJvbSA0NTQyMyBidWcuIE9yaWdpbmFscyBhdXRob3JzIG9mIHRoZSBjb2Rl
IGFyZToKKyAgICAgICAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhAY29kZWF1cm9yYS5v
cmc+LCBaYWhlZXIgQWhtYWQgIDx6YWhtYWRAY29kZWF1cm9yYS5vcmc+LAorICAgICAgICBKb29u
ZSBIdXIgIDxqb29uZS5odXJAY29sbGFib3JhLmNvLnVrPgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vT3duUHRyQ2Fpcm8uY3BwOgorICAgICAgICAoV1RGOjpjYWlyb19yZWdp
b25fdCk6CisgICAgICAgIChXVEY6OmNhaXJvX3JlY3RhbmdsZV90KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9Pd25QdHJDYWlyby5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1RpbGVDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGls
ZUNhaXJvOjpUaWxlQ2Fpcm8pOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhaXJvOjp+VGlsZUNh
aXJvKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWlybzo6aXNEaXJ0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlQ2Fpcm86OmlzUmVhZHlUb1BhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVDYWlybzo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWdpb25Ub1JlY3RzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWlybzo6dXBkYXRlQmFja0J1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlQ2Fpcm86OnN3YXBCYWNrQnVmZmVyVG9Gcm9udCk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlQ2Fpcm86OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWlybzo6
cmVzaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UaWxlQ2Fpcm8uaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2Fpcm86OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlQ2Fpcm86OmNvb3JkaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNh
aXJvOjpyZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UaWxlZEJhY2tp
bmdTdG9yZUJhY2tlbmRDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRC
YWNraW5nU3RvcmVCYWNrZW5kOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNr
ZXJlZFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmVCYWNrZW5k
OjpwYWludENoZWNrZXJQYXR0ZXJuKToKKwogMjAxMS0xMS0wMSAgTGV2aSBXZWludHJhdWIgIDxs
ZXZpd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4IHVzZXMgb2YgTGF5b3V0VW5pdCBpbiBG
cmFtZS0sIFNjcm9sbC0sIGFuZCBSZW5kZXJWaWV3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Pd25QdHJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Pd25QdHJDYWlyby5jcHAKaW5kZXggMTU5NGU3Yi4u
NGRhZGVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vT3duUHRyQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL093blB0ckNhaXJvLmNwcApAQCAtNDksNCArNDksMTYgQEAgdGVtcGxhdGUgPD4gdm9p
ZCBkZWxldGVPd25lZFB0cjxjYWlyb19wYXRoX3Q+KGNhaXJvX3BhdGhfdCogcHRyKQogICAgICAg
ICBjYWlyb19wYXRoX2Rlc3Ryb3kocHRyKTsKIH0KIAordGVtcGxhdGUgPD4gdm9pZCBkZWxldGVP
d25lZFB0cjxjYWlyb19yZWdpb25fdD4oY2Fpcm9fcmVnaW9uX3QqIHB0cikKK3sKKyAgICBpZiAo
cHRyKQorICAgICAgICBjYWlyb19yZWdpb25fZGVzdHJveShwdHIpOworfQorCit0ZW1wbGF0ZSA8
PiB2b2lkIGRlbGV0ZU93bmVkUHRyPGNhaXJvX3JlY3RhbmdsZV90PihjYWlyb19yZWN0YW5nbGVf
dCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGZyZWUocHRyKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Pd25QdHJDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vT3duUHRyQ2Fpcm8uaAppbmRleCBiZDUxN2IyLi44Y2U0YTQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Pd25QdHJDYWlyby5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL093blB0ckNhaXJvLmgKQEAg
LTI5LDYgKzI5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgX0ZjRm9udFNldCBGY0ZvbnRTZXQ7CiAjZW5k
aWYKIAogdHlwZWRlZiBzdHJ1Y3QgY2Fpcm9fcGF0aCBjYWlyb19wYXRoX3Q7Cit0eXBlZGVmIHN0
cnVjdCBfY2Fpcm9fcmVnaW9uIGNhaXJvX3JlZ2lvbl90OwordHlwZWRlZiBzdHJ1Y3QgX2NhaXJv
X3JlY3RhbmdsZSBjYWlyb19yZWN0YW5nbGVfdDsKIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTM4
LDYgKzQwLDggQEAgdGVtcGxhdGUgPD4gdm9pZCBkZWxldGVPd25lZFB0cjxGY0ZvbnRTZXQ+KEZj
Rm9udFNldCopOwogI2VuZGlmCiAKIHRlbXBsYXRlIDw+IHZvaWQgZGVsZXRlT3duZWRQdHI8Y2Fp
cm9fcGF0aF90PihjYWlyb19wYXRoX3QqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVsZXRlT3duZWRQ
dHI8Y2Fpcm9fcmVnaW9uX3Q+KGNhaXJvX3JlZ2lvbl90Kik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRl
bGV0ZU93bmVkUHRyPGNhaXJvX3JlY3RhbmdsZV90PihjYWlyb19yZWN0YW5nbGVfdCopOwogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vVGlsZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1RpbGVDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOGM3N2JiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1RpbGVDYWlyby5jcHAKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgY29kZWF1cm9yYS5vcmcgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAq
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUaWxlQ2Fpcm8uaCIKKworI2lmIFVTRShUSUxFRF9CQUNL
SU5HX1NUT1JFKSAmJiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWly
by5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNr
aW5nU3RvcmVDbGllbnQuaCIKKyNpbmNsdWRlIDxPd25QdHJDYWlyby5oPgorI2luY2x1ZGUgPFJl
ZlB0ckNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVGlsZUNhaXJvOjpUaWxlQ2Fp
cm8oVGlsZWRCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgY29uc3QgQ29vcmRpbmF0ZSYgdGls
ZUNvb3JkaW5hdGUpCisgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgLCBt
X2Nvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpCisgICAgLCBtX3JlY3QobV9iYWNraW5nU3RvcmUt
PnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSkpCit7CisgICAgY2Fpcm9fcmVj
dGFuZ2xlX2ludF90IHJlY3QgPSBtX3JlY3Q7CisgICAgbV9kaXJ0eVJlZ2lvbiA9IGFkb3B0UHRy
KGNhaXJvX3JlZ2lvbl9jcmVhdGVfcmVjdGFuZ2xlKCZyZWN0KSk7Cit9CisKK1RpbGVDYWlybzo6
flRpbGVDYWlybygpCit7Cit9CisKK2Jvb2wgVGlsZUNhaXJvOjppc0RpcnR5KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gIWNhaXJvX3JlZ2lvbl9pc19lbXB0eShtX2RpcnR5UmVnaW9uLmdldCgpKTsK
K30KKworYm9vbCBUaWxlQ2Fpcm86OmlzUmVhZHlUb1BhaW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9idWZmZXI7Cit9CisKK3ZvaWQgVGlsZUNhaXJvOjppbnZhbGlkYXRlKGNvbnN0IEludFJl
Y3QmIGRpcnR5UmVjdCkKK3sKKyAgICBJbnRSZWN0IHRpbGVEaXJ0eVJlY3QgPSBpbnRlcnNlY3Rp
b24oZGlydHlSZWN0LCBtX3JlY3QpOworICAgIGlmICh0aWxlRGlydHlSZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2Fpcm9fcmVjdGFuZ2xlX2ludF90IHJlY3QgPSB0aWxl
RGlydHlSZWN0OworICAgIGNhaXJvX3JlZ2lvbl91bmlvbl9yZWN0YW5nbGUobV9kaXJ0eVJlZ2lv
bi5nZXQoKSwgJnJlY3QpOworfQorCitzdGF0aWMgdm9pZCByZWdpb25Ub1JlY3RzKGNhaXJvX3Jl
Z2lvbl90KiByZWdpb24sIFZlY3RvcjxJbnRSZWN0PiYgdXBkYXRlUmVjdHMpCit7CisgICAgaW50
IHJlY3RDb3VudCA9IGNhaXJvX3JlZ2lvbl9udW1fcmVjdGFuZ2xlcyhyZWdpb24pOworICAgIE93
blB0cjxjYWlyb19yZWN0YW5nbGVfaW50X3Q+IHJlY3RzID0gYWRvcHRQdHIobmV3IGNhaXJvX3Jl
Y3RhbmdsZV9pbnRfdFtyZWN0Q291bnRdKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3RD
b3VudDsgaSsrKSB7CisgICAgICAgIGNhaXJvX3JlZ2lvbl9nZXRfcmVjdGFuZ2xlKHJlZ2lvbiwg
aSwgcmVjdHMuZ2V0KCkgKyBpKTsKKyAgICAgICAgdXBkYXRlUmVjdHMuYXBwZW5kKEludFJlY3Qo
cmVjdHMuZ2V0KClbaV0pKTsKKyAgICB9Cit9CisKK1ZlY3RvcjxJbnRSZWN0PiBUaWxlQ2Fpcm86
OnVwZGF0ZUJhY2tCdWZmZXIoKQoreworICAgIGlmIChtX2J1ZmZlciAmJiAhaXNEaXJ0eSgpKQor
ICAgICAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7CisKKyAgICBpZiAoIW1fYnVmZmVyKQor
ICAgICAgICBtX2J1ZmZlciA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENB
SVJPX0ZPUk1BVF9BUkdCMzIsIG1fYmFja2luZ1N0b3JlLT50aWxlU2l6ZSgpLndpZHRoKCksIG1f
YmFja2luZ1N0b3JlLT50aWxlU2l6ZSgpLmhlaWdodCgpKSk7CisKKyAgICBWZWN0b3I8SW50UmVj
dD4gdXBkYXRlUmVjdHM7CisgICAgcmVnaW9uVG9SZWN0cyhtX2RpcnR5UmVnaW9uLmdldCgpLCB1
cGRhdGVSZWN0cyk7CisgICAgbV9kaXJ0eVJlZ2lvbi5jbGVhcigpOworICAgIG1fZGlydHlSZWdp
b24gPSBhZG9wdFB0cihjYWlyb19yZWdpb25fY3JlYXRlKCkpOworCisgICAgUmVmUHRyPGNhaXJv
X3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fYnVmZmVyLmdldCgpKSk7CisgICAgR3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQoY3IuZ2V0KCkpOworICAgIGNvbnRleHQudHJhbnNsYXRlKC1t
X3JlY3QueCgpLCAtbV9yZWN0LnkoKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHVwZGF0
ZVJlY3RzLnNpemUoKSA7ICsraSkgeworICAgICAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAgICAg
Y29udGV4dC5jbGlwKEZsb2F0UmVjdCh1cGRhdGVSZWN0c1tpXSkpOworICAgICAgICBjb250ZXh0
LnNjYWxlKEZsb2F0U2l6ZShtX2JhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpLCBtX2JhY2tp
bmdTdG9yZS0+Y29udGVudHNTY2FsZSgpKSk7CisgICAgICAgIG1fYmFja2luZ1N0b3JlLT5jbGll
bnQoKS0+dGlsZWRCYWNraW5nU3RvcmVQYWludCgmY29udGV4dCwgbV9iYWNraW5nU3RvcmUtPm1h
cFRvQ29udGVudHModXBkYXRlUmVjdHNbaV0pKTsKKyAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7
CisgICAgfQorCisgICAgcmV0dXJuIHVwZGF0ZVJlY3RzOworfQorCit2b2lkIFRpbGVDYWlybzo6
c3dhcEJhY2tCdWZmZXJUb0Zyb250KCkKK3sKK30KKwordm9pZCBUaWxlQ2Fpcm86OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAo
IW1fYnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IHRhcmdldCA9IGludGVy
c2VjdGlvbihyZWN0LCBtX3JlY3QpOworICAgIEludFJlY3Qgc291cmNlKHRhcmdldC54KCkgLSBt
X3JlY3QueCgpLCB0YXJnZXQueSgpIC0gbV9yZWN0LnkoKSwgdGFyZ2V0LndpZHRoKCksIHRhcmdl
dC5oZWlnaHQoKSk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyogcGxhdGZvcm1Db250ZXh0
ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9y
bUNvbnRleHQtPmNyKCk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBtX2J1ZmZl
ci5nZXQoKSwgdGFyZ2V0LngoKSAtIHNvdXJjZS54KCksIHRhcmdldC55KCkgLSBzb3VyY2UueSgp
KTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHRhcmdldC54KCksIHRhcmdldC55KCksIHRhcmdl
dC53aWR0aCgpLCB0YXJnZXQuaGVpZ2h0KCkpOworICAgIGNhaXJvX2ZpbGwoY3IpOworfQorCit2
b2lkIFRpbGVDYWlybzo6cmVzaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpCit7
CisgICAgSW50UmVjdCBvbGRSZWN0ID0gbV9yZWN0OworICAgIG1fcmVjdCA9IEludFJlY3QobV9y
ZWN0LmxvY2F0aW9uKCksIG5ld1NpemUpOworICAgIGlmIChtX3JlY3QubWF4WCgpID4gb2xkUmVj
dC5tYXhYKCkpCisgICAgICAgIGludmFsaWRhdGUoSW50UmVjdChvbGRSZWN0Lm1heFgoKSwgb2xk
UmVjdC55KCksIG1fcmVjdC5tYXhYKCkgLSBvbGRSZWN0Lm1heFgoKSwgbV9yZWN0LmhlaWdodCgp
KSk7CisgICAgaWYgKG1fcmVjdC5tYXhZKCkgPiBvbGRSZWN0Lm1heFkoKSkKKyAgICAgICAgaW52
YWxpZGF0ZShJbnRSZWN0KG9sZFJlY3QueCgpLCBvbGRSZWN0Lm1heFkoKSwgbV9yZWN0LndpZHRo
KCksIG1fcmVjdC5tYXhZKCkgLSBvbGRSZWN0Lm1heFkoKSkpOworfQorCit9CisKKyNlbmRpZgor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UaWxl
Q2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RpbGVDYWly
by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwODQ2NmYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UaWxlQ2Fp
cm8uaApAQCAtMCwwICsxLDY2IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBUaWxlQ2Fpcm9f
aAorI2RlZmluZSBUaWxlQ2Fpcm9faAorCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpICYm
IFVTRShDQUlSTykKKworI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5o
IgorI2luY2x1ZGUgIlRpbGUuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBUaWxlZEJhY2tpbmdTdG9yZTsKKworY2xhc3MgVGlsZUNhaXJvIDog
cHVibGljIFRpbGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRpbGU+IGNyZWF0
ZShUaWxlZEJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBjb25zdCBDb29yZGluYXRlJiB0aWxl
Q29vcmRpbmF0ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFRpbGVDYWlybyhiYWNraW5nU3RvcmUs
IHRpbGVDb29yZGluYXRlKSk7IH0KKyAgICB2aXJ0dWFsIH5UaWxlQ2Fpcm8oKTsKKworICAgIHZp
cnR1YWwgYm9vbCBpc0RpcnR5KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUo
Y29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgVmVjdG9yPEludFJlY3Q+IHVwZGF0ZUJhY2tC
dWZmZXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3dhcEJhY2tCdWZmZXJUb0Zyb250KCk7CisgICAg
dmlydHVhbCBib29sIGlzUmVhZHlUb1BhaW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBh
aW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgY29u
c3QgVGlsZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRp
bmF0ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgSW50UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdDsgfQorICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYpOworCitwcm90ZWN0ZWQ6CisgICAgVGlsZUNhaXJvKFRpbGVkQmFja2luZ1N0b3JlKiwgY29u
c3QgQ29vcmRpbmF0ZSYpOworCisgICAgVGlsZWRCYWNraW5nU3RvcmUqIG1fYmFja2luZ1N0b3Jl
OworICAgIENvb3JkaW5hdGUgbV9jb29yZGluYXRlOworICAgIEludFJlY3QgbV9yZWN0OworCisg
ICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9idWZmZXI7CisgICAgT3duUHRyPGNhaXJvX3Jl
Z2lvbl90PiBtX2RpcnR5UmVnaW9uOworfTsKKworfQorI2VuZGlmCisjZW5kaWYKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGlsZWRCYWNraW5n
U3RvcmVCYWNrZW5kQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vVGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmU1YWZiZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmRDYWly
by5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBjb2RlYXVy
b3JhLm9yZyBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIENvbGxh
Ym9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
YGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRp
bGVkQmFja2luZ1N0b3JlQmFja2VuZC5oIgorCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUp
ICYmIFVTRShDQUlSTykKKyNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiVGlsZUNhaXJvLmgiCisjaW5jbHVkZSA8
Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFRpbGU+IFRpbGVk
QmFja2luZ1N0b3JlQmFja2VuZDo6Y3JlYXRlVGlsZShUaWxlZEJhY2tpbmdTdG9yZSogYmFja2lu
Z1N0b3JlLCBjb25zdCBUaWxlOjpDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKK3sKKyAgICBy
ZXR1cm4gVGlsZUNhaXJvOjpjcmVhdGUoYmFja2luZ1N0b3JlLCB0aWxlQ29vcmRpbmF0ZSk7Cit9
CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGVja2VyU2l6ZSA9IDE2Oworc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGNoZWNrZXJDb2xvcjEgPSAweGZmNTU1NTU1Oworc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGNoZWNrZXJDb2xvcjIgPSAweGZmYWFhYWFhOworCitzdGF0aWMgY2Fpcm9fc3VyZmFjZV90
KiBjaGVja2VyZWRTdXJmYWNlKCkKK3sKKyAgICBzdGF0aWMgY2Fpcm9fc3VyZmFjZV90KiBzdXJm
YWNlID0gMDsKKyAgICBpZiAoc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIHN1cmZhY2U7CisKKyAg
ICBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0Iz
MiwgY2hlY2tlclNpemUsIGNoZWNrZXJTaXplKTsKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBh
ZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOworCisgICAgZm9yICh1bnNpZ25lZCB5ID0g
MDsgeSA8IGNoZWNrZXJTaXplOyB5ICs9IGNoZWNrZXJTaXplIC8gMikgeworICAgICAgICBib29s
IGFsdGVybmF0ZSA9IHkgJSBjaGVja2VyU2l6ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB4ID0g
MDsgeCA8IGNoZWNrZXJTaXplOyB4ICs9IGNoZWNrZXJTaXplIC8gMikgeworICAgICAgICAgICAg
aWYgKGFsdGVybmF0ZSkKKyAgICAgICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNy
LmdldCgpLCBjaGVja2VyQ29sb3IxKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLmdldCgpLCBjaGVja2VyQ29sb3IyKTsKKyAgICAg
ICAgICAgIGNhaXJvX3JlY3RhbmdsZShjci5nZXQoKSwgeCwgeSwgY2hlY2tlclNpemUgLyAyLCBj
aGVja2VyU2l6ZSAvIDIpOworICAgICAgICAgICAgY2Fpcm9fZmlsbChjci5nZXQoKSk7CisgICAg
ICAgICAgICBhbHRlcm5hdGUgPSAhYWx0ZXJuYXRlOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHN1cmZhY2U7Cit9CisKK3ZvaWQgVGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kOjpwYWlu
dENoZWNrZXJQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiB0YXJnZXQpCit7CisgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCA9
IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1D
b250ZXh0LT5jcigpOworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjciwgY2hlY2tlcmVk
U3VyZmFjZSgpLCAwLCAwKTsKKyAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQoY2Fpcm9fZ2V0
X3NvdXJjZShjciksIENBSVJPX0VYVEVORF9SRVBFQVQpOworICAgIGNhaXJvX3JlY3RhbmdsZShj
ciwgdGFyZ2V0LngoKSwgdGFyZ2V0LnkoKSwgdGFyZ2V0LndpZHRoKCksIHRhcmdldC5oZWlnaHQo
KSk7CisgICAgY2Fpcm9fZmlsbChjcik7Cit9CisKK30KKworI2VuZGlmCisK
</data>
<flag name="review"
          id="111602"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113630</attachid>
            <date>2011-11-04 00:51:55 -0700</date>
            <delta_ts>2011-11-10 05:27:07 -0800</delta_ts>
            <desc>Updated</desc>
            <filename>cairo.patch</filename>
            <type>text/plain</type>
            <size>14955</size>
            <attacher name="Tomasz Morawski">t.morawski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0Y2U4NTRlLi5iYjRmNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTEtMTEtMDMgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QGNvZGVhdXJvcmEu
b3JnPiwgWmFoZWVyIEFobWFkICA8emFoaW1hZEBjb2RlYXVyb3JhLm9yZz4sIEpvb25lIEh1ciAg
PGpvb25lLmh1ckBjb2xsYWJvcmEuY28udWs+LCBUb21hc3ogTW9yYXdza2kgIDx0Lm1vcmF3c2tp
QHNhbXN1bmcuY29tPgorCisgICAgICAgIEFkZGVkIFRpbGVDYWlybyBhbmQgVGlsZWRCYWNraW5n
U3RvcmVCYWNrZW5kQ2Fpcm8gZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcxMzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkZWQgVGlsZUNhaXJvIGFuZCBUaWxlZEJhY2tpbmdTdG9yZUJhY2tl
bmQgZmlsZXMgbmVlZGVkIGJ5IFRpbGVkIEJhY2tpbmcgU3RvcmUgaW1wbGVtZW50YXRpb24gdGhh
dCB1c2VzIGNhaXJvCisgICAgICAgIGxpYnJhcnkgZWcuIEVGTCBhbmQgR3RrIFdlYktpdCBwb3J0
LgorICAgICAgICBUaGlzIHBhdGNoIGNvbnRhaW5zIHNvbWUgcGFydHMgb2YgcmViYXNlZCBhbmQg
dXBkYXRlZCBjb2RlIGZyb20gNDU0MjMgYnVnLiBPcmlnaW5hbHMgYXV0aG9ycyBvZiB0aGUgY29k
ZSBhcmU6CisgICAgICAgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QGNvZGVhdXJvcmEu
b3JnPiwgWmFoZWVyIEFobWFkICA8emFobWFkQGNvZGVhdXJvcmEub3JnPiwKKyAgICAgICAgSm9v
bmUgSHVyICA8am9vbmUuaHVyQGNvbGxhYm9yYS5jby51az4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmNwcDoKKyAgICAgICAgKFdURjo6cmVmSWZOb3RO
dWxsKToKKyAgICAgICAgKFdURjo6ZGVyZWZJZk5vdE51bGwpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vVGlsZUNhaXJvLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2Fp
cm86OlRpbGVDYWlybyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2Fpcm86On5UaWxlQ2Fpcm8p
OgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhaXJvOjppc0RpcnR5KToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVDYWlybzo6aXNSZWFkeVRvUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNh
aXJvOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWlybzo6dXBkYXRlQmFj
a0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2Fpcm86OnN3YXBCYWNrQnVmZmVyVG9G
cm9udCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2Fpcm86OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVDYWlybzo6cmVzaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9UaWxlQ2Fpcm8uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2Fpcm86OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2Fpcm86OmNvb3JkaW5hdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZUNhaXJvOjpyZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9UaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmRDYWlyby5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kOjpjcmVhdGVUaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNoZWNrZXJlZFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRC
YWNraW5nU3RvcmVCYWNrZW5kOjpwYWludENoZWNrZXJQYXR0ZXJuKToKKwogMjAxMS0xMS0wMyAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OIChy
OTkwNzYpOiBQYXN0aW5nIGludG8gcGFzc3dvcmQgZmllbGRzIGlzIGJyb2tlbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uY3Bw
CmluZGV4IDkwYmMzYjEuLmQxMTYyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5jcHAKQEAgLTg4LDYgKzg4LDE4IEBA
IHRlbXBsYXRlPD4gdm9pZCBkZXJlZklmTm90TnVsbChjYWlyb19wYXR0ZXJuX3QqIHB0cikKICAg
ICAgICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KHB0cik7CiB9CiAKK3RlbXBsYXRlPD4gdm9pZCBy
ZWZJZk5vdE51bGwoY2Fpcm9fcmVnaW9uX3QqIHB0cikKK3sKKyAgICBpZiAoTElLRUxZKHB0ciAh
PSAwKSkKKyAgICAgICAgY2Fpcm9fcmVnaW9uX3JlZmVyZW5jZShwdHIpOworfQorCit0ZW1wbGF0
ZTw+IHZvaWQgZGVyZWZJZk5vdE51bGwoY2Fpcm9fcmVnaW9uX3QqIHB0cikKK3sKKyAgICBpZiAo
TElLRUxZKHB0ciAhPSAwKSkKKyAgICAgICAgY2Fpcm9fcmVnaW9uX2Rlc3Ryb3kocHRyKTsKK30K
KwogI2lmIFVTRShGUkVFVFlQRSkKIHRlbXBsYXRlPD4gdm9pZCByZWZJZk5vdE51bGwoRmNQYXR0
ZXJuKiBwdHIpCiB7CkBAIC0xMDAsNyArMTEyLDUgQEAgdGVtcGxhdGU8PiB2b2lkIGRlcmVmSWZO
b3ROdWxsKEZjUGF0dGVybiogcHRyKQogICAgIGlmIChMSUtFTFkocHRyICE9IDApKQogICAgICAg
ICBGY1BhdHRlcm5EZXN0cm95KHB0cik7CiB9Ci0KICNlbmRpZgotCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uaAppbmRleCA1
NDBmOWRjLi42YmM1YjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9SZWZQdHJDYWlyby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmgKQEAgLTI3LDYgKzI3LDcgQEAgdHlwZWRlZiBzdHJ1
Y3QgX2NhaXJvX3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90OwogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJv
X2ZvbnRfZmFjZSBjYWlyb19mb250X2ZhY2VfdDsKIHR5cGVkZWYgc3RydWN0IF9jYWlyb19zY2Fs
ZWRfZm9udCBjYWlyb19zY2FsZWRfZm9udF90OwogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3BhdHRl
cm4gY2Fpcm9fcGF0dGVybl90OwordHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3JlZ2lvbiBjYWlyb19y
ZWdpb25fdDsKIAogI2lmIFVTRShGUkVFVFlQRSkKIHR5cGVkZWYgc3RydWN0IF9GY1BhdHRlcm4g
RmNQYXR0ZXJuOwpAQCAtNDksNiArNTAsOSBAQCB0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZJZk5vdE51
bGwoY2Fpcm9fc2NhbGVkX2ZvbnRfdCogcHRyKTsKIHRlbXBsYXRlPD4gdm9pZCByZWZJZk5vdE51
bGwoY2Fpcm9fcGF0dGVybl90Kik7CiB0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZJZk5vdE51bGwoY2Fp
cm9fcGF0dGVybl90Kik7CiAKK3RlbXBsYXRlPD4gdm9pZCByZWZJZk5vdE51bGwoY2Fpcm9fcmVn
aW9uX3QqKTsKK3RlbXBsYXRlPD4gdm9pZCBkZXJlZklmTm90TnVsbChjYWlyb19yZWdpb25fdCop
OworCiAjaWYgVVNFKEZSRUVUWVBFKQogdGVtcGxhdGU8PiB2b2lkIHJlZklmTm90TnVsbChGY1Bh
dHRlcm4qIHB0cik7CiB0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZJZk5vdE51bGwoRmNQYXR0ZXJuKiBw
dHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
VGlsZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Rp
bGVDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUzZjMwZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1RpbGVDYWlyby5jcHAKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgY29kZWF1cm9yYS5vcmcgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAq
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUaWxlQ2Fpcm8uaCIKKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKSAmJiBV
U0UoQ0FJUk8pCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUg
IlRpbGVkQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQu
aCIKKyNpbmNsdWRlIDxSZWZQdHJDYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Rp
bGVDYWlybzo6VGlsZUNhaXJvKFRpbGVkQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGNvbnN0
IENvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKQorICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2lu
Z1N0b3JlKQorICAgICwgbV9jb29yZGluYXRlKHRpbGVDb29yZGluYXRlKQorICAgICwgbV9yZWN0
KG1fYmFja2luZ1N0b3JlLT50aWxlUmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpKQor
eworICAgIGNhaXJvX3JlY3RhbmdsZV9pbnRfdCByZWN0ID0gbV9yZWN0OworICAgIG1fZGlydHlS
ZWdpb24gPSBhZG9wdFJlZihjYWlyb19yZWdpb25fY3JlYXRlX3JlY3RhbmdsZSgmcmVjdCkpOwor
fQorCitUaWxlQ2Fpcm86On5UaWxlQ2Fpcm8oKQoreworfQorCitib29sIFRpbGVDYWlybzo6aXNE
aXJ0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFjYWlyb19yZWdpb25faXNfZW1wdHkobV9kaXJ0
eVJlZ2lvbi5nZXQoKSk7Cit9CisKK2Jvb2wgVGlsZUNhaXJvOjppc1JlYWR5VG9QYWludCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fYnVmZmVyOworfQorCit2b2lkIFRpbGVDYWlybzo6aW52YWxp
ZGF0ZShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgSW50UmVjdCB0aWxlRGlydHlS
ZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgbV9yZWN0KTsKKyAgICBpZiAodGlsZURpcnR5
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJvX3JlY3RhbmdsZV9p
bnRfdCByZWN0ID0gdGlsZURpcnR5UmVjdDsKKyAgICBjYWlyb19yZWdpb25fdW5pb25fcmVjdGFu
Z2xlKG1fZGlydHlSZWdpb24uZ2V0KCksICZyZWN0KTsKK30KKworVmVjdG9yPEludFJlY3Q+IFRp
bGVDYWlybzo6dXBkYXRlQmFja0J1ZmZlcigpCit7CisgICAgaWYgKG1fYnVmZmVyICYmICFpc0Rp
cnR5KCkpCisgICAgICAgIHJldHVybiBWZWN0b3I8SW50UmVjdD4oKTsKKworICAgIGlmICghbV9i
dWZmZXIpCisgICAgICAgIG1fYnVmZmVyID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9j
cmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPnRpbGVTaXplKCkud2lk
dGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2JhY2tpbmdTdG9yZS0+dGlsZVNpemUoKS5oZWlnaHQoKSkpOworCisgICAgUmVmUHRy
PGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fYnVmZmVyLmdldCgpKSk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoY3IuZ2V0KCkpOworICAgIGNvbnRleHQudHJhbnNs
YXRlKC1tX3JlY3QueCgpLCAtbV9yZWN0LnkoKSk7CisKKyAgICBWZWN0b3I8SW50UmVjdD4gdXBk
YXRlUmVjdHM7CisgICAgY2Fpcm9fcmVjdGFuZ2xlX2ludF90IHJlY3Q7CisKKyAgICBpbnQgcmVj
dENvdW50ID0gY2Fpcm9fcmVnaW9uX251bV9yZWN0YW5nbGVzKG1fZGlydHlSZWdpb24uZ2V0KCkp
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdENvdW50OyArK2kpIHsKKyAgICAgICAgY2Fp
cm9fcmVnaW9uX2dldF9yZWN0YW5nbGUobV9kaXJ0eVJlZ2lvbi5nZXQoKSwgaSwgJnJlY3QpOwor
ICAgICAgICB1cGRhdGVSZWN0cy5hcHBlbmQoSW50UmVjdChyZWN0KSk7CisKKyAgICAgICAgY29u
dGV4dC5zYXZlKCk7CisgICAgICAgIGNvbnRleHQuY2xpcChGbG9hdFJlY3QocmVjdCkpOworICAg
ICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZShtX2JhY2tpbmdTdG9yZS0+Y29udGVudHNTY2Fs
ZSgpLCBtX2JhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpKSk7CisgICAgICAgIG1fYmFja2lu
Z1N0b3JlLT5jbGllbnQoKS0+dGlsZWRCYWNraW5nU3RvcmVQYWludCgmY29udGV4dCwgbV9iYWNr
aW5nU3RvcmUtPm1hcFRvQ29udGVudHMocmVjdCkpOworICAgICAgICBjb250ZXh0LnJlc3RvcmUo
KTsKKyAgICB9CisKKyAgICBtX2RpcnR5UmVnaW9uLmNsZWFyKCk7CisgICAgbV9kaXJ0eVJlZ2lv
biA9IGFkb3B0UmVmKGNhaXJvX3JlZ2lvbl9jcmVhdGUoKSk7CisKKyAgICByZXR1cm4gdXBkYXRl
UmVjdHM7Cit9CisKK3ZvaWQgVGlsZUNhaXJvOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQoKQorewor
fQorCit2b2lkIFRpbGVDYWlybzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIEludFJlY3QgdGFyZ2V0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIG1fcmVjdCk7CisKKyAg
ICBjYWlyb190KiBjciA9ICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBj
YWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIG1fYnVmZmVyLmdldCgpLCBtX3JlY3QueCgpLCBt
X3JlY3QueSgpKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHRhcmdldC54KCksIHRhcmdldC55
KCksIHRhcmdldC53aWR0aCgpLCB0YXJnZXQuaGVpZ2h0KCkpOworICAgIGNhaXJvX2ZpbGwoY3Ip
OworfQorCit2b2lkIFRpbGVDYWlybzo6cmVzaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5l
d1NpemUpCit7CisgICAgSW50UmVjdCBvbGRSZWN0ID0gbV9yZWN0OworICAgIG1fcmVjdCA9IElu
dFJlY3QobV9yZWN0LmxvY2F0aW9uKCksIG5ld1NpemUpOworICAgIGlmIChtX3JlY3QubWF4WCgp
ID4gb2xkUmVjdC5tYXhYKCkpCisgICAgICAgIGludmFsaWRhdGUoSW50UmVjdChvbGRSZWN0Lm1h
eFgoKSwgb2xkUmVjdC55KCksIG1fcmVjdC5tYXhYKCkgLSBvbGRSZWN0Lm1heFgoKSwgbV9yZWN0
LmhlaWdodCgpKSk7CisgICAgaWYgKG1fcmVjdC5tYXhZKCkgPiBvbGRSZWN0Lm1heFkoKSkKKyAg
ICAgICAgaW52YWxpZGF0ZShJbnRSZWN0KG9sZFJlY3QueCgpLCBvbGRSZWN0Lm1heFkoKSwgbV9y
ZWN0LndpZHRoKCksIG1fcmVjdC5tYXhZKCkgLSBvbGRSZWN0Lm1heFkoKSkpOworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vVGlsZUNhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9U
aWxlQ2Fpcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDVmMTdjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
VGlsZUNhaXJvLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ft
c3VuZyBFbGVjdHJvbmljcworCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyLjEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVGls
ZUNhaXJvX2gKKyNkZWZpbmUgVGlsZUNhaXJvX2gKKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NU
T1JFKSAmJiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIklu
dFJlY3QuaCIKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2luY2x1ZGUgIlRpbGUuaCIKKyNp
bmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUaWxlZEJh
Y2tpbmdTdG9yZTsKKworY2xhc3MgVGlsZUNhaXJvIDogcHVibGljIFRpbGUgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRpbGU+IGNyZWF0ZShUaWxlZEJhY2tpbmdTdG9yZSogYmFj
a2luZ1N0b3JlLCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IFRpbGVDYWlybyhiYWNraW5nU3RvcmUsIHRpbGVDb29yZGluYXRlKSk7IH0KKyAg
ICB2aXJ0dWFsIH5UaWxlQ2Fpcm8oKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5KCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgVmVjdG9yPEludFJlY3Q+IHVwZGF0ZUJhY2tCdWZmZXIoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3dhcEJhY2tCdWZmZXJUb0Zyb250KCk7CisgICAgdmlydHVhbCBib29sIGlzUmVhZHlUb1Bh
aW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgY29uc3QgVGlsZTo6Q29vcmRpbmF0ZSYgY29v
cmRpbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZTsgfQorICAgIHZpcnR1YWwgY29u
c3QgSW50UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHZpcnR1YWwg
dm9pZCByZXNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworCitwcm90ZWN0ZWQ6CisgICAg
VGlsZUNhaXJvKFRpbGVkQmFja2luZ1N0b3JlKiwgY29uc3QgQ29vcmRpbmF0ZSYpOworCisgICAg
VGlsZWRCYWNraW5nU3RvcmUqIG1fYmFja2luZ1N0b3JlOworICAgIENvb3JkaW5hdGUgbV9jb29y
ZGluYXRlOworICAgIEludFJlY3QgbV9yZWN0OworCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gbV9idWZmZXI7CisgICAgUmVmUHRyPGNhaXJvX3JlZ2lvbl90PiBtX2RpcnR5UmVnaW9uOwor
fTsKKworfQorI2VuZGlmCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGlsZWRCYWNraW5nU3RvcmVC
YWNrZW5kQ2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YWZi
ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9UaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmRDYWlyby5jcHAKQEAgLTAsMCArMSw4NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBjb2RlYXVyb3JhLm9yZyBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVT
UyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwK
KyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlQmFja2VuZC5o
IgorCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpICYmIFVTRShDQUlSTykKKyNpbmNsdWRl
ICJDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisj
aW5jbHVkZSAiVGlsZUNhaXJvLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzUmVmUHRyPFRpbGU+IFRpbGVkQmFja2luZ1N0b3JlQmFja2VuZDo6Y3Jl
YXRlVGlsZShUaWxlZEJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBjb25zdCBUaWxlOjpDb29y
ZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKK3sKKyAgICByZXR1cm4gVGlsZUNhaXJvOjpjcmVhdGUo
YmFja2luZ1N0b3JlLCB0aWxlQ29vcmRpbmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCBjaGVja2VyU2l6ZSA9IDE2Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoZWNrZXJDb2xvcjEg
PSAweGZmNTU1NTU1Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoZWNrZXJDb2xvcjIgPSAweGZm
YWFhYWFhOworCitzdGF0aWMgY2Fpcm9fc3VyZmFjZV90KiBjaGVja2VyZWRTdXJmYWNlKCkKK3sK
KyAgICBzdGF0aWMgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gMDsKKyAgICBpZiAoc3VyZmFj
ZSkKKyAgICAgICAgcmV0dXJuIHN1cmZhY2U7CisKKyAgICBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwgY2hlY2tlclNpemUsIGNoZWNrZXJT
aXplKTsKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3Vy
ZmFjZSkpOworCisgICAgZm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8IGNoZWNrZXJTaXplOyB5ICs9
IGNoZWNrZXJTaXplIC8gMikgeworICAgICAgICBib29sIGFsdGVybmF0ZSA9IHkgJSBjaGVja2Vy
U2l6ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGNoZWNrZXJTaXplOyB4ICs9
IGNoZWNrZXJTaXplIC8gMikgeworICAgICAgICAgICAgaWYgKGFsdGVybmF0ZSkKKyAgICAgICAg
ICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLmdldCgpLCBjaGVja2VyQ29sb3IxKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9y
KGNyLmdldCgpLCBjaGVja2VyQ29sb3IyKTsKKyAgICAgICAgICAgIGNhaXJvX3JlY3RhbmdsZShj
ci5nZXQoKSwgeCwgeSwgY2hlY2tlclNpemUgLyAyLCBjaGVja2VyU2l6ZSAvIDIpOworICAgICAg
ICAgICAgY2Fpcm9fZmlsbChjci5nZXQoKSk7CisgICAgICAgICAgICBhbHRlcm5hdGUgPSAhYWx0
ZXJuYXRlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN1cmZhY2U7Cit9CisKK3Zv
aWQgVGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kOjpwYWludENoZWNrZXJQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQpCit7CisgICAgUGxhdGZv
cm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpOworICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0LT5jcigpOworICAgIGNhaXJv
X3NldF9zb3VyY2Vfc3VyZmFjZShjciwgY2hlY2tlcmVkU3VyZmFjZSgpLCAwLCAwKTsKKyAgICBj
YWlyb19wYXR0ZXJuX3NldF9leHRlbmQoY2Fpcm9fZ2V0X3NvdXJjZShjciksIENBSVJPX0VYVEVO
RF9SRVBFQVQpOworICAgIGNhaXJvX3JlY3RhbmdsZShjciwgdGFyZ2V0LngoKSwgdGFyZ2V0Lnko
KSwgdGFyZ2V0LndpZHRoKCksIHRhcmdldC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fZmlsbChjcik7
Cit9CisKK30KKworI2VuZGlmCisK
</data>
<flag name="review"
          id="112053"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114477</attachid>
            <date>2011-11-10 05:27:07 -0800</date>
            <delta_ts>2011-11-11 14:18:44 -0800</delta_ts>
            <desc>Updated according to suggestions </desc>
            <filename>tileCairo.patch</filename>
            <type>text/plain</type>
            <size>16071</size>
            <attacher name="Tomasz Morawski">t.morawski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmMTJiOGNhLi4yZTdhOTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMg
QEAKKzIwMTEtMTEtMTAgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QGNvZGVhdXJvcmEu
b3JnPiwgWmFoZWVyIEFobWFkICA8emFoaW1hZEBjb2RlYXVyb3JhLm9yZz4sIEpvb25lIEh1ciAg
PGpvb25lLmh1ckBjb2xsYWJvcmEuY28udWs+LCBUb21hc3ogTW9yYXdza2kgIDx0Lm1vcmF3c2tp
QHNhbXN1bmcuY29tPgorCisgICAgICAgIEFkZGVkIFRpbGVDYWlybyBhbmQgVGlsZWRCYWNraW5n
U3RvcmVCYWNrZW5kQ2Fpcm8gZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcxMzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkZWQgVGlsZUNhaXJvIGFuZCBUaWxlZEJhY2tpbmdTdG9yZUJhY2tl
bmQgZmlsZXMgbmVlZGVkIGJ5IFRpbGVkIEJhY2tpbmcgU3RvcmUgaW1wbGVtZW50YXRpb24gdGhh
dCB1c2VzIGNhaXJvCisgICAgICAgIGxpYnJhcnkgZWcuIEVGTCBhbmQgR3RrIFdlYktpdCBwb3J0
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggY29udGFpbnMgc29tZSBwYXJ0cyBvZiByZWJhc2VkIGFu
ZCB1cGRhdGVkIGNvZGUgZnJvbSA0NTQyMyBidWcuIE9yaWdpbmFscyBhdXRob3JzIG9mIHRoZSBj
b2RlIGFyZToKKyAgICAgICAgLSBKdWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEBjb2RlYXVy
b3JhLm9yZz4KKyAgICAgICAgLSBaYWhlZXIgQWhtYWQgIDx6YWhtYWRAY29kZWF1cm9yYS5vcmc+
CisgICAgICAgIC0gSm9vbmUgSHVyICA8am9vbmUuaHVyQGNvbGxhYm9yYS5jby51az4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmNwcDogQWRkZWQgc3Vw
cG9ydCBvZiBSZWZQdHIgZm9yIGNhaXJvX3JlZ2lvbiBvYmplY3QuCisgICAgICAgIChXVEY6OnJl
ZklmTm90TnVsbCk6IE5ldyByZWZJZk5vdE51bGwgZnVuY3Rpb24gZm9yIGNhaXJvX3JlZ2lvbiBv
YmplY3QuCisgICAgICAgIChXVEY6OmRlcmVmSWZOb3ROdWxsKTogTmV3IGRlcmVmSWZOb3ROdWxs
IGZ1bmN0aW9uIGZvciBjYWlyb19yZWdpb24gb2JqZWN0LgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmg6IEFkZGVkIHN1cHBvcnQgb2YgUmVmUHRyIGZvciBj
YWlyb19yZWdpb24gb2JqZWN0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Rp
bGVDYWlyby5jcHA6IEFkZGVkIGEgbmV3IGZpbGUuIEltcGxlbWVudGF0aW9uIG9mIFRpbGVDYWly
byBjbGFzcy4KKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWlybzo6VGlsZUNhaXJvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbGVDYWlybzo6flRpbGVDYWlybyk6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlQ2Fpcm86OmlzRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhaXJvOjppc1JlYWR5
VG9QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2Fpcm86OmludmFsaWRhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZUNhaXJvOjp1cGRhdGVCYWNrQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVDYWlybzo6c3dhcEJhY2tCdWZmZXJUb0Zyb250KToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVDYWlybzo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhaXJvOjpyZXNp
emUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RpbGVDYWlyby5oOiBBZGRl
ZCBhIG5ldyBmaWxlLiBJbXBsZW1lbnRhdGlvbiBvZiBUaWxlQ2Fpcm8gY2xhc3MuCisgICAgICAg
IChXZWJDb3JlOjpUaWxlQ2Fpcm86OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2Fp
cm86OmNvb3JkaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhaXJvOjpyZWN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmRD
YWlyby5jcHA6IEFkZGVkIGEgbmV3IGZpbGUuIEltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIFRp
bGVkQmFja2luZ1N0b3JlQmFja2VuZCBtZXRob2RzLgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRC
YWNraW5nU3RvcmVCYWNrZW5kOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNr
ZXJlZFN1cmZhY2UpOiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGNoZWNrZXJlZCBzdXJm
YWNlIChzZWUgYmVsb3cgZnVuY3Rpb24pCisgICAgICAgIChXZWJDb3JlOjpUaWxlZEJhY2tpbmdT
dG9yZUJhY2tlbmQ6OnBhaW50Q2hlY2tlclBhdHRlcm4pOiBGdW5jdGlvbiBpcyB1c2VkIHRvIGRy
YXcgYSBwbGFjZSBob2xkZXIgd2hlbiB0aWxlIG5vCisgICAgICAgIGV4aXN0IG9yIGl0IGlzIG5v
dCByZWFkeSB0byBwYWludCB5ZXQuIFRoZSBjaGVja2VyZWQgc3VyZmFjZSBpcyB1c2VkIGhlcmUu
CisKIDIwMTEtMTEtMTAgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+
CiAKICAgICAgICAgTm90IHJldmlld2VkLiBGaXggYnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5jcHAKaW5kZXggOTBi
YzNiMS4uMGY1NWY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmNwcApAQCAtODgsNiArODgsMTggQEAgdGVtcGxhdGU8
PiB2b2lkIGRlcmVmSWZOb3ROdWxsKGNhaXJvX3BhdHRlcm5fdCogcHRyKQogICAgICAgICBjYWly
b19wYXR0ZXJuX2Rlc3Ryb3kocHRyKTsKIH0KIAordGVtcGxhdGU8PiB2b2lkIHJlZklmTm90TnVs
bChjYWlyb19yZWdpb25fdCogcHRyKQoreworICAgIGlmIChMSUtFTFkocHRyICE9IDApKQorICAg
ICAgICBjYWlyb19yZWdpb25fcmVmZXJlbmNlKHB0cik7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBk
ZXJlZklmTm90TnVsbChjYWlyb19yZWdpb25fdCogcHRyKQoreworICAgIGlmIChMSUtFTFkocHRy
ICE9IDApKQorICAgICAgICBjYWlyb19yZWdpb25fZGVzdHJveShwdHIpOworfQorCiAjaWYgVVNF
KEZSRUVUWVBFKQogdGVtcGxhdGU8PiB2b2lkIHJlZklmTm90TnVsbChGY1BhdHRlcm4qIHB0cikK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Jl
ZlB0ckNhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQ
dHJDYWlyby5oCmluZGV4IDU0MGY5ZGMuLjZiYzViMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uaApAQCAtMjcsNiArMjcs
NyBAQCB0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fc3VyZmFjZSBjYWlyb19zdXJmYWNlX3Q7CiB0eXBl
ZGVmIHN0cnVjdCBfY2Fpcm9fZm9udF9mYWNlIGNhaXJvX2ZvbnRfZmFjZV90OwogdHlwZWRlZiBz
dHJ1Y3QgX2NhaXJvX3NjYWxlZF9mb250IGNhaXJvX3NjYWxlZF9mb250X3Q7CiB0eXBlZGVmIHN0
cnVjdCBfY2Fpcm9fcGF0dGVybiBjYWlyb19wYXR0ZXJuX3Q7Cit0eXBlZGVmIHN0cnVjdCBfY2Fp
cm9fcmVnaW9uIGNhaXJvX3JlZ2lvbl90OwogCiAjaWYgVVNFKEZSRUVUWVBFKQogdHlwZWRlZiBz
dHJ1Y3QgX0ZjUGF0dGVybiBGY1BhdHRlcm47CkBAIC00OSw2ICs1MCw5IEBAIHRlbXBsYXRlPD4g
dm9pZCBkZXJlZklmTm90TnVsbChjYWlyb19zY2FsZWRfZm9udF90KiBwdHIpOwogdGVtcGxhdGU8
PiB2b2lkIHJlZklmTm90TnVsbChjYWlyb19wYXR0ZXJuX3QqKTsKIHRlbXBsYXRlPD4gdm9pZCBk
ZXJlZklmTm90TnVsbChjYWlyb19wYXR0ZXJuX3QqKTsKIAordGVtcGxhdGU8PiB2b2lkIHJlZklm
Tm90TnVsbChjYWlyb19yZWdpb25fdCopOwordGVtcGxhdGU8PiB2b2lkIGRlcmVmSWZOb3ROdWxs
KGNhaXJvX3JlZ2lvbl90Kik7CisKICNpZiBVU0UoRlJFRVRZUEUpCiB0ZW1wbGF0ZTw+IHZvaWQg
cmVmSWZOb3ROdWxsKEZjUGF0dGVybiogcHRyKTsKIHRlbXBsYXRlPD4gdm9pZCBkZXJlZklmTm90
TnVsbChGY1BhdHRlcm4qIHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9UaWxlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vVGlsZUNhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi41ODNlY2QwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vVGlsZUNhaXJvLmNwcApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBjb2RlYXVyb3JhLm9yZyBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExIENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUaWxlQ2Fpcm8uaCIKKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKSAmJiBVU0Uo
Q0FJUk8pCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIlRp
bGVkQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCIK
KyNpbmNsdWRlIDxSZWZQdHJDYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RpbGVD
YWlybzo6VGlsZUNhaXJvKFRpbGVkQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGNvbnN0IENv
b3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKQorICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0
b3JlKQorICAgICwgbV9jb29yZGluYXRlKHRpbGVDb29yZGluYXRlKQorICAgICwgbV9yZWN0KG1f
YmFja2luZ1N0b3JlLT50aWxlUmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpKQorewor
ICAgIGNhaXJvX3JlY3RhbmdsZV9pbnRfdCByZWN0ID0gbV9yZWN0OworICAgIG1fZGlydHlSZWdp
b24gPSBhZG9wdFJlZihjYWlyb19yZWdpb25fY3JlYXRlX3JlY3RhbmdsZSgmcmVjdCkpOworfQor
CitUaWxlQ2Fpcm86On5UaWxlQ2Fpcm8oKQoreworfQorCitib29sIFRpbGVDYWlybzo6aXNEaXJ0
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFjYWlyb19yZWdpb25faXNfZW1wdHkobV9kaXJ0eVJl
Z2lvbi5nZXQoKSk7Cit9CisKK2Jvb2wgVGlsZUNhaXJvOjppc1JlYWR5VG9QYWludCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fYnVmZmVyOworfQorCit2b2lkIFRpbGVDYWlybzo6aW52YWxpZGF0
ZShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgSW50UmVjdCB0aWxlRGlydHlSZWN0
ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgbV9yZWN0KTsKKyAgICBpZiAodGlsZURpcnR5UmVj
dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJvX3JlY3RhbmdsZV9pbnRf
dCByZWN0ID0gdGlsZURpcnR5UmVjdDsKKyAgICBjYWlyb19yZWdpb25fdW5pb25fcmVjdGFuZ2xl
KG1fZGlydHlSZWdpb24uZ2V0KCksICZyZWN0KTsKK30KKworVmVjdG9yPEludFJlY3Q+IFRpbGVD
YWlybzo6dXBkYXRlQmFja0J1ZmZlcigpCit7CisgICAgaWYgKG1fYnVmZmVyICYmICFpc0RpcnR5
KCkpCisgICAgICAgIHJldHVybiBWZWN0b3I8SW50UmVjdD4oKTsKKworICAgIGlmICghbV9idWZm
ZXIpCisgICAgICAgIG1fYnVmZmVyID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVh
dGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+dGlsZVNpemUoKS53aWR0aCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fYmFja2luZ1N0b3JlLT50aWxlU2l6ZSgpLmhlaWdodCgpKSk7CisKKyAgICBSZWZQdHI8Y2Fp
cm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9idWZmZXIuZ2V0KCkpKTsKKyAgICBH
cmFwaGljc0NvbnRleHQgY29udGV4dChjci5nZXQoKSk7CisgICAgY29udGV4dC50cmFuc2xhdGUo
LW1fcmVjdC54KCksIC1tX3JlY3QueSgpKTsKKworICAgIFZlY3RvcjxJbnRSZWN0PiB1cGRhdGVS
ZWN0czsKKyAgICBjYWlyb19yZWN0YW5nbGVfaW50X3QgcmVjdDsKKworICAgIGludCByZWN0Q291
bnQgPSBjYWlyb19yZWdpb25fbnVtX3JlY3RhbmdsZXMobV9kaXJ0eVJlZ2lvbi5nZXQoKSk7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0Q291bnQ7ICsraSkgeworICAgICAgICBjYWlyb19y
ZWdpb25fZ2V0X3JlY3RhbmdsZShtX2RpcnR5UmVnaW9uLmdldCgpLCBpLCAmcmVjdCk7CisgICAg
ICAgIHVwZGF0ZVJlY3RzLmFwcGVuZChJbnRSZWN0KHJlY3QpKTsKKworICAgICAgICBjb250ZXh0
LnNhdmUoKTsKKyAgICAgICAgY29udGV4dC5jbGlwKEZsb2F0UmVjdChyZWN0KSk7CisgICAgICAg
IGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKG1fYmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCks
IG1fYmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCkpKTsKKyAgICAgICAgbV9iYWNraW5nU3Rv
cmUtPmNsaWVudCgpLT50aWxlZEJhY2tpbmdTdG9yZVBhaW50KCZjb250ZXh0LCBtX2JhY2tpbmdT
dG9yZS0+bWFwVG9Db250ZW50cyhyZWN0KSk7CisgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwor
ICAgIH0KKworICAgIG1fZGlydHlSZWdpb24uY2xlYXIoKTsKKyAgICBtX2RpcnR5UmVnaW9uID0g
YWRvcHRSZWYoY2Fpcm9fcmVnaW9uX2NyZWF0ZSgpKTsKKworICAgIHJldHVybiB1cGRhdGVSZWN0
czsKK30KKwordm9pZCBUaWxlQ2Fpcm86OnN3YXBCYWNrQnVmZmVyVG9Gcm9udCgpCit7Cit9CisK
K3ZvaWQgVGlsZUNhaXJvOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSW50UmVjdCB0YXJnZXQgPSBpbnRlcnNlY3Rpb24ocmVjdCwgbV9yZWN0KTsKKworICAgIGNh
aXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CisgICAgY2Fpcm9f
c2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBtX2J1ZmZlci5nZXQoKSwgbV9yZWN0LngoKSwgbV9yZWN0
LnkoKSk7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCB0YXJnZXQueCgpLCB0YXJnZXQueSgpLCB0
YXJnZXQud2lkdGgoKSwgdGFyZ2V0LmhlaWdodCgpKTsKKyAgICBjYWlyb19maWxsKGNyKTsKK30K
Kwordm9pZCBUaWxlQ2Fpcm86OnJlc2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXpl
KQoreworICAgIEludFJlY3Qgb2xkUmVjdCA9IG1fcmVjdDsKKyAgICBtX3JlY3QgPSBJbnRSZWN0
KG1fcmVjdC5sb2NhdGlvbigpLCBuZXdTaXplKTsKKyAgICBpZiAobV9yZWN0Lm1heFgoKSA+IG9s
ZFJlY3QubWF4WCgpKQorICAgICAgICBpbnZhbGlkYXRlKEludFJlY3Qob2xkUmVjdC5tYXhYKCks
IG9sZFJlY3QueSgpLCBtX3JlY3QubWF4WCgpIC0gb2xkUmVjdC5tYXhYKCksIG1fcmVjdC5oZWln
aHQoKSkpOworICAgIGlmIChtX3JlY3QubWF4WSgpID4gb2xkUmVjdC5tYXhZKCkpCisgICAgICAg
IGludmFsaWRhdGUoSW50UmVjdChvbGRSZWN0LngoKSwgb2xkUmVjdC5tYXhZKCksIG1fcmVjdC53
aWR0aCgpLCBtX3JlY3QubWF4WSgpIC0gb2xkUmVjdC5tYXhZKCkpKTsKK30KKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Rp
bGVDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGlsZUNh
aXJvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEyOGFlYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RpbGVD
YWlyby5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGlsZUNhaXJvX2gKKyNkZWZpbmUgVGlsZUNh
aXJvX2gKKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKSAmJiBVU0UoQ0FJUk8pCisKKyNp
bmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJSZWZQ
dHJDYWlyby5oIgorI2luY2x1ZGUgIlRpbGUuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUaWxlZEJhY2tpbmdTdG9yZTsKKworY2xhc3MgVGls
ZUNhaXJvIDogcHVibGljIFRpbGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRp
bGU+IGNyZWF0ZShUaWxlZEJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBjb25zdCBDb29yZGlu
YXRlJiB0aWxlQ29vcmRpbmF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
VGlsZUNhaXJvKGJhY2tpbmdTdG9yZSwgdGlsZUNvb3JkaW5hdGUpKTsKKyAgICB9CisgICAgdmly
dHVhbCB+VGlsZUNhaXJvKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IFZlY3RvcjxJbnRSZWN0PiB1cGRhdGVCYWNrQnVmZmVyKCk7CisgICAgdmlydHVhbCB2b2lkIHN3
YXBCYWNrQnVmZmVyVG9Gcm9udCgpOworICAgIHZpcnR1YWwgYm9vbCBpc1JlYWR5VG9QYWludCgp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUmIGNvb3JkaW5h
dGUoKSBjb25zdCB7IHJldHVybiBtX2Nvb3JkaW5hdGU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IElu
dFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
cmVzaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKworcHJvdGVjdGVkOgorICAgIFRpbGVD
YWlybyhUaWxlZEJhY2tpbmdTdG9yZSosIGNvbnN0IENvb3JkaW5hdGUmKTsKKworICAgIFRpbGVk
QmFja2luZ1N0b3JlKiBtX2JhY2tpbmdTdG9yZTsKKyAgICBDb29yZGluYXRlIG1fY29vcmRpbmF0
ZTsKKyAgICBJbnRSZWN0IG1fcmVjdDsKKworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1f
YnVmZmVyOworICAgIFJlZlB0cjxjYWlyb19yZWdpb25fdD4gbV9kaXJ0eVJlZ2lvbjsKK307CisK
K30KKyNlbmRpZgorI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1RpbGVkQmFja2luZ1N0b3JlQmFja2VuZENhaXJvLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RpbGVkQmFja2luZ1N0b3JlQmFja2Vu
ZENhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjVlMmUzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
VGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgY29kZWF1cm9yYS5vcmcgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAy
MDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kLmgiCisKKyNpZiBVU0UoVElMRURfQkFDS0lO
R19TVE9SRSkgJiYgVVNFKENBSVJPKQorI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJUaWxlQ2Fpcm8uaCIKKyNp
bmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8VGls
ZT4gVGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kOjpjcmVhdGVUaWxlKFRpbGVkQmFja2luZ1N0b3Jl
KiBiYWNraW5nU3RvcmUsIGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKQor
eworICAgIHJldHVybiBUaWxlQ2Fpcm86OmNyZWF0ZShiYWNraW5nU3RvcmUsIHRpbGVDb29yZGlu
YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoZWNrZXJTaXplID0gMTY7CitzdGF0
aWMgY29uc3QgdW5zaWduZWQgY2hlY2tlckNvbG9yRGFya0dyZXkgPSAweGZmNTU1NTU1Oworc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGNoZWNrZXJDb2xvckxpZ2h0R3JleSA9IDB4ZmZhYWFhYWE7CisK
K3N0YXRpYyBjYWlyb19zdXJmYWNlX3QqIGNoZWNrZXJlZFN1cmZhY2UoKQoreworICAgIHN0YXRp
YyBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSAwOworICAgIGlmIChzdXJmYWNlKQorICAgICAg
ICByZXR1cm4gc3VyZmFjZTsKKworICAgIHN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2Ny
ZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCBjaGVja2VyU2l6ZSwgY2hlY2tlclNpemUpOworICAg
IFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShzdXJmYWNlKSk7CisK
KyAgICB1bnNpZ25lZCBoYWxmQ2hlY2tlclNpemUgPSBjaGVja2VyU2l6ZSAvIDI7CisgICAgc2V0
U291cmNlUkdCQUZyb21Db2xvcihjci5nZXQoKSwgY2hlY2tlckNvbG9yTGlnaHRHcmV5KTsKKyAg
ICBjYWlyb19yZWN0YW5nbGUoY3IuZ2V0KCksIDAsIDAsIGhhbGZDaGVja2VyU2l6ZSwgaGFsZkNo
ZWNrZXJTaXplKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IuZ2V0KCksIGhhbGZDaGVja2VyU2l6
ZSwgaGFsZkNoZWNrZXJTaXplLCBoYWxmQ2hlY2tlclNpemUsIGhhbGZDaGVja2VyU2l6ZSk7Cisg
ICAgY2Fpcm9fZmlsbChjci5nZXQoKSk7CisKKyAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNy
LmdldCgpLCBjaGVja2VyQ29sb3JEYXJrR3JleSk7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLmdl
dCgpLCBoYWxmQ2hlY2tlclNpemUsIDAsIGhhbGZDaGVja2VyU2l6ZSwgaGFsZkNoZWNrZXJTaXpl
KTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IuZ2V0KCksIDAsIGhhbGZDaGVja2VyU2l6ZSwgaGFs
ZkNoZWNrZXJTaXplLCBoYWxmQ2hlY2tlclNpemUpOworICAgIGNhaXJvX2ZpbGwoY3IuZ2V0KCkp
OworCisgICAgcmV0dXJuIHN1cmZhY2U7Cit9CisKK3ZvaWQgVGlsZWRCYWNraW5nU3RvcmVCYWNr
ZW5kOjpwYWludENoZWNrZXJQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXQpCit7CisgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3Jt
Q29udGV4dCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGNhaXJvX3QqIGNyID0g
cGxhdGZvcm1Db250ZXh0LT5jcigpOworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjciwg
Y2hlY2tlcmVkU3VyZmFjZSgpLCAwLCAwKTsKKyAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQo
Y2Fpcm9fZ2V0X3NvdXJjZShjciksIENBSVJPX0VYVEVORF9SRVBFQVQpOworICAgIGNhaXJvX3Jl
Y3RhbmdsZShjciwgdGFyZ2V0LngoKSwgdGFyZ2V0LnkoKSwgdGFyZ2V0LndpZHRoKCksIHRhcmdl
dC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fZmlsbChjcik7Cit9CisKK30KKworI2VuZGlmCisK
</data>

          </attachment>
      

    </bug>

</bugzilla>