<?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>103480</bug_id>
          
          <creation_ts>2012-11-27 21:56:16 -0800</creation_ts>
          <short_desc>[chromium] Implement cache eviction logic in ImageDecodingStore</short_desc>
          <delta_ts>2012-12-04 20:16:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>99790</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hin-Chung Lam">hclam</reporter>
          <assigned_to name="Hin-Chung Lam">hclam</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>jamesr</cc>
    
    <cc>levin+threading</cc>
    
    <cc>nduca</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>777523</commentid>
    <comment_count>0</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-27 21:56:16 -0800</bug_when>
    <thetext>Implement the following items:

* A simple LRU eviction logic
* Setting cache limit
* Remove all associated cache entries when cache key is gone (i.e. ImageFrameGenerator)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777528</commentid>
    <comment_count>1</comment_count>
      <attachid>176397</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-27 22:09:38 -0800</bug_when>
    <thetext>Created attachment 176397
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779700</commentid>
    <comment_count>2</comment_count>
      <attachid>176397</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-11-29 18:16:45 -0800</bug_when>
    <thetext>Comment on attachment 176397
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:37
&gt; +static const unsigned long long cDefaultCacheLimit = 8192 * 1024;

size_t, if it&apos;s a number of bytes?

is it a number of bytes? can you put the unit in the type name?

WebKit style is to omit the &apos;c&apos; prefix and just name this like a normal variable

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:58
&gt; +    MutexLocker lock(m_mutex);

a lock inside an #ifndef NDEBUG is suspicious (as is taking a lock in a destructor).  the lifetime of this object is over as soon as the destructor starts running it, so if there are other threads possibly using this class during destruction we&apos;re in trouble

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:72
&gt; +        friend class WTF::DoublyLinkedListNode&lt;CacheEntry&gt;;

DoublyLinkedList.h line 191:
using WTF::DoublyLinkedListNode;

so no WTF:: here

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:100
&gt; +        // NOTE: Returns size trunscated to a 32-bits integer.
&gt; +        unsigned memoryUsage() const { return cachedImage()-&gt;bitmap().getSafeSize(); }

memory use as a 32-bit integer doesn&apos;t really make sense if we can use more than 2g of memory (which would be reasonable, at least on my box with 64g of ram). think gigapxl or something like that. can you change this API?

what&apos;s the unit here?

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:137
&gt; +    unsigned long long m_cacheLimit;
&gt; +    unsigned long long m_memoryUsage;

what unit are these?

use size_t for counting number of bytes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779754</commentid>
    <comment_count>3</comment_count>
      <attachid>176890</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-29 19:37:06 -0800</bug_when>
    <thetext>Created attachment 176890
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779757</commentid>
    <comment_count>4</comment_count>
      <attachid>176397</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-29 19:39:33 -0800</bug_when>
    <thetext>Comment on attachment 176397
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:37
&gt;&gt; +static const unsigned long long cDefaultCacheLimit = 8192 * 1024;
&gt; 
&gt; size_t, if it&apos;s a number of bytes?
&gt; 
&gt; is it a number of bytes? can you put the unit in the type name?
&gt; 
&gt; WebKit style is to omit the &apos;c&apos; prefix and just name this like a normal variable

Both done. It&apos;s all size_t and no c.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:58
&gt;&gt; +    MutexLocker lock(m_mutex);
&gt; 
&gt; a lock inside an #ifndef NDEBUG is suspicious (as is taking a lock in a destructor).  the lifetime of this object is over as soon as the destructor starts running it, so if there are other threads possibly using this class during destruction we&apos;re in trouble

I agree. The lock is not necessary. I&apos;ll remove it.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:72
&gt;&gt; +        friend class WTF::DoublyLinkedListNode&lt;CacheEntry&gt;;
&gt; 
&gt; DoublyLinkedList.h line 191:
&gt; using WTF::DoublyLinkedListNode;
&gt; 
&gt; so no WTF:: here

okay.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:100
&gt;&gt; +        unsigned memoryUsage() const { return cachedImage()-&gt;bitmap().getSafeSize(); }
&gt; 
&gt; memory use as a 32-bit integer doesn&apos;t really make sense if we can use more than 2g of memory (which would be reasonable, at least on my box with 64g of ram). think gigapxl or something like that. can you change this API?
&gt; 
&gt; what&apos;s the unit here?

Done. However getSafeSize() still returns only 32-bits. It needs a build flag change in chromium to return long long. Would like to do it separately.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:137
&gt;&gt; +    unsigned long long m_memoryUsage;
&gt; 
&gt; what unit are these?
&gt; 
&gt; use size_t for counting number of bytes

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782087</commentid>
    <comment_count>5</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-03 18:06:22 -0800</bug_when>
    <thetext>Any comments on this change? I have another one lining up already. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782170</commentid>
    <comment_count>6</comment_count>
      <attachid>176890</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-12-03 20:19:48 -0800</bug_when>
    <thetext>Comment on attachment 176890
Patch

Lets size this to whatever we&apos;re using now (32?) Looks cool otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782179</commentid>
    <comment_count>7</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-03 20:46:25 -0800</bug_when>
    <thetext>This patch does size each SkBitmap to 32bits, it&apos;s the total that is 64bits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782188</commentid>
    <comment_count>8</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-12-03 20:57:49 -0800</bug_when>
    <thetext>i meant max cache size... 32meg?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782189</commentid>
    <comment_count>9</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-03 20:58:30 -0800</bug_when>
    <thetext>Yeah okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782191</commentid>
    <comment_count>10</comment_count>
      <attachid>177406</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-03 21:01:40 -0800</bug_when>
    <thetext>Created attachment 177406
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782194</commentid>
    <comment_count>11</comment_count>
      <attachid>177408</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-03 21:03:42 -0800</bug_when>
    <thetext>Created attachment 177408
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782195</commentid>
    <comment_count>12</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-03 21:04:10 -0800</bug_when>
    <thetext>Updated to 32MB.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782231</commentid>
    <comment_count>13</comment_count>
      <attachid>177408</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-12-03 22:40:08 -0800</bug_when>
    <thetext>Comment on attachment 177408
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        - Setting cache limit (default is 8MB)

this needs an update

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:99
&gt; +        // FIXME: getSafeSize() returns size in bytes trunscated to a 32-bits integer.

typo trunscated -&gt; truncated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782888</commentid>
    <comment_count>14</comment_count>
      <attachid>177544</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-12-04 13:55:14 -0800</bug_when>
    <thetext>Created attachment 177544
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783296</commentid>
    <comment_count>15</comment_count>
      <attachid>177544</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-04 20:16:25 -0800</bug_when>
    <thetext>Comment on attachment 177544
Patch for landing

Clearing flags on attachment: 177544

Committed r136616: &lt;http://trac.webkit.org/changeset/136616&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783297</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-04 20:16:29 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176397</attachid>
            <date>2012-11-27 22:09:38 -0800</date>
            <delta_ts>2012-11-29 19:39:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103480-20121127220714.patch</filename>
            <type>text/plain</type>
            <size>26832</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1OTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTNlYzc1NTA1Y2QwZjQ5
NGM4MTJlN2ViYTc4M2FjZTNjMDU2NjJiMi4uOTAyMWFiNDcwYjZkODY5OGM1YjQxMTk0MGQwNjk2
MWE0MmRjYjVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTExLTI3ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1l
bnQgY2FjaGUgZXZpY3Rpb24gbG9naWMgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM0ODAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVu
dHMgdGhlc2UgZmVhdHVyZXMgaW4gdGhlIG5ldyBpbWFnZSBjYWNoZToKKyAgICAgICAgLSBMZWFz
dC1yZWNlbnRseS11c2VkIGV2aWN0aW9uIGxvZ2ljCisgICAgICAgIC0gU2V0dGluZyBjYWNoZSBs
aW1pdCAoZGVmYXVsdCBpcyA4TUIpCisgICAgICAgIC0gUmVtb3ZlIGNhY2hlIGVudHJpZXMgd2hl
biBJbWFnZUZyYW1lR2VuZXJhdG9yIGlzIHJlbW92ZWQKKworICAgICAgICBOZXcgdGVzdHMgaW4g
SW1hZ2VEZWNvZGluZ1Rlc3RUZXN0LiBBbHNvIGNvdmVyZWQgYnkgcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5n
U3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
aW5nU3RvcmU6On5JbWFnZURlY29kaW5nU3RvcmUpOgorICAgICAgICBDb2RlIHRvIGFzc2VydCB0
aGF0IGV2ZXJ5dGhpbmcgaXMgY2xlYW5lZCB1cC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2RpbmdTdG9yZTo6bG9ja0NvbXBsZXRlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjp1bmxvY2tDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
aW5nU3RvcmU6Omluc2VydEFuZExvY2tDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6OnJlbW92ZUNhY2hlSW5kZXhlZEJ5R2VuZXJhdG9yKToKKyAgICAgICAgTmV3
IG1ldGhvZCB0byByZW1vdmUgYWxsIGNhY2hlIGVudHJpZXMgaW5kZXggYnkgSW1hZ2VGcmFtZUdl
bmVyYXRvci4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlOjpzZXRDYWNoZUxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rp
bmdTdG9yZTo6bWVtb3J5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0
b3JlOjpjYWNoZUVudHJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3Jl
OjpwcnVuZSk6CisgICAgICAgIE5ldyBjb2RlIHRvIGltcGxlbWVudCBMUlUgZXZpY3Rpb24gbG9n
aWMuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omluc2VydENhY2hlSW50
ZXJuYWwpOgorICAgICAgICBOZXcgbWV0aG9kIHRvIGhlbHAgbmV3IGNhY2hlIGluc2VydGlvbi4g
VGhpcyBpcyBzZXBhcmF0ZWx5IGJlY2F1c2UgaXQgdG91Y2hlcyAzIGNvbnRhaW5lcnMuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnJlbW92ZUZyb21DYWNoZUludGVybmFs
KToKKyAgICAgICAgTmV3IG1ldGhvZCB0byBoZWxwIHJlbW92ZSBhIGNhY2hlIGVudHJ5IGZyb20g
Y29udGFpbmVycy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6cmVtb3Zl
RnJvbUNhY2hlTGlzdEludGVybmFsKToKKyAgICAgICAgTmV3IGhlbHBlciBtZXRob2QgdG8gaGVs
cCByZW1vdmUgY2FjaGUgZW50cnkgZnJvbSBkb3VibHkgbGlua2VkIGxpc3QuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmg6CisgICAgICAg
IChJbWFnZURlY29kaW5nU3RvcmUpOgorICAgICAgICAoQ2FjaGVFbnRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hlRW50cnk6OmNyZWF0ZUFuZFVzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hlRW50cnk6OkNhY2hlRW50
cnkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5Ojp+
Q2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hl
RW50cnk6OmNhY2hlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6
Q2FjaGVFbnRyeTo6Y2FjaGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlOjpDYWNoZUVudHJ5Ojp1c2VDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6OkNhY2hlRW50cnk6OmluY3JlbWVudFVzZUNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6ZGVjcmVtZW50VXNlQ291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjptZW1v
cnlVc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmluY3JlbWVu
dE1lbW9yeVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6ZGVj
cmVtZW50TWVtb3J5VXNhZ2UpOgorICAgICAgICBOZXcgaGVscGVyIG1ldGhvZHMuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRv
cik6CisKIDIwMTItMTEtMjcgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIENvbXBpbGUgdGltZSBzaXplIGFzc2VydGlvbnMgZm9yIFRyZWVTY29wZSwgU2hhZG93
Um9vdCBhbmQgRWxlbWVudEF0dHJpYnV0ZURhdGEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IDc3OGJkOTBlYjk2NTExZWIzNzQ3ZGU0MmI2OTQwMGM4ODNlZmIxMGEuLjIwNGE5NjAyMTI5
NDJiODEyMDk2ZDkxZGRkNTEzOTcyNjcxY2NiNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNDkgQEAKKzIwMTItMTEtMjcgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBjYWNoZSBldmljdGlvbiBsb2dp
YyBpbiBJbWFnZURlY29kaW5nU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwMzQ4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZGVkIEltYWdlRGVjb2RpbmdTdG9yZVRlc3QgZm9yIHVuaXQgdGVz
dGluZyBuZXcgaW1hZ2UgY2FjaGUuCisKKyAgICAgICAgTmV3IHRlc3RzOgorCisgICAgICAgIElt
YWdlRGVjb2RpbmdTdG9yZVRlc3QuZXZpY3RPbmVDYWNoZQorCisgICAgICAgIFRlc3QgZXZpY3Rp
b24gb2Ygb25lIGNhY2hlIGVudHJ5IGJ5IHNldHRpbmcgYSBzbWFsbGVyIGNhY2hlIGxpbWl0Lgor
CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZVRlc3QucHJ1bmVPcmRlcklzTGVhc3RSZWNlbnRs
eVVzZWQKKworICAgICAgICBUZXN0IGV2aWN0aW9uIG9yZGVyIGlzIGxlYXN0IHJlY2VudGx5IHVz
ZWQuCisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdC5wcnVuZUNhdXNlZEJ5SW5zZXJ0
aW9uCisKKyAgICAgICAgVGVzdCB0aGF0IGV2aWN0aW9uIGlzIHRyaWdnZXJlZCBhbHNvIGJ5IGNh
Y2hlIGluc2VydGlvbi4KKworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmVUZXN0LmNhY2hlSW5V
c2VOb3RFdmljdGVkCisKKyAgICAgICAgVGVzdCB0aGF0IGNhY2hlIGluIHVzZSBpcyBub3QgZXZp
Y3RlZC4KKworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmVUZXN0LmRlc3Ryb3lJbWFnZUZyYW1l
R2VuZXJhdG9yCisKKyAgICAgICAgVGVzdCB0aGF0IGRlbGV0aW5nIGEgSW1hZ2VGcmFtZUdlbmVy
YXRvciBjYXVzZXMgYXNzb2NpYXRlZCBjYWNoZQorICAgICAgICBlbnRyaWVzIHRvIGJlIHJlbW92
ZWQuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9JbWFnZURlY29k
aW5nU3RvcmVUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKElt
YWdlRGVjb2RpbmdTdG9yZVRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0
b3JlVGVzdDo6U2V0VXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlVGVz
dDo6VGVhckRvd24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlVGVzdDo6
Y3JlYXRlQ29tcGxldGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3Rv
cmVUZXN0OjppbnNlcnRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3Rv
cmVUZXN0Ojpsb2NrQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3Jl
VGVzdDo6dW5sb2NrQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3Jl
VGVzdDo6ZXZpY3RPbmVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3Rv
cmVUZXN0Ojppc0NhY2hlQWxpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToKKwogMjAx
Mi0xMS0yNyAgSmFtZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgQ29uc29saWRhdGUgRnJhbWVMb2FkZXI6OmxvYWQoKSBpbnRvIG9uZSBmdW5jdGlvbiB0YWtp
bmcgYSBGcmFtZUxvYWRSZXF1ZXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcAppbmRl
eCA0ODlmZGRjNDI4MDFlNDIxNzRmM2I0OTc3NDRkNTkxOWRhZDNmZTU3Li5mN2ZkZDA5YTNiZDUx
YWFiOTgxYmJhNWUxMWZkNDJlNTlkMDZiMGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9y
ZS5jcHAKQEAgLTM0LDcgKzM0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2Ug
ewogCi1JbWFnZURlY29kaW5nU3RvcmUqIHNfaW5zdGFuY2UgPSAwOworc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGxvbmcgbG9uZyBjRGVmYXVsdENhY2hlTGltaXQgPSA4MTkyICogMTAyNDsKK3N0YXRp
YyBJbWFnZURlY29kaW5nU3RvcmUqIHNfaW5zdGFuY2UgPSAwOwogCiBzdGF0aWMgdm9pZCBzZXRJ
bnN0YW5jZShJbWFnZURlY29kaW5nU3RvcmUqIGltYWdlRGVjb2RpbmdTdG9yZSkKIHsKQEAgLTQ1
LDExICs0NiwyMCBAQCBzdGF0aWMgdm9pZCBzZXRJbnN0YW5jZShJbWFnZURlY29kaW5nU3RvcmUq
IGltYWdlRGVjb2RpbmdTdG9yZSkKIH0gLy8gbmFtZXNwYWNlCiAKIEltYWdlRGVjb2RpbmdTdG9y
ZTo6SW1hZ2VEZWNvZGluZ1N0b3JlKCkKKyAgICA6IG1fY2FjaGVMaW1pdChjRGVmYXVsdENhY2hl
TGltaXQpCisgICAgLCBtX21lbW9yeVVzYWdlKDApCiB7CiB9CiAKIEltYWdlRGVjb2RpbmdTdG9y
ZTo6fkltYWdlRGVjb2RpbmdTdG9yZSgpCiB7CisjaWZuZGVmIE5ERUJVRworICAgIHNldENhY2hl
TGltaXQoMCk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICBBU1NFUlQoIW1f
Y2FjaGVNYXAuc2l6ZSgpKTsKKyAgICBBU1NFUlQoIW1fb3JkZXJlZENhY2hlTGlzdC5zaXplKCkp
OworICAgIEFTU0VSVCghbV9jYWNoZWRTaXplTWFwLnNpemUoKSk7CisjZW5kaWYKIH0KIAogSW1h
Z2VEZWNvZGluZ1N0b3JlKiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCkKQEAgLTc1LDE1
ICs4NSwxNSBAQCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZURlY29kaW5nU3RvcmU6
OmxvY2tDb21wbGV0ZUNhY2hlKGNvbnN0IEltYWdlRnJhbQogICAgICAgICBDYWNoZU1hcDo6aXRl
cmF0b3IgaXRlciA9IG1fY2FjaGVNYXAuZmluZChzdGQ6Om1ha2VfcGFpcihnZW5lcmF0b3IsIHNj
YWxlZFNpemUpKTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9jYWNoZU1hcC5lbmQoKSkKICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICBjYWNoZUVudHJ5ID0gaXRlci0+dmFsdWU7Ci0gICAg
ICAgIGlmICghY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UtPmlzQ29tcGxldGUoKSkKKyAgICAgICAg
Y2FjaGVFbnRyeSA9IGl0ZXItPnZhbHVlLmdldCgpOworICAgICAgICBpZiAoIWNhY2hlRW50cnkt
PmNhY2hlZEltYWdlKCktPmlzQ29tcGxldGUoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgICAgIC8vIEluY3JlbWVudCB1c2UgY291bnQgc3VjaCB0aGF0IGl0IGRvZXNuJ3QgZ2V0IGV2
aWN0ZWQuCi0gICAgICAgICsrY2FjaGVFbnRyeS0+dXNlQ291bnQ7CisgICAgICAgIGNhY2hlRW50
cnktPmluY3JlbWVudFVzZUNvdW50KCk7CiAgICAgfQotICAgIGNhY2hlRW50cnktPmNhY2hlZElt
YWdlLT5iaXRtYXAoKS5sb2NrUGl4ZWxzKCk7Ci0gICAgcmV0dXJuIGNhY2hlRW50cnktPmNhY2hl
ZEltYWdlLmdldCgpOworICAgIGNhY2hlRW50cnktPmNhY2hlZEltYWdlKCktPmJpdG1hcCgpLmxv
Y2tQaXhlbHMoKTsKKyAgICByZXR1cm4gY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UoKTsKIH0KIAog
Y29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrSW5jb21w
bGV0ZUNhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgY29uc3QgU2tJ
U2l6ZSYgc2NhbGVkU2l6ZSkKQEAgLTEwNSw5ICsxMTUsMTIgQEAgdm9pZCBJbWFnZURlY29kaW5n
U3RvcmU6OnVubG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwg
Y29uc3QKICAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY2FjaGVNYXAuZmluZChzdGQ6
Om1ha2VfcGFpcihnZW5lcmF0b3IsIGNhY2hlZEltYWdlLT5zY2FsZWRTaXplKCkpKTsKICAgICBB
U1NFUlQoaXRlciAhPSBtX2NhY2hlTWFwLmVuZCgpKTsKIAotICAgIENhY2hlRW50cnkqIGNhY2hl
RW50cnkgPSBpdGVyLT52YWx1ZTsKLSAgICAtLWNhY2hlRW50cnktPnVzZUNvdW50OwotICAgIEFT
U0VSVChjYWNoZUVudHJ5LT51c2VDb3VudCA+PSAwKTsKKyAgICBDYWNoZUVudHJ5KiBjYWNoZUVu
dHJ5ID0gaXRlci0+dmFsdWUuZ2V0KCk7CisgICAgY2FjaGVFbnRyeS0+ZGVjcmVtZW50VXNlQ291
bnQoKTsKKworICAgIC8vIFB1dCB0aGUgZW50cnkgdG8gdGhlIGVuZCBvZiBsaXN0LgorICAgIG1f
b3JkZXJlZENhY2hlTGlzdC5yZW1vdmUoY2FjaGVFbnRyeSk7CisgICAgbV9vcmRlcmVkQ2FjaGVM
aXN0LmFwcGVuZChjYWNoZUVudHJ5KTsKIH0KIAogY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCog
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnNlcnRBbmRMb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdl
bmVyYXRvciogZ2VuZXJhdG9yLCBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGltYWdl
KQpAQCAtMTI3LDIzICsxNDAsMTI2IEBAIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdl
RGVjb2RpbmdTdG9yZTo6aW5zZXJ0QW5kTG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhCiAgICAgfQog
CiAgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UgPSBpbWFnZS5nZXQoKTsKLSAg
ICBPd25QdHI8Q2FjaGVFbnRyeT4gbmV3Q2FjaGVFbnRyeSA9IENhY2hlRW50cnk6OmNyZWF0ZUFu
ZFVzZShpbWFnZSk7CisgICAgT3duUHRyPENhY2hlRW50cnk+IG5ld0NhY2hlRW50cnkgPSBDYWNo
ZUVudHJ5OjpjcmVhdGVBbmRVc2UoZ2VuZXJhdG9yLCBpbWFnZSk7CiAKLSAgICBDYWNoZUlkZW50
aWZpZXIga2V5ID0gc3RkOjptYWtlX3BhaXIoZ2VuZXJhdG9yLCBjYWNoZWRJbWFnZS0+c2NhbGVk
U2l6ZSgpKTsKICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwotICAgIEFTU0VSVCghbV9j
YWNoZU1hcC5jb250YWlucyhrZXkpKTsKLQotICAgIC8vIG1fY2FjaGVNYXAgaXMgdXNlZCBmb3Ig
aW5kZXhpbmcgYW5kIHF1aWNrIGxvb2t1cCBvZiBhIGNhY2hlZCBpbWFnZS4KLSAgICAvLyBtX2Nh
Y2hlRW50cmllcyBpcyB1c2VkIHRvIHN1cHBvcnQgTFJVIG9wZXJhdGlvbnMgdG8gcmVvcmRlciBj
YWNoZQotICAgIC8vIGVudHJpZXMgcXVpY2tseS4gSXQgYWxzbyBvd25zIGNhY2hlZCBpbWFnZXMu
Ci0gICAgbV9jYWNoZU1hcC5hZGQoa2V5LCBuZXdDYWNoZUVudHJ5LmdldCgpKTsKLSAgICBtX2Nh
Y2hlRW50cmllcy5hcHBlbmQobmV3Q2FjaGVFbnRyeS5yZWxlYXNlKCkpOworICAgIEFTU0VSVCgh
bV9jYWNoZU1hcC5jb250YWlucyhuZXdDYWNoZUVudHJ5LT5jYWNoZUtleSgpKSk7CisgICAgaW5z
ZXJ0Q2FjaGVJbnRlcm5hbChuZXdDYWNoZUVudHJ5LnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIGNh
Y2hlZEltYWdlOwogfQogCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6cmVtb3ZlQ2FjaGVJbmRl
eGVkQnlHZW5lcmF0b3IoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yKQorewor
ICAgIFZlY3RvcjxPd25QdHI8Q2FjaGVFbnRyeT4gPiBjYWNoZUVudHJpZXNUb0RlbGV0ZTsKKyAg
ICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgICAgIENhY2hlZFNp
emVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhY2hlZFNpemVNYXAuZmluZChnZW5lcmF0b3IpOwor
ICAgICAgICBpZiAoaXRlciA9PSBtX2NhY2hlZFNpemVNYXAuZW5kKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgLy8gR2V0IGFsbCBjYWNoZWQgc2l6ZXMgaW5kZXhlZCBieSBnZW5l
cmF0b3IuCisgICAgICAgIFZlY3RvcjxTa0lTaXplPiBjYWNoZWRTaXplTGlzdDsKKyAgICAgICAg
Y29weVRvVmVjdG9yKGl0ZXItPnZhbHVlLCBjYWNoZWRTaXplTGlzdCk7CisKKyAgICAgICAgLy8g
Rm9yIGVhY2ggY2FjaGVkIHNpemUgZmluZCB0aGUgY29ycmVzcG9uZGluZyBDYWNoZUVudHJ5IGFu
ZCByZW1vdmUgaXQgZnJvbQorICAgICAgICAvLyBtX2NhY2hlTWFwLgorICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNhY2hlZFNpemVMaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBDYWNoZUlkZW50aWZpZXIga2V5ID0gc3RkOjptYWtlX3BhaXIoZ2VuZXJhdG9yLCBjYWNoZWRT
aXplTGlzdFtpXSk7CisgICAgICAgICAgICBBU1NFUlQobV9jYWNoZU1hcC5jb250YWlucyhrZXkp
KTsKKworICAgICAgICAgICAgY29uc3QgQ2FjaGVFbnRyeSogY2FjaGVFbnRyeSA9IG1fY2FjaGVN
YXAuZ2V0KGtleSk7CisgICAgICAgICAgICBBU1NFUlQoIWNhY2hlRW50cnktPnVzZUNvdW50KCkp
OworICAgICAgICAgICAgcmVtb3ZlRnJvbUNhY2hlSW50ZXJuYWwoY2FjaGVFbnRyeSwgJmNhY2hl
RW50cmllc1RvRGVsZXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbW92ZSBmcm9tIGNh
Y2hlIGxpc3QgYXMgd2VsbC4KKyAgICAgICAgcmVtb3ZlRnJvbUNhY2hlTGlzdEludGVybmFsKGNh
Y2hlRW50cmllc1RvRGVsZXRlKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3Jl
OjpzZXRDYWNoZUxpbWl0KHVuc2lnbmVkIGxvbmcgbG9uZyBjYWNoZUxpbWl0KQoreworICAgIHsK
KyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICAgICAgbV9jYWNoZUxpbWl0
ID0gY2FjaGVMaW1pdDsKKyAgICB9CisgICAgcHJ1bmUoKTsKK30KKwordW5zaWduZWQgbG9uZyBs
b25nIEltYWdlRGVjb2RpbmdTdG9yZTo6bWVtb3J5VXNhZ2UoKQoreworICAgIE11dGV4TG9ja2Vy
IGxvY2sobV9tdXRleCk7CisgICAgcmV0dXJuIG1fbWVtb3J5VXNhZ2U7Cit9CisKK3Vuc2lnbmVk
IEltYWdlRGVjb2RpbmdTdG9yZTo6Y2FjaGVFbnRyaWVzKCkKK3sKKyAgICBNdXRleExvY2tlciBs
b2NrKG1fbXV0ZXgpOworICAgIHJldHVybiBtX2NhY2hlTWFwLnNpemUoKTsKK30KKwogdm9pZCBJ
bWFnZURlY29kaW5nU3RvcmU6OnBydW5lKCkKIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQuCisg
ICAgVmVjdG9yPE93blB0cjxDYWNoZUVudHJ5PiA+IGNhY2hlRW50cmllc1RvRGVsZXRlOworICAg
IHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKworICAgICAgICAvLyBIZWFk
IG9mIHRoZSBsaXN0IGlzIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGVudHJ5LgorICAgICAgICBj
b25zdCBDYWNoZUVudHJ5KiBjYWNoZUVudHJ5ID0gbV9vcmRlcmVkQ2FjaGVMaXN0LmhlYWQoKTsK
KworICAgICAgICAvLyBXYWxrIHRoZSBsaXN0IG9mIGNhY2hlIGVudHJpZXMgc3RhcnRpbmcgZnJv
bSB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZAorICAgICAgICAvLyBhbmQgdGhlbiBrZWVwIHRoZW0g
Zm9yIGRlbGV0aW9uIGxhdGVyLgorICAgICAgICB3aGlsZSAoY2FjaGVFbnRyeSAmJiBtX21lbW9y
eVVzYWdlID4gbV9jYWNoZUxpbWl0KSB7CisgICAgICAgICAgICAvLyBDYWNoZSBpcyBub3QgdXNl
ZDsgUmVtb3ZlIGl0LgorICAgICAgICAgICAgaWYgKCFjYWNoZUVudHJ5LT51c2VDb3VudCgpKQor
ICAgICAgICAgICAgICAgIHJlbW92ZUZyb21DYWNoZUludGVybmFsKGNhY2hlRW50cnksICZjYWNo
ZUVudHJpZXNUb0RlbGV0ZSk7CisgICAgICAgICAgICBjYWNoZUVudHJ5ID0gY2FjaGVFbnRyeS0+
bmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVtb3ZlIGZyb20gY2FjaGUgbGlzdCBh
cyB3ZWxsLgorICAgICAgICByZW1vdmVGcm9tQ2FjaGVMaXN0SW50ZXJuYWwoY2FjaGVFbnRyaWVz
VG9EZWxldGUpOworICAgIH0KK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6Omluc2VydENh
Y2hlSW50ZXJuYWwoUGFzc093blB0cjxDYWNoZUVudHJ5PiBjYWNoZUVudHJ5KQoreworICAgIGlu
Y3JlbWVudE1lbW9yeVVzYWdlKGNhY2hlRW50cnktPm1lbW9yeVVzYWdlKCkpOworCisgICAgLy8g
bV9vcmRlcmVkQ2FjaGVMaXN0IGlzIHVzZWQgdG8gc3VwcG9ydCBMUlUgb3BlcmF0aW9ucyB0byBy
ZW9yZGVyIGNhY2hlCisgICAgLy8gZW50cmllcyBxdWlja2x5LgorICAgIG1fb3JkZXJlZENhY2hl
TGlzdC5hcHBlbmQoY2FjaGVFbnRyeS5nZXQoKSk7CisKKyAgICBDYWNoZUlkZW50aWZpZXIga2V5
ID0gY2FjaGVFbnRyeS0+Y2FjaGVLZXkoKTsKKyAgICAvLyBtX2NhY2hlTWFwIGlzIHVzZWQgZm9y
IGluZGV4aW5nIGFuZCBxdWljayBsb29rdXAgb2YgYSBjYWNoZWQgaW1hZ2UuIEl0IG93bnMKKyAg
ICAvLyBhbGwgY2FjaGUgZW50cmllcy4KKyAgICBtX2NhY2hlTWFwLmFkZChrZXksIGNhY2hlRW50
cnkpOworCisgICAgLy8gbV9jYWNoZWRTaXplTWFwIGtlZXBzIGFsbCBzY2FsZWQgc2l6ZXMgYXNz
b2NpYXRlZCB3aXRoIGFuIEltYWdlRnJhbWVHZW5lcmF0b3IuCisgICAgQ2FjaGVkU2l6ZU1hcDo6
QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2FjaGVkU2l6ZU1hcC5hZGQoa2V5LmZpcnN0LCBTaXplU2V0
KCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYWRkKGtleS5zZWNvbmQpOworfQorCit2
b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6cmVtb3ZlRnJvbUNhY2hlSW50ZXJuYWwoY29uc3QgQ2Fj
aGVFbnRyeSogY2FjaGVFbnRyeSwgVmVjdG9yPE93blB0cjxDYWNoZUVudHJ5PiA+KiBkZWxldGlv
bkxpc3QpCit7CisgICAgZGVjcmVtZW50TWVtb3J5VXNhZ2UoY2FjaGVFbnRyeS0+bWVtb3J5VXNh
Z2UoKSk7CisKKyAgICAvLyBSZW1vdmUgZnJvbSBtX2NhY2hlTWFwLgorICAgIENhY2hlSWRlbnRp
ZmllciBrZXkgPSBjYWNoZUVudHJ5LT5jYWNoZUtleSgpOworICAgIGRlbGV0aW9uTGlzdC0+YXBw
ZW5kKG1fY2FjaGVNYXAudGFrZShrZXkpKTsKKworICAgIC8vIFJlbW92ZSBmcm9tIG1fY2FjaGVk
U2l6ZU1hcC4KKyAgICBDYWNoZWRTaXplTWFwOjppdGVyYXRvciBpdGVyID0gbV9jYWNoZWRTaXpl
TWFwLmZpbmQoa2V5LmZpcnN0KTsKKyAgICBpZiAoaXRlciA9PSBtX2NhY2hlZFNpemVNYXAuZW5k
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpdGVyLT52YWx1ZS5yZW1vdmUoa2V5LnNlY29uZCk7
CisgICAgaWYgKCFpdGVyLT52YWx1ZS5zaXplKCkpCisgICAgICAgIG1fY2FjaGVkU2l6ZU1hcC5y
ZW1vdmUoaXRlcik7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpyZW1vdmVGcm9tQ2Fj
aGVMaXN0SW50ZXJuYWwoY29uc3QgVmVjdG9yPE93blB0cjxDYWNoZUVudHJ5PiA+JiBkZWxldGlv
bkxpc3QpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZWxldGlvbkxpc3Quc2l6ZSgp
OyArK2kpCisgICAgICAgIG1fb3JkZXJlZENhY2hlTGlzdC5yZW1vdmUoZGVsZXRpb25MaXN0W2ld
LmdldCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5n
U3RvcmUuaAppbmRleCAwYWVhMmU5Njk5ZTc4NzA3MTE0YWU2ZjY2NGM2Y2M5MTE2NzczYTRlLi42
M2M5M2IxYmZkNGRmMjI1ZGJjMDJjZGUxYjdjNzhjYzJkNmNjYTEwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURl
Y29kaW5nU3RvcmUuaApAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIlNrU2l6ZS5oIgogI2lu
Y2x1ZGUgIlNrU2l6ZUhhc2guaCIKIAorI2luY2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZl
cy5oPgpAQCAtNTYsNDIgKzU4LDkwIEBAIHB1YmxpYzoKICAgICB2b2lkIHVubG9ja0NhY2hlKGNv
bnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50Kik7CiAg
ICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogaW5zZXJ0QW5kTG9ja0NhY2hlKGNvbnN0IElt
YWdlRnJhbWVHZW5lcmF0b3IqLCBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+KTsKIAor
ICAgIC8vIFJlbW92ZSBhbGwgY2FjaGUgZW50cmllcyBpbmRleGVkIGJ5IEltYWdlRnJhbWVHZW5l
cmF0b3IuCisgICAgdm9pZCByZW1vdmVDYWNoZUluZGV4ZWRCeUdlbmVyYXRvcihjb25zdCBJbWFn
ZUZyYW1lR2VuZXJhdG9yKik7CisKKyAgICB2b2lkIHNldENhY2hlTGltaXQodW5zaWduZWQgbG9u
ZyBsb25nKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWVtb3J5VXNhZ2UoKTsKKyAgICB1bnNp
Z25lZCBjYWNoZUVudHJpZXMoKTsKKwogcHJpdmF0ZToKLSAgICBzdHJ1Y3QgQ2FjaGVFbnRyeSB7
Ci0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPENhY2hlRW50cnk+IGNyZWF0ZSgpIHsgcmV0dXJu
IGFkb3B0UHRyKG5ldyBDYWNoZUVudHJ5KCkpOyB9Ci0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRy
PENhY2hlRW50cnk+IGNyZWF0ZUFuZFVzZShQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+
IGltYWdlKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ2FjaGVFbnRyeShpbWFnZSwgMSkpOyB9Cisg
ICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIFNrSVNpemU+
IENhY2hlSWRlbnRpZmllcjsKIAotICAgICAgICBDYWNoZUVudHJ5KCkKLSAgICAgICAgICAgIDog
dXNlQ291bnQoMCkKKyAgICBjbGFzcyBDYWNoZUVudHJ5IDogcHVibGljIERvdWJseUxpbmtlZExp
c3ROb2RlPENhY2hlRW50cnk+IHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFdURjo6RG91Ymx5TGlu
a2VkTGlzdE5vZGU8Q2FjaGVFbnRyeT47CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFz
c093blB0cjxDYWNoZUVudHJ5PiBjcmVhdGVBbmRVc2UoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRv
ciogZ2VuZXJhdG9yLCBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlKQogICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENhY2hlRW50cnkoZ2VuZXJh
dG9yLCBpbWFnZSwgMSkpOwogICAgICAgICB9CiAKLSAgICAgICAgQ2FjaGVFbnRyeShQYXNzT3du
UHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlLCBpbnQgY291bnQpCi0gICAgICAgICAgICA6
IGNhY2hlZEltYWdlKGltYWdlKQotICAgICAgICAgICAgLCB1c2VDb3VudChjb3VudCkKKyAgICAg
ICAgQ2FjaGVFbnRyeShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIFBhc3NP
d25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gaW1hZ2UsIGludCBjb3VudCkKKyAgICAgICAgICAg
IDogbV9wcmV2KDApCisgICAgICAgICAgICAsIG1fbmV4dCgwKQorICAgICAgICAgICAgLCBtX2dl
bmVyYXRvcihnZW5lcmF0b3IpCisgICAgICAgICAgICAsIG1fY2FjaGVkSW1hZ2UoaW1hZ2UpCisg
ICAgICAgICAgICAsIG1fdXNlQ291bnQoY291bnQpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAg
ICAgICAgIH5DYWNoZUVudHJ5KCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCF1c2VD
b3VudCk7CisgICAgICAgICAgICBBU1NFUlQoIW1fdXNlQ291bnQpOwogICAgICAgICB9CiAKLSAg
ICAgICAgT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGNhY2hlZEltYWdlOwotICAgICAgICBp
bnQgdXNlQ291bnQ7CisgICAgICAgIENhY2hlSWRlbnRpZmllciBjYWNoZUtleSgpIGNvbnN0IHsg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1fZ2VuZXJhdG9yLCBtX2NhY2hlZEltYWdlLT5zY2FsZWRT
aXplKCkpOyB9CisgICAgICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZS5nZXQoKTsgfQorICAgICAgICBpbnQgdXNl
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3VzZUNvdW50OyB9CisgICAgICAgIHZvaWQgaW5jcmVt
ZW50VXNlQ291bnQoKSB7ICsrbV91c2VDb3VudDsgfQorICAgICAgICB2b2lkIGRlY3JlbWVudFVz
ZUNvdW50KCkgeyAtLW1fdXNlQ291bnQ7IEFTU0VSVChtX3VzZUNvdW50ID49IDApOyB9CisKKyAg
ICAgICAgLy8gTk9URTogUmV0dXJucyBzaXplIHRydW5zY2F0ZWQgdG8gYSAzMi1iaXRzIGludGVn
ZXIuCisgICAgICAgIHVuc2lnbmVkIG1lbW9yeVVzYWdlKCkgY29uc3QgeyByZXR1cm4gY2FjaGVk
SW1hZ2UoKS0+Yml0bWFwKCkuZ2V0U2FmZVNpemUoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgQ2FjaGVFbnRyeSogbV9wcmV2OworICAgICAgICBDYWNoZUVudHJ5KiBtX25leHQ7CisgICAg
ICAgIGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIG1fZ2VuZXJhdG9yOworICAgICAgICBPd25Q
dHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gbV9jYWNoZWRJbWFnZTsKKyAgICAgICAgaW50IG1fdXNl
Q291bnQ7CiAgICAgfTsKIAogICAgIEltYWdlRGVjb2RpbmdTdG9yZSgpOwotICAgIHZvaWQgcHJ1
bmUoKTsKIAotICAgIFZlY3RvcjxPd25QdHI8Q2FjaGVFbnRyeT4gPiBtX2NhY2hlRW50cmllczsK
KyAgICB2b2lkIHBydW5lKCk7CiAKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxjb25zdCBJbWFnZUZy
YW1lR2VuZXJhdG9yKiwgU2tJU2l6ZT4gQ2FjaGVJZGVudGlmaWVyOwotICAgIHR5cGVkZWYgSGFz
aE1hcDxDYWNoZUlkZW50aWZpZXIsIENhY2hlRW50cnkqPiBDYWNoZU1hcDsKKyAgICAvLyBUaGVz
ZSBtZXRob2RzIGFyZSBjYWxsZWQgd2hpbGUgbV9tdXRleCBpcyBsb2NrZWQuCisgICAgdm9pZCBp
bnNlcnRDYWNoZUludGVybmFsKFBhc3NPd25QdHI8Q2FjaGVFbnRyeT4pOworICAgIHZvaWQgcmVt
b3ZlRnJvbUNhY2hlSW50ZXJuYWwoY29uc3QgQ2FjaGVFbnRyeSosIFZlY3RvcjxPd25QdHI8Q2Fj
aGVFbnRyeT4gPiogZGVsZXRpb25MaXN0KTsKKyAgICB2b2lkIHJlbW92ZUZyb21DYWNoZUxpc3RJ
bnRlcm5hbChjb25zdCBWZWN0b3I8T3duUHRyPENhY2hlRW50cnk+ID4mIGRlbGV0aW9uTGlzdCk7
CisgICAgdm9pZCBpbmNyZW1lbnRNZW1vcnlVc2FnZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkg
eyBtX21lbW9yeVVzYWdlICs9IHNpemU7IH0KKyAgICB2b2lkIGRlY3JlbWVudE1lbW9yeVVzYWdl
KHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbWVtb3J5
VXNhZ2UgPj0gc2l6ZSk7CisgICAgICAgIG1fbWVtb3J5VXNhZ2UgLT0gc2l6ZTsKKyAgICB9CisK
KyAgICAvLyBIZWFkIG9mIHRoaXMgbGlzdCBpcyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBjYWNo
ZSBlbnRyeS4KKyAgICAvLyBUYWlsIG9mIHRoaXMgbGlzdCBpcyB0aGUgbW9zdCByZWNlbnRseSB1
c2VkIGNhY2hlIGVudHJ5LgorICAgIERvdWJseUxpbmtlZExpc3Q8Q2FjaGVFbnRyeT4gbV9vcmRl
cmVkQ2FjaGVMaXN0OworCisgICAgdHlwZWRlZiBIYXNoTWFwPENhY2hlSWRlbnRpZmllciwgT3du
UHRyPENhY2hlRW50cnk+ID4gQ2FjaGVNYXA7CiAgICAgQ2FjaGVNYXAgbV9jYWNoZU1hcDsKIAot
ICAgIC8vIFByb3RlY3QgY29uY3VycmVudCBhY2Nlc3MgdG8gYWxsIGluc3RhbmNlcyBvZiBDYWNo
ZUVudHJ5IHN0b3JlZCBpbiBtX2NhY2hlRW50cmllcyBhbmQKLSAgICAvLyBtX2NhY2hlTWFwIGFz
IHdlbGwgYXMgdGhlIGNvbnRhaW5lcnMuCisgICAgdHlwZWRlZiBIYXNoU2V0PFNrSVNpemU+IFNp
emVTZXQ7CisgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBT
aXplU2V0PiBDYWNoZWRTaXplTWFwOworICAgIENhY2hlZFNpemVNYXAgbV9jYWNoZWRTaXplTWFw
OworCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG1fY2FjaGVMaW1pdDsKKyAgICB1bnNpZ25lZCBs
b25nIGxvbmcgbV9tZW1vcnlVc2FnZTsKKworICAgIC8vIFByb3RlY3QgY29uY3VycmVudCBhY2Nl
c3MgdG8gdGhlc2UgbWVtYmVyczoKKyAgICAvLyAgIG1fb3JkZXJlZENhY2hlTGlzdAorICAgIC8v
ICAgbV9jYWNoZU1hcCBhbmQgYWxsIENhY2hlRW50cnlzIHN0b3JlZCBpbiBpdAorICAgIC8vICAg
bV9jYWNoZWRTaXplTWFwCisgICAgLy8gICBtX2NhY2hlTGltaXQKKyAgICAvLyAgIG1fbWVtb3J5
VXNhZ2UKICAgICBNdXRleCBtX211dGV4OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJh
dG9yLmNwcAppbmRleCAyMjBhNTdkNDVkYTEyMzdlZmZiNTg4YWE0ZTI3M2M1YTdhMzIzNjU0Li5l
Zjg1MDU1YzRkYzIzYTRkNjAwZjM5MDhjOWYwNTM5MWZhOWM0OWE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUZyYW1lR2VuZXJhdG9yLmNwcApAQCAtNTQsOCArNTQsMTEgQEAgSW1hZ2VGcmFtZUdlbmVyYXRv
cjo6SW1hZ2VGcmFtZUdlbmVyYXRvcihjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSwgUGFzc1JlZlB0
cjxTaGEKIAogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6fkltYWdlRnJhbWVHZW5lcmF0b3IoKQogewot
ICAgIC8vIFRPRE86IENhbGwgSW1hZ2VEZWNvZGluZ1N0b3JlIHRvIHJlbW92ZSBhbGwgY2FjaGUg
ZW50cmllcyBpbmRleGVkCi0gICAgLy8gYnkgdGhpcyBvYmplY3QuCisgICAgLy8gRklYTUU6IFRo
aXMgY2hlY2sgaXMgbm90IHJlYWxseSB0aHJlYWQtc2FmZS4gVGhpcyBzaG91bGQgYmUgY2hhbmdl
ZCB0bzoKKyAgICAvLyBJbWFnZURlY29kaW5nU3RvcmU6OnJlbW92ZUNhY2hlRnJvbUluc3RhbmNl
KHRoaXMpOworICAgIC8vIFdoaWNoIHVzZXMgYSBsb2NrIGludGVybmFsbHkuCisgICAgaWYgKElt
YWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKSkKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZSgpLT5yZW1vdmVDYWNoZUluZGV4ZWRCeUdlbmVyYXRvcih0aGlzKTsKIH0KIAog
dm9pZCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CmluZGV4IGRmNTBhZmZjNTkxMTIxOTJlNzUwNWY1ZTJiODA1ODdiYzlkNWRkNzIuLmYyNjUyZmMz
OWRmMzQ5N2NjYTk2ZmM1ZTU5ZDg5NjE2MTAzOWRlOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQpAQCAtODAsNiArODAsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0lEQktleVBhdGhU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCTGV2ZWxEQkNvZGluZ1Rlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9JREJSZXF1ZXN0VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rl
c3RzL0ltYWdlRGVjb2RpbmdTdG9yZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JbWFn
ZUZyYW1lR2VuZXJhdG9yVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ltYWdlTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZURlY29kaW5n
U3RvcmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VEZWNvZGlu
Z1N0b3JlVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTk0YTg4ODE1YWIxNThiZjIyZjAxYzU4Mjg4ZGIw
YzE2YTU2MzgxOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdC5jcHAKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKwor
I2luY2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdCA6IHB1YmxpYyA6
OnRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAg
eworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbmNlKCk7CisgICAgICAg
IG1fZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7CisgICAgICAgIG1fZ2VuZXJhdG9yID0g
SW1hZ2VGcmFtZUdlbmVyYXRvcjo6Y3JlYXRlKFNrSVNpemU6Ok1ha2UoMTAwLCAxMDApLCBtX2Rh
dGEsIHRydWUpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgewor
ICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCk7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBjcmVhdGVDb21wbGV0ZUlt
YWdlKGNvbnN0IFNrSVNpemUmIHNpemUpCisgICAgeworICAgICAgICBTa0JpdG1hcCBiaXRtYXA7
CisgICAgICAgIGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAgICAgICBiaXRtYXAuYWxsb2NQaXhlbHMo
KTsKKyAgICAgICAgcmV0dXJuIFNjYWxlZEltYWdlRnJhZ21lbnQ6OmNyZWF0ZShzaXplLCBiaXRt
YXAsIHRydWUpOworICAgIH0KKworICAgIHZvaWQgaW5zZXJ0Q2FjaGUoY29uc3QgU2tJU2l6ZSYg
c2l6ZSkKKyAgICB7CisgICAgICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGltYWdlID0g
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5pbnNlcnRBbmRMb2NrQ2FjaGUoCisgICAg
ICAgICAgICBtX2dlbmVyYXRvci5nZXQoKSwgY3JlYXRlQ29tcGxldGVJbWFnZShzaXplKSk7Cisg
ICAgICAgIHVubG9ja0NhY2hlKGltYWdlKTsKKyAgICB9CisKKyAgICBjb25zdCBTY2FsZWRJbWFn
ZUZyYWdtZW50KiBsb2NrQ2FjaGUoY29uc3QgU2tJU2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmxvY2tDb21wbGV0ZUNhY2hl
KG1fZ2VuZXJhdG9yLmdldCgpLCBzaXplKTsKKyAgICB9CisKKyAgICB2b2lkIHVubG9ja0NhY2hl
KGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlKQorICAgIHsKKyAgICAgICAg
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5n
ZXQoKSwgY2FjaGVkSW1hZ2UpOworICAgIH0KKworICAgIHZvaWQgZXZpY3RPbmVDYWNoZSgpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWVtb3J5VXNhZ2UgPSBJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlKCktPm1lbW9yeVVzYWdlKCk7CisgICAgICAgIGlmIChtZW1vcnlV
c2FnZSkKKyAgICAgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+c2V0Q2Fj
aGVMaW1pdChtZW1vcnlVc2FnZSAtIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBJbWFn
ZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnNldENhY2hlTGltaXQoMCk7CisgICAgfQorCisg
ICAgYm9vbCBpc0NhY2hlQWxpdmUoY29uc3QgU2tJU2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAg
IGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlID0gbG9ja0NhY2hlKHNpemUp
OworICAgICAgICBpZiAoIWNhY2hlZEltYWdlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2Vu
ZXJhdG9yLmdldCgpLCBjYWNoZWRJbWFnZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBSZWZQdHI8SW1hZ2VGcmFt
ZUdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7Cit9OworCitURVNUX0YoSW1hZ2VEZWNvZGluZ1N0b3Jl
VGVzdCwgZXZpY3RPbmVDYWNoZSkKK3sKKyAgICBpbnNlcnRDYWNoZShTa0lTaXplOjpNYWtlKDEs
IDEpKTsKKyAgICBpbnNlcnRDYWNoZShTa0lTaXplOjpNYWtlKDIsIDIpKTsKKyAgICBpbnNlcnRD
YWNoZShTa0lTaXplOjpNYWtlKDMsIDMpKTsKKyAgICBFWFBFQ1RfRVEoM3UsIEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworCisgICAgZXZpY3RPbmVDYWNo
ZSgpOworICAgIEVYUEVDVF9FUSgydSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5j
YWNoZUVudHJpZXMoKSk7CisKKyAgICBldmljdE9uZUNhY2hlKCk7CisgICAgRVhQRUNUX0VRKDF1
LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKK30KKwor
VEVTVF9GKEltYWdlRGVjb2RpbmdTdG9yZVRlc3QsIHBydW5lT3JkZXJJc0xlYXN0UmVjZW50bHlV
c2VkKQoreworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMSwgMSkpOworICAgIGluc2Vy
dENhY2hlKFNrSVNpemU6Ok1ha2UoMiwgMikpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1h
a2UoMywgMykpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoNCwgNCkpOworICAgIGlu
c2VydENhY2hlKFNrSVNpemU6Ok1ha2UoNSwgNSkpOworICAgIEVYUEVDVF9FUSg1dSwgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CisKKyAgICAvLyBVc2Ug
Y2FjaGUgaW4gdGhlIG9yZGVyIDMsIDIsIDQsIDEsIDUuCisgICAgRVhQRUNUX1RSVUUoaXNDYWNo
ZUFsaXZlKFNrSVNpemU6Ok1ha2UoMywgMykpKTsKKyAgICBFWFBFQ1RfVFJVRShpc0NhY2hlQWxp
dmUoU2tJU2l6ZTo6TWFrZSgyLCAyKSkpOworICAgIEVYUEVDVF9UUlVFKGlzQ2FjaGVBbGl2ZShT
a0lTaXplOjpNYWtlKDQsIDQpKSk7CisgICAgRVhQRUNUX1RSVUUoaXNDYWNoZUFsaXZlKFNrSVNp
emU6Ok1ha2UoMSwgMSkpKTsKKyAgICBFWFBFQ1RfVFJVRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6
TWFrZSg1LCA1KSkpOworCisgICAgLy8gRXZpY3QgMy4KKyAgICBldmljdE9uZUNhY2hlKCk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpNYWtlKDMsIDMpKSk7CisgICAg
RVhQRUNUX0VRKDR1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmll
cygpKTsKKworICAgIC8vIEV2aWN0IDIuCisgICAgZXZpY3RPbmVDYWNoZSgpOworICAgIEVYUEVD
VF9GQUxTRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSgyLCAyKSkpOworICAgIEVYUEVDVF9F
USgzdSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CisK
KyAgICAvLyBFdmljdCA0LgorICAgIGV2aWN0T25lQ2FjaGUoKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
aXNDYWNoZUFsaXZlKFNrSVNpemU6Ok1ha2UoNCwgNCkpKTsKKyAgICBFWFBFQ1RfRVEoMnUsIElt
YWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworCisgICAgLy8g
RXZpY3QgMS4KKyAgICBldmljdE9uZUNhY2hlKCk7CisgICAgRVhQRUNUX0ZBTFNFKGlzQ2FjaGVB
bGl2ZShTa0lTaXplOjpNYWtlKDEsIDEpKSk7CisgICAgRVhQRUNUX0VRKDF1LCBJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKKworICAgIC8vIEV2aWN0IDUu
CisgICAgZXZpY3RPbmVDYWNoZSgpOworICAgIEVYUEVDVF9GQUxTRShpc0NhY2hlQWxpdmUoU2tJ
U2l6ZTo6TWFrZSg1LCA1KSkpOworICAgIEVYUEVDVF9FUSgwdSwgSW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7Cit9CisKK1RFU1RfRihJbWFnZURlY29kaW5n
U3RvcmVUZXN0LCBwcnVuZUNhdXNlZEJ5SW5zZXJ0aW9uKQoreworICAgIEltYWdlRGVjb2RpbmdT
dG9yZTo6aW5zdGFuY2UoKS0+c2V0Q2FjaGVMaW1pdCgxMDApOworCisgICAgLy8gSW5zZXJ0IDEw
MCBlbnRyaWVzLgorICAgIC8vIENhY2hlIGVudHJpZXMgc3RvcmVkIHNob3VsZCBpbmNyZWFzZSBh
bmQgZXZlbnR1YWxseSBkZWNyZWFzZSB0byAxLgorICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1h
a2UoMSwgMSkpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMiwgMikpOworICAgIGlu
c2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMywgMykpOworICAgIEVYUEVDVF9FUSgzdSwgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CisKKyAgICBmb3IgKGlu
dCBpID0gNDsgaSA8PSAxMDA7ICsraSkKKyAgICAgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFr
ZShpLCBpKSk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFu
Y2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IDk5OyArK2kp
CisgICAgICAgIEVYUEVDVF9GQUxTRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZShpLCBpKSkp
OworICAgIEVYUEVDVF9UUlVFKGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpNYWtlKDEwMCwgMTAwKSkp
OworfQorCitURVNUX0YoSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdCwgY2FjaGVJblVzZU5vdEV2aWN0
ZWQpCit7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSgxLCAxKSk7CisgICAgaW5zZXJ0
Q2FjaGUoU2tJU2l6ZTo6TWFrZSgyLCAyKSk7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFr
ZSgzLCAzKSk7CisgICAgRVhQRUNUX0VRKDN1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
KCktPmNhY2hlRW50cmllcygpKTsKKworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNh
Y2hlZEltYWdlID0gbG9ja0NhY2hlKFNrSVNpemU6Ok1ha2UoMSwgMSkpOworICAgIEVYUEVDVF9U
UlVFKGNhY2hlZEltYWdlKTsKKworICAgIC8vIENhY2hlIDIgaXMgZXZpY3RlZCBiZWNhdXNlIGNh
Y2hlIDEgaXMgaW4gdXNlLgorICAgIGV2aWN0T25lQ2FjaGUoKTsKKyAgICBFWFBFQ1RfVFJVRShp
c0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSgxLCAxKSkpOworICAgIEVYUEVDVF9GQUxTRShpc0Nh
Y2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSgyLCAyKSkpOworICAgIEVYUEVDVF9UUlVFKGlzQ2FjaGVB
bGl2ZShTa0lTaXplOjpNYWtlKDMsIDMpKSk7CisKKyAgICBFWFBFQ1RfRVEoMnUsIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworICAgIHVubG9ja0NhY2hl
KGNhY2hlZEltYWdlKTsKK30KKworVEVTVF9GKEltYWdlRGVjb2RpbmdTdG9yZVRlc3QsIGRlc3Ry
b3lJbWFnZUZyYW1lR2VuZXJhdG9yKQoreworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2Uo
MSwgMSkpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMiwgMikpOworICAgIGluc2Vy
dENhY2hlKFNrSVNpemU6Ok1ha2UoMywgMykpOworICAgIEVYUEVDVF9FUSgzdSwgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CisKKyAgICBtX2dlbmVyYXRv
ci5jbGVhcigpOworICAgIEVYUEVDVF9GQUxTRShJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
KCktPmNhY2hlRW50cmllcygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176890</attachid>
            <date>2012-11-29 19:37:06 -0800</date>
            <delta_ts>2012-12-03 21:01:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103480-20121129193438.patch</filename>
            <type>text/plain</type>
            <size>26913</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MTk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGFmNGY4Mjg2YWQ2MGFi
NDE0Mzk0ZWMyOThmMjNhOTY5M2FkNTZkMi4uZDUxYTdkNGM0MTU4MWIwYTcyY2Y4MzExMzc0OWE4
Yjc1MmU2M2UyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTExLTI4ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1l
bnQgY2FjaGUgZXZpY3Rpb24gbG9naWMgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM0ODAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVu
dHMgdGhlc2UgZmVhdHVyZXMgaW4gdGhlIG5ldyBpbWFnZSBjYWNoZToKKyAgICAgICAgLSBMZWFz
dC1yZWNlbnRseS11c2VkIGV2aWN0aW9uIGxvZ2ljCisgICAgICAgIC0gU2V0dGluZyBjYWNoZSBs
aW1pdCAoZGVmYXVsdCBpcyA4TUIpCisgICAgICAgIC0gUmVtb3ZlIGNhY2hlIGVudHJpZXMgd2hl
biBJbWFnZUZyYW1lR2VuZXJhdG9yIGlzIHJlbW92ZWQKKworICAgICAgICBOZXcgdGVzdHMgaW4g
SW1hZ2VEZWNvZGluZ1Rlc3RUZXN0LiBBbHNvIGNvdmVyZWQgYnkgcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5n
U3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
aW5nU3RvcmU6On5JbWFnZURlY29kaW5nU3RvcmUpOgorICAgICAgICBDb2RlIHRvIGFzc2VydCB0
aGF0IGV2ZXJ5dGhpbmcgaXMgY2xlYW5lZCB1cC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2RpbmdTdG9yZTo6bG9ja0NvbXBsZXRlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjp1bmxvY2tDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
aW5nU3RvcmU6Omluc2VydEFuZExvY2tDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6OnJlbW92ZUNhY2hlSW5kZXhlZEJ5R2VuZXJhdG9yKToKKyAgICAgICAgTmV3
IG1ldGhvZCB0byByZW1vdmUgYWxsIGNhY2hlIGVudHJpZXMgaW5kZXggYnkgSW1hZ2VGcmFtZUdl
bmVyYXRvci4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlOjpzZXRDYWNoZUxpbWl0SW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kaW5nU3RvcmU6Om1lbW9yeVVzYWdlSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kaW5nU3RvcmU6OmNhY2hlRW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kaW5nU3RvcmU6OnBydW5lKToKKyAgICAgICAgTmV3IGNvZGUgdG8gaW1wbGVtZW50IExS
VSBldmljdGlvbiBsb2dpYy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zZXJ0Q2FjaGVJbnRlcm5hbCk6CisgICAgICAgIE5ldyBtZXRob2QgdG8gaGVscCBuZXcgY2Fj
aGUgaW5zZXJ0aW9uLiBUaGlzIGlzIHNlcGFyYXRlbHkgYmVjYXVzZSBpdCB0b3VjaGVzIDMgY29u
dGFpbmVycy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6cmVtb3ZlRnJv
bUNhY2hlSW50ZXJuYWwpOgorICAgICAgICBOZXcgbWV0aG9kIHRvIGhlbHAgcmVtb3ZlIGEgY2Fj
aGUgZW50cnkgZnJvbSBjb250YWluZXJzLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlOjpyZW1vdmVGcm9tQ2FjaGVMaXN0SW50ZXJuYWwpOgorICAgICAgICBOZXcgaGVscGVy
IG1ldGhvZCB0byBoZWxwIHJlbW92ZSBjYWNoZSBlbnRyeSBmcm9tIGRvdWJseSBsaW5rZWQgbGlz
dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3Rv
cmUuaDoKKyAgICAgICAgKEltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChDYWNoZUVudHJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y3Jl
YXRlQW5kVXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVF
bnRyeTo6Q2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
OkNhY2hlRW50cnk6On5DYWNoZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rp
bmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y2FjaGVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjpjYWNoZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hlRW50cnk6OnVzZUNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6aW5jcmVtZW50VXNlQ291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjpkZWNy
ZW1lbnRVc2VDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkNh
Y2hlRW50cnk6Om1lbW9yeVVzYWdlSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6OmluY3JlbWVudE1lbW9yeVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2RpbmdTdG9yZTo6ZGVjcmVtZW50TWVtb3J5VXNhZ2UpOgorICAgICAgICBOZXcgaGVs
cGVyIG1ldGhvZHMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VG
cmFtZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9y
Ojp+SW1hZ2VGcmFtZUdlbmVyYXRvcik6CisKIDIwMTItMTEtMjkgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl0gRm9yd2FyZCBjb29raWUgamFyIGNh
bGxzIHRvIE5ldHdvcmtQcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDM2MmIy
Nzc5YTU3ZDViMzI2YmVmMmQ2MmM0MjY2YjZjYmJiZmJjYjUuLjBhOGQwZGRhMWU1YzFmYWMwZjZk
ODFkYjY3N2ExMjgyYWU4YjJmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNDkgQEAKKzIwMTItMTEtMjggIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBjYWNoZSBldmljdGlvbiBsb2dpYyBpbiBJbWFn
ZURlY29kaW5nU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwMzQ4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZGVkIEltYWdlRGVjb2RpbmdTdG9yZVRlc3QgZm9yIHVuaXQgdGVzdGluZyBuZXcg
aW1hZ2UgY2FjaGUuCisKKyAgICAgICAgTmV3IHRlc3RzOgorCisgICAgICAgIEltYWdlRGVjb2Rp
bmdTdG9yZVRlc3QuZXZpY3RPbmVDYWNoZQorCisgICAgICAgIFRlc3QgZXZpY3Rpb24gb2Ygb25l
IGNhY2hlIGVudHJ5IGJ5IHNldHRpbmcgYSBzbWFsbGVyIGNhY2hlIGxpbWl0LgorCisgICAgICAg
IEltYWdlRGVjb2RpbmdTdG9yZVRlc3QucHJ1bmVPcmRlcklzTGVhc3RSZWNlbnRseVVzZWQKKwor
ICAgICAgICBUZXN0IGV2aWN0aW9uIG9yZGVyIGlzIGxlYXN0IHJlY2VudGx5IHVzZWQuCisKKyAg
ICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdC5wcnVuZUNhdXNlZEJ5SW5zZXJ0aW9uCisKKyAg
ICAgICAgVGVzdCB0aGF0IGV2aWN0aW9uIGlzIHRyaWdnZXJlZCBhbHNvIGJ5IGNhY2hlIGluc2Vy
dGlvbi4KKworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmVUZXN0LmNhY2hlSW5Vc2VOb3RFdmlj
dGVkCisKKyAgICAgICAgVGVzdCB0aGF0IGNhY2hlIGluIHVzZSBpcyBub3QgZXZpY3RlZC4KKwor
ICAgICAgICBJbWFnZURlY29kaW5nU3RvcmVUZXN0LmRlc3Ryb3lJbWFnZUZyYW1lR2VuZXJhdG9y
CisKKyAgICAgICAgVGVzdCB0aGF0IGRlbGV0aW5nIGEgSW1hZ2VGcmFtZUdlbmVyYXRvciBjYXVz
ZXMgYXNzb2NpYXRlZCBjYWNoZQorICAgICAgICBlbnRyaWVzIHRvIGJlIHJlbW92ZWQuCisKKyAg
ICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9JbWFnZURlY29kaW5nU3RvcmVU
ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlRGVjb2Rp
bmdTdG9yZVRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlVGVzdDo6
U2V0VXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlVGVzdDo6VGVhckRv
d24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlVGVzdDo6Y3JlYXRlQ29t
cGxldGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmVUZXN0Ojpp
bnNlcnRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmVUZXN0Ojps
b2NrQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlVGVzdDo6dW5s
b2NrQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlVGVzdDo6ZXZp
Y3RPbmVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmVUZXN0Ojpp
c0NhY2hlQWxpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToKKwogMjAxMi0xMS0yOSAg
RGF2aWQgR3JvZ2FuICA8ZGdyb2dhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERC
OiBQcm9wYWdhdGUgbW9yZSBsZXZlbGRiIGVycm9ycyB0byBzY3JpcHQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURl
Y29kaW5nU3RvcmUuY3BwCmluZGV4IDQ4OWZkZGM0MjgwMWU0MjE3NGYzYjQ5Nzc0NGQ1OTE5ZGFk
M2ZlNTcuLjg0ZDQ5MmVjOWRkYzJlMmIzNTFkYTEwNzIxODBjZTUxZWVkM2FiNjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2Rp
bmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcApAQCAtMzQsNyArMzQsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIG5hbWVzcGFjZSB7CiAKLUltYWdlRGVjb2RpbmdTdG9yZSogc19pbnN0YW5jZSA9
IDA7CitzdGF0aWMgY29uc3Qgc2l6ZV90IGRlZmF1bHRDYWNoZUxpbWl0SW5CeXRlcyA9IDgxOTIg
KiAxMDI0Oworc3RhdGljIEltYWdlRGVjb2RpbmdTdG9yZSogc19pbnN0YW5jZSA9IDA7CiAKIHN0
YXRpYyB2b2lkIHNldEluc3RhbmNlKEltYWdlRGVjb2RpbmdTdG9yZSogaW1hZ2VEZWNvZGluZ1N0
b3JlKQogewpAQCAtNDUsMTEgKzQ2LDE5IEBAIHN0YXRpYyB2b2lkIHNldEluc3RhbmNlKEltYWdl
RGVjb2RpbmdTdG9yZSogaW1hZ2VEZWNvZGluZ1N0b3JlKQogfSAvLyBuYW1lc3BhY2UKIAogSW1h
Z2VEZWNvZGluZ1N0b3JlOjpJbWFnZURlY29kaW5nU3RvcmUoKQorICAgIDogbV9jYWNoZUxpbWl0
SW5CeXRlcyhkZWZhdWx0Q2FjaGVMaW1pdEluQnl0ZXMpCisgICAgLCBtX21lbW9yeVVzYWdlSW5C
eXRlcygwKQogewogfQogCiBJbWFnZURlY29kaW5nU3RvcmU6On5JbWFnZURlY29kaW5nU3RvcmUo
KQogeworI2lmbmRlZiBOREVCVUcKKyAgICBzZXRDYWNoZUxpbWl0SW5CeXRlcygwKTsKKyAgICBB
U1NFUlQoIW1fY2FjaGVNYXAuc2l6ZSgpKTsKKyAgICBBU1NFUlQoIW1fb3JkZXJlZENhY2hlTGlz
dC5zaXplKCkpOworICAgIEFTU0VSVCghbV9jYWNoZWRTaXplTWFwLnNpemUoKSk7CisjZW5kaWYK
IH0KIAogSW1hZ2VEZWNvZGluZ1N0b3JlKiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCkK
QEAgLTc1LDE1ICs4NCwxNSBAQCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZURlY29k
aW5nU3RvcmU6OmxvY2tDb21wbGV0ZUNhY2hlKGNvbnN0IEltYWdlRnJhbQogICAgICAgICBDYWNo
ZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY2FjaGVNYXAuZmluZChzdGQ6Om1ha2VfcGFpcihnZW5l
cmF0b3IsIHNjYWxlZFNpemUpKTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9jYWNoZU1hcC5lbmQo
KSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYWNoZUVudHJ5ID0gaXRlci0+dmFs
dWU7Ci0gICAgICAgIGlmICghY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UtPmlzQ29tcGxldGUoKSkK
KyAgICAgICAgY2FjaGVFbnRyeSA9IGl0ZXItPnZhbHVlLmdldCgpOworICAgICAgICBpZiAoIWNh
Y2hlRW50cnktPmNhY2hlZEltYWdlKCktPmlzQ29tcGxldGUoKSkKICAgICAgICAgICAgIHJldHVy
biAwOwogCiAgICAgICAgIC8vIEluY3JlbWVudCB1c2UgY291bnQgc3VjaCB0aGF0IGl0IGRvZXNu
J3QgZ2V0IGV2aWN0ZWQuCi0gICAgICAgICsrY2FjaGVFbnRyeS0+dXNlQ291bnQ7CisgICAgICAg
IGNhY2hlRW50cnktPmluY3JlbWVudFVzZUNvdW50KCk7CiAgICAgfQotICAgIGNhY2hlRW50cnkt
PmNhY2hlZEltYWdlLT5iaXRtYXAoKS5sb2NrUGl4ZWxzKCk7Ci0gICAgcmV0dXJuIGNhY2hlRW50
cnktPmNhY2hlZEltYWdlLmdldCgpOworICAgIGNhY2hlRW50cnktPmNhY2hlZEltYWdlKCktPmJp
dG1hcCgpLmxvY2tQaXhlbHMoKTsKKyAgICByZXR1cm4gY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2Uo
KTsKIH0KIAogY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjps
b2NrSW5jb21wbGV0ZUNhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwg
Y29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkKQEAgLTEwNSw5ICsxMTQsMTIgQEAgdm9pZCBJbWFn
ZURlY29kaW5nU3RvcmU6OnVubG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdl
bmVyYXRvciwgY29uc3QKICAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY2FjaGVNYXAu
ZmluZChzdGQ6Om1ha2VfcGFpcihnZW5lcmF0b3IsIGNhY2hlZEltYWdlLT5zY2FsZWRTaXplKCkp
KTsKICAgICBBU1NFUlQoaXRlciAhPSBtX2NhY2hlTWFwLmVuZCgpKTsKIAotICAgIENhY2hlRW50
cnkqIGNhY2hlRW50cnkgPSBpdGVyLT52YWx1ZTsKLSAgICAtLWNhY2hlRW50cnktPnVzZUNvdW50
OwotICAgIEFTU0VSVChjYWNoZUVudHJ5LT51c2VDb3VudCA+PSAwKTsKKyAgICBDYWNoZUVudHJ5
KiBjYWNoZUVudHJ5ID0gaXRlci0+dmFsdWUuZ2V0KCk7CisgICAgY2FjaGVFbnRyeS0+ZGVjcmVt
ZW50VXNlQ291bnQoKTsKKworICAgIC8vIFB1dCB0aGUgZW50cnkgdG8gdGhlIGVuZCBvZiBsaXN0
LgorICAgIG1fb3JkZXJlZENhY2hlTGlzdC5yZW1vdmUoY2FjaGVFbnRyeSk7CisgICAgbV9vcmRl
cmVkQ2FjaGVMaXN0LmFwcGVuZChjYWNoZUVudHJ5KTsKIH0KIAogY29uc3QgU2NhbGVkSW1hZ2VG
cmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnNlcnRBbmRMb2NrQ2FjaGUoY29uc3QgSW1h
Z2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21l
bnQ+IGltYWdlKQpAQCAtMTI3LDIzICsxMzksMTI1IEBAIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21l
bnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zZXJ0QW5kTG9ja0NhY2hlKGNvbnN0IEltYWdlRnJh
CiAgICAgfQogCiAgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UgPSBpbWFnZS5n
ZXQoKTsKLSAgICBPd25QdHI8Q2FjaGVFbnRyeT4gbmV3Q2FjaGVFbnRyeSA9IENhY2hlRW50cnk6
OmNyZWF0ZUFuZFVzZShpbWFnZSk7CisgICAgT3duUHRyPENhY2hlRW50cnk+IG5ld0NhY2hlRW50
cnkgPSBDYWNoZUVudHJ5OjpjcmVhdGVBbmRVc2UoZ2VuZXJhdG9yLCBpbWFnZSk7CiAKLSAgICBD
YWNoZUlkZW50aWZpZXIga2V5ID0gc3RkOjptYWtlX3BhaXIoZ2VuZXJhdG9yLCBjYWNoZWRJbWFn
ZS0+c2NhbGVkU2l6ZSgpKTsKICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwotICAgIEFT
U0VSVCghbV9jYWNoZU1hcC5jb250YWlucyhrZXkpKTsKLQotICAgIC8vIG1fY2FjaGVNYXAgaXMg
dXNlZCBmb3IgaW5kZXhpbmcgYW5kIHF1aWNrIGxvb2t1cCBvZiBhIGNhY2hlZCBpbWFnZS4KLSAg
ICAvLyBtX2NhY2hlRW50cmllcyBpcyB1c2VkIHRvIHN1cHBvcnQgTFJVIG9wZXJhdGlvbnMgdG8g
cmVvcmRlciBjYWNoZQotICAgIC8vIGVudHJpZXMgcXVpY2tseS4gSXQgYWxzbyBvd25zIGNhY2hl
ZCBpbWFnZXMuCi0gICAgbV9jYWNoZU1hcC5hZGQoa2V5LCBuZXdDYWNoZUVudHJ5LmdldCgpKTsK
LSAgICBtX2NhY2hlRW50cmllcy5hcHBlbmQobmV3Q2FjaGVFbnRyeS5yZWxlYXNlKCkpOworICAg
IEFTU0VSVCghbV9jYWNoZU1hcC5jb250YWlucyhuZXdDYWNoZUVudHJ5LT5jYWNoZUtleSgpKSk7
CisgICAgaW5zZXJ0Q2FjaGVJbnRlcm5hbChuZXdDYWNoZUVudHJ5LnJlbGVhc2UoKSk7CiAgICAg
cmV0dXJuIGNhY2hlZEltYWdlOwogfQogCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6cmVtb3Zl
Q2FjaGVJbmRleGVkQnlHZW5lcmF0b3IoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJh
dG9yKQoreworICAgIFZlY3RvcjxPd25QdHI8Q2FjaGVFbnRyeT4gPiBjYWNoZUVudHJpZXNUb0Rl
bGV0ZTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgICAg
IENhY2hlZFNpemVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhY2hlZFNpemVNYXAuZmluZChnZW5l
cmF0b3IpOworICAgICAgICBpZiAoaXRlciA9PSBtX2NhY2hlZFNpemVNYXAuZW5kKCkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gR2V0IGFsbCBjYWNoZWQgc2l6ZXMgaW5kZXhl
ZCBieSBnZW5lcmF0b3IuCisgICAgICAgIFZlY3RvcjxTa0lTaXplPiBjYWNoZWRTaXplTGlzdDsK
KyAgICAgICAgY29weVRvVmVjdG9yKGl0ZXItPnZhbHVlLCBjYWNoZWRTaXplTGlzdCk7CisKKyAg
ICAgICAgLy8gRm9yIGVhY2ggY2FjaGVkIHNpemUgZmluZCB0aGUgY29ycmVzcG9uZGluZyBDYWNo
ZUVudHJ5IGFuZCByZW1vdmUgaXQgZnJvbQorICAgICAgICAvLyBtX2NhY2hlTWFwLgorICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhY2hlZFNpemVMaXN0LnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBDYWNoZUlkZW50aWZpZXIga2V5ID0gc3RkOjptYWtlX3BhaXIoZ2VuZXJhdG9y
LCBjYWNoZWRTaXplTGlzdFtpXSk7CisgICAgICAgICAgICBBU1NFUlQobV9jYWNoZU1hcC5jb250
YWlucyhrZXkpKTsKKworICAgICAgICAgICAgY29uc3QgQ2FjaGVFbnRyeSogY2FjaGVFbnRyeSA9
IG1fY2FjaGVNYXAuZ2V0KGtleSk7CisgICAgICAgICAgICBBU1NFUlQoIWNhY2hlRW50cnktPnVz
ZUNvdW50KCkpOworICAgICAgICAgICAgcmVtb3ZlRnJvbUNhY2hlSW50ZXJuYWwoY2FjaGVFbnRy
eSwgJmNhY2hlRW50cmllc1RvRGVsZXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbW92
ZSBmcm9tIGNhY2hlIGxpc3QgYXMgd2VsbC4KKyAgICAgICAgcmVtb3ZlRnJvbUNhY2hlTGlzdElu
dGVybmFsKGNhY2hlRW50cmllc1RvRGVsZXRlKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjpzZXRDYWNoZUxpbWl0SW5CeXRlcyhzaXplX3QgY2FjaGVMaW1pdCkKK3sKKyAg
ICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgICAgIG1fY2FjaGVM
aW1pdEluQnl0ZXMgPSBjYWNoZUxpbWl0OworICAgIH0KKyAgICBwcnVuZSgpOworfQorCitzaXpl
X3QgSW1hZ2VEZWNvZGluZ1N0b3JlOjptZW1vcnlVc2FnZUluQnl0ZXMoKQoreworICAgIE11dGV4
TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgcmV0dXJuIG1fbWVtb3J5VXNhZ2VJbkJ5dGVzOwor
fQorCit1bnNpZ25lZCBJbWFnZURlY29kaW5nU3RvcmU6OmNhY2hlRW50cmllcygpCit7CisgICAg
TXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICByZXR1cm4gbV9jYWNoZU1hcC5zaXplKCk7
Cit9CisKIHZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpwcnVuZSgpCiB7Ci0gICAgLy8gVE9ETzog
SW1wbGVtZW50LgorICAgIFZlY3RvcjxPd25QdHI8Q2FjaGVFbnRyeT4gPiBjYWNoZUVudHJpZXNU
b0RlbGV0ZTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisKKyAg
ICAgICAgLy8gSGVhZCBvZiB0aGUgbGlzdCBpcyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBlbnRy
eS4KKyAgICAgICAgY29uc3QgQ2FjaGVFbnRyeSogY2FjaGVFbnRyeSA9IG1fb3JkZXJlZENhY2hl
TGlzdC5oZWFkKCk7CisKKyAgICAgICAgLy8gV2FsayB0aGUgbGlzdCBvZiBjYWNoZSBlbnRyaWVz
IHN0YXJ0aW5nIGZyb20gdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQKKyAgICAgICAgLy8gYW5kIHRo
ZW4ga2VlcCB0aGVtIGZvciBkZWxldGlvbiBsYXRlci4KKyAgICAgICAgd2hpbGUgKGNhY2hlRW50
cnkgJiYgbV9tZW1vcnlVc2FnZUluQnl0ZXMgPiBtX2NhY2hlTGltaXRJbkJ5dGVzKSB7CisgICAg
ICAgICAgICAvLyBDYWNoZSBpcyBub3QgdXNlZDsgUmVtb3ZlIGl0LgorICAgICAgICAgICAgaWYg
KCFjYWNoZUVudHJ5LT51c2VDb3VudCgpKQorICAgICAgICAgICAgICAgIHJlbW92ZUZyb21DYWNo
ZUludGVybmFsKGNhY2hlRW50cnksICZjYWNoZUVudHJpZXNUb0RlbGV0ZSk7CisgICAgICAgICAg
ICBjYWNoZUVudHJ5ID0gY2FjaGVFbnRyeS0+bmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gUmVtb3ZlIGZyb20gY2FjaGUgbGlzdCBhcyB3ZWxsLgorICAgICAgICByZW1vdmVGcm9tQ2Fj
aGVMaXN0SW50ZXJuYWwoY2FjaGVFbnRyaWVzVG9EZWxldGUpOworICAgIH0KK30KKwordm9pZCBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc2VydENhY2hlSW50ZXJuYWwoUGFzc093blB0cjxDYWNoZUVu
dHJ5PiBjYWNoZUVudHJ5KQoreworICAgIGluY3JlbWVudE1lbW9yeVVzYWdlKGNhY2hlRW50cnkt
Pm1lbW9yeVVzYWdlSW5CeXRlcygpKTsKKworICAgIC8vIG1fb3JkZXJlZENhY2hlTGlzdCBpcyB1
c2VkIHRvIHN1cHBvcnQgTFJVIG9wZXJhdGlvbnMgdG8gcmVvcmRlciBjYWNoZQorICAgIC8vIGVu
dHJpZXMgcXVpY2tseS4KKyAgICBtX29yZGVyZWRDYWNoZUxpc3QuYXBwZW5kKGNhY2hlRW50cnku
Z2V0KCkpOworCisgICAgQ2FjaGVJZGVudGlmaWVyIGtleSA9IGNhY2hlRW50cnktPmNhY2hlS2V5
KCk7CisgICAgLy8gbV9jYWNoZU1hcCBpcyB1c2VkIGZvciBpbmRleGluZyBhbmQgcXVpY2sgbG9v
a3VwIG9mIGEgY2FjaGVkIGltYWdlLiBJdCBvd25zCisgICAgLy8gYWxsIGNhY2hlIGVudHJpZXMu
CisgICAgbV9jYWNoZU1hcC5hZGQoa2V5LCBjYWNoZUVudHJ5KTsKKworICAgIC8vIG1fY2FjaGVk
U2l6ZU1hcCBrZWVwcyBhbGwgc2NhbGVkIHNpemVzIGFzc29jaWF0ZWQgd2l0aCBhbiBJbWFnZUZy
YW1lR2VuZXJhdG9yLgorICAgIENhY2hlZFNpemVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2Nh
Y2hlZFNpemVNYXAuYWRkKGtleS5maXJzdCwgU2l6ZVNldCgpKTsKKyAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmFkZChrZXkuc2Vjb25kKTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6
OnJlbW92ZUZyb21DYWNoZUludGVybmFsKGNvbnN0IENhY2hlRW50cnkqIGNhY2hlRW50cnksIFZl
Y3RvcjxPd25QdHI8Q2FjaGVFbnRyeT4gPiogZGVsZXRpb25MaXN0KQoreworICAgIGRlY3JlbWVu
dE1lbW9yeVVzYWdlKGNhY2hlRW50cnktPm1lbW9yeVVzYWdlSW5CeXRlcygpKTsKKworICAgIC8v
IFJlbW92ZSBmcm9tIG1fY2FjaGVNYXAuCisgICAgQ2FjaGVJZGVudGlmaWVyIGtleSA9IGNhY2hl
RW50cnktPmNhY2hlS2V5KCk7CisgICAgZGVsZXRpb25MaXN0LT5hcHBlbmQobV9jYWNoZU1hcC50
YWtlKGtleSkpOworCisgICAgLy8gUmVtb3ZlIGZyb20gbV9jYWNoZWRTaXplTWFwLgorICAgIENh
Y2hlZFNpemVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhY2hlZFNpemVNYXAuZmluZChrZXkuZmly
c3QpOworICAgIEFTU0VSVChpdGVyICE9IG1fY2FjaGVkU2l6ZU1hcC5lbmQoKSk7CisgICAgaXRl
ci0+dmFsdWUucmVtb3ZlKGtleS5zZWNvbmQpOworICAgIGlmICghaXRlci0+dmFsdWUuc2l6ZSgp
KQorICAgICAgICBtX2NhY2hlZFNpemVNYXAucmVtb3ZlKGl0ZXIpOworfQorCit2b2lkIEltYWdl
RGVjb2RpbmdTdG9yZTo6cmVtb3ZlRnJvbUNhY2hlTGlzdEludGVybmFsKGNvbnN0IFZlY3RvcjxP
d25QdHI8Q2FjaGVFbnRyeT4gPiYgZGVsZXRpb25MaXN0KQoreworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZGVsZXRpb25MaXN0LnNpemUoKTsgKytpKQorICAgICAgICBtX29yZGVyZWRDYWNo
ZUxpc3QucmVtb3ZlKGRlbGV0aW9uTGlzdFtpXS5nZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKaW5kZXggMGFlYTJlOTY5OWU3ODcw
NzExNGFlNmY2NjRjNmNjOTExNjc3M2E0ZS4uMDVlYTExYjg4ZTI2OTUxODhjZmRmODg0NTA0NGJi
MDc0ZDlhMzFkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKQEAgLTMxLDYgKzMxLDgg
QEAKICNpbmNsdWRlICJTa1NpemUuaCIKICNpbmNsdWRlICJTa1NpemVIYXNoLmgiCiAKKyNpbmNs
dWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KQEAgLTU2LDQyICs1OCw5MSBAQCBwdWJs
aWM6CiAgICAgdm9pZCB1bmxvY2tDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgY29u
c3QgU2NhbGVkSW1hZ2VGcmFnbWVudCopOwogICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQq
IGluc2VydEFuZExvY2tDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgUGFzc093blB0
cjxTY2FsZWRJbWFnZUZyYWdtZW50Pik7CiAKKyAgICAvLyBSZW1vdmUgYWxsIGNhY2hlIGVudHJp
ZXMgaW5kZXhlZCBieSBJbWFnZUZyYW1lR2VuZXJhdG9yLgorICAgIHZvaWQgcmVtb3ZlQ2FjaGVJ
bmRleGVkQnlHZW5lcmF0b3IoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciopOworCisgICAgdm9p
ZCBzZXRDYWNoZUxpbWl0SW5CeXRlcyhzaXplX3QpOworICAgIHNpemVfdCBtZW1vcnlVc2FnZUlu
Qnl0ZXMoKTsKKyAgICB1bnNpZ25lZCBjYWNoZUVudHJpZXMoKTsKKwogcHJpdmF0ZToKLSAgICBz
dHJ1Y3QgQ2FjaGVFbnRyeSB7Ci0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPENhY2hlRW50cnk+
IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYWNoZUVudHJ5KCkpOyB9Ci0gICAgICAg
IHN0YXRpYyBQYXNzT3duUHRyPENhY2hlRW50cnk+IGNyZWF0ZUFuZFVzZShQYXNzT3duUHRyPFNj
YWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ2FjaGVFbnRy
eShpbWFnZSwgMSkpOyB9CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgSW1hZ2VGcmFtZUdl
bmVyYXRvciosIFNrSVNpemU+IENhY2hlSWRlbnRpZmllcjsKIAotICAgICAgICBDYWNoZUVudHJ5
KCkKLSAgICAgICAgICAgIDogdXNlQ291bnQoMCkKKyAgICBjbGFzcyBDYWNoZUVudHJ5IDogcHVi
bGljIERvdWJseUxpbmtlZExpc3ROb2RlPENhY2hlRW50cnk+IHsKKyAgICAgICAgZnJpZW5kIGNs
YXNzIERvdWJseUxpbmtlZExpc3ROb2RlPENhY2hlRW50cnk+OworICAgIHB1YmxpYzoKKyAgICAg
ICAgc3RhdGljIFBhc3NPd25QdHI8Q2FjaGVFbnRyeT4gY3JlYXRlQW5kVXNlKGNvbnN0IEltYWdl
RnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50
PiBpbWFnZSkKICAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYWNo
ZUVudHJ5KGdlbmVyYXRvciwgaW1hZ2UsIDEpKTsKICAgICAgICAgfQogCi0gICAgICAgIENhY2hl
RW50cnkoUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBpbWFnZSwgaW50IGNvdW50KQot
ICAgICAgICAgICAgOiBjYWNoZWRJbWFnZShpbWFnZSkKLSAgICAgICAgICAgICwgdXNlQ291bnQo
Y291bnQpCisgICAgICAgIENhY2hlRW50cnkoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2Vu
ZXJhdG9yLCBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlLCBpbnQgY291bnQp
CisgICAgICAgICAgICA6IG1fcHJldigwKQorICAgICAgICAgICAgLCBtX25leHQoMCkKKyAgICAg
ICAgICAgICwgbV9nZW5lcmF0b3IoZ2VuZXJhdG9yKQorICAgICAgICAgICAgLCBtX2NhY2hlZElt
YWdlKGltYWdlKQorICAgICAgICAgICAgLCBtX3VzZUNvdW50KGNvdW50KQogICAgICAgICB7CiAg
ICAgICAgIH0KIAogICAgICAgICB+Q2FjaGVFbnRyeSgpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVCghdXNlQ291bnQpOworICAgICAgICAgICAgQVNTRVJUKCFtX3VzZUNvdW50KTsKICAg
ICAgICAgfQogCi0gICAgICAgIE93blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBjYWNoZWRJbWFn
ZTsKLSAgICAgICAgaW50IHVzZUNvdW50OworICAgICAgICBDYWNoZUlkZW50aWZpZXIgY2FjaGVL
ZXkoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihtX2dlbmVyYXRvciwgbV9jYWNoZWRJ
bWFnZS0+c2NhbGVkU2l6ZSgpKTsgfQorICAgICAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50
KiBjYWNoZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UuZ2V0KCk7IH0KKyAg
ICAgICAgaW50IHVzZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV91c2VDb3VudDsgfQorICAgICAg
ICB2b2lkIGluY3JlbWVudFVzZUNvdW50KCkgeyArK21fdXNlQ291bnQ7IH0KKyAgICAgICAgdm9p
ZCBkZWNyZW1lbnRVc2VDb3VudCgpIHsgLS1tX3VzZUNvdW50OyBBU1NFUlQobV91c2VDb3VudCA+
PSAwKTsgfQorCisgICAgICAgIC8vIEZJWE1FOiBnZXRTYWZlU2l6ZSgpIHJldHVybnMgc2l6ZSBp
biBieXRlcyB0cnVuc2NhdGVkIHRvIGEgMzItYml0cyBpbnRlZ2VyLgorICAgICAgICAvLyAgICAg
ICAgRmluZCBhIHdheSB0byBnZXQgdGhlIHNpemUgaW4gNjQtYml0cy4KKyAgICAgICAgc2l6ZV90
IG1lbW9yeVVzYWdlSW5CeXRlcygpIGNvbnN0IHsgcmV0dXJuIGNhY2hlZEltYWdlKCktPmJpdG1h
cCgpLmdldFNhZmVTaXplKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIENhY2hlRW50cnkq
IG1fcHJldjsKKyAgICAgICAgQ2FjaGVFbnRyeSogbV9uZXh0OworICAgICAgICBjb25zdCBJbWFn
ZUZyYW1lR2VuZXJhdG9yKiBtX2dlbmVyYXRvcjsKKyAgICAgICAgT3duUHRyPFNjYWxlZEltYWdl
RnJhZ21lbnQ+IG1fY2FjaGVkSW1hZ2U7CisgICAgICAgIGludCBtX3VzZUNvdW50OwogICAgIH07
CiAKICAgICBJbWFnZURlY29kaW5nU3RvcmUoKTsKLSAgICB2b2lkIHBydW5lKCk7CiAKLSAgICBW
ZWN0b3I8T3duUHRyPENhY2hlRW50cnk+ID4gbV9jYWNoZUVudHJpZXM7CisgICAgdm9pZCBwcnVu
ZSgpOwogCi0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvcios
IFNrSVNpemU+IENhY2hlSWRlbnRpZmllcjsKLSAgICB0eXBlZGVmIEhhc2hNYXA8Q2FjaGVJZGVu
dGlmaWVyLCBDYWNoZUVudHJ5Kj4gQ2FjaGVNYXA7CisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUg
Y2FsbGVkIHdoaWxlIG1fbXV0ZXggaXMgbG9ja2VkLgorICAgIHZvaWQgaW5zZXJ0Q2FjaGVJbnRl
cm5hbChQYXNzT3duUHRyPENhY2hlRW50cnk+KTsKKyAgICB2b2lkIHJlbW92ZUZyb21DYWNoZUlu
dGVybmFsKGNvbnN0IENhY2hlRW50cnkqLCBWZWN0b3I8T3duUHRyPENhY2hlRW50cnk+ID4qIGRl
bGV0aW9uTGlzdCk7CisgICAgdm9pZCByZW1vdmVGcm9tQ2FjaGVMaXN0SW50ZXJuYWwoY29uc3Qg
VmVjdG9yPE93blB0cjxDYWNoZUVudHJ5PiA+JiBkZWxldGlvbkxpc3QpOworICAgIHZvaWQgaW5j
cmVtZW50TWVtb3J5VXNhZ2Uoc2l6ZV90IHNpemUpIHsgbV9tZW1vcnlVc2FnZUluQnl0ZXMgKz0g
c2l6ZTsgfQorICAgIHZvaWQgZGVjcmVtZW50TWVtb3J5VXNhZ2Uoc2l6ZV90IHNpemUpCisgICAg
eworICAgICAgICBBU1NFUlQobV9tZW1vcnlVc2FnZUluQnl0ZXMgPj0gc2l6ZSk7CisgICAgICAg
IG1fbWVtb3J5VXNhZ2VJbkJ5dGVzIC09IHNpemU7CisgICAgfQorCisgICAgLy8gSGVhZCBvZiB0
aGlzIGxpc3QgaXMgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgY2FjaGUgZW50cnkuCisgICAgLy8g
VGFpbCBvZiB0aGlzIGxpc3QgaXMgdGhlIG1vc3QgcmVjZW50bHkgdXNlZCBjYWNoZSBlbnRyeS4K
KyAgICBEb3VibHlMaW5rZWRMaXN0PENhY2hlRW50cnk+IG1fb3JkZXJlZENhY2hlTGlzdDsKKwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxDYWNoZUlkZW50aWZpZXIsIE93blB0cjxDYWNoZUVudHJ5PiA+
IENhY2hlTWFwOwogICAgIENhY2hlTWFwIG1fY2FjaGVNYXA7CiAKLSAgICAvLyBQcm90ZWN0IGNv
bmN1cnJlbnQgYWNjZXNzIHRvIGFsbCBpbnN0YW5jZXMgb2YgQ2FjaGVFbnRyeSBzdG9yZWQgaW4g
bV9jYWNoZUVudHJpZXMgYW5kCi0gICAgLy8gbV9jYWNoZU1hcCBhcyB3ZWxsIGFzIHRoZSBjb250
YWluZXJzLgorICAgIHR5cGVkZWYgSGFzaFNldDxTa0lTaXplPiBTaXplU2V0OworICAgIHR5cGVk
ZWYgSGFzaE1hcDxjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgU2l6ZVNldD4gQ2FjaGVkU2l6
ZU1hcDsKKyAgICBDYWNoZWRTaXplTWFwIG1fY2FjaGVkU2l6ZU1hcDsKKworICAgIHNpemVfdCBt
X2NhY2hlTGltaXRJbkJ5dGVzOworICAgIHNpemVfdCBtX21lbW9yeVVzYWdlSW5CeXRlczsKKwor
ICAgIC8vIFByb3RlY3QgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlc2UgbWVtYmVyczoKKyAgICAv
LyAgIG1fb3JkZXJlZENhY2hlTGlzdAorICAgIC8vICAgbV9jYWNoZU1hcCBhbmQgYWxsIENhY2hl
RW50cnlzIHN0b3JlZCBpbiBpdAorICAgIC8vICAgbV9jYWNoZWRTaXplTWFwCisgICAgLy8gICBt
X2NhY2hlTGltaXRJbkJ5dGVzCisgICAgLy8gICBtX21lbW9yeVVzYWdlSW5CeXRlcwogICAgIE11
dGV4IG1fbXV0ZXg7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCmluZGV4
IDIyMGE1N2Q0NWRhMTIzN2VmZmI1ODhhYTRlMjczYzVhN2EzMjM2NTQuLmVmODUwNTVjNGRjMjNh
NGQ2MDBmMzkwOGM5ZjA1MzkxZmE5YzQ5YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0
b3IuY3BwCkBAIC01NCw4ICs1NCwxMSBAQCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1l
R2VuZXJhdG9yKGNvbnN0IFNrSVNpemUmIGZ1bGxTaXplLCBQYXNzUmVmUHRyPFNoYQogCiBJbWFn
ZUZyYW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCiB7Ci0gICAgLy8gVE9ETzog
Q2FsbCBJbWFnZURlY29kaW5nU3RvcmUgdG8gcmVtb3ZlIGFsbCBjYWNoZSBlbnRyaWVzIGluZGV4
ZWQKLSAgICAvLyBieSB0aGlzIG9iamVjdC4KKyAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpcyBu
b3QgcmVhbGx5IHRocmVhZC1zYWZlLiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIHRvOgorICAgIC8v
IEltYWdlRGVjb2RpbmdTdG9yZTo6cmVtb3ZlQ2FjaGVGcm9tSW5zdGFuY2UodGhpcyk7CisgICAg
Ly8gV2hpY2ggdXNlcyBhIGxvY2sgaW50ZXJuYWxseS4KKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0
b3JlOjppbnN0YW5jZSgpKQorICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCkt
PnJlbW92ZUNhY2hlSW5kZXhlZEJ5R2VuZXJhdG9yKHRoaXMpOwogfQogCiB2b2lkIEltYWdlRnJh
bWVHZW5lcmF0b3I6OnNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggM2FkM2Uy
MGRhZTM0MjhiMGMyODk3ODgzZDY5MzI2MGY4NDBlMTEwNy4uNGYzYjY3ZDk2MjA1MzliODA1ZmFj
ZDU4ODIwOTc4YmUwY2Y2NWU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC04
MSw2ICs4MSw3IEBACiAgICAgICAgICAgICAndGVzdHMvSURCS2V5UGF0aFRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0lEQlJlcXVlc3RUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvSW1hZ2VEZWNv
ZGluZ1N0b3JlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ltYWdlRnJhbWVHZW5lcmF0
b3JUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVjb2RpbmdTdG9yZVRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZURlY29kaW5nU3RvcmVUZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wMzhhZTcyMGI1NzViZjk5NjBiNTg3MmJlMWUwOTc0ZmEzZDdkOWIzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZURlY29k
aW5nU3RvcmVUZXN0LmNwcApAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorCisjaW5jbHVkZSAiSW1h
Z2VGcmFtZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
eworCitjbGFzcyBJbWFnZURlY29kaW5nU3RvcmVUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVz
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIElt
YWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uY2UoKTsKKyAgICAgICAgbV9kYXRhID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoKTsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBJbWFnZUZyYW1lR2Vu
ZXJhdG9yOjpjcmVhdGUoU2tJU2l6ZTo6TWFrZSgxMDAsIDEwMCksIG1fZGF0YSwgdHJ1ZSk7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIEltYWdl
RGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBQYXNz
T3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGNyZWF0ZUNvbXBsZXRlSW1hZ2UoY29uc3QgU2tJ
U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICAgICAgYml0
bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGJpdG1hcC5hbGxvY1BpeGVscygpOworICAgICAgICBy
ZXR1cm4gU2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRlKHNpemUsIGJpdG1hcCwgdHJ1ZSk7Cisg
ICAgfQorCisgICAgdm9pZCBpbnNlcnRDYWNoZShjb25zdCBTa0lTaXplJiBzaXplKQorICAgIHsK
KyAgICAgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogaW1hZ2UgPSBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlKCktPmluc2VydEFuZExvY2tDYWNoZSgKKyAgICAgICAgICAgIG1fZ2Vu
ZXJhdG9yLmdldCgpLCBjcmVhdGVDb21wbGV0ZUltYWdlKHNpemUpKTsKKyAgICAgICAgdW5sb2Nr
Q2FjaGUoaW1hZ2UpOworICAgIH0KKworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGxv
Y2tDYWNoZShjb25zdCBTa0lTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEltYWdl
RGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9ja0NvbXBsZXRlQ2FjaGUobV9nZW5lcmF0b3Iu
Z2V0KCksIHNpemUpOworICAgIH0KKworICAgIHZvaWQgdW5sb2NrQ2FjaGUoY29uc3QgU2NhbGVk
SW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UpCisgICAgeworICAgICAgICBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCBjYWNoZWRJ
bWFnZSk7CisgICAgfQorCisgICAgdm9pZCBldmljdE9uZUNhY2hlKCkKKyAgICB7CisgICAgICAg
IHNpemVfdCBtZW1vcnlVc2FnZUluQnl0ZXMgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
KCktPm1lbW9yeVVzYWdlSW5CeXRlcygpOworICAgICAgICBpZiAobWVtb3J5VXNhZ2VJbkJ5dGVz
KQorICAgICAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5zZXRDYWNoZUxp
bWl0SW5CeXRlcyhtZW1vcnlVc2FnZUluQnl0ZXMgLSAxKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5zZXRDYWNoZUxpbWl0SW5CeXRl
cygwKTsKKyAgICB9CisKKyAgICBib29sIGlzQ2FjaGVBbGl2ZShjb25zdCBTa0lTaXplJiBzaXpl
KQorICAgIHsKKyAgICAgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2Ug
PSBsb2NrQ2FjaGUoc2l6ZSk7CisgICAgICAgIGlmICghY2FjaGVkSW1hZ2UpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+
dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIGNhY2hlZEltYWdlKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOworICAg
IFJlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKK307CisKK1RFU1RfRihJ
bWFnZURlY29kaW5nU3RvcmVUZXN0LCBldmljdE9uZUNhY2hlKQoreworICAgIGluc2VydENhY2hl
KFNrSVNpemU6Ok1ha2UoMSwgMSkpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMiwg
MikpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMywgMykpOworICAgIEVYUEVDVF9F
USgzdSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CisK
KyAgICBldmljdE9uZUNhY2hlKCk7CisgICAgRVhQRUNUX0VRKDJ1LCBJbWFnZURlY29kaW5nU3Rv
cmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKKworICAgIGV2aWN0T25lQ2FjaGUoKTsK
KyAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVF
bnRyaWVzKCkpOworfQorCitURVNUX0YoSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdCwgcHJ1bmVPcmRl
cklzTGVhc3RSZWNlbnRseVVzZWQpCit7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSgx
LCAxKSk7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSgyLCAyKSk7CisgICAgaW5zZXJ0
Q2FjaGUoU2tJU2l6ZTo6TWFrZSgzLCAzKSk7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFr
ZSg0LCA0KSk7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSg1LCA1KSk7CisgICAgRVhQ
RUNUX0VRKDV1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygp
KTsKKworICAgIC8vIFVzZSBjYWNoZSBpbiB0aGUgb3JkZXIgMywgMiwgNCwgMSwgNS4KKyAgICBF
WFBFQ1RfVFJVRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSgzLCAzKSkpOworICAgIEVYUEVD
VF9UUlVFKGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpNYWtlKDIsIDIpKSk7CisgICAgRVhQRUNUX1RS
VUUoaXNDYWNoZUFsaXZlKFNrSVNpemU6Ok1ha2UoNCwgNCkpKTsKKyAgICBFWFBFQ1RfVFJVRShp
c0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSgxLCAxKSkpOworICAgIEVYUEVDVF9UUlVFKGlzQ2Fj
aGVBbGl2ZShTa0lTaXplOjpNYWtlKDUsIDUpKSk7CisKKyAgICAvLyBFdmljdCAzLgorICAgIGV2
aWN0T25lQ2FjaGUoKTsKKyAgICBFWFBFQ1RfRkFMU0UoaXNDYWNoZUFsaXZlKFNrSVNpemU6Ok1h
a2UoMywgMykpKTsKKyAgICBFWFBFQ1RfRVEoNHUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFu
Y2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworCisgICAgLy8gRXZpY3QgMi4KKyAgICBldmljdE9uZUNh
Y2hlKCk7CisgICAgRVhQRUNUX0ZBTFNFKGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpNYWtlKDIsIDIp
KSk7CisgICAgRVhQRUNUX0VRKDN1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNh
Y2hlRW50cmllcygpKTsKKworICAgIC8vIEV2aWN0IDQuCisgICAgZXZpY3RPbmVDYWNoZSgpOwor
ICAgIEVYUEVDVF9GQUxTRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSg0LCA0KSkpOworICAg
IEVYUEVDVF9FUSgydSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJp
ZXMoKSk7CisKKyAgICAvLyBFdmljdCAxLgorICAgIGV2aWN0T25lQ2FjaGUoKTsKKyAgICBFWFBF
Q1RfRkFMU0UoaXNDYWNoZUFsaXZlKFNrSVNpemU6Ok1ha2UoMSwgMSkpKTsKKyAgICBFWFBFQ1Rf
RVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOwor
CisgICAgLy8gRXZpY3QgNS4KKyAgICBldmljdE9uZUNhY2hlKCk7CisgICAgRVhQRUNUX0ZBTFNF
KGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpNYWtlKDUsIDUpKSk7CisgICAgRVhQRUNUX0VRKDB1LCBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKK30KKworVEVT
VF9GKEltYWdlRGVjb2RpbmdTdG9yZVRlc3QsIHBydW5lQ2F1c2VkQnlJbnNlcnRpb24pCit7Cisg
ICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5zZXRDYWNoZUxpbWl0SW5CeXRlcygx
MDApOworCisgICAgLy8gSW5zZXJ0IDEwMCBlbnRyaWVzLgorICAgIC8vIENhY2hlIGVudHJpZXMg
c3RvcmVkIHNob3VsZCBpbmNyZWFzZSBhbmQgZXZlbnR1YWxseSBkZWNyZWFzZSB0byAxLgorICAg
IGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMSwgMSkpOworICAgIGluc2VydENhY2hlKFNrSVNp
emU6Ok1ha2UoMiwgMikpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMywgMykpOwor
ICAgIEVYUEVDVF9FUSgzdSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVu
dHJpZXMoKSk7CisKKyAgICBmb3IgKGludCBpID0gNDsgaSA8PSAxMDA7ICsraSkKKyAgICAgICAg
aW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZShpLCBpKSk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIElt
YWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworICAgIGZvciAo
aW50IGkgPSAxOyBpIDw9IDk5OyArK2kpCisgICAgICAgIEVYUEVDVF9GQUxTRShpc0NhY2hlQWxp
dmUoU2tJU2l6ZTo6TWFrZShpLCBpKSkpOworICAgIEVYUEVDVF9UUlVFKGlzQ2FjaGVBbGl2ZShT
a0lTaXplOjpNYWtlKDEwMCwgMTAwKSkpOworfQorCitURVNUX0YoSW1hZ2VEZWNvZGluZ1N0b3Jl
VGVzdCwgY2FjaGVJblVzZU5vdEV2aWN0ZWQpCit7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6
TWFrZSgxLCAxKSk7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSgyLCAyKSk7CisgICAg
aW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSgzLCAzKSk7CisgICAgRVhQRUNUX0VRKDN1LCBJbWFn
ZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKKworICAgIGNvbnN0
IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlID0gbG9ja0NhY2hlKFNrSVNpemU6Ok1h
a2UoMSwgMSkpOworICAgIEVYUEVDVF9UUlVFKGNhY2hlZEltYWdlKTsKKworICAgIC8vIENhY2hl
IDIgaXMgZXZpY3RlZCBiZWNhdXNlIGNhY2hlIDEgaXMgaW4gdXNlLgorICAgIGV2aWN0T25lQ2Fj
aGUoKTsKKyAgICBFWFBFQ1RfVFJVRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSgxLCAxKSkp
OworICAgIEVYUEVDVF9GQUxTRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSgyLCAyKSkpOwor
ICAgIEVYUEVDVF9UUlVFKGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpNYWtlKDMsIDMpKSk7CisKKyAg
ICBFWFBFQ1RfRVEoMnUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRy
aWVzKCkpOworICAgIHVubG9ja0NhY2hlKGNhY2hlZEltYWdlKTsKK30KKworVEVTVF9GKEltYWdl
RGVjb2RpbmdTdG9yZVRlc3QsIGRlc3Ryb3lJbWFnZUZyYW1lR2VuZXJhdG9yKQoreworICAgIGlu
c2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMSwgMSkpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6
Ok1ha2UoMiwgMikpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMywgMykpOworICAg
IEVYUEVDVF9FUSgzdSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJp
ZXMoKSk7CisKKyAgICBtX2dlbmVyYXRvci5jbGVhcigpOworICAgIEVYUEVDVF9GQUxTRShJbWFn
ZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177406</attachid>
            <date>2012-12-03 21:01:40 -0800</date>
            <delta_ts>2012-12-03 21:03:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103480-20121203205905.patch</filename>
            <type>text/plain</type>
            <size>26979</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2Mjg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmY5MGY5YTUwMDY1YWFj
M2M3YzBhYjVlZjU1NTNlODBlNzk2OGNhZC4uMTIzMTkxNjM0MmNlY2I0OGJhY2UyZWI2YzY4Yzhl
NzU1ZmVjMzJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTExLTI4ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1l
bnQgY2FjaGUgZXZpY3Rpb24gbG9naWMgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM0ODAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVu
dHMgdGhlc2UgZmVhdHVyZXMgaW4gdGhlIG5ldyBpbWFnZSBjYWNoZToKKyAgICAgICAgLSBMZWFz
dC1yZWNlbnRseS11c2VkIGV2aWN0aW9uIGxvZ2ljCisgICAgICAgIC0gU2V0dGluZyBjYWNoZSBs
aW1pdCAoZGVmYXVsdCBpcyA4TUIpCisgICAgICAgIC0gUmVtb3ZlIGNhY2hlIGVudHJpZXMgd2hl
biBJbWFnZUZyYW1lR2VuZXJhdG9yIGlzIHJlbW92ZWQKKworICAgICAgICBOZXcgdGVzdHMgaW4g
SW1hZ2VEZWNvZGluZ1Rlc3RUZXN0LiBBbHNvIGNvdmVyZWQgYnkgcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5n
U3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
aW5nU3RvcmU6On5JbWFnZURlY29kaW5nU3RvcmUpOgorICAgICAgICBDb2RlIHRvIGFzc2VydCB0
aGF0IGV2ZXJ5dGhpbmcgaXMgY2xlYW5lZCB1cC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2RpbmdTdG9yZTo6bG9ja0NvbXBsZXRlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjp1bmxvY2tDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
aW5nU3RvcmU6Omluc2VydEFuZExvY2tDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6OnJlbW92ZUNhY2hlSW5kZXhlZEJ5R2VuZXJhdG9yKToKKyAgICAgICAgTmV3
IG1ldGhvZCB0byByZW1vdmUgYWxsIGNhY2hlIGVudHJpZXMgaW5kZXggYnkgSW1hZ2VGcmFtZUdl
bmVyYXRvci4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlOjpzZXRDYWNoZUxpbWl0SW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kaW5nU3RvcmU6Om1lbW9yeVVzYWdlSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kaW5nU3RvcmU6OmNhY2hlRW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kaW5nU3RvcmU6OnBydW5lKToKKyAgICAgICAgTmV3IGNvZGUgdG8gaW1wbGVtZW50IExS
VSBldmljdGlvbiBsb2dpYy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zZXJ0Q2FjaGVJbnRlcm5hbCk6CisgICAgICAgIE5ldyBtZXRob2QgdG8gaGVscCBuZXcgY2Fj
aGUgaW5zZXJ0aW9uLiBUaGlzIGlzIHNlcGFyYXRlbHkgYmVjYXVzZSBpdCB0b3VjaGVzIDMgY29u
dGFpbmVycy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6cmVtb3ZlRnJv
bUNhY2hlSW50ZXJuYWwpOgorICAgICAgICBOZXcgbWV0aG9kIHRvIGhlbHAgcmVtb3ZlIGEgY2Fj
aGUgZW50cnkgZnJvbSBjb250YWluZXJzLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlOjpyZW1vdmVGcm9tQ2FjaGVMaXN0SW50ZXJuYWwpOgorICAgICAgICBOZXcgaGVscGVy
IG1ldGhvZCB0byBoZWxwIHJlbW92ZSBjYWNoZSBlbnRyeSBmcm9tIGRvdWJseSBsaW5rZWQgbGlz
dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3Rv
cmUuaDoKKyAgICAgICAgKEltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChDYWNoZUVudHJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y3Jl
YXRlQW5kVXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVF
bnRyeTo6Q2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
OkNhY2hlRW50cnk6On5DYWNoZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rp
bmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y2FjaGVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjpjYWNoZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hlRW50cnk6OnVzZUNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6aW5jcmVtZW50VXNlQ291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjpkZWNy
ZW1lbnRVc2VDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkNh
Y2hlRW50cnk6Om1lbW9yeVVzYWdlSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6OmluY3JlbWVudE1lbW9yeVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2RpbmdTdG9yZTo6ZGVjcmVtZW50TWVtb3J5VXNhZ2UpOgorICAgICAgICBOZXcgaGVs
cGVyIG1ldGhvZHMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VG
cmFtZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9y
Ojp+SW1hZ2VGcmFtZUdlbmVyYXRvcik6CisKIDIwMTItMTEtMjkgIElseWEgVGlraG9ub3Zza3kg
IDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbmRlckJsb2NrIG1pbm9yIGNsZWFu
LXVwOiByZXBsYWNlIHJhdyBwb2ludGVycyB3aXRoIE93blB0cnMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IGE1ZjE0NGZlYTQ2M2RiZTJjZWQ3NWUzOGJlYzhlMDNmZTFlMzE4ZjcuLjE4
YWViYzEyYmEwYjExYzM3YjM0ZjA0NjYwMWExYWFiZmZmOGVlNTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTItMTEtMjggIEFscGhhIExhbSAgPGhjbGFt
QGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBjYWNoZSBldmlj
dGlvbiBsb2dpYyBpbiBJbWFnZURlY29kaW5nU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzQ4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEltYWdlRGVjb2RpbmdTdG9yZVRlc3QgZm9y
IHVuaXQgdGVzdGluZyBuZXcgaW1hZ2UgY2FjaGUuCisKKyAgICAgICAgTmV3IHRlc3RzOgorCisg
ICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZVRlc3QuZXZpY3RPbmVDYWNoZQorCisgICAgICAgIFRl
c3QgZXZpY3Rpb24gb2Ygb25lIGNhY2hlIGVudHJ5IGJ5IHNldHRpbmcgYSBzbWFsbGVyIGNhY2hl
IGxpbWl0LgorCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZVRlc3QucHJ1bmVPcmRlcklzTGVh
c3RSZWNlbnRseVVzZWQKKworICAgICAgICBUZXN0IGV2aWN0aW9uIG9yZGVyIGlzIGxlYXN0IHJl
Y2VudGx5IHVzZWQuCisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdC5wcnVuZUNhdXNl
ZEJ5SW5zZXJ0aW9uCisKKyAgICAgICAgVGVzdCB0aGF0IGV2aWN0aW9uIGlzIHRyaWdnZXJlZCBh
bHNvIGJ5IGNhY2hlIGluc2VydGlvbi4KKworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmVUZXN0
LmNhY2hlSW5Vc2VOb3RFdmljdGVkCisKKyAgICAgICAgVGVzdCB0aGF0IGNhY2hlIGluIHVzZSBp
cyBub3QgZXZpY3RlZC4KKworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmVUZXN0LmRlc3Ryb3lJ
bWFnZUZyYW1lR2VuZXJhdG9yCisKKyAgICAgICAgVGVzdCB0aGF0IGRlbGV0aW5nIGEgSW1hZ2VG
cmFtZUdlbmVyYXRvciBjYXVzZXMgYXNzb2NpYXRlZCBjYWNoZQorICAgICAgICBlbnRyaWVzIHRv
IGJlIHJlbW92ZWQuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9J
bWFnZURlY29kaW5nU3RvcmVUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKEltYWdlRGVjb2RpbmdTdG9yZVRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlVGVzdDo6U2V0VXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlVGVzdDo6VGVhckRvd24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0
b3JlVGVzdDo6Y3JlYXRlQ29tcGxldGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmVUZXN0OjppbnNlcnRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmVUZXN0Ojpsb2NrQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlVGVzdDo6dW5sb2NrQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlVGVzdDo6ZXZpY3RPbmVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmVUZXN0Ojppc0NhY2hlQWxpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9G
KToKKwogMjAxMi0xMS0zMCAgU3RlcGhlbiBXaGl0ZSAgPHNlbm9yYmxhbmNvQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbQ2hyb21pdW1dIFN1cHByZXNzIHRoZSBuZXcgc2VwYXJhYmxlIG1hc2sg
Ymx1cnMgaW4gc2tpYSB1bnRpbCB0aGUgdGVzdHMgY2FuIGJlIHJlYmFzZWxpbmVkLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNv
ZGluZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKaW5kZXggNDg5ZmRkYzQyODAxZTQyMTc0ZjNiNDk3NzQ0
ZDU5MTlkYWQzZmU1Ny4uMzk2MjNmMmZlYjdiZDMzOWZjMzRlYTc1Y2I4Y2Y4ODY3N2E4Mjg1NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwCkBAIC0zNCw3ICszNCw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIHsKIAotSW1hZ2VEZWNvZGluZ1N0b3JlKiBzX2lu
c3RhbmNlID0gMDsKK3N0YXRpYyBjb25zdCBzaXplX3QgZGVmYXVsdENhY2hlTGltaXRJbkJ5dGVz
ID0gMTYzODQgKiAxMDI0Oworc3RhdGljIEltYWdlRGVjb2RpbmdTdG9yZSogc19pbnN0YW5jZSA9
IDA7CiAKIHN0YXRpYyB2b2lkIHNldEluc3RhbmNlKEltYWdlRGVjb2RpbmdTdG9yZSogaW1hZ2VE
ZWNvZGluZ1N0b3JlKQogewpAQCAtNDUsMTEgKzQ2LDE5IEBAIHN0YXRpYyB2b2lkIHNldEluc3Rh
bmNlKEltYWdlRGVjb2RpbmdTdG9yZSogaW1hZ2VEZWNvZGluZ1N0b3JlKQogfSAvLyBuYW1lc3Bh
Y2UKIAogSW1hZ2VEZWNvZGluZ1N0b3JlOjpJbWFnZURlY29kaW5nU3RvcmUoKQorICAgIDogbV9j
YWNoZUxpbWl0SW5CeXRlcyhkZWZhdWx0Q2FjaGVMaW1pdEluQnl0ZXMpCisgICAgLCBtX21lbW9y
eVVzYWdlSW5CeXRlcygwKQogewogfQogCiBJbWFnZURlY29kaW5nU3RvcmU6On5JbWFnZURlY29k
aW5nU3RvcmUoKQogeworI2lmbmRlZiBOREVCVUcKKyAgICBzZXRDYWNoZUxpbWl0SW5CeXRlcygw
KTsKKyAgICBBU1NFUlQoIW1fY2FjaGVNYXAuc2l6ZSgpKTsKKyAgICBBU1NFUlQoIW1fb3JkZXJl
ZENhY2hlTGlzdC5zaXplKCkpOworICAgIEFTU0VSVCghbV9jYWNoZWRTaXplTWFwLnNpemUoKSk7
CisjZW5kaWYKIH0KIAogSW1hZ2VEZWNvZGluZ1N0b3JlKiBJbWFnZURlY29kaW5nU3RvcmU6Omlu
c3RhbmNlKCkKQEAgLTc1LDE1ICs4NCwxNSBAQCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJ
bWFnZURlY29kaW5nU3RvcmU6OmxvY2tDb21wbGV0ZUNhY2hlKGNvbnN0IEltYWdlRnJhbQogICAg
ICAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY2FjaGVNYXAuZmluZChzdGQ6Om1ha2Vf
cGFpcihnZW5lcmF0b3IsIHNjYWxlZFNpemUpKTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9jYWNo
ZU1hcC5lbmQoKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYWNoZUVudHJ5ID0g
aXRlci0+dmFsdWU7Ci0gICAgICAgIGlmICghY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UtPmlzQ29t
cGxldGUoKSkKKyAgICAgICAgY2FjaGVFbnRyeSA9IGl0ZXItPnZhbHVlLmdldCgpOworICAgICAg
ICBpZiAoIWNhY2hlRW50cnktPmNhY2hlZEltYWdlKCktPmlzQ29tcGxldGUoKSkKICAgICAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgICAgIC8vIEluY3JlbWVudCB1c2UgY291bnQgc3VjaCB0aGF0
IGl0IGRvZXNuJ3QgZ2V0IGV2aWN0ZWQuCi0gICAgICAgICsrY2FjaGVFbnRyeS0+dXNlQ291bnQ7
CisgICAgICAgIGNhY2hlRW50cnktPmluY3JlbWVudFVzZUNvdW50KCk7CiAgICAgfQotICAgIGNh
Y2hlRW50cnktPmNhY2hlZEltYWdlLT5iaXRtYXAoKS5sb2NrUGl4ZWxzKCk7Ci0gICAgcmV0dXJu
IGNhY2hlRW50cnktPmNhY2hlZEltYWdlLmdldCgpOworICAgIGNhY2hlRW50cnktPmNhY2hlZElt
YWdlKCktPmJpdG1hcCgpLmxvY2tQaXhlbHMoKTsKKyAgICByZXR1cm4gY2FjaGVFbnRyeS0+Y2Fj
aGVkSW1hZ2UoKTsKIH0KIAogY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGlu
Z1N0b3JlOjpsb2NrSW5jb21wbGV0ZUNhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdl
bmVyYXRvciwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkKQEAgLTEwNSw5ICsxMTQsMTIgQEAg
dm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnVubG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5l
cmF0b3IqIGdlbmVyYXRvciwgY29uc3QKICAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1f
Y2FjaGVNYXAuZmluZChzdGQ6Om1ha2VfcGFpcihnZW5lcmF0b3IsIGNhY2hlZEltYWdlLT5zY2Fs
ZWRTaXplKCkpKTsKICAgICBBU1NFUlQoaXRlciAhPSBtX2NhY2hlTWFwLmVuZCgpKTsKIAotICAg
IENhY2hlRW50cnkqIGNhY2hlRW50cnkgPSBpdGVyLT52YWx1ZTsKLSAgICAtLWNhY2hlRW50cnkt
PnVzZUNvdW50OwotICAgIEFTU0VSVChjYWNoZUVudHJ5LT51c2VDb3VudCA+PSAwKTsKKyAgICBD
YWNoZUVudHJ5KiBjYWNoZUVudHJ5ID0gaXRlci0+dmFsdWUuZ2V0KCk7CisgICAgY2FjaGVFbnRy
eS0+ZGVjcmVtZW50VXNlQ291bnQoKTsKKworICAgIC8vIFB1dCB0aGUgZW50cnkgdG8gdGhlIGVu
ZCBvZiBsaXN0LgorICAgIG1fb3JkZXJlZENhY2hlTGlzdC5yZW1vdmUoY2FjaGVFbnRyeSk7Cisg
ICAgbV9vcmRlcmVkQ2FjaGVMaXN0LmFwcGVuZChjYWNoZUVudHJ5KTsKIH0KIAogY29uc3QgU2Nh
bGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnNlcnRBbmRMb2NrQ2FjaGUo
Y29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBQYXNzT3duUHRyPFNjYWxlZElt
YWdlRnJhZ21lbnQ+IGltYWdlKQpAQCAtMTI3LDIzICsxMzksMTI1IEBAIGNvbnN0IFNjYWxlZElt
YWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zZXJ0QW5kTG9ja0NhY2hlKGNvbnN0
IEltYWdlRnJhCiAgICAgfQogCiAgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2Ug
PSBpbWFnZS5nZXQoKTsKLSAgICBPd25QdHI8Q2FjaGVFbnRyeT4gbmV3Q2FjaGVFbnRyeSA9IENh
Y2hlRW50cnk6OmNyZWF0ZUFuZFVzZShpbWFnZSk7CisgICAgT3duUHRyPENhY2hlRW50cnk+IG5l
d0NhY2hlRW50cnkgPSBDYWNoZUVudHJ5OjpjcmVhdGVBbmRVc2UoZ2VuZXJhdG9yLCBpbWFnZSk7
CiAKLSAgICBDYWNoZUlkZW50aWZpZXIga2V5ID0gc3RkOjptYWtlX3BhaXIoZ2VuZXJhdG9yLCBj
YWNoZWRJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgp
OwotICAgIEFTU0VSVCghbV9jYWNoZU1hcC5jb250YWlucyhrZXkpKTsKLQotICAgIC8vIG1fY2Fj
aGVNYXAgaXMgdXNlZCBmb3IgaW5kZXhpbmcgYW5kIHF1aWNrIGxvb2t1cCBvZiBhIGNhY2hlZCBp
bWFnZS4KLSAgICAvLyBtX2NhY2hlRW50cmllcyBpcyB1c2VkIHRvIHN1cHBvcnQgTFJVIG9wZXJh
dGlvbnMgdG8gcmVvcmRlciBjYWNoZQotICAgIC8vIGVudHJpZXMgcXVpY2tseS4gSXQgYWxzbyBv
d25zIGNhY2hlZCBpbWFnZXMuCi0gICAgbV9jYWNoZU1hcC5hZGQoa2V5LCBuZXdDYWNoZUVudHJ5
LmdldCgpKTsKLSAgICBtX2NhY2hlRW50cmllcy5hcHBlbmQobmV3Q2FjaGVFbnRyeS5yZWxlYXNl
KCkpOworICAgIEFTU0VSVCghbV9jYWNoZU1hcC5jb250YWlucyhuZXdDYWNoZUVudHJ5LT5jYWNo
ZUtleSgpKSk7CisgICAgaW5zZXJ0Q2FjaGVJbnRlcm5hbChuZXdDYWNoZUVudHJ5LnJlbGVhc2Uo
KSk7CiAgICAgcmV0dXJuIGNhY2hlZEltYWdlOwogfQogCit2b2lkIEltYWdlRGVjb2RpbmdTdG9y
ZTo6cmVtb3ZlQ2FjaGVJbmRleGVkQnlHZW5lcmF0b3IoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRv
ciogZ2VuZXJhdG9yKQoreworICAgIFZlY3RvcjxPd25QdHI8Q2FjaGVFbnRyeT4gPiBjYWNoZUVu
dHJpZXNUb0RlbGV0ZTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7
CisgICAgICAgIENhY2hlZFNpemVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhY2hlZFNpemVNYXAu
ZmluZChnZW5lcmF0b3IpOworICAgICAgICBpZiAoaXRlciA9PSBtX2NhY2hlZFNpemVNYXAuZW5k
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gR2V0IGFsbCBjYWNoZWQgc2l6
ZXMgaW5kZXhlZCBieSBnZW5lcmF0b3IuCisgICAgICAgIFZlY3RvcjxTa0lTaXplPiBjYWNoZWRT
aXplTGlzdDsKKyAgICAgICAgY29weVRvVmVjdG9yKGl0ZXItPnZhbHVlLCBjYWNoZWRTaXplTGlz
dCk7CisKKyAgICAgICAgLy8gRm9yIGVhY2ggY2FjaGVkIHNpemUgZmluZCB0aGUgY29ycmVzcG9u
ZGluZyBDYWNoZUVudHJ5IGFuZCByZW1vdmUgaXQgZnJvbQorICAgICAgICAvLyBtX2NhY2hlTWFw
LgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhY2hlZFNpemVMaXN0LnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBDYWNoZUlkZW50aWZpZXIga2V5ID0gc3RkOjptYWtlX3BhaXIo
Z2VuZXJhdG9yLCBjYWNoZWRTaXplTGlzdFtpXSk7CisgICAgICAgICAgICBBU1NFUlQobV9jYWNo
ZU1hcC5jb250YWlucyhrZXkpKTsKKworICAgICAgICAgICAgY29uc3QgQ2FjaGVFbnRyeSogY2Fj
aGVFbnRyeSA9IG1fY2FjaGVNYXAuZ2V0KGtleSk7CisgICAgICAgICAgICBBU1NFUlQoIWNhY2hl
RW50cnktPnVzZUNvdW50KCkpOworICAgICAgICAgICAgcmVtb3ZlRnJvbUNhY2hlSW50ZXJuYWwo
Y2FjaGVFbnRyeSwgJmNhY2hlRW50cmllc1RvRGVsZXRlKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIFJlbW92ZSBmcm9tIGNhY2hlIGxpc3QgYXMgd2VsbC4KKyAgICAgICAgcmVtb3ZlRnJvbUNh
Y2hlTGlzdEludGVybmFsKGNhY2hlRW50cmllc1RvRGVsZXRlKTsKKyAgICB9Cit9CisKK3ZvaWQg
SW1hZ2VEZWNvZGluZ1N0b3JlOjpzZXRDYWNoZUxpbWl0SW5CeXRlcyhzaXplX3QgY2FjaGVMaW1p
dCkKK3sKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgICAg
IG1fY2FjaGVMaW1pdEluQnl0ZXMgPSBjYWNoZUxpbWl0OworICAgIH0KKyAgICBwcnVuZSgpOwor
fQorCitzaXplX3QgSW1hZ2VEZWNvZGluZ1N0b3JlOjptZW1vcnlVc2FnZUluQnl0ZXMoKQorewor
ICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgcmV0dXJuIG1fbWVtb3J5VXNhZ2VJ
bkJ5dGVzOworfQorCit1bnNpZ25lZCBJbWFnZURlY29kaW5nU3RvcmU6OmNhY2hlRW50cmllcygp
Cit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICByZXR1cm4gbV9jYWNoZU1h
cC5zaXplKCk7Cit9CisKIHZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpwcnVuZSgpCiB7Ci0gICAg
Ly8gVE9ETzogSW1wbGVtZW50LgorICAgIFZlY3RvcjxPd25QdHI8Q2FjaGVFbnRyeT4gPiBjYWNo
ZUVudHJpZXNUb0RlbGV0ZTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRl
eCk7CisKKyAgICAgICAgLy8gSGVhZCBvZiB0aGUgbGlzdCBpcyB0aGUgbGVhc3QgcmVjZW50bHkg
dXNlZCBlbnRyeS4KKyAgICAgICAgY29uc3QgQ2FjaGVFbnRyeSogY2FjaGVFbnRyeSA9IG1fb3Jk
ZXJlZENhY2hlTGlzdC5oZWFkKCk7CisKKyAgICAgICAgLy8gV2FsayB0aGUgbGlzdCBvZiBjYWNo
ZSBlbnRyaWVzIHN0YXJ0aW5nIGZyb20gdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQKKyAgICAgICAg
Ly8gYW5kIHRoZW4ga2VlcCB0aGVtIGZvciBkZWxldGlvbiBsYXRlci4KKyAgICAgICAgd2hpbGUg
KGNhY2hlRW50cnkgJiYgbV9tZW1vcnlVc2FnZUluQnl0ZXMgPiBtX2NhY2hlTGltaXRJbkJ5dGVz
KSB7CisgICAgICAgICAgICAvLyBDYWNoZSBpcyBub3QgdXNlZDsgUmVtb3ZlIGl0LgorICAgICAg
ICAgICAgaWYgKCFjYWNoZUVudHJ5LT51c2VDb3VudCgpKQorICAgICAgICAgICAgICAgIHJlbW92
ZUZyb21DYWNoZUludGVybmFsKGNhY2hlRW50cnksICZjYWNoZUVudHJpZXNUb0RlbGV0ZSk7Cisg
ICAgICAgICAgICBjYWNoZUVudHJ5ID0gY2FjaGVFbnRyeS0+bmV4dCgpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gUmVtb3ZlIGZyb20gY2FjaGUgbGlzdCBhcyB3ZWxsLgorICAgICAgICByZW1v
dmVGcm9tQ2FjaGVMaXN0SW50ZXJuYWwoY2FjaGVFbnRyaWVzVG9EZWxldGUpOworICAgIH0KK30K
Kwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6Omluc2VydENhY2hlSW50ZXJuYWwoUGFzc093blB0
cjxDYWNoZUVudHJ5PiBjYWNoZUVudHJ5KQoreworICAgIGluY3JlbWVudE1lbW9yeVVzYWdlKGNh
Y2hlRW50cnktPm1lbW9yeVVzYWdlSW5CeXRlcygpKTsKKworICAgIC8vIG1fb3JkZXJlZENhY2hl
TGlzdCBpcyB1c2VkIHRvIHN1cHBvcnQgTFJVIG9wZXJhdGlvbnMgdG8gcmVvcmRlciBjYWNoZQor
ICAgIC8vIGVudHJpZXMgcXVpY2tseS4KKyAgICBtX29yZGVyZWRDYWNoZUxpc3QuYXBwZW5kKGNh
Y2hlRW50cnkuZ2V0KCkpOworCisgICAgQ2FjaGVJZGVudGlmaWVyIGtleSA9IGNhY2hlRW50cnkt
PmNhY2hlS2V5KCk7CisgICAgLy8gbV9jYWNoZU1hcCBpcyB1c2VkIGZvciBpbmRleGluZyBhbmQg
cXVpY2sgbG9va3VwIG9mIGEgY2FjaGVkIGltYWdlLiBJdCBvd25zCisgICAgLy8gYWxsIGNhY2hl
IGVudHJpZXMuCisgICAgbV9jYWNoZU1hcC5hZGQoa2V5LCBjYWNoZUVudHJ5KTsKKworICAgIC8v
IG1fY2FjaGVkU2l6ZU1hcCBrZWVwcyBhbGwgc2NhbGVkIHNpemVzIGFzc29jaWF0ZWQgd2l0aCBh
biBJbWFnZUZyYW1lR2VuZXJhdG9yLgorICAgIENhY2hlZFNpemVNYXA6OkFkZFJlc3VsdCByZXN1
bHQgPSBtX2NhY2hlZFNpemVNYXAuYWRkKGtleS5maXJzdCwgU2l6ZVNldCgpKTsKKyAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmFkZChrZXkuc2Vjb25kKTsKK30KKwordm9pZCBJbWFnZURlY29k
aW5nU3RvcmU6OnJlbW92ZUZyb21DYWNoZUludGVybmFsKGNvbnN0IENhY2hlRW50cnkqIGNhY2hl
RW50cnksIFZlY3RvcjxPd25QdHI8Q2FjaGVFbnRyeT4gPiogZGVsZXRpb25MaXN0KQoreworICAg
IGRlY3JlbWVudE1lbW9yeVVzYWdlKGNhY2hlRW50cnktPm1lbW9yeVVzYWdlSW5CeXRlcygpKTsK
KworICAgIC8vIFJlbW92ZSBmcm9tIG1fY2FjaGVNYXAuCisgICAgQ2FjaGVJZGVudGlmaWVyIGtl
eSA9IGNhY2hlRW50cnktPmNhY2hlS2V5KCk7CisgICAgZGVsZXRpb25MaXN0LT5hcHBlbmQobV9j
YWNoZU1hcC50YWtlKGtleSkpOworCisgICAgLy8gUmVtb3ZlIGZyb20gbV9jYWNoZWRTaXplTWFw
LgorICAgIENhY2hlZFNpemVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhY2hlZFNpemVNYXAuZmlu
ZChrZXkuZmlyc3QpOworICAgIEFTU0VSVChpdGVyICE9IG1fY2FjaGVkU2l6ZU1hcC5lbmQoKSk7
CisgICAgaXRlci0+dmFsdWUucmVtb3ZlKGtleS5zZWNvbmQpOworICAgIGlmICghaXRlci0+dmFs
dWUuc2l6ZSgpKQorICAgICAgICBtX2NhY2hlZFNpemVNYXAucmVtb3ZlKGl0ZXIpOworfQorCit2
b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6cmVtb3ZlRnJvbUNhY2hlTGlzdEludGVybmFsKGNvbnN0
IFZlY3RvcjxPd25QdHI8Q2FjaGVFbnRyeT4gPiYgZGVsZXRpb25MaXN0KQoreworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZGVsZXRpb25MaXN0LnNpemUoKTsgKytpKQorICAgICAgICBtX29y
ZGVyZWRDYWNoZUxpc3QucmVtb3ZlKGRlbGV0aW9uTGlzdFtpXS5nZXQoKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKaW5kZXggMGFlYTJl
OTY5OWU3ODcwNzExNGFlNmY2NjRjNmNjOTExNjc3M2E0ZS4uMDVlYTExYjg4ZTI2OTUxODhjZmRm
ODg0NTA0NGJiMDc0ZDlhMzFkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKQEAgLTMx
LDYgKzMxLDggQEAKICNpbmNsdWRlICJTa1NpemUuaCIKICNpbmNsdWRlICJTa1NpemVIYXNoLmgi
CiAKKyNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KQEAgLTU2LDQyICs1OCw5
MSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1bmxvY2tDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJh
dG9yKiwgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCopOwogICAgIGNvbnN0IFNjYWxlZEltYWdl
RnJhZ21lbnQqIGluc2VydEFuZExvY2tDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwg
UGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50Pik7CiAKKyAgICAvLyBSZW1vdmUgYWxsIGNh
Y2hlIGVudHJpZXMgaW5kZXhlZCBieSBJbWFnZUZyYW1lR2VuZXJhdG9yLgorICAgIHZvaWQgcmVt
b3ZlQ2FjaGVJbmRleGVkQnlHZW5lcmF0b3IoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciopOwor
CisgICAgdm9pZCBzZXRDYWNoZUxpbWl0SW5CeXRlcyhzaXplX3QpOworICAgIHNpemVfdCBtZW1v
cnlVc2FnZUluQnl0ZXMoKTsKKyAgICB1bnNpZ25lZCBjYWNoZUVudHJpZXMoKTsKKwogcHJpdmF0
ZToKLSAgICBzdHJ1Y3QgQ2FjaGVFbnRyeSB7Ci0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPENh
Y2hlRW50cnk+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYWNoZUVudHJ5KCkpOyB9
Ci0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPENhY2hlRW50cnk+IGNyZWF0ZUFuZFVzZShQYXNz
T3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlKSB7IHJldHVybiBhZG9wdFB0cihuZXcg
Q2FjaGVFbnRyeShpbWFnZSwgMSkpOyB9CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgSW1h
Z2VGcmFtZUdlbmVyYXRvciosIFNrSVNpemU+IENhY2hlSWRlbnRpZmllcjsKIAotICAgICAgICBD
YWNoZUVudHJ5KCkKLSAgICAgICAgICAgIDogdXNlQ291bnQoMCkKKyAgICBjbGFzcyBDYWNoZUVu
dHJ5IDogcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPENhY2hlRW50cnk+IHsKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIERvdWJseUxpbmtlZExpc3ROb2RlPENhY2hlRW50cnk+OworICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8Q2FjaGVFbnRyeT4gY3JlYXRlQW5kVXNlKGNv
bnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgUGFzc093blB0cjxTY2FsZWRJbWFn
ZUZyYWdtZW50PiBpbWFnZSkKICAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDYWNoZUVudHJ5KGdlbmVyYXRvciwgaW1hZ2UsIDEpKTsKICAgICAgICAgfQogCi0gICAg
ICAgIENhY2hlRW50cnkoUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBpbWFnZSwgaW50
IGNvdW50KQotICAgICAgICAgICAgOiBjYWNoZWRJbWFnZShpbWFnZSkKLSAgICAgICAgICAgICwg
dXNlQ291bnQoY291bnQpCisgICAgICAgIENhY2hlRW50cnkoY29uc3QgSW1hZ2VGcmFtZUdlbmVy
YXRvciogZ2VuZXJhdG9yLCBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlLCBp
bnQgY291bnQpCisgICAgICAgICAgICA6IG1fcHJldigwKQorICAgICAgICAgICAgLCBtX25leHQo
MCkKKyAgICAgICAgICAgICwgbV9nZW5lcmF0b3IoZ2VuZXJhdG9yKQorICAgICAgICAgICAgLCBt
X2NhY2hlZEltYWdlKGltYWdlKQorICAgICAgICAgICAgLCBtX3VzZUNvdW50KGNvdW50KQogICAg
ICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICB+Q2FjaGVFbnRyeSgpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVCghdXNlQ291bnQpOworICAgICAgICAgICAgQVNTRVJUKCFtX3VzZUNv
dW50KTsKICAgICAgICAgfQogCi0gICAgICAgIE93blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBj
YWNoZWRJbWFnZTsKLSAgICAgICAgaW50IHVzZUNvdW50OworICAgICAgICBDYWNoZUlkZW50aWZp
ZXIgY2FjaGVLZXkoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihtX2dlbmVyYXRvciwg
bV9jYWNoZWRJbWFnZS0+c2NhbGVkU2l6ZSgpKTsgfQorICAgICAgICBjb25zdCBTY2FsZWRJbWFn
ZUZyYWdtZW50KiBjYWNoZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UuZ2V0
KCk7IH0KKyAgICAgICAgaW50IHVzZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV91c2VDb3VudDsg
fQorICAgICAgICB2b2lkIGluY3JlbWVudFVzZUNvdW50KCkgeyArK21fdXNlQ291bnQ7IH0KKyAg
ICAgICAgdm9pZCBkZWNyZW1lbnRVc2VDb3VudCgpIHsgLS1tX3VzZUNvdW50OyBBU1NFUlQobV91
c2VDb3VudCA+PSAwKTsgfQorCisgICAgICAgIC8vIEZJWE1FOiBnZXRTYWZlU2l6ZSgpIHJldHVy
bnMgc2l6ZSBpbiBieXRlcyB0cnVuc2NhdGVkIHRvIGEgMzItYml0cyBpbnRlZ2VyLgorICAgICAg
ICAvLyAgICAgICAgRmluZCBhIHdheSB0byBnZXQgdGhlIHNpemUgaW4gNjQtYml0cy4KKyAgICAg
ICAgc2l6ZV90IG1lbW9yeVVzYWdlSW5CeXRlcygpIGNvbnN0IHsgcmV0dXJuIGNhY2hlZEltYWdl
KCktPmJpdG1hcCgpLmdldFNhZmVTaXplKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIENh
Y2hlRW50cnkqIG1fcHJldjsKKyAgICAgICAgQ2FjaGVFbnRyeSogbV9uZXh0OworICAgICAgICBj
b25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBtX2dlbmVyYXRvcjsKKyAgICAgICAgT3duUHRyPFNj
YWxlZEltYWdlRnJhZ21lbnQ+IG1fY2FjaGVkSW1hZ2U7CisgICAgICAgIGludCBtX3VzZUNvdW50
OwogICAgIH07CiAKICAgICBJbWFnZURlY29kaW5nU3RvcmUoKTsKLSAgICB2b2lkIHBydW5lKCk7
CiAKLSAgICBWZWN0b3I8T3duUHRyPENhY2hlRW50cnk+ID4gbV9jYWNoZUVudHJpZXM7CisgICAg
dm9pZCBwcnVuZSgpOwogCi0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgSW1hZ2VGcmFtZUdl
bmVyYXRvciosIFNrSVNpemU+IENhY2hlSWRlbnRpZmllcjsKLSAgICB0eXBlZGVmIEhhc2hNYXA8
Q2FjaGVJZGVudGlmaWVyLCBDYWNoZUVudHJ5Kj4gQ2FjaGVNYXA7CisgICAgLy8gVGhlc2UgbWV0
aG9kcyBhcmUgY2FsbGVkIHdoaWxlIG1fbXV0ZXggaXMgbG9ja2VkLgorICAgIHZvaWQgaW5zZXJ0
Q2FjaGVJbnRlcm5hbChQYXNzT3duUHRyPENhY2hlRW50cnk+KTsKKyAgICB2b2lkIHJlbW92ZUZy
b21DYWNoZUludGVybmFsKGNvbnN0IENhY2hlRW50cnkqLCBWZWN0b3I8T3duUHRyPENhY2hlRW50
cnk+ID4qIGRlbGV0aW9uTGlzdCk7CisgICAgdm9pZCByZW1vdmVGcm9tQ2FjaGVMaXN0SW50ZXJu
YWwoY29uc3QgVmVjdG9yPE93blB0cjxDYWNoZUVudHJ5PiA+JiBkZWxldGlvbkxpc3QpOworICAg
IHZvaWQgaW5jcmVtZW50TWVtb3J5VXNhZ2Uoc2l6ZV90IHNpemUpIHsgbV9tZW1vcnlVc2FnZUlu
Qnl0ZXMgKz0gc2l6ZTsgfQorICAgIHZvaWQgZGVjcmVtZW50TWVtb3J5VXNhZ2Uoc2l6ZV90IHNp
emUpCisgICAgeworICAgICAgICBBU1NFUlQobV9tZW1vcnlVc2FnZUluQnl0ZXMgPj0gc2l6ZSk7
CisgICAgICAgIG1fbWVtb3J5VXNhZ2VJbkJ5dGVzIC09IHNpemU7CisgICAgfQorCisgICAgLy8g
SGVhZCBvZiB0aGlzIGxpc3QgaXMgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgY2FjaGUgZW50cnku
CisgICAgLy8gVGFpbCBvZiB0aGlzIGxpc3QgaXMgdGhlIG1vc3QgcmVjZW50bHkgdXNlZCBjYWNo
ZSBlbnRyeS4KKyAgICBEb3VibHlMaW5rZWRMaXN0PENhY2hlRW50cnk+IG1fb3JkZXJlZENhY2hl
TGlzdDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxDYWNoZUlkZW50aWZpZXIsIE93blB0cjxDYWNo
ZUVudHJ5PiA+IENhY2hlTWFwOwogICAgIENhY2hlTWFwIG1fY2FjaGVNYXA7CiAKLSAgICAvLyBQ
cm90ZWN0IGNvbmN1cnJlbnQgYWNjZXNzIHRvIGFsbCBpbnN0YW5jZXMgb2YgQ2FjaGVFbnRyeSBz
dG9yZWQgaW4gbV9jYWNoZUVudHJpZXMgYW5kCi0gICAgLy8gbV9jYWNoZU1hcCBhcyB3ZWxsIGFz
IHRoZSBjb250YWluZXJzLgorICAgIHR5cGVkZWYgSGFzaFNldDxTa0lTaXplPiBTaXplU2V0Owor
ICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgU2l6ZVNldD4g
Q2FjaGVkU2l6ZU1hcDsKKyAgICBDYWNoZWRTaXplTWFwIG1fY2FjaGVkU2l6ZU1hcDsKKworICAg
IHNpemVfdCBtX2NhY2hlTGltaXRJbkJ5dGVzOworICAgIHNpemVfdCBtX21lbW9yeVVzYWdlSW5C
eXRlczsKKworICAgIC8vIFByb3RlY3QgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlc2UgbWVtYmVy
czoKKyAgICAvLyAgIG1fb3JkZXJlZENhY2hlTGlzdAorICAgIC8vICAgbV9jYWNoZU1hcCBhbmQg
YWxsIENhY2hlRW50cnlzIHN0b3JlZCBpbiBpdAorICAgIC8vICAgbV9jYWNoZWRTaXplTWFwCisg
ICAgLy8gICBtX2NhY2hlTGltaXRJbkJ5dGVzCisgICAgLy8gICBtX21lbW9yeVVzYWdlSW5CeXRl
cwogICAgIE11dGV4IG1fbXV0ZXg7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3Iu
Y3BwCmluZGV4IDIyMGE1N2Q0NWRhMTIzN2VmZmI1ODhhYTRlMjczYzVhN2EzMjM2NTQuLmVmODUw
NTVjNGRjMjNhNGQ2MDBmMzkwOGM5ZjA1MzkxZmE5YzQ5YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJh
bWVHZW5lcmF0b3IuY3BwCkBAIC01NCw4ICs1NCwxMSBAQCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpJ
bWFnZUZyYW1lR2VuZXJhdG9yKGNvbnN0IFNrSVNpemUmIGZ1bGxTaXplLCBQYXNzUmVmUHRyPFNo
YQogCiBJbWFnZUZyYW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCiB7Ci0gICAg
Ly8gVE9ETzogQ2FsbCBJbWFnZURlY29kaW5nU3RvcmUgdG8gcmVtb3ZlIGFsbCBjYWNoZSBlbnRy
aWVzIGluZGV4ZWQKLSAgICAvLyBieSB0aGlzIG9iamVjdC4KKyAgICAvLyBGSVhNRTogVGhpcyBj
aGVjayBpcyBub3QgcmVhbGx5IHRocmVhZC1zYWZlLiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIHRv
OgorICAgIC8vIEltYWdlRGVjb2RpbmdTdG9yZTo6cmVtb3ZlQ2FjaGVGcm9tSW5zdGFuY2UodGhp
cyk7CisgICAgLy8gV2hpY2ggdXNlcyBhIGxvY2sgaW50ZXJuYWxseS4KKyAgICBpZiAoSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpKQorICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omlu
c3RhbmNlKCktPnJlbW92ZUNhY2hlSW5kZXhlZEJ5R2VuZXJhdG9yKHRoaXMpOwogfQogCiB2b2lk
IEltYWdlRnJhbWVHZW5lcmF0b3I6OnNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRh
dGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5k
ZXggM2FkM2UyMGRhZTM0MjhiMGMyODk3ODgzZDY5MzI2MGY4NDBlMTEwNy4uNGYzYjY3ZDk2MjA1
MzliODA1ZmFjZDU4ODIwOTc4YmUwY2Y2NWU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCkBAIC04MSw2ICs4MSw3IEBACiAgICAgICAgICAgICAndGVzdHMvSURCS2V5UGF0aFRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0lEQlJlcXVlc3RUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMv
SW1hZ2VEZWNvZGluZ1N0b3JlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ltYWdlRnJh
bWVHZW5lcmF0b3JUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSW1hZ2VMYXllckNocm9t
aXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVjb2RpbmdTdG9y
ZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZURlY29kaW5nU3Rv
cmVUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzhhZTcyMGI1NzViZjk5NjBiNTg3MmJlMWUwOTc0ZmEz
ZDdkOWIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9J
bWFnZURlY29kaW5nU3RvcmVUZXN0LmNwcApAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorCisjaW5j
bHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgor
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgeworCitjbGFzcyBJbWFnZURlY29kaW5nU3RvcmVUZXN0IDogcHVibGljIDo6dGVz
dGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7Cisg
ICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uY2UoKTsKKyAgICAgICAgbV9k
YXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBJbWFn
ZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUoU2tJU2l6ZTo6TWFrZSgxMDAsIDEwMCksIG1fZGF0YSwg
dHJ1ZSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAg
ICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsKKyAgICB9CisKK3Byb3RlY3RlZDoK
KyAgICBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGNyZWF0ZUNvbXBsZXRlSW1hZ2Uo
Y29uc3QgU2tJU2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIFNrQml0bWFwIGJpdG1hcDsKKyAg
ICAgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGJpdG1hcC5hbGxvY1BpeGVscygpOwor
ICAgICAgICByZXR1cm4gU2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRlKHNpemUsIGJpdG1hcCwg
dHJ1ZSk7CisgICAgfQorCisgICAgdm9pZCBpbnNlcnRDYWNoZShjb25zdCBTa0lTaXplJiBzaXpl
KQorICAgIHsKKyAgICAgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogaW1hZ2UgPSBJbWFn
ZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmluc2VydEFuZExvY2tDYWNoZSgKKyAgICAgICAg
ICAgIG1fZ2VuZXJhdG9yLmdldCgpLCBjcmVhdGVDb21wbGV0ZUltYWdlKHNpemUpKTsKKyAgICAg
ICAgdW5sb2NrQ2FjaGUoaW1hZ2UpOworICAgIH0KKworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJh
Z21lbnQqIGxvY2tDYWNoZShjb25zdCBTa0lTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9ja0NvbXBsZXRlQ2FjaGUobV9n
ZW5lcmF0b3IuZ2V0KCksIHNpemUpOworICAgIH0KKworICAgIHZvaWQgdW5sb2NrQ2FjaGUoY29u
c3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UpCisgICAgeworICAgICAgICBJbWFn
ZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgp
LCBjYWNoZWRJbWFnZSk7CisgICAgfQorCisgICAgdm9pZCBldmljdE9uZUNhY2hlKCkKKyAgICB7
CisgICAgICAgIHNpemVfdCBtZW1vcnlVc2FnZUluQnl0ZXMgPSBJbWFnZURlY29kaW5nU3RvcmU6
Omluc3RhbmNlKCktPm1lbW9yeVVzYWdlSW5CeXRlcygpOworICAgICAgICBpZiAobWVtb3J5VXNh
Z2VJbkJ5dGVzKQorICAgICAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5z
ZXRDYWNoZUxpbWl0SW5CeXRlcyhtZW1vcnlVc2FnZUluQnl0ZXMgLSAxKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5zZXRDYWNoZUxp
bWl0SW5CeXRlcygwKTsKKyAgICB9CisKKyAgICBib29sIGlzQ2FjaGVBbGl2ZShjb25zdCBTa0lT
aXplJiBzaXplKQorICAgIHsKKyAgICAgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2Fj
aGVkSW1hZ2UgPSBsb2NrQ2FjaGUoc2l6ZSk7CisgICAgICAgIGlmICghY2FjaGVkSW1hZ2UpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5z
dGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIGNhY2hlZEltYWdlKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9k
YXRhOworICAgIFJlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKK307CisK
K1RFU1RfRihJbWFnZURlY29kaW5nU3RvcmVUZXN0LCBldmljdE9uZUNhY2hlKQoreworICAgIGlu
c2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMSwgMSkpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6
Ok1ha2UoMiwgMikpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMywgMykpOworICAg
IEVYUEVDVF9FUSgzdSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJp
ZXMoKSk7CisKKyAgICBldmljdE9uZUNhY2hlKCk7CisgICAgRVhQRUNUX0VRKDJ1LCBJbWFnZURl
Y29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKKworICAgIGV2aWN0T25l
Q2FjaGUoKTsKKyAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2Uo
KS0+Y2FjaGVFbnRyaWVzKCkpOworfQorCitURVNUX0YoSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdCwg
cHJ1bmVPcmRlcklzTGVhc3RSZWNlbnRseVVzZWQpCit7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6
ZTo6TWFrZSgxLCAxKSk7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSgyLCAyKSk7Cisg
ICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSgzLCAzKSk7CisgICAgaW5zZXJ0Q2FjaGUoU2tJ
U2l6ZTo6TWFrZSg0LCA0KSk7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSg1LCA1KSk7
CisgICAgRVhQRUNUX0VRKDV1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hl
RW50cmllcygpKTsKKworICAgIC8vIFVzZSBjYWNoZSBpbiB0aGUgb3JkZXIgMywgMiwgNCwgMSwg
NS4KKyAgICBFWFBFQ1RfVFJVRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSgzLCAzKSkpOwor
ICAgIEVYUEVDVF9UUlVFKGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpNYWtlKDIsIDIpKSk7CisgICAg
RVhQRUNUX1RSVUUoaXNDYWNoZUFsaXZlKFNrSVNpemU6Ok1ha2UoNCwgNCkpKTsKKyAgICBFWFBF
Q1RfVFJVRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSgxLCAxKSkpOworICAgIEVYUEVDVF9U
UlVFKGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpNYWtlKDUsIDUpKSk7CisKKyAgICAvLyBFdmljdCAz
LgorICAgIGV2aWN0T25lQ2FjaGUoKTsKKyAgICBFWFBFQ1RfRkFMU0UoaXNDYWNoZUFsaXZlKFNr
SVNpemU6Ok1ha2UoMywgMykpKTsKKyAgICBFWFBFQ1RfRVEoNHUsIEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworCisgICAgLy8gRXZpY3QgMi4KKyAgICBl
dmljdE9uZUNhY2hlKCk7CisgICAgRVhQRUNUX0ZBTFNFKGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpN
YWtlKDIsIDIpKSk7CisgICAgRVhQRUNUX0VRKDN1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3Rh
bmNlKCktPmNhY2hlRW50cmllcygpKTsKKworICAgIC8vIEV2aWN0IDQuCisgICAgZXZpY3RPbmVD
YWNoZSgpOworICAgIEVYUEVDVF9GQUxTRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSg0LCA0
KSkpOworICAgIEVYUEVDVF9FUSgydSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5j
YWNoZUVudHJpZXMoKSk7CisKKyAgICAvLyBFdmljdCAxLgorICAgIGV2aWN0T25lQ2FjaGUoKTsK
KyAgICBFWFBFQ1RfRkFMU0UoaXNDYWNoZUFsaXZlKFNrSVNpemU6Ok1ha2UoMSwgMSkpKTsKKyAg
ICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRy
aWVzKCkpOworCisgICAgLy8gRXZpY3QgNS4KKyAgICBldmljdE9uZUNhY2hlKCk7CisgICAgRVhQ
RUNUX0ZBTFNFKGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpNYWtlKDUsIDUpKSk7CisgICAgRVhQRUNU
X0VRKDB1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsK
K30KKworVEVTVF9GKEltYWdlRGVjb2RpbmdTdG9yZVRlc3QsIHBydW5lQ2F1c2VkQnlJbnNlcnRp
b24pCit7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5zZXRDYWNoZUxpbWl0
SW5CeXRlcygxMDApOworCisgICAgLy8gSW5zZXJ0IDEwMCBlbnRyaWVzLgorICAgIC8vIENhY2hl
IGVudHJpZXMgc3RvcmVkIHNob3VsZCBpbmNyZWFzZSBhbmQgZXZlbnR1YWxseSBkZWNyZWFzZSB0
byAxLgorICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMSwgMSkpOworICAgIGluc2VydENh
Y2hlKFNrSVNpemU6Ok1ha2UoMiwgMikpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2Uo
MywgMykpOworICAgIEVYUEVDVF9FUSgzdSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgp
LT5jYWNoZUVudHJpZXMoKSk7CisKKyAgICBmb3IgKGludCBpID0gNDsgaSA8PSAxMDA7ICsraSkK
KyAgICAgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZShpLCBpKSk7CisKKyAgICBFWFBFQ1Rf
RVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOwor
ICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IDk5OyArK2kpCisgICAgICAgIEVYUEVDVF9GQUxTRShp
c0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZShpLCBpKSkpOworICAgIEVYUEVDVF9UUlVFKGlzQ2Fj
aGVBbGl2ZShTa0lTaXplOjpNYWtlKDEwMCwgMTAwKSkpOworfQorCitURVNUX0YoSW1hZ2VEZWNv
ZGluZ1N0b3JlVGVzdCwgY2FjaGVJblVzZU5vdEV2aWN0ZWQpCit7CisgICAgaW5zZXJ0Q2FjaGUo
U2tJU2l6ZTo6TWFrZSgxLCAxKSk7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSgyLCAy
KSk7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSgzLCAzKSk7CisgICAgRVhQRUNUX0VR
KDN1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKKwor
ICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlID0gbG9ja0NhY2hlKFNr
SVNpemU6Ok1ha2UoMSwgMSkpOworICAgIEVYUEVDVF9UUlVFKGNhY2hlZEltYWdlKTsKKworICAg
IC8vIENhY2hlIDIgaXMgZXZpY3RlZCBiZWNhdXNlIGNhY2hlIDEgaXMgaW4gdXNlLgorICAgIGV2
aWN0T25lQ2FjaGUoKTsKKyAgICBFWFBFQ1RfVFJVRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFr
ZSgxLCAxKSkpOworICAgIEVYUEVDVF9GQUxTRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSgy
LCAyKSkpOworICAgIEVYUEVDVF9UUlVFKGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpNYWtlKDMsIDMp
KSk7CisKKyAgICBFWFBFQ1RfRVEoMnUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+
Y2FjaGVFbnRyaWVzKCkpOworICAgIHVubG9ja0NhY2hlKGNhY2hlZEltYWdlKTsKK30KKworVEVT
VF9GKEltYWdlRGVjb2RpbmdTdG9yZVRlc3QsIGRlc3Ryb3lJbWFnZUZyYW1lR2VuZXJhdG9yKQor
eworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMSwgMSkpOworICAgIGluc2VydENhY2hl
KFNrSVNpemU6Ok1ha2UoMiwgMikpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMywg
MykpOworICAgIEVYUEVDVF9FUSgzdSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5j
YWNoZUVudHJpZXMoKSk7CisKKyAgICBtX2dlbmVyYXRvci5jbGVhcigpOworICAgIEVYUEVDVF9G
QUxTRShJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177408</attachid>
            <date>2012-12-03 21:03:42 -0800</date>
            <delta_ts>2012-12-04 13:55:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103480-20121203210108.patch</filename>
            <type>text/plain</type>
            <size>27012</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2Mjg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmY5MGY5YTUwMDY1YWFj
M2M3YzBhYjVlZjU1NTNlODBlNzk2OGNhZC4uMTIzMTkxNjM0MmNlY2I0OGJhY2UyZWI2YzY4Yzhl
NzU1ZmVjMzJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTExLTI4ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1l
bnQgY2FjaGUgZXZpY3Rpb24gbG9naWMgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM0ODAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVu
dHMgdGhlc2UgZmVhdHVyZXMgaW4gdGhlIG5ldyBpbWFnZSBjYWNoZToKKyAgICAgICAgLSBMZWFz
dC1yZWNlbnRseS11c2VkIGV2aWN0aW9uIGxvZ2ljCisgICAgICAgIC0gU2V0dGluZyBjYWNoZSBs
aW1pdCAoZGVmYXVsdCBpcyA4TUIpCisgICAgICAgIC0gUmVtb3ZlIGNhY2hlIGVudHJpZXMgd2hl
biBJbWFnZUZyYW1lR2VuZXJhdG9yIGlzIHJlbW92ZWQKKworICAgICAgICBOZXcgdGVzdHMgaW4g
SW1hZ2VEZWNvZGluZ1Rlc3RUZXN0LiBBbHNvIGNvdmVyZWQgYnkgcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9kZWZlcnJlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5n
U3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
aW5nU3RvcmU6On5JbWFnZURlY29kaW5nU3RvcmUpOgorICAgICAgICBDb2RlIHRvIGFzc2VydCB0
aGF0IGV2ZXJ5dGhpbmcgaXMgY2xlYW5lZCB1cC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2RpbmdTdG9yZTo6bG9ja0NvbXBsZXRlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjp1bmxvY2tDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
aW5nU3RvcmU6Omluc2VydEFuZExvY2tDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6OnJlbW92ZUNhY2hlSW5kZXhlZEJ5R2VuZXJhdG9yKToKKyAgICAgICAgTmV3
IG1ldGhvZCB0byByZW1vdmUgYWxsIGNhY2hlIGVudHJpZXMgaW5kZXggYnkgSW1hZ2VGcmFtZUdl
bmVyYXRvci4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlOjpzZXRDYWNoZUxpbWl0SW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kaW5nU3RvcmU6Om1lbW9yeVVzYWdlSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kaW5nU3RvcmU6OmNhY2hlRW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kaW5nU3RvcmU6OnBydW5lKToKKyAgICAgICAgTmV3IGNvZGUgdG8gaW1wbGVtZW50IExS
VSBldmljdGlvbiBsb2dpYy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zZXJ0Q2FjaGVJbnRlcm5hbCk6CisgICAgICAgIE5ldyBtZXRob2QgdG8gaGVscCBuZXcgY2Fj
aGUgaW5zZXJ0aW9uLiBUaGlzIGlzIHNlcGFyYXRlbHkgYmVjYXVzZSBpdCB0b3VjaGVzIDMgY29u
dGFpbmVycy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6cmVtb3ZlRnJv
bUNhY2hlSW50ZXJuYWwpOgorICAgICAgICBOZXcgbWV0aG9kIHRvIGhlbHAgcmVtb3ZlIGEgY2Fj
aGUgZW50cnkgZnJvbSBjb250YWluZXJzLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlOjpyZW1vdmVGcm9tQ2FjaGVMaXN0SW50ZXJuYWwpOgorICAgICAgICBOZXcgaGVscGVy
IG1ldGhvZCB0byBoZWxwIHJlbW92ZSBjYWNoZSBlbnRyeSBmcm9tIGRvdWJseSBsaW5rZWQgbGlz
dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3Rv
cmUuaDoKKyAgICAgICAgKEltYWdlRGVjb2RpbmdTdG9yZSk6CisgICAgICAgIChDYWNoZUVudHJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y3Jl
YXRlQW5kVXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVF
bnRyeTo6Q2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
OkNhY2hlRW50cnk6On5DYWNoZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rp
bmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y2FjaGVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjpjYWNoZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hlRW50cnk6OnVzZUNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6aW5jcmVtZW50VXNlQ291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjpkZWNy
ZW1lbnRVc2VDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkNh
Y2hlRW50cnk6Om1lbW9yeVVzYWdlSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6OmluY3JlbWVudE1lbW9yeVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2RpbmdTdG9yZTo6ZGVjcmVtZW50TWVtb3J5VXNhZ2UpOgorICAgICAgICBOZXcgaGVs
cGVyIG1ldGhvZHMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VG
cmFtZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9y
Ojp+SW1hZ2VGcmFtZUdlbmVyYXRvcik6CisKIDIwMTItMTEtMjkgIElseWEgVGlraG9ub3Zza3kg
IDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbmRlckJsb2NrIG1pbm9yIGNsZWFu
LXVwOiByZXBsYWNlIHJhdyBwb2ludGVycyB3aXRoIE93blB0cnMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IGE1ZjE0NGZlYTQ2M2RiZTJjZWQ3NWUzOGJlYzhlMDNmZTFlMzE4ZjcuLjE4
YWViYzEyYmEwYjExYzM3YjM0ZjA0NjYwMWExYWFiZmZmOGVlNTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTItMTEtMjggIEFscGhhIExhbSAgPGhjbGFt
QGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBjYWNoZSBldmlj
dGlvbiBsb2dpYyBpbiBJbWFnZURlY29kaW5nU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzQ4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEltYWdlRGVjb2RpbmdTdG9yZVRlc3QgZm9y
IHVuaXQgdGVzdGluZyBuZXcgaW1hZ2UgY2FjaGUuCisKKyAgICAgICAgTmV3IHRlc3RzOgorCisg
ICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZVRlc3QuZXZpY3RPbmVDYWNoZQorCisgICAgICAgIFRl
c3QgZXZpY3Rpb24gb2Ygb25lIGNhY2hlIGVudHJ5IGJ5IHNldHRpbmcgYSBzbWFsbGVyIGNhY2hl
IGxpbWl0LgorCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZVRlc3QucHJ1bmVPcmRlcklzTGVh
c3RSZWNlbnRseVVzZWQKKworICAgICAgICBUZXN0IGV2aWN0aW9uIG9yZGVyIGlzIGxlYXN0IHJl
Y2VudGx5IHVzZWQuCisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdC5wcnVuZUNhdXNl
ZEJ5SW5zZXJ0aW9uCisKKyAgICAgICAgVGVzdCB0aGF0IGV2aWN0aW9uIGlzIHRyaWdnZXJlZCBh
bHNvIGJ5IGNhY2hlIGluc2VydGlvbi4KKworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmVUZXN0
LmNhY2hlSW5Vc2VOb3RFdmljdGVkCisKKyAgICAgICAgVGVzdCB0aGF0IGNhY2hlIGluIHVzZSBp
cyBub3QgZXZpY3RlZC4KKworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmVUZXN0LmRlc3Ryb3lJ
bWFnZUZyYW1lR2VuZXJhdG9yCisKKyAgICAgICAgVGVzdCB0aGF0IGRlbGV0aW5nIGEgSW1hZ2VG
cmFtZUdlbmVyYXRvciBjYXVzZXMgYXNzb2NpYXRlZCBjYWNoZQorICAgICAgICBlbnRyaWVzIHRv
IGJlIHJlbW92ZWQuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9J
bWFnZURlY29kaW5nU3RvcmVUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKEltYWdlRGVjb2RpbmdTdG9yZVRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlVGVzdDo6U2V0VXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlVGVzdDo6VGVhckRvd24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0
b3JlVGVzdDo6Y3JlYXRlQ29tcGxldGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmVUZXN0OjppbnNlcnRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmVUZXN0Ojpsb2NrQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlVGVzdDo6dW5sb2NrQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlVGVzdDo6ZXZpY3RPbmVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmVUZXN0Ojppc0NhY2hlQWxpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9G
KToKKwogMjAxMi0xMS0zMCAgU3RlcGhlbiBXaGl0ZSAgPHNlbm9yYmxhbmNvQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbQ2hyb21pdW1dIFN1cHByZXNzIHRoZSBuZXcgc2VwYXJhYmxlIG1hc2sg
Ymx1cnMgaW4gc2tpYSB1bnRpbCB0aGUgdGVzdHMgY2FuIGJlIHJlYmFzZWxpbmVkLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNv
ZGluZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKaW5kZXggNDg5ZmRkYzQyODAxZTQyMTc0ZjNiNDk3NzQ0
ZDU5MTlkYWQzZmU1Ny4uNmI2MTc1MzAyN2RjYmU0YTI5OTM4NjJiNjBkYTRjYTc5ZTNkMGY3NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VEZWNvZGluZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwCkBAIC0zNCw3ICszNCw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIHsKIAotSW1hZ2VEZWNvZGluZ1N0b3JlKiBzX2lu
c3RhbmNlID0gMDsKKy8vIDMyTUIgbWVtb3J5IGxpbWl0IGZvciBjYWNoZS4KK3N0YXRpYyBjb25z
dCBzaXplX3QgZGVmYXVsdENhY2hlTGltaXRJbkJ5dGVzID0gMzI3NjggKiAxMDI0Oworc3RhdGlj
IEltYWdlRGVjb2RpbmdTdG9yZSogc19pbnN0YW5jZSA9IDA7CiAKIHN0YXRpYyB2b2lkIHNldElu
c3RhbmNlKEltYWdlRGVjb2RpbmdTdG9yZSogaW1hZ2VEZWNvZGluZ1N0b3JlKQogewpAQCAtNDUs
MTEgKzQ3LDE5IEBAIHN0YXRpYyB2b2lkIHNldEluc3RhbmNlKEltYWdlRGVjb2RpbmdTdG9yZSog
aW1hZ2VEZWNvZGluZ1N0b3JlKQogfSAvLyBuYW1lc3BhY2UKIAogSW1hZ2VEZWNvZGluZ1N0b3Jl
OjpJbWFnZURlY29kaW5nU3RvcmUoKQorICAgIDogbV9jYWNoZUxpbWl0SW5CeXRlcyhkZWZhdWx0
Q2FjaGVMaW1pdEluQnl0ZXMpCisgICAgLCBtX21lbW9yeVVzYWdlSW5CeXRlcygwKQogewogfQog
CiBJbWFnZURlY29kaW5nU3RvcmU6On5JbWFnZURlY29kaW5nU3RvcmUoKQogeworI2lmbmRlZiBO
REVCVUcKKyAgICBzZXRDYWNoZUxpbWl0SW5CeXRlcygwKTsKKyAgICBBU1NFUlQoIW1fY2FjaGVN
YXAuc2l6ZSgpKTsKKyAgICBBU1NFUlQoIW1fb3JkZXJlZENhY2hlTGlzdC5zaXplKCkpOworICAg
IEFTU0VSVCghbV9jYWNoZWRTaXplTWFwLnNpemUoKSk7CisjZW5kaWYKIH0KIAogSW1hZ2VEZWNv
ZGluZ1N0b3JlKiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCkKQEAgLTc1LDE1ICs4NSwx
NSBAQCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tD
b21wbGV0ZUNhY2hlKGNvbnN0IEltYWdlRnJhbQogICAgICAgICBDYWNoZU1hcDo6aXRlcmF0b3Ig
aXRlciA9IG1fY2FjaGVNYXAuZmluZChzdGQ6Om1ha2VfcGFpcihnZW5lcmF0b3IsIHNjYWxlZFNp
emUpKTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9jYWNoZU1hcC5lbmQoKSkKICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICBjYWNoZUVudHJ5ID0gaXRlci0+dmFsdWU7Ci0gICAgICAgIGlm
ICghY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UtPmlzQ29tcGxldGUoKSkKKyAgICAgICAgY2FjaGVF
bnRyeSA9IGl0ZXItPnZhbHVlLmdldCgpOworICAgICAgICBpZiAoIWNhY2hlRW50cnktPmNhY2hl
ZEltYWdlKCktPmlzQ29tcGxldGUoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAg
IC8vIEluY3JlbWVudCB1c2UgY291bnQgc3VjaCB0aGF0IGl0IGRvZXNuJ3QgZ2V0IGV2aWN0ZWQu
Ci0gICAgICAgICsrY2FjaGVFbnRyeS0+dXNlQ291bnQ7CisgICAgICAgIGNhY2hlRW50cnktPmlu
Y3JlbWVudFVzZUNvdW50KCk7CiAgICAgfQotICAgIGNhY2hlRW50cnktPmNhY2hlZEltYWdlLT5i
aXRtYXAoKS5sb2NrUGl4ZWxzKCk7Ci0gICAgcmV0dXJuIGNhY2hlRW50cnktPmNhY2hlZEltYWdl
LmdldCgpOworICAgIGNhY2hlRW50cnktPmNhY2hlZEltYWdlKCktPmJpdG1hcCgpLmxvY2tQaXhl
bHMoKTsKKyAgICByZXR1cm4gY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UoKTsKIH0KIAogY29uc3Qg
U2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrSW5jb21wbGV0ZUNh
Y2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgY29uc3QgU2tJU2l6ZSYg
c2NhbGVkU2l6ZSkKQEAgLTEwNSw5ICsxMTUsMTIgQEAgdm9pZCBJbWFnZURlY29kaW5nU3RvcmU6
OnVubG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgY29uc3QK
ICAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY2FjaGVNYXAuZmluZChzdGQ6Om1ha2Vf
cGFpcihnZW5lcmF0b3IsIGNhY2hlZEltYWdlLT5zY2FsZWRTaXplKCkpKTsKICAgICBBU1NFUlQo
aXRlciAhPSBtX2NhY2hlTWFwLmVuZCgpKTsKIAotICAgIENhY2hlRW50cnkqIGNhY2hlRW50cnkg
PSBpdGVyLT52YWx1ZTsKLSAgICAtLWNhY2hlRW50cnktPnVzZUNvdW50OwotICAgIEFTU0VSVChj
YWNoZUVudHJ5LT51c2VDb3VudCA+PSAwKTsKKyAgICBDYWNoZUVudHJ5KiBjYWNoZUVudHJ5ID0g
aXRlci0+dmFsdWUuZ2V0KCk7CisgICAgY2FjaGVFbnRyeS0+ZGVjcmVtZW50VXNlQ291bnQoKTsK
KworICAgIC8vIFB1dCB0aGUgZW50cnkgdG8gdGhlIGVuZCBvZiBsaXN0LgorICAgIG1fb3JkZXJl
ZENhY2hlTGlzdC5yZW1vdmUoY2FjaGVFbnRyeSk7CisgICAgbV9vcmRlcmVkQ2FjaGVMaXN0LmFw
cGVuZChjYWNoZUVudHJ5KTsKIH0KIAogY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnNlcnRBbmRMb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRv
ciogZ2VuZXJhdG9yLCBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlKQpAQCAt
MTI3LDIzICsxNDAsMTI1IEBAIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zZXJ0QW5kTG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhCiAgICAgfQogCiAgICAg
U2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UgPSBpbWFnZS5nZXQoKTsKLSAgICBPd25Q
dHI8Q2FjaGVFbnRyeT4gbmV3Q2FjaGVFbnRyeSA9IENhY2hlRW50cnk6OmNyZWF0ZUFuZFVzZShp
bWFnZSk7CisgICAgT3duUHRyPENhY2hlRW50cnk+IG5ld0NhY2hlRW50cnkgPSBDYWNoZUVudHJ5
OjpjcmVhdGVBbmRVc2UoZ2VuZXJhdG9yLCBpbWFnZSk7CiAKLSAgICBDYWNoZUlkZW50aWZpZXIg
a2V5ID0gc3RkOjptYWtlX3BhaXIoZ2VuZXJhdG9yLCBjYWNoZWRJbWFnZS0+c2NhbGVkU2l6ZSgp
KTsKICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwotICAgIEFTU0VSVCghbV9jYWNoZU1h
cC5jb250YWlucyhrZXkpKTsKLQotICAgIC8vIG1fY2FjaGVNYXAgaXMgdXNlZCBmb3IgaW5kZXhp
bmcgYW5kIHF1aWNrIGxvb2t1cCBvZiBhIGNhY2hlZCBpbWFnZS4KLSAgICAvLyBtX2NhY2hlRW50
cmllcyBpcyB1c2VkIHRvIHN1cHBvcnQgTFJVIG9wZXJhdGlvbnMgdG8gcmVvcmRlciBjYWNoZQot
ICAgIC8vIGVudHJpZXMgcXVpY2tseS4gSXQgYWxzbyBvd25zIGNhY2hlZCBpbWFnZXMuCi0gICAg
bV9jYWNoZU1hcC5hZGQoa2V5LCBuZXdDYWNoZUVudHJ5LmdldCgpKTsKLSAgICBtX2NhY2hlRW50
cmllcy5hcHBlbmQobmV3Q2FjaGVFbnRyeS5yZWxlYXNlKCkpOworICAgIEFTU0VSVCghbV9jYWNo
ZU1hcC5jb250YWlucyhuZXdDYWNoZUVudHJ5LT5jYWNoZUtleSgpKSk7CisgICAgaW5zZXJ0Q2Fj
aGVJbnRlcm5hbChuZXdDYWNoZUVudHJ5LnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIGNhY2hlZElt
YWdlOwogfQogCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6cmVtb3ZlQ2FjaGVJbmRleGVkQnlH
ZW5lcmF0b3IoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yKQoreworICAgIFZl
Y3RvcjxPd25QdHI8Q2FjaGVFbnRyeT4gPiBjYWNoZUVudHJpZXNUb0RlbGV0ZTsKKyAgICB7Cisg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgICAgIENhY2hlZFNpemVNYXA6
Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhY2hlZFNpemVNYXAuZmluZChnZW5lcmF0b3IpOworICAgICAg
ICBpZiAoaXRlciA9PSBtX2NhY2hlZFNpemVNYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgLy8gR2V0IGFsbCBjYWNoZWQgc2l6ZXMgaW5kZXhlZCBieSBnZW5lcmF0b3Iu
CisgICAgICAgIFZlY3RvcjxTa0lTaXplPiBjYWNoZWRTaXplTGlzdDsKKyAgICAgICAgY29weVRv
VmVjdG9yKGl0ZXItPnZhbHVlLCBjYWNoZWRTaXplTGlzdCk7CisKKyAgICAgICAgLy8gRm9yIGVh
Y2ggY2FjaGVkIHNpemUgZmluZCB0aGUgY29ycmVzcG9uZGluZyBDYWNoZUVudHJ5IGFuZCByZW1v
dmUgaXQgZnJvbQorICAgICAgICAvLyBtX2NhY2hlTWFwLgorICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNhY2hlZFNpemVMaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBDYWNo
ZUlkZW50aWZpZXIga2V5ID0gc3RkOjptYWtlX3BhaXIoZ2VuZXJhdG9yLCBjYWNoZWRTaXplTGlz
dFtpXSk7CisgICAgICAgICAgICBBU1NFUlQobV9jYWNoZU1hcC5jb250YWlucyhrZXkpKTsKKwor
ICAgICAgICAgICAgY29uc3QgQ2FjaGVFbnRyeSogY2FjaGVFbnRyeSA9IG1fY2FjaGVNYXAuZ2V0
KGtleSk7CisgICAgICAgICAgICBBU1NFUlQoIWNhY2hlRW50cnktPnVzZUNvdW50KCkpOworICAg
ICAgICAgICAgcmVtb3ZlRnJvbUNhY2hlSW50ZXJuYWwoY2FjaGVFbnRyeSwgJmNhY2hlRW50cmll
c1RvRGVsZXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbW92ZSBmcm9tIGNhY2hlIGxp
c3QgYXMgd2VsbC4KKyAgICAgICAgcmVtb3ZlRnJvbUNhY2hlTGlzdEludGVybmFsKGNhY2hlRW50
cmllc1RvRGVsZXRlKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzZXRD
YWNoZUxpbWl0SW5CeXRlcyhzaXplX3QgY2FjaGVMaW1pdCkKK3sKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgICAgIG1fY2FjaGVMaW1pdEluQnl0ZXMgPSBj
YWNoZUxpbWl0OworICAgIH0KKyAgICBwcnVuZSgpOworfQorCitzaXplX3QgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjptZW1vcnlVc2FnZUluQnl0ZXMoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9t
dXRleCk7CisgICAgcmV0dXJuIG1fbWVtb3J5VXNhZ2VJbkJ5dGVzOworfQorCit1bnNpZ25lZCBJ
bWFnZURlY29kaW5nU3RvcmU6OmNhY2hlRW50cmllcygpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9j
ayhtX211dGV4KTsKKyAgICByZXR1cm4gbV9jYWNoZU1hcC5zaXplKCk7Cit9CisKIHZvaWQgSW1h
Z2VEZWNvZGluZ1N0b3JlOjpwcnVuZSgpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50LgorICAg
IFZlY3RvcjxPd25QdHI8Q2FjaGVFbnRyeT4gPiBjYWNoZUVudHJpZXNUb0RlbGV0ZTsKKyAgICB7
CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisKKyAgICAgICAgLy8gSGVhZCBv
ZiB0aGUgbGlzdCBpcyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBlbnRyeS4KKyAgICAgICAgY29u
c3QgQ2FjaGVFbnRyeSogY2FjaGVFbnRyeSA9IG1fb3JkZXJlZENhY2hlTGlzdC5oZWFkKCk7CisK
KyAgICAgICAgLy8gV2FsayB0aGUgbGlzdCBvZiBjYWNoZSBlbnRyaWVzIHN0YXJ0aW5nIGZyb20g
dGhlIGxlYXN0IHJlY2VudGx5IHVzZWQKKyAgICAgICAgLy8gYW5kIHRoZW4ga2VlcCB0aGVtIGZv
ciBkZWxldGlvbiBsYXRlci4KKyAgICAgICAgd2hpbGUgKGNhY2hlRW50cnkgJiYgbV9tZW1vcnlV
c2FnZUluQnl0ZXMgPiBtX2NhY2hlTGltaXRJbkJ5dGVzKSB7CisgICAgICAgICAgICAvLyBDYWNo
ZSBpcyBub3QgdXNlZDsgUmVtb3ZlIGl0LgorICAgICAgICAgICAgaWYgKCFjYWNoZUVudHJ5LT51
c2VDb3VudCgpKQorICAgICAgICAgICAgICAgIHJlbW92ZUZyb21DYWNoZUludGVybmFsKGNhY2hl
RW50cnksICZjYWNoZUVudHJpZXNUb0RlbGV0ZSk7CisgICAgICAgICAgICBjYWNoZUVudHJ5ID0g
Y2FjaGVFbnRyeS0+bmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVtb3ZlIGZyb20g
Y2FjaGUgbGlzdCBhcyB3ZWxsLgorICAgICAgICByZW1vdmVGcm9tQ2FjaGVMaXN0SW50ZXJuYWwo
Y2FjaGVFbnRyaWVzVG9EZWxldGUpOworICAgIH0KK30KKwordm9pZCBJbWFnZURlY29kaW5nU3Rv
cmU6Omluc2VydENhY2hlSW50ZXJuYWwoUGFzc093blB0cjxDYWNoZUVudHJ5PiBjYWNoZUVudHJ5
KQoreworICAgIGluY3JlbWVudE1lbW9yeVVzYWdlKGNhY2hlRW50cnktPm1lbW9yeVVzYWdlSW5C
eXRlcygpKTsKKworICAgIC8vIG1fb3JkZXJlZENhY2hlTGlzdCBpcyB1c2VkIHRvIHN1cHBvcnQg
TFJVIG9wZXJhdGlvbnMgdG8gcmVvcmRlciBjYWNoZQorICAgIC8vIGVudHJpZXMgcXVpY2tseS4K
KyAgICBtX29yZGVyZWRDYWNoZUxpc3QuYXBwZW5kKGNhY2hlRW50cnkuZ2V0KCkpOworCisgICAg
Q2FjaGVJZGVudGlmaWVyIGtleSA9IGNhY2hlRW50cnktPmNhY2hlS2V5KCk7CisgICAgLy8gbV9j
YWNoZU1hcCBpcyB1c2VkIGZvciBpbmRleGluZyBhbmQgcXVpY2sgbG9va3VwIG9mIGEgY2FjaGVk
IGltYWdlLiBJdCBvd25zCisgICAgLy8gYWxsIGNhY2hlIGVudHJpZXMuCisgICAgbV9jYWNoZU1h
cC5hZGQoa2V5LCBjYWNoZUVudHJ5KTsKKworICAgIC8vIG1fY2FjaGVkU2l6ZU1hcCBrZWVwcyBh
bGwgc2NhbGVkIHNpemVzIGFzc29jaWF0ZWQgd2l0aCBhbiBJbWFnZUZyYW1lR2VuZXJhdG9yLgor
ICAgIENhY2hlZFNpemVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2NhY2hlZFNpemVNYXAuYWRk
KGtleS5maXJzdCwgU2l6ZVNldCgpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFkZChr
ZXkuc2Vjb25kKTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnJlbW92ZUZyb21DYWNo
ZUludGVybmFsKGNvbnN0IENhY2hlRW50cnkqIGNhY2hlRW50cnksIFZlY3RvcjxPd25QdHI8Q2Fj
aGVFbnRyeT4gPiogZGVsZXRpb25MaXN0KQoreworICAgIGRlY3JlbWVudE1lbW9yeVVzYWdlKGNh
Y2hlRW50cnktPm1lbW9yeVVzYWdlSW5CeXRlcygpKTsKKworICAgIC8vIFJlbW92ZSBmcm9tIG1f
Y2FjaGVNYXAuCisgICAgQ2FjaGVJZGVudGlmaWVyIGtleSA9IGNhY2hlRW50cnktPmNhY2hlS2V5
KCk7CisgICAgZGVsZXRpb25MaXN0LT5hcHBlbmQobV9jYWNoZU1hcC50YWtlKGtleSkpOworCisg
ICAgLy8gUmVtb3ZlIGZyb20gbV9jYWNoZWRTaXplTWFwLgorICAgIENhY2hlZFNpemVNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSBtX2NhY2hlZFNpemVNYXAuZmluZChrZXkuZmlyc3QpOworICAgIEFTU0VS
VChpdGVyICE9IG1fY2FjaGVkU2l6ZU1hcC5lbmQoKSk7CisgICAgaXRlci0+dmFsdWUucmVtb3Zl
KGtleS5zZWNvbmQpOworICAgIGlmICghaXRlci0+dmFsdWUuc2l6ZSgpKQorICAgICAgICBtX2Nh
Y2hlZFNpemVNYXAucmVtb3ZlKGl0ZXIpOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6
cmVtb3ZlRnJvbUNhY2hlTGlzdEludGVybmFsKGNvbnN0IFZlY3RvcjxPd25QdHI8Q2FjaGVFbnRy
eT4gPiYgZGVsZXRpb25MaXN0KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVsZXRp
b25MaXN0LnNpemUoKTsgKytpKQorICAgICAgICBtX29yZGVyZWRDYWNoZUxpc3QucmVtb3ZlKGRl
bGV0aW9uTGlzdFtpXS5nZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVj
b2RpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VEZWNvZGluZ1N0b3JlLmgKaW5kZXggMGFlYTJlOTY5OWU3ODcwNzExNGFlNmY2NjRjNmNj
OTExNjc3M2E0ZS4uMDVlYTExYjg4ZTI2OTUxODhjZmRmODg0NTA0NGJiMDc0ZDlhMzFkZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VE
ZWNvZGluZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJT
a1NpemUuaCIKICNpbmNsdWRlICJTa1NpemVIYXNoLmgiCiAKKyNpbmNsdWRlIDx3dGYvRG91Ymx5
TGlua2VkTGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZ1ByaW1pdGl2ZXMuaD4KQEAgLTU2LDQyICs1OCw5MSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1
bmxvY2tDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgY29uc3QgU2NhbGVkSW1hZ2VG
cmFnbWVudCopOwogICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGluc2VydEFuZExvY2tD
YWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgUGFzc093blB0cjxTY2FsZWRJbWFnZUZy
YWdtZW50Pik7CiAKKyAgICAvLyBSZW1vdmUgYWxsIGNhY2hlIGVudHJpZXMgaW5kZXhlZCBieSBJ
bWFnZUZyYW1lR2VuZXJhdG9yLgorICAgIHZvaWQgcmVtb3ZlQ2FjaGVJbmRleGVkQnlHZW5lcmF0
b3IoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciopOworCisgICAgdm9pZCBzZXRDYWNoZUxpbWl0
SW5CeXRlcyhzaXplX3QpOworICAgIHNpemVfdCBtZW1vcnlVc2FnZUluQnl0ZXMoKTsKKyAgICB1
bnNpZ25lZCBjYWNoZUVudHJpZXMoKTsKKwogcHJpdmF0ZToKLSAgICBzdHJ1Y3QgQ2FjaGVFbnRy
eSB7Ci0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPENhY2hlRW50cnk+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDYWNoZUVudHJ5KCkpOyB9Ci0gICAgICAgIHN0YXRpYyBQYXNzT3du
UHRyPENhY2hlRW50cnk+IGNyZWF0ZUFuZFVzZShQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21l
bnQ+IGltYWdlKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ2FjaGVFbnRyeShpbWFnZSwgMSkpOyB9
CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIFNrSVNp
emU+IENhY2hlSWRlbnRpZmllcjsKIAotICAgICAgICBDYWNoZUVudHJ5KCkKLSAgICAgICAgICAg
IDogdXNlQ291bnQoMCkKKyAgICBjbGFzcyBDYWNoZUVudHJ5IDogcHVibGljIERvdWJseUxpbmtl
ZExpc3ROb2RlPENhY2hlRW50cnk+IHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIERvdWJseUxpbmtl
ZExpc3ROb2RlPENhY2hlRW50cnk+OworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NP
d25QdHI8Q2FjaGVFbnRyeT4gY3JlYXRlQW5kVXNlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3Iq
IGdlbmVyYXRvciwgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBpbWFnZSkKICAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYWNoZUVudHJ5KGdlbmVyYXRv
ciwgaW1hZ2UsIDEpKTsKICAgICAgICAgfQogCi0gICAgICAgIENhY2hlRW50cnkoUGFzc093blB0
cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBpbWFnZSwgaW50IGNvdW50KQotICAgICAgICAgICAgOiBj
YWNoZWRJbWFnZShpbWFnZSkKLSAgICAgICAgICAgICwgdXNlQ291bnQoY291bnQpCisgICAgICAg
IENhY2hlRW50cnkoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBQYXNzT3du
UHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlLCBpbnQgY291bnQpCisgICAgICAgICAgICA6
IG1fcHJldigwKQorICAgICAgICAgICAgLCBtX25leHQoMCkKKyAgICAgICAgICAgICwgbV9nZW5l
cmF0b3IoZ2VuZXJhdG9yKQorICAgICAgICAgICAgLCBtX2NhY2hlZEltYWdlKGltYWdlKQorICAg
ICAgICAgICAgLCBtX3VzZUNvdW50KGNvdW50KQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAg
ICAgICB+Q2FjaGVFbnRyeSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghdXNlQ291
bnQpOworICAgICAgICAgICAgQVNTRVJUKCFtX3VzZUNvdW50KTsKICAgICAgICAgfQogCi0gICAg
ICAgIE93blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBjYWNoZWRJbWFnZTsKLSAgICAgICAgaW50
IHVzZUNvdW50OworICAgICAgICBDYWNoZUlkZW50aWZpZXIgY2FjaGVLZXkoKSBjb25zdCB7IHJl
dHVybiBzdGQ6Om1ha2VfcGFpcihtX2dlbmVyYXRvciwgbV9jYWNoZWRJbWFnZS0+c2NhbGVkU2l6
ZSgpKTsgfQorICAgICAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UuZ2V0KCk7IH0KKyAgICAgICAgaW50IHVzZUNv
dW50KCkgY29uc3QgeyByZXR1cm4gbV91c2VDb3VudDsgfQorICAgICAgICB2b2lkIGluY3JlbWVu
dFVzZUNvdW50KCkgeyArK21fdXNlQ291bnQ7IH0KKyAgICAgICAgdm9pZCBkZWNyZW1lbnRVc2VD
b3VudCgpIHsgLS1tX3VzZUNvdW50OyBBU1NFUlQobV91c2VDb3VudCA+PSAwKTsgfQorCisgICAg
ICAgIC8vIEZJWE1FOiBnZXRTYWZlU2l6ZSgpIHJldHVybnMgc2l6ZSBpbiBieXRlcyB0cnVuc2Nh
dGVkIHRvIGEgMzItYml0cyBpbnRlZ2VyLgorICAgICAgICAvLyAgICAgICAgRmluZCBhIHdheSB0
byBnZXQgdGhlIHNpemUgaW4gNjQtYml0cy4KKyAgICAgICAgc2l6ZV90IG1lbW9yeVVzYWdlSW5C
eXRlcygpIGNvbnN0IHsgcmV0dXJuIGNhY2hlZEltYWdlKCktPmJpdG1hcCgpLmdldFNhZmVTaXpl
KCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIENhY2hlRW50cnkqIG1fcHJldjsKKyAgICAg
ICAgQ2FjaGVFbnRyeSogbV9uZXh0OworICAgICAgICBjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9y
KiBtX2dlbmVyYXRvcjsKKyAgICAgICAgT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IG1fY2Fj
aGVkSW1hZ2U7CisgICAgICAgIGludCBtX3VzZUNvdW50OwogICAgIH07CiAKICAgICBJbWFnZURl
Y29kaW5nU3RvcmUoKTsKLSAgICB2b2lkIHBydW5lKCk7CiAKLSAgICBWZWN0b3I8T3duUHRyPENh
Y2hlRW50cnk+ID4gbV9jYWNoZUVudHJpZXM7CisgICAgdm9pZCBwcnVuZSgpOwogCi0gICAgdHlw
ZWRlZiBzdGQ6OnBhaXI8Y29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIFNrSVNpemU+IENhY2hl
SWRlbnRpZmllcjsKLSAgICB0eXBlZGVmIEhhc2hNYXA8Q2FjaGVJZGVudGlmaWVyLCBDYWNoZUVu
dHJ5Kj4gQ2FjaGVNYXA7CisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHdoaWxlIG1f
bXV0ZXggaXMgbG9ja2VkLgorICAgIHZvaWQgaW5zZXJ0Q2FjaGVJbnRlcm5hbChQYXNzT3duUHRy
PENhY2hlRW50cnk+KTsKKyAgICB2b2lkIHJlbW92ZUZyb21DYWNoZUludGVybmFsKGNvbnN0IENh
Y2hlRW50cnkqLCBWZWN0b3I8T3duUHRyPENhY2hlRW50cnk+ID4qIGRlbGV0aW9uTGlzdCk7Cisg
ICAgdm9pZCByZW1vdmVGcm9tQ2FjaGVMaXN0SW50ZXJuYWwoY29uc3QgVmVjdG9yPE93blB0cjxD
YWNoZUVudHJ5PiA+JiBkZWxldGlvbkxpc3QpOworICAgIHZvaWQgaW5jcmVtZW50TWVtb3J5VXNh
Z2Uoc2l6ZV90IHNpemUpIHsgbV9tZW1vcnlVc2FnZUluQnl0ZXMgKz0gc2l6ZTsgfQorICAgIHZv
aWQgZGVjcmVtZW50TWVtb3J5VXNhZ2Uoc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBBU1NF
UlQobV9tZW1vcnlVc2FnZUluQnl0ZXMgPj0gc2l6ZSk7CisgICAgICAgIG1fbWVtb3J5VXNhZ2VJ
bkJ5dGVzIC09IHNpemU7CisgICAgfQorCisgICAgLy8gSGVhZCBvZiB0aGlzIGxpc3QgaXMgdGhl
IGxlYXN0IHJlY2VudGx5IHVzZWQgY2FjaGUgZW50cnkuCisgICAgLy8gVGFpbCBvZiB0aGlzIGxp
c3QgaXMgdGhlIG1vc3QgcmVjZW50bHkgdXNlZCBjYWNoZSBlbnRyeS4KKyAgICBEb3VibHlMaW5r
ZWRMaXN0PENhY2hlRW50cnk+IG1fb3JkZXJlZENhY2hlTGlzdDsKKworICAgIHR5cGVkZWYgSGFz
aE1hcDxDYWNoZUlkZW50aWZpZXIsIE93blB0cjxDYWNoZUVudHJ5PiA+IENhY2hlTWFwOwogICAg
IENhY2hlTWFwIG1fY2FjaGVNYXA7CiAKLSAgICAvLyBQcm90ZWN0IGNvbmN1cnJlbnQgYWNjZXNz
IHRvIGFsbCBpbnN0YW5jZXMgb2YgQ2FjaGVFbnRyeSBzdG9yZWQgaW4gbV9jYWNoZUVudHJpZXMg
YW5kCi0gICAgLy8gbV9jYWNoZU1hcCBhcyB3ZWxsIGFzIHRoZSBjb250YWluZXJzLgorICAgIHR5
cGVkZWYgSGFzaFNldDxTa0lTaXplPiBTaXplU2V0OworICAgIHR5cGVkZWYgSGFzaE1hcDxjb25z
dCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgU2l6ZVNldD4gQ2FjaGVkU2l6ZU1hcDsKKyAgICBDYWNo
ZWRTaXplTWFwIG1fY2FjaGVkU2l6ZU1hcDsKKworICAgIHNpemVfdCBtX2NhY2hlTGltaXRJbkJ5
dGVzOworICAgIHNpemVfdCBtX21lbW9yeVVzYWdlSW5CeXRlczsKKworICAgIC8vIFByb3RlY3Qg
Y29uY3VycmVudCBhY2Nlc3MgdG8gdGhlc2UgbWVtYmVyczoKKyAgICAvLyAgIG1fb3JkZXJlZENh
Y2hlTGlzdAorICAgIC8vICAgbV9jYWNoZU1hcCBhbmQgYWxsIENhY2hlRW50cnlzIHN0b3JlZCBp
biBpdAorICAgIC8vICAgbV9jYWNoZWRTaXplTWFwCisgICAgLy8gICBtX2NhY2hlTGltaXRJbkJ5
dGVzCisgICAgLy8gICBtX21lbW9yeVVzYWdlSW5CeXRlcwogICAgIE11dGV4IG1fbXV0ZXg7CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCmluZGV4IDIyMGE1N2Q0NWRhMTIz
N2VmZmI1ODhhYTRlMjczYzVhN2EzMjM2NTQuLmVmODUwNTVjNGRjMjNhNGQ2MDBmMzkwOGM5ZjA1
MzkxZmE5YzQ5YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCkBAIC01NCw4
ICs1NCwxMSBAQCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKGNvbnN0
IFNrSVNpemUmIGZ1bGxTaXplLCBQYXNzUmVmUHRyPFNoYQogCiBJbWFnZUZyYW1lR2VuZXJhdG9y
Ojp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCiB7Ci0gICAgLy8gVE9ETzogQ2FsbCBJbWFnZURlY29k
aW5nU3RvcmUgdG8gcmVtb3ZlIGFsbCBjYWNoZSBlbnRyaWVzIGluZGV4ZWQKLSAgICAvLyBieSB0
aGlzIG9iamVjdC4KKyAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpcyBub3QgcmVhbGx5IHRocmVh
ZC1zYWZlLiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIHRvOgorICAgIC8vIEltYWdlRGVjb2RpbmdT
dG9yZTo6cmVtb3ZlQ2FjaGVGcm9tSW5zdGFuY2UodGhpcyk7CisgICAgLy8gV2hpY2ggdXNlcyBh
IGxvY2sgaW50ZXJuYWxseS4KKyAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgp
KQorICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnJlbW92ZUNhY2hlSW5k
ZXhlZEJ5R2VuZXJhdG9yKHRoaXMpOwogfQogCiB2b2lkIEltYWdlRnJhbWVHZW5lcmF0b3I6OnNl
dERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVk
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggM2FkM2UyMGRhZTM0MjhiMGMyODk3
ODgzZDY5MzI2MGY4NDBlMTEwNy4uNGYzYjY3ZDk2MjA1MzliODA1ZmFjZDU4ODIwOTc4YmUwY2Y2
NWU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC04MSw2ICs4MSw3IEBACiAg
ICAgICAgICAgICAndGVzdHMvSURCS2V5UGF0aFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQlJlcXVl
c3RUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0ltYWdlRGVjb2RpbmdTdG9yZVRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9JbWFnZURlY29kaW5nU3RvcmVUZXN0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
MzhhZTcyMGI1NzViZjk5NjBiNTg3MmJlMWUwOTc0ZmEzZDdkOWIzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZURlY29kaW5nU3RvcmVUZXN0LmNw
cApAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRv
ci5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFzcyBJbWFn
ZURlY29kaW5nU3RvcmVUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5pdGlhbGl6ZU9uY2UoKTsKKyAgICAgICAgbV9kYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVh
dGUoKTsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUo
U2tJU2l6ZTo6TWFrZSgxMDAsIDEwMCksIG1fZGF0YSwgdHJ1ZSk7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6
c2h1dGRvd24oKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBQYXNzT3duUHRyPFNjYWxlZElt
YWdlRnJhZ21lbnQ+IGNyZWF0ZUNvbXBsZXRlSW1hZ2UoY29uc3QgU2tJU2l6ZSYgc2l6ZSkKKyAg
ICB7CisgICAgICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICAgICAgYml0bWFwLnNldENvbmZpZyhT
a0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7
CisgICAgICAgIGJpdG1hcC5hbGxvY1BpeGVscygpOworICAgICAgICByZXR1cm4gU2NhbGVkSW1h
Z2VGcmFnbWVudDo6Y3JlYXRlKHNpemUsIGJpdG1hcCwgdHJ1ZSk7CisgICAgfQorCisgICAgdm9p
ZCBpbnNlcnRDYWNoZShjb25zdCBTa0lTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgY29uc3Qg
U2NhbGVkSW1hZ2VGcmFnbWVudCogaW1hZ2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
KCktPmluc2VydEFuZExvY2tDYWNoZSgKKyAgICAgICAgICAgIG1fZ2VuZXJhdG9yLmdldCgpLCBj
cmVhdGVDb21wbGV0ZUltYWdlKHNpemUpKTsKKyAgICAgICAgdW5sb2NrQ2FjaGUoaW1hZ2UpOwor
ICAgIH0KKworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGxvY2tDYWNoZShjb25zdCBT
a0lTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zdGFuY2UoKS0+bG9ja0NvbXBsZXRlQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHNpemUpOwor
ICAgIH0KKworICAgIHZvaWQgdW5sb2NrQ2FjaGUoY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCog
Y2FjaGVkSW1hZ2UpCisgICAgeworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
KCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCBjYWNoZWRJbWFnZSk7CisgICAgfQor
CisgICAgdm9pZCBldmljdE9uZUNhY2hlKCkKKyAgICB7CisgICAgICAgIHNpemVfdCBtZW1vcnlV
c2FnZUluQnl0ZXMgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPm1lbW9yeVVzYWdl
SW5CeXRlcygpOworICAgICAgICBpZiAobWVtb3J5VXNhZ2VJbkJ5dGVzKQorICAgICAgICAgICAg
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5zZXRDYWNoZUxpbWl0SW5CeXRlcyhtZW1v
cnlVc2FnZUluQnl0ZXMgLSAxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5zZXRDYWNoZUxpbWl0SW5CeXRlcygwKTsKKyAgICB9CisK
KyAgICBib29sIGlzQ2FjaGVBbGl2ZShjb25zdCBTa0lTaXplJiBzaXplKQorICAgIHsKKyAgICAg
ICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UgPSBsb2NrQ2FjaGUoc2l6
ZSk7CisgICAgICAgIGlmICghY2FjaGVkSW1hZ2UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9n
ZW5lcmF0b3IuZ2V0KCksIGNhY2hlZEltYWdlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOworICAgIFJlZlB0cjxJbWFnZUZy
YW1lR2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKK307CisKK1RFU1RfRihJbWFnZURlY29kaW5nU3Rv
cmVUZXN0LCBldmljdE9uZUNhY2hlKQoreworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2Uo
MSwgMSkpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMiwgMikpOworICAgIGluc2Vy
dENhY2hlKFNrSVNpemU6Ok1ha2UoMywgMykpOworICAgIEVYUEVDVF9FUSgzdSwgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CisKKyAgICBldmljdE9uZUNh
Y2hlKCk7CisgICAgRVhQRUNUX0VRKDJ1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCkt
PmNhY2hlRW50cmllcygpKTsKKworICAgIGV2aWN0T25lQ2FjaGUoKTsKKyAgICBFWFBFQ1RfRVEo
MXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworfQor
CitURVNUX0YoSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdCwgcHJ1bmVPcmRlcklzTGVhc3RSZWNlbnRs
eVVzZWQpCit7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSgxLCAxKSk7CisgICAgaW5z
ZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSgyLCAyKSk7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6
TWFrZSgzLCAzKSk7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSg0LCA0KSk7CisgICAg
aW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSg1LCA1KSk7CisgICAgRVhQRUNUX0VRKDV1LCBJbWFn
ZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKKworICAgIC8vIFVz
ZSBjYWNoZSBpbiB0aGUgb3JkZXIgMywgMiwgNCwgMSwgNS4KKyAgICBFWFBFQ1RfVFJVRShpc0Nh
Y2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSgzLCAzKSkpOworICAgIEVYUEVDVF9UUlVFKGlzQ2FjaGVB
bGl2ZShTa0lTaXplOjpNYWtlKDIsIDIpKSk7CisgICAgRVhQRUNUX1RSVUUoaXNDYWNoZUFsaXZl
KFNrSVNpemU6Ok1ha2UoNCwgNCkpKTsKKyAgICBFWFBFQ1RfVFJVRShpc0NhY2hlQWxpdmUoU2tJ
U2l6ZTo6TWFrZSgxLCAxKSkpOworICAgIEVYUEVDVF9UUlVFKGlzQ2FjaGVBbGl2ZShTa0lTaXpl
OjpNYWtlKDUsIDUpKSk7CisKKyAgICAvLyBFdmljdCAzLgorICAgIGV2aWN0T25lQ2FjaGUoKTsK
KyAgICBFWFBFQ1RfRkFMU0UoaXNDYWNoZUFsaXZlKFNrSVNpemU6Ok1ha2UoMywgMykpKTsKKyAg
ICBFWFBFQ1RfRVEoNHUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRy
aWVzKCkpOworCisgICAgLy8gRXZpY3QgMi4KKyAgICBldmljdE9uZUNhY2hlKCk7CisgICAgRVhQ
RUNUX0ZBTFNFKGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpNYWtlKDIsIDIpKSk7CisgICAgRVhQRUNU
X0VRKDN1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsK
KworICAgIC8vIEV2aWN0IDQuCisgICAgZXZpY3RPbmVDYWNoZSgpOworICAgIEVYUEVDVF9GQUxT
RShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSg0LCA0KSkpOworICAgIEVYUEVDVF9FUSgydSwg
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CisKKyAgICAv
LyBFdmljdCAxLgorICAgIGV2aWN0T25lQ2FjaGUoKTsKKyAgICBFWFBFQ1RfRkFMU0UoaXNDYWNo
ZUFsaXZlKFNrSVNpemU6Ok1ha2UoMSwgMSkpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworCisgICAgLy8gRXZpY3Qg
NS4KKyAgICBldmljdE9uZUNhY2hlKCk7CisgICAgRVhQRUNUX0ZBTFNFKGlzQ2FjaGVBbGl2ZShT
a0lTaXplOjpNYWtlKDUsIDUpKSk7CisgICAgRVhQRUNUX0VRKDB1LCBJbWFnZURlY29kaW5nU3Rv
cmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKK30KKworVEVTVF9GKEltYWdlRGVjb2Rp
bmdTdG9yZVRlc3QsIHBydW5lQ2F1c2VkQnlJbnNlcnRpb24pCit7CisgICAgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjppbnN0YW5jZSgpLT5zZXRDYWNoZUxpbWl0SW5CeXRlcygxMDApOworCisgICAgLy8g
SW5zZXJ0IDEwMCBlbnRyaWVzLgorICAgIC8vIENhY2hlIGVudHJpZXMgc3RvcmVkIHNob3VsZCBp
bmNyZWFzZSBhbmQgZXZlbnR1YWxseSBkZWNyZWFzZSB0byAxLgorICAgIGluc2VydENhY2hlKFNr
SVNpemU6Ok1ha2UoMSwgMSkpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMiwgMikp
OworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMywgMykpOworICAgIEVYUEVDVF9FUSgz
dSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CisKKyAg
ICBmb3IgKGludCBpID0gNDsgaSA8PSAxMDA7ICsraSkKKyAgICAgICAgaW5zZXJ0Q2FjaGUoU2tJ
U2l6ZTo6TWFrZShpLCBpKSk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworICAgIGZvciAoaW50IGkgPSAxOyBpIDw9
IDk5OyArK2kpCisgICAgICAgIEVYUEVDVF9GQUxTRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFr
ZShpLCBpKSkpOworICAgIEVYUEVDVF9UUlVFKGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpNYWtlKDEw
MCwgMTAwKSkpOworfQorCitURVNUX0YoSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdCwgY2FjaGVJblVz
ZU5vdEV2aWN0ZWQpCit7CisgICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSgxLCAxKSk7Cisg
ICAgaW5zZXJ0Q2FjaGUoU2tJU2l6ZTo6TWFrZSgyLCAyKSk7CisgICAgaW5zZXJ0Q2FjaGUoU2tJ
U2l6ZTo6TWFrZSgzLCAzKSk7CisgICAgRVhQRUNUX0VRKDN1LCBJbWFnZURlY29kaW5nU3RvcmU6
Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKKworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJh
Z21lbnQqIGNhY2hlZEltYWdlID0gbG9ja0NhY2hlKFNrSVNpemU6Ok1ha2UoMSwgMSkpOworICAg
IEVYUEVDVF9UUlVFKGNhY2hlZEltYWdlKTsKKworICAgIC8vIENhY2hlIDIgaXMgZXZpY3RlZCBi
ZWNhdXNlIGNhY2hlIDEgaXMgaW4gdXNlLgorICAgIGV2aWN0T25lQ2FjaGUoKTsKKyAgICBFWFBF
Q1RfVFJVRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSgxLCAxKSkpOworICAgIEVYUEVDVF9G
QUxTRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSgyLCAyKSkpOworICAgIEVYUEVDVF9UUlVF
KGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpNYWtlKDMsIDMpKSk7CisKKyAgICBFWFBFQ1RfRVEoMnUs
IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworICAgIHVu
bG9ja0NhY2hlKGNhY2hlZEltYWdlKTsKK30KKworVEVTVF9GKEltYWdlRGVjb2RpbmdTdG9yZVRl
c3QsIGRlc3Ryb3lJbWFnZUZyYW1lR2VuZXJhdG9yKQoreworICAgIGluc2VydENhY2hlKFNrSVNp
emU6Ok1ha2UoMSwgMSkpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMiwgMikpOwor
ICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMywgMykpOworICAgIEVYUEVDVF9FUSgzdSwg
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CisKKyAgICBt
X2dlbmVyYXRvci5jbGVhcigpOworICAgIEVYUEVDVF9GQUxTRShJbWFnZURlY29kaW5nU3RvcmU6
Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177544</attachid>
            <date>2012-12-04 13:55:14 -0800</date>
            <delta_ts>2012-12-04 20:16:25 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-103480-20121204135239.patch</filename>
            <type>text/plain</type>
            <size>26968</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWFjODllZjJhYjZjNjA1
YzIxZmM2MjBkMzY1MzBmOTZiYTVkOTgyMS4uNDFlMDM4Yzc0M2FhZDIzNTg4MDY1NjUzNjQzMzdl
MTZlYmVjNWM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTExLTI4ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1l
bnQgY2FjaGUgZXZpY3Rpb24gbG9naWMgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM0ODAKKworICAgICAgICBS
ZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVu
dHMgdGhlc2UgZmVhdHVyZXMgaW4gdGhlIG5ldyBpbWFnZSBjYWNoZToKKyAgICAgICAgLSBMZWFz
dC1yZWNlbnRseS11c2VkIGV2aWN0aW9uIGxvZ2ljCisgICAgICAgIC0gU2V0dGluZyBjYWNoZSBs
aW1pdCAoZGVmYXVsdCBpcyAzMk1CKQorICAgICAgICAtIFJlbW92ZSBjYWNoZSBlbnRyaWVzIHdo
ZW4gSW1hZ2VGcmFtZUdlbmVyYXRvciBpcyByZW1vdmVkCisKKyAgICAgICAgTmV3IHRlc3RzIGlu
IEltYWdlRGVjb2RpbmdUZXN0VGVzdC4gQWxzbyBjb3ZlcmVkIGJ5IHBsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvZGVmZXJyZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGlu
Z1N0b3JlOjpJbWFnZURlY29kaW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlOjp+SW1hZ2VEZWNvZGluZ1N0b3JlKToKKyAgICAgICAgQ29kZSB0byBhc3NlcnQg
dGhhdCBldmVyeXRoaW5nIGlzIGNsZWFuZWQgdXAuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6OmxvY2tDb21wbGV0ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZTo6dW5sb2NrQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbnNlcnRBbmRMb2NrQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjpyZW1vdmVDYWNoZUluZGV4ZWRCeUdlbmVyYXRvcik6CisgICAgICAgIE5l
dyBtZXRob2QgdG8gcmVtb3ZlIGFsbCBjYWNoZSBlbnRyaWVzIGluZGV4IGJ5IEltYWdlRnJhbWVH
ZW5lcmF0b3IuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2RpbmdTdG9yZTo6c2V0Q2FjaGVMaW1pdEluQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGluZ1N0b3JlOjptZW1vcnlVc2FnZUluQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ1N0b3JlOjpjYWNoZUVudHJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGluZ1N0b3JlOjpwcnVuZSk6CisgICAgICAgIE5ldyBjb2RlIHRvIGltcGxlbWVudCBM
UlUgZXZpY3Rpb24gbG9naWMuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
Omluc2VydENhY2hlSW50ZXJuYWwpOgorICAgICAgICBOZXcgbWV0aG9kIHRvIGhlbHAgbmV3IGNh
Y2hlIGluc2VydGlvbi4gVGhpcyBpcyBzZXBhcmF0ZWx5IGJlY2F1c2UgaXQgdG91Y2hlcyAzIGNv
bnRhaW5lcnMuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnJlbW92ZUZy
b21DYWNoZUludGVybmFsKToKKyAgICAgICAgTmV3IG1ldGhvZCB0byBoZWxwIHJlbW92ZSBhIGNh
Y2hlIGVudHJ5IGZyb20gY29udGFpbmVycy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rp
bmdTdG9yZTo6cmVtb3ZlRnJvbUNhY2hlTGlzdEludGVybmFsKToKKyAgICAgICAgTmV3IGhlbHBl
ciBtZXRob2QgdG8gaGVscCByZW1vdmUgY2FjaGUgZW50cnkgZnJvbSBkb3VibHkgbGlua2VkIGxp
c3QuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0
b3JlLmg6CisgICAgICAgIChJbWFnZURlY29kaW5nU3RvcmUpOgorICAgICAgICAoQ2FjaGVFbnRy
eSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hlRW50cnk6OmNy
ZWF0ZUFuZFVzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hl
RW50cnk6OkNhY2hlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3Jl
OjpDYWNoZUVudHJ5Ojp+Q2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
aW5nU3RvcmU6OkNhY2hlRW50cnk6OmNhY2hlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y2FjaGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5Ojp1c2VDb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hlRW50cnk6OmluY3JlbWVudFVzZUNvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6ZGVj
cmVtZW50VXNlQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpD
YWNoZUVudHJ5OjptZW1vcnlVc2FnZUluQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbmNyZW1lbnRNZW1vcnlVc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kaW5nU3RvcmU6OmRlY3JlbWVudE1lbW9yeVVzYWdlKToKKyAgICAgICAgTmV3IGhl
bHBlciBtZXRob2RzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
RnJhbWVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRv
cjo6fkltYWdlRnJhbWVHZW5lcmF0b3IpOgorCiAyMDEyLTEyLTA0ICBKdWxpZW4gQ2hhZmZyYWl4
ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIEhlYXAtdXNlLWFmdGVyLWZyZWUg
aW4gV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGlzdCBbTWF0aE1MXQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCBiODQwNmIwMDA4YTk1YmUyMDEzNmIxZjkxNTA3Y2ZkOTU0ZWMwMTkz
Li4yYjc5MjQ2MjhlMTI0NWM0MjUxMTc1MTRjNmVhMTUxOTdjZTc2ZDEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTExLTI4ICBBbHBoYSBMYW0gIDxo
Y2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgY2FjaGUg
ZXZpY3Rpb24gbG9naWMgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM0ODAKKworICAgICAgICBSZXZpZXdlZCBi
eSBKYW1lcyBSb2JpbnNvbi4KKworICAgICAgICBBZGRlZCBJbWFnZURlY29kaW5nU3RvcmVUZXN0
IGZvciB1bml0IHRlc3RpbmcgbmV3IGltYWdlIGNhY2hlLgorCisgICAgICAgIE5ldyB0ZXN0czoK
KworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmVUZXN0LmV2aWN0T25lQ2FjaGUKKworICAgICAg
ICBUZXN0IGV2aWN0aW9uIG9mIG9uZSBjYWNoZSBlbnRyeSBieSBzZXR0aW5nIGEgc21hbGxlciBj
YWNoZSBsaW1pdC4KKworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmVUZXN0LnBydW5lT3JkZXJJ
c0xlYXN0UmVjZW50bHlVc2VkCisKKyAgICAgICAgVGVzdCBldmljdGlvbiBvcmRlciBpcyBsZWFz
dCByZWNlbnRseSB1c2VkLgorCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZVRlc3QucHJ1bmVD
YXVzZWRCeUluc2VydGlvbgorCisgICAgICAgIFRlc3QgdGhhdCBldmljdGlvbiBpcyB0cmlnZ2Vy
ZWQgYWxzbyBieSBjYWNoZSBpbnNlcnRpb24uCisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3Jl
VGVzdC5jYWNoZUluVXNlTm90RXZpY3RlZAorCisgICAgICAgIFRlc3QgdGhhdCBjYWNoZSBpbiB1
c2UgaXMgbm90IGV2aWN0ZWQuCisKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdC5kZXN0
cm95SW1hZ2VGcmFtZUdlbmVyYXRvcgorCisgICAgICAgIFRlc3QgdGhhdCBkZWxldGluZyBhIElt
YWdlRnJhbWVHZW5lcmF0b3IgY2F1c2VzIGFzc29jaWF0ZWQgY2FjaGUKKyAgICAgICAgZW50cmll
cyB0byBiZSByZW1vdmVkLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVz
dHMvSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChJbWFnZURlY29kaW5nU3RvcmVUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2RpbmdTdG9yZVRlc3Q6OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2RpbmdTdG9yZVRlc3Q6OlRlYXJEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rp
bmdTdG9yZVRlc3Q6OmNyZWF0ZUNvbXBsZXRlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGluZ1N0b3JlVGVzdDo6aW5zZXJ0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGluZ1N0b3JlVGVzdDo6bG9ja0NhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZVRlc3Q6OnVubG9ja0NhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZVRlc3Q6OmV2aWN0T25lQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGluZ1N0b3JlVGVzdDo6aXNDYWNoZUFsaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRF
U1RfRik6CisKIDIwMTItMTItMDQgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUm9sbGVkIERFUFMgKHcvTGludXggYnVpbGQgZml4KS4gIFVucmV2
aWV3ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcAppbmRleCA0ODlmZGRjNDI4MDFl
NDIxNzRmM2I0OTc3NDRkNTkxOWRhZDNmZTU3Li42YjYxNzUzMDI3ZGNiZTRhMjk5Mzg2MmI2MGRh
NGNhNzllM2QwZjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKQEAgLTM0LDcg
KzM0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgewogCi1JbWFnZURlY29k
aW5nU3RvcmUqIHNfaW5zdGFuY2UgPSAwOworLy8gMzJNQiBtZW1vcnkgbGltaXQgZm9yIGNhY2hl
Lgorc3RhdGljIGNvbnN0IHNpemVfdCBkZWZhdWx0Q2FjaGVMaW1pdEluQnl0ZXMgPSAzMjc2OCAq
IDEwMjQ7CitzdGF0aWMgSW1hZ2VEZWNvZGluZ1N0b3JlKiBzX2luc3RhbmNlID0gMDsKIAogc3Rh
dGljIHZvaWQgc2V0SW5zdGFuY2UoSW1hZ2VEZWNvZGluZ1N0b3JlKiBpbWFnZURlY29kaW5nU3Rv
cmUpCiB7CkBAIC00NSwxMSArNDcsMTkgQEAgc3RhdGljIHZvaWQgc2V0SW5zdGFuY2UoSW1hZ2VE
ZWNvZGluZ1N0b3JlKiBpbWFnZURlY29kaW5nU3RvcmUpCiB9IC8vIG5hbWVzcGFjZQogCiBJbWFn
ZURlY29kaW5nU3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSgpCisgICAgOiBtX2NhY2hlTGltaXRJ
bkJ5dGVzKGRlZmF1bHRDYWNoZUxpbWl0SW5CeXRlcykKKyAgICAsIG1fbWVtb3J5VXNhZ2VJbkJ5
dGVzKDApCiB7CiB9CiAKIEltYWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2RpbmdTdG9yZSgp
CiB7CisjaWZuZGVmIE5ERUJVRworICAgIHNldENhY2hlTGltaXRJbkJ5dGVzKDApOworICAgIEFT
U0VSVCghbV9jYWNoZU1hcC5zaXplKCkpOworICAgIEFTU0VSVCghbV9vcmRlcmVkQ2FjaGVMaXN0
LnNpemUoKSk7CisgICAgQVNTRVJUKCFtX2NhY2hlZFNpemVNYXAuc2l6ZSgpKTsKKyNlbmRpZgog
fQogCiBJbWFnZURlY29kaW5nU3RvcmUqIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKQpA
QCAtNzUsMTUgKzg1LDE1IEBAIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2Rp
bmdTdG9yZTo6bG9ja0NvbXBsZXRlQ2FjaGUoY29uc3QgSW1hZ2VGcmFtCiAgICAgICAgIENhY2hl
TWFwOjppdGVyYXRvciBpdGVyID0gbV9jYWNoZU1hcC5maW5kKHN0ZDo6bWFrZV9wYWlyKGdlbmVy
YXRvciwgc2NhbGVkU2l6ZSkpOwogICAgICAgICBpZiAoaXRlciA9PSBtX2NhY2hlTWFwLmVuZCgp
KQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhY2hlRW50cnkgPSBpdGVyLT52YWx1
ZTsKLSAgICAgICAgaWYgKCFjYWNoZUVudHJ5LT5jYWNoZWRJbWFnZS0+aXNDb21wbGV0ZSgpKQor
ICAgICAgICBjYWNoZUVudHJ5ID0gaXRlci0+dmFsdWUuZ2V0KCk7CisgICAgICAgIGlmICghY2Fj
aGVFbnRyeS0+Y2FjaGVkSW1hZ2UoKS0+aXNDb21wbGV0ZSgpKQogICAgICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICAgICAgLy8gSW5jcmVtZW50IHVzZSBjb3VudCBzdWNoIHRoYXQgaXQgZG9lc24n
dCBnZXQgZXZpY3RlZC4KLSAgICAgICAgKytjYWNoZUVudHJ5LT51c2VDb3VudDsKKyAgICAgICAg
Y2FjaGVFbnRyeS0+aW5jcmVtZW50VXNlQ291bnQoKTsKICAgICB9Ci0gICAgY2FjaGVFbnRyeS0+
Y2FjaGVkSW1hZ2UtPmJpdG1hcCgpLmxvY2tQaXhlbHMoKTsKLSAgICByZXR1cm4gY2FjaGVFbnRy
eS0+Y2FjaGVkSW1hZ2UuZ2V0KCk7CisgICAgY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UoKS0+Yml0
bWFwKCkubG9ja1BpeGVscygpOworICAgIHJldHVybiBjYWNoZUVudHJ5LT5jYWNoZWRJbWFnZSgp
OwogfQogCiBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZURlY29kaW5nU3RvcmU6Omxv
Y2tJbmNvbXBsZXRlQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBj
b25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQpAQCAtMTA1LDkgKzExNSwxMiBAQCB2b2lkIEltYWdl
RGVjb2RpbmdTdG9yZTo6dW5sb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2Vu
ZXJhdG9yLCBjb25zdAogICAgIENhY2hlTWFwOjppdGVyYXRvciBpdGVyID0gbV9jYWNoZU1hcC5m
aW5kKHN0ZDo6bWFrZV9wYWlyKGdlbmVyYXRvciwgY2FjaGVkSW1hZ2UtPnNjYWxlZFNpemUoKSkp
OwogICAgIEFTU0VSVChpdGVyICE9IG1fY2FjaGVNYXAuZW5kKCkpOwogCi0gICAgQ2FjaGVFbnRy
eSogY2FjaGVFbnRyeSA9IGl0ZXItPnZhbHVlOwotICAgIC0tY2FjaGVFbnRyeS0+dXNlQ291bnQ7
Ci0gICAgQVNTRVJUKGNhY2hlRW50cnktPnVzZUNvdW50ID49IDApOworICAgIENhY2hlRW50cnkq
IGNhY2hlRW50cnkgPSBpdGVyLT52YWx1ZS5nZXQoKTsKKyAgICBjYWNoZUVudHJ5LT5kZWNyZW1l
bnRVc2VDb3VudCgpOworCisgICAgLy8gUHV0IHRoZSBlbnRyeSB0byB0aGUgZW5kIG9mIGxpc3Qu
CisgICAgbV9vcmRlcmVkQ2FjaGVMaXN0LnJlbW92ZShjYWNoZUVudHJ5KTsKKyAgICBtX29yZGVy
ZWRDYWNoZUxpc3QuYXBwZW5kKGNhY2hlRW50cnkpOwogfQogCiBjb25zdCBTY2FsZWRJbWFnZUZy
YWdtZW50KiBJbWFnZURlY29kaW5nU3RvcmU6Omluc2VydEFuZExvY2tDYWNoZShjb25zdCBJbWFn
ZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVu
dD4gaW1hZ2UpCkBAIC0xMjcsMjMgKzE0MCwxMjUgQEAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVu
dCogSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnNlcnRBbmRMb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmEK
ICAgICB9CiAKICAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSA9IGltYWdlLmdl
dCgpOwotICAgIE93blB0cjxDYWNoZUVudHJ5PiBuZXdDYWNoZUVudHJ5ID0gQ2FjaGVFbnRyeTo6
Y3JlYXRlQW5kVXNlKGltYWdlKTsKKyAgICBPd25QdHI8Q2FjaGVFbnRyeT4gbmV3Q2FjaGVFbnRy
eSA9IENhY2hlRW50cnk6OmNyZWF0ZUFuZFVzZShnZW5lcmF0b3IsIGltYWdlKTsKIAotICAgIENh
Y2hlSWRlbnRpZmllciBrZXkgPSBzdGQ6Om1ha2VfcGFpcihnZW5lcmF0b3IsIGNhY2hlZEltYWdl
LT5zY2FsZWRTaXplKCkpOwogICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7Ci0gICAgQVNT
RVJUKCFtX2NhY2hlTWFwLmNvbnRhaW5zKGtleSkpOwotCi0gICAgLy8gbV9jYWNoZU1hcCBpcyB1
c2VkIGZvciBpbmRleGluZyBhbmQgcXVpY2sgbG9va3VwIG9mIGEgY2FjaGVkIGltYWdlLgotICAg
IC8vIG1fY2FjaGVFbnRyaWVzIGlzIHVzZWQgdG8gc3VwcG9ydCBMUlUgb3BlcmF0aW9ucyB0byBy
ZW9yZGVyIGNhY2hlCi0gICAgLy8gZW50cmllcyBxdWlja2x5LiBJdCBhbHNvIG93bnMgY2FjaGVk
IGltYWdlcy4KLSAgICBtX2NhY2hlTWFwLmFkZChrZXksIG5ld0NhY2hlRW50cnkuZ2V0KCkpOwot
ICAgIG1fY2FjaGVFbnRyaWVzLmFwcGVuZChuZXdDYWNoZUVudHJ5LnJlbGVhc2UoKSk7CisgICAg
QVNTRVJUKCFtX2NhY2hlTWFwLmNvbnRhaW5zKG5ld0NhY2hlRW50cnktPmNhY2hlS2V5KCkpKTsK
KyAgICBpbnNlcnRDYWNoZUludGVybmFsKG5ld0NhY2hlRW50cnkucmVsZWFzZSgpKTsKICAgICBy
ZXR1cm4gY2FjaGVkSW1hZ2U7CiB9CiAKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpyZW1vdmVD
YWNoZUluZGV4ZWRCeUdlbmVyYXRvcihjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0
b3IpCit7CisgICAgVmVjdG9yPE93blB0cjxDYWNoZUVudHJ5PiA+IGNhY2hlRW50cmllc1RvRGVs
ZXRlOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICAgICAg
Q2FjaGVkU2l6ZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY2FjaGVkU2l6ZU1hcC5maW5kKGdlbmVy
YXRvcik7CisgICAgICAgIGlmIChpdGVyID09IG1fY2FjaGVkU2l6ZU1hcC5lbmQoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBHZXQgYWxsIGNhY2hlZCBzaXplcyBpbmRleGVk
IGJ5IGdlbmVyYXRvci4KKyAgICAgICAgVmVjdG9yPFNrSVNpemU+IGNhY2hlZFNpemVMaXN0Owor
ICAgICAgICBjb3B5VG9WZWN0b3IoaXRlci0+dmFsdWUsIGNhY2hlZFNpemVMaXN0KTsKKworICAg
ICAgICAvLyBGb3IgZWFjaCBjYWNoZWQgc2l6ZSBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIENhY2hl
RW50cnkgYW5kIHJlbW92ZSBpdCBmcm9tCisgICAgICAgIC8vIG1fY2FjaGVNYXAuCisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FjaGVkU2l6ZUxpc3Quc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIENhY2hlSWRlbnRpZmllciBrZXkgPSBzdGQ6Om1ha2VfcGFpcihnZW5lcmF0b3Is
IGNhY2hlZFNpemVMaXN0W2ldKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2NhY2hlTWFwLmNvbnRh
aW5zKGtleSkpOworCisgICAgICAgICAgICBjb25zdCBDYWNoZUVudHJ5KiBjYWNoZUVudHJ5ID0g
bV9jYWNoZU1hcC5nZXQoa2V5KTsKKyAgICAgICAgICAgIEFTU0VSVCghY2FjaGVFbnRyeS0+dXNl
Q291bnQoKSk7CisgICAgICAgICAgICByZW1vdmVGcm9tQ2FjaGVJbnRlcm5hbChjYWNoZUVudHJ5
LCAmY2FjaGVFbnRyaWVzVG9EZWxldGUpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVtb3Zl
IGZyb20gY2FjaGUgbGlzdCBhcyB3ZWxsLgorICAgICAgICByZW1vdmVGcm9tQ2FjaGVMaXN0SW50
ZXJuYWwoY2FjaGVFbnRyaWVzVG9EZWxldGUpOworICAgIH0KK30KKwordm9pZCBJbWFnZURlY29k
aW5nU3RvcmU6OnNldENhY2hlTGltaXRJbkJ5dGVzKHNpemVfdCBjYWNoZUxpbWl0KQoreworICAg
IHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICAgICAgbV9jYWNoZUxp
bWl0SW5CeXRlcyA9IGNhY2hlTGltaXQ7CisgICAgfQorICAgIHBydW5lKCk7Cit9CisKK3NpemVf
dCBJbWFnZURlY29kaW5nU3RvcmU6Om1lbW9yeVVzYWdlSW5CeXRlcygpCit7CisgICAgTXV0ZXhM
b2NrZXIgbG9jayhtX211dGV4KTsKKyAgICByZXR1cm4gbV9tZW1vcnlVc2FnZUluQnl0ZXM7Cit9
CisKK3Vuc2lnbmVkIEltYWdlRGVjb2RpbmdTdG9yZTo6Y2FjaGVFbnRyaWVzKCkKK3sKKyAgICBN
dXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIHJldHVybiBtX2NhY2hlTWFwLnNpemUoKTsK
K30KKwogdm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnBydW5lKCkKIHsKLSAgICAvLyBUT0RPOiBJ
bXBsZW1lbnQuCisgICAgVmVjdG9yPE93blB0cjxDYWNoZUVudHJ5PiA+IGNhY2hlRW50cmllc1Rv
RGVsZXRlOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKworICAg
ICAgICAvLyBIZWFkIG9mIHRoZSBsaXN0IGlzIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGVudHJ5
LgorICAgICAgICBjb25zdCBDYWNoZUVudHJ5KiBjYWNoZUVudHJ5ID0gbV9vcmRlcmVkQ2FjaGVM
aXN0LmhlYWQoKTsKKworICAgICAgICAvLyBXYWxrIHRoZSBsaXN0IG9mIGNhY2hlIGVudHJpZXMg
c3RhcnRpbmcgZnJvbSB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZAorICAgICAgICAvLyBhbmQgdGhl
biBrZWVwIHRoZW0gZm9yIGRlbGV0aW9uIGxhdGVyLgorICAgICAgICB3aGlsZSAoY2FjaGVFbnRy
eSAmJiBtX21lbW9yeVVzYWdlSW5CeXRlcyA+IG1fY2FjaGVMaW1pdEluQnl0ZXMpIHsKKyAgICAg
ICAgICAgIC8vIENhY2hlIGlzIG5vdCB1c2VkOyBSZW1vdmUgaXQuCisgICAgICAgICAgICBpZiAo
IWNhY2hlRW50cnktPnVzZUNvdW50KCkpCisgICAgICAgICAgICAgICAgcmVtb3ZlRnJvbUNhY2hl
SW50ZXJuYWwoY2FjaGVFbnRyeSwgJmNhY2hlRW50cmllc1RvRGVsZXRlKTsKKyAgICAgICAgICAg
IGNhY2hlRW50cnkgPSBjYWNoZUVudHJ5LT5uZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBSZW1vdmUgZnJvbSBjYWNoZSBsaXN0IGFzIHdlbGwuCisgICAgICAgIHJlbW92ZUZyb21DYWNo
ZUxpc3RJbnRlcm5hbChjYWNoZUVudHJpZXNUb0RlbGV0ZSk7CisgICAgfQorfQorCit2b2lkIElt
YWdlRGVjb2RpbmdTdG9yZTo6aW5zZXJ0Q2FjaGVJbnRlcm5hbChQYXNzT3duUHRyPENhY2hlRW50
cnk+IGNhY2hlRW50cnkpCit7CisgICAgaW5jcmVtZW50TWVtb3J5VXNhZ2UoY2FjaGVFbnRyeS0+
bWVtb3J5VXNhZ2VJbkJ5dGVzKCkpOworCisgICAgLy8gbV9vcmRlcmVkQ2FjaGVMaXN0IGlzIHVz
ZWQgdG8gc3VwcG9ydCBMUlUgb3BlcmF0aW9ucyB0byByZW9yZGVyIGNhY2hlCisgICAgLy8gZW50
cmllcyBxdWlja2x5LgorICAgIG1fb3JkZXJlZENhY2hlTGlzdC5hcHBlbmQoY2FjaGVFbnRyeS5n
ZXQoKSk7CisKKyAgICBDYWNoZUlkZW50aWZpZXIga2V5ID0gY2FjaGVFbnRyeS0+Y2FjaGVLZXko
KTsKKyAgICAvLyBtX2NhY2hlTWFwIGlzIHVzZWQgZm9yIGluZGV4aW5nIGFuZCBxdWljayBsb29r
dXAgb2YgYSBjYWNoZWQgaW1hZ2UuIEl0IG93bnMKKyAgICAvLyBhbGwgY2FjaGUgZW50cmllcy4K
KyAgICBtX2NhY2hlTWFwLmFkZChrZXksIGNhY2hlRW50cnkpOworCisgICAgLy8gbV9jYWNoZWRT
aXplTWFwIGtlZXBzIGFsbCBzY2FsZWQgc2l6ZXMgYXNzb2NpYXRlZCB3aXRoIGFuIEltYWdlRnJh
bWVHZW5lcmF0b3IuCisgICAgQ2FjaGVkU2l6ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2Fj
aGVkU2l6ZU1hcC5hZGQoa2V5LmZpcnN0LCBTaXplU2V0KCkpOworICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUuYWRkKGtleS5zZWNvbmQpOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6
cmVtb3ZlRnJvbUNhY2hlSW50ZXJuYWwoY29uc3QgQ2FjaGVFbnRyeSogY2FjaGVFbnRyeSwgVmVj
dG9yPE93blB0cjxDYWNoZUVudHJ5PiA+KiBkZWxldGlvbkxpc3QpCit7CisgICAgZGVjcmVtZW50
TWVtb3J5VXNhZ2UoY2FjaGVFbnRyeS0+bWVtb3J5VXNhZ2VJbkJ5dGVzKCkpOworCisgICAgLy8g
UmVtb3ZlIGZyb20gbV9jYWNoZU1hcC4KKyAgICBDYWNoZUlkZW50aWZpZXIga2V5ID0gY2FjaGVF
bnRyeS0+Y2FjaGVLZXkoKTsKKyAgICBkZWxldGlvbkxpc3QtPmFwcGVuZChtX2NhY2hlTWFwLnRh
a2Uoa2V5KSk7CisKKyAgICAvLyBSZW1vdmUgZnJvbSBtX2NhY2hlZFNpemVNYXAuCisgICAgQ2Fj
aGVkU2l6ZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY2FjaGVkU2l6ZU1hcC5maW5kKGtleS5maXJz
dCk7CisgICAgQVNTRVJUKGl0ZXIgIT0gbV9jYWNoZWRTaXplTWFwLmVuZCgpKTsKKyAgICBpdGVy
LT52YWx1ZS5yZW1vdmUoa2V5LnNlY29uZCk7CisgICAgaWYgKCFpdGVyLT52YWx1ZS5zaXplKCkp
CisgICAgICAgIG1fY2FjaGVkU2l6ZU1hcC5yZW1vdmUoaXRlcik7Cit9CisKK3ZvaWQgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjpyZW1vdmVGcm9tQ2FjaGVMaXN0SW50ZXJuYWwoY29uc3QgVmVjdG9yPE93
blB0cjxDYWNoZUVudHJ5PiA+JiBkZWxldGlvbkxpc3QpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBkZWxldGlvbkxpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIG1fb3JkZXJlZENhY2hl
TGlzdC5yZW1vdmUoZGVsZXRpb25MaXN0W2ldLmdldCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaAppbmRleCAwYWVhMmU5Njk5ZTc4NzA3
MTE0YWU2ZjY2NGM2Y2M5MTE2NzczYTRlLi45N2Y1NDBkNDQwMjhlNDVlZGQ1NTY5ZWQ5ZGM2NjM4
NzM5NTQ5ODIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaApAQCAtMzEsNiArMzEsOCBA
QAogI2luY2x1ZGUgIlNrU2l6ZS5oIgogI2luY2x1ZGUgIlNrU2l6ZUhhc2guaCIKIAorI2luY2x1
ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgpAQCAtNTYsNDIgKzU4LDkxIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHVubG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBjb25z
dCBTY2FsZWRJbWFnZUZyYWdtZW50Kik7CiAgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCog
aW5zZXJ0QW5kTG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBQYXNzT3duUHRy
PFNjYWxlZEltYWdlRnJhZ21lbnQ+KTsKIAorICAgIC8vIFJlbW92ZSBhbGwgY2FjaGUgZW50cmll
cyBpbmRleGVkIGJ5IEltYWdlRnJhbWVHZW5lcmF0b3IuCisgICAgdm9pZCByZW1vdmVDYWNoZUlu
ZGV4ZWRCeUdlbmVyYXRvcihjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKik7CisKKyAgICB2b2lk
IHNldENhY2hlTGltaXRJbkJ5dGVzKHNpemVfdCk7CisgICAgc2l6ZV90IG1lbW9yeVVzYWdlSW5C
eXRlcygpOworICAgIHVuc2lnbmVkIGNhY2hlRW50cmllcygpOworCiBwcml2YXRlOgotICAgIHN0
cnVjdCBDYWNoZUVudHJ5IHsKLSAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8Q2FjaGVFbnRyeT4g
Y3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENhY2hlRW50cnkoKSk7IH0KLSAgICAgICAg
c3RhdGljIFBhc3NPd25QdHI8Q2FjaGVFbnRyeT4gY3JlYXRlQW5kVXNlKFBhc3NPd25QdHI8U2Nh
bGVkSW1hZ2VGcmFnbWVudD4gaW1hZ2UpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYWNoZUVudHJ5
KGltYWdlLCAxKSk7IH0KKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxjb25zdCBJbWFnZUZyYW1lR2Vu
ZXJhdG9yKiwgU2tJU2l6ZT4gQ2FjaGVJZGVudGlmaWVyOwogCi0gICAgICAgIENhY2hlRW50cnko
KQotICAgICAgICAgICAgOiB1c2VDb3VudCgwKQorICAgIGNsYXNzIENhY2hlRW50cnkgOiBwdWJs
aWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8Q2FjaGVFbnRyeT4geworICAgICAgICBmcmllbmQgY2xh
c3MgRG91Ymx5TGlua2VkTGlzdE5vZGU8Q2FjaGVFbnRyeT47CisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgUGFzc093blB0cjxDYWNoZUVudHJ5PiBjcmVhdGVBbmRVc2UoY29uc3QgSW1hZ2VG
cmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+
IGltYWdlKQogICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENhY2hl
RW50cnkoZ2VuZXJhdG9yLCBpbWFnZSwgMSkpOwogICAgICAgICB9CiAKLSAgICAgICAgQ2FjaGVF
bnRyeShQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlLCBpbnQgY291bnQpCi0g
ICAgICAgICAgICA6IGNhY2hlZEltYWdlKGltYWdlKQotICAgICAgICAgICAgLCB1c2VDb3VudChj
b3VudCkKKyAgICAgICAgQ2FjaGVFbnRyeShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5l
cmF0b3IsIFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gaW1hZ2UsIGludCBjb3VudCkK
KyAgICAgICAgICAgIDogbV9wcmV2KDApCisgICAgICAgICAgICAsIG1fbmV4dCgwKQorICAgICAg
ICAgICAgLCBtX2dlbmVyYXRvcihnZW5lcmF0b3IpCisgICAgICAgICAgICAsIG1fY2FjaGVkSW1h
Z2UoaW1hZ2UpCisgICAgICAgICAgICAsIG1fdXNlQ291bnQoY291bnQpCiAgICAgICAgIHsKICAg
ICAgICAgfQogCiAgICAgICAgIH5DYWNoZUVudHJ5KCkKICAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKCF1c2VDb3VudCk7CisgICAgICAgICAgICBBU1NFUlQoIW1fdXNlQ291bnQpOwogICAg
ICAgICB9CiAKLSAgICAgICAgT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGNhY2hlZEltYWdl
OwotICAgICAgICBpbnQgdXNlQ291bnQ7CisgICAgICAgIENhY2hlSWRlbnRpZmllciBjYWNoZUtl
eSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1fZ2VuZXJhdG9yLCBtX2NhY2hlZElt
YWdlLT5zY2FsZWRTaXplKCkpOyB9CisgICAgICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQq
IGNhY2hlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZS5nZXQoKTsgfQorICAg
ICAgICBpbnQgdXNlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3VzZUNvdW50OyB9CisgICAgICAg
IHZvaWQgaW5jcmVtZW50VXNlQ291bnQoKSB7ICsrbV91c2VDb3VudDsgfQorICAgICAgICB2b2lk
IGRlY3JlbWVudFVzZUNvdW50KCkgeyAtLW1fdXNlQ291bnQ7IEFTU0VSVChtX3VzZUNvdW50ID49
IDApOyB9CisKKyAgICAgICAgLy8gRklYTUU6IGdldFNhZmVTaXplKCkgcmV0dXJucyBzaXplIGlu
IGJ5dGVzIHRydW5jYXRlZCB0byBhIDMyLWJpdHMgaW50ZWdlci4KKyAgICAgICAgLy8gICAgICAg
IEZpbmQgYSB3YXkgdG8gZ2V0IHRoZSBzaXplIGluIDY0LWJpdHMuCisgICAgICAgIHNpemVfdCBt
ZW1vcnlVc2FnZUluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBjYWNoZWRJbWFnZSgpLT5iaXRtYXAo
KS5nZXRTYWZlU2l6ZSgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBDYWNoZUVudHJ5KiBt
X3ByZXY7CisgICAgICAgIENhY2hlRW50cnkqIG1fbmV4dDsKKyAgICAgICAgY29uc3QgSW1hZ2VG
cmFtZUdlbmVyYXRvciogbV9nZW5lcmF0b3I7CisgICAgICAgIE93blB0cjxTY2FsZWRJbWFnZUZy
YWdtZW50PiBtX2NhY2hlZEltYWdlOworICAgICAgICBpbnQgbV91c2VDb3VudDsKICAgICB9Owog
CiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlKCk7Ci0gICAgdm9pZCBwcnVuZSgpOwogCi0gICAgVmVj
dG9yPE93blB0cjxDYWNoZUVudHJ5PiA+IG1fY2FjaGVFbnRyaWVzOworICAgIHZvaWQgcHJ1bmUo
KTsKIAotICAgIHR5cGVkZWYgc3RkOjpwYWlyPGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBT
a0lTaXplPiBDYWNoZUlkZW50aWZpZXI7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPENhY2hlSWRlbnRp
ZmllciwgQ2FjaGVFbnRyeSo+IENhY2hlTWFwOworICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGNh
bGxlZCB3aGlsZSBtX211dGV4IGlzIGxvY2tlZC4KKyAgICB2b2lkIGluc2VydENhY2hlSW50ZXJu
YWwoUGFzc093blB0cjxDYWNoZUVudHJ5Pik7CisgICAgdm9pZCByZW1vdmVGcm9tQ2FjaGVJbnRl
cm5hbChjb25zdCBDYWNoZUVudHJ5KiwgVmVjdG9yPE93blB0cjxDYWNoZUVudHJ5PiA+KiBkZWxl
dGlvbkxpc3QpOworICAgIHZvaWQgcmVtb3ZlRnJvbUNhY2hlTGlzdEludGVybmFsKGNvbnN0IFZl
Y3RvcjxPd25QdHI8Q2FjaGVFbnRyeT4gPiYgZGVsZXRpb25MaXN0KTsKKyAgICB2b2lkIGluY3Jl
bWVudE1lbW9yeVVzYWdlKHNpemVfdCBzaXplKSB7IG1fbWVtb3J5VXNhZ2VJbkJ5dGVzICs9IHNp
emU7IH0KKyAgICB2b2lkIGRlY3JlbWVudE1lbW9yeVVzYWdlKHNpemVfdCBzaXplKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fbWVtb3J5VXNhZ2VJbkJ5dGVzID49IHNpemUpOworICAgICAgICBt
X21lbW9yeVVzYWdlSW5CeXRlcyAtPSBzaXplOworICAgIH0KKworICAgIC8vIEhlYWQgb2YgdGhp
cyBsaXN0IGlzIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGNhY2hlIGVudHJ5LgorICAgIC8vIFRh
aWwgb2YgdGhpcyBsaXN0IGlzIHRoZSBtb3N0IHJlY2VudGx5IHVzZWQgY2FjaGUgZW50cnkuCisg
ICAgRG91Ymx5TGlua2VkTGlzdDxDYWNoZUVudHJ5PiBtX29yZGVyZWRDYWNoZUxpc3Q7CisKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8Q2FjaGVJZGVudGlmaWVyLCBPd25QdHI8Q2FjaGVFbnRyeT4gPiBD
YWNoZU1hcDsKICAgICBDYWNoZU1hcCBtX2NhY2hlTWFwOwogCi0gICAgLy8gUHJvdGVjdCBjb25j
dXJyZW50IGFjY2VzcyB0byBhbGwgaW5zdGFuY2VzIG9mIENhY2hlRW50cnkgc3RvcmVkIGluIG1f
Y2FjaGVFbnRyaWVzIGFuZAotICAgIC8vIG1fY2FjaGVNYXAgYXMgd2VsbCBhcyB0aGUgY29udGFp
bmVycy4KKyAgICB0eXBlZGVmIEhhc2hTZXQ8U2tJU2l6ZT4gU2l6ZVNldDsKKyAgICB0eXBlZGVm
IEhhc2hNYXA8Y29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIFNpemVTZXQ+IENhY2hlZFNpemVN
YXA7CisgICAgQ2FjaGVkU2l6ZU1hcCBtX2NhY2hlZFNpemVNYXA7CisKKyAgICBzaXplX3QgbV9j
YWNoZUxpbWl0SW5CeXRlczsKKyAgICBzaXplX3QgbV9tZW1vcnlVc2FnZUluQnl0ZXM7CisKKyAg
ICAvLyBQcm90ZWN0IGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZXNlIG1lbWJlcnM6CisgICAgLy8g
ICBtX29yZGVyZWRDYWNoZUxpc3QKKyAgICAvLyAgIG1fY2FjaGVNYXAgYW5kIGFsbCBDYWNoZUVu
dHJ5cyBzdG9yZWQgaW4gaXQKKyAgICAvLyAgIG1fY2FjaGVkU2l6ZU1hcAorICAgIC8vICAgbV9j
YWNoZUxpbWl0SW5CeXRlcworICAgIC8vICAgbV9tZW1vcnlVc2FnZUluQnl0ZXMKICAgICBNdXRl
eCBtX211dGV4OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcAppbmRleCAy
MjBhNTdkNDVkYTEyMzdlZmZiNTg4YWE0ZTI3M2M1YTdhMzIzNjU0Li5lZjg1MDU1YzRkYzIzYTRk
NjAwZjM5MDhjOWYwNTM5MWZhOWM0OWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9y
LmNwcApAQCAtNTQsOCArNTQsMTEgQEAgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdl
bmVyYXRvcihjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSwgUGFzc1JlZlB0cjxTaGEKIAogSW1hZ2VG
cmFtZUdlbmVyYXRvcjo6fkltYWdlRnJhbWVHZW5lcmF0b3IoKQogewotICAgIC8vIFRPRE86IENh
bGwgSW1hZ2VEZWNvZGluZ1N0b3JlIHRvIHJlbW92ZSBhbGwgY2FjaGUgZW50cmllcyBpbmRleGVk
Ci0gICAgLy8gYnkgdGhpcyBvYmplY3QuCisgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgaXMgbm90
IHJlYWxseSB0aHJlYWQtc2FmZS4gVGhpcyBzaG91bGQgYmUgY2hhbmdlZCB0bzoKKyAgICAvLyBJ
bWFnZURlY29kaW5nU3RvcmU6OnJlbW92ZUNhY2hlRnJvbUluc3RhbmNlKHRoaXMpOworICAgIC8v
IFdoaWNoIHVzZXMgYSBsb2NrIGludGVybmFsbHkuCisgICAgaWYgKEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5zdGFuY2UoKSkKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5y
ZW1vdmVDYWNoZUluZGV4ZWRCeUdlbmVyYXRvcih0aGlzKTsKIH0KIAogdm9pZCBJbWFnZUZyYW1l
R2VuZXJhdG9yOjpzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFs
bERhdGFSZWNlaXZlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDNhZDNlMjBk
YWUzNDI4YjBjMjg5Nzg4M2Q2OTMyNjBmODQwZTExMDcuLjRmM2I2N2Q5NjIwNTM5YjgwNWZhY2Q1
ODgyMDk3OGJlMGNmNjVlNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtODEs
NiArODEsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvSURCTGV2ZWxEQkNvZGluZ1Rlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9JREJSZXF1ZXN0VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0ltYWdlRGVjb2Rp
bmdTdG9yZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9y
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZURlY29kaW5nU3RvcmVUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDM4YWU3MjBiNTc1YmY5OTYwYjU4NzJiZTFlMDk3NGZhM2Q3ZDliMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VEZWNvZGlu
Z1N0b3JlVGVzdC5jcHAKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKworI2luY2x1ZGUgIkltYWdl
RnJhbWVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsK
KworY2xhc3MgSW1hZ2VEZWNvZGluZ1N0b3JlVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3Qg
eworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICBJbWFn
ZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbmNlKCk7CisgICAgICAgIG1fZGF0YSA9IFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKCk7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gSW1hZ2VGcmFtZUdlbmVy
YXRvcjo6Y3JlYXRlKFNrSVNpemU6Ok1ha2UoMTAwLCAxMDApLCBtX2RhdGEsIHRydWUpOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICBJbWFnZURl
Y29kaW5nU3RvcmU6OnNodXRkb3duKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgUGFzc093
blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBjcmVhdGVDb21wbGV0ZUltYWdlKGNvbnN0IFNrSVNp
emUmIHNpemUpCisgICAgeworICAgICAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgICAgIGJpdG1h
cC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOworICAgICAgICBiaXRtYXAuYWxsb2NQaXhlbHMoKTsKKyAgICAgICAgcmV0
dXJuIFNjYWxlZEltYWdlRnJhZ21lbnQ6OmNyZWF0ZShzaXplLCBiaXRtYXAsIHRydWUpOworICAg
IH0KKworICAgIHZvaWQgaW5zZXJ0Q2FjaGUoY29uc3QgU2tJU2l6ZSYgc2l6ZSkKKyAgICB7Cisg
ICAgICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGltYWdlID0gSW1hZ2VEZWNvZGluZ1N0
b3JlOjppbnN0YW5jZSgpLT5pbnNlcnRBbmRMb2NrQ2FjaGUoCisgICAgICAgICAgICBtX2dlbmVy
YXRvci5nZXQoKSwgY3JlYXRlQ29tcGxldGVJbWFnZShzaXplKSk7CisgICAgICAgIHVubG9ja0Nh
Y2hlKGltYWdlKTsKKyAgICB9CisKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBsb2Nr
Q2FjaGUoY29uc3QgU2tJU2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBJbWFnZURl
Y29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmxvY2tDb21wbGV0ZUNhY2hlKG1fZ2VuZXJhdG9yLmdl
dCgpLCBzaXplKTsKKyAgICB9CisKKyAgICB2b2lkIHVubG9ja0NhY2hlKGNvbnN0IFNjYWxlZElt
YWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlKQorICAgIHsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0
b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgY2FjaGVkSW1h
Z2UpOworICAgIH0KKworICAgIHZvaWQgZXZpY3RPbmVDYWNoZSgpCisgICAgeworICAgICAgICBz
aXplX3QgbWVtb3J5VXNhZ2VJbkJ5dGVzID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgp
LT5tZW1vcnlVc2FnZUluQnl0ZXMoKTsKKyAgICAgICAgaWYgKG1lbW9yeVVzYWdlSW5CeXRlcykK
KyAgICAgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+c2V0Q2FjaGVMaW1p
dEluQnl0ZXMobWVtb3J5VXNhZ2VJbkJ5dGVzIC0gMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+c2V0Q2FjaGVMaW1pdEluQnl0ZXMo
MCk7CisgICAgfQorCisgICAgYm9vbCBpc0NhY2hlQWxpdmUoY29uc3QgU2tJU2l6ZSYgc2l6ZSkK
KyAgICB7CisgICAgICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlID0g
bG9ja0NhY2hlKHNpemUpOworICAgICAgICBpZiAoIWNhY2hlZEltYWdlKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVu
bG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCBjYWNoZWRJbWFnZSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBS
ZWZQdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7Cit9OworCitURVNUX0YoSW1h
Z2VEZWNvZGluZ1N0b3JlVGVzdCwgZXZpY3RPbmVDYWNoZSkKK3sKKyAgICBpbnNlcnRDYWNoZShT
a0lTaXplOjpNYWtlKDEsIDEpKTsKKyAgICBpbnNlcnRDYWNoZShTa0lTaXplOjpNYWtlKDIsIDIp
KTsKKyAgICBpbnNlcnRDYWNoZShTa0lTaXplOjpNYWtlKDMsIDMpKTsKKyAgICBFWFBFQ1RfRVEo
M3UsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOworCisg
ICAgZXZpY3RPbmVDYWNoZSgpOworICAgIEVYUEVDVF9FUSgydSwgSW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CisKKyAgICBldmljdE9uZUNhY2hlKCk7Cisg
ICAgRVhQRUNUX0VRKDF1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50
cmllcygpKTsKK30KKworVEVTVF9GKEltYWdlRGVjb2RpbmdTdG9yZVRlc3QsIHBydW5lT3JkZXJJ
c0xlYXN0UmVjZW50bHlVc2VkKQoreworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMSwg
MSkpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMiwgMikpOworICAgIGluc2VydENh
Y2hlKFNrSVNpemU6Ok1ha2UoMywgMykpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2Uo
NCwgNCkpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoNSwgNSkpOworICAgIEVYUEVD
VF9FUSg1dSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7
CisKKyAgICAvLyBVc2UgY2FjaGUgaW4gdGhlIG9yZGVyIDMsIDIsIDQsIDEsIDUuCisgICAgRVhQ
RUNUX1RSVUUoaXNDYWNoZUFsaXZlKFNrSVNpemU6Ok1ha2UoMywgMykpKTsKKyAgICBFWFBFQ1Rf
VFJVRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSgyLCAyKSkpOworICAgIEVYUEVDVF9UUlVF
KGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpNYWtlKDQsIDQpKSk7CisgICAgRVhQRUNUX1RSVUUoaXND
YWNoZUFsaXZlKFNrSVNpemU6Ok1ha2UoMSwgMSkpKTsKKyAgICBFWFBFQ1RfVFJVRShpc0NhY2hl
QWxpdmUoU2tJU2l6ZTo6TWFrZSg1LCA1KSkpOworCisgICAgLy8gRXZpY3QgMy4KKyAgICBldmlj
dE9uZUNhY2hlKCk7CisgICAgRVhQRUNUX0ZBTFNFKGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpNYWtl
KDMsIDMpKSk7CisgICAgRVhQRUNUX0VRKDR1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
KCktPmNhY2hlRW50cmllcygpKTsKKworICAgIC8vIEV2aWN0IDIuCisgICAgZXZpY3RPbmVDYWNo
ZSgpOworICAgIEVYUEVDVF9GQUxTRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSgyLCAyKSkp
OworICAgIEVYUEVDVF9FUSgzdSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNo
ZUVudHJpZXMoKSk7CisKKyAgICAvLyBFdmljdCA0LgorICAgIGV2aWN0T25lQ2FjaGUoKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoaXNDYWNoZUFsaXZlKFNrSVNpemU6Ok1ha2UoNCwgNCkpKTsKKyAgICBF
WFBFQ1RfRVEoMnUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVz
KCkpOworCisgICAgLy8gRXZpY3QgMS4KKyAgICBldmljdE9uZUNhY2hlKCk7CisgICAgRVhQRUNU
X0ZBTFNFKGlzQ2FjaGVBbGl2ZShTa0lTaXplOjpNYWtlKDEsIDEpKSk7CisgICAgRVhQRUNUX0VR
KDF1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKKwor
ICAgIC8vIEV2aWN0IDUuCisgICAgZXZpY3RPbmVDYWNoZSgpOworICAgIEVYUEVDVF9GQUxTRShp
c0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSg1LCA1KSkpOworICAgIEVYUEVDVF9FUSgwdSwgSW1h
Z2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7Cit9CisKK1RFU1Rf
RihJbWFnZURlY29kaW5nU3RvcmVUZXN0LCBwcnVuZUNhdXNlZEJ5SW5zZXJ0aW9uKQoreworICAg
IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+c2V0Q2FjaGVMaW1pdEluQnl0ZXMoMTAw
KTsKKworICAgIC8vIEluc2VydCAxMDAgZW50cmllcy4KKyAgICAvLyBDYWNoZSBlbnRyaWVzIHN0
b3JlZCBzaG91bGQgaW5jcmVhc2UgYW5kIGV2ZW50dWFsbHkgZGVjcmVhc2UgdG8gMS4KKyAgICBp
bnNlcnRDYWNoZShTa0lTaXplOjpNYWtlKDEsIDEpKTsKKyAgICBpbnNlcnRDYWNoZShTa0lTaXpl
OjpNYWtlKDIsIDIpKTsKKyAgICBpbnNlcnRDYWNoZShTa0lTaXplOjpNYWtlKDMsIDMpKTsKKyAg
ICBFWFBFQ1RfRVEoM3UsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRy
aWVzKCkpOworCisgICAgZm9yIChpbnQgaSA9IDQ7IGkgPD0gMTAwOyArK2kpCisgICAgICAgIGlu
c2VydENhY2hlKFNrSVNpemU6Ok1ha2UoaSwgaSkpOworCisgICAgRVhQRUNUX0VRKDF1LCBJbWFn
ZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKKyAgICBmb3IgKGlu
dCBpID0gMTsgaSA8PSA5OTsgKytpKQorICAgICAgICBFWFBFQ1RfRkFMU0UoaXNDYWNoZUFsaXZl
KFNrSVNpemU6Ok1ha2UoaSwgaSkpKTsKKyAgICBFWFBFQ1RfVFJVRShpc0NhY2hlQWxpdmUoU2tJ
U2l6ZTo6TWFrZSgxMDAsIDEwMCkpKTsKK30KKworVEVTVF9GKEltYWdlRGVjb2RpbmdTdG9yZVRl
c3QsIGNhY2hlSW5Vc2VOb3RFdmljdGVkKQoreworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1h
a2UoMSwgMSkpOworICAgIGluc2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMiwgMikpOworICAgIGlu
c2VydENhY2hlKFNrSVNpemU6Ok1ha2UoMywgMykpOworICAgIEVYUEVDVF9FUSgzdSwgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CisKKyAgICBjb25zdCBT
Y2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSA9IGxvY2tDYWNoZShTa0lTaXplOjpNYWtl
KDEsIDEpKTsKKyAgICBFWFBFQ1RfVFJVRShjYWNoZWRJbWFnZSk7CisKKyAgICAvLyBDYWNoZSAy
IGlzIGV2aWN0ZWQgYmVjYXVzZSBjYWNoZSAxIGlzIGluIHVzZS4KKyAgICBldmljdE9uZUNhY2hl
KCk7CisgICAgRVhQRUNUX1RSVUUoaXNDYWNoZUFsaXZlKFNrSVNpemU6Ok1ha2UoMSwgMSkpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoaXNDYWNoZUFsaXZlKFNrSVNpemU6Ok1ha2UoMiwgMikpKTsKKyAg
ICBFWFBFQ1RfVFJVRShpc0NhY2hlQWxpdmUoU2tJU2l6ZTo6TWFrZSgzLCAzKSkpOworCisgICAg
RVhQRUNUX0VRKDJ1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmll
cygpKTsKKyAgICB1bmxvY2tDYWNoZShjYWNoZWRJbWFnZSk7Cit9CisKK1RFU1RfRihJbWFnZURl
Y29kaW5nU3RvcmVUZXN0LCBkZXN0cm95SW1hZ2VGcmFtZUdlbmVyYXRvcikKK3sKKyAgICBpbnNl
cnRDYWNoZShTa0lTaXplOjpNYWtlKDEsIDEpKTsKKyAgICBpbnNlcnRDYWNoZShTa0lTaXplOjpN
YWtlKDIsIDIpKTsKKyAgICBpbnNlcnRDYWNoZShTa0lTaXplOjpNYWtlKDMsIDMpKTsKKyAgICBF
WFBFQ1RfRVEoM3UsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVz
KCkpOworCisgICAgbV9nZW5lcmF0b3IuY2xlYXIoKTsKKyAgICBFWFBFQ1RfRkFMU0UoSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>