From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============4524697904940969269==" MIME-Version: 1.0 From: Luse, Paul E Subject: Re: [SPDK] Problem with Blobstore when write 65MB continously Date: Wed, 10 Jan 2018 14:03:35 +0000 Message-ID: <82C9F782B054C94B9FC04A331649C77A9D492448@fmsmsx104.amr.corp.intel.com> In-Reply-To: CAOYRFkn=bvfcbLGx19EKEaxK1tiV4gYGvym9wLVOin5rwd8CqA@mail.gmail.com List-ID: To: spdk@lists.01.org --===============4524697904940969269== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Zhang, Not sure off the top of my head but I=E2=80=99m hapy to take a quick look, = will let ya know what I see on this end=E2=80=A6 -Paul From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Zhengyu Zhang Sent: Tuesday, January 9, 2018 8:16 PM To: Storage Performance Development Kit Subject: [SPDK] Problem with Blobstore when write 65MB continously Hi list! I want to write some app with Blobstore in SPDK. I am playing with example/= blob/hello_world/hello_blob.c for a while. I modified the hello_blob to mak= e it write more pages than its original one page: for ( i =3D 0; i < SOMEVAL; i ++) { spdk_bs_io_write_blob(hello_context->blob, hello_context->channel, hello_context->write_buff, offset, 32, write_complete, hello_context); offset +=3D 32; } I meant to write blob for SOMEVAL times and 32 pages for each write. When t= he total amount of writing data is below 64M (SOMEVAL <=3D 512), it works f= ine. However, when the total size is over 64M, e.g. 65M, it breaks: hello_blob.c: 388:blob_create_complete: *NOTICE*: new blob id 4294967296 hello_blob.c: 327:open_complete: *NOTICE*: entry hello_blob.c: 338:open_complete: *NOTICE*: blobstore has FREE clusters of 3= 80063 hello_blob.c: 358:open_complete: *NOTICE*: resized blob now has USED cluste= rs of 65 hello_blob.c: 295:sync_complete: *NOTICE*: entry hello_blob.c: 253:blob_write: *NOTICE*: entry hello_blob.c: 232:write_complete: *NOTICE*: entry hello_blob.c: 115:unload_bs: *ERROR*: Error in write completion (err -12) blobstore.c:2563:spdk_bs_unload: *ERROR*: Blobstore still has open blobs hello_blob.c: 99:unload_complete: *NOTICE*: entry hello_blob.c: 101:unload_complete: *ERROR*: Error -16 unloading the bobstore I have no idea what is going on ... can anyone help? Thanks ZHengyu --===============4524697904940969269== 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 IkNhbWJyaWEgTWF0aCI7DQoJcGFub3NlLTE6MiA0IDUgMyA1IDQgNiAzIDIgNDt9DQpAZm9udC1m YWNlDQoJe2ZvbnQtZmFtaWx5OkNhbGlicmk7DQoJcGFub3NlLTE6MiAxNSA1IDIgMiAyIDQgMyAy IDQ7fQ0KLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8NCnAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWws IGRpdi5Nc29Ob3JtYWwNCgl7bWFyZ2luOjBpbjsNCgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7DQoJ Zm9udC1zaXplOjEyLjBwdDsNCglmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIixzZXJpZjt9 DQphOmxpbmssIHNwYW4uTXNvSHlwZXJsaW5rDQoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsNCglj b2xvcjojMDU2M0MxOw0KCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQ0KYTp2aXNpdGVkLCBz cGFuLk1zb0h5cGVybGlua0ZvbGxvd2VkDQoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsNCgljb2xv cjojOTU0RjcyOw0KCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQ0Kc3Bhbi5FbWFpbFN0eWxl MTcNCgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWwtcmVwbHk7DQoJZm9udC1mYW1pbHk6IkNhbGli cmkiLHNhbnMtc2VyaWY7DQoJY29sb3I6IzFGNDk3RDt9DQouTXNvQ2hwRGVmYXVsdA0KCXttc28t c3R5bGUtdHlwZTpleHBvcnQtb25seTsNCglmb250LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJp Zjt9DQpAcGFnZSBXb3JkU2VjdGlvbjENCgl7c2l6ZTo4LjVpbiAxMS4waW47DQoJbWFyZ2luOjEu MGluIDEuMGluIDEuMGluIDEuMGluO30NCmRpdi5Xb3JkU2VjdGlvbjENCgl7cGFnZTpXb3JkU2Vj dGlvbjE7fQ0KLS0+PC9zdHlsZT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4NCjxvOnNoYXBlZGVm YXVsdHMgdjpleHQ9ImVkaXQiIHNwaWRtYXg9IjEwMjYiIC8+DQo8L3htbD48IVtlbmRpZl0tLT48 IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4NCjxvOnNoYXBlbGF5b3V0IHY6ZXh0PSJlZGl0Ij4NCjxv OmlkbWFwIHY6ZXh0PSJlZGl0IiBkYXRhPSIxIiAvPg0KPC9vOnNoYXBlbGF5b3V0PjwveG1sPjwh W2VuZGlmXS0tPg0KPC9oZWFkPg0KPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9IiMwNTYzQzEiIHZs aW5rPSIjOTU0RjcyIj4NCjxkaXYgY2xhc3M9IldvcmRTZWN0aW9uMSI+DQo8cCBjbGFzcz0iTXNv Tm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtD YWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+SGkgWmhhbmcsPG86cD48L286 cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6 ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9y OiMxRjQ5N0QiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGli cmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj5Ob3Qgc3VyZSBvZmYgdGhlIHRvcCBv ZiBteSBoZWFkIGJ1dCBJ4oCZbSBoYXB5IHRvIHRha2UgYSBxdWljayBsb29rLCB3aWxsIGxldCB5 YSBrbm93IHdoYXQgSSBzZWUgb24gdGhpcyBlbmTigKY8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZh bWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+PG86cD4m bmJzcDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9 ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNl cmlmO2NvbG9yOiMxRjQ5N0QiPi1QYXVsPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCI+PGEgbmFtZT0iX01haWxFbmRDb21wb3NlIj48c3BhbiBzdHlsZT0iZm9udC1z aXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29s b3I6IzFGNDk3RCI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9hPjwvcD4NCjxwIGNsYXNzPSJN c29Ob3JtYWwiPjxhIG5hbWU9Il9fX19fcmVwbHlzZXBhcmF0b3IiPjwvYT48Yj48c3BhbiBzdHls ZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMt c2VyaWYiPkZyb206PC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250 LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWYiPiBTUERLIFttYWlsdG86c3Bk ay1ib3VuY2VzQGxpc3RzLjAxLm9yZ10NCjxiPk9uIEJlaGFsZiBPZiA8L2I+Wmhlbmd5dSBaaGFu Zzxicj4NCjxiPlNlbnQ6PC9iPiBUdWVzZGF5LCBKYW51YXJ5IDksIDIwMTggODoxNiBQTTxicj4N CjxiPlRvOjwvYj4gU3RvcmFnZSBQZXJmb3JtYW5jZSBEZXZlbG9wbWVudCBLaXQgJmx0O3NwZGtA bGlzdHMuMDEub3JnJmd0Ozxicj4NCjxiPlN1YmplY3Q6PC9iPiBbU1BES10gUHJvYmxlbSB3aXRo IEJsb2JzdG9yZSB3aGVuIHdyaXRlIDY1TUIgY29udGlub3VzbHk8bzpwPjwvbzpwPjwvc3Bhbj48 L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxkaXY+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj5IaSBsaXN0ITxvOnA+PC9vOnA+PC9wPg0KPGRpdj4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAg Y2xhc3M9Ik1zb05vcm1hbCI+SSB3YW50IHRvIHdyaXRlIHNvbWUgYXBwIHdpdGggQmxvYnN0b3Jl IGluIFNQREsuIEkgYW0gcGxheWluZyB3aXRoIGV4YW1wbGUvYmxvYi9oZWxsb193b3JsZC9oZWxs b19ibG9iLmMgZm9yIGEgd2hpbGUuIEkgbW9kaWZpZWQgdGhlIGhlbGxvX2Jsb2IgdG8gbWFrZSBp dCB3cml0ZSBtb3JlIHBhZ2VzIHRoYW4gaXRzIG9yaWdpbmFsIG9uZSBwYWdlOjxvOnA+PC9vOnA+ PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286 cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5mb3IgKCBpID0gMDsg aSAmbHQ7IFNPTUVWQUw7IGkgJiM0MzsmIzQzOykgezxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8 ZGl2Pg0KPGJsb2NrcXVvdGUgc3R5bGU9Im1hcmdpbi1sZWZ0OjMwLjBwdDttYXJnaW4tcmlnaHQ6 MGluIj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5zcGRrX2JzX2lvX3dyaXRlX2Jsb2Io aGVsbG9fY29udGV4dC0mZ3Q7YmxvYiwgaGVsbG9fY29udGV4dC0mZ3Q7Y2hhbm5lbCw8bzpwPjwv bzpwPjwvcD4NCjwvZGl2Pg0KPC9ibG9ja3F1b3RlPg0KPC9kaXY+DQo8YmxvY2txdW90ZSBzdHls ZT0ibWFyZ2luLWxlZnQ6MzAuMHB0O21hcmdpbi1yaWdodDowaW4iPg0KPGJsb2NrcXVvdGUgc3R5 bGU9Im1hcmdpbi1sZWZ0OjMwLjBwdDttYXJnaW4tcmlnaHQ6MGluIj4NCjxibG9ja3F1b3RlIHN0 eWxlPSJtYXJnaW4tbGVmdDozMC4wcHQ7bWFyZ2luLXJpZ2h0OjBpbiI+DQo8YmxvY2txdW90ZSBz dHlsZT0ibWFyZ2luLWxlZnQ6MzAuMHB0O21hcmdpbi1yaWdodDowaW4iPg0KPGRpdj4NCjxibG9j a3F1b3RlIHN0eWxlPSJtYXJnaW4tbGVmdDozMC4wcHQ7bWFyZ2luLXJpZ2h0OjBpbiI+DQo8ZGl2 Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+aGVsbG9fY29udGV4dC0mZ3Q7d3JpdGVfYnVmZiwgb2Zm c2V0LCAzMiw8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiPiZuYnNwO3dyaXRlX2NvbXBsZXRlLCZuYnNwO2hlbGxvX2NvbnRleHQpOzxvOnA+PC9vOnA+ PC9wPg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+DQo8L2Rpdj4NCjwvYmxvY2txdW90ZT4NCjwvYmxv Y2txdW90ZT4NCjwvYmxvY2txdW90ZT4NCjwvYmxvY2txdW90ZT4NCjxibG9ja3F1b3RlIHN0eWxl PSJtYXJnaW4tbGVmdDozMC4wcHQ7bWFyZ2luLXJpZ2h0OjBpbiI+DQo8ZGl2Pg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCI+b2Zmc2V0ICYjNDM7PSAzMjs8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9i bG9ja3F1b3RlPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+fTxvOnA+PC9vOnA+PC9wPg0KPGRpdj4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2 Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+SSBtZWFudCB0byB3cml0ZSBibG9iIGZvciBTT01FVkFM IHRpbWVzJm5ic3A7YW5kIDMyIHBhZ2VzIGZvciBlYWNoIHdyaXRlLiBXaGVuIHRoZSB0b3RhbCBh bW91bnQgb2Ygd3JpdGluZyBkYXRhIGlzIGJlbG93IDY0TSAoU09NRVZBTCAmbHQ7PSA1MTIpLCBp dCB3b3JrcyBmaW5lLiBIb3dldmVyLCB3aGVuIHRoZSB0b3RhbCBzaXplIGlzIG92ZXIgNjRNLCBl LmcuIDY1TSwgaXQgYnJlYWtzOjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xh c3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8Ymxv Y2txdW90ZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MzAuMHB0O21hcmdpbi1yaWdodDowaW4iPg0KPGRp dj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPmhlbGxvX2Jsb2IuYzogMzg4OmJsb2JfY3JlYXRlX2Nv bXBsZXRlOiAqTk9USUNFKjogbmV3IGJsb2IgaWQgNDI5NDk2NzI5NjxvOnA+PC9vOnA+PC9wPg0K PC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+aGVsbG9fYmxvYi5jOiAzMjc6b3Bl bl9jb21wbGV0ZTogKk5PVElDRSo6IGVudHJ5PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5oZWxsb19ibG9iLmM6IDMzODpvcGVuX2NvbXBsZXRlOiAq Tk9USUNFKjogYmxvYnN0b3JlIGhhcyBGUkVFIGNsdXN0ZXJzIG9mIDM4MDA2MzxvOnA+PC9vOnA+ PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+aGVsbG9fYmxvYi5jOiAz NTg6b3Blbl9jb21wbGV0ZTogKk5PVElDRSo6IHJlc2l6ZWQgYmxvYiBub3cgaGFzIFVTRUQgY2x1 c3RlcnMgb2YgNjU8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29O b3JtYWwiPmhlbGxvX2Jsb2IuYzogMjk1OnN5bmNfY29tcGxldGU6ICpOT1RJQ0UqOiBlbnRyeTxv OnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+aGVsbG9f YmxvYi5jOiAyNTM6YmxvYl93cml0ZTogKk5PVElDRSo6IGVudHJ5PG86cD48L286cD48L3A+DQo8 L2Rpdj4NCjwvYmxvY2txdW90ZT4NCjwvZGl2Pg0KPGRpdj4NCjxibG9ja3F1b3RlIHN0eWxlPSJt YXJnaW4tbGVmdDozMC4wcHQ7bWFyZ2luLXJpZ2h0OjBpbiI+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1z b05vcm1hbCI+aGVsbG9fYmxvYi5jOiAyMzI6d3JpdGVfY29tcGxldGU6ICpOT1RJQ0UqOiBlbnRy eTxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+aGVs bG9fYmxvYi5jOiAxMTU6dW5sb2FkX2JzOiAqRVJST1IqOiBFcnJvciBpbiB3cml0ZSBjb21wbGV0 aW9uIChlcnIgLTEyKTxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1z b05vcm1hbCI+YmxvYnN0b3JlLmM6MjU2MzpzcGRrX2JzX3VubG9hZDogKkVSUk9SKjogQmxvYnN0 b3JlIHN0aWxsIGhhcyBvcGVuIGJsb2JzJm5ic3A7PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxk aXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5oZWxsb19ibG9iLmM6Jm5ic3A7IDk5OnVubG9hZF9j b21wbGV0ZTogKk5PVElDRSo6IGVudHJ5Jm5ic3A7PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxk aXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5oZWxsb19ibG9iLmM6IDEwMTp1bmxvYWRfY29tcGxl dGU6ICpFUlJPUio6IEVycm9yIC0xNiB1bmxvYWRpbmcgdGhlIGJvYnN0b3JlPG86cD48L286cD48 L3A+DQo8L2Rpdj4NCjwvYmxvY2txdW90ZT4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29O b3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1z b05vcm1hbCI+SSBoYXZlIG5vIGlkZWEgd2hhdCBpcyBnb2luZyBvbiAuLi4mbmJzcDsgY2FuIGFu eW9uZSBoZWxwPzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05v cm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNv Tm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJN c29Ob3JtYWwiPlRoYW5rczxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCI+Wkhlbmd5dTxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2 Pg0KPC9ib2R5Pg0KPC9odG1sPg0K --===============4524697904940969269==--