<?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>110820</bug_id>
          
          <creation_ts>2013-02-25 16:35:49 -0800</creation_ts>
          <short_desc>IndexedDB: Bind lifetime of in-memory backing stores to IDBFactory backend</short_desc>
          <delta_ts>2013-03-29 12:10:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>110675</dependson>
    
    <dependson>110677</dependson>
    
    <dependson>111233</dependson>
    
    <dependson>111459</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>alecflett</cc>
    
    <cc>dgrogan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>841414</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2013-02-25 16:35:49 -0800</bug_when>
    <thetext>IndexedDB: Bind lifetime of in-memory backing stores to IDBFactory backend</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841416</commentid>
    <comment_count>1</comment_count>
      <attachid>190154</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2013-02-25 16:39:04 -0800</bug_when>
    <thetext>Created attachment 190154
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841419</commentid>
    <comment_count>2</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2013-02-25 16:41:45 -0800</bug_when>
    <thetext>Chromium bug: https://code.google.com/p/chromium/issues/detail?id=165311

The fix is straightforward; in the Chromium port, the lifetime of an IDBFactoryBackendImpl is tied to the lifetime of a &quot;Context&quot;; incognito mode creates a new context which would scope the lifetime of these memory-only backing stores.

Needs tests. Trivial to test on the chromium side as a content test (open/write/close/re-open/read); in WebKit-land will require a webkit_unit_test.

dgrogan@ - thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841452</commentid>
    <comment_count>3</comment_count>
      <attachid>190154</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2013-02-25 17:28:16 -0800</bug_when>
    <thetext>Comment on attachment 190154
Patch

LGTM

I think this is a fine solution to the incognito problem. You could consolidate the knowledge that an empty path indicates memory backing store by refactoring IDBBackingStore and creating an IDBBackingStore::openInMemory method.

I thought you had unit test somewhere that tests that backing stores are dropped when there are no more connections to it. It might be prudent to add a similar test for incognito backing stores that ensures the backing store is NOT dropped.  I guess you were referring to something similar in the changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841497</commentid>
    <comment_count>4</comment_count>
      <attachid>190154</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2013-02-25 18:23:34 -0800</bug_when>
    <thetext>Comment on attachment 190154
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBFactoryBackendImpl.cpp:138
&gt; +    if (backingStore) {

Since incognito windows get their own IDBFactoryBackendImpl, you could
ASSERT(m_sessionOnlyBackingStores.isEmpty() || dataDirectory.isEmpty())</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852653</commentid>
    <comment_count>5</comment_count>
      <attachid>192540</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2013-03-11 13:26:11 -0700</bug_when>
    <thetext>Created attachment 192540
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852656</commentid>
    <comment_count>6</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2013-03-11 13:29:30 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; The fix is straightforward; in the Chromium port, the lifetime of an IDBFactoryBackendImpl is tied to the lifetime of a &quot;Context&quot;; incognito mode creates a new context which would scope the lifetime of these memory-only backing stores.

Turned out to be trickier since it introduced a reference cycle; that was addressed in http://wkrev.com/145238

&gt; Needs tests. Trivial to test on the chromium side as a content test (open/write/close/re-open/read); in WebKit-land will require a webkit_unit_test.

Added.

(In reply to comment #3)
&gt; I think this is a fine solution to the incognito problem. You could consolidate the knowledge that an empty path indicates memory backing store by refactoring IDBBackingStore and creating an IDBBackingStore::openInMemory method.

Done.
 
(In reply to comment #4)
&gt; Since incognito windows get their own IDBFactoryBackendImpl, you could
&gt; ASSERT(m_sessionOnlyBackingStores.isEmpty() || dataDirectory.isEmpty())

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852661</commentid>
    <comment_count>7</comment_count>
      <attachid>192540</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2013-03-11 13:33:53 -0700</bug_when>
    <thetext>Comment on attachment 192540
Patch

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

dgrogan@, alecflett@ - can you take a look?

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:-385
&gt; -    if (pathBase.isEmpty()) {

Sorry, the diff here is going to be hard to read...

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:-441
&gt; -        HistogramSupport::histogramEnumeration(&quot;WebCore.IndexedDB.BackingStore.OpenStatus&quot;, IDBLevelDBBackingStoreOpenFailedUnknownErr, IDBLevelDBBackingStoreOpenMax);

Given the open/openInMemory split I ended up removing this block, since the code flow is simpler. Should I put it back?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858488</commentid>
    <comment_count>8</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2013-03-19 11:04:27 -0700</bug_when>
    <thetext>Ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866221</commentid>
    <comment_count>9</comment_count>
      <attachid>195760</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2013-03-29 10:16:31 -0700</bug_when>
    <thetext>Created attachment 195760
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866227</commentid>
    <comment_count>10</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2013-03-29 10:34:57 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=195760) [details]
&gt; Patch

Rebased, and minimized the diff for IDBBackingStore.cpp - it&apos;s much easier to read if you apply the patch locally and diff with -w to hide the identation changes.

Alec - do you recall if we came up with any changes we wanted to make, or were we just discussing more lifetime assertions around stores vs. databases?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866239</commentid>
    <comment_count>11</comment_count>
      <attachid>195760</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-03-29 11:02:45 -0700</bug_when>
    <thetext>Comment on attachment 195760
Patch

[We had discussed, but weren&apos;t able to resolve, the idea that a backing store should never outlive its factory, but we couldn&apos;t figure out a good way to assert if that was true or not, and we didn&apos;t even know if that was truly assertable because of shutdown ordering, so we punted]

lgtm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866242</commentid>
    <comment_count>12</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2013-03-29 11:06:15 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 195760 [details])
&gt; [We had discussed, but weren&apos;t able to resolve, the idea that a backing store should never outlive its factory, but we couldn&apos;t figure out a good way to assert if that was true or not, and we didn&apos;t even know if that was truly assertable because of shutdown ordering, so we punted]

Ah yes, thanks. The idea being that the IDBFactoryBackendImpl should in theory outlive any of the IDBBackingStores it produces. But given that the BackingStore-&gt;Factory pointer is now weak this may (in multi-process ports e.g. Chromium) rely on tear-down order of the  renderers that have opened connections (and thus have indirect IDBDatabase-&gt;proxy-&gt;IDBDatabaseBackend references) vs. the context associated with that renderer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866243</commentid>
    <comment_count>13</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2013-03-29 11:06:35 -0700</bug_when>
    <thetext>tony@ - can you r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866255</commentid>
    <comment_count>14</comment_count>
      <attachid>195760</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2013-03-29 11:39:30 -0700</bug_when>
    <thetext>Comment on attachment 195760
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:354
&gt; +#if PLATFORM(CHROMIUM)
&gt; +    ASSERT(WebKit::Platform::current()-&gt;unitTestSupport());
&gt; +#endif

I don&apos;t understand what this assert is checking.  When is unitTestSupport() null?

&gt; Source/WebKit/chromium/tests/IDBBackingStoreTest.cpp:307
&gt; +    EXPECT_EQ(memStore1-&gt;refCount(), 2);

Nit: I thought the expected values go on the left, but I guess this file gets this wrong in other places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866261</commentid>
    <comment_count>15</comment_count>
      <attachid>195760</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2013-03-29 11:42:53 -0700</bug_when>
    <thetext>Comment on attachment 195760
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:354
&gt;&gt; +#endif
&gt; 
&gt; I don&apos;t understand what this assert is checking.  When is unitTestSupport() null?

This was suggested by abarth@ in another bug as a way of asserting &quot;this should only be called/happen in unit tests&quot;.

https://bugs.webkit.org/show_bug.cgi?id=111233

I&apos;ll add a comment too, though.

&gt;&gt; Source/WebKit/chromium/tests/IDBBackingStoreTest.cpp:307
&gt;&gt; +    EXPECT_EQ(memStore1-&gt;refCount(), 2);
&gt; 
&gt; Nit: I thought the expected values go on the left, but I guess this file gets this wrong in other places.

I&apos;ll fix in this method at least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866263</commentid>
    <comment_count>16</comment_count>
      <attachid>195769</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2013-03-29 11:48:31 -0700</bug_when>
    <thetext>Created attachment 195769
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866281</commentid>
    <comment_count>17</comment_count>
      <attachid>195769</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-29 12:10:22 -0700</bug_when>
    <thetext>Comment on attachment 195769
Patch for landing

Clearing flags on attachment: 195769

Committed r147233: &lt;http://trac.webkit.org/changeset/147233&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866284</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-29 12:10:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190154</attachid>
            <date>2013-02-25 16:39:04 -0800</date>
            <delta_ts>2013-03-11 13:26:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110820-20130225163519.patch</filename>
            <type>text/plain</type>
            <size>2980</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzOTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzZkNmY5NTRjYWE0OTM2
ODlmYjE2NDUwMThhMWM3YzY1YzFiNzA3Yy4uYThhMGM5Y2E5ZTBlZjc5OTU2YjhkYmQ4NWYzNWU4
NzVhMWNjNzdjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEzLTAyLTI1ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBCaW5k
IGxpZmV0aW1lIG9mIGluLW1lbW9yeSBiYWNraW5nIHN0b3JlcyB0byBJREJGYWN0b3J5IGJhY2tl
bmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDgy
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJhY2tp
bmcgc3RvcmVzIGFyZSBkcm9wcGVkIGFzIHNvb24gYXMgYWxsIGNvbm5lY3Rpb25zIGFyZSBjbG9z
ZWQuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yCisgICAgICAgIGRpc2stYmFja2VkIHN0b3JlcyB0byBm
cmVlIHVwIG1lbW9yeSAoYWx0aG91Z2ggdGhlcmUncyBhIHBlcmZvcm1hbmNlIHRyYWRlLW9mZi4u
LikuIEJ1dAorICAgICAgICBmb3IgbWVtb3J5LWJhY2tlZCBzdG9yZXMsIHRoZSBleHBlY3RlZCBs
aWZldGltZSBzaG91bGQgbWF0Y2ggdGhlIGxpZmV0aW1lIG9mIHRoZSBmYWN0b3J5CisgICAgICAg
IHNvIHRoYXQgYW4gb3Blbi93cml0ZS9jbG9zZS9yZS1vcGVuL3JlYWQgeWllbGRzIHRoZSB3cml0
dGVuIGRhdGEuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuIFRPRE8gLSB3ZWJraXRf
dW5pdF90ZXN0IGhlcmU/CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBs
OjpvcGVuQmFja2luZ1N0b3JlKTogQWRkIGluLW1lbW9yeSBiYWNraW5nIHN0b3JlcyB0byBkZXBl
bmRlbnQgc2V0LgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5k
SW1wbC5oOiBBZGQgbWVtYmVyIHRvIHRyYWNrIGRlcGVuZGVudCBiYWNraW5nIHN0b3Jlcy4KKyAg
ICAgICAgKElEQkZhY3RvcnlCYWNrZW5kSW1wbCk6CisKIDIwMTMtMDItMjMgIElseWEgVGlraG9u
b3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5h
dGl2ZSBNZW1vcnkgSW5zdHJ1bWVudGF0aW9uOiByZXBsYWNlIFN0cmluZyB3aXRoIGNvbnN0IGNo
YXIqIGluIE1lbW9yeU9iamVjdEluZm8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IDIzYzYxNmVh
NzU2OTQ0ODRiNmEyM2M4ZmRiYjMwNDYzMzUxOWZkOGIuLjcyYTRjOTAyMjlhYTkyNjZiZmU3MTI0
NmRiYjE0MmI2ZjgyN2RlYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApAQCAtMTM1LDggKzEzNSwx
MyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpv
cGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8UwogICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJC
YWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXJlY3RvcnksIGZp
bGVJZGVudGlmaWVyLCB0aGlzKTsKICAgICB9CiAKLSAgICBpZiAoYmFja2luZ1N0b3JlKQorICAg
IGlmIChiYWNraW5nU3RvcmUpIHsKKyAgICAgICAgaWYgKGRhdGFEaXJlY3RvcnkuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICAvLyBOb3QgYmFja2VkIGJ5IGRpc2ssIHNvIGtlZXAgYWxpdmUgYXMg
bG9uZyBhcyB0aGlzIGZhY3RvcnkgaW5zdGFuY2UgaXMgYWxpdmUuCisgICAgICAgICAgICBtX3Nl
c3Npb25Pbmx5QmFja2luZ1N0b3Jlcy5hZGQoYmFja2luZ1N0b3JlKTsKKyAgICAgICAgfQogICAg
ICAgICByZXR1cm4gYmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKKyAgICB9CiAKICAgICByZXR1cm4g
MDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmgKaW5kZXggMjRmNzNhZWY4ODk3YTAyMGM2NDQyNTI3ZjI5OWFj
YTM1OWU2ZmEwOC4uNWRiMGM0MTJjZTc2NTZiMWNlYjRlZmZjNzk2MjNlNGI4ODQxMzJlYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eUJhY2tlbmRJbXBsLmgKQEAgLTczLDYgKzczLDggQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBJREJCYWNraW5nU3RvcmUqPiBJREJCYWNraW5nU3RvcmVNYXA7CiAgICAg
SURCQmFja2luZ1N0b3JlTWFwIG1fYmFja2luZ1N0b3JlTWFwOwogCisgICAgSGFzaFNldDxSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiA+IG1fc2Vzc2lvbk9ubHlCYWNraW5nU3RvcmVzOworCiAgICAg
Ly8gT25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlIGZhY3Rvcnkgc2hvdWxkIGV4aXN0IGF0IGFueSBn
aXZlbiB0aW1lLgogICAgIHN0YXRpYyBJREJGYWN0b3J5QmFja2VuZEltcGwqIGlkYkZhY3RvcnlC
YWNrZW5kSW1wbDsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192540</attachid>
            <date>2013-03-11 13:26:11 -0700</date>
            <delta_ts>2013-03-29 10:16:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110820-20130311132210.patch</filename>
            <type>text/plain</type>
            <size>19233</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTBkNjM0MGRhZGJiOTc2
OTZkMDJlMjYxYmZlOWU4ZjVjNzc3YjM3Ni4uNDA1MmRmNzc3ZjE5YTliMzBmNzc0YWVlZTZhZjVj
NTJjMTQ3ODFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEzLTAzLTExICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBCaW5k
IGxpZmV0aW1lIG9mIGluLW1lbW9yeSBiYWNraW5nIHN0b3JlcyB0byBJREJGYWN0b3J5IGJhY2tl
bmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDgy
MAorCisgICAgICAgIEJhY2tpbmcgc3RvcmVzIGFyZSBkcm9wcGVkIGFzIHNvb24gYXMgYWxsIGNv
bm5lY3Rpb25zIGFyZSBjbG9zZWQuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yCisgICAgICAgIGRpc2st
YmFja2VkIHN0b3JlcyB0byBmcmVlIHVwIG1lbW9yeSAoYWx0aG91Z2ggdGhlcmUncyBhIHBlcmZv
cm1hbmNlIHRyYWRlLW9mZi4uLikuIEJ1dAorICAgICAgICBmb3IgbWVtb3J5LWJhY2tlZCBzdG9y
ZXMsIHRoZSBleHBlY3RlZCBsaWZldGltZSBzaG91bGQgbWF0Y2ggdGhlIGxpZmV0aW1lIG9mIHRo
ZSBmYWN0b3J5CisgICAgICAgIHNvIHRoYXQgYW4gb3Blbi93cml0ZS9jbG9zZS9yZS1vcGVuL3Jl
YWQgeWllbGRzIHRoZSB3cml0dGVuIGRhdGEuCisKKyAgICAgICAgVGVzdDogQ2hyb21pdW0ncyB3
ZWJraXRfdW5pdF90ZXN0cywgSURCRmFjdG9yeUJhY2tlbmRUZXN0Lk1lbW9yeUJhY2tpbmdTdG9y
ZUxpZmV0aW1lCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpJREJCYWNraW5nU3RvcmUp
OiBQYXNzIGNvbXBhcmF0b3IgaW50byBjb25zdHJ1Y3RvciBzaW5jZSBpdCB3YXMgYWx3YXlzCisg
ICAgICAgIGFzc2lnbmVkIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMgYW55d2F5LgorICAgICAgICAo
V2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpvcGVuKTogU3BsaXQgaW50byB0aHJlZSBwYXJ0cyAt
IG9wZW4oKSB3aGljaCBpcyBkaXNrLWJhY2tlZC4uLgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpvcGVuSW5NZW1vcnkpOiAuLi5leHBsaXQgaW4tbWVtb3J5IGNyZWF0aW9uIChw
cmV2aW91c2x5OiBzcGVjaWZpZWQgYnkgZW1wdHkgcGF0aCkKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6Y3JlYXRlKTogLi4uIGFuZCB0aGUgY29tbW9uIGxvZ2ljIHdoaWNoIGNh
bGxzIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuaDogSGVhZGVycyBmb3IgdGhlIGFib3ZlLgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJG
YWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUpOiBBZGQgaW4tbWVtb3J5IGJhY2tp
bmcgc3RvcmVzIHRvIGRlcGVuZGVudCBzZXQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmg6IEFkZCBtZW1iZXIgdG8gdHJhY2sgZGVwZW5kZW50IGJh
Y2tpbmcgc3RvcmVzLgorCiAyMDEzLTAzLTEwICBNYXR0IEZhbGtlbmhhZ2VuICA8ZmFsa2VuQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBJbXBsZW1lbnQgaW5lcnQgc3VidHJlZXMgbmVlZGVkIGZv
ciBtb2RhbCA8ZGlhbG9nPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBhMjAyN2E3ODI0
MzUyZGU5NzI1MmFlNjlhMWU2YTdiNzU4Y2MxOWQ2Li4zMGQ5YjMyYjFjMDZjZGQ0ZjQ2MWJlYjE4
MWNlYTQyMmQ1ZmUxNWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDEzLTAzLTExICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgSW5kZXhlZERCOiBCaW5kIGxpZmV0aW1lIG9mIGluLW1lbW9yeSBiYWNraW5nIHN0b3Jl
cyB0byBJREJGYWN0b3J5IGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMDgyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogdGVzdHMvSURCQmFja2luZ1N0b3JlVGVzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmVUZXN0OjpTZXRVcCk6IFVzZSBvcGVuSW5NZW1vcnkg
cmF0aGVyIHRoYW4gZW1wdHkgcGF0aC4KKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOiBBZGRlZCBJ
REJGYWN0b3J5QmFja2VuZFRlc3QuTWVtb3J5QmFja2luZ1N0b3JlTGlmZXRpbWUgdG8gdmVyaWZ5
IHJlZnMuCisKIDIwMTMtMDMtMDkgIFNhZHJ1bCBIYWJpYiBDaG93ZGh1cnkgIDxzYWRydWxAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIGRlcHJlY2F0ZWQgZmxpbmdT
dGFydC5zb3VyY2VEZXZpY2UgZnJvbSBXZWJHZXN0dXJlRXZlbnQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDBhYmNm
ZWQ4NmM3NGE3MTVmZjY2NTYzMGU4MjNlZjdkNGI3NzRlZDQuLjIyZjU3ZTgxYmVmMDYwYjJlYWQx
NTI3ZTM3MWU5NzNmYTM4ZjQ0MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcApAQCAtNDMsNiArNDMsOSBAQAogI2luY2x1
ZGUgIkxldmVsREJUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVk
ZSA8cHVibGljL1BsYXRmb3JtLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMzUsOSArMzM4LDEwIEBAIHB1YmxpYzoKICAg
ICB9CiB9OwogCi1JREJCYWNraW5nU3RvcmU6OklEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcm
IGlkZW50aWZpZXIsIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBkYikKK0lEQkJhY2tpbmdT
dG9yZTo6SURCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUGFzc093blB0
cjxMZXZlbERCRGF0YWJhc2U+IGRiLCBQYXNzT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBjb21w
YXJhdG9yKQogICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX2RiKGRiKQor
ICAgICwgbV9jb21wYXJhdG9yKGNvbXBhcmF0b3IpCiAgICAgLCBtX3dlYWtGYWN0b3J5KHRoaXMp
CiB7CiB9CkBAIC0zNDUsNiArMzQ5LDkgQEAgSURCQmFja2luZ1N0b3JlOjpJREJCYWNraW5nU3Rv
cmUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBQYXNzT3duUHRyPExldmVsREJEYXQKIElEQkJh
Y2tpbmdTdG9yZTo6SURCQmFja2luZ1N0b3JlKCkKICAgICA6IG1fd2Vha0ZhY3RvcnkodGhpcykK
IHsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBBU1NFUlQoV2ViS2l0OjpQbGF0Zm9ybTo6
Y3VycmVudCgpLT51bml0VGVzdFN1cHBvcnQoKSk7CisjZW5kaWYKIH0KIAogSURCQmFja2luZ1N0
b3JlOjp+SURCQmFja2luZ1N0b3JlKCkKQEAgLTM3Nyw3NyArMzg0LDg5IEBAIFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBJREJCYWNraW5nU3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNl
Y3VyaXR5T3JpZ2luCiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCQmFja2luZ1N0b3Jl
OjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBwYXRo
QmFzZUFyZywgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgTGV2ZWxEQkZhY3RvcnkqIGxl
dmVsREJGYWN0b3J5KQogewogICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpvcGVuIik7
CisgICAgQVNTRVJUKCFwYXRoQmFzZUFyZy5pc0VtcHR5KCkpOwogICAgIFN0cmluZyBwYXRoQmFz
ZSA9IHBhdGhCYXNlQXJnOwogCiAgICAgT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBjb21wYXJh
dG9yID0gYWRvcHRQdHIobmV3IENvbXBhcmF0b3IoKSk7CiAgICAgT3duUHRyPExldmVsREJEYXRh
YmFzZT4gZGI7CiAKLSAgICBpZiAocGF0aEJhc2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRiID0g
TGV2ZWxEQkRhdGFiYXNlOjpvcGVuSW5NZW1vcnkoY29tcGFyYXRvci5nZXQoKSk7Ci0gICAgICAg
IGlmICghZGIpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiTGV2ZWxEQkRhdGFiYXNlOjpvcGVu
SW5NZW1vcnkgZmFpbGVkLiIpOwotICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9n
cmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVz
IiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NZW1vcnlGYWlsZWQsIElEQkxldmVsREJCYWNr
aW5nU3RvcmVPcGVuTWF4KTsKLSAgICAgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4oKTsKKyAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhwYXRoQmFzZSkpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIEluZGV4ZWREQiBkYXRhYmFzZSBwYXRo
ICVzIiwgcGF0aEJhc2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6
Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3Bl
blN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuRmFpbGVkRGlyZWN0b3J5LCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4oKTsKKyAgICB9CisKKyAgICBTdHJpbmcgcGF0aCA9IHBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmll
cigpICsgIi5pbmRleGVkZGIubGV2ZWxkYiIpOworCisgICAgZGIgPSBsZXZlbERCRmFjdG9yeS0+
b3BlbkxldmVsREIocGF0aCwgY29tcGFyYXRvci5nZXQoKSk7CisgICAgaWYgKGRiKSB7CisgICAg
ICAgIGJvb2wga25vd24gPSBmYWxzZTsKKyAgICAgICAgYm9vbCBvayA9IGlzU2NoZW1hS25vd24o
ZGIuZ2V0KCksIGtub3duKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgTE9HX0VS
Uk9SKCJJbmRleGVkREIgaGFkIElPIGVycm9yIGNoZWNraW5nIHNjaGVtYSwgdHJlYXRpbmcgaXQg
YXMgZmFpbHVyZSB0byBvcGVuIik7CisgICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0
b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0
dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZElPRXJyQ2hlY2tpbmdTY2hlbWEs
IElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKKyAgICAgICAgICAgIGRiLmNsZWFyKCk7
CisgICAgICAgIH0gZWxzZSBpZiAoIWtub3duKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIklu
ZGV4ZWREQiBiYWNraW5nIHN0b3JlIGhhZCB1bmtub3duIHNjaGVtYSwgdHJlYXRpbmcgaXQgYXMg
ZmFpbHVyZSB0byBvcGVuIik7CisgICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dy
YW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMi
LCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZFVua25vd25TY2hlbWEsIElEQkxldmVs
REJCYWNraW5nU3RvcmVPcGVuTWF4KTsKKyAgICAgICAgICAgIGRiLmNsZWFyKCk7CiAgICAgICAg
IH0KLSAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNv
cmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZU9wZW5NZW1vcnlTdWNjZXNzLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFtYWtlQWxsRGlyZWN0b3JpZXMocGF0aEJhc2UpKSB7
Ci0gICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjcmVhdGUgSW5kZXhlZERCIGRhdGFi
YXNlIHBhdGggJXMiLCBwYXRoQmFzZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIEhpc3Rv
Z3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNr
aW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuRmFpbGVkRGly
ZWN0b3J5LCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7CisgICAgfQorCisgICAgaWYg
KGRiKQorICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2Vi
Q29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlT3BlblN1Y2Nlc3MsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKKyAgICBl
bHNlIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9yZSBvcGVuIGZh
aWxlZCwgYXR0ZW1wdGluZyBjbGVhbnVwIik7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGxldmVs
REJGYWN0b3J5LT5kZXN0cm95TGV2ZWxEQihwYXRoKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7
CisgICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3JlIGNsZWFudXAg
ZmFpbGVkIik7CisgICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJh
dGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZl
bERCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBEZXN0cm95RmFpbGVkLCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlT3Blbk1heCk7CiAgICAgICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBTdHJpbmcgcGF0aCA9IHBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmll
cigpICsgIi5pbmRleGVkZGIubGV2ZWxkYiIpOwotCisgICAgICAgIExPR19FUlJPUigiSW5kZXhl
ZERCIGJhY2tpbmcgc3RvcmUgY2xlYW51cCBzdWNjZWVkZWQsIHJlb3BlbmluZyIpOwogICAgICAg
ICBkYiA9IGxldmVsREJGYWN0b3J5LT5vcGVuTGV2ZWxEQihwYXRoLCBjb21wYXJhdG9yLmdldCgp
KTsKLSAgICAgICAgaWYgKGRiKSB7Ci0gICAgICAgICAgICBib29sIGtub3duID0gZmFsc2U7Ci0g
ICAgICAgICAgICBib29sIG9rID0gaXNTY2hlbWFLbm93bihkYi5nZXQoKSwga25vd24pOwotICAg
ICAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgICAgIExPR19FUlJPUigiSW5kZXhlZERC
IGhhZCBJTyBlcnJvciBjaGVja2luZyBzY2hlbWEsIHRyZWF0aW5nIGl0IGFzIGZhaWx1cmUgdG8g
b3BlbiIpOwotICAgICAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1l
cmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxl
dmVsREJCYWNraW5nU3RvcmVPcGVuRmFpbGVkSU9FcnJDaGVja2luZ1NjaGVtYSwgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZU9wZW5NYXgpOwotICAgICAgICAgICAgICAgIGRiLmNsZWFyKCk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKCFrbm93bikgewotICAgICAgICAgICAgICAgIExPR19FUlJPUigi
SW5kZXhlZERCIGJhY2tpbmcgc3RvcmUgaGFkIHVua25vd24gc2NoZW1hLCB0cmVhdGluZyBpdCBh
cyBmYWlsdXJlIHRvIG9wZW4iKTsKLSAgICAgICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0Ojpo
aXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5T
dGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZFVua25vd25TY2hlbWEsIElE
QkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKLSAgICAgICAgICAgICAgICBkYi5jbGVhcigp
OwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoIWRiKSB7CisgICAgICAgICAgICBMT0dfRVJS
T1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3JlIHJlb3BlbiBhZnRlciByZWNvdmVyeSBmYWlsZWQi
KTsKKyAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJX
ZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNr
aW5nU3RvcmVPcGVuQ2xlYW51cFJlb3BlbkZhaWxlZCwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9w
ZW5NYXgpOworICAgICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPigp
OwogICAgICAgICB9CisgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0
aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVs
REJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cFJlb3BlblN1Y2Nlc3MsIElEQkxldmVsREJCYWNraW5n
U3RvcmVPcGVuTWF4KTsKKyAgICB9CiAKLSAgICAgICAgaWYgKGRiKQotICAgICAgICAgICAgSGlz
dG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJh
Y2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5TdWNjZXNz
LCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9yZSBvcGVuIGZhaWxlZCwgYXR0
ZW1wdGluZyBjbGVhbnVwIik7Ci0gICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBsZXZlbERCRmFj
dG9yeS0+ZGVzdHJveUxldmVsREIocGF0aCk7Ci0gICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsK
LSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3JlIGNsZWFu
dXAgZmFpbGVkIik7Ci0gICAgICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFt
RW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5DbGVhbnVwRGVzdHJveUZhaWxlZCwgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZU9wZW5NYXgpOwotICAgICAgICAgICAgICAgIHJldHVybiBQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZT4oKTsKLSAgICAgICAgICAgIH0KKyAgICBBU1NFUlQoZGIpOwogCi0g
ICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3JlIGNsZWFudXAgc3Vj
Y2VlZGVkLCByZW9wZW5pbmciKTsKLSAgICAgICAgICAgIGRiID0gbGV2ZWxEQkZhY3RvcnktPm9w
ZW5MZXZlbERCKHBhdGgsIGNvbXBhcmF0b3IuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKCFkYikg
ewotICAgICAgICAgICAgICAgIExPR19FUlJPUigiSW5kZXhlZERCIGJhY2tpbmcgc3RvcmUgcmVv
cGVuIGFmdGVyIHJlY292ZXJ5IGZhaWxlZCIpOwotICAgICAgICAgICAgICAgIEhpc3RvZ3JhbVN1
cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3Rv
cmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cFJlb3BlbkZh
aWxlZCwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLklu
ZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVP
cGVuQ2xlYW51cFJlb3BlblN1Y2Nlc3MsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsK
LSAgICAgICAgfQotICAgIH0KKyAgICByZXR1cm4gY3JlYXRlKGZpbGVJZGVudGlmaWVyLCBkYi5y
ZWxlYXNlKCksIGNvbXBhcmF0b3IucmVsZWFzZSgpKTsKK30KKworUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU+IElEQkJhY2tpbmdTdG9yZTo6b3BlbkluTWVtb3J5KFNlY3VyaXR5T3JpZ2luKiBz
ZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQoreworICAgIERlZmF1bHRM
ZXZlbERCRmFjdG9yeSBsZXZlbERCRmFjdG9yeTsKKyAgICByZXR1cm4gSURCQmFja2luZ1N0b3Jl
OjpvcGVuSW5NZW1vcnkoc2VjdXJpdHlPcmlnaW4sIGlkZW50aWZpZXIsICZsZXZlbERCRmFjdG9y
eSk7Cit9CiAKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJCYWNraW5nU3RvcmU6Om9w
ZW5Jbk1lbW9yeShTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllciwgTGV2ZWxEQkZhY3RvcnkqIGxldmVsREJGYWN0b3J5KQoreworICAgIElEQl9U
UkFDRSgiSURCQmFja2luZ1N0b3JlOjpvcGVuSW5NZW1vcnkiKTsKKworICAgIE93blB0cjxMZXZl
bERCQ29tcGFyYXRvcj4gY29tcGFyYXRvciA9IGFkb3B0UHRyKG5ldyBDb21wYXJhdG9yKCkpOwor
ICAgIE93blB0cjxMZXZlbERCRGF0YWJhc2U+IGRiID0gTGV2ZWxEQkRhdGFiYXNlOjpvcGVuSW5N
ZW1vcnkoY29tcGFyYXRvci5nZXQoKSk7CiAgICAgaWYgKCFkYikgewotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVy
YXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZU9wZW5GYWlsZWRVbmtub3duRXJyLCBJREJMZXZlbERCQmFja2luZ1N0
b3JlT3Blbk1heCk7CisgICAgICAgIExPR19FUlJPUigiTGV2ZWxEQkRhdGFiYXNlOjpvcGVuSW5N
ZW1vcnkgZmFpbGVkLiIpOworICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVt
ZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlT3Blbk1lbW9yeUZhaWxlZCwgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZU9wZW5NYXgpOwogICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7
CiAgICAgfQorICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJD
b3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5n
U3RvcmVPcGVuTWVtb3J5U3VjY2VzcywgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwog
Ci0gICAgLy8gRklYTUU6IEhhbmRsZSBjb21wYXJhdG9yIG5hbWUgY2hhbmdlcy4KKyAgICByZXR1
cm4gY3JlYXRlKGlkZW50aWZpZXIsIGRiLnJlbGVhc2UoKSwgY29tcGFyYXRvci5yZWxlYXNlKCkp
OworfQogCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKGFkb3B0UmVm
KG5ldyBJREJCYWNraW5nU3RvcmUoZmlsZUlkZW50aWZpZXIsIGRiLnJlbGVhc2UoKSkpKTsKLSAg
ICBiYWNraW5nU3RvcmUtPm1fY29tcGFyYXRvciA9IGNvbXBhcmF0b3IucmVsZWFzZSgpOworUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlKGNvbnN0IFN0
cmluZyYgaWRlbnRpZmllciwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+IGRiLCBQYXNzT3du
UHRyPExldmVsREJDb21wYXJhdG9yPiBjb21wYXJhdG9yKQoreworICAgIC8vIEZJWE1FOiBIYW5k
bGUgY29tcGFyYXRvciBuYW1lIGNoYW5nZXMuCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
YmFja2luZ1N0b3JlKGFkb3B0UmVmKG5ldyBJREJCYWNraW5nU3RvcmUoaWRlbnRpZmllciwgZGIs
IGNvbXBhcmF0b3IpKSk7CiAKLSAgICBpZiAoIXNldFVwTWV0YWRhdGEoYmFja2luZ1N0b3JlLT5t
X2RiLmdldCgpLCBmaWxlSWRlbnRpZmllcikpCisgICAgaWYgKCFzZXRVcE1ldGFkYXRhKGJhY2tp
bmdTdG9yZS0+bV9kYi5nZXQoKSwgaWRlbnRpZmllcikpCiAgICAgICAgIHJldHVybiBQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKIAogICAgIHJldHVybiBiYWNraW5nU3RvcmUucmVsZWFz
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFj
a2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuaAppbmRleCBlOGVlNmI2Yzg4MGM2MjU4NTg5NTYwNjE2NDllMzI1N2NhNmI2MmI1Li41
OTFlMTcxZDhiNWVlN2M0ZWEwMDg1OGFmZWEwNjMwN2Y1YTE1MzRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaApAQCAtNTksNiAr
NTksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlKCk7CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29u
c3QgU3RyaW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcik7CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwg
Y29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgTGV2
ZWxEQkZhY3RvcnkqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9w
ZW5Jbk1lbW9yeShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcik7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuSW5NZW1vcnkoU2VjdXJp
dHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIExldmVsREJGYWN0b3J5Kik7CiAg
ICAgV2Vha1B0cjxJREJCYWNraW5nU3RvcmU+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dl
YWtGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQogCiAgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5n
PiBnZXREYXRhYmFzZU5hbWVzKCk7CkBAIC0xNzEsMTIgKzE3MywxNCBAQCBwdWJsaWM6CiAgICAg
fTsKIAogcHJvdGVjdGVkOgotICAgIElEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGlkZW50
aWZpZXIsIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPik7CisgICAgSURCQmFja2luZ1N0b3Jl
KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+LCBQ
YXNzT3duUHRyPExldmVsREJDb21wYXJhdG9yPik7CiAKICAgICAvLyBTaG91bGQgb25seSB1c2Vk
IGZvciBtb2NraW5nLgogICAgIElEQkJhY2tpbmdTdG9yZSgpOwogCiBwcml2YXRlOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllciwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+LCBQYXNzT3duUHRyPExldmVsREJD
b21wYXJhdG9yPik7CisKICAgICBib29sIGZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2Rl
ZFByaW1hcnlLZXksIGJvb2wmIGZvdW5kKTsKICAgICB2b2lkIGdldEluZGV4ZXMoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6
OkluZGV4TWFwKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IDQxOTE3NTAwYjNhODAxOTQx
ZjQ4YjIyMTE4MjZhOTExNzAwYzJmMzEuLjQ5MzVhZGQ1YzE1MzljZjUyYTBkYzEyYTQ1ODk3N2Jm
YWUwZGEzMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApAQCAtMTI4LDE3ICsxMjgsMjggQEAgdm9p
ZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgUGFzc1JlZlB0cjxJREJDYWwKIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0
b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4gc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKIHsKICAgICBj
b25zdCBTdHJpbmcgZmlsZUlkZW50aWZpZXIgPSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJp
dHlPcmlnaW4uZ2V0KCkpOworICAgIGNvbnN0IGJvb2wgb3BlbkluTWVtb3J5ID0gZGF0YURpcmVj
dG9yeS5pc0VtcHR5KCk7CiAKICAgICBJREJCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0MiA9
IG1fYmFja2luZ1N0b3JlTWFwLmZpbmQoZmlsZUlkZW50aWZpZXIpOwotICAgIGlmIChpdDIgIT0g
bV9iYWNraW5nU3RvcmVNYXAuZW5kKCkpIHsKLSAgICAgICAgaWYgKGl0Mi0+dmFsdWUuZ2V0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gaXQyLT52YWx1ZS5nZXQoKTsKLSAgICB9CisgICAgaWYgKGl0
MiAhPSBtX2JhY2tpbmdTdG9yZU1hcC5lbmQoKSAmJiBpdDItPnZhbHVlLmdldCgpKQorICAgICAg
ICByZXR1cm4gaXQyLT52YWx1ZS5nZXQoKTsKKworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+
IGJhY2tpbmdTdG9yZTsKKyAgICBpZiAob3BlbkluTWVtb3J5KQorICAgICAgICBiYWNraW5nU3Rv
cmUgPSBJREJCYWNraW5nU3RvcmU6Om9wZW5Jbk1lbW9yeShzZWN1cml0eU9yaWdpbi5nZXQoKSwg
ZmlsZUlkZW50aWZpZXIpOworICAgIGVsc2UKKyAgICAgICAgYmFja2luZ1N0b3JlID0gSURCQmFj
a2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyZWN0b3J5LCBmaWxl
SWRlbnRpZmllcik7CiAKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUg
PSBJREJCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXJlY3Rv
cnksIGZpbGVJZGVudGlmaWVyKTsKICAgICBpZiAoYmFja2luZ1N0b3JlKSB7CiAgICAgICAgIGNs
ZWFuV2Vha01hcChtX2JhY2tpbmdTdG9yZU1hcCk7CiAgICAgICAgIG1fYmFja2luZ1N0b3JlTWFw
LnNldChmaWxlSWRlbnRpZmllciwgYmFja2luZ1N0b3JlLT5jcmVhdGVXZWFrUHRyKCkpOworICAg
ICAgICAvLyBJZiBhbiBpbi1tZW1vcnkgZGF0YWJhc2UsIGJpbmQgbGlmZXRpbWUgdG8gdGhpcyBm
YWN0b3J5IGluc3RhbmNlLgorICAgICAgICBpZiAob3BlbkluTWVtb3J5KQorICAgICAgICAgICAg
bV9zZXNzaW9uT25seUJhY2tpbmdTdG9yZXMuYWRkKGJhY2tpbmdTdG9yZSk7CisKKyAgICAgICAg
Ly8gQWxsIGJhY2tpbmcgc3RvcmVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZhY3Rvcnkgc2hvdWxk
IGJlIG9mIHRoZSBzYW1lIHR5cGUuCisgICAgICAgIEFTU0VSVChtX3Nlc3Npb25Pbmx5QmFja2lu
Z1N0b3Jlcy5pc0VtcHR5KCkgfHwgb3BlbkluTWVtb3J5KTsKKwogICAgICAgICByZXR1cm4gYmFj
a2luZ1N0b3JlLnJlbGVhc2UoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKaW5kZXggOGM4YTg2
YTllZmUwZWZjMDU5YWJjMWQ4OWY5NDYwYTRmZGY0NDNjZC4uNmJlMTc0ZjgwMjNmYjhhMTZhZGM4
MWZjNGNmYmQ1YWQwMjBjNWY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC03Myw2ICs3NCw4IEBA
IHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgV2Vha1B0cjxJREJCYWNraW5n
U3RvcmU+ID4gSURCQmFja2luZ1N0b3JlTWFwOwogICAgIElEQkJhY2tpbmdTdG9yZU1hcCBtX2Jh
Y2tpbmdTdG9yZU1hcDsKIAorICAgIEhhc2hTZXQ8UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gPiBt
X3Nlc3Npb25Pbmx5QmFja2luZ1N0b3JlczsKKwogICAgIC8vIE9ubHkgb25lIGluc3RhbmNlIG9m
IHRoZSBmYWN0b3J5IHNob3VsZCBleGlzdCBhdCBhbnkgZ2l2ZW4gdGltZS4KICAgICBzdGF0aWMg
SURCRmFjdG9yeUJhY2tlbmRJbXBsKiBpZGJGYWN0b3J5QmFja2VuZEltcGw7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJCYWNraW5nU3RvcmVUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCQmFja2luZ1N0b3JlVGVzdC5jcHAK
aW5kZXggNTMwMmUxMmFmYzI3MzVlMWMxNzhhODdiZGQwZWM3MDRmZmE2MWMzNy4uYTkwMjU1OGMz
MjVkMTA1MzA5MzAyMGVmMDI0Y2Q3NDc4YTc0YjQ2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9JREJCYWNraW5nU3RvcmVUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0lEQkJhY2tpbmdTdG9yZVRlc3QuY3BwCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCiAKICNpbmNsdWRlICJJREJGYWN0b3J5
QmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgogCiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KQEAgLTQ1LDEwICs0Niw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIFNldFVwKCkKICAgICB7CiAgICAgICAgIFNlY3VyaXR5T3Jp
Z2luKiBzZWN1cml0eU9yaWdpbiA9IDA7Ci0gICAgICAgIC8vIEVtcHR5IHBhdGhCYXNlIG1lYW5z
IGFuIGluLW1lbW9yeSBkYXRhYmFzZS4KLSAgICAgICAgU3RyaW5nIHBhdGhCYXNlOwogICAgICAg
ICBTdHJpbmcgZmlsZUlkZW50aWZpZXI7Ci0gICAgICAgIG1fYmFja2luZ1N0b3JlID0gSURCQmFj
a2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLCBwYXRoQmFzZSwgZmlsZUlkZW50aWZpZXIp
OworICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IElEQkJhY2tpbmdTdG9yZTo6b3BlbkluTWVtb3J5
KHNlY3VyaXR5T3JpZ2luLCBmaWxlSWRlbnRpZmllcik7CiAKICAgICAgICAgLy8gdXNlZnVsIGtl
eXMgYW5kIHZhbHVlcyBkdXJpbmcgdGVzdHMKICAgICAgICAgY29uc3QgY2hhciByYXdWYWx1ZTFb
XSA9ICJ2YWx1ZTEiOwpAQCAtMjE5LDYgKzIxOCwyNyBAQCBURVNUKElEQkZhY3RvcnlCYWNrZW5k
VGVzdCwgQmFja2luZ1N0b3JlTGlmZXRpbWUpCiAgICAgRVhQRUNUX0VRKGRpc2tTdG9yZTEtPnJl
ZkNvdW50KCksIDIpOwogfQogCitURVNUKElEQkZhY3RvcnlCYWNrZW5kVGVzdCwgTWVtb3J5QmFj
a2luZ1N0b3JlTGlmZXRpbWUpCit7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4x
ID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSgiaHR0cCIsICJsb2NhbGhvc3QiLCA4MSk7CisgICAg
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4yID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSgi
aHR0cCIsICJsb2NhbGhvc3QiLCA4Mik7CisKKyAgICBSZWZQdHI8TW9ja0lEQkZhY3RvcnlCYWNr
ZW5kPiBmYWN0b3J5ID0gTW9ja0lEQkZhY3RvcnlCYWNrZW5kOjpjcmVhdGUoKTsKKyAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBtZW1TdG9yZTEgPSBmYWN0b3J5LT50ZXN0T3BlbkJhY2tpbmdT
dG9yZShvcmlnaW4xLCBTdHJpbmcoKSk7CisgICAgRVhQRUNUX0VRKG1lbVN0b3JlMS0+cmVmQ291
bnQoKSwgMik7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbWVtU3RvcmUyID0gZmFjdG9y
eS0+dGVzdE9wZW5CYWNraW5nU3RvcmUob3JpZ2luMSwgU3RyaW5nKCkpOworICAgIEVYUEVDVF9F
UShtZW1TdG9yZTIuZ2V0KCksIG1lbVN0b3JlMS5nZXQoKSk7CisgICAgRVhQRUNUX0VRKG1lbVN0
b3JlMi0+cmVmQ291bnQoKSwgMyk7CisKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtZW1T
dG9yZTMgPSBmYWN0b3J5LT50ZXN0T3BlbkJhY2tpbmdTdG9yZShvcmlnaW4yLCBTdHJpbmcoKSk7
CisgICAgRVhQRUNUX0VRKG1lbVN0b3JlMy0+cmVmQ291bnQoKSwgMik7CisgICAgRVhQRUNUX0VR
KG1lbVN0b3JlMS0+cmVmQ291bnQoKSwgMyk7CisKKyAgICBmYWN0b3J5LmNsZWFyKCk7CisgICAg
RVhQRUNUX0VRKG1lbVN0b3JlMS0+cmVmQ291bnQoKSwgMik7CisgICAgRVhQRUNUX0VRKG1lbVN0
b3JlMy0+cmVmQ291bnQoKSwgMSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZiAvLyBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195760</attachid>
            <date>2013-03-29 10:16:31 -0700</date>
            <delta_ts>2013-03-29 11:48:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110820-20130329101628.patch</filename>
            <type>text/plain</type>
            <size>19586</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3MDEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmI4NmExNjJmNzYzMTQ0
MWM4ZTE1YzQ2NDc1ZmU0NGQ1ZTM1Y2FlOS4uYjdkMDJiZWExNzVmY2UxMDM1MmRhN2FjNDA1OTFm
YmFlNGUzNzEwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEzLTAzLTExICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBCaW5k
IGxpZmV0aW1lIG9mIGluLW1lbW9yeSBiYWNraW5nIHN0b3JlcyB0byBJREJGYWN0b3J5IGJhY2tl
bmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDgy
MAorCisgICAgICAgIEJhY2tpbmcgc3RvcmVzIGFyZSBkcm9wcGVkIGFzIHNvb24gYXMgYWxsIGNv
bm5lY3Rpb25zIGFyZSBjbG9zZWQuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yCisgICAgICAgIGRpc2st
YmFja2VkIHN0b3JlcyB0byBmcmVlIHVwIG1lbW9yeSAoYWx0aG91Z2ggdGhlcmUncyBhIHBlcmZv
cm1hbmNlIHRyYWRlLW9mZi4uLikuIEJ1dAorICAgICAgICBmb3IgbWVtb3J5LWJhY2tlZCBzdG9y
ZXMsIHRoZSBleHBlY3RlZCBsaWZldGltZSBzaG91bGQgbWF0Y2ggdGhlIGxpZmV0aW1lIG9mIHRo
ZSBmYWN0b3J5CisgICAgICAgIHNvIHRoYXQgYW4gb3Blbi93cml0ZS9jbG9zZS9yZS1vcGVuL3Jl
YWQgeWllbGRzIHRoZSB3cml0dGVuIGRhdGEuCisKKyAgICAgICAgVGVzdDogQ2hyb21pdW0ncyB3
ZWJraXRfdW5pdF90ZXN0cywgSURCRmFjdG9yeUJhY2tlbmRUZXN0Lk1lbW9yeUJhY2tpbmdTdG9y
ZUxpZmV0aW1lCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpJREJCYWNraW5nU3RvcmUp
OiBQYXNzIGNvbXBhcmF0b3IgaW50byBjb25zdHJ1Y3RvciBzaW5jZSBpdCB3YXMgYWx3YXlzCisg
ICAgICAgIGFzc2lnbmVkIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMgYW55d2F5LgorICAgICAgICAo
V2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpvcGVuKTogU3BsaXQgaW50byB0aHJlZSBwYXJ0cyAt
IG9wZW4oKSB3aGljaCBpcyBkaXNrLWJhY2tlZC4uLgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpvcGVuSW5NZW1vcnkpOiAuLi5leHBsaXQgaW4tbWVtb3J5IGNyZWF0aW9uIChw
cmV2aW91c2x5OiBzcGVjaWZpZWQgYnkgZW1wdHkgcGF0aCkKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6Y3JlYXRlKTogLi4uIGFuZCB0aGUgY29tbW9uIGxvZ2ljIHdoaWNoIGNh
bGxzIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuaDogSGVhZGVycyBmb3IgdGhlIGFib3ZlLgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJG
YWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUpOiBBZGQgaW4tbWVtb3J5IGJhY2tp
bmcgc3RvcmVzIHRvIGRlcGVuZGVudCBzZXQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmg6IEFkZCBtZW1iZXIgdG8gdHJhY2sgZGVwZW5kZW50IGJh
Y2tpbmcgc3RvcmVzLgorCiAyMDEzLTAzLTI3ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNv
bT4KIAogICAgICAgICBDaHJvbWl1bSBNYWMgZmFpbHMgdG8gYnVpbGQgYWZ0ZXIgcjE0Njk5NSBi
ZWNhdXNlIHRoZSBuZXcgTlNGb250IGNhdGVnb3J5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IGFiOTVjNWMyN2JlMjc0ZTE4MWE0Y2M4MTY2ZWRkOWE4ODBhYTQwNTAuLjkyODgzZDJiNGY2
MjhkNzU5ZjhjYjIwZGVjNzA4NmU0NmE3MWU4NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMDMtMTEgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IEJpbmQgbGlmZXRpbWUgb2YgaW4tbWVtb3J5
IGJhY2tpbmcgc3RvcmVzIHRvIElEQkZhY3RvcnkgYmFja2VuZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwODIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9JREJCYWNraW5nU3RvcmVUZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZVRlc3Q6OlNldFVwKTogVXNl
IG9wZW5Jbk1lbW9yeSByYXRoZXIgdGhhbiBlbXB0eSBwYXRoLgorICAgICAgICAoV2ViQ29yZTo6
VEVTVCk6IEFkZGVkIElEQkZhY3RvcnlCYWNrZW5kVGVzdC5NZW1vcnlCYWNraW5nU3RvcmVMaWZl
dGltZSB0byB2ZXJpZnkgcmVmcy4KKwogMjAxMy0wMy0yNyAgVGltb3RoeSBIYXRjaGVyICA8dGlt
b3RoeUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGRvY2stdG8tcmlnaHQg
b2YgdGhlIFdlYiBJbnNwZWN0b3IgaW4gdGhlIE1hYyBwb3J0LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggNjYyZjM4
ZWNhNGI5YTRkYWQ5MGVjYzg1NDE3MzhlOGQ4YTg5NjBhOS4uOGQyMTMwYzRmNGJjZjQ1MGZiMzZh
YmQ0YzRjNWFlNDYzMjI4M2QyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCkBAIC00Myw2ICs0Myw5IEBACiAjaW5jbHVk
ZSAiTGV2ZWxEQlRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRl
IDxwdWJsaWMvUGxhdGZvcm0uaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMzNSw5ICszMzgsMTAgQEAgcHVibGljOgogICAg
IH0KIH07CiAKLUlEQkJhY2tpbmdTdG9yZTo6SURCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllciwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+IGRiKQorSURCQmFja2luZ1N0
b3JlOjpJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBQYXNzT3duUHRy
PExldmVsREJEYXRhYmFzZT4gZGIsIFBhc3NPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IGNvbXBh
cmF0b3IpCiAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fZGIoZGIpCisg
ICAgLCBtX2NvbXBhcmF0b3IoY29tcGFyYXRvcikKICAgICAsIG1fd2Vha0ZhY3RvcnkodGhpcykK
IHsKIH0KQEAgLTM0NSw2ICszNDksOSBAQCBJREJCYWNraW5nU3RvcmU6OklEQkJhY2tpbmdTdG9y
ZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFBhc3NPd25QdHI8TGV2ZWxEQkRhdAogSURCQmFj
a2luZ1N0b3JlOjpJREJCYWNraW5nU3RvcmUoKQogICAgIDogbV93ZWFrRmFjdG9yeSh0aGlzKQog
eworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIEFTU0VSVChXZWJLaXQ6OlBsYXRmb3JtOjpj
dXJyZW50KCktPnVuaXRUZXN0U3VwcG9ydCgpKTsKKyNlbmRpZgogfQogCiBJREJCYWNraW5nU3Rv
cmU6On5JREJCYWNraW5nU3RvcmUoKQpAQCAtMzc4LDY1ICszODUsNTYgQEAgUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU+IElEQkJhY2tpbmdTdG9yZTo6b3BlbihTZWN1cml0eU9yaWdpbiogc2Vj
dXJpdHlPcmlnaW4KIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJCYWNraW5nU3RvcmU6
Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIHBhdGhC
YXNlQXJnLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBMZXZlbERCRmFjdG9yeSogbGV2
ZWxEQkZhY3RvcnkpCiB7CiAgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6Om9wZW4iKTsK
KyAgICBBU1NFUlQoIXBhdGhCYXNlQXJnLmlzRW1wdHkoKSk7CiAgICAgU3RyaW5nIHBhdGhCYXNl
ID0gcGF0aEJhc2VBcmc7CiAKICAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IGNvbXBhcmF0
b3IgPSBhZG9wdFB0cihuZXcgQ29tcGFyYXRvcigpKTsKICAgICBPd25QdHI8TGV2ZWxEQkRhdGFi
YXNlPiBkYjsKIAotICAgIGlmIChwYXRoQmFzZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGIgPSBM
ZXZlbERCRGF0YWJhc2U6Om9wZW5Jbk1lbW9yeShjb21wYXJhdG9yLmdldCgpKTsKLSAgICAgICAg
aWYgKCFkYikgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJMZXZlbERCRGF0YWJhc2U6Om9wZW5J
bk1lbW9yeSBmYWlsZWQuIik7Ci0gICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dy
YW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMi
LCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1lbW9yeUZhaWxlZCwgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZU9wZW5NYXgpOwotICAgICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPigpOwotICAgICAgICB9Ci0gICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3Jh
bUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIs
IElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWVtb3J5U3VjY2VzcywgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZU9wZW5NYXgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghcGF0aEJhc2UuY29u
dGFpbnNPbmx5QVNDSUkoKSkKKyAgICBpZiAoIXBhdGhCYXNlLmNvbnRhaW5zT25seUFTQ0lJKCkp
CiAgICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2Vi
Q29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlT3BlbkF0dGVtcHROb25BU0NJSSwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgp
OwotICAgICAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhwYXRoQmFzZSkpIHsKLSAgICAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSBJbmRleGVkREIgZGF0YWJhc2UgcGF0aCAl
cyIsIHBhdGhCYXNlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9y
dDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5P
cGVuU3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5GYWlsZWREaXJlY3RvcnksIElE
QkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKLSAgICAgICAgICAgIHJldHVybiBQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBwYXRo
ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGhCYXNlLCBzZWN1cml0eU9yaWdpbi0+ZGF0
YWJhc2VJZGVudGlmaWVyKCkgKyAiLmluZGV4ZWRkYi5sZXZlbGRiIik7CisgICAgaWYgKCFtYWtl
QWxsRGlyZWN0b3JpZXMocGF0aEJhc2UpKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IGNyZWF0ZSBJbmRleGVkREIgZGF0YWJhc2UgcGF0aCAlcyIsIHBhdGhCYXNlLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2Vi
Q29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlT3BlbkZhaWxlZERpcmVjdG9yeSwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgp
OworICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7CisgICAgfQog
Ci0gICAgICAgIGRiID0gbGV2ZWxEQkZhY3RvcnktPm9wZW5MZXZlbERCKHBhdGgsIGNvbXBhcmF0
b3IuZ2V0KCkpOwotICAgICAgICBpZiAoZGIpIHsKLSAgICAgICAgICAgIGJvb2wga25vd24gPSBm
YWxzZTsKLSAgICAgICAgICAgIGJvb2wgb2sgPSBpc1NjaGVtYUtub3duKGRiLmdldCgpLCBrbm93
bik7Ci0gICAgICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJ
bmRleGVkREIgaGFkIElPIGVycm9yIGNoZWNraW5nIHNjaGVtYSwgdHJlYXRpbmcgaXQgYXMgZmFp
bHVyZSB0byBvcGVuIik7Ci0gICAgICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9n
cmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVz
IiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5GYWlsZWRJT0VyckNoZWNraW5nU2NoZW1hLCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7Ci0gICAgICAgICAgICAgICAgZGIuY2xlYXIo
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWtub3duKSB7Ci0gICAgICAgICAgICAgICAgTE9H
X0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9yZSBoYWQgdW5rbm93biBzY2hlbWEsIHRyZWF0
aW5nIGl0IGFzIGZhaWx1cmUgdG8gb3BlbiIpOwotICAgICAgICAgICAgICAgIEhpc3RvZ3JhbVN1
cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3Rv
cmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuRmFpbGVkVW5rbm93blNj
aGVtYSwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwotICAgICAgICAgICAgICAgIGRi
LmNsZWFyKCk7Ci0gICAgICAgICAgICB9CisgICAgU3RyaW5nIHBhdGggPSBwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQocGF0aEJhc2UsIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIo
KSArICIuaW5kZXhlZGRiLmxldmVsZGIiKTsKKworICAgIGRiID0gbGV2ZWxEQkZhY3RvcnktPm9w
ZW5MZXZlbERCKHBhdGgsIGNvbXBhcmF0b3IuZ2V0KCkpOworICAgIGlmIChkYikgeworICAgICAg
ICBib29sIGtub3duID0gZmFsc2U7CisgICAgICAgIGJvb2wgb2sgPSBpc1NjaGVtYUtub3duKGRi
LmdldCgpLCBrbm93bik7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIExPR19FUlJP
UigiSW5kZXhlZERCIGhhZCBJTyBlcnJvciBjaGVja2luZyBzY2hlbWEsIHRyZWF0aW5nIGl0IGFz
IGZhaWx1cmUgdG8gb3BlbiIpOworICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9n
cmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVz
IiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5GYWlsZWRJT0VyckNoZWNraW5nU2NoZW1hLCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7CisgICAgICAgICAgICBkYi5jbGVhcigpOwor
ICAgICAgICB9IGVsc2UgaWYgKCFrbm93bikgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJJbmRl
eGVkREIgYmFja2luZyBzdG9yZSBoYWQgdW5rbm93biBzY2hlbWEsIHRyZWF0aW5nIGl0IGFzIGZh
aWx1cmUgdG8gb3BlbiIpOworICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFt
RW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5GYWlsZWRVbmtub3duU2NoZW1hLCBJREJMZXZlbERC
QmFja2luZ1N0b3JlT3Blbk1heCk7CisgICAgICAgICAgICBkYi5jbGVhcigpOwogICAgICAgICB9
CisgICAgfQogCi0gICAgICAgIGlmIChkYikKLSAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6
Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3Bl
blN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuU3VjY2VzcywgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZU9wZW5NYXgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIExPR19FUlJP
UigiSW5kZXhlZERCIGJhY2tpbmcgc3RvcmUgb3BlbiBmYWlsZWQsIGF0dGVtcHRpbmcgY2xlYW51
cCIpOwotICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gbGV2ZWxEQkZhY3RvcnktPmRlc3Ryb3lM
ZXZlbERCKHBhdGgpOwotICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgICAgICAg
ICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9yZSBjbGVhbnVwIGZhaWxlZCIpOwot
ICAgICAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJX
ZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNr
aW5nU3RvcmVPcGVuQ2xlYW51cERlc3Ryb3lGYWlsZWQsIElEQkxldmVsREJCYWNraW5nU3RvcmVP
cGVuTWF4KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU+KCk7Ci0gICAgICAgICAgICB9CisgICAgaWYgKGRiKQorICAgICAgICBIaXN0b2dyYW1TdXBw
b3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3Jl
Lk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlblN1Y2Nlc3MsIElEQkxldmVs
REJCYWNraW5nU3RvcmVPcGVuTWF4KTsKKyAgICBlbHNlIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJ
bmRleGVkREIgYmFja2luZyBzdG9yZSBvcGVuIGZhaWxlZCwgYXR0ZW1wdGluZyBjbGVhbnVwIik7
CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGxldmVsREJGYWN0b3J5LT5kZXN0cm95TGV2ZWxEQihw
YXRoKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIklu
ZGV4ZWREQiBiYWNraW5nIHN0b3JlIGNsZWFudXAgZmFpbGVkIik7CisgICAgICAgICAgICBIaXN0
b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFj
a2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBE
ZXN0cm95RmFpbGVkLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7CisgICAgICAgICAg
ICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7CisgICAgICAgIH0KIAotICAg
ICAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9yZSBjbGVhbnVwIHN1Y2Nl
ZWRlZCwgcmVvcGVuaW5nIik7Ci0gICAgICAgICAgICBkYiA9IGxldmVsREJGYWN0b3J5LT5vcGVu
TGV2ZWxEQihwYXRoLCBjb21wYXJhdG9yLmdldCgpKTsKLSAgICAgICAgICAgIGlmICghZGIpIHsK
LSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3JlIHJlb3Bl
biBhZnRlciByZWNvdmVyeSBmYWlsZWQiKTsKLSAgICAgICAgICAgICAgICBIaXN0b2dyYW1TdXBw
b3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3Jl
Lk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBSZW9wZW5GYWls
ZWQsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRl
eGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Bl
bkNsZWFudXBSZW9wZW5TdWNjZXNzLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7Cisg
ICAgICAgIExPR19FUlJPUigiSW5kZXhlZERCIGJhY2tpbmcgc3RvcmUgY2xlYW51cCBzdWNjZWVk
ZWQsIHJlb3BlbmluZyIpOworICAgICAgICBkYiA9IGxldmVsREJGYWN0b3J5LT5vcGVuTGV2ZWxE
QihwYXRoLCBjb21wYXJhdG9yLmdldCgpKTsKKyAgICAgICAgaWYgKCFkYikgeworICAgICAgICAg
ICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9yZSByZW9wZW4gYWZ0ZXIgcmVjb3Zl
cnkgZmFpbGVkIik7CisgICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVt
ZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBSZW9wZW5GYWlsZWQsIElEQkxldmVsREJCYWNr
aW5nU3RvcmVPcGVuTWF4KTsKKyAgICAgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4oKTsKICAgICAgICAgfQorICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dy
YW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMi
LCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBSZW9wZW5TdWNjZXNzLCBJREJMZXZl
bERCQmFja2luZ1N0b3JlT3Blbk1heCk7CiAgICAgfQogCiAgICAgaWYgKCFkYikgewpAQCAtNDQ1
LDEyICs0NDMsMzcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkJhY2tpbmdTdG9y
ZTo6b3BlbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4KICAgICAgICAgcmV0dXJuIFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBIYW5k
bGUgY29tcGFyYXRvciBuYW1lIGNoYW5nZXMuCisgICAgcmV0dXJuIGNyZWF0ZShmaWxlSWRlbnRp
ZmllciwgZGIucmVsZWFzZSgpLCBjb21wYXJhdG9yLnJlbGVhc2UoKSk7Cit9CisKK1Bhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBJREJCYWNraW5nU3RvcmU6Om9wZW5Jbk1lbW9yeShTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKK3sKKyAg
ICBEZWZhdWx0TGV2ZWxEQkZhY3RvcnkgbGV2ZWxEQkZhY3Rvcnk7CisgICAgcmV0dXJuIElEQkJh
Y2tpbmdTdG9yZTo6b3BlbkluTWVtb3J5KHNlY3VyaXR5T3JpZ2luLCBpZGVudGlmaWVyLCAmbGV2
ZWxEQkZhY3RvcnkpOworfQorCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCQmFja2lu
Z1N0b3JlOjpvcGVuSW5NZW1vcnkoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25z
dCBTdHJpbmcmIGlkZW50aWZpZXIsIExldmVsREJGYWN0b3J5KiBsZXZlbERCRmFjdG9yeSkKK3sK
KyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6b3BlbkluTWVtb3J5Iik7CiAKLSAgICBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoYWRvcHRSZWYobmV3IElEQkJhY2tp
bmdTdG9yZShmaWxlSWRlbnRpZmllciwgZGIucmVsZWFzZSgpKSkpOwotICAgIGJhY2tpbmdTdG9y
ZS0+bV9jb21wYXJhdG9yID0gY29tcGFyYXRvci5yZWxlYXNlKCk7CisgICAgT3duUHRyPExldmVs
REJDb21wYXJhdG9yPiBjb21wYXJhdG9yID0gYWRvcHRQdHIobmV3IENvbXBhcmF0b3IoKSk7Cisg
ICAgT3duUHRyPExldmVsREJEYXRhYmFzZT4gZGIgPSBMZXZlbERCRGF0YWJhc2U6Om9wZW5Jbk1l
bW9yeShjb21wYXJhdG9yLmdldCgpKTsKKyAgICBpZiAoIWRiKSB7CisgICAgICAgIExPR19FUlJP
UigiTGV2ZWxEQkRhdGFiYXNlOjpvcGVuSW5NZW1vcnkgZmFpbGVkLiIpOworICAgICAgICBIaXN0
b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFj
a2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1lbW9yeUZh
aWxlZCwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOworICAgICAgICByZXR1cm4gUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7CisgICAgfQorICAgIEhpc3RvZ3JhbVN1cHBvcnQ6
Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3Bl
blN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWVtb3J5U3VjY2VzcywgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOworCisgICAgcmV0dXJuIGNyZWF0ZShpZGVudGlmaWVy
LCBkYi5yZWxlYXNlKCksIGNvbXBhcmF0b3IucmVsZWFzZSgpKTsKK30KKworUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU+IElEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllciwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+IGRiLCBQYXNzT3duUHRyPExldmVs
REJDb21wYXJhdG9yPiBjb21wYXJhdG9yKQoreworICAgIC8vIEZJWE1FOiBIYW5kbGUgY29tcGFy
YXRvciBuYW1lIGNoYW5nZXMuCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0
b3JlKGFkb3B0UmVmKG5ldyBJREJCYWNraW5nU3RvcmUoaWRlbnRpZmllciwgZGIsIGNvbXBhcmF0
b3IpKSk7CiAKLSAgICBpZiAoIXNldFVwTWV0YWRhdGEoYmFja2luZ1N0b3JlLT5tX2RiLmdldCgp
LCBmaWxlSWRlbnRpZmllcikpCisgICAgaWYgKCFzZXRVcE1ldGFkYXRhKGJhY2tpbmdTdG9yZS0+
bV9kYi5nZXQoKSwgaWRlbnRpZmllcikpCiAgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4oKTsKIAogICAgIHJldHVybiBiYWNraW5nU3RvcmUucmVsZWFzZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3Jl
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaApp
bmRleCBhMjNhN2JjZjY4ZGZlZDYwZTVmOTlhNWFiMDgwYjliY2ZlMzFhZTA4Li44NDA5ZTA4OWEw
Njg2MzYyNGZjNDFmNjA5OTJjMGYyMDQ2YmQzOTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaApAQCAtNTksNiArNTksOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlKCk7CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5n
JiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcik7CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3Ry
aW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgTGV2ZWxEQkZhY3Rv
cnkqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5Jbk1lbW9y
eShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuSW5NZW1vcnkoU2VjdXJpdHlPcmlnaW4q
LCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIExldmVsREJGYWN0b3J5Kik7CiAgICAgV2Vha1B0
cjxJREJCYWNraW5nU3RvcmU+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtGYWN0b3J5
LmNyZWF0ZVdlYWtQdHIoKTsgfQogCiAgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBnZXREYXRh
YmFzZU5hbWVzKCk7CkBAIC0xNzYsMTIgKzE3OCwxNCBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJv
dGVjdGVkOgotICAgIElEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFBh
c3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPik7CisgICAgSURCQmFja2luZ1N0b3JlKGNvbnN0IFN0
cmluZyYgaWRlbnRpZmllciwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+LCBQYXNzT3duUHRy
PExldmVsREJDb21wYXJhdG9yPik7CiAKICAgICAvLyBTaG91bGQgb25seSB1c2VkIGZvciBtb2Nr
aW5nLgogICAgIElEQkJhY2tpbmdTdG9yZSgpOwogCiBwcml2YXRlOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwg
UGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+LCBQYXNzT3duUHRyPExldmVsREJDb21wYXJhdG9y
Pik7CisKICAgICBib29sIGZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlL
ZXksIGJvb2wmIGZvdW5kKTsKICAgICBib29sIGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFw
KikgV0FSTl9VTlVTRURfUkVUVVJOOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCA1NzgwN2Nh
ZDgwYzExNWVkOGU1MjA1NzJhNTVhZGQ0NDJiNDhlNDNiLi44NGVmYzBkOWJiMjcxZjgzM2U4MDBl
NzM0M2Q5YTYwMDEyZGEyNjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTEzMSwxNyArMTMx
LDI4IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsCiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3Rvcnkp
CiB7CiAgICAgY29uc3QgU3RyaW5nIGZpbGVJZGVudGlmaWVyID0gY29tcHV0ZUZpbGVJZGVudGlm
aWVyKHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKKyAgICBjb25zdCBib29sIG9wZW5Jbk1lbW9yeSA9
IGRhdGFEaXJlY3RvcnkuaXNFbXB0eSgpOwogCiAgICAgSURCQmFja2luZ1N0b3JlTWFwOjppdGVy
YXRvciBpdDIgPSBtX2JhY2tpbmdTdG9yZU1hcC5maW5kKGZpbGVJZGVudGlmaWVyKTsKLSAgICBp
ZiAoaXQyICE9IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpKSB7Ci0gICAgICAgIGlmIChpdDItPnZh
bHVlLmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIGl0Mi0+dmFsdWUuZ2V0KCk7Ci0gICAgfQor
ICAgIGlmIChpdDIgIT0gbV9iYWNraW5nU3RvcmVNYXAuZW5kKCkgJiYgaXQyLT52YWx1ZS5nZXQo
KSkKKyAgICAgICAgcmV0dXJuIGl0Mi0+dmFsdWUuZ2V0KCk7CisKKyAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7CisgICAgaWYgKG9wZW5Jbk1lbW9yeSkKKyAgICAgICAg
YmFja2luZ1N0b3JlID0gSURCQmFja2luZ1N0b3JlOjpvcGVuSW5NZW1vcnkoc2VjdXJpdHlPcmln
aW4uZ2V0KCksIGZpbGVJZGVudGlmaWVyKTsKKyAgICBlbHNlCisgICAgICAgIGJhY2tpbmdTdG9y
ZSA9IElEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YURpcmVj
dG9yeSwgZmlsZUlkZW50aWZpZXIpOwogCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFj
a2luZ1N0b3JlID0gSURCQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBk
YXRhRGlyZWN0b3J5LCBmaWxlSWRlbnRpZmllcik7CiAgICAgaWYgKGJhY2tpbmdTdG9yZSkgewog
ICAgICAgICBjbGVhbldlYWtNYXAobV9iYWNraW5nU3RvcmVNYXApOwogICAgICAgICBtX2JhY2tp
bmdTdG9yZU1hcC5zZXQoZmlsZUlkZW50aWZpZXIsIGJhY2tpbmdTdG9yZS0+Y3JlYXRlV2Vha1B0
cigpKTsKKyAgICAgICAgLy8gSWYgYW4gaW4tbWVtb3J5IGRhdGFiYXNlLCBiaW5kIGxpZmV0aW1l
IHRvIHRoaXMgZmFjdG9yeSBpbnN0YW5jZS4KKyAgICAgICAgaWYgKG9wZW5Jbk1lbW9yeSkKKyAg
ICAgICAgICAgIG1fc2Vzc2lvbk9ubHlCYWNraW5nU3RvcmVzLmFkZChiYWNraW5nU3RvcmUpOwor
CisgICAgICAgIC8vIEFsbCBiYWNraW5nIHN0b3JlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBmYWN0
b3J5IHNob3VsZCBiZSBvZiB0aGUgc2FtZSB0eXBlLgorICAgICAgICBBU1NFUlQobV9zZXNzaW9u
T25seUJhY2tpbmdTdG9yZXMuaXNFbXB0eSgpIHx8IG9wZW5Jbk1lbW9yeSk7CisKICAgICAgICAg
cmV0dXJuIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCmlu
ZGV4IDhjOGE4NmE5ZWZlMGVmYzA1OWFiYzFkODlmOTQ2MGE0ZmRmNDQzY2QuLjZiZTE3NGY4MDIz
ZmI4YTE2YWRjODFmYzRjZmJkNWFkMDIwYzVmODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9XZWFrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgpAQCAtNzMs
NiArNzQsOCBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFdlYWtQdHI8
SURCQmFja2luZ1N0b3JlPiA+IElEQkJhY2tpbmdTdG9yZU1hcDsKICAgICBJREJCYWNraW5nU3Rv
cmVNYXAgbV9iYWNraW5nU3RvcmVNYXA7CiAKKyAgICBIYXNoU2V0PFJlZlB0cjxJREJCYWNraW5n
U3RvcmU+ID4gbV9zZXNzaW9uT25seUJhY2tpbmdTdG9yZXM7CisKICAgICAvLyBPbmx5IG9uZSBp
bnN0YW5jZSBvZiB0aGUgZmFjdG9yeSBzaG91bGQgZXhpc3QgYXQgYW55IGdpdmVuIHRpbWUuCiAg
ICAgc3RhdGljIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogaWRiRmFjdG9yeUJhY2tlbmRJbXBsOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCQmFja2luZ1N0
b3JlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkJhY2tpbmdTdG9y
ZVRlc3QuY3BwCmluZGV4IDAxOTdhMTU1ZTI3ZThhMDMxNzUzMTIyNWQzZjZjNGIyMDAzNTM3MDUu
LmQzMmYxODZjMjk4N2I4MjY1NzJiYTRkZTFjMmVmNTNjNzc2M2QwZjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCQmFja2luZ1N0b3JlVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJCYWNraW5nU3RvcmVUZXN0LmNwcApAQCAt
MjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCiAjaW5j
bHVkZSAiSURCTGV2ZWxEQkNvZGluZy5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgpAQCAt
NDcsMTAgKzQ4LDggQEAgcHVibGljOgogICAgIHZvaWQgU2V0VXAoKQogICAgIHsKICAgICAgICAg
U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luID0gMDsKLSAgICAgICAgLy8gRW1wdHkgcGF0
aEJhc2UgbWVhbnMgYW4gaW4tbWVtb3J5IGRhdGFiYXNlLgotICAgICAgICBTdHJpbmcgcGF0aEJh
c2U7CiAgICAgICAgIFN0cmluZyBmaWxlSWRlbnRpZmllcjsKLSAgICAgICAgbV9iYWNraW5nU3Rv
cmUgPSBJREJCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4sIHBhdGhCYXNlLCBmaWxl
SWRlbnRpZmllcik7CisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gSURCQmFja2luZ1N0b3JlOjpv
cGVuSW5NZW1vcnkoc2VjdXJpdHlPcmlnaW4sIGZpbGVJZGVudGlmaWVyKTsKIAogICAgICAgICAv
LyB1c2VmdWwga2V5cyBhbmQgdmFsdWVzIGR1cmluZyB0ZXN0cwogICAgICAgICBjb25zdCBjaGFy
IHJhd1ZhbHVlMVtdID0gInZhbHVlMSI7CkBAIC0yOTgsNiArMjk3LDI3IEBAIFRFU1QoSURCRmFj
dG9yeUJhY2tlbmRUZXN0LCBCYWNraW5nU3RvcmVMaWZldGltZSkKICAgICBFWFBFQ1RfRVEoZGlz
a1N0b3JlMS0+cmVmQ291bnQoKSwgMik7CiB9CiAKK1RFU1QoSURCRmFjdG9yeUJhY2tlbmRUZXN0
LCBNZW1vcnlCYWNraW5nU3RvcmVMaWZldGltZSkKK3sKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IG9yaWdpbjEgPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKCJodHRwIiwgImxvY2FsaG9zdCIs
IDgxKTsKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbjIgPSBTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlKCJodHRwIiwgImxvY2FsaG9zdCIsIDgyKTsKKworICAgIFJlZlB0cjxNb2NrSURC
RmFjdG9yeUJhY2tlbmQ+IGZhY3RvcnkgPSBNb2NrSURCRmFjdG9yeUJhY2tlbmQ6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1lbVN0b3JlMSA9IGZhY3RvcnktPnRlc3RP
cGVuQmFja2luZ1N0b3JlKG9yaWdpbjEsIFN0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEobWVtU3Rv
cmUxLT5yZWZDb3VudCgpLCAyKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtZW1TdG9y
ZTIgPSBmYWN0b3J5LT50ZXN0T3BlbkJhY2tpbmdTdG9yZShvcmlnaW4xLCBTdHJpbmcoKSk7Cisg
ICAgRVhQRUNUX0VRKG1lbVN0b3JlMi5nZXQoKSwgbWVtU3RvcmUxLmdldCgpKTsKKyAgICBFWFBF
Q1RfRVEobWVtU3RvcmUyLT5yZWZDb3VudCgpLCAzKTsKKworICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmU+IG1lbVN0b3JlMyA9IGZhY3RvcnktPnRlc3RPcGVuQmFja2luZ1N0b3JlKG9yaWdpbjIs
IFN0cmluZygpKTsKKyAgICBFWFBFQ1RfRVEobWVtU3RvcmUzLT5yZWZDb3VudCgpLCAyKTsKKyAg
ICBFWFBFQ1RfRVEobWVtU3RvcmUxLT5yZWZDb3VudCgpLCAzKTsKKworICAgIGZhY3RvcnkuY2xl
YXIoKTsKKyAgICBFWFBFQ1RfRVEobWVtU3RvcmUxLT5yZWZDb3VudCgpLCAyKTsKKyAgICBFWFBF
Q1RfRVEobWVtU3RvcmUzLT5yZWZDb3VudCgpLCAxKTsKK30KKwogfSAvLyBuYW1lc3BhY2UKIAog
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195769</attachid>
            <date>2013-03-29 11:48:31 -0700</date>
            <delta_ts>2013-03-29 12:10:21 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-110820-20130329114827.patch</filename>
            <type>text/plain</type>
            <size>20125</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3MTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWFkZDM2NjEyZTUyM2E3
MGQ2MTMxZTM5OTE2ZDhlMTM2NGY3MDAzZS4uYThlMDM4YWRmNWY3NTliY2M3ZmRkYTQxYjgyYjU5
YzY5ODdjNDFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEzLTAzLTExICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBCaW5k
IGxpZmV0aW1lIG9mIGluLW1lbW9yeSBiYWNraW5nIHN0b3JlcyB0byBJREJGYWN0b3J5IGJhY2tl
bmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDgy
MAorCisgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCisKKyAgICAgICAgQmFja2luZyBz
dG9yZXMgYXJlIGRyb3BwZWQgYXMgc29vbiBhcyBhbGwgY29ubmVjdGlvbnMgYXJlIGNsb3NlZC4g
VGhhdCBtYWtlcyBzZW5zZSBmb3IKKyAgICAgICAgZGlzay1iYWNrZWQgc3RvcmVzIHRvIGZyZWUg
dXAgbWVtb3J5IChhbHRob3VnaCB0aGVyZSdzIGEgcGVyZm9ybWFuY2UgdHJhZGUtb2ZmLi4uKS4g
QnV0CisgICAgICAgIGZvciBtZW1vcnktYmFja2VkIHN0b3JlcywgdGhlIGV4cGVjdGVkIGxpZmV0
aW1lIHNob3VsZCBtYXRjaCB0aGUgbGlmZXRpbWUgb2YgdGhlIGZhY3RvcnkKKyAgICAgICAgc28g
dGhhdCBhbiBvcGVuL3dyaXRlL2Nsb3NlL3JlLW9wZW4vcmVhZCB5aWVsZHMgdGhlIHdyaXR0ZW4g
ZGF0YS4KKworICAgICAgICBUZXN0OiBDaHJvbWl1bSdzIHdlYmtpdF91bml0X3Rlc3RzLCBJREJG
YWN0b3J5QmFja2VuZFRlc3QuTWVtb3J5QmFja2luZ1N0b3JlTGlmZXRpbWUKKworICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OklEQkJhY2tpbmdTdG9yZSk6IFBhc3MgY29tcGFyYXRvciBpbnRv
IGNvbnN0cnVjdG9yIHNpbmNlIGl0IHdhcyBhbHdheXMKKyAgICAgICAgYXNzaWduZWQgaW1tZWRp
YXRlbHkgYWZ0ZXJ3YXJkcyBhbnl3YXkuCisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3Rv
cmU6Om9wZW4pOiBTcGxpdCBpbnRvIHRocmVlIHBhcnRzIC0gb3BlbigpIHdoaWNoIGlzIGRpc2st
YmFja2VkLi4uCisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6Om9wZW5Jbk1lbW9y
eSk6IC4uLmV4cGxpdCBpbi1tZW1vcnkgY3JlYXRpb24gKHByZXZpb3VzbHk6IHNwZWNpZmllZCBi
eSBlbXB0eSBwYXRoKQorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpjcmVhdGUp
OiAuLi4gYW5kIHRoZSBjb21tb24gbG9naWMgd2hpY2ggY2FsbHMgdGhlIGNvbnN0cnVjdG9yLgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOiBIZWFkZXJzIGZv
ciB0aGUgYWJvdmUuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Bl
bkJhY2tpbmdTdG9yZSk6IEFkZCBpbi1tZW1vcnkgYmFja2luZyBzdG9yZXMgdG8gZGVwZW5kZW50
IHNldC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwu
aDogQWRkIG1lbWJlciB0byB0cmFjayBkZXBlbmRlbnQgYmFja2luZyBzdG9yZXMuCisKIDIwMTMt
MDMtMjggIENoYW5nU2VvayBPaCAgPGNoYW5nc2Vvay5vaEBjb2xsYWJvcmEuY29tPgogCiAgICAg
ICAgIFtHVEtdW0FDXSBBbmltYXRpbmcgbGF5ZXIgZGlzYXBwZWFycyB3aGlsZSBydW5uaW5nIHdp
dGggY2x1dHRlciBiYWNrZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGRkYmUwNjkw
MTEwNTU4MTE1YjZiOTQzY2M4ZDVmZDBjNmQzZjI4YzkuLjg1NGFiMWUxMDA1Y2M3NWFhMDA1MzNi
YTFlNDNhNjkzZTRiMDlmOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTMtMDMtMTEgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBJbmRleGVkREI6IEJpbmQgbGlmZXRpbWUgb2YgaW4tbWVtb3J5IGJhY2tpbmcgc3Rv
cmVzIHRvIElEQkZhY3RvcnkgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEwODIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFu
Zy4KKworICAgICAgICAqIHRlc3RzL0lEQkJhY2tpbmdTdG9yZVRlc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCQmFja2luZ1N0b3JlVGVzdDo6U2V0VXApOiBVc2Ugb3BlbkluTWVtb3J5IHJh
dGhlciB0aGFuIGVtcHR5IHBhdGguCisgICAgICAgIChXZWJDb3JlOjpURVNUKTogQWRkZWQgSURC
RmFjdG9yeUJhY2tlbmRUZXN0Lk1lbW9yeUJhY2tpbmdTdG9yZUxpZmV0aW1lIHRvIHZlcmlmeSBy
ZWZzLgorCiAyMDEzLTAzLTI3ICBLZWlzaGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFtDaHJvbWl1bV0gRW5hYmxlIHRvdWNoIGV2ZW50cyBpbiBQYWdlUG9wdXAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUu
Y3BwCmluZGV4IDY2MmYzOGVjYTRiOWE0ZGFkOTBlY2M4NTQxNzM4ZThkOGE4OTYwYTkuLmNjYzRj
ZGI1MmJkMzU1MzRiYzUzNmUyMjY0ZWJjZDMwNjNkYWNkNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcApAQCAtNDMsNiAr
NDMsOSBAQAogI2luY2x1ZGUgIkxldmVsREJUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCisjaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMzUsOSArMzM4LDEw
IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi1JREJCYWNraW5nU3RvcmU6OklEQkJhY2tpbmdTdG9y
ZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBk
YikKK0lEQkJhY2tpbmdTdG9yZTo6SURCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllciwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+IGRiLCBQYXNzT3duUHRyPExldmVsREJD
b21wYXJhdG9yPiBjb21wYXJhdG9yKQogICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiAg
ICAgLCBtX2RiKGRiKQorICAgICwgbV9jb21wYXJhdG9yKGNvbXBhcmF0b3IpCiAgICAgLCBtX3dl
YWtGYWN0b3J5KHRoaXMpCiB7CiB9CkBAIC0zNDUsNiArMzQ5LDEwIEBAIElEQkJhY2tpbmdTdG9y
ZTo6SURCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUGFzc093blB0cjxM
ZXZlbERCRGF0CiBJREJCYWNraW5nU3RvcmU6OklEQkJhY2tpbmdTdG9yZSgpCiAgICAgOiBtX3dl
YWtGYWN0b3J5KHRoaXMpCiB7CisgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgb25seSBi
ZSB1c2VkIGluIHVuaXQgdGVzdHMuCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgQVNTRVJU
KFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+dW5pdFRlc3RTdXBwb3J0KCkpOworI2VuZGlm
CiB9CiAKIElEQkJhY2tpbmdTdG9yZTo6fklEQkJhY2tpbmdTdG9yZSgpCkBAIC0zNzgsNjUgKzM4
Niw1NiBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCQmFja2luZ1N0b3JlOjpvcGVu
KFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbgogUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IElEQkJhY2tpbmdTdG9yZTo6b3BlbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4s
IGNvbnN0IFN0cmluZyYgcGF0aEJhc2VBcmcsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIs
IExldmVsREJGYWN0b3J5KiBsZXZlbERCRmFjdG9yeSkKIHsKICAgICBJREJfVFJBQ0UoIklEQkJh
Y2tpbmdTdG9yZTo6b3BlbiIpOworICAgIEFTU0VSVCghcGF0aEJhc2VBcmcuaXNFbXB0eSgpKTsK
ICAgICBTdHJpbmcgcGF0aEJhc2UgPSBwYXRoQmFzZUFyZzsKIAogICAgIE93blB0cjxMZXZlbERC
Q29tcGFyYXRvcj4gY29tcGFyYXRvciA9IGFkb3B0UHRyKG5ldyBDb21wYXJhdG9yKCkpOwogICAg
IE93blB0cjxMZXZlbERCRGF0YWJhc2U+IGRiOwogCi0gICAgaWYgKHBhdGhCYXNlLmlzRW1wdHko
KSkgewotICAgICAgICBkYiA9IExldmVsREJEYXRhYmFzZTo6b3BlbkluTWVtb3J5KGNvbXBhcmF0
b3IuZ2V0KCkpOwotICAgICAgICBpZiAoIWRiKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkxl
dmVsREJEYXRhYmFzZTo6b3BlbkluTWVtb3J5IGZhaWxlZC4iKTsKLSAgICAgICAgICAgIEhpc3Rv
Z3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNr
aW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWVtb3J5RmFp
bGVkLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7Ci0gICAgICAgICAgICByZXR1cm4g
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7Ci0gICAgICAgIH0KLSAgICAgICAgSGlzdG9n
cmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tp
bmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NZW1vcnlTdWNj
ZXNzLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKCFwYXRoQmFzZS5jb250YWluc09ubHlBU0NJSSgpKQorICAgIGlmICghcGF0aEJhc2Uu
Y29udGFpbnNPbmx5QVNDSUkoKSkKICAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3Rv
Z3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1
cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuQXR0ZW1wdE5vbkFTQ0lJLCBJREJMZXZlbERC
QmFja2luZ1N0b3JlT3Blbk1heCk7Ci0gICAgICAgIGlmICghbWFrZUFsbERpcmVjdG9yaWVzKHBh
dGhCYXNlKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIEluZGV4
ZWREQiBkYXRhYmFzZSBwYXRoICVzIiwgcGF0aEJhc2UudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRl
eGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Bl
bkZhaWxlZERpcmVjdG9yeSwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwotICAgICAg
ICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgU3RyaW5nIHBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aEJhc2Us
IHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIuaW5kZXhlZGRiLmxldmVs
ZGIiKTsKKyAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhwYXRoQmFzZSkpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIEluZGV4ZWREQiBkYXRhYmFzZSBwYXRoICVzIiwg
cGF0aEJhc2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3Rv
Z3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1
cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuRmFpbGVkRGlyZWN0b3J5LCBJREJMZXZlbERC
QmFja2luZ1N0b3JlT3Blbk1heCk7CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4oKTsKKyAgICB9CiAKLSAgICAgICAgZGIgPSBsZXZlbERCRmFjdG9yeS0+b3Blbkxl
dmVsREIocGF0aCwgY29tcGFyYXRvci5nZXQoKSk7Ci0gICAgICAgIGlmIChkYikgewotICAgICAg
ICAgICAgYm9vbCBrbm93biA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBvayA9IGlzU2NoZW1h
S25vd24oZGIuZ2V0KCksIGtub3duKTsKLSAgICAgICAgICAgIGlmICghb2spIHsKLSAgICAgICAg
ICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBoYWQgSU8gZXJyb3IgY2hlY2tpbmcgc2NoZW1h
LCB0cmVhdGluZyBpdCBhcyBmYWlsdXJlIHRvIG9wZW4iKTsKLSAgICAgICAgICAgICAgICBIaXN0
b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFj
a2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZElP
RXJyQ2hlY2tpbmdTY2hlbWEsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKLSAgICAg
ICAgICAgICAgICBkYi5jbGVhcigpOwotICAgICAgICAgICAgfSBlbHNlIGlmICgha25vd24pIHsK
LSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3JlIGhhZCB1
bmtub3duIHNjaGVtYSwgdHJlYXRpbmcgaXQgYXMgZmFpbHVyZSB0byBvcGVuIik7Ci0gICAgICAg
ICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUu
SW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZU9wZW5GYWlsZWRVbmtub3duU2NoZW1hLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7
Ci0gICAgICAgICAgICAgICAgZGIuY2xlYXIoKTsKLSAgICAgICAgICAgIH0KKyAgICBTdHJpbmcg
cGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4t
PmRhdGFiYXNlSWRlbnRpZmllcigpICsgIi5pbmRleGVkZGIubGV2ZWxkYiIpOworCisgICAgZGIg
PSBsZXZlbERCRmFjdG9yeS0+b3BlbkxldmVsREIocGF0aCwgY29tcGFyYXRvci5nZXQoKSk7Cisg
ICAgaWYgKGRiKSB7CisgICAgICAgIGJvb2wga25vd24gPSBmYWxzZTsKKyAgICAgICAgYm9vbCBv
ayA9IGlzU2NoZW1hS25vd24oZGIuZ2V0KCksIGtub3duKTsKKyAgICAgICAgaWYgKCFvaykgewor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgaGFkIElPIGVycm9yIGNoZWNraW5nIHNj
aGVtYSwgdHJlYXRpbmcgaXQgYXMgZmFpbHVyZSB0byBvcGVuIik7CisgICAgICAgICAgICBIaXN0
b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFj
a2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZElP
RXJyQ2hlY2tpbmdTY2hlbWEsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKKyAgICAg
ICAgICAgIGRiLmNsZWFyKCk7CisgICAgICAgIH0gZWxzZSBpZiAoIWtub3duKSB7CisgICAgICAg
ICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3JlIGhhZCB1bmtub3duIHNjaGVt
YSwgdHJlYXRpbmcgaXQgYXMgZmFpbHVyZSB0byBvcGVuIik7CisgICAgICAgICAgICBIaXN0b2dy
YW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2lu
Z1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZFVua25v
d25TY2hlbWEsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKKyAgICAgICAgICAgIGRi
LmNsZWFyKCk7CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgaWYgKGRiKQotICAgICAgICAg
ICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhl
ZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5T
dWNjZXNzLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9yZSBvcGVuIGZhaWxl
ZCwgYXR0ZW1wdGluZyBjbGVhbnVwIik7Ci0gICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBsZXZl
bERCRmFjdG9yeS0+ZGVzdHJveUxldmVsREIocGF0aCk7Ci0gICAgICAgICAgICBpZiAoIXN1Y2Nl
c3MpIHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3Jl
IGNsZWFudXAgZmFpbGVkIik7Ci0gICAgICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlz
dG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3Rh
dHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5DbGVhbnVwRGVzdHJveUZhaWxlZCwgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwotICAgICAgICAgICAgICAgIHJldHVybiBQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoZGIpCisg
ICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLklu
ZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVP
cGVuU3VjY2VzcywgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOworICAgIGVsc2Ugewor
ICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3JlIG9wZW4gZmFpbGVkLCBh
dHRlbXB0aW5nIGNsZWFudXAiKTsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gbGV2ZWxEQkZhY3Rv
cnktPmRlc3Ryb3lMZXZlbERCKHBhdGgpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAg
ICAgICAgIExPR19FUlJPUigiSW5kZXhlZERCIGJhY2tpbmcgc3RvcmUgY2xlYW51cCBmYWlsZWQi
KTsKKyAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJX
ZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNr
aW5nU3RvcmVPcGVuQ2xlYW51cERlc3Ryb3lGYWlsZWQsIElEQkxldmVsREJCYWNraW5nU3RvcmVP
cGVuTWF4KTsKKyAgICAgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4o
KTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5n
IHN0b3JlIGNsZWFudXAgc3VjY2VlZGVkLCByZW9wZW5pbmciKTsKLSAgICAgICAgICAgIGRiID0g
bGV2ZWxEQkZhY3RvcnktPm9wZW5MZXZlbERCKHBhdGgsIGNvbXBhcmF0b3IuZ2V0KCkpOwotICAg
ICAgICAgICAgaWYgKCFkYikgewotICAgICAgICAgICAgICAgIExPR19FUlJPUigiSW5kZXhlZERC
IGJhY2tpbmcgc3RvcmUgcmVvcGVuIGFmdGVyIHJlY292ZXJ5IGZhaWxlZCIpOwotICAgICAgICAg
ICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLklu
ZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVP
cGVuQ2xlYW51cFJlb3BlbkZhaWxlZCwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1l
cmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxl
dmVsREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cFJlb3BlblN1Y2Nlc3MsIElEQkxldmVsREJCYWNr
aW5nU3RvcmVPcGVuTWF4KTsKKyAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBz
dG9yZSBjbGVhbnVwIHN1Y2NlZWRlZCwgcmVvcGVuaW5nIik7CisgICAgICAgIGRiID0gbGV2ZWxE
QkZhY3RvcnktPm9wZW5MZXZlbERCKHBhdGgsIGNvbXBhcmF0b3IuZ2V0KCkpOworICAgICAgICBp
ZiAoIWRiKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3Jl
IHJlb3BlbiBhZnRlciByZWNvdmVyeSBmYWlsZWQiKTsKKyAgICAgICAgICAgIEhpc3RvZ3JhbVN1
cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3Rv
cmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cFJlb3BlbkZh
aWxlZCwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOworICAgICAgICAgICAgcmV0dXJu
IFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOwogICAgICAgICB9CisgICAgICAgIEhpc3Rv
Z3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNr
aW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cFJl
b3BlblN1Y2Nlc3MsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKICAgICB9CiAKICAg
ICBpZiAoIWRiKSB7CkBAIC00NDUsMTIgKzQ0NCwzNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gSURCQmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdp
bgogICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7CiAgICAgfQog
Ci0gICAgLy8gRklYTUU6IEhhbmRsZSBjb21wYXJhdG9yIG5hbWUgY2hhbmdlcy4KKyAgICByZXR1
cm4gY3JlYXRlKGZpbGVJZGVudGlmaWVyLCBkYi5yZWxlYXNlKCksIGNvbXBhcmF0b3IucmVsZWFz
ZSgpKTsKK30KKworUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkJhY2tpbmdTdG9yZTo6
b3BlbkluTWVtb3J5KFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyKQoreworICAgIERlZmF1bHRMZXZlbERCRmFjdG9yeSBsZXZlbERCRmFjdG9y
eTsKKyAgICByZXR1cm4gSURCQmFja2luZ1N0b3JlOjpvcGVuSW5NZW1vcnkoc2VjdXJpdHlPcmln
aW4sIGlkZW50aWZpZXIsICZsZXZlbERCRmFjdG9yeSk7Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBJREJCYWNraW5nU3RvcmU6Om9wZW5Jbk1lbW9yeShTZWN1cml0eU9yaWdpbiog
c2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgTGV2ZWxEQkZhY3Rvcnkq
IGxldmVsREJGYWN0b3J5KQoreworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpvcGVu
SW5NZW1vcnkiKTsKIAotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZShh
ZG9wdFJlZihuZXcgSURCQmFja2luZ1N0b3JlKGZpbGVJZGVudGlmaWVyLCBkYi5yZWxlYXNlKCkp
KSk7Ci0gICAgYmFja2luZ1N0b3JlLT5tX2NvbXBhcmF0b3IgPSBjb21wYXJhdG9yLnJlbGVhc2Uo
KTsKKyAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IGNvbXBhcmF0b3IgPSBhZG9wdFB0cihu
ZXcgQ29tcGFyYXRvcigpKTsKKyAgICBPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBkYiA9IExldmVs
REJEYXRhYmFzZTo6b3BlbkluTWVtb3J5KGNvbXBhcmF0b3IuZ2V0KCkpOworICAgIGlmICghZGIp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJMZXZlbERCRGF0YWJhc2U6Om9wZW5Jbk1lbW9yeSBmYWls
ZWQuIik7CisgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJX
ZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNr
aW5nU3RvcmVPcGVuTWVtb3J5RmFpbGVkLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7
CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKKyAgICB9Cisg
ICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhl
ZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5N
ZW1vcnlTdWNjZXNzLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7CisKKyAgICByZXR1
cm4gY3JlYXRlKGlkZW50aWZpZXIsIGRiLnJlbGVhc2UoKSwgY29tcGFyYXRvci5yZWxlYXNlKCkp
OworfQorCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCQmFja2luZ1N0b3JlOjpjcmVh
dGUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4g
ZGIsIFBhc3NPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IGNvbXBhcmF0b3IpCit7CisgICAgLy8g
RklYTUU6IEhhbmRsZSBjb21wYXJhdG9yIG5hbWUgY2hhbmdlcy4KKyAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoYWRvcHRSZWYobmV3IElEQkJhY2tpbmdTdG9yZShpZGVu
dGlmaWVyLCBkYiwgY29tcGFyYXRvcikpKTsKIAotICAgIGlmICghc2V0VXBNZXRhZGF0YShiYWNr
aW5nU3RvcmUtPm1fZGIuZ2V0KCksIGZpbGVJZGVudGlmaWVyKSkKKyAgICBpZiAoIXNldFVwTWV0
YWRhdGEoYmFja2luZ1N0b3JlLT5tX2RiLmdldCgpLCBpZGVudGlmaWVyKSkKICAgICAgICAgcmV0
dXJuIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOwogCiAgICAgcmV0dXJuIGJhY2tpbmdT
dG9yZS5yZWxlYXNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IGEyM2E3YmNmNjhkZmVkNjBlNWY5OWE1YWIwODBiOWJj
ZmUzMWFlMDguLjg0MDllMDg5YTA2ODYzNjI0ZmM0MWY2MDk5MmMwZjIwNDZiZDM5MWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5o
CkBAIC01OSw2ICs1OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJCYWNraW5nU3RvcmUo
KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW4oU2VjdXJpdHlP
cmlnaW4qLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlm
aWVyKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW4oU2VjdXJp
dHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVu
dGlmaWVyLCBMZXZlbERCRmFjdG9yeSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gb3BlbkluTWVtb3J5KFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBpZGVu
dGlmaWVyKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5Jbk1l
bW9yeShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgTGV2ZWxEQkZh
Y3RvcnkqKTsKICAgICBXZWFrUHRyPElEQkJhY2tpbmdTdG9yZT4gY3JlYXRlV2Vha1B0cigpIHsg
cmV0dXJuIG1fd2Vha0ZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9CiAKICAgICB2aXJ0dWFsIFZl
Y3RvcjxTdHJpbmc+IGdldERhdGFiYXNlTmFtZXMoKTsKQEAgLTE3NiwxMiArMTc4LDE0IEBAIHB1
YmxpYzoKICAgICB9OwogCiBwcm90ZWN0ZWQ6Ci0gICAgSURCQmFja2luZ1N0b3JlKGNvbnN0IFN0
cmluZyYgaWRlbnRpZmllciwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+KTsKKyAgICBJREJC
YWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBQYXNzT3duUHRyPExldmVsREJE
YXRhYmFzZT4sIFBhc3NPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+KTsKIAogICAgIC8vIFNob3Vs
ZCBvbmx5IHVzZWQgZm9yIG1vY2tpbmcuCiAgICAgSURCQmFja2luZ1N0b3JlKCk7CiAKIHByaXZh
dGU6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBpZGVudGlmaWVyLCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4sIFBhc3NPd25Q
dHI8TGV2ZWxEQkNvbXBhcmF0b3I+KTsKKwogICAgIGJvb2wgZmluZEtleUluSW5kZXgoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIFZlY3RvcjxjaGFyPiYg
Zm91bmRFbmNvZGVkUHJpbWFyeUtleSwgYm9vbCYgZm91bmQpOwogICAgIGJvb2wgZ2V0SW5kZXhl
cyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YTo6SW5kZXhNYXAqKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwCmluZGV4IDU3ODA3Y2FkODBjMTE1ZWQ4ZTUyMDU3MmE1NWFkZDQ0MmI0OGU0M2IuLjg0
ZWZjMGQ5YmIyNzFmODMzZTgwMGU3MzQzZDlhNjAwMTJkYTI2MDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcApAQCAtMTMxLDE3ICsxMzEsMjggQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRl
bGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWwKIFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5n
U3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0
cmluZyYgZGF0YURpcmVjdG9yeSkKIHsKICAgICBjb25zdCBTdHJpbmcgZmlsZUlkZW50aWZpZXIg
PSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOworICAgIGNvbnN0
IGJvb2wgb3BlbkluTWVtb3J5ID0gZGF0YURpcmVjdG9yeS5pc0VtcHR5KCk7CiAKICAgICBJREJC
YWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0MiA9IG1fYmFja2luZ1N0b3JlTWFwLmZpbmQoZmls
ZUlkZW50aWZpZXIpOwotICAgIGlmIChpdDIgIT0gbV9iYWNraW5nU3RvcmVNYXAuZW5kKCkpIHsK
LSAgICAgICAgaWYgKGl0Mi0+dmFsdWUuZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gaXQyLT52
YWx1ZS5nZXQoKTsKLSAgICB9CisgICAgaWYgKGl0MiAhPSBtX2JhY2tpbmdTdG9yZU1hcC5lbmQo
KSAmJiBpdDItPnZhbHVlLmdldCgpKQorICAgICAgICByZXR1cm4gaXQyLT52YWx1ZS5nZXQoKTsK
KworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKKyAgICBpZiAob3Bl
bkluTWVtb3J5KQorICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJCYWNraW5nU3RvcmU6Om9wZW5J
bk1lbW9yeShzZWN1cml0eU9yaWdpbi5nZXQoKSwgZmlsZUlkZW50aWZpZXIpOworICAgIGVsc2UK
KyAgICAgICAgYmFja2luZ1N0b3JlID0gSURCQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3Jp
Z2luLmdldCgpLCBkYXRhRGlyZWN0b3J5LCBmaWxlSWRlbnRpZmllcik7CiAKLSAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBJREJCYWNraW5nU3RvcmU6Om9wZW4oc2Vj
dXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXJlY3RvcnksIGZpbGVJZGVudGlmaWVyKTsKICAgICBp
ZiAoYmFja2luZ1N0b3JlKSB7CiAgICAgICAgIGNsZWFuV2Vha01hcChtX2JhY2tpbmdTdG9yZU1h
cCk7CiAgICAgICAgIG1fYmFja2luZ1N0b3JlTWFwLnNldChmaWxlSWRlbnRpZmllciwgYmFja2lu
Z1N0b3JlLT5jcmVhdGVXZWFrUHRyKCkpOworICAgICAgICAvLyBJZiBhbiBpbi1tZW1vcnkgZGF0
YWJhc2UsIGJpbmQgbGlmZXRpbWUgdG8gdGhpcyBmYWN0b3J5IGluc3RhbmNlLgorICAgICAgICBp
ZiAob3BlbkluTWVtb3J5KQorICAgICAgICAgICAgbV9zZXNzaW9uT25seUJhY2tpbmdTdG9yZXMu
YWRkKGJhY2tpbmdTdG9yZSk7CisKKyAgICAgICAgLy8gQWxsIGJhY2tpbmcgc3RvcmVzIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIGZhY3Rvcnkgc2hvdWxkIGJlIG9mIHRoZSBzYW1lIHR5cGUuCisgICAg
ICAgIEFTU0VSVChtX3Nlc3Npb25Pbmx5QmFja2luZ1N0b3Jlcy5pc0VtcHR5KCkgfHwgb3Blbklu
TWVtb3J5KTsKKwogICAgICAgICByZXR1cm4gYmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rv
cnlCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmgKaW5kZXggOGM4YTg2YTllZmUwZWZjMDU5YWJjMWQ4OWY5NDYwYTRm
ZGY0NDNjZC4uNmJlMTc0ZjgwMjNmYjhhMTZhZGM4MWZjNGNmYmQ1YWQwMjBjNWY4OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJ
bXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CkBAIC03Myw2ICs3NCw4IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgV2Vha1B0cjxJREJCYWNraW5nU3RvcmU+ID4gSURCQmFja2luZ1N0b3JlTWFw
OwogICAgIElEQkJhY2tpbmdTdG9yZU1hcCBtX2JhY2tpbmdTdG9yZU1hcDsKIAorICAgIEhhc2hT
ZXQ8UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gPiBtX3Nlc3Npb25Pbmx5QmFja2luZ1N0b3JlczsK
KwogICAgIC8vIE9ubHkgb25lIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5IHNob3VsZCBleGlzdCBh
dCBhbnkgZ2l2ZW4gdGltZS4KICAgICBzdGF0aWMgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBpZGJG
YWN0b3J5QmFja2VuZEltcGw7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9JREJCYWNraW5nU3RvcmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvSURCQmFja2luZ1N0b3JlVGVzdC5jcHAKaW5kZXggMDE5N2ExNTVlMjdlOGEwMzE3NTMx
MjI1ZDNmNmM0YjIwMDM1MzcwNS4uNTdiNmJlMjJiYjU0NWM1NjMwNmI2ZGVhNDgxOGE0OWY4NjI4
MGI3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJCYWNraW5n
U3RvcmVUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkJhY2tp
bmdTdG9yZVRlc3QuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJJREJGYWN0b3J5
QmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJMZXZlbERCQ29kaW5nLmgiCisjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKIAogI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CkBAIC00NywxMCArNDgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBTZXRV
cCgpCiAgICAgewogICAgICAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4gPSAwOwot
ICAgICAgICAvLyBFbXB0eSBwYXRoQmFzZSBtZWFucyBhbiBpbi1tZW1vcnkgZGF0YWJhc2UuCi0g
ICAgICAgIFN0cmluZyBwYXRoQmFzZTsKICAgICAgICAgU3RyaW5nIGZpbGVJZGVudGlmaWVyOwot
ICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IElEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9y
aWdpbiwgcGF0aEJhc2UsIGZpbGVJZGVudGlmaWVyKTsKKyAgICAgICAgbV9iYWNraW5nU3RvcmUg
PSBJREJCYWNraW5nU3RvcmU6Om9wZW5Jbk1lbW9yeShzZWN1cml0eU9yaWdpbiwgZmlsZUlkZW50
aWZpZXIpOwogCiAgICAgICAgIC8vIHVzZWZ1bCBrZXlzIGFuZCB2YWx1ZXMgZHVyaW5nIHRlc3Rz
CiAgICAgICAgIGNvbnN0IGNoYXIgcmF3VmFsdWUxW10gPSAidmFsdWUxIjsKQEAgLTI5MCwxMiAr
Mjg5LDMzIEBAIFRFU1QoSURCRmFjdG9yeUJhY2tlbmRUZXN0LCBCYWNraW5nU3RvcmVMaWZldGlt
ZSkKICAgICBFWFBFQ1RfVFJVRShkaXNrU3RvcmUxLT5oYXNPbmVSZWYoKSk7CiAKICAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBkaXNrU3RvcmUyID0gZmFjdG9yeS0+dGVzdE9wZW5CYWNraW5n
U3RvcmUob3JpZ2luMSwgcGF0aCk7Ci0gICAgRVhQRUNUX0VRKGRpc2tTdG9yZTIuZ2V0KCksIGRp
c2tTdG9yZTEuZ2V0KCkpOwotICAgIEVYUEVDVF9FUShkaXNrU3RvcmUyLT5yZWZDb3VudCgpLCAy
KTsKKyAgICBFWFBFQ1RfRVEoZGlza1N0b3JlMS5nZXQoKSwgZGlza1N0b3JlMi5nZXQoKSk7Cisg
ICAgRVhQRUNUX0VRKDIsIGRpc2tTdG9yZTItPnJlZkNvdW50KCkpOwogCiAgICAgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gZGlza1N0b3JlMyA9IGZhY3RvcnktPnRlc3RPcGVuQmFja2luZ1N0b3Jl
KG9yaWdpbjIsIHBhdGgpOwogICAgIEVYUEVDVF9UUlVFKGRpc2tTdG9yZTMtPmhhc09uZVJlZigp
KTsKLSAgICBFWFBFQ1RfRVEoZGlza1N0b3JlMS0+cmVmQ291bnQoKSwgMik7CisgICAgRVhQRUNU
X0VRKDIsIGRpc2tTdG9yZTEtPnJlZkNvdW50KCkpOworfQorCitURVNUKElEQkZhY3RvcnlCYWNr
ZW5kVGVzdCwgTWVtb3J5QmFja2luZ1N0b3JlTGlmZXRpbWUpCit7CisgICAgUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiBvcmlnaW4xID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSgiaHR0cCIsICJsb2Nh
bGhvc3QiLCA4MSk7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4yID0gU2VjdXJp
dHlPcmlnaW46OmNyZWF0ZSgiaHR0cCIsICJsb2NhbGhvc3QiLCA4Mik7CisKKyAgICBSZWZQdHI8
TW9ja0lEQkZhY3RvcnlCYWNrZW5kPiBmYWN0b3J5ID0gTW9ja0lEQkZhY3RvcnlCYWNrZW5kOjpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtZW1TdG9yZTEgPSBmYWN0b3J5
LT50ZXN0T3BlbkJhY2tpbmdTdG9yZShvcmlnaW4xLCBTdHJpbmcoKSk7CisgICAgRVhQRUNUX0VR
KDIsIG1lbVN0b3JlMS0+cmVmQ291bnQoKSk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
bWVtU3RvcmUyID0gZmFjdG9yeS0+dGVzdE9wZW5CYWNraW5nU3RvcmUob3JpZ2luMSwgU3RyaW5n
KCkpOworICAgIEVYUEVDVF9FUShtZW1TdG9yZTEuZ2V0KCksIG1lbVN0b3JlMi5nZXQoKSk7Cisg
ICAgRVhQRUNUX0VRKDMsIG1lbVN0b3JlMi0+cmVmQ291bnQoKSk7CisKKyAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBtZW1TdG9yZTMgPSBmYWN0b3J5LT50ZXN0T3BlbkJhY2tpbmdTdG9yZShv
cmlnaW4yLCBTdHJpbmcoKSk7CisgICAgRVhQRUNUX0VRKDIsIG1lbVN0b3JlMy0+cmVmQ291bnQo
KSk7CisgICAgRVhQRUNUX0VRKDMsIG1lbVN0b3JlMS0+cmVmQ291bnQoKSk7CisKKyAgICBmYWN0
b3J5LmNsZWFyKCk7CisgICAgRVhQRUNUX0VRKDIsIG1lbVN0b3JlMS0+cmVmQ291bnQoKSk7Cisg
ICAgRVhQRUNUX0VRKDEsIG1lbVN0b3JlMy0+cmVmQ291bnQoKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>