<?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>83392</bug_id>
          
          <creation_ts>2012-04-06 14:35:46 -0700</creation_ts>
          <short_desc>[chromium] Texture copies should happen after incremental updates to preserve commit atomicity</short_desc>
          <delta_ts>2012-04-09 14:25:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>kbr</cc>
    
    <cc>nduca</cc>
    
    <cc>reveman</cc>
    
    <cc>senorblanco</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>twiz</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>597662</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-06 14:35:46 -0700</bug_when>
    <thetext>[chromium] Texture copies should happen after incremental updates to preserve commit atomicity</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597668</commentid>
    <comment_count>1</comment_count>
      <attachid>136067</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-06 14:39:41 -0700</bug_when>
    <thetext>Created attachment 136067
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597671</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-06 14:41:23 -0700</bug_when>
    <thetext>This is a first cut at fixing the webgl/canvas swap timing in their respective texture copy paths (currently webgl with preserveDrawingBuffer=true and canvas 2d in the threaded compositing case).  In offline discussion with David Reveman we thought that really the scheduler should be more aware of the # of pending copies and be driving this operation explicitly rather than &quot;hiding&quot; it with the partial updates, but I think this is a decent first cut.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597691</commentid>
    <comment_count>3</comment_count>
      <attachid>136067</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-04-06 14:56:57 -0700</bug_when>
    <thetext>Comment on attachment 136067
work in progress

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        This enqueues texture copy operations in the CCTextureUpdater&apos;s list instead of evaluating them immediately so
&gt; +        if the update is spread over multiple frames we can properly defer the texture copy until the end. Otherwise,
&gt; +        the texture copy for WebGL / Canvas 2D content happens before the commit completes and the compositor might pick
&gt; +        up a frame for the canvas that&apos;s &quot;ahead&quot; of the content around it.

Yikes, nasty.  Does this affect Chrome on Android, currently?

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:-139
&gt; -    GLC(context, context-&gt;flush());

What happened to this flush?  Doesn&apos;t this still need to happen before the draw, or is it subsumed by a flush somewhere else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597693</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-06 14:58:40 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 136067 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136067&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        This enqueues texture copy operations in the CCTextureUpdater&apos;s list instead of evaluating them immediately so
&gt; &gt; +        if the update is spread over multiple frames we can properly defer the texture copy until the end. Otherwise,
&gt; &gt; +        the texture copy for WebGL / Canvas 2D content happens before the commit completes and the compositor might pick
&gt; &gt; +        up a frame for the canvas that&apos;s &quot;ahead&quot; of the content around it.
&gt; 
&gt; Yikes, nasty.  Does this affect Chrome on Android, currently?

It would if they had incremental texture uploads enabled (I think they have it off right now).  It&apos;s not the worst possible bug if it&apos;s happening (you see valid stuff most of the time, but some pages will look out of sync).

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:-139
&gt; &gt; -    GLC(context, context-&gt;flush());
&gt; 
&gt; What happened to this flush?  Doesn&apos;t this still need to happen before the draw, or is it subsumed by a flush somewhere else?

This is the compositor&apos;s context so I don&apos;t think we need a flush since we&apos;re going to issue the draw sourcing this texture from the same context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597699</commentid>
    <comment_count>5</comment_count>
      <attachid>136067</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-04-06 15:04:44 -0700</bug_when>
    <thetext>Comment on attachment 136067
work in progress

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:-139
&gt;&gt;&gt; -    GLC(context, context-&gt;flush());
&gt;&gt; 
&gt;&gt; What happened to this flush?  Doesn&apos;t this still need to happen before the draw, or is it subsumed by a flush somewhere else?
&gt; 
&gt; This is the compositor&apos;s context so I don&apos;t think we need a flush since we&apos;re going to issue the draw sourcing this texture from the same context.

I think it&apos;s more about making sure the copy is finished before canvas tries to write to the source texture again, but I could be wrong.  At any rate, it was added recently to fix flashing issues, in  http://trac.webkit.org/changeset/113033, so you might want to check with skyostil@.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597898</commentid>
    <comment_count>6</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-06 19:07:01 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 136067 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136067&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:-139
&gt; &gt;&gt;&gt; -    GLC(context, context-&gt;flush());
&gt; &gt;&gt; 
&gt; &gt;&gt; What happened to this flush?  Doesn&apos;t this still need to happen before the draw, or is it subsumed by a flush somewhere else?
&gt; &gt; 
&gt; &gt; This is the compositor&apos;s context so I don&apos;t think we need a flush since we&apos;re going to issue the draw sourcing this texture from the same context.
&gt; 
&gt; I think it&apos;s more about making sure the copy is finished before canvas tries to write to the source texture again, but I could be wrong.  At any rate, it was added recently to fix flashing issues, in  http://trac.webkit.org/changeset/113033, so you might want to check with skyostil@.

Gotcha, we have to issue a flush on the compositor context before we let the main thread start issuing draw calls that might touch the source texture.  Makes perfect sense - I think that doing one flush after all copies are done (if we did copies) would work and be more efficient than flushing on each copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598390</commentid>
    <comment_count>7</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-04-09 10:18:58 -0700</bug_when>
    <thetext>This looks great! Do we still need to pass a GC3D pointer to updateCompositorResources after making this change? Would be great if we could remove that.

A nice follow up to this patch would be to move the texture upload part of CCTextureUpdater into a TextureUploader class just like we currently have a TextureCopier class. That would be a nice solution to: https://bugs.webkit.org/show_bug.cgi?id=83382 which is currently blocking us from landing throttled texture updates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598415</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-09 10:43:38 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; This looks great! Do we still need to pass a GC3D pointer to updateCompositorResources after making this change? Would be great if we could remove that.
&gt; 

I&apos;d like to remove that next.  Another change I&apos;d like to make is move this stuff into paintContents...() and get rid of the updateCompositorResources() completely.  That means that paintContents...() would need access to an interface by which it could enqueue texture uploads / copies (i.e. not directly access CCTextureUpdater).  Then we can map the queued texture operations to the appropriate updater/copier classes on the impl thread later on in the commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598450</commentid>
    <comment_count>9</comment_count>
      <attachid>136274</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-09 11:18:12 -0700</bug_when>
    <thetext>Created attachment 136274
with proper flushing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598463</commentid>
    <comment_count>10</comment_count>
      <attachid>136274</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-09 11:34:41 -0700</bug_when>
    <thetext>Comment on attachment 136274
with proper flushing

Looks great.  R=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598608</commentid>
    <comment_count>11</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-09 14:25:19 -0700</bug_when>
    <thetext>Committed r113618: &lt;http://trac.webkit.org/changeset/113618&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136067</attachid>
            <date>2012-04-06 14:39:41 -0700</date>
            <delta_ts>2012-04-09 11:18:08 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-83392-20120406143940.patch</filename>
            <type>text/plain</type>
            <size>13760</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjhkYTJhN2Y4NDcyOWZk
NmMyM2VhYWMyOWIzZGZlNDMxYjZjNTA3ZC4uMmYxMDM5MDY1MmNhMzY4N2UyZjI4MWQ1Mzg1YmU4
NTQ4ZDZkN2ZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM2IEBACiAyMDEyLTA0LTA2ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW2Nocm9taXVtXSBU
ZXh0dXJlIGNvcGllcyBzaG91bGQgaGFwcGVuIGFmdGVyIGluY3JlbWVudGFsIHVwZGF0ZXMgdG8g
cHJlc2VydmUgY29tbWl0IGF0b21pY2l0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODMzOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIGVucXVldWVzIHRleHR1cmUgY29weSBvcGVyYXRpb25zIGlu
IHRoZSBDQ1RleHR1cmVVcGRhdGVyJ3MgbGlzdCBpbnN0ZWFkIG9mIGV2YWx1YXRpbmcgdGhlbSBp
bW1lZGlhdGVseSBzbworICAgICAgICBpZiB0aGUgdXBkYXRlIGlzIHNwcmVhZCBvdmVyIG11bHRp
cGxlIGZyYW1lcyB3ZSBjYW4gcHJvcGVybHkgZGVmZXIgdGhlIHRleHR1cmUgY29weSB1bnRpbCB0
aGUgZW5kLiBPdGhlcndpc2UsCisgICAgICAgIHRoZSB0ZXh0dXJlIGNvcHkgZm9yIFdlYkdMIC8g
Q2FudmFzIDJEIGNvbnRlbnQgaGFwcGVucyBiZWZvcmUgdGhlIGNvbW1pdCBjb21wbGV0ZXMgYW5k
IHRoZSBjb21wb3NpdG9yIG1pZ2h0IHBpY2sKKyAgICAgICAgdXAgYSBmcmFtZSBmb3IgdGhlIGNh
bnZhcyB0aGF0J3MgImFoZWFkIiBvZiB0aGUgY29udGVudCBhcm91bmQgaXQuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExh
eWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xM
YXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZFVwZGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RleHR1cmVVcGRhdGVyOjphcHBlbmRQYXJ0aWFsVXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kQ29weSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjpoYXNNb3JlVXBkYXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUZXh0dXJlVXBkYXRlcjo6Y2xlYXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKENDVGV4dHVyZVVw
ZGF0ZXIpOgorICAgICAgICAoVXBkYXRlRW50cnkpOgorICAgICAgICAoQ29weUVudHJ5KToKKwor
MjAxMi0wNC0wNiAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCiAgICAg
ICAgIFdlYkdMIGNvbnRlbnQgc3dhcHBlZCBhdCB3cm9uZyB0aW1lIGluIHRocmVhZGVkIGNvbXBv
c2l0aW5nIG1vZGUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgyMjc1CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNWMzYmVkYjNjN2YzYTNj
ZDQ3NTg0MTdiODNlOWMxNjkzZTAzNzA4Mi4uNjg3ZjZmNjdjOTdlNjYxOTg1YjE0YzgxYWU1MTYz
Y2IzZmIxZTRiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNCBAQAog
MjAxMi0wNC0wNiAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCisgICAg
ICAgIFtjaHJvbWl1bV0gVGV4dHVyZSBjb3BpZXMgc2hvdWxkIGhhcHBlbiBhZnRlciBpbmNyZW1l
bnRhbCB1cGRhdGVzIHRvIHByZXNlcnZlIGNvbW1pdCBhdG9taWNpdHkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzMzkyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DYW52YXMyRExheWVyQ2hy
b21pdW1UZXN0LmNwcDoKKworMjAxMi0wNC0wNiAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hy
b21pdW0ub3JnPgorCiAgICAgICAgIFdlYkdMIGNvbnRlbnQgc3dhcHBlZCBhdCB3cm9uZyB0aW1l
IGluIHRocmVhZGVkIGNvbXBvc2l0aW5nIG1vZGUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgyMjc1CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hy
b21pdW0uY3BwCmluZGV4IDVlMzUxNjc2MDJmNzZmZmU3OTkyN2M0YTkzOWFkMDkxN2U3NjYzMGIu
LmNhNTU1ZmNmZjdiMjAyYjliNzIyYTZlMWQ4MmY1NGM1MGViYzFmYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzMkRMYXllckNocm9taXVtLmNwcApAQCAtMTM1LDggKzEzNSw3IEBAIHZvaWQgQ2FudmFz
MkRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZnJvbnRUZXh0dXJlLT5hbGxv
Y2F0ZSh1cGRhdGVyLmFsbG9jYXRvcigpKTsKLSAgICB1cGRhdGVyLmNvcGllcigpLT5jb3B5VGV4
dHVyZShjb250ZXh0LCBtX2JhY2tUZXh0dXJlSWQsIG1fZnJvbnRUZXh0dXJlLT50ZXh0dXJlSWQo
KSwgbV9zaXplKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+Zmx1c2goKSk7CisgICAgdXBk
YXRlci5hcHBlbmRDb3B5KG1fYmFja1RleHR1cmVJZCwgbV9mcm9udFRleHR1cmUtPnRleHR1cmVJ
ZCgpLCBtX3NpemUpOwogfQogCiB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6cHVzaFByb3Bl
cnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNw
cAppbmRleCAxMmIyYzVkNDliZmIzYzJhZmQyOTU4NTk3OGNhYjA3ZmQ1ODUzYjgxLi5mMWYxMGU5
N2JhMGI1Zjk5YzU0ZjIwMjIxMTE4ZjJhMzRjOWUwOWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJD
aHJvbWl1bS5jcHAKQEAgLTIzMiw5ICsyMzIsOSBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZQog
ICAgICAgICAgICAgICAgIENSQVNIKCk7CiAKICAgICAgICAgICAgIGlmICh0aWxlLT5tX3BhcnRp
YWxVcGRhdGUpCi0gICAgICAgICAgICAgICAgdXBkYXRlci5hcHBlbmRQYXJ0aWFsKHRpbGUtPnRl
eHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOworICAgICAgICAgICAgICAgIHVwZGF0ZXIu
YXBwZW5kUGFydGlhbFVwZGF0ZSh0aWxlLT50ZXh0dXJlKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0
KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1cGRhdGVyLmFwcGVuZCh0aWxl
LT50ZXh0dXJlKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKKyAgICAgICAgICAgICAgICB1cGRh
dGVyLmFwcGVuZFVwZGF0ZSh0aWxlLT50ZXh0dXJlKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsK
ICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
NzRlNGExYWI4NzliNzMzZTI0MDY0ODE4M2JkZmY0NjkxYTkxNWMzYS4uODdkMDE2ODg2NmMwYTQ2
M2ZhMmUzYjY1ZTE1NDk5YjQ3ZGYyNWU3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
Y3BwCkBAIC04NCwxNCArODQsMTQgQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnBhaW50Q29u
dGVudHNJZkRpcnR5KGNvbnN0IENDT2NjbHVzaW9uVHJhY2tlciogLyogb2NjbHUKICAgICBtX2Nv
bnRleHRMb3N0ID0gY29udGV4dCgpLT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRT
dGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7CiB9CiAKLXZvaWQgV2Vi
R0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKQordm9pZCBXZWJHTExheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBD
Q1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKQogewogICAgIGlmICghbV9kcmF3aW5nQnVmZmVyKQog
ICAgICAgICByZXR1cm47CiAKICAgICBtX3RleHR1cmVJZCA9IG1fZHJhd2luZ0J1ZmZlci0+ZnJv
bnRDb2xvckJ1ZmZlcigpOwogICAgIGlmIChtX2RyYXdpbmdCdWZmZXItPnJlcXVpcmVzQ29weUZy
b21CYWNrVG9Gcm9udEJ1ZmZlcigpKQotICAgICAgICB1cGRhdGVyLmNvcGllcigpLT5jb3B5VGV4
dHVyZShjb250ZXh0LCBtX2RyYXdpbmdCdWZmZXItPmNvbG9yQnVmZmVyKCksIG1fdGV4dHVyZUlk
LCBib3VuZHMoKSk7CisgICAgICAgIHVwZGF0ZXIuYXBwZW5kQ29weShtX2RyYXdpbmdCdWZmZXIt
PmNvbG9yQnVmZmVyKCksIG1fdGV4dHVyZUlkLCBib3VuZHMoKSk7CiB9CiAKIHZvaWQgV2ViR0xM
YXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4
dHVyZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggMGNlMGY2ZDEwOThhNzM5NzdmM2JhZjgy
MzJmNzIxNmIwNWU3YWQ3ZS4uYTZmNzQ5NTRmNmJiYWU0NGMyYzNjYTM0NmFiNmViZWNkYWE2Zjk3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVw
ZGF0ZXIuaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgorI2luY2x1ZGUgIlRleHR1cmVD
b3BpZXIuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtNDksMzAgKzUwLDM5IEBAIEND
VGV4dHVyZVVwZGF0ZXI6On5DQ1RleHR1cmVVcGRhdGVyKCkKIHsKIH0KIAotdm9pZCBDQ1RleHR1
cmVVcGRhdGVyOjphcHBlbmQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZSwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIFZlY3Rv
cjxVcGRhdGVFbnRyeT4mIGVudHJpZXMpCit2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZFVw
ZGF0ZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgVmVjdG9yPFVwZGF0ZUVudHJ5
PiYgZW50cmllcykKIHsKICAgICBBU1NFUlQodGV4dHVyZSk7CiAKICAgICBVcGRhdGVFbnRyeSBl
bnRyeTsKLSAgICBlbnRyeS5tX3RleHR1cmUgPSB0ZXh0dXJlOwotICAgIGVudHJ5Lm1fc291cmNl
UmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgZW50cnkubV9kZXN0UmVjdCA9IGRlc3RSZWN0OworICAg
IGVudHJ5LnRleHR1cmUgPSB0ZXh0dXJlOworICAgIGVudHJ5LnNvdXJjZVJlY3QgPSBzb3VyY2VS
ZWN0OworICAgIGVudHJ5LmRlc3RSZWN0ID0gZGVzdFJlY3Q7CiAgICAgZW50cmllcy5hcHBlbmQo
ZW50cnkpOwogfQogCi12b2lkIENDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZChMYXllclRleHR1cmVV
cGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kVXBkYXRl
KExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQogewotICAgIGFwcGVuZCh0ZXh0dXJl
LCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwgbV9lbnRyaWVzKTsKKyAgICBhcHBlbmRVcGRhdGUodGV4
dHVyZSwgc291cmNlUmVjdCwgZGVzdFJlY3QsIG1fZW50cmllcyk7CiB9CiAKLXZvaWQgQ0NUZXh0
dXJlVXBkYXRlcjo6YXBwZW5kUGFydGlhbChMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiB0
ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCkKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kUGFydGlhbFVwZGF0ZShMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBhcHBlbmQodGV4dHVyZSwgc291cmNlUmVj
dCwgZGVzdFJlY3QsIG1fcGFydGlhbEVudHJpZXMpOworICAgIGFwcGVuZFVwZGF0ZSh0ZXh0dXJl
LCBzb3VyY2VSZWN0LCBkZXN0UmVjdCwgbV9wYXJ0aWFsRW50cmllcyk7Cit9CisKK3ZvaWQgQ0NU
ZXh0dXJlVXBkYXRlcjo6YXBwZW5kQ29weSh1bnNpZ25lZCBzb3VyY2VUZXh0dXJlLCB1bnNpZ25l
ZCBkZXN0VGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBDb3B5RW50cnkgY29w
eTsKKyAgICBjb3B5LnNvdXJjZVRleHR1cmUgPSBzb3VyY2VUZXh0dXJlOworICAgIGNvcHkuZGVz
dFRleHR1cmUgPSBkZXN0VGV4dHVyZTsKKyAgICBjb3B5LnNpemUgPSBzaXplOworICAgIG1fY29w
eUVudHJpZXMuYXBwZW5kKGNvcHkpOwogfQogCiBib29sIENDVGV4dHVyZVVwZGF0ZXI6Omhhc01v
cmVVcGRhdGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9lbnRyaWVzLnNpemUoKSB8fCBtX3Bh
cnRpYWxFbnRyaWVzLnNpemUoKTsKKyAgICByZXR1cm4gbV9lbnRyaWVzLnNpemUoKSB8fCBtX3Bh
cnRpYWxFbnRyaWVzLnNpemUoKSB8fCBtX2NvcHlFbnRyaWVzLnNpemUoKTsKIH0KIAogYm9vbCBD
Q1RleHR1cmVVcGRhdGVyOjp1cGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHNpemVf
dCBjb3VudCkKQEAgLTgxLDcgKzkxLDcgQEAgYm9vbCBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHNpemVfdCBjb3VudCkKICAgICBzaXplX3QgbWF4
SW5kZXggPSBtaW4obV9lbnRyeUluZGV4ICsgY291bnQsIG1fZW50cmllcy5zaXplKCkpOwogICAg
IGZvciAoaW5kZXggPSBtX2VudHJ5SW5kZXg7IGluZGV4IDwgbWF4SW5kZXg7ICsraW5kZXgpIHsK
ICAgICAgICAgVXBkYXRlRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzW2luZGV4XTsKLSAgICAgICAg
ZW50cnkubV90ZXh0dXJlLT51cGRhdGVSZWN0KGNvbnRleHQsIG1fYWxsb2NhdG9yLCBlbnRyeS5t
X3NvdXJjZVJlY3QsIGVudHJ5Lm1fZGVzdFJlY3QpOworICAgICAgICBlbnRyeS50ZXh0dXJlLT51
cGRhdGVSZWN0KGNvbnRleHQsIG1fYWxsb2NhdG9yLCBlbnRyeS5zb3VyY2VSZWN0LCBlbnRyeS5k
ZXN0UmVjdCk7CiAgICAgfQogCiAgICAgYm9vbCBtb3JlVXBkYXRlcyA9IG1heEluZGV4IDwgbV9l
bnRyaWVzLnNpemUoKTsKQEAgLTk5LDcgKzEwOSwxMiBAQCBib29sIENDVGV4dHVyZVVwZGF0ZXI6
OnVwZGF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgc2l6ZV90IGNvdW50KQogCiAgICAg
Zm9yIChpbmRleCA9IDA7IGluZGV4IDwgbV9wYXJ0aWFsRW50cmllcy5zaXplKCk7ICsraW5kZXgp
IHsKICAgICAgICAgVXBkYXRlRW50cnkmIGVudHJ5ID0gbV9wYXJ0aWFsRW50cmllc1tpbmRleF07
Ci0gICAgICAgIGVudHJ5Lm1fdGV4dHVyZS0+dXBkYXRlUmVjdChjb250ZXh0LCBtX2FsbG9jYXRv
ciwgZW50cnkubV9zb3VyY2VSZWN0LCBlbnRyeS5tX2Rlc3RSZWN0KTsKKyAgICAgICAgZW50cnku
dGV4dHVyZS0+dXBkYXRlUmVjdChjb250ZXh0LCBtX2FsbG9jYXRvciwgZW50cnkuc291cmNlUmVj
dCwgZW50cnkuZGVzdFJlY3QpOworICAgIH0KKworICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8
IG1fY29weUVudHJpZXMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIENvcHlFbnRyeSYgY29w
eUVudHJ5ID0gbV9jb3B5RW50cmllc1tpbmRleF07CisgICAgICAgIG1fY29waWVyLT5jb3B5VGV4
dHVyZShjb250ZXh0LCBjb3B5RW50cnkuc291cmNlVGV4dHVyZSwgY29weUVudHJ5LmRlc3RUZXh0
dXJlLCBjb3B5RW50cnkuc2l6ZSk7CiAgICAgfQogCiAgICAgLy8gSWYgbm8gZW50cmllcyBsZWZ0
IHRvIHByb2Nlc3MsIGF1dG8tY2xlYXIuCkBAIC0xMTIsNiArMTI3LDcgQEAgdm9pZCBDQ1RleHR1
cmVVcGRhdGVyOjpjbGVhcigpCiAgICAgbV9lbnRyeUluZGV4ID0gMDsKICAgICBtX2VudHJpZXMu
Y2xlYXIoKTsKICAgICBtX3BhcnRpYWxFbnRyaWVzLmNsZWFyKCk7CisgICAgbV9jb3B5RW50cmll
cy5jbGVhcigpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgKaW5kZXggZDI5
YzY1ODYxZTkzMjNlY2ZmODJkZTQwYmNkYmY3ZTI0NmI0OTcwNy4uYTA4NmJhYmNkNTY3NGI5NThk
MTQ4OTBkYWE4MmY3ZmYwNzlkYWJjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaApA
QCAtNDEsOCArNDEsOSBAQCBwdWJsaWM6CiAgICAgQ0NUZXh0dXJlVXBkYXRlcihUZXh0dXJlQWxs
b2NhdG9yKiwgVGV4dHVyZUNvcGllciopOwogICAgIH5DQ1RleHR1cmVVcGRhdGVyKCk7CiAKLSAg
ICB2b2lkIGFwcGVuZChMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOwotICAgIHZvaWQgYXBwZW5k
UGFydGlhbChMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZvaWQgYXBwZW5kVXBkYXRl
KExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisgICAgdm9pZCBhcHBlbmRQYXJ0aWFsVXBkYXRl
KExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CisgICAgdm9pZCBhcHBlbmRDb3B5KHVuc2lnbmVk
IHNvdXJjZVRleHR1cmUsIHVuc2lnbmVkIGRlc3RUZXh0dXJlLCBjb25zdCBJbnRTaXplJik7CiAK
ICAgICBib29sIGhhc01vcmVVcGRhdGVzKCkgY29uc3Q7CiAKQEAgLTUyLDIyICs1MywyOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgVGV4dHVyZUFsbG9jYXRvciogYWxsb2Nh
dG9yKCkgeyByZXR1cm4gbV9hbGxvY2F0b3I7IH0KLSAgICBUZXh0dXJlQ29waWVyKiBjb3BpZXIo
KSB7IHJldHVybiBtX2NvcGllcjsgfQogCiBwcml2YXRlOgogICAgIHN0cnVjdCBVcGRhdGVFbnRy
eSB7Ci0gICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIG1fdGV4dHVyZTsKLSAg
ICAgICAgSW50UmVjdCBtX3NvdXJjZVJlY3Q7Ci0gICAgICAgIEludFJlY3QgbV9kZXN0UmVjdDsK
KyAgICAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZTsKKyAgICAgICAg
SW50UmVjdCBzb3VyY2VSZWN0OworICAgICAgICBJbnRSZWN0IGRlc3RSZWN0OwogICAgIH07CiAK
LSAgICBzdGF0aWMgdm9pZCBhcHBlbmQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBWZWN0b3I8
VXBkYXRlRW50cnk+Jik7CisgICAgc3RydWN0IENvcHlFbnRyeSB7CisgICAgICAgIEludFNpemUg
c2l6ZTsKKyAgICAgICAgdW5zaWduZWQgc291cmNlVGV4dHVyZTsKKyAgICAgICAgdW5zaWduZWQg
ZGVzdFRleHR1cmU7CisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIGFwcGVuZFVwZGF0ZShMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QsIFZlY3RvcjxVcGRhdGVFbnRyeT4mKTsKIAogICAgIFRleHR1
cmVBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOwogICAgIFRleHR1cmVDb3BpZXIqIG1fY29waWVyOwog
ICAgIHNpemVfdCBtX2VudHJ5SW5kZXg7CiAgICAgVmVjdG9yPFVwZGF0ZUVudHJ5PiBtX2VudHJp
ZXM7CiAgICAgVmVjdG9yPFVwZGF0ZUVudHJ5PiBtX3BhcnRpYWxFbnRyaWVzOworICAgIFZlY3Rv
cjxDb3B5RW50cnk+IG1fY29weUVudHJpZXM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcApp
bmRleCAyNjQ3NWNlMzY5ZTVlMjMzNzIwMjEyMWM4NjdiMDJjNDJkMWI2Mzk4Li5lOWJkNDY2YzY3
ZjU1MTNmZmJkNWU3Yzg1ZjhjNzIxYjAwZDhiZDYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAKQEAg
LTk3LDcgKzk3LDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IG1haW5Db250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGlj
c0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgTW9ja0NhbnZhc0NvbnRleHQoKSks
IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CiAgICAgICAg
IFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gaW1wbENvbnRleHQgPSBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5l
dyBNb2NrQ2FudmFzQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5
VG9Ib3N0V2luZG93KTsKIAotICAgICAgICBNb2NrQ2FudmFzQ29udGV4dCYgaW1wbE1vY2sgPSAq
c3RhdGljX2Nhc3Q8TW9ja0NhbnZhc0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChpbXBsQ29udGV4dC5nZXQoKSkpOwogICAgICAg
ICBNb2NrQ2FudmFzQ29udGV4dCYgbWFpbk1vY2sgPSAqc3RhdGljX2Nhc3Q8TW9ja0NhbnZhc0Nv
bnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRl
eHQzRChtYWluQ29udGV4dC5nZXQoKSkpOwogCiAgICAgICAgIE1vY2tUZXh0dXJlQWxsb2NhdG9y
IGFsbG9jYXRvck1vY2s7CkBAIC0xMzAsNyArMTI5LDYgQEAgcHJvdGVjdGVkOgogICAgICAgICAg
ICAgICAgIEVYUEVDVF9DQUxMKGFsbG9jYXRvck1vY2ssIGNyZWF0ZVRleHR1cmUoc2l6ZSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEpKQogICAgICAgICAgICAgICAgICAgICAuV2lsbE9uY2UoUmV0
dXJuKGZyb250VGV4dHVyZUlkKSk7CiAgICAgICAgICAgICAgICAgRVhQRUNUX0NBTEwoY29waWVy
TW9jaywgY29weVRleHR1cmUoaW1wbENvbnRleHQuZ2V0KCksIGJhY2tUZXh0dXJlSWQsIGZyb250
VGV4dHVyZUlkLCBzaXplKSk7Ci0gICAgICAgICAgICAgICAgRVhQRUNUX0NBTEwoaW1wbE1vY2ss
IGZsdXNoKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gVGVhcmRvd24gVGV4dHVyZU1hbmFnZXIu
CiAgICAgICAgICAgICAgICAgRVhQRUNUX0NBTEwoYWxsb2NhdG9yTW9jaywgZGVsZXRlVGV4dHVy
ZShmcm9udFRleHR1cmVJZCwgc2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKTsKQEAgLTE1
Niw2ICsxNTQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICBjYW52YXMtPnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoaW1wbENvbnRleHQuZ2V0KCksIHVwZGF0ZXIpOwogICAgICAgICAgICAg
Y2FudmFzLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CiAKKyAgICAgICAgICAg
IHVwZGF0ZXIudXBkYXRlKGltcGxDb250ZXh0LmdldCgpLCAxKTsKKwogICAgICAgICAgICAgaWYg
KHRocmVhZGVkKQogICAgICAgICAgICAgICAgIEVYUEVDVF9FUShmcm9udFRleHR1cmVJZCwgc3Rh
dGljX2Nhc3Q8Q0NUZXh0dXJlTGF5ZXJJbXBsKj4obGF5ZXJJbXBsLmdldCgpKS0+dGV4dHVyZUlk
KCkpOwogICAgICAgICAgICAgZWxzZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136274</attachid>
            <date>2012-04-09 11:18:12 -0700</date>
            <delta_ts>2012-04-09 13:58:10 -0700</delta_ts>
            <desc>with proper flushing</desc>
            <filename>bug-83392-20120409111811.patch</filename>
            <type>text/plain</type>
            <size>13633</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFkNWYwNTA5Y2E3OThi
YzcwM2IyYzhmNzFlMmY4ZTE1MDVlNzkxOC4uYWNlYzQxMWZkYjY2YmJmZjE5NTEwY2JlNTBlNGVh
M2UyMjk0OTBlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA0LTA2ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBU
ZXh0dXJlIGNvcGllcyBzaG91bGQgaGFwcGVuIGFmdGVyIGluY3JlbWVudGFsIHVwZGF0ZXMgdG8g
cHJlc2VydmUgY29tbWl0IGF0b21pY2l0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODMzOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIGVucXVldWVzIHRleHR1cmUgY29weSBvcGVyYXRpb25zIGlu
IHRoZSBDQ1RleHR1cmVVcGRhdGVyJ3MgbGlzdCBpbnN0ZWFkIG9mIGV2YWx1YXRpbmcgdGhlbSBp
bW1lZGlhdGVseSBzbworICAgICAgICBpZiB0aGUgdXBkYXRlIGlzIHNwcmVhZCBvdmVyIG11bHRp
cGxlIGZyYW1lcyB3ZSBjYW4gcHJvcGVybHkgZGVmZXIgdGhlIHRleHR1cmUgY29weSB1bnRpbCB0
aGUgZW5kLiBPdGhlcndpc2UsCisgICAgICAgIHRoZSB0ZXh0dXJlIGNvcHkgZm9yIFdlYkdMIC8g
Q2FudmFzIDJEIGNvbnRlbnQgaGFwcGVucyBiZWZvcmUgdGhlIGNvbW1pdCBjb21wbGV0ZXMgYW5k
IHRoZSBjb21wb3NpdG9yIG1pZ2h0IHBpY2sKKyAgICAgICAgdXAgYSBmcmFtZSBmb3IgdGhlIGNh
bnZhcyB0aGF0J3MgImFoZWFkIiBvZiB0aGUgY29udGVudCBhcm91bmQgaXQuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExh
eWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xM
YXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZFVwZGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RleHR1cmVVcGRhdGVyOjphcHBlbmRQYXJ0aWFsVXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kQ29weSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjpoYXNNb3JlVXBkYXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUZXh0dXJlVXBkYXRlcjo6Y2xlYXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKENDVGV4dHVyZVVw
ZGF0ZXIpOgorICAgICAgICAoVXBkYXRlRW50cnkpOgorICAgICAgICAoQ29weUVudHJ5KToKKwog
MjAxMi0wNC0wNiAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IHpvb20gb24gdmVydGljYWwgbW91c2V3aGVlbCBpbiBUaW1lbGlu
ZSBvdmVydmlldwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBmYjU5YzM5YTMxOGNlNWFi
OWZhMzc4MTg0ZGM4YTY3ZmIxZDJkYzE1Li5mZTk0MDM2MjY1OGRmNGZlNGVjYjM0OWQyMDhmOGQ1
ZDY5M2Y3MWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisy
MDEyLTA0LTA2ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgW2Nocm9taXVtXSBUZXh0dXJlIGNvcGllcyBzaG91bGQgaGFwcGVuIGFmdGVyIGluY3JlbWVu
dGFsIHVwZGF0ZXMgdG8gcHJlc2VydmUgY29tbWl0IGF0b21pY2l0eQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODMzOTIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NhbnZhczJETGF5ZXJDaHJv
bWl1bVRlc3QuY3BwOgorCiAyMDEyLTA0LTA5ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBjdWxsaW5nIHdvcmsgd2l0aCBjbGlw
cGVkIHJlY3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAppbmRleCA1ZTM1
MTY3NjAyZjc2ZmZlNzk5MjdjNGE5MzlhZDA5MTdlNzY2MzBiLi5jYTU1NWZjZmY3YjIwMmI5Yjcy
MmE2ZTFkODJmNTRjNTBlYmMxZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTEzNSw4ICsxMzUsNyBAQCB2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dAogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2Zyb250VGV4dHVyZS0+YWxsb2NhdGUodXBkYXRlci5hbGxvY2F0
b3IoKSk7Ci0gICAgdXBkYXRlci5jb3BpZXIoKS0+Y29weVRleHR1cmUoY29udGV4dCwgbV9iYWNr
VGV4dHVyZUlkLCBtX2Zyb250VGV4dHVyZS0+dGV4dHVyZUlkKCksIG1fc2l6ZSk7Ci0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmZsdXNoKCkpOworICAgIHVwZGF0ZXIuYXBwZW5kQ29weShtX2Jh
Y2tUZXh0dXJlSWQsIG1fZnJvbnRUZXh0dXJlLT50ZXh0dXJlSWQoKSwgbV9zaXplKTsKIH0KIAog
dm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwq
IGxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMTJiMmM1ZDQ5YmZi
M2MyYWZkMjk1ODU5NzhjYWIwN2ZkNTg1M2I4MS4uZjFmMTBlOTdiYTBiNWY5OWM1NGYyMDIyMTEx
OGYyYTM0YzllMDllYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0yMzIs
OSArMjMyLDkgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmUKICAgICAgICAgICAgICAgICBDUkFT
SCgpOwogCiAgICAgICAgICAgICBpZiAodGlsZS0+bV9wYXJ0aWFsVXBkYXRlKQotICAgICAgICAg
ICAgICAgIHVwZGF0ZXIuYXBwZW5kUGFydGlhbCh0aWxlLT50ZXh0dXJlKCksIHNvdXJjZVJlY3Qs
IGRlc3RSZWN0KTsKKyAgICAgICAgICAgICAgICB1cGRhdGVyLmFwcGVuZFBhcnRpYWxVcGRhdGUo
dGlsZS0+dGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgdXBkYXRlci5hcHBlbmQodGlsZS0+dGV4dHVyZSgpLCBzb3VyY2VS
ZWN0LCBkZXN0UmVjdCk7CisgICAgICAgICAgICAgICAgdXBkYXRlci5hcHBlbmRVcGRhdGUodGls
ZS0+dGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CiAgICAgICAgIH0KICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDc0ZTRhMWFiODc5YjczM2UyNDA2
NDgxODNiZGZmNDY5MWE5MTVjM2EuLjg3ZDAxNjg4NjZjMGE0NjNmYTJlM2I2NWUxNTQ5OWI0N2Rm
MjVlNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcApAQCAtODQsMTQgKzg0LDE0
IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBD
Q09jY2x1c2lvblRyYWNrZXIqIC8qIG9jY2x1CiAgICAgbV9jb250ZXh0TG9zdCA9IGNvbnRleHQo
KS0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwogfQogCi12b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQ0NUZXh0
dXJlVXBkYXRlciYgdXBkYXRlcikKK3ZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYgdXBk
YXRlcikKIHsKICAgICBpZiAoIW1fZHJhd2luZ0J1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV90ZXh0dXJlSWQgPSBtX2RyYXdpbmdCdWZmZXItPmZyb250Q29sb3JCdWZmZXIoKTsKICAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyLT5yZXF1aXJlc0NvcHlGcm9tQmFja1RvRnJvbnRCdWZmZXIo
KSkKLSAgICAgICAgdXBkYXRlci5jb3BpZXIoKS0+Y29weVRleHR1cmUoY29udGV4dCwgbV9kcmF3
aW5nQnVmZmVyLT5jb2xvckJ1ZmZlcigpLCBtX3RleHR1cmVJZCwgYm91bmRzKCkpOworICAgICAg
ICB1cGRhdGVyLmFwcGVuZENvcHkobV9kcmF3aW5nQnVmZmVyLT5jb2xvckJ1ZmZlcigpLCBtX3Rl
eHR1cmVJZCwgYm91bmRzKCkpOwogfQogCiB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6cHVzaFBy
b3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0
ZXIuY3BwCmluZGV4IDBjZTBmNmQxMDk4YTczOTc3ZjNiYWY4MjMyZjcyMTZiMDVlN2FkN2UuLjQw
MTJkYTQ1MWYyMTRlZWNlNDkxYWE2MDgwMGIyYjAxYzViNTBkMjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAi
TWFuYWdlZFRleHR1cmUuaCIKKyNpbmNsdWRlICJUZXh0dXJlQ29waWVyLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiAKQEAgLTQ5LDMwICs1MCwzOSBAQCBDQ1RleHR1cmVVcGRhdGVyOjp+Q0NU
ZXh0dXJlVXBkYXRlcigpCiB7CiB9CiAKLXZvaWQgQ0NUZXh0dXJlVXBkYXRlcjo6YXBwZW5kKExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBWZWN0b3I8VXBkYXRlRW50cnk+JiBlbnRy
aWVzKQordm9pZCBDQ1RleHR1cmVVcGRhdGVyOjphcHBlbmRVcGRhdGUoTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QsIFZlY3RvcjxVcGRhdGVFbnRyeT4mIGVudHJpZXMpCiB7CiAgICAg
QVNTRVJUKHRleHR1cmUpOwogCiAgICAgVXBkYXRlRW50cnkgZW50cnk7Ci0gICAgZW50cnkubV90
ZXh0dXJlID0gdGV4dHVyZTsKLSAgICBlbnRyeS5tX3NvdXJjZVJlY3QgPSBzb3VyY2VSZWN0Owot
ICAgIGVudHJ5Lm1fZGVzdFJlY3QgPSBkZXN0UmVjdDsKKyAgICBlbnRyeS50ZXh0dXJlID0gdGV4
dHVyZTsKKyAgICBlbnRyeS5zb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKKyAgICBlbnRyeS5kZXN0
UmVjdCA9IGRlc3RSZWN0OwogICAgIGVudHJpZXMuYXBwZW5kKGVudHJ5KTsKIH0KIAotdm9pZCBD
Q1RleHR1cmVVcGRhdGVyOjphcHBlbmQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4
dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3Qp
Cit2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZFVwZGF0ZShMYXllclRleHR1cmVVcGRhdGVy
OjpUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBhcHBlbmQodGV4dHVyZSwgc291cmNlUmVjdCwgZGVzdFJl
Y3QsIG1fZW50cmllcyk7CisgICAgYXBwZW5kVXBkYXRlKHRleHR1cmUsIHNvdXJjZVJlY3QsIGRl
c3RSZWN0LCBtX2VudHJpZXMpOwogfQogCi12b2lkIENDVGV4dHVyZVVwZGF0ZXI6OmFwcGVuZFBh
cnRpYWwoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIENDVGV4dHVyZVVw
ZGF0ZXI6OmFwcGVuZFBhcnRpYWxVcGRhdGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSog
dGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QpCiB7Ci0gICAgYXBwZW5kKHRleHR1cmUsIHNvdXJjZVJlY3QsIGRlc3RSZWN0LCBtX3BhcnRp
YWxFbnRyaWVzKTsKKyAgICBhcHBlbmRVcGRhdGUodGV4dHVyZSwgc291cmNlUmVjdCwgZGVzdFJl
Y3QsIG1fcGFydGlhbEVudHJpZXMpOworfQorCit2b2lkIENDVGV4dHVyZVVwZGF0ZXI6OmFwcGVu
ZENvcHkodW5zaWduZWQgc291cmNlVGV4dHVyZSwgdW5zaWduZWQgZGVzdFRleHR1cmUsIGNvbnN0
IEludFNpemUmIHNpemUpCit7CisgICAgQ29weUVudHJ5IGNvcHk7CisgICAgY29weS5zb3VyY2VU
ZXh0dXJlID0gc291cmNlVGV4dHVyZTsKKyAgICBjb3B5LmRlc3RUZXh0dXJlID0gZGVzdFRleHR1
cmU7CisgICAgY29weS5zaXplID0gc2l6ZTsKKyAgICBtX2NvcHlFbnRyaWVzLmFwcGVuZChjb3B5
KTsKIH0KIAogYm9vbCBDQ1RleHR1cmVVcGRhdGVyOjpoYXNNb3JlVXBkYXRlcygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fZW50cmllcy5zaXplKCkgfHwgbV9wYXJ0aWFsRW50cmllcy5zaXplKCk7
CisgICAgcmV0dXJuIG1fZW50cmllcy5zaXplKCkgfHwgbV9wYXJ0aWFsRW50cmllcy5zaXplKCkg
fHwgbV9jb3B5RW50cmllcy5zaXplKCk7CiB9CiAKIGJvb2wgQ0NUZXh0dXJlVXBkYXRlcjo6dXBk
YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBzaXplX3QgY291bnQpCkBAIC04MSw3ICs5
MSw3IEBAIGJvb2wgQ0NUZXh0dXJlVXBkYXRlcjo6dXBkYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBzaXplX3QgY291bnQpCiAgICAgc2l6ZV90IG1heEluZGV4ID0gbWluKG1fZW50cnlJ
bmRleCArIGNvdW50LCBtX2VudHJpZXMuc2l6ZSgpKTsKICAgICBmb3IgKGluZGV4ID0gbV9lbnRy
eUluZGV4OyBpbmRleCA8IG1heEluZGV4OyArK2luZGV4KSB7CiAgICAgICAgIFVwZGF0ZUVudHJ5
JiBlbnRyeSA9IG1fZW50cmllc1tpbmRleF07Ci0gICAgICAgIGVudHJ5Lm1fdGV4dHVyZS0+dXBk
YXRlUmVjdChjb250ZXh0LCBtX2FsbG9jYXRvciwgZW50cnkubV9zb3VyY2VSZWN0LCBlbnRyeS5t
X2Rlc3RSZWN0KTsKKyAgICAgICAgZW50cnkudGV4dHVyZS0+dXBkYXRlUmVjdChjb250ZXh0LCBt
X2FsbG9jYXRvciwgZW50cnkuc291cmNlUmVjdCwgZW50cnkuZGVzdFJlY3QpOwogICAgIH0KIAog
ICAgIGJvb2wgbW9yZVVwZGF0ZXMgPSBtYXhJbmRleCA8IG1fZW50cmllcy5zaXplKCk7CkBAIC05
OSw4ICsxMDksMTggQEAgYm9vbCBDQ1RleHR1cmVVcGRhdGVyOjp1cGRhdGUoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsIHNpemVfdCBjb3VudCkKIAogICAgIGZvciAoaW5kZXggPSAwOyBpbmRl
eCA8IG1fcGFydGlhbEVudHJpZXMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIFVwZGF0ZUVu
dHJ5JiBlbnRyeSA9IG1fcGFydGlhbEVudHJpZXNbaW5kZXhdOwotICAgICAgICBlbnRyeS5tX3Rl
eHR1cmUtPnVwZGF0ZVJlY3QoY29udGV4dCwgbV9hbGxvY2F0b3IsIGVudHJ5Lm1fc291cmNlUmVj
dCwgZW50cnkubV9kZXN0UmVjdCk7CisgICAgICAgIGVudHJ5LnRleHR1cmUtPnVwZGF0ZVJlY3Qo
Y29udGV4dCwgbV9hbGxvY2F0b3IsIGVudHJ5LnNvdXJjZVJlY3QsIGVudHJ5LmRlc3RSZWN0KTsK
KyAgICB9CisKKyAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBtX2NvcHlFbnRyaWVzLnNpemUo
KTsgKytpbmRleCkgeworICAgICAgICBDb3B5RW50cnkmIGNvcHlFbnRyeSA9IG1fY29weUVudHJp
ZXNbaW5kZXhdOworICAgICAgICBtX2NvcGllci0+Y29weVRleHR1cmUoY29udGV4dCwgY29weUVu
dHJ5LnNvdXJjZVRleHR1cmUsIGNvcHlFbnRyeS5kZXN0VGV4dHVyZSwgY29weUVudHJ5LnNpemUp
OwogICAgIH0KKyAgICAvLyBJZiB3ZSd2ZSBwZXJmb3JtZWQgYW55IHRleHR1cmUgY29waWVzLCB3
ZSBuZWVkIHRvIGluc2VydCBhIGZsdXNoIGhlcmUgaW50byB0aGUgY29tcG9zaXRvciBjb250ZXh0
CisgICAgLy8gYmVmb3JlIGxldHRpbmcgdGhlIG1haW4gdGhyZWFkIHByb2NlZWQgYXMgaXQgbWF5
IG1ha2UgZHJhdyBjYWxscyB0byB0aGUgc291cmNlIHRleHR1cmUgb2Ygb25lIG9mCisgICAgLy8g
b3VyIGNvcHkgb3BlcmF0aW9ucy4KKyAgICBpZiAobV9jb3B5RW50cmllcy5zaXplKCkpCisgICAg
ICAgIGNvbnRleHQtPmZsdXNoKCk7CiAKICAgICAvLyBJZiBubyBlbnRyaWVzIGxlZnQgdG8gcHJv
Y2VzcywgYXV0by1jbGVhci4KICAgICBjbGVhcigpOwpAQCAtMTEyLDYgKzEzMiw3IEBAIHZvaWQg
Q0NUZXh0dXJlVXBkYXRlcjo6Y2xlYXIoKQogICAgIG1fZW50cnlJbmRleCA9IDA7CiAgICAgbV9l
bnRyaWVzLmNsZWFyKCk7CiAgICAgbV9wYXJ0aWFsRW50cmllcy5jbGVhcigpOworICAgIG1fY29w
eUVudHJpZXMuY2xlYXIoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oCmlu
ZGV4IGQyOWM2NTg2MWU5MzIzZWNmZjgyZGU0MGJjZGJmN2UyNDZiNDk3MDcuLmEwODZiYWJjZDU2
NzRiOTU4ZDE0ODkwZGFhODJmN2ZmMDc5ZGFiYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRh
dGVyLmgKQEAgLTQxLDggKzQxLDkgQEAgcHVibGljOgogICAgIENDVGV4dHVyZVVwZGF0ZXIoVGV4
dHVyZUFsbG9jYXRvciosIFRleHR1cmVDb3BpZXIqKTsKICAgICB+Q0NUZXh0dXJlVXBkYXRlcigp
OwogCi0gICAgdm9pZCBhcHBlbmQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKLSAgICB2b2lk
IGFwcGVuZFBhcnRpYWwoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICB2b2lkIGFwcGVu
ZFVwZGF0ZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZvaWQgYXBwZW5kUGFydGlh
bFVwZGF0ZShMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZvaWQgYXBwZW5kQ29weSh1
bnNpZ25lZCBzb3VyY2VUZXh0dXJlLCB1bnNpZ25lZCBkZXN0VGV4dHVyZSwgY29uc3QgSW50U2l6
ZSYpOwogCiAgICAgYm9vbCBoYXNNb3JlVXBkYXRlcygpIGNvbnN0OwogCkBAIC01MiwyMiArNTMs
MjggQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIFRleHR1cmVBbGxvY2F0b3Iq
IGFsbG9jYXRvcigpIHsgcmV0dXJuIG1fYWxsb2NhdG9yOyB9Ci0gICAgVGV4dHVyZUNvcGllciog
Y29waWVyKCkgeyByZXR1cm4gbV9jb3BpZXI7IH0KIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgVXBk
YXRlRW50cnkgewotICAgICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKiBtX3RleHR1
cmU7Ci0gICAgICAgIEludFJlY3QgbV9zb3VyY2VSZWN0OwotICAgICAgICBJbnRSZWN0IG1fZGVz
dFJlY3Q7CisgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUqIHRleHR1cmU7Cisg
ICAgICAgIEludFJlY3Qgc291cmNlUmVjdDsKKyAgICAgICAgSW50UmVjdCBkZXN0UmVjdDsKICAg
ICB9OwogCi0gICAgc3RhdGljIHZvaWQgYXBwZW5kKExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwg
VmVjdG9yPFVwZGF0ZUVudHJ5PiYpOworICAgIHN0cnVjdCBDb3B5RW50cnkgeworICAgICAgICBJ
bnRTaXplIHNpemU7CisgICAgICAgIHVuc2lnbmVkIHNvdXJjZVRleHR1cmU7CisgICAgICAgIHVu
c2lnbmVkIGRlc3RUZXh0dXJlOworICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBhcHBlbmRVcGRh
dGUoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBWZWN0b3I8VXBkYXRlRW50cnk+Jik7CiAKICAg
ICBUZXh0dXJlQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKICAgICBUZXh0dXJlQ29waWVyKiBtX2Nv
cGllcjsKICAgICBzaXplX3QgbV9lbnRyeUluZGV4OwogICAgIFZlY3RvcjxVcGRhdGVFbnRyeT4g
bV9lbnRyaWVzOwogICAgIFZlY3RvcjxVcGRhdGVFbnRyeT4gbV9wYXJ0aWFsRW50cmllczsKKyAg
ICBWZWN0b3I8Q29weUVudHJ5PiBtX2NvcHlFbnRyaWVzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVz
dC5jcHAKaW5kZXggMjY0NzVjZTM2OWU1ZTIzMzcyMDIxMjFjODY3YjAyYzQyZDFiNjM5OC4uMTJl
MzdjODZjZGYxMjkxZTAyN2Q4Y2Q0ZjZlMTNiMjA0ZWQxNjE2MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3Qu
Y3BwCkBAIC05Nyw4ICs5Nyw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBtYWluQ29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRl
R3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IE1vY2tDYW52YXNDb250
ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwog
ICAgICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGltcGxDb250ZXh0ID0gR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9w
dFB0cihuZXcgTW9ja0NhbnZhc0NvbnRleHQoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJE
aXJlY3RseVRvSG9zdFdpbmRvdyk7CiAKLSAgICAgICAgTW9ja0NhbnZhc0NvbnRleHQmIGltcGxN
b2NrID0gKnN0YXRpY19jYXN0PE1vY2tDYW52YXNDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoaW1wbENvbnRleHQuZ2V0KCkpKTsK
ICAgICAgICAgTW9ja0NhbnZhc0NvbnRleHQmIG1haW5Nb2NrID0gKnN0YXRpY19jYXN0PE1vY2tD
YW52YXNDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhp
Y3NDb250ZXh0M0QobWFpbkNvbnRleHQuZ2V0KCkpKTsKKyAgICAgICAgTW9ja0NhbnZhc0NvbnRl
eHQmIGltcGxNb2NrID0gKnN0YXRpY19jYXN0PE1vY2tDYW52YXNDb250ZXh0Kj4oR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoaW1wbENvbnRleHQu
Z2V0KCkpKTsKIAogICAgICAgICBNb2NrVGV4dHVyZUFsbG9jYXRvciBhbGxvY2F0b3JNb2NrOwog
ICAgICAgICBNb2NrVGV4dHVyZUNvcGllciBjb3BpZXJNb2NrOwpAQCAtMTU2LDYgKzE1Niw4IEBA
IHByb3RlY3RlZDoKICAgICAgICAgICAgIGNhbnZhcy0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNl
cyhpbXBsQ29udGV4dC5nZXQoKSwgdXBkYXRlcik7CiAgICAgICAgICAgICBjYW52YXMtPnB1c2hQ
cm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKIAorICAgICAgICAgICAgdXBkYXRlci51cGRh
dGUoaW1wbENvbnRleHQuZ2V0KCksIDEpOworCiAgICAgICAgICAgICBpZiAodGhyZWFkZWQpCiAg
ICAgICAgICAgICAgICAgRVhQRUNUX0VRKGZyb250VGV4dHVyZUlkLCBzdGF0aWNfY2FzdDxDQ1Rl
eHR1cmVMYXllckltcGwqPihsYXllckltcGwuZ2V0KCkpLT50ZXh0dXJlSWQoKSk7CiAgICAgICAg
ICAgICBlbHNlCg==
</data>
<flag name="review"
          id="140999"
          type_id="1"
          status="+"
          setter="enne"
    />
    <flag name="commit-queue"
          id="141038"
          type_id="3"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>