From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from fmr03.intel.com ([143.183.121.5]:4565 "EHLO hermes.sc.intel.com") by vger.kernel.org with ESMTP id S266113AbUFEAQS (ORCPT ); Fri, 4 Jun 2004 20:16:18 -0400 Message-ID: <40C110C9.2060900@intel.com> Date: Fri, 04 Jun 2004 17:16:09 -0700 From: Arun Sharma MIME-Version: 1.0 Subject: Re: =?iso-8859-1?Q?Re:_sys_getdents64_needs_compat_wrapper_??= References: <26879984$108508699040ad1d0eba5381.88033699@config20.schlund.de> In-Reply-To: <26879984$108508699040ad1d0eba5381.88033699@config20.schlund.de> Content-Type: multipart/mixed; boundary="------------000105020400060906080403" To: Arnd Bergmann Cc: linux-arch@vger.kernel.org List-ID: This is a multi-part message in MIME format. --------------000105020400060906080403 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit On 5/20/2004 2:06 PM, Arnd Bergmann wrote: > Arnd Bergmann schrieb am 20.05.2004, 22:54:01: > >>The attachment has an older (but so far untested) patch of mine >>to consolidate the syscalls from fs/readdir.c. > Thanks for the patch. We made a few changes to the patch: - use put_user instead of copy_to_user for simple data types. - Couple of more instances where a 64 bit copy needs to be split into two compat_filldir64(): __put_user(offset, &dirent->d_off) compat_sys_getdents64(): __put_user(d_off, &lastdirent->d_off) With these changes, we don't see unaligned faults anymore. -Arun --------------000105020400060906080403 Content-Type: text/plain; name="readdir_ive.1.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="readdir_ive.1.diff" ZGlmZiAtTnVyYXAgYS9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMgYi9hcmNoL2lhNjQv aWEzMi9pYTMyX2VudHJ5LlMKLS0tIGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TCTIw MDQtMDUtMTAgMTA6MzI6MzguMDAwMDAwMDAwICswODAwCisrKyBiL2FyY2gvaWE2NC9pYTMy L2lhMzJfZW50cnkuUwkyMDA0LTA2LTAxIDE2OjA4OjA5LjI2ODE0Njc4MCArMDgwMApAQCAt MzQ5LDcgKzM0OSw3IEBAIGlhMzJfc3lzY2FsbF90YWJsZToKIAlkYXRhOCBzeXNfc2V0ZnN1 aWQJLyogMTYtYml0IHZlcnNpb24gKi8KIAlkYXRhOCBzeXNfc2V0ZnNnaWQJLyogMTYtYml0 IHZlcnNpb24gKi8KIAlkYXRhOCBzeXNfbGxzZWVrCSAgLyogMTQwICovCi0JZGF0YTggc3lz MzJfZ2V0ZGVudHMKKwlkYXRhOCBjb21wYXRfc3lzX2dldGRlbnRzCiAJZGF0YTggc3lzMzJf c2VsZWN0CiAJZGF0YTggc3lzX2Zsb2NrCiAJZGF0YTggc3lzMzJfbXN5bmMKQEAgLTQyOCw3 ICs0MjgsNyBAQCBpYTMyX3N5c2NhbGxfdGFibGU6CiAJZGF0YTggc3lzX3Bpdm90X3Jvb3QK IAlkYXRhOCBzeXNfbWluY29yZQogCWRhdGE4IHN5c19tYWR2aXNlCi0JZGF0YTggc3lzX2dl dGRlbnRzNjQJICAvKiAyMjAgKi8KKwlkYXRhOCBjb21wYXRfc3lzX2dldGRlbnRzNjQJICAv KiAyMjAgKi8KIAlkYXRhOCBjb21wYXRfc3lzX2ZjbnRsNjQKIAlkYXRhOCBzeXNfbmlfc3lz Y2FsbAkJLyogcmVzZXJ2ZWQgZm9yIFRVWCAqLwogCWRhdGE4IHN5c19uaV9zeXNjYWxsCQkv KiByZXNlcnZlZCBmb3IgU2VjdXJpdHkgKi8KZGlmZiAtTnVyYXAgYS9mcy9jb21wYXQuYyBi L2ZzL2NvbXBhdC5jCi0tLSBhL2ZzL2NvbXBhdC5jCTIwMDQtMDUtMTAgMTA6MzI6MjkuMDAw MDAwMDAwICswODAwCisrKyBiL2ZzL2NvbXBhdC5jCTIwMDQtMDYtMDEgMTY6MDg6MzguNDc0 MjAxMTEwICswODAwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY2Fs bHMuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RpcmVudC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+ CQkvKiBzaW9jZGV2cHJpdmF0ZV9pb2N0bCAqLwogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3Mu aD4KQEAgLTc5NCwzICs3OTUsMjUyIEBAIGFzbWxpbmthZ2UgaW50IGNvbXBhdF9zeXNfbW91 bnQoY2hhciBfX3UKIAlyZXR1cm4gcmV0dmFsOwogfQogCisjZGVmaW5lIE5BTUVfT0ZGU0VU KGRlKSAoKGludCkgKChkZSktPmRfbmFtZSAtIChjaGFyICopIChkZSkpKQorI2RlZmluZSBD T01QQVRfUk9VTkRfVVAoeCkgKCgoeCkrc2l6ZW9mKGNvbXBhdF9sb25nX3QpLTEpICYgfihz aXplb2YoY29tcGF0X2xvbmdfdCktMSkpCisKK3N0cnVjdCBjb21wYXRfb2xkX2xpbnV4X2Rp cmVudCB7CisJY29tcGF0X3Vsb25nX3QJZF9pbm87CisJY29tcGF0X3Vsb25nX3QJZF9vZmZz ZXQ7CisJdW5zaWduZWQgc2hvcnQJZF9uYW1sZW47CisJY2hhcgkJZF9uYW1lWzFdOworfTsK Kworc3RydWN0IGNvbXBhdF9yZWFkZGlyX2NhbGxiYWNrIHsKKwlzdHJ1Y3QgY29tcGF0X29s ZF9saW51eF9kaXJlbnQgX191c2VyICogZGlyZW50OworCWludCByZXN1bHQ7Cit9OworCitz dGF0aWMgaW50IGNvbXBhdF9maWxsb25lZGlyKHZvaWQgKiBfX2J1ZiwgY29uc3QgY2hhciAq IG5hbWUsIGludCBuYW1sZW4sIGxvZmZfdCBvZmZzZXQsCisJCSAgICAgIGlub190IGlubywg dW5zaWduZWQgaW50IGRfdHlwZSkKK3sKKwlzdHJ1Y3QgY29tcGF0X3JlYWRkaXJfY2FsbGJh Y2sgKiBidWYgPSBfX2J1ZjsKKwlzdHJ1Y3QgY29tcGF0X29sZF9saW51eF9kaXJlbnQgX191 c2VyICogZGlyZW50OworCisJaWYgKGJ1Zi0+cmVzdWx0KQorCQlyZXR1cm4gLUVJTlZBTDsK KwlidWYtPnJlc3VsdCsrOworCWRpcmVudCA9IGJ1Zi0+ZGlyZW50OworCWlmICghYWNjZXNz X29rKFZFUklGWV9XUklURSwgKHVuc2lnbmVkIGxvbmcpZGlyZW50LAorCQkJKHVuc2lnbmVk IGxvbmcpKGRpcmVudC0+ZF9uYW1lICsgbmFtbGVuICsgMSkgLQorCQkJCSh1bnNpZ25lZCBs b25nKWRpcmVudCkpCisJCWdvdG8gZWZhdWx0OworCWlmICgJX19wdXRfdXNlcihpbm8sICZk aXJlbnQtPmRfaW5vKSB8fAorCQlfX3B1dF91c2VyKG9mZnNldCwgJmRpcmVudC0+ZF9vZmZz ZXQpIHx8CisJCV9fcHV0X3VzZXIobmFtbGVuLCAmZGlyZW50LT5kX25hbWxlbikgfHwKKwkJ X19jb3B5X3RvX3VzZXIoZGlyZW50LT5kX25hbWUsIG5hbWUsIG5hbWxlbikgfHwKKwkJX19w dXRfdXNlcigwLCBkaXJlbnQtPmRfbmFtZSArIG5hbWxlbikpCisJCWdvdG8gZWZhdWx0Owor CXJldHVybiAwOworZWZhdWx0OgorCWJ1Zi0+cmVzdWx0ID0gLUVGQVVMVDsKKwlyZXR1cm4g LUVGQVVMVDsKK30KKworYXNtbGlua2FnZSBsb25nIGNvbXBhdF9vbGRfcmVhZGRpcih1bnNp Z25lZCBpbnQgZmQsCisJc3RydWN0IGNvbXBhdF9vbGRfbGludXhfZGlyZW50IF9fdXNlciAq IGRpcmVudCwgdW5zaWduZWQgaW50IGNvdW50KQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3Qg ZmlsZSAqIGZpbGU7CisJc3RydWN0IGNvbXBhdF9yZWFkZGlyX2NhbGxiYWNrIGJ1ZjsKKwor CWVycm9yID0gLUVCQURGOworCWZpbGUgPSBmZ2V0KGZkKTsKKwlpZiAoIWZpbGUpCisJCWdv dG8gb3V0OworCisJYnVmLnJlc3VsdCA9IDA7CisJYnVmLmRpcmVudCA9IGRpcmVudDsKKwor CWVycm9yID0gdmZzX3JlYWRkaXIoZmlsZSwgY29tcGF0X2ZpbGxvbmVkaXIsICZidWYpOwor CWlmIChlcnJvciA+PSAwKQorCQllcnJvciA9IGJ1Zi5yZXN1bHQ7CisKKwlmcHV0KGZpbGUp Oworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworc3RydWN0IGNvbXBhdF9saW51eF9kaXJl bnQgeworCWNvbXBhdF91bG9uZ190CWRfaW5vOworCWNvbXBhdF91bG9uZ190CWRfb2ZmOwor CXVuc2lnbmVkIHNob3J0CWRfcmVjbGVuOworCWNoYXIJCWRfbmFtZVsxXTsKK307CisKK3N0 cnVjdCBjb21wYXRfZ2V0ZGVudHNfY2FsbGJhY2sgeworCXN0cnVjdCBjb21wYXRfbGludXhf ZGlyZW50IF9fdXNlciAqIGN1cnJlbnRfZGlyOworCXN0cnVjdCBjb21wYXRfbGludXhfZGly ZW50IF9fdXNlciAqIHByZXZpb3VzOworCWludCBjb3VudDsKKwlpbnQgZXJyb3I7Cit9Owor CitzdGF0aWMgaW50IGNvbXBhdF9maWxsZGlyKHZvaWQgKiBfX2J1ZiwgY29uc3QgY2hhciAq IG5hbWUsIGludCBuYW1sZW4sIGxvZmZfdCBvZmZzZXQsCisJCSAgIGlub190IGlubywgdW5z aWduZWQgaW50IGRfdHlwZSkKK3sKKwlzdHJ1Y3QgY29tcGF0X2xpbnV4X2RpcmVudCBfX3Vz ZXIgKiBkaXJlbnQ7CisJc3RydWN0IGNvbXBhdF9nZXRkZW50c19jYWxsYmFjayAqIGJ1ZiA9 IChzdHJ1Y3QgY29tcGF0X2dldGRlbnRzX2NhbGxiYWNrICopIF9fYnVmOworCWludCByZWNs ZW4gPSBDT01QQVRfUk9VTkRfVVAoTkFNRV9PRkZTRVQoZGlyZW50KSArIG5hbWxlbiArIDIp OworCisJYnVmLT5lcnJvciA9IC1FSU5WQUw7CS8qIG9ubHkgdXNlZCBpZiB3ZSBmYWlsLi4g Ki8KKwlpZiAocmVjbGVuID4gYnVmLT5jb3VudCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGly ZW50ID0gYnVmLT5wcmV2aW91czsKKwlpZiAoZGlyZW50KSB7CisJCWlmIChfX3B1dF91c2Vy KG9mZnNldCwgJmRpcmVudC0+ZF9vZmYpKQorCQkJZ290byBlZmF1bHQ7CisJfQorCWRpcmVu dCA9IGJ1Zi0+Y3VycmVudF9kaXI7CisJaWYgKF9fcHV0X3VzZXIoaW5vLCAmZGlyZW50LT5k X2lubykpCisJCWdvdG8gZWZhdWx0OworCWlmIChfX3B1dF91c2VyKHJlY2xlbiwgJmRpcmVu dC0+ZF9yZWNsZW4pKQorCQlnb3RvIGVmYXVsdDsKKwlpZiAoY29weV90b191c2VyKGRpcmVu dC0+ZF9uYW1lLCBuYW1lLCBuYW1sZW4pKQorCQlnb3RvIGVmYXVsdDsKKwlpZiAoX19wdXRf dXNlcigwLCBkaXJlbnQtPmRfbmFtZSArIG5hbWxlbikpCisJCWdvdG8gZWZhdWx0OworCWlm IChfX3B1dF91c2VyKGRfdHlwZSwgKGNoYXIgKikgZGlyZW50ICsgcmVjbGVuIC0gMSkpCisJ CWdvdG8gZWZhdWx0OworCWJ1Zi0+cHJldmlvdXMgPSBkaXJlbnQ7CisJZGlyZW50ID0gKHZv aWQgX191c2VyICopZGlyZW50ICsgcmVjbGVuOworCWJ1Zi0+Y3VycmVudF9kaXIgPSBkaXJl bnQ7CisJYnVmLT5jb3VudCAtPSByZWNsZW47CisJcmV0dXJuIDA7CitlZmF1bHQ6CisJYnVm LT5lcnJvciA9IC1FRkFVTFQ7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKK2FzbWxpbmthZ2Ug bG9uZyBjb21wYXRfc3lzX2dldGRlbnRzKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGNvbXBh dF9saW51eF9kaXJlbnQgX191c2VyICogZGlyZW50LCB1bnNpZ25lZCBpbnQgY291bnQpCit7 CisJc3RydWN0IGZpbGUgKiBmaWxlOworCXN0cnVjdCBjb21wYXRfbGludXhfZGlyZW50IF9f dXNlciAqIGxhc3RkaXJlbnQ7CisJc3RydWN0IGNvbXBhdF9nZXRkZW50c19jYWxsYmFjayBi dWY7CisJaW50IGVycm9yOworCisJZXJyb3IgPSAtRUZBVUxUOworCWlmICghYWNjZXNzX29r KFZFUklGWV9XUklURSwgZGlyZW50LCBjb3VudCkpCisJCWdvdG8gb3V0OworCisJZXJyb3Ig PSAtRUJBREY7CisJZmlsZSA9IGZnZXQoZmQpOworCWlmICghZmlsZSkKKwkJZ290byBvdXQ7 CisKKwlidWYuY3VycmVudF9kaXIgPSBkaXJlbnQ7CisJYnVmLnByZXZpb3VzID0gTlVMTDsK KwlidWYuY291bnQgPSBjb3VudDsKKwlidWYuZXJyb3IgPSAwOworCisJZXJyb3IgPSB2ZnNf cmVhZGRpcihmaWxlLCBjb21wYXRfZmlsbGRpciwgJmJ1Zik7CisJaWYgKGVycm9yIDwgMCkK KwkJZ290byBvdXRfcHV0ZjsKKwllcnJvciA9IGJ1Zi5lcnJvcjsKKwlsYXN0ZGlyZW50ID0g YnVmLnByZXZpb3VzOworCWlmIChsYXN0ZGlyZW50KSB7CisJCWlmIChwdXRfdXNlcihmaWxl LT5mX3BvcywgJmxhc3RkaXJlbnQtPmRfb2ZmKSkKKwkJCWVycm9yID0gLUVGQVVMVDsKKwkJ ZWxzZQorCQkJZXJyb3IgPSBjb3VudCAtIGJ1Zi5jb3VudDsKKwl9CisKK291dF9wdXRmOgor CWZwdXQoZmlsZSk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCisjaWZuZGVmIF9fQVJD SF9PTUlUX0NPTVBBVF9TWVNfR0VUREVOVFM2NAorI2RlZmluZSBDT01QQVRfUk9VTkRfVVA2 NCh4KSAoKCh4KStzaXplb2YodTY0KS0xKSAmIH4oc2l6ZW9mKHU2NCktMSkpCisKK3N0cnVj dCBjb21wYXRfZ2V0ZGVudHNfY2FsbGJhY2s2NCB7CisJc3RydWN0IGxpbnV4X2RpcmVudDY0 IF9fdXNlciAqIGN1cnJlbnRfZGlyOworCXN0cnVjdCBsaW51eF9kaXJlbnQ2NCBfX3VzZXIg KiBwcmV2aW91czsKKwlpbnQgY291bnQ7CisJaW50IGVycm9yOworfTsKKworc3RhdGljIGlu dCBjb21wYXRfZmlsbGRpcjY0KHZvaWQgKiBfX2J1ZiwgY29uc3QgY2hhciAqIG5hbWUsIGlu dCBuYW1sZW4sIGxvZmZfdCBvZmZzZXQsCisJCSAgICAgaW5vX3QgaW5vLCB1bnNpZ25lZCBp bnQgZF90eXBlKQoreworCXN0cnVjdCBsaW51eF9kaXJlbnQ2NCBfX3VzZXIgKmRpcmVudDsK KwlzdHJ1Y3QgY29tcGF0X2dldGRlbnRzX2NhbGxiYWNrNjQgKiBidWYgPSAoc3RydWN0IGNv bXBhdF9nZXRkZW50c19jYWxsYmFjazY0ICopIF9fYnVmOworCWludCBqaiA9IE5BTUVfT0ZG U0VUKGRpcmVudCk7CisJaW50IHJlY2xlbiA9IENPTVBBVF9ST1VORF9VUDY0KGpqICsgbmFt bGVuICsgMSk7CisJdTY0IG9mZjsKKworCWJ1Zi0+ZXJyb3IgPSAtRUlOVkFMOwkvKiBvbmx5 IHVzZWQgaWYgd2UgZmFpbC4uICovCisJaWYgKHJlY2xlbiA+IGJ1Zi0+Y291bnQpCisJCXJl dHVybiAtRUlOVkFMOworCWRpcmVudCA9IGJ1Zi0+cHJldmlvdXM7CisKKwlpZiAoZGlyZW50 KSB7CisJCWlmICgoX19wdXRfdXNlcihvZmZzZXQsICh1MzIgKikmZGlyZW50LT5kX29mZikp CisJCSB8fCAoX19wdXRfdXNlcihvZmZzZXQgPj4gMzIsICgodTMyICopJmRpcmVudC0+ZF9v ZmYpICsgMSkpKQorCQkJZ290byBlZmF1bHQ7CisJfQorCWRpcmVudCA9IGJ1Zi0+Y3VycmVu dF9kaXI7CisJaWYgKChfX3B1dF91c2VyKGlubywgKHUzMiAqKSZkaXJlbnQtPmRfaW5vKSkK KwkgfHwgKF9fcHV0X3VzZXIoaW5vID4+IDMyLCAoKHUzMiAqKSZkaXJlbnQtPmRfaW5vKSAr IDEpKSkKKwkJZ290byBlZmF1bHQ7CisJb2ZmID0gMDsKKwlpZiAoKF9fcHV0X3VzZXIob2Zm LCAodTMyICopJmRpcmVudC0+ZF9vZmYpKQorCSB8fCAoX19wdXRfdXNlcihvZmYgPj4gMzIs ICgodTMyICopJmRpcmVudC0+ZF9vZmYpICsgMSkpKQorCQlnb3RvIGVmYXVsdDsKKwlpZiAo X19wdXRfdXNlcihyZWNsZW4sICZkaXJlbnQtPmRfcmVjbGVuKSkKKwkJZ290byBlZmF1bHQ7 CisJaWYgKF9fcHV0X3VzZXIoZF90eXBlLCAmZGlyZW50LT5kX3R5cGUpKQorCQlnb3RvIGVm YXVsdDsKKwlpZiAoY29weV90b191c2VyKGRpcmVudC0+ZF9uYW1lLCBuYW1lLCBuYW1sZW4p KQorCQlnb3RvIGVmYXVsdDsKKwlpZiAoX19wdXRfdXNlcigwLCBkaXJlbnQtPmRfbmFtZSAr IG5hbWxlbikpCisJCWdvdG8gZWZhdWx0OworCWJ1Zi0+cHJldmlvdXMgPSBkaXJlbnQ7CisJ ZGlyZW50ID0gKHZvaWQgX191c2VyICopZGlyZW50ICsgcmVjbGVuOworCWJ1Zi0+Y3VycmVu dF9kaXIgPSBkaXJlbnQ7CisJYnVmLT5jb3VudCAtPSByZWNsZW47CisJcmV0dXJuIDA7Citl ZmF1bHQ6CisJYnVmLT5lcnJvciA9IC1FRkFVTFQ7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisK K2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2dldGRlbnRzNjQodW5zaWduZWQgaW50IGZk LCBzdHJ1Y3QgbGludXhfZGlyZW50NjQgX191c2VyICogZGlyZW50LCB1bnNpZ25lZCBpbnQg Y291bnQpCit7CisJc3RydWN0IGZpbGUgKiBmaWxlOworCXN0cnVjdCBsaW51eF9kaXJlbnQ2 NCBfX3VzZXIgKiBsYXN0ZGlyZW50OworCXN0cnVjdCBjb21wYXRfZ2V0ZGVudHNfY2FsbGJh Y2s2NCBidWY7CisJaW50IGVycm9yOworCisJZXJyb3IgPSAtRUZBVUxUOworCWlmICghYWNj ZXNzX29rKFZFUklGWV9XUklURSwgZGlyZW50LCBjb3VudCkpCisJCWdvdG8gb3V0OworCisJ ZXJyb3IgPSAtRUJBREY7CisJZmlsZSA9IGZnZXQoZmQpOworCWlmICghZmlsZSkKKwkJZ290 byBvdXQ7CisKKwlidWYuY3VycmVudF9kaXIgPSBkaXJlbnQ7CisJYnVmLnByZXZpb3VzID0g TlVMTDsKKwlidWYuY291bnQgPSBjb3VudDsKKwlidWYuZXJyb3IgPSAwOworCisJZXJyb3Ig PSB2ZnNfcmVhZGRpcihmaWxlLCBjb21wYXRfZmlsbGRpcjY0LCAmYnVmKTsKKwlpZiAoZXJy b3IgPCAwKQorCQlnb3RvIG91dF9wdXRmOworCWVycm9yID0gYnVmLmVycm9yOworCWxhc3Rk aXJlbnQgPSBidWYucHJldmlvdXM7CisJaWYgKGxhc3RkaXJlbnQpIHsKKwkJdHlwZW9mKGxh c3RkaXJlbnQtPmRfb2ZmKSBkX29mZiA9IGZpbGUtPmZfcG9zOworCQlfX3B1dF91c2VyKGRf b2ZmLCAodTMyICopJmxhc3RkaXJlbnQtPmRfb2ZmKTsKKwkJX19wdXRfdXNlcihkX29mZiA+ PiAzMiwgKCh1MzIgKikmbGFzdGRpcmVudC0+ZF9vZmYpICsgMSk7CisJCWVycm9yID0gY291 bnQgLSBidWYuY291bnQ7CisJfQorCitvdXRfcHV0ZjoKKwlmcHV0KGZpbGUpOworb3V0Ogor CXJldHVybiBlcnJvcjsKK30KKyNlbmRpZiAvKiAhIF9fQVJDSF9PTUlUX0NPTVBBVF9TWVNf R0VUREVOVFM2NCAqLworCg== --------------000105020400060906080403--