From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============7626160570818208662==" MIME-Version: 1.0 From: Patrick Georgi Subject: Re: [Devel] Field Offset constraints Date: Wed, 03 Apr 2019 23:51:51 +0200 Message-ID: In-Reply-To: CF6A88132359CE47947DB4C6E1709ED53C5978ED@ORSMSX122.amr.corp.intel.com List-ID: To: devel@acpica.org --===============7626160570818208662== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Erik, thanks for the encouraging words. As mentioned, I think it would be useful to have a mechanism to lock down where a field item ends up. We used to use Offset() for that purpose to make sure that at least we're not putting more into a space than fits into it (because Offset() won't move backward), but something more comprehensive (that can also identify underflow for example) would be nice. The (optional) syntax I proposed in my original message (Item (Name, Byte, Bit, Length)) wouldn't require changes to the bytecode, but it's a source language extension: Compile time semantics: If the current position in the Field (that the compiler obviously is tracking already) is not Byte/Bit, report an error. Otherwise compile the equivalent of "Name, Length,". In particular, Item() doesn't emit Offsets, but expects the developer to add them where required. Runtime semantics: no change (because the bytecode is identical) Decompiler behavior: free to choose the syntax since all information can be derived (name, offsets, length): it could always use the original syntax, always the new syntax, some heuristic (maybe to use Item() for the field before an Offset() and use the plain Name, Length, variant otherwise)... There's a trade-off between expressiveness (more location data) and compatibility (with older ASL tools). Thanks, Patrick Am Mi., 3. Apr. 2019 um 23:26 Uhr schrieb Schmauss, Erik < erik.schmauss(a)intel.com>: > It=E2=80=99s important for us to hear suggestions so please let us know. = If your > suggestion is useful for all ACPI firmware developers, we would be more > than happy to propose specification changes or add iASL features! > > > > Erik > > > > *From:* Moore, Robert > *Sent:* Wednesday, April 3, 2019 12:08 PM > *To:* Patrick Georgi > *Cc:* devel(a)acpica.org; Schmauss, Erik > *Subject:* RE: [Devel] Field Offset constraints > > > > We do in fact keep tightening up the compiler to check for semantic issues > as well as syntax errors. As it stands today, we have 164 > errors/warnings/remarks, as well as 13 additional errors for the Data Tab= le > compiler, and 11 errors for the preprocessor. > > > > Do you have any additional suggestions? > > > > Bob > > > > > > *From:* Patrick Georgi [mailto:pgeorgi(a)google.com ] > *Sent:* Wednesday, April 3, 2019 11:08 AM > *To:* Moore, Robert > *Cc:* devel(a)acpica.org; Schmauss, Erik > *Subject:* Re: [Devel] Field Offset constraints > > > > Hi Robert, > > > > Am Mi., 3. Apr. 2019 um 19:38 Uhr schrieb Moore, Robert < > robert.moore(a)intel.com>: > > 2) Disable the specific remark via the =E2=80=93VW option. > > iasl -vw 2158 dsdt.asl // disable remark #2158 > > Thank you for the pointer to that option, that's very helpful. > > > > Independent from that, is there interest in providing language features on > top of ASL (maybe in revisions to the spec if the tool is meant to remain > strictly compliant) to more rigorously express constraints that can be > verified at compile time? > > > > > > Regards, > > Patrick > > -- > > Google Germany GmbH, ABC-Str. 19, 20354 Hamburg > Registergericht und -nummer: Hamburg, HRB 86891, Sitz der Gesellschaft: > Hamburg > Gesch=C3=A4ftsf=C3=BChrer: Paul Manicle, Halimah DeLaine Prado > -- = Google Germany GmbH, ABC-Str. 19, 20354 Hamburg Registergericht und -nummer: Hamburg, HRB 86891, Sitz der Gesellschaft: Hamburg Gesch=C3=A4ftsf=C3=BChrer: Paul Manicle, Halimah DeLaine Prado --===============7626160570818208662== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGRpdiBkaXI9Imx0ciI+PGRpdj5IaSBFcmlrLDwvZGl2PjxkaXY+dGhhbmtzIGZvciB0aGUgZW5j b3VyYWdpbmcgd29yZHMuPC9kaXY+PGRpdj48YnI+PC9kaXY+QXMgbWVudGlvbmVkLCBJIHRoaW5r IGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBoYXZlIGEgbWVjaGFuaXNtIHRvIGxvY2sgZG93biB3aGVy ZSBhIGZpZWxkIGl0ZW0gZW5kcyB1cC48ZGl2PldlIHVzZWQgdG8gdXNlIE9mZnNldCgpIGZvciB0 aGF0IHB1cnBvc2UgdG8gbWFrZSBzdXJlIHRoYXQgYXQgbGVhc3Qgd2UmIzM5O3JlIG5vdCBwdXR0 aW5nIG1vcmUgaW50byBhIHNwYWNlIHRoYW4gZml0cyBpbnRvIGl0IChiZWNhdXNlIE9mZnNldCgp IHdvbiYjMzk7dCBtb3ZlIGJhY2t3YXJkKSwgYnV0IHNvbWV0aGluZyBtb3JlIGNvbXByZWhlbnNp dmUgKHRoYXQgY2FuIGFsc28gaWRlbnRpZnkgdW5kZXJmbG93IGZvciBleGFtcGxlKSB3b3VsZCBi ZSBuaWNlLjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhlIChvcHRpb25hbCkgc3ludGF4IEkgcHJvcG9z ZWQgaW4gbXkgb3JpZ2luYWwgbWVzc2FnZSAoSXRlbSAoTmFtZSwgQnl0ZSwgQml0LCBMZW5ndGgp KSB3b3VsZG4mIzM5O3QgcmVxdWlyZSBjaGFuZ2VzIHRvIHRoZSBieXRlY29kZSwgYnV0IGl0JiMz OTtzIGEgc291cmNlIGxhbmd1YWdlIGV4dGVuc2lvbjo8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2 PkNvbXBpbGUgdGltZSBzZW1hbnRpY3M6IElmIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBG aWVsZCAodGhhdCB0aGUgY29tcGlsZXIgb2J2aW91c2x5IGlzIHRyYWNraW5nIGFscmVhZHkpIGlz IG5vdCBCeXRlL0JpdCwgcmVwb3J0IGFuIGVycm9yLiBPdGhlcndpc2UgY29tcGlsZSB0aGUgZXF1 aXZhbGVudCBvZiAmcXVvdDtOYW1lLCBMZW5ndGgsJnF1b3Q7LiBJbiBwYXJ0aWN1bGFyLCBJdGVt KCkgZG9lc24mIzM5O3QgZW1pdCBPZmZzZXRzLCBidXQgZXhwZWN0cyB0aGUgZGV2ZWxvcGVyIHRv IGFkZCB0aGVtIHdoZXJlIHJlcXVpcmVkLjxicj48L2Rpdj48ZGl2PlJ1bnRpbWUgc2VtYW50aWNz OiBubyBjaGFuZ2UgKGJlY2F1c2UgdGhlIGJ5dGVjb2RlIGlzIGlkZW50aWNhbCk8YnI+PC9kaXY+ PGRpdj5EZWNvbXBpbGVyIGJlaGF2aW9yOiBmcmVlIHRvIGNob29zZSB0aGUgc3ludGF4IHNpbmNl IGFsbCBpbmZvcm1hdGlvbiBjYW4gYmUgZGVyaXZlZCAobmFtZSwgb2Zmc2V0cywgbGVuZ3RoKTog aXQgY291bGQgYWx3YXlzIHVzZSB0aGUgb3JpZ2luYWwgc3ludGF4LCBhbHdheXMgdGhlIG5ldyBz eW50YXgsIHNvbWUgaGV1cmlzdGljIChtYXliZSB0byB1c2UgSXRlbSgpIGZvciB0aGUgZmllbGQg YmVmb3JlIGFuIE9mZnNldCgpIGFuZCB1c2UgdGhlIHBsYWluIE5hbWUsIExlbmd0aCwgdmFyaWFu dCBvdGhlcndpc2UpLi4uIFRoZXJlJiMzOTtzIGEgdHJhZGUtb2ZmIGJldHdlZW4gZXhwcmVzc2l2 ZW5lc3MgKG1vcmUgbG9jYXRpb24gZGF0YSkgYW5kIGNvbXBhdGliaWxpdHkgKHdpdGggb2xkZXIg QVNMIHRvb2xzKS48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlRoYW5r cyw8L2Rpdj48ZGl2PlBhdHJpY2s8L2Rpdj48L2Rpdj48L2Rpdj48YnI+PGRpdiBjbGFzcz0iZ21h aWxfcXVvdGUiPjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJnbWFpbF9hdHRyIj5BbSBNaS4sIDMuIEFw ci4gMjAxOSB1bSAyMzoyNsKgVWhyIHNjaHJpZWIgU2NobWF1c3MsIEVyaWsgJmx0OzxhIGhyZWY9 Im1haWx0bzplcmlrLnNjaG1hdXNzQGludGVsLmNvbSI+ZXJpay5zY2htYXVzc0BpbnRlbC5jb208 L2E+Jmd0Ozo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0i bWFyZ2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2IoMjA0LDIw NCwyMDQpO3BhZGRpbmctbGVmdDoxZXgiPgoKCgoKCjxkaXYgbGFuZz0iRU4tVVMiPgo8ZGl2IGNs YXNzPSJnbWFpbC1tXy02Mzg1MDcyNjkwODIyMDU1NTEyV29yZFNlY3Rpb24xIj4KPHAgY2xhc3M9 Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB0O2ZvbnQtZmFtaWx5OkNhbGli cmksc2Fucy1zZXJpZjtjb2xvcjpyZ2IoMzEsNzMsMTI1KSI+SXTigJlzIGltcG9ydGFudCBmb3Ig dXMgdG8gaGVhciBzdWdnZXN0aW9ucyBzbyBwbGVhc2UgbGV0IHVzIGtub3cuIElmIHlvdXIgc3Vn Z2VzdGlvbiBpcyB1c2VmdWwgZm9yIGFsbCBBQ1BJIGZpcm13YXJlIGRldmVsb3BlcnMsIHdlIHdv dWxkIGJlIG1vcmUgdGhhbiBoYXBweSB0bwogcHJvcG9zZSBzcGVjaWZpY2F0aW9uIGNoYW5nZXMg b3IgYWRkIGlBU0wgZmVhdHVyZXMhPHU+PC91Pjx1PjwvdT48L3NwYW4+PC9wPgo8cCBjbGFzcz0i TXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHQ7Zm9udC1mYW1pbHk6Q2FsaWJy aSxzYW5zLXNlcmlmO2NvbG9yOnJnYigzMSw3MywxMjUpIj48dT48L3U+wqA8dT48L3U+PC9zcGFu PjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB0O2Zv bnQtZmFtaWx5OkNhbGlicmksc2Fucy1zZXJpZjtjb2xvcjpyZ2IoMzEsNzMsMTI1KSI+RXJpazx1 PjwvdT48dT48L3U+PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9 ImZvbnQtc2l6ZToxMXB0O2ZvbnQtZmFtaWx5OkNhbGlicmksc2Fucy1zZXJpZjtjb2xvcjpyZ2Io MzEsNzMsMTI1KSI+PHU+PC91PsKgPHU+PC91Pjwvc3Bhbj48L3A+CjxkaXYgc3R5bGU9ImJvcmRl ci10b3A6bm9uZTtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLWxl ZnQ6MS41cHQgc29saWQgYmx1ZTtwYWRkaW5nOjBpbiAwaW4gMGluIDRwdCI+CjxkaXY+CjxkaXYg c3R5bGU9ImJvcmRlci1yaWdodDpub25lO2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItbGVmdDpu b25lO2JvcmRlci10b3A6MXB0IHNvbGlkIHJnYigyMjUsMjI1LDIyNSk7cGFkZGluZzozcHQgMGlu IDBpbiI+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFw dDtmb250LWZhbWlseTpDYWxpYnJpLHNhbnMtc2VyaWYiPkZyb206PC9zcGFuPjwvYj48c3BhbiBz dHlsZT0iZm9udC1zaXplOjExcHQ7Zm9udC1mYW1pbHk6Q2FsaWJyaSxzYW5zLXNlcmlmIj4gTW9v cmUsIFJvYmVydAo8YnI+CjxiPlNlbnQ6PC9iPiBXZWRuZXNkYXksIEFwcmlsIDMsIDIwMTkgMTI6 MDggUE08YnI+CjxiPlRvOjwvYj4gUGF0cmljayBHZW9yZ2kgJmx0OzxhIGhyZWY9Im1haWx0bzpw Z2VvcmdpQGdvb2dsZS5jb20iIHRhcmdldD0iX2JsYW5rIj5wZ2VvcmdpQGdvb2dsZS5jb208L2E+ Jmd0Ozxicj4KPGI+Q2M6PC9iPiA8YSBocmVmPSJtYWlsdG86ZGV2ZWxAYWNwaWNhLm9yZyIgdGFy Z2V0PSJfYmxhbmsiPmRldmVsQGFjcGljYS5vcmc8L2E+OyBTY2htYXVzcywgRXJpayAmbHQ7PGEg aHJlZj0ibWFpbHRvOmVyaWsuc2NobWF1c3NAaW50ZWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+ZXJp ay5zY2htYXVzc0BpbnRlbC5jb208L2E+Jmd0Ozxicj4KPGI+U3ViamVjdDo8L2I+IFJFOiBbRGV2 ZWxdIEZpZWxkIE9mZnNldCBjb25zdHJhaW50czx1PjwvdT48dT48L3U+PC9zcGFuPjwvcD4KPC9k aXY+CjwvZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48dT48L3U+wqA8dT48L3U+PC9wPgo8cCBj bGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHQ7Zm9udC1mYW1pbHk6 Q2FsaWJyaSxzYW5zLXNlcmlmO2NvbG9yOnJnYigzMSw3MywxMjUpIj5XZSBkbyBpbiBmYWN0IGtl ZXAgdGlnaHRlbmluZyB1cCB0aGUgY29tcGlsZXIgdG8gY2hlY2sgZm9yIHNlbWFudGljIGlzc3Vl cyBhcyB3ZWxsIGFzIHN5bnRheCBlcnJvcnMuIEFzIGl0IHN0YW5kcyB0b2RheSwgd2UgaGF2ZSAx NjQgZXJyb3JzL3dhcm5pbmdzL3JlbWFya3MsCiBhcyB3ZWxsIGFzIDEzIGFkZGl0aW9uYWwgZXJy b3JzIGZvciB0aGUgRGF0YSBUYWJsZSBjb21waWxlciwgYW5kIDExIGVycm9ycyBmb3IgdGhlIHBy ZXByb2Nlc3Nvci48dT48L3U+PHU+PC91Pjwvc3Bhbj48L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwi PjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFwdDtmb250LWZhbWlseTpDYWxpYnJpLHNhbnMtc2Vy aWY7Y29sb3I6cmdiKDMxLDczLDEyNSkiPjx1PjwvdT7CoDx1PjwvdT48L3NwYW4+PC9wPgo8cCBj bGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHQ7Zm9udC1mYW1pbHk6 Q2FsaWJyaSxzYW5zLXNlcmlmO2NvbG9yOnJnYigzMSw3MywxMjUpIj5EbyB5b3UgaGF2ZSBhbnkg YWRkaXRpb25hbCBzdWdnZXN0aW9ucz88dT48L3U+PHU+PC91Pjwvc3Bhbj48L3A+CjxwIGNsYXNz PSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFwdDtmb250LWZhbWlseTpDYWxp YnJpLHNhbnMtc2VyaWY7Y29sb3I6cmdiKDMxLDczLDEyNSkiPjx1PjwvdT7CoDx1PjwvdT48L3Nw YW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHQ7 Zm9udC1mYW1pbHk6Q2FsaWJyaSxzYW5zLXNlcmlmO2NvbG9yOnJnYigzMSw3MywxMjUpIj5Cb2I8 dT48L3U+PHU+PC91Pjwvc3Bhbj48L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxl PSJmb250LXNpemU6MTFwdDtmb250LWZhbWlseTpDYWxpYnJpLHNhbnMtc2VyaWY7Y29sb3I6cmdi KDMxLDczLDEyNSkiPjx1PjwvdT7CoDx1PjwvdT48L3NwYW4+PC9wPgo8cCBjbGFzcz0iTXNvTm9y bWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHQ7Zm9udC1mYW1pbHk6Q2FsaWJyaSxzYW5z LXNlcmlmO2NvbG9yOnJnYigzMSw3MywxMjUpIj48dT48L3U+wqA8dT48L3U+PC9zcGFuPjwvcD4K PGRpdiBzdHlsZT0iYm9yZGVyLXRvcDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci1ib3R0 b206bm9uZTtib3JkZXItbGVmdDoxLjVwdCBzb2xpZCBibHVlO3BhZGRpbmc6MGluIDBpbiAwaW4g NHB0Ij4KPGRpdj4KPGRpdiBzdHlsZT0iYm9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLWJvdHRvbTpu b25lO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXRvcDoxcHQgc29saWQgcmdiKDIyNSwyMjUsMjI1 KTtwYWRkaW5nOjNwdCAwaW4gMGluIj4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGEgbmFtZT0ibV8t NjM4NTA3MjY5MDgyMjA1NTUxMl9fX19fX3JlcGx5c2VwYXJhdG9yIj48L2E+PGI+PHNwYW4gc3R5 bGU9ImZvbnQtc2l6ZToxMXB0O2ZvbnQtZmFtaWx5OkNhbGlicmksc2Fucy1zZXJpZiI+RnJvbTo8 L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFwdDtmb250LWZhbWlseTpDYWxpYnJp LHNhbnMtc2VyaWYiPiBQYXRyaWNrIEdlb3JnaSBbPGEgaHJlZj0ibWFpbHRvOnBnZW9yZ2lAZ29v Z2xlLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPm1haWx0bzpwZ2VvcmdpQGdvb2dsZS5jb208L2E+XQo8 YnI+CjxiPlNlbnQ6PC9iPiBXZWRuZXNkYXksIEFwcmlsIDMsIDIwMTkgMTE6MDggQU08YnI+Cjxi PlRvOjwvYj4gTW9vcmUsIFJvYmVydCAmbHQ7PGEgaHJlZj0ibWFpbHRvOnJvYmVydC5tb29yZUBp bnRlbC5jb20iIHRhcmdldD0iX2JsYW5rIj5yb2JlcnQubW9vcmVAaW50ZWwuY29tPC9hPiZndDs8 YnI+CjxiPkNjOjwvYj4gPGEgaHJlZj0ibWFpbHRvOmRldmVsQGFjcGljYS5vcmciIHRhcmdldD0i X2JsYW5rIj5kZXZlbEBhY3BpY2Eub3JnPC9hPjsgU2NobWF1c3MsIEVyaWsgJmx0OzxhIGhyZWY9 Im1haWx0bzplcmlrLnNjaG1hdXNzQGludGVsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmVyaWsuc2No bWF1c3NAaW50ZWwuY29tPC9hPiZndDs8YnI+CjxiPlN1YmplY3Q6PC9iPiBSZTogW0RldmVsXSBG aWVsZCBPZmZzZXQgY29uc3RyYWludHM8dT48L3U+PHU+PC91Pjwvc3Bhbj48L3A+CjwvZGl2Pgo8 L2Rpdj4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHU+PC91PsKgPHU+PC91PjwvcD4KPGRpdj4KPGRp dj4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+SGkgUm9iZXJ0LDx1PjwvdT48dT48L3U+PC9wPgo8L2Rp dj4KPGRpdj4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHU+PC91PsKgPHU+PC91PjwvcD4KPC9kaXY+ CjxkaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPkFtIE1pLiwgMy4gQXByLiAyMDE5IHVt IDE5OjM4wqBVaHIgc2NocmllYiBNb29yZSwgUm9iZXJ0ICZsdDs8YSBocmVmPSJtYWlsdG86cm9i ZXJ0Lm1vb3JlQGludGVsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPnJvYmVydC5tb29yZUBpbnRlbC5j b208L2E+Jmd0Ozo8dT48L3U+PHU+PC91PjwvcD4KPC9kaXY+CjxibG9ja3F1b3RlIHN0eWxlPSJi b3JkZXItdG9wOm5vbmU7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRl ci1sZWZ0OjFwdCBzb2xpZCByZ2IoMjA0LDIwNCwyMDQpO3BhZGRpbmc6MGluIDBpbiAwaW4gNnB0 O21hcmdpbjo1cHQgMGluIDVwdCA0LjhwdCI+CjxkaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3Jt YWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFwdDtmb250LWZhbWlseTpDYWxpYnJpLHNhbnMt c2VyaWY7Y29sb3I6cmdiKDMxLDczLDEyNSkiPjIpPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNp emU6N3B0O2NvbG9yOnJnYigzMSw3MywxMjUpIj7CoMKgwqDCoMKgCjwvc3Bhbj48c3BhbiBzdHls ZT0iZm9udC1zaXplOjExcHQ7Zm9udC1mYW1pbHk6Q2FsaWJyaSxzYW5zLXNlcmlmO2NvbG9yOnJn YigzMSw3MywxMjUpIj5EaXNhYmxlIHRoZSBzcGVjaWZpYyByZW1hcmsgdmlhIHRoZSDigJNWVyBv cHRpb24uPC9zcGFuPjx1PjwvdT48dT48L3U+PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3Bh biBzdHlsZT0iZm9udC1zaXplOjEwcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVv dDs7Y29sb3I6cmdiKDMxLDczLDEyNSkiPmlhc2wgLXZ3IDIxNTggZHNkdC5hc2zCoMKgIC8vIGRp c2FibGUgcmVtYXJrICMyMTU4PC9zcGFuPjx1PjwvdT48dT48L3U+PC9wPgo8L2Rpdj4KPC9kaXY+ CjwvYmxvY2txdW90ZT4KPC9kaXY+CjxkaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPlRo YW5rIHlvdSBmb3IgdGhlIHBvaW50ZXIgdG8gdGhhdCBvcHRpb24sIHRoYXQmIzM5O3MgdmVyeSBo ZWxwZnVsLjx1PjwvdT48dT48L3U+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xhc3M9Ik1zb05vcm1h bCI+PHU+PC91PsKgPHU+PC91PjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwi PkluZGVwZW5kZW50IGZyb20gdGhhdCwgaXMgdGhlcmUgaW50ZXJlc3QgaW4gcHJvdmlkaW5nIGxh bmd1YWdlIGZlYXR1cmVzIG9uIHRvcCBvZiBBU0wgKG1heWJlIGluIHJldmlzaW9ucyB0byB0aGUg c3BlYyBpZiB0aGUgdG9vbCBpcyBtZWFudCB0byByZW1haW4gc3RyaWN0bHkgY29tcGxpYW50KSB0 byBtb3JlIHJpZ29yb3VzbHkgZXhwcmVzcyBjb25zdHJhaW50cyB0aGF0IGNhbiBiZSB2ZXJpZmll ZCBhdCBjb21waWxlCiB0aW1lPzx1PjwvdT48dT48L3U+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xh c3M9Ik1zb05vcm1hbCI+PHU+PC91PsKgPHU+PC91PjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNz PSJNc29Ob3JtYWwiPjx1PjwvdT7CoDx1PjwvdT48L3A+CjwvZGl2Pgo8ZGl2Pgo8cCBjbGFzcz0i TXNvTm9ybWFsIj5SZWdhcmRzLDx1PjwvdT48dT48L3U+PC9wPgo8L2Rpdj4KPGRpdj4KPHAgY2xh c3M9Ik1zb05vcm1hbCI+UGF0cmljazx1PjwvdT48dT48L3U+PC9wPgo8L2Rpdj4KPC9kaXY+Cjxw IGNsYXNzPSJNc29Ob3JtYWwiPi0tIDx1PjwvdT48dT48L3U+PC9wPgo8ZGl2Pgo8cCBjbGFzcz0i TXNvTm9ybWFsIj5Hb29nbGUgR2VybWFueSBHbWJILCBBQkMtU3RyLiAxOSwgMjAzNTQgSGFtYnVy Zzxicj4KUmVnaXN0ZXJnZXJpY2h0IHVuZCAtbnVtbWVyOiBIYW1idXJnLCBIUkIgODY4OTEsIFNp dHogZGVyIEdlc2VsbHNjaGFmdDogSGFtYnVyZzxicj4KR2VzY2jDpGZ0c2bDvGhyZXI6IFBhdWwg TWFuaWNsZSwgSGFsaW1haCBEZUxhaW5lIFByYWRvPHU+PC91Pjx1PjwvdT48L3A+CjwvZGl2Pgo8 L2Rpdj4KPC9kaXY+CjwvZGl2Pgo8L2Rpdj4KPC9kaXY+Cgo8L2Jsb2NrcXVvdGU+PC9kaXY+PGJy IGNsZWFyPSJhbGwiPjxkaXY+PGJyPjwvZGl2Pi0tIDxicj48ZGl2IGRpcj0ibHRyIiBjbGFzcz0i Z21haWxfc2lnbmF0dXJlIj5Hb29nbGUgR2VybWFueSBHbWJILCBBQkMtU3RyLiAxOSwgMjAzNTQg SGFtYnVyZzxicj5SZWdpc3RlcmdlcmljaHQgdW5kIC1udW1tZXI6IEhhbWJ1cmcsIEhSQiA4Njg5 MSwgU2l0eiBkZXIgR2VzZWxsc2NoYWZ0OiBIYW1idXJnPGJyPkdlc2Now6RmdHNmw7xocmVyOiBQ YXVsIE1hbmljbGUsIEhhbGltYWggRGVMYWluZSBQcmFkbzwvZGl2Pgo= --===============7626160570818208662==--