2012-02-07 16:49:27

by Weston Andros Adamson

[permalink] [raw]
Subject: [PATCH] NFS: add mount options 'v4.0' and 'v4.1'

Signed-off-by: Weston Andros Adamson <[email protected]>
---
Updated to add 'v4.0' as trond requested.

We'll talk about this change at connectathon.

This 'just works' with mount.nfs(8) -- v.* options are passed to the
kernel with no modifications needed.

fs/nfs/super.c | 14 +++++++++++++-
1 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index b88e023..d89cee2 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -80,7 +80,7 @@ enum {
Opt_cto, Opt_nocto,
Opt_ac, Opt_noac,
Opt_lock, Opt_nolock,
- Opt_v2, Opt_v3, Opt_v4,
+ Opt_v2, Opt_v3, Opt_v4, Opt_v4_0, Opt_v4_1,
Opt_udp, Opt_tcp, Opt_rdma,
Opt_acl, Opt_noacl,
Opt_rdirplus, Opt_nordirplus,
@@ -136,6 +136,8 @@ static const match_table_t nfs_mount_option_tokens = {
{ Opt_v2, "v2" },
{ Opt_v3, "v3" },
{ Opt_v4, "v4" },
+ { Opt_v4_0, "v4.0" },
+ { Opt_v4_1, "v4.1" },
{ Opt_udp, "udp" },
{ Opt_tcp, "tcp" },
{ Opt_rdma, "rdma" },
@@ -1172,6 +1174,16 @@ static int nfs_parse_mount_options(char *raw,
mnt->flags &= ~NFS_MOUNT_VER3;
mnt->version = 4;
break;
+ case Opt_v4_0:
+ mnt->flags &= ~NFS_MOUNT_VER3;
+ mnt->version = 4;
+ mnt->minorversion = 0;
+ break;
+ case Opt_v4_1:
+ mnt->flags &= ~NFS_MOUNT_VER3;
+ mnt->version = 4;
+ mnt->minorversion = 1;
+ break;
case Opt_udp:
mnt->flags &= ~NFS_MOUNT_TCP;
mnt->nfs_server.protocol = XPRT_TRANSPORT_UDP;
--
1.7.4.4



2012-02-07 18:41:56

by Boaz Harrosh

[permalink] [raw]
Subject: Re: [PATCH] NFS: add mount options 'v4.0' and 'v4.1'

On 02/07/2012 08:37 PM, Chuck Lever wrote:
>> If we are at it can we also have a "this-version-only" option which
>> disables "auto-negotation"
>
> That's what "vers=" already does. If "vers=" is specified, the mount
> point uses that version, or the mount operation fails if the server
> or client doesn't support the requested version. There is no version
> negotiation when "vers=" is specified.

I didn't know that I thought vers=4 will also try 3 if not supported by
Server

>
> What did you have in mind?
>

You are right I was thinking about if 4.1 I do not want 4.0

Thanks
Boaz

2012-02-07 19:05:58

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH] NFS: add mount options 'v4.0' and 'v4.1'



On 02/07/2012 01:48 PM, Myklebust, Trond wrote:
> On Tue, 2012-02-07 at 13:41 -0500, Trond Myklebust wrote:
>> That said, I see the 'vers=4' being reserved for auto-negotiation of
>> minor version, and the 'vers=4.x' as requiring a specific minor version
>> number.
>> The way auto-negotiation is supposed to work is laid out in
>> RFC3530(-bis): the client attempts the largest minor version that it
>> supports, and the server replies with an OK, or a MINOR_VERSION_MISMATCH
>> depending on whether it supports that minor version or not. If not, the
>> client retries with the next largest minor version, .... rince, repeat
>> until successful...
>
> BTW: There is no reason why we should need to do this auto-negotiation
> in kernel space. As we've learned with major version negotiation, it can
> be more flexible to just teach the 'mount' command to do the actual
> probing, since that allows the user better control over the process via
> global configuration files...
>
+1

Its also much easier to debug and fix bugs... People are much more willing
to take a mount command update than a kernel update...

steved.

2012-02-07 18:30:27

by Adamson, Dros

[permalink] [raw]
Subject: Re: [PATCH] NFS: add mount options 'v4.0' and 'v4.1'


On Feb 7, 2012, at 1:21 PM, Boaz Harrosh wrote:

> On 02/07/2012 06:59 PM, Chuck Lever wrote:
>> Hi-
>>
>> On Feb 7, 2012, at 11:49 AM, Weston Andros Adamson wrote:
>>>
>>> NFS: add mount options 'v4.0' and 'v4.1'
>
> Good god thanks, that'll be nice.
>
> Why did we have to suffer for 5 years without it? ;-)
>
>>> Signed-off-by: Weston Andros Adamson <[email protected]>
>>> ---
>>> Updated to add 'v4.0' as trond requested.
>>>
>>> We'll talk about this change at connectathon.
>>>
>>> This 'just works' with mount.nfs(8) -- v.* options are passed to the
>>> kernel with no modifications needed.
>>
>> I'm more concerned about version auto-negotation.
>>
>
> If we are at it can we also have a "this-version-only" option which
> disables "auto-negotation"

Trond seems to have a plan for this. I'll defer to him.

-dros

>
> I know that's an hard one
>
> OK we'll talk at CON12.
>
> Thanks Andy
> Boaz
>
>>>
>>> fs/nfs/super.c | 14 +++++++++++++-
>>> 1 files changed, 13 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
>>> index b88e023..d89cee2 100644
>>> --- a/fs/nfs/super.c
>>> +++ b/fs/nfs/super.c
>>> @@ -80,7 +80,7 @@ enum {
>>> Opt_cto, Opt_nocto,
>>> Opt_ac, Opt_noac,
>>> Opt_lock, Opt_nolock,
>>> - Opt_v2, Opt_v3, Opt_v4,
>>> + Opt_v2, Opt_v3, Opt_v4, Opt_v4_0, Opt_v4_1,
>>> Opt_udp, Opt_tcp, Opt_rdma,
>>> Opt_acl, Opt_noacl,
>>> Opt_rdirplus, Opt_nordirplus,
>>> @@ -136,6 +136,8 @@ static const match_table_t nfs_mount_option_tokens = {
>>> { Opt_v2, "v2" },
>>> { Opt_v3, "v3" },
>>> { Opt_v4, "v4" },
>>> + { Opt_v4_0, "v4.0" },
>>> + { Opt_v4_1, "v4.1" },
>>> { Opt_udp, "udp" },
>>> { Opt_tcp, "tcp" },
>>> { Opt_rdma, "rdma" },
>>> @@ -1172,6 +1174,16 @@ static int nfs_parse_mount_options(char *raw,
>>> mnt->flags &= ~NFS_MOUNT_VER3;
>>> mnt->version = 4;
>>> break;
>>> + case Opt_v4_0:
>>> + mnt->flags &= ~NFS_MOUNT_VER3;
>>> + mnt->version = 4;
>>> + mnt->minorversion = 0;
>>> + break;
>>> + case Opt_v4_1:
>>> + mnt->flags &= ~NFS_MOUNT_VER3;
>>> + mnt->version = 4;
>>> + mnt->minorversion = 1;
>>> + break;
>>> case Opt_udp:
>>> mnt->flags &= ~NFS_MOUNT_TCP;
>>> mnt->nfs_server.protocol = XPRT_TRANSPORT_UDP;
>>> --
>>> 1.7.4.4
>>>
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>>> the body of a message to [email protected]
>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>


Attachments:
smime.p7s (1.34 kB)

2012-02-07 16:59:16

by Chuck Lever III

[permalink] [raw]
Subject: Re: [PATCH] NFS: add mount options 'v4.0' and 'v4.1'

Hi-

On Feb 7, 2012, at 11:49 AM, Weston Andros Adamson wrote:

> Signed-off-by: Weston Andros Adamson <[email protected]>
> ---
> Updated to add 'v4.0' as trond requested.
>
> We'll talk about this change at connectathon.
>
> This 'just works' with mount.nfs(8) -- v.* options are passed to the
> kernel with no modifications needed.

I'm more concerned about version auto-negotation.

>
> fs/nfs/super.c | 14 +++++++++++++-
> 1 files changed, 13 insertions(+), 1 deletions(-)
>
> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
> index b88e023..d89cee2 100644
> --- a/fs/nfs/super.c
> +++ b/fs/nfs/super.c
> @@ -80,7 +80,7 @@ enum {
> Opt_cto, Opt_nocto,
> Opt_ac, Opt_noac,
> Opt_lock, Opt_nolock,
> - Opt_v2, Opt_v3, Opt_v4,
> + Opt_v2, Opt_v3, Opt_v4, Opt_v4_0, Opt_v4_1,
> Opt_udp, Opt_tcp, Opt_rdma,
> Opt_acl, Opt_noacl,
> Opt_rdirplus, Opt_nordirplus,
> @@ -136,6 +136,8 @@ static const match_table_t nfs_mount_option_tokens = {
> { Opt_v2, "v2" },
> { Opt_v3, "v3" },
> { Opt_v4, "v4" },
> + { Opt_v4_0, "v4.0" },
> + { Opt_v4_1, "v4.1" },
> { Opt_udp, "udp" },
> { Opt_tcp, "tcp" },
> { Opt_rdma, "rdma" },
> @@ -1172,6 +1174,16 @@ static int nfs_parse_mount_options(char *raw,
> mnt->flags &= ~NFS_MOUNT_VER3;
> mnt->version = 4;
> break;
> + case Opt_v4_0:
> + mnt->flags &= ~NFS_MOUNT_VER3;
> + mnt->version = 4;
> + mnt->minorversion = 0;
> + break;
> + case Opt_v4_1:
> + mnt->flags &= ~NFS_MOUNT_VER3;
> + mnt->version = 4;
> + mnt->minorversion = 1;
> + break;
> case Opt_udp:
> mnt->flags &= ~NFS_MOUNT_TCP;
> mnt->nfs_server.protocol = XPRT_TRANSPORT_UDP;
> --
> 1.7.4.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html

--
Chuck Lever
chuck[dot]lever[at]oracle[dot]com





2012-02-07 18:37:58

by Chuck Lever III

[permalink] [raw]
Subject: Re: [PATCH] NFS: add mount options 'v4.0' and 'v4.1'


On Feb 7, 2012, at 1:21 PM, Boaz Harrosh wrote:

> On 02/07/2012 06:59 PM, Chuck Lever wrote:
>> Hi-
>>
>> On Feb 7, 2012, at 11:49 AM, Weston Andros Adamson wrote:
>>>
>>> NFS: add mount options 'v4.0' and 'v4.1'
>
> Good god thanks, that'll be nice.
>
> Why did we have to suffer for 5 years without it? ;-)
>
>>> Signed-off-by: Weston Andros Adamson <[email protected]>
>>> ---
>>> Updated to add 'v4.0' as trond requested.
>>>
>>> We'll talk about this change at connectathon.
>>>
>>> This 'just works' with mount.nfs(8) -- v.* options are passed to the
>>> kernel with no modifications needed.
>>
>> I'm more concerned about version auto-negotation.
>>
>
> If we are at it can we also have a "this-version-only" option which
> disables "auto-negotation"

That's what "vers=" already does. If "vers=" is specified, the mount point uses that version, or the mount operation fails if the server or client doesn't support the requested version. There is no version negotiation when "vers=" is specified.

What did you have in mind?

> I know that's an hard one
>
> OK we'll talk at CON12.
>
> Thanks Andy
> Boaz
>
>>>
>>> fs/nfs/super.c | 14 +++++++++++++-
>>> 1 files changed, 13 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
>>> index b88e023..d89cee2 100644
>>> --- a/fs/nfs/super.c
>>> +++ b/fs/nfs/super.c
>>> @@ -80,7 +80,7 @@ enum {
>>> Opt_cto, Opt_nocto,
>>> Opt_ac, Opt_noac,
>>> Opt_lock, Opt_nolock,
>>> - Opt_v2, Opt_v3, Opt_v4,
>>> + Opt_v2, Opt_v3, Opt_v4, Opt_v4_0, Opt_v4_1,
>>> Opt_udp, Opt_tcp, Opt_rdma,
>>> Opt_acl, Opt_noacl,
>>> Opt_rdirplus, Opt_nordirplus,
>>> @@ -136,6 +136,8 @@ static const match_table_t nfs_mount_option_tokens = {
>>> { Opt_v2, "v2" },
>>> { Opt_v3, "v3" },
>>> { Opt_v4, "v4" },
>>> + { Opt_v4_0, "v4.0" },
>>> + { Opt_v4_1, "v4.1" },
>>> { Opt_udp, "udp" },
>>> { Opt_tcp, "tcp" },
>>> { Opt_rdma, "rdma" },
>>> @@ -1172,6 +1174,16 @@ static int nfs_parse_mount_options(char *raw,
>>> mnt->flags &= ~NFS_MOUNT_VER3;
>>> mnt->version = 4;
>>> break;
>>> + case Opt_v4_0:
>>> + mnt->flags &= ~NFS_MOUNT_VER3;
>>> + mnt->version = 4;
>>> + mnt->minorversion = 0;
>>> + break;
>>> + case Opt_v4_1:
>>> + mnt->flags &= ~NFS_MOUNT_VER3;
>>> + mnt->version = 4;
>>> + mnt->minorversion = 1;
>>> + break;
>>> case Opt_udp:
>>> mnt->flags &= ~NFS_MOUNT_TCP;
>>> mnt->nfs_server.protocol = XPRT_TRANSPORT_UDP;
>>> --
>>> 1.7.4.4
>>>
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>>> the body of a message to [email protected]
>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html

--
Chuck Lever
chuck[dot]lever[at]oracle[dot]com





2012-02-07 18:48:19

by Myklebust, Trond

[permalink] [raw]
Subject: Re: [PATCH] NFS: add mount options 'v4.0' and 'v4.1'

T24gVHVlLCAyMDEyLTAyLTA3IGF0IDEzOjQxIC0wNTAwLCBUcm9uZCBNeWtsZWJ1c3Qgd3JvdGU6
DQo+IFRoYXQgc2FpZCwgSSBzZWUgdGhlICd2ZXJzPTQnIGJlaW5nIHJlc2VydmVkIGZvciBhdXRv
LW5lZ290aWF0aW9uIG9mDQo+IG1pbm9yIHZlcnNpb24sIGFuZCB0aGUgJ3ZlcnM9NC54JyBhcyBy
ZXF1aXJpbmcgYSBzcGVjaWZpYyBtaW5vciB2ZXJzaW9uDQo+IG51bWJlci4NCj4gVGhlIHdheSBh
dXRvLW5lZ290aWF0aW9uIGlzIHN1cHBvc2VkIHRvIHdvcmsgaXMgbGFpZCBvdXQgaW4NCj4gUkZD
MzUzMCgtYmlzKTogdGhlIGNsaWVudCBhdHRlbXB0cyB0aGUgbGFyZ2VzdCBtaW5vciB2ZXJzaW9u
IHRoYXQgaXQNCj4gc3VwcG9ydHMsIGFuZCB0aGUgc2VydmVyIHJlcGxpZXMgd2l0aCBhbiBPSywg
b3IgYSBNSU5PUl9WRVJTSU9OX01JU01BVENIDQo+IGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0IHN1
cHBvcnRzIHRoYXQgbWlub3IgdmVyc2lvbiBvciBub3QuIElmIG5vdCwgdGhlDQo+IGNsaWVudCBy
ZXRyaWVzIHdpdGggdGhlIG5leHQgbGFyZ2VzdCBtaW5vciB2ZXJzaW9uLCAuLi4uIHJpbmNlLCBy
ZXBlYXQNCj4gdW50aWwgc3VjY2Vzc2Z1bC4uLg0KDQpCVFc6IFRoZXJlIGlzIG5vIHJlYXNvbiB3
aHkgd2Ugc2hvdWxkIG5lZWQgdG8gZG8gdGhpcyBhdXRvLW5lZ290aWF0aW9uDQppbiBrZXJuZWwg
c3BhY2UuIEFzIHdlJ3ZlIGxlYXJuZWQgd2l0aCBtYWpvciB2ZXJzaW9uIG5lZ290aWF0aW9uLCBp
dCBjYW4NCmJlIG1vcmUgZmxleGlibGUgdG8ganVzdCB0ZWFjaCB0aGUgJ21vdW50JyBjb21tYW5k
IHRvIGRvIHRoZSBhY3R1YWwNCnByb2JpbmcsIHNpbmNlIHRoYXQgYWxsb3dzIHRoZSB1c2VyIGJl
dHRlciBjb250cm9sIG92ZXIgdGhlIHByb2Nlc3MgdmlhDQpnbG9iYWwgY29uZmlndXJhdGlvbiBm
aWxlcy4uLg0KDQotLSANClRyb25kIE15a2xlYnVzdA0KTGludXggTkZTIGNsaWVudCBtYWludGFp
bmVyDQoNCk5ldEFwcA0KVHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb20NCnd3dy5uZXRhcHAuY29t
DQoNCg==

2012-02-07 18:22:13

by Boaz Harrosh

[permalink] [raw]
Subject: Re: [PATCH] NFS: add mount options 'v4.0' and 'v4.1'

On 02/07/2012 06:59 PM, Chuck Lever wrote:
> Hi-
>
> On Feb 7, 2012, at 11:49 AM, Weston Andros Adamson wrote:
>>
>> NFS: add mount options 'v4.0' and 'v4.1'

Good god thanks, that'll be nice.

Why did we have to suffer for 5 years without it? ;-)

>> Signed-off-by: Weston Andros Adamson <[email protected]>
>> ---
>> Updated to add 'v4.0' as trond requested.
>>
>> We'll talk about this change at connectathon.
>>
>> This 'just works' with mount.nfs(8) -- v.* options are passed to the
>> kernel with no modifications needed.
>
> I'm more concerned about version auto-negotation.
>

If we are at it can we also have a "this-version-only" option which
disables "auto-negotation"

I know that's an hard one

OK we'll talk at CON12.

Thanks Andy
Boaz

>>
>> fs/nfs/super.c | 14 +++++++++++++-
>> 1 files changed, 13 insertions(+), 1 deletions(-)
>>
>> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
>> index b88e023..d89cee2 100644
>> --- a/fs/nfs/super.c
>> +++ b/fs/nfs/super.c
>> @@ -80,7 +80,7 @@ enum {
>> Opt_cto, Opt_nocto,
>> Opt_ac, Opt_noac,
>> Opt_lock, Opt_nolock,
>> - Opt_v2, Opt_v3, Opt_v4,
>> + Opt_v2, Opt_v3, Opt_v4, Opt_v4_0, Opt_v4_1,
>> Opt_udp, Opt_tcp, Opt_rdma,
>> Opt_acl, Opt_noacl,
>> Opt_rdirplus, Opt_nordirplus,
>> @@ -136,6 +136,8 @@ static const match_table_t nfs_mount_option_tokens = {
>> { Opt_v2, "v2" },
>> { Opt_v3, "v3" },
>> { Opt_v4, "v4" },
>> + { Opt_v4_0, "v4.0" },
>> + { Opt_v4_1, "v4.1" },
>> { Opt_udp, "udp" },
>> { Opt_tcp, "tcp" },
>> { Opt_rdma, "rdma" },
>> @@ -1172,6 +1174,16 @@ static int nfs_parse_mount_options(char *raw,
>> mnt->flags &= ~NFS_MOUNT_VER3;
>> mnt->version = 4;
>> break;
>> + case Opt_v4_0:
>> + mnt->flags &= ~NFS_MOUNT_VER3;
>> + mnt->version = 4;
>> + mnt->minorversion = 0;
>> + break;
>> + case Opt_v4_1:
>> + mnt->flags &= ~NFS_MOUNT_VER3;
>> + mnt->version = 4;
>> + mnt->minorversion = 1;
>> + break;
>> case Opt_udp:
>> mnt->flags &= ~NFS_MOUNT_TCP;
>> mnt->nfs_server.protocol = XPRT_TRANSPORT_UDP;
>> --
>> 1.7.4.4
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>


2012-02-07 18:41:32

by Myklebust, Trond

[permalink] [raw]
Subject: Re: [PATCH] NFS: add mount options 'v4.0' and 'v4.1'

T24gVHVlLCAyMDEyLTAyLTA3IGF0IDE4OjMwICswMDAwLCBBZGFtc29uLCBEcm9zIHdyb3RlOg0K
PiBPbiBGZWIgNywgMjAxMiwgYXQgMToyMSBQTSwgQm9heiBIYXJyb3NoIHdyb3RlOg0KPiANCj4g
PiBPbiAwMi8wNy8yMDEyIDA2OjU5IFBNLCBDaHVjayBMZXZlciB3cm90ZToNCj4gPj4gSGktDQo+
ID4+IA0KPiA+PiBPbiBGZWIgNywgMjAxMiwgYXQgMTE6NDkgQU0sIFdlc3RvbiBBbmRyb3MgQWRh
bXNvbiB3cm90ZToNCj4gPj4+IA0KPiA+Pj4gTkZTOiBhZGQgbW91bnQgb3B0aW9ucyAndjQuMCcg
YW5kICd2NC4xJw0KPiA+IA0KPiA+IEdvb2QgZ29kIHRoYW5rcywgdGhhdCdsbCBiZSBuaWNlLg0K
PiA+IA0KPiA+IFdoeSBkaWQgd2UgaGF2ZSB0byBzdWZmZXIgZm9yIDUgeWVhcnMgd2l0aG91dCBp
dD8gOy0pDQo+ID4gDQo+ID4+PiBTaWduZWQtb2ZmLWJ5OiBXZXN0b24gQW5kcm9zIEFkYW1zb24g
PGRyb3NAbmV0YXBwLmNvbT4NCj4gPj4+IC0tLQ0KPiA+Pj4gVXBkYXRlZCB0byBhZGQgJ3Y0LjAn
IGFzIHRyb25kIHJlcXVlc3RlZC4NCj4gPj4+IA0KPiA+Pj4gV2UnbGwgdGFsayBhYm91dCB0aGlz
IGNoYW5nZSBhdCBjb25uZWN0YXRob24uDQo+ID4+PiANCj4gPj4+IFRoaXMgJ2p1c3Qgd29ya3Mn
IHdpdGggbW91bnQubmZzKDgpIC0tIHYuKiBvcHRpb25zIGFyZSBwYXNzZWQgdG8gdGhlIA0KPiA+
Pj4ga2VybmVsIHdpdGggbm8gbW9kaWZpY2F0aW9ucyBuZWVkZWQuDQo+ID4+IA0KPiA+PiBJJ20g
bW9yZSBjb25jZXJuZWQgYWJvdXQgdmVyc2lvbiBhdXRvLW5lZ290YXRpb24uDQo+ID4+IA0KPiA+
IA0KPiA+IElmIHdlIGFyZSBhdCBpdCBjYW4gd2UgYWxzbyBoYXZlIGEgInRoaXMtdmVyc2lvbi1v
bmx5IiBvcHRpb24gd2hpY2gNCj4gPiBkaXNhYmxlcyAiYXV0by1uZWdvdGF0aW9uIg0KPiANCj4g
VHJvbmQgc2VlbXMgdG8gaGF2ZSBhIHBsYW4gZm9yIHRoaXMuICBJJ2xsIGRlZmVyIHRvIGhpbS4N
Cg0KVGhhdCdzIGEgbG9uZ2VyIHRlcm0gZWZmb3J0LiBJIGRvbid0IHRoaW5rIHdlIG5lZWQgdG8g
Y2FyZSB1bnRpbCB3ZSdyZQ0KcmVhZHkgdG8gdGFrZSBORlN2NC4xIG91dCBvZiBFWFBFUklNRU5U
QUwgc3RhdHVzLg0KDQpUaGF0IHNhaWQsIEkgc2VlIHRoZSAndmVycz00JyBiZWluZyByZXNlcnZl
ZCBmb3IgYXV0by1uZWdvdGlhdGlvbiBvZg0KbWlub3IgdmVyc2lvbiwgYW5kIHRoZSAndmVycz00
LngnIGFzIHJlcXVpcmluZyBhIHNwZWNpZmljIG1pbm9yIHZlcnNpb24NCm51bWJlci4NClRoZSB3
YXkgYXV0by1uZWdvdGlhdGlvbiBpcyBzdXBwb3NlZCB0byB3b3JrIGlzIGxhaWQgb3V0IGluDQpS
RkMzNTMwKC1iaXMpOiB0aGUgY2xpZW50IGF0dGVtcHRzIHRoZSBsYXJnZXN0IG1pbm9yIHZlcnNp
b24gdGhhdCBpdA0Kc3VwcG9ydHMsIGFuZCB0aGUgc2VydmVyIHJlcGxpZXMgd2l0aCBhbiBPSywg
b3IgYSBNSU5PUl9WRVJTSU9OX01JU01BVENIDQpkZXBlbmRpbmcgb24gd2hldGhlciBpdCBzdXBw
b3J0cyB0aGF0IG1pbm9yIHZlcnNpb24gb3Igbm90LiBJZiBub3QsIHRoZQ0KY2xpZW50IHJldHJp
ZXMgd2l0aCB0aGUgbmV4dCBsYXJnZXN0IG1pbm9yIHZlcnNpb24sIC4uLi4gcmluY2UsIHJlcGVh
dA0KdW50aWwgc3VjY2Vzc2Z1bC4uLg0KDQotLSANClRyb25kIE15a2xlYnVzdA0KTGludXggTkZT
IGNsaWVudCBtYWludGFpbmVyDQoNCk5ldEFwcA0KVHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb20N
Cnd3dy5uZXRhcHAuY29tDQoNCg==