<?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>66488</bug_id>
          
          <creation_ts>2011-08-18 11:16:45 -0700</creation_ts>
          <short_desc>[chromium] Leaking SkBitmaps for background images</short_desc>
          <delta_ts>2011-08-26 05:43:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tony Gentilcore">tonyg</reporter>
          <assigned_to name="John Bates">jbates</assigned_to>
          <cc>brettw</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>hans</cc>
    
    <cc>jamesr</cc>
    
    <cc>jbates</cc>
    
    <cc>mnaganov</cc>
    
    <cc>reed</cc>
    
    <cc>satish</cc>
    
    <cc>senorblanco</cc>
    
    <cc>tomhudson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>453164</commentid>
    <comment_count>0</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-08-18 11:16:45 -0700</bug_when>
    <thetext>It appears that images used as background images will never be collected for the lifetime of a renderer.

One problem is that NativeImageSkia is a SkBitmap, but SkBitmap&apos;s dtor isn&apos;t virtual. So we leak fields like the m_resizedImage SkBitmap.

However, just making SkBitmaps dtor virtual doesn&apos;t seem to fix the problem. There is something else going on w/ the assignment operator or copy constructors that I am still trying to figure out. Any other set of eyes on this would be appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453183</commentid>
    <comment_count>1</comment_count>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-18 11:30:28 -0700</bug_when>
    <thetext>Hey Tony,

Just FYI, I have a CL in flight that touches this code.
https://bugs.webkit.org/show_bug.cgi?id=65587

From what I know about Skia&apos;s object model, deriving from their classes is going to be problematic in many ways. Ie: memset(this, 0, sizeof(*this)) and assignment is memcpy(... sizeof(*this)). Since sizeof(*this) can include bits of the derived members, it&apos;s failtastic.

I think we need to find out who creates and destroys the NativeImageSkia objects and refactor that code so that NativeImageSkia has a SkBitmap member instead of deriving from it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453224</commentid>
    <comment_count>2</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-08-18 12:03:34 -0700</bug_when>
    <thetext>
&gt; I think we need to find out who creates and destroys the NativeImageSkia objects and refactor that code so that NativeImageSkia has a SkBitmap member instead of deriving from it.

Hi John,

Yeah, that seems like the right approach. Since this ends up being a pretty noticeable leak, I was hoping there would be an easier way to patch this, but it looks like an involved refactor instead.

Since you are pretty familiar with this area, do you want to pick this up?

-Tony</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454095</commentid>
    <comment_count>3</comment_count>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-19 14:35:10 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; I think we need to find out who creates and destroys the NativeImageSkia objects and refactor that code so that NativeImageSkia has a SkBitmap member instead of deriving from it.
&gt; 
&gt; Hi John,
&gt; 
&gt; Yeah, that seems like the right approach. Since this ends up being a pretty noticeable leak, I was hoping there would be an easier way to patch this, but it looks like an involved refactor instead.
&gt; 
&gt; Since you are pretty familiar with this area, do you want to pick this up?

No problem, I&apos;ll look into it once I get my other patch landed. Did you gather any more clues about where the leak was occurring?

&gt; 
&gt; -Tony</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456456</commentid>
    <comment_count>4</comment_count>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-24 15:13:39 -0700</bug_when>
    <thetext>SkBitmap can&apos;t have virtuals unless it&apos;s refactored to not do the memcpy(sizeof) tricks, since that clobbers the vtable. The symptoms I saw were things like crashes in the NativeImageSkia destructor (because it probably was a copy, and should have been a plain SkBitmap vtable).

Patch coming shortly to make SkBitmap a member...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456462</commentid>
    <comment_count>5</comment_count>
      <attachid>105081</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-24 15:22:31 -0700</bug_when>
    <thetext>Created attachment 105081
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456508</commentid>
    <comment_count>6</comment_count>
      <attachid>105081</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-24 16:03:27 -0700</bug_when>
    <thetext>Comment on attachment 105081
Patch

Attachment 105081 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9509030</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456543</commentid>
    <comment_count>7</comment_count>
      <attachid>105099</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-24 17:10:31 -0700</bug_when>
    <thetext>Created attachment 105099
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456588</commentid>
    <comment_count>8</comment_count>
      <attachid>105099</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-24 18:16:06 -0700</bug_when>
    <thetext>Comment on attachment 105099
Patch

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

Looks good.  r=me

&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.h:67
&gt; +    SkBitmap&amp; bitmap() { return m_image; }

I&apos;m not a fan of returning a non-const reference (although that&apos;s not webkit coding style or anything, just personal preference).  Out of curiosity, how many call sites break with only the const ref variant available?

&gt; Source/WebCore/platform/graphics/skia/PatternSkia.cpp:62
&gt; +    const NativeImageSkia* bm = m_tileImage-&gt;nativeImageForCurrentFrame();

Nit:  Might make sense to rename &quot;bm&quot; to &quot;image&quot; now that it&apos;s a NativeImageSkia and not a bitmap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456597</commentid>
    <comment_count>9</comment_count>
      <attachid>105099</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-24 18:45:03 -0700</bug_when>
    <thetext>Comment on attachment 105099
Patch

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

New patch next...

&gt;&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.h:67
&gt;&gt; +    SkBitmap&amp; bitmap() { return m_image; }
&gt; 
&gt; I&apos;m not a fan of returning a non-const reference (although that&apos;s not webkit coding style or anything, just personal preference).  Out of curiosity, how many call sites break with only the const ref variant available?

There are a few calls in ImageDecoderSkia.cpp (reset, copyTo, setConfig, allocPixels, setIsOpaque). The non-const ref is just trying to mimic the original is-a behavior. I can&apos;t say I&apos;m a fan either. It&apos;s just that the alternative of wrapping all the used SkBitmap methods seems too difficult to maintain.

&gt;&gt; Source/WebCore/platform/graphics/skia/PatternSkia.cpp:62
&gt;&gt; +    const NativeImageSkia* bm = m_tileImage-&gt;nativeImageForCurrentFrame();
&gt; 
&gt; Nit:  Might make sense to rename &quot;bm&quot; to &quot;image&quot; now that it&apos;s a NativeImageSkia and not a bitmap.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456598</commentid>
    <comment_count>10</comment_count>
      <attachid>105116</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-24 18:46:41 -0700</bug_when>
    <thetext>Created attachment 105116
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456809</commentid>
    <comment_count>11</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-08-25 06:28:22 -0700</bug_when>
    <thetext>works for me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456869</commentid>
    <comment_count>12</comment_count>
      <attachid>105099</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-25 08:24:31 -0700</bug_when>
    <thetext>Comment on attachment 105099
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/skia/NativeImageSkia.h:67
&gt;&gt;&gt; +    SkBitmap&amp; bitmap() { return m_image; }
&gt;&gt; 
&gt;&gt; I&apos;m not a fan of returning a non-const reference (although that&apos;s not webkit coding style or anything, just personal preference).  Out of curiosity, how many call sites break with only the const ref variant available?
&gt; 
&gt; There are a few calls in ImageDecoderSkia.cpp (reset, copyTo, setConfig, allocPixels, setIsOpaque). The non-const ref is just trying to mimic the original is-a behavior. I can&apos;t say I&apos;m a fan either. It&apos;s just that the alternative of wrapping all the used SkBitmap methods seems too difficult to maintain.

One option would be to return a non-const pointer instead of ref.  That makes it marginally clearer that it may be modified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456870</commentid>
    <comment_count>13</comment_count>
      <attachid>105116</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-25 08:25:06 -0700</bug_when>
    <thetext>Comment on attachment 105116
Patch

Looks good.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456918</commentid>
    <comment_count>14</comment_count>
      <attachid>105116</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-25 09:42:30 -0700</bug_when>
    <thetext>Comment on attachment 105116
Patch

Clearing flags on attachment: 105116

Committed r93792: &lt;http://trac.webkit.org/changeset/93792&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456919</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-25 09:42:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457228</commentid>
    <comment_count>16</comment_count>
    <who name="John Bates">jbates</who>
    <bug_when>2011-08-25 16:19:19 -0700</bug_when>
    <thetext>&gt; One option would be to return a non-const pointer instead of ref.  That makes it marginally clearer that it may be modified.

I was thinking that would send the message that you can hold on to the pointer. With a reference, you&apos;d usually have to deliberately deref into a pointer if you wanted to hold onto it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105081</attachid>
            <date>2011-08-24 15:22:31 -0700</date>
            <delta_ts>2011-08-24 17:10:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66488-20110824152230.patch</filename>
            <type>text/plain</type>
            <size>23334</size>
            <attacher name="John Bates">jbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM3MDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhYTY4MTQ3MjEyYmEyM2M1
MWUxYzVjMGZkOGU2NTI1YWYxNDg5YWJkLi5lOTJmMzAwYmQ0NzBiYzFiY2FkMzIxYzNiYTRhNTQ0
OGYwMTJlNjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDgtMjQgIEpvaG4g
QmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIExlYWtpbmcg
U2tCaXRtYXBzIGZvciBiYWNrZ3JvdW5kIGltYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY0ODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNpbXBseSBjaGFuZ2VzIE5hdGl2ZUlt
YWdlU2tpYSB0byBoYXZlIGEgU2tCaXRtYXAgaW5zdGVhZCBvZgorICAgICAgICBkZXJpdmluZyBm
cm9tIFNrQml0bWFwLiBBbGwgZGVwZW5kZW50IGNvZGUgdXBkYXRlZCB0byBhY2Nlc3MgdGhlIG1l
bWJlcgorICAgICAgICBpbnN0ZWFkIG9mIGNhbGxpbmcgU2tCaXRtYXAgbWV0aG9kcyBvbiBOYXRp
dmVJbWFnZVNraWEgb2JqZWN0cy4gVGhpcworICAgICAgICBtYXkgb3IgbWF5IG5vdCBmaXggdGhl
IG1lbW9yeSBsZWFrLCBidXQgaXQncyBkZWZpbml0ZWx5IGEgYnVnIHRoYXQgY291bGQKKyAgICAg
ICAgY2F1c2UgbWVtb3J5IGxlYWtzLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRHJh
Z0ltYWdlQ2hyb21pdW1Ta2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFn
ZUZyb21JbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZv
cm1JbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjp1cGRhdGVGcm9t
SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5n
bGVGcmFtZVNraWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlU2luZ2xlRnJhbWVT
a2lhOjpjdXJyZW50RnJhbWVIYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZVNpbmdsZUZyYW1lU2tpYTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZVNp
bmdsZUZyYW1lU2tpYTo6bm90U29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTa0JpdG1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF0
aXZlSW1hZ2VTa2lhOjpOYXRpdmVJbWFnZVNraWEpOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZl
SW1hZ2VTa2lhOjpkZWNvZGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNr
aWE6OnJlc2l6ZWRCaXRtYXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0
aXZlSW1hZ2VTa2lhLmg6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6OmJpdG1h
cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJuU2tpYS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpwbGF0Zm9ybVBhdHRlcm4pOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6Z2V0QWRkcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
c2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldEhhc0FscGhh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OndpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmhlaWdodCk6CisKIDIwMTEtMDgtMjQgIFBhdmVsIEZlbGRtYW4gIDxw
ZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGV4dHJhY3QgQ29u
c29sZU1lc3NhZ2UgaW50byBhIHNlcGFyYXRlIGZpbGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bVNraWEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lhLmNwcAppbmRl
eCBlNWMxY2VlNzMyYWM4NTg1NTMxOGMxYmFiYmU0M2U1ZDdhNzk2ZjY1Li5lNWNhMTc1N2E1YWFi
NTk2Zjg3ZGQ2YjJkYTA1YmViZjY1M2QxNGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bVNraWEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtU2tpYS5jcHAKQEAgLTEw
MSw3ICsxMDEsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdl
KiBpbWFnZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBTa0JpdG1hcCogZHJhZ0ltYWdlID0g
bmV3IFNrQml0bWFwKCk7Ci0gICAgYml0bWFwLT5jb3B5VG8oZHJhZ0ltYWdlLCBTa0JpdG1hcDo6
a0FSR0JfODg4OF9Db25maWcpOworICAgIGJpdG1hcC0+Yml0bWFwKCkuY29weVRvKGRyYWdJbWFn
ZSwgU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKICAgICByZXR1cm4gZHJhZ0ltYWdlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9QbGF0Zm9ybUltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsYXRmb3JtSW1hZ2UuY3BwCmluZGV4IGMzMWIyOWM0YjQwMzEwZjU4YTgwMmQ3NGU5
NWIyYjdkYWIwMDQ1YTcuLjk2NzJjOWM3YjY2NTlmZDU3NDgxMzU5YmRjZmI3OGEyMDU2YmNkMDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Bs
YXRmb3JtSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsYXRmb3JtSW1hZ2UuY3BwCkBAIC01MCwxMCArNTAsMTAgQEAgdm9pZCBQbGF0Zm9y
bUltYWdlOjp1cGRhdGVGcm9tSW1hZ2UoTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UpCiAjaWYg
VVNFKFNLSUEpCiAgICAgLy8gVGhlIGxheWVyIGNvbnRhaW5zIGFuIEltYWdlLgogICAgIE5hdGl2
ZUltYWdlU2tpYSogc2tpYUltYWdlID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VTa2lhKj4obmF0
aXZlSW1hZ2UpOwotICAgIGNvbnN0IFNrQml0bWFwKiBza2lhQml0bWFwID0gc2tpYUltYWdlOwor
ICAgIEFTU0VSVChza2lhSW1hZ2UpOworICAgIGNvbnN0IFNrQml0bWFwJiBza2lhQml0bWFwID0g
c2tpYUltYWdlLT5iaXRtYXAoKTsKIAotICAgIEludFNpemUgYml0bWFwU2l6ZShza2lhQml0bWFw
LT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKHNraWFCaXRtYXAp
OworICAgIEludFNpemUgYml0bWFwU2l6ZShza2lhQml0bWFwLndpZHRoKCksIHNraWFCaXRtYXAu
aGVpZ2h0KCkpOwogI2VsaWYgVVNFKENHKQogICAgIC8vIE5hdGl2ZUltYWdlUHRyIGlzIGEgQ0dJ
bWFnZVJlZiBvbiBNYWMgT1MgWC4KICAgICBpbnQgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgobmF0
aXZlSW1hZ2UpOwpAQCAtNjksMTAgKzY5LDEwIEBAIHZvaWQgUGxhdGZvcm1JbWFnZTo6dXBkYXRl
RnJvbUltYWdlKE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKQogICAgIH0KIAogI2lmIFVTRShT
S0lBKQotICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygqc2tpYUJpdG1hcCk7CisgICAgU2tBdXRv
TG9ja1BpeGVscyBsb2NrKHNraWFCaXRtYXApOwogICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRv
IHN1cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucz8KLSAgICBBU1NFUlQoc2tpYUJpdG1h
cC0+Y29uZmlnKCk9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOwotICAgIHNraWFCaXRt
YXAtPmNvcHlQaXhlbHNUbyhtX3BpeGVsRGF0YS5nZXQoKSwgYnVmZmVyU2l6ZSk7CisgICAgQVNT
RVJUKHNraWFCaXRtYXAuY29uZmlnKCk9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOwor
ICAgIHNraWFCaXRtYXAuY29weVBpeGVsc1RvKG1fcGl4ZWxEYXRhLmdldCgpLCBidWZmZXJTaXpl
KTsKICNlbGlmIFVTRShDRykKICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGdldCByaWQgb2YgdGhp
cyB0ZW1wb3JhcnkgY29weSB3aGVyZSBwb3NzaWJsZS4KICAgICBpbnQgdGVtcFJvd0J5dGVzID0g
d2lkdGggKiA0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oCmluZGV4IGEzM2I1
Zjc1ZDlhZjM1OTFhZjJlY2RiZDM1NTVkYzc5OWM5NTAyNjguLjljODljNjkyNzNkMzk0MTZkYzVj
OGY0N2ZkZGFhNjJkYTdkMDA1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lh
LmgKQEAgLTUzLDExICs1MywxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNCaXRt
YXBJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBjdXJy
ZW50RnJhbWVIYXNBbHBoYSgpIHsgcmV0dXJuICFtX25hdGl2ZUltYWdlLmlzT3BhcXVlKCk7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKSB7IHJldHVybiAhbV9uYXRp
dmVJbWFnZS5iaXRtYXAoKS5pc09wYXF1ZSgpOyB9CiAKICAgICB2aXJ0dWFsIEludFNpemUgc2l6
ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gSW50U2l6ZShtX25hdGl2ZUltYWdlLndp
ZHRoKCksIG1fbmF0aXZlSW1hZ2UuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gSW50U2l6ZSht
X25hdGl2ZUltYWdlLmJpdG1hcCgpLndpZHRoKCksIG1fbmF0aXZlSW1hZ2UuYml0bWFwKCkuaGVp
Z2h0KCkpOwogICAgIH0KIAogICAgIC8vIERvIG5vdGhpbmcsIGFzIHdlIG9ubHkgaGF2ZSB0aGUg
b25lIHJlcHJlc2VudGF0aW9uIG9mIGRhdGEgKGRlY29kZWQpLgpAQCAtNzcsNyArNzcsNyBAQCBw
dWJsaWM6CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpcnR1YWwgYm9vbCBub3RTb2xpZENv
bG9yKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25hdGl2ZUltYWdlLndpZHRoKCkgIT0gMSB8
fCBtX25hdGl2ZUltYWdlLmhlaWdodCgpICE9IDE7CisgICAgICAgIHJldHVybiBtX25hdGl2ZUlt
YWdlLmJpdG1hcCgpLndpZHRoKCkgIT0gMSB8fCBtX25hdGl2ZUltYWdlLmJpdG1hcCgpLmhlaWdo
dCgpICE9IDE7CiAgICAgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcApp
bmRleCBlYzUxNzVjMzUxODUxZGU0NGJiZmJiZDQ2NjkwMjRlNzgwMzAxM2RmLi40NTcxMDAwMmM1
MmNjYjA1NTdmMjJiYjk3YjBhNGYxMmJiODY5Njk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNr
aWEuY3BwCkBAIC01NCw3ICs1NCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdl
RGF0YShJbWFnZSogaW1hZ2UsCiAgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gcGl4ZWxzOwog
ICAgIE5hdGl2ZUltYWdlU2tpYSogc2tpYUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7CiAgICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7
Ci0gICAgYm9vbCBoYXNBbHBoYSA9IHNraWFJbWFnZSA/ICFza2lhSW1hZ2UtPmlzT3BhcXVlKCkg
OiB0cnVlOworICAgIGJvb2wgaGFzQWxwaGEgPSBza2lhSW1hZ2UgPyAhc2tpYUltYWdlLT5iaXRt
YXAoKS5pc09wYXF1ZSgpIDogdHJ1ZTsKICAgICBpZiAoKCFza2lhSW1hZ2UgfHwgaWdub3JlR2Ft
bWFBbmRDb2xvclByb2ZpbGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFscGhhKSkgJiYg
aW1hZ2UtPmRhdGEoKSkgewogICAgICAgICBJbWFnZVNvdXJjZSBkZWNvZGVyKEltYWdlU291cmNl
OjpBbHBoYU5vdFByZW11bHRpcGxpZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgPyBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2Zp
bGVJZ25vcmVkIDogSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCk7CkBA
IC02NCw5ICs2NCw5IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFn
ZSogaW1hZ2UsCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGhhc0FscGhhID0g
ZGVjb2Rlci5mcmFtZUhhc0FscGhhQXRJbmRleCgwKTsKICAgICAgICAgcGl4ZWxzID0gYWRvcHRQ
dHIoZGVjb2Rlci5jcmVhdGVGcmFtZUF0SW5kZXgoMCkpOwotICAgICAgICBpZiAoIXBpeGVscy5n
ZXQoKSB8fCAhcGl4ZWxzLT5pc0RhdGFDb21wbGV0ZSgpIHx8ICFwaXhlbHMtPndpZHRoKCkgfHwg
IXBpeGVscy0+aGVpZ2h0KCkpCisgICAgICAgIGlmICghcGl4ZWxzLmdldCgpIHx8ICFwaXhlbHMt
PmlzRGF0YUNvbXBsZXRlKCkgfHwgIXBpeGVscy0+Yml0bWFwKCkud2lkdGgoKSB8fCAhcGl4ZWxz
LT5iaXRtYXAoKS5oZWlnaHQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
U2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gcGl4ZWxzLT5jb25maWcoKTsKKyAgICAgICAg
U2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gcGl4ZWxzLT5iaXRtYXAoKS5jb25maWcoKTsK
ICAgICAgICAgaWYgKHNraWFDb25maWcgIT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBza2lhSW1hZ2UgPSBwaXhlbHMuZ2V0
KCk7CkBAIC03NiwxMyArNzYsMTMgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VE
YXRhKEltYWdlKiBpbWFnZSwKICAgICAgICAgbmVlZGVkQWxwaGFPcCA9IEFscGhhRG9Vbm11bHRp
cGx5OwogICAgIGlmICghc2tpYUltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU2tC
aXRtYXAmIHNraWFJbWFnZVJlZiA9ICpza2lhSW1hZ2U7CisgICAgU2tCaXRtYXAmIHNraWFJbWFn
ZVJlZiA9IHNraWFJbWFnZS0+Yml0bWFwKCk7CiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKHNr
aWFJbWFnZVJlZik7Ci0gICAgQVNTRVJUKHNraWFJbWFnZS0+cm93Qnl0ZXMoKSA9PSBza2lhSW1h
Z2UtPndpZHRoKCkgKiA0KTsKLSAgICBvdXRwdXRWZWN0b3IucmVzaXplKHNraWFJbWFnZS0+cm93
Qnl0ZXMoKSAqIHNraWFJbWFnZS0+aGVpZ2h0KCkpOwotICAgIHJldHVybiBwYWNrUGl4ZWxzKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNraWFJbWFnZS0+Z2V0UGl4ZWxzKCkpLAor
ICAgIEFTU0VSVChza2lhSW1hZ2VSZWYucm93Qnl0ZXMoKSA9PSBza2lhSW1hZ2VSZWYud2lkdGgo
KSAqIDQpOworICAgIG91dHB1dFZlY3Rvci5yZXNpemUoc2tpYUltYWdlUmVmLnJvd0J5dGVzKCkg
KiBza2lhSW1hZ2VSZWYuaGVpZ2h0KCkpOworICAgIHJldHVybiBwYWNrUGl4ZWxzKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNraWFJbWFnZVJlZi5nZXRQaXhlbHMoKSksCiAgICAg
ICAgICAgICAgICAgICAgICAgU0tfQjMyX1NISUZUID8gU291cmNlRm9ybWF0UkdCQTggOiBTb3Vy
Y2VGb3JtYXRCR1JBOCwKLSAgICAgICAgICAgICAgICAgICAgICBza2lhSW1hZ2UtPndpZHRoKCks
IHNraWFJbWFnZS0+aGVpZ2h0KCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgc2tpYUltYWdl
UmVmLndpZHRoKCksIHNraWFJbWFnZVJlZi5oZWlnaHQoKSwgMCwKICAgICAgICAgICAgICAgICAg
ICAgICBmb3JtYXQsIHR5cGUsIG5lZWRlZEFscGhhT3AsIG91dHB1dFZlY3Rvci5kYXRhKCkpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0lt
YWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
U2tpYS5jcHAKaW5kZXggOTM5YmFjNmZjNTNjODk5OGM1MDNkNTUyZDU1OTNjNTJlOWE5OTk5MS4u
MDZmYzdkNzY1ODJjMDE1NDUwMzNjZjc4OGUyYTkyMzdmNWI5YTU3ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcApAQCAtMjI5
LDcgKzIyOSw3IEBAIHN0YXRpYyB2b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZvcm1Db250ZXh0U2tp
YSogcGxhdGZvcm1Db250ZXh0LCBjb25zdCBOYXRpdmVJbWFnCiAgICAgICAgIC8vIGlzIHNvbWV0
aGluZyBpbnRlcmVzdGluZyBnb2luZyBvbiB3aXRoIHRoZSBtYXRyaXggKGxpa2UgYSByb3RhdGlv
bikuCiAgICAgICAgIC8vIE5vdGU6IGZvciBzZXJpYWxpemF0aW9uLCB3ZSB3aWxsIHdhbnQgdG8g
c3Vic2V0IHRoZSBiaXRtYXAgZmlyc3Qgc28KICAgICAgICAgLy8gd2UgZG9uJ3Qgc2VuZCBleHRy
YSBwaXhlbHMuCi0gICAgICAgIGNhbnZhcy0+ZHJhd0JpdG1hcFJlY3QoYml0bWFwLCAmc3JjUmVj
dCwgZGVzdFJlY3QsICZwYWludCk7CisgICAgICAgIGNhbnZhcy0+ZHJhd0JpdG1hcFJlY3QoYml0
bWFwLmJpdG1hcCgpLCAmc3JjUmVjdCwgZGVzdFJlY3QsICZwYWludCk7CiAgICAgfQogfQogCkBA
IC0zMzEsNyArMzMxLDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LAogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE5vIG5lZWQgdG8gZG8gbmljZSBy
ZXNhbXBsaW5nLgogICAgICAgICBTa0JpdG1hcCBzcmNTdWJzZXQ7Ci0gICAgICAgIGJpdG1hcC0+
ZXh0cmFjdFN1YnNldCgmc3JjU3Vic2V0LCBzcmNSZWN0KTsKKyAgICAgICAgYml0bWFwLT5iaXRt
YXAoKS5leHRyYWN0U3Vic2V0KCZzcmNTdWJzZXQsIHNyY1JlY3QpOwogICAgICAgICBzaGFkZXIg
PSBTa1NoYWRlcjo6Q3JlYXRlQml0bWFwU2hhZGVyKHNyY1N1YnNldCwgU2tTaGFkZXI6OmtSZXBl
YXRfVGlsZU1vZGUsIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlKTsKICAgICB9CiAKQEAgLTM4
NSwxMiArMzg1LDEyIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiAg
ICAgV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhKiBmcmFtZSA9IGZyYW1lQXRJbmRleCgwKTsKIAog
ICAgIGlmIChmcmFtZSAmJiBzaXplKCkud2lkdGgoKSA9PSAxICYmIHNpemUoKS5oZWlnaHQoKSA9
PSAxKSB7Ci0gICAgICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygqZnJhbWUpOwotICAgICAgICBp
ZiAoIWZyYW1lLT5nZXRQaXhlbHMoKSkKKyAgICAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKGZy
YW1lLT5iaXRtYXAoKSk7CisgICAgICAgIGlmICghZnJhbWUtPmJpdG1hcCgpLmdldFBpeGVscygp
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIG1faXNTb2xpZENvbG9yID0gdHJ1ZTsK
LSAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IoZnJhbWUtPmdldENvbG9yKDAsIDApKTsKKyAg
ICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IoZnJhbWUtPmJpdG1hcCgpLmdldENvbG9yKDAsIDAp
KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcAppbmRleCA4ZmUxMWEzNzIyY2JiMjYyYzEw
ODJmNTY5NzgxN2EyMTM0NDM3NzI3Li5mMzA4NTc5YjgxZGZiZWUyOTFmZTkwMDhhYWNkNTE3NmRi
NDc4OGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L05hdGl2ZUltYWdlU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCkBAIC0zOSwxNSArMzksMTUgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogTmF0aXZlSW1hZ2VTa2lhOjpOYXRpdmVJbWFnZVNraWEoKQotICAgIDog
bV9pc0RhdGFDb21wbGV0ZShmYWxzZSksCi0gICAgICBtX3Jlc2l6ZVJlcXVlc3RzKDApCisgICAg
OiBtX3Jlc2l6ZVJlcXVlc3RzKDApLAorICAgICAgbV9pc0RhdGFDb21wbGV0ZShmYWxzZSkKIHsK
IH0KIAogTmF0aXZlSW1hZ2VTa2lhOjpOYXRpdmVJbWFnZVNraWEoY29uc3QgU2tCaXRtYXAmIG90
aGVyKQotICAgIDogU2tCaXRtYXAob3RoZXIpLAotICAgICAgbV9pc0RhdGFDb21wbGV0ZShmYWxz
ZSksCi0gICAgICBtX3Jlc2l6ZVJlcXVlc3RzKDApCisgICAgOiBtX2ltYWdlKG90aGVyKSwKKyAg
ICAgIG1fcmVzaXplUmVxdWVzdHMoMCksCisgICAgICBtX2lzRGF0YUNvbXBsZXRlKGZhbHNlKQog
ewogfQogCkBAIC01Nyw3ICs1Nyw3IEBAIE5hdGl2ZUltYWdlU2tpYTo6fk5hdGl2ZUltYWdlU2tp
YSgpCiAKIGludCBOYXRpdmVJbWFnZVNraWE6OmRlY29kZWRTaXplKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZ2V0U2l6ZSgpICsgbV9yZXNpemVkSW1hZ2UuZ2V0U2l6ZSgpOworICAgIHJldHVybiBt
X2ltYWdlLmdldFNpemUoKSArIG1fcmVzaXplZEltYWdlLmdldFNpemUoKTsKIH0KIAogYm9vbCBO
YXRpdmVJbWFnZVNraWE6Omhhc1Jlc2l6ZWRCaXRtYXAoY29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0
LCBpbnQgZGVzdFdpZHRoLCBpbnQgZGVzdEhlaWdodCkgY29uc3QKQEAgLTc1LDcgKzc1LDcgQEAg
U2tCaXRtYXAgTmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKGNvbnN0IFNrSVJlY3QmIHNy
Y1N1YnNldCwKICAgICAgICAgICAgICYmIHNob3VsZENhY2hlUmVzYW1wbGluZyhzcmNTdWJzZXQs
IGRlc3RXaWR0aCwgZGVzdEhlaWdodCwgZGVzdFZpc2libGVTdWJzZXQpOwogCiAgICAgICAgIFNr
Qml0bWFwIHN1YnNldDsKLSAgICAgICAgZXh0cmFjdFN1YnNldCgmc3Vic2V0LCBzcmNTdWJzZXQp
OworICAgICAgICBtX2ltYWdlLmV4dHJhY3RTdWJzZXQoJnN1YnNldCwgc3JjU3Vic2V0KTsKICAg
ICAgICAgaWYgKCFzaG91bGRDYWNoZSkgewogICAgICAgICAgICAgLy8gSnVzdCByZXNpemUgdGhl
IHZpc2libGUgc3Vic2V0IGFuZCByZXR1cm4gaXQuCiAgICAgICAgICAgICBTa0JpdG1hcCByZXNp
emVkSW1hZ2UgPSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZShzdWJzZXQsIHNraWE6Oklt
YWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLCBkZXN0V2lkdGgsIGRlc3RIZWlnaHQsIGRl
c3RWaXNpYmxlU3Vic2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5oCmluZGV4IGUxMTM1ZWE4YWI1NGI1NjBiNWQ5
MjhiOGVlZDAzNGU0MmIwZDBiYWYuLmE3MGE0N2M0MjA0MzJiMDRlODg4YzUzNjYxNjE5YmQ1MTM1
YzRiNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
TmF0aXZlSW1hZ2VTa2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9OYXRpdmVJbWFnZVNraWEuaApAQCAtMzgsOSArMzgsOSBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAvLyBUaGlzIG9iamVjdCBpcyB1c2VkIGFzIHRoZSAibmF0aXZlIGltYWdlIiBpbiBv
dXIgcG9ydC4gV2hlbiBXZWJLaXQgdXNlcwotLy8gIk5hdGl2ZUltYWdlUHRyIiwgaXQgaXMgYSBw
b2ludGVyIHRvIHRoaXMgdHlwZS4gSXQgaXMgYW4gU2tCaXRtYXAsIGJ1dCBhbHNvCisvLyAiTmF0
aXZlSW1hZ2VQdHIiLCBpdCBpcyBhIHBvaW50ZXIgdG8gdGhpcyB0eXBlLiBJdCBoYXMgYW4gU2tC
aXRtYXAsIGFuZCBhbHNvCiAvLyBzdG9yZXMgYSBjYWNoZWQgcmVzaXplZCBpbWFnZS4KLWNsYXNz
IE5hdGl2ZUltYWdlU2tpYSA6IHB1YmxpYyBTa0JpdG1hcCB7CitjbGFzcyBOYXRpdmVJbWFnZVNr
aWEgewogcHVibGljOgogICAgIE5hdGl2ZUltYWdlU2tpYSgpOwogICAgIH5OYXRpdmVJbWFnZVNr
aWEoKTsKQEAgLTYyLDYgKzYyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIGVudGlyZSBpbWFnZSBoYXMgYmVlbiBkZWNvZGVkLgogICAgIGJvb2wgaXNEYXRhQ29tcGxl
dGUoKSBjb25zdCB7IHJldHVybiBtX2lzRGF0YUNvbXBsZXRlOyB9CiAKKyAgICAvLyBHZXQgcmVm
ZXJlbmNlIHRvIHRoZSBpbnRlcm5hbCBTa0JpdG1hcCByZXByZXNlbnRpbmcgdGhpcyBpbWFnZS4K
KyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZTsgfQor
ICAgIFNrQml0bWFwJiBiaXRtYXAoKSB7IHJldHVybiBtX2ltYWdlOyB9CisKICAgICAvLyBXZSBj
YW4ga2VlcCBhIHJlc2l6ZWQgdmVyc2lvbiBvZiB0aGUgYml0bWFwIGNhY2hlZCBvbiB0aGlzIG9i
amVjdC4KICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMg
YSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUKICAgICAvLyBnaXZlbiBpbWFnZSBzdWJzZXQgd2l0aCB0
aGUgZ2l2ZW4gZGltZW5zaW9ucyBhbmQgc3Vic2V0cy4KQEAgLTExNiw5ICsxMjAsOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0SGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrSVJlY3QmIGRlc3RTdWJzZXQpIGNv
bnN0OwogCi0gICAgLy8gU2V0IHRvIHRydWUgd2hlbiB0aGUgZGF0YSBpcyBjb21wbGV0ZS4gQmVm
b3JlIHRoZSBlbnRpcmUgaW1hZ2UgaGFzCi0gICAgLy8gbG9hZGVkLCB3ZSBkbyBub3Qgd2FudCB0
byBjYWNoZSBhIHJlc2l6ZS4KLSAgICBib29sIG1faXNEYXRhQ29tcGxldGU7CisgICAgLy8gVGhl
IG9yaWdpbmFsIGltYWdlLgorICAgIFNrQml0bWFwIG1faW1hZ2U7CiAKICAgICAvLyBUaGUgY2Fj
aGVkIGJpdG1hcC4gVGhpcyB3aWxsIGJlIGVtcHR5KCkgaWYgdGhlcmUgaXMgbm8gY2FjaGVkIGlt
YWdlLgogICAgIG11dGFibGUgU2tCaXRtYXAgbV9yZXNpemVkSW1hZ2U7CkBAIC0xMzgsNiArMTQx
LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gaW1hZ2UgcmVzaXplcy4KICAgICBtdXRhYmxlIENhY2hl
ZEltYWdlSW5mbyBtX2NhY2hlZEltYWdlSW5mbzsKICAgICBtdXRhYmxlIGludCBtX3Jlc2l6ZVJl
cXVlc3RzOworCisgICAgLy8gU2V0IHRvIHRydWUgd2hlbiB0aGUgZGF0YSBpcyBjb21wbGV0ZS4g
QmVmb3JlIHRoZSBlbnRpcmUgaW1hZ2UgaGFzCisgICAgLy8gbG9hZGVkLCB3ZSBkbyBub3Qgd2Fu
dCB0byBjYWNoZSBhIHJlc2l6ZS4KKyAgICBib29sIG1faXNEYXRhQ29tcGxldGU7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRl
cm5Ta2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVy
blNraWEuY3BwCmluZGV4IDcyZmFjNzczNDkyYmE0ZGE0ZmVmMTQwMjBmMTczMGI2MDA1ZmMyZDQu
LjRkMzZjNTQ0OWY5YTA5Njk4ZDUyMjI4ZTYwZWM4Njc1NjFiMTIzYjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVyblNraWEuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVyblNraWEuY3BwCkBA
IC01OSwxMyArNTksMTMgQEAgUGxhdGZvcm1QYXR0ZXJuUHRyIFBhdHRlcm46OnBsYXRmb3JtUGF0
dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2YKICAgICAvLyBhbmQgZXhw
YW5kZWQgc2NhbGUgYW5kIHNrZXcgaW46CiAgICAgLy8gTGF5b3V0VGVzdHMvc3ZnL1czQy1TVkct
MS4xL3BzZXJ2ZXJzLWdyYWQtMDYtYi5zdmcKIAotICAgIFNrQml0bWFwKiBibSA9IG1fdGlsZUlt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGNvbnN0IE5hdGl2ZUltYWdl
U2tpYSogYm0gPSBtX3RpbGVJbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAg
ICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgYml0bWFwLCByZXR1cm4gYSB0cmFuc3BhcmVudCBzaGFk
ZXIuCiAgICAgaWYgKCFibSkKICAgICAgICAgbV9wYXR0ZXJuID0gbmV3IFNrQ29sb3JTaGFkZXIo
U2tDb2xvclNldEFSR0IoMCwgMCwgMCwgMCkpOwogCiAgICAgZWxzZSBpZiAobV9yZXBlYXRYICYm
IG1fcmVwZWF0WSkKLSAgICAgICAgbV9wYXR0ZXJuID0gU2tTaGFkZXI6OkNyZWF0ZUJpdG1hcFNo
YWRlcigqYm0sIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlLCBTa1NoYWRlcjo6a1JlcGVhdF9U
aWxlTW9kZSk7CisgICAgICAgIG1fcGF0dGVybiA9IFNrU2hhZGVyOjpDcmVhdGVCaXRtYXBTaGFk
ZXIoYm0tPmJpdG1hcCgpLCBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSwgU2tTaGFkZXI6OmtS
ZXBlYXRfVGlsZU1vZGUpOwogCiAgICAgZWxzZSB7CiAKQEAgLTgzLDExICs4MywxMSBAQCBQbGF0
Zm9ybVBhdHRlcm5QdHIgUGF0dGVybjo6cGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZgogICAgICAgICAvLyBvcmlnaW5hbCwgdGhlbiBjb3B5IHRoZSBv
cmlnbmFsIGludG8gaXQuCiAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGVyZSBhIGJldHRlciB3YXkg
dG8gcGFkIChub3Qgc2NhbGUpIGFuIGltYWdlIGluIHNraWE/CiAgICAgICAgIFNrQml0bWFwIGJt
MjsKLSAgICAgICAgYm0yLnNldENvbmZpZyhibS0+Y29uZmlnKCksIGJtLT53aWR0aCgpICsgZXhw
YW5kVywgYm0tPmhlaWdodCgpICsgZXhwYW5kSCk7CisgICAgICAgIGJtMi5zZXRDb25maWcoYm0t
PmJpdG1hcCgpLmNvbmZpZygpLCBibS0+Yml0bWFwKCkud2lkdGgoKSArIGV4cGFuZFcsIGJtLT5i
aXRtYXAoKS5oZWlnaHQoKSArIGV4cGFuZEgpOwogICAgICAgICBibTIuYWxsb2NQaXhlbHMoKTsK
ICAgICAgICAgYm0yLmVyYXNlQVJHQigweDAwLCAweDAwLCAweDAwLCAweDAwKTsKICAgICAgICAg
U2tDYW52YXMgY2FudmFzKGJtMik7Ci0gICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKCpibSwgMCwg
MCk7CisgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKGJtLT5iaXRtYXAoKSwgMCwgMCk7CiAgICAg
ICAgIG1fcGF0dGVybiA9IFNrU2hhZGVyOjpDcmVhdGVCaXRtYXBTaGFkZXIoYm0yLCB0aWxlTW9k
ZVgsIHRpbGVNb2RlWSk7CiAgICAgfQogICAgIG1fcGF0dGVybi0+c2V0TG9jYWxNYXRyaXgobV9w
YXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4IGNlOGIyN2NlZDVhMzRj
MDVlYTcyYTAwN2VmNmIwNTZlMGMzY2NhNzkuLjdiNDg0N2Y0NzNhODM1NTQyMjY4OGUwMGRmYTJl
Y2ZiYjZhZDU5N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0xNTQsNyArMTU0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBpbmxpbmUgUGl4ZWxEYXRhKiBnZXRBZGRyKGludCB4LCBpbnQgeSkK
ICAgICAgICAgewogI2lmIFVTRShTS0lBKQotICAgICAgICAgICAgcmV0dXJuIG1fYml0bWFwLmdl
dEFkZHIzMih4LCB5KTsKKyAgICAgICAgICAgIHJldHVybiBtX2JpdG1hcC5iaXRtYXAoKS5nZXRB
ZGRyMzIoeCwgeSk7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICAgICAgICAgIG1faW1hZ2UgPSBt
X3BpeG1hcC50b0ltYWdlKCk7CiAgICAgICAgICAgICBtX3BpeG1hcCA9IFFQaXhtYXAoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1h
Z2VEZWNvZGVyU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCmluZGV4IDcyNGZhZWIxZmQwZTQ2Zjg2ZmU1MDUz
MDI5NzE3NGY4YWZhOWYyYzUuLjkzOTdhZDVjMzAwNzgyNzkyNGU0ZmY5MDNmZDQwYmFjMDY0OTVj
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Nr
aWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcApAQCAtNDcsNyArNDcsNyBAQCBJ
bWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIp
CiAgICAgbV9iaXRtYXAgPSBvdGhlci5tX2JpdG1hcDsKICAgICAvLyBLZWVwIHRoZSBwaXhlbHMg
bG9ja2VkIHNpbmNlIHdlIHdpbGwgYmUgd3JpdGluZyBkaXJlY3RseSBpbnRvIHRoZQogICAgIC8v
IGJpdG1hcCB0aHJvdWdob3V0IHRoaXMgb2JqZWN0J3MgbGlmZXRpbWUuCi0gICAgbV9iaXRtYXAu
bG9ja1BpeGVscygpOworICAgIG1fYml0bWFwLmJpdG1hcCgpLmxvY2tQaXhlbHMoKTsKICAgICBz
ZXRPcmlnaW5hbEZyYW1lUmVjdChvdGhlci5vcmlnaW5hbEZyYW1lUmVjdCgpKTsKICAgICBzZXRT
dGF0dXMob3RoZXIuc3RhdHVzKCkpOwogICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkp
OwpAQCAtNTgsNyArNTgsNyBAQCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29u
c3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAKIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEo
KQogewotICAgIG1fYml0bWFwLnJlc2V0KCk7CisgICAgbV9iaXRtYXAuYml0bWFwKCkucmVzZXQo
KTsKICAgICBtX3N0YXR1cyA9IEZyYW1lRW1wdHk7CiAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0
IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKCkKICAgICAvLyBjYWxs
cyB0aGlzIHRvIGZyZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxpa2UK
QEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCiAKIHZv
aWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEoKQogewotICAgIG1fYml0bWFwLmVyYXNl
QVJHQigwLCAwLCAwLCAwKTsKKyAgICBtX2JpdG1hcC5iaXRtYXAoKS5lcmFzZUFSR0IoMCwgMCwg
MCwgMCk7CiB9CiAKIGJvb2wgSW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEoY29uc3QgSW1hZ2VG
cmFtZSYgb3RoZXIpCkBAIC03Niw5ICs3Niw5IEBAIGJvb2wgSW1hZ2VGcmFtZTo6Y29weUJpdG1h
cERhdGEoY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fYml0bWFwLnJlc2V0KCk7CisgICAgbV9iaXRt
YXAuYml0bWFwKCkucmVzZXQoKTsKICAgICBjb25zdCBOYXRpdmVJbWFnZVNraWEmIG90aGVyQml0
bWFwID0gb3RoZXIubV9iaXRtYXA7Ci0gICAgcmV0dXJuIG90aGVyQml0bWFwLmNvcHlUbygmbV9i
aXRtYXAsIG90aGVyQml0bWFwLmNvbmZpZygpKTsKKyAgICByZXR1cm4gb3RoZXJCaXRtYXAuYml0
bWFwKCkuY29weVRvKCZtX2JpdG1hcC5iaXRtYXAoKSwgb3RoZXJCaXRtYXAuYml0bWFwKCkuY29u
ZmlnKCkpOwogfQogCiBib29sIEltYWdlRnJhbWU6OnNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQg
bmV3SGVpZ2h0KQpAQCAtODYsOCArODYsOCBAQCBib29sIEltYWdlRnJhbWU6OnNldFNpemUoaW50
IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQogICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIG9uY2UsIGl0IHdpbGwgbGVhayBtZW1vcnkKICAgICAvLyBvdGhlcndpc2Uu
CiAgICAgQVNTRVJUKHdpZHRoKCkgPT0gMCAmJiBoZWlnaHQoKSA9PSAwKTsKLSAgICBtX2JpdG1h
cC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBuZXdXaWR0aCwgbmV3SGVp
Z2h0KTsKLSAgICBpZiAoIW1fYml0bWFwLmFsbG9jUGl4ZWxzKCkpCisgICAgbV9iaXRtYXAuYml0
bWFwKCkuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgbmV3V2lkdGgsIG5l
d0hlaWdodCk7CisgICAgaWYgKCFtX2JpdG1hcC5iaXRtYXAoKS5hbGxvY1BpeGVscygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB6ZXJvRmlsbFBpeGVsRGF0YSgpOwpAQCAtMTAyLDEy
ICsxMDIsMTIgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSgp
IGNvbnN0CiAKIGJvb2wgSW1hZ2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdAogewotICAgIHJldHVy
biAhbV9iaXRtYXAuaXNPcGFxdWUoKTsKKyAgICByZXR1cm4gIW1fYml0bWFwLmJpdG1hcCgpLmlz
T3BhcXVlKCk7CiB9CiAKIHZvaWQgSW1hZ2VGcmFtZTo6c2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkK
IHsKLSAgICBtX2JpdG1hcC5zZXRJc09wYXF1ZSghYWxwaGEpOworICAgIG1fYml0bWFwLmJpdG1h
cCgpLnNldElzT3BhcXVlKCFhbHBoYSk7CiB9CiAKIHZvaWQgSW1hZ2VGcmFtZTo6c2V0Q29sb3JQ
cm9maWxlKGNvbnN0IENvbG9yUHJvZmlsZSYgY29sb3JQcm9maWxlKQpAQCAtMTI0LDEyICsxMjQs
MTIgQEAgdm9pZCBJbWFnZUZyYW1lOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKQogCiBp
bnQgSW1hZ2VGcmFtZTo6d2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBtX2JpdG1hcC53aWR0
aCgpOworICAgIHJldHVybiBtX2JpdG1hcC5iaXRtYXAoKS53aWR0aCgpOwogfQogCiBpbnQgSW1h
Z2VGcmFtZTo6aGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9iaXRtYXAuaGVpZ2h0KCk7
CisgICAgcmV0dXJuIG1fYml0bWFwLmJpdG1hcCgpLmhlaWdodCgpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDRmMDVkMzczZmUyZmQ5
YTc3YTk2MWJlYWYwMzhkYmEwMWE3ZjFiMDMuLmE5MDU2NzI5Yzg5MDcyMmQ1MTVhYzFiYWNlMzY3
MTVkNjcwZTg5OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMDgtMjQgIEpvaG4gQmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBb
Y2hyb21pdW1dIExlYWtpbmcgU2tCaXRtYXBzIGZvciBiYWNrZ3JvdW5kIGltYWdlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY0ODgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNpbXBs
eSBjaGFuZ2VzIE5hdGl2ZUltYWdlU2tpYSB0byBoYXZlIGEgU2tCaXRtYXAgaW5zdGVhZCBvZgor
ICAgICAgICBkZXJpdmluZyBmcm9tIFNrQml0bWFwLiBBbGwgZGVwZW5kZW50IGNvZGUgdXBkYXRl
ZCB0byBhY2Nlc3MgdGhlIG1lbWJlcgorICAgICAgICBpbnN0ZWFkIG9mIGNhbGxpbmcgU2tCaXRt
YXAgbWV0aG9kcyBvbiBOYXRpdmVJbWFnZVNraWEgb2JqZWN0cy4gVGhpcworICAgICAgICBtYXkg
b3IgbWF5IG5vdCBmaXggdGhlIG1lbW9yeSBsZWFrLCBidXQgaXQncyBkZWZpbml0ZWx5IGEgYnVn
IHRoYXQgY291bGQKKyAgICAgICAgY2F1c2UgbWVtb3J5IGxlYWtzLgorCisgICAgICAgICogc3Jj
L1BsYXRmb3JtQnJpZGdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpj
bGlwYm9hcmRXcml0ZUltYWdlKToKKyAgICAgICAgKiBzcmMvV2ViSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2VEZWNvZGVyOjpnZXRGcmFtZUF0SW5kZXgpOgorICAg
ICAgICAqIHNyYy9XZWJJbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbWFnZTo6
ZnJvbURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbWFnZTo6b3BlcmF0b3I9KToKKwogMjAx
MS0wOC0yMyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFdlYlNl
YXJjaGFibGVGb3JtRGF0YSBjcmFzaGVzIHdoZW4gZ2l2ZW4gYSBkZXRhY2hlZCBIVE1MRm9ybUVs
ZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtQnJp
ZGdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtQnJpZGdlLmNwcApp
bmRleCA3ZDIxODQyMDQ2NDE1YTBhMzkyN2EwMTlmNWIzOWMzZDdlZGI3MDk3Li4zN2M4NWU5NzE2
OTQyNmQ0OWY3MGZlYjYwYTQzMGUxNmM0NGM4YzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9QbGF0Zm9ybUJyaWRnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvUGxhdGZvcm1CcmlkZ2UuY3BwCkBAIC0yMDksNyArMjA5LDcgQEAgdm9pZCBQbGF0
Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVJbWFnZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB0aXRs
ZSkKIHsKICNpZiBXRUJLSVRfVVNJTkdfU0tJQQotICAgIFdlYkltYWdlIHdlYkltYWdlKCppbWFn
ZSk7CisgICAgV2ViSW1hZ2Ugd2ViSW1hZ2UoaW1hZ2UtPmJpdG1hcCgpKTsKICNlbHNlCiAgICAg
V2ViSW1hZ2Ugd2ViSW1hZ2UoaW1hZ2UpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSW1hZ2VEZWNvZGVyLmNwcAppbmRleCAwODE1M2JhMDg4NDc1OWY0MjQ4NjBk
ZmYxNDlkZDIxMTU3MDljMGYyLi43ZDliYWEwZjA2NTUwNzk5MDBlMzJhNTc5Y2I0ODYzNjFlMGMy
NTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFnZURlY29k
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkltYWdlRGVjb2Rlci5j
cHAKQEAgLTExMyw3ICsxMTMsNyBAQCBXZWJJbWFnZSBXZWJJbWFnZURlY29kZXI6OmdldEZyYW1l
QXRJbmRleChpbnQgaW5kZXggPSAwKSBjb25zdAogICAgICAgICByZXR1cm4gV2ViSW1hZ2UoKTsK
ICNpZiBXRUJLSVRfVVNJTkdfU0tJQQogICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGltYWdl
ID0gYWRvcHRQdHIoZnJhbWVCdWZmZXItPmFzTmV3TmF0aXZlSW1hZ2UoKSk7Ci0gICAgcmV0dXJu
IFdlYkltYWdlKCppbWFnZSk7CisgICAgcmV0dXJuIFdlYkltYWdlKGltYWdlLT5iaXRtYXAoKSk7
CiAjZWxpZiBXRUJLSVRfVVNJTkdfQ0cKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IENHIHNpZGUg
b2YgdGhpcy4KICAgICByZXR1cm4gV2ViSW1hZ2UoZnJhbWVCdWZmZXItPmFzTmV3TmF0aXZlSW1h
Z2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFnZVNr
aWEuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VTa2lhLmNwcAppbmRl
eCAwMjZiY2RlZWQ1Y2JiYzU4MmE2YWJkNTU3NWU0YTgwNWY3MmI3Y2I1Li4xZTZmNGQxMmU4YWI3
YjdjMGZlYzFlNzIxOWU4NDIzZGQ0MTQ2N2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJbWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkltYWdlU2tpYS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgV2ViSW1hZ2UgV2ViSW1hZ2U6
OmZyb21EYXRhKGNvbnN0IFdlYkRhdGEmIGRhdGEsIGNvbnN0IFdlYlNpemUmIGRlc2lyZWRTaXpl
KQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBXZWJJbWFnZSgpOwogCi0gICAgcmV0
dXJuIFdlYkltYWdlKCpmcmFtZSk7CisgICAgcmV0dXJuIFdlYkltYWdlKGZyYW1lLT5iaXRtYXAo
KSk7CiB9CiAKIHZvaWQgV2ViSW1hZ2U6OnJlc2V0KCkKQEAgLTExMyw3ICsxMTMsNyBAQCBXZWJJ
bWFnZSYgV2ViSW1hZ2U6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPEltYWdlPiYgaW1hZ2Up
CiB7CiAgICAgTmF0aXZlSW1hZ2VQdHIgcDsKICAgICBpZiAoaW1hZ2UuZ2V0KCkgJiYgKHAgPSBp
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkpCi0gICAgICAgIGFzc2lnbigqcCk7
CisgICAgICAgIGFzc2lnbihwLT5iaXRtYXAoKSk7CiAgICAgZWxzZQogICAgICAgICByZXNldCgp
OwogICAgIHJldHVybiAqdGhpczsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105099</attachid>
            <date>2011-08-24 17:10:31 -0700</date>
            <delta_ts>2011-08-25 08:24:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66488-20110824171030.patch</filename>
            <type>text/plain</type>
            <size>24805</size>
            <attacher name="John Bates">jbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM3MDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhYTY4MTQ3MjEyYmEyM2M1
MWUxYzVjMGZkOGU2NTI1YWYxNDg5YWJkLi5lOTJmMzAwYmQ0NzBiYzFiY2FkMzIxYzNiYTRhNTQ0
OGYwMTJlNjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDgtMjQgIEpvaG4g
QmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIExlYWtpbmcg
U2tCaXRtYXBzIGZvciBiYWNrZ3JvdW5kIGltYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY0ODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNpbXBseSBjaGFuZ2VzIE5hdGl2ZUlt
YWdlU2tpYSB0byBoYXZlIGEgU2tCaXRtYXAgaW5zdGVhZCBvZgorICAgICAgICBkZXJpdmluZyBm
cm9tIFNrQml0bWFwLiBBbGwgZGVwZW5kZW50IGNvZGUgdXBkYXRlZCB0byBhY2Nlc3MgdGhlIG1l
bWJlcgorICAgICAgICBpbnN0ZWFkIG9mIGNhbGxpbmcgU2tCaXRtYXAgbWV0aG9kcyBvbiBOYXRp
dmVJbWFnZVNraWEgb2JqZWN0cy4gVGhpcworICAgICAgICBtYXkgb3IgbWF5IG5vdCBmaXggdGhl
IG1lbW9yeSBsZWFrLCBidXQgaXQncyBkZWZpbml0ZWx5IGEgYnVnIHRoYXQgY291bGQKKyAgICAg
ICAgY2F1c2UgbWVtb3J5IGxlYWtzLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRHJh
Z0ltYWdlQ2hyb21pdW1Ta2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFn
ZUZyb21JbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZv
cm1JbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjp1cGRhdGVGcm9t
SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5n
bGVGcmFtZVNraWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlU2luZ2xlRnJhbWVT
a2lhOjpjdXJyZW50RnJhbWVIYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZVNpbmdsZUZyYW1lU2tpYTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZVNp
bmdsZUZyYW1lU2tpYTo6bm90U29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTa0JpdG1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF0
aXZlSW1hZ2VTa2lhOjpOYXRpdmVJbWFnZVNraWEpOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZl
SW1hZ2VTa2lhOjpkZWNvZGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNr
aWE6OnJlc2l6ZWRCaXRtYXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0
aXZlSW1hZ2VTa2lhLmg6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6OmJpdG1h
cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJuU2tpYS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpwbGF0Zm9ybVBhdHRlcm4pOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6Z2V0QWRkcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
c2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldEhhc0FscGhh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OndpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmhlaWdodCk6CisKIDIwMTEtMDgtMjQgIFBhdmVsIEZlbGRtYW4gIDxw
ZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGV4dHJhY3QgQ29u
c29sZU1lc3NhZ2UgaW50byBhIHNlcGFyYXRlIGZpbGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bVNraWEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lhLmNwcAppbmRl
eCBlNWMxY2VlNzMyYWM4NTg1NTMxOGMxYmFiYmU0M2U1ZDdhNzk2ZjY1Li5lNWNhMTc1N2E1YWFi
NTk2Zjg3ZGQ2YjJkYTA1YmViZjY1M2QxNGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bVNraWEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtU2tpYS5jcHAKQEAgLTEw
MSw3ICsxMDEsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdl
KiBpbWFnZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBTa0JpdG1hcCogZHJhZ0ltYWdlID0g
bmV3IFNrQml0bWFwKCk7Ci0gICAgYml0bWFwLT5jb3B5VG8oZHJhZ0ltYWdlLCBTa0JpdG1hcDo6
a0FSR0JfODg4OF9Db25maWcpOworICAgIGJpdG1hcC0+Yml0bWFwKCkuY29weVRvKGRyYWdJbWFn
ZSwgU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKICAgICByZXR1cm4gZHJhZ0ltYWdlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9QbGF0Zm9ybUltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsYXRmb3JtSW1hZ2UuY3BwCmluZGV4IGMzMWIyOWM0YjQwMzEwZjU4YTgwMmQ3NGU5
NWIyYjdkYWIwMDQ1YTcuLjk2NzJjOWM3YjY2NTlmZDU3NDgxMzU5YmRjZmI3OGEyMDU2YmNkMDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Bs
YXRmb3JtSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsYXRmb3JtSW1hZ2UuY3BwCkBAIC01MCwxMCArNTAsMTAgQEAgdm9pZCBQbGF0Zm9y
bUltYWdlOjp1cGRhdGVGcm9tSW1hZ2UoTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UpCiAjaWYg
VVNFKFNLSUEpCiAgICAgLy8gVGhlIGxheWVyIGNvbnRhaW5zIGFuIEltYWdlLgogICAgIE5hdGl2
ZUltYWdlU2tpYSogc2tpYUltYWdlID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VTa2lhKj4obmF0
aXZlSW1hZ2UpOwotICAgIGNvbnN0IFNrQml0bWFwKiBza2lhQml0bWFwID0gc2tpYUltYWdlOwor
ICAgIEFTU0VSVChza2lhSW1hZ2UpOworICAgIGNvbnN0IFNrQml0bWFwJiBza2lhQml0bWFwID0g
c2tpYUltYWdlLT5iaXRtYXAoKTsKIAotICAgIEludFNpemUgYml0bWFwU2l6ZShza2lhQml0bWFw
LT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKHNraWFCaXRtYXAp
OworICAgIEludFNpemUgYml0bWFwU2l6ZShza2lhQml0bWFwLndpZHRoKCksIHNraWFCaXRtYXAu
aGVpZ2h0KCkpOwogI2VsaWYgVVNFKENHKQogICAgIC8vIE5hdGl2ZUltYWdlUHRyIGlzIGEgQ0dJ
bWFnZVJlZiBvbiBNYWMgT1MgWC4KICAgICBpbnQgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgobmF0
aXZlSW1hZ2UpOwpAQCAtNjksMTAgKzY5LDEwIEBAIHZvaWQgUGxhdGZvcm1JbWFnZTo6dXBkYXRl
RnJvbUltYWdlKE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKQogICAgIH0KIAogI2lmIFVTRShT
S0lBKQotICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygqc2tpYUJpdG1hcCk7CisgICAgU2tBdXRv
TG9ja1BpeGVscyBsb2NrKHNraWFCaXRtYXApOwogICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRv
IHN1cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucz8KLSAgICBBU1NFUlQoc2tpYUJpdG1h
cC0+Y29uZmlnKCk9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOwotICAgIHNraWFCaXRt
YXAtPmNvcHlQaXhlbHNUbyhtX3BpeGVsRGF0YS5nZXQoKSwgYnVmZmVyU2l6ZSk7CisgICAgQVNT
RVJUKHNraWFCaXRtYXAuY29uZmlnKCk9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOwor
ICAgIHNraWFCaXRtYXAuY29weVBpeGVsc1RvKG1fcGl4ZWxEYXRhLmdldCgpLCBidWZmZXJTaXpl
KTsKICNlbGlmIFVTRShDRykKICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGdldCByaWQgb2YgdGhp
cyB0ZW1wb3JhcnkgY29weSB3aGVyZSBwb3NzaWJsZS4KICAgICBpbnQgdGVtcFJvd0J5dGVzID0g
d2lkdGggKiA0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oCmluZGV4IGEzM2I1
Zjc1ZDlhZjM1OTFhZjJlY2RiZDM1NTVkYzc5OWM5NTAyNjguLjljODljNjkyNzNkMzk0MTZkYzVj
OGY0N2ZkZGFhNjJkYTdkMDA1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lh
LmgKQEAgLTUzLDExICs1MywxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNCaXRt
YXBJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBjdXJy
ZW50RnJhbWVIYXNBbHBoYSgpIHsgcmV0dXJuICFtX25hdGl2ZUltYWdlLmlzT3BhcXVlKCk7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKSB7IHJldHVybiAhbV9uYXRp
dmVJbWFnZS5iaXRtYXAoKS5pc09wYXF1ZSgpOyB9CiAKICAgICB2aXJ0dWFsIEludFNpemUgc2l6
ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gSW50U2l6ZShtX25hdGl2ZUltYWdlLndp
ZHRoKCksIG1fbmF0aXZlSW1hZ2UuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gSW50U2l6ZSht
X25hdGl2ZUltYWdlLmJpdG1hcCgpLndpZHRoKCksIG1fbmF0aXZlSW1hZ2UuYml0bWFwKCkuaGVp
Z2h0KCkpOwogICAgIH0KIAogICAgIC8vIERvIG5vdGhpbmcsIGFzIHdlIG9ubHkgaGF2ZSB0aGUg
b25lIHJlcHJlc2VudGF0aW9uIG9mIGRhdGEgKGRlY29kZWQpLgpAQCAtNzcsNyArNzcsNyBAQCBw
dWJsaWM6CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpcnR1YWwgYm9vbCBub3RTb2xpZENv
bG9yKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25hdGl2ZUltYWdlLndpZHRoKCkgIT0gMSB8
fCBtX25hdGl2ZUltYWdlLmhlaWdodCgpICE9IDE7CisgICAgICAgIHJldHVybiBtX25hdGl2ZUlt
YWdlLmJpdG1hcCgpLndpZHRoKCkgIT0gMSB8fCBtX25hdGl2ZUltYWdlLmJpdG1hcCgpLmhlaWdo
dCgpICE9IDE7CiAgICAgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcApp
bmRleCBlYzUxNzVjMzUxODUxZGU0NGJiZmJiZDQ2NjkwMjRlNzgwMzAxM2RmLi40NTcxMDAwMmM1
MmNjYjA1NTdmMjJiYjk3YjBhNGYxMmJiODY5Njk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNr
aWEuY3BwCkBAIC01NCw3ICs1NCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdl
RGF0YShJbWFnZSogaW1hZ2UsCiAgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gcGl4ZWxzOwog
ICAgIE5hdGl2ZUltYWdlU2tpYSogc2tpYUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7CiAgICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7
Ci0gICAgYm9vbCBoYXNBbHBoYSA9IHNraWFJbWFnZSA/ICFza2lhSW1hZ2UtPmlzT3BhcXVlKCkg
OiB0cnVlOworICAgIGJvb2wgaGFzQWxwaGEgPSBza2lhSW1hZ2UgPyAhc2tpYUltYWdlLT5iaXRt
YXAoKS5pc09wYXF1ZSgpIDogdHJ1ZTsKICAgICBpZiAoKCFza2lhSW1hZ2UgfHwgaWdub3JlR2Ft
bWFBbmRDb2xvclByb2ZpbGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFscGhhKSkgJiYg
aW1hZ2UtPmRhdGEoKSkgewogICAgICAgICBJbWFnZVNvdXJjZSBkZWNvZGVyKEltYWdlU291cmNl
OjpBbHBoYU5vdFByZW11bHRpcGxpZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgPyBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2Zp
bGVJZ25vcmVkIDogSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCk7CkBA
IC02NCw5ICs2NCw5IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFn
ZSogaW1hZ2UsCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGhhc0FscGhhID0g
ZGVjb2Rlci5mcmFtZUhhc0FscGhhQXRJbmRleCgwKTsKICAgICAgICAgcGl4ZWxzID0gYWRvcHRQ
dHIoZGVjb2Rlci5jcmVhdGVGcmFtZUF0SW5kZXgoMCkpOwotICAgICAgICBpZiAoIXBpeGVscy5n
ZXQoKSB8fCAhcGl4ZWxzLT5pc0RhdGFDb21wbGV0ZSgpIHx8ICFwaXhlbHMtPndpZHRoKCkgfHwg
IXBpeGVscy0+aGVpZ2h0KCkpCisgICAgICAgIGlmICghcGl4ZWxzLmdldCgpIHx8ICFwaXhlbHMt
PmlzRGF0YUNvbXBsZXRlKCkgfHwgIXBpeGVscy0+Yml0bWFwKCkud2lkdGgoKSB8fCAhcGl4ZWxz
LT5iaXRtYXAoKS5oZWlnaHQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
U2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gcGl4ZWxzLT5jb25maWcoKTsKKyAgICAgICAg
U2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gcGl4ZWxzLT5iaXRtYXAoKS5jb25maWcoKTsK
ICAgICAgICAgaWYgKHNraWFDb25maWcgIT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBza2lhSW1hZ2UgPSBwaXhlbHMuZ2V0
KCk7CkBAIC03NiwxMyArNzYsMTMgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VE
YXRhKEltYWdlKiBpbWFnZSwKICAgICAgICAgbmVlZGVkQWxwaGFPcCA9IEFscGhhRG9Vbm11bHRp
cGx5OwogICAgIGlmICghc2tpYUltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU2tC
aXRtYXAmIHNraWFJbWFnZVJlZiA9ICpza2lhSW1hZ2U7CisgICAgU2tCaXRtYXAmIHNraWFJbWFn
ZVJlZiA9IHNraWFJbWFnZS0+Yml0bWFwKCk7CiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKHNr
aWFJbWFnZVJlZik7Ci0gICAgQVNTRVJUKHNraWFJbWFnZS0+cm93Qnl0ZXMoKSA9PSBza2lhSW1h
Z2UtPndpZHRoKCkgKiA0KTsKLSAgICBvdXRwdXRWZWN0b3IucmVzaXplKHNraWFJbWFnZS0+cm93
Qnl0ZXMoKSAqIHNraWFJbWFnZS0+aGVpZ2h0KCkpOwotICAgIHJldHVybiBwYWNrUGl4ZWxzKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNraWFJbWFnZS0+Z2V0UGl4ZWxzKCkpLAor
ICAgIEFTU0VSVChza2lhSW1hZ2VSZWYucm93Qnl0ZXMoKSA9PSBza2lhSW1hZ2VSZWYud2lkdGgo
KSAqIDQpOworICAgIG91dHB1dFZlY3Rvci5yZXNpemUoc2tpYUltYWdlUmVmLnJvd0J5dGVzKCkg
KiBza2lhSW1hZ2VSZWYuaGVpZ2h0KCkpOworICAgIHJldHVybiBwYWNrUGl4ZWxzKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNraWFJbWFnZVJlZi5nZXRQaXhlbHMoKSksCiAgICAg
ICAgICAgICAgICAgICAgICAgU0tfQjMyX1NISUZUID8gU291cmNlRm9ybWF0UkdCQTggOiBTb3Vy
Y2VGb3JtYXRCR1JBOCwKLSAgICAgICAgICAgICAgICAgICAgICBza2lhSW1hZ2UtPndpZHRoKCks
IHNraWFJbWFnZS0+aGVpZ2h0KCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgc2tpYUltYWdl
UmVmLndpZHRoKCksIHNraWFJbWFnZVJlZi5oZWlnaHQoKSwgMCwKICAgICAgICAgICAgICAgICAg
ICAgICBmb3JtYXQsIHR5cGUsIG5lZWRlZEFscGhhT3AsIG91dHB1dFZlY3Rvci5kYXRhKCkpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0lt
YWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
U2tpYS5jcHAKaW5kZXggOTM5YmFjNmZjNTNjODk5OGM1MDNkNTUyZDU1OTNjNTJlOWE5OTk5MS4u
MDZmYzdkNzY1ODJjMDE1NDUwMzNjZjc4OGUyYTkyMzdmNWI5YTU3ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcApAQCAtMjI5
LDcgKzIyOSw3IEBAIHN0YXRpYyB2b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZvcm1Db250ZXh0U2tp
YSogcGxhdGZvcm1Db250ZXh0LCBjb25zdCBOYXRpdmVJbWFnCiAgICAgICAgIC8vIGlzIHNvbWV0
aGluZyBpbnRlcmVzdGluZyBnb2luZyBvbiB3aXRoIHRoZSBtYXRyaXggKGxpa2UgYSByb3RhdGlv
bikuCiAgICAgICAgIC8vIE5vdGU6IGZvciBzZXJpYWxpemF0aW9uLCB3ZSB3aWxsIHdhbnQgdG8g
c3Vic2V0IHRoZSBiaXRtYXAgZmlyc3Qgc28KICAgICAgICAgLy8gd2UgZG9uJ3Qgc2VuZCBleHRy
YSBwaXhlbHMuCi0gICAgICAgIGNhbnZhcy0+ZHJhd0JpdG1hcFJlY3QoYml0bWFwLCAmc3JjUmVj
dCwgZGVzdFJlY3QsICZwYWludCk7CisgICAgICAgIGNhbnZhcy0+ZHJhd0JpdG1hcFJlY3QoYml0
bWFwLmJpdG1hcCgpLCAmc3JjUmVjdCwgZGVzdFJlY3QsICZwYWludCk7CiAgICAgfQogfQogCkBA
IC0zMzEsNyArMzMxLDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LAogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE5vIG5lZWQgdG8gZG8gbmljZSBy
ZXNhbXBsaW5nLgogICAgICAgICBTa0JpdG1hcCBzcmNTdWJzZXQ7Ci0gICAgICAgIGJpdG1hcC0+
ZXh0cmFjdFN1YnNldCgmc3JjU3Vic2V0LCBzcmNSZWN0KTsKKyAgICAgICAgYml0bWFwLT5iaXRt
YXAoKS5leHRyYWN0U3Vic2V0KCZzcmNTdWJzZXQsIHNyY1JlY3QpOwogICAgICAgICBzaGFkZXIg
PSBTa1NoYWRlcjo6Q3JlYXRlQml0bWFwU2hhZGVyKHNyY1N1YnNldCwgU2tTaGFkZXI6OmtSZXBl
YXRfVGlsZU1vZGUsIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlKTsKICAgICB9CiAKQEAgLTM4
NSwxMiArMzg1LDEyIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiAg
ICAgV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhKiBmcmFtZSA9IGZyYW1lQXRJbmRleCgwKTsKIAog
ICAgIGlmIChmcmFtZSAmJiBzaXplKCkud2lkdGgoKSA9PSAxICYmIHNpemUoKS5oZWlnaHQoKSA9
PSAxKSB7Ci0gICAgICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygqZnJhbWUpOwotICAgICAgICBp
ZiAoIWZyYW1lLT5nZXRQaXhlbHMoKSkKKyAgICAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKGZy
YW1lLT5iaXRtYXAoKSk7CisgICAgICAgIGlmICghZnJhbWUtPmJpdG1hcCgpLmdldFBpeGVscygp
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIG1faXNTb2xpZENvbG9yID0gdHJ1ZTsK
LSAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IoZnJhbWUtPmdldENvbG9yKDAsIDApKTsKKyAg
ICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IoZnJhbWUtPmJpdG1hcCgpLmdldENvbG9yKDAsIDAp
KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcAppbmRleCA4ZmUxMWEzNzIyY2JiMjYyYzEw
ODJmNTY5NzgxN2EyMTM0NDM3NzI3Li5mMzA4NTc5YjgxZGZiZWUyOTFmZTkwMDhhYWNkNTE3NmRi
NDc4OGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L05hdGl2ZUltYWdlU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCkBAIC0zOSwxNSArMzksMTUgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogTmF0aXZlSW1hZ2VTa2lhOjpOYXRpdmVJbWFnZVNraWEoKQotICAgIDog
bV9pc0RhdGFDb21wbGV0ZShmYWxzZSksCi0gICAgICBtX3Jlc2l6ZVJlcXVlc3RzKDApCisgICAg
OiBtX3Jlc2l6ZVJlcXVlc3RzKDApLAorICAgICAgbV9pc0RhdGFDb21wbGV0ZShmYWxzZSkKIHsK
IH0KIAogTmF0aXZlSW1hZ2VTa2lhOjpOYXRpdmVJbWFnZVNraWEoY29uc3QgU2tCaXRtYXAmIG90
aGVyKQotICAgIDogU2tCaXRtYXAob3RoZXIpLAotICAgICAgbV9pc0RhdGFDb21wbGV0ZShmYWxz
ZSksCi0gICAgICBtX3Jlc2l6ZVJlcXVlc3RzKDApCisgICAgOiBtX2ltYWdlKG90aGVyKSwKKyAg
ICAgIG1fcmVzaXplUmVxdWVzdHMoMCksCisgICAgICBtX2lzRGF0YUNvbXBsZXRlKGZhbHNlKQog
ewogfQogCkBAIC01Nyw3ICs1Nyw3IEBAIE5hdGl2ZUltYWdlU2tpYTo6fk5hdGl2ZUltYWdlU2tp
YSgpCiAKIGludCBOYXRpdmVJbWFnZVNraWE6OmRlY29kZWRTaXplKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZ2V0U2l6ZSgpICsgbV9yZXNpemVkSW1hZ2UuZ2V0U2l6ZSgpOworICAgIHJldHVybiBt
X2ltYWdlLmdldFNpemUoKSArIG1fcmVzaXplZEltYWdlLmdldFNpemUoKTsKIH0KIAogYm9vbCBO
YXRpdmVJbWFnZVNraWE6Omhhc1Jlc2l6ZWRCaXRtYXAoY29uc3QgU2tJUmVjdCYgc3JjU3Vic2V0
LCBpbnQgZGVzdFdpZHRoLCBpbnQgZGVzdEhlaWdodCkgY29uc3QKQEAgLTc1LDcgKzc1LDcgQEAg
U2tCaXRtYXAgTmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKGNvbnN0IFNrSVJlY3QmIHNy
Y1N1YnNldCwKICAgICAgICAgICAgICYmIHNob3VsZENhY2hlUmVzYW1wbGluZyhzcmNTdWJzZXQs
IGRlc3RXaWR0aCwgZGVzdEhlaWdodCwgZGVzdFZpc2libGVTdWJzZXQpOwogCiAgICAgICAgIFNr
Qml0bWFwIHN1YnNldDsKLSAgICAgICAgZXh0cmFjdFN1YnNldCgmc3Vic2V0LCBzcmNTdWJzZXQp
OworICAgICAgICBtX2ltYWdlLmV4dHJhY3RTdWJzZXQoJnN1YnNldCwgc3JjU3Vic2V0KTsKICAg
ICAgICAgaWYgKCFzaG91bGRDYWNoZSkgewogICAgICAgICAgICAgLy8gSnVzdCByZXNpemUgdGhl
IHZpc2libGUgc3Vic2V0IGFuZCByZXR1cm4gaXQuCiAgICAgICAgICAgICBTa0JpdG1hcCByZXNp
emVkSW1hZ2UgPSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZShzdWJzZXQsIHNraWE6Oklt
YWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLCBkZXN0V2lkdGgsIGRlc3RIZWlnaHQsIGRl
c3RWaXNpYmxlU3Vic2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5oCmluZGV4IGUxMTM1ZWE4YWI1NGI1NjBiNWQ5
MjhiOGVlZDAzNGU0MmIwZDBiYWYuLmE3MGE0N2M0MjA0MzJiMDRlODg4YzUzNjYxNjE5YmQ1MTM1
YzRiNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
TmF0aXZlSW1hZ2VTa2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9OYXRpdmVJbWFnZVNraWEuaApAQCAtMzgsOSArMzgsOSBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAvLyBUaGlzIG9iamVjdCBpcyB1c2VkIGFzIHRoZSAibmF0aXZlIGltYWdlIiBpbiBv
dXIgcG9ydC4gV2hlbiBXZWJLaXQgdXNlcwotLy8gIk5hdGl2ZUltYWdlUHRyIiwgaXQgaXMgYSBw
b2ludGVyIHRvIHRoaXMgdHlwZS4gSXQgaXMgYW4gU2tCaXRtYXAsIGJ1dCBhbHNvCisvLyAiTmF0
aXZlSW1hZ2VQdHIiLCBpdCBpcyBhIHBvaW50ZXIgdG8gdGhpcyB0eXBlLiBJdCBoYXMgYW4gU2tC
aXRtYXAsIGFuZCBhbHNvCiAvLyBzdG9yZXMgYSBjYWNoZWQgcmVzaXplZCBpbWFnZS4KLWNsYXNz
IE5hdGl2ZUltYWdlU2tpYSA6IHB1YmxpYyBTa0JpdG1hcCB7CitjbGFzcyBOYXRpdmVJbWFnZVNr
aWEgewogcHVibGljOgogICAgIE5hdGl2ZUltYWdlU2tpYSgpOwogICAgIH5OYXRpdmVJbWFnZVNr
aWEoKTsKQEAgLTYyLDYgKzYyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIGVudGlyZSBpbWFnZSBoYXMgYmVlbiBkZWNvZGVkLgogICAgIGJvb2wgaXNEYXRhQ29tcGxl
dGUoKSBjb25zdCB7IHJldHVybiBtX2lzRGF0YUNvbXBsZXRlOyB9CiAKKyAgICAvLyBHZXQgcmVm
ZXJlbmNlIHRvIHRoZSBpbnRlcm5hbCBTa0JpdG1hcCByZXByZXNlbnRpbmcgdGhpcyBpbWFnZS4K
KyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZTsgfQor
ICAgIFNrQml0bWFwJiBiaXRtYXAoKSB7IHJldHVybiBtX2ltYWdlOyB9CisKICAgICAvLyBXZSBj
YW4ga2VlcCBhIHJlc2l6ZWQgdmVyc2lvbiBvZiB0aGUgYml0bWFwIGNhY2hlZCBvbiB0aGlzIG9i
amVjdC4KICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMg
YSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUKICAgICAvLyBnaXZlbiBpbWFnZSBzdWJzZXQgd2l0aCB0
aGUgZ2l2ZW4gZGltZW5zaW9ucyBhbmQgc3Vic2V0cy4KQEAgLTExNiw5ICsxMjAsOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0SGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrSVJlY3QmIGRlc3RTdWJzZXQpIGNv
bnN0OwogCi0gICAgLy8gU2V0IHRvIHRydWUgd2hlbiB0aGUgZGF0YSBpcyBjb21wbGV0ZS4gQmVm
b3JlIHRoZSBlbnRpcmUgaW1hZ2UgaGFzCi0gICAgLy8gbG9hZGVkLCB3ZSBkbyBub3Qgd2FudCB0
byBjYWNoZSBhIHJlc2l6ZS4KLSAgICBib29sIG1faXNEYXRhQ29tcGxldGU7CisgICAgLy8gVGhl
IG9yaWdpbmFsIGltYWdlLgorICAgIFNrQml0bWFwIG1faW1hZ2U7CiAKICAgICAvLyBUaGUgY2Fj
aGVkIGJpdG1hcC4gVGhpcyB3aWxsIGJlIGVtcHR5KCkgaWYgdGhlcmUgaXMgbm8gY2FjaGVkIGlt
YWdlLgogICAgIG11dGFibGUgU2tCaXRtYXAgbV9yZXNpemVkSW1hZ2U7CkBAIC0xMzgsNiArMTQx
LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gaW1hZ2UgcmVzaXplcy4KICAgICBtdXRhYmxlIENhY2hl
ZEltYWdlSW5mbyBtX2NhY2hlZEltYWdlSW5mbzsKICAgICBtdXRhYmxlIGludCBtX3Jlc2l6ZVJl
cXVlc3RzOworCisgICAgLy8gU2V0IHRvIHRydWUgd2hlbiB0aGUgZGF0YSBpcyBjb21wbGV0ZS4g
QmVmb3JlIHRoZSBlbnRpcmUgaW1hZ2UgaGFzCisgICAgLy8gbG9hZGVkLCB3ZSBkbyBub3Qgd2Fu
dCB0byBjYWNoZSBhIHJlc2l6ZS4KKyAgICBib29sIG1faXNEYXRhQ29tcGxldGU7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRl
cm5Ta2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVy
blNraWEuY3BwCmluZGV4IDcyZmFjNzczNDkyYmE0ZGE0ZmVmMTQwMjBmMTczMGI2MDA1ZmMyZDQu
LjRkMzZjNTQ0OWY5YTA5Njk4ZDUyMjI4ZTYwZWM4Njc1NjFiMTIzYjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVyblNraWEuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVyblNraWEuY3BwCkBA
IC01OSwxMyArNTksMTMgQEAgUGxhdGZvcm1QYXR0ZXJuUHRyIFBhdHRlcm46OnBsYXRmb3JtUGF0
dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2YKICAgICAvLyBhbmQgZXhw
YW5kZWQgc2NhbGUgYW5kIHNrZXcgaW46CiAgICAgLy8gTGF5b3V0VGVzdHMvc3ZnL1czQy1TVkct
MS4xL3BzZXJ2ZXJzLWdyYWQtMDYtYi5zdmcKIAotICAgIFNrQml0bWFwKiBibSA9IG1fdGlsZUlt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGNvbnN0IE5hdGl2ZUltYWdl
U2tpYSogYm0gPSBtX3RpbGVJbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAg
ICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgYml0bWFwLCByZXR1cm4gYSB0cmFuc3BhcmVudCBzaGFk
ZXIuCiAgICAgaWYgKCFibSkKICAgICAgICAgbV9wYXR0ZXJuID0gbmV3IFNrQ29sb3JTaGFkZXIo
U2tDb2xvclNldEFSR0IoMCwgMCwgMCwgMCkpOwogCiAgICAgZWxzZSBpZiAobV9yZXBlYXRYICYm
IG1fcmVwZWF0WSkKLSAgICAgICAgbV9wYXR0ZXJuID0gU2tTaGFkZXI6OkNyZWF0ZUJpdG1hcFNo
YWRlcigqYm0sIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlLCBTa1NoYWRlcjo6a1JlcGVhdF9U
aWxlTW9kZSk7CisgICAgICAgIG1fcGF0dGVybiA9IFNrU2hhZGVyOjpDcmVhdGVCaXRtYXBTaGFk
ZXIoYm0tPmJpdG1hcCgpLCBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSwgU2tTaGFkZXI6OmtS
ZXBlYXRfVGlsZU1vZGUpOwogCiAgICAgZWxzZSB7CiAKQEAgLTgzLDExICs4MywxMSBAQCBQbGF0
Zm9ybVBhdHRlcm5QdHIgUGF0dGVybjo6cGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZgogICAgICAgICAvLyBvcmlnaW5hbCwgdGhlbiBjb3B5IHRoZSBv
cmlnbmFsIGludG8gaXQuCiAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGVyZSBhIGJldHRlciB3YXkg
dG8gcGFkIChub3Qgc2NhbGUpIGFuIGltYWdlIGluIHNraWE/CiAgICAgICAgIFNrQml0bWFwIGJt
MjsKLSAgICAgICAgYm0yLnNldENvbmZpZyhibS0+Y29uZmlnKCksIGJtLT53aWR0aCgpICsgZXhw
YW5kVywgYm0tPmhlaWdodCgpICsgZXhwYW5kSCk7CisgICAgICAgIGJtMi5zZXRDb25maWcoYm0t
PmJpdG1hcCgpLmNvbmZpZygpLCBibS0+Yml0bWFwKCkud2lkdGgoKSArIGV4cGFuZFcsIGJtLT5i
aXRtYXAoKS5oZWlnaHQoKSArIGV4cGFuZEgpOwogICAgICAgICBibTIuYWxsb2NQaXhlbHMoKTsK
ICAgICAgICAgYm0yLmVyYXNlQVJHQigweDAwLCAweDAwLCAweDAwLCAweDAwKTsKICAgICAgICAg
U2tDYW52YXMgY2FudmFzKGJtMik7Ci0gICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKCpibSwgMCwg
MCk7CisgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKGJtLT5iaXRtYXAoKSwgMCwgMCk7CiAgICAg
ICAgIG1fcGF0dGVybiA9IFNrU2hhZGVyOjpDcmVhdGVCaXRtYXBTaGFkZXIoYm0yLCB0aWxlTW9k
ZVgsIHRpbGVNb2RlWSk7CiAgICAgfQogICAgIG1fcGF0dGVybi0+c2V0TG9jYWxNYXRyaXgobV9w
YXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4IGNlOGIyN2NlZDVhMzRj
MDVlYTcyYTAwN2VmNmIwNTZlMGMzY2NhNzkuLjdiNDg0N2Y0NzNhODM1NTQyMjY4OGUwMGRmYTJl
Y2ZiYjZhZDU5N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0xNTQsNyArMTU0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBpbmxpbmUgUGl4ZWxEYXRhKiBnZXRBZGRyKGludCB4LCBpbnQgeSkK
ICAgICAgICAgewogI2lmIFVTRShTS0lBKQotICAgICAgICAgICAgcmV0dXJuIG1fYml0bWFwLmdl
dEFkZHIzMih4LCB5KTsKKyAgICAgICAgICAgIHJldHVybiBtX2JpdG1hcC5iaXRtYXAoKS5nZXRB
ZGRyMzIoeCwgeSk7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICAgICAgICAgIG1faW1hZ2UgPSBt
X3BpeG1hcC50b0ltYWdlKCk7CiAgICAgICAgICAgICBtX3BpeG1hcCA9IFFQaXhtYXAoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1h
Z2VEZWNvZGVyU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCmluZGV4IDcyNGZhZWIxZmQwZTQ2Zjg2ZmU1MDUz
MDI5NzE3NGY4YWZhOWYyYzUuLjkzOTdhZDVjMzAwNzgyNzkyNGU0ZmY5MDNmZDQwYmFjMDY0OTVj
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Nr
aWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcApAQCAtNDcsNyArNDcsNyBAQCBJ
bWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIp
CiAgICAgbV9iaXRtYXAgPSBvdGhlci5tX2JpdG1hcDsKICAgICAvLyBLZWVwIHRoZSBwaXhlbHMg
bG9ja2VkIHNpbmNlIHdlIHdpbGwgYmUgd3JpdGluZyBkaXJlY3RseSBpbnRvIHRoZQogICAgIC8v
IGJpdG1hcCB0aHJvdWdob3V0IHRoaXMgb2JqZWN0J3MgbGlmZXRpbWUuCi0gICAgbV9iaXRtYXAu
bG9ja1BpeGVscygpOworICAgIG1fYml0bWFwLmJpdG1hcCgpLmxvY2tQaXhlbHMoKTsKICAgICBz
ZXRPcmlnaW5hbEZyYW1lUmVjdChvdGhlci5vcmlnaW5hbEZyYW1lUmVjdCgpKTsKICAgICBzZXRT
dGF0dXMob3RoZXIuc3RhdHVzKCkpOwogICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkp
OwpAQCAtNTgsNyArNTgsNyBAQCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29u
c3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAKIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEo
KQogewotICAgIG1fYml0bWFwLnJlc2V0KCk7CisgICAgbV9iaXRtYXAuYml0bWFwKCkucmVzZXQo
KTsKICAgICBtX3N0YXR1cyA9IEZyYW1lRW1wdHk7CiAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0
IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKCkKICAgICAvLyBjYWxs
cyB0aGlzIHRvIGZyZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxpa2UK
QEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCiAKIHZv
aWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEoKQogewotICAgIG1fYml0bWFwLmVyYXNl
QVJHQigwLCAwLCAwLCAwKTsKKyAgICBtX2JpdG1hcC5iaXRtYXAoKS5lcmFzZUFSR0IoMCwgMCwg
MCwgMCk7CiB9CiAKIGJvb2wgSW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEoY29uc3QgSW1hZ2VG
cmFtZSYgb3RoZXIpCkBAIC03Niw5ICs3Niw5IEBAIGJvb2wgSW1hZ2VGcmFtZTo6Y29weUJpdG1h
cERhdGEoY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fYml0bWFwLnJlc2V0KCk7CisgICAgbV9iaXRt
YXAuYml0bWFwKCkucmVzZXQoKTsKICAgICBjb25zdCBOYXRpdmVJbWFnZVNraWEmIG90aGVyQml0
bWFwID0gb3RoZXIubV9iaXRtYXA7Ci0gICAgcmV0dXJuIG90aGVyQml0bWFwLmNvcHlUbygmbV9i
aXRtYXAsIG90aGVyQml0bWFwLmNvbmZpZygpKTsKKyAgICByZXR1cm4gb3RoZXJCaXRtYXAuYml0
bWFwKCkuY29weVRvKCZtX2JpdG1hcC5iaXRtYXAoKSwgb3RoZXJCaXRtYXAuYml0bWFwKCkuY29u
ZmlnKCkpOwogfQogCiBib29sIEltYWdlRnJhbWU6OnNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQg
bmV3SGVpZ2h0KQpAQCAtODYsOCArODYsOCBAQCBib29sIEltYWdlRnJhbWU6OnNldFNpemUoaW50
IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQogICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIG9uY2UsIGl0IHdpbGwgbGVhayBtZW1vcnkKICAgICAvLyBvdGhlcndpc2Uu
CiAgICAgQVNTRVJUKHdpZHRoKCkgPT0gMCAmJiBoZWlnaHQoKSA9PSAwKTsKLSAgICBtX2JpdG1h
cC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBuZXdXaWR0aCwgbmV3SGVp
Z2h0KTsKLSAgICBpZiAoIW1fYml0bWFwLmFsbG9jUGl4ZWxzKCkpCisgICAgbV9iaXRtYXAuYml0
bWFwKCkuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgbmV3V2lkdGgsIG5l
d0hlaWdodCk7CisgICAgaWYgKCFtX2JpdG1hcC5iaXRtYXAoKS5hbGxvY1BpeGVscygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB6ZXJvRmlsbFBpeGVsRGF0YSgpOwpAQCAtMTAyLDEy
ICsxMDIsMTIgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSgp
IGNvbnN0CiAKIGJvb2wgSW1hZ2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdAogewotICAgIHJldHVy
biAhbV9iaXRtYXAuaXNPcGFxdWUoKTsKKyAgICByZXR1cm4gIW1fYml0bWFwLmJpdG1hcCgpLmlz
T3BhcXVlKCk7CiB9CiAKIHZvaWQgSW1hZ2VGcmFtZTo6c2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkK
IHsKLSAgICBtX2JpdG1hcC5zZXRJc09wYXF1ZSghYWxwaGEpOworICAgIG1fYml0bWFwLmJpdG1h
cCgpLnNldElzT3BhcXVlKCFhbHBoYSk7CiB9CiAKIHZvaWQgSW1hZ2VGcmFtZTo6c2V0Q29sb3JQ
cm9maWxlKGNvbnN0IENvbG9yUHJvZmlsZSYgY29sb3JQcm9maWxlKQpAQCAtMTI0LDEyICsxMjQs
MTIgQEAgdm9pZCBJbWFnZUZyYW1lOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKQogCiBp
bnQgSW1hZ2VGcmFtZTo6d2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBtX2JpdG1hcC53aWR0
aCgpOworICAgIHJldHVybiBtX2JpdG1hcC5iaXRtYXAoKS53aWR0aCgpOwogfQogCiBpbnQgSW1h
Z2VGcmFtZTo6aGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9iaXRtYXAuaGVpZ2h0KCk7
CisgICAgcmV0dXJuIG1fYml0bWFwLmJpdG1hcCgpLmhlaWdodCgpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDRmMDVkMzczZmUyZmQ5
YTc3YTk2MWJlYWYwMzhkYmEwMWE3ZjFiMDMuLmE5MDU2NzI5Yzg5MDcyMmQ1MTVhYzFiYWNlMzY3
MTVkNjcwZTg5OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMDgtMjQgIEpvaG4gQmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBb
Y2hyb21pdW1dIExlYWtpbmcgU2tCaXRtYXBzIGZvciBiYWNrZ3JvdW5kIGltYWdlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY0ODgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNpbXBs
eSBjaGFuZ2VzIE5hdGl2ZUltYWdlU2tpYSB0byBoYXZlIGEgU2tCaXRtYXAgaW5zdGVhZCBvZgor
ICAgICAgICBkZXJpdmluZyBmcm9tIFNrQml0bWFwLiBBbGwgZGVwZW5kZW50IGNvZGUgdXBkYXRl
ZCB0byBhY2Nlc3MgdGhlIG1lbWJlcgorICAgICAgICBpbnN0ZWFkIG9mIGNhbGxpbmcgU2tCaXRt
YXAgbWV0aG9kcyBvbiBOYXRpdmVJbWFnZVNraWEgb2JqZWN0cy4gVGhpcworICAgICAgICBtYXkg
b3IgbWF5IG5vdCBmaXggdGhlIG1lbW9yeSBsZWFrLCBidXQgaXQncyBkZWZpbml0ZWx5IGEgYnVn
IHRoYXQgY291bGQKKyAgICAgICAgY2F1c2UgbWVtb3J5IGxlYWtzLgorCisgICAgICAgICogc3Jj
L1BsYXRmb3JtQnJpZGdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpj
bGlwYm9hcmRXcml0ZUltYWdlKToKKyAgICAgICAgKiBzcmMvV2ViSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2VEZWNvZGVyOjpnZXRGcmFtZUF0SW5kZXgpOgorICAg
ICAgICAqIHNyYy9XZWJJbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbWFnZTo6
ZnJvbURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbWFnZTo6b3BlcmF0b3I9KToKKwogMjAx
MS0wOC0yMyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFdlYlNl
YXJjaGFibGVGb3JtRGF0YSBjcmFzaGVzIHdoZW4gZ2l2ZW4gYSBkZXRhY2hlZCBIVE1MRm9ybUVs
ZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtQnJp
ZGdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtQnJpZGdlLmNwcApp
bmRleCA3ZDIxODQyMDQ2NDE1YTBhMzkyN2EwMTlmNWIzOWMzZDdlZGI3MDk3Li4zN2M4NWU5NzE2
OTQyNmQ0OWY3MGZlYjYwYTQzMGUxNmM0NGM4YzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9QbGF0Zm9ybUJyaWRnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvUGxhdGZvcm1CcmlkZ2UuY3BwCkBAIC0yMDksNyArMjA5LDcgQEAgdm9pZCBQbGF0
Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVJbWFnZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB0aXRs
ZSkKIHsKICNpZiBXRUJLSVRfVVNJTkdfU0tJQQotICAgIFdlYkltYWdlIHdlYkltYWdlKCppbWFn
ZSk7CisgICAgV2ViSW1hZ2Ugd2ViSW1hZ2UoaW1hZ2UtPmJpdG1hcCgpKTsKICNlbHNlCiAgICAg
V2ViSW1hZ2Ugd2ViSW1hZ2UoaW1hZ2UpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSW1hZ2VEZWNvZGVyLmNwcAppbmRleCAwODE1M2JhMDg4NDc1OWY0MjQ4NjBk
ZmYxNDlkZDIxMTU3MDljMGYyLi43ZDliYWEwZjA2NTUwNzk5MDBlMzJhNTc5Y2I0ODYzNjFlMGMy
NTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFnZURlY29k
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkltYWdlRGVjb2Rlci5j
cHAKQEAgLTExMyw3ICsxMTMsNyBAQCBXZWJJbWFnZSBXZWJJbWFnZURlY29kZXI6OmdldEZyYW1l
QXRJbmRleChpbnQgaW5kZXggPSAwKSBjb25zdAogICAgICAgICByZXR1cm4gV2ViSW1hZ2UoKTsK
ICNpZiBXRUJLSVRfVVNJTkdfU0tJQQogICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGltYWdl
ID0gYWRvcHRQdHIoZnJhbWVCdWZmZXItPmFzTmV3TmF0aXZlSW1hZ2UoKSk7Ci0gICAgcmV0dXJu
IFdlYkltYWdlKCppbWFnZSk7CisgICAgcmV0dXJuIFdlYkltYWdlKGltYWdlLT5iaXRtYXAoKSk7
CiAjZWxpZiBXRUJLSVRfVVNJTkdfQ0cKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IENHIHNpZGUg
b2YgdGhpcy4KICAgICByZXR1cm4gV2ViSW1hZ2UoZnJhbWVCdWZmZXItPmFzTmV3TmF0aXZlSW1h
Z2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFnZVNr
aWEuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VTa2lhLmNwcAppbmRl
eCAwMjZiY2RlZWQ1Y2JiYzU4MmE2YWJkNTU3NWU0YTgwNWY3MmI3Y2I1Li4xZTZmNGQxMmU4YWI3
YjdjMGZlYzFlNzIxOWU4NDIzZGQ0MTQ2N2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJbWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkltYWdlU2tpYS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgV2ViSW1hZ2UgV2ViSW1hZ2U6
OmZyb21EYXRhKGNvbnN0IFdlYkRhdGEmIGRhdGEsIGNvbnN0IFdlYlNpemUmIGRlc2lyZWRTaXpl
KQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBXZWJJbWFnZSgpOwogCi0gICAgcmV0
dXJuIFdlYkltYWdlKCpmcmFtZSk7CisgICAgcmV0dXJuIFdlYkltYWdlKGZyYW1lLT5iaXRtYXAo
KSk7CiB9CiAKIHZvaWQgV2ViSW1hZ2U6OnJlc2V0KCkKQEAgLTExMyw3ICsxMTMsNyBAQCBXZWJJ
bWFnZSYgV2ViSW1hZ2U6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPEltYWdlPiYgaW1hZ2Up
CiB7CiAgICAgTmF0aXZlSW1hZ2VQdHIgcDsKICAgICBpZiAoaW1hZ2UuZ2V0KCkgJiYgKHAgPSBp
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkpCi0gICAgICAgIGFzc2lnbigqcCk7
CisgICAgICAgIGFzc2lnbihwLT5iaXRtYXAoKSk7CiAgICAgZWxzZQogICAgICAgICByZXNldCgp
OwogICAgIHJldHVybiAqdGhpczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Ry
YWdJbWFnZVRlc3QuY3BwCmluZGV4IDhjZTZmZTI5NTU2ZjJjMjNjNDc0MWIwZjk0YzE1NjA2ZWRl
OGI1OWUuLmE0OWE3MjM0YzMzN2VjMjQxNTY2ZTdmMTU0ODgyMDNhYzdmYzQ0OTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcApAQCAtNTMsOSAr
NTMsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9zaXplKHNpemUpCiAgICAgewogICAgICAgICBt
X25hdGl2ZUltYWdlID0gbmV3IE5hdGl2ZUltYWdlU2tpYSgpOwotICAgICAgICBtX25hdGl2ZUlt
YWdlLT5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwKTsKLSAg
ICAgICAgbV9uYXRpdmVJbWFnZS0+YWxsb2NQaXhlbHMoKTsKKyAgICAgICAgbV9uYXRpdmVJbWFn
ZS0+Yml0bWFwKCkuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSwgMCk7CisgICAgICAgIG1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLmFsbG9jUGl4ZWxz
KCk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+VGVzdEltYWdlKCkKQEAgLTE0Myw4ICsxNDMsOCBA
QCBURVNUKERyYWdJbWFnZVRlc3QsIENyZWF0ZURyYWdJbWFnZSkKICAgICAgICAgUmVmUHRyPFRl
c3RJbWFnZT4gdGVzdEltYWdlKFRlc3RJbWFnZTo6Y3JlYXRlKEludFNpemUoMSwgMSkpKTsKICAg
ICAgICAgRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSA9IGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSh0
ZXN0SW1hZ2UuZ2V0KCkpOwogICAgICAgICBBU1NFUlRfVFJVRShkcmFnSW1hZ2UpOwotICAgICAg
ICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2sxKCpkcmFnSW1hZ2UpLCBsb2NrMigqKHRlc3RJbWFnZS0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkpOwotICAgICAgICBFWFBFQ1RfTkUoZHJhZ0lt
YWdlLT5nZXRQaXhlbHMoKSwgdGVzdEltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
LT5nZXRQaXhlbHMoKSk7CisgICAgICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jazEoKmRyYWdJbWFn
ZSksIGxvY2syKHRlc3RJbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS0+Yml0bWFw
KCkpOworICAgICAgICBFWFBFQ1RfTkUoZHJhZ0ltYWdlLT5nZXRQaXhlbHMoKSwgdGVzdEltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpLT5iaXRtYXAoKS5nZXRQaXhlbHMoKSk7CiAg
ICAgfQogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105116</attachid>
            <date>2011-08-24 18:46:41 -0700</date>
            <delta_ts>2011-08-25 09:42:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66488-20110824184639.patch</filename>
            <type>text/plain</type>
            <size>24846</size>
            <attacher name="John Bates">jbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM3MDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhYTY4MTQ3MjEyYmEyM2M1
MWUxYzVjMGZkOGU2NTI1YWYxNDg5YWJkLi5lOTJmMzAwYmQ0NzBiYzFiY2FkMzIxYzNiYTRhNTQ0
OGYwMTJlNjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDgtMjQgIEpvaG4g
QmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIExlYWtpbmcg
U2tCaXRtYXBzIGZvciBiYWNrZ3JvdW5kIGltYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY0ODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNpbXBseSBjaGFuZ2VzIE5hdGl2ZUlt
YWdlU2tpYSB0byBoYXZlIGEgU2tCaXRtYXAgaW5zdGVhZCBvZgorICAgICAgICBkZXJpdmluZyBm
cm9tIFNrQml0bWFwLiBBbGwgZGVwZW5kZW50IGNvZGUgdXBkYXRlZCB0byBhY2Nlc3MgdGhlIG1l
bWJlcgorICAgICAgICBpbnN0ZWFkIG9mIGNhbGxpbmcgU2tCaXRtYXAgbWV0aG9kcyBvbiBOYXRp
dmVJbWFnZVNraWEgb2JqZWN0cy4gVGhpcworICAgICAgICBtYXkgb3IgbWF5IG5vdCBmaXggdGhl
IG1lbW9yeSBsZWFrLCBidXQgaXQncyBkZWZpbml0ZWx5IGEgYnVnIHRoYXQgY291bGQKKyAgICAg
ICAgY2F1c2UgbWVtb3J5IGxlYWtzLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRHJh
Z0ltYWdlQ2hyb21pdW1Ta2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFn
ZUZyb21JbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZv
cm1JbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjp1cGRhdGVGcm9t
SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5n
bGVGcmFtZVNraWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlU2luZ2xlRnJhbWVT
a2lhOjpjdXJyZW50RnJhbWVIYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZVNpbmdsZUZyYW1lU2tpYTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZVNp
bmdsZUZyYW1lU2tpYTo6bm90U29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTa0JpdG1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF0
aXZlSW1hZ2VTa2lhOjpOYXRpdmVJbWFnZVNraWEpOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZl
SW1hZ2VTa2lhOjpkZWNvZGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNr
aWE6OnJlc2l6ZWRCaXRtYXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0
aXZlSW1hZ2VTa2lhLmg6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWE6OmJpdG1h
cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJuU2tpYS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuOjpwbGF0Zm9ybVBhdHRlcm4pOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6Z2V0QWRkcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
c2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldEhhc0FscGhh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OndpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmhlaWdodCk6CisKIDIwMTEtMDgtMjQgIFBhdmVsIEZlbGRtYW4gIDxw
ZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGV4dHJhY3QgQ29u
c29sZU1lc3NhZ2UgaW50byBhIHNlcGFyYXRlIGZpbGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bVNraWEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lhLmNwcAppbmRl
eCBlNWMxY2VlNzMyYWM4NTg1NTMxOGMxYmFiYmU0M2U1ZDdhNzk2ZjY1Li5lNWNhMTc1N2E1YWFi
NTk2Zjg3ZGQ2YjJkYTA1YmViZjY1M2QxNGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bVNraWEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtU2tpYS5jcHAKQEAgLTEw
MSw3ICsxMDEsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdl
KiBpbWFnZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBTa0JpdG1hcCogZHJhZ0ltYWdlID0g
bmV3IFNrQml0bWFwKCk7Ci0gICAgYml0bWFwLT5jb3B5VG8oZHJhZ0ltYWdlLCBTa0JpdG1hcDo6
a0FSR0JfODg4OF9Db25maWcpOworICAgIGJpdG1hcC0+Yml0bWFwKCkuY29weVRvKGRyYWdJbWFn
ZSwgU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKICAgICByZXR1cm4gZHJhZ0ltYWdlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9QbGF0Zm9ybUltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsYXRmb3JtSW1hZ2UuY3BwCmluZGV4IGMzMWIyOWM0YjQwMzEwZjU4YTgwMmQ3NGU5
NWIyYjdkYWIwMDQ1YTcuLjk2NzJjOWM3YjY2NTlmZDU3NDgxMzU5YmRjZmI3OGEyMDU2YmNkMDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Bs
YXRmb3JtSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsYXRmb3JtSW1hZ2UuY3BwCkBAIC01MCwxMCArNTAsMTAgQEAgdm9pZCBQbGF0Zm9y
bUltYWdlOjp1cGRhdGVGcm9tSW1hZ2UoTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UpCiAjaWYg
VVNFKFNLSUEpCiAgICAgLy8gVGhlIGxheWVyIGNvbnRhaW5zIGFuIEltYWdlLgogICAgIE5hdGl2
ZUltYWdlU2tpYSogc2tpYUltYWdlID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VTa2lhKj4obmF0
aXZlSW1hZ2UpOwotICAgIGNvbnN0IFNrQml0bWFwKiBza2lhQml0bWFwID0gc2tpYUltYWdlOwor
ICAgIEFTU0VSVChza2lhSW1hZ2UpOworICAgIGNvbnN0IFNrQml0bWFwJiBza2lhQml0bWFwID0g
c2tpYUltYWdlLT5iaXRtYXAoKTsKIAotICAgIEludFNpemUgYml0bWFwU2l6ZShza2lhQml0bWFw
LT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKHNraWFCaXRtYXAp
OworICAgIEludFNpemUgYml0bWFwU2l6ZShza2lhQml0bWFwLndpZHRoKCksIHNraWFCaXRtYXAu
aGVpZ2h0KCkpOwogI2VsaWYgVVNFKENHKQogICAgIC8vIE5hdGl2ZUltYWdlUHRyIGlzIGEgQ0dJ
bWFnZVJlZiBvbiBNYWMgT1MgWC4KICAgICBpbnQgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgobmF0
aXZlSW1hZ2UpOwpAQCAtNjksMTAgKzY5LDEwIEBAIHZvaWQgUGxhdGZvcm1JbWFnZTo6dXBkYXRl
RnJvbUltYWdlKE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKQogICAgIH0KIAogI2lmIFVTRShT
S0lBKQotICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygqc2tpYUJpdG1hcCk7CisgICAgU2tBdXRv
TG9ja1BpeGVscyBsb2NrKHNraWFCaXRtYXApOwogICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRv
IHN1cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucz8KLSAgICBBU1NFUlQoc2tpYUJpdG1h
cC0+Y29uZmlnKCk9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOwotICAgIHNraWFCaXRt
YXAtPmNvcHlQaXhlbHNUbyhtX3BpeGVsRGF0YS5nZXQoKSwgYnVmZmVyU2l6ZSk7CisgICAgQVNT
RVJUKHNraWFCaXRtYXAuY29uZmlnKCk9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOwor
ICAgIHNraWFCaXRtYXAuY29weVBpeGVsc1RvKG1fcGl4ZWxEYXRhLmdldCgpLCBidWZmZXJTaXpl
KTsKICNlbGlmIFVTRShDRykKICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGdldCByaWQgb2YgdGhp
cyB0ZW1wb3JhcnkgY29weSB3aGVyZSBwb3NzaWJsZS4KICAgICBpbnQgdGVtcFJvd0J5dGVzID0g
d2lkdGggKiA0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oCmluZGV4IGEzM2I1
Zjc1ZDlhZjM1OTFhZjJlY2RiZDM1NTVkYzc5OWM5NTAyNjguLjljODljNjkyNzNkMzk0MTZkYzVj
OGY0N2ZkZGFhNjJkYTdkMDA1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lh
LmgKQEAgLTUzLDExICs1MywxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNCaXRt
YXBJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBjdXJy
ZW50RnJhbWVIYXNBbHBoYSgpIHsgcmV0dXJuICFtX25hdGl2ZUltYWdlLmlzT3BhcXVlKCk7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKSB7IHJldHVybiAhbV9uYXRp
dmVJbWFnZS5iaXRtYXAoKS5pc09wYXF1ZSgpOyB9CiAKICAgICB2aXJ0dWFsIEludFNpemUgc2l6
ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gSW50U2l6ZShtX25hdGl2ZUltYWdlLndp
ZHRoKCksIG1fbmF0aXZlSW1hZ2UuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gSW50U2l6ZSht
X25hdGl2ZUltYWdlLmJpdG1hcCgpLndpZHRoKCksIG1fbmF0aXZlSW1hZ2UuYml0bWFwKCkuaGVp
Z2h0KCkpOwogICAgIH0KIAogICAgIC8vIERvIG5vdGhpbmcsIGFzIHdlIG9ubHkgaGF2ZSB0aGUg
b25lIHJlcHJlc2VudGF0aW9uIG9mIGRhdGEgKGRlY29kZWQpLgpAQCAtNzcsNyArNzcsNyBAQCBw
dWJsaWM6CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpcnR1YWwgYm9vbCBub3RTb2xpZENv
bG9yKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25hdGl2ZUltYWdlLndpZHRoKCkgIT0gMSB8
fCBtX25hdGl2ZUltYWdlLmhlaWdodCgpICE9IDE7CisgICAgICAgIHJldHVybiBtX25hdGl2ZUlt
YWdlLmJpdG1hcCgpLndpZHRoKCkgIT0gMSB8fCBtX25hdGl2ZUltYWdlLmJpdG1hcCgpLmhlaWdo
dCgpICE9IDE7CiAgICAgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcApp
bmRleCBlYzUxNzVjMzUxODUxZGU0NGJiZmJiZDQ2NjkwMjRlNzgwMzAxM2RmLi5mMzQxMTUyZDBi
ZTU0M2ZhODdmOTUwN2MwNmE3ZTkyZWFjZDExZmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNr
aWEuY3BwCkBAIC01NCw3ICs1NCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdl
RGF0YShJbWFnZSogaW1hZ2UsCiAgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gcGl4ZWxzOwog
ICAgIE5hdGl2ZUltYWdlU2tpYSogc2tpYUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7CiAgICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7
Ci0gICAgYm9vbCBoYXNBbHBoYSA9IHNraWFJbWFnZSA/ICFza2lhSW1hZ2UtPmlzT3BhcXVlKCkg
OiB0cnVlOworICAgIGJvb2wgaGFzQWxwaGEgPSBza2lhSW1hZ2UgPyAhc2tpYUltYWdlLT5iaXRt
YXAoKS5pc09wYXF1ZSgpIDogdHJ1ZTsKICAgICBpZiAoKCFza2lhSW1hZ2UgfHwgaWdub3JlR2Ft
bWFBbmRDb2xvclByb2ZpbGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFscGhhKSkgJiYg
aW1hZ2UtPmRhdGEoKSkgewogICAgICAgICBJbWFnZVNvdXJjZSBkZWNvZGVyKEltYWdlU291cmNl
OjpBbHBoYU5vdFByZW11bHRpcGxpZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgPyBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2Zp
bGVJZ25vcmVkIDogSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCk7CkBA
IC02NCw5ICs2NCw5IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFn
ZSogaW1hZ2UsCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGhhc0FscGhhID0g
ZGVjb2Rlci5mcmFtZUhhc0FscGhhQXRJbmRleCgwKTsKICAgICAgICAgcGl4ZWxzID0gYWRvcHRQ
dHIoZGVjb2Rlci5jcmVhdGVGcmFtZUF0SW5kZXgoMCkpOwotICAgICAgICBpZiAoIXBpeGVscy5n
ZXQoKSB8fCAhcGl4ZWxzLT5pc0RhdGFDb21wbGV0ZSgpIHx8ICFwaXhlbHMtPndpZHRoKCkgfHwg
IXBpeGVscy0+aGVpZ2h0KCkpCisgICAgICAgIGlmICghcGl4ZWxzLmdldCgpIHx8ICFwaXhlbHMt
PmlzRGF0YUNvbXBsZXRlKCkgfHwgIXBpeGVscy0+Yml0bWFwKCkud2lkdGgoKSB8fCAhcGl4ZWxz
LT5iaXRtYXAoKS5oZWlnaHQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
U2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gcGl4ZWxzLT5jb25maWcoKTsKKyAgICAgICAg
U2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gcGl4ZWxzLT5iaXRtYXAoKS5jb25maWcoKTsK
ICAgICAgICAgaWYgKHNraWFDb25maWcgIT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBza2lhSW1hZ2UgPSBwaXhlbHMuZ2V0
KCk7CkBAIC03NiwxMyArNzYsMTMgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VE
YXRhKEltYWdlKiBpbWFnZSwKICAgICAgICAgbmVlZGVkQWxwaGFPcCA9IEFscGhhRG9Vbm11bHRp
cGx5OwogICAgIGlmICghc2tpYUltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU2tC
aXRtYXAmIHNraWFJbWFnZVJlZiA9ICpza2lhSW1hZ2U7CisgICAgY29uc3QgU2tCaXRtYXAmIHNr
aWFJbWFnZVJlZiA9IHNraWFJbWFnZS0+Yml0bWFwKCk7CiAgICAgU2tBdXRvTG9ja1BpeGVscyBs
b2NrKHNraWFJbWFnZVJlZik7Ci0gICAgQVNTRVJUKHNraWFJbWFnZS0+cm93Qnl0ZXMoKSA9PSBz
a2lhSW1hZ2UtPndpZHRoKCkgKiA0KTsKLSAgICBvdXRwdXRWZWN0b3IucmVzaXplKHNraWFJbWFn
ZS0+cm93Qnl0ZXMoKSAqIHNraWFJbWFnZS0+aGVpZ2h0KCkpOwotICAgIHJldHVybiBwYWNrUGl4
ZWxzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNraWFJbWFnZS0+Z2V0UGl4ZWxz
KCkpLAorICAgIEFTU0VSVChza2lhSW1hZ2VSZWYucm93Qnl0ZXMoKSA9PSBza2lhSW1hZ2VSZWYu
d2lkdGgoKSAqIDQpOworICAgIG91dHB1dFZlY3Rvci5yZXNpemUoc2tpYUltYWdlUmVmLnJvd0J5
dGVzKCkgKiBza2lhSW1hZ2VSZWYuaGVpZ2h0KCkpOworICAgIHJldHVybiBwYWNrUGl4ZWxzKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNraWFJbWFnZVJlZi5nZXRQaXhlbHMoKSks
CiAgICAgICAgICAgICAgICAgICAgICAgU0tfQjMyX1NISUZUID8gU291cmNlRm9ybWF0UkdCQTgg
OiBTb3VyY2VGb3JtYXRCR1JBOCwKLSAgICAgICAgICAgICAgICAgICAgICBza2lhSW1hZ2UtPndp
ZHRoKCksIHNraWFJbWFnZS0+aGVpZ2h0KCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgc2tp
YUltYWdlUmVmLndpZHRoKCksIHNraWFJbWFnZVJlZi5oZWlnaHQoKSwgMCwKICAgICAgICAgICAg
ICAgICAgICAgICBmb3JtYXQsIHR5cGUsIG5lZWRlZEFscGhhT3AsIG91dHB1dFZlY3Rvci5kYXRh
KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ltYWdlU2tpYS5jcHAKaW5kZXggOTM5YmFjNmZjNTNjODk5OGM1MDNkNTUyZDU1OTNjNTJlOWE5
OTk5MS4uMDZmYzdkNzY1ODJjMDE1NDUwMzNjZjc4OGUyYTkyMzdmNWI5YTU3ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcApA
QCAtMjI5LDcgKzIyOSw3IEBAIHN0YXRpYyB2b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZvcm1Db250
ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0LCBjb25zdCBOYXRpdmVJbWFnCiAgICAgICAgIC8vIGlz
IHNvbWV0aGluZyBpbnRlcmVzdGluZyBnb2luZyBvbiB3aXRoIHRoZSBtYXRyaXggKGxpa2UgYSBy
b3RhdGlvbikuCiAgICAgICAgIC8vIE5vdGU6IGZvciBzZXJpYWxpemF0aW9uLCB3ZSB3aWxsIHdh
bnQgdG8gc3Vic2V0IHRoZSBiaXRtYXAgZmlyc3Qgc28KICAgICAgICAgLy8gd2UgZG9uJ3Qgc2Vu
ZCBleHRyYSBwaXhlbHMuCi0gICAgICAgIGNhbnZhcy0+ZHJhd0JpdG1hcFJlY3QoYml0bWFwLCAm
c3JjUmVjdCwgZGVzdFJlY3QsICZwYWludCk7CisgICAgICAgIGNhbnZhcy0+ZHJhd0JpdG1hcFJl
Y3QoYml0bWFwLmJpdG1hcCgpLCAmc3JjUmVjdCwgZGVzdFJlY3QsICZwYWludCk7CiAgICAgfQog
fQogCkBAIC0zMzEsNyArMzMxLDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LAogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE5vIG5lZWQgdG8gZG8g
bmljZSByZXNhbXBsaW5nLgogICAgICAgICBTa0JpdG1hcCBzcmNTdWJzZXQ7Ci0gICAgICAgIGJp
dG1hcC0+ZXh0cmFjdFN1YnNldCgmc3JjU3Vic2V0LCBzcmNSZWN0KTsKKyAgICAgICAgYml0bWFw
LT5iaXRtYXAoKS5leHRyYWN0U3Vic2V0KCZzcmNTdWJzZXQsIHNyY1JlY3QpOwogICAgICAgICBz
aGFkZXIgPSBTa1NoYWRlcjo6Q3JlYXRlQml0bWFwU2hhZGVyKHNyY1N1YnNldCwgU2tTaGFkZXI6
OmtSZXBlYXRfVGlsZU1vZGUsIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlKTsKICAgICB9CiAK
QEAgLTM4NSwxMiArMzg1LDEyIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xv
cigpCiAgICAgV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhKiBmcmFtZSA9IGZyYW1lQXRJbmRleCgw
KTsKIAogICAgIGlmIChmcmFtZSAmJiBzaXplKCkud2lkdGgoKSA9PSAxICYmIHNpemUoKS5oZWln
aHQoKSA9PSAxKSB7Ci0gICAgICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygqZnJhbWUpOwotICAg
ICAgICBpZiAoIWZyYW1lLT5nZXRQaXhlbHMoKSkKKyAgICAgICAgU2tBdXRvTG9ja1BpeGVscyBs
b2NrKGZyYW1lLT5iaXRtYXAoKSk7CisgICAgICAgIGlmICghZnJhbWUtPmJpdG1hcCgpLmdldFBp
eGVscygpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIG1faXNTb2xpZENvbG9yID0g
dHJ1ZTsKLSAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IoZnJhbWUtPmdldENvbG9yKDAsIDAp
KTsKKyAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IoZnJhbWUtPmJpdG1hcCgpLmdldENvbG9y
KDAsIDApKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcAppbmRleCA4ZmUxMWEzNzIyY2Ji
MjYyYzEwODJmNTY5NzgxN2EyMTM0NDM3NzI3Li5mMzA4NTc5YjgxZGZiZWUyOTFmZTkwMDhhYWNk
NTE3NmRiNDc4OGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCkBAIC0zOSwxNSArMzksMTUgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogTmF0aXZlSW1hZ2VTa2lhOjpOYXRpdmVJbWFnZVNraWEoKQot
ICAgIDogbV9pc0RhdGFDb21wbGV0ZShmYWxzZSksCi0gICAgICBtX3Jlc2l6ZVJlcXVlc3RzKDAp
CisgICAgOiBtX3Jlc2l6ZVJlcXVlc3RzKDApLAorICAgICAgbV9pc0RhdGFDb21wbGV0ZShmYWxz
ZSkKIHsKIH0KIAogTmF0aXZlSW1hZ2VTa2lhOjpOYXRpdmVJbWFnZVNraWEoY29uc3QgU2tCaXRt
YXAmIG90aGVyKQotICAgIDogU2tCaXRtYXAob3RoZXIpLAotICAgICAgbV9pc0RhdGFDb21wbGV0
ZShmYWxzZSksCi0gICAgICBtX3Jlc2l6ZVJlcXVlc3RzKDApCisgICAgOiBtX2ltYWdlKG90aGVy
KSwKKyAgICAgIG1fcmVzaXplUmVxdWVzdHMoMCksCisgICAgICBtX2lzRGF0YUNvbXBsZXRlKGZh
bHNlKQogewogfQogCkBAIC01Nyw3ICs1Nyw3IEBAIE5hdGl2ZUltYWdlU2tpYTo6fk5hdGl2ZUlt
YWdlU2tpYSgpCiAKIGludCBOYXRpdmVJbWFnZVNraWE6OmRlY29kZWRTaXplKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZ2V0U2l6ZSgpICsgbV9yZXNpemVkSW1hZ2UuZ2V0U2l6ZSgpOworICAgIHJl
dHVybiBtX2ltYWdlLmdldFNpemUoKSArIG1fcmVzaXplZEltYWdlLmdldFNpemUoKTsKIH0KIAog
Ym9vbCBOYXRpdmVJbWFnZVNraWE6Omhhc1Jlc2l6ZWRCaXRtYXAoY29uc3QgU2tJUmVjdCYgc3Jj
U3Vic2V0LCBpbnQgZGVzdFdpZHRoLCBpbnQgZGVzdEhlaWdodCkgY29uc3QKQEAgLTc1LDcgKzc1
LDcgQEAgU2tCaXRtYXAgTmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKGNvbnN0IFNrSVJl
Y3QmIHNyY1N1YnNldCwKICAgICAgICAgICAgICYmIHNob3VsZENhY2hlUmVzYW1wbGluZyhzcmNT
dWJzZXQsIGRlc3RXaWR0aCwgZGVzdEhlaWdodCwgZGVzdFZpc2libGVTdWJzZXQpOwogCiAgICAg
ICAgIFNrQml0bWFwIHN1YnNldDsKLSAgICAgICAgZXh0cmFjdFN1YnNldCgmc3Vic2V0LCBzcmNT
dWJzZXQpOworICAgICAgICBtX2ltYWdlLmV4dHJhY3RTdWJzZXQoJnN1YnNldCwgc3JjU3Vic2V0
KTsKICAgICAgICAgaWYgKCFzaG91bGRDYWNoZSkgewogICAgICAgICAgICAgLy8gSnVzdCByZXNp
emUgdGhlIHZpc2libGUgc3Vic2V0IGFuZCByZXR1cm4gaXQuCiAgICAgICAgICAgICBTa0JpdG1h
cCByZXNpemVkSW1hZ2UgPSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZShzdWJzZXQsIHNr
aWE6OkltYWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLCBkZXN0V2lkdGgsIGRlc3RIZWln
aHQsIGRlc3RWaXNpYmxlU3Vic2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tpYS5oCmluZGV4IGUxMTM1ZWE4YWI1NGI1
NjBiNWQ5MjhiOGVlZDAzNGU0MmIwZDBiYWYuLmE3MGE0N2M0MjA0MzJiMDRlODg4YzUzNjYxNjE5
YmQ1MTM1YzRiNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvTmF0aXZlSW1hZ2VTa2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuaApAQCAtMzgsOSArMzgsOSBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAvLyBUaGlzIG9iamVjdCBpcyB1c2VkIGFzIHRoZSAibmF0aXZlIGltYWdl
IiBpbiBvdXIgcG9ydC4gV2hlbiBXZWJLaXQgdXNlcwotLy8gIk5hdGl2ZUltYWdlUHRyIiwgaXQg
aXMgYSBwb2ludGVyIHRvIHRoaXMgdHlwZS4gSXQgaXMgYW4gU2tCaXRtYXAsIGJ1dCBhbHNvCisv
LyAiTmF0aXZlSW1hZ2VQdHIiLCBpdCBpcyBhIHBvaW50ZXIgdG8gdGhpcyB0eXBlLiBJdCBoYXMg
YW4gU2tCaXRtYXAsIGFuZCBhbHNvCiAvLyBzdG9yZXMgYSBjYWNoZWQgcmVzaXplZCBpbWFnZS4K
LWNsYXNzIE5hdGl2ZUltYWdlU2tpYSA6IHB1YmxpYyBTa0JpdG1hcCB7CitjbGFzcyBOYXRpdmVJ
bWFnZVNraWEgewogcHVibGljOgogICAgIE5hdGl2ZUltYWdlU2tpYSgpOwogICAgIH5OYXRpdmVJ
bWFnZVNraWEoKTsKQEAgLTYyLDYgKzYyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIGVudGlyZSBpbWFnZSBoYXMgYmVlbiBkZWNvZGVkLgogICAgIGJvb2wgaXNEYXRh
Q29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lzRGF0YUNvbXBsZXRlOyB9CiAKKyAgICAvLyBH
ZXQgcmVmZXJlbmNlIHRvIHRoZSBpbnRlcm5hbCBTa0JpdG1hcCByZXByZXNlbnRpbmcgdGhpcyBp
bWFnZS4KKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCkgY29uc3QgeyByZXR1cm4gbV9pbWFn
ZTsgfQorICAgIFNrQml0bWFwJiBiaXRtYXAoKSB7IHJldHVybiBtX2ltYWdlOyB9CisKICAgICAv
LyBXZSBjYW4ga2VlcCBhIHJlc2l6ZWQgdmVyc2lvbiBvZiB0aGUgYml0bWFwIGNhY2hlZCBvbiB0
aGlzIG9iamVjdC4KICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRydWUgaWYgdGhl
cmUgaXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUKICAgICAvLyBnaXZlbiBpbWFnZSBzdWJzZXQg
d2l0aCB0aGUgZ2l2ZW4gZGltZW5zaW9ucyBhbmQgc3Vic2V0cy4KQEAgLTExNiw5ICsxMjAsOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0SGVpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrSVJlY3QmIGRlc3RTdWJz
ZXQpIGNvbnN0OwogCi0gICAgLy8gU2V0IHRvIHRydWUgd2hlbiB0aGUgZGF0YSBpcyBjb21wbGV0
ZS4gQmVmb3JlIHRoZSBlbnRpcmUgaW1hZ2UgaGFzCi0gICAgLy8gbG9hZGVkLCB3ZSBkbyBub3Qg
d2FudCB0byBjYWNoZSBhIHJlc2l6ZS4KLSAgICBib29sIG1faXNEYXRhQ29tcGxldGU7CisgICAg
Ly8gVGhlIG9yaWdpbmFsIGltYWdlLgorICAgIFNrQml0bWFwIG1faW1hZ2U7CiAKICAgICAvLyBU
aGUgY2FjaGVkIGJpdG1hcC4gVGhpcyB3aWxsIGJlIGVtcHR5KCkgaWYgdGhlcmUgaXMgbm8gY2Fj
aGVkIGltYWdlLgogICAgIG11dGFibGUgU2tCaXRtYXAgbV9yZXNpemVkSW1hZ2U7CkBAIC0xMzgs
NiArMTQxLDEwIEBAIHByaXZhdGU6CiAgICAgLy8gaW1hZ2UgcmVzaXplcy4KICAgICBtdXRhYmxl
IENhY2hlZEltYWdlSW5mbyBtX2NhY2hlZEltYWdlSW5mbzsKICAgICBtdXRhYmxlIGludCBtX3Jl
c2l6ZVJlcXVlc3RzOworCisgICAgLy8gU2V0IHRvIHRydWUgd2hlbiB0aGUgZGF0YSBpcyBjb21w
bGV0ZS4gQmVmb3JlIHRoZSBlbnRpcmUgaW1hZ2UgaGFzCisgICAgLy8gbG9hZGVkLCB3ZSBkbyBu
b3Qgd2FudCB0byBjYWNoZSBhIHJlc2l6ZS4KKyAgICBib29sIG1faXNEYXRhQ29tcGxldGU7CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BhdHRlcm5Ta2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
UGF0dGVyblNraWEuY3BwCmluZGV4IDcyZmFjNzczNDkyYmE0ZGE0ZmVmMTQwMjBmMTczMGI2MDA1
ZmMyZDQuLmNkNmE2Njc2ZTNhOWFkMWRhMDMxNTk1NTM5NGNjOGUwMjMyNDI5NzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVyblNraWEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0dGVyblNraWEu
Y3BwCkBAIC01OSwxMyArNTksMTMgQEAgUGxhdGZvcm1QYXR0ZXJuUHRyIFBhdHRlcm46OnBsYXRm
b3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2YKICAgICAvLyBh
bmQgZXhwYW5kZWQgc2NhbGUgYW5kIHNrZXcgaW46CiAgICAgLy8gTGF5b3V0VGVzdHMvc3ZnL1cz
Qy1TVkctMS4xL3BzZXJ2ZXJzLWdyYWQtMDYtYi5zdmcKIAotICAgIFNrQml0bWFwKiBibSA9IG1f
dGlsZUltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGNvbnN0IE5hdGl2
ZUltYWdlU2tpYSogaW1hZ2UgPSBtX3RpbGVJbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgYml0bWFwLCByZXR1cm4gYSB0cmFuc3Bh
cmVudCBzaGFkZXIuCi0gICAgaWYgKCFibSkKKyAgICBpZiAoIWltYWdlKQogICAgICAgICBtX3Bh
dHRlcm4gPSBuZXcgU2tDb2xvclNoYWRlcihTa0NvbG9yU2V0QVJHQigwLCAwLCAwLCAwKSk7CiAK
ICAgICBlbHNlIGlmIChtX3JlcGVhdFggJiYgbV9yZXBlYXRZKQotICAgICAgICBtX3BhdHRlcm4g
PSBTa1NoYWRlcjo6Q3JlYXRlQml0bWFwU2hhZGVyKCpibSwgU2tTaGFkZXI6OmtSZXBlYXRfVGls
ZU1vZGUsIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlKTsKKyAgICAgICAgbV9wYXR0ZXJuID0g
U2tTaGFkZXI6OkNyZWF0ZUJpdG1hcFNoYWRlcihpbWFnZS0+Yml0bWFwKCksIFNrU2hhZGVyOjpr
UmVwZWF0X1RpbGVNb2RlLCBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSk7CiAKICAgICBlbHNl
IHsKIApAQCAtODMsMTEgKzgzLDExIEBAIFBsYXRmb3JtUGF0dGVyblB0ciBQYXR0ZXJuOjpwbGF0
Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmCiAgICAgICAg
IC8vIG9yaWdpbmFsLCB0aGVuIGNvcHkgdGhlIG9yaWduYWwgaW50byBpdC4KICAgICAgICAgLy8g
RklYTUU6IElzIHRoZXJlIGEgYmV0dGVyIHdheSB0byBwYWQgKG5vdCBzY2FsZSkgYW4gaW1hZ2Ug
aW4gc2tpYT8KICAgICAgICAgU2tCaXRtYXAgYm0yOwotICAgICAgICBibTIuc2V0Q29uZmlnKGJt
LT5jb25maWcoKSwgYm0tPndpZHRoKCkgKyBleHBhbmRXLCBibS0+aGVpZ2h0KCkgKyBleHBhbmRI
KTsKKyAgICAgICAgYm0yLnNldENvbmZpZyhpbWFnZS0+Yml0bWFwKCkuY29uZmlnKCksIGltYWdl
LT5iaXRtYXAoKS53aWR0aCgpICsgZXhwYW5kVywgaW1hZ2UtPmJpdG1hcCgpLmhlaWdodCgpICsg
ZXhwYW5kSCk7CiAgICAgICAgIGJtMi5hbGxvY1BpeGVscygpOwogICAgICAgICBibTIuZXJhc2VB
UkdCKDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApOwogICAgICAgICBTa0NhbnZhcyBjYW52YXMoYm0y
KTsKLSAgICAgICAgY2FudmFzLmRyYXdCaXRtYXAoKmJtLCAwLCAwKTsKKyAgICAgICAgY2FudmFz
LmRyYXdCaXRtYXAoaW1hZ2UtPmJpdG1hcCgpLCAwLCAwKTsKICAgICAgICAgbV9wYXR0ZXJuID0g
U2tTaGFkZXI6OkNyZWF0ZUJpdG1hcFNoYWRlcihibTIsIHRpbGVNb2RlWCwgdGlsZU1vZGVZKTsK
ICAgICB9CiAgICAgbV9wYXR0ZXJuLT5zZXRMb2NhbE1hdHJpeChtX3BhdHRlcm5TcGFjZVRyYW5z
Zm9ybWF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggY2U4YjI3Y2VkNWEzNGMwNWVhNzJhMDA3ZWY2YjA1
NmUwYzNjY2E3OS4uN2I0ODQ3ZjQ3M2E4MzU1NDIyNjg4ZTAwZGZhMmVjZmJiNmFkNTk3YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmgKQEAgLTE1NCw3ICsxNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50IHgsIGludCB5KQogICAgICAgICB7CiAjaWYg
VVNFKFNLSUEpCi0gICAgICAgICAgICByZXR1cm4gbV9iaXRtYXAuZ2V0QWRkcjMyKHgsIHkpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fYml0bWFwLmJpdG1hcCgpLmdldEFkZHIzMih4LCB5KTsKICNl
bGlmIFBMQVRGT1JNKFFUKQogICAgICAgICAgICAgbV9pbWFnZSA9IG1fcGl4bWFwLnRvSW1hZ2Uo
KTsKICAgICAgICAgICAgIG1fcGl4bWFwID0gUVBpeG1hcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNv
ZGVyU2tpYS5jcHAKaW5kZXggNzI0ZmFlYjFmZDBlNDZmODZmZTUwNTMwMjk3MTc0ZjhhZmE5ZjJj
NS4uOTM5N2FkNWMzMDA3ODI3OTI0ZTRmZjkwM2ZkNDBiYWMwNjQ5NWM0MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJT
a2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lh
L0ltYWdlRGVjb2RlclNraWEuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIEltYWdlRnJhbWUmIEltYWdl
RnJhbWU6Om9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKICAgICBtX2JpdG1hcCA9
IG90aGVyLm1fYml0bWFwOwogICAgIC8vIEtlZXAgdGhlIHBpeGVscyBsb2NrZWQgc2luY2Ugd2Ug
d2lsbCBiZSB3cml0aW5nIGRpcmVjdGx5IGludG8gdGhlCiAgICAgLy8gYml0bWFwIHRocm91Z2hv
dXQgdGhpcyBvYmplY3QncyBsaWZldGltZS4KLSAgICBtX2JpdG1hcC5sb2NrUGl4ZWxzKCk7Cisg
ICAgbV9iaXRtYXAuYml0bWFwKCkubG9ja1BpeGVscygpOwogICAgIHNldE9yaWdpbmFsRnJhbWVS
ZWN0KG90aGVyLm9yaWdpbmFsRnJhbWVSZWN0KCkpOwogICAgIHNldFN0YXR1cyhvdGhlci5zdGF0
dXMoKSk7CiAgICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24oKSk7CkBAIC01OCw3ICs1OCw3
IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lJiBv
dGhlcikKIAogdm9pZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCiB7Ci0gICAgbV9iaXRt
YXAucmVzZXQoKTsKKyAgICBtX2JpdG1hcC5iaXRtYXAoKS5yZXNldCgpOwogICAgIG1fc3RhdHVz
ID0gRnJhbWVFbXB0eTsKICAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVtYmVycyBo
ZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKQogICAgIC8vIGNhbGxzIHRoaXMgdG8gZnJlZSB0
aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZQpAQCAtNjgsNyArNjgsNyBA
QCB2b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkKIAogdm9pZCBJbWFnZUZyYW1lOjp6
ZXJvRmlsbFBpeGVsRGF0YSgpCiB7Ci0gICAgbV9iaXRtYXAuZXJhc2VBUkdCKDAsIDAsIDAsIDAp
OworICAgIG1fYml0bWFwLmJpdG1hcCgpLmVyYXNlQVJHQigwLCAwLCAwLCAwKTsKIH0KIAogYm9v
bCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKQEAg
LTc2LDkgKzc2LDkgQEAgYm9vbCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFn
ZUZyYW1lJiBvdGhlcikKICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgbV9iaXRtYXAucmVzZXQoKTsKKyAgICBtX2JpdG1hcC5iaXRtYXAoKS5yZXNl
dCgpOwogICAgIGNvbnN0IE5hdGl2ZUltYWdlU2tpYSYgb3RoZXJCaXRtYXAgPSBvdGhlci5tX2Jp
dG1hcDsKLSAgICByZXR1cm4gb3RoZXJCaXRtYXAuY29weVRvKCZtX2JpdG1hcCwgb3RoZXJCaXRt
YXAuY29uZmlnKCkpOworICAgIHJldHVybiBvdGhlckJpdG1hcC5iaXRtYXAoKS5jb3B5VG8oJm1f
Yml0bWFwLmJpdG1hcCgpLCBvdGhlckJpdG1hcC5iaXRtYXAoKS5jb25maWcoKSk7CiB9CiAKIGJv
b2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCkBAIC04
Niw4ICs4Niw4IEBAIGJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBu
ZXdIZWlnaHQpCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb25j
ZSwgaXQgd2lsbCBsZWFrIG1lbW9yeQogICAgIC8vIG90aGVyd2lzZS4KICAgICBBU1NFUlQod2lk
dGgoKSA9PSAwICYmIGhlaWdodCgpID09IDApOwotICAgIG1fYml0bWFwLnNldENvbmZpZyhTa0Jp
dG1hcDo6a0FSR0JfODg4OF9Db25maWcsIG5ld1dpZHRoLCBuZXdIZWlnaHQpOwotICAgIGlmICgh
bV9iaXRtYXAuYWxsb2NQaXhlbHMoKSkKKyAgICBtX2JpdG1hcC5iaXRtYXAoKS5zZXRDb25maWco
U2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKKyAgICBp
ZiAoIW1fYml0bWFwLmJpdG1hcCgpLmFsbG9jUGl4ZWxzKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIHplcm9GaWxsUGl4ZWxEYXRhKCk7CkBAIC0xMDIsMTIgKzEwMiwxMiBAQCBOYXRp
dmVJbWFnZVB0ciBJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKIAogYm9vbCBJ
bWFnZUZyYW1lOjpoYXNBbHBoYSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX2JpdG1hcC5pc09w
YXF1ZSgpOworICAgIHJldHVybiAhbV9iaXRtYXAuYml0bWFwKCkuaXNPcGFxdWUoKTsKIH0KIAog
dm9pZCBJbWFnZUZyYW1lOjpzZXRIYXNBbHBoYShib29sIGFscGhhKQogewotICAgIG1fYml0bWFw
LnNldElzT3BhcXVlKCFhbHBoYSk7CisgICAgbV9iaXRtYXAuYml0bWFwKCkuc2V0SXNPcGFxdWUo
IWFscGhhKTsKIH0KIAogdm9pZCBJbWFnZUZyYW1lOjpzZXRDb2xvclByb2ZpbGUoY29uc3QgQ29s
b3JQcm9maWxlJiBjb2xvclByb2ZpbGUpCkBAIC0xMjQsMTIgKzEyNCwxMiBAQCB2b2lkIEltYWdl
RnJhbWU6OnNldFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMpCiAKIGludCBJbWFnZUZyYW1lOjp3
aWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYml0bWFwLndpZHRoKCk7CisgICAgcmV0dXJu
IG1fYml0bWFwLmJpdG1hcCgpLndpZHRoKCk7CiB9CiAKIGludCBJbWFnZUZyYW1lOjpoZWlnaHQo
KSBjb25zdAogewotICAgIHJldHVybiBtX2JpdG1hcC5oZWlnaHQoKTsKKyAgICByZXR1cm4gbV9i
aXRtYXAuYml0bWFwKCkuaGVpZ2h0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNGYwNWQzNzNmZTJmZDlhNzdhOTYxYmVhZjAzOGRi
YTAxYTdmMWIwMy4uYTkwNTY3MjljODkwNzIyZDUxNWFjMWJhY2UzNjcxNWQ2NzBlODk5NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMS0wOC0yNCAgSm9o
biBCYXRlcyAgPGpiYXRlc0Bnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGVha2lu
ZyBTa0JpdG1hcHMgZm9yIGJhY2tncm91bmQgaW1hZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjQ4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggc2ltcGx5IGNoYW5nZXMgTmF0aXZl
SW1hZ2VTa2lhIHRvIGhhdmUgYSBTa0JpdG1hcCBpbnN0ZWFkIG9mCisgICAgICAgIGRlcml2aW5n
IGZyb20gU2tCaXRtYXAuIEFsbCBkZXBlbmRlbnQgY29kZSB1cGRhdGVkIHRvIGFjY2VzcyB0aGUg
bWVtYmVyCisgICAgICAgIGluc3RlYWQgb2YgY2FsbGluZyBTa0JpdG1hcCBtZXRob2RzIG9uIE5h
dGl2ZUltYWdlU2tpYSBvYmplY3RzLiBUaGlzCisgICAgICAgIG1heSBvciBtYXkgbm90IGZpeCB0
aGUgbWVtb3J5IGxlYWssIGJ1dCBpdCdzIGRlZmluaXRlbHkgYSBidWcgdGhhdCBjb3VsZAorICAg
ICAgICBjYXVzZSBtZW1vcnkgbGVha3MuCisKKyAgICAgICAgKiBzcmMvUGxhdGZvcm1CcmlkZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlSW1h
Z2UpOgorICAgICAgICAqIHNyYy9XZWJJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbWFnZURlY29kZXI6OmdldEZyYW1lQXRJbmRleCk6CisgICAgICAgICogc3JjL1dlYklt
YWdlU2tpYS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdlOjpmcm9tRGF0YSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkltYWdlOjpvcGVyYXRvcj0pOgorCiAyMDExLTA4LTIzICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV2ViU2VhcmNoYWJsZUZvcm1EYXRh
IGNyYXNoZXMgd2hlbiBnaXZlbiBhIGRldGFjaGVkIEhUTUxGb3JtRWxlbWVudApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1CcmlkZ2UuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1CcmlkZ2UuY3BwCmluZGV4IDdkMjE4NDIwNDY0
MTVhMGEzOTI3YTAxOWY1YjM5YzNkN2VkYjcwOTcuLjM3Yzg1ZTk3MTY5NDI2ZDQ5ZjcwZmViNjBh
NDMwZTE2YzQ0YzhjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Bs
YXRmb3JtQnJpZGdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9y
bUJyaWRnZS5jcHAKQEAgLTIwOSw3ICsyMDksNyBAQCB2b2lkIFBsYXRmb3JtQnJpZGdlOjpjbGlw
Ym9hcmRXcml0ZUltYWdlKE5hdGl2ZUltYWdlUHRyIGltYWdlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHRpdGxlKQogewogI2lmIFdFQktJ
VF9VU0lOR19TS0lBCi0gICAgV2ViSW1hZ2Ugd2ViSW1hZ2UoKmltYWdlKTsKKyAgICBXZWJJbWFn
ZSB3ZWJJbWFnZShpbWFnZS0+Yml0bWFwKCkpOwogI2Vsc2UKICAgICBXZWJJbWFnZSB3ZWJJbWFn
ZShpbWFnZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFn
ZURlY29kZXIuY3BwCmluZGV4IDA4MTUzYmEwODg0NzU5ZjQyNDg2MGRmZjE0OWRkMjExNTcwOWMw
ZjIuLjdkOWJhYTBmMDY1NTA3OTkwMGUzMmE1NzljYjQ4NjM2MWUwYzI1NGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VEZWNvZGVyLmNwcApAQCAtMTEzLDcgKzEx
Myw3IEBAIFdlYkltYWdlIFdlYkltYWdlRGVjb2Rlcjo6Z2V0RnJhbWVBdEluZGV4KGludCBpbmRl
eCA9IDApIGNvbnN0CiAgICAgICAgIHJldHVybiBXZWJJbWFnZSgpOwogI2lmIFdFQktJVF9VU0lO
R19TS0lBCiAgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gaW1hZ2UgPSBhZG9wdFB0cihmcmFt
ZUJ1ZmZlci0+YXNOZXdOYXRpdmVJbWFnZSgpKTsKLSAgICByZXR1cm4gV2ViSW1hZ2UoKmltYWdl
KTsKKyAgICByZXR1cm4gV2ViSW1hZ2UoaW1hZ2UtPmJpdG1hcCgpKTsKICNlbGlmIFdFQktJVF9V
U0lOR19DRwogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgQ0cgc2lkZSBvZiB0aGlzLgogICAgIHJl
dHVybiBXZWJJbWFnZShmcmFtZUJ1ZmZlci0+YXNOZXdOYXRpdmVJbWFnZSgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkltYWdlU2tpYS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFnZVNraWEuY3BwCmluZGV4IDAyNmJjZGVlZDVjYmJj
NTgyYTZhYmQ1NTc1ZTRhODA1ZjcyYjdjYjUuLjFlNmY0ZDEyZThhYjdiN2MwZmVjMWU3MjE5ZTg0
MjNkZDQxNDY3ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklt
YWdlU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VTa2lh
LmNwcApAQCAtODEsNyArODEsNyBAQCBXZWJJbWFnZSBXZWJJbWFnZTo6ZnJvbURhdGEoY29uc3Qg
V2ViRGF0YSYgZGF0YSwgY29uc3QgV2ViU2l6ZSYgZGVzaXJlZFNpemUpCiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuIFdlYkltYWdlKCk7CiAKLSAgICByZXR1cm4gV2ViSW1hZ2UoKmZy
YW1lKTsKKyAgICByZXR1cm4gV2ViSW1hZ2UoZnJhbWUtPmJpdG1hcCgpKTsKIH0KIAogdm9pZCBX
ZWJJbWFnZTo6cmVzZXQoKQpAQCAtMTEzLDcgKzExMyw3IEBAIFdlYkltYWdlJiBXZWJJbWFnZTo6
b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8SW1hZ2U+JiBpbWFnZSkKIHsKICAgICBOYXRpdmVJ
bWFnZVB0ciBwOwogICAgIGlmIChpbWFnZS5nZXQoKSAmJiAocCA9IGltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpKSkKLSAgICAgICAgYXNzaWduKCpwKTsKKyAgICAgICAgYXNzaWdu
KHAtPmJpdG1hcCgpKTsKICAgICBlbHNlCiAgICAgICAgIHJlc2V0KCk7CiAgICAgcmV0dXJuICp0
aGlzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EcmFnSW1hZ2VU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAK
aW5kZXggOGNlNmZlMjk1NTZmMmMyM2M0NzQxYjBmOTRjMTU2MDZlZGU4YjU5ZS4uYTQ5YTcyMzRj
MzM3ZWMyNDE1NjZlN2YxNTQ4ODIwM2FjN2ZjNDQ5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwCkBAIC01Myw5ICs1Myw5IEBAIHB1YmxpYzoK
ICAgICAgICAgLCBtX3NpemUoc2l6ZSkKICAgICB7CiAgICAgICAgIG1fbmF0aXZlSW1hZ2UgPSBu
ZXcgTmF0aXZlSW1hZ2VTa2lhKCk7Ci0gICAgICAgIG1fbmF0aXZlSW1hZ2UtPnNldENvbmZpZyhT
a0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDApOwotICAgICAgICBtX25hdGl2ZUlt
YWdlLT5hbGxvY1BpeGVscygpOworICAgICAgICBtX25hdGl2ZUltYWdlLT5iaXRtYXAoKS5zZXRD
b25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwKTsKKyAg
ICAgICAgbV9uYXRpdmVJbWFnZS0+Yml0bWFwKCkuYWxsb2NQaXhlbHMoKTsKICAgICB9CiAKICAg
ICB2aXJ0dWFsIH5UZXN0SW1hZ2UoKQpAQCAtMTQzLDggKzE0Myw4IEBAIFRFU1QoRHJhZ0ltYWdl
VGVzdCwgQ3JlYXRlRHJhZ0ltYWdlKQogICAgICAgICBSZWZQdHI8VGVzdEltYWdlPiB0ZXN0SW1h
Z2UoVGVzdEltYWdlOjpjcmVhdGUoSW50U2l6ZSgxLCAxKSkpOwogICAgICAgICBEcmFnSW1hZ2VS
ZWYgZHJhZ0ltYWdlID0gY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKHRlc3RJbWFnZS5nZXQoKSk7
CiAgICAgICAgIEFTU0VSVF9UUlVFKGRyYWdJbWFnZSk7Ci0gICAgICAgIFNrQXV0b0xvY2tQaXhl
bHMgbG9jazEoKmRyYWdJbWFnZSksIGxvY2syKCoodGVzdEltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpKSk7Ci0gICAgICAgIEVYUEVDVF9ORShkcmFnSW1hZ2UtPmdldFBpeGVscygp
LCB0ZXN0SW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCktPmdldFBpeGVscygpKTsK
KyAgICAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrMSgqZHJhZ0ltYWdlKSwgbG9jazIodGVzdElt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpLT5iaXRtYXAoKSk7CisgICAgICAgIEVY
UEVDVF9ORShkcmFnSW1hZ2UtPmdldFBpeGVscygpLCB0ZXN0SW1hZ2UtPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCktPmJpdG1hcCgpLmdldFBpeGVscygpKTsKICAgICB9CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>