[PHP-dev 618] RFC: 新 API 草案

Moriyoshi Koizumi php-dev@php.gr.jp
Tue, 26 Nov 2002 11:57:03 +0900


--------------Boundary_S8q:MvB9Uh5UrqG
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

小泉です。

# さっきは間違えて本家の方に送ってしまいました

本家の方と、sf.jp の方のソースを見比べつつ、
mbstring API を考えてみました。添付のファイルをご覧下さい。
これをたたき台に最終的な API を決定し両者の統合を図っていければと
思います。といっても、決してこのまま突っ走っていくわけではありませんので
ぜひご意見ください。

大きな変更点は、スレッドローカルな構造体(tsrm resource)に
エラー番号を格納するのを止めた点です。
コードの可読性を上げる一方で、デバッグがしづらくすると判断したためです。

あとは、エラー報告用の関数ポインタ(php_mb_err_report_func)を設けようとして
います。(いま書き途中で中途半端になってしまっています)
前述したように、いつでも php_error_docref を呼べるわけではないので、
場合に応じてエラーの出力方法を変えられるようにこのような設計にしました。

これに関しては、現在本家の方で、エラーのローカライズについて議論が白熱して
いますので、そちらを参照しつつ意見いただければと思います。


--------------Boundary_S8q:MvB9Uh5UrqG
Content-Type: application/octet-stream; name="php_mb_api.h"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="php_mb_api.h"

LyoKICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgIHwgUEhQIFZlcnNpb24gNCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSsKICAgfCBDb3B5cmlnaHQgKGMpIDE5OTctMjAwMiBUaGUgUEhQIEdy
b3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICstLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKwogICB8IFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB2ZXJzaW9uIDIuMDIg
b2YgdGhlIFBIUCBsaWNlbnNlLCAgICAgIHwKICAgfCB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0
aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRSwgYW5kIGlzICAgICAgICB8CiAgIHwg
YXZhaWxhYmxlIGF0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfAogICB8IGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzJfMDIu
dHh0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgfCBJZiB5b3UgZGlk
IG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgUEhQIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUg
dG8gICB8CiAgIHwgb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVh
c2Ugc2VuZCBhIG5vdGUgdG8gICAgICAgICAgfAogICB8IGxpY2Vuc2VAcGhwLm5ldCBzbyB3
ZSBjYW4gbWFpbCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LiAgICAgICAgICAgICAgIHwKICAg
Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0rCiAgIHwgQXV0aG9yOiBNb3JpeW9zaGkgS29penVtaSA8bW9y
aXlvc2hpQHBocC5uZXQ+ICAgICAgICAgICAgICAgICAgICAgICAgfAogICArLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSsKICovCgovKiAkSWQkICovCgojaWZuZGVmIF9QSFBfTUJfQVBJX0gKI2RlZmlu
ZSBfUEhQX01CX0FQSV9ICgojaW5jbHVkZSAicGhwLmgiCgojaWYgSEFWRV9NQlNUUklORwoK
Lyoge3t7IGluY2x1ZGVzICovCiNpZmRlZiBVU0VfTUJTVFJJTkcxCiMgaW5jbHVkZSAibWJm
aWx0ZXIuaCIKI2VuZGlmIC8qIFVTRV9NQlNUUklORzEgKi8KLyogfX19ICovCgovKiB7e3sg
dHlwZSBkZWZpbml0aW9ucyAqLwovKiB7e3sgdHlwZWRlZiBlbnVtIHBocF9tYl9lcnJfdCAq
Lwp0eXBlZGVmIGVudW0gX3BocF9tYl9lcnJfdCB7CglQSFBfTUJfRkFJTFVSRSA9IC0xLAoJ
UEhQX01CX1NVQ0NFU1MgPSAwLAoJUEhQX01CX0VSUl9OT19NRU1PUlksCglQSFBfTUJfRVJS
X05VTExfUE9JTlRFUiwKCVBIUF9NQl9FUlJfQlVGRkVSX09WRVJfRkxPVywKCVBIUF9NQl9F
UlJfVU5TVVBQT1JURURfRU5DT0RJTkcsCglQSFBfTUJfRVJSX1VOU1VQUE9SVEVEX0xBTkdV
QUdFLAoJUEhQX01CX0VSUl9VTlNVUFBPUlRFRF9DT05WRVJULAoJUEhQX01CX0VSUl9VTlNV
UFBPUlRFRF9JREVOVElGWSwKCVBIUF9NQl9FUlJfSUxMRUdBTF9BUkdVTUVOVCwKCVBIUF9N
Ql9FUlJfTUlTU0lOR19QUk9QRVJUWSwKCVBIUF9NQl9FUlJfSU5ERVhfT1VUX09GX0JPVU5E
UywKCVBIUF9NQl9FUlJfRU5DT0RJTkdfREVURUNUX0ZBSUxVUkUsCglQSFBfTUJfRVJSX05P
VF9GT1VORCwKCVBIUF9NQl9FUlJfTk9UX0lNUExFTUVOVEVECn0gcGhwX21iX2Vycl90Owov
KiB9fX0gKi8KCiNpZmRlZiBVU0VfTUJTVFJJTkcxIC8qIGNvbXBhdGliaWxpdHkgc3R1ZmYg
Ki8KCnR5cGVkZWYgbWJmbF9ub19lbmNvZGluZyBwaHBfbWJfZW5jaWQ7IAp0eXBlZGVmIG1i
ZmxfZW5jb2RpbmcgcGhwX21iX2VuYzsKdHlwZWRlZiBtYmZsX2xhbmd1YWdlIHBocF9tYl9s
YW5nOyAKCiNkZWZpbmUgcGhwX21iX2xhbmdpZF9pbnZhbGlkICAgbWJmbF9ub19sYW5ndWFn
ZV9pbnZhbGlkIAojZGVmaW5lIHBocF9tYl9sYW5naWRfbmV1dHJhbCAgIG1iZmxfbm9fbGFu
Z3VhZ2VfbmV1dHJhbAojZGVmaW5lIHBocF9tYl9sYW5naWRfamFqcCAgICAgIG1iZmxfbm9f
bGFuZ3VhZ2VfamFwYW5lc2UKI2RlZmluZSBwaHBfbWJfbGFuZ2lkX2VudWsgICAgICBtYmZs
X25vX2xhbmd1YWdlX2VuZ2xpc2gKI2RlZmluZSBwaHBfbWJfbGFuZ2lkX2VudXMgICAgICBt
YmZsX25vX2xhbmd1YWdlX2VuZ2xpc2gKI2RlZmluZSBwaHBfbWJfbGFuZ2lkX2tva3IgICAg
ICBtYmZsX25vX2xhbmd1YWdlX2tvcmVhbgojZGVmaW5lIHBocF9tYl9sYW5naWRfemhjbiAg
ICAgIG1iZmxfbm9fbGFuZ3VhZ2Vfc2ltcGxpZWRfY2hpbmVzZQojZGVmaW5lIHBocF9tYl9s
YW5naWRfemh0dyAgICAgIG1iZmxfbm9fbGFuZ3VhZ2VfdHJhZGl0aW9uYWxfY2hpbmVzZQoK
I2RlZmluZSBwaHBfbWJfZW5jaWRfaW52YWxpZCAgICBtYmZsX25vX2VuY29kaW5nX2ludmFs
aWQKI2RlZmluZSBwaHBfbWJfZW5jaWRfcGFzcyAgICAgICBtYmZsX25vX2VuY29kaW5nX3Bh
c3MKI2RlZmluZSBwaHBfbWJfZW5jaWRfYXV0byAgICAgICBtYmZsX25vX2VuY29kaW5nX2F1
dG8KI2RlZmluZSBwaHBfbWJfZW5jaWRfd2NoYXIgICAgICBtYmZsX25vX2VuY29kaW5nX3dj
aGFyCiNkZWZpbmUgcGhwX21iX2VuY2lkX2J5dGUyYmUgICAgbWJmbF9ub19lbmNvZGluZ19i
eXRlMmJlCiNkZWZpbmUgcGhwX21iX2VuY2lkX2J5dGUybGUgICAgbWJmbF9ub19lbmNvZGlu
Z19ieXRlMmxlCiNkZWZpbmUgcGhwX21iX2VuY2lkX2J5dGU0YmUgICAgbWJmbF9ub19lbmNv
ZGluZ19ieXRlNGJlCiNkZWZpbmUgcGhwX21iX2VuY2lkX2J5dGU0bGUgICAgbWJmbF9ub19l
bmNvZGluZ19ieXRlNGxlCiNkZWZpbmUgcGhwX21iX2VuY2lkX2Jhc2U2NCAgICAgbWJmbF9u
b19lbmNvZGluZ19iYXNlNjQKI2RlZmluZSBwaHBfbWJfZW5jaWRfdXVlbmNvZGUgICBtYmZs
X25vX2VuY29kaW5nX3V1ZW5jb2RlCiNkZWZpbmUgcGhwX21iX2VuY2lkX3FwcmludCAgICAg
bWJmbF9ub19lbmNvZGluZ19xcHJpbnQKI2RlZmluZSBwaHBfbWJfZW5jaWRfN2JpdCAgICAg
ICBtYmZsX25vX2VuY29kaW5nXzdiaXQKI2RlZmluZSBwaHBfbWJfZW5jaWRfOGJpdCAgICAg
ICBtYmZsX25vX2VuY29kaW5nXzhiaXQKI2RlZmluZSBwaHBfbWJfZW5jaWRfdWNzNCAgICAg
ICBtYmZsX25vX2VuY29kaW5nX3VjczQKI2RlZmluZSBwaHBfbWJfZW5jaWRfdWNzNGJlICAg
ICBtYmZsX25vX2VuY29kaW5nX3VjczRiZQojZGVmaW5lIHBocF9tYl9lbmNpZF91Y3M0bGUg
ICAgIG1iZmxfbm9fZW5jb2RpbmdfdWNzNGxlCiNkZWZpbmUgcGhwX21iX2VuY2lkX3VjczIg
ICAgICAgbWJmbF9ub19lbmNvZGluZ191Y3MyCiNkZWZpbmUgcGhwX21iX2VuY2lkX3VjczJi
ZSAgICAgbWJmbF9ub19lbmNvZGluZ191Y3MyYmUKI2RlZmluZSBwaHBfbWJfZW5jaWRfdWNz
MmxlICAgICBtYmZsX25vX2VuY29kaW5nX3VjczJsZQojZGVmaW5lIHBocF9tYl9lbmNpZF91
dGYzMiAgICAgIG1iZmxfbm9fZW5jb2RpbmdfdXRmMzIKI2RlZmluZSBwaHBfbWJfZW5jaWRf
dXRmMzJiZSAgICBtYmZsX25vX2VuY29kaW5nX3V0ZjMyYmUKI2RlZmluZSBwaHBfbWJfZW5j
aWRfdXRmMzJsZSAgICBtYmZsX25vX2VuY29kaW5nX3V0ZjMybGUKI2RlZmluZSBwaHBfbWJf
ZW5jaWRfdXRmMTYgICAgICBtYmZsX25vX2VuY29kaW5nX3V0ZjE2CiNkZWZpbmUgcGhwX21i
X2VuY2lkX3V0ZjE2YmUgICAgbWJmbF9ub19lbmNvZGluZ191dGYxNmJlCiNkZWZpbmUgcGhw
X21iX2VuY2lkX3V0ZjE2bGUgICAgbWJmbF9ub19lbmNvZGluZ191dGYxNmxlCiNkZWZpbmUg
cGhwX21iX2VuY2lkX3V0ZjggICAgICAgbWJmbF9ub19lbmNvZGluZ191dGY4CiNkZWZpbmUg
cGhwX21iX2VuY2lkX3V0ZjcgICAgICAgbWJmbF9ub19lbmNvZGluZ191dGY3CiNkZWZpbmUg
cGhwX21iX2VuY2lkX3V0ZjdpbWFwICAgbWJmbF9ub19lbmNvZGluZ191dGY3aW1hcAojZGVm
aW5lIHBocF9tYl9lbmNpZF9hc2NpaSAgICAgIG1iZmxfbm9fZW5jb2RpbmdfYXNjaWkKI2Rl
ZmluZSBwaHBfbWJfZW5jaWRfZXVjX2pwICAgICBtYmZsX25vX2VuY29kaW5nX2V1Y19qcAoj
ZGVmaW5lIHBocF9tYl9lbmNpZF9zamlzICAgICAgIG1iZmxfbm9fZW5jb2Rpbmdfc2ppcwoj
ZGVmaW5lIHBocF9tYl9lbmNpZF9ldWNqcF93aW4gIG1iZmxfbm9fZW5jb2RpbmdfZXVjanBf
d2luCiNkZWZpbmUgcGhwX21iX2VuY2lkX3NqaXNfd2luICAgbWJmbF9ub19lbmNvZGluZ19z
amlzX3dpbgojZGVmaW5lIHBocF9tYl9lbmNpZF9zamlzX21hYyAgIG1iZmxfbm9fZW5jb2Rp
bmdfc2ppc19tYWMKI2RlZmluZSBwaHBfbWJfZW5jaWRfamlzICAgICAgICBtYmZsX25vX2Vu
Y29kaW5nX2ppcwojZGVmaW5lIHBocF9tYl9lbmNpZF8yMDIyanAgICAgIG1iZmxfbm9fZW5j
b2RpbmdfMjAyMmpwCiNkZWZpbmUgcGhwX21iX2VuY2lkX2NwMTI1MiAgICAgbWJmbF9ub19l
bmNvZGluZ19jcDEyNTIKI2RlZmluZSBwaHBfbWJfZW5jaWRfODg1OV8xICAgICBtYmZsX25v
X2VuY29kaW5nXzg4NTlfMQojZGVmaW5lIHBocF9tYl9lbmNpZF84ODU5XzIgICAgIG1iZmxf
bm9fZW5jb2RpbmdfODg1OV8yCiNkZWZpbmUgcGhwX21iX2VuY2lkXzg4NTlfMyAgICAgbWJm
bF9ub19lbmNvZGluZ184ODU5XzMKI2RlZmluZSBwaHBfbWJfZW5jaWRfODg1OV80ICAgICBt
YmZsX25vX2VuY29kaW5nXzg4NTlfNAojZGVmaW5lIHBocF9tYl9lbmNpZF84ODU5XzUgICAg
IG1iZmxfbm9fZW5jb2RpbmdfODg1OV81CiNkZWZpbmUgcGhwX21iX2VuY2lkXzg4NTlfNiAg
ICAgbWJmbF9ub19lbmNvZGluZ184ODU5XzYKI2RlZmluZSBwaHBfbWJfZW5jaWRfODg1OV83
ICAgICBtYmZsX25vX2VuY29kaW5nXzg4NTlfNwojZGVmaW5lIHBocF9tYl9lbmNpZF84ODU5
XzggICAgIG1iZmxfbm9fZW5jb2RpbmdfODg1OV84CiNkZWZpbmUgcGhwX21iX2VuY2lkXzg4
NTlfOSAgICAgbWJmbF9ub19lbmNvZGluZ184ODU5XzkKI2RlZmluZSBwaHBfbWJfZW5jaWRf
ODg1OV8xMCAgICBtYmZsX25vX2VuY29kaW5nXzg4NTlfMTAKI2RlZmluZSBwaHBfbWJfZW5j
aWRfODg1OV8xMyAgICBtYmZsX25vX2VuY29kaW5nXzg4NTlfMTMKI2RlZmluZSBwaHBfbWJf
ZW5jaWRfODg1OV8xNCAgICBtYmZsX25vX2VuY29kaW5nXzg4NTlfMTQKI2RlZmluZSBwaHBf
bWJfZW5jaWRfODg1OV8xNSAgICBtYmZsX25vX2VuY29kaW5nXzg4NTlfMTUKI2RlZmluZSBw
aHBfbWJfZW5jaWRfZXVjX2NuICAgICBtYmZsX25vX2VuY29kaW5nX2V1Y19jbgojZGVmaW5l
IHBocF9tYl9lbmNpZF9jcDkzNiAgICAgIG1iZmxfbm9fZW5jb2RpbmdfY3A5MzYKI2RlZmlu
ZSBwaHBfbWJfZW5jaWRfaHogICAgICAgICBtYmZsX25vX2VuY29kaW5nX2h6CiNkZWZpbmUg
cGhwX21iX2VuY2lkX2V1Y190dyAgICAgbWJmbF9ub19lbmNvZGluZ19ldWNfdHcKI2RlZmlu
ZSBwaHBfbWJfZW5jaWRfYmlnNSAgICAgICBtYmZsX25vX2VuY29kaW5nX2JpZzUKI2RlZmlu
ZSBwaHBfbWJfZW5jaWRfZXVjX2tyICAgICBtYmZsX25vX2VuY29kaW5nX2V1Y19rcgojZGVm
aW5lIHBocF9tYl9lbmNpZF91aGMgICAgICAgIG1iZmxfbm9fZW5jb2RpbmdfdWhjCiNkZWZp
bmUgcGhwX21iX2VuY2lkX2tvaThyICAgICAgbWJmbF9ub19lbmNvZGluZ19rb2k4cgojZGVm
aW5lIHBocF9tYl9lbmNpZF9jcDg2NiAgICAgIG1iZmxfbm9fZW5jb2RpbmdfY3A4NjYKCiNk
ZWZpbmUgUEhQX01CX0VOQ1RZUEVfU0JDUyAgICAgICBNQkZMX0VOQ1RZUEVfU0JDUwojZGVm
aW5lIFBIUF9NQl9FTkNUWVBFX01CQ1MgICAgICAgTUJGTF9FTkNUWVBFX01CQ1MKI2RlZmlu
ZSBQSFBfTUJfRU5DVFlQRV9XQ1MyQkUgICAgIE1CRkxfRU5DVFlQRV9XQ1MyQkUKI2RlZmlu
ZSBQSFBfTUJfRU5DVFlQRV9XQ1MyTEUgICAgIE1CRkxfRU5DVFlQRV9XQ1MyTEUKI2RlZmlu
ZSBQSFBfTUJfRU5DVFlQRV9NV0MyQkUgICAgIE1CRkxfRU5DVFlQRV9NV0MyQkUKI2RlZmlu
ZSBQSFBfTUJfRU5DVFlQRV9NV0MyTEUgICAgIE1CRkxfRU5DVFlQRV9NV0MyTEUKI2RlZmlu
ZSBQSFBfTUJfRU5DVFlQRV9XQ1M0QkUgICAgIE1CRkxfRU5DVFlQRV9XQ1M0QkUKI2RlZmlu
ZSBQSFBfTUJfRU5DVFlQRV9XQ1M0TEUgICAgIE1CRkxfRU5DVFlQRV9XQ1M0TEUKI2RlZmlu
ZSBQSFBfTUJfRU5DVFlQRV9NV0M0QkUgICAgIE1CRkxfRU5DVFlQRV9NV0M0QkUKI2RlZmlu
ZSBQSFBfTUJfRU5DVFlQRV9NV0M0TEUgICAgIE1CRkxfRU5DVFlQRV9NV0M0TEUKI2RlZmlu
ZSBQSFBfTUJfRU5DVFlQRV9TSEZUQ09ERSAgIE1CRkxfRU5DVFlQRV9TSEZUQ09ERQojZGVm
aW5lIFBIUF9NQl9FTkNUWVBFX0hUTUxfRU5UICAgTUJGTF9FTkNUWVBFX0hUTUxfRU5UCgp0
eXBlZGVmIHN0cnVjdCBfcGhwX21iX21pbWVfaGRyX2VuY29kZXIgewoJbWltZV9oZWFkZXJf
ZW5jb2Rlcl9kYXRhICppbnN0Owp9IHBocF9tYl9taW1lX2hkcl9lbmNvZGVyOwoKdHlwZWRl
ZiBzdHJ1Y3QgX3BocF9tYl9taW1lX2hkcl9kZWNvZGVyIHsKCW1pbWVfaGVhZGVyX2RlY29k
ZXJfZGF0YSAqaW5zdDsKfSBwaHBfbWJfbWltZV9oZHJfZGVjb2RlcjsgCgojZWxzZQoKdHlw
ZWRlZiBzdHJ1Y3QgX3BocF9tYl9taW1lX2hkcl9lbmNvZGVyIHsKCW1iZmxfY29udmVydF9m
aWx0ZXIgKmNvbnYxX2ZpbHRlcjsKCW1iZmxfY29udmVydF9maWx0ZXIgKmJsb2NrX2ZpbHRl
cjsKCW1iZmxfY29udmVydF9maWx0ZXIgKmNvbnYyX2ZpbHRlcjsKCW1iZmxfY29udmVydF9m
aWx0ZXIgKmVuY29kX2ZpbHRlcjsKCXBocF9tYl9zdHIgKnJlc3VsdDsKCXBocF9tYl9zdHIg
KnN0cnRtcDsKCXBocF9tYl9zdHIgKnN0cmVuYzsKCXBocF9tYl9zdHIgKnN0cmx3c3A7Cglp
bnQgc3RhdHVzMTsKCWludCBzdGF0dXMyOwoJc2l6ZV90IGxpbmVoZWFkOwoJc2l6ZV90IGZp
cnN0aW5kZW50Owp9IHBocF9tYl9taW1lX2hkcl9lbmNvZGVyOwoKdHlwZWRlZiBzdHJ1Y3Qg
X3BocF9tYl9taW1lX2hkcl9kZWNvZGVyIHsKCW1iZmxfY29udmVydF9maWx0ZXIgKmRlY29f
ZmlsdGVyOwoJbWJmbF9jb252ZXJ0X2ZpbHRlciAqY29udjFfZmlsdGVyOwoJbWJmbF9jb252
ZXJ0X2ZpbHRlciAqY29udjJfZmlsdGVyOwoJcGhwX21iX3N0ciAqcmVzdWx0OwoJcGhwX21i
X3N0ciAqc3RyY3M7CglwaHBfbWJfc3RyICpzdHJ0bXA7CglwaHBfbWJfZW5jICplbmNvZGlu
Z19jaGFyc2V0OwoJcGhwX21iX2VuYyAqZW5jb2RpbmdfdHJhbnNmZXI7CglwaHBfbWJfZW5j
ICplbmNvZGluZ19vdXRwdXQ7CglpbnQgc3RhdHVzOwp9IHBocF9tYl9taW1lX2hkcl9kZWNv
ZGVyOyAKCiNlbmRpZiAvKiBVU0VfTUJTVFJJTkcxICovIAoKdHlwZWRlZiBzdHJ1Y3QgX3Bo
cF9tYl9zdHJ0b2tfdCB7CgljaGFyICpsYXN0OwoJc2l6ZV90IG5ieXRlc19sZWZ0Owp9IHBo
cF9tYl9zdHJ0b2tfdDsKCnR5cGVkZWYgc3RydWN0IF9waHBfbWJfZW5jX2xpc3QgewoJcGhw
X21iX2VuYyAqKmVsZW1zOwoJdW5zaWduZWQgaW50IG5lbGVtczsKCXVuc2lnbmVkIGludCBh
bGxvY2VkX3NpemU7Cn0gcGhwX21iX2VuY19saXN0OwoKdHlwZWRlZiB2b2lkICgqcGhwX21i
X2Vycl9yZXBvcnRfZnVuYykoaW50IHR5cGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsg
CgovKiB9fX0gKi8KCi8qIHt7eyBwcm90b3R5cGVzICovCgovKiB7e3sgZW5jb2RpbmcgZGVz
Y3JpcHRvciByZWxhdGVkIGZ1bmN0aW9ucyAqLwovKiBQSFBBUEkgcGhwX21iX2Vycl90IHBo
cF9tYl9lbmNfY3RvcihwaHBfbWJfZW5jICpsYW5nLCBwaHBfbWJfZXJyX3JlcG9ydF9mdW5j
IHJlcG9ydF9lcnIpOyAqLwpQSFBBUEkgdm9pZCBwaHBfbWJfZW5jX2R0b3IocGhwX21iX2Vu
YyAqbGFuZywgcGhwX21iX2Vycl9yZXBvcnRfZnVuYyByZXBvcnRfZXJyKTsKClBIUEFQSSBw
aHBfbWJfZXJyX3QgcGhwX21iX2dldF9lbmNfYnlfbmFtZShwaHBfbWJfZW5jICoqZW5jLCBj
b25zdCBjaGFyICpuYW1lLCBwaHBfbWJfZXJyX3JlcG9ydF9mdW5jIHJlcG9ydF9lcnIpOwpQ
SFBBUEkgcGhwX21iX2Vycl90IHBocF9tYl9nZXRfZW5jX2J5X2lkKHBocF9tYl9lbmMgKipl
bmMsIHBocF9tYl9lbmNfaWQgaWQsIHBocF9tYl9lcnJfcmVwb3J0X2Z1bmMgcmVwb3J0X2Vy
cik7Ci8qIH19fSAqLwoKLyoge3t7IGxhbmd1YWdlIGRlc2NyaXB0b3IgcmVsYXRlZCBmdW5j
dGlvbnMgKi8KLyogUEhQQVBJIHBocF9tYl9lcnJfdCBwaHBfbWJfbGFuZ19jdG9yKHBocF9t
Yl9sYW5nICpsLCBwaHBfbWJfZXJyX3JlcG9ydF9mdW5jIHJlcG9ydF9lcnIpOyAqLwpQSFBB
UEkgdm9pZCBwaHBfbWJfbGFuZ19kdG9yKHBocF9tYl9sYW5nICpsYW5nLCBwaHBfbWJfZXJy
X3JlcG9ydF9mdW5jIHJlcG9ydF9lcnIpOwpQSFBBUEkgcGhwX21iX2Vycl90IHBocF9tYl9s
YW5nX2NyZWF0ZV9taW1lX2hkcl9lbmNvZGVyKHBocF9tYl9sYW5nICpsYW5nLCBwaHBfbWJf
bWltZV9oZHJfZW5jb2RlciAqZW5jb2RlciwgcGhwX21iX2VuYyAqZnJvbV9FbmMsIHBocF9t
Yl9lcnJfcmVwb3J0X2Z1bmMgcmVwb3J0X2Vycik7ClBIUEFQSSBwaHBfbWJfZXJyX3QgcGhw
X21iX2dldF9sYW5nX2J5X25hbWUocGhwX21iX2xhbmcgKipsYW5nLCBjb25zdCBjaGFyICpu
YW1lLCBwaHBfbWJfZXJyX3JlcG9ydF9mdW5jIHJlcG9ydF9lcnIpOwpQSFBBUEkgcGhwX21i
X2Vycl90IHBocF9tYl9nZXRfbGFuZ19ieV9pZChwaHBfbWJfbGFuZyAqKmxhbmcsIHBocF9t
Yl9sYW5naWQgaWQsIHBocF9tYl9lcnJfcmVwb3J0X2Z1bmMgcmVwb3J0X2Vycik7Ci8qIH19
fSAqLwoKLyoge3t7IGVuY29kaW5nIGxpc3QgcmVsYXRlZCBmdW5jdGlvbnMgKi8KUEhQQVBJ
IHBocF9tYl9lcnJfdCBwaHBfbWJfZW5jX2xpc3RfY3RvcihwaHBfbWJfZW5jX2xpc3QgKmxp
c3QsIHBocF9tYl9lcnJfcmVwb3J0X2Z1bmMgcmVwb3J0X2Vycik7ClBIUEFQSSB2b2lkIHBo
cF9tYl9lbmNfbGlzdF9kdG9yKHBocF9tYl9lbmNfbGlzdCAqbGlzdCwgcGhwX21iX2Vycl9y
ZXBvcnRfZnVuYyByZXBvcnRfZXJyKTsKUEhQQVBJIHBocF9tYl9lcnJfdCBwaHBfbWJfZW5j
X2xpc3RfYWRkX2VuY29kaW5nKHBocF9tYl9lbmNfbGlzdCAqbGlzdCwgcGhwX21iX2VuYyAq
ZW5jLCBwaHBfbWJfZXJyX3JlcG9ydF9mdW5jIHJlcG9ydF9lcnIpOwpQSFBBUEkgcGhwX21i
X2Vycl90IHBocF9tYl9lbmNfbGlzdF9pbml0KHBocF9tYl9lbmNfbGlzdCAqbGlzdCwgY29u
c3QgY2hhciAqY3N0cmluZywgcGhwX21iX2Vycl9yZXBvcnRfZnVuYyByZXBvcnRfZXJyKTsK
LyogfX19ICovCgovKiB7e3sgbWltZSBoZWFkZXIgZW5jb2RlciAvIGRlY29kZXIgKi8KUEhQ
QVBJIHBocF9tYl9lcnJfdCBwaHBfbWJfbWltZV9oZHJfZW5jb2Rlcl9jdG9yKHBocF9tYl9t
aW1lX2hkcl9lbmNvZGVyICplbmNvZGVyLCBwaHBfbWJfZW5jICp0cmFuc19lbmMsIHBocF9t
Yl9lbmMgKnRvX2VuYywgcGhwX21iX2VuYyAqZnJvbV9lbmMsIHBocF9tYl9lcnJfcmVwb3J0
X2Z1bmMgcmVwb3J0X2Vycik7ClBIUEFQSSBwaHBfbWJfZXJyX3QgcGhwX21iX21pbWVfaGRy
X2VuY29kZXJfZHRvcihwaHBfbWJfbWltZV9oZHJfZW5jb2RlciAqZW5jb2RlcmksIHBocF9t
Yl9lcnJfcmVwb3J0X2Z1bmMgcmVwb3J0X2Vycik7ClBIUEFQSSBwaHBfbWJfZXJyX3QgcGhw
X21iX21pbWVfaGRyX2RlY29kZXJfY3RvcihwaHBfbWJfbWltZV9oZHJfZGVjb2RlciAqZGVj
b2RlciwgcGhwX21iX2VuYyAqdG9fZW5jKTsKUEhQQVBJIHZvaWQgcGhwX21iX21pbWVfaGRy
X2RlY29kZXJfZHRvcihwaHBfbWJfbWltZV9oZHJfZGVjb2RlciAqZGVjb2Rlcik7Ci8qIH19
fSAqLyAKCi8qIHt7eyBlbmNvZGluZyBkZXRlY3RvciByZWxhdGVkIGZ1bmN0aW9ucyAqLwpQ
SFBBUEkgcGhwX21iX2Vycl90IHBocF9tYl9kZXRlY3Rvcl9jdG9yKHBocF9tYl9kZXRlY3Rv
ciAqaWRlbnRkLCBjb25zdCBwaHBfbWJfZW5jX2xpc3QgKmxpc3QpOwpQSFBBUEkgdm9pZCBw
aHBfbWJfZGV0ZWN0b3JfZHRvcihwaHBfbWJfZGV0ZWN0b3IgKmlkZW50ZCk7CgpQSFBBUEkg
cGhwX21iX2Vycl90IHBocF9tYl9kZXRlY3Rvcl9mZWVkKHBocF9tYl9kZXRlY3RvciAqaWRl
bnRkLCBjb25zdCBjaGFyICp2YWx1ZSwgc2l6ZV90IGxlbmd0aCk7CgpQSFBBUEkgcGhwX21i
X2Vycl90IHBocF9tYl9kZXRlY3Rvcl9jbG9zZShwaHBfbWJfZGV0ZWN0b3IgKmlkZW50ZCk7
CgpQSFBBUEkgcGhwX21iX2Vycl90IHBocF9tYl9kZXRlY3Rvcl9qdWRnZShwaHBfbWJfZGV0
ZWN0b3IgKmlkZW50ZCwgcGhwX21iX2VuYyAqY2FuZGlkYXRlKTsKLyogfX19ICovCgovKiB7
e3sgdXRpbGl0eSBmdW5jdGlvbnMgKi8KUEhQQVBJIHBocF9tYl9lcnJfdCBwaHBfbWJfY29u
dmVydF9lbmNvZGluZyhjaGFyICoqb3V0X3AsIHNpemVfdCAqb3V0X2xlbiwgY29uc3QgY2hh
ciAqaW5fcCwgc2l6ZV90IGluX2xlbiwgY29uc3QgcGhwX21iX2VuYyAqdG8sIGNvbnN0IHBo
cF9tYl9lbmMgKmZyb20pOwoKUEhQQVBJIHBocF9tYl9lcnJfdCBwaHBfbWJfZGV0ZWN0X2Vu
Y29kaW5nKHBocF9tYl9lbmMgKipwcmV0dmFsLCBjb25zdCBjaGFyICpzdHJfdmFsLCBzaXpl
X3Qgc3RyX2xlbiwgcGhwX21iX2VuYyAqKmxpc3QsIGludCBsaXN0c2l6ZSk7CgpQSFBBUEkg
cGhwX21iX2Vycl90IHBocF9tYl9zdHJsZW4odW5zaWduZWQgaW50ICpwcmV0dmFsLCBjb25z
dCBjaGFyICpzdHIsIHNpemVfdCBzdHJfbGVuLCBjb25zdCBwaHBfbWJfZW5jICplbmNvZGlu
Zyk7CgpQSFBBUEkgcGhwX21iX2Vycl90IHBocF9tYl9zdHJwb3ModW5zaWduZWQgaW50ICpw
cmV0dmFsLCBjb25zdCBjaGFyICpoYXlzdGFjaywgc2l6ZV90IGhheXN0YWNrX2xlbiwgY29u
c3QgY2hhciAqbmVlZGxlLCBzaXplX3QgbmVlZGxlX2xlbiwgY29uc3QgcGhwX21iX2VuYyAq
ZW5jb2RpbmcsIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCByZXZlcnNlX2ZsYWcpOwoKUEhQ
QVBJIHBocF9tYl9lcnJfdCBwaHBfbWJfcmVwbGFjZShjaGFyICoqcHJldHZhbCwgc2l6ZV90
ICpyZXR2YWxfbGVuLCBjb25zdCBjaGFyICpzZWFyY2gsIHNpemVfdCBzZWFyY2hfbGVuLCBj
b25zdCBjaGFyICpyZXBsYWNlLCBzaXplX3QgcmVwbGFjZV9sZW4sIGNvbnN0IGNoYXIgKnN1
YmplY3QsIHNpemVfdCBzdWJqZWN0X2xlbiwgY29uc3QgcGhwX21iX2VuYyAqZW5jb2Rpbmcp
OwoKUEhQQVBJIHBocF9tYl9lcnJfdCBwaHBfbWJfc3Vic3RyKGNoYXIgKipwcmV0dmFsLCBz
aXplX3QgKnJldHZhbF9sZW4sIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IHN0cl9sZW4sIHVu
c2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCBwaHBfbWJfZW5j
ICplbmNvZGluZyk7CgpQSFBBUEkgcGhwX21iX2Vycl90IHBocF9tYl9zdHJjdXQoY2hhciAq
KnByZXR2YWwsIHNpemVfdCAqcmV0dmFsX2xlbiwgY29uc3QgY2hhciAqc3RyLCBzaXplX3Qg
c3RyX2xlbiwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgc2l6ZSwgY29uc3Qg
cGhwX21iX2VuYyAqZW5jb2RpbmcpOwoKUEhQQVBJIHBocF9tYl9lcnJfdCBwaHBfbWJfc3Ry
d2lkdGgodW5zaWduZWQgaW50ICpwcmV0dmFsLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBz
dHJfbGVuLCBjb25zdCBwaHBfbWJfZW5jICplbmNvZGluZyk7CgpQSFBBUEkgcGhwX21iX2Vy
cl90IHBocF9tYl9zdHJpbXdpZHRoKGNoYXIgKipwcmV0dmFsLCBzaXplX3QgKnJldHZhbF9s
ZW4sIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IHN0cl9sZW4sIGNvbnN0IGNoYXIgKm1hcmtl
cl92YWwsIHNpemVfdCBtYXJrZXJfbGVuLCBzaXplX3Qgc3RhcnQsIHNpemVfdCB3aWR0aCwg
Y29uc3QgcGhwX21iX2VuYyAqZW5jb2RpbmcpOwoKUEhQQVBJIHBocF9tYl9lcnJfdCBwaHBf
bWJfaHRtbF9udW1lcmljX2VudGl0eShjaGFyICoqcHJldHZhbCwgc2l6ZV90ICpyZXR2YWxf
bGVuLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBzdHJfbGVuLCBpbnQgKmNvbnZtYXAsIHVu
c2lnbmVkIGludCBtYXBzaXplLCBpbnQgdHlwZSwgcGhwX21iX2VuYyAqZW5jb2RpbmcgIFRT
Uk1MU19EQyk7CgpQSFBBUEkgcGhwX21iX2Vycl90IHBocF9tYl9tYmNoYXJfYnl0ZXNfZXgo
c2l6ZV90ICpwcmV0dmFsLCBjb25zdCBjaGFyICpzLCBjb25zdCBwaHBfbWJfZW5jICplbmMp
OwoKUEhQQVBJIHBocF9tYl9lcnJfdCBwaHBfbWJfc3RydG9rKGNoYXIgKipwcmV0dmFsLCBj
aGFyICpzMSwgc2l6ZV90IHMxX2xlbiwgY29uc3QgY2hhciAqczIsIHNpemVfdCBzMl9sZW4s
IHBocF9tYl9zdHJ0b2tfdCAqdG9rX2QsIHBocF9tYl9lbmMgKmVuYyk7CgpQSFBBUEkgcGhw
X21iX2Vycl90IHBocF9tYl9zdHJ0b2tfcihjaGFyICoqcHJldHZhbCwgY2hhciAqc3RyLCBz
aXplX3Qgc3RyX2xlbiwgY29uc3QgY2hhciAqbmVlZGxlLCBzaXplX3QgbmVlZGxlX2xlbiwg
cGhwX21iX3N0cnRva190ICp0b2tfZCwgcGhwX21iX2VuYyAqZW5jKTsKClBIUEFQSSBwaHBf
bWJfZXJyX3QgcGhwX21iX3N0cmNocihjaGFyICoqcHJldHZhbCwgY29uc3QgY2hhciAqc3Ry
LCB1bnNpZ25lZCBpbnQgYywgc2l6ZV90IG5ieXRlcywgcGhwX21iX2VuYyAqZW5jKTsKClBI
UEFQSSBjaGFyICpwaHBfbWJfc3RycmNocihjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQg
Yywgc2l6ZV90IG5ieXRlcywgcGhwX21iX2VuYyAqZW5jKTsKCi8qIH19fSAqLwoKLyogfX19
ICovCgojZW5kaWYgLyogSEFWRV9NQlNUUklORyAqLwoKI2VuZGlmIC8qIF9QSFBfTUJfQVBJ
X0ggKi8KCi8qCiAqIExvY2FsIHZhcmlhYmxlczoKICogdGFiLXdpZHRoOiA0CiAqIGMtYmFz
aWMtb2Zmc2V0OiA0CiAqIEVuZDoKICogdmltNjAwOiBmZG09bWFya2VyCiAqIHZpbTogbm9l
dCBzdz00IHRzPTQKICovCgo=

--------------Boundary_S8q:MvB9Uh5UrqG--