From mboxrd@z Thu Jan 1 00:00:00 1970
Return-path:
Content-Type: multipart/related;
boundary="_92f4e339-10f5-4024-9b03-c551a309bc4f_"
Subject: Re: [PATCH] hwmon: (max6650) Allow fan shutdown and a more intuitive
mode interface
To: Guenter Roeck ,
References: <1471334034-14894-1-git-send-email-mike.looijmans@topic.nl>
CC:
From: Mike Looijmans
Message-ID: <57B6A8BF.2080508@topic.nl>
Date: Fri, 19 Aug 2016 08:35:43 +0200
MIME-Version: 1.0
In-Reply-To:
List-ID:
--_92f4e339-10f5-4024-9b03-c551a309bc4f_
Content-Type: text/html; charset="utf-8"; format=flowed
Content-Transfer-Encoding: quoted-printable
On 19-08-16 04:54, Guenter Roeck wrote:
> On 08/16/2016 12:53 AM, Mike Looijmans wrote:
>> The fan =
can be stopped by writing "0" to fan1_target in sysfs.
>>
&=
gt;> Writing non-zero values to fan1_target or pwm1 in sysfs automatical=
ly
>> selects the corresponding control mode (closed or open loo=
p).
>>
>> This allows userspace applications to contr=
ol the fan speed without
>> the need to know specific details of=
the controller (like the fact
>> that fan1_target does not take=
effect when pwm1_enable is set to
>> anything but "2"). Early i=
nitialization of the fan controller prevents
>> overheating, for=
example when resetting the board while the fan was
>> completel=
y turned off.
>>
>
> But this is the normal hwmo=
n ABI. It should not be a surprise.
> On the other side, changing t=
he mode automatically as side effect
> _is_ a surprise.
=
I was under the impression that the pwm*_enable=3D2 mode was intended for <=
br />temperature controlled fans. Reading the docs for a bunch of drivers r=
eveals
that apart from "0=3Dfull on" and "1=3Dmanual pwm" there is no=
standard whatsoever
for the meaning of this value, each driver assig=
ns its own, forcing userspace
to know all the details of a particular=
model. So indeed, I'll have to change
that. I'll have to wri=
te software specific for this fan then, it cannot be
generic with the=
current ABI.
I was actually aiming for supporting "off" mode, s=
o I could later (when the
new hardware arrives) also control a relate=
d power supply from this driver.
Guess I should just add a mode =
"3" to implement "off".
>
>> Signed-off-by: Mike L=
ooijmans <mike.looijmans@topic.nl>
>> ---
>> Th=
is patch requires the devicetree support patch for the max6650.
>&g=
t;
>> Changes the functionality and interface of the driver, to =
be able to
>> initialize the chip at boot, and allows userspace =
control without
>> requiring hardware knowledge.
>>>> .../devicetree/bindings/hwmon/max6650.txt &n=
bsp; | 5 +
>> &nb=
sp;Documentation/hwmon/max6650 &n=
bsp;  =
; | 5 +-
>> drivers/hwmon/max=
6650.c &n=
bsp;  =
; | 153 +++++++++++++--------
>> 3 files =
changed, 106 insertions(+), 57 deletions(-)
>>
>> dif=
f --git a/Documentation/devicetree/bindings/hwmon/max6650.txt
>>=
b/Documentation/devicetree/bindings/hwmon/max6650.txt
>> index =
2e46e69..724ab3a 100644
>> --- a/Documentation/devicetree/bindin=
gs/hwmon/max6650.txt
>> +++ b/Documentation/devicetree/bindings/=
hwmon/max6650.txt
>> @@ -13,6 +13,10 @@ Optional properties, def=
ault is to retain the chip's
>> current setting:
>&g=
t; - maxim,fan-prescale : Pre-scaling value, as per datasheet [=
1]. Lower values
>> &n=
bsp; allow more fine-grained control of slower=
fans.
>> =
Valid: 1, 2, 4, 8, 16.
>> +- maxim,fan-t=
arget-rpm: Initial requested fan rotation speed. If specified,
>>=
; the
>> +  =
; driver selects closed-loop mode and the requested speed.
=
>> + &nbs=
p;This ensures the fan is already running before userspace
>> + =
takes ove=
r.
>>
>
> Needs to be separate patch and be appr=
oved by devicetree maintainers. Overall,
> it would be better to ma=
ke have the devicetree changces as single patch.
Okay.
How do they get synchronized then, i.e. what if the documentation gets approved but the actual implementation does not?
>> &n=
bsp;Example:
>> fan-max6650: max66=
50@1b {
>> @@ -20,4 +24,5 @@ Example:
>> =
compatible =3D "maxim,max6650";>> maxim,fa=
n-microvolt =3D <12000000>;
>> &nb=
sp; maxim,fan-prescale =3D <4>;
>> =
+ maxim,fan-target-rpm =3D <12=
00>;
>> };
>> diff -=
-git a/Documentation/hwmon/max6650 b/Documentation/hwmon/max6650
>&=
gt; index 58d9644..53e308b 100644
>> --- a/Documentation/hwmon/m=
ax6650
>> +++ b/Documentation/hwmon/max6650
>> @@ -33=
,9 +33,12 @@ fan2_input ro "
>&=
gt; fan3_input ro "
>>=
fan4_input ro "
>> &n=
bsp;fan1_target rw desired fan speed in=
RPM (closed loop mode only)
>> + =
Set to 0 to stop the fan. Writing any o=
ther value sets
>> + &=
nbsp; the regulator mode to "closed loop".
>> &=
nbsp;pwm1_enable rw regulator mode, 0=
=3Dfull on, 1=3Dopen loop, 2=3Dclosed loop
>> pwm1 &=
nbsp; rw relative speed (0-2=
55), 255=3Dmax. speed.
>> - =
Used in open loop mode only.
>> + =
Set to 0 =
to stop the fan. Writing any other value sets
>> + &=
nbsp; the regulator mode to =
"open loop".
>
> The mode should really be selected using p=
wm1_enable. I don't like the idea
> of automatically changing i=
t as side effect.
As above, will do.
>> f=
an1_div rw sets the speed range the inp=
uts can handle. Legal
>> &nb=
sp; values are 1, 2, 4, and 8. Use lower=
values for
>> &=
nbsp; faster fans.
>> diff --git a/driver=
s/hwmon/max6650.c b/drivers/hwmon/max6650.c
>> index 6beb62c..d4=
0756a 100644
>> --- a/drivers/hwmon/max6650.c
>> +++ =
b/drivers/hwmon/max6650.c
>> @@ -185,6 +185,35 @@ static struct =
max6650_data
>> *max6650_update_device(struct device *dev)
=
>> return data;
>> }>>
>> +static bool max6650_is_powerdown(const struct m=
ax6650_data *data)
>> +{
>> + retur=
n (data->config & MAX6650_CFG_MODE_MASK) =3D=3D MAX6650_CFG_MODE_OFF=
;
>> +}
>> +
>> +/*
>> + * Chan=
ge the operating mode of the chip (if needed).
>> + * mode is on=
e of the MAX6650_CFG_MODE_* values.
>> + */
>> +stati=
c int max6650_set_operating_mode(struct max6650_data *data, u8 mode)
&=
gt;> +{
>> + int result;
>> + &n=
bsp; u8 config =3D data->config;
>> +
>>=
; + if (mode =3D=3D (config & MAX6650_CFG_MODE_MASK))=
>> + return 0;
&=
gt;> +
>> + config =3D (config & ~MAX66=
50_CFG_MODE_MASK) | mode;
>> +
>> +  =
;result =3D i2c_smbus_write_byte_data(data->client, MAX6650_REG_CONFIG,<=
br />>> +  =
; co=
nfig);
>> + if (result < 0)
>> +=
return result;
>> +>> + data->config =3D config;
>> =
+
>> + return 0;
>> +}
>>=
; +
>> static ssize_t get_fan(struct device *dev, struct d=
evice_attribute *devattr,
>>  =
; char *buf)
>> {
>> @@ -258,26 +287,26 @@ static ssize_t get_t=
arget(struct device *dev, struct
>> device_attribute *devattr,>> * FanSpe=
ed =3D KSCALE x fCLK / [256 x (KTACH + 1)]
>> =
*
>> * the=
n multiply by 60 to give rpm.
>> + *
>> + * When not running, report target to b=
e "0".
>> */
>>>> - kscale =3D DIV_FROM_REG(data->config);<=
br />>> - ktach =3D data->speed;
>> -=
rpm =3D 60 * kscale * clock / (256 * (ktach + 1));
=
>> + if (max6650_is_powerdown(data))
>> =
+ rpm =3D 0;
>> + &nbs=
p; else {
>> + &n=
bsp;kscale =3D DIV_FROM_REG(data->config);
>> + &=
nbsp; ktach =3D data->speed;
>> + &nbs=
p; rpm =3D 60 * kscale * clock / (256 * =
(ktach + 1));
>> + }
>>  =
; return sprintf(buf, "%d\n", rpm);
>> }<=
br />>>
>> -static ssize_t set_target(struct device *dev, =
struct device_attribute
>> *devattr,
>> -  =
; const char *bu=
f, size_t count)
>> +static int max6650_set_target(struct max665=
0_data *data, unsigned long rpm)
>> {
>> - &nbs=
p; struct max6650_data *data =3D dev_get_drvdata(dev);
>=
> - struct i2c_client *client =3D data->client;
>> int kscale, ktach;
>> -=
unsigned long rpm;
>> - int=
err;
>>
>> - err =3D kstrtoul(buf,=
10, &rpm);
>> - if (err)
>> - =
return err;
>> +  =
; if (rpm =3D=3D 0)
>> + &nbs=
p; return max6650_set_operating_mode(data, MAX6650_CFG_MODE_OFF)=
;
>>
>> rpm =3D clamp_v=
al(rpm, FAN_RPM_MIN, FAN_RPM_MAX);
>>
>> @@ -288,8 +3=
17,6 @@ static ssize_t set_target(struct device *dev, struct
>> =
device_attribute *devattr,
>> &nbs=
p;* KTACH =3D [(fCLK x KSCALE) / (256 x FanSpeed)] =
- 1
>> */
>>
>> - mutex_lock(&data->update_lock);
&=
gt;> -
>> kscale =3D DIV_FROM_R=
EG(data->config);
>> ktach =3D =
((clock * kscale) / (256 * rpm / 60)) - 1;
>> =
if (ktach < 0)
>> @@ -298,7 +325,25 @@ static ssi=
ze_t set_target(struct device *dev, struct
>> device_attribute *=
devattr,
>> &nbs=
p;ktach =3D 255;
>> data->speed=
=3D ktach;
>>
>> - i2c_smbus_write=
_byte_data(client, MAX6650_REG_SPEED, data->speed);
>> + &nbs=
p; i2c_smbus_write_byte_data(data->client, MAX6650_REG_SPEED,=
data->speed);
>> +
>> + return =
max6650_set_operating_mode(data, MAX6650_CFG_MODE_CLOSED_LOOP);
>&g=
t; +}
>> +
>> +static ssize_t set_target(struct devic=
e *dev, struct device_attribute
>> *devattr,
>> + &nb=
sp; const =
char *buf, size_t count)
>> +{
>> +  =
;struct max6650_data *data =3D dev_get_drvdata(dev);
>> + =
unsigned long rpm;
>> + int err;>> +
>> + err =3D kstrtoul(buf, 10, =
&rpm);
>> + if (err)
>> +  =
; return err;
>> +
>&=
gt; + mutex_lock(&data->update_lock);
>>=
; +
>> + err =3D max6650_set_target(data, rpm)=
;
>>
>> mutex_unlock(&a=
mp;data->update_lock);
>>
>> @@ -320,17 +365,21 @@=
static ssize_t get_pwm(struct device *dev, struct
>> device_att=
ribute *devattr,
>> int pwm;
=
>> struct max6650_data *data =3D max665=
0_update_device(dev);
>>
>> - /*
>> - * Useful range for dac is 0-180 for 1=
2V fans and 0-76 for 5V fans.
>> - * Low=
er DAC values mean higher speeds.
>> - *=
/
>> - if (data->config & MAX6650_CFG_V=
12)
>> - pwm =3D 255 -=
(255 * (int)data->dac)/180;
>> - else
>> - pwm =3D 255 - (255 * =
(int)data->dac)/76;
>> -
>> - if=
(pwm < 0)
>> + if (max6650_is_powerdown(da=
ta))
>> pw=
m =3D 0;
>> + else {
>> + &nb=
sp; /*
>> +  =
; * Useful range for dac is 0-180 for 12V fans and 0=
-76 for 5V
>> + =
* fans. Lower DAC values mean higher speeds.
>> + &n=
bsp; */
>> + &nbs=
p; if (data->config & MAX6650_CFG_V12)
>>=
; + pwm =
=3D 255 - (255 * (int)data->dac)/180;
>> + =
else
>> + =
pwm =3D 255 - (255 * (int)data->dac)=
/76;
>> +
>> + &n=
bsp;if (pwm < 0)
>> + &nb=
sp; pwm =3D 0;
>> + }>>
>> return sprintf(buf=
, "%d\n", pwm);
>> }
>> @@ -351,16 +400,20 @@ s=
tatic ssize_t set_pwm(struct device *dev, struct
>> device_attri=
bute *devattr,
>>
>> mu=
tex_lock(&data->update_lock);
>>
>> - &n=
bsp; if (data->config & MAX6650_CFG_V12)
>> - =
data->dac =3D 180 - (180 * pwm)/255;=
>> - else
>> - &=
nbsp; data->dac =3D 76 - (76 * pwm)/255;
>> =
-
>> - i2c_smbus_write_byte_data(client, MAX66=
50_REG_DAC, data->dac);
>> + if (pwm =3D=3D=
0)
>> + err =3D max66=
50_set_operating_mode(data, MAX6650_CFG_MODE_OFF);
>> + &n=
bsp; else {
>> + =
if (data->config & MAX6650_CFG_V12)
>> + &nbs=
p; data->dac =3D 180 - (1=
80 * pwm)/255;
>> + el=
se
>> + &n=
bsp; data->dac =3D 76 - (76 * pwm)/255;
>> +  =
; i2c_smbus_write_byte_data(client, MAX6650_RE=
G_DAC, data->dac);
>> + &=
nbsp;err =3D max6650_set_operating_mode(data, MAX6650_CFG_MODE_OPEN_LOOP);<=
br />>> + }
>>
>>  =
; mutex_unlock(&data->update_lock);
>>>> - return count;
>> + =
return err < 0 ? err : count;
>> }
>><=
br />>> /*
>> @@ -385,25 +438,24 @@ static ssize_t s=
et_enable(struct device *dev, struct
>> device_attribute *devatt=
r,
>> &nbs=
p; const char *buf, size_t count)
>>=
; {
>> struct max6650_data *=
data =3D dev_get_drvdata(dev);
>> - struct i2c=
_client *client =3D data->client;
>> - int =
max6650_modes[3] =3D {0, 3, 2};
>>  =
;unsigned long mode;
>> int err;>> + const u8 max6650_modes[3] =3D {
>&=
gt; + MAX6650_CFG_MODE_ON,
&=
gt;> + MAX6650_CFG_MODE_OPEN_L=
OOP,
>> + MAX6650_CFG_=
MODE_CLOSED_LOOP
>> + =
};
>>
>> err =3D kstrto=
ul(buf, 10, &mode);
>> if (err=
)
>> retur=
n err;
>>
>> - if (mode > 2)
>> + if (mode >=3D ARRAY_SIZE(max6650_modes))<=
br />>> return =
-EINVAL;
>>
>> mutex_lo=
ck(&data->update_lock);
>>
>> - &n=
bsp;data->config =3D i2c_smbus_read_byte_data(client, MAX6650_REG_CONFIG=
);
>> - data->config =3D (data->config &=
amp; ~MAX6650_CFG_MODE_MASK)
>> - =
| (max6650_modes[mode=
] << 4);
>> -
>> - i2c_smbus_=
write_byte_data(client, MAX6650_REG_CONFIG, data->config);
>>=
+ max6650_set_operating_mode(data, max6650_modes[mode]);=
>>
>> mutex_unlock(&am=
p;data->update_lock);
>>
>> @@ -582,6 +634,7 @@ st=
atic int max6650_init_client(struct max6650_data *data,
>>  =
; int err =3D -EIO;
>> =
u32 voltage;
>> u32 pr=
escale;
>> + u32 target_rpm;
>>
>> if (of_property_read_u32(dev->o=
f_node, "maxim,fan-microvolt",
>> =
&nb=
sp;&voltage))
>> @@ -642,22 +695,6 @@ static int max6650_ini=
t_client(struct max6650_data *data,
>> &=
nbsp; (config & MAX6650_CFG_V12) ? 12 : 5,=
>> =
1 << (config & MAX6650_CFG_PRESCALER_MASK));
>>
&=
gt;> - /*
>> - * If=
mode is set to "full off", we change it to "open loop" and
>> -=
* set DAC to 255, which has the same effect. We do=
this because
>> - * there's no "ful=
l off" mode defined in hwmon specifications.
>> - &n=
bsp; */
>> -
>> - if ((config =
& MAX6650_CFG_MODE_MASK) =3D=3D MAX6650_CFG_MODE_OFF) {
>> -=
dev_dbg(dev, "Change mode to ope=
n loop, full off.\n");
>> - =
config =3D (config & ~MAX6650_CFG_MODE_MASK)
>> - &nbs=
p; | MAX66=
50_CFG_MODE_OPEN_LOOP;
>> - =
if (i2c_smbus_write_byte_data(client, MAX6650_REG_DAC, 255)) {
&=
gt;> -  =
;dev_err(dev, "DAC write error, aborting.\n");
>> - =
return err;
>=
> - }
>> - &n=
bsp; }
>> -
>> if =
(i2c_smbus_write_byte_data(client, MAX6650_REG_CONFIG, config)) {
>=
> dev_err(dev, "Co=
nfig write error, aborting.\n");
>> &nbs=
p; return err;
>> @@ -666,6 +703,10 @@ st=
atic int max6650_init_client(struct max6650_data *data,
>>  =
; data->config =3D config;
>> &n=
bsp; data->count =3D i2c_smbus_read_byte_data(client, M=
AX6650_REG_COUNT);
>>
>> + if (!of_=
property_read_u32(client->dev.of_node, "maxim,fan-target-rpm",
>=
> + &n=
bsp; &target_rpm))
>> + &=
nbsp; max6650_set_target(data, target_rpm);
>=
;> +
>> return 0;
>>=
}
>>
>>
>
Kind regards,
Mike Looijmans
System Expert
![]()
|
TOPIC
Products |
|
|
|
Mate=
riaalweg
4 |
|
|
|
5681
RJ Best |
T:=
FONT> |
+31 =
(0) 499 33
69 69 |
|
Post=
bus
440 |
E:=
FONT> |
mike.looijmans@topicproducts.com |
|
5680=
AK
Best |
W:=
FONT> |
www.topicproducts.com =
TD> |
| The Netherlands |
|
|
|
=
<=
IMG id=3DIMG1 border=3D0 src=3D"cid:imagefeceb9.JPG@19be1578.4d8014a7" widt=
h=3D20 height=3D18 />
Please consider the environment before printing this
e-mail
Topic zoekt gedreven (embedded) software specialisten!
--_92f4e339-10f5-4024-9b03-c551a309bc4f_
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-ID:
Content-Disposition: inline; filename="imagec89c5e.PNG"
Content-Location: imagec89c5e.PNG
Content-Description: imagec89c5e.PNG
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
AAAAAElFTkSuQmCC
--_92f4e339-10f5-4024-9b03-c551a309bc4f_
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-ID:
Content-Disposition: inline; filename="image2e1418.JPG"
Content-Location: image2e1418.JPG
Content-Description: image2e1418.JPG
/9j/4AAQSkZJRgABAQEAYABgAAD/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAEAAAAAAAD/
2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwM
BwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAATABQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA
AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJx
FDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNk
ZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJ
ytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQF
BgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz
UvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3
eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna
4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3/wDaq/bN1S5/aP8AGFj/AMJY8Z0nU57M
Qrd+X5KpIyhdpPAAGMDjv1zXt/gj4T6zov7Jd98RvG2ofE5dTkMxsdK0yAlrWNVYx3FwrKT5J272
fIAQjrmvzj/bY8Ppc/tk/EzzFGJfEN6QGH3lMzj8ehH4V9i/Ez46+No/+CHnhbVf+E014a7qHiaX
Sru8F8ftFxYl7uM27t1MWxVXaeMAV+347K6scFglheWPtJQi3bXWN+z0dnf/AIc+Bw+IpyrVnVbf
Km9/P1+4++f2Bvi7c/GL9k/wn4gur7+1JryGVTdB9/mhJXUfMeWwBjPfHeiuH/4JFaa1j/wT88BQ
7DH5cdyu0jG3FzLxRX5NmtGEMbWhHZSkvxZ9Jh61b2UfRfkjqvjB+wh8JPiN46ute1jwTp13q2pf
vrmcTTRec/QsVRwu44GSBknk5Nc4f+CdXwYnKxt4HtTGrAhft13tBz6ebRRU0c1xsIKEK00ktlJ2
/M7pYWi5XcF9yPofwZ4E0f4eeFbHQ9E0+303SdNiENtbQAqkS9fxJJJJOSSSTkmiiivN5pN3b1Ov
lS0R/9k=
--_92f4e339-10f5-4024-9b03-c551a309bc4f_
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-ID:
Content-Disposition: inline; filename="imageecab5a.JPG"
Content-Location: imageecab5a.JPG
Content-Description: imageecab5a.JPG
/9j/4AAQSkZJRgABAQEAYABgAAD/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAEAAAAAAAD/
2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwM
BwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAATABQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA
AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJx
FDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNk
ZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJ
ytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQF
BgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz
UvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3
eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna
4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9RPhzfN8bfjF46bVPEmrrZ+H51hW3sbvy
W3O7gZODgKFOAB+lc38Wfh747+Gen6tq8PiJr7QdOcyCdNRBnWDcAskicYxkBsZxWP8ACLWI9B+L
/wAUtNjmhh1TXLyGeyWaVYhdeTLJvjVmwNxD5AJGdpA5ruf2kPEM/iL4EeJLO60mHwer2qlZorqJ
zqbCRf8ARSvLYfknb02c8Zr9U5KtLFwhTtyS5FZpaJqOqV03q3qk/PY/m363TxOXVKlVy9pH2sua
LlrJSnZSdnFKyi7ScdGmt9fb/wBlr4gXPj34HaLqd1cfbJpldTMDneFcqMk/SisH9hzT2tf2ZvDs
e0rsEoIPGP3rUV8BmVKEcZVjHZSl+Z+0ZDisRUyzDVJat04N+riit8TvgL4R1PxlNfTaLC1zep58
zLLIod2Jy20MAM9TgdeetYc3wA8ITwAto6ZUjBFxKMf+PUUVzRzLFxSjGrKy/vP/ADPUqcP5XUk5
1MNTbd224Rbb+4978KeFtP8ACvh200/T7ZLWztYwkUSE4UdT1OSSSSSeSTRRRXJzN6tnqRhGK5Yq
yR//2Q==
--_92f4e339-10f5-4024-9b03-c551a309bc4f_
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-ID:
Content-Disposition: inline; filename="imagefeceb9.JPG"
Content-Location: imagefeceb9.JPG
Content-Description: imagefeceb9.JPG
/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcG
BwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwM
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAASABQDASIA
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6i+EP
xt0H48fBf4l+L0/4SmfVvDeqxWiTCNVtYbmebaFuC5yxd3AyD/EMZJOdfx18N/ip8MvAOt+J9c8J
ajp2i+HImuNRm82OWSCEAlpRCrF3jA3ZYAj5T1wc/L3wE/ah8N/sy/Aj41/DTxTYa9b+KPFHimxu
lhjgiC2LWN7G80UwkdWST90wA2nnGSOo9H1X/gqB4C1P9r746ePini4+H/ib4HXwvpFo/kmW2uRb
pHvlj8/ZHHuDncpY/MeOTj9brZLio1Z+wp3huut1aG1u95a67bH4jR4lwTowWIqpTtZq9rO9TVpp
3taCtp8R+g//AASd+NVr8eP2RbbWbGW6ms4dXvbOIzoU4SQE7QSTtyxIz60Vwv8AwQP8O3Xh3/gn
do4uLeSCK71i/uLZ2XC3MRkCiRDgZQsrAHviivzjO6UaWYVqcNlJr8T9W4frzr5ZQrVN5Qi/vR9Z
658MPDXifUWvNS8PaHqF2wCtPc2EUshA6Asyk8YH5VTHwP8ABY/5lDwv/wCCqD2/2fYfkKKK68P/
AAYlT+J+rOnhhS3hWONVREAVVUYCgdABRRRXgvc9VbH/2Q==
--_92f4e339-10f5-4024-9b03-c551a309bc4f_--