<?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>54315</bug_id>
          
          <creation_ts>2011-02-11 14:57:18 -0800</creation_ts>
          <short_desc>[chromium] Update texture for ContentLayerChromiums in draw() call instead of updateContents..() call</short_desc>
          <delta_ts>2011-03-03 10:52:44 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>54047</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>kbr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>350066</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-11 14:57:18 -0800</bug_when>
    <thetext>[chromium] Update texture for ContentLayerChromiums in draw() call instead of updateContents..() call</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350069</commentid>
    <comment_count>1</comment_count>
      <attachid>82185</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-11 14:59:04 -0800</bug_when>
    <thetext>Created attachment 82185
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350071</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-11 15:02:11 -0800</bug_when>
    <thetext>Attachment 82185 did not build on chromium:
Build output: http://queues.webkit.org/results/7868723</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350078</commentid>
    <comment_count>3</comment_count>
      <attachid>82188</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-11 15:06:13 -0800</bug_when>
    <thetext>Created attachment 82188
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350190</commentid>
    <comment_count>4</comment_count>
      <attachid>82188</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-02-11 18:04:03 -0800</bug_when>
    <thetext>Comment on attachment 82188
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:299
&gt; +        SkAutoLockPixels lock(bitmap);
&gt; +        // FIXME: do we need to support more image configurations?
&gt; +        if (bitmap.config() == SkBitmap::kARGB_8888_Config)
&gt; +            pixels = bitmap.getPixels();

This looks unsafe. The SkAutoLockPixels goes out of scope here but pixels is used later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351044</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-14 18:41:04 -0800</bug_when>
    <thetext>Good catch, that is unsafe.  Vangelis pointed out some other issues with this patch offline - I&apos;ll try to update this soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351809</commentid>
    <comment_count>6</comment_count>
      <attachid>82569</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-15 18:37:31 -0800</bug_when>
    <thetext>Created attachment 82569
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351822</commentid>
    <comment_count>7</comment_count>
      <attachid>82572</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-15 19:17:18 -0800</bug_when>
    <thetext>Created attachment 82572
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351825</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-15 19:24:07 -0800</bug_when>
    <thetext>The general idea is that ContentLayerChromium::updateContentsIfNeeded() updates the software backing bitmap (which is a skia::PlatformCanvas for content layers on windows+linux and a Vector&lt;uint8_t&gt; for content layers on mac + image layers on all platforms) and sets the m_updateUpdateRect to the portion of the texture that needs an update.  The actual texture upload happens in updateTextureRectIfNeeded() which is called by draw() (for normal layers) and in bindContentsTexture() (needed for mask layers which don&apos;t draw themselves).  The upload function checks if the backing texture is available and uploads either the dirty rect or the entire texture as needed.  I&apos;ve also added a check for m_skipsDraw in bindContentsTexture() so we don&apos;t attempt to bind textures as masks for layers that we can&apos;t render.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351826</commentid>
    <comment_count>9</comment_count>
      <attachid>82573</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-15 19:25:18 -0800</bug_when>
    <thetext>Created attachment 82573
add check in unreserveContentsTexture() to match the one in bindContentsTexture()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351900</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-15 23:05:26 -0800</bug_when>
    <thetext>Attachment 82573 did not build on chromium:
Build output: http://queues.webkit.org/results/7920168</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352313</commentid>
    <comment_count>11</comment_count>
      <attachid>82573</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-02-16 13:55:13 -0800</bug_when>
    <thetext>Comment on attachment 82573
add check in unreserveContentsTexture() to match the one in bindContentsTexture()

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

This looks good to me. One further comment about safety of locking and unlocking the bitmap. You might want to add a simple file-local class which only conditionally unlocks the pixels in its destructor. Let me know if you&apos;d like me to r+ this version or want to fix the Mac compilation failure first.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:335
&gt;          return;

I think we&apos;d need to potentially unlock the bitmap&apos;s pixels here.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:347
&gt; +        ptrdiff_t srcOffset = (m_uploadUpdateRect.y() + row) * srcStride + m_uploadUpdateRect.x() * 4;
&gt; +        ptrdiff_t destOffset = row * destStride;

Might be useful to have some assertions here to make sure the copies don&apos;t go out of bounds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352340</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-16 14:17:24 -0800</bug_when>
    <thetext>Thanks for looking!  I&apos;ll figure out the compile error on mac and update the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352502</commentid>
    <comment_count>13</comment_count>
      <attachid>82730</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-16 17:56:01 -0800</bug_when>
    <thetext>Created attachment 82730
fixes mac compile, adds helper for bitmap locking/unlocking</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352638</commentid>
    <comment_count>14</comment_count>
      <attachid>82730</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-02-17 00:13:24 -0800</bug_when>
    <thetext>Comment on attachment 82730
fixes mac compile, adds helper for bitmap locking/unlocking

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

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:311
&gt; +    SkBitmapConditionalAutoLockerPixels()

Can&apos;t you use Skia&apos;s SkAutoLockPixels ?

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:333
&gt; +void ContentLayerChromium::updateTextureRectIfNeeded()

nit:  rename to updateTextureIfNeeded() since you don&apos;t pass a rect to the function anymore?

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:370
&gt; +    Vector&lt;uint8_t&gt; uploadBuffer(m_uploadUpdateRect.height() * destStride);

In the presumably common case where your uploadUpdateRect has the same dimensions as your texture (full layer invalidate), you could avoid copying to the uploadBuffer and do the texSubImage2D call directly from the pixel data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353184</commentid>
    <comment_count>15</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-17 14:49:22 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 82730 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82730&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:311
&gt; &gt; +    SkBitmapConditionalAutoLockerPixels()
&gt; 
&gt; Can&apos;t you use Skia&apos;s SkAutoLockPixels ?

The problem is I have to have the SkBitmap when constructing the SkAutoLockPixels and I couldn&apos;t get the blocks to line up nicely with that constraint. This helper lets me lock the pixels whenever and ensures that there&apos;s an unlock made before the function returns no matter when the lock happens.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:333
&gt; &gt; +void ContentLayerChromium::updateTextureRectIfNeeded()
&gt; 
&gt; nit:  rename to updateTextureIfNeeded() since you don&apos;t pass a rect to the function anymore?

good idea, will do

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:370
&gt; &gt; +    Vector&lt;uint8_t&gt; uploadBuffer(m_uploadUpdateRect.height() * destStride);
&gt; 
&gt; In the presumably common case where your uploadUpdateRect has the same dimensions as your texture (full layer invalidate), you could avoid copying to the uploadBuffer and do the texSubImage2D call directly from the pixel data.


also a good idea - should be easy to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353190</commentid>
    <comment_count>16</comment_count>
      <attachid>82866</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-17 15:04:26 -0800</bug_when>
    <thetext>Created attachment 82866
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353192</commentid>
    <comment_count>17</comment_count>
      <attachid>82868</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-17 15:12:05 -0800</bug_when>
    <thetext>Created attachment 82868
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353205</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-17 15:25:39 -0800</bug_when>
    <thetext>This avoids allocating an extra upload bitmap if the upload region&apos;s stride matches the texture and adds some assertions to try to keep the offsets from going out of bounds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353246</commentid>
    <comment_count>19</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-02-17 16:52:22 -0800</bug_when>
    <thetext>Vangelis, can you please do the unofficial review of this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353431</commentid>
    <comment_count>20</comment_count>
      <attachid>82868</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-02-17 22:47:41 -0800</bug_when>
    <thetext>Comment on attachment 82868
Patch

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

unofficial r+ from me

&gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:102
&gt; +    if (m_uploadBufferSize != bitmapSize) {

nit: per webkit style, you shouldn&apos;t be using braces here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353730</commentid>
    <comment_count>21</comment_count>
      <attachid>82868</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-02-18 12:00:45 -0800</bug_when>
    <thetext>Comment on attachment 82868
Patch

Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353822</commentid>
    <comment_count>22</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-18 14:18:19 -0800</bug_when>
    <thetext>Committed r79033: &lt;http://trac.webkit.org/changeset/79033&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361186</commentid>
    <comment_count>23</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-03-02 16:54:22 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=82868&amp;action=review

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:375
&gt; +    uint8_t* uploadPixels = pixels + srcStride * m_uploadUpdateRect.x();

Shouldn&apos;t this be something like pixels + srcStride * m_uploadUpdateRect.y() + 4*m_uploadUpdateRect.x() instead ?

I&apos;m getting a crash in glTexSubImage2D where the pixels argument points out of memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361188</commentid>
    <comment_count>24</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-02 16:57:33 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82868&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:375
&gt; &gt; +    uint8_t* uploadPixels = pixels + srcStride * m_uploadUpdateRect.x();
&gt; 
&gt; Shouldn&apos;t this be something like pixels + srcStride * m_uploadUpdateRect.y() + 4*m_uploadUpdateRect.x() instead ?
&gt; 
&gt; I&apos;m getting a crash in glTexSubImage2D where the pixels argument points out of memory.

Good point - this math is totally wrong for non-zero x().  Yikes.

What&apos;s the case that fails?  Our testing is obviously insufficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361209</commentid>
    <comment_count>25</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-03-02 17:10:05 -0800</bug_when>
    <thetext>I don&apos;t have an exact repro case... I was tracking something else and selection on the page was causing garbage to be painted, and then it crashed into the debugger which let me debug it. I&apos;ll update the bug if I have clear repro steps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361227</commentid>
    <comment_count>26</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-02 17:19:20 -0800</bug_when>
    <thetext>Actually, if there&apos;s an x offset to the upload rect then the strides won&apos;t match and should fall into the row-by-row copy path which seems OK.

This code would be wrong if there was a non-zero y offset, but I think in that case it&apos;d be more likely that it would upload pixels at the wrong offset rather than pure garbage.  I need to take a closer look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361737</commentid>
    <comment_count>27</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-03-03 10:52:44 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; Actually, if there&apos;s an x offset to the upload rect then the strides won&apos;t match and should fall into the row-by-row copy path which seems OK.
&gt; 
&gt; This code would be wrong if there was a non-zero y offset, but I think in that case it&apos;d be more likely that it would upload pixels at the wrong offset rather than pure garbage.  I need to take a closer look.

For what it&apos;s worth, I&apos;m in the middle of refactoring/removing that code to use the row-by-row copy logic in LayerTilerChromium.cpp instead.  (Oh, duplicated logic.) I wouldn&apos;t spend too much time investigating.

Also, selecting something on the page and causing garbage could be due to https://bugs.webkit.org/show_bug.cgi?id=55679 if you&apos;re running a webkit revision after r80081.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82185</attachid>
            <date>2011-02-11 14:59:04 -0800</date>
            <delta_ts>2011-02-11 15:06:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54315-20110211145903.patch</filename>
            <type>text/plain</type>
            <size>17658</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgwODIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxMzM2ODcwMjc2ODc3OWFl
ZjIwYmIyOTYxNjViMTA2YmU0N2MzYTdkLi5iM2M1NDU5YzBlMjFkM2I3NGI5YWQzMmJkNjE0ODVj
MTFlMzJhYzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDItMTEgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFVwZGF0ZSB0ZXh0dXJlIGZvciBD
b250ZW50TGF5ZXJDaHJvbWl1bXMgaW4gZHJhdygpIGNhbGwgaW5zdGVhZCBvZiB1cGRhdGVDb250
ZW50cy4uKCkgY2FsbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTQzMTUKKworICAgICAgICBUaGlzIGRlZmVycyBhbGwgb3BlcmF0aW9ucyBvbiB0aGUg
Y29tcG9zaXRvcidzIEdMIGNvbnRleHQgdW50aWwgdGhlIGRyYXcoKSBjYWxsLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnJlcXVpcmVzQ2xpcHBlZFVw
ZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0
ZUNvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1
bTo6dXBkYXRlVGV4dHVyZVJlY3RJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
TGF5ZXJDaHJvbWl1bTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VM
YXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkpOgorCiAyMDExLTAyLTA4ICBEaW1p
dHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
YTM4ZjZiZDIxMjY5MGEyOGY5ODM4ZGI4OTYzNWE4NDE0Y2I2ZDc3ZS4uNDE3NWE0NzI0ODBmMDRi
MTU0YmJhYzlmOTBjOGQ5NWFkMjgzYTM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcApAQCAtMTU0LDkgKzE1NCw5IEBAIGJvb2wgQ29udGVudExheWVyQ2hyb21pdW06OnJl
cXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKSBjb25zdAogICAgIC8vIG9uZSBvZiB0aGUgbGF5ZXIn
cyBkaW1lbnNpb25zIGlzIGxhcmdlciB0aGFuIDIwMDAgcGl4ZWxzIG9yIHRoZSBzaXplIG9mCiAg
ICAgLy8gc3VyZmFjZSBpdCdzIHJlbmRlcmluZyBpbnRvLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IG1l
YXN1cmUgdW50aWwgbGF5ZXIgdGlsaW5nIGlzIGltcGxlbWVudGVkLgogICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4TGF5ZXJTaXplID0gMjAwMDsKLSAgICByZXR1cm4gKG1fYm91bmRzLndpZHRoKCkg
PiBtYXgobWF4TGF5ZXJTaXplLCBtX3RhcmdldFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCku
d2lkdGgoKSkKLSAgICAgICAgICAgIHx8IG1fYm91bmRzLmhlaWdodCgpID4gbWF4KG1heExheWVy
U2l6ZSwgbV90YXJnZXRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLmhlaWdodCgpKQotICAg
ICAgICAgICAgfHwgIWxheWVyUmVuZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShtX2JvdW5kcykp
OworICAgIHJldHVybiAoYm91bmRzKCkud2lkdGgoKSA+IG1heChtYXhMYXllclNpemUsIG1fdGFy
Z2V0UmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKS53aWR0aCgpKQorICAgICAgICAgICAgfHwg
Ym91bmRzKCkuaGVpZ2h0KCkgPiBtYXgobWF4TGF5ZXJTaXplLCBtX3RhcmdldFJlbmRlclN1cmZh
Y2UtPmNvbnRlbnRSZWN0KCkuaGVpZ2h0KCkpCisgICAgICAgICAgICB8fCAhbGF5ZXJSZW5kZXJl
cigpLT5jaGVja1RleHR1cmVTaXplKGJvdW5kcygpKSk7CiB9CiAKIHZvaWQgQ29udGVudExheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCkBAIC0xNjksMTIgKzE2OSw4IEBAIHZv
aWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAKICAgICBB
U1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKIAotICAgIHZvaWQqIHBpeGVscyA9IDA7CiAgICAgSW50
UmVjdCBkaXJ0eVJlY3Q7Ci0gICAgSW50UmVjdCB1cGRhdGVSZWN0OwotICAgIEludFNpemUgcmVx
dWlyZWRUZXh0dXJlU2l6ZTsKLSAgICBJbnRTaXplIGJpdG1hcFNpemU7Ci0gICAgSW50UmVjdCBi
b3VuZHNSZWN0KEludFBvaW50KDAsIDApLCBtX2JvdW5kcyk7CisgICAgSW50UmVjdCBib3VuZHNS
ZWN0KEludFBvaW50KDAsIDApLCBib3VuZHMoKSk7CiAKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRo
aXMgdGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50ZWQuCiAgICAgaWYgKHJlcXVp
cmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKSkgewpAQCAtMTkwLDcgKzE4Niw3IEBAIHZvaWQgQ29udGVu
dExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAgICAgICAgIGNvbnN0IElu
dFJlY3QgY2xpcFJlY3QgPSBtX3RhcmdldFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7CiAK
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJPcmlnaW5UcmFuc2Zvcm0gPSBkcmF3
VHJhbnNmb3JtKCk7Ci0gICAgICAgIGxheWVyT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKC0w
LjUgKiBtX2JvdW5kcy53aWR0aCgpLCAtMC41ICogbV9ib3VuZHMuaGVpZ2h0KCksIDApOworICAg
ICAgICBsYXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogYm91bmRzKCkud2lk
dGgoKSwgLTAuNSAqIGJvdW5kcygpLmhlaWdodCgpLCAwKTsKIAogICAgICAgICAvLyBGb3Igbm93
IHdlIGFwcGx5IHRoZSBsYXJnZSBsYXllciB0cmVhdG1lbnQgb25seSBmb3IgbGF5ZXJzIHRoYXQg
YXJlIGVpdGhlciB1bnRyYW5zZm9ybWVkCiAgICAgICAgIC8vIG9yIGFyZSBwdXJlbHkgdHJhbnNs
YXRlZC4gVGhlaXIgbWF0cml4IGlzIGV4cGVjdGVkIHRvIGJlIGludmVydGlibGUuCkBAIC0xOTgs
NyArMTk0LDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRp
cnR5KCkKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0YXJnZXRUb0xheWVyTWF0cml4
ID0gbGF5ZXJPcmlnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpOwogICAgICAgICBJbnRSZWN0IHZpc2li
bGVSZWN0SW5MYXllckNvb3JkcyA9IHRhcmdldFRvTGF5ZXJNYXRyaXgubWFwUmVjdChjbGlwUmVj
dCk7Ci0gICAgICAgIHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy5pbnRlcnNlY3QoSW50UmVjdCgw
LCAwLCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOworICAgICAgICB2aXNp
YmxlUmVjdEluTGF5ZXJDb29yZHMuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgYm91bmRzKCkud2lk
dGgoKSwgYm91bmRzKCkuaGVpZ2h0KCkpKTsKIAogICAgICAgICAvLyBGb3Igbm9ybWFsIGxheWVy
cywgdGhlIGNlbnRlciBvZiB0aGUgdGV4dHVyZSBjb3JyZXNwb25kcyB3aXRoIHRoZSBjZW50ZXIg
b2YgdGhlIGxheWVyLgogICAgICAgICAvLyBJbiBsYXJnZSBsYXllcnMgdGhlIGNlbnRlciBvZiB0
aGUgdGV4dHVyZSBpcyB0aGUgY2VudGVyIG9mIHRoZSB2aXNpYmxlIHJlZ2lvbiBzbyB3ZSBoYXZl
CkBAIC0yMTQsNyArMjEwLDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29u
dGVudHNJZkRpcnR5KCkKIAogICAgICAgICAvLyBJZiB0aGUgdmlzaWJsZSBwb3J0aW9uIG9mIHRo
ZSBsYXllciBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbGFzdCB1cGxvYWQsIG9yIGlmIG91ciBiYWNr
aW5nCiAgICAgICAgIC8vIHRleHR1cmUgaGFzIGJlZW4gZXZpY3RlZCwgdGhlbiB0aGUgd2hvbGUg
bGF5ZXIgaXMgY29uc2lkZXJlZCBkaXJ0eS4KLSAgICAgICAgaWYgKHZpc2libGVSZWN0SW5MYXll
ckNvb3JkcyAhPSBtX3Zpc2libGVSZWN0SW5MYXllckNvb3JkcyB8fCAhbV9jb250ZW50c1RleHR1
cmUgfHwgIW1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKHJlcXVpcmVkVGV4dHVyZVNpemUsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICAgICAgaWYgKHZpc2libGVSZWN0SW5MYXllckNv
b3JkcyAhPSBtX3Zpc2libGVSZWN0SW5MYXllckNvb3JkcyB8fCAhbV9jb250ZW50c1RleHR1cmUg
fHwgIW1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKG1fcmVxdWlyZWRUZXh0dXJlU2l6ZSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEpKQogICAgICAgICAgICAgbV9kaXJ0eVJlY3QgPSBib3VuZHNS
ZWN0OwogICAgICAgICBtX3Zpc2libGVSZWN0SW5MYXllckNvb3JkcyA9IHZpc2libGVSZWN0SW5M
YXllckNvb3JkczsKIApAQCAtMjI0LDM5ICsyMjAsMzcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKIAogICAgICAgICAvLyBXaGF0IHRoZSByZWN0
YW5nbGVzIG1lYW46CiAgICAgICAgIC8vICAgZGlydHlSZWN0OiBUaGUgcmVnaW9uIG9mIHRoaXMg
bGF5ZXIgdGhhdCB3aWxsIGJlIHVwZGF0ZWQuCi0gICAgICAgIC8vICAgdXBkYXRlUmVjdDogVGhl
IHJlZ2lvbiBvZiB0aGUgbGF5ZXIncyB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1cGxvYWRlZCBpbnRv
LgotICAgICAgICAvLyAgIHJlcXVpcmVkVGV4dHVyZVNpemU6IGlzIHRoZSByZXF1aXJlZCBzaXpl
IG9mIHRoaXMgbGF5ZXIncyB0ZXh0dXJlLgorICAgICAgICAvLyAgIG1fdXBsb2FkVXBkYXRlUmVj
dDogVGhlIHJlZ2lvbiBvZiB0aGUgbGF5ZXIncyB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1cGxvYWRl
ZCBpbnRvLgorICAgICAgICAvLyAgIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZTogaXMgdGhlIHJlcXVp
cmVkIHNpemUgb2YgdGhpcyBsYXllcidzIHRleHR1cmUuCiAgICAgICAgIGRpcnR5UmVjdCA9IHZp
c2libGVEaXJ0eVJlY3RJbkxheWVyU3BhY2U7Ci0gICAgICAgIHVwZGF0ZVJlY3QgPSBkaXJ0eVJl
Y3Q7CisgICAgICAgIG1fdXBsb2FkVXBkYXRlUmVjdCA9IGRpcnR5UmVjdDsKICAgICAgICAgSW50
U2l6ZSB2aXNpYmxlUmVjdE9mZnNldEluTGF5ZXJDb29yZHModmlzaWJsZVJlY3RJbkxheWVyQ29v
cmRzLngoKSwgdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzLnkoKSk7Ci0gICAgICAgIHVwZGF0ZVJl
Y3QubW92ZSgtdmlzaWJsZVJlY3RPZmZzZXRJbkxheWVyQ29vcmRzKTsKLSAgICAgICAgcmVxdWly
ZWRUZXh0dXJlU2l6ZSA9IHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy5zaXplKCk7CisgICAgICAg
IG1fdXBsb2FkVXBkYXRlUmVjdC5tb3ZlKC12aXNpYmxlUmVjdE9mZnNldEluTGF5ZXJDb29yZHMp
OworICAgICAgICBtX3JlcXVpcmVkVGV4dHVyZVNpemUgPSB2aXNpYmxlUmVjdEluTGF5ZXJDb29y
ZHMuc2l6ZSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRpcnR5UmVjdCA9IEludFJlY3QobV9k
aXJ0eVJlY3QpOwotICAgICAgICByZXF1aXJlZFRleHR1cmVTaXplID0gbV9ib3VuZHM7CisgICAg
ICAgIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZSA9IGJvdW5kcygpOwogICAgICAgICAvLyBJZiB0aGUg
dGV4dHVyZSBuZWVkcyB0byBiZSByZWFsbG9jYXRlZCB0aGVuIHdlIG11c3QgcmVkcmF3IHRoZSBl
bnRpcmUKICAgICAgICAgLy8gY29udGVudHMgb2YgdGhlIGxheWVyLgotICAgICAgICBpZiAoIW1f
Y29udGVudHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChyZXF1aXJlZFRl
eHR1cmVTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisgICAgICAgIGlmICghbV9jb250
ZW50c1RleHR1cmUgfHwgIW1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKG1fcmVxdWlyZWRUZXh0
dXJlU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQogICAgICAgICAgICAgZGlydHlSZWN0
ID0gYm91bmRzUmVjdDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBDbGlwIHRoZSBk
aXJ0eVJlY3QgdG8gdGhlIHNpemUgb2YgdGhlIGxheWVyIHRvIGF2b2lkIGRyYXdpbmcKICAgICAg
ICAgICAgIC8vIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgYmFja2luZyB0ZXh0dXJlLgogICAg
ICAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdChib3VuZHNSZWN0KTsKICAgICAgICAgfQotICAg
ICAgICB1cGRhdGVSZWN0ID0gZGlydHlSZWN0OworICAgICAgICBtX3VwbG9hZFVwZGF0ZVJlY3Qg
PSBkaXJ0eVJlY3Q7CiAgICAgfQogCiAgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAogI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgY29uc3QgU2tCaXRtYXAqIHNr
aWFCaXRtYXAgPSAwOwotICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gY2FudmFzOwog
ICAgIE93blB0cjxQbGF0Zm9ybUNvbnRleHRTa2lhPiBza2lhQ29udGV4dDsKICAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQ7CiAKLSAgICBjYW52YXMuc2V0KG5ldyBz
a2lhOjpQbGF0Zm9ybUNhbnZhcyhkaXJ0eVJlY3Qud2lkdGgoKSwgZGlydHlSZWN0LmhlaWdodCgp
LCBmYWxzZSkpOwotICAgIHNraWFDb250ZXh0LnNldChuZXcgUGxhdGZvcm1Db250ZXh0U2tpYShj
YW52YXMuZ2V0KCkpKTsKKyAgICBtX3VwbG9hZFBpeGVsQ2FudmFzLnNldChuZXcgc2tpYTo6UGxh
dGZvcm1DYW52YXMoZGlydHlSZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWlnaHQoKSwgZmFsc2Up
KTsKKyAgICBza2lhQ29udGV4dC5zZXQobmV3IFBsYXRmb3JtQ29udGV4dFNraWEobV91cGxvYWRQ
aXhlbENhbnZhcy5nZXQoKSkpOwogCiAgICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gZ2V0IHRleHQg
dG8gc2hvdyB1cCBjb3JyZWN0bHkuCiAgICAgLy8gRklYTUU6IERvZXMgdGhpcyB0YWtlIHVzIGRv
d24gYSB2ZXJ5IHNsb3cgdGV4dCByZW5kZXJpbmcgcGF0aD8KQEAgLTI2NSwyNyArMjU5LDE2IEBA
IHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAgICAg
Z3JhcGhpY3NDb250ZXh0LnNldChuZXcgR3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqPihza2lhQ29udGV4dC5nZXQoKSkpKTsKIAogICAgIC8v
IEJyaW5nIHRoZSBjYW52YXMgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhaW50
IHJlY3QuCi0gICAgY2FudmFzLT50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0
eVJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueSgpKSk7CisgICAg
bV91cGxvYWRQaXhlbENhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGly
dHlSZWN0LngoKSksIHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGlydHlSZWN0LnkoKSkpOwogCiAg
ICAgbV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKmdyYXBoaWNzQ29udGV4dCwg
ZGlydHlSZWN0KTsKLSAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gY2FudmFzLT5nZXREZXZp
Y2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKLSAgICBza2lhQml0bWFwID0gJmJpdG1hcDsKLSAg
ICBBU1NFUlQoc2tpYUJpdG1hcCk7Ci0KLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soKnNraWFC
aXRtYXApOwotICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9IHNraWFCaXRtYXAtPmNv
bmZpZygpOwotICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHN1cHBvcnQgbW9yZSBpbWFnZSBj
b25maWd1cmF0aW9ucz8KLSAgICBpZiAoc2tpYUNvbmZpZyA9PSBTa0JpdG1hcDo6a0FSR0JfODg4
OF9Db25maWcpIHsKLSAgICAgICAgcGl4ZWxzID0gc2tpYUJpdG1hcC0+Z2V0UGl4ZWxzKCk7Ci0g
ICAgICAgIGJpdG1hcFNpemUgPSBJbnRTaXplKHNraWFCaXRtYXAtPndpZHRoKCksIHNraWFCaXRt
YXAtPmhlaWdodCgpKTsKLSAgICB9CisKICNlbGlmIFBMQVRGT1JNKENHKQotICAgIFZlY3Rvcjx1
aW50OF90PiB0ZW1wVmVjdG9yOwogICAgIGludCByb3dCeXRlcyA9IDQgKiBkaXJ0eVJlY3Qud2lk
dGgoKTsKLSAgICB0ZW1wVmVjdG9yLnJlc2l6ZShyb3dCeXRlcyAqIGRpcnR5UmVjdC5oZWlnaHQo
KSk7Ci0gICAgbWVtc2V0KHRlbXBWZWN0b3IuZGF0YSgpLCAwLCB0ZW1wVmVjdG9yLnNpemUoKSk7
CisgICAgbV91cGxvYWRQaXhlbERhdGEgPSBuZXcgVmVjdG9yPHVpbnQ4X3Q+KHJvd0J5dGVzICog
ZGlydHlSZWN0LmhlaWdodCgpKTsKKyAgICBtZW1zZXQobV91cGxvYWRQaXhlbERhdGEtPmRhdGEo
KSwgMCwgbV91cGxvYWRQaXhlbERhdGEtPnNpemUoKSk7CiAgICAgUmV0YWluUHRyPENHQ29sb3JT
cGFjZVJlZj4gY29sb3JTcGFjZShBZG9wdENGLCBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0Io
KSk7Ci0gICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY29udGV4dENHKEFkb3B0Q0YsIENHQml0
bWFwQ29udGV4dENyZWF0ZSh0ZW1wVmVjdG9yLmRhdGEoKSwKKyAgICBSZXRhaW5QdHI8Q0dDb250
ZXh0UmVmPiBjb250ZXh0Q0coQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fdXBsb2Fk
UGl4ZWxEYXRhLT5kYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eVJlY3Qud2lkdGgoKSwgZGlydHlS
ZWN0LmhlaWdodCgpLCA4LCByb3dCeXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UuZ2V0KCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFw
Qnl0ZU9yZGVyMzJIb3N0KSk7CkBAIC0yOTgsMTkgKzI4MSwyNyBAQCB2b2lkIENvbnRlbnRMYXll
ckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAgIGdyYXBoaWNzQ29udGV4dC50
cmFuc2xhdGUoLWRpcnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKIAogICAgIG1fb3duZXIt
PnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsK
LQotICAgIHBpeGVscyA9IHRlbXBWZWN0b3IuZGF0YSgpOwotICAgIGJpdG1hcFNpemUgPSBkaXJ0
eVJlY3Quc2l6ZSgpOwogI2Vsc2UKICNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIg
cGxhdGZvcm0uIgogI2VuZGlmCi0KLSAgICBpZiAocGl4ZWxzKQotICAgICAgICB1cGRhdGVUZXh0
dXJlUmVjdChwaXhlbHMsIHJlcXVpcmVkVGV4dHVyZVNpemUsIHVwZGF0ZVJlY3QpOwogfQogCi12
b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlUmVjdCh2b2lkKiBwaXhlbHMs
IGNvbnN0IEludFNpemUmIHJlcXVpcmVkVGV4dHVyZVNpemUsIGNvbnN0IEludFJlY3QmIHVwZGF0
ZVJlY3QpCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlUmVjdElmTmVl
ZGVkKCkKIHsKKyAgICB2b2lkKiBwaXhlbHMgPSAwOworI2lmIFBMQVRGT1JNKFNLSUEpCisgICAg
aWYgKG1fdXBsb2FkUGl4ZWxDYW52YXMpIHsKKyAgICAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1h
cCA9IG1fdXBsb2FkUGl4ZWxDYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2Up
OworCisgICAgICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jayhiaXRtYXApOworICAgICAgICAvLyBG
SVhNRTogZG8gd2UgbmVlZCB0byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJhdGlvbnM/Cisg
ICAgICAgIGlmIChiaXRtYXAuY29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmln
KQorICAgICAgICAgICAgcGl4ZWxzID0gYml0bWFwLmdldFBpeGVscygpOworICAgIH0KKyNlbmRp
ZgorICAgIGlmIChtX3VwbG9hZFBpeGVsRGF0YSkKKyAgICAgICAgcGl4ZWxzID0gbV91cGxvYWRQ
aXhlbERhdGEtPmRhdGEoKTsKKwogICAgIGlmICghcGl4ZWxzKQogICAgICAgICByZXR1cm47CiAK
QEAgLTMxOCwyMiArMzA5LDMwIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRl
eHR1cmVSZWN0KHZvaWQqIHBpeGVscywgY29uc3QgSW50U2l6ZSYgcmVxdWlyCiAgICAgaWYgKCFt
X2NvbnRlbnRzVGV4dHVyZSkKICAgICAgICAgbV9jb250ZW50c1RleHR1cmUgPSBMYXllclRleHR1
cmU6OmNyZWF0ZShjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnRleHR1cmVNYW5hZ2VyKCkpOwog
Ci0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZS0+cmVzZXJ2ZShyZXF1aXJlZFRleHR1cmVTaXpl
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpIHsKKyAgICBpZiAoIW1fY29udGVudHNUZXh0dXJl
LT5yZXNlcnZlKG1fcmVxdWlyZWRUZXh0dXJlU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEp
KSB7CiAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIG1fY29udGVudHNUZXh0dXJlLT5iaW5kVGV4dHVyZSgpOwogCi0gICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1
cGRhdGVSZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVscykpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXBsb2FkVXBkYXRlUmVjdC54KCks
IG1fdXBsb2FkVXBkYXRlUmVjdC55KCksIG1fdXBsb2FkVXBkYXRlUmVjdC53aWR0aCgpLCBtX3Vw
bG9hZFVwZGF0ZVJlY3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCBwaXhlbHMpKTsKIAogICAgIG1fZGlydHlSZWN0LnNldFNpemUoRmxvYXRTaXpl
KCkpOwogICAgIC8vIExhcmdlIGxheWVycyBhbHdheXMgc3RheSBkaXJ0eSwgYmVjYXVzZSB0aGV5
IG5lZWQgdG8gdXBkYXRlIHdoZW4gdGhlIGNvbnRlbnQgcmVjdCBjaGFuZ2VzLgogICAgIG1fY29u
dGVudHNEaXJ0eSA9IHJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKTsKKyNpZiBQTEFURk9STShT
S0lBKQorICAgIG1fdXBsb2FkUGl4ZWxDYW52YXMuY2xlYXIoKTsKKyNlbmRpZgorICAgIG1fdXBs
b2FkUGl4ZWxEYXRhLmNsZWFyKCk7CiB9CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmRy
YXcoKQogeworICAgIHVwZGF0ZVRleHR1cmVSZWN0SWZOZWVkZWQoKTsKKwogICAgIGlmIChtX3Nr
aXBzRHJhdykKICAgICAgICAgcmV0dXJuOwogCkBAIC0zNTcsNyArMzU2LDcgQEAgdm9pZCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhdygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3YtPnNo
YWRlck1hdHJpeExvY2F0aW9uKCksIHN2LT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigp
LT5wcm9qZWN0aW9uTWF0cml4KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1RyYW5z
Zm9ybSgpLCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBkcmF3VHJhbnNmb3JtKCksIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygp
LmhlaWdodCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdPcGFjaXR5KCksIHN2LT5z
aGFkZXJNYXRyaXhMb2NhdGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN2LT5zaGFk
ZXJBbHBoYUxvY2F0aW9uKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
CmluZGV4IDMzNjM1MThkYTUzMWFjNjBkMzBkN2Y4MGU3ZjVjNzYwM2MzMmEzODAuLjU4NzY3NzYw
ZTZjZjk2ZmJiMzczMjUyNTU4MmRmMDQ1MDE4OTFkMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uaApAQCAtODIsMTUgKzgyLDI1IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBl
eHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
KTsKIAotICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRT
aXplJiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KTsKLQog
ICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CiAgICAgYm9vbCByZXF1aXJlc0Ns
aXBwZWRVcGRhdGVSZWN0KCkgY29uc3Q7CiAKICAgICBPd25QdHI8TGF5ZXJUZXh0dXJlPiBtX2Nv
bnRlbnRzVGV4dHVyZTsKICAgICBib29sIG1fc2tpcHNEcmF3OwogCisgICAgSW50U2l6ZSBtX3Jl
cXVpcmVkVGV4dHVyZVNpemU7CisgICAgSW50UmVjdCBtX3VwbG9hZFVwZGF0ZVJlY3Q7CisKKyAg
ICAvLyBPbiBwbGF0Zm9ybXMgdXNpbmcgU2tpYSwgd2UgdXNlIHRoZSBza2lhOjpQbGF0Zm9ybUNh
bnZhcyBmb3IgY29udGVudCBsYXllcnMKKyAgICAvLyBhbmQgdGhlIG1fdXBsb2FkUGl4ZWxEYXRh
IGJ1ZmZlciBmb3IgaW1hZ2UgbGF5ZXJzLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgdXNp
bmcgbWVtb3J5IHdlIGNvbnRyb2wgZm9yIGFsbCB1cGxvYWRzLgorI2lmIFBMQVRGT1JNKFNLSUEp
CisgICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX3VwbG9hZFBpeGVsQ2FudmFzOwor
I2VuZGlmCisgICAgT3duUHRyPFZlY3Rvcjx1aW50OF90PiA+IG1fdXBsb2FkUGl4ZWxEYXRhOwor
CiBwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3RJZk5lZWRlZCgpOwogCiAgICAg
SW50UmVjdCBtX3Zpc2libGVSZWN0SW5MYXllckNvb3JkczsKICAgICBGbG9hdFBvaW50IG1fbGF5
ZXJDZW50ZXJJblN1cmZhY2VDb29yZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApp
bmRleCBjZDI5OWMxYTBjZTNiMzBlOTVkOTE0ZGUwNTFiOTYzMjE5ODQ5Y2FiLi45YjI1YWY0YzJi
MzBiN2ZiYTI3NGUyODUxYzc4M2FiYTg1MTBiYjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTg0LDQ2ICs4NCwzNiBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ29udGVudHNJZkRpcnR5KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHZvaWQq
IHBpeGVscyA9IDA7Ci0gICAgSW50U2l6ZSBiaXRtYXBTaXplOwotCiAgICAgTmF0aXZlSW1hZ2VQ
dHIgbmF0aXZlSW1hZ2UgPSBtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OwogCiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICAvLyBUaGUgbGF5ZXIgY29udGFpbnMgYW4gSW1h
Z2UuCiAgICAgTmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1hZ2UgPSBzdGF0aWNfY2FzdDxOYXRpdmVJ
bWFnZVNraWEqPihuYXRpdmVJbWFnZSk7CiAgICAgY29uc3QgU2tCaXRtYXAqIHNraWFCaXRtYXAg
PSBza2lhSW1hZ2U7Ci0gICAgYml0bWFwU2l6ZSA9IEludFNpemUoc2tpYUJpdG1hcC0+d2lkdGgo
KSwgc2tpYUJpdG1hcC0+aGVpZ2h0KCkpOworICAgIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZSA9IElu
dFNpemUoc2tpYUJpdG1hcC0+d2lkdGgoKSwgc2tpYUJpdG1hcC0+aGVpZ2h0KCkpOwogICAgIEFT
U0VSVChza2lhQml0bWFwKTsKICNlbGlmIFBMQVRGT1JNKENHKQogICAgIC8vIE5hdGl2ZUltYWdl
UHRyIGlzIGEgQ0dJbWFnZVJlZiBvbiBNYWMgT1MgWC4KICAgICBpbnQgd2lkdGggPSBDR0ltYWdl
R2V0V2lkdGgobmF0aXZlSW1hZ2UpOwogICAgIGludCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0
KG5hdGl2ZUltYWdlKTsKLSAgICBiaXRtYXBTaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsK
KyAgICBtX3JlcXVpcmVkVGV4dHVyZVNpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwogI2Vu
ZGlmCiAKICAgICAvLyBDbGlwIHRoZSBkaXJ0eSByZWN0IHRvIHRoZSBiaXRtYXAgZGltZW5zaW9u
cy4KLSAgICBJbnRSZWN0IGRpcnR5UmVjdChtX2RpcnR5UmVjdCk7Ci0gICAgZGlydHlSZWN0Lmlu
dGVyc2VjdChJbnRSZWN0KEludFBvaW50KDAsIDApLCBiaXRtYXBTaXplKSk7Ci0KLSAgICBpZiAo
IW1fY29udGVudHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChiaXRtYXBT
aXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCi0gICAgICAgIGRpcnR5UmVjdCA9IEludFJl
Y3QoSW50UG9pbnQoMCwgMCksIGJpdG1hcFNpemUpOwotICAgIGVsc2UgaWYgKCFtX2NvbnRlbnRz
RGlydHkpIHsKLSAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUoYml0bWFwU2l6ZSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1f
dXBsb2FkVXBkYXRlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9kaXJ0eVJlY3QpOworICAgIG1f
dXBsb2FkVXBkYXRlUmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9yZXF1
aXJlZFRleHR1cmVTaXplKSk7CiAKICNpZiBQTEFURk9STShTS0lBKQogICAgIFNrQXV0b0xvY2tQ
aXhlbHMgbG9jaygqc2tpYUJpdG1hcCk7CiAgICAgU2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmln
ID0gc2tpYUJpdG1hcC0+Y29uZmlnKCk7CiAgICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gc3Vw
cG9ydCBtb3JlIGltYWdlIGNvbmZpZ3VyYXRpb25zPwotICAgIGlmIChza2lhQ29uZmlnID09IFNr
Qml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykKLSAgICAgICAgcGl4ZWxzID0gc2tpYUJpdG1hcC0+
Z2V0UGl4ZWxzKCk7CisgICAgQVNTRVJUKHNraWFDb25maWcgPT0gU2tCaXRtYXA6OmtBUkdCXzg4
ODhfQ29uZmlnKTsKKyAgICBtX3VwbG9hZFBpeGVsRGF0YSA9IG5ldyBWZWN0b3I8dWludDhfdD4o
c2tpYUJpdG1hcC0+d2lkdGgoKSAqIHNraWFCaXRtYXAtPmhlaWdodCgpICogNCk7CisgICAgc2tp
YUJpdG1hcC0+Y29weVBpeGVsc1RvKG1fdXBsb2FkUGl4ZWxEYXRhLT5kYXRhKCksIG1fdXBsb2Fk
UGl4ZWxEYXRhLT5zaXplKCkpOwogI2VsaWYgUExBVEZPUk0oQ0cpCiAgICAgLy8gRklYTUU6IHdl
IHNob3VsZCBnZXQgcmlkIG9mIHRoaXMgdGVtcG9yYXJ5IGNvcHkgd2hlcmUgcG9zc2libGUuCiAg
ICAgaW50IHRlbXBSb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICBWZWN0b3I8dWludDhfdD4gdGVt
cFZlY3RvcjsKLSAgICB0ZW1wVmVjdG9yLnJlc2l6ZShoZWlnaHQgKiB0ZW1wUm93Qnl0ZXMpOwor
ICAgIG1fdXBsb2FkUGl4ZWxEYXRhID0gbmV3IFZlY3Rvcjx1aW50OF90PihoZWlnaHQgKiB0ZW1w
Um93Qnl0ZXMpOwogICAgIC8vIE5vdGUgd2UgZG8gbm90IHplcm8gdGhpcyB2ZWN0b3Igc2luY2Ug
d2UgYXJlIGdvaW5nIHRvCiAgICAgLy8gY29tcGxldGVseSBvdmVyd3JpdGUgaXRzIGNvbnRlbnRz
IHdpdGggdGhlIGltYWdlIGJlbG93LgogICAgIC8vIFRyeSB0byByZXVzZSB0aGUgY29sb3Igc3Bh
Y2UgZnJvbSB0aGUgaW1hZ2UgdG8gcHJlc2VydmUgaXRzIGNvbG9ycy4KQEAgLTE0Myw3ICsxMzMs
NyBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKICAg
ICAgICAgY29sb3JTcGFjZSA9IGNvbG9yU3BhY2VSZWxlYXNlci5nZXQoKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IHRlbXBDb250ZXh0KEFkb3B0
Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZSh0ZW1wVmVjdG9yLmRhdGEoKSwKKyAgICBSZXRhaW5Q
dHI8Q0dDb250ZXh0UmVmPiB0ZW1wQ29udGV4dChBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVh
dGUobV91cGxvYWRQaXhlbERhdGEtPmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdo
dCwgOCwgdGVtcFJvd0J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVy
MzJIb3N0KSk7CkBAIC0xNTEsMTMgKzE0MSw5IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1
cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAgIENHQ29udGV4dERyYXdJbWFnZSh0ZW1wQ29udGV4
dC5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgQ0dSZWN0TWFrZSgwLCAwLCBzdGF0aWNf
Y2FzdDxDR0Zsb2F0Pih3aWR0aCksIHN0YXRpY19jYXN0PENHRmxvYXQ+KGhlaWdodCkpLAogICAg
ICAgICAgICAgICAgICAgICAgICBuYXRpdmVJbWFnZSk7Ci0gICAgcGl4ZWxzID0gdGVtcFZlY3Rv
ci5kYXRhKCk7CiAjZWxzZQogI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0
Zm9ybS4iCiAjZW5kaWYKLQotICAgIGlmIChwaXhlbHMpCi0gICAgICAgIHVwZGF0ZVRleHR1cmVS
ZWN0KHBpeGVscywgYml0bWFwU2l6ZSwgIGRpcnR5UmVjdCk7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82188</attachid>
            <date>2011-02-11 15:06:13 -0800</date>
            <delta_ts>2011-02-15 18:37:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54315-20110211150612.patch</filename>
            <type>text/plain</type>
            <size>17843</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgwODIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxMzM2ODcwMjc2ODc3OWFl
ZjIwYmIyOTYxNjViMTA2YmU0N2MzYTdkLi5kMDUxMDQ2YjVkZjRjYTczZjRmMWFjZjAxMzNmNzFj
YTVkYjA1ZDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDItMTEgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFVwZGF0ZSB0ZXh0dXJlIGZvciBD
b250ZW50TGF5ZXJDaHJvbWl1bXMgaW4gZHJhdygpIGNhbGwgaW5zdGVhZCBvZiB1cGRhdGVDb250
ZW50cy4uKCkgY2FsbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTQzMTUKKworICAgICAgICBUaGlzIGRlZmVycyBhbGwgb3BlcmF0aW9ucyBvbiB0aGUg
Y29tcG9zaXRvcidzIEdMIGNvbnRleHQgdW50aWwgdGhlCisgICAgICAgIGRyYXcoKSBjYWxsIHdo
aWNoIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBtb3ZpbmcgdGhlIGRyYXcoKSBvZmYtdGhyZWFkLgor
ICAgICAgICBBbHNvIGNsZWFucyB1cCB0aGUgdXBkYXRlIGN5Y2xlIGEgYml0IC0gdGhlcmUgd2Vy
ZSBzb21lIHVudXNlZCBsb2NhbAorICAgICAgICB2YXJpYWJsZXMgYW5kIHdoYXRub3QuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVxdWlyZXNDbGlw
cGVkVXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6
dXBkYXRlQ29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNo
cm9taXVtOjp1cGRhdGVUZXh0dXJlUmVjdElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRMYXllckNocm9taXVtOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSk6CisKIDIwMTEtMDItMDgg
IERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApp
bmRleCBhMzhmNmJkMjEyNjkwYTI4Zjk4MzhkYjg5NjM1YTg0MTRjYjZkNzdlLi40MTc1YTQ3MjQ4
MGYwNGIxNTRiYmFjOWY5MGM4ZDk1YWQyODNhMzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwCkBAIC0xNTQsOSArMTU0LDkgQEAgYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6cmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpIGNvbnN0CiAgICAgLy8gb25lIG9mIHRoZSBs
YXllcidzIGRpbWVuc2lvbnMgaXMgbGFyZ2VyIHRoYW4gMjAwMCBwaXhlbHMgb3IgdGhlIHNpemUg
b2YKICAgICAvLyBzdXJmYWNlIGl0J3MgcmVuZGVyaW5nIGludG8uIFRoaXMgaXMgYSB0ZW1wb3Jh
cnkgbWVhc3VyZSB1bnRpbCBsYXllciB0aWxpbmcgaXMgaW1wbGVtZW50ZWQuCiAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhMYXllclNpemUgPSAyMDAwOwotICAgIHJldHVybiAobV9ib3VuZHMud2lk
dGgoKSA+IG1heChtYXhMYXllclNpemUsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZS0+Y29udGVudFJl
Y3QoKS53aWR0aCgpKQotICAgICAgICAgICAgfHwgbV9ib3VuZHMuaGVpZ2h0KCkgPiBtYXgobWF4
TGF5ZXJTaXplLCBtX3RhcmdldFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCkuaGVpZ2h0KCkp
Ci0gICAgICAgICAgICB8fCAhbGF5ZXJSZW5kZXJlcigpLT5jaGVja1RleHR1cmVTaXplKG1fYm91
bmRzKSk7CisgICAgcmV0dXJuIChib3VuZHMoKS53aWR0aCgpID4gbWF4KG1heExheWVyU2l6ZSwg
bV90YXJnZXRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLndpZHRoKCkpCisgICAgICAgICAg
ICB8fCBib3VuZHMoKS5oZWlnaHQoKSA+IG1heChtYXhMYXllclNpemUsIG1fdGFyZ2V0UmVuZGVy
U3VyZmFjZS0+Y29udGVudFJlY3QoKS5oZWlnaHQoKSkKKyAgICAgICAgICAgIHx8ICFsYXllclJl
bmRlcmVyKCktPmNoZWNrVGV4dHVyZVNpemUoYm91bmRzKCkpKTsKIH0KIAogdm9pZCBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKQEAgLTE2OSwxMiArMTY5LDgg
QEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKIAog
ICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwogCi0gICAgdm9pZCogcGl4ZWxzID0gMDsKICAg
ICBJbnRSZWN0IGRpcnR5UmVjdDsKLSAgICBJbnRSZWN0IHVwZGF0ZVJlY3Q7Ci0gICAgSW50U2l6
ZSByZXF1aXJlZFRleHR1cmVTaXplOwotICAgIEludFNpemUgYml0bWFwU2l6ZTsKLSAgICBJbnRS
ZWN0IGJvdW5kc1JlY3QoSW50UG9pbnQoMCwgMCksIG1fYm91bmRzKTsKKyAgICBJbnRSZWN0IGJv
dW5kc1JlY3QoSW50UG9pbnQoMCwgMCksIGJvdW5kcygpKTsKIAogICAgIC8vIEZJWE1FOiBSZW1v
dmUgdGhpcyB0ZXN0IHdoZW4gdGlsZWQgbGF5ZXJzIGFyZSBpbXBsZW1lbnRlZC4KICAgICBpZiAo
cmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpKSB7CkBAIC0xOTAsNyArMTg2LDcgQEAgdm9pZCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKICAgICAgICAgY29u
c3QgSW50UmVjdCBjbGlwUmVjdCA9IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3Qo
KTsKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllck9yaWdpblRyYW5zZm9ybSA9
IGRyYXdUcmFuc2Zvcm0oKTsKLSAgICAgICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRl
M2QoLTAuNSAqIG1fYm91bmRzLndpZHRoKCksIC0wLjUgKiBtX2JvdW5kcy5oZWlnaHQoKSwgMCk7
CisgICAgICAgIGxheWVyT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKC0wLjUgKiBib3VuZHMo
KS53aWR0aCgpLCAtMC41ICogYm91bmRzKCkuaGVpZ2h0KCksIDApOwogCiAgICAgICAgIC8vIEZv
ciBub3cgd2UgYXBwbHkgdGhlIGxhcmdlIGxheWVyIHRyZWF0bWVudCBvbmx5IGZvciBsYXllcnMg
dGhhdCBhcmUgZWl0aGVyIHVudHJhbnNmb3JtZWQKICAgICAgICAgLy8gb3IgYXJlIHB1cmVseSB0
cmFuc2xhdGVkLiBUaGVpciBtYXRyaXggaXMgZXhwZWN0ZWQgdG8gYmUgaW52ZXJ0aWJsZS4KQEAg
LTE5OCw3ICsxOTQsNyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50
c0lmRGlydHkoKQogCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRhcmdldFRvTGF5ZXJN
YXRyaXggPSBsYXllck9yaWdpblRyYW5zZm9ybS5pbnZlcnNlKCk7CiAgICAgICAgIEludFJlY3Qg
dmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzID0gdGFyZ2V0VG9MYXllck1hdHJpeC5tYXBSZWN0KGNs
aXBSZWN0KTsKLSAgICAgICAgdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzLmludGVyc2VjdChJbnRS
ZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCksIG1fYm91bmRzLmhlaWdodCgpKSk7CisgICAgICAg
IHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBib3VuZHMo
KS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSkpOwogCiAgICAgICAgIC8vIEZvciBub3JtYWwg
bGF5ZXJzLCB0aGUgY2VudGVyIG9mIHRoZSB0ZXh0dXJlIGNvcnJlc3BvbmRzIHdpdGggdGhlIGNl
bnRlciBvZiB0aGUgbGF5ZXIuCiAgICAgICAgIC8vIEluIGxhcmdlIGxheWVycyB0aGUgY2VudGVy
IG9mIHRoZSB0ZXh0dXJlIGlzIHRoZSBjZW50ZXIgb2YgdGhlIHZpc2libGUgcmVnaW9uIHNvIHdl
IGhhdmUKQEAgLTIxNCw3ICsyMTAsNyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRh
dGVDb250ZW50c0lmRGlydHkoKQogCiAgICAgICAgIC8vIElmIHRoZSB2aXNpYmxlIHBvcnRpb24g
b2YgdGhlIGxheWVyIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsYXN0IHVwbG9hZCwgb3IgaWYgb3Vy
IGJhY2tpbmcKICAgICAgICAgLy8gdGV4dHVyZSBoYXMgYmVlbiBldmljdGVkLCB0aGVuIHRoZSB3
aG9sZSBsYXllciBpcyBjb25zaWRlcmVkIGRpcnR5LgotICAgICAgICBpZiAodmlzaWJsZVJlY3RJ
bkxheWVyQ29vcmRzICE9IG1fdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzIHx8ICFtX2NvbnRlbnRz
VGV4dHVyZSB8fCAhbV9jb250ZW50c1RleHR1cmUtPmlzVmFsaWQocmVxdWlyZWRUZXh0dXJlU2l6
ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQorICAgICAgICBpZiAodmlzaWJsZVJlY3RJbkxh
eWVyQ29vcmRzICE9IG1fdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzIHx8ICFtX2NvbnRlbnRzVGV4
dHVyZSB8fCAhbV9jb250ZW50c1RleHR1cmUtPmlzVmFsaWQobV9yZXF1aXJlZFRleHR1cmVTaXpl
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCiAgICAgICAgICAgICBtX2RpcnR5UmVjdCA9IGJv
dW5kc1JlY3Q7CiAgICAgICAgIG1fdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzID0gdmlzaWJsZVJl
Y3RJbkxheWVyQ29vcmRzOwogCkBAIC0yMjQsMzkgKzIyMCwzNyBAQCB2b2lkIENvbnRlbnRMYXll
ckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogCiAgICAgICAgIC8vIFdoYXQgdGhl
IHJlY3RhbmdsZXMgbWVhbjoKICAgICAgICAgLy8gICBkaXJ0eVJlY3Q6IFRoZSByZWdpb24gb2Yg
dGhpcyBsYXllciB0aGF0IHdpbGwgYmUgdXBkYXRlZC4KLSAgICAgICAgLy8gICB1cGRhdGVSZWN0
OiBUaGUgcmVnaW9uIG9mIHRoZSBsYXllcidzIHRleHR1cmUgdGhhdCB3aWxsIGJlIHVwbG9hZGVk
IGludG8uCi0gICAgICAgIC8vICAgcmVxdWlyZWRUZXh0dXJlU2l6ZTogaXMgdGhlIHJlcXVpcmVk
IHNpemUgb2YgdGhpcyBsYXllcidzIHRleHR1cmUuCisgICAgICAgIC8vICAgbV91cGxvYWRVcGRh
dGVSZWN0OiBUaGUgcmVnaW9uIG9mIHRoZSBsYXllcidzIHRleHR1cmUgdGhhdCB3aWxsIGJlIHVw
bG9hZGVkIGludG8uCisgICAgICAgIC8vICAgbV9yZXF1aXJlZFRleHR1cmVTaXplOiBpcyB0aGUg
cmVxdWlyZWQgc2l6ZSBvZiB0aGlzIGxheWVyJ3MgdGV4dHVyZS4KICAgICAgICAgZGlydHlSZWN0
ID0gdmlzaWJsZURpcnR5UmVjdEluTGF5ZXJTcGFjZTsKLSAgICAgICAgdXBkYXRlUmVjdCA9IGRp
cnR5UmVjdDsKKyAgICAgICAgbV91cGxvYWRVcGRhdGVSZWN0ID0gZGlydHlSZWN0OwogICAgICAg
ICBJbnRTaXplIHZpc2libGVSZWN0T2Zmc2V0SW5MYXllckNvb3Jkcyh2aXNpYmxlUmVjdEluTGF5
ZXJDb29yZHMueCgpLCB2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMueSgpKTsKLSAgICAgICAgdXBk
YXRlUmVjdC5tb3ZlKC12aXNpYmxlUmVjdE9mZnNldEluTGF5ZXJDb29yZHMpOwotICAgICAgICBy
ZXF1aXJlZFRleHR1cmVTaXplID0gdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzLnNpemUoKTsKKyAg
ICAgICAgbV91cGxvYWRVcGRhdGVSZWN0Lm1vdmUoLXZpc2libGVSZWN0T2Zmc2V0SW5MYXllckNv
b3Jkcyk7CisgICAgICAgIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZSA9IHZpc2libGVSZWN0SW5MYXll
ckNvb3Jkcy5zaXplKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZGlydHlSZWN0ID0gSW50UmVj
dChtX2RpcnR5UmVjdCk7Ci0gICAgICAgIHJlcXVpcmVkVGV4dHVyZVNpemUgPSBtX2JvdW5kczsK
KyAgICAgICAgbV9yZXF1aXJlZFRleHR1cmVTaXplID0gYm91bmRzKCk7CiAgICAgICAgIC8vIElm
IHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIHJlYWxsb2NhdGVkIHRoZW4gd2UgbXVzdCByZWRyYXcg
dGhlIGVudGlyZQogICAgICAgICAvLyBjb250ZW50cyBvZiB0aGUgbGF5ZXIuCi0gICAgICAgIGlm
ICghbV9jb250ZW50c1RleHR1cmUgfHwgIW1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKHJlcXVp
cmVkVGV4dHVyZVNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICAgICAgaWYgKCFt
X2NvbnRlbnRzVGV4dHVyZSB8fCAhbV9jb250ZW50c1RleHR1cmUtPmlzVmFsaWQobV9yZXF1aXJl
ZFRleHR1cmVTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCiAgICAgICAgICAgICBkaXJ0
eVJlY3QgPSBib3VuZHNSZWN0OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIENsaXAg
dGhlIGRpcnR5UmVjdCB0byB0aGUgc2l6ZSBvZiB0aGUgbGF5ZXIgdG8gYXZvaWQgZHJhd2luZwog
ICAgICAgICAgICAgLy8gb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBiYWNraW5nIHRleHR1cmUu
CiAgICAgICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KGJvdW5kc1JlY3QpOwogICAgICAgICB9
Ci0gICAgICAgIHVwZGF0ZVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgICAgIG1fdXBsb2FkVXBkYXRl
UmVjdCA9IGRpcnR5UmVjdDsKICAgICB9CiAKICAgICBpZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAjaWYgUExBVEZPUk0oU0tJQSkKLSAgICBjb25zdCBTa0JpdG1h
cCogc2tpYUJpdG1hcCA9IDA7Ci0gICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBjYW52
YXM7CiAgICAgT3duUHRyPFBsYXRmb3JtQ29udGV4dFNraWE+IHNraWFDb250ZXh0OwogICAgIE93
blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dDsKIAotICAgIGNhbnZhcy5zZXQo
bmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKGRpcnR5UmVjdC53aWR0aCgpLCBkaXJ0eVJlY3QuaGVp
Z2h0KCksIGZhbHNlKSk7Ci0gICAgc2tpYUNvbnRleHQuc2V0KG5ldyBQbGF0Zm9ybUNvbnRleHRT
a2lhKGNhbnZhcy5nZXQoKSkpOworICAgIG1fdXBsb2FkUGl4ZWxDYW52YXMuc2V0KG5ldyBza2lh
OjpQbGF0Zm9ybUNhbnZhcyhkaXJ0eVJlY3Qud2lkdGgoKSwgZGlydHlSZWN0LmhlaWdodCgpLCBm
YWxzZSkpOworICAgIHNraWFDb250ZXh0LnNldChuZXcgUGxhdGZvcm1Db250ZXh0U2tpYShtX3Vw
bG9hZFBpeGVsQ2FudmFzLmdldCgpKSk7CiAKICAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBnZXQg
dGV4dCB0byBzaG93IHVwIGNvcnJlY3RseS4KICAgICAvLyBGSVhNRTogRG9lcyB0aGlzIHRha2Ug
dXMgZG93biBhIHZlcnkgc2xvdyB0ZXh0IHJlbmRlcmluZyBwYXRoPwpAQCAtMjY1LDI3ICsyNTks
MTYgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkK
ICAgICBncmFwaGljc0NvbnRleHQuc2V0KG5ldyBHcmFwaGljc0NvbnRleHQocmVpbnRlcnByZXRf
Y2FzdDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCo+KHNraWFDb250ZXh0LmdldCgpKSkpOwogCiAg
ICAgLy8gQnJpbmcgdGhlIGNhbnZhcyBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUg
cGFpbnQgcmVjdC4KLSAgICBjYW52YXMtPnRyYW5zbGF0ZShzdGF0aWNfY2FzdDxTa1NjYWxhcj4o
LWRpcnR5UmVjdC54KCkpLCBzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLWRpcnR5UmVjdC55KCkpKTsK
KyAgICBtX3VwbG9hZFBpeGVsQ2FudmFzLT50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+
KC1kaXJ0eVJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueSgpKSk7
CiAKICAgICBtX293bmVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqZ3JhcGhpY3NDb250
ZXh0LCBkaXJ0eVJlY3QpOwotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBjYW52YXMtPmdl
dERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwotICAgIHNraWFCaXRtYXAgPSAmYml0bWFw
OwotICAgIEFTU0VSVChza2lhQml0bWFwKTsKLQotICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygq
c2tpYUJpdG1hcCk7Ci0gICAgU2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gc2tpYUJpdG1h
cC0+Y29uZmlnKCk7Ci0gICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gc3VwcG9ydCBtb3JlIGlt
YWdlIGNvbmZpZ3VyYXRpb25zPwotICAgIGlmIChza2lhQ29uZmlnID09IFNrQml0bWFwOjprQVJH
Ql84ODg4X0NvbmZpZykgewotICAgICAgICBwaXhlbHMgPSBza2lhQml0bWFwLT5nZXRQaXhlbHMo
KTsKLSAgICAgICAgYml0bWFwU2l6ZSA9IEludFNpemUoc2tpYUJpdG1hcC0+d2lkdGgoKSwgc2tp
YUJpdG1hcC0+aGVpZ2h0KCkpOwotICAgIH0KKwogI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgVmVj
dG9yPHVpbnQ4X3Q+IHRlbXBWZWN0b3I7CiAgICAgaW50IHJvd0J5dGVzID0gNCAqIGRpcnR5UmVj
dC53aWR0aCgpOwotICAgIHRlbXBWZWN0b3IucmVzaXplKHJvd0J5dGVzICogZGlydHlSZWN0Lmhl
aWdodCgpKTsKLSAgICBtZW1zZXQodGVtcFZlY3Rvci5kYXRhKCksIDAsIHRlbXBWZWN0b3Iuc2l6
ZSgpKTsKKyAgICBtX3VwbG9hZFBpeGVsRGF0YSA9IG5ldyBWZWN0b3I8dWludDhfdD4ocm93Qnl0
ZXMgKiBkaXJ0eVJlY3QuaGVpZ2h0KCkpOworICAgIG1lbXNldChtX3VwbG9hZFBpeGVsRGF0YS0+
ZGF0YSgpLCAwLCBtX3VwbG9hZFBpeGVsRGF0YS0+c2l6ZSgpKTsKICAgICBSZXRhaW5QdHI8Q0dD
b2xvclNwYWNlUmVmPiBjb2xvclNwYWNlKEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZURldmlj
ZVJHQigpKTsKLSAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjb250ZXh0Q0coQWRvcHRDRiwg
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlKHRlbXBWZWN0b3IuZGF0YSgpLAorICAgIFJldGFpblB0cjxD
R0NvbnRleHRSZWY+IGNvbnRleHRDRyhBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGUobV91
cGxvYWRQaXhlbERhdGEtPmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcnR5UmVjdC53aWR0aCgpLCBk
aXJ0eVJlY3QuaGVpZ2h0KCksIDgsIHJvd0J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZS5n
ZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dC
aXRtYXBCeXRlT3JkZXIzMkhvc3QpKTsKQEAgLTI5OCwxOSArMjgxLDI3IEBAIHZvaWQgQ29udGVu
dExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAgICAgZ3JhcGhpY3NDb250
ZXh0LnRyYW5zbGF0ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOwogCiAgICAgbV9v
d25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eVJl
Y3QpOwotCi0gICAgcGl4ZWxzID0gdGVtcFZlY3Rvci5kYXRhKCk7Ci0gICAgYml0bWFwU2l6ZSA9
IGRpcnR5UmVjdC5zaXplKCk7CiAjZWxzZQogI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3Ig
eW91ciBwbGF0Zm9ybS4iCiAjZW5kaWYKLQotICAgIGlmIChwaXhlbHMpCi0gICAgICAgIHVwZGF0
ZVRleHR1cmVSZWN0KHBpeGVscywgcmVxdWlyZWRUZXh0dXJlU2l6ZSwgdXBkYXRlUmVjdCk7CiB9
CiAKLXZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZWN0KHZvaWQqIHBp
eGVscywgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRUZXh0dXJlU2l6ZSwgY29uc3QgSW50UmVjdCYg
dXBkYXRlUmVjdCkKK3ZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZWN0
SWZOZWVkZWQoKQogeworICAgIHZvaWQqIHBpeGVscyA9IDA7CisjaWYgUExBVEZPUk0oU0tJQSkK
KyAgICBpZiAobV91cGxvYWRQaXhlbENhbnZhcykgeworICAgICAgICBjb25zdCBTa0JpdG1hcCYg
Yml0bWFwID0gbV91cGxvYWRQaXhlbENhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChm
YWxzZSk7CisKKyAgICAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKGJpdG1hcCk7CisgICAgICAg
IC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHN1cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0aW9u
cz8KKyAgICAgICAgaWYgKGJpdG1hcC5jb25maWcoKSA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9D
b25maWcpCisgICAgICAgICAgICBwaXhlbHMgPSBiaXRtYXAuZ2V0UGl4ZWxzKCk7CisgICAgfQor
I2VuZGlmCisgICAgaWYgKG1fdXBsb2FkUGl4ZWxEYXRhKQorICAgICAgICBwaXhlbHMgPSBtX3Vw
bG9hZFBpeGVsRGF0YS0+ZGF0YSgpOworCiAgICAgaWYgKCFwaXhlbHMpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMzE4LDIyICszMDksMzAgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBk
YXRlVGV4dHVyZVJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRTaXplJiByZXF1aXIKICAgICBp
ZiAoIW1fY29udGVudHNUZXh0dXJlKQogICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZSA9IExheWVy
VGV4dHVyZTo6Y3JlYXRlKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+dGV4dHVyZU1hbmFnZXIo
KSk7CiAKLSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVkVGV4dHVy
ZVNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkgeworICAgIGlmICghbV9jb250ZW50c1Rl
eHR1cmUtPnJlc2VydmUobV9yZXF1aXJlZFRleHR1cmVTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSkpIHsKICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgbV9jb250ZW50c1RleHR1cmUtPmJpbmRUZXh0dXJlKCk7CiAKLSAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRo
KCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91cGxvYWRVcGRhdGVSZWN0
LngoKSwgbV91cGxvYWRVcGRhdGVSZWN0LnkoKSwgbV91cGxvYWRVcGRhdGVSZWN0LndpZHRoKCks
IG1fdXBsb2FkVXBkYXRlUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIHBpeGVscykpOwogCiAgICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShGbG9h
dFNpemUoKSk7CiAgICAgLy8gTGFyZ2UgbGF5ZXJzIGFsd2F5cyBzdGF5IGRpcnR5LCBiZWNhdXNl
IHRoZXkgbmVlZCB0byB1cGRhdGUgd2hlbiB0aGUgY29udGVudCByZWN0IGNoYW5nZXMuCiAgICAg
bV9jb250ZW50c0RpcnR5ID0gcmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpOworI2lmIFBMQVRG
T1JNKFNLSUEpCisgICAgbV91cGxvYWRQaXhlbENhbnZhcy5jbGVhcigpOworI2VuZGlmCisgICAg
bV91cGxvYWRQaXhlbERhdGEuY2xlYXIoKTsKIH0KIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6ZHJhdygpCiB7CisgICAgdXBkYXRlVGV4dHVyZVJlY3RJZk5lZWRlZCgpOworCiAgICAgaWYg
KG1fc2tpcHNEcmF3KQogICAgICAgICByZXR1cm47CiAKQEAgLTM1Nyw3ICszNTYsNyBAQCB2b2lk
IENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3KCkKICAgICAgICAgICAgICAgICAgICAgICAgICBz
di0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwgc3YtPnNoYWRlckFscGhhTG9jYXRpb24oKSk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRl
cmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3
VHJhbnNmb3JtKCksIG1fYm91bmRzLndpZHRoKCksIG1fYm91bmRzLmhlaWdodCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGRyYXdUcmFuc2Zvcm0oKSwgYm91bmRzKCkud2lkdGgoKSwgYm91
bmRzKCkuaGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd09wYWNpdHkoKSwg
c3YtPnNoYWRlck1hdHJpeExvY2F0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Yt
PnNoYWRlckFscGhhTG9jYXRpb24oKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmgKaW5kZXggMzM2MzUxOGRhNTMxYWM2MGQzMGQ3ZjgwZTdmNWM3NjAzYzMyYTM4MC4uNTg3
Njc3NjBlNmNmOTZmYmIzNzMyNTI1NTgyZGYwNDUwMTg5MWQxNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5oCkBAIC04MiwxNSArODIsMjUgQEAgcHVibGljOgogcHJvdGVjdGVkOgog
ICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSog
b3duZXIpOwogCi0gICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0
IEludFNpemUmIHJlcXVpcmVkVGV4dHVyZVNpemUsIGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3Qp
OwotCiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICBib29sIHJlcXVp
cmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKSBjb25zdDsKIAogICAgIE93blB0cjxMYXllclRleHR1cmU+
IG1fY29udGVudHNUZXh0dXJlOwogICAgIGJvb2wgbV9za2lwc0RyYXc7CiAKKyAgICBJbnRTaXpl
IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZTsKKyAgICBJbnRSZWN0IG1fdXBsb2FkVXBkYXRlUmVjdDsK
KworICAgIC8vIE9uIHBsYXRmb3JtcyB1c2luZyBTa2lhLCB3ZSB1c2UgdGhlIHNraWE6OlBsYXRm
b3JtQ2FudmFzIGZvciBjb250ZW50IGxheWVycworICAgIC8vIGFuZCB0aGUgbV91cGxvYWRQaXhl
bERhdGEgYnVmZmVyIGZvciBpbWFnZSBsYXllcnMuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBi
ZSB1c2luZyBtZW1vcnkgd2UgY29udHJvbCBmb3IgYWxsIHVwbG9hZHMuCisjaWYgUExBVEZPUk0o
U0tJQSkKKyAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+IG1fdXBsb2FkUGl4ZWxDYW52
YXM7CisjZW5kaWYKKyAgICBPd25QdHI8VmVjdG9yPHVpbnQ4X3Q+ID4gbV91cGxvYWRQaXhlbERh
dGE7CisKIHByaXZhdGU6CisgICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdElmTmVlZGVkKCk7CiAK
ICAgICBJbnRSZWN0IG1fdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzOwogICAgIEZsb2F0UG9pbnQg
bV9sYXllckNlbnRlckluU3VyZmFjZUNvb3JkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IGNkMjk5YzFhMGNlM2IzMGU5NWQ5MTRkZTA1MWI5NjMyMTk4NDljYWIuLmUyODlh
Mjc3NzM0YzRjY2NkYTY3ZmRhODE4ZmIxMTYzNWVlZjY5MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXll
ckNocm9taXVtLmNwcApAQCAtODQsNDYgKzg0LDM1IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVt
Ojp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
dm9pZCogcGl4ZWxzID0gMDsKLSAgICBJbnRTaXplIGJpdG1hcFNpemU7Ci0KICAgICBOYXRpdmVJ
bWFnZVB0ciBuYXRpdmVJbWFnZSA9IG1fY29udGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CiAKICNpZiBQTEFURk9STShTS0lBKQogICAgIC8vIFRoZSBsYXllciBjb250YWlucyBh
biBJbWFnZS4KICAgICBOYXRpdmVJbWFnZVNraWEqIHNraWFJbWFnZSA9IHN0YXRpY19jYXN0PE5h
dGl2ZUltYWdlU2tpYSo+KG5hdGl2ZUltYWdlKTsKICAgICBjb25zdCBTa0JpdG1hcCogc2tpYUJp
dG1hcCA9IHNraWFJbWFnZTsKLSAgICBiaXRtYXBTaXplID0gSW50U2l6ZShza2lhQml0bWFwLT53
aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7CisgICAgbV9yZXF1aXJlZFRleHR1cmVTaXpl
ID0gSW50U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7CiAg
ICAgQVNTRVJUKHNraWFCaXRtYXApOwogI2VsaWYgUExBVEZPUk0oQ0cpCiAgICAgLy8gTmF0aXZl
SW1hZ2VQdHIgaXMgYSBDR0ltYWdlUmVmIG9uIE1hYyBPUyBYLgogICAgIGludCB3aWR0aCA9IENH
SW1hZ2VHZXRXaWR0aChuYXRpdmVJbWFnZSk7CiAgICAgaW50IGhlaWdodCA9IENHSW1hZ2VHZXRI
ZWlnaHQobmF0aXZlSW1hZ2UpOwotICAgIGJpdG1hcFNpemUgPSBJbnRTaXplKHdpZHRoLCBoZWln
aHQpOworICAgIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7
CiAjZW5kaWYKIAogICAgIC8vIENsaXAgdGhlIGRpcnR5IHJlY3QgdG8gdGhlIGJpdG1hcCBkaW1l
bnNpb25zLgotICAgIEludFJlY3QgZGlydHlSZWN0KG1fZGlydHlSZWN0KTsKLSAgICBkaXJ0eVJl
Y3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoMCwgMCksIGJpdG1hcFNpemUpKTsKLQotICAg
IGlmICghbV9jb250ZW50c1RleHR1cmUgfHwgIW1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKGJp
dG1hcFNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKLSAgICAgICAgZGlydHlSZWN0ID0g
SW50UmVjdChJbnRQb2ludCgwLCAwKSwgYml0bWFwU2l6ZSk7Ci0gICAgZWxzZSBpZiAoIW1fY29u
dGVudHNEaXJ0eSkgewotICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZS0+cmVzZXJ2ZShiaXRtYXBT
aXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgbV91cGxvYWRVcGRhdGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX2RpcnR5UmVjdCk7Cisg
ICAgbV91cGxvYWRVcGRhdGVSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KDAsIDApLCBt
X3JlcXVpcmVkVGV4dHVyZVNpemUpKTsKIAogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgU2tBdXRv
TG9ja1BpeGVscyBsb2NrKCpza2lhQml0bWFwKTsKLSAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFD
b25maWcgPSBza2lhQml0bWFwLT5jb25maWcoKTsKICAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0
byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJhdGlvbnM/Ci0gICAgaWYgKHNraWFDb25maWcg
PT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKQotICAgICAgICBwaXhlbHMgPSBza2lhQml0
bWFwLT5nZXRQaXhlbHMoKTsKKyAgICBBU1NFUlQoc2tpYUJpdG1hcC0+Y29uZmlnKCk9PSBTa0Jp
dG1hcDo6a0FSR0JfODg4OF9Db25maWcpOworICAgIG1fdXBsb2FkUGl4ZWxEYXRhID0gbmV3IFZl
Y3Rvcjx1aW50OF90Pihza2lhQml0bWFwLT53aWR0aCgpICogc2tpYUJpdG1hcC0+aGVpZ2h0KCkg
KiA0KTsKKyAgICBza2lhQml0bWFwLT5jb3B5UGl4ZWxzVG8obV91cGxvYWRQaXhlbERhdGEtPmRh
dGEoKSwgbV91cGxvYWRQaXhlbERhdGEtPnNpemUoKSk7CiAjZWxpZiBQTEFURk9STShDRykKICAg
ICAvLyBGSVhNRTogd2Ugc2hvdWxkIGdldCByaWQgb2YgdGhpcyB0ZW1wb3JhcnkgY29weSB3aGVy
ZSBwb3NzaWJsZS4KICAgICBpbnQgdGVtcFJvd0J5dGVzID0gd2lkdGggKiA0OwotICAgIFZlY3Rv
cjx1aW50OF90PiB0ZW1wVmVjdG9yOwotICAgIHRlbXBWZWN0b3IucmVzaXplKGhlaWdodCAqIHRl
bXBSb3dCeXRlcyk7CisgICAgbV91cGxvYWRQaXhlbERhdGEgPSBuZXcgVmVjdG9yPHVpbnQ4X3Q+
KGhlaWdodCAqIHRlbXBSb3dCeXRlcyk7CiAgICAgLy8gTm90ZSB3ZSBkbyBub3QgemVybyB0aGlz
IHZlY3RvciBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8KICAgICAvLyBjb21wbGV0ZWx5IG92ZXJ3cml0
ZSBpdHMgY29udGVudHMgd2l0aCB0aGUgaW1hZ2UgYmVsb3cuCiAgICAgLy8gVHJ5IHRvIHJldXNl
IHRoZSBjb2xvciBzcGFjZSBmcm9tIHRoZSBpbWFnZSB0byBwcmVzZXJ2ZSBpdHMgY29sb3JzLgpA
QCAtMTQzLDcgKzEzMiw3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50
c0lmRGlydHkoKQogICAgICAgICBjb2xvclNwYWNlID0gY29sb3JTcGFjZVJlbGVhc2VyLmdldCgp
OwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gdGVt
cENvbnRleHQoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHRlbXBWZWN0b3IuZGF0YSgp
LAorICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IHRlbXBDb250ZXh0KEFkb3B0Q0YsIENHQml0
bWFwQ29udGV4dENyZWF0ZShtX3VwbG9hZFBpeGVsRGF0YS0+ZGF0YSgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aWR0aCwgaGVpZ2h0LCA4LCB0ZW1wUm93Qnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3Bh
Y2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dC
aXRtYXBCeXRlT3JkZXIzMkhvc3QpKTsKQEAgLTE1MSwxMyArMTQwLDkgQEAgdm9pZCBJbWFnZUxh
eWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAgICAgQ0dDb250ZXh0RHJhd0lt
YWdlKHRlbXBDb250ZXh0LmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICBDR1JlY3RNYWtl
KDAsIDAsIHN0YXRpY19jYXN0PENHRmxvYXQ+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4o
aGVpZ2h0KSksCiAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlKTsKLSAgICBwaXhl
bHMgPSB0ZW1wVmVjdG9yLmRhdGEoKTsKICNlbHNlCiAjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50
IGZvciB5b3VyIHBsYXRmb3JtLiIKICNlbmRpZgotCi0gICAgaWYgKHBpeGVscykKLSAgICAgICAg
dXBkYXRlVGV4dHVyZVJlY3QocGl4ZWxzLCBiaXRtYXBTaXplLCAgZGlydHlSZWN0KTsKIH0KIAog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82569</attachid>
            <date>2011-02-15 18:37:31 -0800</date>
            <delta_ts>2011-02-15 19:17:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54315-20110215183730.patch</filename>
            <type>text/plain</type>
            <size>22955</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4NDkxMDEwMjdiNzlhN2RlZGI5NTUwZjVhOGM1Mjg5M2NkZTkzZDBmLi44
MTMwNDI3MzAyNGRiNjFhMGQ4MzE3NjQyYWRlMmVkOGE3ZjhkZTY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzggQEAKKzIwMTEtMDItMTUgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Y2hyb21pdW1dIFVwZGF0ZSB0ZXh0dXJlIGZvciBDb250ZW50TGF5ZXJDaHJvbWl1bXMgaW4gZHJh
dygpIGNhbGwgaW5zdGVhZCBvZiB1cGRhdGVDb250ZW50cy4uKCkgY2FsbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQzMTUKKworICAgICAgICBUaGlz
IGRlZmVycyBhbGwgb3BlcmF0aW9ucyBvbiB0aGUgY29tcG9zaXRvcidzIEdMIGNvbnRleHQgdW50
aWwgdGhlCisgICAgICAgIGRyYXcoKSBjYWxsIHdoaWNoIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBt
b3ZpbmcgdGhlIGRyYXcoKSBvZmYtdGhyZWFkLgorICAgICAgICBBbHNvIGNsZWFucyB1cCB0aGUg
dXBkYXRlIGN5Y2xlIGEgYml0IC0gdGhlcmUgd2VyZSBzb21lIHVudXNlZCBsb2NhbAorICAgICAg
ICB2YXJpYWJsZXMgYW5kIHdoYXRub3QuCisKKyAgICAgICAgT25lIGNvbnNlcXVlbmNlIG9mIHRo
aXMgY2hhbmdlIGlzIHRoYXQgdGhlIHVwbG9hZCBidWZmZXIgaXMgcmV0YWluZWQKKyAgICAgICAg
YWNyb3NzIHVwZGF0ZXMgbm93IGluc3RlYWQgb2YgYWxsb2NhdGVkIGJ5IGVhY2ggcGFpbnQuICBU
aGlzIGlzCisgICAgICAgIG5lY2Vzc2FyeSBzbyB0aGF0IHRoZSBmdWxsIGxheWVyIGNvbnRlbnRz
IGNhbiBiZSB1cGxvYWRlZCBpZiB0aGUKKyAgICAgICAgdGV4dHVyZSBtYW5hZ2VyIGV2aWN0cyB0
aGUgbGF5ZXIncyBiYWNraW5nIHRleHR1cmUuICBUaGlzIGNvc3RzIG1vcmUKKyAgICAgICAgcGVy
c2lzdGVudCBtZW1vcnkgYnV0IGF2b2lkcyBsb3RzIG9mIGFsbG9jYXRvciBjaHVybiBvbiB1cGRh
dGVzLgorICAgICAgICBBbm90aGVyIG5vbm9idmlvdXMgZGV0YWlsIGlzIHRoYXQgSSBoYXZlIHRv
IHVwZGF0ZSB0aGUgdGV4dHVyZSBmb3IKKyAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW1zIGlu
IGJpbmRDb250ZW50c1RleHR1cmUoKSBiZWNhdXNlIG1hc2sgbGF5ZXJzCisgICAgICAgIG5ldmVy
IGRyYXcoKSwgdGhleSBhcmUgaW5zdGVhZCBib3VuZCB0byB0aGUgc2Vjb25kYXJ5IHRleHR1cmUg
dW5pdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpy
ZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXll
ckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudExheWVyQ2hyb21pdW06OnJlc2l6ZVVwbG9hZEJ1ZmZlckZvckltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZWN0SWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29u
dGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldEJvdW5k
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
OgorCiAyMDExLTAyLTEwICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE5hdGUgQ2hhcGluLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwCmluZGV4IGEzOGY2YmQyMTI2OTBhMjhmOTgzOGRiODk2MzVhODQxNGNiNmQ3N2Uu
LjFkODQxZmEyMDkwMjc3MTlmYTRhYTRmZWZkOTkyODkyZWYyMGNkNzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE1NCw5ICsxNTQsOSBAQCBib29sIENvbnRlbnRM
YXllckNocm9taXVtOjpyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkgY29uc3QKICAgICAvLyBv
bmUgb2YgdGhlIGxheWVyJ3MgZGltZW5zaW9ucyBpcyBsYXJnZXIgdGhhbiAyMDAwIHBpeGVscyBv
ciB0aGUgc2l6ZSBvZgogICAgIC8vIHN1cmZhY2UgaXQncyByZW5kZXJpbmcgaW50by4gVGhpcyBp
cyBhIHRlbXBvcmFyeSBtZWFzdXJlIHVudGlsIGxheWVyIHRpbGluZyBpcyBpbXBsZW1lbnRlZC4K
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heExheWVyU2l6ZSA9IDIwMDA7Ci0gICAgcmV0dXJuICht
X2JvdW5kcy53aWR0aCgpID4gbWF4KG1heExheWVyU2l6ZSwgbV90YXJnZXRSZW5kZXJTdXJmYWNl
LT5jb250ZW50UmVjdCgpLndpZHRoKCkpCi0gICAgICAgICAgICB8fCBtX2JvdW5kcy5oZWlnaHQo
KSA+IG1heChtYXhMYXllclNpemUsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3Qo
KS5oZWlnaHQoKSkKLSAgICAgICAgICAgIHx8ICFsYXllclJlbmRlcmVyKCktPmNoZWNrVGV4dHVy
ZVNpemUobV9ib3VuZHMpKTsKKyAgICByZXR1cm4gKGJvdW5kcygpLndpZHRoKCkgPiBtYXgobWF4
TGF5ZXJTaXplLCBtX3RhcmdldFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCkud2lkdGgoKSkK
KyAgICAgICAgICAgIHx8IGJvdW5kcygpLmhlaWdodCgpID4gbWF4KG1heExheWVyU2l6ZSwgbV90
YXJnZXRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLmhlaWdodCgpKQorICAgICAgICAgICAg
fHwgIWxheWVyUmVuZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShib3VuZHMoKSkpOwogfQogCiB2
b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQpAQCAtMTY5
LDEyICsxNjksOSBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lm
RGlydHkoKQogCiAgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CiAKLSAgICB2b2lkKiBwaXhl
bHMgPSAwOwogICAgIEludFJlY3QgZGlydHlSZWN0OwotICAgIEludFJlY3QgdXBkYXRlUmVjdDsK
LSAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemU7Ci0gICAgSW50U2l6ZSBiaXRtYXBTaXpl
OwotICAgIEludFJlY3QgYm91bmRzUmVjdChJbnRQb2ludCgwLCAwKSwgbV9ib3VuZHMpOworICAg
IEludFJlY3QgYm91bmRzUmVjdChJbnRQb2ludCgwLCAwKSwgYm91bmRzKCkpOworICAgIEludFBv
aW50IHBhaW50aW5nT2Zmc2V0OwogCiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHRlc3Qgd2hl
biB0aWxlZCBsYXllcnMgYXJlIGltcGxlbWVudGVkLgogICAgIGlmIChyZXF1aXJlc0NsaXBwZWRV
cGRhdGVSZWN0KCkpIHsKQEAgLTE5MCw3ICsxODcsNyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAgICAgICBjb25zdCBJbnRSZWN0IGNsaXBS
ZWN0ID0gbV90YXJnZXRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpOwogCiAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGxheWVyT3JpZ2luVHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgp
OwotICAgICAgICBsYXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogbV9ib3Vu
ZHMud2lkdGgoKSwgLTAuNSAqIG1fYm91bmRzLmhlaWdodCgpLCAwKTsKKyAgICAgICAgbGF5ZXJP
cmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIGJvdW5kcygpLndpZHRoKCksIC0wLjUg
KiBib3VuZHMoKS5oZWlnaHQoKSwgMCk7CiAKICAgICAgICAgLy8gRm9yIG5vdyB3ZSBhcHBseSB0
aGUgbGFyZ2UgbGF5ZXIgdHJlYXRtZW50IG9ubHkgZm9yIGxheWVycyB0aGF0IGFyZSBlaXRoZXIg
dW50cmFuc2Zvcm1lZAogICAgICAgICAvLyBvciBhcmUgcHVyZWx5IHRyYW5zbGF0ZWQuIFRoZWly
IG1hdHJpeCBpcyBleHBlY3RlZCB0byBiZSBpbnZlcnRpYmxlLgpAQCAtMTk4LDcgKzE5NSw3IEBA
IHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAKICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGFyZ2V0VG9MYXllck1hdHJpeCA9IGxheWVyT3Jp
Z2luVHJhbnNmb3JtLmludmVyc2UoKTsKICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdEluTGF5
ZXJDb29yZHMgPSB0YXJnZXRUb0xheWVyTWF0cml4Lm1hcFJlY3QoY2xpcFJlY3QpOwotICAgICAg
ICB2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgbV9ib3Vu
ZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpKTsKKyAgICAgICAgdmlzaWJsZVJlY3RJbkxh
eWVyQ29vcmRzLmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGJvdW5kcygpLndpZHRoKCksIGJvdW5k
cygpLmhlaWdodCgpKSk7CiAKICAgICAgICAgLy8gRm9yIG5vcm1hbCBsYXllcnMsIHRoZSBjZW50
ZXIgb2YgdGhlIHRleHR1cmUgY29ycmVzcG9uZHMgd2l0aCB0aGUgY2VudGVyIG9mIHRoZSBsYXll
ci4KICAgICAgICAgLy8gSW4gbGFyZ2UgbGF5ZXJzIHRoZSBjZW50ZXIgb2YgdGhlIHRleHR1cmUg
aXMgdGhlIGNlbnRlciBvZiB0aGUgdmlzaWJsZSByZWdpb24gc28gd2UgaGF2ZQpAQCAtMjEyLDkg
KzIwOSwxMyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGly
dHkoKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gSWYgdGhl
IHZpc2libGUgcG9ydGlvbiBvZiB0aGUgbGF5ZXIgaXMgZGlmZmVyZW50IGZyb20gdGhlIGxhc3Qg
dXBsb2FkLCBvciBpZiBvdXIgYmFja2luZwotICAgICAgICAvLyB0ZXh0dXJlIGhhcyBiZWVuIGV2
aWN0ZWQsIHRoZW4gdGhlIHdob2xlIGxheWVyIGlzIGNvbnNpZGVyZWQgZGlydHkuCi0gICAgICAg
IGlmICh2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMgIT0gbV92aXNpYmxlUmVjdEluTGF5ZXJDb29y
ZHMgfHwgIW1fY29udGVudHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChy
ZXF1aXJlZFRleHR1cmVTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisgICAgICAgIC8v
IElmIHdlIG5lZWQgdG8gcmVzaXplIHRoZSB1cGxvYWQgYnVmZmVyIHdlIGhhdmUgdG8gcmVwYWlu
dCBldmVyeXRoaW5nLgorICAgICAgICBpZiAobV91cGxvYWRCdWZmZXJTaXplICE9IHZpc2libGVS
ZWN0SW5MYXllckNvb3Jkcy5zaXplKCkpIHsKKyAgICAgICAgICAgIHJlc2l6ZVVwbG9hZEJ1ZmZl
cih2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fZGlydHlS
ZWN0ID0gYm91bmRzUmVjdDsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiB0aGUgdmlzaWJsZSBw
b3J0aW9uIG9mIHRoZSBsYXllciBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbGFzdCB1cGxvYWQuCisg
ICAgICAgIGlmICh2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMgIT0gbV92aXNpYmxlUmVjdEluTGF5
ZXJDb29yZHMpCiAgICAgICAgICAgICBtX2RpcnR5UmVjdCA9IGJvdW5kc1JlY3Q7CiAgICAgICAg
IG1fdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzID0gdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzOwog
CkBAIC0yMjQsOTMgKzIyNSwxMDAgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29udGVudHNJZkRpcnR5KCkKIAogICAgICAgICAvLyBXaGF0IHRoZSByZWN0YW5nbGVzIG1lYW46
CiAgICAgICAgIC8vICAgZGlydHlSZWN0OiBUaGUgcmVnaW9uIG9mIHRoaXMgbGF5ZXIgdGhhdCB3
aWxsIGJlIHVwZGF0ZWQuCi0gICAgICAgIC8vICAgdXBkYXRlUmVjdDogVGhlIHJlZ2lvbiBvZiB0
aGUgbGF5ZXIncyB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1cGxvYWRlZCBpbnRvLgotICAgICAgICAv
LyAgIHJlcXVpcmVkVGV4dHVyZVNpemU6IGlzIHRoZSByZXF1aXJlZCBzaXplIG9mIHRoaXMgbGF5
ZXIncyB0ZXh0dXJlLgorICAgICAgICAvLyAgIG1fdXBsb2FkVXBkYXRlUmVjdDogVGhlIHJlZ2lv
biBvZiB0aGUgbGF5ZXIncyB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1cGxvYWRlZCBpbnRvLgogICAg
ICAgICBkaXJ0eVJlY3QgPSB2aXNpYmxlRGlydHlSZWN0SW5MYXllclNwYWNlOwotICAgICAgICB1
cGRhdGVSZWN0ID0gZGlydHlSZWN0OworICAgICAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBkaXJ0
eVJlY3Q7CiAgICAgICAgIEludFNpemUgdmlzaWJsZVJlY3RPZmZzZXRJbkxheWVyQ29vcmRzKHZp
c2libGVSZWN0SW5MYXllckNvb3Jkcy54KCksIHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy55KCkp
OwotICAgICAgICB1cGRhdGVSZWN0Lm1vdmUoLXZpc2libGVSZWN0T2Zmc2V0SW5MYXllckNvb3Jk
cyk7Ci0gICAgICAgIHJlcXVpcmVkVGV4dHVyZVNpemUgPSB2aXNpYmxlUmVjdEluTGF5ZXJDb29y
ZHMuc2l6ZSgpOworICAgICAgICBwYWludGluZ09mZnNldCA9IEludFBvaW50KHZpc2libGVSZWN0
T2Zmc2V0SW5MYXllckNvb3Jkcyk7CisgICAgICAgIG1fdXBsb2FkVXBkYXRlUmVjdC5tb3ZlKC12
aXNpYmxlUmVjdE9mZnNldEluTGF5ZXJDb29yZHMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRp
cnR5UmVjdCA9IEludFJlY3QobV9kaXJ0eVJlY3QpOwotICAgICAgICByZXF1aXJlZFRleHR1cmVT
aXplID0gbV9ib3VuZHM7CiAgICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIHJl
YWxsb2NhdGVkIHRoZW4gd2UgbXVzdCByZWRyYXcgdGhlIGVudGlyZQogICAgICAgICAvLyBjb250
ZW50cyBvZiB0aGUgbGF5ZXIuCi0gICAgICAgIGlmICghbV9jb250ZW50c1RleHR1cmUgfHwgIW1f
Y29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKHJlcXVpcmVkVGV4dHVyZVNpemUsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBKSkKKyAgICAgICAgaWYgKG1fdXBsb2FkQnVmZmVyU2l6ZSAhPSBib3VuZHMo
KSkgeworICAgICAgICAgICAgcmVzaXplVXBsb2FkQnVmZmVyKGJvdW5kcygpKTsKICAgICAgICAg
ICAgIGRpcnR5UmVjdCA9IGJvdW5kc1JlY3Q7Ci0gICAgICAgIGVsc2UgeworICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLy8gQ2xpcCB0aGUgZGlydHlSZWN0IHRvIHRoZSBzaXplIG9mIHRo
ZSBsYXllciB0byBhdm9pZCBkcmF3aW5nCiAgICAgICAgICAgICAvLyBvdXRzaWRlIHRoZSBib3Vu
ZHMgb2YgdGhlIGJhY2tpbmcgdGV4dHVyZS4KICAgICAgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNl
Y3QoYm91bmRzUmVjdCk7CiAgICAgICAgIH0KLSAgICAgICAgdXBkYXRlUmVjdCA9IGRpcnR5UmVj
dDsKKyAgICAgICAgbV91cGxvYWRVcGRhdGVSZWN0ID0gZGlydHlSZWN0OwogICAgIH0KIAogICAg
IGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICNpZiBQTEFURk9S
TShTS0lBKQotICAgIGNvbnN0IFNrQml0bWFwKiBza2lhQml0bWFwID0gMDsKLSAgICBPd25QdHI8
c2tpYTo6UGxhdGZvcm1DYW52YXM+IGNhbnZhczsKICAgICBPd25QdHI8UGxhdGZvcm1Db250ZXh0
U2tpYT4gc2tpYUNvbnRleHQ7Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3ND
b250ZXh0OwogCi0gICAgY2FudmFzLnNldChuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoZGlydHlS
ZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWlnaHQoKSwgZmFsc2UpKTsKLSAgICBza2lhQ29udGV4
dC5zZXQobmV3IFBsYXRmb3JtQ29udGV4dFNraWEoY2FudmFzLmdldCgpKSk7CisgICAgc2tpYUNv
bnRleHQuc2V0KG5ldyBQbGF0Zm9ybUNvbnRleHRTa2lhKG1fdXBsb2FkUGl4ZWxDYW52YXMuZ2V0
KCkpKTsKIAogICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGdldCB0ZXh0IHRvIHNob3cgdXAgY29y
cmVjdGx5LgotICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgdGFrZSB1cyBkb3duIGEgdmVyeSBzbG93
IHRleHQgcmVuZGVyaW5nIHBhdGg/CiAgICAgc2tpYUNvbnRleHQtPnNldERyYXdpbmdUb0ltYWdl
QnVmZmVyKHRydWUpOwogCi0gICAgZ3JhcGhpY3NDb250ZXh0LnNldChuZXcgR3JhcGhpY3NDb250
ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqPihza2lhQ29udGV4
dC5nZXQoKSkpKTsKLQotICAgIC8vIEJyaW5nIHRoZSBjYW52YXMgaW50byB0aGUgY29vcmRpbmF0
ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCi0gICAgY2FudmFzLT50cmFuc2xhdGUoc3RhdGlj
X2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1k
aXJ0eVJlY3QueSgpKSk7Ci0KLSAgICBtX293bmVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50
cygqZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eVJlY3QpOwotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRt
YXAgPSBjYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwotICAgIHNraWFC
aXRtYXAgPSAmYml0bWFwOwotICAgIEFTU0VSVChza2lhQml0bWFwKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQgZ3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqPihza2lhQ29udGV4dC5nZXQoKSkpOwogCi0gICAgU2tBdXRvTG9ja1BpeGVscyBsb2Nr
KCpza2lhQml0bWFwKTsKLSAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBza2lhQml0
bWFwLT5jb25maWcoKTsKLSAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBzdXBwb3J0IG1vcmUg
aW1hZ2UgY29uZmlndXJhdGlvbnM/Ci0gICAgaWYgKHNraWFDb25maWcgPT0gU2tCaXRtYXA6OmtB
UkdCXzg4ODhfQ29uZmlnKSB7Ci0gICAgICAgIHBpeGVscyA9IHNraWFCaXRtYXAtPmdldFBpeGVs
cygpOwotICAgICAgICBiaXRtYXBTaXplID0gSW50U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBz
a2lhQml0bWFwLT5oZWlnaHQoKSk7Ci0gICAgfQogI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgVmVj
dG9yPHVpbnQ4X3Q+IHRlbXBWZWN0b3I7Ci0gICAgaW50IHJvd0J5dGVzID0gNCAqIGRpcnR5UmVj
dC53aWR0aCgpOwotICAgIHRlbXBWZWN0b3IucmVzaXplKHJvd0J5dGVzICogZGlydHlSZWN0Lmhl
aWdodCgpKTsKLSAgICBtZW1zZXQodGVtcFZlY3Rvci5kYXRhKCksIDAsIHRlbXBWZWN0b3Iuc2l6
ZSgpKTsKKyAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjbGVhciB0aGUgZGlydHkgcmVjdGFu
Z2xlIGluIHRoZSB1cGxvYWQgYnVmZmVyPwogICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+
IGNvbG9yU3BhY2UoQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAg
IFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNvbnRleHRDRyhBZG9wdENGLCBDR0JpdG1hcENvbnRl
eHRDcmVhdGUodGVtcFZlY3Rvci5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eVJlY3Qud2lkdGgo
KSwgZGlydHlSZWN0LmhlaWdodCgpLCA4LCByb3dCeXRlcywKKyAgICBSZXRhaW5QdHI8Q0dDb250
ZXh0UmVmPiBjb250ZXh0Q0coQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fdXBsb2Fk
UGl4ZWxEYXRhLT5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VwbG9hZEJ1ZmZlclNpemUud2lkdGgo
KSwgbV91cGxvYWRCdWZmZXJTaXplLmhlaWdodCgpLCA4LCByb3dCeXRlcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbG9yU3BhY2UuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0KSk7Ci0gICAgQ0dDb250ZXh0VHJhbnNs
YXRlQ1RNKGNvbnRleHRDRy5nZXQoKSwgMCwgZGlydHlSZWN0LmhlaWdodCgpKTsKKyAgICBDR0Nv
bnRleHRUcmFuc2xhdGVDVE0oY29udGV4dENHLmdldCgpLCAwLCBtX3VwbG9hZEJ1ZmZlclNpemUu
aGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHRDRy5nZXQoKSwgMSwgLTEp
OwogCiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0Q0cuZ2V0KCkp
OworI2Vsc2UKKyNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgor
I2VuZGlmCiAKLSAgICAvLyBUcmFuc2xhdGUgdGhlIGdyYXBoaWNzIGNvbnRleHQgaW50byB0aGUg
Y29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIGRpcnR5IHJlY3QuCi0gICAgZ3JhcGhpY3NDb250ZXh0
LnRyYW5zbGF0ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOworICAgIGdyYXBoaWNz
Q29udGV4dC5zYXZlKCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZSgtcGFpbnRpbmdP
ZmZzZXQueCgpLCAtcGFpbnRpbmdPZmZzZXQueSgpKTsKKyAgICBncmFwaGljc0NvbnRleHQuY2xl
YXJSZWN0KGRpcnR5UmVjdCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAoZGlydHlSZWN0KTsK
IAogICAgIG1fb3duZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGdyYXBoaWNzQ29udGV4
dCwgZGlydHlSZWN0KTsKKyAgICBncmFwaGljc0NvbnRleHQucmVzdG9yZSgpOworfQogCi0gICAg
cGl4ZWxzID0gdGVtcFZlY3Rvci5kYXRhKCk7Ci0gICAgYml0bWFwU2l6ZSA9IGRpcnR5UmVjdC5z
aXplKCk7Cit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXJGb3JJ
bWFnZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHNpemVfdCBidWZmZXJTaXplID0gc2l6
ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAqIDQ7CisgICAgbV91cGxvYWRQaXhlbERhdGEgPSBu
ZXcgVmVjdG9yPHVpbnQ4X3Q+KGJ1ZmZlclNpemUpOworI2lmIFBMQVRGT1JNKENHKQorICAgIG1l
bXNldChtX3VwbG9hZFBpeGVsRGF0YS0+ZGF0YSgpLCAwLCBidWZmZXJTaXplKTsKKyNlbmRpZgor
ICAgIG1fdXBsb2FkQnVmZmVyU2l6ZSA9IHNpemU7Cit9Cit2b2lkIENvbnRlbnRMYXllckNocm9t
aXVtOjpyZXNpemVVcGxvYWRCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyNpZiBQTEFU
Rk9STShTS0lBKQorICAgIG1fdXBsb2FkUGl4ZWxDYW52YXMgPSBuZXcgc2tpYTo6UGxhdGZvcm1D
YW52YXMoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBmYWxzZSk7CisgICAgbV91cGxvYWRC
dWZmZXJTaXplID0gc2l6ZTsKICNlbHNlCi0jZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5
b3VyIHBsYXRmb3JtLiIKKyAgICByZXNpemVVcGxvYWRCdWZmZXJGb3JJbWFnZShzaXplKTsKICNl
bmRpZgotCi0gICAgaWYgKHBpeGVscykKLSAgICAgICAgdXBkYXRlVGV4dHVyZVJlY3QocGl4ZWxz
LCByZXF1aXJlZFRleHR1cmVTaXplLCB1cGRhdGVSZWN0KTsKIH0KIAotdm9pZCBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZVJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRTaXpl
JiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQordm9pZCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZVJlY3RJZk5lZWRlZCgpCiB7CisgICAg
dWludDhfdCogcGl4ZWxzID0gMDsKKyAgICBpZiAoIW1fdXBsb2FkVXBkYXRlUmVjdC5pc0VtcHR5
KCkpIHsKKyNpZiBQTEFURk9STShTS0lBKQorICAgICAgICBpZiAobV91cGxvYWRQaXhlbENhbnZh
cykgeworICAgICAgICAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IG1fdXBsb2FkUGl4ZWxD
YW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgICAgICAgICAgYml0
bWFwLmxvY2tQaXhlbHMoKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHN1
cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucz8KKyAgICAgICAgICAgIGlmIChiaXRtYXAu
Y29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKQorICAgICAgICAgICAgICAg
IHBpeGVscyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihiaXRtYXAuZ2V0UGl4ZWxzKCkpOworICAg
ICAgICB9CisjZW5kaWYKKyAgICAgICAgaWYgKG1fdXBsb2FkUGl4ZWxEYXRhKQorICAgICAgICAg
ICAgcGl4ZWxzID0gbV91cGxvYWRQaXhlbERhdGEtPmRhdGEoKTsKKyAgICB9CisKICAgICBpZiAo
IXBpeGVscykKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMTgsMTUgKzMyNiwzOSBAQCB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0
IEludFNpemUmIHJlcXVpcgogICAgIGlmICghbV9jb250ZW50c1RleHR1cmUpCiAgICAgICAgIG1f
Y29udGVudHNUZXh0dXJlID0gTGF5ZXJUZXh0dXJlOjpjcmVhdGUoY29udGV4dCwgbGF5ZXJSZW5k
ZXJlcigpLT50ZXh0dXJlTWFuYWdlcigpKTsKIAotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUt
PnJlc2VydmUocmVxdWlyZWRUZXh0dXJlU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKSB7
CisgICAgLy8gSWYgd2UgaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlIHdlIGhhdmUgdG8g
dXBsb2FkIHRoZSBmdWxsIGNvbnRlbnRzLgorICAgIGlmICghbV9jb250ZW50c1RleHR1cmUtPmlz
VmFsaWQobV91cGxvYWRCdWZmZXJTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisgICAg
ICAgIG1fdXBsb2FkVXBkYXRlUmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fdXBsb2Fk
QnVmZmVyU2l6ZSk7CisKKyAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKG1fdXBs
b2FkQnVmZmVyU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKSB7CiAgICAgICAgIG1fc2tp
cHNEcmF3ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fY29udGVudHNU
ZXh0dXJlLT5iaW5kVGV4dHVyZSgpOworICAgIGNvbnN0IHNpemVfdCBkZXN0U3RyaWRlID0gbV91
cGxvYWRVcGRhdGVSZWN0LndpZHRoKCkgKiA0OworICAgIFZlY3Rvcjx1aW50OF90PiB1cGxvYWRC
dWZmZXIobV91cGxvYWRVcGRhdGVSZWN0LmhlaWdodCgpICogZGVzdFN0cmlkZSk7CisKKyAgICBJ
bnRSZWN0IHNyY1JlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBib3VuZHMoKSk7CisgICAg
aWYgKHJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKSkKKyAgICAgICAgc3JjUmVjdCA9IG1fdmlz
aWJsZVJlY3RJbkxheWVyQ29vcmRzOworICAgIGNvbnN0IHNpemVfdCBzcmNTdHJpZGUgPSBzcmNS
ZWN0LndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fdXBsb2FkVXBk
YXRlUmVjdC5oZWlnaHQoKTsgKytyb3cpIHsKKyAgICAgICAgcHRyZGlmZl90IHNyY09mZnNldCA9
IChtX3VwbG9hZFVwZGF0ZVJlY3QueSgpICsgcm93KSAqIHNyY1N0cmlkZSArIG1fdXBsb2FkVXBk
YXRlUmVjdC54KCkgKiA0OworICAgICAgICBwdHJkaWZmX3QgZGVzdE9mZnNldCA9IHJvdyAqIGRl
c3RTdHJpZGU7CisgICAgICAgIG1lbWNweSh1cGxvYWRCdWZmZXIuZGF0YSgpICsgZGVzdE9mZnNl
dCwgcGl4ZWxzICsgc3JjT2Zmc2V0LCBkZXN0U3RyaWRlKTsKKyAgICB9CiAKLSAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCks
IHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgbV9jb250ZW50c1RleHR1cmUt
PmJpbmRUZXh0dXJlKCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFN1YkltYWdlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV91cGxvYWRVcGRhdGVSZWN0LngoKSwgbV91cGxvYWRVcGRhdGVS
ZWN0LnkoKSwgbV91cGxvYWRVcGRhdGVSZWN0LndpZHRoKCksIG1fdXBsb2FkVXBkYXRlUmVjdC5o
ZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkQnVmZmVyLmRhdGEoKSkp
OworI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgaWYgKG1fdXBsb2FkUGl4ZWxDYW52YXMpCisgICAg
ICAgIG1fdXBsb2FkUGl4ZWxDYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2Up
LnVubG9ja1BpeGVscygpOworI2VuZGlmCiAKKyAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBJbnRS
ZWN0KCk7CiAgICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShGbG9hdFNpemUoKSk7CiAgICAgLy8gTGFy
Z2UgbGF5ZXJzIGFsd2F5cyBzdGF5IGRpcnR5LCBiZWNhdXNlIHRoZXkgbmVlZCB0byB1cGRhdGUg
d2hlbiB0aGUgY29udGVudCByZWN0IGNoYW5nZXMuCiAgICAgbV9jb250ZW50c0RpcnR5ID0gcmVx
dWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpOwpAQCAtMzM0LDYgKzM2Niw4IEBAIHZvaWQgQ29udGVu
dExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZWN0KHZvaWQqIHBpeGVscywgY29uc3QgSW50
U2l6ZSYgcmVxdWlyCiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXcoKQogeworICAg
IHVwZGF0ZVRleHR1cmVSZWN0SWZOZWVkZWQoKTsKKwogICAgIGlmIChtX3NraXBzRHJhdykKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0zNTcsNyArMzkxLDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6ZHJhdygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3YtPnNoYWRlck1hdHJpeExv
Y2F0aW9uKCksIHN2LT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9u
TWF0cml4KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1RyYW5zZm9ybSgpLCBtX2Jv
dW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBkcmF3VHJhbnNmb3JtKCksIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdPcGFjaXR5KCksIHN2LT5zaGFkZXJNYXRyaXhM
b2NhdGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN2LT5zaGFkZXJBbHBoYUxvY2F0
aW9uKCkpOwogICAgIH0KQEAgLTM3Miw2ICs0MDYsOCBAQCB2b2lkIENvbnRlbnRMYXllckNocm9t
aXVtOjp1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKQogCiB2b2lkIENvbnRlbnRMYXllckNocm9t
aXVtOjpiaW5kQ29udGVudHNUZXh0dXJlKCkKIHsKKyAgICB1cGRhdGVUZXh0dXJlUmVjdElmTmVl
ZGVkKCk7CisKICAgICBpZiAobV9jb250ZW50c1RleHR1cmUpCiAgICAgICAgIG1fY29udGVudHNU
ZXh0dXJlLT5iaW5kVGV4dHVyZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgK
aW5kZXggMzM2MzUxOGRhNTMxYWM2MGQzMGQ3ZjgwZTdmNWM3NjAzYzMyYTM4MC4uMjNkNTk3MTI3
NWI5MTRhZTczNDY3NGYwNDY4ZWM3ZTYwMTU3MTg1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJD
aHJvbWl1bS5oCkBAIC04MiwxNSArODIsMjggQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4
cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIp
OwogCi0gICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFNp
emUmIHJlcXVpcmVkVGV4dHVyZVNpemUsIGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpOwotCiAg
ICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICBib29sIHJlcXVpcmVzQ2xp
cHBlZFVwZGF0ZVJlY3QoKSBjb25zdDsKKyAgICB2b2lkIHJlc2l6ZVVwbG9hZEJ1ZmZlcihjb25z
dCBJbnRTaXplJik7CisgICAgdm9pZCByZXNpemVVcGxvYWRCdWZmZXJGb3JJbWFnZShjb25zdCBJ
bnRTaXplJik7CiAKICAgICBPd25QdHI8TGF5ZXJUZXh0dXJlPiBtX2NvbnRlbnRzVGV4dHVyZTsK
ICAgICBib29sIG1fc2tpcHNEcmF3OwogCisgICAgLy8gVGhlIHNpemUgb2YgdGhlIHVwbG9hZCBi
dWZmZXIgKGFsc28gdGhlIHNpemUgb2Ygb3VyIGJhY2tpbmcgdGV4dHVyZSkuCisgICAgSW50U2l6
ZSBtX3VwbG9hZEJ1ZmZlclNpemU7CisgICAgLy8gVGhlIHBvcnRpb24gb2YgdGhlIHVwbG9hZCBi
dWZmZXIgdGhhdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZSwgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRo
ZSB0ZXh0dXJlLgorICAgIEludFJlY3QgbV91cGxvYWRVcGRhdGVSZWN0OworICAgIC8vIE9uIHBs
YXRmb3JtcyB1c2luZyBTa2lhLCB3ZSB1c2UgdGhlIHNraWE6OlBsYXRmb3JtQ2FudmFzIGZvciBj
b250ZW50IGxheWVycworICAgIC8vIGFuZCB0aGUgbV91cGxvYWRQaXhlbERhdGEgYnVmZmVyIGZv
ciBpbWFnZSBsYXllcnMuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSB1c2luZyBtZW1vcnkg
d2UgY29udHJvbCBmb3IgYWxsIHVwbG9hZHMuCisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICBPd25Q
dHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+IG1fdXBsb2FkUGl4ZWxDYW52YXM7CisjZW5kaWYKKyAg
ICBPd25QdHI8VmVjdG9yPHVpbnQ4X3Q+ID4gbV91cGxvYWRQaXhlbERhdGE7CisKIHByaXZhdGU6
CisgICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdElmTmVlZGVkKCk7CiAKICAgICBJbnRSZWN0IG1f
dmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzOwogICAgIEZsb2F0UG9pbnQgbV9sYXllckNlbnRlcklu
U3VyZmFjZUNvb3JkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IGNkMjk5
YzFhMGNlM2IzMGU5NWQ5MTRkZTA1MWI5NjMyMTk4NDljYWIuLmY4MTUyNjhlMjE5OTM4MWQyYjhl
MmM2MzljYzA2NDQ2NTQxNzI3YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApA
QCAtODQsNDYgKzg0LDM2IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50
c0lmRGlydHkoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdm9pZCogcGl4ZWxzID0g
MDsKLSAgICBJbnRTaXplIGJpdG1hcFNpemU7Ci0KICAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJ
bWFnZSA9IG1fY29udGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAKICNpZiBQ
TEFURk9STShTS0lBKQogICAgIC8vIFRoZSBsYXllciBjb250YWlucyBhbiBJbWFnZS4KICAgICBO
YXRpdmVJbWFnZVNraWEqIHNraWFJbWFnZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU2tpYSo+
KG5hdGl2ZUltYWdlKTsKICAgICBjb25zdCBTa0JpdG1hcCogc2tpYUJpdG1hcCA9IHNraWFJbWFn
ZTsKLSAgICBiaXRtYXBTaXplID0gSW50U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0
bWFwLT5oZWlnaHQoKSk7CisgICAgSW50U2l6ZSBiaXRtYXBTaXplKHNraWFCaXRtYXAtPndpZHRo
KCksIHNraWFCaXRtYXAtPmhlaWdodCgpKTsKICAgICBBU1NFUlQoc2tpYUJpdG1hcCk7CiAjZWxp
ZiBQTEFURk9STShDRykKICAgICAvLyBOYXRpdmVJbWFnZVB0ciBpcyBhIENHSW1hZ2VSZWYgb24g
TWFjIE9TIFguCiAgICAgaW50IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKG5hdGl2ZUltYWdlKTsK
ICAgICBpbnQgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChuYXRpdmVJbWFnZSk7Ci0gICAgYml0
bWFwU2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgSW50U2l6ZSBiaXRtYXBTaXpl
KHdpZHRoLCBoZWlnaHQpOwogI2VuZGlmCiAKLSAgICAvLyBDbGlwIHRoZSBkaXJ0eSByZWN0IHRv
IHRoZSBiaXRtYXAgZGltZW5zaW9ucy4KLSAgICBJbnRSZWN0IGRpcnR5UmVjdChtX2RpcnR5UmVj
dCk7Ci0gICAgZGlydHlSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KDAsIDApLCBiaXRt
YXBTaXplKSk7Ci0KLSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRzVGV4
dHVyZS0+aXNWYWxpZChiaXRtYXBTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCi0gICAg
ICAgIGRpcnR5UmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIGJpdG1hcFNpemUpOwotICAg
IGVsc2UgaWYgKCFtX2NvbnRlbnRzRGlydHkpIHsKLSAgICAgICAgbV9jb250ZW50c1RleHR1cmUt
PnJlc2VydmUoYml0bWFwU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOwotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKG1fdXBsb2FkQnVmZmVyU2l6ZSAhPSBiaXRtYXBTaXplKSB7CisgICAg
ICAgIHJlc2l6ZVVwbG9hZEJ1ZmZlckZvckltYWdlKGJpdG1hcFNpemUpOwogICAgIH0KKyAgICBt
X3VwbG9hZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBiaXRtYXBTaXplKTsK
IAogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKCpza2lhQml0
bWFwKTsKLSAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBza2lhQml0bWFwLT5jb25m
aWcoKTsKICAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29u
ZmlndXJhdGlvbnM/Ci0gICAgaWYgKHNraWFDb25maWcgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhf
Q29uZmlnKQotICAgICAgICBwaXhlbHMgPSBza2lhQml0bWFwLT5nZXRQaXhlbHMoKTsKKyAgICBB
U1NFUlQoc2tpYUJpdG1hcC0+Y29uZmlnKCk9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcp
OworICAgIG1fdXBsb2FkUGl4ZWxEYXRhID0gbmV3IFZlY3Rvcjx1aW50OF90Pihza2lhQml0bWFw
LT53aWR0aCgpICogc2tpYUJpdG1hcC0+aGVpZ2h0KCkgKiA0KTsKKyAgICBza2lhQml0bWFwLT5j
b3B5UGl4ZWxzVG8obV91cGxvYWRQaXhlbERhdGEtPmRhdGEoKSwgbV91cGxvYWRQaXhlbERhdGEt
PnNpemUoKSk7CiAjZWxpZiBQTEFURk9STShDRykKICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGdl
dCByaWQgb2YgdGhpcyB0ZW1wb3JhcnkgY29weSB3aGVyZSBwb3NzaWJsZS4KICAgICBpbnQgdGVt
cFJvd0J5dGVzID0gd2lkdGggKiA0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wVmVjdG9yOwot
ICAgIHRlbXBWZWN0b3IucmVzaXplKGhlaWdodCAqIHRlbXBSb3dCeXRlcyk7CisgICAgbV91cGxv
YWRQaXhlbERhdGEgPSBuZXcgVmVjdG9yPHVpbnQ4X3Q+KGhlaWdodCAqIHRlbXBSb3dCeXRlcyk7
CiAgICAgLy8gTm90ZSB3ZSBkbyBub3QgemVybyB0aGlzIHZlY3RvciBzaW5jZSB3ZSBhcmUgZ29p
bmcgdG8KICAgICAvLyBjb21wbGV0ZWx5IG92ZXJ3cml0ZSBpdHMgY29udGVudHMgd2l0aCB0aGUg
aW1hZ2UgYmVsb3cuCiAgICAgLy8gVHJ5IHRvIHJldXNlIHRoZSBjb2xvciBzcGFjZSBmcm9tIHRo
ZSBpbWFnZSB0byBwcmVzZXJ2ZSBpdHMgY29sb3JzLgpAQCAtMTQzLDcgKzEzMyw3IEBAIHZvaWQg
SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAgICAgICBjb2xv
clNwYWNlID0gY29sb3JTcGFjZVJlbGVhc2VyLmdldCgpOwogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gdGVtcENvbnRleHQoQWRvcHRDRiwgQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlKHRlbXBWZWN0b3IuZGF0YSgpLAorICAgIFJldGFpblB0cjxDR0NvbnRl
eHRSZWY+IHRlbXBDb250ZXh0KEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZShtX3VwbG9h
ZFBpeGVsRGF0YS0+ZGF0YSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCA4LCB0ZW1w
Um93Qnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0lt
YWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QpKTsK
QEAgLTE1MSwxMyArMTQxLDkgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRl
bnRzSWZEaXJ0eSgpCiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKHRlbXBDb250ZXh0LmdldCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICBDR1JlY3RNYWtlKDAsIDAsIHN0YXRpY19jYXN0PENHRmxv
YXQ+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oaGVpZ2h0KSksCiAgICAgICAgICAgICAg
ICAgICAgICAgIG5hdGl2ZUltYWdlKTsKLSAgICBwaXhlbHMgPSB0ZW1wVmVjdG9yLmRhdGEoKTsK
ICNlbHNlCiAjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKICNl
bmRpZgotCi0gICAgaWYgKHBpeGVscykKLSAgICAgICAgdXBkYXRlVGV4dHVyZVJlY3QocGl4ZWxz
LCBiaXRtYXBTaXplLCAgZGlydHlSZWN0KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApp
bmRleCA4ZDAxZDliZDlhYTQ5ZTYxYzk2YTllY2NiNzY2ZGNiMTAxZTM2ZWUzLi42MWRjODQ3OWFm
M2YwYzcwNGFjNTQ3NDgwODhiNWEzMTY5ZjYwNTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApA
QCAtMzIzLDcgKzMyMyw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0Qm91bmRzKGNvbnN0IElu
dFNpemUmIHNpemUpCiAgICAgYm9vbCBmaXJzdFJlc2l6ZSA9ICFtX2JvdW5kcy53aWR0aCgpICYm
ICFtX2JvdW5kcy5oZWlnaHQoKSAmJiBzaXplLndpZHRoKCkgJiYgc2l6ZS5oZWlnaHQoKTsKIAog
ICAgIG1fYm91bmRzID0gc2l6ZTsKLSAgICBtX2JhY2tpbmdTdG9yZVNpemUgPSBzaXplOwogCiAg
ICAgaWYgKGZpcnN0UmVzaXplKQogICAgICAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAs
IDAsIG1fYm91bmRzLndpZHRoKCksIG1fYm91bmRzLmhlaWdodCgpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKaW5kZXggZmY5ZTVlNWQ4MzFjM2YxM2U5MzA3NmU2YWZjNTU4ZjdjY2E5OGNkNy4uZDQ1N2Fj
NjliNWMzZTMxZjczN2FlMDJlYzNjZDhhOThlNTk1MWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApA
QCAtMjY1LDcgKzI2NSw2IEBAIHByaXZhdGU6CiAgICAgTGF5ZXJDaHJvbWl1bSogbV9zdXBlcmxh
eWVyOwogCiAgICAgLy8gTGF5ZXIgcHJvcGVydGllcy4KLSAgICBJbnRTaXplIG1fYmFja2luZ1N0
b3JlU2l6ZTsKICAgICBGbG9hdFBvaW50IG1fcG9zaXRpb247CiAgICAgRmxvYXRQb2ludCBtX2Fu
Y2hvclBvaW50OwogICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82572</attachid>
            <date>2011-02-15 19:17:18 -0800</date>
            <delta_ts>2011-02-15 19:25:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54315-20110215191717.patch</filename>
            <type>text/plain</type>
            <size>23001</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4NDkxMDEwMjdiNzlhN2RlZGI5NTUwZjVhOGM1Mjg5M2NkZTkzZDBmLi44
MTMwNDI3MzAyNGRiNjFhMGQ4MzE3NjQyYWRlMmVkOGE3ZjhkZTY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzggQEAKKzIwMTEtMDItMTUgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Y2hyb21pdW1dIFVwZGF0ZSB0ZXh0dXJlIGZvciBDb250ZW50TGF5ZXJDaHJvbWl1bXMgaW4gZHJh
dygpIGNhbGwgaW5zdGVhZCBvZiB1cGRhdGVDb250ZW50cy4uKCkgY2FsbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQzMTUKKworICAgICAgICBUaGlz
IGRlZmVycyBhbGwgb3BlcmF0aW9ucyBvbiB0aGUgY29tcG9zaXRvcidzIEdMIGNvbnRleHQgdW50
aWwgdGhlCisgICAgICAgIGRyYXcoKSBjYWxsIHdoaWNoIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBt
b3ZpbmcgdGhlIGRyYXcoKSBvZmYtdGhyZWFkLgorICAgICAgICBBbHNvIGNsZWFucyB1cCB0aGUg
dXBkYXRlIGN5Y2xlIGEgYml0IC0gdGhlcmUgd2VyZSBzb21lIHVudXNlZCBsb2NhbAorICAgICAg
ICB2YXJpYWJsZXMgYW5kIHdoYXRub3QuCisKKyAgICAgICAgT25lIGNvbnNlcXVlbmNlIG9mIHRo
aXMgY2hhbmdlIGlzIHRoYXQgdGhlIHVwbG9hZCBidWZmZXIgaXMgcmV0YWluZWQKKyAgICAgICAg
YWNyb3NzIHVwZGF0ZXMgbm93IGluc3RlYWQgb2YgYWxsb2NhdGVkIGJ5IGVhY2ggcGFpbnQuICBU
aGlzIGlzCisgICAgICAgIG5lY2Vzc2FyeSBzbyB0aGF0IHRoZSBmdWxsIGxheWVyIGNvbnRlbnRz
IGNhbiBiZSB1cGxvYWRlZCBpZiB0aGUKKyAgICAgICAgdGV4dHVyZSBtYW5hZ2VyIGV2aWN0cyB0
aGUgbGF5ZXIncyBiYWNraW5nIHRleHR1cmUuICBUaGlzIGNvc3RzIG1vcmUKKyAgICAgICAgcGVy
c2lzdGVudCBtZW1vcnkgYnV0IGF2b2lkcyBsb3RzIG9mIGFsbG9jYXRvciBjaHVybiBvbiB1cGRh
dGVzLgorICAgICAgICBBbm90aGVyIG5vbm9idmlvdXMgZGV0YWlsIGlzIHRoYXQgSSBoYXZlIHRv
IHVwZGF0ZSB0aGUgdGV4dHVyZSBmb3IKKyAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW1zIGlu
IGJpbmRDb250ZW50c1RleHR1cmUoKSBiZWNhdXNlIG1hc2sgbGF5ZXJzCisgICAgICAgIG5ldmVy
IGRyYXcoKSwgdGhleSBhcmUgaW5zdGVhZCBib3VuZCB0byB0aGUgc2Vjb25kYXJ5IHRleHR1cmUg
dW5pdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpy
ZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXll
ckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudExheWVyQ2hyb21pdW06OnJlc2l6ZVVwbG9hZEJ1ZmZlckZvckltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZWN0SWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29u
dGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldEJvdW5k
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
OgorCiAyMDExLTAyLTEwICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE5hdGUgQ2hhcGluLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwCmluZGV4IGEzOGY2YmQyMTI2OTBhMjhmOTgzOGRiODk2MzVhODQxNGNiNmQ3N2Uu
LmM0MWE4ZjllMTRhMjQ5ZDY4YTJmNmZkODVkY2JkODAzZmQxODkwMTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE1NCw5ICsxNTQsOSBAQCBib29sIENvbnRlbnRM
YXllckNocm9taXVtOjpyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkgY29uc3QKICAgICAvLyBv
bmUgb2YgdGhlIGxheWVyJ3MgZGltZW5zaW9ucyBpcyBsYXJnZXIgdGhhbiAyMDAwIHBpeGVscyBv
ciB0aGUgc2l6ZSBvZgogICAgIC8vIHN1cmZhY2UgaXQncyByZW5kZXJpbmcgaW50by4gVGhpcyBp
cyBhIHRlbXBvcmFyeSBtZWFzdXJlIHVudGlsIGxheWVyIHRpbGluZyBpcyBpbXBsZW1lbnRlZC4K
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heExheWVyU2l6ZSA9IDIwMDA7Ci0gICAgcmV0dXJuICht
X2JvdW5kcy53aWR0aCgpID4gbWF4KG1heExheWVyU2l6ZSwgbV90YXJnZXRSZW5kZXJTdXJmYWNl
LT5jb250ZW50UmVjdCgpLndpZHRoKCkpCi0gICAgICAgICAgICB8fCBtX2JvdW5kcy5oZWlnaHQo
KSA+IG1heChtYXhMYXllclNpemUsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3Qo
KS5oZWlnaHQoKSkKLSAgICAgICAgICAgIHx8ICFsYXllclJlbmRlcmVyKCktPmNoZWNrVGV4dHVy
ZVNpemUobV9ib3VuZHMpKTsKKyAgICByZXR1cm4gKGJvdW5kcygpLndpZHRoKCkgPiBtYXgobWF4
TGF5ZXJTaXplLCBtX3RhcmdldFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCkud2lkdGgoKSkK
KyAgICAgICAgICAgIHx8IGJvdW5kcygpLmhlaWdodCgpID4gbWF4KG1heExheWVyU2l6ZSwgbV90
YXJnZXRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLmhlaWdodCgpKQorICAgICAgICAgICAg
fHwgIWxheWVyUmVuZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShib3VuZHMoKSkpOwogfQogCiB2
b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQpAQCAtMTY5
LDEyICsxNjksOSBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lm
RGlydHkoKQogCiAgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CiAKLSAgICB2b2lkKiBwaXhl
bHMgPSAwOwogICAgIEludFJlY3QgZGlydHlSZWN0OwotICAgIEludFJlY3QgdXBkYXRlUmVjdDsK
LSAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemU7Ci0gICAgSW50U2l6ZSBiaXRtYXBTaXpl
OwotICAgIEludFJlY3QgYm91bmRzUmVjdChJbnRQb2ludCgwLCAwKSwgbV9ib3VuZHMpOworICAg
IEludFJlY3QgYm91bmRzUmVjdChJbnRQb2ludCgwLCAwKSwgYm91bmRzKCkpOworICAgIEludFBv
aW50IHBhaW50aW5nT2Zmc2V0OwogCiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHRlc3Qgd2hl
biB0aWxlZCBsYXllcnMgYXJlIGltcGxlbWVudGVkLgogICAgIGlmIChyZXF1aXJlc0NsaXBwZWRV
cGRhdGVSZWN0KCkpIHsKQEAgLTE5MCw3ICsxODcsNyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAgICAgICBjb25zdCBJbnRSZWN0IGNsaXBS
ZWN0ID0gbV90YXJnZXRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpOwogCiAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGxheWVyT3JpZ2luVHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgp
OwotICAgICAgICBsYXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogbV9ib3Vu
ZHMud2lkdGgoKSwgLTAuNSAqIG1fYm91bmRzLmhlaWdodCgpLCAwKTsKKyAgICAgICAgbGF5ZXJP
cmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIGJvdW5kcygpLndpZHRoKCksIC0wLjUg
KiBib3VuZHMoKS5oZWlnaHQoKSwgMCk7CiAKICAgICAgICAgLy8gRm9yIG5vdyB3ZSBhcHBseSB0
aGUgbGFyZ2UgbGF5ZXIgdHJlYXRtZW50IG9ubHkgZm9yIGxheWVycyB0aGF0IGFyZSBlaXRoZXIg
dW50cmFuc2Zvcm1lZAogICAgICAgICAvLyBvciBhcmUgcHVyZWx5IHRyYW5zbGF0ZWQuIFRoZWly
IG1hdHJpeCBpcyBleHBlY3RlZCB0byBiZSBpbnZlcnRpYmxlLgpAQCAtMTk4LDcgKzE5NSw3IEBA
IHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAKICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGFyZ2V0VG9MYXllck1hdHJpeCA9IGxheWVyT3Jp
Z2luVHJhbnNmb3JtLmludmVyc2UoKTsKICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdEluTGF5
ZXJDb29yZHMgPSB0YXJnZXRUb0xheWVyTWF0cml4Lm1hcFJlY3QoY2xpcFJlY3QpOwotICAgICAg
ICB2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgbV9ib3Vu
ZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpKTsKKyAgICAgICAgdmlzaWJsZVJlY3RJbkxh
eWVyQ29vcmRzLmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGJvdW5kcygpLndpZHRoKCksIGJvdW5k
cygpLmhlaWdodCgpKSk7CiAKICAgICAgICAgLy8gRm9yIG5vcm1hbCBsYXllcnMsIHRoZSBjZW50
ZXIgb2YgdGhlIHRleHR1cmUgY29ycmVzcG9uZHMgd2l0aCB0aGUgY2VudGVyIG9mIHRoZSBsYXll
ci4KICAgICAgICAgLy8gSW4gbGFyZ2UgbGF5ZXJzIHRoZSBjZW50ZXIgb2YgdGhlIHRleHR1cmUg
aXMgdGhlIGNlbnRlciBvZiB0aGUgdmlzaWJsZSByZWdpb24gc28gd2UgaGF2ZQpAQCAtMjEyLDkg
KzIwOSwxMyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGly
dHkoKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gSWYgdGhl
IHZpc2libGUgcG9ydGlvbiBvZiB0aGUgbGF5ZXIgaXMgZGlmZmVyZW50IGZyb20gdGhlIGxhc3Qg
dXBsb2FkLCBvciBpZiBvdXIgYmFja2luZwotICAgICAgICAvLyB0ZXh0dXJlIGhhcyBiZWVuIGV2
aWN0ZWQsIHRoZW4gdGhlIHdob2xlIGxheWVyIGlzIGNvbnNpZGVyZWQgZGlydHkuCi0gICAgICAg
IGlmICh2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMgIT0gbV92aXNpYmxlUmVjdEluTGF5ZXJDb29y
ZHMgfHwgIW1fY29udGVudHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChy
ZXF1aXJlZFRleHR1cmVTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisgICAgICAgIC8v
IElmIHdlIG5lZWQgdG8gcmVzaXplIHRoZSB1cGxvYWQgYnVmZmVyIHdlIGhhdmUgdG8gcmVwYWlu
dCBldmVyeXRoaW5nLgorICAgICAgICBpZiAobV91cGxvYWRCdWZmZXJTaXplICE9IHZpc2libGVS
ZWN0SW5MYXllckNvb3Jkcy5zaXplKCkpIHsKKyAgICAgICAgICAgIHJlc2l6ZVVwbG9hZEJ1ZmZl
cih2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fZGlydHlS
ZWN0ID0gYm91bmRzUmVjdDsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiB0aGUgdmlzaWJsZSBw
b3J0aW9uIG9mIHRoZSBsYXllciBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbGFzdCB1cGxvYWQuCisg
ICAgICAgIGlmICh2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMgIT0gbV92aXNpYmxlUmVjdEluTGF5
ZXJDb29yZHMpCiAgICAgICAgICAgICBtX2RpcnR5UmVjdCA9IGJvdW5kc1JlY3Q7CiAgICAgICAg
IG1fdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzID0gdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzOwog
CkBAIC0yMjQsOTMgKzIyNSwxMDAgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29udGVudHNJZkRpcnR5KCkKIAogICAgICAgICAvLyBXaGF0IHRoZSByZWN0YW5nbGVzIG1lYW46
CiAgICAgICAgIC8vICAgZGlydHlSZWN0OiBUaGUgcmVnaW9uIG9mIHRoaXMgbGF5ZXIgdGhhdCB3
aWxsIGJlIHVwZGF0ZWQuCi0gICAgICAgIC8vICAgdXBkYXRlUmVjdDogVGhlIHJlZ2lvbiBvZiB0
aGUgbGF5ZXIncyB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1cGxvYWRlZCBpbnRvLgotICAgICAgICAv
LyAgIHJlcXVpcmVkVGV4dHVyZVNpemU6IGlzIHRoZSByZXF1aXJlZCBzaXplIG9mIHRoaXMgbGF5
ZXIncyB0ZXh0dXJlLgorICAgICAgICAvLyAgIG1fdXBsb2FkVXBkYXRlUmVjdDogVGhlIHJlZ2lv
biBvZiB0aGUgbGF5ZXIncyB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1cGxvYWRlZCBpbnRvLgogICAg
ICAgICBkaXJ0eVJlY3QgPSB2aXNpYmxlRGlydHlSZWN0SW5MYXllclNwYWNlOwotICAgICAgICB1
cGRhdGVSZWN0ID0gZGlydHlSZWN0OworICAgICAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBkaXJ0
eVJlY3Q7CiAgICAgICAgIEludFNpemUgdmlzaWJsZVJlY3RPZmZzZXRJbkxheWVyQ29vcmRzKHZp
c2libGVSZWN0SW5MYXllckNvb3Jkcy54KCksIHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy55KCkp
OwotICAgICAgICB1cGRhdGVSZWN0Lm1vdmUoLXZpc2libGVSZWN0T2Zmc2V0SW5MYXllckNvb3Jk
cyk7Ci0gICAgICAgIHJlcXVpcmVkVGV4dHVyZVNpemUgPSB2aXNpYmxlUmVjdEluTGF5ZXJDb29y
ZHMuc2l6ZSgpOworICAgICAgICBwYWludGluZ09mZnNldCA9IEludFBvaW50KHZpc2libGVSZWN0
T2Zmc2V0SW5MYXllckNvb3Jkcyk7CisgICAgICAgIG1fdXBsb2FkVXBkYXRlUmVjdC5tb3ZlKC12
aXNpYmxlUmVjdE9mZnNldEluTGF5ZXJDb29yZHMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRp
cnR5UmVjdCA9IEludFJlY3QobV9kaXJ0eVJlY3QpOwotICAgICAgICByZXF1aXJlZFRleHR1cmVT
aXplID0gbV9ib3VuZHM7CiAgICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIHJl
YWxsb2NhdGVkIHRoZW4gd2UgbXVzdCByZWRyYXcgdGhlIGVudGlyZQogICAgICAgICAvLyBjb250
ZW50cyBvZiB0aGUgbGF5ZXIuCi0gICAgICAgIGlmICghbV9jb250ZW50c1RleHR1cmUgfHwgIW1f
Y29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKHJlcXVpcmVkVGV4dHVyZVNpemUsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBKSkKKyAgICAgICAgaWYgKG1fdXBsb2FkQnVmZmVyU2l6ZSAhPSBib3VuZHMo
KSkgeworICAgICAgICAgICAgcmVzaXplVXBsb2FkQnVmZmVyKGJvdW5kcygpKTsKICAgICAgICAg
ICAgIGRpcnR5UmVjdCA9IGJvdW5kc1JlY3Q7Ci0gICAgICAgIGVsc2UgeworICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLy8gQ2xpcCB0aGUgZGlydHlSZWN0IHRvIHRoZSBzaXplIG9mIHRo
ZSBsYXllciB0byBhdm9pZCBkcmF3aW5nCiAgICAgICAgICAgICAvLyBvdXRzaWRlIHRoZSBib3Vu
ZHMgb2YgdGhlIGJhY2tpbmcgdGV4dHVyZS4KICAgICAgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNl
Y3QoYm91bmRzUmVjdCk7CiAgICAgICAgIH0KLSAgICAgICAgdXBkYXRlUmVjdCA9IGRpcnR5UmVj
dDsKKyAgICAgICAgbV91cGxvYWRVcGRhdGVSZWN0ID0gZGlydHlSZWN0OwogICAgIH0KIAogICAg
IGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICNpZiBQTEFURk9S
TShTS0lBKQotICAgIGNvbnN0IFNrQml0bWFwKiBza2lhQml0bWFwID0gMDsKLSAgICBPd25QdHI8
c2tpYTo6UGxhdGZvcm1DYW52YXM+IGNhbnZhczsKICAgICBPd25QdHI8UGxhdGZvcm1Db250ZXh0
U2tpYT4gc2tpYUNvbnRleHQ7Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3ND
b250ZXh0OwogCi0gICAgY2FudmFzLnNldChuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoZGlydHlS
ZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWlnaHQoKSwgZmFsc2UpKTsKLSAgICBza2lhQ29udGV4
dC5zZXQobmV3IFBsYXRmb3JtQ29udGV4dFNraWEoY2FudmFzLmdldCgpKSk7CisgICAgc2tpYUNv
bnRleHQuc2V0KG5ldyBQbGF0Zm9ybUNvbnRleHRTa2lhKG1fdXBsb2FkUGl4ZWxDYW52YXMuZ2V0
KCkpKTsKIAogICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGdldCB0ZXh0IHRvIHNob3cgdXAgY29y
cmVjdGx5LgotICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgdGFrZSB1cyBkb3duIGEgdmVyeSBzbG93
IHRleHQgcmVuZGVyaW5nIHBhdGg/CiAgICAgc2tpYUNvbnRleHQtPnNldERyYXdpbmdUb0ltYWdl
QnVmZmVyKHRydWUpOwogCi0gICAgZ3JhcGhpY3NDb250ZXh0LnNldChuZXcgR3JhcGhpY3NDb250
ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqPihza2lhQ29udGV4
dC5nZXQoKSkpKTsKLQotICAgIC8vIEJyaW5nIHRoZSBjYW52YXMgaW50byB0aGUgY29vcmRpbmF0
ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCi0gICAgY2FudmFzLT50cmFuc2xhdGUoc3RhdGlj
X2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1k
aXJ0eVJlY3QueSgpKSk7Ci0KLSAgICBtX293bmVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50
cygqZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eVJlY3QpOwotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRt
YXAgPSBjYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwotICAgIHNraWFC
aXRtYXAgPSAmYml0bWFwOwotICAgIEFTU0VSVChza2lhQml0bWFwKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQgZ3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqPihza2lhQ29udGV4dC5nZXQoKSkpOwogCi0gICAgU2tBdXRvTG9ja1BpeGVscyBsb2Nr
KCpza2lhQml0bWFwKTsKLSAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBza2lhQml0
bWFwLT5jb25maWcoKTsKLSAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBzdXBwb3J0IG1vcmUg
aW1hZ2UgY29uZmlndXJhdGlvbnM/Ci0gICAgaWYgKHNraWFDb25maWcgPT0gU2tCaXRtYXA6OmtB
UkdCXzg4ODhfQ29uZmlnKSB7Ci0gICAgICAgIHBpeGVscyA9IHNraWFCaXRtYXAtPmdldFBpeGVs
cygpOwotICAgICAgICBiaXRtYXBTaXplID0gSW50U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBz
a2lhQml0bWFwLT5oZWlnaHQoKSk7Ci0gICAgfQogI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgVmVj
dG9yPHVpbnQ4X3Q+IHRlbXBWZWN0b3I7Ci0gICAgaW50IHJvd0J5dGVzID0gNCAqIGRpcnR5UmVj
dC53aWR0aCgpOwotICAgIHRlbXBWZWN0b3IucmVzaXplKHJvd0J5dGVzICogZGlydHlSZWN0Lmhl
aWdodCgpKTsKLSAgICBtZW1zZXQodGVtcFZlY3Rvci5kYXRhKCksIDAsIHRlbXBWZWN0b3Iuc2l6
ZSgpKTsKKyAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjbGVhciB0aGUgZGlydHkgcmVjdGFu
Z2xlIGluIHRoZSB1cGxvYWQgYnVmZmVyPwogICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+
IGNvbG9yU3BhY2UoQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAg
IFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNvbnRleHRDRyhBZG9wdENGLCBDR0JpdG1hcENvbnRl
eHRDcmVhdGUodGVtcFZlY3Rvci5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eVJlY3Qud2lkdGgo
KSwgZGlydHlSZWN0LmhlaWdodCgpLCA4LCByb3dCeXRlcywKKyAgICBSZXRhaW5QdHI8Q0dDb250
ZXh0UmVmPiBjb250ZXh0Q0coQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fdXBsb2Fk
UGl4ZWxEYXRhLT5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VwbG9hZEJ1ZmZlclNpemUud2lkdGgo
KSwgbV91cGxvYWRCdWZmZXJTaXplLmhlaWdodCgpLCA4LCByb3dCeXRlcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbG9yU3BhY2UuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0KSk7Ci0gICAgQ0dDb250ZXh0VHJhbnNs
YXRlQ1RNKGNvbnRleHRDRy5nZXQoKSwgMCwgZGlydHlSZWN0LmhlaWdodCgpKTsKKyAgICBDR0Nv
bnRleHRUcmFuc2xhdGVDVE0oY29udGV4dENHLmdldCgpLCAwLCBtX3VwbG9hZEJ1ZmZlclNpemUu
aGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHRDRy5nZXQoKSwgMSwgLTEp
OwogCiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0Q0cuZ2V0KCkp
OworI2Vsc2UKKyNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgor
I2VuZGlmCiAKLSAgICAvLyBUcmFuc2xhdGUgdGhlIGdyYXBoaWNzIGNvbnRleHQgaW50byB0aGUg
Y29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIGRpcnR5IHJlY3QuCi0gICAgZ3JhcGhpY3NDb250ZXh0
LnRyYW5zbGF0ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOworICAgIGdyYXBoaWNz
Q29udGV4dC5zYXZlKCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZSgtcGFpbnRpbmdP
ZmZzZXQueCgpLCAtcGFpbnRpbmdPZmZzZXQueSgpKTsKKyAgICBncmFwaGljc0NvbnRleHQuY2xl
YXJSZWN0KGRpcnR5UmVjdCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAoZGlydHlSZWN0KTsK
IAogICAgIG1fb3duZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGdyYXBoaWNzQ29udGV4
dCwgZGlydHlSZWN0KTsKKyAgICBncmFwaGljc0NvbnRleHQucmVzdG9yZSgpOworfQogCi0gICAg
cGl4ZWxzID0gdGVtcFZlY3Rvci5kYXRhKCk7Ci0gICAgYml0bWFwU2l6ZSA9IGRpcnR5UmVjdC5z
aXplKCk7Cit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXJGb3JJ
bWFnZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHNpemVfdCBidWZmZXJTaXplID0gc2l6
ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAqIDQ7CisgICAgbV91cGxvYWRQaXhlbERhdGEgPSBu
ZXcgVmVjdG9yPHVpbnQ4X3Q+KGJ1ZmZlclNpemUpOworI2lmIFBMQVRGT1JNKENHKQorICAgIG1l
bXNldChtX3VwbG9hZFBpeGVsRGF0YS0+ZGF0YSgpLCAwLCBidWZmZXJTaXplKTsKKyNlbmRpZgor
ICAgIG1fdXBsb2FkQnVmZmVyU2l6ZSA9IHNpemU7Cit9Cit2b2lkIENvbnRlbnRMYXllckNocm9t
aXVtOjpyZXNpemVVcGxvYWRCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyNpZiBQTEFU
Rk9STShTS0lBKQorICAgIG1fdXBsb2FkUGl4ZWxDYW52YXMgPSBuZXcgc2tpYTo6UGxhdGZvcm1D
YW52YXMoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBmYWxzZSk7CisgICAgbV91cGxvYWRC
dWZmZXJTaXplID0gc2l6ZTsKICNlbHNlCi0jZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5
b3VyIHBsYXRmb3JtLiIKKyAgICByZXNpemVVcGxvYWRCdWZmZXJGb3JJbWFnZShzaXplKTsKICNl
bmRpZgotCi0gICAgaWYgKHBpeGVscykKLSAgICAgICAgdXBkYXRlVGV4dHVyZVJlY3QocGl4ZWxz
LCByZXF1aXJlZFRleHR1cmVTaXplLCB1cGRhdGVSZWN0KTsKIH0KIAotdm9pZCBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZVJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRTaXpl
JiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQordm9pZCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZVJlY3RJZk5lZWRlZCgpCiB7CisgICAg
dWludDhfdCogcGl4ZWxzID0gMDsKKyAgICBpZiAoIW1fdXBsb2FkVXBkYXRlUmVjdC5pc0VtcHR5
KCkpIHsKKyNpZiBQTEFURk9STShTS0lBKQorICAgICAgICBpZiAobV91cGxvYWRQaXhlbENhbnZh
cykgeworICAgICAgICAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IG1fdXBsb2FkUGl4ZWxD
YW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgICAgICAgICAgYml0
bWFwLmxvY2tQaXhlbHMoKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHN1
cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucz8KKyAgICAgICAgICAgIGlmIChiaXRtYXAu
Y29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKQorICAgICAgICAgICAgICAg
IHBpeGVscyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihiaXRtYXAuZ2V0UGl4ZWxzKCkpOworICAg
ICAgICB9CisjZW5kaWYKKyAgICAgICAgaWYgKG1fdXBsb2FkUGl4ZWxEYXRhKQorICAgICAgICAg
ICAgcGl4ZWxzID0gbV91cGxvYWRQaXhlbERhdGEtPmRhdGEoKTsKKyAgICB9CisKICAgICBpZiAo
IXBpeGVscykKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMTgsMTUgKzMyNiwzOSBAQCB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0
IEludFNpemUmIHJlcXVpcgogICAgIGlmICghbV9jb250ZW50c1RleHR1cmUpCiAgICAgICAgIG1f
Y29udGVudHNUZXh0dXJlID0gTGF5ZXJUZXh0dXJlOjpjcmVhdGUoY29udGV4dCwgbGF5ZXJSZW5k
ZXJlcigpLT50ZXh0dXJlTWFuYWdlcigpKTsKIAotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUt
PnJlc2VydmUocmVxdWlyZWRUZXh0dXJlU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKSB7
CisgICAgLy8gSWYgd2UgaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlIHdlIGhhdmUgdG8g
dXBsb2FkIHRoZSBmdWxsIGNvbnRlbnRzLgorICAgIGlmICghbV9jb250ZW50c1RleHR1cmUtPmlz
VmFsaWQobV91cGxvYWRCdWZmZXJTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisgICAg
ICAgIG1fdXBsb2FkVXBkYXRlUmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fdXBsb2Fk
QnVmZmVyU2l6ZSk7CisKKyAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKG1fdXBs
b2FkQnVmZmVyU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKSB7CiAgICAgICAgIG1fc2tp
cHNEcmF3ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fY29udGVudHNU
ZXh0dXJlLT5iaW5kVGV4dHVyZSgpOworICAgIGNvbnN0IHNpemVfdCBkZXN0U3RyaWRlID0gbV91
cGxvYWRVcGRhdGVSZWN0LndpZHRoKCkgKiA0OworICAgIFZlY3Rvcjx1aW50OF90PiB1cGxvYWRC
dWZmZXIobV91cGxvYWRVcGRhdGVSZWN0LmhlaWdodCgpICogZGVzdFN0cmlkZSk7CisKKyAgICBJ
bnRSZWN0IHNyY1JlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBib3VuZHMoKSk7CisgICAg
aWYgKHJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKSkKKyAgICAgICAgc3JjUmVjdCA9IG1fdmlz
aWJsZVJlY3RJbkxheWVyQ29vcmRzOworICAgIGNvbnN0IHNpemVfdCBzcmNTdHJpZGUgPSBzcmNS
ZWN0LndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fdXBsb2FkVXBk
YXRlUmVjdC5oZWlnaHQoKTsgKytyb3cpIHsKKyAgICAgICAgcHRyZGlmZl90IHNyY09mZnNldCA9
IChtX3VwbG9hZFVwZGF0ZVJlY3QueSgpICsgcm93KSAqIHNyY1N0cmlkZSArIG1fdXBsb2FkVXBk
YXRlUmVjdC54KCkgKiA0OworICAgICAgICBwdHJkaWZmX3QgZGVzdE9mZnNldCA9IHJvdyAqIGRl
c3RTdHJpZGU7CisgICAgICAgIG1lbWNweSh1cGxvYWRCdWZmZXIuZGF0YSgpICsgZGVzdE9mZnNl
dCwgcGl4ZWxzICsgc3JjT2Zmc2V0LCBkZXN0U3RyaWRlKTsKKyAgICB9CiAKLSAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCks
IHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgbV9jb250ZW50c1RleHR1cmUt
PmJpbmRUZXh0dXJlKCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFN1YkltYWdlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV91cGxvYWRVcGRhdGVSZWN0LngoKSwgbV91cGxvYWRVcGRhdGVS
ZWN0LnkoKSwgbV91cGxvYWRVcGRhdGVSZWN0LndpZHRoKCksIG1fdXBsb2FkVXBkYXRlUmVjdC5o
ZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkQnVmZmVyLmRhdGEoKSkp
OworI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgaWYgKG1fdXBsb2FkUGl4ZWxDYW52YXMpCisgICAg
ICAgIG1fdXBsb2FkUGl4ZWxDYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2Up
LnVubG9ja1BpeGVscygpOworI2VuZGlmCiAKKyAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBJbnRS
ZWN0KCk7CiAgICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShGbG9hdFNpemUoKSk7CiAgICAgLy8gTGFy
Z2UgbGF5ZXJzIGFsd2F5cyBzdGF5IGRpcnR5LCBiZWNhdXNlIHRoZXkgbmVlZCB0byB1cGRhdGUg
d2hlbiB0aGUgY29udGVudCByZWN0IGNoYW5nZXMuCiAgICAgbV9jb250ZW50c0RpcnR5ID0gcmVx
dWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpOwpAQCAtMzM0LDYgKzM2Niw4IEBAIHZvaWQgQ29udGVu
dExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZWN0KHZvaWQqIHBpeGVscywgY29uc3QgSW50
U2l6ZSYgcmVxdWlyCiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXcoKQogeworICAg
IHVwZGF0ZVRleHR1cmVSZWN0SWZOZWVkZWQoKTsKKwogICAgIGlmIChtX3NraXBzRHJhdykKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0zNTcsNyArMzkxLDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6ZHJhdygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3YtPnNoYWRlck1hdHJpeExv
Y2F0aW9uKCksIHN2LT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9u
TWF0cml4KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1RyYW5zZm9ybSgpLCBtX2Jv
dW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBkcmF3VHJhbnNmb3JtKCksIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdPcGFjaXR5KCksIHN2LT5zaGFkZXJNYXRyaXhM
b2NhdGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN2LT5zaGFkZXJBbHBoYUxvY2F0
aW9uKCkpOwogICAgIH0KQEAgLTM3Miw3ICs0MDYsOSBAQCB2b2lkIENvbnRlbnRMYXllckNocm9t
aXVtOjp1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKQogCiB2b2lkIENvbnRlbnRMYXllckNocm9t
aXVtOjpiaW5kQ29udGVudHNUZXh0dXJlKCkKIHsKLSAgICBpZiAobV9jb250ZW50c1RleHR1cmUp
CisgICAgdXBkYXRlVGV4dHVyZVJlY3RJZk5lZWRlZCgpOworCisgICAgaWYgKCFtX3NraXBzRHJh
dyAmJiBtX2NvbnRlbnRzVGV4dHVyZSkKICAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPmJpbmRU
ZXh0dXJlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IDMzNjM1
MThkYTUzMWFjNjBkMzBkN2Y4MGU3ZjVjNzYwM2MzMmEzODAuLjIzZDU5NzEyNzViOTE0YWU3MzQ2
NzRmMDQ2OGVjN2U2MDE1NzE4NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApA
QCAtODIsMTUgKzgyLDI4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb250
ZW50TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKIAotICAgIHZv
aWQgdXBkYXRlVGV4dHVyZVJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRTaXplJiByZXF1aXJl
ZFRleHR1cmVTaXplLCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KTsKLQogICAgIHZpcnR1YWwg
dm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CiAgICAgYm9vbCByZXF1aXJlc0NsaXBwZWRVcGRhdGVS
ZWN0KCkgY29uc3Q7CisgICAgdm9pZCByZXNpemVVcGxvYWRCdWZmZXIoY29uc3QgSW50U2l6ZSYp
OworICAgIHZvaWQgcmVzaXplVXBsb2FkQnVmZmVyRm9ySW1hZ2UoY29uc3QgSW50U2l6ZSYpOwog
CiAgICAgT3duUHRyPExheWVyVGV4dHVyZT4gbV9jb250ZW50c1RleHR1cmU7CiAgICAgYm9vbCBt
X3NraXBzRHJhdzsKIAorICAgIC8vIFRoZSBzaXplIG9mIHRoZSB1cGxvYWQgYnVmZmVyIChhbHNv
IHRoZSBzaXplIG9mIG91ciBiYWNraW5nIHRleHR1cmUpLgorICAgIEludFNpemUgbV91cGxvYWRC
dWZmZXJTaXplOworICAgIC8vIFRoZSBwb3J0aW9uIG9mIHRoZSB1cGxvYWQgYnVmZmVyIHRoYXQg
aGFzIGEgcGVuZGluZyB1cGRhdGUsIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdGV4dHVyZS4K
KyAgICBJbnRSZWN0IG1fdXBsb2FkVXBkYXRlUmVjdDsKKyAgICAvLyBPbiBwbGF0Zm9ybXMgdXNp
bmcgU2tpYSwgd2UgdXNlIHRoZSBza2lhOjpQbGF0Zm9ybUNhbnZhcyBmb3IgY29udGVudCBsYXll
cnMKKyAgICAvLyBhbmQgdGhlIG1fdXBsb2FkUGl4ZWxEYXRhIGJ1ZmZlciBmb3IgaW1hZ2UgbGF5
ZXJzLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgdXNpbmcgbWVtb3J5IHdlIGNvbnRyb2wg
Zm9yIGFsbCB1cGxvYWRzLgorI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgT3duUHRyPHNraWE6OlBs
YXRmb3JtQ2FudmFzPiBtX3VwbG9hZFBpeGVsQ2FudmFzOworI2VuZGlmCisgICAgT3duUHRyPFZl
Y3Rvcjx1aW50OF90PiA+IG1fdXBsb2FkUGl4ZWxEYXRhOworCiBwcml2YXRlOgorICAgIHZvaWQg
dXBkYXRlVGV4dHVyZVJlY3RJZk5lZWRlZCgpOwogCiAgICAgSW50UmVjdCBtX3Zpc2libGVSZWN0
SW5MYXllckNvb3JkczsKICAgICBGbG9hdFBvaW50IG1fbGF5ZXJDZW50ZXJJblN1cmZhY2VDb29y
ZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCBjZDI5OWMxYTBjZTNiMzBl
OTVkOTE0ZGUwNTFiOTYzMjE5ODQ5Y2FiLi5mODE1MjY4ZTIxOTkzODFkMmI4ZTJjNjM5Y2MwNjQ0
NjU0MTcyN2JiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTg0LDQ2ICs4
NCwzNiBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHZvaWQqIHBpeGVscyA9IDA7Ci0gICAgSW50
U2l6ZSBiaXRtYXBTaXplOwotCiAgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UgPSBtX2Nv
bnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogCiAjaWYgUExBVEZPUk0oU0tJ
QSkKICAgICAvLyBUaGUgbGF5ZXIgY29udGFpbnMgYW4gSW1hZ2UuCiAgICAgTmF0aXZlSW1hZ2VT
a2lhKiBza2lhSW1hZ2UgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNraWEqPihuYXRpdmVJbWFn
ZSk7CiAgICAgY29uc3QgU2tCaXRtYXAqIHNraWFCaXRtYXAgPSBza2lhSW1hZ2U7Ci0gICAgYml0
bWFwU2l6ZSA9IEludFNpemUoc2tpYUJpdG1hcC0+d2lkdGgoKSwgc2tpYUJpdG1hcC0+aGVpZ2h0
KCkpOworICAgIEludFNpemUgYml0bWFwU2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0
bWFwLT5oZWlnaHQoKSk7CiAgICAgQVNTRVJUKHNraWFCaXRtYXApOwogI2VsaWYgUExBVEZPUk0o
Q0cpCiAgICAgLy8gTmF0aXZlSW1hZ2VQdHIgaXMgYSBDR0ltYWdlUmVmIG9uIE1hYyBPUyBYLgog
ICAgIGludCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChuYXRpdmVJbWFnZSk7CiAgICAgaW50IGhl
aWdodCA9IENHSW1hZ2VHZXRIZWlnaHQobmF0aXZlSW1hZ2UpOwotICAgIGJpdG1hcFNpemUgPSBJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIEludFNpemUgYml0bWFwU2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKICNlbmRpZgogCi0gICAgLy8gQ2xpcCB0aGUgZGlydHkgcmVjdCB0byB0aGUgYml0bWFw
IGRpbWVuc2lvbnMuCi0gICAgSW50UmVjdCBkaXJ0eVJlY3QobV9kaXJ0eVJlY3QpOwotICAgIGRp
cnR5UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgYml0bWFwU2l6ZSkpOwot
Ci0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSB8fCAhbV9jb250ZW50c1RleHR1cmUtPmlzVmFs
aWQoYml0bWFwU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQotICAgICAgICBkaXJ0eVJl
Y3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBiaXRtYXBTaXplKTsKLSAgICBlbHNlIGlmICgh
bV9jb250ZW50c0RpcnR5KSB7Ci0gICAgICAgIG1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKGJp
dG1hcFNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKLSAgICAgICAgcmV0dXJuOworICAg
IGlmIChtX3VwbG9hZEJ1ZmZlclNpemUgIT0gYml0bWFwU2l6ZSkgeworICAgICAgICByZXNpemVV
cGxvYWRCdWZmZXJGb3JJbWFnZShiaXRtYXBTaXplKTsKICAgICB9CisgICAgbV91cGxvYWRVcGRh
dGVSZWN0ID0gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgYml0bWFwU2l6ZSk7CiAKICNpZiBQTEFU
Rk9STShTS0lBKQogICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygqc2tpYUJpdG1hcCk7Ci0gICAg
U2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gc2tpYUJpdG1hcC0+Y29uZmlnKCk7CiAgICAg
Ly8gRklYTUU6IGRvIHdlIG5lZWQgdG8gc3VwcG9ydCBtb3JlIGltYWdlIGNvbmZpZ3VyYXRpb25z
PwotICAgIGlmIChza2lhQ29uZmlnID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykKLSAg
ICAgICAgcGl4ZWxzID0gc2tpYUJpdG1hcC0+Z2V0UGl4ZWxzKCk7CisgICAgQVNTRVJUKHNraWFC
aXRtYXAtPmNvbmZpZygpPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKKyAgICBtX3Vw
bG9hZFBpeGVsRGF0YSA9IG5ldyBWZWN0b3I8dWludDhfdD4oc2tpYUJpdG1hcC0+d2lkdGgoKSAq
IHNraWFCaXRtYXAtPmhlaWdodCgpICogNCk7CisgICAgc2tpYUJpdG1hcC0+Y29weVBpeGVsc1Rv
KG1fdXBsb2FkUGl4ZWxEYXRhLT5kYXRhKCksIG1fdXBsb2FkUGl4ZWxEYXRhLT5zaXplKCkpOwog
I2VsaWYgUExBVEZPUk0oQ0cpCiAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBnZXQgcmlkIG9mIHRo
aXMgdGVtcG9yYXJ5IGNvcHkgd2hlcmUgcG9zc2libGUuCiAgICAgaW50IHRlbXBSb3dCeXRlcyA9
IHdpZHRoICogNDsKLSAgICBWZWN0b3I8dWludDhfdD4gdGVtcFZlY3RvcjsKLSAgICB0ZW1wVmVj
dG9yLnJlc2l6ZShoZWlnaHQgKiB0ZW1wUm93Qnl0ZXMpOworICAgIG1fdXBsb2FkUGl4ZWxEYXRh
ID0gbmV3IFZlY3Rvcjx1aW50OF90PihoZWlnaHQgKiB0ZW1wUm93Qnl0ZXMpOwogICAgIC8vIE5v
dGUgd2UgZG8gbm90IHplcm8gdGhpcyB2ZWN0b3Igc2luY2Ugd2UgYXJlIGdvaW5nIHRvCiAgICAg
Ly8gY29tcGxldGVseSBvdmVyd3JpdGUgaXRzIGNvbnRlbnRzIHdpdGggdGhlIGltYWdlIGJlbG93
LgogICAgIC8vIFRyeSB0byByZXVzZSB0aGUgY29sb3Igc3BhY2UgZnJvbSB0aGUgaW1hZ2UgdG8g
cHJlc2VydmUgaXRzIGNvbG9ycy4KQEAgLTE0Myw3ICsxMzMsNyBAQCB2b2lkIEltYWdlTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKICAgICAgICAgY29sb3JTcGFjZSA9IGNv
bG9yU3BhY2VSZWxlYXNlci5nZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIFJldGFp
blB0cjxDR0NvbnRleHRSZWY+IHRlbXBDb250ZXh0KEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENy
ZWF0ZSh0ZW1wVmVjdG9yLmRhdGEoKSwKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiB0ZW1w
Q29udGV4dChBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGUobV91cGxvYWRQaXhlbERhdGEt
PmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgOCwgdGVtcFJvd0J5dGVzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2xvclNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJl
bXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0KSk7CkBAIC0xNTEsMTMg
KzE0MSw5IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHko
KQogICAgIENHQ29udGV4dERyYXdJbWFnZSh0ZW1wQ29udGV4dC5nZXQoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgQ0dSZWN0TWFrZSgwLCAwLCBzdGF0aWNfY2FzdDxDR0Zsb2F0Pih3aWR0aCks
IHN0YXRpY19jYXN0PENHRmxvYXQ+KGhlaWdodCkpLAogICAgICAgICAgICAgICAgICAgICAgICBu
YXRpdmVJbWFnZSk7Ci0gICAgcGl4ZWxzID0gdGVtcFZlY3Rvci5kYXRhKCk7CiAjZWxzZQogI2Vy
cm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCiAjZW5kaWYKLQotICAg
IGlmIChwaXhlbHMpCi0gICAgICAgIHVwZGF0ZVRleHR1cmVSZWN0KHBpeGVscywgYml0bWFwU2l6
ZSwgIGRpcnR5UmVjdCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOGQwMWQ5
YmQ5YWE0OWU2MWM5NmE5ZWNjYjc2NmRjYjEwMWUzNmVlMy4uNjFkYzg0NzlhZjNmMGM3MDRhYzU0
NzQ4MDg4YjVhMzE2OWY2MDU0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTMyMyw3ICsz
MjMsNiBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBzaXpl
KQogICAgIGJvb2wgZmlyc3RSZXNpemUgPSAhbV9ib3VuZHMud2lkdGgoKSAmJiAhbV9ib3VuZHMu
aGVpZ2h0KCkgJiYgc2l6ZS53aWR0aCgpICYmIHNpemUuaGVpZ2h0KCk7CiAKICAgICBtX2JvdW5k
cyA9IHNpemU7Ci0gICAgbV9iYWNraW5nU3RvcmVTaXplID0gc2l6ZTsKIAogICAgIGlmIChmaXJz
dFJlc2l6ZSkKICAgICAgICAgc2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAwLCBtX2JvdW5k
cy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGZm
OWU1ZTVkODMxYzNmMTNlOTMwNzZlNmFmYzU1OGY3Y2NhOThjZDcuLmQ0NTdhYzY5YjVjM2UzMWY3
MzdhZTAyZWMzY2Q4YTk4ZTU5NTFhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTI2NSw3ICsy
NjUsNiBAQCBwcml2YXRlOgogICAgIExheWVyQ2hyb21pdW0qIG1fc3VwZXJsYXllcjsKIAogICAg
IC8vIExheWVyIHByb3BlcnRpZXMuCi0gICAgSW50U2l6ZSBtX2JhY2tpbmdTdG9yZVNpemU7CiAg
ICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwogICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2ludDsK
ICAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82573</attachid>
            <date>2011-02-15 19:25:18 -0800</date>
            <delta_ts>2011-02-16 17:55:58 -0800</delta_ts>
            <desc>add check in unreserveContentsTexture() to match the one in bindContentsTexture()</desc>
            <filename>bug-54315-20110215192517.patch</filename>
            <type>text/plain</type>
            <size>23159</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4NDkxMDEwMjdiNzlhN2RlZGI5NTUwZjVhOGM1Mjg5M2NkZTkzZDBmLi44
MTMwNDI3MzAyNGRiNjFhMGQ4MzE3NjQyYWRlMmVkOGE3ZjhkZTY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzggQEAKKzIwMTEtMDItMTUgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Y2hyb21pdW1dIFVwZGF0ZSB0ZXh0dXJlIGZvciBDb250ZW50TGF5ZXJDaHJvbWl1bXMgaW4gZHJh
dygpIGNhbGwgaW5zdGVhZCBvZiB1cGRhdGVDb250ZW50cy4uKCkgY2FsbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQzMTUKKworICAgICAgICBUaGlz
IGRlZmVycyBhbGwgb3BlcmF0aW9ucyBvbiB0aGUgY29tcG9zaXRvcidzIEdMIGNvbnRleHQgdW50
aWwgdGhlCisgICAgICAgIGRyYXcoKSBjYWxsIHdoaWNoIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBt
b3ZpbmcgdGhlIGRyYXcoKSBvZmYtdGhyZWFkLgorICAgICAgICBBbHNvIGNsZWFucyB1cCB0aGUg
dXBkYXRlIGN5Y2xlIGEgYml0IC0gdGhlcmUgd2VyZSBzb21lIHVudXNlZCBsb2NhbAorICAgICAg
ICB2YXJpYWJsZXMgYW5kIHdoYXRub3QuCisKKyAgICAgICAgT25lIGNvbnNlcXVlbmNlIG9mIHRo
aXMgY2hhbmdlIGlzIHRoYXQgdGhlIHVwbG9hZCBidWZmZXIgaXMgcmV0YWluZWQKKyAgICAgICAg
YWNyb3NzIHVwZGF0ZXMgbm93IGluc3RlYWQgb2YgYWxsb2NhdGVkIGJ5IGVhY2ggcGFpbnQuICBU
aGlzIGlzCisgICAgICAgIG5lY2Vzc2FyeSBzbyB0aGF0IHRoZSBmdWxsIGxheWVyIGNvbnRlbnRz
IGNhbiBiZSB1cGxvYWRlZCBpZiB0aGUKKyAgICAgICAgdGV4dHVyZSBtYW5hZ2VyIGV2aWN0cyB0
aGUgbGF5ZXIncyBiYWNraW5nIHRleHR1cmUuICBUaGlzIGNvc3RzIG1vcmUKKyAgICAgICAgcGVy
c2lzdGVudCBtZW1vcnkgYnV0IGF2b2lkcyBsb3RzIG9mIGFsbG9jYXRvciBjaHVybiBvbiB1cGRh
dGVzLgorICAgICAgICBBbm90aGVyIG5vbm9idmlvdXMgZGV0YWlsIGlzIHRoYXQgSSBoYXZlIHRv
IHVwZGF0ZSB0aGUgdGV4dHVyZSBmb3IKKyAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW1zIGlu
IGJpbmRDb250ZW50c1RleHR1cmUoKSBiZWNhdXNlIG1hc2sgbGF5ZXJzCisgICAgICAgIG5ldmVy
IGRyYXcoKSwgdGhleSBhcmUgaW5zdGVhZCBib3VuZCB0byB0aGUgc2Vjb25kYXJ5IHRleHR1cmUg
dW5pdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpy
ZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXll
ckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudExheWVyQ2hyb21pdW06OnJlc2l6ZVVwbG9hZEJ1ZmZlckZvckltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZWN0SWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29u
dGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldEJvdW5k
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
OgorCiAyMDExLTAyLTEwICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE5hdGUgQ2hhcGluLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwCmluZGV4IGEzOGY2YmQyMTI2OTBhMjhmOTgzOGRiODk2MzVhODQxNGNiNmQ3N2Uu
LjVjM2ZkYTgwYTVlZjQyYTUwNTlmZGFkZmQzODZlZTZmMjFjOGM5ZGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE1NCw5ICsxNTQsOSBAQCBib29sIENvbnRlbnRM
YXllckNocm9taXVtOjpyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkgY29uc3QKICAgICAvLyBv
bmUgb2YgdGhlIGxheWVyJ3MgZGltZW5zaW9ucyBpcyBsYXJnZXIgdGhhbiAyMDAwIHBpeGVscyBv
ciB0aGUgc2l6ZSBvZgogICAgIC8vIHN1cmZhY2UgaXQncyByZW5kZXJpbmcgaW50by4gVGhpcyBp
cyBhIHRlbXBvcmFyeSBtZWFzdXJlIHVudGlsIGxheWVyIHRpbGluZyBpcyBpbXBsZW1lbnRlZC4K
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heExheWVyU2l6ZSA9IDIwMDA7Ci0gICAgcmV0dXJuICht
X2JvdW5kcy53aWR0aCgpID4gbWF4KG1heExheWVyU2l6ZSwgbV90YXJnZXRSZW5kZXJTdXJmYWNl
LT5jb250ZW50UmVjdCgpLndpZHRoKCkpCi0gICAgICAgICAgICB8fCBtX2JvdW5kcy5oZWlnaHQo
KSA+IG1heChtYXhMYXllclNpemUsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3Qo
KS5oZWlnaHQoKSkKLSAgICAgICAgICAgIHx8ICFsYXllclJlbmRlcmVyKCktPmNoZWNrVGV4dHVy
ZVNpemUobV9ib3VuZHMpKTsKKyAgICByZXR1cm4gKGJvdW5kcygpLndpZHRoKCkgPiBtYXgobWF4
TGF5ZXJTaXplLCBtX3RhcmdldFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCkud2lkdGgoKSkK
KyAgICAgICAgICAgIHx8IGJvdW5kcygpLmhlaWdodCgpID4gbWF4KG1heExheWVyU2l6ZSwgbV90
YXJnZXRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLmhlaWdodCgpKQorICAgICAgICAgICAg
fHwgIWxheWVyUmVuZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShib3VuZHMoKSkpOwogfQogCiB2
b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQpAQCAtMTY5
LDEyICsxNjksOSBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lm
RGlydHkoKQogCiAgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CiAKLSAgICB2b2lkKiBwaXhl
bHMgPSAwOwogICAgIEludFJlY3QgZGlydHlSZWN0OwotICAgIEludFJlY3QgdXBkYXRlUmVjdDsK
LSAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemU7Ci0gICAgSW50U2l6ZSBiaXRtYXBTaXpl
OwotICAgIEludFJlY3QgYm91bmRzUmVjdChJbnRQb2ludCgwLCAwKSwgbV9ib3VuZHMpOworICAg
IEludFJlY3QgYm91bmRzUmVjdChJbnRQb2ludCgwLCAwKSwgYm91bmRzKCkpOworICAgIEludFBv
aW50IHBhaW50aW5nT2Zmc2V0OwogCiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHRlc3Qgd2hl
biB0aWxlZCBsYXllcnMgYXJlIGltcGxlbWVudGVkLgogICAgIGlmIChyZXF1aXJlc0NsaXBwZWRV
cGRhdGVSZWN0KCkpIHsKQEAgLTE5MCw3ICsxODcsNyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAgICAgICBjb25zdCBJbnRSZWN0IGNsaXBS
ZWN0ID0gbV90YXJnZXRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpOwogCiAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGxheWVyT3JpZ2luVHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgp
OwotICAgICAgICBsYXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogbV9ib3Vu
ZHMud2lkdGgoKSwgLTAuNSAqIG1fYm91bmRzLmhlaWdodCgpLCAwKTsKKyAgICAgICAgbGF5ZXJP
cmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIGJvdW5kcygpLndpZHRoKCksIC0wLjUg
KiBib3VuZHMoKS5oZWlnaHQoKSwgMCk7CiAKICAgICAgICAgLy8gRm9yIG5vdyB3ZSBhcHBseSB0
aGUgbGFyZ2UgbGF5ZXIgdHJlYXRtZW50IG9ubHkgZm9yIGxheWVycyB0aGF0IGFyZSBlaXRoZXIg
dW50cmFuc2Zvcm1lZAogICAgICAgICAvLyBvciBhcmUgcHVyZWx5IHRyYW5zbGF0ZWQuIFRoZWly
IG1hdHJpeCBpcyBleHBlY3RlZCB0byBiZSBpbnZlcnRpYmxlLgpAQCAtMTk4LDcgKzE5NSw3IEBA
IHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAKICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGFyZ2V0VG9MYXllck1hdHJpeCA9IGxheWVyT3Jp
Z2luVHJhbnNmb3JtLmludmVyc2UoKTsKICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdEluTGF5
ZXJDb29yZHMgPSB0YXJnZXRUb0xheWVyTWF0cml4Lm1hcFJlY3QoY2xpcFJlY3QpOwotICAgICAg
ICB2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgbV9ib3Vu
ZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpKTsKKyAgICAgICAgdmlzaWJsZVJlY3RJbkxh
eWVyQ29vcmRzLmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGJvdW5kcygpLndpZHRoKCksIGJvdW5k
cygpLmhlaWdodCgpKSk7CiAKICAgICAgICAgLy8gRm9yIG5vcm1hbCBsYXllcnMsIHRoZSBjZW50
ZXIgb2YgdGhlIHRleHR1cmUgY29ycmVzcG9uZHMgd2l0aCB0aGUgY2VudGVyIG9mIHRoZSBsYXll
ci4KICAgICAgICAgLy8gSW4gbGFyZ2UgbGF5ZXJzIHRoZSBjZW50ZXIgb2YgdGhlIHRleHR1cmUg
aXMgdGhlIGNlbnRlciBvZiB0aGUgdmlzaWJsZSByZWdpb24gc28gd2UgaGF2ZQpAQCAtMjEyLDkg
KzIwOSwxMyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGly
dHkoKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gSWYgdGhl
IHZpc2libGUgcG9ydGlvbiBvZiB0aGUgbGF5ZXIgaXMgZGlmZmVyZW50IGZyb20gdGhlIGxhc3Qg
dXBsb2FkLCBvciBpZiBvdXIgYmFja2luZwotICAgICAgICAvLyB0ZXh0dXJlIGhhcyBiZWVuIGV2
aWN0ZWQsIHRoZW4gdGhlIHdob2xlIGxheWVyIGlzIGNvbnNpZGVyZWQgZGlydHkuCi0gICAgICAg
IGlmICh2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMgIT0gbV92aXNpYmxlUmVjdEluTGF5ZXJDb29y
ZHMgfHwgIW1fY29udGVudHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChy
ZXF1aXJlZFRleHR1cmVTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisgICAgICAgIC8v
IElmIHdlIG5lZWQgdG8gcmVzaXplIHRoZSB1cGxvYWQgYnVmZmVyIHdlIGhhdmUgdG8gcmVwYWlu
dCBldmVyeXRoaW5nLgorICAgICAgICBpZiAobV91cGxvYWRCdWZmZXJTaXplICE9IHZpc2libGVS
ZWN0SW5MYXllckNvb3Jkcy5zaXplKCkpIHsKKyAgICAgICAgICAgIHJlc2l6ZVVwbG9hZEJ1ZmZl
cih2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fZGlydHlS
ZWN0ID0gYm91bmRzUmVjdDsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiB0aGUgdmlzaWJsZSBw
b3J0aW9uIG9mIHRoZSBsYXllciBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbGFzdCB1cGxvYWQuCisg
ICAgICAgIGlmICh2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMgIT0gbV92aXNpYmxlUmVjdEluTGF5
ZXJDb29yZHMpCiAgICAgICAgICAgICBtX2RpcnR5UmVjdCA9IGJvdW5kc1JlY3Q7CiAgICAgICAg
IG1fdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzID0gdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzOwog
CkBAIC0yMjQsOTMgKzIyNSwxMDAgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29udGVudHNJZkRpcnR5KCkKIAogICAgICAgICAvLyBXaGF0IHRoZSByZWN0YW5nbGVzIG1lYW46
CiAgICAgICAgIC8vICAgZGlydHlSZWN0OiBUaGUgcmVnaW9uIG9mIHRoaXMgbGF5ZXIgdGhhdCB3
aWxsIGJlIHVwZGF0ZWQuCi0gICAgICAgIC8vICAgdXBkYXRlUmVjdDogVGhlIHJlZ2lvbiBvZiB0
aGUgbGF5ZXIncyB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1cGxvYWRlZCBpbnRvLgotICAgICAgICAv
LyAgIHJlcXVpcmVkVGV4dHVyZVNpemU6IGlzIHRoZSByZXF1aXJlZCBzaXplIG9mIHRoaXMgbGF5
ZXIncyB0ZXh0dXJlLgorICAgICAgICAvLyAgIG1fdXBsb2FkVXBkYXRlUmVjdDogVGhlIHJlZ2lv
biBvZiB0aGUgbGF5ZXIncyB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1cGxvYWRlZCBpbnRvLgogICAg
ICAgICBkaXJ0eVJlY3QgPSB2aXNpYmxlRGlydHlSZWN0SW5MYXllclNwYWNlOwotICAgICAgICB1
cGRhdGVSZWN0ID0gZGlydHlSZWN0OworICAgICAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBkaXJ0
eVJlY3Q7CiAgICAgICAgIEludFNpemUgdmlzaWJsZVJlY3RPZmZzZXRJbkxheWVyQ29vcmRzKHZp
c2libGVSZWN0SW5MYXllckNvb3Jkcy54KCksIHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy55KCkp
OwotICAgICAgICB1cGRhdGVSZWN0Lm1vdmUoLXZpc2libGVSZWN0T2Zmc2V0SW5MYXllckNvb3Jk
cyk7Ci0gICAgICAgIHJlcXVpcmVkVGV4dHVyZVNpemUgPSB2aXNpYmxlUmVjdEluTGF5ZXJDb29y
ZHMuc2l6ZSgpOworICAgICAgICBwYWludGluZ09mZnNldCA9IEludFBvaW50KHZpc2libGVSZWN0
T2Zmc2V0SW5MYXllckNvb3Jkcyk7CisgICAgICAgIG1fdXBsb2FkVXBkYXRlUmVjdC5tb3ZlKC12
aXNpYmxlUmVjdE9mZnNldEluTGF5ZXJDb29yZHMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRp
cnR5UmVjdCA9IEludFJlY3QobV9kaXJ0eVJlY3QpOwotICAgICAgICByZXF1aXJlZFRleHR1cmVT
aXplID0gbV9ib3VuZHM7CiAgICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIHJl
YWxsb2NhdGVkIHRoZW4gd2UgbXVzdCByZWRyYXcgdGhlIGVudGlyZQogICAgICAgICAvLyBjb250
ZW50cyBvZiB0aGUgbGF5ZXIuCi0gICAgICAgIGlmICghbV9jb250ZW50c1RleHR1cmUgfHwgIW1f
Y29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKHJlcXVpcmVkVGV4dHVyZVNpemUsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBKSkKKyAgICAgICAgaWYgKG1fdXBsb2FkQnVmZmVyU2l6ZSAhPSBib3VuZHMo
KSkgeworICAgICAgICAgICAgcmVzaXplVXBsb2FkQnVmZmVyKGJvdW5kcygpKTsKICAgICAgICAg
ICAgIGRpcnR5UmVjdCA9IGJvdW5kc1JlY3Q7Ci0gICAgICAgIGVsc2UgeworICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLy8gQ2xpcCB0aGUgZGlydHlSZWN0IHRvIHRoZSBzaXplIG9mIHRo
ZSBsYXllciB0byBhdm9pZCBkcmF3aW5nCiAgICAgICAgICAgICAvLyBvdXRzaWRlIHRoZSBib3Vu
ZHMgb2YgdGhlIGJhY2tpbmcgdGV4dHVyZS4KICAgICAgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNl
Y3QoYm91bmRzUmVjdCk7CiAgICAgICAgIH0KLSAgICAgICAgdXBkYXRlUmVjdCA9IGRpcnR5UmVj
dDsKKyAgICAgICAgbV91cGxvYWRVcGRhdGVSZWN0ID0gZGlydHlSZWN0OwogICAgIH0KIAogICAg
IGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICNpZiBQTEFURk9S
TShTS0lBKQotICAgIGNvbnN0IFNrQml0bWFwKiBza2lhQml0bWFwID0gMDsKLSAgICBPd25QdHI8
c2tpYTo6UGxhdGZvcm1DYW52YXM+IGNhbnZhczsKICAgICBPd25QdHI8UGxhdGZvcm1Db250ZXh0
U2tpYT4gc2tpYUNvbnRleHQ7Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3ND
b250ZXh0OwogCi0gICAgY2FudmFzLnNldChuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoZGlydHlS
ZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWlnaHQoKSwgZmFsc2UpKTsKLSAgICBza2lhQ29udGV4
dC5zZXQobmV3IFBsYXRmb3JtQ29udGV4dFNraWEoY2FudmFzLmdldCgpKSk7CisgICAgc2tpYUNv
bnRleHQuc2V0KG5ldyBQbGF0Zm9ybUNvbnRleHRTa2lhKG1fdXBsb2FkUGl4ZWxDYW52YXMuZ2V0
KCkpKTsKIAogICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGdldCB0ZXh0IHRvIHNob3cgdXAgY29y
cmVjdGx5LgotICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgdGFrZSB1cyBkb3duIGEgdmVyeSBzbG93
IHRleHQgcmVuZGVyaW5nIHBhdGg/CiAgICAgc2tpYUNvbnRleHQtPnNldERyYXdpbmdUb0ltYWdl
QnVmZmVyKHRydWUpOwogCi0gICAgZ3JhcGhpY3NDb250ZXh0LnNldChuZXcgR3JhcGhpY3NDb250
ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqPihza2lhQ29udGV4
dC5nZXQoKSkpKTsKLQotICAgIC8vIEJyaW5nIHRoZSBjYW52YXMgaW50byB0aGUgY29vcmRpbmF0
ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCi0gICAgY2FudmFzLT50cmFuc2xhdGUoc3RhdGlj
X2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1k
aXJ0eVJlY3QueSgpKSk7Ci0KLSAgICBtX293bmVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50
cygqZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eVJlY3QpOwotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRt
YXAgPSBjYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwotICAgIHNraWFC
aXRtYXAgPSAmYml0bWFwOwotICAgIEFTU0VSVChza2lhQml0bWFwKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQgZ3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqPihza2lhQ29udGV4dC5nZXQoKSkpOwogCi0gICAgU2tBdXRvTG9ja1BpeGVscyBsb2Nr
KCpza2lhQml0bWFwKTsKLSAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBza2lhQml0
bWFwLT5jb25maWcoKTsKLSAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBzdXBwb3J0IG1vcmUg
aW1hZ2UgY29uZmlndXJhdGlvbnM/Ci0gICAgaWYgKHNraWFDb25maWcgPT0gU2tCaXRtYXA6OmtB
UkdCXzg4ODhfQ29uZmlnKSB7Ci0gICAgICAgIHBpeGVscyA9IHNraWFCaXRtYXAtPmdldFBpeGVs
cygpOwotICAgICAgICBiaXRtYXBTaXplID0gSW50U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBz
a2lhQml0bWFwLT5oZWlnaHQoKSk7Ci0gICAgfQogI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgVmVj
dG9yPHVpbnQ4X3Q+IHRlbXBWZWN0b3I7Ci0gICAgaW50IHJvd0J5dGVzID0gNCAqIGRpcnR5UmVj
dC53aWR0aCgpOwotICAgIHRlbXBWZWN0b3IucmVzaXplKHJvd0J5dGVzICogZGlydHlSZWN0Lmhl
aWdodCgpKTsKLSAgICBtZW1zZXQodGVtcFZlY3Rvci5kYXRhKCksIDAsIHRlbXBWZWN0b3Iuc2l6
ZSgpKTsKKyAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjbGVhciB0aGUgZGlydHkgcmVjdGFu
Z2xlIGluIHRoZSB1cGxvYWQgYnVmZmVyPwogICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+
IGNvbG9yU3BhY2UoQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAg
IFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNvbnRleHRDRyhBZG9wdENGLCBDR0JpdG1hcENvbnRl
eHRDcmVhdGUodGVtcFZlY3Rvci5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eVJlY3Qud2lkdGgo
KSwgZGlydHlSZWN0LmhlaWdodCgpLCA4LCByb3dCeXRlcywKKyAgICBSZXRhaW5QdHI8Q0dDb250
ZXh0UmVmPiBjb250ZXh0Q0coQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fdXBsb2Fk
UGl4ZWxEYXRhLT5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VwbG9hZEJ1ZmZlclNpemUud2lkdGgo
KSwgbV91cGxvYWRCdWZmZXJTaXplLmhlaWdodCgpLCA4LCByb3dCeXRlcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbG9yU3BhY2UuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0KSk7Ci0gICAgQ0dDb250ZXh0VHJhbnNs
YXRlQ1RNKGNvbnRleHRDRy5nZXQoKSwgMCwgZGlydHlSZWN0LmhlaWdodCgpKTsKKyAgICBDR0Nv
bnRleHRUcmFuc2xhdGVDVE0oY29udGV4dENHLmdldCgpLCAwLCBtX3VwbG9hZEJ1ZmZlclNpemUu
aGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHRDRy5nZXQoKSwgMSwgLTEp
OwogCiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0Q0cuZ2V0KCkp
OworI2Vsc2UKKyNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgor
I2VuZGlmCiAKLSAgICAvLyBUcmFuc2xhdGUgdGhlIGdyYXBoaWNzIGNvbnRleHQgaW50byB0aGUg
Y29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIGRpcnR5IHJlY3QuCi0gICAgZ3JhcGhpY3NDb250ZXh0
LnRyYW5zbGF0ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOworICAgIGdyYXBoaWNz
Q29udGV4dC5zYXZlKCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZSgtcGFpbnRpbmdP
ZmZzZXQueCgpLCAtcGFpbnRpbmdPZmZzZXQueSgpKTsKKyAgICBncmFwaGljc0NvbnRleHQuY2xl
YXJSZWN0KGRpcnR5UmVjdCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAoZGlydHlSZWN0KTsK
IAogICAgIG1fb3duZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGdyYXBoaWNzQ29udGV4
dCwgZGlydHlSZWN0KTsKKyAgICBncmFwaGljc0NvbnRleHQucmVzdG9yZSgpOworfQogCi0gICAg
cGl4ZWxzID0gdGVtcFZlY3Rvci5kYXRhKCk7Ci0gICAgYml0bWFwU2l6ZSA9IGRpcnR5UmVjdC5z
aXplKCk7Cit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXJGb3JJ
bWFnZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHNpemVfdCBidWZmZXJTaXplID0gc2l6
ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAqIDQ7CisgICAgbV91cGxvYWRQaXhlbERhdGEgPSBu
ZXcgVmVjdG9yPHVpbnQ4X3Q+KGJ1ZmZlclNpemUpOworI2lmIFBMQVRGT1JNKENHKQorICAgIG1l
bXNldChtX3VwbG9hZFBpeGVsRGF0YS0+ZGF0YSgpLCAwLCBidWZmZXJTaXplKTsKKyNlbmRpZgor
ICAgIG1fdXBsb2FkQnVmZmVyU2l6ZSA9IHNpemU7Cit9Cit2b2lkIENvbnRlbnRMYXllckNocm9t
aXVtOjpyZXNpemVVcGxvYWRCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyNpZiBQTEFU
Rk9STShTS0lBKQorICAgIG1fdXBsb2FkUGl4ZWxDYW52YXMgPSBuZXcgc2tpYTo6UGxhdGZvcm1D
YW52YXMoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBmYWxzZSk7CisgICAgbV91cGxvYWRC
dWZmZXJTaXplID0gc2l6ZTsKICNlbHNlCi0jZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5
b3VyIHBsYXRmb3JtLiIKKyAgICByZXNpemVVcGxvYWRCdWZmZXJGb3JJbWFnZShzaXplKTsKICNl
bmRpZgotCi0gICAgaWYgKHBpeGVscykKLSAgICAgICAgdXBkYXRlVGV4dHVyZVJlY3QocGl4ZWxz
LCByZXF1aXJlZFRleHR1cmVTaXplLCB1cGRhdGVSZWN0KTsKIH0KIAotdm9pZCBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZVJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRTaXpl
JiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQordm9pZCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZVJlY3RJZk5lZWRlZCgpCiB7CisgICAg
dWludDhfdCogcGl4ZWxzID0gMDsKKyAgICBpZiAoIW1fdXBsb2FkVXBkYXRlUmVjdC5pc0VtcHR5
KCkpIHsKKyNpZiBQTEFURk9STShTS0lBKQorICAgICAgICBpZiAobV91cGxvYWRQaXhlbENhbnZh
cykgeworICAgICAgICAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IG1fdXBsb2FkUGl4ZWxD
YW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgICAgICAgICAgYml0
bWFwLmxvY2tQaXhlbHMoKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHN1
cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucz8KKyAgICAgICAgICAgIGlmIChiaXRtYXAu
Y29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKQorICAgICAgICAgICAgICAg
IHBpeGVscyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihiaXRtYXAuZ2V0UGl4ZWxzKCkpOworICAg
ICAgICB9CisjZW5kaWYKKyAgICAgICAgaWYgKG1fdXBsb2FkUGl4ZWxEYXRhKQorICAgICAgICAg
ICAgcGl4ZWxzID0gbV91cGxvYWRQaXhlbERhdGEtPmRhdGEoKTsKKyAgICB9CisKICAgICBpZiAo
IXBpeGVscykKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMTgsMTUgKzMyNiwzOSBAQCB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0
IEludFNpemUmIHJlcXVpcgogICAgIGlmICghbV9jb250ZW50c1RleHR1cmUpCiAgICAgICAgIG1f
Y29udGVudHNUZXh0dXJlID0gTGF5ZXJUZXh0dXJlOjpjcmVhdGUoY29udGV4dCwgbGF5ZXJSZW5k
ZXJlcigpLT50ZXh0dXJlTWFuYWdlcigpKTsKIAotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUt
PnJlc2VydmUocmVxdWlyZWRUZXh0dXJlU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKSB7
CisgICAgLy8gSWYgd2UgaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlIHdlIGhhdmUgdG8g
dXBsb2FkIHRoZSBmdWxsIGNvbnRlbnRzLgorICAgIGlmICghbV9jb250ZW50c1RleHR1cmUtPmlz
VmFsaWQobV91cGxvYWRCdWZmZXJTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisgICAg
ICAgIG1fdXBsb2FkVXBkYXRlUmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fdXBsb2Fk
QnVmZmVyU2l6ZSk7CisKKyAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKG1fdXBs
b2FkQnVmZmVyU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKSB7CiAgICAgICAgIG1fc2tp
cHNEcmF3ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fY29udGVudHNU
ZXh0dXJlLT5iaW5kVGV4dHVyZSgpOworICAgIGNvbnN0IHNpemVfdCBkZXN0U3RyaWRlID0gbV91
cGxvYWRVcGRhdGVSZWN0LndpZHRoKCkgKiA0OworICAgIFZlY3Rvcjx1aW50OF90PiB1cGxvYWRC
dWZmZXIobV91cGxvYWRVcGRhdGVSZWN0LmhlaWdodCgpICogZGVzdFN0cmlkZSk7CisKKyAgICBJ
bnRSZWN0IHNyY1JlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBib3VuZHMoKSk7CisgICAg
aWYgKHJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKSkKKyAgICAgICAgc3JjUmVjdCA9IG1fdmlz
aWJsZVJlY3RJbkxheWVyQ29vcmRzOworICAgIGNvbnN0IHNpemVfdCBzcmNTdHJpZGUgPSBzcmNS
ZWN0LndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fdXBsb2FkVXBk
YXRlUmVjdC5oZWlnaHQoKTsgKytyb3cpIHsKKyAgICAgICAgcHRyZGlmZl90IHNyY09mZnNldCA9
IChtX3VwbG9hZFVwZGF0ZVJlY3QueSgpICsgcm93KSAqIHNyY1N0cmlkZSArIG1fdXBsb2FkVXBk
YXRlUmVjdC54KCkgKiA0OworICAgICAgICBwdHJkaWZmX3QgZGVzdE9mZnNldCA9IHJvdyAqIGRl
c3RTdHJpZGU7CisgICAgICAgIG1lbWNweSh1cGxvYWRCdWZmZXIuZGF0YSgpICsgZGVzdE9mZnNl
dCwgcGl4ZWxzICsgc3JjT2Zmc2V0LCBkZXN0U3RyaWRlKTsKKyAgICB9CiAKLSAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCks
IHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgbV9jb250ZW50c1RleHR1cmUt
PmJpbmRUZXh0dXJlKCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFN1YkltYWdlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV91cGxvYWRVcGRhdGVSZWN0LngoKSwgbV91cGxvYWRVcGRhdGVS
ZWN0LnkoKSwgbV91cGxvYWRVcGRhdGVSZWN0LndpZHRoKCksIG1fdXBsb2FkVXBkYXRlUmVjdC5o
ZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkQnVmZmVyLmRhdGEoKSkp
OworI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgaWYgKG1fdXBsb2FkUGl4ZWxDYW52YXMpCisgICAg
ICAgIG1fdXBsb2FkUGl4ZWxDYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2Up
LnVubG9ja1BpeGVscygpOworI2VuZGlmCiAKKyAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBJbnRS
ZWN0KCk7CiAgICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShGbG9hdFNpemUoKSk7CiAgICAgLy8gTGFy
Z2UgbGF5ZXJzIGFsd2F5cyBzdGF5IGRpcnR5LCBiZWNhdXNlIHRoZXkgbmVlZCB0byB1cGRhdGUg
d2hlbiB0aGUgY29udGVudCByZWN0IGNoYW5nZXMuCiAgICAgbV9jb250ZW50c0RpcnR5ID0gcmVx
dWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpOwpAQCAtMzM0LDYgKzM2Niw4IEBAIHZvaWQgQ29udGVu
dExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZWN0KHZvaWQqIHBpeGVscywgY29uc3QgSW50
U2l6ZSYgcmVxdWlyCiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXcoKQogeworICAg
IHVwZGF0ZVRleHR1cmVSZWN0SWZOZWVkZWQoKTsKKwogICAgIGlmIChtX3NraXBzRHJhdykKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0zNTcsNyArMzkxLDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6ZHJhdygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3YtPnNoYWRlck1hdHJpeExv
Y2F0aW9uKCksIHN2LT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9u
TWF0cml4KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1RyYW5zZm9ybSgpLCBtX2Jv
dW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBkcmF3VHJhbnNmb3JtKCksIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdPcGFjaXR5KCksIHN2LT5zaGFkZXJNYXRyaXhM
b2NhdGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN2LT5zaGFkZXJBbHBoYUxvY2F0
aW9uKCkpOwogICAgIH0KQEAgLTM2NiwxMyArNDAwLDE1IEBAIHZvaWQgQ29udGVudExheWVyQ2hy
b21pdW06OmRyYXcoKQogCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1bnJlc2VydmVDb250
ZW50c1RleHR1cmUoKQogewotICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZSkKKyAgICBpZiAoIW1f
c2tpcHNEcmF3ICYmIG1fY29udGVudHNUZXh0dXJlKQogICAgICAgICBtX2NvbnRlbnRzVGV4dHVy
ZS0+dW5yZXNlcnZlKCk7CiB9CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmJpbmRDb250
ZW50c1RleHR1cmUoKQogewotICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZSkKKyAgICB1cGRhdGVU
ZXh0dXJlUmVjdElmTmVlZGVkKCk7CisKKyAgICBpZiAoIW1fc2tpcHNEcmF3ICYmIG1fY29udGVu
dHNUZXh0dXJlKQogICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZS0+YmluZFRleHR1cmUoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKaW5kZXggMzM2MzUxOGRhNTMxYWM2MGQz
MGQ3ZjgwZTdmNWM3NjAzYzMyYTM4MC4uMjNkNTk3MTI3NWI5MTRhZTczNDY3NGYwNDY4ZWM3ZTYw
MTU3MTg1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCkBAIC04MiwxNSArODIs
MjggQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9t
aXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwogCi0gICAgdm9pZCB1cGRhdGVUZXh0
dXJlUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFNpemUmIHJlcXVpcmVkVGV4dHVyZVNpemUs
IGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpOwotCiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXBS
ZXNvdXJjZXMoKTsKICAgICBib29sIHJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKSBjb25zdDsK
KyAgICB2b2lkIHJlc2l6ZVVwbG9hZEJ1ZmZlcihjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBy
ZXNpemVVcGxvYWRCdWZmZXJGb3JJbWFnZShjb25zdCBJbnRTaXplJik7CiAKICAgICBPd25QdHI8
TGF5ZXJUZXh0dXJlPiBtX2NvbnRlbnRzVGV4dHVyZTsKICAgICBib29sIG1fc2tpcHNEcmF3Owog
CisgICAgLy8gVGhlIHNpemUgb2YgdGhlIHVwbG9hZCBidWZmZXIgKGFsc28gdGhlIHNpemUgb2Yg
b3VyIGJhY2tpbmcgdGV4dHVyZSkuCisgICAgSW50U2l6ZSBtX3VwbG9hZEJ1ZmZlclNpemU7Cisg
ICAgLy8gVGhlIHBvcnRpb24gb2YgdGhlIHVwbG9hZCBidWZmZXIgdGhhdCBoYXMgYSBwZW5kaW5n
IHVwZGF0ZSwgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB0ZXh0dXJlLgorICAgIEludFJlY3Qg
bV91cGxvYWRVcGRhdGVSZWN0OworICAgIC8vIE9uIHBsYXRmb3JtcyB1c2luZyBTa2lhLCB3ZSB1
c2UgdGhlIHNraWE6OlBsYXRmb3JtQ2FudmFzIGZvciBjb250ZW50IGxheWVycworICAgIC8vIGFu
ZCB0aGUgbV91cGxvYWRQaXhlbERhdGEgYnVmZmVyIGZvciBpbWFnZSBsYXllcnMuCisgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBiZSB1c2luZyBtZW1vcnkgd2UgY29udHJvbCBmb3IgYWxsIHVwbG9h
ZHMuCisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+
IG1fdXBsb2FkUGl4ZWxDYW52YXM7CisjZW5kaWYKKyAgICBPd25QdHI8VmVjdG9yPHVpbnQ4X3Q+
ID4gbV91cGxvYWRQaXhlbERhdGE7CisKIHByaXZhdGU6CisgICAgdm9pZCB1cGRhdGVUZXh0dXJl
UmVjdElmTmVlZGVkKCk7CiAKICAgICBJbnRSZWN0IG1fdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRz
OwogICAgIEZsb2F0UG9pbnQgbV9sYXllckNlbnRlckluU3VyZmFjZUNvb3JkczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IGNkMjk5YzFhMGNlM2IzMGU5NWQ5MTRkZTA1MWI5
NjMyMTk4NDljYWIuLmY4MTUyNjhlMjE5OTM4MWQyYjhlMmM2MzljYzA2NDQ2NTQxNzI3YmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtODQsNDYgKzg0LDM2IEBAIHZvaWQg
SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgdm9pZCogcGl4ZWxzID0gMDsKLSAgICBJbnRTaXplIGJpdG1hcFNp
emU7Ci0KICAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSA9IG1fY29udGVudHMtPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAKICNpZiBQTEFURk9STShTS0lBKQogICAgIC8vIFRo
ZSBsYXllciBjb250YWlucyBhbiBJbWFnZS4KICAgICBOYXRpdmVJbWFnZVNraWEqIHNraWFJbWFn
ZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU2tpYSo+KG5hdGl2ZUltYWdlKTsKICAgICBjb25z
dCBTa0JpdG1hcCogc2tpYUJpdG1hcCA9IHNraWFJbWFnZTsKLSAgICBiaXRtYXBTaXplID0gSW50
U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7CisgICAgSW50
U2l6ZSBiaXRtYXBTaXplKHNraWFCaXRtYXAtPndpZHRoKCksIHNraWFCaXRtYXAtPmhlaWdodCgp
KTsKICAgICBBU1NFUlQoc2tpYUJpdG1hcCk7CiAjZWxpZiBQTEFURk9STShDRykKICAgICAvLyBO
YXRpdmVJbWFnZVB0ciBpcyBhIENHSW1hZ2VSZWYgb24gTWFjIE9TIFguCiAgICAgaW50IHdpZHRo
ID0gQ0dJbWFnZUdldFdpZHRoKG5hdGl2ZUltYWdlKTsKICAgICBpbnQgaGVpZ2h0ID0gQ0dJbWFn
ZUdldEhlaWdodChuYXRpdmVJbWFnZSk7Ci0gICAgYml0bWFwU2l6ZSA9IEludFNpemUod2lkdGgs
IGhlaWdodCk7CisgICAgSW50U2l6ZSBiaXRtYXBTaXplKHdpZHRoLCBoZWlnaHQpOwogI2VuZGlm
CiAKLSAgICAvLyBDbGlwIHRoZSBkaXJ0eSByZWN0IHRvIHRoZSBiaXRtYXAgZGltZW5zaW9ucy4K
LSAgICBJbnRSZWN0IGRpcnR5UmVjdChtX2RpcnR5UmVjdCk7Ci0gICAgZGlydHlSZWN0LmludGVy
c2VjdChJbnRSZWN0KEludFBvaW50KDAsIDApLCBiaXRtYXBTaXplKSk7Ci0KLSAgICBpZiAoIW1f
Y29udGVudHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChiaXRtYXBTaXpl
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCi0gICAgICAgIGRpcnR5UmVjdCA9IEludFJlY3Qo
SW50UG9pbnQoMCwgMCksIGJpdG1hcFNpemUpOwotICAgIGVsc2UgaWYgKCFtX2NvbnRlbnRzRGly
dHkpIHsKLSAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUoYml0bWFwU2l6ZSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fdXBsb2Fk
QnVmZmVyU2l6ZSAhPSBiaXRtYXBTaXplKSB7CisgICAgICAgIHJlc2l6ZVVwbG9hZEJ1ZmZlckZv
ckltYWdlKGJpdG1hcFNpemUpOwogICAgIH0KKyAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBJbnRS
ZWN0KEludFBvaW50KDAsIDApLCBiaXRtYXBTaXplKTsKIAogI2lmIFBMQVRGT1JNKFNLSUEpCiAg
ICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKCpza2lhQml0bWFwKTsKLSAgICBTa0JpdG1hcDo6Q29u
ZmlnIHNraWFDb25maWcgPSBza2lhQml0bWFwLT5jb25maWcoKTsKICAgICAvLyBGSVhNRTogZG8g
d2UgbmVlZCB0byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJhdGlvbnM/Ci0gICAgaWYgKHNr
aWFDb25maWcgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKQotICAgICAgICBwaXhlbHMg
PSBza2lhQml0bWFwLT5nZXRQaXhlbHMoKTsKKyAgICBBU1NFUlQoc2tpYUJpdG1hcC0+Y29uZmln
KCk9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOworICAgIG1fdXBsb2FkUGl4ZWxEYXRh
ID0gbmV3IFZlY3Rvcjx1aW50OF90Pihza2lhQml0bWFwLT53aWR0aCgpICogc2tpYUJpdG1hcC0+
aGVpZ2h0KCkgKiA0KTsKKyAgICBza2lhQml0bWFwLT5jb3B5UGl4ZWxzVG8obV91cGxvYWRQaXhl
bERhdGEtPmRhdGEoKSwgbV91cGxvYWRQaXhlbERhdGEtPnNpemUoKSk7CiAjZWxpZiBQTEFURk9S
TShDRykKICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGdldCByaWQgb2YgdGhpcyB0ZW1wb3Jhcnkg
Y29weSB3aGVyZSBwb3NzaWJsZS4KICAgICBpbnQgdGVtcFJvd0J5dGVzID0gd2lkdGggKiA0Owot
ICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wVmVjdG9yOwotICAgIHRlbXBWZWN0b3IucmVzaXplKGhl
aWdodCAqIHRlbXBSb3dCeXRlcyk7CisgICAgbV91cGxvYWRQaXhlbERhdGEgPSBuZXcgVmVjdG9y
PHVpbnQ4X3Q+KGhlaWdodCAqIHRlbXBSb3dCeXRlcyk7CiAgICAgLy8gTm90ZSB3ZSBkbyBub3Qg
emVybyB0aGlzIHZlY3RvciBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8KICAgICAvLyBjb21wbGV0ZWx5
IG92ZXJ3cml0ZSBpdHMgY29udGVudHMgd2l0aCB0aGUgaW1hZ2UgYmVsb3cuCiAgICAgLy8gVHJ5
IHRvIHJldXNlIHRoZSBjb2xvciBzcGFjZSBmcm9tIHRoZSBpbWFnZSB0byBwcmVzZXJ2ZSBpdHMg
Y29sb3JzLgpAQCAtMTQzLDcgKzEzMyw3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRh
dGVDb250ZW50c0lmRGlydHkoKQogICAgICAgICBjb2xvclNwYWNlID0gY29sb3JTcGFjZVJlbGVh
c2VyLmdldCgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgUmV0YWluUHRyPENHQ29udGV4
dFJlZj4gdGVtcENvbnRleHQoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHRlbXBWZWN0
b3IuZGF0YSgpLAorICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IHRlbXBDb250ZXh0KEFkb3B0
Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZShtX3VwbG9hZFBpeGVsRGF0YS0+ZGF0YSgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCA4LCB0ZW1wUm93Qnl0ZXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbG9yU3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmly
c3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QpKTsKQEAgLTE1MSwxMyArMTQxLDkgQEAgdm9p
ZCBJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAgICAgQ0dDb250
ZXh0RHJhd0ltYWdlKHRlbXBDb250ZXh0LmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICBD
R1JlY3RNYWtlKDAsIDAsIHN0YXRpY19jYXN0PENHRmxvYXQ+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8
Q0dGbG9hdD4oaGVpZ2h0KSksCiAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlKTsK
LSAgICBwaXhlbHMgPSB0ZW1wVmVjdG9yLmRhdGEoKTsKICNlbHNlCiAjZXJyb3IgIk5lZWQgdG8g
aW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKICNlbmRpZgotCi0gICAgaWYgKHBpeGVscykK
LSAgICAgICAgdXBkYXRlVGV4dHVyZVJlY3QocGl4ZWxzLCBiaXRtYXBTaXplLCAgZGlydHlSZWN0
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA4ZDAxZDliZDlhYTQ5ZTYxYzk2
YTllY2NiNzY2ZGNiMTAxZTM2ZWUzLi42MWRjODQ3OWFmM2YwYzcwNGFjNTQ3NDgwODhiNWEzMTY5
ZjYwNTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzIzLDcgKzMyMyw2IEBAIHZvaWQg
TGF5ZXJDaHJvbWl1bTo6c2V0Qm91bmRzKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgYm9vbCBm
aXJzdFJlc2l6ZSA9ICFtX2JvdW5kcy53aWR0aCgpICYmICFtX2JvdW5kcy5oZWlnaHQoKSAmJiBz
aXplLndpZHRoKCkgJiYgc2l6ZS5oZWlnaHQoKTsKIAogICAgIG1fYm91bmRzID0gc2l6ZTsKLSAg
ICBtX2JhY2tpbmdTdG9yZVNpemUgPSBzaXplOwogCiAgICAgaWYgKGZpcnN0UmVzaXplKQogICAg
ICAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCksIG1f
Ym91bmRzLmhlaWdodCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggZmY5ZTVlNWQ4MzFjM2Yx
M2U5MzA3NmU2YWZjNTU4ZjdjY2E5OGNkNy4uZDQ1N2FjNjliNWMzZTMxZjczN2FlMDJlYzNjZDhh
OThlNTk1MWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMjY1LDcgKzI2NSw2IEBAIHByaXZh
dGU6CiAgICAgTGF5ZXJDaHJvbWl1bSogbV9zdXBlcmxheWVyOwogCiAgICAgLy8gTGF5ZXIgcHJv
cGVydGllcy4KLSAgICBJbnRTaXplIG1fYmFja2luZ1N0b3JlU2l6ZTsKICAgICBGbG9hdFBvaW50
IG1fcG9zaXRpb247CiAgICAgRmxvYXRQb2ludCBtX2FuY2hvclBvaW50OwogICAgIENvbG9yIG1f
YmFja2dyb3VuZENvbG9yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82730</attachid>
            <date>2011-02-16 17:56:01 -0800</date>
            <delta_ts>2011-02-17 15:04:23 -0800</delta_ts>
            <desc>fixes mac compile, adds helper for bitmap locking/unlocking</desc>
            <filename>bug-54315-20110216175600.patch</filename>
            <type>text/plain</type>
            <size>23780</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4NDkxMDEwMjdiNzlhN2RlZGI5NTUwZjVhOGM1Mjg5M2NkZTkzZDBmLi5m
NzNlODY1NGRkMzM0MGVjYTNjODk5NThhODMxYjM2OGY3MTk0ODBkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDEgQEAKKzIwMTEtMDItMTYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Y2hyb21pdW1dIFVwZGF0ZSB0ZXh0dXJlIGZvciBDb250ZW50TGF5ZXJDaHJvbWl1bXMgaW4gZHJh
dygpIGNhbGwgaW5zdGVhZCBvZiB1cGRhdGVDb250ZW50cy4uKCkgY2FsbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQzMTUKKworICAgICAgICBUaGlz
IGRlZmVycyBhbGwgb3BlcmF0aW9ucyBvbiB0aGUgY29tcG9zaXRvcidzIEdMIGNvbnRleHQgdW50
aWwgdGhlCisgICAgICAgIGRyYXcoKSBjYWxsIHdoaWNoIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBt
b3ZpbmcgdGhlIGRyYXcoKSBvZmYtdGhyZWFkLgorICAgICAgICBBbHNvIGNsZWFucyB1cCB0aGUg
dXBkYXRlIGN5Y2xlIGEgYml0IC0gdGhlcmUgd2VyZSBzb21lIHVudXNlZCBsb2NhbAorICAgICAg
ICB2YXJpYWJsZXMgYW5kIHdoYXRub3QuCisKKyAgICAgICAgT25lIGNvbnNlcXVlbmNlIG9mIHRo
aXMgY2hhbmdlIGlzIHRoYXQgdGhlIHVwbG9hZCBidWZmZXIgaXMgcmV0YWluZWQKKyAgICAgICAg
YWNyb3NzIHVwZGF0ZXMgbm93IGluc3RlYWQgb2YgYWxsb2NhdGVkIGJ5IGVhY2ggcGFpbnQuICBU
aGlzIGlzCisgICAgICAgIG5lY2Vzc2FyeSBzbyB0aGF0IHRoZSBmdWxsIGxheWVyIGNvbnRlbnRz
IGNhbiBiZSB1cGxvYWRlZCBpZiB0aGUKKyAgICAgICAgdGV4dHVyZSBtYW5hZ2VyIGV2aWN0cyB0
aGUgbGF5ZXIncyBiYWNraW5nIHRleHR1cmUuICBUaGlzIGNvc3RzIG1vcmUKKyAgICAgICAgcGVy
c2lzdGVudCBtZW1vcnkgYnV0IGF2b2lkcyBsb3RzIG9mIGFsbG9jYXRvciBjaHVybiBvbiB1cGRh
dGVzLgorICAgICAgICBBbm90aGVyIG5vbm9idmlvdXMgZGV0YWlsIGlzIHRoYXQgSSBoYXZlIHRv
IHVwZGF0ZSB0aGUgdGV4dHVyZSBmb3IKKyAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW1zIGlu
IGJpbmRDb250ZW50c1RleHR1cmUoKSBiZWNhdXNlIG1hc2sgbGF5ZXJzCisgICAgICAgIG5ldmVy
IGRyYXcoKSwgdGhleSBhcmUgaW5zdGVhZCBib3VuZCB0byB0aGUgc2Vjb25kYXJ5IHRleHR1cmUg
dW5pdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpy
ZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXll
ckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXJGb3JJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVzaXplVXBsb2FkQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0
eSk6CisgICAgICAgIChXZWJDb3JlOjpTa0JpdG1hcENvbmRpdGlvbmFsQXV0b0xvY2tlclBpeGVs
czo6U2tCaXRtYXBDb25kaXRpb25hbEF1dG9Mb2NrZXJQaXhlbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6U2tCaXRtYXBDb25kaXRpb25hbEF1dG9Mb2NrZXJQaXhlbHM6On5Ta0JpdG1hcENvbmRpdGlv
bmFsQXV0b0xvY2tlclBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpTa0JpdG1hcENvbmRpdGlv
bmFsQXV0b0xvY2tlclBpeGVsczo6bG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6c2V0Qm91bmRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisKIDIwMTEtMDItMTAgIEplcmVteSBPcmxvdyAg
PGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmF0ZSBDaGFwaW4u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYTM4ZjZiZDIxMjY5MGEy
OGY5ODM4ZGI4OTYzNWE4NDE0Y2I2ZDc3ZS4uYzQyODhlMWU0YWZmYjdjYTc5ZWFjMDAwNDBhODRj
YTZiZmU4M2JkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTU0
LDkgKzE1NCw5IEBAIGJvb2wgQ29udGVudExheWVyQ2hyb21pdW06OnJlcXVpcmVzQ2xpcHBlZFVw
ZGF0ZVJlY3QoKSBjb25zdAogICAgIC8vIG9uZSBvZiB0aGUgbGF5ZXIncyBkaW1lbnNpb25zIGlz
IGxhcmdlciB0aGFuIDIwMDAgcGl4ZWxzIG9yIHRoZSBzaXplIG9mCiAgICAgLy8gc3VyZmFjZSBp
dCdzIHJlbmRlcmluZyBpbnRvLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IG1lYXN1cmUgdW50aWwgbGF5
ZXIgdGlsaW5nIGlzIGltcGxlbWVudGVkLgogICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4TGF5ZXJT
aXplID0gMjAwMDsKLSAgICByZXR1cm4gKG1fYm91bmRzLndpZHRoKCkgPiBtYXgobWF4TGF5ZXJT
aXplLCBtX3RhcmdldFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCkud2lkdGgoKSkKLSAgICAg
ICAgICAgIHx8IG1fYm91bmRzLmhlaWdodCgpID4gbWF4KG1heExheWVyU2l6ZSwgbV90YXJnZXRS
ZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLmhlaWdodCgpKQotICAgICAgICAgICAgfHwgIWxh
eWVyUmVuZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShtX2JvdW5kcykpOworICAgIHJldHVybiAo
Ym91bmRzKCkud2lkdGgoKSA+IG1heChtYXhMYXllclNpemUsIG1fdGFyZ2V0UmVuZGVyU3VyZmFj
ZS0+Y29udGVudFJlY3QoKS53aWR0aCgpKQorICAgICAgICAgICAgfHwgYm91bmRzKCkuaGVpZ2h0
KCkgPiBtYXgobWF4TGF5ZXJTaXplLCBtX3RhcmdldFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0
KCkuaGVpZ2h0KCkpCisgICAgICAgICAgICB8fCAhbGF5ZXJSZW5kZXJlcigpLT5jaGVja1RleHR1
cmVTaXplKGJvdW5kcygpKSk7CiB9CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0
ZUNvbnRlbnRzSWZEaXJ0eSgpCkBAIC0xNjksMTIgKzE2OSw5IEBAIHZvaWQgQ29udGVudExheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAKICAgICBBU1NFUlQobGF5ZXJSZW5k
ZXJlcigpKTsKIAotICAgIHZvaWQqIHBpeGVscyA9IDA7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3Q7
Ci0gICAgSW50UmVjdCB1cGRhdGVSZWN0OwotICAgIEludFNpemUgcmVxdWlyZWRUZXh0dXJlU2l6
ZTsKLSAgICBJbnRTaXplIGJpdG1hcFNpemU7Ci0gICAgSW50UmVjdCBib3VuZHNSZWN0KEludFBv
aW50KDAsIDApLCBtX2JvdW5kcyk7CisgICAgSW50UmVjdCBib3VuZHNSZWN0KEludFBvaW50KDAs
IDApLCBib3VuZHMoKSk7CisgICAgSW50UG9pbnQgcGFpbnRpbmdPZmZzZXQ7CiAKICAgICAvLyBG
SVhNRTogUmVtb3ZlIHRoaXMgdGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50ZWQu
CiAgICAgaWYgKHJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKSkgewpAQCAtMTkwLDcgKzE4Nyw3
IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAg
ICAgICAgIGNvbnN0IEludFJlY3QgY2xpcFJlY3QgPSBtX3RhcmdldFJlbmRlclN1cmZhY2UtPmNv
bnRlbnRSZWN0KCk7CiAKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJPcmlnaW5U
cmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtKCk7Ci0gICAgICAgIGxheWVyT3JpZ2luVHJhbnNmb3Jt
LnRyYW5zbGF0ZTNkKC0wLjUgKiBtX2JvdW5kcy53aWR0aCgpLCAtMC41ICogbV9ib3VuZHMuaGVp
Z2h0KCksIDApOworICAgICAgICBsYXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41
ICogYm91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGJvdW5kcygpLmhlaWdodCgpLCAwKTsKIAogICAg
ICAgICAvLyBGb3Igbm93IHdlIGFwcGx5IHRoZSBsYXJnZSBsYXllciB0cmVhdG1lbnQgb25seSBm
b3IgbGF5ZXJzIHRoYXQgYXJlIGVpdGhlciB1bnRyYW5zZm9ybWVkCiAgICAgICAgIC8vIG9yIGFy
ZSBwdXJlbHkgdHJhbnNsYXRlZC4gVGhlaXIgbWF0cml4IGlzIGV4cGVjdGVkIHRvIGJlIGludmVy
dGlibGUuCkBAIC0xOTgsNyArMTk1LDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ29udGVudHNJZkRpcnR5KCkKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0YXJn
ZXRUb0xheWVyTWF0cml4ID0gbGF5ZXJPcmlnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpOwogICAgICAg
ICBJbnRSZWN0IHZpc2libGVSZWN0SW5MYXllckNvb3JkcyA9IHRhcmdldFRvTGF5ZXJNYXRyaXgu
bWFwUmVjdChjbGlwUmVjdCk7Ci0gICAgICAgIHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy5pbnRl
cnNlY3QoSW50UmVjdCgwLCAwLCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkp
OworICAgICAgICB2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMuaW50ZXJzZWN0KEludFJlY3QoMCwg
MCwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCkpKTsKIAogICAgICAgICAvLyBG
b3Igbm9ybWFsIGxheWVycywgdGhlIGNlbnRlciBvZiB0aGUgdGV4dHVyZSBjb3JyZXNwb25kcyB3
aXRoIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgogICAgICAgICAvLyBJbiBsYXJnZSBsYXllcnMg
dGhlIGNlbnRlciBvZiB0aGUgdGV4dHVyZSBpcyB0aGUgY2VudGVyIG9mIHRoZSB2aXNpYmxlIHJl
Z2lvbiBzbyB3ZSBoYXZlCkBAIC0yMTIsOSArMjA5LDEzIEBAIHZvaWQgQ29udGVudExheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICAvLyBJZiB0aGUgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBsYXllciBp
cyBkaWZmZXJlbnQgZnJvbSB0aGUgbGFzdCB1cGxvYWQsIG9yIGlmIG91ciBiYWNraW5nCi0gICAg
ICAgIC8vIHRleHR1cmUgaGFzIGJlZW4gZXZpY3RlZCwgdGhlbiB0aGUgd2hvbGUgbGF5ZXIgaXMg
Y29uc2lkZXJlZCBkaXJ0eS4KLSAgICAgICAgaWYgKHZpc2libGVSZWN0SW5MYXllckNvb3JkcyAh
PSBtX3Zpc2libGVSZWN0SW5MYXllckNvb3JkcyB8fCAhbV9jb250ZW50c1RleHR1cmUgfHwgIW1f
Y29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKHJlcXVpcmVkVGV4dHVyZVNpemUsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBKSkKKyAgICAgICAgLy8gSWYgd2UgbmVlZCB0byByZXNpemUgdGhlIHVwbG9h
ZCBidWZmZXIgd2UgaGF2ZSB0byByZXBhaW50IGV2ZXJ5dGhpbmcuCisgICAgICAgIGlmIChtX3Vw
bG9hZEJ1ZmZlclNpemUgIT0gdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzLnNpemUoKSkgeworICAg
ICAgICAgICAgcmVzaXplVXBsb2FkQnVmZmVyKHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy5zaXpl
KCkpOworICAgICAgICAgICAgbV9kaXJ0eVJlY3QgPSBib3VuZHNSZWN0OworICAgICAgICB9Cisg
ICAgICAgIC8vIElmIHRoZSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIGxheWVyIGlzIGRpZmZlcmVu
dCBmcm9tIHRoZSBsYXN0IHVwbG9hZC4KKyAgICAgICAgaWYgKHZpc2libGVSZWN0SW5MYXllckNv
b3JkcyAhPSBtX3Zpc2libGVSZWN0SW5MYXllckNvb3JkcykKICAgICAgICAgICAgIG1fZGlydHlS
ZWN0ID0gYm91bmRzUmVjdDsKICAgICAgICAgbV92aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMgPSB2
aXNpYmxlUmVjdEluTGF5ZXJDb29yZHM7CiAKQEAgLTIyNCw5MyArMjI1LDEzMSBAQCB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogCiAgICAgICAgIC8v
IFdoYXQgdGhlIHJlY3RhbmdsZXMgbWVhbjoKICAgICAgICAgLy8gICBkaXJ0eVJlY3Q6IFRoZSBy
ZWdpb24gb2YgdGhpcyBsYXllciB0aGF0IHdpbGwgYmUgdXBkYXRlZC4KLSAgICAgICAgLy8gICB1
cGRhdGVSZWN0OiBUaGUgcmVnaW9uIG9mIHRoZSBsYXllcidzIHRleHR1cmUgdGhhdCB3aWxsIGJl
IHVwbG9hZGVkIGludG8uCi0gICAgICAgIC8vICAgcmVxdWlyZWRUZXh0dXJlU2l6ZTogaXMgdGhl
IHJlcXVpcmVkIHNpemUgb2YgdGhpcyBsYXllcidzIHRleHR1cmUuCisgICAgICAgIC8vICAgbV91
cGxvYWRVcGRhdGVSZWN0OiBUaGUgcmVnaW9uIG9mIHRoZSBsYXllcidzIHRleHR1cmUgdGhhdCB3
aWxsIGJlIHVwbG9hZGVkIGludG8uCiAgICAgICAgIGRpcnR5UmVjdCA9IHZpc2libGVEaXJ0eVJl
Y3RJbkxheWVyU3BhY2U7Ci0gICAgICAgIHVwZGF0ZVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgICAg
IG1fdXBsb2FkVXBkYXRlUmVjdCA9IGRpcnR5UmVjdDsKICAgICAgICAgSW50U2l6ZSB2aXNpYmxl
UmVjdE9mZnNldEluTGF5ZXJDb29yZHModmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzLngoKSwgdmlz
aWJsZVJlY3RJbkxheWVyQ29vcmRzLnkoKSk7Ci0gICAgICAgIHVwZGF0ZVJlY3QubW92ZSgtdmlz
aWJsZVJlY3RPZmZzZXRJbkxheWVyQ29vcmRzKTsKLSAgICAgICAgcmVxdWlyZWRUZXh0dXJlU2l6
ZSA9IHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy5zaXplKCk7CisgICAgICAgIHBhaW50aW5nT2Zm
c2V0ID0gSW50UG9pbnQodmlzaWJsZVJlY3RPZmZzZXRJbkxheWVyQ29vcmRzKTsKKyAgICAgICAg
bV91cGxvYWRVcGRhdGVSZWN0Lm1vdmUoLXZpc2libGVSZWN0T2Zmc2V0SW5MYXllckNvb3Jkcyk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgZGlydHlSZWN0ID0gSW50UmVjdChtX2RpcnR5UmVjdCk7
Ci0gICAgICAgIHJlcXVpcmVkVGV4dHVyZVNpemUgPSBtX2JvdW5kczsKICAgICAgICAgLy8gSWYg
dGhlIHRleHR1cmUgbmVlZHMgdG8gYmUgcmVhbGxvY2F0ZWQgdGhlbiB3ZSBtdXN0IHJlZHJhdyB0
aGUgZW50aXJlCiAgICAgICAgIC8vIGNvbnRlbnRzIG9mIHRoZSBsYXllci4KLSAgICAgICAgaWYg
KCFtX2NvbnRlbnRzVGV4dHVyZSB8fCAhbV9jb250ZW50c1RleHR1cmUtPmlzVmFsaWQocmVxdWly
ZWRUZXh0dXJlU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQorICAgICAgICBpZiAobV91
cGxvYWRCdWZmZXJTaXplICE9IGJvdW5kcygpKSB7CisgICAgICAgICAgICByZXNpemVVcGxvYWRC
dWZmZXIoYm91bmRzKCkpOwogICAgICAgICAgICAgZGlydHlSZWN0ID0gYm91bmRzUmVjdDsKLSAg
ICAgICAgZWxzZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBDbGlwIHRoZSBk
aXJ0eVJlY3QgdG8gdGhlIHNpemUgb2YgdGhlIGxheWVyIHRvIGF2b2lkIGRyYXdpbmcKICAgICAg
ICAgICAgIC8vIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgYmFja2luZyB0ZXh0dXJlLgogICAg
ICAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdChib3VuZHNSZWN0KTsKICAgICAgICAgfQotICAg
ICAgICB1cGRhdGVSZWN0ID0gZGlydHlSZWN0OworICAgICAgICBtX3VwbG9hZFVwZGF0ZVJlY3Qg
PSBkaXJ0eVJlY3Q7CiAgICAgfQogCiAgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAogI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgY29uc3QgU2tCaXRtYXAqIHNr
aWFCaXRtYXAgPSAwOwotICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gY2FudmFzOwog
ICAgIE93blB0cjxQbGF0Zm9ybUNvbnRleHRTa2lhPiBza2lhQ29udGV4dDsKLSAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQ7CiAKLSAgICBjYW52YXMuc2V0KG5ldyBz
a2lhOjpQbGF0Zm9ybUNhbnZhcyhkaXJ0eVJlY3Qud2lkdGgoKSwgZGlydHlSZWN0LmhlaWdodCgp
LCBmYWxzZSkpOwotICAgIHNraWFDb250ZXh0LnNldChuZXcgUGxhdGZvcm1Db250ZXh0U2tpYShj
YW52YXMuZ2V0KCkpKTsKKyAgICBza2lhQ29udGV4dC5zZXQobmV3IFBsYXRmb3JtQ29udGV4dFNr
aWEobV91cGxvYWRQaXhlbENhbnZhcy5nZXQoKSkpOwogCiAgICAgLy8gVGhpcyBpcyBuZWVkZWQg
dG8gZ2V0IHRleHQgdG8gc2hvdyB1cCBjb3JyZWN0bHkuCi0gICAgLy8gRklYTUU6IERvZXMgdGhp
cyB0YWtlIHVzIGRvd24gYSB2ZXJ5IHNsb3cgdGV4dCByZW5kZXJpbmcgcGF0aD8KICAgICBza2lh
Q29udGV4dC0+c2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIodHJ1ZSk7CiAKLSAgICBncmFwaGljc0Nv
bnRleHQuc2V0KG5ldyBHcmFwaGljc0NvbnRleHQocmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCo+KHNraWFDb250ZXh0LmdldCgpKSkpOwotCi0gICAgLy8gQnJpbmcgdGhl
IGNhbnZhcyBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4KLSAg
ICBjYW52YXMtPnRyYW5zbGF0ZShzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLWRpcnR5UmVjdC54KCkp
LCBzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLWRpcnR5UmVjdC55KCkpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQgZ3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqPihza2lhQ29udGV4dC5nZXQoKSkpOwogCi0gICAgbV9vd25lci0+cGFpbnRHcmFwaGlj
c0xheWVyQ29udGVudHMoKmdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKLSAgICBjb25zdCBT
a0JpdG1hcCYgYml0bWFwID0gY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNl
KTsKLSAgICBza2lhQml0bWFwID0gJmJpdG1hcDsKLSAgICBBU1NFUlQoc2tpYUJpdG1hcCk7Ci0K
LSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soKnNraWFCaXRtYXApOwotICAgIFNrQml0bWFwOjpD
b25maWcgc2tpYUNvbmZpZyA9IHNraWFCaXRtYXAtPmNvbmZpZygpOwotICAgIC8vIEZJWE1FOiBk
byB3ZSBuZWVkIHRvIHN1cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucz8KLSAgICBpZiAo
c2tpYUNvbmZpZyA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpIHsKLSAgICAgICAgcGl4
ZWxzID0gc2tpYUJpdG1hcC0+Z2V0UGl4ZWxzKCk7Ci0gICAgICAgIGJpdG1hcFNpemUgPSBJbnRT
aXplKHNraWFCaXRtYXAtPndpZHRoKCksIHNraWFCaXRtYXAtPmhlaWdodCgpKTsKLSAgICB9CiAj
ZWxpZiBQTEFURk9STShDRykKLSAgICBWZWN0b3I8dWludDhfdD4gdGVtcFZlY3RvcjsKLSAgICBp
bnQgcm93Qnl0ZXMgPSA0ICogZGlydHlSZWN0LndpZHRoKCk7Ci0gICAgdGVtcFZlY3Rvci5yZXNp
emUocm93Qnl0ZXMgKiBkaXJ0eVJlY3QuaGVpZ2h0KCkpOwotICAgIG1lbXNldCh0ZW1wVmVjdG9y
LmRhdGEoKSwgMCwgdGVtcFZlY3Rvci5zaXplKCkpOworICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVk
IHRvIGNsZWFyIHRoZSBkaXJ0eSByZWN0YW5nbGUgaW4gdGhlIHVwbG9hZCBidWZmZXI/CiAgICAg
UmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9wdENGLCBDR0NvbG9yU3Bh
Y2VDcmVhdGVEZXZpY2VSR0IoKSk7Ci0gICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY29udGV4
dENHKEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZSh0ZW1wVmVjdG9yLmRhdGEoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpcnR5UmVjdC53aWR0aCgpLCBkaXJ0eVJlY3QuaGVpZ2h0KCksIDgsIHJvd0J5
dGVzLAorICAgIHNpemVfdCByb3dCeXRlcyA9IG1fdXBsb2FkQnVmZmVyU2l6ZS53aWR0aCgpICog
NDsKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjb250ZXh0Q0coQWRvcHRDRiwgQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlKG1fdXBsb2FkUGl4ZWxEYXRhLT5kYXRhKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X3VwbG9hZEJ1ZmZlclNpemUud2lkdGgoKSwgbV91cGxvYWRCdWZmZXJTaXplLmhlaWdodCgpLCA4
LCByb3dCeXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UuZ2V0KCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0
KSk7Ci0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHRDRy5nZXQoKSwgMCwgZGlydHlS
ZWN0LmhlaWdodCgpKTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dENHLmdldCgp
LCAwLCBtX3VwbG9hZEJ1ZmZlclNpemUuaGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RN
KGNvbnRleHRDRy5nZXQoKSwgMSwgLTEpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNz
Q29udGV4dChjb250ZXh0Q0cuZ2V0KCkpOworI2Vsc2UKKyNlcnJvciAiTmVlZCB0byBpbXBsZW1l
bnQgZm9yIHlvdXIgcGxhdGZvcm0uIgorI2VuZGlmCiAKLSAgICAvLyBUcmFuc2xhdGUgdGhlIGdy
YXBoaWNzIGNvbnRleHQgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIGRpcnR5IHJl
Y3QuCi0gICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5
UmVjdC55KCkpOworICAgIGdyYXBoaWNzQ29udGV4dC5zYXZlKCk7CisgICAgZ3JhcGhpY3NDb250
ZXh0LnRyYW5zbGF0ZSgtcGFpbnRpbmdPZmZzZXQueCgpLCAtcGFpbnRpbmdPZmZzZXQueSgpKTsK
KyAgICBncmFwaGljc0NvbnRleHQuY2xlYXJSZWN0KGRpcnR5UmVjdCk7CisgICAgZ3JhcGhpY3ND
b250ZXh0LmNsaXAoZGlydHlSZWN0KTsKIAogICAgIG1fb3duZXItPnBhaW50R3JhcGhpY3NMYXll
ckNvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKKyAgICBncmFwaGljc0NvbnRl
eHQucmVzdG9yZSgpOworfQogCi0gICAgcGl4ZWxzID0gdGVtcFZlY3Rvci5kYXRhKCk7Ci0gICAg
Yml0bWFwU2l6ZSA9IGRpcnR5UmVjdC5zaXplKCk7Cit2b2lkIENvbnRlbnRMYXllckNocm9taXVt
OjpyZXNpemVVcGxvYWRCdWZmZXJGb3JJbWFnZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAg
IHNpemVfdCBidWZmZXJTaXplID0gc2l6ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAqIDQ7Cisg
ICAgbV91cGxvYWRQaXhlbERhdGEgPSBuZXcgVmVjdG9yPHVpbnQ4X3Q+KGJ1ZmZlclNpemUpOwor
I2lmIFBMQVRGT1JNKENHKQorICAgIG1lbXNldChtX3VwbG9hZFBpeGVsRGF0YS0+ZGF0YSgpLCAw
LCBidWZmZXJTaXplKTsKKyNlbmRpZgorICAgIG1fdXBsb2FkQnVmZmVyU2l6ZSA9IHNpemU7Cit9
Cit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXIoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKK3sKKyNpZiBQTEFURk9STShTS0lBKQorICAgIG1fdXBsb2FkUGl4ZWxDYW52
YXMgPSBuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
LCBmYWxzZSk7CisgICAgbV91cGxvYWRCdWZmZXJTaXplID0gc2l6ZTsKICNlbHNlCi0jZXJyb3Ig
Ik5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKKyAgICByZXNpemVVcGxvYWRC
dWZmZXJGb3JJbWFnZShzaXplKTsKICNlbmRpZgotCi0gICAgaWYgKHBpeGVscykKLSAgICAgICAg
dXBkYXRlVGV4dHVyZVJlY3QocGl4ZWxzLCByZXF1aXJlZFRleHR1cmVTaXplLCB1cGRhdGVSZWN0
KTsKIH0KIAotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZVJlY3Qodm9p
ZCogcGl4ZWxzLCBjb25zdCBJbnRTaXplJiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25zdCBJbnRS
ZWN0JiB1cGRhdGVSZWN0KQorI2lmIFBMQVRGT1JNKFNLSUEpCitjbGFzcyBTa0JpdG1hcENvbmRp
dGlvbmFsQXV0b0xvY2tlclBpeGVscwogeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNrQml0
bWFwQ29uZGl0aW9uYWxBdXRvTG9ja2VyUGl4ZWxzKTsKK3B1YmxpYzoKKyAgICBTa0JpdG1hcENv
bmRpdGlvbmFsQXV0b0xvY2tlclBpeGVscygpCisgICAgICAgIDogbV9iaXRtYXAoMCkKKyAgICB7
CisgICAgfQorCisgICAgflNrQml0bWFwQ29uZGl0aW9uYWxBdXRvTG9ja2VyUGl4ZWxzKCkKKyAg
ICB7CisgICAgICAgIGlmIChtX2JpdG1hcCkKKyAgICAgICAgICAgIG1fYml0bWFwLT51bmxvY2tQ
aXhlbHMoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvY2tQaXhlbHMoY29uc3QgU2tCaXRtYXAqIGJp
dG1hcCkKKyAgICB7CisgICAgICAgIGJpdG1hcC0+bG9ja1BpeGVscygpOworICAgICAgICBtX2Jp
dG1hcCA9IGJpdG1hcDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgU2tCaXRtYXAqIG1f
Yml0bWFwOworfTsKKyNlbmRpZgorCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVU
ZXh0dXJlUmVjdElmTmVlZGVkKCkKK3sKKyAgICB1aW50OF90KiBwaXhlbHMgPSAwOworI2lmIFBM
QVRGT1JNKFNLSUEpCisgICAgU2tCaXRtYXBDb25kaXRpb25hbEF1dG9Mb2NrZXJQaXhlbHMgbG9j
a2VyOworI2VuZGlmCisgICAgaWYgKCFtX3VwbG9hZFVwZGF0ZVJlY3QuaXNFbXB0eSgpKSB7Cisj
aWYgUExBVEZPUk0oU0tJQSkKKyAgICAgICAgaWYgKG1fdXBsb2FkUGl4ZWxDYW52YXMpIHsKKyAg
ICAgICAgICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX3VwbG9hZFBpeGVsQ2FudmFzLT5n
ZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKKyAgICAgICAgICAgIGxvY2tlci5sb2Nr
UGl4ZWxzKCZiaXRtYXApOworICAgICAgICAgICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gc3Vw
cG9ydCBtb3JlIGltYWdlIGNvbmZpZ3VyYXRpb25zPworICAgICAgICAgICAgaWYgKGJpdG1hcC5j
b25maWcoKSA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpCisgICAgICAgICAgICAgICAg
cGl4ZWxzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJpdG1hcC5nZXRQaXhlbHMoKSk7CisgICAg
ICAgIH0KKyNlbmRpZgorICAgICAgICBpZiAobV91cGxvYWRQaXhlbERhdGEpCisgICAgICAgICAg
ICBwaXhlbHMgPSBtX3VwbG9hZFBpeGVsRGF0YS0+ZGF0YSgpOworICAgIH0KKwogICAgIGlmICgh
cGl4ZWxzKQogICAgICAgICByZXR1cm47CiAKQEAgLTMxOCwxNSArMzU3LDM1IEBAIHZvaWQgQ29u
dGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZWN0KHZvaWQqIHBpeGVscywgY29uc3Qg
SW50U2l6ZSYgcmVxdWlyCiAgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSkKICAgICAgICAgbV9j
b250ZW50c1RleHR1cmUgPSBMYXllclRleHR1cmU6OmNyZWF0ZShjb250ZXh0LCBsYXllclJlbmRl
cmVyKCktPnRleHR1cmVNYW5hZ2VyKCkpOwogCi0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZS0+
cmVzZXJ2ZShyZXF1aXJlZFRleHR1cmVTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpIHsK
KyAgICAvLyBJZiB3ZSBoYXZlIHRvIGFsbG9jYXRlIGEgbmV3IHRleHR1cmUgd2UgaGF2ZSB0byB1
cGxvYWQgdGhlIGZ1bGwgY29udGVudHMuCisgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZS0+aXNW
YWxpZChtX3VwbG9hZEJ1ZmZlclNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICAg
ICAgbV91cGxvYWRVcGRhdGVSZWN0ID0gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV91cGxvYWRC
dWZmZXJTaXplKTsKKworICAgIGlmICghbV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUobV91cGxv
YWRCdWZmZXJTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpIHsKICAgICAgICAgbV9za2lw
c0RyYXcgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jb250ZW50c1Rl
eHR1cmUtPmJpbmRUZXh0dXJlKCk7CisgICAgY29uc3Qgc2l6ZV90IGRlc3RTdHJpZGUgPSBtX3Vw
bG9hZFVwZGF0ZVJlY3Qud2lkdGgoKSAqIDQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHVwbG9hZEJ1
ZmZlcihtX3VwbG9hZFVwZGF0ZVJlY3QuaGVpZ2h0KCkgKiBkZXN0U3RyaWRlKTsKKworICAgIElu
dFJlY3Qgc3JjUmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fdXBsb2FkQnVmZmVyU2l6
ZSk7CisgICAgaWYgKHJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKSkKKyAgICAgICAgc3JjUmVj
dCA9IG1fdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzOworICAgIGNvbnN0IHNpemVfdCBzcmNTdHJp
ZGUgPSBzcmNSZWN0LndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1f
dXBsb2FkVXBkYXRlUmVjdC5oZWlnaHQoKTsgKytyb3cpIHsKKyAgICAgICAgcHRyZGlmZl90IHNy
Y09mZnNldCA9IChtX3VwbG9hZFVwZGF0ZVJlY3QueSgpICsgcm93KSAqIHNyY1N0cmlkZSArIG1f
dXBsb2FkVXBkYXRlUmVjdC54KCkgKiA0OworICAgICAgICBwdHJkaWZmX3QgZGVzdE9mZnNldCA9
IHJvdyAqIGRlc3RTdHJpZGU7CisgICAgICAgIG1lbWNweSh1cGxvYWRCdWZmZXIuZGF0YSgpICsg
ZGVzdE9mZnNldCwgcGl4ZWxzICsgc3JjT2Zmc2V0LCBkZXN0U3RyaWRlKTsKKyAgICB9CiAKLSAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0
LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgbV9jb250ZW50
c1RleHR1cmUtPmJpbmRUZXh0dXJlKCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFN1
YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91cGxvYWRVcGRhdGVSZWN0LngoKSwgbV91cGxv
YWRVcGRhdGVSZWN0LnkoKSwgbV91cGxvYWRVcGRhdGVSZWN0LndpZHRoKCksIG1fdXBsb2FkVXBk
YXRlUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkQnVmZmVy
LmRhdGEoKSkpOwogCisgICAgbV91cGxvYWRVcGRhdGVSZWN0ID0gSW50UmVjdCgpOwogICAgIG1f
ZGlydHlSZWN0LnNldFNpemUoRmxvYXRTaXplKCkpOwogICAgIC8vIExhcmdlIGxheWVycyBhbHdh
eXMgc3RheSBkaXJ0eSwgYmVjYXVzZSB0aGV5IG5lZWQgdG8gdXBkYXRlIHdoZW4gdGhlIGNvbnRl
bnQgcmVjdCBjaGFuZ2VzLgogICAgIG1fY29udGVudHNEaXJ0eSA9IHJlcXVpcmVzQ2xpcHBlZFVw
ZGF0ZVJlY3QoKTsKQEAgLTMzNCw2ICszOTMsOCBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVt
Ojp1cGRhdGVUZXh0dXJlUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFNpemUmIHJlcXVpcgog
CiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3KCkKIHsKKyAgICB1cGRhdGVUZXh0dXJl
UmVjdElmTmVlZGVkKCk7CisKICAgICBpZiAobV9za2lwc0RyYXcpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMzU3LDcgKzQxOCw3IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXcoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgIHN2LT5zaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+
c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKICAgICB9IGVsc2UgewogICAgICAgICBkcmF3VGV4dHVy
ZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGRyYXdUcmFuc2Zvcm0oKSwgbV9ib3VuZHMud2lkdGgoKSwg
bV9ib3VuZHMuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1RyYW5zZm9y
bSgpLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBkcmF3T3BhY2l0eSgpLCBzdi0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdi0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKICAgICB9
CkBAIC0zNjYsMTMgKzQyNywxNSBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3KCkK
IAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkK
IHsKLSAgICBpZiAobV9jb250ZW50c1RleHR1cmUpCisgICAgaWYgKCFtX3NraXBzRHJhdyAmJiBt
X2NvbnRlbnRzVGV4dHVyZSkKICAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPnVucmVzZXJ2ZSgp
OwogfQogCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpiaW5kQ29udGVudHNUZXh0dXJlKCkK
IHsKLSAgICBpZiAobV9jb250ZW50c1RleHR1cmUpCisgICAgdXBkYXRlVGV4dHVyZVJlY3RJZk5l
ZWRlZCgpOworCisgICAgaWYgKCFtX3NraXBzRHJhdyAmJiBtX2NvbnRlbnRzVGV4dHVyZSkKICAg
ICAgICAgbV9jb250ZW50c1RleHR1cmUtPmJpbmRUZXh0dXJlKCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IDMzNjM1MThkYTUzMWFjNjBkMzBkN2Y4MGU3ZjVjNzYw
M2MzMmEzODAuLjIzZDU5NzEyNzViOTE0YWU3MzQ2NzRmMDQ2OGVjN2U2MDE1NzE4NWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApAQCAtODIsMTUgKzgyLDI4IEBAIHB1YmxpYzoK
IHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyKTsKIAotICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3Qodm9pZCog
cGl4ZWxzLCBjb25zdCBJbnRTaXplJiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25zdCBJbnRSZWN0
JiB1cGRhdGVSZWN0KTsKLQogICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CiAg
ICAgYm9vbCByZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkgY29uc3Q7CisgICAgdm9pZCByZXNp
emVVcGxvYWRCdWZmZXIoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcmVzaXplVXBsb2FkQnVm
ZmVyRm9ySW1hZ2UoY29uc3QgSW50U2l6ZSYpOwogCiAgICAgT3duUHRyPExheWVyVGV4dHVyZT4g
bV9jb250ZW50c1RleHR1cmU7CiAgICAgYm9vbCBtX3NraXBzRHJhdzsKIAorICAgIC8vIFRoZSBz
aXplIG9mIHRoZSB1cGxvYWQgYnVmZmVyIChhbHNvIHRoZSBzaXplIG9mIG91ciBiYWNraW5nIHRl
eHR1cmUpLgorICAgIEludFNpemUgbV91cGxvYWRCdWZmZXJTaXplOworICAgIC8vIFRoZSBwb3J0
aW9uIG9mIHRoZSB1cGxvYWQgYnVmZmVyIHRoYXQgaGFzIGEgcGVuZGluZyB1cGRhdGUsIGluIHRo
ZSBjb29yZGluYXRlcyBvZiB0aGUgdGV4dHVyZS4KKyAgICBJbnRSZWN0IG1fdXBsb2FkVXBkYXRl
UmVjdDsKKyAgICAvLyBPbiBwbGF0Zm9ybXMgdXNpbmcgU2tpYSwgd2UgdXNlIHRoZSBza2lhOjpQ
bGF0Zm9ybUNhbnZhcyBmb3IgY29udGVudCBsYXllcnMKKyAgICAvLyBhbmQgdGhlIG1fdXBsb2Fk
UGl4ZWxEYXRhIGJ1ZmZlciBmb3IgaW1hZ2UgbGF5ZXJzLgorICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgYmUgdXNpbmcgbWVtb3J5IHdlIGNvbnRyb2wgZm9yIGFsbCB1cGxvYWRzLgorI2lmIFBMQVRG
T1JNKFNLSUEpCisgICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX3VwbG9hZFBpeGVs
Q2FudmFzOworI2VuZGlmCisgICAgT3duUHRyPFZlY3Rvcjx1aW50OF90PiA+IG1fdXBsb2FkUGl4
ZWxEYXRhOworCiBwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3RJZk5lZWRlZCgp
OwogCiAgICAgSW50UmVjdCBtX3Zpc2libGVSZWN0SW5MYXllckNvb3JkczsKICAgICBGbG9hdFBv
aW50IG1fbGF5ZXJDZW50ZXJJblN1cmZhY2VDb29yZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9t
aXVtLmNwcAppbmRleCBjZDI5OWMxYTBjZTNiMzBlOTVkOTE0ZGUwNTFiOTYzMjE5ODQ5Y2FiLi5i
NWZhOGVlMGZlMGQwNTc0Mzc4YmRkNGU1ZGNlMzgzZTA2YzA4ZGYwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTg0LDQ2ICs4NCwzNCBAQCB2b2lkIEltYWdlTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIHZvaWQqIHBpeGVscyA9IDA7Ci0gICAgSW50U2l6ZSBiaXRtYXBTaXplOwotCiAgICAgTmF0
aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UgPSBtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwogCiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICAvLyBUaGUgbGF5ZXIgY29udGFp
bnMgYW4gSW1hZ2UuCiAgICAgTmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1hZ2UgPSBzdGF0aWNfY2Fz
dDxOYXRpdmVJbWFnZVNraWEqPihuYXRpdmVJbWFnZSk7CiAgICAgY29uc3QgU2tCaXRtYXAqIHNr
aWFCaXRtYXAgPSBza2lhSW1hZ2U7Ci0gICAgYml0bWFwU2l6ZSA9IEludFNpemUoc2tpYUJpdG1h
cC0+d2lkdGgoKSwgc2tpYUJpdG1hcC0+aGVpZ2h0KCkpOworICAgIEludFNpemUgYml0bWFwU2l6
ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7CiAgICAgQVNTRVJU
KHNraWFCaXRtYXApOwogI2VsaWYgUExBVEZPUk0oQ0cpCiAgICAgLy8gTmF0aXZlSW1hZ2VQdHIg
aXMgYSBDR0ltYWdlUmVmIG9uIE1hYyBPUyBYLgogICAgIGludCB3aWR0aCA9IENHSW1hZ2VHZXRX
aWR0aChuYXRpdmVJbWFnZSk7CiAgICAgaW50IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQobmF0
aXZlSW1hZ2UpOwotICAgIGJpdG1hcFNpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworICAg
IEludFNpemUgYml0bWFwU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICNlbmRpZgogCi0gICAgLy8gQ2xp
cCB0aGUgZGlydHkgcmVjdCB0byB0aGUgYml0bWFwIGRpbWVuc2lvbnMuCi0gICAgSW50UmVjdCBk
aXJ0eVJlY3QobV9kaXJ0eVJlY3QpOwotICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJ
bnRQb2ludCgwLCAwKSwgYml0bWFwU2l6ZSkpOwotCi0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVy
ZSB8fCAhbV9jb250ZW50c1RleHR1cmUtPmlzVmFsaWQoYml0bWFwU2l6ZSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEpKQotICAgICAgICBkaXJ0eVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDAp
LCBiaXRtYXBTaXplKTsKLSAgICBlbHNlIGlmICghbV9jb250ZW50c0RpcnR5KSB7Ci0gICAgICAg
IG1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKGJpdG1hcFNpemUsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3VwbG9hZEJ1ZmZlclNpemUgIT0g
Yml0bWFwU2l6ZSkgeworICAgICAgICByZXNpemVVcGxvYWRCdWZmZXJGb3JJbWFnZShiaXRtYXBT
aXplKTsKICAgICB9CisgICAgbV91cGxvYWRVcGRhdGVSZWN0ID0gSW50UmVjdChJbnRQb2ludCgw
LCAwKSwgYml0bWFwU2l6ZSk7CiAKICNpZiBQTEFURk9STShTS0lBKQogICAgIFNrQXV0b0xvY2tQ
aXhlbHMgbG9jaygqc2tpYUJpdG1hcCk7Ci0gICAgU2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmln
ID0gc2tpYUJpdG1hcC0+Y29uZmlnKCk7CiAgICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gc3Vw
cG9ydCBtb3JlIGltYWdlIGNvbmZpZ3VyYXRpb25zPwotICAgIGlmIChza2lhQ29uZmlnID09IFNr
Qml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykKLSAgICAgICAgcGl4ZWxzID0gc2tpYUJpdG1hcC0+
Z2V0UGl4ZWxzKCk7CisgICAgQVNTRVJUKHNraWFCaXRtYXAtPmNvbmZpZygpPT0gU2tCaXRtYXA6
OmtBUkdCXzg4ODhfQ29uZmlnKTsKKyAgICBza2lhQml0bWFwLT5jb3B5UGl4ZWxzVG8obV91cGxv
YWRQaXhlbERhdGEtPmRhdGEoKSwgbV91cGxvYWRQaXhlbERhdGEtPnNpemUoKSk7CiAjZWxpZiBQ
TEFURk9STShDRykKICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGdldCByaWQgb2YgdGhpcyB0ZW1w
b3JhcnkgY29weSB3aGVyZSBwb3NzaWJsZS4KICAgICBpbnQgdGVtcFJvd0J5dGVzID0gd2lkdGgg
KiA0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wVmVjdG9yOwotICAgIHRlbXBWZWN0b3IucmVz
aXplKGhlaWdodCAqIHRlbXBSb3dCeXRlcyk7CiAgICAgLy8gTm90ZSB3ZSBkbyBub3QgemVybyB0
aGlzIHZlY3RvciBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8KICAgICAvLyBjb21wbGV0ZWx5IG92ZXJ3
cml0ZSBpdHMgY29udGVudHMgd2l0aCB0aGUgaW1hZ2UgYmVsb3cuCiAgICAgLy8gVHJ5IHRvIHJl
dXNlIHRoZSBjb2xvciBzcGFjZSBmcm9tIHRoZSBpbWFnZSB0byBwcmVzZXJ2ZSBpdHMgY29sb3Jz
LgpAQCAtMTQzLDcgKzEzMSw3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250
ZW50c0lmRGlydHkoKQogICAgICAgICBjb2xvclNwYWNlID0gY29sb3JTcGFjZVJlbGVhc2VyLmdl
dCgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4g
dGVtcENvbnRleHQoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHRlbXBWZWN0b3IuZGF0
YSgpLAorICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IHRlbXBDb250ZXh0KEFkb3B0Q0YsIENH
Qml0bWFwQ29udGV4dENyZWF0ZShtX3VwbG9hZFBpeGVsRGF0YS0+ZGF0YSgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aWR0aCwgaGVpZ2h0LCA4LCB0ZW1wUm93Qnl0ZXMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9y
U3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBr
Q0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QpKTsKQEAgLTE1MSwxMyArMTM5LDkgQEAgdm9pZCBJbWFn
ZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAgICAgQ0dDb250ZXh0RHJh
d0ltYWdlKHRlbXBDb250ZXh0LmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICBDR1JlY3RN
YWtlKDAsIDAsIHN0YXRpY19jYXN0PENHRmxvYXQ+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8Q0dGbG9h
dD4oaGVpZ2h0KSksCiAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlKTsKLSAgICBw
aXhlbHMgPSB0ZW1wVmVjdG9yLmRhdGEoKTsKICNlbHNlCiAjZXJyb3IgIk5lZWQgdG8gaW1wbGVt
ZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKICNlbmRpZgotCi0gICAgaWYgKHBpeGVscykKLSAgICAg
ICAgdXBkYXRlVGV4dHVyZVJlY3QocGl4ZWxzLCBiaXRtYXBTaXplLCAgZGlydHlSZWN0KTsKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA4ZDAxZDliZDlhYTQ5ZTYxYzk2YTllY2Ni
NzY2ZGNiMTAxZTM2ZWUzLi42MWRjODQ3OWFmM2YwYzcwNGFjNTQ3NDgwODhiNWEzMTY5ZjYwNTRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzIzLDcgKzMyMyw2IEBAIHZvaWQgTGF5ZXJD
aHJvbWl1bTo6c2V0Qm91bmRzKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgYm9vbCBmaXJzdFJl
c2l6ZSA9ICFtX2JvdW5kcy53aWR0aCgpICYmICFtX2JvdW5kcy5oZWlnaHQoKSAmJiBzaXplLndp
ZHRoKCkgJiYgc2l6ZS5oZWlnaHQoKTsKIAogICAgIG1fYm91bmRzID0gc2l6ZTsKLSAgICBtX2Jh
Y2tpbmdTdG9yZVNpemUgPSBzaXplOwogCiAgICAgaWYgKGZpcnN0UmVzaXplKQogICAgICAgICBz
ZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCksIG1fYm91bmRz
LmhlaWdodCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggZmY5ZTVlNWQ4MzFjM2YxM2U5MzA3
NmU2YWZjNTU4ZjdjY2E5OGNkNy4uZDQ1N2FjNjliNWMzZTMxZjczN2FlMDJlYzNjZDhhOThlNTk1
MWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMjY1LDcgKzI2NSw2IEBAIHByaXZhdGU6CiAg
ICAgTGF5ZXJDaHJvbWl1bSogbV9zdXBlcmxheWVyOwogCiAgICAgLy8gTGF5ZXIgcHJvcGVydGll
cy4KLSAgICBJbnRTaXplIG1fYmFja2luZ1N0b3JlU2l6ZTsKICAgICBGbG9hdFBvaW50IG1fcG9z
aXRpb247CiAgICAgRmxvYXRQb2ludCBtX2FuY2hvclBvaW50OwogICAgIENvbG9yIG1fYmFja2dy
b3VuZENvbG9yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82866</attachid>
            <date>2011-02-17 15:04:26 -0800</date>
            <delta_ts>2011-02-17 15:12:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54315-20110217150425.patch</filename>
            <type>text/plain</type>
            <size>24100</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNzRhNzc0MTQ2NTMxNmMwYzAzMWYwMDQzM2IyNTg0NzUwZWMwYmQyLi5i
ZTAxOTE3ZmM3MDc1MzljY2NmYzA3NmI0YTc4ZWY3YzlmNWUzYmQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDMgQEAKKzIwMTEtMDItMTcgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Y2hyb21pdW1dIFVwZGF0ZSB0ZXh0dXJlIGZvciBDb250ZW50TGF5ZXJDaHJvbWl1bXMgaW4gZHJh
dygpIGNhbGwgaW5zdGVhZCBvZiB1cGRhdGVDb250ZW50cy4uKCkgY2FsbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQzMTUKKworICAgICAgICBUaGlz
IGRlZmVycyBhbGwgb3BlcmF0aW9ucyBvbiB0aGUgY29tcG9zaXRvcidzIEdMIGNvbnRleHQgdW50
aWwgdGhlCisgICAgICAgIGRyYXcoKSBjYWxsIHdoaWNoIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBt
b3ZpbmcgdGhlIGRyYXcoKSBvZmYtdGhyZWFkLgorICAgICAgICBBbHNvIGNsZWFucyB1cCB0aGUg
dXBkYXRlIGN5Y2xlIGEgYml0IC0gdGhlcmUgd2VyZSBzb21lIHVudXNlZCBsb2NhbAorICAgICAg
ICB2YXJpYWJsZXMgYW5kIHdoYXRub3QuCisKKyAgICAgICAgT25lIGNvbnNlcXVlbmNlIG9mIHRo
aXMgY2hhbmdlIGlzIHRoYXQgdGhlIHVwbG9hZCBidWZmZXIgaXMgcmV0YWluZWQKKyAgICAgICAg
YWNyb3NzIHVwZGF0ZXMgbm93IGluc3RlYWQgb2YgYWxsb2NhdGVkIGJ5IGVhY2ggcGFpbnQuICBU
aGlzIGlzCisgICAgICAgIG5lY2Vzc2FyeSBzbyB0aGF0IHRoZSBmdWxsIGxheWVyIGNvbnRlbnRz
IGNhbiBiZSB1cGxvYWRlZCBpZiB0aGUKKyAgICAgICAgdGV4dHVyZSBtYW5hZ2VyIGV2aWN0cyB0
aGUgbGF5ZXIncyBiYWNraW5nIHRleHR1cmUuICBUaGlzIGNvc3RzIG1vcmUKKyAgICAgICAgcGVy
c2lzdGVudCBtZW1vcnkgYnV0IGF2b2lkcyBsb3RzIG9mIGFsbG9jYXRvciBjaHVybiBvbiB1cGRh
dGVzLgorICAgICAgICBBbm90aGVyIG5vbm9idmlvdXMgZGV0YWlsIGlzIHRoYXQgSSBoYXZlIHRv
IHVwZGF0ZSB0aGUgdGV4dHVyZSBmb3IKKyAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW1zIGlu
IGJpbmRDb250ZW50c1RleHR1cmUoKSBiZWNhdXNlIG1hc2sgbGF5ZXJzCisgICAgICAgIG5ldmVy
IGRyYXcoKSwgdGhleSBhcmUgaW5zdGVhZCBib3VuZCB0byB0aGUgc2Vjb25kYXJ5IHRleHR1cmUg
dW5pdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpy
ZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXll
ckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudExheWVyQ2hyb21pdW06OnJlc2l6ZVVwbG9hZEJ1ZmZlckZvckltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2tCaXRtYXBDb25kaXRpb25hbEF1dG9Mb2NrZXJQaXhlbHM6OlNrQml0
bWFwQ29uZGl0aW9uYWxBdXRvTG9ja2VyUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlNrQml0
bWFwQ29uZGl0aW9uYWxBdXRvTG9ja2VyUGl4ZWxzOjp+U2tCaXRtYXBDb25kaXRpb25hbEF1dG9M
b2NrZXJQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6U2tCaXRtYXBDb25kaXRpb25hbEF1dG9M
b2NrZXJQaXhlbHM6OmxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVy
Q2hyb21pdW06OnVwZGF0ZVRleHR1cmVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJD
aHJvbWl1bTo6dW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRMYXllckNocm9taXVtOjpiaW5kQ29udGVudHNUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKwogMjAxMS0wMi0x
NiAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgUnlvc3VrZSBOaXdhLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4
IGEzOGY2YmQyMTI2OTBhMjhmOTgzOGRiODk2MzVhODQxNGNiNmQ3N2UuLjU3YmNjYmI1NGQzNTRi
NThiOWE1MzgwZTYzOTU4Y2JkYzJkMWM4MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTE1NCw5ICsxNTQsOSBAQCBib29sIENvbnRlbnRMYXllckNocm9taXVtOjpy
ZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkgY29uc3QKICAgICAvLyBvbmUgb2YgdGhlIGxheWVy
J3MgZGltZW5zaW9ucyBpcyBsYXJnZXIgdGhhbiAyMDAwIHBpeGVscyBvciB0aGUgc2l6ZSBvZgog
ICAgIC8vIHN1cmZhY2UgaXQncyByZW5kZXJpbmcgaW50by4gVGhpcyBpcyBhIHRlbXBvcmFyeSBt
ZWFzdXJlIHVudGlsIGxheWVyIHRpbGluZyBpcyBpbXBsZW1lbnRlZC4KICAgICBzdGF0aWMgY29u
c3QgaW50IG1heExheWVyU2l6ZSA9IDIwMDA7Ci0gICAgcmV0dXJuIChtX2JvdW5kcy53aWR0aCgp
ID4gbWF4KG1heExheWVyU2l6ZSwgbV90YXJnZXRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgp
LndpZHRoKCkpCi0gICAgICAgICAgICB8fCBtX2JvdW5kcy5oZWlnaHQoKSA+IG1heChtYXhMYXll
clNpemUsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKS5oZWlnaHQoKSkKLSAg
ICAgICAgICAgIHx8ICFsYXllclJlbmRlcmVyKCktPmNoZWNrVGV4dHVyZVNpemUobV9ib3VuZHMp
KTsKKyAgICByZXR1cm4gKGJvdW5kcygpLndpZHRoKCkgPiBtYXgobWF4TGF5ZXJTaXplLCBtX3Rh
cmdldFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCkud2lkdGgoKSkKKyAgICAgICAgICAgIHx8
IGJvdW5kcygpLmhlaWdodCgpID4gbWF4KG1heExheWVyU2l6ZSwgbV90YXJnZXRSZW5kZXJTdXJm
YWNlLT5jb250ZW50UmVjdCgpLmhlaWdodCgpKQorICAgICAgICAgICAgfHwgIWxheWVyUmVuZGVy
ZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShib3VuZHMoKSkpOwogfQogCiB2b2lkIENvbnRlbnRMYXll
ckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQpAQCAtMTY5LDEyICsxNjksOSBAQCB2
b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogCiAgICAg
QVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CiAKLSAgICB2b2lkKiBwaXhlbHMgPSAwOwogICAgIElu
dFJlY3QgZGlydHlSZWN0OwotICAgIEludFJlY3QgdXBkYXRlUmVjdDsKLSAgICBJbnRTaXplIHJl
cXVpcmVkVGV4dHVyZVNpemU7Ci0gICAgSW50U2l6ZSBiaXRtYXBTaXplOwotICAgIEludFJlY3Qg
Ym91bmRzUmVjdChJbnRQb2ludCgwLCAwKSwgbV9ib3VuZHMpOworICAgIEludFJlY3QgYm91bmRz
UmVjdChJbnRQb2ludCgwLCAwKSwgYm91bmRzKCkpOworICAgIEludFBvaW50IHBhaW50aW5nT2Zm
c2V0OwogCiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHRlc3Qgd2hlbiB0aWxlZCBsYXllcnMg
YXJlIGltcGxlbWVudGVkLgogICAgIGlmIChyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkpIHsK
QEAgLTE5MCw3ICsxODcsNyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250
ZW50c0lmRGlydHkoKQogICAgICAgICBjb25zdCBJbnRSZWN0IGNsaXBSZWN0ID0gbV90YXJnZXRS
ZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpOwogCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGxheWVyT3JpZ2luVHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgpOwotICAgICAgICBsYXll
ck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogbV9ib3VuZHMud2lkdGgoKSwgLTAu
NSAqIG1fYm91bmRzLmhlaWdodCgpLCAwKTsKKyAgICAgICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0u
dHJhbnNsYXRlM2QoLTAuNSAqIGJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBib3VuZHMoKS5oZWln
aHQoKSwgMCk7CiAKICAgICAgICAgLy8gRm9yIG5vdyB3ZSBhcHBseSB0aGUgbGFyZ2UgbGF5ZXIg
dHJlYXRtZW50IG9ubHkgZm9yIGxheWVycyB0aGF0IGFyZSBlaXRoZXIgdW50cmFuc2Zvcm1lZAog
ICAgICAgICAvLyBvciBhcmUgcHVyZWx5IHRyYW5zbGF0ZWQuIFRoZWlyIG1hdHJpeCBpcyBleHBl
Y3RlZCB0byBiZSBpbnZlcnRpYmxlLgpAQCAtMTk4LDcgKzE5NSw3IEBAIHZvaWQgQ29udGVudExh
eWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAKICAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggdGFyZ2V0VG9MYXllck1hdHJpeCA9IGxheWVyT3JpZ2luVHJhbnNmb3JtLmlu
dmVyc2UoKTsKICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMgPSB0YXJn
ZXRUb0xheWVyTWF0cml4Lm1hcFJlY3QoY2xpcFJlY3QpOwotICAgICAgICB2aXNpYmxlUmVjdElu
TGF5ZXJDb29yZHMuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgbV9ib3VuZHMud2lkdGgoKSwgbV9i
b3VuZHMuaGVpZ2h0KCkpKTsKKyAgICAgICAgdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzLmludGVy
c2VjdChJbnRSZWN0KDAsIDAsIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpKSk7
CiAKICAgICAgICAgLy8gRm9yIG5vcm1hbCBsYXllcnMsIHRoZSBjZW50ZXIgb2YgdGhlIHRleHR1
cmUgY29ycmVzcG9uZHMgd2l0aCB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4KICAgICAgICAgLy8g
SW4gbGFyZ2UgbGF5ZXJzIHRoZSBjZW50ZXIgb2YgdGhlIHRleHR1cmUgaXMgdGhlIGNlbnRlciBv
ZiB0aGUgdmlzaWJsZSByZWdpb24gc28gd2UgaGF2ZQpAQCAtMjEyLDkgKzIwOSwxMyBAQCB2b2lk
IENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gSWYgdGhlIHZpc2libGUgcG9ydGlv
biBvZiB0aGUgbGF5ZXIgaXMgZGlmZmVyZW50IGZyb20gdGhlIGxhc3QgdXBsb2FkLCBvciBpZiBv
dXIgYmFja2luZwotICAgICAgICAvLyB0ZXh0dXJlIGhhcyBiZWVuIGV2aWN0ZWQsIHRoZW4gdGhl
IHdob2xlIGxheWVyIGlzIGNvbnNpZGVyZWQgZGlydHkuCi0gICAgICAgIGlmICh2aXNpYmxlUmVj
dEluTGF5ZXJDb29yZHMgIT0gbV92aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMgfHwgIW1fY29udGVu
dHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChyZXF1aXJlZFRleHR1cmVT
aXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisgICAgICAgIC8vIElmIHdlIG5lZWQgdG8g
cmVzaXplIHRoZSB1cGxvYWQgYnVmZmVyIHdlIGhhdmUgdG8gcmVwYWludCBldmVyeXRoaW5nLgor
ICAgICAgICBpZiAobV91cGxvYWRCdWZmZXJTaXplICE9IHZpc2libGVSZWN0SW5MYXllckNvb3Jk
cy5zaXplKCkpIHsKKyAgICAgICAgICAgIHJlc2l6ZVVwbG9hZEJ1ZmZlcih2aXNpYmxlUmVjdElu
TGF5ZXJDb29yZHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fZGlydHlSZWN0ID0gYm91bmRzUmVj
dDsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiB0aGUgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBs
YXllciBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbGFzdCB1cGxvYWQuCisgICAgICAgIGlmICh2aXNp
YmxlUmVjdEluTGF5ZXJDb29yZHMgIT0gbV92aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMpCiAgICAg
ICAgICAgICBtX2RpcnR5UmVjdCA9IGJvdW5kc1JlY3Q7CiAgICAgICAgIG1fdmlzaWJsZVJlY3RJ
bkxheWVyQ29vcmRzID0gdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzOwogCkBAIC0yMjQsOTMgKzIy
NSwxMzAgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5
KCkKIAogICAgICAgICAvLyBXaGF0IHRoZSByZWN0YW5nbGVzIG1lYW46CiAgICAgICAgIC8vICAg
ZGlydHlSZWN0OiBUaGUgcmVnaW9uIG9mIHRoaXMgbGF5ZXIgdGhhdCB3aWxsIGJlIHVwZGF0ZWQu
Ci0gICAgICAgIC8vICAgdXBkYXRlUmVjdDogVGhlIHJlZ2lvbiBvZiB0aGUgbGF5ZXIncyB0ZXh0
dXJlIHRoYXQgd2lsbCBiZSB1cGxvYWRlZCBpbnRvLgotICAgICAgICAvLyAgIHJlcXVpcmVkVGV4
dHVyZVNpemU6IGlzIHRoZSByZXF1aXJlZCBzaXplIG9mIHRoaXMgbGF5ZXIncyB0ZXh0dXJlLgor
ICAgICAgICAvLyAgIG1fdXBsb2FkVXBkYXRlUmVjdDogVGhlIHJlZ2lvbiBvZiB0aGUgbGF5ZXIn
cyB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1cGxvYWRlZCBpbnRvLgogICAgICAgICBkaXJ0eVJlY3Qg
PSB2aXNpYmxlRGlydHlSZWN0SW5MYXllclNwYWNlOwotICAgICAgICB1cGRhdGVSZWN0ID0gZGly
dHlSZWN0OworICAgICAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgICAg
IEludFNpemUgdmlzaWJsZVJlY3RPZmZzZXRJbkxheWVyQ29vcmRzKHZpc2libGVSZWN0SW5MYXll
ckNvb3Jkcy54KCksIHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy55KCkpOwotICAgICAgICB1cGRh
dGVSZWN0Lm1vdmUoLXZpc2libGVSZWN0T2Zmc2V0SW5MYXllckNvb3Jkcyk7Ci0gICAgICAgIHJl
cXVpcmVkVGV4dHVyZVNpemUgPSB2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMuc2l6ZSgpOworICAg
ICAgICBwYWludGluZ09mZnNldCA9IEludFBvaW50KHZpc2libGVSZWN0T2Zmc2V0SW5MYXllckNv
b3Jkcyk7CisgICAgICAgIG1fdXBsb2FkVXBkYXRlUmVjdC5tb3ZlKC12aXNpYmxlUmVjdE9mZnNl
dEluTGF5ZXJDb29yZHMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRpcnR5UmVjdCA9IEludFJl
Y3QobV9kaXJ0eVJlY3QpOwotICAgICAgICByZXF1aXJlZFRleHR1cmVTaXplID0gbV9ib3VuZHM7
CiAgICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIHJlYWxsb2NhdGVkIHRoZW4g
d2UgbXVzdCByZWRyYXcgdGhlIGVudGlyZQogICAgICAgICAvLyBjb250ZW50cyBvZiB0aGUgbGF5
ZXIuCi0gICAgICAgIGlmICghbV9jb250ZW50c1RleHR1cmUgfHwgIW1fY29udGVudHNUZXh0dXJl
LT5pc1ZhbGlkKHJlcXVpcmVkVGV4dHVyZVNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkK
KyAgICAgICAgaWYgKG1fdXBsb2FkQnVmZmVyU2l6ZSAhPSBib3VuZHMoKSkgeworICAgICAgICAg
ICAgcmVzaXplVXBsb2FkQnVmZmVyKGJvdW5kcygpKTsKICAgICAgICAgICAgIGRpcnR5UmVjdCA9
IGJvdW5kc1JlY3Q7Ci0gICAgICAgIGVsc2UgeworICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgLy8gQ2xpcCB0aGUgZGlydHlSZWN0IHRvIHRoZSBzaXplIG9mIHRoZSBsYXllciB0byBhdm9p
ZCBkcmF3aW5nCiAgICAgICAgICAgICAvLyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGJhY2tp
bmcgdGV4dHVyZS4KICAgICAgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QoYm91bmRzUmVjdCk7
CiAgICAgICAgIH0KLSAgICAgICAgdXBkYXRlUmVjdCA9IGRpcnR5UmVjdDsKKyAgICAgICAgbV91
cGxvYWRVcGRhdGVSZWN0ID0gZGlydHlSZWN0OwogICAgIH0KIAogICAgIGlmIChkaXJ0eVJlY3Qu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICNpZiBQTEFURk9STShTS0lBKQotICAgIGNv
bnN0IFNrQml0bWFwKiBza2lhQml0bWFwID0gMDsKLSAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1D
YW52YXM+IGNhbnZhczsKICAgICBPd25QdHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gc2tpYUNvbnRl
eHQ7Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0OwogCi0gICAg
Y2FudmFzLnNldChuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoZGlydHlSZWN0LndpZHRoKCksIGRp
cnR5UmVjdC5oZWlnaHQoKSwgZmFsc2UpKTsKLSAgICBza2lhQ29udGV4dC5zZXQobmV3IFBsYXRm
b3JtQ29udGV4dFNraWEoY2FudmFzLmdldCgpKSk7CisgICAgc2tpYUNvbnRleHQuc2V0KG5ldyBQ
bGF0Zm9ybUNvbnRleHRTa2lhKG1fdXBsb2FkUGl4ZWxDYW52YXMuZ2V0KCkpKTsKIAogICAgIC8v
IFRoaXMgaXMgbmVlZGVkIHRvIGdldCB0ZXh0IHRvIHNob3cgdXAgY29ycmVjdGx5LgotICAgIC8v
IEZJWE1FOiBEb2VzIHRoaXMgdGFrZSB1cyBkb3duIGEgdmVyeSBzbG93IHRleHQgcmVuZGVyaW5n
IHBhdGg/CiAgICAgc2tpYUNvbnRleHQtPnNldERyYXdpbmdUb0ltYWdlQnVmZmVyKHRydWUpOwog
Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnNldChuZXcgR3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0
X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqPihza2lhQ29udGV4dC5nZXQoKSkpKTsKLQot
ICAgIC8vIEJyaW5nIHRoZSBjYW52YXMgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhl
IHBhaW50IHJlY3QuCi0gICAgY2FudmFzLT50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+
KC1kaXJ0eVJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueSgpKSk7
CisgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChyZWludGVycHJldF9jYXN0PFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4oc2tpYUNvbnRleHQuZ2V0KCkpKTsKIAotICAgIG1fb3du
ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpncmFwaGljc0NvbnRleHQsIGRpcnR5UmVj
dCk7Ci0gICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IGNhbnZhcy0+Z2V0RGV2aWNlKCktPmFj
Y2Vzc0JpdG1hcChmYWxzZSk7Ci0gICAgc2tpYUJpdG1hcCA9ICZiaXRtYXA7Ci0gICAgQVNTRVJU
KHNraWFCaXRtYXApOwotCi0gICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKCpza2lhQml0bWFwKTsK
LSAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBza2lhQml0bWFwLT5jb25maWcoKTsK
LSAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJh
dGlvbnM/Ci0gICAgaWYgKHNraWFDb25maWcgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmln
KSB7Ci0gICAgICAgIHBpeGVscyA9IHNraWFCaXRtYXAtPmdldFBpeGVscygpOwotICAgICAgICBi
aXRtYXBTaXplID0gSW50U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWln
aHQoKSk7Ci0gICAgfQogI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRl
bXBWZWN0b3I7Ci0gICAgaW50IHJvd0J5dGVzID0gNCAqIGRpcnR5UmVjdC53aWR0aCgpOwotICAg
IHRlbXBWZWN0b3IucmVzaXplKHJvd0J5dGVzICogZGlydHlSZWN0LmhlaWdodCgpKTsKLSAgICBt
ZW1zZXQodGVtcFZlY3Rvci5kYXRhKCksIDAsIHRlbXBWZWN0b3Iuc2l6ZSgpKTsKKyAgICAvLyBG
SVhNRTogRG8gd2UgbmVlZCB0byBjbGVhciB0aGUgZGlydHkgcmVjdGFuZ2xlIGluIHRoZSB1cGxv
YWQgYnVmZmVyPwogICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UoQWRv
cHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAgIFJldGFpblB0cjxDR0Nv
bnRleHRSZWY+IGNvbnRleHRDRyhBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGUodGVtcFZl
Y3Rvci5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eVJlY3Qud2lkdGgoKSwgZGlydHlSZWN0Lmhl
aWdodCgpLCA4LCByb3dCeXRlcywKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBtX3VwbG9hZEJ1ZmZl
clNpemUud2lkdGgoKSAqIDQ7CisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY29udGV4dENH
KEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZShtX3VwbG9hZFBpeGVsRGF0YS0+ZGF0YSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV91cGxvYWRCdWZmZXJTaXplLndpZHRoKCksIG1fdXBsb2FkQnVmZmVy
U2l6ZS5oZWlnaHQoKSwgOCwgcm93Qnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLmdldCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1h
cEJ5dGVPcmRlcjMySG9zdCkpOwotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0Q0cu
Z2V0KCksIDAsIGRpcnR5UmVjdC5oZWlnaHQoKSk7CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RN
KGNvbnRleHRDRy5nZXQoKSwgMCwgbV91cGxvYWRCdWZmZXJTaXplLmhlaWdodCgpKTsKICAgICBD
R0NvbnRleHRTY2FsZUNUTShjb250ZXh0Q0cuZ2V0KCksIDEsIC0xKTsKIAogICAgIEdyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dENHLmdldCgpKTsKKyNlbHNlCisjZXJyb3Ig
Ik5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKKyNlbmRpZgogCi0gICAgLy8g
VHJhbnNsYXRlIHRoZSBncmFwaGljcyBjb250ZXh0IGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVt
IG9mIHRoZSBkaXJ0eSByZWN0LgotICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLWRpcnR5
UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKKyAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOwor
ICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLXBhaW50aW5nT2Zmc2V0LngoKSwgLXBhaW50
aW5nT2Zmc2V0LnkoKSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyUmVjdChkaXJ0eVJlY3Qp
OworICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKGRpcnR5UmVjdCk7CiAKICAgICBtX293bmVyLT5w
YWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7Cisg
ICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKK30KIAotICAgIHBpeGVscyA9IHRlbXBWZWN0
b3IuZGF0YSgpOwotICAgIGJpdG1hcFNpemUgPSBkaXJ0eVJlY3Quc2l6ZSgpOwordm9pZCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6cmVzaXplVXBsb2FkQnVmZmVyRm9ySW1hZ2UoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IHNpemUud2lkdGgoKSAqIHNpemUu
aGVpZ2h0KCkgKiA0OworICAgIG1fdXBsb2FkUGl4ZWxEYXRhID0gbmV3IFZlY3Rvcjx1aW50OF90
PihidWZmZXJTaXplKTsKKyNpZiBQTEFURk9STShDRykKKyAgICBtZW1zZXQobV91cGxvYWRQaXhl
bERhdGEtPmRhdGEoKSwgMCwgYnVmZmVyU2l6ZSk7CisjZW5kaWYKKyAgICBtX3VwbG9hZEJ1ZmZl
clNpemUgPSBzaXplOworfQordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVzaXplVXBsb2Fk
QnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUpCit7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICBt
X3VwbG9hZFBpeGVsQ2FudmFzID0gbmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UpOworICAgIG1fdXBsb2FkQnVmZmVyU2l6ZSA9IHNpemU7
CiAjZWxzZQotI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCisg
ICAgcmVzaXplVXBsb2FkQnVmZmVyRm9ySW1hZ2Uoc2l6ZSk7CiAjZW5kaWYKLQotICAgIGlmIChw
aXhlbHMpCi0gICAgICAgIHVwZGF0ZVRleHR1cmVSZWN0KHBpeGVscywgcmVxdWlyZWRUZXh0dXJl
U2l6ZSwgdXBkYXRlUmVjdCk7CiB9CiAKLXZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0
ZVRleHR1cmVSZWN0KHZvaWQqIHBpeGVscywgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRUZXh0dXJl
U2l6ZSwgY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCkKKyNpZiBQTEFURk9STShTS0lBKQorY2xh
c3MgU2tCaXRtYXBDb25kaXRpb25hbEF1dG9Mb2NrZXJQaXhlbHMgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFNrQml0bWFwQ29uZGl0aW9uYWxBdXRvTG9ja2VyUGl4ZWxzKTsKK3B1YmxpYzoK
KyAgICBTa0JpdG1hcENvbmRpdGlvbmFsQXV0b0xvY2tlclBpeGVscygpCisgICAgICAgIDogbV9i
aXRtYXAoMCkKKyAgICB7CisgICAgfQorCisgICAgflNrQml0bWFwQ29uZGl0aW9uYWxBdXRvTG9j
a2VyUGl4ZWxzKCkKKyAgICB7CisgICAgICAgIGlmIChtX2JpdG1hcCkKKyAgICAgICAgICAgIG1f
Yml0bWFwLT51bmxvY2tQaXhlbHMoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvY2tQaXhlbHMoY29u
c3QgU2tCaXRtYXAqIGJpdG1hcCkKKyAgICB7CisgICAgICAgIGJpdG1hcC0+bG9ja1BpeGVscygp
OworICAgICAgICBtX2JpdG1hcCA9IGJpdG1hcDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29u
c3QgU2tCaXRtYXAqIG1fYml0bWFwOworfTsKKyNlbmRpZgorCit2b2lkIENvbnRlbnRMYXllckNo
cm9taXVtOjp1cGRhdGVUZXh0dXJlSWZOZWVkZWQoKQogeworICAgIHVpbnQ4X3QqIHBpeGVscyA9
IDA7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICBTa0JpdG1hcENvbmRpdGlvbmFsQXV0b0xvY2tl
clBpeGVscyBsb2NrZXI7CisjZW5kaWYKKyAgICBpZiAoIW1fdXBsb2FkVXBkYXRlUmVjdC5pc0Vt
cHR5KCkpIHsKKyNpZiBQTEFURk9STShTS0lBKQorICAgICAgICBpZiAobV91cGxvYWRQaXhlbENh
bnZhcykgeworICAgICAgICAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IG1fdXBsb2FkUGl4
ZWxDYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgICAgICAgICAg
bG9ja2VyLmxvY2tQaXhlbHMoJmJpdG1hcCk7CisgICAgICAgICAgICAvLyBGSVhNRTogZG8gd2Ug
bmVlZCB0byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJhdGlvbnM/CisgICAgICAgICAgICBp
ZiAoYml0bWFwLmNvbmZpZygpID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykKKyAgICAg
ICAgICAgICAgICBwaXhlbHMgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYml0bWFwLmdldFBpeGVs
cygpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmIChtX3VwbG9hZFBpeGVsRGF0YSkK
KyAgICAgICAgICAgIHBpeGVscyA9IG1fdXBsb2FkUGl4ZWxEYXRhLT5kYXRhKCk7CisgICAgfQor
CiAgICAgaWYgKCFwaXhlbHMpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzE4LDE1ICszNTYsNDEg
QEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZVJlY3Qodm9pZCogcGl4
ZWxzLCBjb25zdCBJbnRTaXplJiByZXF1aXIKICAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlKQog
ICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZSA9IExheWVyVGV4dHVyZTo6Y3JlYXRlKGNvbnRleHQs
IGxheWVyUmVuZGVyZXIoKS0+dGV4dHVyZU1hbmFnZXIoKSk7CiAKLSAgICBpZiAoIW1fY29udGVu
dHNUZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVkVGV4dHVyZVNpemUsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBKSkgeworICAgIC8vIElmIHdlIGhhdmUgdG8gYWxsb2NhdGUgYSBuZXcgdGV4dHVyZSB3
ZSBoYXZlIHRvIHVwbG9hZCB0aGUgZnVsbCBjb250ZW50cy4KKyAgICBpZiAoIW1fY29udGVudHNU
ZXh0dXJlLT5pc1ZhbGlkKG1fdXBsb2FkQnVmZmVyU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEpKQorICAgICAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDAp
LCBtX3VwbG9hZEJ1ZmZlclNpemUpOworCisgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZS0+cmVz
ZXJ2ZShtX3VwbG9hZEJ1ZmZlclNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkgewogICAg
ICAgICBtX3NraXBzRHJhdyA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBt
X2NvbnRlbnRzVGV4dHVyZS0+YmluZFRleHR1cmUoKTsKKyAgICBJbnRSZWN0IHNyY1JlY3QgPSBJ
bnRSZWN0KEludFBvaW50KDAsIDApLCBtX3VwbG9hZEJ1ZmZlclNpemUpOworICAgIGlmIChyZXF1
aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkpCisgICAgICAgIHNyY1JlY3QgPSBtX3Zpc2libGVSZWN0
SW5MYXllckNvb3JkczsKKworICAgIGNvbnN0IHNpemVfdCBkZXN0U3RyaWRlID0gbV91cGxvYWRV
cGRhdGVSZWN0LndpZHRoKCkgKiA0OworICAgIGNvbnN0IHNpemVfdCBzcmNTdHJpZGUgPSBzcmNS
ZWN0LndpZHRoKCkgKiA0OworCisgICAgdWludDhfdCogdXBsb2FkUGl4ZWxzID0gcGl4ZWxzICsg
c3JjU3RyaWRlICogbV91cGxvYWRVcGRhdGVSZWN0LngoKTsKKyAgICBWZWN0b3I8dWludDhfdD4g
dXBsb2FkQnVmZmVyOworICAgIGlmIChzcmNTdHJpZGUgIT0gZGVzdFN0cmlkZSkgeworICAgICAg
ICB1cGxvYWRCdWZmZXIucmVzaXplKG1fdXBsb2FkVXBkYXRlUmVjdC5oZWlnaHQoKSAqIGRlc3RT
dHJpZGUpOworICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX3VwbG9hZFVwZGF0ZVJl
Y3QuaGVpZ2h0KCk7ICsrcm93KSB7CisgICAgICAgICAgICBwdHJkaWZmX3Qgc3JjT2Zmc2V0ID0g
KG1fdXBsb2FkVXBkYXRlUmVjdC55KCkgKyByb3cpICogc3JjU3RyaWRlICsgbV91cGxvYWRVcGRh
dGVSZWN0LngoKSAqIDQ7CisgICAgICAgICAgICBwdHJkaWZmX3QgZGVzdE9mZnNldCA9IHJvdyAq
IGRlc3RTdHJpZGU7CisgICAgICAgICAgICBtZW1jcHkodXBsb2FkQnVmZmVyLmRhdGEoKSArIGRl
c3RPZmZzZXQsIHBpeGVscyArIHNyY09mZnNldCwgZGVzdFN0cmlkZSk7CisgICAgICAgIH0KKyAg
ICAgICAgdXBsb2FkUGl4ZWxzID0gdXBsb2FkQnVmZmVyLmRhdGEoKTsKKyAgICB9CiAKLSAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0Lndp
ZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgbV9jb250ZW50c1Rl
eHR1cmUtPmJpbmRUZXh0dXJlKCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFN1Yklt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV91cGxvYWRVcGRhdGVSZWN0LngoKSwgbV91cGxvYWRV
cGRhdGVSZWN0LnkoKSwgbV91cGxvYWRVcGRhdGVSZWN0LndpZHRoKCksIG1fdXBsb2FkVXBkYXRl
UmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkUGl4ZWxzKSk7
CiAKKyAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7CiAgICAgbV9kaXJ0eVJlY3Qu
c2V0U2l6ZShGbG9hdFNpemUoKSk7CiAgICAgLy8gTGFyZ2UgbGF5ZXJzIGFsd2F5cyBzdGF5IGRp
cnR5LCBiZWNhdXNlIHRoZXkgbmVlZCB0byB1cGRhdGUgd2hlbiB0aGUgY29udGVudCByZWN0IGNo
YW5nZXMuCiAgICAgbV9jb250ZW50c0RpcnR5ID0gcmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgp
OwpAQCAtMzM0LDYgKzM5OCw4IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRl
eHR1cmVSZWN0KHZvaWQqIHBpeGVscywgY29uc3QgSW50U2l6ZSYgcmVxdWlyCiAKIHZvaWQgQ29u
dGVudExheWVyQ2hyb21pdW06OmRyYXcoKQogeworICAgIHVwZGF0ZVRleHR1cmVJZk5lZWRlZCgp
OworCiAgICAgaWYgKG1fc2tpcHNEcmF3KQogICAgICAgICByZXR1cm47CiAKQEAgLTM1Nyw3ICs0
MjMsNyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3KCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdi0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwgc3YtPnNoYWRlckFscGhhTG9j
YXRpb24oKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0
LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBkcmF3VHJhbnNmb3JtKCksIG1fYm91bmRzLndpZHRoKCksIG1fYm91bmRzLmhlaWdo
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdUcmFuc2Zvcm0oKSwgYm91bmRzKCku
d2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZHJh
d09wYWNpdHkoKSwgc3YtPnNoYWRlck1hdHJpeExvY2F0aW9uKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3YtPnNoYWRlckFscGhhTG9jYXRpb24oKSk7CiAgICAgfQpAQCAtMzY2LDEzICs0
MzIsMTUgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhdygpCiAKIHZvaWQgQ29udGVu
dExheWVyQ2hyb21pdW06OnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpCiB7Ci0gICAgaWYgKG1f
Y29udGVudHNUZXh0dXJlKQorICAgIGlmICghbV9za2lwc0RyYXcgJiYgbV9jb250ZW50c1RleHR1
cmUpCiAgICAgICAgIG1fY29udGVudHNUZXh0dXJlLT51bnJlc2VydmUoKTsKIH0KIAogdm9pZCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6YmluZENvbnRlbnRzVGV4dHVyZSgpCiB7Ci0gICAgaWYgKG1f
Y29udGVudHNUZXh0dXJlKQorICAgIHVwZGF0ZVRleHR1cmVJZk5lZWRlZCgpOworCisgICAgaWYg
KCFtX3NraXBzRHJhdyAmJiBtX2NvbnRlbnRzVGV4dHVyZSkKICAgICAgICAgbV9jb250ZW50c1Rl
eHR1cmUtPmJpbmRUZXh0dXJlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
CmluZGV4IDMzNjM1MThkYTUzMWFjNjBkMzBkN2Y4MGU3ZjVjNzYwM2MzMmEzODAuLjIxZjQxZmY5
M2MyNTI3ZjM4ZDFjYzk5ZmE5OWIxZWI4MmMyZGRjNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uaApAQCAtODIsMTUgKzgyLDI4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBl
eHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
KTsKIAotICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRT
aXplJiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KTsKLQog
ICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CiAgICAgYm9vbCByZXF1aXJlc0Ns
aXBwZWRVcGRhdGVSZWN0KCkgY29uc3Q7CisgICAgdm9pZCByZXNpemVVcGxvYWRCdWZmZXIoY29u
c3QgSW50U2l6ZSYpOworICAgIHZvaWQgcmVzaXplVXBsb2FkQnVmZmVyRm9ySW1hZ2UoY29uc3Qg
SW50U2l6ZSYpOwogCiAgICAgT3duUHRyPExheWVyVGV4dHVyZT4gbV9jb250ZW50c1RleHR1cmU7
CiAgICAgYm9vbCBtX3NraXBzRHJhdzsKIAorICAgIC8vIFRoZSBzaXplIG9mIHRoZSB1cGxvYWQg
YnVmZmVyIChhbHNvIHRoZSBzaXplIG9mIG91ciBiYWNraW5nIHRleHR1cmUpLgorICAgIEludFNp
emUgbV91cGxvYWRCdWZmZXJTaXplOworICAgIC8vIFRoZSBwb3J0aW9uIG9mIHRoZSB1cGxvYWQg
YnVmZmVyIHRoYXQgaGFzIGEgcGVuZGluZyB1cGRhdGUsIGluIHRoZSBjb29yZGluYXRlcyBvZiB0
aGUgdGV4dHVyZS4KKyAgICBJbnRSZWN0IG1fdXBsb2FkVXBkYXRlUmVjdDsKKyAgICAvLyBPbiBw
bGF0Zm9ybXMgdXNpbmcgU2tpYSwgd2UgdXNlIHRoZSBza2lhOjpQbGF0Zm9ybUNhbnZhcyBmb3Ig
Y29udGVudCBsYXllcnMKKyAgICAvLyBhbmQgdGhlIG1fdXBsb2FkUGl4ZWxEYXRhIGJ1ZmZlciBm
b3IgaW1hZ2UgbGF5ZXJzLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgdXNpbmcgbWVtb3J5
IHdlIGNvbnRyb2wgZm9yIGFsbCB1cGxvYWRzLgorI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgT3du
UHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX3VwbG9hZFBpeGVsQ2FudmFzOworI2VuZGlmCisg
ICAgT3duUHRyPFZlY3Rvcjx1aW50OF90PiA+IG1fdXBsb2FkUGl4ZWxEYXRhOworCiBwcml2YXRl
OgorICAgIHZvaWQgdXBkYXRlVGV4dHVyZUlmTmVlZGVkKCk7CiAKICAgICBJbnRSZWN0IG1fdmlz
aWJsZVJlY3RJbkxheWVyQ29vcmRzOwogICAgIEZsb2F0UG9pbnQgbV9sYXllckNlbnRlckluU3Vy
ZmFjZUNvb3JkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IGNkMjk5YzFh
MGNlM2IzMGU5NWQ5MTRkZTA1MWI5NjMyMTk4NDljYWIuLmI1ZmE4ZWUwZmUwZDA1NzQzNzhiZGQ0
ZTVkY2UzODNlMDZjMDhkZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAt
ODQsNDYgKzg0LDM0IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lm
RGlydHkoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdm9pZCogcGl4ZWxzID0gMDsK
LSAgICBJbnRTaXplIGJpdG1hcFNpemU7Ci0KICAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFn
ZSA9IG1fY29udGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAKICNpZiBQTEFU
Rk9STShTS0lBKQogICAgIC8vIFRoZSBsYXllciBjb250YWlucyBhbiBJbWFnZS4KICAgICBOYXRp
dmVJbWFnZVNraWEqIHNraWFJbWFnZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU2tpYSo+KG5h
dGl2ZUltYWdlKTsKICAgICBjb25zdCBTa0JpdG1hcCogc2tpYUJpdG1hcCA9IHNraWFJbWFnZTsK
LSAgICBiaXRtYXBTaXplID0gSW50U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFw
LT5oZWlnaHQoKSk7CisgICAgSW50U2l6ZSBiaXRtYXBTaXplKHNraWFCaXRtYXAtPndpZHRoKCks
IHNraWFCaXRtYXAtPmhlaWdodCgpKTsKICAgICBBU1NFUlQoc2tpYUJpdG1hcCk7CiAjZWxpZiBQ
TEFURk9STShDRykKICAgICAvLyBOYXRpdmVJbWFnZVB0ciBpcyBhIENHSW1hZ2VSZWYgb24gTWFj
IE9TIFguCiAgICAgaW50IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKG5hdGl2ZUltYWdlKTsKICAg
ICBpbnQgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChuYXRpdmVJbWFnZSk7Ci0gICAgYml0bWFw
U2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgSW50U2l6ZSBiaXRtYXBTaXplKHdp
ZHRoLCBoZWlnaHQpOwogI2VuZGlmCiAKLSAgICAvLyBDbGlwIHRoZSBkaXJ0eSByZWN0IHRvIHRo
ZSBiaXRtYXAgZGltZW5zaW9ucy4KLSAgICBJbnRSZWN0IGRpcnR5UmVjdChtX2RpcnR5UmVjdCk7
Ci0gICAgZGlydHlSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KDAsIDApLCBiaXRtYXBT
aXplKSk7Ci0KLSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRzVGV4dHVy
ZS0+aXNWYWxpZChiaXRtYXBTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCi0gICAgICAg
IGRpcnR5UmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIGJpdG1hcFNpemUpOwotICAgIGVs
c2UgaWYgKCFtX2NvbnRlbnRzRGlydHkpIHsKLSAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPnJl
c2VydmUoYml0bWFwU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOwotICAgICAgICByZXR1
cm47CisgICAgaWYgKG1fdXBsb2FkQnVmZmVyU2l6ZSAhPSBiaXRtYXBTaXplKSB7CisgICAgICAg
IHJlc2l6ZVVwbG9hZEJ1ZmZlckZvckltYWdlKGJpdG1hcFNpemUpOwogICAgIH0KKyAgICBtX3Vw
bG9hZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBiaXRtYXBTaXplKTsKIAog
I2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKCpza2lhQml0bWFw
KTsKLSAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBza2lhQml0bWFwLT5jb25maWco
KTsKICAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmln
dXJhdGlvbnM/Ci0gICAgaWYgKHNraWFDb25maWcgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29u
ZmlnKQotICAgICAgICBwaXhlbHMgPSBza2lhQml0bWFwLT5nZXRQaXhlbHMoKTsKKyAgICBBU1NF
UlQoc2tpYUJpdG1hcC0+Y29uZmlnKCk9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOwor
ICAgIHNraWFCaXRtYXAtPmNvcHlQaXhlbHNUbyhtX3VwbG9hZFBpeGVsRGF0YS0+ZGF0YSgpLCBt
X3VwbG9hZFBpeGVsRGF0YS0+c2l6ZSgpKTsKICNlbGlmIFBMQVRGT1JNKENHKQogICAgIC8vIEZJ
WE1FOiB3ZSBzaG91bGQgZ2V0IHJpZCBvZiB0aGlzIHRlbXBvcmFyeSBjb3B5IHdoZXJlIHBvc3Np
YmxlLgogICAgIGludCB0ZW1wUm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IHRlbXBWZWN0b3I7Ci0gICAgdGVtcFZlY3Rvci5yZXNpemUoaGVpZ2h0ICogdGVtcFJvd0J5
dGVzKTsKICAgICAvLyBOb3RlIHdlIGRvIG5vdCB6ZXJvIHRoaXMgdmVjdG9yIHNpbmNlIHdlIGFy
ZSBnb2luZyB0bwogICAgIC8vIGNvbXBsZXRlbHkgb3ZlcndyaXRlIGl0cyBjb250ZW50cyB3aXRo
IHRoZSBpbWFnZSBiZWxvdy4KICAgICAvLyBUcnkgdG8gcmV1c2UgdGhlIGNvbG9yIHNwYWNlIGZy
b20gdGhlIGltYWdlIHRvIHByZXNlcnZlIGl0cyBjb2xvcnMuCkBAIC0xNDMsNyArMTMxLDcgQEAg
dm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAgICAgICAg
IGNvbG9yU3BhY2UgPSBjb2xvclNwYWNlUmVsZWFzZXIuZ2V0KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiB0ZW1wQ29udGV4dChBZG9wdENGLCBD
R0JpdG1hcENvbnRleHRDcmVhdGUodGVtcFZlY3Rvci5kYXRhKCksCisgICAgUmV0YWluUHRyPENH
Q29udGV4dFJlZj4gdGVtcENvbnRleHQoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1f
dXBsb2FkUGl4ZWxEYXRhLT5kYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIDgs
IHRlbXBSb3dCeXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9z
dCkpOwpAQCAtMTUxLDEzICsxMzksOSBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29udGVudHNJZkRpcnR5KCkKICAgICBDR0NvbnRleHREcmF3SW1hZ2UodGVtcENvbnRleHQuZ2V0
KCksCiAgICAgICAgICAgICAgICAgICAgICAgIENHUmVjdE1ha2UoMCwgMCwgc3RhdGljX2Nhc3Q8
Q0dGbG9hdD4od2lkdGgpLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihoZWlnaHQpKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2UpOwotICAgIHBpeGVscyA9IHRlbXBWZWN0b3IuZGF0
YSgpOwogI2Vsc2UKICNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0u
IgogI2VuZGlmCi0KLSAgICBpZiAocGl4ZWxzKQotICAgICAgICB1cGRhdGVUZXh0dXJlUmVjdChw
aXhlbHMsIGJpdG1hcFNpemUsICBkaXJ0eVJlY3QpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IDhkMDFkOWJkOWFhNDllNjFjOTZhOWVjY2I3NjZkY2IxMDFlMzZlZTMuLjYxZGM4
NDc5YWYzZjBjNzA0YWM1NDc0ODA4OGI1YTMxNjlmNjA1NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCkBAIC0zMjMsNyArMzIzLDYgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRCb3VuZHMoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKICAgICBib29sIGZpcnN0UmVzaXplID0gIW1fYm91bmRzLndpZHRo
KCkgJiYgIW1fYm91bmRzLmhlaWdodCgpICYmIHNpemUud2lkdGgoKSAmJiBzaXplLmhlaWdodCgp
OwogCiAgICAgbV9ib3VuZHMgPSBzaXplOwotICAgIG1fYmFja2luZ1N0b3JlU2l6ZSA9IHNpemU7
CiAKICAgICBpZiAoZmlyc3RSZXNpemUpCiAgICAgICAgIHNldE5lZWRzRGlzcGxheShGbG9hdFJl
Y3QoMCwgMCwgbV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaAppbmRleCBmZjllNWU1ZDgzMWMzZjEzZTkzMDc2ZTZhZmM1NThmN2NjYTk4Y2Q3Li5k
NDU3YWM2OWI1YzNlMzFmNzM3YWUwMmVjM2NkOGE5OGU1OTUxYTJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCkBAIC0yNjUsNyArMjY1LDYgQEAgcHJpdmF0ZToKICAgICBMYXllckNocm9taXVtKiBtX3N1
cGVybGF5ZXI7CiAKICAgICAvLyBMYXllciBwcm9wZXJ0aWVzLgotICAgIEludFNpemUgbV9iYWNr
aW5nU3RvcmVTaXplOwogICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKICAgICBGbG9hdFBvaW50
IG1fYW5jaG9yUG9pbnQ7CiAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82868</attachid>
            <date>2011-02-17 15:12:05 -0800</date>
            <delta_ts>2011-02-18 12:00:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54315-20110217151204.patch</filename>
            <type>text/plain</type>
            <size>24313</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNzRhNzc0MTQ2NTMxNmMwYzAzMWYwMDQzM2IyNTg0NzUwZWMwYmQyLi5i
ZTAxOTE3ZmM3MDc1MzljY2NmYzA3NmI0YTc4ZWY3YzlmNWUzYmQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDMgQEAKKzIwMTEtMDItMTcgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Y2hyb21pdW1dIFVwZGF0ZSB0ZXh0dXJlIGZvciBDb250ZW50TGF5ZXJDaHJvbWl1bXMgaW4gZHJh
dygpIGNhbGwgaW5zdGVhZCBvZiB1cGRhdGVDb250ZW50cy4uKCkgY2FsbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQzMTUKKworICAgICAgICBUaGlz
IGRlZmVycyBhbGwgb3BlcmF0aW9ucyBvbiB0aGUgY29tcG9zaXRvcidzIEdMIGNvbnRleHQgdW50
aWwgdGhlCisgICAgICAgIGRyYXcoKSBjYWxsIHdoaWNoIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBt
b3ZpbmcgdGhlIGRyYXcoKSBvZmYtdGhyZWFkLgorICAgICAgICBBbHNvIGNsZWFucyB1cCB0aGUg
dXBkYXRlIGN5Y2xlIGEgYml0IC0gdGhlcmUgd2VyZSBzb21lIHVudXNlZCBsb2NhbAorICAgICAg
ICB2YXJpYWJsZXMgYW5kIHdoYXRub3QuCisKKyAgICAgICAgT25lIGNvbnNlcXVlbmNlIG9mIHRo
aXMgY2hhbmdlIGlzIHRoYXQgdGhlIHVwbG9hZCBidWZmZXIgaXMgcmV0YWluZWQKKyAgICAgICAg
YWNyb3NzIHVwZGF0ZXMgbm93IGluc3RlYWQgb2YgYWxsb2NhdGVkIGJ5IGVhY2ggcGFpbnQuICBU
aGlzIGlzCisgICAgICAgIG5lY2Vzc2FyeSBzbyB0aGF0IHRoZSBmdWxsIGxheWVyIGNvbnRlbnRz
IGNhbiBiZSB1cGxvYWRlZCBpZiB0aGUKKyAgICAgICAgdGV4dHVyZSBtYW5hZ2VyIGV2aWN0cyB0
aGUgbGF5ZXIncyBiYWNraW5nIHRleHR1cmUuICBUaGlzIGNvc3RzIG1vcmUKKyAgICAgICAgcGVy
c2lzdGVudCBtZW1vcnkgYnV0IGF2b2lkcyBsb3RzIG9mIGFsbG9jYXRvciBjaHVybiBvbiB1cGRh
dGVzLgorICAgICAgICBBbm90aGVyIG5vbm9idmlvdXMgZGV0YWlsIGlzIHRoYXQgSSBoYXZlIHRv
IHVwZGF0ZSB0aGUgdGV4dHVyZSBmb3IKKyAgICAgICAgQ29udGVudExheWVyQ2hyb21pdW1zIGlu
IGJpbmRDb250ZW50c1RleHR1cmUoKSBiZWNhdXNlIG1hc2sgbGF5ZXJzCisgICAgICAgIG5ldmVy
IGRyYXcoKSwgdGhleSBhcmUgaW5zdGVhZCBib3VuZCB0byB0aGUgc2Vjb25kYXJ5IHRleHR1cmUg
dW5pdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpy
ZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXll
ckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudExheWVyQ2hyb21pdW06OnJlc2l6ZVVwbG9hZEJ1ZmZlckZvckltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2tCaXRtYXBDb25kaXRpb25hbEF1dG9Mb2NrZXJQaXhlbHM6OlNrQml0
bWFwQ29uZGl0aW9uYWxBdXRvTG9ja2VyUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlNrQml0
bWFwQ29uZGl0aW9uYWxBdXRvTG9ja2VyUGl4ZWxzOjp+U2tCaXRtYXBDb25kaXRpb25hbEF1dG9M
b2NrZXJQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6U2tCaXRtYXBDb25kaXRpb25hbEF1dG9M
b2NrZXJQaXhlbHM6OmxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVy
Q2hyb21pdW06OnVwZGF0ZVRleHR1cmVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJD
aHJvbWl1bTo6dW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRMYXllckNocm9taXVtOjpiaW5kQ29udGVudHNUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKwogMjAxMS0wMi0x
NiAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgUnlvc3VrZSBOaXdhLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4
IGEzOGY2YmQyMTI2OTBhMjhmOTgzOGRiODk2MzVhODQxNGNiNmQ3N2UuLjk0MjgzYTIxOWNlMDE5
NTI0MmM2OGFjY2U5YmZlMDZjY2JiY2NlMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTE1NCw5ICsxNTQsOSBAQCBib29sIENvbnRlbnRMYXllckNocm9taXVtOjpy
ZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkgY29uc3QKICAgICAvLyBvbmUgb2YgdGhlIGxheWVy
J3MgZGltZW5zaW9ucyBpcyBsYXJnZXIgdGhhbiAyMDAwIHBpeGVscyBvciB0aGUgc2l6ZSBvZgog
ICAgIC8vIHN1cmZhY2UgaXQncyByZW5kZXJpbmcgaW50by4gVGhpcyBpcyBhIHRlbXBvcmFyeSBt
ZWFzdXJlIHVudGlsIGxheWVyIHRpbGluZyBpcyBpbXBsZW1lbnRlZC4KICAgICBzdGF0aWMgY29u
c3QgaW50IG1heExheWVyU2l6ZSA9IDIwMDA7Ci0gICAgcmV0dXJuIChtX2JvdW5kcy53aWR0aCgp
ID4gbWF4KG1heExheWVyU2l6ZSwgbV90YXJnZXRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgp
LndpZHRoKCkpCi0gICAgICAgICAgICB8fCBtX2JvdW5kcy5oZWlnaHQoKSA+IG1heChtYXhMYXll
clNpemUsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKS5oZWlnaHQoKSkKLSAg
ICAgICAgICAgIHx8ICFsYXllclJlbmRlcmVyKCktPmNoZWNrVGV4dHVyZVNpemUobV9ib3VuZHMp
KTsKKyAgICByZXR1cm4gKGJvdW5kcygpLndpZHRoKCkgPiBtYXgobWF4TGF5ZXJTaXplLCBtX3Rh
cmdldFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCkud2lkdGgoKSkKKyAgICAgICAgICAgIHx8
IGJvdW5kcygpLmhlaWdodCgpID4gbWF4KG1heExheWVyU2l6ZSwgbV90YXJnZXRSZW5kZXJTdXJm
YWNlLT5jb250ZW50UmVjdCgpLmhlaWdodCgpKQorICAgICAgICAgICAgfHwgIWxheWVyUmVuZGVy
ZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShib3VuZHMoKSkpOwogfQogCiB2b2lkIENvbnRlbnRMYXll
ckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQpAQCAtMTY5LDEyICsxNjksOSBAQCB2
b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogCiAgICAg
QVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CiAKLSAgICB2b2lkKiBwaXhlbHMgPSAwOwogICAgIElu
dFJlY3QgZGlydHlSZWN0OwotICAgIEludFJlY3QgdXBkYXRlUmVjdDsKLSAgICBJbnRTaXplIHJl
cXVpcmVkVGV4dHVyZVNpemU7Ci0gICAgSW50U2l6ZSBiaXRtYXBTaXplOwotICAgIEludFJlY3Qg
Ym91bmRzUmVjdChJbnRQb2ludCgwLCAwKSwgbV9ib3VuZHMpOworICAgIEludFJlY3QgYm91bmRz
UmVjdChJbnRQb2ludCgwLCAwKSwgYm91bmRzKCkpOworICAgIEludFBvaW50IHBhaW50aW5nT2Zm
c2V0OwogCiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHRlc3Qgd2hlbiB0aWxlZCBsYXllcnMg
YXJlIGltcGxlbWVudGVkLgogICAgIGlmIChyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkpIHsK
QEAgLTE5MCw3ICsxODcsNyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250
ZW50c0lmRGlydHkoKQogICAgICAgICBjb25zdCBJbnRSZWN0IGNsaXBSZWN0ID0gbV90YXJnZXRS
ZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpOwogCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGxheWVyT3JpZ2luVHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgpOwotICAgICAgICBsYXll
ck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogbV9ib3VuZHMud2lkdGgoKSwgLTAu
NSAqIG1fYm91bmRzLmhlaWdodCgpLCAwKTsKKyAgICAgICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0u
dHJhbnNsYXRlM2QoLTAuNSAqIGJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBib3VuZHMoKS5oZWln
aHQoKSwgMCk7CiAKICAgICAgICAgLy8gRm9yIG5vdyB3ZSBhcHBseSB0aGUgbGFyZ2UgbGF5ZXIg
dHJlYXRtZW50IG9ubHkgZm9yIGxheWVycyB0aGF0IGFyZSBlaXRoZXIgdW50cmFuc2Zvcm1lZAog
ICAgICAgICAvLyBvciBhcmUgcHVyZWx5IHRyYW5zbGF0ZWQuIFRoZWlyIG1hdHJpeCBpcyBleHBl
Y3RlZCB0byBiZSBpbnZlcnRpYmxlLgpAQCAtMTk4LDcgKzE5NSw3IEBAIHZvaWQgQ29udGVudExh
eWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAKICAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggdGFyZ2V0VG9MYXllck1hdHJpeCA9IGxheWVyT3JpZ2luVHJhbnNmb3JtLmlu
dmVyc2UoKTsKICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMgPSB0YXJn
ZXRUb0xheWVyTWF0cml4Lm1hcFJlY3QoY2xpcFJlY3QpOwotICAgICAgICB2aXNpYmxlUmVjdElu
TGF5ZXJDb29yZHMuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgbV9ib3VuZHMud2lkdGgoKSwgbV9i
b3VuZHMuaGVpZ2h0KCkpKTsKKyAgICAgICAgdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzLmludGVy
c2VjdChJbnRSZWN0KDAsIDAsIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpKSk7
CiAKICAgICAgICAgLy8gRm9yIG5vcm1hbCBsYXllcnMsIHRoZSBjZW50ZXIgb2YgdGhlIHRleHR1
cmUgY29ycmVzcG9uZHMgd2l0aCB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4KICAgICAgICAgLy8g
SW4gbGFyZ2UgbGF5ZXJzIHRoZSBjZW50ZXIgb2YgdGhlIHRleHR1cmUgaXMgdGhlIGNlbnRlciBv
ZiB0aGUgdmlzaWJsZSByZWdpb24gc28gd2UgaGF2ZQpAQCAtMjEyLDkgKzIwOSwxMyBAQCB2b2lk
IENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gSWYgdGhlIHZpc2libGUgcG9ydGlv
biBvZiB0aGUgbGF5ZXIgaXMgZGlmZmVyZW50IGZyb20gdGhlIGxhc3QgdXBsb2FkLCBvciBpZiBv
dXIgYmFja2luZwotICAgICAgICAvLyB0ZXh0dXJlIGhhcyBiZWVuIGV2aWN0ZWQsIHRoZW4gdGhl
IHdob2xlIGxheWVyIGlzIGNvbnNpZGVyZWQgZGlydHkuCi0gICAgICAgIGlmICh2aXNpYmxlUmVj
dEluTGF5ZXJDb29yZHMgIT0gbV92aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMgfHwgIW1fY29udGVu
dHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChyZXF1aXJlZFRleHR1cmVT
aXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisgICAgICAgIC8vIElmIHdlIG5lZWQgdG8g
cmVzaXplIHRoZSB1cGxvYWQgYnVmZmVyIHdlIGhhdmUgdG8gcmVwYWludCBldmVyeXRoaW5nLgor
ICAgICAgICBpZiAobV91cGxvYWRCdWZmZXJTaXplICE9IHZpc2libGVSZWN0SW5MYXllckNvb3Jk
cy5zaXplKCkpIHsKKyAgICAgICAgICAgIHJlc2l6ZVVwbG9hZEJ1ZmZlcih2aXNpYmxlUmVjdElu
TGF5ZXJDb29yZHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fZGlydHlSZWN0ID0gYm91bmRzUmVj
dDsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiB0aGUgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBs
YXllciBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbGFzdCB1cGxvYWQuCisgICAgICAgIGlmICh2aXNp
YmxlUmVjdEluTGF5ZXJDb29yZHMgIT0gbV92aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMpCiAgICAg
ICAgICAgICBtX2RpcnR5UmVjdCA9IGJvdW5kc1JlY3Q7CiAgICAgICAgIG1fdmlzaWJsZVJlY3RJ
bkxheWVyQ29vcmRzID0gdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzOwogCkBAIC0yMjQsOTMgKzIy
NSwxMzAgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5
KCkKIAogICAgICAgICAvLyBXaGF0IHRoZSByZWN0YW5nbGVzIG1lYW46CiAgICAgICAgIC8vICAg
ZGlydHlSZWN0OiBUaGUgcmVnaW9uIG9mIHRoaXMgbGF5ZXIgdGhhdCB3aWxsIGJlIHVwZGF0ZWQu
Ci0gICAgICAgIC8vICAgdXBkYXRlUmVjdDogVGhlIHJlZ2lvbiBvZiB0aGUgbGF5ZXIncyB0ZXh0
dXJlIHRoYXQgd2lsbCBiZSB1cGxvYWRlZCBpbnRvLgotICAgICAgICAvLyAgIHJlcXVpcmVkVGV4
dHVyZVNpemU6IGlzIHRoZSByZXF1aXJlZCBzaXplIG9mIHRoaXMgbGF5ZXIncyB0ZXh0dXJlLgor
ICAgICAgICAvLyAgIG1fdXBsb2FkVXBkYXRlUmVjdDogVGhlIHJlZ2lvbiBvZiB0aGUgbGF5ZXIn
cyB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1cGxvYWRlZCBpbnRvLgogICAgICAgICBkaXJ0eVJlY3Qg
PSB2aXNpYmxlRGlydHlSZWN0SW5MYXllclNwYWNlOwotICAgICAgICB1cGRhdGVSZWN0ID0gZGly
dHlSZWN0OworICAgICAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgICAg
IEludFNpemUgdmlzaWJsZVJlY3RPZmZzZXRJbkxheWVyQ29vcmRzKHZpc2libGVSZWN0SW5MYXll
ckNvb3Jkcy54KCksIHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy55KCkpOwotICAgICAgICB1cGRh
dGVSZWN0Lm1vdmUoLXZpc2libGVSZWN0T2Zmc2V0SW5MYXllckNvb3Jkcyk7Ci0gICAgICAgIHJl
cXVpcmVkVGV4dHVyZVNpemUgPSB2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMuc2l6ZSgpOworICAg
ICAgICBwYWludGluZ09mZnNldCA9IEludFBvaW50KHZpc2libGVSZWN0T2Zmc2V0SW5MYXllckNv
b3Jkcyk7CisgICAgICAgIG1fdXBsb2FkVXBkYXRlUmVjdC5tb3ZlKC12aXNpYmxlUmVjdE9mZnNl
dEluTGF5ZXJDb29yZHMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRpcnR5UmVjdCA9IEludFJl
Y3QobV9kaXJ0eVJlY3QpOwotICAgICAgICByZXF1aXJlZFRleHR1cmVTaXplID0gbV9ib3VuZHM7
CiAgICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIHJlYWxsb2NhdGVkIHRoZW4g
d2UgbXVzdCByZWRyYXcgdGhlIGVudGlyZQogICAgICAgICAvLyBjb250ZW50cyBvZiB0aGUgbGF5
ZXIuCi0gICAgICAgIGlmICghbV9jb250ZW50c1RleHR1cmUgfHwgIW1fY29udGVudHNUZXh0dXJl
LT5pc1ZhbGlkKHJlcXVpcmVkVGV4dHVyZVNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkK
KyAgICAgICAgaWYgKG1fdXBsb2FkQnVmZmVyU2l6ZSAhPSBib3VuZHMoKSkgeworICAgICAgICAg
ICAgcmVzaXplVXBsb2FkQnVmZmVyKGJvdW5kcygpKTsKICAgICAgICAgICAgIGRpcnR5UmVjdCA9
IGJvdW5kc1JlY3Q7Ci0gICAgICAgIGVsc2UgeworICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgLy8gQ2xpcCB0aGUgZGlydHlSZWN0IHRvIHRoZSBzaXplIG9mIHRoZSBsYXllciB0byBhdm9p
ZCBkcmF3aW5nCiAgICAgICAgICAgICAvLyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGJhY2tp
bmcgdGV4dHVyZS4KICAgICAgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QoYm91bmRzUmVjdCk7
CiAgICAgICAgIH0KLSAgICAgICAgdXBkYXRlUmVjdCA9IGRpcnR5UmVjdDsKKyAgICAgICAgbV91
cGxvYWRVcGRhdGVSZWN0ID0gZGlydHlSZWN0OwogICAgIH0KIAogICAgIGlmIChkaXJ0eVJlY3Qu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICNpZiBQTEFURk9STShTS0lBKQotICAgIGNv
bnN0IFNrQml0bWFwKiBza2lhQml0bWFwID0gMDsKLSAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1D
YW52YXM+IGNhbnZhczsKICAgICBPd25QdHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gc2tpYUNvbnRl
eHQ7Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0OwogCi0gICAg
Y2FudmFzLnNldChuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoZGlydHlSZWN0LndpZHRoKCksIGRp
cnR5UmVjdC5oZWlnaHQoKSwgZmFsc2UpKTsKLSAgICBza2lhQ29udGV4dC5zZXQobmV3IFBsYXRm
b3JtQ29udGV4dFNraWEoY2FudmFzLmdldCgpKSk7CisgICAgc2tpYUNvbnRleHQuc2V0KG5ldyBQ
bGF0Zm9ybUNvbnRleHRTa2lhKG1fdXBsb2FkUGl4ZWxDYW52YXMuZ2V0KCkpKTsKIAogICAgIC8v
IFRoaXMgaXMgbmVlZGVkIHRvIGdldCB0ZXh0IHRvIHNob3cgdXAgY29ycmVjdGx5LgotICAgIC8v
IEZJWE1FOiBEb2VzIHRoaXMgdGFrZSB1cyBkb3duIGEgdmVyeSBzbG93IHRleHQgcmVuZGVyaW5n
IHBhdGg/CiAgICAgc2tpYUNvbnRleHQtPnNldERyYXdpbmdUb0ltYWdlQnVmZmVyKHRydWUpOwog
Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnNldChuZXcgR3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0
X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqPihza2lhQ29udGV4dC5nZXQoKSkpKTsKLQot
ICAgIC8vIEJyaW5nIHRoZSBjYW52YXMgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhl
IHBhaW50IHJlY3QuCi0gICAgY2FudmFzLT50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+
KC1kaXJ0eVJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueSgpKSk7
CisgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChyZWludGVycHJldF9jYXN0PFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4oc2tpYUNvbnRleHQuZ2V0KCkpKTsKIAotICAgIG1fb3du
ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpncmFwaGljc0NvbnRleHQsIGRpcnR5UmVj
dCk7Ci0gICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IGNhbnZhcy0+Z2V0RGV2aWNlKCktPmFj
Y2Vzc0JpdG1hcChmYWxzZSk7Ci0gICAgc2tpYUJpdG1hcCA9ICZiaXRtYXA7Ci0gICAgQVNTRVJU
KHNraWFCaXRtYXApOwotCi0gICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKCpza2lhQml0bWFwKTsK
LSAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBza2lhQml0bWFwLT5jb25maWcoKTsK
LSAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJh
dGlvbnM/Ci0gICAgaWYgKHNraWFDb25maWcgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmln
KSB7Ci0gICAgICAgIHBpeGVscyA9IHNraWFCaXRtYXAtPmdldFBpeGVscygpOwotICAgICAgICBi
aXRtYXBTaXplID0gSW50U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWln
aHQoKSk7Ci0gICAgfQogI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRl
bXBWZWN0b3I7Ci0gICAgaW50IHJvd0J5dGVzID0gNCAqIGRpcnR5UmVjdC53aWR0aCgpOwotICAg
IHRlbXBWZWN0b3IucmVzaXplKHJvd0J5dGVzICogZGlydHlSZWN0LmhlaWdodCgpKTsKLSAgICBt
ZW1zZXQodGVtcFZlY3Rvci5kYXRhKCksIDAsIHRlbXBWZWN0b3Iuc2l6ZSgpKTsKKyAgICAvLyBG
SVhNRTogRG8gd2UgbmVlZCB0byBjbGVhciB0aGUgZGlydHkgcmVjdGFuZ2xlIGluIHRoZSB1cGxv
YWQgYnVmZmVyPwogICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UoQWRv
cHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAgIFJldGFpblB0cjxDR0Nv
bnRleHRSZWY+IGNvbnRleHRDRyhBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGUodGVtcFZl
Y3Rvci5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eVJlY3Qud2lkdGgoKSwgZGlydHlSZWN0Lmhl
aWdodCgpLCA4LCByb3dCeXRlcywKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBtX3VwbG9hZEJ1ZmZl
clNpemUud2lkdGgoKSAqIDQ7CisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY29udGV4dENH
KEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZShtX3VwbG9hZFBpeGVsRGF0YS0+ZGF0YSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV91cGxvYWRCdWZmZXJTaXplLndpZHRoKCksIG1fdXBsb2FkQnVmZmVy
U2l6ZS5oZWlnaHQoKSwgOCwgcm93Qnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLmdldCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1h
cEJ5dGVPcmRlcjMySG9zdCkpOwotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0Q0cu
Z2V0KCksIDAsIGRpcnR5UmVjdC5oZWlnaHQoKSk7CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RN
KGNvbnRleHRDRy5nZXQoKSwgMCwgbV91cGxvYWRCdWZmZXJTaXplLmhlaWdodCgpKTsKICAgICBD
R0NvbnRleHRTY2FsZUNUTShjb250ZXh0Q0cuZ2V0KCksIDEsIC0xKTsKIAogICAgIEdyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dENHLmdldCgpKTsKKyNlbHNlCisjZXJyb3Ig
Ik5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKKyNlbmRpZgogCi0gICAgLy8g
VHJhbnNsYXRlIHRoZSBncmFwaGljcyBjb250ZXh0IGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVt
IG9mIHRoZSBkaXJ0eSByZWN0LgotICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLWRpcnR5
UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKKyAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOwor
ICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLXBhaW50aW5nT2Zmc2V0LngoKSwgLXBhaW50
aW5nT2Zmc2V0LnkoKSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyUmVjdChkaXJ0eVJlY3Qp
OworICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKGRpcnR5UmVjdCk7CiAKICAgICBtX293bmVyLT5w
YWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7Cisg
ICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKK30KIAotICAgIHBpeGVscyA9IHRlbXBWZWN0
b3IuZGF0YSgpOwotICAgIGJpdG1hcFNpemUgPSBkaXJ0eVJlY3Quc2l6ZSgpOwordm9pZCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6cmVzaXplVXBsb2FkQnVmZmVyRm9ySW1hZ2UoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IHNpemUud2lkdGgoKSAqIHNpemUu
aGVpZ2h0KCkgKiA0OworICAgIG1fdXBsb2FkUGl4ZWxEYXRhID0gbmV3IFZlY3Rvcjx1aW50OF90
PihidWZmZXJTaXplKTsKKyNpZiBQTEFURk9STShDRykKKyAgICBtZW1zZXQobV91cGxvYWRQaXhl
bERhdGEtPmRhdGEoKSwgMCwgYnVmZmVyU2l6ZSk7CisjZW5kaWYKKyAgICBtX3VwbG9hZEJ1ZmZl
clNpemUgPSBzaXplOworfQordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVzaXplVXBsb2Fk
QnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUpCit7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICBt
X3VwbG9hZFBpeGVsQ2FudmFzID0gbmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UpOworICAgIG1fdXBsb2FkQnVmZmVyU2l6ZSA9IHNpemU7
CiAjZWxzZQotI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCisg
ICAgcmVzaXplVXBsb2FkQnVmZmVyRm9ySW1hZ2Uoc2l6ZSk7CiAjZW5kaWYKLQotICAgIGlmIChw
aXhlbHMpCi0gICAgICAgIHVwZGF0ZVRleHR1cmVSZWN0KHBpeGVscywgcmVxdWlyZWRUZXh0dXJl
U2l6ZSwgdXBkYXRlUmVjdCk7CiB9CiAKLXZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0
ZVRleHR1cmVSZWN0KHZvaWQqIHBpeGVscywgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRUZXh0dXJl
U2l6ZSwgY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCkKKyNpZiBQTEFURk9STShTS0lBKQorY2xh
c3MgU2tCaXRtYXBDb25kaXRpb25hbEF1dG9Mb2NrZXJQaXhlbHMgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFNrQml0bWFwQ29uZGl0aW9uYWxBdXRvTG9ja2VyUGl4ZWxzKTsKK3B1YmxpYzoK
KyAgICBTa0JpdG1hcENvbmRpdGlvbmFsQXV0b0xvY2tlclBpeGVscygpCisgICAgICAgIDogbV9i
aXRtYXAoMCkKKyAgICB7CisgICAgfQorCisgICAgflNrQml0bWFwQ29uZGl0aW9uYWxBdXRvTG9j
a2VyUGl4ZWxzKCkKKyAgICB7CisgICAgICAgIGlmIChtX2JpdG1hcCkKKyAgICAgICAgICAgIG1f
Yml0bWFwLT51bmxvY2tQaXhlbHMoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvY2tQaXhlbHMoY29u
c3QgU2tCaXRtYXAqIGJpdG1hcCkKKyAgICB7CisgICAgICAgIGJpdG1hcC0+bG9ja1BpeGVscygp
OworICAgICAgICBtX2JpdG1hcCA9IGJpdG1hcDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29u
c3QgU2tCaXRtYXAqIG1fYml0bWFwOworfTsKKyNlbmRpZgorCit2b2lkIENvbnRlbnRMYXllckNo
cm9taXVtOjp1cGRhdGVUZXh0dXJlSWZOZWVkZWQoKQogeworICAgIHVpbnQ4X3QqIHBpeGVscyA9
IDA7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICBTa0JpdG1hcENvbmRpdGlvbmFsQXV0b0xvY2tl
clBpeGVscyBsb2NrZXI7CisjZW5kaWYKKyAgICBpZiAoIW1fdXBsb2FkVXBkYXRlUmVjdC5pc0Vt
cHR5KCkpIHsKKyNpZiBQTEFURk9STShTS0lBKQorICAgICAgICBpZiAobV91cGxvYWRQaXhlbENh
bnZhcykgeworICAgICAgICAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IG1fdXBsb2FkUGl4
ZWxDYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgICAgICAgICAg
bG9ja2VyLmxvY2tQaXhlbHMoJmJpdG1hcCk7CisgICAgICAgICAgICAvLyBGSVhNRTogZG8gd2Ug
bmVlZCB0byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJhdGlvbnM/CisgICAgICAgICAgICBp
ZiAoYml0bWFwLmNvbmZpZygpID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykKKyAgICAg
ICAgICAgICAgICBwaXhlbHMgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYml0bWFwLmdldFBpeGVs
cygpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmIChtX3VwbG9hZFBpeGVsRGF0YSkK
KyAgICAgICAgICAgIHBpeGVscyA9IG1fdXBsb2FkUGl4ZWxEYXRhLT5kYXRhKCk7CisgICAgfQor
CiAgICAgaWYgKCFwaXhlbHMpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzE4LDE1ICszNTYsNDMg
QEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZVJlY3Qodm9pZCogcGl4
ZWxzLCBjb25zdCBJbnRTaXplJiByZXF1aXIKICAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlKQog
ICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZSA9IExheWVyVGV4dHVyZTo6Y3JlYXRlKGNvbnRleHQs
IGxheWVyUmVuZGVyZXIoKS0+dGV4dHVyZU1hbmFnZXIoKSk7CiAKLSAgICBpZiAoIW1fY29udGVu
dHNUZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVkVGV4dHVyZVNpemUsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBKSkgeworICAgIC8vIElmIHdlIGhhdmUgdG8gYWxsb2NhdGUgYSBuZXcgdGV4dHVyZSB3
ZSBoYXZlIHRvIHVwbG9hZCB0aGUgZnVsbCBjb250ZW50cy4KKyAgICBpZiAoIW1fY29udGVudHNU
ZXh0dXJlLT5pc1ZhbGlkKG1fdXBsb2FkQnVmZmVyU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEpKQorICAgICAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDAp
LCBtX3VwbG9hZEJ1ZmZlclNpemUpOworCisgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZS0+cmVz
ZXJ2ZShtX3VwbG9hZEJ1ZmZlclNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkgewogICAg
ICAgICBtX3NraXBzRHJhdyA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBt
X2NvbnRlbnRzVGV4dHVyZS0+YmluZFRleHR1cmUoKTsKKyAgICBJbnRSZWN0IHNyY1JlY3QgPSBJ
bnRSZWN0KEludFBvaW50KDAsIDApLCBtX3VwbG9hZEJ1ZmZlclNpemUpOworICAgIGlmIChyZXF1
aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkpCisgICAgICAgIHNyY1JlY3QgPSBtX3Zpc2libGVSZWN0
SW5MYXllckNvb3JkczsKKworICAgIGNvbnN0IHNpemVfdCBkZXN0U3RyaWRlID0gbV91cGxvYWRV
cGRhdGVSZWN0LndpZHRoKCkgKiA0OworICAgIGNvbnN0IHNpemVfdCBzcmNTdHJpZGUgPSBzcmNS
ZWN0LndpZHRoKCkgKiA0OworCisgICAgdWludDhfdCogdXBsb2FkUGl4ZWxzID0gcGl4ZWxzICsg
c3JjU3RyaWRlICogbV91cGxvYWRVcGRhdGVSZWN0LngoKTsKKyAgICBWZWN0b3I8dWludDhfdD4g
dXBsb2FkQnVmZmVyOworICAgIGlmIChzcmNTdHJpZGUgIT0gZGVzdFN0cmlkZSkgeworICAgICAg
ICB1cGxvYWRCdWZmZXIucmVzaXplKG1fdXBsb2FkVXBkYXRlUmVjdC5oZWlnaHQoKSAqIGRlc3RT
dHJpZGUpOworICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX3VwbG9hZFVwZGF0ZVJl
Y3QuaGVpZ2h0KCk7ICsrcm93KSB7CisgICAgICAgICAgICBzaXplX3Qgc3JjT2Zmc2V0ID0gKG1f
dXBsb2FkVXBkYXRlUmVjdC55KCkgKyByb3cpICogc3JjU3RyaWRlICsgbV91cGxvYWRVcGRhdGVS
ZWN0LngoKSAqIDQ7CisgICAgICAgICAgICBBU1NFUlQoc3JjT2Zmc2V0ICsgZGVzdFN0cmlkZSA8
IHN0YXRpY19jYXN0PHNpemVfdD4obV91cGxvYWRCdWZmZXJTaXplLndpZHRoKCkgKiBtX3VwbG9h
ZEJ1ZmZlclNpemUuaGVpZ2h0KCkgKiA0KSk7CisgICAgICAgICAgICBzaXplX3QgZGVzdE9mZnNl
dCA9IHJvdyAqIGRlc3RTdHJpZGU7CisgICAgICAgICAgICBBU1NFUlQoZGVzdE9mZnNldCAgKyBk
ZXN0U3RyaWRlIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pih1cGxvYWRCdWZmZXIuc2l6ZSgpKSk7Cisg
ICAgICAgICAgICBtZW1jcHkodXBsb2FkQnVmZmVyLmRhdGEoKSArIGRlc3RPZmZzZXQsIHBpeGVs
cyArIHNyY09mZnNldCwgZGVzdFN0cmlkZSk7CisgICAgICAgIH0KKyAgICAgICAgdXBsb2FkUGl4
ZWxzID0gdXBsb2FkQnVmZmVyLmRhdGEoKTsKKyAgICB9CiAKLSAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdXBk
YXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJl
Y3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgbV9jb250ZW50c1RleHR1cmUtPmJpbmRUZXh0
dXJlKCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV91cGxvYWRVcGRhdGVSZWN0LngoKSwgbV91cGxvYWRVcGRhdGVSZWN0LnkoKSwg
bV91cGxvYWRVcGRhdGVSZWN0LndpZHRoKCksIG1fdXBsb2FkVXBkYXRlUmVjdC5oZWlnaHQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkUGl4ZWxzKSk7CiAKKyAgICBtX3VwbG9h
ZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7CiAgICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShGbG9hdFNp
emUoKSk7CiAgICAgLy8gTGFyZ2UgbGF5ZXJzIGFsd2F5cyBzdGF5IGRpcnR5LCBiZWNhdXNlIHRo
ZXkgbmVlZCB0byB1cGRhdGUgd2hlbiB0aGUgY29udGVudCByZWN0IGNoYW5nZXMuCiAgICAgbV9j
b250ZW50c0RpcnR5ID0gcmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpOwpAQCAtMzM0LDYgKzQw
MCw4IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVSZWN0KHZvaWQq
IHBpeGVscywgY29uc3QgSW50U2l6ZSYgcmVxdWlyCiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21p
dW06OmRyYXcoKQogeworICAgIHVwZGF0ZVRleHR1cmVJZk5lZWRlZCgpOworCiAgICAgaWYgKG1f
c2tpcHNEcmF3KQogICAgICAgICByZXR1cm47CiAKQEAgLTM1Nyw3ICs0MjUsNyBAQCB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjpkcmF3KCkKICAgICAgICAgICAgICAgICAgICAgICAgICBzdi0+
c2hhZGVyTWF0cml4TG9jYXRpb24oKSwgc3YtPnNoYWRlckFscGhhTG9jYXRpb24oKSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVy
KCktPnByb2plY3Rpb25NYXRyaXgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3VHJh
bnNmb3JtKCksIG1fYm91bmRzLndpZHRoKCksIG1fYm91bmRzLmhlaWdodCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGRyYXdUcmFuc2Zvcm0oKSwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRz
KCkuaGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd09wYWNpdHkoKSwgc3Yt
PnNoYWRlck1hdHJpeExvY2F0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3YtPnNo
YWRlckFscGhhTG9jYXRpb24oKSk7CiAgICAgfQpAQCAtMzY2LDEzICs0MzQsMTUgQEAgdm9pZCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhdygpCiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06
OnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpCiB7Ci0gICAgaWYgKG1fY29udGVudHNUZXh0dXJl
KQorICAgIGlmICghbV9za2lwc0RyYXcgJiYgbV9jb250ZW50c1RleHR1cmUpCiAgICAgICAgIG1f
Y29udGVudHNUZXh0dXJlLT51bnJlc2VydmUoKTsKIH0KIAogdm9pZCBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6YmluZENvbnRlbnRzVGV4dHVyZSgpCiB7Ci0gICAgaWYgKG1fY29udGVudHNUZXh0dXJl
KQorICAgIHVwZGF0ZVRleHR1cmVJZk5lZWRlZCgpOworCisgICAgaWYgKCFtX3NraXBzRHJhdyAm
JiBtX2NvbnRlbnRzVGV4dHVyZSkKICAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPmJpbmRUZXh0
dXJlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IDMzNjM1MThk
YTUzMWFjNjBkMzBkN2Y4MGU3ZjVjNzYwM2MzMmEzODAuLjIxZjQxZmY5M2MyNTI3ZjM4ZDFjYzk5
ZmE5OWIxZWI4MmMyZGRjNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApAQCAt
ODIsMTUgKzgyLDI4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb250ZW50
TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKIAotICAgIHZvaWQg
dXBkYXRlVGV4dHVyZVJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRTaXplJiByZXF1aXJlZFRl
eHR1cmVTaXplLCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KTsKLQogICAgIHZpcnR1YWwgdm9p
ZCBjbGVhbnVwUmVzb3VyY2VzKCk7CiAgICAgYm9vbCByZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0
KCkgY29uc3Q7CisgICAgdm9pZCByZXNpemVVcGxvYWRCdWZmZXIoY29uc3QgSW50U2l6ZSYpOwor
ICAgIHZvaWQgcmVzaXplVXBsb2FkQnVmZmVyRm9ySW1hZ2UoY29uc3QgSW50U2l6ZSYpOwogCiAg
ICAgT3duUHRyPExheWVyVGV4dHVyZT4gbV9jb250ZW50c1RleHR1cmU7CiAgICAgYm9vbCBtX3Nr
aXBzRHJhdzsKIAorICAgIC8vIFRoZSBzaXplIG9mIHRoZSB1cGxvYWQgYnVmZmVyIChhbHNvIHRo
ZSBzaXplIG9mIG91ciBiYWNraW5nIHRleHR1cmUpLgorICAgIEludFNpemUgbV91cGxvYWRCdWZm
ZXJTaXplOworICAgIC8vIFRoZSBwb3J0aW9uIG9mIHRoZSB1cGxvYWQgYnVmZmVyIHRoYXQgaGFz
IGEgcGVuZGluZyB1cGRhdGUsIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdGV4dHVyZS4KKyAg
ICBJbnRSZWN0IG1fdXBsb2FkVXBkYXRlUmVjdDsKKyAgICAvLyBPbiBwbGF0Zm9ybXMgdXNpbmcg
U2tpYSwgd2UgdXNlIHRoZSBza2lhOjpQbGF0Zm9ybUNhbnZhcyBmb3IgY29udGVudCBsYXllcnMK
KyAgICAvLyBhbmQgdGhlIG1fdXBsb2FkUGl4ZWxEYXRhIGJ1ZmZlciBmb3IgaW1hZ2UgbGF5ZXJz
LgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgdXNpbmcgbWVtb3J5IHdlIGNvbnRyb2wgZm9y
IGFsbCB1cGxvYWRzLgorI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgT3duUHRyPHNraWE6OlBsYXRm
b3JtQ2FudmFzPiBtX3VwbG9hZFBpeGVsQ2FudmFzOworI2VuZGlmCisgICAgT3duUHRyPFZlY3Rv
cjx1aW50OF90PiA+IG1fdXBsb2FkUGl4ZWxEYXRhOworCiBwcml2YXRlOgorICAgIHZvaWQgdXBk
YXRlVGV4dHVyZUlmTmVlZGVkKCk7CiAKICAgICBJbnRSZWN0IG1fdmlzaWJsZVJlY3RJbkxheWVy
Q29vcmRzOwogICAgIEZsb2F0UG9pbnQgbV9sYXllckNlbnRlckluU3VyZmFjZUNvb3JkczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IGNkMjk5YzFhMGNlM2IzMGU5NWQ5MTRk
ZTA1MWI5NjMyMTk4NDljYWIuLmI1ZmE4ZWUwZmUwZDA1NzQzNzhiZGQ0ZTVkY2UzODNlMDZjMDhk
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtODQsNDYgKzg0LDM0IEBA
IHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgdm9pZCogcGl4ZWxzID0gMDsKLSAgICBJbnRTaXplIGJp
dG1hcFNpemU7Ci0KICAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSA9IG1fY29udGVudHMt
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAKICNpZiBQTEFURk9STShTS0lBKQogICAg
IC8vIFRoZSBsYXllciBjb250YWlucyBhbiBJbWFnZS4KICAgICBOYXRpdmVJbWFnZVNraWEqIHNr
aWFJbWFnZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU2tpYSo+KG5hdGl2ZUltYWdlKTsKICAg
ICBjb25zdCBTa0JpdG1hcCogc2tpYUJpdG1hcCA9IHNraWFJbWFnZTsKLSAgICBiaXRtYXBTaXpl
ID0gSW50U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7Cisg
ICAgSW50U2l6ZSBiaXRtYXBTaXplKHNraWFCaXRtYXAtPndpZHRoKCksIHNraWFCaXRtYXAtPmhl
aWdodCgpKTsKICAgICBBU1NFUlQoc2tpYUJpdG1hcCk7CiAjZWxpZiBQTEFURk9STShDRykKICAg
ICAvLyBOYXRpdmVJbWFnZVB0ciBpcyBhIENHSW1hZ2VSZWYgb24gTWFjIE9TIFguCiAgICAgaW50
IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKG5hdGl2ZUltYWdlKTsKICAgICBpbnQgaGVpZ2h0ID0g
Q0dJbWFnZUdldEhlaWdodChuYXRpdmVJbWFnZSk7Ci0gICAgYml0bWFwU2l6ZSA9IEludFNpemUo
d2lkdGgsIGhlaWdodCk7CisgICAgSW50U2l6ZSBiaXRtYXBTaXplKHdpZHRoLCBoZWlnaHQpOwog
I2VuZGlmCiAKLSAgICAvLyBDbGlwIHRoZSBkaXJ0eSByZWN0IHRvIHRoZSBiaXRtYXAgZGltZW5z
aW9ucy4KLSAgICBJbnRSZWN0IGRpcnR5UmVjdChtX2RpcnR5UmVjdCk7Ci0gICAgZGlydHlSZWN0
LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KDAsIDApLCBiaXRtYXBTaXplKSk7Ci0KLSAgICBp
ZiAoIW1fY29udGVudHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChiaXRt
YXBTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCi0gICAgICAgIGRpcnR5UmVjdCA9IElu
dFJlY3QoSW50UG9pbnQoMCwgMCksIGJpdG1hcFNpemUpOwotICAgIGVsc2UgaWYgKCFtX2NvbnRl
bnRzRGlydHkpIHsKLSAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUoYml0bWFwU2l6
ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKG1f
dXBsb2FkQnVmZmVyU2l6ZSAhPSBiaXRtYXBTaXplKSB7CisgICAgICAgIHJlc2l6ZVVwbG9hZEJ1
ZmZlckZvckltYWdlKGJpdG1hcFNpemUpOwogICAgIH0KKyAgICBtX3VwbG9hZFVwZGF0ZVJlY3Qg
PSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBiaXRtYXBTaXplKTsKIAogI2lmIFBMQVRGT1JNKFNL
SUEpCiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKCpza2lhQml0bWFwKTsKLSAgICBTa0JpdG1h
cDo6Q29uZmlnIHNraWFDb25maWcgPSBza2lhQml0bWFwLT5jb25maWcoKTsKICAgICAvLyBGSVhN
RTogZG8gd2UgbmVlZCB0byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJhdGlvbnM/Ci0gICAg
aWYgKHNraWFDb25maWcgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKQotICAgICAgICBw
aXhlbHMgPSBza2lhQml0bWFwLT5nZXRQaXhlbHMoKTsKKyAgICBBU1NFUlQoc2tpYUJpdG1hcC0+
Y29uZmlnKCk9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOworICAgIHNraWFCaXRtYXAt
PmNvcHlQaXhlbHNUbyhtX3VwbG9hZFBpeGVsRGF0YS0+ZGF0YSgpLCBtX3VwbG9hZFBpeGVsRGF0
YS0+c2l6ZSgpKTsKICNlbGlmIFBMQVRGT1JNKENHKQogICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQg
Z2V0IHJpZCBvZiB0aGlzIHRlbXBvcmFyeSBjb3B5IHdoZXJlIHBvc3NpYmxlLgogICAgIGludCB0
ZW1wUm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBWZWN0b3I7
Ci0gICAgdGVtcFZlY3Rvci5yZXNpemUoaGVpZ2h0ICogdGVtcFJvd0J5dGVzKTsKICAgICAvLyBO
b3RlIHdlIGRvIG5vdCB6ZXJvIHRoaXMgdmVjdG9yIHNpbmNlIHdlIGFyZSBnb2luZyB0bwogICAg
IC8vIGNvbXBsZXRlbHkgb3ZlcndyaXRlIGl0cyBjb250ZW50cyB3aXRoIHRoZSBpbWFnZSBiZWxv
dy4KICAgICAvLyBUcnkgdG8gcmV1c2UgdGhlIGNvbG9yIHNwYWNlIGZyb20gdGhlIGltYWdlIHRv
IHByZXNlcnZlIGl0cyBjb2xvcnMuCkBAIC0xNDMsNyArMTMxLDcgQEAgdm9pZCBJbWFnZUxheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpCiAgICAgICAgIGNvbG9yU3BhY2UgPSBj
b2xvclNwYWNlUmVsZWFzZXIuZ2V0KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBSZXRh
aW5QdHI8Q0dDb250ZXh0UmVmPiB0ZW1wQ29udGV4dChBZG9wdENGLCBDR0JpdG1hcENvbnRleHRD
cmVhdGUodGVtcFZlY3Rvci5kYXRhKCksCisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gdGVt
cENvbnRleHQoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fdXBsb2FkUGl4ZWxEYXRh
LT5kYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIDgsIHRlbXBSb3dCeXRlcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29sb3JTcGFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCkpOwpAQCAtMTUxLDEz
ICsxMzksOSBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5
KCkKICAgICBDR0NvbnRleHREcmF3SW1hZ2UodGVtcENvbnRleHQuZ2V0KCksCiAgICAgICAgICAg
ICAgICAgICAgICAgIENHUmVjdE1ha2UoMCwgMCwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4od2lkdGgp
LCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihoZWlnaHQpKSwKICAgICAgICAgICAgICAgICAgICAgICAg
bmF0aXZlSW1hZ2UpOwotICAgIHBpeGVscyA9IHRlbXBWZWN0b3IuZGF0YSgpOwogI2Vsc2UKICNl
cnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgogI2VuZGlmCi0KLSAg
ICBpZiAocGl4ZWxzKQotICAgICAgICB1cGRhdGVUZXh0dXJlUmVjdChwaXhlbHMsIGJpdG1hcFNp
emUsICBkaXJ0eVJlY3QpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDhkMDFk
OWJkOWFhNDllNjFjOTZhOWVjY2I3NjZkY2IxMDFlMzZlZTMuLjYxZGM4NDc5YWYzZjBjNzA0YWM1
NDc0ODA4OGI1YTMxNjlmNjA1NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0zMjMsNyAr
MzIzLDYgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKICAgICBib29sIGZpcnN0UmVzaXplID0gIW1fYm91bmRzLndpZHRoKCkgJiYgIW1fYm91bmRz
LmhlaWdodCgpICYmIHNpemUud2lkdGgoKSAmJiBzaXplLmhlaWdodCgpOwogCiAgICAgbV9ib3Vu
ZHMgPSBzaXplOwotICAgIG1fYmFja2luZ1N0b3JlU2l6ZSA9IHNpemU7CiAKICAgICBpZiAoZmly
c3RSZXNpemUpCiAgICAgICAgIHNldE5lZWRzRGlzcGxheShGbG9hdFJlY3QoMCwgMCwgbV9ib3Vu
ZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBm
ZjllNWU1ZDgzMWMzZjEzZTkzMDc2ZTZhZmM1NThmN2NjYTk4Y2Q3Li5kNDU3YWM2OWI1YzNlMzFm
NzM3YWUwMmVjM2NkOGE5OGU1OTUxYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0yNjUsNyAr
MjY1LDYgQEAgcHJpdmF0ZToKICAgICBMYXllckNocm9taXVtKiBtX3N1cGVybGF5ZXI7CiAKICAg
ICAvLyBMYXllciBwcm9wZXJ0aWVzLgotICAgIEludFNpemUgbV9iYWNraW5nU3RvcmVTaXplOwog
ICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKICAgICBGbG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7
CiAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Cg==
</data>
<flag name="review"
          id="74579"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>