From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============3320178388069750684==" MIME-Version: 1.0 From: Meneghini, John Subject: Re: [SPDK] spdk_malloc vs. malloc Date: Thu, 03 May 2018 18:23:29 +0000 Message-ID: <6D86871B-6059-45D8-9E06-C12A059E8A2A@netapp.com> List-ID: To: spdk@lists.01.org --===============3320178388069750684== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable > If the user passes flags =3D=3D 0 to the new spdk_malloc() call, this co= uld be implemented by malloc() or equivalent behind the scenes, So, does this mean you=E2=80=99re willing to change all calls to malloc(siz= e) with spdk_malloc(size, 0, NULL, SPDK_ENV_SOCKET_ID_ANY, SPDK_MALLOC_SHAR= E)? Is that the plan? /John From: SPDK on behalf of "Verkamp, Daniel" Reply-To: Storage Performance Development Kit Date: Thursday, May 3, 2018 at 2:06 PM To: Storage Performance Development Kit , Jim Harris <= james.r.harris(a)intel.com>, "Walker, Benjamin" , "z.khatami88(a)gmail.com" Subject: Re: [SPDK] spdk_malloc vs. malloc Hi John, The new API is intended to allow memory that is shared and not DMA-able, so= spdk_dma_malloc() wouldn=E2=80=99t be an appropriate name; also, we did no= t want to break public API by adding a new flags parameter to the existing = function. We intend to update the internal SPDK callers of spdk_dma_malloc= () to all use spdk_malloc() with the appropriate flags (leaving the old nam= es for backwards compatibility for now). If the user passes flags =3D=3D 0 to the new spdk_malloc() call, this could= be implemented by malloc() or equivalent behind the scenes, since the memo= ry does not need to be DMA-able or shared across multi-process boundaries (= it has no special properties). Does this suffice for your use case? Thanks, -- Daniel From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Meneghini, John Sent: Thursday, May 3, 2018 10:53 AM To: Harris, James R ; Walker, Benjamin ; z.khatami88(a)gmail.com; Storage Performance Develop= ment Kit Cc: Meneghini, John Subject: [SPDK] spdk_malloc vs. malloc Hi Jim, Ben, and Zahra. I am sorry I didn=E2=80=99t catch this during the code review, but it=E2=80= =99s really hard to keep track of all of the changes that are going on. https://review.gerrithub.io/#/c/spdk/spdk/+/402334/ As you may recall, we wanted to use spdk_malloc and spdk_calloc to abstract= the POSIX malloc and calloc calls. This is still an issue in multiple pla= ces as we want a non-blocking malloc and calloc call that returns a status = rather than setting errno (e.g. to ENOMEM). Remember, not all execution env= ironments support errno. Can we revert change a77cd3f7, and use the spdk_malloc/calloc/free api for = that purpose? Also, I don=E2=80=99t see the point of introducing an additional API for dm= a-able memory. We went through this once before. * a77cd3f7 2018-04-24 env: add malloc variants with DMA/shareable flags [ = Ben Walker / z.khatami88(a)gmail.com ] * 8a44220b 2017-05-31 env: Rename spdk_malloc/zmalloc/realloc/free to spdk= _dma_(func) [ Jim Harris / johnm(a)netapp.com ] I fully support adding the SPDK_MALLOC_DMA and SPDK_MALLOC_SHARE flag and s= ocket_id to spdk_dma_malloc/zmalloc(), and I prefer to do this rather than = invent a new API for allocating dma-able memory. void *spdk_dma_malloc(size_t size, size_t align, uint64_t *phys_addr); void *spdk_malloc(size_t size, size_t align, uint64_t *phys_addr,= int socket_id, uint32_t flags); I=E2=80=99m proposing: void *spdk_dma_malloc(size_t size, size_t align, uint64_t *phys_addr, int s= ocket_id, uint32_t flags); /John P.S. What I really need is a filter that allows me to watch all of the head= ers in include/spdk/{api}.h. Looking at the GerritHub documentation, I see= no way to do this. It appears all I can do is watch the master branch. https://review.gerrithub.io/Documentation/intro-user.html#watch --===============3320178388069750684== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv VFIvUkVDLWh0bWw0MCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IkdlbmVyYXRv ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUgKGZpbHRlcmVkIG1lZGl1bSkiPg0KPHN0eWxl PjwhLS0NCi8qIEZvbnQgRGVmaW5pdGlvbnMgKi8NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6 V2luZ2RpbmdzOw0KCXBhbm9zZS0xOjUgMCAwIDAgMCAwIDAgMCAwIDA7fQ0KQGZvbnQtZmFjZQ0K CXtmb250LWZhbWlseToiQ2FtYnJpYSBNYXRoIjsNCglwYW5vc2UtMToyIDQgNSAzIDUgNCA2IDMg MiA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6Q2FsaWJyaTsNCglwYW5vc2UtMToyIDE1 IDUgMiAyIDIgNCAzIDIgNDt9DQovKiBTdHlsZSBEZWZpbml0aW9ucyAqLw0KcC5Nc29Ob3JtYWws IGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbA0KCXttYXJnaW46MGluOw0KCW1hcmdpbi1ib3R0 b206LjAwMDFwdDsNCglmb250LXNpemU6MTIuMHB0Ow0KCWZvbnQtZmFtaWx5OiJDYWxpYnJpIixz YW5zLXNlcmlmO30NCmE6bGluaywgc3Bhbi5Nc29IeXBlcmxpbmsNCgl7bXNvLXN0eWxlLXByaW9y aXR5Ojk5Ow0KCWNvbG9yOiMwNTYzQzE7DQoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9DQph OnZpc2l0ZWQsIHNwYW4uTXNvSHlwZXJsaW5rRm9sbG93ZWQNCgl7bXNvLXN0eWxlLXByaW9yaXR5 Ojk5Ow0KCWNvbG9yOiM5NTRGNzI7DQoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9DQpwLk1z b0xpc3RQYXJhZ3JhcGgsIGxpLk1zb0xpc3RQYXJhZ3JhcGgsIGRpdi5Nc29MaXN0UGFyYWdyYXBo DQoJe21zby1zdHlsZS1wcmlvcml0eTozNDsNCgltYXJnaW4tdG9wOjBpbjsNCgltYXJnaW4tcmln aHQ6MGluOw0KCW1hcmdpbi1ib3R0b206MGluOw0KCW1hcmdpbi1sZWZ0Oi41aW47DQoJbWFyZ2lu LWJvdHRvbTouMDAwMXB0Ow0KCWZvbnQtc2l6ZToxMi4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbGli cmkiLHNhbnMtc2VyaWY7fQ0KcC5tc29ub3JtYWwwLCBsaS5tc29ub3JtYWwwLCBkaXYubXNvbm9y bWFsMA0KCXttc28tc3R5bGUtbmFtZTptc29ub3JtYWw7DQoJbXNvLW1hcmdpbi10b3AtYWx0OmF1 dG87DQoJbWFyZ2luLXJpZ2h0OjBpbjsNCgltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsNCglt YXJnaW4tbGVmdDowaW47DQoJZm9udC1zaXplOjExLjBwdDsNCglmb250LWZhbWlseToiQ2FsaWJy aSIsc2Fucy1zZXJpZjt9DQpzcGFuLkVtYWlsU3R5bGUxOQ0KCXttc28tc3R5bGUtdHlwZTpwZXJz b25hbDsNCglmb250LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjsNCgljb2xvcjp3aW5kb3d0 ZXh0O30NCnNwYW4uRW1haWxTdHlsZTIwDQoJe21zby1zdHlsZS10eXBlOnBlcnNvbmFsOw0KCWZv bnQtZmFtaWx5OiJDYWxpYnJpIixzYW5zLXNlcmlmOw0KCWNvbG9yOiMxRjQ5N0Q7fQ0Kc3Bhbi5F bWFpbFN0eWxlMjENCgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWwtcmVwbHk7DQoJZm9udC1mYW1p bHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7DQoJY29sb3I6d2luZG93dGV4dDt9DQouTXNvQ2hwRGVm YXVsdA0KCXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTsNCglmb250LXNpemU6MTAuMHB0O30N CkBwYWdlIFdvcmRTZWN0aW9uMQ0KCXtzaXplOjguNWluIDExLjBpbjsNCgltYXJnaW46MS4waW4g MS4waW4gMS4waW4gMS4waW47fQ0KZGl2LldvcmRTZWN0aW9uMQ0KCXtwYWdlOldvcmRTZWN0aW9u MTt9DQovKiBMaXN0IERlZmluaXRpb25zICovDQpAbGlzdCBsMA0KCXttc28tbGlzdC1pZDo3NjUx NDkwNDU7DQoJbXNvLWxpc3QtdHlwZTpoeWJyaWQ7DQoJbXNvLWxpc3QtdGVtcGxhdGUtaWRzOi0x NDIyNjI4MTc4IC0xNDMyMTg4NTIyIDY3Njk4NjkxIDY3Njk4NjkzIDY3Njk4Njg5IDY3Njk4Njkx IDY3Njk4NjkzIDY3Njk4Njg5IDY3Njk4NjkxIDY3Njk4NjkzO30NCkBsaXN0IGwwOmxldmVsMQ0K CXttc28tbGV2ZWwtc3RhcnQtYXQ6MTA7DQoJbXNvLWxldmVsLW51bWJlci1mb3JtYXQ6YnVsbGV0 Ow0KCW1zby1sZXZlbC10ZXh0Ou+DmDsNCgltc28tbGV2ZWwtdGFiLXN0b3A6bm9uZTsNCgltc28t bGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQoJdGV4dC1pbmRlbnQ6LS4yNWluOw0KCWZvbnQt ZmFtaWx5OldpbmdkaW5nczsNCgltc28tZmFyZWFzdC1mb250LWZhbWlseTpDYWxpYnJpOw0KCW1z by1iaWRpLWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30NCkBsaXN0IGwwOmxldmVsMg0K CXttc28tbGV2ZWwtbnVtYmVyLWZvcm1hdDpidWxsZXQ7DQoJbXNvLWxldmVsLXRleHQ6bzsNCglt c28tbGV2ZWwtdGFiLXN0b3A6bm9uZTsNCgltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7 DQoJdGV4dC1pbmRlbnQ6LS4yNWluOw0KCWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7fQ0KQGxp c3QgbDA6bGV2ZWwzDQoJe21zby1sZXZlbC1udW1iZXItZm9ybWF0OmJ1bGxldDsNCgltc28tbGV2 ZWwtdGV4dDrvgqc7DQoJbXNvLWxldmVsLXRhYi1zdG9wOm5vbmU7DQoJbXNvLWxldmVsLW51bWJl ci1wb3NpdGlvbjpsZWZ0Ow0KCXRleHQtaW5kZW50Oi0uMjVpbjsNCglmb250LWZhbWlseTpXaW5n ZGluZ3M7fQ0KQGxpc3QgbDA6bGV2ZWw0DQoJe21zby1sZXZlbC1udW1iZXItZm9ybWF0OmJ1bGxl dDsNCgltc28tbGV2ZWwtdGV4dDrvgrc7DQoJbXNvLWxldmVsLXRhYi1zdG9wOm5vbmU7DQoJbXNv LWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KCXRleHQtaW5kZW50Oi0uMjVpbjsNCglmb250 LWZhbWlseTpTeW1ib2w7fQ0KQGxpc3QgbDA6bGV2ZWw1DQoJe21zby1sZXZlbC1udW1iZXItZm9y bWF0OmJ1bGxldDsNCgltc28tbGV2ZWwtdGV4dDpvOw0KCW1zby1sZXZlbC10YWItc3RvcDpub25l Ow0KCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCgl0ZXh0LWluZGVudDotLjI1aW47 DQoJZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3Ijt9DQpAbGlzdCBsMDpsZXZlbDYNCgl7bXNvLWxl dmVsLW51bWJlci1mb3JtYXQ6YnVsbGV0Ow0KCW1zby1sZXZlbC10ZXh0Ou+CpzsNCgltc28tbGV2 ZWwtdGFiLXN0b3A6bm9uZTsNCgltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQoJdGV4 dC1pbmRlbnQ6LS4yNWluOw0KCWZvbnQtZmFtaWx5OldpbmdkaW5nczt9DQpAbGlzdCBsMDpsZXZl bDcNCgl7bXNvLWxldmVsLW51bWJlci1mb3JtYXQ6YnVsbGV0Ow0KCW1zby1sZXZlbC10ZXh0Ou+C tzsNCgltc28tbGV2ZWwtdGFiLXN0b3A6bm9uZTsNCgltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9u OmxlZnQ7DQoJdGV4dC1pbmRlbnQ6LS4yNWluOw0KCWZvbnQtZmFtaWx5OlN5bWJvbDt9DQpAbGlz dCBsMDpsZXZlbDgNCgl7bXNvLWxldmVsLW51bWJlci1mb3JtYXQ6YnVsbGV0Ow0KCW1zby1sZXZl bC10ZXh0Om87DQoJbXNvLWxldmVsLXRhYi1zdG9wOm5vbmU7DQoJbXNvLWxldmVsLW51bWJlci1w b3NpdGlvbjpsZWZ0Ow0KCXRleHQtaW5kZW50Oi0uMjVpbjsNCglmb250LWZhbWlseToiQ291cmll ciBOZXciO30NCkBsaXN0IGwwOmxldmVsOQ0KCXttc28tbGV2ZWwtbnVtYmVyLWZvcm1hdDpidWxs ZXQ7DQoJbXNvLWxldmVsLXRleHQ674KnOw0KCW1zby1sZXZlbC10YWItc3RvcDpub25lOw0KCW1z by1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCgl0ZXh0LWluZGVudDotLjI1aW47DQoJZm9u dC1mYW1pbHk6V2luZ2RpbmdzO30NCm9sDQoJe21hcmdpbi1ib3R0b206MGluO30NCnVsDQoJe21h cmdpbi1ib3R0b206MGluO30NCi0tPjwvc3R5bGU+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQo8 bzpzaGFwZWRlZmF1bHRzIHY6ZXh0PSJlZGl0IiBzcGlkbWF4PSIxMDI2IiAvPg0KPC94bWw+PCFb ZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQo8bzpzaGFwZWxheW91dCB2OmV4dD0i ZWRpdCI+DQo8bzppZG1hcCB2OmV4dD0iZWRpdCIgZGF0YT0iMSIgLz4NCjwvbzpzaGFwZWxheW91 dD48L3htbD48IVtlbmRpZl0tLT4NCjwvaGVhZD4NCjxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPSIj MDU2M0MxIiB2bGluaz0iIzk1NEY3MiI+DQo8ZGl2IGNsYXNzPSJXb3JkU2VjdGlvbjEiPg0KPHAg Y2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQiPiZndDsmbmJz cDsgPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2NvbG9yOiMxRjQ5N0QiPklm IHRoZSB1c2VyIHBhc3NlcyBmbGFncyA9PSAwIHRvIHRoZSBuZXcgc3Bka19tYWxsb2MoKSBjYWxs LCB0aGlzIGNvdWxkIGJlIGltcGxlbWVudGVkIGJ5IG1hbGxvYygpIG9yIGVxdWl2YWxlbnQgYmVo aW5kIHRoZSBzY2VuZXMsPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1h bCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFu PjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0 Ij5TbywgZG9lcyB0aGlzIG1lYW4geW914oCZcmUgd2lsbGluZyB0byBjaGFuZ2UgYWxsIGNhbGxz IHRvIG1hbGxvYyhzaXplKSB3aXRoIHNwZGtfbWFsbG9jKHNpemUsIDAsIE5VTEwsIFNQREtfRU5W X1NPQ0tFVF9JRF9BTlksIFNQREtfTUFMTE9DX1NIQVJFKT88bzpwPjwvbzpwPjwvc3Bhbj48L3A+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdCI+PG86 cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5 bGU9ImZvbnQtc2l6ZToxMS4wcHQiPklzIHRoYXQgdGhlIHBsYW4/PG86cD48L286cD48L3NwYW4+ PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQi PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFu IHN0eWxlPSJmb250LXNpemU6MTEuMHB0Ij4vSm9objxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxw IGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0Ij48bzpwPiZu YnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8ZGl2IHN0eWxlPSJib3JkZXI6bm9uZTtib3JkZXItdG9w OnNvbGlkICNCNUM0REYgMS4wcHQ7cGFkZGluZzozLjBwdCAwaW4gMGluIDBpbiI+DQo8cCBjbGFz cz0iTXNvTm9ybWFsIj48Yj48c3BhbiBzdHlsZT0iY29sb3I6YmxhY2siPkZyb206IDwvc3Bhbj48 L2I+PHNwYW4gc3R5bGU9ImNvbG9yOmJsYWNrIj5TUERLICZsdDtzcGRrLWJvdW5jZXNAbGlzdHMu MDEub3JnJmd0OyBvbiBiZWhhbGYgb2YgJnF1b3Q7VmVya2FtcCwgRGFuaWVsJnF1b3Q7ICZsdDtk YW5pZWwudmVya2FtcEBpbnRlbC5jb20mZ3Q7PGJyPg0KPGI+UmVwbHktVG86IDwvYj5TdG9yYWdl IFBlcmZvcm1hbmNlIERldmVsb3BtZW50IEtpdCAmbHQ7c3Bka0BsaXN0cy4wMS5vcmcmZ3Q7PGJy Pg0KPGI+RGF0ZTogPC9iPlRodXJzZGF5LCBNYXkgMywgMjAxOCBhdCAyOjA2IFBNPGJyPg0KPGI+ VG86IDwvYj5TdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50IEtpdCAmbHQ7c3Bka0BsaXN0 cy4wMS5vcmcmZ3Q7LCBKaW0gSGFycmlzICZsdDtqYW1lcy5yLmhhcnJpc0BpbnRlbC5jb20mZ3Q7 LCAmcXVvdDtXYWxrZXIsIEJlbmphbWluJnF1b3Q7ICZsdDtiZW5qYW1pbi53YWxrZXJAaW50ZWwu Y29tJmd0OywgJnF1b3Q7ei5raGF0YW1pODhAZ21haWwuY29tJnF1b3Q7ICZsdDt6LmtoYXRhbWk4 OEBnbWFpbC5jb20mZ3Q7PGJyPg0KPGI+U3ViamVjdDogPC9iPlJlOiBbU1BES10gc3Bka19tYWxs b2MgdnMuIG1hbGxvYzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0Ij48bzpwPiZuYnNw OzwvbzpwPjwvc3Bhbj48L3A+DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxhIG5hbWU9 Il9NYWlsT3JpZ2luYWxCb2R5Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtjb2xvcjoj MUY0OTdEIj5IaSBKb2huLDwvc3Bhbj48bzpwPjwvbzpwPjwvYT48L3A+DQo8cCBjbGFzcz0iTXNv Tm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWJvb2ttYXJrOl9NYWlsT3JpZ2luYWxCb2R5Ij48c3Bh biBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtjb2xvcjojMUY0OTdEIj4mbmJzcDs8L3NwYW4+PG86 cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9Im1z by1ib29rbWFyazpfTWFpbE9yaWdpbmFsQm9keSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4w cHQ7Y29sb3I6IzFGNDk3RCI+VGhlIG5ldyBBUEkgaXMgaW50ZW5kZWQgdG8gYWxsb3cgbWVtb3J5 IHRoYXQgaXMgc2hhcmVkIGFuZCBub3QgRE1BLWFibGUsIHNvIHNwZGtfZG1hX21hbGxvYygpIHdv dWxkbuKAmXQgYmUgYW4gYXBwcm9wcmlhdGUgbmFtZTsgYWxzbywgd2UgZGlkIG5vdCB3YW50DQog dG8gYnJlYWsgcHVibGljIEFQSSBieSBhZGRpbmcgYSBuZXcgZmxhZ3MgcGFyYW1ldGVyIHRvIHRo ZSBleGlzdGluZyBmdW5jdGlvbi4mbmJzcDsgV2UgaW50ZW5kIHRvIHVwZGF0ZSB0aGUgaW50ZXJu YWwgU1BESyBjYWxsZXJzIG9mIHNwZGtfZG1hX21hbGxvYygpIHRvIGFsbCB1c2Ugc3Bka19tYWxs b2MoKSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBmbGFncyAobGVhdmluZyB0aGUgb2xkIG5hbWVzIGZv ciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3Igbm93KS48L3NwYW4+PG86cD48L286cD48L3Nw YW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9Im1zby1ib29rbWFyazpf TWFpbE9yaWdpbmFsQm9keSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Y29sb3I6IzFG NDk3RCI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29O b3JtYWwiPjxzcGFuIHN0eWxlPSJtc28tYm9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPjxzcGFu IHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2NvbG9yOiMxRjQ5N0QiPklmIHRoZSB1c2VyIHBhc3Nl cyBmbGFncyA9PSAwIHRvIHRoZSBuZXcgc3Bka19tYWxsb2MoKSBjYWxsLCB0aGlzIGNvdWxkIGJl IGltcGxlbWVudGVkIGJ5IG1hbGxvYygpIG9yIGVxdWl2YWxlbnQgYmVoaW5kIHRoZSBzY2VuZXMs IHNpbmNlIHRoZSBtZW1vcnkNCiBkb2VzIG5vdCBuZWVkIHRvIGJlIERNQS1hYmxlIG9yIHNoYXJl ZCBhY3Jvc3MgbXVsdGktcHJvY2VzcyBib3VuZGFyaWVzIChpdCBoYXMgbm8gc3BlY2lhbCBwcm9w ZXJ0aWVzKS4mbmJzcDsgRG9lcyB0aGlzIHN1ZmZpY2UgZm9yIHlvdXIgdXNlIGNhc2U/PC9zcGFu PjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxl PSJtc28tYm9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6 MTEuMHB0O2NvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWJvb2ttYXJrOl9NYWlsT3Jp Z2luYWxCb2R5Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtjb2xvcjojMUY0OTdEIj5U aGFua3MsPC9zcGFuPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi PjxzcGFuIHN0eWxlPSJtc28tYm9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPjxzcGFuIHN0eWxl PSJmb250LXNpemU6MTEuMHB0O2NvbG9yOiMxRjQ5N0QiPi0tIERhbmllbA0KPC9zcGFuPjxvOnA+ PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJtc28t Ym9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0 O2NvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8ZGl2 IHN0eWxlPSJib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCBibHVlIDEuNXB0O3BhZGRpbmc6 MGluIDBpbiAwaW4gNC4wcHQiPg0KPGRpdj4NCjxkaXYgc3R5bGU9ImJvcmRlcjpub25lO2JvcmRl ci10b3A6c29saWQgI0UxRTFFMSAxLjBwdDtwYWRkaW5nOjMuMHB0IDBpbiAwaW4gMGluIj4NCjxw IGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJtc28tYm9va21hcms6X01haWxPcmlnaW5h bEJvZHkiPjxhIG5hbWU9Il9fX19fcmVwbHlzZXBhcmF0b3IiPjwvYT48Yj48c3BhbiBzdHlsZT0i Zm9udC1zaXplOjExLjBwdCI+RnJvbTo8L3NwYW4+PC9iPjwvc3Bhbj48c3BhbiBzdHlsZT0ibXNv LWJvb2ttYXJrOl9NYWlsT3JpZ2luYWxCb2R5Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBw dCI+IFNQREsgW21haWx0bzpzcGRrLWJvdW5jZXNAbGlzdHMuMDEub3JnXQ0KPGI+T24gQmVoYWxm IE9mIDwvYj5NZW5lZ2hpbmksIEpvaG48YnI+DQo8Yj5TZW50OjwvYj4gVGh1cnNkYXksIE1heSAz LCAyMDE4IDEwOjUzIEFNPGJyPg0KPGI+VG86PC9iPiBIYXJyaXMsIEphbWVzIFIgJmx0O2phbWVz LnIuaGFycmlzQGludGVsLmNvbSZndDs7IFdhbGtlciwgQmVuamFtaW4gJmx0O2JlbmphbWluLndh bGtlckBpbnRlbC5jb20mZ3Q7OyB6LmtoYXRhbWk4OEBnbWFpbC5jb207IFN0b3JhZ2UgUGVyZm9y bWFuY2UgRGV2ZWxvcG1lbnQgS2l0ICZsdDtzcGRrQGxpc3RzLjAxLm9yZyZndDs8YnI+DQo8Yj5D Yzo8L2I+IE1lbmVnaGluaSwgSm9obiAmbHQ7Sm9obi5NZW5lZ2hpbmlAbmV0YXBwLmNvbSZndDs8 YnI+DQo8Yj5TdWJqZWN0OjwvYj4gW1NQREtdIHNwZGtfbWFsbG9jIHZzLiBtYWxsb2M8L3NwYW4+ PG86cD48L286cD48L3NwYW4+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiPjxzcGFuIHN0eWxlPSJtc28tYm9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPiZuYnNwOzxv OnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJt c28tYm9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEu MHB0Ij5IaSBKaW0sIEJlbiwgYW5kIFphaHJhLjwvc3Bhbj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWJvb2ttYXJrOl9NYWlsT3Jp Z2luYWxCb2R5Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdCI+Jm5ic3A7PC9zcGFuPjxv OnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJt c28tYm9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEu MHB0Ij5JIGFtIHNvcnJ5IEkgZGlkbuKAmXQgY2F0Y2ggdGhpcyBkdXJpbmcgdGhlIGNvZGUgcmV2 aWV3LCBidXQgaXTigJlzIHJlYWxseSBoYXJkIHRvIGtlZXAgdHJhY2sgb2YgYWxsIG9mIHRoZSBj aGFuZ2VzIHRoYXQgYXJlIGdvaW5nIG9uLiZuYnNwOw0KPC9zcGFuPjxvOnA+PC9vOnA+PC9zcGFu PjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJtc28tYm9va21hcms6X01h aWxPcmlnaW5hbEJvZHkiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0Ij4mbmJzcDs8L3Nw YW4+PG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5 bGU9Im1zby1ib29rbWFyazpfTWFpbE9yaWdpbmFsQm9keSI+PC9zcGFuPjxhIGhyZWY9Imh0dHBz Oi8vcmV2aWV3LmdlcnJpdGh1Yi5pby8jL2Mvc3Bkay9zcGRrLyYjNDM7LzQwMjMzNC8iPjxzcGFu IHN0eWxlPSJtc28tYm9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPjxzcGFuIHN0eWxlPSJmb250 LXNpemU6MTEuMHB0Ij5odHRwczovL3Jldmlldy5nZXJyaXRodWIuaW8vIy9jL3NwZGsvc3Bkay8m IzQzOy80MDIzMzQvPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0ibXNvLWJvb2ttYXJrOl9NYWls T3JpZ2luYWxCb2R5Ij48L3NwYW4+PC9hPjxzcGFuIHN0eWxlPSJtc28tYm9va21hcms6X01haWxP cmlnaW5hbEJvZHkiPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi PjxzcGFuIHN0eWxlPSJtc28tYm9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPjxzcGFuIHN0eWxl PSJmb250LXNpemU6MTEuMHB0Ij4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3NwYW4+PC9wPg0K PHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9Im1zby1ib29rbWFyazpfTWFpbE9yaWdp bmFsQm9keSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQiPkFzIHlvdSBtYXkgcmVjYWxs LCB3ZSB3YW50ZWQgdG8gdXNlIHNwZGtfbWFsbG9jIGFuZCBzcGRrX2NhbGxvYyB0byBhYnN0cmFj dCB0aGUgUE9TSVggbWFsbG9jIGFuZCBjYWxsb2MgY2FsbHMuJm5ic3A7IFRoaXMgaXMgc3RpbGwg YW4gaXNzdWUgaW4gbXVsdGlwbGUgcGxhY2VzIGFzIHdlDQogd2FudCBhIG5vbi1ibG9ja2luZyBt YWxsb2MgYW5kIGNhbGxvYyBjYWxsIHRoYXQgcmV0dXJucyBhIHN0YXR1cyByYXRoZXIgdGhhbiBz ZXR0aW5nIGVycm5vIChlLmcuIHRvIEVOT01FTSkuIFJlbWVtYmVyLCBub3QgYWxsIGV4ZWN1dGlv biBlbnZpcm9ubWVudHMgc3VwcG9ydCBlcnJuby48L3NwYW4+PG86cD48L286cD48L3NwYW4+PC9w Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9Im1zby1ib29rbWFyazpfTWFpbE9y aWdpbmFsQm9keSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQiPiZuYnNwOzwvc3Bhbj48 bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0i bXNvLWJvb2ttYXJrOl9NYWlsT3JpZ2luYWxCb2R5Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEx LjBwdCI+Q2FuIHdlIHJldmVydCBjaGFuZ2UgYTc3Y2QzZjcsIGFuZCB1c2UgdGhlIHNwZGtfbWFs bG9jL2NhbGxvYy9mcmVlIGFwaSBmb3IgdGhhdCBwdXJwb3NlPzwvc3Bhbj48bzpwPjwvbzpwPjwv c3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWJvb2ttYXJr Ol9NYWlsT3JpZ2luYWxCb2R5Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdCI+Jm5ic3A7 PC9zcGFuPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFu IHN0eWxlPSJtc28tYm9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPjxzcGFuIHN0eWxlPSJmb250 LXNpemU6MTEuMHB0Ij5BbHNvLCBJIGRvbuKAmXQgc2VlIHRoZSBwb2ludCBvZiBpbnRyb2R1Y2lu ZyBhbiBhZGRpdGlvbmFsIEFQSSBmb3IgZG1hLWFibGUgbWVtb3J5LiZuYnNwOyZuYnNwOyAmbmJz cDtXZSB3ZW50IHRocm91Z2ggdGhpcyBvbmNlIGJlZm9yZS48L3NwYW4+PG86cD48L286cD48L3Nw YW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9Im1zby1ib29rbWFyazpf TWFpbE9yaWdpbmFsQm9keSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQiPiZuYnNwOzwv c3Bhbj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBz dHlsZT0ibXNvLWJvb2ttYXJrOl9NYWlsT3JpZ2luYWxCb2R5Ij48c3BhbiBzdHlsZT0iZm9udC1z aXplOjExLjBwdCI+KiBhNzdjZDNmNyAyMDE4LTA0LTI0Jm5ic3A7IGVudjogYWRkIG1hbGxvYyB2 YXJpYW50cyB3aXRoIERNQS9zaGFyZWFibGUgZmxhZ3MgWyBCZW4gV2Fsa2VyIC8NCjwvc3Bhbj48 L3NwYW4+PGEgaHJlZj0ibWFpbHRvOnoua2hhdGFtaTg4QGdtYWlsLmNvbSI+PHNwYW4gc3R5bGU9 Im1zby1ib29rbWFyazpfTWFpbE9yaWdpbmFsQm9keSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTox MS4wcHQiPnoua2hhdGFtaTg4QGdtYWlsLmNvbTwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9Im1z by1ib29rbWFyazpfTWFpbE9yaWdpbmFsQm9keSI+PC9zcGFuPjwvYT48c3BhbiBzdHlsZT0ibXNv LWJvb2ttYXJrOl9NYWlsT3JpZ2luYWxCb2R5Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBw dCI+DQogXTwvc3Bhbj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFs Ij48c3BhbiBzdHlsZT0ibXNvLWJvb2ttYXJrOl9NYWlsT3JpZ2luYWxCb2R5Ij48c3BhbiBzdHls ZT0iZm9udC1zaXplOjExLjBwdCI+KiA4YTQ0MjIwYiAyMDE3LTA1LTMxJm5ic3A7IGVudjogUmVu YW1lIHNwZGtfbWFsbG9jL3ptYWxsb2MvcmVhbGxvYy9mcmVlIHRvIHNwZGtfZG1hXyhmdW5jKSBb IEppbSBIYXJyaXMgLw0KPC9zcGFuPjwvc3Bhbj48YSBocmVmPSJtYWlsdG86am9obm1AbmV0YXBw LmNvbSI+PHNwYW4gc3R5bGU9Im1zby1ib29rbWFyazpfTWFpbE9yaWdpbmFsQm9keSI+PHNwYW4g c3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQiPmpvaG5tQG5ldGFwcC5jb208L3NwYW4+PC9zcGFuPjxz cGFuIHN0eWxlPSJtc28tYm9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPjwvc3Bhbj48L2E+PHNw YW4gc3R5bGU9Im1zby1ib29rbWFyazpfTWFpbE9yaWdpbmFsQm9keSI+PHNwYW4gc3R5bGU9ImZv bnQtc2l6ZToxMS4wcHQiPg0KIF08L3NwYW4+PG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xh c3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9Im1zby1ib29rbWFyazpfTWFpbE9yaWdpbmFsQm9k eSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpw Pjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWJvb2tt YXJrOl9NYWlsT3JpZ2luYWxCb2R5Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdCI+SSBm dWxseSBzdXBwb3J0IGFkZGluZyB0aGUgU1BES19NQUxMT0NfRE1BIGFuZCBTUERLX01BTExPQ19T SEFSRSBmbGFnIGFuZCBzb2NrZXRfaWQgdG8gc3Bka19kbWFfbWFsbG9jL3ptYWxsb2MoKSwgYW5k IEkgcHJlZmVyIHRvIGRvIHRoaXMgcmF0aGVyIHRoYW4gaW52ZW50IGEgbmV3DQogQVBJIGZvciBh bGxvY2F0aW5nIGRtYS1hYmxlIG1lbW9yeS48L3NwYW4+PG86cD48L286cD48L3NwYW4+PC9wPg0K PHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9Im1zby1ib29rbWFyazpfTWFpbE9yaWdp bmFsQm9keSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQiPiZuYnNwOzwvc3Bhbj48bzpw PjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNv LWJvb2ttYXJrOl9NYWlsT3JpZ2luYWxCb2R5Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBw dCI+dm9pZCAqc3Bka19kbWFfbWFsbG9jKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24sIHVpbnQ2 NF90ICpwaHlzX2FkZHIpOzwvc3Bhbj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWJvb2ttYXJrOl9NYWlsT3JpZ2luYWxCb2R5Ij48 c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdCI+dm9pZCAmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsqc3Bka19tYWxsb2Moc2l6ZV90 IHNpemUsIHNpemVfdCBhbGlnbiwgdWludDY0X3QgKnBoeXNfYWRkciwgaW50IHNvY2tldF9pZCwg dWludDMyX3QgZmxhZ3MpOzwvc3Bhbj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWJvb2ttYXJrOl9NYWlsT3JpZ2luYWxCb2R5Ij48 c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdCI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9z cGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJtc28tYm9va21hcms6 X01haWxPcmlnaW5hbEJvZHkiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0Ij5J4oCZbSBw cm9wb3Npbmc6PC9zcGFuPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiPjxzcGFuIHN0eWxlPSJtc28tYm9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPjxzcGFuIHN0 eWxlPSJmb250LXNpemU6MTEuMHB0Ij4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3NwYW4+PC9w Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9Im1zby1ib29rbWFyazpfTWFpbE9y aWdpbmFsQm9keSI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQiPnZvaWQgKnNwZGtf ZG1hX21hbGxvYyhzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCB1aW50NjRfdCAqcGh5c19hZGRy LCBpbnQgc29ja2V0X2lkLCB1aW50MzJfdCBmbGFncyk7PC9zcGFuPjwvYj48bzpwPjwvbzpwPjwv c3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWJvb2ttYXJr Ol9NYWlsT3JpZ2luYWxCb2R5Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdCI+Jm5ic3A7 PC9zcGFuPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFu IHN0eWxlPSJtc28tYm9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPjxzcGFuIHN0eWxlPSJmb250 LXNpemU6MTEuMHB0Ij4vSm9objwvc3Bhbj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFz cz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWJvb2ttYXJrOl9NYWlsT3JpZ2luYWxCb2R5 Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdCI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+ PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJtc28tYm9va21h cms6X01haWxPcmlnaW5hbEJvZHkiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0Ij5QLlMu IFdoYXQgSSByZWFsbHkgbmVlZCBpcyBhIGZpbHRlciB0aGF0IGFsbG93cyBtZSB0byB3YXRjaCBh bGwgb2YgdGhlIGhlYWRlcnMgaW4gaW5jbHVkZS9zcGRrL3thcGl9LmguJm5ic3A7IExvb2tpbmcg YXQgdGhlIEdlcnJpdEh1YiBkb2N1bWVudGF0aW9uLCBJIHNlZSBubyB3YXkgdG8NCiBkbyB0aGlz LiZuYnNwOyBJdCBhcHBlYXJzIGFsbCBJIGNhbiBkbyBpcyB3YXRjaCB0aGUgbWFzdGVyIGJyYW5j aC48L3NwYW4+PG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw YW4gc3R5bGU9Im1zby1ib29rbWFyazpfTWFpbE9yaWdpbmFsQm9keSI+PHNwYW4gc3R5bGU9ImZv bnQtc2l6ZToxMS4wcHQiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWJvb2ttYXJrOl9NYWlsT3JpZ2luYWxC b2R5Ij48L3NwYW4+PGEgaHJlZj0iaHR0cHM6Ly9yZXZpZXcuZ2Vycml0aHViLmlvL0RvY3VtZW50 YXRpb24vaW50cm8tdXNlci5odG1sI3dhdGNoIj48c3BhbiBzdHlsZT0ibXNvLWJvb2ttYXJrOl9N YWlsT3JpZ2luYWxCb2R5Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdCI+aHR0cHM6Ly9y ZXZpZXcuZ2Vycml0aHViLmlvL0RvY3VtZW50YXRpb24vaW50cm8tdXNlci5odG1sI3dhdGNoPC9z cGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0ibXNvLWJvb2ttYXJrOl9NYWlsT3JpZ2luYWxCb2R5Ij48 L3NwYW4+PC9hPjxzcGFuIHN0eWxlPSJtc28tYm9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPjxv OnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJt c28tYm9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEu MHB0Ij4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05v cm1hbCI+PHNwYW4gc3R5bGU9Im1zby1ib29rbWFyazpfTWFpbE9yaWdpbmFsQm9keSI+PHNwYW4g c3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvc3Bhbj48 L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWJvb2ttYXJrOl9NYWls T3JpZ2luYWxCb2R5Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdCI+Jm5ic3A7PC9zcGFu PjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxl PSJtc28tYm9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6 MTEuMHB0Ij4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1z b05vcm1hbCI+PHNwYW4gc3R5bGU9Im1zby1ib29rbWFyazpfTWFpbE9yaWdpbmFsQm9keSI+PHNw YW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvc3Bh bj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWJvb2ttYXJrOl9N YWlsT3JpZ2luYWxCb2R5Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdCI+Jm5ic3A7PC9z cGFuPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0 eWxlPSJtc28tYm9va21hcms6X01haWxPcmlnaW5hbEJvZHkiPjxzcGFuIHN0eWxlPSJmb250LXNp emU6MTEuMHB0Ij4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9Im1zby1ib29rbWFyazpfTWFpbE9yaWdpbmFsQm9keSI+ PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwv c3Bhbj48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0K --===============3320178388069750684==--