<?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>137154</bug_id>
          
          <creation_ts>2014-09-26 13:16:51 -0700</creation_ts>
          <short_desc>IndexedDB is deleting data when a PK is shared amongst two objectStores</short_desc>
          <delta_ts>2015-06-05 09:29:39 -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>DOM</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Raymond Camden">raymondcamden</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eoconnor</cc>
    
    <cc>jsbell</cc>
    
    <cc>nolan</cc>
    
    <cc>richardconnamacher</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1037535</commentid>
    <comment_count>0</comment_count>
    <who name="Raymond Camden">raymondcamden</who>
    <bug_when>2014-09-26 13:16:51 -0700</bug_when>
    <thetext>Imagine you have one indexeddb instance and two objectstores: people and notes

If you add data to people with an assigned PK of 1, and then do the same to note, the data in people is erased.

If you switch to using auto number PKs then the same thing happens (since they both end up having the same ID).

Primary keys are supposed to be unique per objectStore, not the entire database. 

Here is a blog entry showing examples of this issue: http://www.raymondcamden.com/2014/9/25/IndexedDB-on-iOS-8--Broken-Bad#cFF30B25B-F01B-05AB-E8041ED50386A176</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037600</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-09-26 17:58:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/18476324&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037691</commentid>
    <comment_count>2</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-09-27 12:06:59 -0700</bug_when>
    <thetext>Actually &lt;rdar://problem/18479306&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045043</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-10-30 09:32:27 -0700</bug_when>
    <thetext>The problem is the schema:
&quot;CREATE TABLE Records (objectStoreID INTEGER NOT NULL ON CONFLICT FAIL, key TEXT COLLATE IDBKEY NOT NULL ON CONFLICT FAIL UNIQUE ON CONFLICT REPLACE, value NOT NULL ON CONFLICT FAIL)&quot;));

Which needs to be:
&quot;CREATE TABLE Records (objectStoreID INTEGER NOT NULL ON CONFLICT FAIL, key TEXT COLLATE IDBKEY NOT NULL ON CONFLICT FAIL, value NOT NULL ON CONFLICT FAIL)&quot;));

With the addition of an index to make objectstore/key pairs unique:
&quot;CREATE UNIQUE INDEX IF NOT EXISTS RecordsIndex ON Records (objectStoreID, key);&quot;

That in itself is straightforward.  Unfortunately since the bad schema is out there, we also need a migration path.

That was a little weird to get right, but I have now gotten it right. Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045044</commentid>
    <comment_count>4</comment_count>
      <attachid>240678</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-10-30 09:36:40 -0700</bug_when>
    <thetext>Created attachment 240678
Patch v1 for EWS

I&apos;m running tests locally to see which have been fixed, but I also want the bot&apos;s opinion (because my machine never agrees with them anyways)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045084</commentid>
    <comment_count>5</comment_count>
      <attachid>240686</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-10-30 12:27:38 -0700</bug_when>
    <thetext>Created attachment 240686
Patch v2 - New test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045091</commentid>
    <comment_count>6</comment_count>
      <attachid>240686</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-10-30 12:49:50 -0700</bug_when>
    <thetext>Comment on attachment 240686
Patch v2 - New test

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

r=me, with test nits.

&gt; LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore.html:3
&gt; +&lt;body&gt;
&gt; +&lt;div id=&quot;logger&quot;&gt;&lt;/div&gt;
&gt; +&lt;script&gt;

What, no &lt;!DOCTYPE&gt;?

&gt; LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore.html:11
&gt; +function log(msg) {
&gt; +	document.getElementById(&quot;logger&quot;).innerHTML += msg + &quot;&lt;br&gt;&quot;;
&gt; +}

I&apos;m pretty sure we&apos;ve already got mechanisms for this laying around in LayoutTest .js files somewhere.  No biggie though.

&gt; LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore.html:19
&gt; +		thisDB.createObjectStore(&quot;people&quot;, {keyPath:&quot;id&quot;});

nit: spaces-not-tabs (here and elsewhere)

&gt; LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore.html:34
&gt; +openRequest.onerror = function(e) {
&gt; +	log(&quot;openRequest error - &quot; + e);
&gt; +}

Do you want to notifyDone() here too?  Just to avoid a test timeout in the case of an unrecoverable error.

&gt; LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore.html:43
&gt; +	var transaction = db.transaction([&quot;people&quot;],&quot;readwrite&quot;);

nit: space-after-comma

&gt; LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore.html:51
&gt; +		name:&quot;Person&quot;,
&gt; +		id:sharedID

nit: space-after-colon

&gt; LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore.html:69
&gt; +		note:&quot;Note&quot;,
&gt; +		uid:sharedID

Ditto.

&gt; LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore.html:98
&gt; +	var transaction = db.transaction([&quot;people&quot;],&quot;readwrite&quot;);

nit: space-after-comma

&gt; LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore.html:107
&gt; +		log(&quot;Error getting person - &quot;, e);

notifyDone()?

&gt; LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore.html:119
&gt; +	var transaction2 = db.transaction([&quot;notes&quot;],&quot;readwrite&quot;);
&gt; +

nit: space-after-comma

&gt; LayoutTests/storage/indexeddb/primary-key-unique-to-objectstore.html:134
&gt; +		for (n in e.target.result) {
&gt; +			log(n);
&gt; +		}

Is result an array? Could you do: &quot;e.target.result.forEach(log);&quot;?

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:64
&gt; +static const String v2RecordsTableSchema(const String&amp; tableName)

...

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:74
&gt; +static const String&amp; v2RecordsTableSchema()

These two methods having the same name (with different parameters) is a little weird.  I mean, this second method is literally for the table named &quot;Records&quot;, but the first isn&apos;t.

I can&apos;t think of anything better for the first name though.  v2RecordsTableLikeSchemaWithName()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045095</commentid>
    <comment_count>7</comment_count>
      <attachid>240689</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-10-30 13:17:46 -0700</bug_when>
    <thetext>Created attachment 240689
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045104</commentid>
    <comment_count>8</comment_count>
      <attachid>240689</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-30 14:00:55 -0700</bug_when>
    <thetext>Comment on attachment 240689
Patch for landing.

Clearing flags on attachment: 240689

Committed r175378: &lt;http://trac.webkit.org/changeset/175378&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045105</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-30 14:00:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075936</commentid>
    <comment_count>10</comment_count>
    <who name="Raymond Camden">raymondcamden</who>
    <bug_when>2015-03-10 03:27:21 -0700</bug_when>
    <thetext>For folks who view this bug, note that it is still not released as far as I know (tested iOS 8.2).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076386</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-03-11 12:07:08 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; For folks who view this bug, note that it is still not released as far as I
&gt; know (tested iOS 8.2).

This bug tracker is about the WebKit open source project.

It would be good feedback to have if the bug still reproduces in WebKit nightlies or trunk builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076413</commentid>
    <comment_count>12</comment_count>
    <who name="Raymond Camden">raymondcamden</who>
    <bug_when>2015-03-11 13:10:13 -0700</bug_when>
    <thetext>I&apos;m sorry - it was pointed out to me later. I didn&apos;t mean to clutter the issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099809</commentid>
    <comment_count>13</comment_count>
    <who name="Nolan Lawson">nolan</who>
    <bug_when>2015-06-05 08:23:19 -0700</bug_when>
    <thetext>I&apos;ve written a live test case: http://bl.ocks.org/nolanlawson/0ee229ca3bf4b650286e

I&apos;m still seeing this issue in desktop Safari 8.0.7 as well as Safari on iOS 8.3. The reported user agent string says &quot;AppleWebKit/600.7.5&quot;, so I&apos;m surprised it&apos;s still happening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099812</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-06-05 08:36:32 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I&apos;ve written a live test case:
&gt; http://bl.ocks.org/nolanlawson/0ee229ca3bf4b650286e
&gt; 
&gt; I&apos;m still seeing this issue in desktop Safari 8.0.7 as well as Safari on iOS
&gt; 8.3. The reported user agent string says &quot;AppleWebKit/600.7.5&quot;, so I&apos;m
&gt; surprised it&apos;s still happening.

Hi Nolan,

When you&apos;re referring to Safari 8.0.7 and iOS 8.3, you&apos;re referring to products that Apple releases. Their configuration and scheduling are outside the purview of the WebKit open source project.

What would be useful info would be whether or not this still reproduces for you using a WebKit nightly. Have you tried that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099822</commentid>
    <comment_count>15</comment_count>
    <who name="Nolan Lawson">nolan</who>
    <bug_when>2015-06-05 09:29:39 -0700</bug_when>
    <thetext>Hi Brady, I just tried Webkit r185238, and my test case passes. :)

Thanks a bunch! Looking forward to when this lands in an Apple release.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240678</attachid>
            <date>2014-10-30 09:36:40 -0700</date>
            <delta_ts>2014-10-30 12:27:38 -0700</delta_ts>
            <desc>Patch v1 for EWS</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>9614</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3NGM2MDljLi5hZTJjZTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMg
QEAKKzIwMTQtMTAtMzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIEluZGV4ZWREQiBpcyBkZWxldGluZyBkYXRhIHdoZW4gYSBQSyBpcyBzaGFyZWQgYW1vbmdz
dCB0d28gb2JqZWN0U3RvcmVzCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzE4NDc5MzA2IGFuZCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTU0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OnYxUmVjb3Jkc1RhYmxlU2NoZW1hKTogU3RvcmUgYXdheSB0aGUg
djEgc2NoZW1hIGZvciBpbnRyb3NwZWN0aW9uIGludG8gdGhlIGRhdGFiYXNlLgorICAgICAgICAo
V2ViS2l0Ojp2MlJlY29yZHNUYWJsZVNjaGVtYSk6IEFkZCB1dGlsaXR5IG1ldGhvZHMgdG8gZ2V0
IHRoZSB2MiBzY2hlbWEgd2l0aCBkaWZmZXJlbnQgVGFibGUgbmFtZXMuCisgICAgICAgIChXZWJL
aXQ6OmNyZWF0ZU9yTWlncmF0ZVJlY29yZHNUYWJsZUlmTmVjZXNzYXJ5KTogQ2hlY2sgdG8gc2Vl
IGlmIHRoZSBSZWNvcmRzIHRhYmxlIGV4aXN0cyB3aXRoCisgICAgICAgICAgdGhlIGNvcnJlY3Qg
c2NoZW1hLiBJZiBpdCBpcyB0aGUgdjEgc2NoZW1hLCB0aGVuIG1pZ3JhdGUgdGhlIGRhdGEgdG8g
YSBuZXcgdjIgdGFibGUsIGRyb3AgdGhlIHYxCisgICAgICAgICAgdGFibGUsIHRoZW4gc2xpZGUg
dGhlIG5ldyB0YWJsZSBpbnRvIHBsYWNlLgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRh
YmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUpOiBNYWtlIHN1
cmUgdGhlIFJlY29yZHMgdGFibGUKKyAgICAgICAgICBleGlzdHMgYW5kIGlzIHYyLCBhbmQgdGhl
biBtYWtlIHN1cmUgdGhlIHVuaXF1ZW5lc3MgaW5kZXggZXhpc3RzLgorICAgICAgICAoV2ViS2l0
OjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Y3JlYXRlQW5kUG9wdWxhdGVJ
bml0aWFsTWV0YWRhdGEpOiBEb27igJl0IGJvdGhlciBjcmVhdGluZworICAgICAgICAgIHRoZSBS
ZWNvcmRzIHRhYmxlIGhlcmUgYXMgaXQgd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBlc3RhYmxpc2hl
ZCBlYXJsaWVyLgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9y
ZVNRTGl0ZTo6Z2V0T3JFc3RhYmxpc2hNZXRhZGF0YSk6CisgICAgICAgICogRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUu
aDoKKwogMjAxNC0xMC0yOSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZW5hbWUgV2ViUGFnZVByb3h5OjphY3RpdmVBY3Rpb25NZW51SGl0VGVzdFJl
c3VsdCB0byBsYXN0TW91c2VNb3ZlSGl0VGVzdFJlc3VsdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VC
YWNraW5nU3RvcmVTUUxpdGUuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwCmlu
ZGV4IGNlMWEzYjguLjgyMjFhNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FM
aXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3Nx
bGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAKQEAgLTQxLDcgKzQx
LDkgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0lEQktleVJhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9TUUxpdGVEYXRhYmFzZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2FjdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5j
bHVkZSA8d3RmL1J1bkxvb3AuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTUyLDYgKzU0
LDI5IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogLy8gQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSBtZXRh
ZGF0YSBzY2hlbWEgYmVpbmcgdXNlZCBpbiB0aGUgbWV0YWRhdGEgZGF0YWJhc2UuCiBzdGF0aWMg
Y29uc3QgaW50IGN1cnJlbnRNZXRhZGF0YVZlcnNpb24gPSAxOwogCitzdGF0aWMgY29uc3QgU3Ry
aW5nJiB2MVJlY29yZHNUYWJsZVNjaGVtYSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFdURjo6U3RyaW5nPiB2MVJlY29yZHNUYWJsZVNjaGVtYVN0cmluZyhBU0NJSUxpdGVyYWwoCisg
ICAgICAgICJDUkVBVEUgVEFCTEUgUmVjb3JkcyAob2JqZWN0U3RvcmVJRCBJTlRFR0VSIE5PVCBO
VUxMIE9OIENPTkZMSUNUIEZBSUwsIGtleSBURVhUIENPTExBVEUgSURCS0VZIE5PVCBOVUxMIE9O
IENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIE5PVCBOVUxM
IE9OIENPTkZMSUNUIEZBSUwpIikpOworICAgIHJldHVybiB2MVJlY29yZHNUYWJsZVNjaGVtYVN0
cmluZzsKK30KKworc3RhdGljIGNvbnN0IFN0cmluZyB2MlJlY29yZHNUYWJsZVNjaGVtYShjb25z
dCBTdHJpbmcmIHRhYmxlTmFtZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAg
YnVpbGRlci5hcHBlbmQoIkNSRUFURSBUQUJMRSAiKTsKKyAgICBidWlsZGVyLmFwcGVuZCh0YWJs
ZU5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5kKCIgKG9iamVjdFN0b3JlSUQgSU5URUdFUiBOT1Qg
TlVMTCBPTiBDT05GTElDVCBGQUlMLCBrZXkgVEVYVCBDT0xMQVRFIElEQktFWSBOT1QgTlVMTCBP
TiBDT05GTElDVCBGQUlMLCB2YWx1ZSBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIpOworCisg
ICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworc3RhdGljIGNvbnN0IFN0cmluZyYg
djJSZWNvcmRzVGFibGVTY2hlbWEoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXVEY6
OlN0cmluZz4gdjJSZWNvcmRzVGFibGVTY2hlbWFTdHJpbmcodjJSZWNvcmRzVGFibGVTY2hlbWEo
IlJlY29yZHMiKSk7CisgICAgcmV0dXJuIHYyUmVjb3Jkc1RhYmxlU2NoZW1hU3RyaW5nOworfQor
CiBzdGF0aWMgaW50NjRfdCBnZW5lcmF0ZURhdGFiYXNlSWQoKQogewogICAgIHN0YXRpYyBpbnQ2
NF90IGRhdGFiYXNlSUQgPSAwOwpAQCAtODIsNiArMTA3LDk3IEBAIFVuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlU1FMaXRlOjp+VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUo
KQogICAgIH0KIH0KIAorc3RhdGljIGJvb2wgY3JlYXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZO
ZWNlc3NhcnkoU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlKQoreworICAgIFN0cmluZyBjdXJyZW50
U2NoZW1hOworICAgIHsKKyAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3Rp
bmcgcmVjb3JkcyB0YWJsZS4KKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYXRh
YmFzZSwgIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1l
PSdSZWNvcmRzJyIpOworICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgUmVjb3JkcyB0YWJsZS4iKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBz
dGF0ZW1lbnQuc3RlcCgpOworCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIFJlY29yZHMgdGFi
bGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KKyAgICAgICAgaWYgKHNxbGl0ZVJl
c3VsdCA9PSBTUUxSZXN1bHREb25lKSB7CisgICAgICAgICAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1
dGVDb21tYW5kKHYyUmVjb3Jkc1RhYmxlU2NoZW1hKCkpKSB7CisgICAgICAgICAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFJlY29yZHMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAt
ICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBT
UUxSZXN1bHRSb3cpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0
YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiIpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY3VycmVudFNjaGVtYSA9
IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgIH0KKworICAgIEFTU0VSVCghY3VycmVu
dFNjaGVtYS5pc0VtcHR5KCkpOworCisgICAgLy8gSWYgdGhlIHNjaGVtYSBpbiB0aGUgYmFja2lu
ZyBzdG9yZSBpcyB0aGUgY3VycmVudCBzY2hlbWEsIHdlJ3JlIGRvbmUuCisgICAgaWYgKGN1cnJl
bnRTY2hlbWEgPT0gdjJSZWNvcmRzVGFibGVTY2hlbWEoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAvLyBDdXJyZW50bHkgdGhlIFJlY29yZHMgdGFibGUgc2hvdWxkIG9ubHkgYmUgb25l
IG9mIGVpdGhlciB0aGUgdjEgb3IgdjIgc2NoZW1hcy4KKyAgICBpZiAoY3VycmVudFNjaGVtYSAh
PSB2MVJlY29yZHNUYWJsZVNjaGVtYSgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgU1FMaXRlVHJhbnNhY3Rpb24g
dHJhbnNhY3Rpb24oZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKKyAgICAv
LyBDcmVhdGUgYSB0ZW1wb3JhcnkgdGFibGUgd2l0aCB0aGUgY29ycmVjdCBzY2hlbWEgYW5kIG1p
Z3JhdGUgYWxsIGV4aXN0aW5nIGNvbnRlbnQgb3Zlci4KKyAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1
dGVDb21tYW5kKHYyUmVjb3Jkc1RhYmxlU2NoZW1hKCJfVGVtcF9SZWNvcmRzIikpKSB7CisgICAg
ICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgcmVjb3JkcyB0YWJsZSBp
biBkYXRhYmFzZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFk
YXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiSU5TRVJUIElOVE8gX1RlbXBfUmVjb3JkcyBTRUxFQ1Qg
KiBGUk9NIFJlY29yZHMiKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBtaWdyYXRl
IGV4aXN0aW5nIFJlY29yZHMgY29udGVudCAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3Io
KSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiRFJPUCBUQUJMRSBSZWNvcmRz
IikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZHJvcCBleGlzdGluZyBSZWNvcmRz
IHRhYmxlICglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWRhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKCJBTFRFUiBUQUJMRSBfVGVtcF9SZWNvcmRzIFJFTkFNRSBUTyBS
ZWNvcmRzIikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFy
eSBSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0
cmFuc2FjdGlvbi5jb21taXQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFVuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKG1fc3FsaXRl
REIpOworICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisKKyAgICBpZiAoIWNyZWF0
ZU9yTWlncmF0ZVJlY29yZHNUYWJsZUlmTmVjZXNzYXJ5KCptX3NxbGl0ZURCKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gV2hldGhlciB0aGUgdXBkYXRlZCByZWNvcmRzIHRhYmxl
IGFscmVhZHkgZXhpc3RlZCBvciBpZiBpdCB3YXMganVzdCBjcmVhdGVkIGFuZCB0aGUgZGF0YSBt
aWdyYXRlZCBvdmVyLAorICAgIC8vIG1ha2Ugc3VyZSB0aGUgdW5pcXVlbmVzcyBpbmRleCBleGlz
dHMuCisgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFVOSVFVRSBJ
TkRFWCBJRiBOT1QgRVhJU1RTIFJlY29yZHNJbmRleCBPTiBSZWNvcmRzIChvYmplY3RTdG9yZUlE
LCBrZXkpOyIpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBSZWNvcmRz
SW5kZXggb24gUmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHN0ZDo6dW5pcXVlX3B0
cjxJREJEYXRhYmFzZU1ldGFkYXRhPiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0
ZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsTWV0YWRhdGEoKQogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwpAQCAtMTA2LDEyICsyMjIsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURC
RGF0YWJhc2VNZXRhZGF0YT4gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmNy
ZWF0ZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoIW1fc3FsaXRl
REItPmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgUmVjb3JkcyAob2JqZWN0U3RvcmVJRCBJ
TlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIGtleSBURVhUIENPTExBVEUgSURCS0VZ
IE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZh
bHVlIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7Ci0gICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IGNyZWF0ZSBSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1f
c3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAg
ICAgIG1fc3FsaXRlREIgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0KICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgSW5k
ZXhSZWNvcmRzIChpbmRleElEIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgb2Jq
ZWN0U3RvcmVJRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIGtleSBURVhUIENP
TExBVEUgSURCS0VZIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIHZhbHVlIE5PVCBOVUxMIE9O
IENPTkZMSUNUIEZBSUwpOyIpKSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0
ZSBJbmRleFJlY29yZHMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+
bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgbV9zcWxp
dGVEQiA9IG51bGxwdHI7CkBAIC0zMTcsNiArNDI3LDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJE
YXRhYmFzZU1ldGFkYXRhPiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Z2V0
T3JFCiAgICAgICAgIHJldHVybiBpZGJLZXlDb2xsYXRlKGFMZW5ndGgsIGEsIGJMZW5ndGgsIGIp
OwogICAgIH0pOwogCisgICAgaWYgKCFlbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpKSB7CisgICAg
ICAgIExPR19FUlJPUigiRXJyb3IgY3JlYXRpbmcgb3IgbWlncmF0aW5nIFJlY29yZHMgdGFibGUg
aW4gZGF0YWJhc2UiKTsKKyAgICAgICAgbV9zcWxpdGVEQiA9IG51bGxwdHI7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1l
dGFkYXRhPiBtZXRhZGF0YSA9IGV4dHJhY3RFeGlzdGluZ01ldGFkYXRhKCk7CiAgICAgaWYgKCFt
ZXRhZGF0YSkKICAgICAgICAgbWV0YWRhdGEgPSBjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxNZXRh
ZGF0YSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlU1FMaXRlLmgKaW5kZXggNjMwNmViYy4uOTljMjhhZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9y
ZVNRTGl0ZS5oCkBAIC0xMDEsNiArMTAxLDggQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gZXh0cmFjdEV4aXN0aW5nTWV0YWRhdGEo
KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gY3Jl
YXRlQW5kUG9wdWxhdGVJbml0aWFsTWV0YWRhdGEoKTsKIAorICAgIGJvb2wgZW5zdXJlVmFsaWRS
ZWNvcmRzVGFibGUoKTsKKwogICAgIGJvb2wgZGVsZXRlUmVjb3JkKFNRTGl0ZUlEQlRyYW5zYWN0
aW9uJiwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJik7
CiAgICAgYm9vbCB1bmNoZWNrZWRQdXRJbmRleFJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSUQs
IGludDY0X3QgaW5kZXhJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYga2V5VmFsdWUsIGNv
bnN0IFdlYkNvcmU6OklEQktleURhdGEmIGluZGV4S2V5KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240686</attachid>
            <date>2014-10-30 12:27:38 -0700</date>
            <delta_ts>2014-10-30 13:17:46 -0700</delta_ts>
            <desc>Patch v2 - New test</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>14086</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzMzVlNDFkLi5iMDEwNTM1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQtMTAt
MzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWRE
QiBpcyBkZWxldGluZyBkYXRhIHdoZW4gYSBQSyBpcyBzaGFyZWQgYW1vbmdzdCB0d28gb2JqZWN0
U3RvcmVzCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzE4NDc5MzA2IGFuZCBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9wcmltYXJ5LWtl
eS11bmlxdWUtdG8tb2JqZWN0c3RvcmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBz
dG9yYWdlL2luZGV4ZWRkYi9wcmltYXJ5LWtleS11bmlxdWUtdG8tb2JqZWN0c3RvcmUuaHRtbDog
QWRkZWQuCisKIDIwMTQtMTAtMjkgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+
CiAKICAgICAgICAgVXBkYXRlIE1hdmVyaWNrcyByZXN1bHRzIGFmdGVyIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyNzUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL3ByaW1hcnkta2V5LXVuaXF1ZS10by1vYmplY3RzdG9yZS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9wcmltYXJ5LWtleS11bmlx
dWUtdG8tb2JqZWN0c3RvcmUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjgyOWZlODgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9wcmltYXJ5LWtleS11bmlxdWUtdG8tb2JqZWN0c3RvcmUtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMTAgQEAKK0Fib3V0IHRvIGFkZCBwZXJzb24gYW5kIG5vdGUKK1N1Y2Nlc3Nm
dWxseSBhZGRlZCBwZXJzb24KK1N1Y2Nlc3NmdWxseSBhZGRlZCBub3RlCitTdWNjZXNzZnVsbHkg
Z290IHBlcnNvbgorbmFtZQoraWQKK1N1Y2Nlc3NmdWxseSBnb3Qgbm90ZQorbm90ZQordWlkCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3ByaW1hcnkta2V5LXVu
aXF1ZS10by1vYmplY3RzdG9yZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
cHJpbWFyeS1rZXktdW5pcXVlLXRvLW9iamVjdHN0b3JlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMzIyODcyYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL3ByaW1hcnkta2V5LXVuaXF1ZS10by1vYmplY3RzdG9yZS5odG1s
CkBAIC0wLDAgKzEsMTQ3IEBACis8Ym9keT4KKzxkaXYgaWQ9ImxvZ2dlciI+PC9kaXY+Cis8c2Ny
aXB0PgoraWYgKHRlc3RSdW5uZXIpIHsKKwl0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKwl0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gbG9nKG1zZykgeworCWRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJsb2dnZXIiKS5pbm5lckhUTUwgKz0gbXNnICsgIjxicj4iOwor
fQorCit2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbigicGt1dG9zIiwgMSk7CisKK29w
ZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGUpIHsKKwl2YXIgdGhpc0RCID0g
ZS50YXJnZXQucmVzdWx0OworCisJaWYoIXRoaXNEQi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5z
KCJwZW9wbGUiKSkgeworCQl0aGlzREIuY3JlYXRlT2JqZWN0U3RvcmUoInBlb3BsZSIsIHtrZXlQ
YXRoOiJpZCJ9KTsKKwl9CisKKwlpZighdGhpc0RCLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMo
Im5vdGVzIikpIHsKKwkJdGhpc0RCLmNyZWF0ZU9iamVjdFN0b3JlKCJub3RlcyIsIHtrZXlQYXRo
OiJ1aWQifSk7CisJfQorfQorCitvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihlKSB7
CisJZGIgPSBlLnRhcmdldC5yZXN1bHQ7CisJYWRkUGVyc29uKCk7Cit9CQorCitvcGVuUmVxdWVz
dC5vbmVycm9yID0gZnVuY3Rpb24oZSkgeworCWxvZygib3BlblJlcXVlc3QgZXJyb3IgLSAiICsg
ZSk7Cit9CisKK3ZhciBzaGFyZWRJRCA9IDA7CisKK2Z1bmN0aW9uIGFkZFBlcnNvbigpIHsKKwls
b2coIkFib3V0IHRvIGFkZCBwZXJzb24gYW5kIG5vdGUiKTsKKworCS8vR2V0IGEgdHJhbnNhY3Rp
b24KKwkvL2RlZmF1bHQgZm9yIE9TIGxpc3QgaXMgYWxsLCBkZWZhdWx0IGZvciB0eXBlIGlzIHJl
YWQKKwl2YXIgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihbInBlb3BsZSJdLCJyZWFkd3Jp
dGUiKTsKKworCS8vQXNrIGZvciB0aGUgb2JqZWN0U3RvcmUKKwl2YXIgc3RvcmUgPSB0cmFuc2Fj
dGlvbi5vYmplY3RTdG9yZSgicGVvcGxlIik7CisKKwkvL0RlZmluZSBhIHBlcnNvbgorCXZhciBw
ZXJzb24gPSB7CisJCW5hbWU6IlBlcnNvbiIsCisJCWlkOnNoYXJlZElECisJfQorCisJLy9QZXJm
b3JtIHRoZSBhZGQKKwl2YXIgcmVxdWVzdCA9IHN0b3JlLmFkZChwZXJzb24pOworCisJcmVxdWVz
dC5vbmVycm9yID0gZnVuY3Rpb24oZSkgeworCQlsb2coIkVycm9yIGFkZGluZyBwZXJzb24gLSAi
LCBlKTsKKwl9CisKKwlyZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGUpIHsKKwkJbG9nKCJT
dWNjZXNzZnVsbHkgYWRkZWQgcGVyc29uIik7CisJCXNldFRpbWVvdXQoImFkZENvbXBsZXRlKCk7
IiwgMCk7CisJfQorCQorCS8vRGVmaW5lIGEgbm90ZQorCXZhciBub3RlID0geworCQlub3RlOiJO
b3RlIiwKKwkJdWlkOnNoYXJlZElECisJfQorCisJdmFyIHRyYW5zYWN0aW9uMiA9IGRiLnRyYW5z
YWN0aW9uKFsibm90ZXMiXSwicmVhZHdyaXRlIik7CisKKwkvL0FzayBmb3IgdGhlIG9iamVjdFN0
b3JlCisJdmFyIHN0b3JlMiA9IHRyYW5zYWN0aW9uMi5vYmplY3RTdG9yZSgibm90ZXMiKTsKKwor
CS8vUGVyZm9ybSB0aGUgYWRkCisJdmFyIHJlcXVlc3QyID0gc3RvcmUyLmFkZChub3RlKTsKKwor
CXJlcXVlc3QyLm9uZXJyb3IgPSBmdW5jdGlvbihlKSB7CisJCWxvZygiRXJyb3IgYWRkaW5nIG5v
dGUgLSAiLCBlKTsKKwl9CisKKwlyZXF1ZXN0Mi5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihlKSB7CisJ
CWxvZygiU3VjY2Vzc2Z1bGx5IGFkZGVkIG5vdGUiKTsKKwkJc2V0VGltZW91dCgiYWRkQ29tcGxl
dGUoKTsiLCAwKTsKKwl9CisJCit9CisKK3ZhciBjb21wbGV0ZWRBZGRzID0gMDsKK2Z1bmN0aW9u
IGFkZENvbXBsZXRlKCkKK3sKKwlpZiAoKytjb21wbGV0ZWRBZGRzIDwgMikKKwkJcmV0dXJuOwor
CisJLy9HZXQgYSB0cmFuc2FjdGlvbgorCXZhciB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9u
KFsicGVvcGxlIl0sInJlYWR3cml0ZSIpOworCisJLy9Bc2sgZm9yIHRoZSBvYmplY3RTdG9yZQor
CXZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCJwZW9wbGUiKTsKKworCS8vUGVy
Zm9ybSB0aGUgYWRkCisJdmFyIHJlcXVlc3QgPSBzdG9yZS5nZXQoc2hhcmVkSUQpOworCisJcmVx
dWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZSkgeworCQlsb2coIkVycm9yIGdldHRpbmcgcGVyc29u
IC0gIiwgZSk7CisJfQorCisJcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihlKSB7CisJCWxv
ZygiU3VjY2Vzc2Z1bGx5IGdvdCBwZXJzb24iKTsKKwkJZm9yIChuIGluIGUudGFyZ2V0LnJlc3Vs
dCkgeworCQkJbG9nKG4pOworCQl9CisJCWdldENvbXBsZXRlKCk7CisJfQorCisJdmFyIHRyYW5z
YWN0aW9uMiA9IGRiLnRyYW5zYWN0aW9uKFsibm90ZXMiXSwicmVhZHdyaXRlIik7CisKKwkvL0Fz
ayBmb3IgdGhlIG9iamVjdFN0b3JlCisJdmFyIHN0b3JlMiA9IHRyYW5zYWN0aW9uMi5vYmplY3RT
dG9yZSgibm90ZXMiKTsKKworCS8vUGVyZm9ybSB0aGUgYWRkCisJdmFyIHJlcXVlc3QyID0gc3Rv
cmUyLmdldChzaGFyZWRJRCk7CisKKwlyZXF1ZXN0Mi5vbmVycm9yID0gZnVuY3Rpb24oZSkgewor
CQlsb2coIkVycm9yIGdldHRpbmcgbm90ZSAtICIsIGUpOworCX0KKworCXJlcXVlc3QyLm9uc3Vj
Y2VzcyA9IGZ1bmN0aW9uKGUpIHsKKwkJbG9nKCJTdWNjZXNzZnVsbHkgZ290IG5vdGUiKTsKKwkJ
Zm9yIChuIGluIGUudGFyZ2V0LnJlc3VsdCkgeworCQkJbG9nKG4pOworCQl9CisJCWdldENvbXBs
ZXRlKCk7CisJfQorfQorCit2YXIgY29tcGxldGVkR2V0cyA9IDA7CitmdW5jdGlvbiBnZXRDb21w
bGV0ZSgpCit7CisJaWYgKCsrY29tcGxldGVkR2V0cyA9PSAyICYmIHRlc3RSdW5uZXIpCisJCXRl
c3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDc0YzYwOWMuLmFlMmNlNTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxNC0xMC0zMCAgQnJhZHkgRWlkc29uICA8
YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgSW5kZXhlZERCIGlzIGRlbGV0aW5nIGRhdGEg
d2hlbiBhIFBLIGlzIHNoYXJlZCBhbW9uZ3N0IHR3byBvYmplY3RTdG9yZXMKKyAgICAgICAgcmRh
cjovL3Byb2JsZW0vMTg0NzkzMDYgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzcxNTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6djFSZWNvcmRzVGFi
bGVTY2hlbWEpOiBTdG9yZSBhd2F5IHRoZSB2MSBzY2hlbWEgZm9yIGludHJvc3BlY3Rpb24gaW50
byB0aGUgZGF0YWJhc2UuCisgICAgICAgIChXZWJLaXQ6OnYyUmVjb3Jkc1RhYmxlU2NoZW1hKTog
QWRkIHV0aWxpdHkgbWV0aG9kcyB0byBnZXQgdGhlIHYyIHNjaGVtYSB3aXRoIGRpZmZlcmVudCBU
YWJsZSBuYW1lcy4KKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxl
SWZOZWNlc3NhcnkpOiBDaGVjayB0byBzZWUgaWYgdGhlIFJlY29yZHMgdGFibGUgZXhpc3RzIHdp
dGgKKyAgICAgICAgICB0aGUgY29ycmVjdCBzY2hlbWEuIElmIGl0IGlzIHRoZSB2MSBzY2hlbWEs
IHRoZW4gbWlncmF0ZSB0aGUgZGF0YSB0byBhIG5ldyB2MiB0YWJsZSwgZHJvcCB0aGUgdjEKKyAg
ICAgICAgICB0YWJsZSwgdGhlbiBzbGlkZSB0aGUgbmV3IHRhYmxlIGludG8gcGxhY2UuCisgICAg
ICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjplbnN1cmVW
YWxpZFJlY29yZHNUYWJsZSk6IE1ha2Ugc3VyZSB0aGUgUmVjb3JkcyB0YWJsZQorICAgICAgICAg
IGV4aXN0cyBhbmQgaXMgdjIsIGFuZCB0aGVuIG1ha2Ugc3VyZSB0aGUgdW5pcXVlbmVzcyBpbmRl
eCBleGlzdHMuCisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3Jl
U1FMaXRlOjpjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxNZXRhZGF0YSk6IERvbuKAmXQgYm90aGVy
IGNyZWF0aW5nCisgICAgICAgICAgdGhlIFJlY29yZHMgdGFibGUgaGVyZSBhcyBpdCB3aWxsIGhh
dmUgYWxyZWFkeSBiZWVuIGVzdGFibGlzaGVkIGVhcmxpZXIuCisgICAgICAgIChXZWJLaXQ6OlVu
aXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpnZXRPckVzdGFibGlzaE1ldGFkYXRh
KToKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJE
YXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oOgorCiAyMDE0LTEwLTI5ICBUaW0gSG9ydG9uICA8
dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBXZWJQYWdlUHJveHk6
OmFjdGl2ZUFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0IHRvIGxhc3RNb3VzZU1vdmVIaXRUZXN0UmVz
dWx0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERC
L3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAKaW5kZXggY2UxYTNiOC4uODIyMWE0MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlLmNwcApAQCAtNDEsNyArNDEsOSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvSURCS2V5
UmFuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVRyYW5z
YWN0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCiB1c2luZyBu
YW1lc3BhY2UgSlNDOwpAQCAtNTIsNiArNTQsMjkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAvLyBD
dXJyZW50IHZlcnNpb24gb2YgdGhlIG1ldGFkYXRhIHNjaGVtYSBiZWluZyB1c2VkIGluIHRoZSBt
ZXRhZGF0YSBkYXRhYmFzZS4KIHN0YXRpYyBjb25zdCBpbnQgY3VycmVudE1ldGFkYXRhVmVyc2lv
biA9IDE7CiAKK3N0YXRpYyBjb25zdCBTdHJpbmcmIHYxUmVjb3Jkc1RhYmxlU2NoZW1hKCkKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V1RGOjpTdHJpbmc+IHYxUmVjb3Jkc1RhYmxlU2No
ZW1hU3RyaW5nKEFTQ0lJTGl0ZXJhbCgKKyAgICAgICAgIkNSRUFURSBUQUJMRSBSZWNvcmRzIChv
YmplY3RTdG9yZUlEIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwga2V5IFRFWFQg
Q09MTEFURSBJREJLRVkgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJ
Q1QgUkVQTEFDRSwgdmFsdWUgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKSk7CisgICAgcmV0
dXJuIHYxUmVjb3Jkc1RhYmxlU2NoZW1hU3RyaW5nOworfQorCitzdGF0aWMgY29uc3QgU3RyaW5n
IHYyUmVjb3Jkc1RhYmxlU2NoZW1hKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZCgiQ1JFQVRFIFRBQkxFICIp
OworICAgIGJ1aWxkZXIuYXBwZW5kKHRhYmxlTmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmQoIiAo
b2JqZWN0U3RvcmVJRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIGtleSBURVhU
IENPTExBVEUgSURCS0VZIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIHZhbHVlIE5PVCBOVUxM
IE9OIENPTkZMSUNUIEZBSUwpIik7CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwor
fQorCitzdGF0aWMgY29uc3QgU3RyaW5nJiB2MlJlY29yZHNUYWJsZVNjaGVtYSgpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFdURjo6U3RyaW5nPiB2MlJlY29yZHNUYWJsZVNjaGVtYVN0
cmluZyh2MlJlY29yZHNUYWJsZVNjaGVtYSgiUmVjb3JkcyIpKTsKKyAgICByZXR1cm4gdjJSZWNv
cmRzVGFibGVTY2hlbWFTdHJpbmc7Cit9CisKIHN0YXRpYyBpbnQ2NF90IGdlbmVyYXRlRGF0YWJh
c2VJZCgpCiB7CiAgICAgc3RhdGljIGludDY0X3QgZGF0YWJhc2VJRCA9IDA7CkBAIC04Miw2ICsx
MDcsOTcgQEAgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6On5VbmlxdWVJREJE
YXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZSgpCiAgICAgfQogfQogCitzdGF0aWMgYm9vbCBjcmVh
dGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJh
c2UpCit7CisgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CisgICAgeworICAgICAgICAvLyBGZXRj
aCB0aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyByZWNvcmRzIHRhYmxlLgorICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNx
bGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J1JlY29yZHMnIik7CisgICAgICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNv
cmRzIHRhYmxlLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisKKyAgICAgICAgLy8g
SWYgdGhlcmUgaXMgbm8gUmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNyZWF0ZSBpdCBhbmQgdGhlbiBi
YWlsLgorICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ID09IFNRTFJlc3VsdERvbmUpIHsKKyAgICAg
ICAgICAgIGlmICghZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQodjJSZWNvcmRzVGFibGVTY2hlbWEo
KSkpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgUmVjb3Jk
cyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTFJlc3VsdFJvdykgeworICAgICAgICAgICAgTE9H
X0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhl
IFJlY29yZHMgdGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7Cisg
ICAgfQorCisgICAgQVNTRVJUKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CisKKyAgICAvLyBJ
ZiB0aGUgc2NoZW1hIGluIHRoZSBiYWNraW5nIHN0b3JlIGlzIHRoZSBjdXJyZW50IHNjaGVtYSwg
d2UncmUgZG9uZS4KKyAgICBpZiAoY3VycmVudFNjaGVtYSA9PSB2MlJlY29yZHNUYWJsZVNjaGVt
YSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEN1cnJlbnRseSB0aGUgUmVjb3Jk
cyB0YWJsZSBzaG91bGQgb25seSBiZSBvbmUgb2YgZWl0aGVyIHRoZSB2MSBvciB2MiBzY2hlbWFz
LgorICAgIGlmIChjdXJyZW50U2NoZW1hICE9IHYxUmVjb3Jkc1RhYmxlU2NoZW1hKCkpIHsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihkYXRhYmFzZSk7CisgICAgdHJh
bnNhY3Rpb24uYmVnaW4oKTsKKworICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSB0YWJsZSB3aXRo
IHRoZSBjb3JyZWN0IHNjaGVtYSBhbmQgbWlncmF0ZSBhbGwgZXhpc3RpbmcgY29udGVudCBvdmVy
LgorICAgIGlmICghZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQodjJSZWNvcmRzVGFibGVTY2hlbWEo
Il9UZW1wX1JlY29yZHMiKSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRl
IHRlbXBvcmFyeSByZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIGRhdGFiYXNl
Lmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJJTlNFUlQg
SU5UTyBfVGVtcF9SZWNvcmRzIFNFTEVDVCAqIEZST00gUmVjb3JkcyIpKSB7CisgICAgICAgIExP
R19FUlJPUigiQ291bGQgbm90IG1pZ3JhdGUgZXhpc3RpbmcgUmVjb3JkcyBjb250ZW50ICglaSkg
LSAlcyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1dGVD
b21tYW5kKCJEUk9QIFRBQkxFIFJlY29yZHMiKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxk
IG5vdCBkcm9wIGV4aXN0aW5nIFJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFz
dEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmICghZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkFMVEVSIFRBQkxF
IF9UZW1wX1JlY29yZHMgUkVOQU1FIFRPIFJlY29yZHMiKSkgeworICAgICAgICBMT0dfRVJST1Io
IkNvdWxkIG5vdCByZW5hbWUgdGVtcG9yYXJ5IFJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgZGF0
YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6
OmVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICBBU1NFUlQobV9zcWxpdGVEQik7CisgICAgQVNTRVJUKG1fc3FsaXRlREItPmlz
T3BlbigpKTsKKworICAgIGlmICghY3JlYXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZOZWNlc3Nh
cnkoKm1fc3FsaXRlREIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXaGV0aGVy
IHRoZSB1cGRhdGVkIHJlY29yZHMgdGFibGUgYWxyZWFkeSBleGlzdGVkIG9yIGlmIGl0IHdhcyBq
dXN0IGNyZWF0ZWQgYW5kIHRoZSBkYXRhIG1pZ3JhdGVkIG92ZXIsCisgICAgLy8gbWFrZSBzdXJl
IHRoZSB1bmlxdWVuZXNzIGluZGV4IGV4aXN0cy4KKyAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1
dGVDb21tYW5kKCJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgUmVjb3Jkc0luZGV4
IE9OIFJlY29yZHMgKG9iamVjdFN0b3JlSUQsIGtleSk7IikpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJDb3VsZCBub3QgY3JlYXRlIFJlY29yZHNJbmRleCBvbiBSZWNvcmRzIHRhYmxlIGluIGRhdGFi
YXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlTWV0YWRhdGE+IFVuaXF1ZUlE
QkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxNZXRh
ZGF0YSgpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CkBAIC0xMDYsMTIgKzIy
Miw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRhPiBVbmlxdWVJREJEYXRh
YmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Y3JlYXRlCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIAotICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJM
RSBSZWNvcmRzIChvYmplY3RTdG9yZUlEIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJ
TCwga2V5IFRFWFQgQ09MTEFURSBJREJLRVkgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklR
VUUgT04gQ09ORkxJQ1QgUkVQTEFDRSwgdmFsdWUgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCk7
IikpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFJlY29yZHMgdGFibGUg
aW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRl
REItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgbV9zcWxpdGVEQiA9IG51bGxwdHI7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQogICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0
ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBJbmRleFJlY29yZHMgKGluZGV4SUQgSU5URUdFUiBOT1Qg
TlVMTCBPTiBDT05GTElDVCBGQUlMLCBvYmplY3RTdG9yZUlEIElOVEVHRVIgTk9UIE5VTEwgT04g
Q09ORkxJQ1QgRkFJTCwga2V5IFRFWFQgQ09MTEFURSBJREJLRVkgTk9UIE5VTEwgT04gQ09ORkxJ
Q1QgRkFJTCwgdmFsdWUgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKICAgICAgICAg
TE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIEluZGV4UmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFz
ZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICBtX3NxbGl0ZURCID0gbnVsbHB0cjsKQEAgLTMxNyw2ICs0Mjcs
MTIgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlTWV0YWRhdGE+IFVuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlU1FMaXRlOjpnZXRPckUKICAgICAgICAgcmV0dXJuIGlkYktleUNvbGxh
dGUoYUxlbmd0aCwgYSwgYkxlbmd0aCwgYik7CiAgICAgfSk7CiAKKyAgICBpZiAoIWVuc3VyZVZh
bGlkUmVjb3Jkc1RhYmxlKCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBjcmVhdGluZyBv
ciBtaWdyYXRpbmcgUmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSIpOworICAgICAgICBtX3NxbGl0
ZURCID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlTWV0YWRhdGE+IG1ldGFkYXRhID0gZXh0cmFjdEV4aXN0
aW5nTWV0YWRhdGEoKTsKICAgICBpZiAoIW1ldGFkYXRhKQogICAgICAgICBtZXRhZGF0YSA9IGNy
ZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbE1ldGFkYXRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJh
Y2tpbmdTdG9yZVNRTGl0ZS5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaAppbmRleCA2
MzA2ZWJjLi45OWMyOGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1Vu
aXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmgKQEAgLTEwMSw2ICsxMDEsOCBAQCBw
cml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRh
PiBleHRyYWN0RXhpc3RpbmdNZXRhZGF0YSgpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpJREJEYXRhYmFzZU1ldGFkYXRhPiBjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxNZXRhZGF0YSgp
OwogCisgICAgYm9vbCBlbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpOworCiAgICAgYm9vbCBkZWxl
dGVSZWNvcmQoU1FMaXRlSURCVHJhbnNhY3Rpb24mLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNv
bnN0IFdlYkNvcmU6OklEQktleURhdGEmKTsKICAgICBib29sIHVuY2hlY2tlZFB1dEluZGV4UmVj
b3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBjb25zdCBXZWJDb3Jl
OjpJREJLZXlEYXRhJiBrZXlWYWx1ZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYgaW5kZXhL
ZXkpOwogCg==
</data>
<flag name="review"
          id="265464"
          type_id="1"
          status="+"
          setter="jer.noble"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240689</attachid>
            <date>2014-10-30 13:17:46 -0700</date>
            <delta_ts>2014-10-30 14:00:55 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>14345</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0OWI2ZTQ5Li41NWJlYzQ1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQtMTAt
MzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWRE
QiBpcyBkZWxldGluZyBkYXRhIHdoZW4gYSBQSyBpcyBzaGFyZWQgYW1vbmdzdCB0d28gb2JqZWN0
U3RvcmVzCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzE4NDc5MzA2IGFuZCBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
SmVyIE5vYmxlLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvcHJpbWFyeS1rZXktdW5p
cXVlLXRvLW9iamVjdHN0b3JlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFn
ZS9pbmRleGVkZGIvcHJpbWFyeS1rZXktdW5pcXVlLXRvLW9iamVjdHN0b3JlLmh0bWw6IEFkZGVk
LgorCiAyMDE0LTEwLTMwICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQgZ2FyZGVuaW5nOyByZWJhc2VsaW5lIHR3byBtZWRpYS8gdGVzdHMuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9wcmltYXJ5LWtleS11bmlx
dWUtdG8tb2JqZWN0c3RvcmUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvcHJpbWFyeS1rZXktdW5pcXVlLXRvLW9iamVjdHN0b3JlLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjlmZTg4Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcHJpbWFyeS1rZXktdW5pcXVlLXRvLW9i
amVjdHN0b3JlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitBYm91dCB0byBhZGQgcGVy
c29uIGFuZCBub3RlCitTdWNjZXNzZnVsbHkgYWRkZWQgcGVyc29uCitTdWNjZXNzZnVsbHkgYWRk
ZWQgbm90ZQorU3VjY2Vzc2Z1bGx5IGdvdCBwZXJzb24KK25hbWUKK2lkCitTdWNjZXNzZnVsbHkg
Z290IG5vdGUKK25vdGUKK3VpZAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi9wcmltYXJ5LWtleS11bmlxdWUtdG8tb2JqZWN0c3RvcmUuaHRtbCBiL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3ByaW1hcnkta2V5LXVuaXF1ZS10by1vYmplY3RzdG9yZS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZmJhZjYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9wcmltYXJ5LWtleS11bmlx
dWUtdG8tb2JqZWN0c3RvcmUuaHRtbApAQCAtMCwwICsxLDE0NyBAQAorPGJvZHk+Cis8ZGl2IGlk
PSJsb2dnZXIiPjwvZGl2PgorPHNjcmlwdD4KK2lmICh0ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1
bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit9CisK
K2Z1bmN0aW9uIGxvZyhtc2cpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nZ2Vy
IikuaW5uZXJIVE1MICs9IG1zZyArICI8YnI+IjsKK30KKwordmFyIG9wZW5SZXF1ZXN0ID0gaW5k
ZXhlZERCLm9wZW4oInBrdXRvcyIsIDEpOworCitvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQg
PSBmdW5jdGlvbihlKSB7CisgICAgdmFyIHRoaXNEQiA9IGUudGFyZ2V0LnJlc3VsdDsKKworICAg
IGlmKCF0aGlzREIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucygicGVvcGxlIikpIHsKKyAgICAg
ICAgdGhpc0RCLmNyZWF0ZU9iamVjdFN0b3JlKCJwZW9wbGUiLCB7a2V5UGF0aDoiaWQifSk7Cisg
ICAgfQorCisgICAgaWYoIXRoaXNEQi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKCJub3RlcyIp
KSB7CisgICAgICAgIHRoaXNEQi5jcmVhdGVPYmplY3RTdG9yZSgibm90ZXMiLCB7a2V5UGF0aDoi
dWlkIn0pOworICAgIH0KK30KKworb3BlblJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oZSkg
eworICAgIGRiID0gZS50YXJnZXQucmVzdWx0OworICAgIGFkZFBlcnNvbigpOworfSAgICAKKwor
b3BlblJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uKGUpIHsKKyAgICBsb2coIm9wZW5SZXF1ZXN0
IGVycm9yIC0gIiArIGUpOworfQorCit2YXIgc2hhcmVkSUQgPSAwOworCitmdW5jdGlvbiBhZGRQ
ZXJzb24oKSB7CisgICAgbG9nKCJBYm91dCB0byBhZGQgcGVyc29uIGFuZCBub3RlIik7CisKKyAg
ICAvL0dldCBhIHRyYW5zYWN0aW9uCisgICAgLy9kZWZhdWx0IGZvciBPUyBsaXN0IGlzIGFsbCwg
ZGVmYXVsdCBmb3IgdHlwZSBpcyByZWFkCisgICAgdmFyIHRyYW5zYWN0aW9uID0gZGIudHJhbnNh
Y3Rpb24oWyJwZW9wbGUiXSwgInJlYWR3cml0ZSIpOworCisgICAgLy9Bc2sgZm9yIHRoZSBvYmpl
Y3RTdG9yZQorICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCJwZW9wbGUi
KTsKKworICAgIC8vRGVmaW5lIGEgcGVyc29uCisgICAgdmFyIHBlcnNvbiA9IHsKKyAgICAgICAg
bmFtZTogIlBlcnNvbiIsCisgICAgICAgIGlkOiBzaGFyZWRJRAorICAgIH0KKworICAgIC8vUGVy
Zm9ybSB0aGUgYWRkCisgICAgdmFyIHJlcXVlc3QgPSBzdG9yZS5hZGQocGVyc29uKTsKKworICAg
IHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgbG9nKCJFcnJvciBhZGRp
bmcgcGVyc29uIC0gIiwgZSk7CisgICAgfQorCisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5j
dGlvbihlKSB7CisgICAgICAgIGxvZygiU3VjY2Vzc2Z1bGx5IGFkZGVkIHBlcnNvbiIpOworICAg
ICAgICBzZXRUaW1lb3V0KCJhZGRDb21wbGV0ZSgpOyIsIDApOworICAgIH0KKyAgICAKKyAgICAv
L0RlZmluZSBhIG5vdGUKKyAgICB2YXIgbm90ZSA9IHsKKyAgICAgICAgbm90ZTogIk5vdGUiLAor
ICAgICAgICB1aWQ6IHNoYXJlZElECisgICAgfQorCisgICAgdmFyIHRyYW5zYWN0aW9uMiA9IGRi
LnRyYW5zYWN0aW9uKFsibm90ZXMiXSwgInJlYWR3cml0ZSIpOworCisgICAgLy9Bc2sgZm9yIHRo
ZSBvYmplY3RTdG9yZQorICAgIHZhciBzdG9yZTIgPSB0cmFuc2FjdGlvbjIub2JqZWN0U3RvcmUo
Im5vdGVzIik7CisKKyAgICAvL1BlcmZvcm0gdGhlIGFkZAorICAgIHZhciByZXF1ZXN0MiA9IHN0
b3JlMi5hZGQobm90ZSk7CisKKyAgICByZXF1ZXN0Mi5vbmVycm9yID0gZnVuY3Rpb24oZSkgewor
ICAgICAgICBsb2coIkVycm9yIGFkZGluZyBub3RlIC0gIiwgZSk7CisgICAgfQorCisgICAgcmVx
dWVzdDIub25zdWNjZXNzID0gZnVuY3Rpb24oZSkgeworICAgICAgICBsb2coIlN1Y2Nlc3NmdWxs
eSBhZGRlZCBub3RlIik7CisgICAgICAgIHNldFRpbWVvdXQoImFkZENvbXBsZXRlKCk7IiwgMCk7
CisgICAgfQorICAgIAorfQorCit2YXIgY29tcGxldGVkQWRkcyA9IDA7CitmdW5jdGlvbiBhZGRD
b21wbGV0ZSgpCit7CisgICAgaWYgKCsrY29tcGxldGVkQWRkcyA8IDIpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vR2V0IGEgdHJhbnNhY3Rpb24KKyAgICB2YXIgdHJhbnNhY3Rpb24gPSBkYi50
cmFuc2FjdGlvbihbInBlb3BsZSJdLCAicmVhZHdyaXRlIik7CisKKyAgICAvL0FzayBmb3IgdGhl
IG9iamVjdFN0b3JlCisgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoInBl
b3BsZSIpOworCisgICAgLy9QZXJmb3JtIHRoZSBhZGQKKyAgICB2YXIgcmVxdWVzdCA9IHN0b3Jl
LmdldChzaGFyZWRJRCk7CisKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihlKSB7Cisg
ICAgICAgIGxvZygiRXJyb3IgZ2V0dGluZyBwZXJzb24gLSAiLCBlKTsKKyAgICB9CisKKyAgICBy
ZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgbG9nKCJTdWNjZXNzZnVs
bHkgZ290IHBlcnNvbiIpOworICAgICAgICBmb3IgKG4gaW4gZS50YXJnZXQucmVzdWx0KSB7Cisg
ICAgICAgICAgICBsb2cobik7CisgICAgICAgIH0KKyAgICAgICAgZ2V0Q29tcGxldGUoKTsKKyAg
ICB9CisKKyAgICB2YXIgdHJhbnNhY3Rpb24yID0gZGIudHJhbnNhY3Rpb24oWyJub3RlcyJdLCAi
cmVhZHdyaXRlIik7CisKKyAgICAvL0FzayBmb3IgdGhlIG9iamVjdFN0b3JlCisgICAgdmFyIHN0
b3JlMiA9IHRyYW5zYWN0aW9uMi5vYmplY3RTdG9yZSgibm90ZXMiKTsKKworICAgIC8vUGVyZm9y
bSB0aGUgYWRkCisgICAgdmFyIHJlcXVlc3QyID0gc3RvcmUyLmdldChzaGFyZWRJRCk7CisKKyAg
ICByZXF1ZXN0Mi5vbmVycm9yID0gZnVuY3Rpb24oZSkgeworICAgICAgICBsb2coIkVycm9yIGdl
dHRpbmcgbm90ZSAtICIsIGUpOworICAgIH0KKworICAgIHJlcXVlc3QyLm9uc3VjY2VzcyA9IGZ1
bmN0aW9uKGUpIHsKKyAgICAgICAgbG9nKCJTdWNjZXNzZnVsbHkgZ290IG5vdGUiKTsKKyAgICAg
ICAgZm9yIChuIGluIGUudGFyZ2V0LnJlc3VsdCkgeworICAgICAgICAgICAgbG9nKG4pOworICAg
ICAgICB9CisgICAgICAgIGdldENvbXBsZXRlKCk7CisgICAgfQorfQorCit2YXIgY29tcGxldGVk
R2V0cyA9IDA7CitmdW5jdGlvbiBnZXRDb21wbGV0ZSgpCit7CisgICAgaWYgKCsrY29tcGxldGVk
R2V0cyA9PSAyICYmIHRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IGJhODVhMDguLjY5YTM3MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMyBAQAorMjAxNC0xMC0zMCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgSW5kZXhlZERCIGlzIGRlbGV0aW5nIGRhdGEgd2hlbiBhIFBLIGlzIHNoYXJlZCBh
bW9uZ3N0IHR3byBvYmplY3RTdG9yZXMKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMTg0NzkzMDYg
YW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBKZXIgTm9ibGUuCisKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OnYxUmVjb3Jkc1RhYmxlU2NoZW1hKTogU3RvcmUgYXdheSB0aGUg
djEgc2NoZW1hIGZvciBpbnRyb3NwZWN0aW9uIGludG8gdGhlIGRhdGFiYXNlLgorICAgICAgICAo
V2ViS2l0Ojp2MlJlY29yZHNUYWJsZVNjaGVtYSk6IEFkZCB1dGlsaXR5IG1ldGhvZHMgdG8gZ2V0
IHRoZSB2MiBzY2hlbWEgd2l0aCBkaWZmZXJlbnQgVGFibGUgbmFtZXMuCisgICAgICAgIChXZWJL
aXQ6OmNyZWF0ZU9yTWlncmF0ZVJlY29yZHNUYWJsZUlmTmVjZXNzYXJ5KTogQ2hlY2sgdG8gc2Vl
IGlmIHRoZSBSZWNvcmRzIHRhYmxlIGV4aXN0cyB3aXRoCisgICAgICAgICAgdGhlIGNvcnJlY3Qg
c2NoZW1hLiBJZiBpdCBpcyB0aGUgdjEgc2NoZW1hLCB0aGVuIG1pZ3JhdGUgdGhlIGRhdGEgdG8g
YSBuZXcgdjIgdGFibGUsIGRyb3AgdGhlIHYxCisgICAgICAgICAgdGFibGUsIHRoZW4gc2xpZGUg
dGhlIG5ldyB0YWJsZSBpbnRvIHBsYWNlLgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRh
YmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUpOiBNYWtlIHN1
cmUgdGhlIFJlY29yZHMgdGFibGUKKyAgICAgICAgICBleGlzdHMgYW5kIGlzIHYyLCBhbmQgdGhl
biBtYWtlIHN1cmUgdGhlIHVuaXF1ZW5lc3MgaW5kZXggZXhpc3RzLgorICAgICAgICAoV2ViS2l0
OjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Y3JlYXRlQW5kUG9wdWxhdGVJ
bml0aWFsTWV0YWRhdGEpOiBEb27igJl0IGJvdGhlciBjcmVhdGluZworICAgICAgICAgIHRoZSBS
ZWNvcmRzIHRhYmxlIGhlcmUgYXMgaXQgd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBlc3RhYmxpc2hl
ZCBlYXJsaWVyLgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9y
ZVNRTGl0ZTo6Z2V0T3JFc3RhYmxpc2hNZXRhZGF0YSk6CisgICAgICAgICogRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUu
aDoKKwogMjAxNC0xMC0zMCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgSW1wbGVtZW50IGFjdGlvbiBtZW51cyBmb3IgdGV4dApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VC
YWNraW5nU3RvcmVTUUxpdGUuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwCmlu
ZGV4IGNlMWEzYjguLjgyMjFhNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FM
aXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3Nx
bGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAKQEAgLTQxLDcgKzQx
LDkgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0lEQktleVJhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9TUUxpdGVEYXRhYmFzZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2FjdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5j
bHVkZSA8d3RmL1J1bkxvb3AuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTUyLDYgKzU0
LDI5IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogLy8gQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSBtZXRh
ZGF0YSBzY2hlbWEgYmVpbmcgdXNlZCBpbiB0aGUgbWV0YWRhdGEgZGF0YWJhc2UuCiBzdGF0aWMg
Y29uc3QgaW50IGN1cnJlbnRNZXRhZGF0YVZlcnNpb24gPSAxOwogCitzdGF0aWMgY29uc3QgU3Ry
aW5nJiB2MVJlY29yZHNUYWJsZVNjaGVtYSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFdURjo6U3RyaW5nPiB2MVJlY29yZHNUYWJsZVNjaGVtYVN0cmluZyhBU0NJSUxpdGVyYWwoCisg
ICAgICAgICJDUkVBVEUgVEFCTEUgUmVjb3JkcyAob2JqZWN0U3RvcmVJRCBJTlRFR0VSIE5PVCBO
VUxMIE9OIENPTkZMSUNUIEZBSUwsIGtleSBURVhUIENPTExBVEUgSURCS0VZIE5PVCBOVUxMIE9O
IENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIE5PVCBOVUxM
IE9OIENPTkZMSUNUIEZBSUwpIikpOworICAgIHJldHVybiB2MVJlY29yZHNUYWJsZVNjaGVtYVN0
cmluZzsKK30KKworc3RhdGljIGNvbnN0IFN0cmluZyB2MlJlY29yZHNUYWJsZVNjaGVtYShjb25z
dCBTdHJpbmcmIHRhYmxlTmFtZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAg
YnVpbGRlci5hcHBlbmQoIkNSRUFURSBUQUJMRSAiKTsKKyAgICBidWlsZGVyLmFwcGVuZCh0YWJs
ZU5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5kKCIgKG9iamVjdFN0b3JlSUQgSU5URUdFUiBOT1Qg
TlVMTCBPTiBDT05GTElDVCBGQUlMLCBrZXkgVEVYVCBDT0xMQVRFIElEQktFWSBOT1QgTlVMTCBP
TiBDT05GTElDVCBGQUlMLCB2YWx1ZSBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIpOworCisg
ICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworc3RhdGljIGNvbnN0IFN0cmluZyYg
djJSZWNvcmRzVGFibGVTY2hlbWEoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXVEY6
OlN0cmluZz4gdjJSZWNvcmRzVGFibGVTY2hlbWFTdHJpbmcodjJSZWNvcmRzVGFibGVTY2hlbWEo
IlJlY29yZHMiKSk7CisgICAgcmV0dXJuIHYyUmVjb3Jkc1RhYmxlU2NoZW1hU3RyaW5nOworfQor
CiBzdGF0aWMgaW50NjRfdCBnZW5lcmF0ZURhdGFiYXNlSWQoKQogewogICAgIHN0YXRpYyBpbnQ2
NF90IGRhdGFiYXNlSUQgPSAwOwpAQCAtODIsNiArMTA3LDk3IEBAIFVuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlU1FMaXRlOjp+VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUo
KQogICAgIH0KIH0KIAorc3RhdGljIGJvb2wgY3JlYXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZO
ZWNlc3NhcnkoU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlKQoreworICAgIFN0cmluZyBjdXJyZW50
U2NoZW1hOworICAgIHsKKyAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3Rp
bmcgcmVjb3JkcyB0YWJsZS4KKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYXRh
YmFzZSwgIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1l
PSdSZWNvcmRzJyIpOworICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgUmVjb3JkcyB0YWJsZS4iKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBz
dGF0ZW1lbnQuc3RlcCgpOworCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIFJlY29yZHMgdGFi
bGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRoZW4gYmFpbC4KKyAgICAgICAgaWYgKHNxbGl0ZVJl
c3VsdCA9PSBTUUxSZXN1bHREb25lKSB7CisgICAgICAgICAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1
dGVDb21tYW5kKHYyUmVjb3Jkc1RhYmxlU2NoZW1hKCkpKSB7CisgICAgICAgICAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFJlY29yZHMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAt
ICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBT
UUxSZXN1bHRSb3cpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0
YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiIpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY3VycmVudFNjaGVtYSA9
IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgIH0KKworICAgIEFTU0VSVCghY3VycmVu
dFNjaGVtYS5pc0VtcHR5KCkpOworCisgICAgLy8gSWYgdGhlIHNjaGVtYSBpbiB0aGUgYmFja2lu
ZyBzdG9yZSBpcyB0aGUgY3VycmVudCBzY2hlbWEsIHdlJ3JlIGRvbmUuCisgICAgaWYgKGN1cnJl
bnRTY2hlbWEgPT0gdjJSZWNvcmRzVGFibGVTY2hlbWEoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAvLyBDdXJyZW50bHkgdGhlIFJlY29yZHMgdGFibGUgc2hvdWxkIG9ubHkgYmUgb25l
IG9mIGVpdGhlciB0aGUgdjEgb3IgdjIgc2NoZW1hcy4KKyAgICBpZiAoY3VycmVudFNjaGVtYSAh
PSB2MVJlY29yZHNUYWJsZVNjaGVtYSgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgU1FMaXRlVHJhbnNhY3Rpb24g
dHJhbnNhY3Rpb24oZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKKyAgICAv
LyBDcmVhdGUgYSB0ZW1wb3JhcnkgdGFibGUgd2l0aCB0aGUgY29ycmVjdCBzY2hlbWEgYW5kIG1p
Z3JhdGUgYWxsIGV4aXN0aW5nIGNvbnRlbnQgb3Zlci4KKyAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1
dGVDb21tYW5kKHYyUmVjb3Jkc1RhYmxlU2NoZW1hKCJfVGVtcF9SZWNvcmRzIikpKSB7CisgICAg
ICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgcmVjb3JkcyB0YWJsZSBp
biBkYXRhYmFzZSAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3IoKSwgZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFk
YXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiSU5TRVJUIElOVE8gX1RlbXBfUmVjb3JkcyBTRUxFQ1Qg
KiBGUk9NIFJlY29yZHMiKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBtaWdyYXRl
IGV4aXN0aW5nIFJlY29yZHMgY29udGVudCAoJWkpIC0gJXMiLCBkYXRhYmFzZS5sYXN0RXJyb3Io
KSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiRFJPUCBUQUJMRSBSZWNvcmRz
IikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZHJvcCBleGlzdGluZyBSZWNvcmRz
IHRhYmxlICglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWRhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKCJBTFRFUiBUQUJMRSBfVGVtcF9SZWNvcmRzIFJFTkFNRSBUTyBS
ZWNvcmRzIikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFy
eSBSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0
cmFuc2FjdGlvbi5jb21taXQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFVuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKG1fc3FsaXRl
REIpOworICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisKKyAgICBpZiAoIWNyZWF0
ZU9yTWlncmF0ZVJlY29yZHNUYWJsZUlmTmVjZXNzYXJ5KCptX3NxbGl0ZURCKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gV2hldGhlciB0aGUgdXBkYXRlZCByZWNvcmRzIHRhYmxl
IGFscmVhZHkgZXhpc3RlZCBvciBpZiBpdCB3YXMganVzdCBjcmVhdGVkIGFuZCB0aGUgZGF0YSBt
aWdyYXRlZCBvdmVyLAorICAgIC8vIG1ha2Ugc3VyZSB0aGUgdW5pcXVlbmVzcyBpbmRleCBleGlz
dHMuCisgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFVOSVFVRSBJ
TkRFWCBJRiBOT1QgRVhJU1RTIFJlY29yZHNJbmRleCBPTiBSZWNvcmRzIChvYmplY3RTdG9yZUlE
LCBrZXkpOyIpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBSZWNvcmRz
SW5kZXggb24gUmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHN0ZDo6dW5pcXVlX3B0
cjxJREJEYXRhYmFzZU1ldGFkYXRhPiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0
ZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsTWV0YWRhdGEoKQogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwpAQCAtMTA2LDEyICsyMjIsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURC
RGF0YWJhc2VNZXRhZGF0YT4gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmNy
ZWF0ZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoIW1fc3FsaXRl
REItPmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgUmVjb3JkcyAob2JqZWN0U3RvcmVJRCBJ
TlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIGtleSBURVhUIENPTExBVEUgSURCS0VZ
IE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZh
bHVlIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7Ci0gICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IGNyZWF0ZSBSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1f
c3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAg
ICAgIG1fc3FsaXRlREIgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0KICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgSW5k
ZXhSZWNvcmRzIChpbmRleElEIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgb2Jq
ZWN0U3RvcmVJRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIGtleSBURVhUIENP
TExBVEUgSURCS0VZIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIHZhbHVlIE5PVCBOVUxMIE9O
IENPTkZMSUNUIEZBSUwpOyIpKSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0
ZSBJbmRleFJlY29yZHMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+
bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgbV9zcWxp
dGVEQiA9IG51bGxwdHI7CkBAIC0zMTcsNiArNDI3LDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJE
YXRhYmFzZU1ldGFkYXRhPiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Z2V0
T3JFCiAgICAgICAgIHJldHVybiBpZGJLZXlDb2xsYXRlKGFMZW5ndGgsIGEsIGJMZW5ndGgsIGIp
OwogICAgIH0pOwogCisgICAgaWYgKCFlbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpKSB7CisgICAg
ICAgIExPR19FUlJPUigiRXJyb3IgY3JlYXRpbmcgb3IgbWlncmF0aW5nIFJlY29yZHMgdGFibGUg
aW4gZGF0YWJhc2UiKTsKKyAgICAgICAgbV9zcWxpdGVEQiA9IG51bGxwdHI7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1l
dGFkYXRhPiBtZXRhZGF0YSA9IGV4dHJhY3RFeGlzdGluZ01ldGFkYXRhKCk7CiAgICAgaWYgKCFt
ZXRhZGF0YSkKICAgICAgICAgbWV0YWRhdGEgPSBjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxNZXRh
ZGF0YSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlU1FMaXRlLmgKaW5kZXggNjMwNmViYy4uOTljMjhhZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9y
ZVNRTGl0ZS5oCkBAIC0xMDEsNiArMTAxLDggQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gZXh0cmFjdEV4aXN0aW5nTWV0YWRhdGEo
KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gY3Jl
YXRlQW5kUG9wdWxhdGVJbml0aWFsTWV0YWRhdGEoKTsKIAorICAgIGJvb2wgZW5zdXJlVmFsaWRS
ZWNvcmRzVGFibGUoKTsKKwogICAgIGJvb2wgZGVsZXRlUmVjb3JkKFNRTGl0ZUlEQlRyYW5zYWN0
aW9uJiwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJik7
CiAgICAgYm9vbCB1bmNoZWNrZWRQdXRJbmRleFJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSUQs
IGludDY0X3QgaW5kZXhJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYga2V5VmFsdWUsIGNv
bnN0IFdlYkNvcmU6OklEQktleURhdGEmIGluZGV4S2V5KTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>