<?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>106557</bug_id>
          
          <creation_ts>2013-01-10 05:52:22 -0800</creation_ts>
          <short_desc>[V8] Do not create a local handle for a cached v8 string that is returned to V8 immediately</short_desc>
          <delta_ts>2013-01-11 12:29: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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>dcarney</cc>
    
    <cc>japhet</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>804300</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-01-10 05:52:22 -0800</bug_when>
    <thetext>Currently we are always creating a local handle for a cached V8 string returned to V8:

  Handle&lt;Value&gt; v8String(StringImpl* impl, Isolate* isolate) {
    ...;
    return Local&lt;String&gt;::New(isolate, m_cachedString);
  }

However, we don&apos;t need to create a local handle in a case where it is guaranteed that no V8 object allocation is conducted before a control flow returns back to V8. In particular, in a case where a cached V8 string is immediately returned to V8, we don&apos;t need to create a local handle:

  Handle&lt;Value&gt; xxxxAttrGetter() {
    ...;
    return v8String(imp-&gt;xxxx(), isolate);  // This can return a persistent handle safely.
  }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804303</commentid>
    <comment_count>1</comment_count>
      <attachid>182121</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-01-10 05:55:13 -0800</bug_when>
    <thetext>Created attachment 182121
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804305</commentid>
    <comment_count>2</comment_count>
      <attachid>182123</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-01-10 05:57:01 -0800</bug_when>
    <thetext>Created attachment 182123
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804633</commentid>
    <comment_count>3</comment_count>
      <attachid>182123</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-10 12:24:08 -0800</bug_when>
    <thetext>Comment on attachment 182123
Patch

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

&gt; Source/WebCore/bindings/v8/V8Binding.h:148
&gt; -    inline v8::Handle&lt;v8::String&gt; v8String(const String&amp; string, v8::Isolate* isolate = 0)
&gt; +    inline v8::Handle&lt;v8::String&gt; v8String(const String&amp; string, v8::Isolate* isolate = 0, bool canReturnPersistentHandle = false)

Can we use an enum rather than a boolean parameter?  In this patch, the call sites have this mysterious &quot;true&quot; at the end that&apos;s likely to be misunderstood in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804634</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-10 12:25:00 -0800</bug_when>
    <thetext>The V8 team also cautioned us to make sure we can move GC safety at compile time.  Is there any kind of compile-time (or even runtime) check to make sure that people use this flag safely in the future?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805041</commentid>
    <comment_count>5</comment_count>
      <attachid>182284</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-01-11 00:45:18 -0800</bug_when>
    <thetext>Created attachment 182284
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805042</commentid>
    <comment_count>6</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-01-11 00:46:54 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Is there any kind of compile-time (or even runtime) check to make sure that people use this flag safely in the future?

Do you have any idea? &quot;Make ReturnLocalHandle a default parameter and use ReturnPersistentHandle only in auto-generated code&quot; is the current approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805050</commentid>
    <comment_count>7</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2013-01-11 01:03:58 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; Is there any kind of compile-time (or even runtime) check to make sure that people use this flag safely in the future?
&gt; 
&gt; Do you have any idea? &quot;Make ReturnLocalHandle a default parameter and use ReturnPersistentHandle only in auto-generated code&quot; is the current approach.

We could wrap the handle in a class in debug mode, UnsafePersistent or something, ( a typedef when not) which asserts when disposed handles are found on any access.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805057</commentid>
    <comment_count>8</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-01-11 01:19:18 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; We could wrap the handle in a class in debug mode, UnsafePersistent or something, ( a typedef when not) which asserts when disposed handles are found on any access.

That&apos;s possible but that&apos;s not perfect because disposed handles can be resurrected. (I&apos;ve observed bugs caused by resurrection.) I agree that the access check you&apos;re proposing is helpful but I might not want to complicate the code for something non-perfect...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805067</commentid>
    <comment_count>9</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2013-01-11 01:38:39 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; We could wrap the handle in a class in debug mode, UnsafePersistent or something, ( a typedef when not) which asserts when disposed handles are found on any access.
&gt; 
&gt; That&apos;s possible but that&apos;s not perfect because disposed handles can be resurrected. (I&apos;ve observed bugs caused by resurrection.) I agree that the access check you&apos;re proposing is helpful but I might not want to complicate the code for something non-perfect...

A perfect solution would be add a pointer to the raw handle in the debug object and compare with it on access.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805369</commentid>
    <comment_count>10</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-01-11 10:23:23 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; A perfect solution would be add a pointer to the raw handle in the debug object and compare with it on access.

I discussed this with Dan offline. The approach is implementing a proxy class for Persistent:

#if DEBUG
template&lt;typename T&gt;
class UnsafePersistent {
  UnsafePersistent(handle) {
    handle_ = handle;
    original_object_ = **handle;
  }

  bool IsWeak() {
    // Checks that GC hasn&apos;t happened.
    ASSERT(original_object_ == **handle_);
    return handle_.IsWeak();
  }

  // Write all other methods for Persistent

  Persistent&lt;T&gt; handle_;
  void* original_object_;
};
#else
typedef UnsafePersistent Persistent
#endif

Then we can replace a bunch of existing Persistents in V8 bindings with UnsafePersistents.

Actually, I guess that this would be a bit over-engineering and this messes up the code base.

IMHO, &quot;make ReturnLocalHandle a default parameter, use ReturnPersistentHandle only in auto-generated code, and write a comment about it&quot; might be better here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805408</commentid>
    <comment_count>11</comment_count>
      <attachid>182284</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-11 10:48:00 -0800</bug_when>
    <thetext>Comment on attachment 182284
Patch

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

&gt; Source/WebCore/bindings/scripts/test/V8/V8TestInterface.cpp:62
&gt; +    return v8String(TestSupplemental::supplementalStaticAttr(), info.GetIsolate(), ReturnPersistentHandle);

ReturnPersistentHandle -&gt; ReturnWeakHandle? ReturnUnsafeHandle?

We want to pick a name that communicates the danger.  ReturnPersistentHandle makes it sound like the hand that gets return is going to stick around persistently, which is the opposite of the truth!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805425</commentid>
    <comment_count>12</comment_count>
      <attachid>182371</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-01-11 11:03:47 -0800</bug_when>
    <thetext>Created attachment 182371
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805426</commentid>
    <comment_count>13</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-01-11 11:04:44 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; ReturnPersistentHandle -&gt; ReturnWeakHandle? ReturnUnsafeHandle?

Fixed. And added a comment about the situation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805451</commentid>
    <comment_count>14</comment_count>
      <attachid>182371</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-11 11:29:03 -0800</bug_when>
    <thetext>Comment on attachment 182371
patch for landing

Clearing flags on attachment: 182371

Committed r139469: &lt;http://trac.webkit.org/changeset/139469&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805454</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-11 11:29:07 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805504</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-11 12:14:32 -0800</bug_when>
    <thetext>This patch caused binding tests to fail.

http://build.webkit.org/builders/Apple%20MountainLion%20Release%20WK1%20%28Tests%29/builds/5580/steps/bindings-generation-tests/logs/stdio

Maybe you just need to reabseline it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805507</commentid>
    <comment_count>17</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-01-11 12:15:31 -0800</bug_when>
    <thetext>(In reply to comment #16)
http://build.webkit.org/builders/Apple%20MountainLion%20Release%20WK1%20%28Tests%29/builds/5580/steps/bindings-generation-tests/logs/stdio
&gt; 
&gt; Maybe you just need to reabseline it?

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805521</commentid>
    <comment_count>18</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-01-11 12:23:16 -0800</bug_when>
    <thetext>Fixed in r139483.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805530</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-11 12:29:29 -0800</bug_when>
    <thetext>Thanks.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182121</attachid>
            <date>2013-01-10 05:55:13 -0800</date>
            <delta_ts>2013-01-10 05:56:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106557-20130110145215.patch</filename>
            <type>text/plain</type>
            <size>23115</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTc3MWY2YTNkZDZjNTY2
ZjBkZDMxZTI1OWRmNmI4YmYyMWNjNjA4My4uZTYyODQ1ODc2YTZhOTdmZDNiMWI5MGQxZjg4NzBi
ZGRkMmE5ZDljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDEzLTAxLTEwICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIERvIG5vdCBj
cmVhdGUgYSBsb2NhbCBoYW5kbGUgZm9yIGEgY2FjaGVkIHY4IHN0cmluZyB0aGF0IGlzIHJldHVy
bmVkIHRvIFY4IGltbWVkaWF0ZWx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDY1NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDdXJyZW50bHkgd2UgYXJlIGFsd2F5cyBjcmVhdGluZyBhIGxvY2FsIGhh
bmRsZSBmb3IgYSBjYWNoZWQKKyAgICAgICAgVjggc3RyaW5nIHJldHVybmVkIHRvIFY4OgorCisg
ICAgICAgICAgSGFuZGxlPFZhbHVlPiB2OFN0cmluZyhTdHJpbmdJbXBsKiBpbXBsLCBJc29sYXRl
KiBpc29sYXRlKSB7CisgICAgICAgICAgICAuLi47CisgICAgICAgICAgICByZXR1cm4gTG9jYWw8
U3RyaW5nPjo6TmV3KGlzb2xhdGUsIG1fY2FjaGVkU3RyaW5nKTsKKyAgICAgICAgICB9CisKKyAg
ICAgICAgSG93ZXZlciwgd2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSBsb2NhbCBoYW5kbGUgaW4g
YSBjYXNlCisgICAgICAgIHdoZXJlIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCBubyBWOCBvYmplY3Qg
YWxsb2NhdGlvbiBpcyBjb25kdWN0ZWQKKyAgICAgICAgYmVmb3JlIGEgY29udHJvbCBmbG93IHJl
dHVybnMgYmFjayB0byBWOC4gSW4gcGFydGljdWxhciwgaW4gYSBjYXNlCisgICAgICAgIHdoZXJl
IGEgY2FjaGVkIFY4IHN0cmluZyBpcyBpbW1lZGlhdGVseSByZXR1cm5lZCB0byBWOCwgd2UgZG9u
J3QKKyAgICAgICAgbmVlZCB0byBjcmVhdGUgYSBsb2NhbCBoYW5kbGU6CisKKyAgICAgICAgICBI
YW5kbGU8VmFsdWU+IHh4eHhBdHRyR2V0dGVyKCkgeworICAgICAgICAgICAgLi4uOworICAgICAg
ICAgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+eHh4eCgpLCBpc29sYXRlKTsgIC8vIFRoaXMgY2Fu
IHJldHVybiBhIHBlcnNpc3RlbnQgaGFuZGxlIHNhZmVseS4KKyAgICAgICAgICB9CisKKyAgICAg
ICAgTm8gdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAoR2VuZXJhdGVOb3JtYWxBdHRy
R2V0dGVyKToKKyAgICAgICAgKEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbik6CisgICAg
ICAgIChHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZyk6CisgICAgICAgIChOYXRpdmVUb0pTVmFs
dWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yVjhJbnRl
cm5hbDo6YXR0cjFBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RFdmVudENvbnN0
cnVjdG9yVjhJbnRlcm5hbDo6YXR0cjJBdHRyR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RFeGNlcHRpb25WOEludGVybmFsOjpuYW1lQXR0ckdldHRlcik6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXN0SW50ZXJmYWNlVjhJbnRlcm5hbDo6c3VwcGxlbWVudGFsU3RhdGljQXR0ckF0dHJHZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEludGVyZmFjZVY4SW50ZXJuYWw6OnN1cHBsZW1l
bnRhbFN0cjFBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RJbnRlcmZhY2VWOElu
dGVybmFsOjpzdXBwbGVtZW50YWxTdHIyQXR0ckdldHRlcik6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2Jq
VjhJbnRlcm5hbDo6cmVhZE9ubHlTdHJpbmdBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6c3RhdGljU3RyaW5nQXR0ckF0dHJHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnN0cmluZ0F0dHJBdHRyR2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpyZWZsZWN0ZWRTdHJpbmdBdHRy
QXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVj
dGVkVVJMQXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJu
YWw6OnJlZmxlY3RlZEN1c3RvbVVSTEF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RPYmpWOEludGVybmFsOjpzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnN0cmluZ0F0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6aGFzaEF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50
ZXJuYWw6OmNvbmRpdGlvbmFsTWV0aG9kMUNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOEJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OnY4U3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OnY4U3RyaW5nT3JOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OnY4U3RyaW5nT3JVbmRl
ZmluZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4VmFsdWVDYWNoZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHJpbmdDYWNoZTo6djhFeHRlcm5hbFN0cmluZ1Nsb3cpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1Y4VmFsdWVDYWNoZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nQ2Fj
aGU6OnY4RXh0ZXJuYWxTdHJpbmcpOgorICAgICAgICAoU3RyaW5nQ2FjaGUpOgorCiAyMDEzLTAx
LTA5ICBaZW5vIEFsYmlzc2VyICA8emVub0B3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF1bTWFj
XSBHcmFwaGljc1N1cmZhY2UgZG9lcyBub3QgbmVlZCBnbEVuYWJsZS9nbERpc2FibGUgZm9yIHRl
eHR1cmUgdGFyZ2V0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0KaW5kZXggMDdjYjJkZDg1NTc2ZDI0ZWQzNDcxNjYzZDlhNGFhYjcx
ZjdhNjU4YS4uYzA4MzBkMDRiZGFkNTAxMjQzNTZiMjNlYjI5MTQwODFkYTY2NjNmNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0K
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0K
QEAgLTkyOSw3ICs5MjksNyBAQCBFTkQKICAgICAgICAgICAgICMgR2VuZXJhdGUgc3VwZXItY29t
cGFjdCBjYWxsIGZvciByZWd1bGFyIGF0dHJpYnV0ZSBnZXR0ZXI6CiAgICAgICAgICAgICBteSAo
JGZ1bmN0aW9uTmFtZSwgQGFyZ3VtZW50cykgPSAkY29kZUdlbmVyYXRvci0+R2V0dGVyRXhwcmVz
c2lvbihcJWltcGxJbmNsdWRlcywgJGludGVyZmFjZU5hbWUsICRhdHRyaWJ1dGUpOwogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBFbGVtZW50KiBpbXAgPSBWOEVsZW1l
bnQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiICAgIHJldHVybiB2OFN0cmluZyhpbXAtPiR7ZnVuY3Rpb25OYW1lfSgi
IC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpLCBpbmZvLkdldElzb2xhdGUoKSk7XG4iKTsK
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHY4U3RyaW5n
KGltcC0+JHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIiksIGlu
Zm8uR2V0SXNvbGF0ZSgpLCB0cnVlKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnREZWNscywgIn1cblxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAi
I2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmlu
ZzsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExMTQsNyArMTExNCw3IEBAIEVORAogICAgIHJl
dHVybiB2YWx1ZTsKIEVORAogICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgcmV0dXJuICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLCAkcmVzdWx0LCAiaW5mby5Ib2xkZXIoKSIsICJpbmZvLkdldElzb2xhdGUoKSIsICJpbmZv
IiwgImltcCIpLiI7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBy
ZXR1cm4gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICRyZXN1bHQs
ICJpbmZvLkhvbGRlcigpIiwgImluZm8uR2V0SXNvbGF0ZSgpIiwgImluZm8iLCAiaW1wIiwgInJl
dHVybiIpLiI7XG4iKTsKICAgICB9CiAKICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAifVxu
XG4iKTsgICMgZW5kIG9mIGdldHRlcgpAQCAtMzM3OSw3ICszMzc5LDcgQEAgRU5ECiAgICAgICAg
ICAgICBAYXJncyA9ICgpOwogICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEBwYXJhbXMp
IHsKICAgICAgICAgICAgICAgICBteSAkcGFyYW1OYW1lID0gJHBhcmFtLT5uYW1lOwotICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAk
e3BhcmFtTmFtZX1IYW5kbGUgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRwYXJhbSwgJHBhcmFtTmFt
ZSkgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+ICR7cGFyYW1OYW1lfUhhbmRsZSA9ICIgLiBOYXRpdmVUb0pTVmFs
dWUoJHBhcmFtLCAkcGFyYW1OYW1lLCAwLCAwLCAwLCAwLCAwKSAuICI7XG4iKTsKICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoJHtwYXJhbU5hbWV9SGFuZGxlLklz
RW1wdHkoKSkge1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIGlmICghaXNTY3JpcHRDb250cm9sbGVyVGVybWluYXRpbmcoKSlcbiIpOwogICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgQ1JBU0goKTtcbiIpOwpAQCAt
MzYxOCw5ICszNjE4LDkgQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKCkKICAgICBt
eSAkbmF0aXZlVmFsdWU7CiAgICAgIyBGSVhNRTogVXBkYXRlIGZvciBhbGwgU2NyaXB0V3JhcHBh
Ymxlcy4KICAgICBpZiAoSXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSkpIHsKLSAgICAgICAg
JG5hdGl2ZVZhbHVlID0gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkcmV0
dXJuLCAiYXJncy5Ib2xkZXIoKSIsICJhcmdzLkdldElzb2xhdGUoKSIsICJhcmdzIiwgImltcCIp
OworICAgICAgICAkbmF0aXZlVmFsdWUgPSBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWdu
YXR1cmUsICRyZXR1cm4sICJhcmdzLkhvbGRlcigpIiwgImFyZ3MuR2V0SXNvbGF0ZSgpIiwgImFy
Z3MiLCAiaW1wIiwgInJldHVybiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgICRuYXRpdmVWYWx1
ZSA9IE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgJHJldHVybiwgImFyZ3Mu
SG9sZGVyKCkiLCAiYXJncy5HZXRJc29sYXRlKCkiKTsKKyAgICAgICAgJG5hdGl2ZVZhbHVlID0g
TmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkcmV0dXJuLCAiYXJncy5Ib2xk
ZXIoKSIsICJhcmdzLkdldElzb2xhdGUoKSIsIDAsIDAsICJyZXR1cm4iKTsKICAgICB9CiAKICAg
ICAkcmVzdWx0IC49ICRpbmRlbnQgLiAicmV0dXJuICIgLiAkbmF0aXZlVmFsdWUgLiAiO1xuIjsK
QEAgLTQwMzAsNiArNDAzMCw5IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICBteSAkZ2V0SG9s
ZGVyQ29udGFpbmVyQXJnID0gJGdldEhvbGRlckNvbnRhaW5lciA/ICIsICRnZXRIb2xkZXJDb250
YWluZXIiIDogIiI7CiAgICAgbXkgJGdldFNjcmlwdFdyYXBwYWJsZSA9IHNoaWZ0OwogICAgIG15
ICRnZXRTY3JpcHRXcmFwcGFibGVBcmcgPSAkZ2V0U2NyaXB0V3JhcHBhYmxlID8gIiwgJGdldFNj
cmlwdFdyYXBwYWJsZSIgOiAiIjsKKyAgICBteSAkaW1tZWRpYXRlUmV0dXJuID0gc2hpZnQ7Cisg
ICAgbXkgJGNhblJldHVyblBlcnNpc3RlbnRIYW5kbGUgPSAkaW1tZWRpYXRlUmV0dXJuID8gIiwg
dHJ1ZSIgOiAiIjsKKwogICAgIG15ICR0eXBlID0gJHNpZ25hdHVyZS0+dHlwZTsKIAogICAgIHJl
dHVybiAoJGdldElzb2xhdGUgPyAidjhCb29sZWFuKCR2YWx1ZSwgJGdldElzb2xhdGUpIiA6ICJ2
OEJvb2xlYW4oJHZhbHVlKSIpIGlmICR0eXBlIGVxICJib29sZWFuIjsKQEAgLTQwNTgsMTIgKzQw
NjEsMTIgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNT
dHJpbmdUeXBlKCR0eXBlKSkgewogICAgICAgICBteSAkY29udiA9ICRzaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzIn07CiAgICAgICAgIGlm
IChkZWZpbmVkICRjb252KSB7Ci0gICAgICAgICAgICByZXR1cm4gInY4U3RyaW5nT3JOdWxsKCR2
YWx1ZSRnZXRJc29sYXRlQXJnKSIgaWYgJGNvbnYgZXEgIk51bGwiOwotICAgICAgICAgICAgcmV0
dXJuICJ2OFN0cmluZ09yVW5kZWZpbmVkKCR2YWx1ZSRnZXRJc29sYXRlQXJnKSIgaWYgJGNvbnYg
ZXEgIlVuZGVmaW5lZCI7CisgICAgICAgICAgICByZXR1cm4gInY4U3RyaW5nT3JOdWxsKCR2YWx1
ZSRnZXRJc29sYXRlQXJnJGNhblJldHVyblBlcnNpc3RlbnRIYW5kbGUpIiBpZiAkY29udiBlcSAi
TnVsbCI7CisgICAgICAgICAgICByZXR1cm4gInY4U3RyaW5nT3JVbmRlZmluZWQoJHZhbHVlJGdl
dElzb2xhdGVBcmckY2FuUmV0dXJuUGVyc2lzdGVudEhhbmRsZSkiIGlmICRjb252IGVxICJVbmRl
ZmluZWQiOwogCiAgICAgICAgICAgICBkaWUgIlVua25vd24gdmFsdWUgZm9yIFRyZWF0UmV0dXJu
ZWROdWxsU3RyaW5nQXMgZXh0ZW5kZWQgYXR0cmlidXRlIjsKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gJGdldElzb2xhdGUgPyAidjhTdHJpbmcoJHZhbHVlLCAkZ2V0SXNvbGF0ZSkiIDogImRl
cHJlY2F0ZWRWOFN0cmluZygkdmFsdWUpIjsKKyAgICAgICAgcmV0dXJuICRnZXRJc29sYXRlID8g
InY4U3RyaW5nKCR2YWx1ZSRnZXRJc29sYXRlQXJnJGNhblJldHVyblBlcnNpc3RlbnRIYW5kbGUp
IiA6ICJkZXByZWNhdGVkVjhTdHJpbmcoJHZhbHVlKSI7CiAgICAgfQogCiAgICAgbXkgJGFycmF5
VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEV2ZW50Q29uc3RydWN0b3IuY3BwCmluZGV4IDEzZDAxMTA1ZmUwZWQyZTJkYzU3ZjI0OWU3MDlk
OThiNjU5NzcwZjUuLjIxOGUxMzg1Nzc4ZGM1YTI4MTM1ZDE4OWU2MDYwMDYwYzI3YzAxMWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RF
dmVudENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTQxLDEzICs0MSwxMyBAQCB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBWOF9VU0UoVCkgeyB9CiBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGF0dHIxQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciogaW1wID0gVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7
Ci0gICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+YXR0cjEoKSwgaW5mby5HZXRJc29sYXRlKCkpOwor
ICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmF0dHIxKCksIGluZm8uR2V0SXNvbGF0ZSgpLCB0cnVl
KTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhdHRyMkF0dHJHZXR0ZXIodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7
CiAgICAgVGVzdEV2ZW50Q29uc3RydWN0b3IqIGltcCA9IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmF0dHIy
KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5hdHRyMigp
LCBpbmZvLkdldElzb2xhdGUoKSwgdHJ1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RFdmVu
dENvbnN0cnVjdG9yVjhJbnRlcm5hbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcAppbmRleCBmYmU5NzVl
N2VlZTQwNWRjMDA2YmJmMjAzYzE0NjIwN2ZhZGU1MmJjLi41MmU3OGJiOWQwNjUwMTRmZjMyODc0
OTdkOTY5NzM1ODU5ZDdjMmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcApAQCAtNDAsNyArNDAs
NyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBWOF9VU0UoVCkgeyB9CiBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IG5hbWVBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RFeGNlcHRpb24q
IGltcCA9IFY4VGVzdEV4Y2VwdGlvbjo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0
dXJuIHY4U3RyaW5nKGltcC0+bmFtZSgpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJu
IHY4U3RyaW5nKGltcC0+bmFtZSgpLCBpbmZvLkdldElzb2xhdGUoKSwgdHJ1ZSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFRlc3RFeGNlcHRpb25WOEludGVybmFsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3Bw
CmluZGV4IDg5N2YwYzU3OWIwY2Y0NGI4YzJiYmQ0NTllNjNhN2QwNzEzMDI3YmYuLjY3MjUwYmYz
MDExODJkNTI5ZDA0YTk4ZTIxYzY3ZjhhYzJkYjA0YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3Bw
CkBAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVu
dGFsU3RhdGljUmVhZE9ubHlBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8CiAKIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVudGFsU3RhdGljQXR0ckF0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7Ci0g
ICAgcmV0dXJuIHY4U3RyaW5nKFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0YXRpY0F0
dHIoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB2OFN0cmluZyhUZXN0U3VwcGxl
bWVudGFsOjpzdXBwbGVtZW50YWxTdGF0aWNBdHRyKCksIGluZm8uR2V0SXNvbGF0ZSgpLCB0cnVl
KTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjEyKQpAQCAtODAsNyArODAsNyBAQCBzdGF0aWMgdm9pZCBzdXBwbGVtZW50YWxTdGF0aWNBdHRy
QXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvYwogc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBwbGVtZW50YWxTdHIxQXR0ckdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBU
ZXN0SW50ZXJmYWNlKiBpbXAgPSBWOFRlc3RJbnRlcmZhY2U6OnRvTmF0aXZlKGluZm8uSG9sZGVy
KCkpOwotICAgIHJldHVybiB2OFN0cmluZyhUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxT
dHIxKGltcCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoVGVzdFN1
cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMShpbXApLCBpbmZvLkdldElzb2xhdGUoKSwgdHJ1
ZSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRp
b24xMikKQEAgLTkwLDcgKzkwLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBw
bGVtZW50YWxTdHIxQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmEKIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVudGFsU3RyMkF0dHJHZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAg
VGVzdEludGVyZmFjZSogaW1wID0gVjhUZXN0SW50ZXJmYWNlOjp0b05hdGl2ZShpbmZvLkhvbGRl
cigpKTsKLSAgICByZXR1cm4gdjhTdHJpbmcoVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFs
U3RyMihpbXApLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5nKFRlc3RT
dXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0cjIoaW1wKSwgaW5mby5HZXRJc29sYXRlKCksIHRy
dWUpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RPYmouY3BwCmluZGV4IDNmYzI4YmRmZTJhNzI3MzZmZTA3NzU2ZTJmOTcyZjdkNTc2
ZmFlZDkuLmVhYjEzOTMxMTRjNDg2Zjg4NTdhMjMwMDAyZTVkZDFmZGMwZjY5M2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmou
Y3BwCkBAIC05MCw3ICs5MCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVhZE9u
bHlMb25nQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hCiBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHJlYWRPbmx5U3RyaW5nQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAg
VGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBy
ZXR1cm4gdjhTdHJpbmcoaW1wLT5yZWFkT25seVN0cmluZ0F0dHIoKSwgaW5mby5HZXRJc29sYXRl
KCkpOworICAgIHJldHVybiB2OFN0cmluZyhpbXAtPnJlYWRPbmx5U3RyaW5nQXR0cigpLCBpbmZv
LkdldElzb2xhdGUoKSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
cmVhZE9ubHlUZXN0T2JqQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0xMTMsNyArMTEzLDcgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdGF0aWNSZWFkT25seUxvbmdBdHRyQXR0ckdldHRlcih2
ODo6TG9jYWw8djg6OlN0cmkKIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdGF0aWNT
dHJpbmdBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKLSAgICByZXR1cm4gdjhTdHJpbmcoVGVzdE9iajo6c3Rh
dGljU3RyaW5nQXR0cigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5n
KFRlc3RPYmo6OnN0YXRpY1N0cmluZ0F0dHIoKSwgaW5mby5HZXRJc29sYXRlKCksIHRydWUpOwog
fQogCiBzdGF0aWMgdm9pZCBzdGF0aWNTdHJpbmdBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6
OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCkBAIC0xOTYsNyArMTk2LDcgQEAgc3RhdGljIHZvaWQgdW5zaWduZWRM
b25nTG9uZ0F0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9j
YWwKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaW5nQXR0ckF0dHJHZXR0ZXIodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7
CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
LSAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5zdHJpbmdBdHRyKCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5zdHJpbmdBdHRyKCksIGluZm8uR2V0SXNvbGF0
ZSgpLCB0cnVlKTsKIH0KIAogc3RhdGljIHZvaWQgc3RyaW5nQXR0ckF0dHJTZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtMjU0LDcgKzI1NCw3IEBAIHN0YXRpYyB2b2lkIGNy
ZWF0ZUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3RlZFN0cmluZ0F0
dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUo
aW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+ZmFzdEdldEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSwgaW5mby5HZXRJ
c29sYXRlKCkpOworICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmZhc3RHZXRBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0ciksIGluZm8uR2V0SXNvbGF0
ZSgpLCB0cnVlKTsKIH0KIAogc3RhdGljIHZvaWQgcmVmbGVjdGVkU3RyaW5nQXR0ckF0dHJTZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtMzEwLDcgKzMxMCw3IEBAIHN0YXRp
YyB2b2lkIHJlZmxlY3RlZEJvb2xlYW5BdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgdjg6OkxvY2FsCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3Rl
ZFVSTEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9O
YXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+Z2V0VVJMQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIpLCBpbmZvLkdl
dElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+Z2V0VVJMQXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIpLCBpbmZvLkdldElzb2xhdGUo
KSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlZmxlY3RlZFVSTEF0dHJBdHRyU2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTMyNCw3ICszMjQsNyBAQCBzdGF0aWMgdm9p
ZCByZWZsZWN0ZWRVUkxBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
djg6OkxvY2FsPHY4Ogogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWZsZWN0ZWRTdHJp
bmdBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0
aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmZhc3RHZXRBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIpLCBp
bmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+ZmFzdEdldEF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0ciksIGlu
Zm8uR2V0SXNvbGF0ZSgpLCB0cnVlKTsKIH0KIAogc3RhdGljIHZvaWQgcmVmbGVjdGVkU3RyaW5n
QXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtMzY2LDcgKzM2
Niw3IEBAIHN0YXRpYyB2b2lkIHJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyQXR0clNldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6CiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHJlZmxlY3RlZEN1c3RvbVVSTEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGlt
cCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4U3Ry
aW5nKGltcC0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVu
dFVSTEF0dHJBdHRyKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB2OFN0cmluZyhp
bXAtPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxB
dHRyQXR0ciksIGluZm8uR2V0SXNvbGF0ZSgpLCB0cnVlKTsKIH0KIAogc3RhdGljIHZvaWQgcmVm
bGVjdGVkQ3VzdG9tVVJMQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQpAQCAtNDMzLDcgKzQzMyw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaW5n
QXR0cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKHY4OjpMb2NhbDx2CiAgICAgU3RyaW5n
IHYgPSBpbXAtPnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKTsKICAgICBpZiAoVU5M
SUtFTFkoZWMpKQogICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBpbmZvLkdldElz
b2xhdGUoKSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKHYsIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAg
ICByZXR1cm4gdjhTdHJpbmcodiwgaW5mby5HZXRJc29sYXRlKCksIHRydWUpOwogfQogCiBzdGF0
aWMgdm9pZCBzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJTZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIHN0YXRpYyB2b2lkIHN0cmlu
Z0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaW5nQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb25BdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9O
YXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+c3RyaW5nQXR0
cldpdGhTZXR0ZXJFeGNlcHRpb24oKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB2
OFN0cmluZyhpbXAtPnN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCksIGluZm8uR2V0SXNv
bGF0ZSgpLCB0cnVlKTsKIH0KIAogc3RhdGljIHZvaWQgc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb25BdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6
OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTkxMyw3ICs5
MTMsNyBAQCBzdGF0aWMgdm9pZCBpZEF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBoYXNoQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRv
TmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmhhc2goKSwg
aW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmhhc2goKSwgaW5m
by5HZXRJc29sYXRlKCksIHRydWUpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHJlcGxhY2VhYmxlQXR0cmlidXRlQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTEzNzEsNyArMTM3MSw3IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxB
cmdDYWxsYmFjayhjb25zdCB2ODo6CiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbmRp
dGlvbmFsTWV0aG9kMUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAg
VGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBy
ZXR1cm4gdjhTdHJpbmcoaW1wLT5jb25kaXRpb25hbE1ldGhvZDEoKSwgYXJncy5HZXRJc29sYXRl
KCkpOworICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmNvbmRpdGlvbmFsTWV0aG9kMSgpLCBhcmdz
LkdldElzb2xhdGUoKSwgdHJ1ZSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKaW5kZXggMWMzZTk1MTEzMGEwZjE5
OTQwZTYwMGFiNzExZTA5YWUxMWIxOTkxOC4uMWYzOWM0NTJiYWE2ODA2OTJlNDBkMGMyMzcwZWJk
ZWNhYjU2ODk3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKQEAgLTE0
NSwxMyArMTQ1LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBSZXR1cm4gYSBWOCBl
eHRlcm5hbCBzdHJpbmcgdGhhdCBzaGFyZXMgdGhlIHVuZGVybHlpbmcgYnVmZmVyIHdpdGggdGhl
IGdpdmVuCiAgICAgLy8gV2ViQ29yZSBzdHJpbmcuIFRoZSByZWZlcmVuY2UgY291bnRpbmcgbWVj
aGFuaXNtIGlzIHVzZWQgdG8ga2VlcCB0aGUKICAgICAvLyB1bmRlcmx5aW5nIGJ1ZmZlciBhbGl2
ZSB3aGlsZSB0aGUgc3RyaW5nIGlzIHN0aWxsIGxpdmUgaW4gdGhlIFY4IGVuZ2luZS4KLSAgICBp
bmxpbmUgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmlu
Zywgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQorICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpT
dHJpbmc+IHY4U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB2ODo6SXNvbGF0ZSogaXNvbGF0
ZSA9IDAsIGJvb2wgY2FuUmV0dXJuUGVyc2lzdGVudEhhbmRsZSA9IGZhbHNlKQogICAgIHsKICAg
ICAgICAgaWYgKFVOTElLRUxZKCFpc29sYXRlKSkKICAgICAgICAgICAgIGlzb2xhdGUgPSB2ODo6
SXNvbGF0ZTo6R2V0Q3VycmVudCgpOwogICAgICAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKQogICAg
ICAgICAgICAgcmV0dXJuIHY4OjpTdHJpbmc6OkVtcHR5KGlzb2xhdGUpOwotICAgICAgICByZXR1
cm4gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+c3RyaW5nQ2FjaGUoKS0+djhFeHRl
cm5hbFN0cmluZyhzdHJpbmcuaW1wbCgpLCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIFY4UGVy
SXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPnN0cmluZ0NhY2hlKCktPnY4RXh0ZXJuYWxTdHJp
bmcoc3RyaW5nLmltcGwoKSwgY2FuUmV0dXJuUGVyc2lzdGVudEhhbmRsZSwgaXNvbGF0ZSk7CiAg
ICAgfQogCiAgICAgLy8gRklYTUU6IEFsbCBjYWxsIHNpdGVzIG9mIHRoaXMgbWV0aG9kIHNob3Vs
ZCB1c2UgdjhTdHJpbmcoKS4KQEAgLTE2MCwyMCArMTYwLDIwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgcmV0dXJuIHY4U3RyaW5nKHN0cmluZywgdjg6Oklzb2xhdGU6OkdldEN1cnJl
bnQoKSk7CiAgICAgfQogCi0gICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFN0cmlu
Z09yTnVsbChjb25zdCBTdHJpbmcmIHN0cmluZywgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCisgICAg
aW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFN0cmluZ09yTnVsbChjb25zdCBTdHJpbmcm
IHN0cmluZywgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIGJvb2wgY2FuUmV0dXJuUGVyc2lzdGVudEhh
bmRsZSA9IGZhbHNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzb2xhdGUpOwogICAgICAgICBp
ZiAoc3RyaW5nLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHY4TnVsbChpc29sYXRlKTsK
LSAgICAgICAgcmV0dXJuIFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPnN0cmluZ0Nh
Y2hlKCktPnY4RXh0ZXJuYWxTdHJpbmcoc3RyaW5nLmltcGwoKSwgaXNvbGF0ZSk7CisgICAgICAg
IHJldHVybiBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5zdHJpbmdDYWNoZSgpLT52
OEV4dGVybmFsU3RyaW5nKHN0cmluZy5pbXBsKCksIGNhblJldHVyblBlcnNpc3RlbnRIYW5kbGUs
IGlzb2xhdGUpOwogICAgIH0KIAotICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhT
dHJpbmdPclVuZGVmaW5lZChjb25zdCBTdHJpbmcmIHN0cmluZywgdjg6Oklzb2xhdGUqIGlzb2xh
dGUpCisgICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFN0cmluZ09yVW5kZWZpbmVk
KGNvbnN0IFN0cmluZyYgc3RyaW5nLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgYm9vbCBjYW5SZXR1
cm5QZXJzaXN0ZW50SGFuZGxlID0gZmFsc2UpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNvbGF0
ZSk7CiAgICAgICAgIGlmIChzdHJpbmcuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZChpc29sYXRlKTsKLSAgICAgICAgcmV0dXJuIFY4UGVySXNvbGF0ZURhdGE6OmZy
b20oaXNvbGF0ZSktPnN0cmluZ0NhY2hlKCktPnY4RXh0ZXJuYWxTdHJpbmcoc3RyaW5nLmltcGwo
KSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xh
dGUpLT5zdHJpbmdDYWNoZSgpLT52OEV4dGVybmFsU3RyaW5nKHN0cmluZy5pbXBsKCksIGNhblJl
dHVyblBlcnNpc3RlbnRIYW5kbGUsIGlzb2xhdGUpOwogICAgIH0KIAogICAgIGlubGluZSB2ODo6
SGFuZGxlPHY4OjpJbnRlZ2VyPiB2OEludGVnZXIoaW50IHZhbHVlLCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSA9IDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFZhbHVl
Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhWYWx1ZUNhY2hlLmNwcApp
bmRleCA0ZjgxYjM5OGE0OWNmNmQ1Mzk5N2YzZTEwOWU5NmI2OTRhYmJiYmMyLi40OWRiY2UwN2Zi
NDA3MTRlZTk1NzhlNmE5NDY4NzcxN2U4MzdkNGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4VmFsdWVDYWNoZS5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBTdHJpbmdDYWNo
ZTo6cmVtb3ZlKFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwpCiAgICAgY2xlYXJPbkdDKCk7CiB9CiAK
LXY4OjpMb2NhbDx2ODo6U3RyaW5nPiBTdHJpbmdDYWNoZTo6djhFeHRlcm5hbFN0cmluZ1Nsb3co
U3RyaW5nSW1wbCogc3RyaW5nSW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxl
PHY4OjpTdHJpbmc+IFN0cmluZ0NhY2hlOjp2OEV4dGVybmFsU3RyaW5nU2xvdyhTdHJpbmdJbXBs
KiBzdHJpbmdJbXBsLCBib29sIGNhblJldHVyblBlcnNpc3RlbnRIYW5kbGUsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQogewogICAgIGlmICghc3RyaW5nSW1wbC0+bGVuZ3RoKCkpCiAgICAgICAgIHJl
dHVybiB2ODo6U3RyaW5nOjpFbXB0eShpc29sYXRlKTsKQEAgLTc3LDYgKzc3LDggQEAgdjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IFN0cmluZ0NhY2hlOjp2OEV4dGVybmFsU3RyaW5nU2xvdyhTdHJpbmdJ
bXBsKiBzdHJpbmdJbXBsLAogICAgICAgICBpZiAoaGFuZGxlLklzV2VhaygpKSB7CiAgICAgICAg
ICAgICBtX2xhc3RTdHJpbmdJbXBsID0gc3RyaW5nSW1wbDsKICAgICAgICAgICAgIG1fbGFzdFY4
U3RyaW5nID0gaGFuZGxlOworICAgICAgICAgICAgaWYgKGNhblJldHVyblBlcnNpc3RlbnRIYW5k
bGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKICAgICAgICAgICAgIHJldHVybiB2
ODo6TG9jYWw8djg6OlN0cmluZz46Ok5ldyhoYW5kbGUpOwogICAgICAgICB9CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhWYWx1ZUNhY2hlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuaAppbmRleCAxMGZlNzI0Yjk2YmNh
MTA5Y2FmODcyYWM3OTJkMjk4MTM5ZmU0YzkyLi5iZGVkNTk0OGFiMzdhNzQzNmJmODk3ZWI3ZmJl
MjQ0MDQ4YzJjNTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFZh
bHVlQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUu
aApAQCAtMzksMTIgKzM5LDE1IEBAIGNsYXNzIFN0cmluZ0NhY2hlIHsKIHB1YmxpYzoKICAgICBT
dHJpbmdDYWNoZSgpIHsgfQogCi0gICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4RXh0ZXJuYWxT
dHJpbmcoU3RyaW5nSW1wbCogc3RyaW5nSW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCisgICAg
djg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OEV4dGVybmFsU3RyaW5nKFN0cmluZ0ltcGwqIHN0cmlu
Z0ltcGwsIGJvb2wgY2FuUmV0dXJuUGVyc2lzdGVudEhhbmRsZSwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUpCiAgICAgewotICAgICAgICBpZiAobV9sYXN0U3RyaW5nSW1wbC5nZXQoKSA9PSBzdHJpbmdJ
bXBsICYmIG1fbGFzdFY4U3RyaW5nLklzV2Vhayhpc29sYXRlKSkKKyAgICAgICAgaWYgKG1fbGFz
dFN0cmluZ0ltcGwuZ2V0KCkgPT0gc3RyaW5nSW1wbCAmJiBtX2xhc3RWOFN0cmluZy5Jc1dlYWso
aXNvbGF0ZSkpIHsKKyAgICAgICAgICAgIGlmIChjYW5SZXR1cm5QZXJzaXN0ZW50SGFuZGxlKQor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2xhc3RWOFN0cmluZzsKICAgICAgICAgICAgIHJldHVy
biB2ODo6TG9jYWw8djg6OlN0cmluZz46Ok5ldyhpc29sYXRlLCBtX2xhc3RWOFN0cmluZyk7Cisg
ICAgICAgIH0KIAotICAgICAgICByZXR1cm4gdjhFeHRlcm5hbFN0cmluZ1Nsb3coc3RyaW5nSW1w
bCwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB2OEV4dGVybmFsU3RyaW5nU2xvdyhzdHJpbmdJ
bXBsLCBjYW5SZXR1cm5QZXJzaXN0ZW50SGFuZGxlLCBpc29sYXRlKTsKICAgICB9CiAKICAgICB2
b2lkIGNsZWFyT25HQygpIApAQCAtNTcsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBv
cnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAg
djg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4RXh0ZXJuYWxTdHJpbmdTbG93KFN0cmluZ0ltcGwqLCB2
ODo6SXNvbGF0ZSopOworICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhFeHRlcm5hbFN0cmlu
Z1Nsb3coU3RyaW5nSW1wbCosIGJvb2wsIHY4OjpJc29sYXRlKik7CiAKICAgICBIYXNoTWFwPFN0
cmluZ0ltcGwqLCB2ODo6U3RyaW5nKj4gbV9zdHJpbmdDYWNoZTsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6U3RyaW5nPiBtX2xhc3RWOFN0cmluZzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182123</attachid>
            <date>2013-01-10 05:57:01 -0800</date>
            <delta_ts>2013-01-11 00:45:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106557-20130110145404.patch</filename>
            <type>text/plain</type>
            <size>23177</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTc3MWY2YTNkZDZjNTY2
ZjBkZDMxZTI1OWRmNmI4YmYyMWNjNjA4My4uZmIzNjRkZDEwZTNkNGNkN2UzZDBjZDQwZTViMGVj
YzkxODc4ODYxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEzLTAxLTEwICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIERvIG5vdCBj
cmVhdGUgYSBsb2NhbCBoYW5kbGUgZm9yIGEgY2FjaGVkIHY4IHN0cmluZyB0aGF0IGlzIHJldHVy
bmVkIHRvIFY4IGltbWVkaWF0ZWx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDY1NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDdXJyZW50bHkgd2UgYXJlIGFsd2F5cyBjcmVhdGluZyBhIGxvY2FsIGhh
bmRsZSBmb3IgYSBjYWNoZWQKKyAgICAgICAgVjggc3RyaW5nIHJldHVybmVkIHRvIFY4OgorCisg
ICAgICAgICAgSGFuZGxlPFZhbHVlPiB2OFN0cmluZyhTdHJpbmdJbXBsKiBpbXBsLCBJc29sYXRl
KiBpc29sYXRlKSB7CisgICAgICAgICAgICAuLi47CisgICAgICAgICAgICByZXR1cm4gTG9jYWw8
U3RyaW5nPjo6TmV3KGlzb2xhdGUsIG1fY2FjaGVkU3RyaW5nKTsKKyAgICAgICAgICB9CisKKyAg
ICAgICAgSG93ZXZlciwgd2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSBsb2NhbCBoYW5kbGUgaW4g
YSBjYXNlCisgICAgICAgIHdoZXJlIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCBubyBWOCBvYmplY3Qg
YWxsb2NhdGlvbiBpcyBjb25kdWN0ZWQKKyAgICAgICAgYmVmb3JlIGEgY29udHJvbCBmbG93IHJl
dHVybnMgYmFjayB0byBWOC4gSW4gcGFydGljdWxhciwgaW4gYSBjYXNlCisgICAgICAgIHdoZXJl
IGEgY2FjaGVkIFY4IHN0cmluZyBpcyBpbW1lZGlhdGVseSByZXR1cm5lZCB0byBWOCwgd2UgZG9u
J3QKKyAgICAgICAgbmVlZCB0byBjcmVhdGUgYSBsb2NhbCBoYW5kbGU6CisKKyAgICAgICAgICBI
YW5kbGU8VmFsdWU+IHh4eHhBdHRyR2V0dGVyKCkgeworICAgICAgICAgICAgLi4uOworICAgICAg
ICAgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+eHh4eCgpLCBpc29sYXRlKTsgIC8vIFRoaXMgY2Fu
IHJldHVybiBhIHBlcnNpc3RlbnQgaGFuZGxlIHNhZmVseS4KKyAgICAgICAgICB9CisKKyAgICAg
ICAgVGhpcyBwYXRjaCBpbXByb3ZlcyBwZXJmb3JtYW5jZSBvZiBkaXYuaWQgYnkgOS4yJS4KKwor
ICAgICAgICBObyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZU5vcm1h
bEF0dHJHZXR0ZXIpOgorICAgICAgICAoR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uKToK
KyAgICAgICAgKEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKToKKyAgICAgICAgKE5hdGl2ZVRv
SlNWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3JW
OEludGVybmFsOjphdHRyMUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEV2ZW50
Q29uc3RydWN0b3JWOEludGVybmFsOjphdHRyMkF0dHJHZXR0ZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdEV4Y2VwdGlvblY4SW50ZXJuYWw6Om5hbWVBdHRyR2V0dGVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RJbnRlcmZhY2VWOEludGVybmFsOjpzdXBwbGVtZW50YWxTdGF0aWNBdHRyQXR0
ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW50ZXJmYWNlVjhJbnRlcm5hbDo6c3Vw
cGxlbWVudGFsU3RyMUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEludGVyZmFj
ZVY4SW50ZXJuYWw6OnN1cHBsZW1lbnRhbFN0cjJBdHRyR2V0dGVyKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RPYmpWOEludGVybmFsOjpyZWFkT25seVN0cmluZ0F0dHJBdHRyR2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpzdGF0aWNTdHJpbmdBdHRyQXR0ckdldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6c3RyaW5nQXR0ckF0dHJHZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnJlZmxlY3RlZFN0cmlu
Z0F0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpy
ZWZsZWN0ZWRVUkxBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6cmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0
ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6c3RyaW5nQXR0
cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RP
YmpWOEludGVybmFsOjpoYXNoQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2Jq
VjhJbnRlcm5hbDo6Y29uZGl0aW9uYWxNZXRob2QxQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4QmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6djhTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6djhTdHJpbmdPck51bGwpOgorICAgICAgICAoV2ViQ29yZTo6djhTdHJpbmdP
clVuZGVmaW5lZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhWYWx1ZUNhY2hlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0cmluZ0NhY2hlOjp2OEV4dGVybmFsU3RyaW5nU2xvdyk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhWYWx1ZUNhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHJp
bmdDYWNoZTo6djhFeHRlcm5hbFN0cmluZyk6CisgICAgICAgIChTdHJpbmdDYWNoZSk6CisKIDIw
MTMtMDEtMDkgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0
XVtNYWNdIEdyYXBoaWNzU3VyZmFjZSBkb2VzIG5vdCBuZWVkIGdsRW5hYmxlL2dsRGlzYWJsZSBm
b3IgdGV4dHVyZSB0YXJnZXRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCAwN2NiMmRkODU1NzZkMjRlZDM0NzE2NjNkOWE0
YWFiNzFmN2E2NThhLi5jMDgzMGQwNGJkYWQ1MDEyNDM1NmIyM2ViMjkxNDA4MWRhNjY2M2Y0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQpAQCAtOTI5LDcgKzkyOSw3IEBAIEVORAogICAgICAgICAgICAgIyBHZW5lcmF0ZSBzdXBl
ci1jb21wYWN0IGNhbGwgZm9yIHJlZ3VsYXIgYXR0cmlidXRlIGdldHRlcjoKICAgICAgICAgICAg
IG15ICgkZnVuY3Rpb25OYW1lLCBAYXJndW1lbnRzKSA9ICRjb2RlR2VuZXJhdG9yLT5HZXR0ZXJF
eHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlTmFtZSwgJGF0dHJpYnV0ZSk7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIEVsZW1lbnQqIGltcCA9IFY4
RWxlbWVudDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+JHtmdW5jdGlvbk5h
bWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIiksIGluZm8uR2V0SXNvbGF0ZSgpKTtc
biIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdjhT
dHJpbmcoaW1wLT4ke2Z1bmN0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAi
KSwgaW5mby5HZXRJc29sYXRlKCksIHRydWUpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAifVxuXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsICIjZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFs
U3RyaW5nOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTExNCw3ICsxMTE0LDcgQEAgRU5ECiAg
ICAgcmV0dXJuIHZhbHVlOwogRU5ECiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICByZXR1cm4gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5z
aWduYXR1cmUsICRyZXN1bHQsICJpbmZvLkhvbGRlcigpIiwgImluZm8uR2V0SXNvbGF0ZSgpIiwg
ImluZm8iLCAiaW1wIikuIjtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAi
ICAgIHJldHVybiAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgJHJl
c3VsdCwgImluZm8uSG9sZGVyKCkiLCAiaW5mby5HZXRJc29sYXRlKCkiLCAiaW5mbyIsICJpbXAi
LCAicmV0dXJuIikuIjtcbiIpOwogICAgIH0KIAogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICJ9XG5cbiIpOyAgIyBlbmQgb2YgZ2V0dGVyCkBAIC0zMzc5LDcgKzMzNzksNyBAQCBFTkQKICAg
ICAgICAgICAgIEBhcmdzID0gKCk7CiAgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHBh
cmFtcykgewogICAgICAgICAgICAgICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+ICR7cGFyYW1OYW1lfUhhbmRsZSA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJHBhcmFtLCAkcGFy
YW1OYW1lKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gJHtwYXJhbU5hbWV9SGFuZGxlID0gIiAuIE5hdGl2ZVRv
SlNWYWx1ZSgkcGFyYW0sICRwYXJhbU5hbWUsIDAsIDAsIDAsIDAsIDApIC4gIjtcbiIpOwogICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgke3BhcmFtTmFtZX1IYW5k
bGUuSXNFbXB0eSgpKSB7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgaWYgKCFpc1NjcmlwdENvbnRyb2xsZXJUZXJtaW5hdGluZygpKVxuIik7CiAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBDUkFTSCgpO1xuIik7
CkBAIC0zNjE4LDkgKzM2MTgsOSBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcoKQog
ICAgIG15ICRuYXRpdmVWYWx1ZTsKICAgICAjIEZJWE1FOiBVcGRhdGUgZm9yIGFsbCBTY3JpcHRX
cmFwcGFibGVzLgogICAgIGlmIChJc0RPTU5vZGVUeXBlKCRpbnRlcmZhY2VOYW1lKSkgewotICAg
ICAgICAkbmF0aXZlVmFsdWUgPSBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUs
ICRyZXR1cm4sICJhcmdzLkhvbGRlcigpIiwgImFyZ3MuR2V0SXNvbGF0ZSgpIiwgImFyZ3MiLCAi
aW1wIik7CisgICAgICAgICRuYXRpdmVWYWx1ZSA9IE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24t
PnNpZ25hdHVyZSwgJHJldHVybiwgImFyZ3MuSG9sZGVyKCkiLCAiYXJncy5HZXRJc29sYXRlKCki
LCAiYXJncyIsICJpbXAiLCAicmV0dXJuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgJG5hdGl2
ZVZhbHVlID0gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkcmV0dXJuLCAi
YXJncy5Ib2xkZXIoKSIsICJhcmdzLkdldElzb2xhdGUoKSIpOworICAgICAgICAkbmF0aXZlVmFs
dWUgPSBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsICRyZXR1cm4sICJhcmdz
LkhvbGRlcigpIiwgImFyZ3MuR2V0SXNvbGF0ZSgpIiwgMCwgMCwgInJldHVybiIpOwogICAgIH0K
IAogICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJyZXR1cm4gIiAuICRuYXRpdmVWYWx1ZSAuICI7
XG4iOwpAQCAtNDAzMCw2ICs0MDMwLDkgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIG15ICRn
ZXRIb2xkZXJDb250YWluZXJBcmcgPSAkZ2V0SG9sZGVyQ29udGFpbmVyID8gIiwgJGdldEhvbGRl
ckNvbnRhaW5lciIgOiAiIjsKICAgICBteSAkZ2V0U2NyaXB0V3JhcHBhYmxlID0gc2hpZnQ7CiAg
ICAgbXkgJGdldFNjcmlwdFdyYXBwYWJsZUFyZyA9ICRnZXRTY3JpcHRXcmFwcGFibGUgPyAiLCAk
Z2V0U2NyaXB0V3JhcHBhYmxlIiA6ICIiOworICAgIG15ICRpbW1lZGlhdGVSZXR1cm4gPSBzaGlm
dDsKKyAgICBteSAkY2FuUmV0dXJuUGVyc2lzdGVudEhhbmRsZSA9ICRpbW1lZGlhdGVSZXR1cm4g
PyAiLCB0cnVlIiA6ICIiOworCiAgICAgbXkgJHR5cGUgPSAkc2lnbmF0dXJlLT50eXBlOwogCiAg
ICAgcmV0dXJuICgkZ2V0SXNvbGF0ZSA/ICJ2OEJvb2xlYW4oJHZhbHVlLCAkZ2V0SXNvbGF0ZSki
IDogInY4Qm9vbGVhbigkdmFsdWUpIikgaWYgJHR5cGUgZXEgImJvb2xlYW4iOwpAQCAtNDA1OCwx
MiArNDA2MSwxMiBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9y
LT5Jc1N0cmluZ1R5cGUoJHR5cGUpKSB7CiAgICAgICAgIG15ICRjb252ID0gJHNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXMifTsKICAgICAg
ICAgaWYgKGRlZmluZWQgJGNvbnYpIHsKLSAgICAgICAgICAgIHJldHVybiAidjhTdHJpbmdPck51
bGwoJHZhbHVlJGdldElzb2xhdGVBcmcpIiBpZiAkY29udiBlcSAiTnVsbCI7Ci0gICAgICAgICAg
ICByZXR1cm4gInY4U3RyaW5nT3JVbmRlZmluZWQoJHZhbHVlJGdldElzb2xhdGVBcmcpIiBpZiAk
Y29udiBlcSAiVW5kZWZpbmVkIjsKKyAgICAgICAgICAgIHJldHVybiAidjhTdHJpbmdPck51bGwo
JHZhbHVlJGdldElzb2xhdGVBcmckY2FuUmV0dXJuUGVyc2lzdGVudEhhbmRsZSkiIGlmICRjb252
IGVxICJOdWxsIjsKKyAgICAgICAgICAgIHJldHVybiAidjhTdHJpbmdPclVuZGVmaW5lZCgkdmFs
dWUkZ2V0SXNvbGF0ZUFyZyRjYW5SZXR1cm5QZXJzaXN0ZW50SGFuZGxlKSIgaWYgJGNvbnYgZXEg
IlVuZGVmaW5lZCI7CiAKICAgICAgICAgICAgIGRpZSAiVW5rbm93biB2YWx1ZSBmb3IgVHJlYXRS
ZXR1cm5lZE51bGxTdHJpbmdBcyBleHRlbmRlZCBhdHRyaWJ1dGUiOwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiAkZ2V0SXNvbGF0ZSA/ICJ2OFN0cmluZygkdmFsdWUsICRnZXRJc29sYXRlKSIg
OiAiZGVwcmVjYXRlZFY4U3RyaW5nKCR2YWx1ZSkiOworICAgICAgICByZXR1cm4gJGdldElzb2xh
dGUgPyAidjhTdHJpbmcoJHZhbHVlJGdldElzb2xhdGVBcmckY2FuUmV0dXJuUGVyc2lzdGVudEhh
bmRsZSkiIDogImRlcHJlY2F0ZWRWOFN0cmluZygkdmFsdWUpIjsKICAgICB9CiAKICAgICBteSAk
YXJyYXlUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMTNkMDExMDVmZTBlZDJlMmRjNTdmMjQ5
ZTcwOWQ5OGI2NTk3NzBmNS4uMjE4ZTEzODU3NzhkYzVhMjgxMzVkMTg5ZTYwNjAwNjBjMjdjMDEx
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApAQCAtNDEsMTMgKzQxLDEz
IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIFY4X1VTRShUKSB7IH0KIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gYXR0cjFBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RFdmVudENvbnN0
cnVjdG9yKiBpbXAgPSBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjp0b05hdGl2ZShpbmZvLkhvbGRl
cigpKTsKLSAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5hdHRyMSgpLCBpbmZvLkdldElzb2xhdGUo
KSk7CisgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+YXR0cjEoKSwgaW5mby5HZXRJc29sYXRlKCks
IHRydWUpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGF0dHIyQXR0ckdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKIHsKICAgICBUZXN0RXZlbnRDb25zdHJ1Y3RvciogaW1wID0gVjhUZXN0RXZlbnRDb25zdHJ1
Y3Rvcjo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+
YXR0cjIoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmF0
dHIyKCksIGluZm8uR2V0SXNvbGF0ZSgpLCB0cnVlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVz
dEV2ZW50Q29uc3RydWN0b3JWOEludGVybmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwCmluZGV4IGZi
ZTk3NWU3ZWVlNDA1ZGMwMDZiYmYyMDNjMTQ2MjA3ZmFkZTUyYmMuLjUyZTc4YmI5ZDA2NTAxNGZm
MzI4NzQ5N2Q5Njk3MzU4NTlkN2MyYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwCkBAIC00MCw3
ICs0MCw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIFY4X1VTRShUKSB7IH0KIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbmFtZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdEV4Y2Vw
dGlvbiogaW1wID0gVjhUZXN0RXhjZXB0aW9uOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAg
ICByZXR1cm4gdjhTdHJpbmcoaW1wLT5uYW1lKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICBy
ZXR1cm4gdjhTdHJpbmcoaW1wLT5uYW1lKCksIGluZm8uR2V0SXNvbGF0ZSgpLCB0cnVlKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgVGVzdEV4Y2VwdGlvblY4SW50ZXJuYWwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFj
ZS5jcHAKaW5kZXggODk3ZjBjNTc5YjBjZjQ0YjhjMmJiZDQ1OWU2M2E3ZDA3MTMwMjdiZi4uNjcy
NTBiZjMwMTE4MmQ1MjlkMDRhOThlMjFjNjdmOGFjMmRiMDRiOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFj
ZS5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBw
bGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDwKIAogc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBwbGVtZW50YWxTdGF0aWNBdHRyQXR0ckdldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
IHsKLSAgICByZXR1cm4gdjhTdHJpbmcoVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3Rh
dGljQXR0cigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5nKFRlc3RT
dXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoKSwgaW5mby5HZXRJc29sYXRlKCks
IHRydWUpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMTIpCkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyB2b2lkIHN1cHBsZW1lbnRhbFN0YXRp
Y0F0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jCiBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN1cHBsZW1lbnRhbFN0cjFBdHRyR2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewog
ICAgIFRlc3RJbnRlcmZhY2UqIGltcCA9IFY4VGVzdEludGVyZmFjZTo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1l
bnRhbFN0cjEoaW1wKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB2OFN0cmluZyhU
ZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIxKGltcCksIGluZm8uR2V0SXNvbGF0ZSgp
LCB0cnVlKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjEyKQpAQCAtOTAsNyArOTAsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHN1cHBsZW1lbnRhbFN0cjFBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYQogc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBwbGVtZW50YWxTdHIyQXR0ckdldHRlcih2ODo6
TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsK
ICAgICBUZXN0SW50ZXJmYWNlKiBpbXAgPSBWOFRlc3RJbnRlcmZhY2U6OnRvTmF0aXZlKGluZm8u
SG9sZGVyKCkpOwotICAgIHJldHVybiB2OFN0cmluZyhUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVt
ZW50YWxTdHIyKGltcCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmco
VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMihpbXApLCBpbmZvLkdldElzb2xhdGUo
KSwgdHJ1ZSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShD
b25kaXRpb24xMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggM2ZjMjhiZGZlMmE3MjczNmZlMDc3NTZlMmY5NzJm
N2Q1NzZmYWVkOS4uZWFiMTM5MzExNGM0ODZmODg1N2EyMzAwMDJlNWRkMWZkYzBmNjkzYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9i
ai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5jcHAKQEAgLTkwLDcgKzkwLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBy
ZWFkT25seUxvbmdBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmEKIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVhZE9ubHlTdHJpbmdBdHRyQXR0ckdldHRlcih2ODo6
TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsK
ICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwot
ICAgIHJldHVybiB2OFN0cmluZyhpbXAtPnJlYWRPbmx5U3RyaW5nQXR0cigpLCBpbmZvLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+cmVhZE9ubHlTdHJpbmdBdHRyKCks
IGluZm8uR2V0SXNvbGF0ZSgpLCB0cnVlKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiByZWFkT25seVRlc3RPYmpBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTExMyw3ICsxMTMsNyBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0YXRpY1JlYWRPbmx5TG9uZ0F0dHJBdHRyR2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0
YXRpY1N0cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewotICAgIHJldHVybiB2OFN0cmluZyhUZXN0T2Jq
OjpzdGF0aWNTdHJpbmdBdHRyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdjhT
dHJpbmcoVGVzdE9iajo6c3RhdGljU3RyaW5nQXR0cigpLCBpbmZvLkdldElzb2xhdGUoKSwgdHJ1
ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0YXRpY1N0cmluZ0F0dHJBdHRyU2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTE5Niw3ICsxOTYsNyBAQCBzdGF0aWMgdm9pZCB1bnNp
Z25lZExvbmdMb25nQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4
OjpMb2NhbAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJpbmdBdHRyQXR0ckdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVy
KCkpOwotICAgIHJldHVybiB2OFN0cmluZyhpbXAtPnN0cmluZ0F0dHIoKSwgaW5mby5HZXRJc29s
YXRlKCkpOworICAgIHJldHVybiB2OFN0cmluZyhpbXAtPnN0cmluZ0F0dHIoKSwgaW5mby5HZXRJ
c29sYXRlKCksIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCBzdHJpbmdBdHRyQXR0clNldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0yNTQsNyArMjU0LDcgQEAgc3RhdGljIHZv
aWQgY3JlYXRlQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdmEKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVmbGVjdGVkU3Ry
aW5nQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05h
dGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5mYXN0R2V0QXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpLCBpbmZv
LkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+ZmFzdEdldEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSwgaW5mby5HZXRJ
c29sYXRlKCksIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCByZWZsZWN0ZWRTdHJpbmdBdHRyQXR0
clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
dmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0zMTAsNyArMzEwLDcgQEAg
c3RhdGljIHZvaWQgcmVmbGVjdGVkQm9vbGVhbkF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWwKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVm
bGVjdGVkVVJMQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2Jq
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5nZXRV
UkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciksIGlu
Zm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5nZXRVUkxBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciksIGluZm8uR2V0SXNv
bGF0ZSgpLCB0cnVlKTsKIH0KIAogc3RhdGljIHZvaWQgcmVmbGVjdGVkVVJMQXR0ckF0dHJTZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtMzI0LDcgKzMyNCw3IEBAIHN0YXRp
YyB2b2lkIHJlZmxlY3RlZFVSTEF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCB2ODo6TG9jYWw8djg6CiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3Rl
ZFN0cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6
dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+ZmFzdEdl
dEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0
ciksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5mYXN0R2V0
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRy
KSwgaW5mby5HZXRJc29sYXRlKCksIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCByZWZsZWN0ZWRT
dHJpbmdBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0zNjYs
NyArMzY2LDcgQEAgc3RhdGljIHZvaWQgcmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJBdHRyU2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODoKIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gcmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9i
aiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4g
djhTdHJpbmcoaW1wLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21D
b250ZW50VVJMQXR0ckF0dHIpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHY4U3Ry
aW5nKGltcC0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVu
dFVSTEF0dHJBdHRyKSwgaW5mby5HZXRJc29sYXRlKCksIHRydWUpOwogfQogCiBzdGF0aWMgdm9p
ZCByZWZsZWN0ZWRDdXN0b21VUkxBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCkBAIC00MzMsNyArNDMzLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBz
dHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIodjg6OkxvY2FsPHYKICAgICBT
dHJpbmcgdiA9IGltcC0+c3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpOwogICAgIGlm
IChVTkxJS0VMWShlYykpCiAgICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGluZm8u
R2V0SXNvbGF0ZSgpKTsKLSAgICByZXR1cm4gdjhTdHJpbmcodiwgaW5mby5HZXRJc29sYXRlKCkp
OworICAgIHJldHVybiB2OFN0cmluZyh2LCBpbmZvLkdldElzb2xhdGUoKSwgdHJ1ZSk7CiB9CiAK
IHN0YXRpYyB2b2lkIHN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0clNldHRlcih2ODo6
TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC00NDcsNyArNDQ3LDcgQEAgc3RhdGljIHZvaWQg
c3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lLAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJpbmdBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2Jq
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5zdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0
dXJuIHY4U3RyaW5nKGltcC0+c3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSwgaW5mby5H
ZXRJc29sYXRlKCksIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCBzdHJpbmdBdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbkF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtOTEz
LDcgKzkxMyw3IEBAIHN0YXRpYyB2b2lkIGlkQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsCiBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGhhc2hBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9i
ajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+aGFz
aCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+aGFzaCgp
LCBpbmZvLkdldElzb2xhdGUoKSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gcmVwbGFjZWFibGVBdHRyaWJ1dGVBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtMTM3MSw3ICsxMzcxLDcg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRp
b25hbEFyZ0NhbGxiYWNrKGNvbnN0IHY4OjoKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
Y29uZGl0aW9uYWxNZXRob2QxQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsK
ICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwot
ICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmNvbmRpdGlvbmFsTWV0aG9kMSgpLCBhcmdzLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+Y29uZGl0aW9uYWxNZXRob2QxKCks
IGFyZ3MuR2V0SXNvbGF0ZSgpLCB0cnVlKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDb25kaXRp
b24xKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAppbmRleCAxYzNlOTUxMTMw
YTBmMTk5NDBlNjAwYWI3MTFlMDlhZTExYjE5OTE4Li4xZjM5YzQ1MmJhYTY4MDY5MmU0MGQwYzIz
NzBlYmRlY2FiNTY4OTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEJpbmRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaApA
QCAtMTQ1LDEzICsxNDUsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIFJldHVybiBh
IFY4IGV4dGVybmFsIHN0cmluZyB0aGF0IHNoYXJlcyB0aGUgdW5kZXJseWluZyBidWZmZXIgd2l0
aCB0aGUgZ2l2ZW4KICAgICAvLyBXZWJDb3JlIHN0cmluZy4gVGhlIHJlZmVyZW5jZSBjb3VudGlu
ZyBtZWNoYW5pc20gaXMgdXNlZCB0byBrZWVwIHRoZQogICAgIC8vIHVuZGVybHlpbmcgYnVmZmVy
IGFsaXZlIHdoaWxlIHRoZSBzdHJpbmcgaXMgc3RpbGwgbGl2ZSBpbiB0aGUgVjggZW5naW5lLgot
ICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nKGNvbnN0IFN0cmluZyYg
c3RyaW5nLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCisgICAgaW5saW5lIHY4OjpIYW5kbGU8
djg6OlN0cmluZz4gdjhTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHY4OjpJc29sYXRlKiBp
c29sYXRlID0gMCwgYm9vbCBjYW5SZXR1cm5QZXJzaXN0ZW50SGFuZGxlID0gZmFsc2UpCiAgICAg
ewogICAgICAgICBpZiAoVU5MSUtFTFkoIWlzb2xhdGUpKQogICAgICAgICAgICAgaXNvbGF0ZSA9
IHY4OjpJc29sYXRlOjpHZXRDdXJyZW50KCk7CiAgICAgICAgIGlmIChzdHJpbmcuaXNOdWxsKCkp
CiAgICAgICAgICAgICByZXR1cm4gdjg6OlN0cmluZzo6RW1wdHkoaXNvbGF0ZSk7Ci0gICAgICAg
IHJldHVybiBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5zdHJpbmdDYWNoZSgpLT52
OEV4dGVybmFsU3RyaW5nKHN0cmluZy5pbXBsKCksIGlzb2xhdGUpOworICAgICAgICByZXR1cm4g
VjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+c3RyaW5nQ2FjaGUoKS0+djhFeHRlcm5h
bFN0cmluZyhzdHJpbmcuaW1wbCgpLCBjYW5SZXR1cm5QZXJzaXN0ZW50SGFuZGxlLCBpc29sYXRl
KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogQWxsIGNhbGwgc2l0ZXMgb2YgdGhpcyBtZXRob2Qg
c2hvdWxkIHVzZSB2OFN0cmluZygpLgpAQCAtMTYwLDIwICsxNjAsMjAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICByZXR1cm4gdjhTdHJpbmcoc3RyaW5nLCB2ODo6SXNvbGF0ZTo6R2V0
Q3VycmVudCgpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4
U3RyaW5nT3JOdWxsKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkK
KyAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JOdWxsKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgYm9vbCBjYW5SZXR1cm5QZXJzaXN0
ZW50SGFuZGxlID0gZmFsc2UpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNvbGF0ZSk7CiAgICAg
ICAgIGlmIChzdHJpbmcuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gdjhOdWxsKGlzb2xh
dGUpOwotICAgICAgICByZXR1cm4gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+c3Ry
aW5nQ2FjaGUoKS0+djhFeHRlcm5hbFN0cmluZyhzdHJpbmcuaW1wbCgpLCBpc29sYXRlKTsKKyAg
ICAgICAgcmV0dXJuIFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPnN0cmluZ0NhY2hl
KCktPnY4RXh0ZXJuYWxTdHJpbmcoc3RyaW5nLmltcGwoKSwgY2FuUmV0dXJuUGVyc2lzdGVudEhh
bmRsZSwgaXNvbGF0ZSk7CiAgICAgfQogCi0gICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2OFN0cmluZ09yVW5kZWZpbmVkKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKKyAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JVbmRl
ZmluZWQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBib29sIGNh
blJldHVyblBlcnNpc3RlbnRIYW5kbGUgPSBmYWxzZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChp
c29sYXRlKTsKICAgICAgICAgaWYgKHN0cmluZy5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKGlzb2xhdGUpOwotICAgICAgICByZXR1cm4gVjhQZXJJc29sYXRlRGF0
YTo6ZnJvbShpc29sYXRlKS0+c3RyaW5nQ2FjaGUoKS0+djhFeHRlcm5hbFN0cmluZyhzdHJpbmcu
aW1wbCgpLCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIFY4UGVySXNvbGF0ZURhdGE6OmZyb20o
aXNvbGF0ZSktPnN0cmluZ0NhY2hlKCktPnY4RXh0ZXJuYWxTdHJpbmcoc3RyaW5nLmltcGwoKSwg
Y2FuUmV0dXJuUGVyc2lzdGVudEhhbmRsZSwgaXNvbGF0ZSk7CiAgICAgfQogCiAgICAgaW5saW5l
IHY4OjpIYW5kbGU8djg6OkludGVnZXI+IHY4SW50ZWdlcihpbnQgdmFsdWUsIHY4OjpJc29sYXRl
KiBpc29sYXRlID0gMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
VmFsdWVDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUu
Y3BwCmluZGV4IDRmODFiMzk4YTQ5Y2Y2ZDUzOTk3ZjNlMTA5ZTk2YjY5NGFiYmJiYzIuLjQ5ZGJj
ZTA3ZmI0MDcxNGVlOTU3OGU2YTk0Njg3NzE3ZTgzN2Q0YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VmFsdWVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhWYWx1ZUNhY2hlLmNwcApAQCAtNjYsNyArNjYsNyBAQCB2b2lkIFN0cmlu
Z0NhY2hlOjpyZW1vdmUoU3RyaW5nSW1wbCogc3RyaW5nSW1wbCkKICAgICBjbGVhck9uR0MoKTsK
IH0KIAotdjg6OkxvY2FsPHY4OjpTdHJpbmc+IFN0cmluZ0NhY2hlOjp2OEV4dGVybmFsU3RyaW5n
U2xvdyhTdHJpbmdJbXBsKiBzdHJpbmdJbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpI
YW5kbGU8djg6OlN0cmluZz4gU3RyaW5nQ2FjaGU6OnY4RXh0ZXJuYWxTdHJpbmdTbG93KFN0cmlu
Z0ltcGwqIHN0cmluZ0ltcGwsIGJvb2wgY2FuUmV0dXJuUGVyc2lzdGVudEhhbmRsZSwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgaWYgKCFzdHJpbmdJbXBsLT5sZW5ndGgoKSkKICAgICAg
ICAgcmV0dXJuIHY4OjpTdHJpbmc6OkVtcHR5KGlzb2xhdGUpOwpAQCAtNzcsNiArNzcsOCBAQCB2
ODo6TG9jYWw8djg6OlN0cmluZz4gU3RyaW5nQ2FjaGU6OnY4RXh0ZXJuYWxTdHJpbmdTbG93KFN0
cmluZ0ltcGwqIHN0cmluZ0ltcGwsCiAgICAgICAgIGlmIChoYW5kbGUuSXNXZWFrKCkpIHsKICAg
ICAgICAgICAgIG1fbGFzdFN0cmluZ0ltcGwgPSBzdHJpbmdJbXBsOwogICAgICAgICAgICAgbV9s
YXN0VjhTdHJpbmcgPSBoYW5kbGU7CisgICAgICAgICAgICBpZiAoY2FuUmV0dXJuUGVyc2lzdGVu
dEhhbmRsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlOwogICAgICAgICAgICAgcmV0
dXJuIHY4OjpMb2NhbDx2ODo6U3RyaW5nPjo6TmV3KGhhbmRsZSk7CiAgICAgICAgIH0KICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VmFsdWVDYWNoZS5oCmluZGV4IDEwZmU3MjRi
OTZiY2ExMDljYWY4NzJhYzc5MmQyOTgxMzlmZTRjOTIuLmJkZWQ1OTQ4YWIzN2E3NDM2YmY4OTdl
YjdmYmUyNDQwNDhjMmM1MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4VmFsdWVDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VmFsdWVD
YWNoZS5oCkBAIC0zOSwxMiArMzksMTUgQEAgY2xhc3MgU3RyaW5nQ2FjaGUgewogcHVibGljOgog
ICAgIFN0cmluZ0NhY2hlKCkgeyB9CiAKLSAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4gdjhFeHRl
cm5hbFN0cmluZyhTdHJpbmdJbXBsKiBzdHJpbmdJbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkK
KyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4RXh0ZXJuYWxTdHJpbmcoU3RyaW5nSW1wbCog
c3RyaW5nSW1wbCwgYm9vbCBjYW5SZXR1cm5QZXJzaXN0ZW50SGFuZGxlLCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKICAgICB7Ci0gICAgICAgIGlmIChtX2xhc3RTdHJpbmdJbXBsLmdldCgpID09IHN0
cmluZ0ltcGwgJiYgbV9sYXN0VjhTdHJpbmcuSXNXZWFrKGlzb2xhdGUpKQorICAgICAgICBpZiAo
bV9sYXN0U3RyaW5nSW1wbC5nZXQoKSA9PSBzdHJpbmdJbXBsICYmIG1fbGFzdFY4U3RyaW5nLklz
V2Vhayhpc29sYXRlKSkgeworICAgICAgICAgICAgaWYgKGNhblJldHVyblBlcnNpc3RlbnRIYW5k
bGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbGFzdFY4U3RyaW5nOwogICAgICAgICAgICAg
cmV0dXJuIHY4OjpMb2NhbDx2ODo6U3RyaW5nPjo6TmV3KGlzb2xhdGUsIG1fbGFzdFY4U3RyaW5n
KTsKKyAgICAgICAgfQogCi0gICAgICAgIHJldHVybiB2OEV4dGVybmFsU3RyaW5nU2xvdyhzdHJp
bmdJbXBsLCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHY4RXh0ZXJuYWxTdHJpbmdTbG93KHN0
cmluZ0ltcGwsIGNhblJldHVyblBlcnNpc3RlbnRIYW5kbGUsIGlzb2xhdGUpOwogICAgIH0KIAog
ICAgIHZvaWQgY2xlYXJPbkdDKCkgCkBAIC01Nyw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAogcHJpdmF0ZToK
LSAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4gdjhFeHRlcm5hbFN0cmluZ1Nsb3coU3RyaW5nSW1w
bCosIHY4OjpJc29sYXRlKik7CisgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OEV4dGVybmFs
U3RyaW5nU2xvdyhTdHJpbmdJbXBsKiwgYm9vbCwgdjg6Oklzb2xhdGUqKTsKIAogICAgIEhhc2hN
YXA8U3RyaW5nSW1wbCosIHY4OjpTdHJpbmcqPiBtX3N0cmluZ0NhY2hlOwogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpTdHJpbmc+IG1fbGFzdFY4U3RyaW5nOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182284</attachid>
            <date>2013-01-11 00:45:18 -0800</date>
            <delta_ts>2013-01-11 11:03:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106557-20130111094220.patch</filename>
            <type>text/plain</type>
            <size>22905</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTc3MWY2YTNkZDZjNTY2
ZjBkZDMxZTI1OWRmNmI4YmYyMWNjNjA4My4uZmIzNjRkZDEwZTNkNGNkN2UzZDBjZDQwZTViMGVj
YzkxODc4ODYxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEzLTAxLTEwICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIERvIG5vdCBj
cmVhdGUgYSBsb2NhbCBoYW5kbGUgZm9yIGEgY2FjaGVkIHY4IHN0cmluZyB0aGF0IGlzIHJldHVy
bmVkIHRvIFY4IGltbWVkaWF0ZWx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDY1NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDdXJyZW50bHkgd2UgYXJlIGFsd2F5cyBjcmVhdGluZyBhIGxvY2FsIGhh
bmRsZSBmb3IgYSBjYWNoZWQKKyAgICAgICAgVjggc3RyaW5nIHJldHVybmVkIHRvIFY4OgorCisg
ICAgICAgICAgSGFuZGxlPFZhbHVlPiB2OFN0cmluZyhTdHJpbmdJbXBsKiBpbXBsLCBJc29sYXRl
KiBpc29sYXRlKSB7CisgICAgICAgICAgICAuLi47CisgICAgICAgICAgICByZXR1cm4gTG9jYWw8
U3RyaW5nPjo6TmV3KGlzb2xhdGUsIG1fY2FjaGVkU3RyaW5nKTsKKyAgICAgICAgICB9CisKKyAg
ICAgICAgSG93ZXZlciwgd2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSBsb2NhbCBoYW5kbGUgaW4g
YSBjYXNlCisgICAgICAgIHdoZXJlIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCBubyBWOCBvYmplY3Qg
YWxsb2NhdGlvbiBpcyBjb25kdWN0ZWQKKyAgICAgICAgYmVmb3JlIGEgY29udHJvbCBmbG93IHJl
dHVybnMgYmFjayB0byBWOC4gSW4gcGFydGljdWxhciwgaW4gYSBjYXNlCisgICAgICAgIHdoZXJl
IGEgY2FjaGVkIFY4IHN0cmluZyBpcyBpbW1lZGlhdGVseSByZXR1cm5lZCB0byBWOCwgd2UgZG9u
J3QKKyAgICAgICAgbmVlZCB0byBjcmVhdGUgYSBsb2NhbCBoYW5kbGU6CisKKyAgICAgICAgICBI
YW5kbGU8VmFsdWU+IHh4eHhBdHRyR2V0dGVyKCkgeworICAgICAgICAgICAgLi4uOworICAgICAg
ICAgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+eHh4eCgpLCBpc29sYXRlKTsgIC8vIFRoaXMgY2Fu
IHJldHVybiBhIHBlcnNpc3RlbnQgaGFuZGxlIHNhZmVseS4KKyAgICAgICAgICB9CisKKyAgICAg
ICAgVGhpcyBwYXRjaCBpbXByb3ZlcyBwZXJmb3JtYW5jZSBvZiBkaXYuaWQgYnkgOS4yJS4KKwor
ICAgICAgICBObyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZU5vcm1h
bEF0dHJHZXR0ZXIpOgorICAgICAgICAoR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uKToK
KyAgICAgICAgKEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKToKKyAgICAgICAgKE5hdGl2ZVRv
SlNWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3JW
OEludGVybmFsOjphdHRyMUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEV2ZW50
Q29uc3RydWN0b3JWOEludGVybmFsOjphdHRyMkF0dHJHZXR0ZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdEV4Y2VwdGlvblY4SW50ZXJuYWw6Om5hbWVBdHRyR2V0dGVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RJbnRlcmZhY2VWOEludGVybmFsOjpzdXBwbGVtZW50YWxTdGF0aWNBdHRyQXR0
ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW50ZXJmYWNlVjhJbnRlcm5hbDo6c3Vw
cGxlbWVudGFsU3RyMUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEludGVyZmFj
ZVY4SW50ZXJuYWw6OnN1cHBsZW1lbnRhbFN0cjJBdHRyR2V0dGVyKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RPYmpWOEludGVybmFsOjpyZWFkT25seVN0cmluZ0F0dHJBdHRyR2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpzdGF0aWNTdHJpbmdBdHRyQXR0ckdldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6c3RyaW5nQXR0ckF0dHJHZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnJlZmxlY3RlZFN0cmlu
Z0F0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpy
ZWZsZWN0ZWRVUkxBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6cmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0
ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6c3RyaW5nQXR0
cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RP
YmpWOEludGVybmFsOjpoYXNoQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2Jq
VjhJbnRlcm5hbDo6Y29uZGl0aW9uYWxNZXRob2QxQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4QmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6djhTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6djhTdHJpbmdPck51bGwpOgorICAgICAgICAoV2ViQ29yZTo6djhTdHJpbmdP
clVuZGVmaW5lZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhWYWx1ZUNhY2hlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0cmluZ0NhY2hlOjp2OEV4dGVybmFsU3RyaW5nU2xvdyk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhWYWx1ZUNhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHJp
bmdDYWNoZTo6djhFeHRlcm5hbFN0cmluZyk6CisgICAgICAgIChTdHJpbmdDYWNoZSk6CisKIDIw
MTMtMDEtMDkgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0
XVtNYWNdIEdyYXBoaWNzU3VyZmFjZSBkb2VzIG5vdCBuZWVkIGdsRW5hYmxlL2dsRGlzYWJsZSBm
b3IgdGV4dHVyZSB0YXJnZXRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCAwN2NiMmRkODU1NzZkMjRlZDM0NzE2NjNkOWE0
YWFiNzFmN2E2NThhLi5jM2ZmMzgxM2Y2ZjVlMDhiOWIxZWFjZjM4Yjg2M2Y2NzlhZjE2NjM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQpAQCAtOTI5LDcgKzkyOSw3IEBAIEVORAogICAgICAgICAgICAgIyBHZW5lcmF0ZSBzdXBl
ci1jb21wYWN0IGNhbGwgZm9yIHJlZ3VsYXIgYXR0cmlidXRlIGdldHRlcjoKICAgICAgICAgICAg
IG15ICgkZnVuY3Rpb25OYW1lLCBAYXJndW1lbnRzKSA9ICRjb2RlR2VuZXJhdG9yLT5HZXR0ZXJF
eHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlTmFtZSwgJGF0dHJpYnV0ZSk7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIEVsZW1lbnQqIGltcCA9IFY4
RWxlbWVudDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+JHtmdW5jdGlvbk5h
bWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIiksIGluZm8uR2V0SXNvbGF0ZSgpKTtc
biIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdjhT
dHJpbmcoaW1wLT4ke2Z1bmN0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAi
KSwgaW5mby5HZXRJc29sYXRlKCksIFJldHVyblBlcnNpc3RlbnRIYW5kbGUpO1xuIik7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAifVxuXG4iKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIjZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cblxu
IikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTExNCw3
ICsxMTE0LDcgQEAgRU5ECiAgICAgcmV0dXJuIHZhbHVlOwogRU5ECiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gIiAuIE5hdGl2ZVRvSlNW
YWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICRyZXN1bHQsICJpbmZvLkhvbGRlcigpIiwgImlu
Zm8uR2V0SXNvbGF0ZSgpIiwgImluZm8iLCAiaW1wIikuIjtcbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZSwgJHJlc3VsdCwgImluZm8uSG9sZGVyKCkiLCAiaW5mby5HZXRJc29sYXRl
KCkiLCAiaW5mbyIsICJpbXAiLCAiUmV0dXJuUGVyc2lzdGVudEhhbmRsZSIpLiI7XG4iKTsKICAg
ICB9CiAKICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAifVxuXG4iKTsgICMgZW5kIG9mIGdl
dHRlcgpAQCAtMzYxOCw5ICszNjE4LDkgQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5n
KCkKICAgICBteSAkbmF0aXZlVmFsdWU7CiAgICAgIyBGSVhNRTogVXBkYXRlIGZvciBhbGwgU2Ny
aXB0V3JhcHBhYmxlcy4KICAgICBpZiAoSXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSkpIHsK
LSAgICAgICAgJG5hdGl2ZVZhbHVlID0gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0
dXJlLCAkcmV0dXJuLCAiYXJncy5Ib2xkZXIoKSIsICJhcmdzLkdldElzb2xhdGUoKSIsICJhcmdz
IiwgImltcCIpOworICAgICAgICAkbmF0aXZlVmFsdWUgPSBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0
aW9uLT5zaWduYXR1cmUsICRyZXR1cm4sICJhcmdzLkhvbGRlcigpIiwgImFyZ3MuR2V0SXNvbGF0
ZSgpIiwgImFyZ3MiLCAiaW1wIiwgIlJldHVyblBlcnNpc3RlbnRIYW5kbGUiKTsKICAgICB9IGVs
c2UgewotICAgICAgICAkbmF0aXZlVmFsdWUgPSBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5z
aWduYXR1cmUsICRyZXR1cm4sICJhcmdzLkhvbGRlcigpIiwgImFyZ3MuR2V0SXNvbGF0ZSgpIik7
CisgICAgICAgICRuYXRpdmVWYWx1ZSA9IE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25h
dHVyZSwgJHJldHVybiwgImFyZ3MuSG9sZGVyKCkiLCAiYXJncy5HZXRJc29sYXRlKCkiLCAwLCAw
LCAiUmV0dXJuUGVyc2lzdGVudEhhbmRsZSIpOwogICAgIH0KIAogICAgICRyZXN1bHQgLj0gJGlu
ZGVudCAuICJyZXR1cm4gIiAuICRuYXRpdmVWYWx1ZSAuICI7XG4iOwpAQCAtNDAzMCw2ICs0MDMw
LDggQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIG15ICRnZXRIb2xkZXJDb250YWluZXJBcmcg
PSAkZ2V0SG9sZGVyQ29udGFpbmVyID8gIiwgJGdldEhvbGRlckNvbnRhaW5lciIgOiAiIjsKICAg
ICBteSAkZ2V0U2NyaXB0V3JhcHBhYmxlID0gc2hpZnQ7CiAgICAgbXkgJGdldFNjcmlwdFdyYXBw
YWJsZUFyZyA9ICRnZXRTY3JpcHRXcmFwcGFibGUgPyAiLCAkZ2V0U2NyaXB0V3JhcHBhYmxlIiA6
ICIiOworICAgIG15ICRyZXR1cm5IYW5kbGVUeXBlID0gc2hpZnQ7CisKICAgICBteSAkdHlwZSA9
ICRzaWduYXR1cmUtPnR5cGU7CiAKICAgICByZXR1cm4gKCRnZXRJc29sYXRlID8gInY4Qm9vbGVh
bigkdmFsdWUsICRnZXRJc29sYXRlKSIgOiAidjhCb29sZWFuKCR2YWx1ZSkiKSBpZiAkdHlwZSBl
cSAiYm9vbGVhbiI7CkBAIC00MDU4LDEyICs0MDYwLDEyIEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUK
ICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZSkpIHsKICAgICAgICAg
bXkgJGNvbnYgPSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHJlYXRSZXR1cm5l
ZE51bGxTdHJpbmdBcyJ9OwogICAgICAgICBpZiAoZGVmaW5lZCAkY29udikgewotICAgICAgICAg
ICAgcmV0dXJuICJ2OFN0cmluZ09yTnVsbCgkdmFsdWUkZ2V0SXNvbGF0ZUFyZykiIGlmICRjb252
IGVxICJOdWxsIjsKLSAgICAgICAgICAgIHJldHVybiAidjhTdHJpbmdPclVuZGVmaW5lZCgkdmFs
dWUkZ2V0SXNvbGF0ZUFyZykiIGlmICRjb252IGVxICJVbmRlZmluZWQiOworICAgICAgICAgICAg
cmV0dXJuICJ2OFN0cmluZ09yTnVsbCgkdmFsdWUkZ2V0SXNvbGF0ZUFyZywgJHJldHVybkhhbmRs
ZVR5cGUpIiBpZiAkY29udiBlcSAiTnVsbCI7CisgICAgICAgICAgICByZXR1cm4gInY4U3RyaW5n
T3JVbmRlZmluZWQoJHZhbHVlJGdldElzb2xhdGVBcmcsICRyZXR1cm5IYW5kbGVUeXBlKSIgaWYg
JGNvbnYgZXEgIlVuZGVmaW5lZCI7CiAKICAgICAgICAgICAgIGRpZSAiVW5rbm93biB2YWx1ZSBm
b3IgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcyBleHRlbmRlZCBhdHRyaWJ1dGUiOwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAkZ2V0SXNvbGF0ZSA/ICJ2OFN0cmluZygkdmFsdWUsICRnZXRJ
c29sYXRlKSIgOiAiZGVwcmVjYXRlZFY4U3RyaW5nKCR2YWx1ZSkiOworICAgICAgICByZXR1cm4g
JGdldElzb2xhdGUgPyAidjhTdHJpbmcoJHZhbHVlJGdldElzb2xhdGVBcmcsICRyZXR1cm5IYW5k
bGVUeXBlKSIgOiAiZGVwcmVjYXRlZFY4U3RyaW5nKCR2YWx1ZSkiOwogICAgIH0KIAogICAgIG15
ICRhcnJheVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCR0eXBlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCAxM2QwMTEwNWZlMGVkMmUyZGM1N2Yy
NDllNzA5ZDk4YjY1OTc3MGY1Li5kN2ViZjBlODdmOTZjZTI4OWFlZjhmNGE3NGRhOTViZGE2YjRl
NjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC00MSwxMyArNDEs
MTMgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgVjhfVVNFKFQpIHsgfQogc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBhdHRyMUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdEV2ZW50Q29u
c3RydWN0b3IqIGltcCA9IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OnRvTmF0aXZlKGluZm8uSG9s
ZGVyKCkpOwotICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmF0dHIxKCksIGluZm8uR2V0SXNvbGF0
ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5hdHRyMSgpLCBpbmZvLkdldElzb2xhdGUo
KSwgUmV0dXJuUGVyc2lzdGVudEhhbmRsZSk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gYXR0cjJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RFdmVudENvbnN0cnVjdG9yKiBpbXAg
PSBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBy
ZXR1cm4gdjhTdHJpbmcoaW1wLT5hdHRyMigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0
dXJuIHY4U3RyaW5nKGltcC0+YXR0cjIoKSwgaW5mby5HZXRJc29sYXRlKCksIFJldHVyblBlcnNp
c3RlbnRIYW5kbGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0RXZlbnRDb25zdHJ1Y3RvclY4
SW50ZXJuYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKaW5kZXggZmJlOTc1ZTdlZWU0MDVkYzAwNmJi
ZjIwM2MxNDYyMDdmYWRlNTJiYy4uNjEyZjlmMDVkMTQ4MTA4OWUwMjVlYjFlZDRmZjAzMmU3ZWE0
OThjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IHZvaWQgVjhfVVNFKFQpIHsgfQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBuYW1lQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0RXhjZXB0aW9uKiBpbXAgPSBWOFRlc3RF
eGNlcHRpb246OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OFN0cmluZyhp
bXAtPm5hbWUoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB2OFN0cmluZyhpbXAt
Pm5hbWUoKSwgaW5mby5HZXRJc29sYXRlKCksIFJldHVyblBlcnNpc3RlbnRIYW5kbGUpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBUZXN0RXhjZXB0aW9uVjhJbnRlcm5hbApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNl
LmNwcAppbmRleCA4OTdmMGM1NzliMGNmNDRiOGMyYmJkNDU5ZTYzYTdkMDcxMzAyN2JmLi5lYmYy
NzAzMjMyMGFjNDc4NTM0Nzk5YTUwNWJlNzI2OWRlMmUwMzBiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNl
LmNwcApAQCAtNTksNyArNTksNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN1cHBs
ZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPAogCiBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHN1cHBsZW1lbnRhbFN0YXRpY0F0dHJBdHRyR2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQog
ewotICAgIHJldHVybiB2OFN0cmluZyhUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdGF0
aWNBdHRyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoVGVzdFN1
cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RhdGljQXR0cigpLCBpbmZvLkdldElzb2xhdGUoKSwg
UmV0dXJuUGVyc2lzdGVudEhhbmRsZSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9u
MTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIHZvaWQg
c3VwcGxlbWVudGFsU3RhdGljQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2MKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVudGFsU3Ry
MUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCiB7CiAgICAgVGVzdEludGVyZmFjZSogaW1wID0gVjhUZXN0SW50ZXJmYWNl
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhTdHJpbmcoVGVzdFN1cHBs
ZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMShpbXApLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAg
cmV0dXJuIHY4U3RyaW5nKFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0cjEoaW1wKSwg
aW5mby5HZXRJc29sYXRlKCksIFJldHVyblBlcnNpc3RlbnRIYW5kbGUpOwogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCkBAIC05MCw3ICs5
MCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVudGFsU3RyMUF0dHJH
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHN1cHBsZW1lbnRhbFN0cjJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RJbnRlcmZhY2UqIGlt
cCA9IFY4VGVzdEludGVyZmFjZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJu
IHY4U3RyaW5nKFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0cjIoaW1wKSwgaW5mby5H
ZXRJc29sYXRlKCkpOworICAgIHJldHVybiB2OFN0cmluZyhUZXN0U3VwcGxlbWVudGFsOjpzdXBw
bGVtZW50YWxTdHIyKGltcCksIGluZm8uR2V0SXNvbGF0ZSgpLCBSZXR1cm5QZXJzaXN0ZW50SGFu
ZGxlKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjEyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0T2JqLmNwcAppbmRleCAzZmMyOGJkZmUyYTcyNzM2ZmUwNzc1NmUyZjk3MmY3ZDU3
NmZhZWQ5Li42MTE0ZTRlMDc1NmJmYzY0ZWZkYzU4ZjIxMzA4YjY0ZjU1ZTYwMmE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2Jq
LmNwcApAQCAtOTAsNyArOTAsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlYWRP
bmx5TG9uZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYQogc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiByZWFkT25seVN0cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAg
IFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAg
cmV0dXJuIHY4U3RyaW5nKGltcC0+cmVhZE9ubHlTdHJpbmdBdHRyKCksIGluZm8uR2V0SXNvbGF0
ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5yZWFkT25seVN0cmluZ0F0dHIoKSwgaW5m
by5HZXRJc29sYXRlKCksIFJldHVyblBlcnNpc3RlbnRIYW5kbGUpOwogfQogCiBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHJlYWRPbmx5VGVzdE9iakF0dHJBdHRyR2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtMTEz
LDcgKzExMyw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RhdGljUmVhZE9ubHlM
b25nQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpCiAKIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gc3RhdGljU3RyaW5nQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7Ci0gICAgcmV0dXJuIHY4
U3RyaW5nKFRlc3RPYmo6OnN0YXRpY1N0cmluZ0F0dHIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwor
ICAgIHJldHVybiB2OFN0cmluZyhUZXN0T2JqOjpzdGF0aWNTdHJpbmdBdHRyKCksIGluZm8uR2V0
SXNvbGF0ZSgpLCBSZXR1cm5QZXJzaXN0ZW50SGFuZGxlKTsKIH0KIAogc3RhdGljIHZvaWQgc3Rh
dGljU3RyaW5nQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAt
MTk2LDcgKzE5Niw3IEBAIHN0YXRpYyB2b2lkIHVuc2lnbmVkTG9uZ0xvbmdBdHRyQXR0clNldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsCiBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHN0cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9
IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5n
KGltcC0+c3RyaW5nQXR0cigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHY4U3Ry
aW5nKGltcC0+c3RyaW5nQXR0cigpLCBpbmZvLkdldElzb2xhdGUoKSwgUmV0dXJuUGVyc2lzdGVu
dEhhbmRsZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0cmluZ0F0dHJBdHRyU2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTI1NCw3ICsyNTQsNyBAQCBzdGF0aWMgdm9pZCBjcmVh
dGVBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZh
bHVlPiB2YQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWZsZWN0ZWRTdHJpbmdBdHRy
QXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29y
SW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmZhc3RHZXRBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0ciksIGluZm8uR2V0SXNv
bGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5mYXN0R2V0QXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpLCBpbmZvLkdldElzb2xhdGUo
KSwgUmV0dXJuUGVyc2lzdGVudEhhbmRsZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlZmxlY3RlZFN0
cmluZ0F0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTMxMCw3
ICszMTAsNyBAQCBzdGF0aWMgdm9pZCByZWZsZWN0ZWRCb29sZWFuQXR0ckF0dHJTZXR0ZXIodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbAogc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiByZWZsZWN0ZWRVUkxBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OFN0cmlu
ZyhpbXAtPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0
dHJBdHRyKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmdl
dFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSwg
aW5mby5HZXRJc29sYXRlKCksIFJldHVyblBlcnNpc3RlbnRIYW5kbGUpOwogfQogCiBzdGF0aWMg
dm9pZCByZWZsZWN0ZWRVUkxBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pCkBAIC0zMjQsNyArMzI0LDcgQEAgc3RhdGljIHZvaWQgcmVmbGVjdGVkVVJMQXR0ckF0dHJT
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODoKIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVmbGVjdGVkU3RyaW5nQXR0ckF0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAg
ICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAg
ICByZXR1cm4gdjhTdHJpbmcoaW1wLT5mYXN0R2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAg
IHJldHVybiB2OFN0cmluZyhpbXAtPmZhc3RHZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIpLCBpbmZvLkdldElzb2xhdGUoKSwgUmV0dXJu
UGVyc2lzdGVudEhhbmRsZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlZmxlY3RlZFN0cmluZ0F0dHJB
dHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVl
PiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTM2Niw3ICszNjYsNyBA
QCBzdGF0aWMgdm9pZCByZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckF0dHJTZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4Ogogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBy
ZWZsZWN0ZWRDdXN0b21VUkxBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OFN0cmluZyhp
bXAtPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxB
dHRyQXR0ciksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5n
ZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0
dHIpLCBpbmZvLkdldElzb2xhdGUoKSwgUmV0dXJuUGVyc2lzdGVudEhhbmRsZSk7CiB9CiAKIHN0
YXRpYyB2b2lkIHJlZmxlY3RlZEN1c3RvbVVSTEF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKQEAgLTQzMyw3ICs0MzMsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcih2ODo6TG9jYWw8
dgogICAgIFN0cmluZyB2ID0gaW1wLT5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYyk7
CiAgICAgaWYgKFVOTElLRUxZKGVjKSkKICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihl
YywgaW5mby5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB2OFN0cmluZyh2LCBpbmZvLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5nKHYsIGluZm8uR2V0SXNvbGF0ZSgpLCBSZXR1
cm5QZXJzaXN0ZW50SGFuZGxlKTsKIH0KIAogc3RhdGljIHZvaWQgc3RyaW5nQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb25BdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTQ0
Nyw3ICs0NDcsNyBAQCBzdGF0aWMgdm9pZCBzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0
dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsCiBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAg
IHJldHVybiB2OFN0cmluZyhpbXAtPnN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCksIGlu
Zm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5zdHJpbmdBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbigpLCBpbmZvLkdldElzb2xhdGUoKSwgUmV0dXJuUGVyc2lzdGVudEhh
bmRsZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uQXR0
clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
dmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC05MTMsNyArOTEzLDcgQEAg
c3RhdGljIHZvaWQgaWRBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaGFz
aEF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5oYXNoKCksIGluZm8uR2V0
SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5oYXNoKCksIGluZm8uR2V0SXNv
bGF0ZSgpLCBSZXR1cm5QZXJzaXN0ZW50SGFuZGxlKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiByZXBsYWNlYWJsZUF0dHJpYnV0ZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0xMzcxLDcgKzEz
NzEsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhDYWxsYmFja0Fu
ZE9wdGlvbmFsQXJnQ2FsbGJhY2soY29uc3Qgdjg6Ogogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBjb25kaXRpb25hbE1ldGhvZDFDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+Y29uZGl0aW9uYWxNZXRob2QxKCksIGFyZ3Mu
R2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5jb25kaXRpb25hbE1ldGhv
ZDEoKSwgYXJncy5HZXRJc29sYXRlKCksIFJldHVyblBlcnNpc3RlbnRIYW5kbGUpOwogfQogCiAj
ZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOEJpbmRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZy5oCmluZGV4IDFjM2U5NTExMzBhMGYxOTk0MGU2MDBhYjcxMWUwOWFlMTFiMTk5MTguLmVm
ODE4ZDk2Mjc2MDRjNjRkYjliYjc5ZGI2YTA3MmY0NzU1M2MyNWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4QmluZGluZy5oCkBAIC0xNDUsMTMgKzE0NSwxMyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgLy8gUmV0dXJuIGEgVjggZXh0ZXJuYWwgc3RyaW5nIHRoYXQgc2hhcmVzIHRo
ZSB1bmRlcmx5aW5nIGJ1ZmZlciB3aXRoIHRoZSBnaXZlbgogICAgIC8vIFdlYkNvcmUgc3RyaW5n
LiBUaGUgcmVmZXJlbmNlIGNvdW50aW5nIG1lY2hhbmlzbSBpcyB1c2VkIHRvIGtlZXAgdGhlCiAg
ICAgLy8gdW5kZXJseWluZyBidWZmZXIgYWxpdmUgd2hpbGUgdGhlIHN0cmluZyBpcyBzdGlsbCBs
aXZlIGluIHRoZSBWOCBlbmdpbmUuCi0gICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlN0cmluZz4g
djhTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkK
KyAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZywgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwLCBSZXR1cm5IYW5kbGVUeXBlIGhhbmRs
ZVR5cGUgPSBSZXR1cm5Mb2NhbEhhbmRsZSkKICAgICB7CiAgICAgICAgIGlmIChVTkxJS0VMWSgh
aXNvbGF0ZSkpCiAgICAgICAgICAgICBpc29sYXRlID0gdjg6Oklzb2xhdGU6OkdldEN1cnJlbnQo
KTsKICAgICAgICAgaWYgKHN0cmluZy5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiB2ODo6
U3RyaW5nOjpFbXB0eShpc29sYXRlKTsKLSAgICAgICAgcmV0dXJuIFY4UGVySXNvbGF0ZURhdGE6
OmZyb20oaXNvbGF0ZSktPnN0cmluZ0NhY2hlKCktPnY4RXh0ZXJuYWxTdHJpbmcoc3RyaW5nLmlt
cGwoKSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlz
b2xhdGUpLT5zdHJpbmdDYWNoZSgpLT52OEV4dGVybmFsU3RyaW5nKHN0cmluZy5pbXBsKCksIGhh
bmRsZVR5cGUsIGlzb2xhdGUpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBBbGwgY2FsbCBzaXRl
cyBvZiB0aGlzIG1ldGhvZCBzaG91bGQgdXNlIHY4U3RyaW5nKCkuCkBAIC0xNjAsMjAgKzE2MCwy
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHJldHVybiB2OFN0cmluZyhzdHJpbmcs
IHY4OjpJc29sYXRlOjpHZXRDdXJyZW50KCkpOwogICAgIH0KIAotICAgIGlubGluZSB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdjhTdHJpbmdPck51bGwoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHY4OjpJ
c29sYXRlKiBpc29sYXRlKQorICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhTdHJp
bmdPck51bGwoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBSZXR1
cm5IYW5kbGVUeXBlIGhhbmRsZVR5cGUgPSBSZXR1cm5Mb2NhbEhhbmRsZSkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChpc29sYXRlKTsKICAgICAgICAgaWYgKHN0cmluZy5pc051bGwoKSkKICAgICAg
ICAgICAgIHJldHVybiB2OE51bGwoaXNvbGF0ZSk7Ci0gICAgICAgIHJldHVybiBWOFBlcklzb2xh
dGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5zdHJpbmdDYWNoZSgpLT52OEV4dGVybmFsU3RyaW5nKHN0
cmluZy5pbXBsKCksIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gVjhQZXJJc29sYXRlRGF0YTo6
ZnJvbShpc29sYXRlKS0+c3RyaW5nQ2FjaGUoKS0+djhFeHRlcm5hbFN0cmluZyhzdHJpbmcuaW1w
bCgpLCBoYW5kbGVUeXBlLCBpc29sYXRlKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JVbmRlZmluZWQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQorICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhT
dHJpbmdPclVuZGVmaW5lZChjb25zdCBTdHJpbmcmIHN0cmluZywgdjg6Oklzb2xhdGUqIGlzb2xh
dGUsIFJldHVybkhhbmRsZVR5cGUgaGFuZGxlVHlwZSA9IFJldHVybkxvY2FsSGFuZGxlKQogICAg
IHsKICAgICAgICAgQVNTRVJUKGlzb2xhdGUpOwogICAgICAgICBpZiAoc3RyaW5nLmlzTnVsbCgp
KQogICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoaXNvbGF0ZSk7Ci0gICAgICAgIHJl
dHVybiBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5zdHJpbmdDYWNoZSgpLT52OEV4
dGVybmFsU3RyaW5nKHN0cmluZy5pbXBsKCksIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gVjhQ
ZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+c3RyaW5nQ2FjaGUoKS0+djhFeHRlcm5hbFN0
cmluZyhzdHJpbmcuaW1wbCgpLCBoYW5kbGVUeXBlLCBpc29sYXRlKTsKICAgICB9CiAKICAgICBp
bmxpbmUgdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4gdjhJbnRlZ2VyKGludCB2YWx1ZSwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUgPSAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhWYWx1ZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VmFsdWVD
YWNoZS5jcHAKaW5kZXggNGY4MWIzOThhNDljZjZkNTM5OTdmM2UxMDllOTZiNjk0YWJiYmJjMi4u
ZTc0YTM1ZmFjYTM1ZTY5YWU3MGE1Y2NmYjU3MDEyMWQ3ZTM3NTRjYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhWYWx1ZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuY3BwCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQg
U3RyaW5nQ2FjaGU6OnJlbW92ZShTdHJpbmdJbXBsKiBzdHJpbmdJbXBsKQogICAgIGNsZWFyT25H
QygpOwogfQogCi12ODo6TG9jYWw8djg6OlN0cmluZz4gU3RyaW5nQ2FjaGU6OnY4RXh0ZXJuYWxT
dHJpbmdTbG93KFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlKQor
djg6OkhhbmRsZTx2ODo6U3RyaW5nPiBTdHJpbmdDYWNoZTo6djhFeHRlcm5hbFN0cmluZ1Nsb3co
U3RyaW5nSW1wbCogc3RyaW5nSW1wbCwgUmV0dXJuSGFuZGxlVHlwZSBoYW5kbGVUeXBlLCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBpZiAoIXN0cmluZ0ltcGwtPmxlbmd0aCgpKQogICAg
ICAgICByZXR1cm4gdjg6OlN0cmluZzo6RW1wdHkoaXNvbGF0ZSk7CkBAIC03Nyw2ICs3Nyw4IEBA
IHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBTdHJpbmdDYWNoZTo6djhFeHRlcm5hbFN0cmluZ1Nsb3co
U3RyaW5nSW1wbCogc3RyaW5nSW1wbCwKICAgICAgICAgaWYgKGhhbmRsZS5Jc1dlYWsoKSkgewog
ICAgICAgICAgICAgbV9sYXN0U3RyaW5nSW1wbCA9IHN0cmluZ0ltcGw7CiAgICAgICAgICAgICBt
X2xhc3RWOFN0cmluZyA9IGhhbmRsZTsKKyAgICAgICAgICAgIGlmIChoYW5kbGVUeXBlID09IFJl
dHVyblBlcnNpc3RlbnRIYW5kbGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKICAg
ICAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OlN0cmluZz46Ok5ldyhoYW5kbGUpOwogICAg
ICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhW
YWx1ZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuaApp
bmRleCAxMGZlNzI0Yjk2YmNhMTA5Y2FmODcyYWM3OTJkMjk4MTM5ZmU0YzkyLi41NjU0ODIzY2Ni
Y2Y1ZGZmZTNlOTdlMTEwZDQ0NTk0ZjgwMTdkNTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFZhbHVlQ2FjaGUuaApAQCAtMzUsMTYgKzM1LDI0IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorZW51bSBSZXR1cm5IYW5kbGVUeXBlIHsKKyAgICBSZXR1cm5Mb2NhbEhhbmRsZSwK
KyAgICBSZXR1cm5QZXJzaXN0ZW50SGFuZGxlCit9OworCiBjbGFzcyBTdHJpbmdDYWNoZSB7CiBw
dWJsaWM6CiAgICAgU3RyaW5nQ2FjaGUoKSB7IH0KIAotICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiB2OEV4dGVybmFsU3RyaW5nKFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwsIHY4OjpJc29sYXRlKiBp
c29sYXRlKQorICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhFeHRlcm5hbFN0cmluZyhTdHJp
bmdJbXBsKiBzdHJpbmdJbXBsLCBSZXR1cm5IYW5kbGVUeXBlIGhhbmRsZVR5cGUsIHY4OjpJc29s
YXRlKiBpc29sYXRlKQogICAgIHsKLSAgICAgICAgaWYgKG1fbGFzdFN0cmluZ0ltcGwuZ2V0KCkg
PT0gc3RyaW5nSW1wbCAmJiBtX2xhc3RWOFN0cmluZy5Jc1dlYWsoaXNvbGF0ZSkpCisgICAgICAg
IGlmIChtX2xhc3RTdHJpbmdJbXBsLmdldCgpID09IHN0cmluZ0ltcGwgJiYgbV9sYXN0VjhTdHJp
bmcuSXNXZWFrKGlzb2xhdGUpKSB7CisgICAgICAgICAgICBpZiAoaGFuZGxlVHlwZSA9PSBSZXR1
cm5QZXJzaXN0ZW50SGFuZGxlKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2xhc3RWOFN0cmlu
ZzsKICAgICAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OlN0cmluZz46Ok5ldyhpc29sYXRl
LCBtX2xhc3RWOFN0cmluZyk7CisgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gdjhFeHRlcm5h
bFN0cmluZ1Nsb3coc3RyaW5nSW1wbCwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB2OEV4dGVy
bmFsU3RyaW5nU2xvdyhzdHJpbmdJbXBsLCBoYW5kbGVUeXBlLCBpc29sYXRlKTsKICAgICB9CiAK
ICAgICB2b2lkIGNsZWFyT25HQygpIApAQCAtNTcsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKIHByaXZhdGU6
Ci0gICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4RXh0ZXJuYWxTdHJpbmdTbG93KFN0cmluZ0lt
cGwqLCB2ODo6SXNvbGF0ZSopOworICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhFeHRlcm5h
bFN0cmluZ1Nsb3coU3RyaW5nSW1wbCosIFJldHVybkhhbmRsZVR5cGUsIHY4OjpJc29sYXRlKik7
CiAKICAgICBIYXNoTWFwPFN0cmluZ0ltcGwqLCB2ODo6U3RyaW5nKj4gbV9zdHJpbmdDYWNoZTsK
ICAgICB2ODo6UGVyc2lzdGVudDx2ODo6U3RyaW5nPiBtX2xhc3RWOFN0cmluZzsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182371</attachid>
            <date>2013-01-11 11:03:47 -0800</date>
            <delta_ts>2013-01-11 11:29:03 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>bug-106557-20130111200049.patch</filename>
            <type>text/plain</type>
            <size>23096</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTc3MWY2YTNkZDZjNTY2
ZjBkZDMxZTI1OWRmNmI4YmYyMWNjNjA4My4uYWJlYzVmMDA1NmFhMGI4ZmM3YWRkMjc5Y2M4OGQ4
YmFlY2ZiMjU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEzLTAxLTEwICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIERvIG5vdCBj
cmVhdGUgYSBsb2NhbCBoYW5kbGUgZm9yIGEgY2FjaGVkIHY4IHN0cmluZyB0aGF0IGlzIHJldHVy
bmVkIHRvIFY4IGltbWVkaWF0ZWx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDY1NTcKKworICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgor
CisgICAgICAgIEN1cnJlbnRseSB3ZSBhcmUgYWx3YXlzIGNyZWF0aW5nIGEgbG9jYWwgaGFuZGxl
IGZvciBhIGNhY2hlZAorICAgICAgICBWOCBzdHJpbmcgcmV0dXJuZWQgdG8gVjg6CisKKyAgICAg
ICAgICBIYW5kbGU8VmFsdWU+IHY4U3RyaW5nKFN0cmluZ0ltcGwqIGltcGwsIElzb2xhdGUqIGlz
b2xhdGUpIHsKKyAgICAgICAgICAgIC4uLjsKKyAgICAgICAgICAgIHJldHVybiBMb2NhbDxTdHJp
bmc+OjpOZXcoaXNvbGF0ZSwgbV9jYWNoZWRTdHJpbmcpOworICAgICAgICAgIH0KKworICAgICAg
ICBIb3dldmVyLCB3ZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhIGxvY2FsIGhhbmRsZSBpbiBhIGNh
c2UKKyAgICAgICAgd2hlcmUgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IG5vIFY4IG9iamVjdCBhbGxv
Y2F0aW9uIGlzIGNvbmR1Y3RlZAorICAgICAgICBiZWZvcmUgYSBjb250cm9sIGZsb3cgcmV0dXJu
cyBiYWNrIHRvIFY4LiBJbiBwYXJ0aWN1bGFyLCBpbiBhIGNhc2UKKyAgICAgICAgd2hlcmUgYSBj
YWNoZWQgVjggc3RyaW5nIGlzIGltbWVkaWF0ZWx5IHJldHVybmVkIHRvIFY4LCB3ZSBkb24ndAor
ICAgICAgICBuZWVkIHRvIGNyZWF0ZSBhIGxvY2FsIGhhbmRsZToKKworICAgICAgICAgIEhhbmRs
ZTxWYWx1ZT4geHh4eEF0dHJHZXR0ZXIoKSB7CisgICAgICAgICAgICAuLi47CisgICAgICAgICAg
ICByZXR1cm4gdjhTdHJpbmcoaW1wLT54eHh4KCksIGlzb2xhdGUpOyAgLy8gVGhpcyBjYW4gcmV0
dXJuIGEgcGVyc2lzdGVudCBoYW5kbGUgc2FmZWx5LgorICAgICAgICAgIH0KKworICAgICAgICBU
aGlzIHBhdGNoIGltcHJvdmVzIHBlcmZvcm1hbmNlIG9mIGRpdi5pZCBieSA5LjIlLgorCisgICAg
ICAgIE5vIHRlc3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKEdlbmVyYXRlTm9ybWFsQXR0
ckdldHRlcik6CisgICAgICAgIChHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24pOgorICAg
ICAgICAoR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcpOgorICAgICAgICAoTmF0aXZlVG9KU1Zh
bHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25z
dHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3RvclY4SW50
ZXJuYWw6OmF0dHIxQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0RXZlbnRDb25z
dHJ1Y3RvclY4SW50ZXJuYWw6OmF0dHIyQXR0ckdldHRlcik6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
ZXN0RXhjZXB0aW9uVjhJbnRlcm5hbDo6bmFtZUF0dHJHZXR0ZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdEludGVyZmFjZVY4SW50ZXJuYWw6OnN1cHBsZW1lbnRhbFN0YXRpY0F0dHJBdHRyR2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RJbnRlcmZhY2VWOEludGVybmFsOjpzdXBwbGVt
ZW50YWxTdHIxQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW50ZXJmYWNlVjhJ
bnRlcm5hbDo6c3VwcGxlbWVudGFsU3RyMkF0dHJHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9i
alY4SW50ZXJuYWw6OnJlYWRPbmx5U3RyaW5nQXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnN0YXRpY1N0cmluZ0F0dHJBdHRyR2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpzdHJpbmdBdHRyQXR0ckdldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6cmVmbGVjdGVkU3RyaW5nQXR0
ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnJlZmxl
Y3RlZFVSTEF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVy
bmFsOjpyZWZsZWN0ZWRDdXN0b21VUkxBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXN0T2JqVjhJbnRlcm5hbDo6c3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyR2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpzdHJpbmdBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4
SW50ZXJuYWw6Omhhc2hBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOElu
dGVybmFsOjpjb25kaXRpb25hbE1ldGhvZDFDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3Mv
djgvVjhCaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjp2OFN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjp2OFN0cmluZ09yTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjp2OFN0cmluZ09yVW5k
ZWZpbmVkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nQ2FjaGU6OnY4RXh0ZXJuYWxTdHJpbmdTbG93KToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0Nh
Y2hlOjp2OEV4dGVybmFsU3RyaW5nKToKKyAgICAgICAgKFN0cmluZ0NhY2hlKToKKwogMjAxMy0w
MS0wOSAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdW01h
Y10gR3JhcGhpY3NTdXJmYWNlIGRvZXMgbm90IG5lZWQgZ2xFbmFibGUvZ2xEaXNhYmxlIGZvciB0
ZXh0dXJlIHRhcmdldHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDA3Y2IyZGQ4NTU3NmQyNGVkMzQ3MTY2M2Q5YTRhYWI3
MWY3YTY1OGEuLjYwOWM1Yjc1ZjZkZTljMWRjZTk1ZDBkY2VmZjVkZjcyNmRiN2FmYTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CkBAIC05MjksNyArOTI5LDcgQEAgRU5ECiAgICAgICAgICAgICAjIEdlbmVyYXRlIHN1cGVyLWNv
bXBhY3QgY2FsbCBmb3IgcmVndWxhciBhdHRyaWJ1dGUgZ2V0dGVyOgogICAgICAgICAgICAgbXkg
KCRmdW5jdGlvbk5hbWUsIEBhcmd1bWVudHMpID0gJGNvZGVHZW5lcmF0b3ItPkdldHRlckV4cHJl
c3Npb24oXCVpbXBsSW5jbHVkZXMsICRpbnRlcmZhY2VOYW1lLCAkYXR0cmlidXRlKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgRWxlbWVudCogaW1wID0gVjhFbGVt
ZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT4ke2Z1bmN0aW9uTmFtZX0o
IiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB2OFN0cmlu
ZyhpbXAtPiR7ZnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpLCBp
bmZvLkdldElzb2xhdGUoKSwgUmV0dXJuVW5zYWZlSGFuZGxlKTtcbiIpOwogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIn1cblxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRj
b25kaXRpb25hbFN0cmluZzsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExMTQsNyArMTExNCw3
IEBAIEVORAogICAgIHJldHVybiB2YWx1ZTsKIEVORAogICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLCAkcmVzdWx0LCAiaW5mby5Ib2xkZXIoKSIsICJpbmZvLkdldElz
b2xhdGUoKSIsICJpbmZvIiwgImltcCIpLiI7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnREZWNscywgIiAgICByZXR1cm4gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWdu
YXR1cmUsICRyZXN1bHQsICJpbmZvLkhvbGRlcigpIiwgImluZm8uR2V0SXNvbGF0ZSgpIiwgImlu
Zm8iLCAiaW1wIiwgIlJldHVyblVuc2FmZUhhbmRsZSIpLiI7XG4iKTsKICAgICB9CiAKICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAifVxuXG4iKTsgICMgZW5kIG9mIGdldHRlcgpAQCAtMzYx
OCw5ICszNjE4LDkgQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKCkKICAgICBteSAk
bmF0aXZlVmFsdWU7CiAgICAgIyBGSVhNRTogVXBkYXRlIGZvciBhbGwgU2NyaXB0V3JhcHBhYmxl
cy4KICAgICBpZiAoSXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSkpIHsKLSAgICAgICAgJG5h
dGl2ZVZhbHVlID0gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkcmV0dXJu
LCAiYXJncy5Ib2xkZXIoKSIsICJhcmdzLkdldElzb2xhdGUoKSIsICJhcmdzIiwgImltcCIpOwor
ICAgICAgICAkbmF0aXZlVmFsdWUgPSBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1
cmUsICRyZXR1cm4sICJhcmdzLkhvbGRlcigpIiwgImFyZ3MuR2V0SXNvbGF0ZSgpIiwgImFyZ3Mi
LCAiaW1wIiwgIlJldHVyblVuc2FmZUhhbmRsZSIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgICRu
YXRpdmVWYWx1ZSA9IE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgJHJldHVy
biwgImFyZ3MuSG9sZGVyKCkiLCAiYXJncy5HZXRJc29sYXRlKCkiKTsKKyAgICAgICAgJG5hdGl2
ZVZhbHVlID0gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkcmV0dXJuLCAi
YXJncy5Ib2xkZXIoKSIsICJhcmdzLkdldElzb2xhdGUoKSIsIDAsIDAsICJSZXR1cm5VbnNhZmVI
YW5kbGUiKTsKICAgICB9CiAKICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAicmV0dXJuICIgLiAk
bmF0aXZlVmFsdWUgLiAiO1xuIjsKQEAgLTQwMzAsNiArNDAzMCw4IEBAIHN1YiBOYXRpdmVUb0pT
VmFsdWUKICAgICBteSAkZ2V0SG9sZGVyQ29udGFpbmVyQXJnID0gJGdldEhvbGRlckNvbnRhaW5l
ciA/ICIsICRnZXRIb2xkZXJDb250YWluZXIiIDogIiI7CiAgICAgbXkgJGdldFNjcmlwdFdyYXBw
YWJsZSA9IHNoaWZ0OwogICAgIG15ICRnZXRTY3JpcHRXcmFwcGFibGVBcmcgPSAkZ2V0U2NyaXB0
V3JhcHBhYmxlID8gIiwgJGdldFNjcmlwdFdyYXBwYWJsZSIgOiAiIjsKKyAgICBteSAkcmV0dXJu
SGFuZGxlVHlwZSA9IHNoaWZ0OworCiAgICAgbXkgJHR5cGUgPSAkc2lnbmF0dXJlLT50eXBlOwog
CiAgICAgcmV0dXJuICgkZ2V0SXNvbGF0ZSA/ICJ2OEJvb2xlYW4oJHZhbHVlLCAkZ2V0SXNvbGF0
ZSkiIDogInY4Qm9vbGVhbigkdmFsdWUpIikgaWYgJHR5cGUgZXEgImJvb2xlYW4iOwpAQCAtNDA1
OCwxMiArNDA2MCwxMiBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgaWYgKCRjb2RlR2VuZXJh
dG9yLT5Jc1N0cmluZ1R5cGUoJHR5cGUpKSB7CiAgICAgICAgIG15ICRjb252ID0gJHNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXMifTsKICAg
ICAgICAgaWYgKGRlZmluZWQgJGNvbnYpIHsKLSAgICAgICAgICAgIHJldHVybiAidjhTdHJpbmdP
ck51bGwoJHZhbHVlJGdldElzb2xhdGVBcmcpIiBpZiAkY29udiBlcSAiTnVsbCI7Ci0gICAgICAg
ICAgICByZXR1cm4gInY4U3RyaW5nT3JVbmRlZmluZWQoJHZhbHVlJGdldElzb2xhdGVBcmcpIiBp
ZiAkY29udiBlcSAiVW5kZWZpbmVkIjsKKyAgICAgICAgICAgIHJldHVybiAidjhTdHJpbmdPck51
bGwoJHZhbHVlJGdldElzb2xhdGVBcmcsICRyZXR1cm5IYW5kbGVUeXBlKSIgaWYgJGNvbnYgZXEg
Ik51bGwiOworICAgICAgICAgICAgcmV0dXJuICJ2OFN0cmluZ09yVW5kZWZpbmVkKCR2YWx1ZSRn
ZXRJc29sYXRlQXJnLCAkcmV0dXJuSGFuZGxlVHlwZSkiIGlmICRjb252IGVxICJVbmRlZmluZWQi
OwogCiAgICAgICAgICAgICBkaWUgIlVua25vd24gdmFsdWUgZm9yIFRyZWF0UmV0dXJuZWROdWxs
U3RyaW5nQXMgZXh0ZW5kZWQgYXR0cmlidXRlIjsKICAgICAgICAgfQotICAgICAgICByZXR1cm4g
JGdldElzb2xhdGUgPyAidjhTdHJpbmcoJHZhbHVlLCAkZ2V0SXNvbGF0ZSkiIDogImRlcHJlY2F0
ZWRWOFN0cmluZygkdmFsdWUpIjsKKyAgICAgICAgcmV0dXJuICRnZXRJc29sYXRlID8gInY4U3Ry
aW5nKCR2YWx1ZSRnZXRJc29sYXRlQXJnLCAkcmV0dXJuSGFuZGxlVHlwZSkiIDogImRlcHJlY2F0
ZWRWOFN0cmluZygkdmFsdWUpIjsKICAgICB9CiAKICAgICBteSAkYXJyYXlUeXBlID0gJGNvZGVH
ZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1
Y3Rvci5jcHAKaW5kZXggMTNkMDExMDVmZTBlZDJlMmRjNTdmMjQ5ZTcwOWQ5OGI2NTk3NzBmNS4u
ZDdlYmYwZTg3Zjk2Y2UyODlhZWY4ZjRhNzRkYTk1YmRhNmI0ZTYyZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RFdmVudENvbnN0cnVjdG9yLmNwcApAQCAtNDEsMTMgKzQxLDEzIEBAIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiB2b2lkIFY4X1VTRShUKSB7IH0KIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
YXR0cjFBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RFdmVudENvbnN0cnVjdG9yKiBpbXAgPSBWOFRl
c3RFdmVudENvbnN0cnVjdG9yOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4g
djhTdHJpbmcoaW1wLT5hdHRyMSgpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHY4
U3RyaW5nKGltcC0+YXR0cjEoKSwgaW5mby5HZXRJc29sYXRlKCksIFJldHVyblBlcnNpc3RlbnRI
YW5kbGUpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGF0dHIyQXR0ckdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKIHsKICAgICBUZXN0RXZlbnRDb25zdHJ1Y3RvciogaW1wID0gVjhUZXN0RXZlbnRDb25zdHJ1
Y3Rvcjo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+
YXR0cjIoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmF0
dHIyKCksIGluZm8uR2V0SXNvbGF0ZSgpLCBSZXR1cm5QZXJzaXN0ZW50SGFuZGxlKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgVGVzdEV2ZW50Q29uc3RydWN0b3JWOEludGVybmFsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNl
cHRpb24uY3BwCmluZGV4IGZiZTk3NWU3ZWVlNDA1ZGMwMDZiYmYyMDNjMTQ2MjA3ZmFkZTUyYmMu
LjYxMmY5ZjA1ZDE0ODEwODllMDI1ZWIxZWQ0ZmYwMzJlN2VhNDk4YzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNl
cHRpb24uY3BwCkBAIC00MCw3ICs0MCw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIFY4
X1VTRShUKSB7IH0KIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbmFtZUF0dHJHZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
CiB7CiAgICAgVGVzdEV4Y2VwdGlvbiogaW1wID0gVjhUZXN0RXhjZXB0aW9uOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5uYW1lKCksIGluZm8uR2V0
SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5uYW1lKCksIGluZm8uR2V0SXNv
bGF0ZSgpLCBSZXR1cm5QZXJzaXN0ZW50SGFuZGxlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVz
dEV4Y2VwdGlvblY4SW50ZXJuYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKaW5kZXggODk3ZjBjNTc5
YjBjZjQ0YjhjMmJiZDQ1OWU2M2E3ZDA3MTMwMjdiZi4uZWJmMjcwMzIzMjBhYzQ3ODUzNDc5OWE1
MDViZTcyNjlkZTJlMDMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKQEAgLTU5LDcgKzU5LDcg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBwbGVtZW50YWxTdGF0aWNSZWFkT25s
eUF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDwKIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBzdXBwbGVtZW50YWxTdGF0aWNBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKLSAgICByZXR1cm4gdjhTdHJp
bmcoVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RhdGljQXR0cigpLCBpbmZvLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5nKFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1l
bnRhbFN0YXRpY0F0dHIoKSwgaW5mby5HZXRJc29sYXRlKCksIFJldHVyblBlcnNpc3RlbnRIYW5k
bGUpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpCkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyB2b2lkIHN1cHBsZW1lbnRhbFN0YXRpY0F0
dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jCiBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHN1cHBsZW1lbnRhbFN0cjFBdHRyR2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAg
IFRlc3RJbnRlcmZhY2UqIGltcCA9IFY4VGVzdEludGVyZmFjZTo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRh
bFN0cjEoaW1wKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB2OFN0cmluZyhUZXN0
U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIxKGltcCksIGluZm8uR2V0SXNvbGF0ZSgpLCBS
ZXR1cm5QZXJzaXN0ZW50SGFuZGxlKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24x
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQpAQCAtOTAsNyArOTAsNyBAQCBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHN1cHBsZW1lbnRhbFN0cjFBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYQogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBwbGVtZW50YWxTdHIy
QXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29y
SW5mbyYgaW5mbykKIHsKICAgICBUZXN0SW50ZXJmYWNlKiBpbXAgPSBWOFRlc3RJbnRlcmZhY2U6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OFN0cmluZyhUZXN0U3VwcGxl
bWVudGFsOjpzdXBwbGVtZW50YWxTdHIyKGltcCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICBy
ZXR1cm4gdjhTdHJpbmcoVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMihpbXApLCBp
bmZvLkdldElzb2xhdGUoKSwgUmV0dXJuUGVyc2lzdGVudEhhbmRsZSk7CiB9CiAKICNlbmRpZiAv
LyBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5k
ZXggM2ZjMjhiZGZlMmE3MjczNmZlMDc3NTZlMmY5NzJmN2Q1NzZmYWVkOS4uNjExNGU0ZTA3NTZi
ZmM2NGVmZGM1OGYyMTMwOGI2NGY1NWU2MDJhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTkwLDcgKzkwLDcg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWFkT25seUxvbmdBdHRyQXR0ckdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmEKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
cmVhZE9ubHlTdHJpbmdBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRl
c3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OFN0cmluZyhpbXAt
PnJlYWRPbmx5U3RyaW5nQXR0cigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHY4
U3RyaW5nKGltcC0+cmVhZE9ubHlTdHJpbmdBdHRyKCksIGluZm8uR2V0SXNvbGF0ZSgpLCBSZXR1
cm5QZXJzaXN0ZW50SGFuZGxlKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBy
ZWFkT25seVRlc3RPYmpBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0YXRpY1JlYWRPbmx5TG9uZ0F0dHJBdHRyR2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0YXRpY1N0
cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKQogewotICAgIHJldHVybiB2OFN0cmluZyhUZXN0T2JqOjpzdGF0
aWNTdHJpbmdBdHRyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmco
VGVzdE9iajo6c3RhdGljU3RyaW5nQXR0cigpLCBpbmZvLkdldElzb2xhdGUoKSwgUmV0dXJuUGVy
c2lzdGVudEhhbmRsZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0YXRpY1N0cmluZ0F0dHJBdHRyU2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTE5Niw3ICsxOTYsNyBAQCBzdGF0
aWMgdm9pZCB1bnNpZ25lZExvbmdMb25nQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIHY4OjpMb2NhbAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJpbmdB
dHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKIHsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OFN0cmluZyhpbXAtPnN0cmluZ0F0dHIoKSwg
aW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB2OFN0cmluZyhpbXAtPnN0cmluZ0F0dHIo
KSwgaW5mby5HZXRJc29sYXRlKCksIFJldHVyblBlcnNpc3RlbnRIYW5kbGUpOwogfQogCiBzdGF0
aWMgdm9pZCBzdHJpbmdBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
CkBAIC0yNTQsNyArMjU0LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlQXR0clNldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmEKIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gcmVmbGVjdGVkU3RyaW5nQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAg
VGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBy
ZXR1cm4gdjhTdHJpbmcoaW1wLT5mYXN0R2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJu
IHY4U3RyaW5nKGltcC0+ZmFzdEdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxl
Y3RlZHN0cmluZ2F0dHJBdHRyKSwgaW5mby5HZXRJc29sYXRlKCksIFJldHVyblBlcnNpc3RlbnRI
YW5kbGUpOwogfQogCiBzdGF0aWMgdm9pZCByZWZsZWN0ZWRTdHJpbmdBdHRyQXR0clNldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0zMTAsNyArMzEwLDcgQEAgc3RhdGljIHZv
aWQgcmVmbGVjdGVkQm9vbGVhbkF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCB2ODo6TG9jYWwKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVmbGVjdGVkVVJM
QXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5nZXRVUkxBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciksIGluZm8uR2V0SXNv
bGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciksIGluZm8uR2V0SXNvbGF0ZSgpLCBS
ZXR1cm5QZXJzaXN0ZW50SGFuZGxlKTsKIH0KIAogc3RhdGljIHZvaWQgcmVmbGVjdGVkVVJMQXR0
ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtMzI0LDcgKzMyNCw3
IEBAIHN0YXRpYyB2b2lkIHJlZmxlY3RlZFVSTEF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6CiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHJlZmxlY3RlZFN0cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKGlt
cC0+ZmFzdEdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJp
bmdBdHRyQXR0ciksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1w
LT5mYXN0R2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmlu
Z0F0dHJBdHRyKSwgaW5mby5HZXRJc29sYXRlKCksIFJldHVyblBlcnNpc3RlbnRIYW5kbGUpOwog
fQogCiBzdGF0aWMgdm9pZCByZWZsZWN0ZWRTdHJpbmdBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCkBAIC0zNjYsNyArMzY2LDcgQEAgc3RhdGljIHZvaWQgcmVmbGVj
dGVkQ3VzdG9tQm9vbGVhbkF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCB2ODoKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVmbGVjdGVkQ3VzdG9tVVJMQXR0
ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5nZXRVUkxBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIpLCBpbmZvLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+Z2V0VVJMQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyKSwgaW5mby5HZXRJc29sYXRl
KCksIFJldHVyblBlcnNpc3RlbnRIYW5kbGUpOwogfQogCiBzdGF0aWMgdm9pZCByZWZsZWN0ZWRD
dXN0b21VUkxBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC00
MzMsNyArNDMzLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJpbmdBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIodjg6OkxvY2FsPHYKICAgICBTdHJpbmcgdiA9IGlt
cC0+c3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpOwogICAgIGlmIChVTkxJS0VMWShl
YykpCiAgICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGluZm8uR2V0SXNvbGF0ZSgp
KTsKLSAgICByZXR1cm4gdjhTdHJpbmcodiwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVy
biB2OFN0cmluZyh2LCBpbmZvLkdldElzb2xhdGUoKSwgUmV0dXJuUGVyc2lzdGVudEhhbmRsZSk7
CiB9CiAKIHN0YXRpYyB2b2lkIHN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0clNldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC00NDcsNyArNDQ3LDcgQEAgc3RhdGlj
IHZvaWQgc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhTdHJpbmcoaW1w
LT5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpLCBpbmZvLkdldElzb2xhdGUoKSk7Cisg
ICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+c3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSwg
aW5mby5HZXRJc29sYXRlKCksIFJldHVyblBlcnNpc3RlbnRIYW5kbGUpOwogfQogCiBzdGF0aWMg
dm9pZCBzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQpAQCAtOTEzLDcgKzkxMyw3IEBAIHN0YXRpYyB2b2lkIGlkQXR0clNl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFs
dWUsCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGhhc2hBdHRyR2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAg
IFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAg
cmV0dXJuIHY4U3RyaW5nKGltcC0+aGFzaCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0
dXJuIHY4U3RyaW5nKGltcC0+aGFzaCgpLCBpbmZvLkdldElzb2xhdGUoKSwgUmV0dXJuUGVyc2lz
dGVudEhhbmRsZSk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVwbGFjZWFi
bGVBdHRyaWJ1dGVBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtMTM3MSw3ICsxMzcxLDcgQEAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0NhbGxiYWNr
KGNvbnN0IHY4OjoKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uZGl0aW9uYWxNZXRo
b2QxQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIHJldHVybiB2OFN0
cmluZyhpbXAtPmNvbmRpdGlvbmFsTWV0aG9kMSgpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAg
cmV0dXJuIHY4U3RyaW5nKGltcC0+Y29uZGl0aW9uYWxNZXRob2QxKCksIGFyZ3MuR2V0SXNvbGF0
ZSgpLCBSZXR1cm5QZXJzaXN0ZW50SGFuZGxlKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDb25k
aXRpb24xKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5n
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAppbmRleCAxYzNlOTUx
MTMwYTBmMTk5NDBlNjAwYWI3MTFlMDlhZTExYjE5OTE4Li5lZjgxOGQ5NjI3NjA0YzY0ZGI5YmI3
OWRiNmEwNzJmNDc1NTNjMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEJpbmRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcu
aApAQCAtMTQ1LDEzICsxNDUsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIFJldHVy
biBhIFY4IGV4dGVybmFsIHN0cmluZyB0aGF0IHNoYXJlcyB0aGUgdW5kZXJseWluZyBidWZmZXIg
d2l0aCB0aGUgZ2l2ZW4KICAgICAvLyBXZWJDb3JlIHN0cmluZy4gVGhlIHJlZmVyZW5jZSBjb3Vu
dGluZyBtZWNoYW5pc20gaXMgdXNlZCB0byBrZWVwIHRoZQogICAgIC8vIHVuZGVybHlpbmcgYnVm
ZmVyIGFsaXZlIHdoaWxlIHRoZSBzdHJpbmcgaXMgc3RpbGwgbGl2ZSBpbiB0aGUgVjggZW5naW5l
LgotICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCisgICAgaW5saW5lIHY4OjpIYW5k
bGU8djg6OlN0cmluZz4gdjhTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHY4OjpJc29sYXRl
KiBpc29sYXRlID0gMCwgUmV0dXJuSGFuZGxlVHlwZSBoYW5kbGVUeXBlID0gUmV0dXJuTG9jYWxI
YW5kbGUpCiAgICAgewogICAgICAgICBpZiAoVU5MSUtFTFkoIWlzb2xhdGUpKQogICAgICAgICAg
ICAgaXNvbGF0ZSA9IHY4OjpJc29sYXRlOjpHZXRDdXJyZW50KCk7CiAgICAgICAgIGlmIChzdHJp
bmcuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gdjg6OlN0cmluZzo6RW1wdHkoaXNvbGF0
ZSk7Ci0gICAgICAgIHJldHVybiBWOFBlcklzb2xhdGVEYXRhOjpmcm9tKGlzb2xhdGUpLT5zdHJp
bmdDYWNoZSgpLT52OEV4dGVybmFsU3RyaW5nKHN0cmluZy5pbXBsKCksIGlzb2xhdGUpOworICAg
ICAgICByZXR1cm4gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKS0+c3RyaW5nQ2FjaGUo
KS0+djhFeHRlcm5hbFN0cmluZyhzdHJpbmcuaW1wbCgpLCBoYW5kbGVUeXBlLCBpc29sYXRlKTsK
ICAgICB9CiAKICAgICAvLyBGSVhNRTogQWxsIGNhbGwgc2l0ZXMgb2YgdGhpcyBtZXRob2Qgc2hv
dWxkIHVzZSB2OFN0cmluZygpLgpAQCAtMTYwLDIwICsxNjAsMjAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICByZXR1cm4gdjhTdHJpbmcoc3RyaW5nLCB2ODo6SXNvbGF0ZTo6R2V0Q3Vy
cmVudCgpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3Ry
aW5nT3JOdWxsKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKKyAg
ICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JOdWxsKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgUmV0dXJuSGFuZGxlVHlwZSBoYW5kbGVU
eXBlID0gUmV0dXJuTG9jYWxIYW5kbGUpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNvbGF0ZSk7
CiAgICAgICAgIGlmIChzdHJpbmcuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gdjhOdWxs
KGlzb2xhdGUpOwotICAgICAgICByZXR1cm4gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRl
KS0+c3RyaW5nQ2FjaGUoKS0+djhFeHRlcm5hbFN0cmluZyhzdHJpbmcuaW1wbCgpLCBpc29sYXRl
KTsKKyAgICAgICAgcmV0dXJuIFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSktPnN0cmlu
Z0NhY2hlKCktPnY4RXh0ZXJuYWxTdHJpbmcoc3RyaW5nLmltcGwoKSwgaGFuZGxlVHlwZSwgaXNv
bGF0ZSk7CiAgICAgfQogCi0gICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFN0cmlu
Z09yVW5kZWZpbmVkKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkK
KyAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JVbmRlZmluZWQoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBSZXR1cm5IYW5kbGVUeXBl
IGhhbmRsZVR5cGUgPSBSZXR1cm5Mb2NhbEhhbmRsZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChp
c29sYXRlKTsKICAgICAgICAgaWYgKHN0cmluZy5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKGlzb2xhdGUpOwotICAgICAgICByZXR1cm4gVjhQZXJJc29sYXRlRGF0
YTo6ZnJvbShpc29sYXRlKS0+c3RyaW5nQ2FjaGUoKS0+djhFeHRlcm5hbFN0cmluZyhzdHJpbmcu
aW1wbCgpLCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIFY4UGVySXNvbGF0ZURhdGE6OmZyb20o
aXNvbGF0ZSktPnN0cmluZ0NhY2hlKCktPnY4RXh0ZXJuYWxTdHJpbmcoc3RyaW5nLmltcGwoKSwg
aGFuZGxlVHlwZSwgaXNvbGF0ZSk7CiAgICAgfQogCiAgICAgaW5saW5lIHY4OjpIYW5kbGU8djg6
OkludGVnZXI+IHY4SW50ZWdlcihpbnQgdmFsdWUsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VmFsdWVDYWNoZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuY3BwCmluZGV4IDRmODFi
Mzk4YTQ5Y2Y2ZDUzOTk3ZjNlMTA5ZTk2YjY5NGFiYmJiYzIuLjhjN2NhNjBlNDMwODIxNzhhZWFm
NzQ1ZGUwM2Q0YmJhNTA2Zjk0YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4VmFsdWVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhW
YWx1ZUNhY2hlLmNwcApAQCAtNjYsNyArNjYsNyBAQCB2b2lkIFN0cmluZ0NhY2hlOjpyZW1vdmUo
U3RyaW5nSW1wbCogc3RyaW5nSW1wbCkKICAgICBjbGVhck9uR0MoKTsKIH0KIAotdjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IFN0cmluZ0NhY2hlOjp2OEV4dGVybmFsU3RyaW5nU2xvdyhTdHJpbmdJbXBs
KiBzdHJpbmdJbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlN0cmlu
Zz4gU3RyaW5nQ2FjaGU6OnY4RXh0ZXJuYWxTdHJpbmdTbG93KFN0cmluZ0ltcGwqIHN0cmluZ0lt
cGwsIFJldHVybkhhbmRsZVR5cGUgaGFuZGxlVHlwZSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7
CiAgICAgaWYgKCFzdHJpbmdJbXBsLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIHY4OjpTdHJp
bmc6OkVtcHR5KGlzb2xhdGUpOwpAQCAtNzcsNiArNzcsOCBAQCB2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gU3RyaW5nQ2FjaGU6OnY4RXh0ZXJuYWxTdHJpbmdTbG93KFN0cmluZ0ltcGwqIHN0cmluZ0lt
cGwsCiAgICAgICAgIGlmIChoYW5kbGUuSXNXZWFrKCkpIHsKICAgICAgICAgICAgIG1fbGFzdFN0
cmluZ0ltcGwgPSBzdHJpbmdJbXBsOwogICAgICAgICAgICAgbV9sYXN0VjhTdHJpbmcgPSBoYW5k
bGU7CisgICAgICAgICAgICBpZiAoaGFuZGxlVHlwZSA9PSBSZXR1cm5VbnNhZmVIYW5kbGUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKICAgICAgICAgICAgIHJldHVybiB2ODo6TG9j
YWw8djg6OlN0cmluZz46Ok5ldyhoYW5kbGUpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhWYWx1ZUNhY2hlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuaAppbmRleCAxMGZlNzI0Yjk2YmNhMTA5Y2Fm
ODcyYWM3OTJkMjk4MTM5ZmU0YzkyLi43YTUyYWNkOWVkZjM4MTA3ZDM4ZTY3OGEzZTNjYzMyYTg5
YmQ5OWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2Fj
aGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuaApAQCAt
MzUsMTYgKzM1LDI4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gUmV0dXJuVW5zYWZl
SGFuZGxlIGNhbiBiZSB1c2VkIG9ubHkgd2hlbiBpdCBpcyBndWFyYW50ZWVkCisvLyB0aGF0IG5v
IFY4IG9iamVjdCBhbGxvY2F0aW9uIGlzIGNvbmR1Y3RlZCBiZWZvcmUgdGhlIGhhbmRsZQorLy8g
aXMgcmV0dXJuZWQgdG8gVjguIEZvciBzYWZldHksIFJldHVyblVuc2FmZUhhbmRsZSBzaG91bGQg
YmUKKy8vIHVzZWQgYnkgYXV0by1nZW5lcmF0ZWQgY29kZS4KK2VudW0gUmV0dXJuSGFuZGxlVHlw
ZSB7CisgICAgUmV0dXJuTG9jYWxIYW5kbGUsCisgICAgUmV0dXJuVW5zYWZlSGFuZGxlCit9Owor
CiBjbGFzcyBTdHJpbmdDYWNoZSB7CiBwdWJsaWM6CiAgICAgU3RyaW5nQ2FjaGUoKSB7IH0KIAot
ICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiB2OEV4dGVybmFsU3RyaW5nKFN0cmluZ0ltcGwqIHN0
cmluZ0ltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlKQorICAgIHY4OjpIYW5kbGU8djg6OlN0cmlu
Zz4gdjhFeHRlcm5hbFN0cmluZyhTdHJpbmdJbXBsKiBzdHJpbmdJbXBsLCBSZXR1cm5IYW5kbGVU
eXBlIGhhbmRsZVR5cGUsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogICAgIHsKLSAgICAgICAgaWYg
KG1fbGFzdFN0cmluZ0ltcGwuZ2V0KCkgPT0gc3RyaW5nSW1wbCAmJiBtX2xhc3RWOFN0cmluZy5J
c1dlYWsoaXNvbGF0ZSkpCisgICAgICAgIGlmIChtX2xhc3RTdHJpbmdJbXBsLmdldCgpID09IHN0
cmluZ0ltcGwgJiYgbV9sYXN0VjhTdHJpbmcuSXNXZWFrKGlzb2xhdGUpKSB7CisgICAgICAgICAg
ICBpZiAoaGFuZGxlVHlwZSA9PSBSZXR1cm5VbnNhZmVIYW5kbGUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fbGFzdFY4U3RyaW5nOwogICAgICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6
U3RyaW5nPjo6TmV3KGlzb2xhdGUsIG1fbGFzdFY4U3RyaW5nKTsKKyAgICAgICAgfQogCi0gICAg
ICAgIHJldHVybiB2OEV4dGVybmFsU3RyaW5nU2xvdyhzdHJpbmdJbXBsLCBpc29sYXRlKTsKKyAg
ICAgICAgcmV0dXJuIHY4RXh0ZXJuYWxTdHJpbmdTbG93KHN0cmluZ0ltcGwsIGhhbmRsZVR5cGUs
IGlzb2xhdGUpOwogICAgIH0KIAogICAgIHZvaWQgY2xlYXJPbkdDKCkgCkBAIC01Nyw3ICs2OSw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8q
KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4gdjhFeHRlcm5h
bFN0cmluZ1Nsb3coU3RyaW5nSW1wbCosIHY4OjpJc29sYXRlKik7CisgICAgdjg6OkhhbmRsZTx2
ODo6U3RyaW5nPiB2OEV4dGVybmFsU3RyaW5nU2xvdyhTdHJpbmdJbXBsKiwgUmV0dXJuSGFuZGxl
VHlwZSwgdjg6Oklzb2xhdGUqKTsKIAogICAgIEhhc2hNYXA8U3RyaW5nSW1wbCosIHY4OjpTdHJp
bmcqPiBtX3N0cmluZ0NhY2hlOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+IG1fbGFz
dFY4U3RyaW5nOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>