[MPlayer-dev-eng] [PATCH] Matrox G400 TV out w/ DirectFB (resend)

Ville Syrjälä syrjala at sci.fi
Wed Oct 30 23:21:56 CET 2002


Attachments as base64 this time...

Here's a new vo plugin that uses DirectFB. It's meant for Matrox G400
cards and TV out. It's works like DVDMax in Windows.

DirectFB TV out features:
- interlaced picture
- 720x576 50Hz PAL and 720x486 60Hz NTSC
- RGB15, RGB16, RGB32, ARGB, YUY2, UYVY, I420, YV12 pixel formats
- hardware blended sub-picure in I420 and YV12 modes
- brightness, contrast, hue, saturation adjustments
- no more tweaking sessions with fbset to get the image centered :)

The plugin supports the following sub options:
bes:     output to BES
nocrtc2: no output to CRTC2
nospic:  disable hardware sub-picture
These can be combined.

Instructions on how to make it work are at:
http://www.sci.fi/~syrjala/directfb/readme.txt

-- 
Ville Syrjälä
syrjala at sci.fi
http://www.sci.fi/~syrjala/
-------------- next part --------------
LS0tIG1haW4vY29uZmlndXJlCU1vbiBPY3QgMjggMTE6Mjc6NDIgMjAwMgorKysgbWFpbi1t
Z2EvY29uZmlndXJlCU1vbiBPY3QgMjggMTI6MTU6MDIgMjAwMgpAQCAtMjE4Myw2ICsyMTgz
LDExIEBACiAgIGZpCiAgIF92b21vZHVsZXM9ImRpcmVjdGZiICRfdm9tb2R1bGVzIgogICBf
bGRfZGlyZWN0ZmI9Jy1sZGlyZWN0ZmInCisKKyAgaWYgdGVzdCAiJF9kaXJlY3RmYl92ZXJz
aW9uIiAtZ2UgOTE0OyB0aGVuCisgICAgX3Zvc3JjPSIkX3Zvc3JjIHZvX2RmYm1nYS5jIgor
ICAgIF92b21vZHVsZXM9ImRmYm1nYSAkX3ZvbW9kdWxlcyIKKyAgZmkKIGVsc2UKICAgX2Rl
Zl9kaXJlY3RmYj0nI3VuZGVmIEhBVkVfRElSRUNURkInCiAgIF9ub3ZvbW9kdWxlcz0iZGly
ZWN0ZmIgJF9ub3ZvbW9kdWxlcyIKLS0tIG1haW4vbGlidm8vdmlkZW9fb3V0LmMJTW9uIE9j
dCAyOCAxMToyNzo0NCAyMDAyCisrKyBtYWluLW1nYS9saWJ2by92aWRlb19vdXQuYwlNb24g
T2N0IDI4IDEyOjMzOjQwIDIwMDIKQEAgLTkwLDcgKzkwLDEyIEBACiAjaWZkZWYgSEFWRV9W
RVNBCiBleHRlcm4gdm9fZnVuY3Rpb25zX3QgdmlkZW9fb3V0X3Zlc2E7CiAjZW5kaWYKKyNp
ZmRlZiBIQVZFX0RJUkVDVEZCCiBleHRlcm4gdm9fZnVuY3Rpb25zX3QgdmlkZW9fb3V0X2Rp
cmVjdGZiOworI2lmIERJUkVDVEZCVkVSU0lPTiA+PSA5MTQKK2V4dGVybiB2b19mdW5jdGlv
bnNfdCB2aWRlb19vdXRfZGZibWdhOworI2VuZGlmCisjZW5kaWYKICNpZmRlZiBDT05GSUdf
VklESVgKIGV4dGVybiB2b19mdW5jdGlvbnNfdCB2aWRlb19vdXRfeHZpZGl4OwogI2VuZGlm
CkBAIC0xNzcsNyArMTgyLDEwIEBACiAjZW5kaWYKICNpZmRlZiBIQVZFX0RJUkVDVEZCCiAJ
JnZpZGVvX291dF9kaXJlY3RmYiwKLSNlbmRpZgkKKyNpZiBESVJFQ1RGQlZFUlNJT04gPj0g
OTE0CisgICAgICAgICZ2aWRlb19vdXRfZGZibWdhLAorI2VuZGlmCisjZW5kaWYKICNpZiBk
ZWZpbmVkKENPTkZJR19WSURJWCkgJiYgZGVmaW5lZChIQVZFX1gxMSkgCiAJJnZpZGVvX291
dF94dmlkaXgsCiAjZW5kaWYK
-------------- next part --------------
LyoKICAgTVBsYXllciB2aWRlbyBkcml2ZXIgZm9yIERpcmVjdEZCIC8gTWF0cm94IEc0MDAK
CiAgIENvcHlyaWdodCAoQykgMjAwMiBWaWxsZSBTeXJqYWxhIDxzeXJqYWxhQHNjaS5maT4K
CiAgIE9yaWdpbmFsbHkgYmFzZWQgb24gdm9fZGlyZWN0ZmIuYyBieQogICBKaXJpIFN2b2Jv
ZGEgPEppcmkuU3ZvYm9kYUBzZXpuYW0uY3o+CgogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCiAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KCiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQogICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgoKICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwogICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZQogICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3
LCBVU0EuCiovCgovKiBkaXJlY3RmYiBpbmNsdWRlcyAqLwojaW5jbHVkZSA8ZGlyZWN0ZmIu
aD4KCi8qIG90aGVyIHRoaW5ncyAqLwojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0
ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxmY250bC5oPgojaW5jbHVk
ZSA8dW5pc3RkLmg+CiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8YXNzZXJ0Lmg+Cgoj
aW5jbHVkZSA8c3lzL21tYW4uaD4KI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgojaW5jbHVkZSA8
c3lzL2tkLmg+CiNpbmNsdWRlIDxsaW51eC9mYi5oPgoKI2luY2x1ZGUgImNvbmZpZy5oIgoj
aW5jbHVkZSAidmlkZW9fb3V0LmgiCiNpbmNsdWRlICJ2aWRlb19vdXRfaW50ZXJuYWwuaCIK
I2luY2x1ZGUgImZhc3RtZW1jcHkuaCIKI2luY2x1ZGUgInN1Yi5oIgojaW5jbHVkZSAiLi4v
cG9zdHByb2MvcmdiMnJnYi5oIgoKI2luY2x1ZGUgImFzcGVjdC5oIgoKI2lmbmRlZiBtaW4K
I2RlZmluZSBtaW4oeCx5KSAoKCh4KTwoeSkpPyh4KTooeSkpCiNlbmRpZgoKTElCVk9fRVhU
RVJOKGRmYm1nYSkKCnN0YXRpYyB2b19pbmZvX3Qgdm9faW5mbyA9IHsKICAgICAiRGlyZWN0
RkIgLyBNYXRyb3ggRzQwMCIsCiAgICAgImRmYm1nYSIsCiAgICAgIlZpbGxlIFN5cmphbGEg
PHN5cmphbGFAc2NpLmZpPiIsCiAgICAgIiIKfTsKCmV4dGVybiBpbnQgdmVyYm9zZTsKCi8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgkgICBkaXJlY3RmYiAJICAgICAgKgoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKgogKiAoR2xvYmFscykKICovCnN0
YXRpYyBJRGlyZWN0RkIgKmRmYjsKCnN0YXRpYyBJRGlyZWN0RkJEaXNwbGF5TGF5ZXIgKmJl
czsKc3RhdGljIElEaXJlY3RGQkRpc3BsYXlMYXllciAqY3J0YzI7CnN0YXRpYyBJRGlyZWN0
RkJEaXNwbGF5TGF5ZXIgKnNwaWM7CgpzdGF0aWMgSURpcmVjdEZCU3VyZmFjZSAqZnJhbWU7
CnN0YXRpYyBJRGlyZWN0RkJTdXJmYWNlICpjMmZyYW1lOwpzdGF0aWMgSURpcmVjdEZCU3Vy
ZmFjZSAqc3ViZnJhbWU7CgpzdGF0aWMgREZCU3VyZmFjZVBpeGVsRm9ybWF0IGZyYW1lX2Zv
cm1hdDsKc3RhdGljIERGQlN1cmZhY2VQaXhlbEZvcm1hdCBzdWJmcmFtZV9mb3JtYXQ7Cgpz
dGF0aWMgREZCUmVjdGFuZ2xlIGRyZWN0OwoKc3RhdGljIElEaXJlY3RGQklucHV0RGV2aWNl
ICAqa2V5Ym9hcmQ7CnN0YXRpYyBJRGlyZWN0RkJFdmVudEJ1ZmZlciAgKmJ1ZmZlcjsKCnN0
YXRpYyB1bnNpZ25lZCBpbnQgZnJhbWVfcGl4ZWxfc2l6ZTsKc3RhdGljIHVuc2lnbmVkIGlu
dCBzdWJmcmFtZV9waXhlbF9zaXplOwoKc3RhdGljIGludCBpbml0ZWQgPSAwOwoKc3RhdGlj
IGludCBzdHJldGNoID0gMDsKCnN0YXRpYyBpbnQgdXNlX2JlcyAgID0gMDsKc3RhdGljIGlu
dCB1c2VfY3J0YzIgPSAxOwpzdGF0aWMgaW50IHVzZV9zcGljICA9IDE7CgovKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCioJICAgIHZvX2RpcmVjdGZiICAgICAgICoKKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwoKLyogY29tbWFuZCBsaW5lL2NvbmZpZyBmaWxl
IG9wdGlvbnMgKi8KI2lmZGVmIEhBVkVfRkJERVYKIGV4dGVybiBjaGFyICpmYl9kZXZfbmFt
ZTsKI2Vsc2UKIGNoYXIgKmZiX2Rldl9uYW1lOwojZW5kaWYKCnN0YXRpYyB2b2lkICggKmRy
YXdfYWxwaGFfcCApICggaW50IHcsIGludCBoLCB1bnNpZ25lZCBjaGFyICpzcmMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc3JjYSwgaW50IHN0
cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpk
c3QsIGludCBkc3RyaWRlKTsKCnN0YXRpYyB1aW50MzJfdCBpbl93aWR0aDsKc3RhdGljIHVp
bnQzMl90IGluX2hlaWdodDsKc3RhdGljIHVpbnQzMl90IHNjcmVlbl93aWR0aDsKc3RhdGlj
IHVpbnQzMl90IHNjcmVlbl9oZWlnaHQ7CgpzdGF0aWMgY2hhciAqCnBpeGVsZm9ybWF0X25h
bWUoIERGQlN1cmZhY2VQaXhlbEZvcm1hdCBmb3JtYXQgKQp7CiAgICAgc3dpdGNoKGZvcm1h
dCkgewogICAgIGNhc2UgRFNQRl9BUkdCOgogICAgICAgICAgcmV0dXJuICJBUkdCIjsKICAg
ICBjYXNlIERTUEZfUkdCMzI6CiAgICAgICAgICByZXR1cm4gIlJHQjMyIjsKICAgICBjYXNl
IERTUEZfUkdCMjQ6CgkgIHJldHVybiAiUkdCMjQiOwogICAgIGNhc2UgRFNQRl9SR0IxNjoK
CSAgcmV0dXJuICJSR0IxNiI7CiAgICAgY2FzZSBEU1BGX1JHQjE1OgoJICByZXR1cm4gIlJH
QjE1IjsKICAgICBjYXNlIERTUEZfWVVZMjoKCSAgcmV0dXJuICJZVVkyIjsKICAgICBjYXNl
IERTUEZfVVlWWToKCSAgcmV0dXJuICJVWVZZIjsKICAgICBjYXNlIERTUEZfWVYxMjoKCSAg
cmV0dXJuICJZVjEyIjsKICAgICBjYXNlIERTUEZfSTQyMDoKCSAgcmV0dXJuICJJNDIwIjsK
ICAgICBjYXNlIERTUEZfTFVUODoKCSAgcmV0dXJuICJMVVQ4IjsKICAgICBkZWZhdWx0OgoJ
ICByZXR1cm4gIlVua25vd24gcGl4ZWwgZm9ybWF0IjsKICAgICB9Cn0KCnN0YXRpYyBERkJT
dXJmYWNlUGl4ZWxGb3JtYXQKaW1nZm10X3RvX3BpeGVsZm9ybWF0KCB1aW50MzJfdCBmb3Jt
YXQgKQp7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIElNR0ZNVF9SR0IzMjoK
ICAgICBjYXNlIElNR0ZNVF9CR1IzMjoKCSAgcmV0dXJuIERTUEZfQVJHQjsKICAgICBjYXNl
IElNR0ZNVF9SR0IyNDoKICAgICBjYXNlIElNR0ZNVF9CR1IyNDoKCSAgcmV0dXJuIERTUEZf
UkdCMjQ7CiAgICAgY2FzZSBJTUdGTVRfUkdCMTY6CiAgICAgY2FzZSBJTUdGTVRfQkdSMTY6
CgkgIHJldHVybiBEU1BGX1JHQjE2OwogICAgIGNhc2UgSU1HRk1UX1JHQjE1OgogICAgIGNh
c2UgSU1HRk1UX0JHUjE1OgoJICByZXR1cm4gRFNQRl9SR0IxNTsKICAgICBjYXNlIElNR0ZN
VF9ZVVkyOgoJICByZXR1cm4gRFNQRl9ZVVkyOwogICAgIGNhc2UgSU1HRk1UX1VZVlk6Cgkg
IHJldHVybiBEU1BGX1VZVlk7CiAgICAgY2FzZSBJTUdGTVRfWVYxMjoKCSAgcmV0dXJuIERT
UEZfWVYxMjsKICAgICBjYXNlIElNR0ZNVF9JNDIwOgogICAgIGNhc2UgSU1HRk1UX0lZVVY6
CiAgICAgICAgICByZXR1cm4gRFNQRl9JNDIwOwogICAgIGRlZmF1bHQ6CgkgIHJldHVybiBE
U1BGX1VOS05PV047CiAgICAgfQp9CgpzdGF0aWMgdWludDMyX3QKcHJlaW5pdCggY29uc3Qg
Y2hhciAqYXJnICkKewogICAgIERGQlN1cmZhY2VEZXNjcmlwdGlvbiBkc2M7CgogICAgIGlm
ICh2b19zdWJkZXZpY2UpIHsKICAgICAgICAgIHdoaWxlICgqdm9fc3ViZGV2aWNlICE9ICdc
MCcpIHsKICAgICAgICAgICAgICAgaWYgKCFzdHJuY21wKHZvX3N1YmRldmljZSwgImJlcyIs
IDMpKSB7CiAgICAgICAgICAgICAgICAgICAgdXNlX2JlcyA9IDE7CiAgICAgICAgICAgICAg
ICAgICAgdm9fc3ViZGV2aWNlICs9IDM7CiAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0
cm5jbXAodm9fc3ViZGV2aWNlLCAibm9jcnRjMiIsIDcpKSB7CiAgICAgICAgICAgICAgICAg
ICAgdXNlX2NydGMyID0gMDsKICAgICAgICAgICAgICAgICAgICB2b19zdWJkZXZpY2UgKz0g
NzsKICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RybmNtcCh2b19zdWJkZXZpY2UsICJu
b3NwaWMiLCA2KSkgewogICAgICAgICAgICAgICAgICAgIHVzZV9zcGljID0gMDsKICAgICAg
ICAgICAgICAgICAgICB2b19zdWJkZXZpY2UgKz0gNjsKICAgICAgICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICAgICAgICAgdm9fc3ViZGV2aWNlKys7CiAgICAgICAgICB9CiAgICAg
fQogICAgIGlmICghdXNlX2JlcyAmJiAhdXNlX2NydGMyKSB7CgkgIGZwcmludGYoIHN0ZGVy
ciwgInZvX2RmYm1nYTogTm8gb3V0cHV0IHNlbGVjdGVkXG4iICk7CiAgICAgICAgICByZXR1
cm4gLTE7CiAgICAgfQoKICAgICBpZiAoIWluaXRlZCkgewogICAgICAgICAgRGlyZWN0RkJJ
bml0KCBOVUxMLCBOVUxMICk7CgogICAgICAgICAgaWYgKCFmYl9kZXZfbmFtZSAmJiAhKGZi
X2Rldl9uYW1lID0gZ2V0ZW52KCAiRlJBTUVCVUZGRVIiICkpKQogICAgICAgICAgICAgICBm
Yl9kZXZfbmFtZSA9ICIvZGV2L2ZiMCI7CiAgICAgICAgICBEaXJlY3RGQlNldE9wdGlvbigg
ImZiZGV2IiwgZmJfZGV2X25hbWUgKTsKICAgICAgICAgIERpcmVjdEZCU2V0T3B0aW9uKCAi
bm8tY3Vyc29yIiwgIiIgKTsKICAgICAgICAgIERpcmVjdEZCU2V0T3B0aW9uKCAiYmctY29s
b3IiLCAiMDAwMDAwMDAiICk7CgogICAgICAgICAgRGlyZWN0RkJDcmVhdGUoICZkZmIgKTsK
CiAgICAgICAgICBpbml0ZWQgPSAxOwogICAgIH0KCiAgICAgaWYgKHVzZV9iZXMpIHsKICAg
ICAgICAgIGRmYi0+R2V0RGlzcGxheUxheWVyKCBkZmIsIDEsICZiZXMgKTsKICAgICAgICAg
IGJlcy0+U2V0Q29vcGVyYXRpdmVMZXZlbCggYmVzLCBETFNDTF9FWENMVVNJVkUgKTsKICAg
ICAgICAgIGJlcy0+U2V0T3BhY2l0eSggYmVzLCAwICk7CiAgICAgfQoKICAgICBpZiAodXNl
X2NydGMyKSB7CiAgICAgICAgICBkZmItPkdldERpc3BsYXlMYXllciggZGZiLCAyLCAmY3J0
YzIgKTsKICAgICAgICAgIGNydGMyLT5TZXRDb29wZXJhdGl2ZUxldmVsKCBjcnRjMiwgRExT
Q0xfRVhDTFVTSVZFICk7CiAgICAgICAgICBjcnRjMi0+U2V0T3BhY2l0eSggY3J0YzIsIDAg
KTsKICAgICB9CgogICAgIGRmYi0+R2V0SW5wdXREZXZpY2UoIGRmYiwgRElESURfS0VZQk9B
UkQsICZrZXlib2FyZCApOwogICAgIGtleWJvYXJkLT5DcmVhdGVFdmVudEJ1ZmZlcigga2V5
Ym9hcmQsICZidWZmZXIgKTsKICAgICBidWZmZXItPlJlc2V0KCBidWZmZXIgKTsKCiAgICAg
cmV0dXJuIDA7Cn0KCnN0YXRpYyB1aW50MzJfdApjb25maWcoIHVpbnQzMl90IHdpZHRoLCB1
aW50MzJfdCBoZWlnaHQsCiAgICAgICAgdWludDMyX3QgZF93aWR0aCwgdWludDMyX3QgZF9o
ZWlnaHQsCiAgICAgICAgdWludDMyX3QgZnVsbHNjcmVlbiwKICAgICAgICBjaGFyICp0aXRs
ZSwKCXVpbnQzMl90IGZvcm1hdCApCnsKICAgICBERkJEaXNwbGF5TGF5ZXJDb25maWcgICAg
ICBkbGM7CiAgICAgREZCRGlzcGxheUxheWVyQ29uZmlnRmxhZ3MgZmFpbGVkOwogICAgIERG
QlN1cmZhY2VEZXNjcmlwdGlvbiAgICAgIGRzYzsKICAgICBERkJSZXN1bHQgICAgICAgICAg
ICAgICAgICByZXQ7CgogICAgIHVpbnQzMl90IG91dF93aWR0aDsKICAgICB1aW50MzJfdCBv
dXRfaGVpZ2h0OwoKICAgICBpbl93aWR0aCAgPSB3aWR0aDsKICAgICBpbl9oZWlnaHQgPSBo
ZWlnaHQ7CgogICAgIGFzcGVjdF9zYXZlX29yaWcod2lkdGgsIGhlaWdodCk7CiAgICAgYXNw
ZWN0X3NhdmVfcHJlc2NhbGUoZF93aWR0aCwgZF9oZWlnaHQpOwoKICAgICBkbGMucGl4ZWxm
b3JtYXQgICA9IGltZ2ZtdF90b19waXhlbGZvcm1hdCggZm9ybWF0ICk7CgogICAgIGlmICh1
c2VfYmVzKSB7CiAgICAgICAgICAvKiBEcmF3IHRvIEJFUyBzdXJmYWNlICovCiAgICAgICAg
ICBkbGMuZmxhZ3MgICAgICAgPSBETENPTkZfV0lEVEggfCBETENPTkZfSEVJR0hUIHwgRExD
T05GX1BJWEVMRk9STUFUIHwgRExDT05GX0JVRkZFUk1PREU7CiAgICAgICAgICBkbGMud2lk
dGggICAgICAgPSBpbl93aWR0aDsKICAgICAgICAgIGRsYy5oZWlnaHQgICAgICA9IGluX2hl
aWdodDsKICAgICAgICAgIGRsYy5idWZmZXJtb2RlICA9IERMQk1fQkFDS1ZJREVPOwoKICAg
ICAgICAgIGlmIChiZXMtPlRlc3RDb25maWd1cmF0aW9uKCBiZXMsICZkbGMsICZmYWlsZWQg
KSAhPSBERkJfT0spCiAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgIGJlcy0+
U2V0Q29uZmlndXJhdGlvbiggYmVzLCAmZGxjICk7CiAgICAgICAgICBiZXMtPkdldFN1cmZh
Y2UoIGJlcywgJmZyYW1lICk7CgogICAgICAgICAgYXNwZWN0X3NhdmVfc2NyZWVucmVzKCAx
MDAwMCwgMTAwMDAgKTsKICAgICAgICAgIGFzcGVjdCggJm91dF93aWR0aCwgJm91dF9oZWln
aHQsIEFfWk9PTSApOwogICAgICAgICAgYmVzLT5TZXRTY3JlZW5Mb2NhdGlvbiggYmVzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEuMGYgLSAoZmxvYXQpIG91dF93
aWR0aCAgLyAxMDAwMC4wZikgLyAyLjBmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKDEuMGYgLSAoZmxvYXQpIG91dF9oZWlnaHQgLyAxMDAwMC4wZikgLyAyLjBmLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KSBvdXRfd2lkdGggIC8g
MTAwMDAuMGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpIG91
dF9oZWlnaHQgLyAxMDAwMC4wZiApOwogICAgIH0gZWxzZSB7CiAgICAgICAgICAvKiBEcmF3
IHRvIGEgdGVtcG9yYXJ5IHN1cmZhY2UgKi8KICAgICAgICAgIERGQlN1cmZhY2VEZXNjcmlw
dGlvbiBkc2M7CgogICAgICAgICAgZHNjLmZsYWdzICAgICAgID0gRFNERVNDX0NBUFMgfAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNERVNDX1dJRFRIIHwgRFNERVNDX0hFSUdI
VCB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU0RFU0NfUElYRUxGT1JNQVQ7CiAg
ICAgICAgICBkc2MuY2FwcyAgICAgICAgPSBEU0NBUFNfVklERU9PTkxZOwogICAgICAgICAg
ZHNjLndpZHRoICAgICAgID0gaW5fd2lkdGg7CiAgICAgICAgICBkc2MuaGVpZ2h0ICAgICAg
PSBpbl9oZWlnaHQ7CiAgICAgICAgICBkc2MucGl4ZWxmb3JtYXQgPSBkbGMucGl4ZWxmb3Jt
YXQ7CgogICAgICAgICAgZGZiLT5DcmVhdGVTdXJmYWNlKCBkZmIsICZkc2MsICZmcmFtZSAp
OwogICAgIH0KCiAgICAgaWYgKHVzZV9jcnRjMikgewogICAgICAgICAgZGxjLmZsYWdzICAg
ICAgPSBETENPTkZfUElYRUxGT1JNQVQgfCBETENPTkZfQlVGRkVSTU9ERTsKICAgICAgICAg
IGRsYy5idWZmZXJtb2RlID0gRExCTV9CQUNLVklERU87CgogICAgICAgICAgc3dpdGNoIChk
bGMucGl4ZWxmb3JtYXQpIHsKICAgICAgICAgIGNhc2UgRFNQRl9JNDIwOgogICAgICAgICAg
Y2FzZSBEU1BGX1lWMTI6CiAgICAgICAgICAgICAgIC8qIHN1Yi1waWN0dXJlIHN1cHBvcnRl
ZCAqLwogICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICBjYXNlIERTUEZfWVVZMjoK
ICAgICAgICAgIGNhc2UgRFNQRl9VWVZZOgogICAgICAgICAgICAgICAvKiBCbGl0IHRvIFlV
WTIvVVlWWSBub3Qgc3VwcG9ydGVkICovCiAgICAgICAgICAgICAgIGRsYy5waXhlbGZvcm1h
dCA9IERTUEZfQVJHQjsKCiAgICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwogICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgLyogc3ViLXBpY3R1cmUgbm90IHN1cHBv
cnRlZCAqLwogICAgICAgICAgICAgICB1c2Vfc3BpYyA9IDA7CiAgICAgICAgICB9CgogICAg
ICAgICAgaWYgKGNydGMyLT5UZXN0Q29uZmlndXJhdGlvbiggY3J0YzIsICZkbGMsICZmYWls
ZWQgKSAhPSBERkJfT0spCiAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgIGNy
dGMyLT5TZXRDb25maWd1cmF0aW9uKCBjcnRjMiwgJmRsYyApOwogICAgICAgICAgY3J0YzIt
PkdldFN1cmZhY2UoIGNydGMyLCAmYzJmcmFtZSApOwoKICAgICAgICAgIGMyZnJhbWUtPkdl
dFNpemUoIGMyZnJhbWUsICZzY3JlZW5fd2lkdGgsICZzY3JlZW5faGVpZ2h0ICk7CgogICAg
ICAgICAgLyogRG9uJ3Qgc3RyZXRjaCBvbmx5IHNsaWdodGx5IHNtYWxsZXIgdmlkZW9zICov
CiAgICAgICAgICBpZiAoKGluX3dpZHRoID4gKDAuOTUgKiBzY3JlZW5fd2lkdGgpKSAmJgog
ICAgICAgICAgICAgIChpbl93aWR0aCA8IHNjcmVlbl93aWR0aCkpCiAgICAgICAgICAgICAg
IG91dF93aWR0aCA9IGluX3dpZHRoOwogICAgICAgICAgZWxzZQogICAgICAgICAgICAgICBv
dXRfd2lkdGggPSBzY3JlZW5fd2lkdGg7CiAgICAgICAgICBpZiAoKGluX2hlaWdodCA+ICgw
Ljk1ICogc2NyZWVuX2hlaWdodCkpICYmCiAgICAgICAgICAgICAgKGluX2hlaWdodCA8IHNj
cmVlbl9oZWlnaHQpKQogICAgICAgICAgICAgICBvdXRfaGVpZ2h0ID0gaW5faGVpZ2h0Owog
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICBvdXRfaGVpZ2h0ID0gc2NyZWVuX2hlaWdo
dDsKCiAgICAgICAgICBhc3BlY3Rfc2F2ZV9zY3JlZW5yZXMoIG91dF93aWR0aCwgb3V0X2hl
aWdodCApOwogICAgICAgICAgYXNwZWN0KCAmb3V0X3dpZHRoLCAmb3V0X2hlaWdodCwgKGZ1
bGxzY3JlZW4gJiAweDAxKSA/IEFfWk9PTSA6IEFfTk9aT09NICk7CgogICAgICAgICAgaWYg
KGluX3dpZHRoICE9IG91dF93aWR0aCB8fAogICAgICAgICAgICAgIGluX2hlaWdodCAhPSBv
dXRfaGVpZ2h0KQogICAgICAgICAgICAgICBzdHJldGNoID0gMTsKICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgc3RyZXRjaCA9IDA7CgogICAgICAgICAgZHJlY3QueCA9IChzY3Jl
ZW5fd2lkdGggIC0gb3V0X3dpZHRoKSAgLyAyOwogICAgICAgICAgZHJlY3QueSA9IChzY3Jl
ZW5faGVpZ2h0IC0gb3V0X2hlaWdodCkgLyAyOwogICAgICAgICAgZHJlY3QudyA9IG91dF93
aWR0aDsKICAgICAgICAgIGRyZWN0LmggPSBvdXRfaGVpZ2h0OwoKICAgICAgICAgIGMyZnJh
bWUtPkNsZWFyKCBjMmZyYW1lLCAwLCAwLCAwLCAwICk7CiAgICAgICAgICBjMmZyYW1lLT5G
bGlwKCBjMmZyYW1lLCBOVUxMLCAwICk7CiAgICAgICAgICBjMmZyYW1lLT5DbGVhciggYzJm
cmFtZSwgMCwgMCwgMCwgMCApOwoKICAgICAgICAgIHByaW50ZiggInZvX2RmYm1nYTogQ1JU
QzIgc3VyZmFjZSAlZHglZCAlc1xuIiwgZGxjLndpZHRoLCBkbGMuaGVpZ2h0LCBwaXhlbGZv
cm1hdF9uYW1lKCBkbGMucGl4ZWxmb3JtYXQgKSApOwogICAgIH0gZWxzZQogICAgICAgICAg
dXNlX3NwaWMgPSAwOwoKICAgICBmcmFtZS0+R2V0UGl4ZWxGb3JtYXQoIGZyYW1lLCAmZnJh
bWVfZm9ybWF0ICk7CiAgICAgZnJhbWVfcGl4ZWxfc2l6ZSA9IERGQl9CWVRFU19QRVJfUElY
RUwoIGZyYW1lX2Zvcm1hdCApOwogICAgIHByaW50ZiggInZvX2RmYm1nYTogVmlkZW8gc3Vy
ZmFjZSAlZHglZCAlcyAoJXMpXG4iLAogICAgICAgICAgICAgaW5fd2lkdGgsIGluX2hlaWdo
dCwKICAgICAgICAgICAgIHBpeGVsZm9ybWF0X25hbWUoIGZyYW1lX2Zvcm1hdCApLAogICAg
ICAgICAgICAgdXNlX2JlcyA/ICJCRVMiIDogIm9mZnNjcmVlbiIgKTsKCiAgICAgaWYgKHVz
ZV9zcGljKSB7CiAgICAgICAgICAvKiBEcmF3IE9TRCB0byBzdWItcGljdHVyZSBzdXJmYWNl
ICovCiAgICAgICAgICBJRGlyZWN0RkJQYWxldHRlICpwYWxldHRlOwogICAgICAgICAgREZC
Q29sb3IgICAgICAgICAgY29sb3I7CiAgICAgICAgICBpbnQgICAgICAgICAgICAgICBpOwoK
ICAgICAgICAgIGRmYi0+R2V0RGlzcGxheUxheWVyKCBkZmIsIDMsICZzcGljICk7CiAgICAg
ICAgICBzcGljLT5TZXRDb29wZXJhdGl2ZUxldmVsKCBzcGljLCBETFNDTF9FWENMVVNJVkUg
KTsKICAgICAgICAgIHNwaWMtPlNldE9wYWNpdHkoIHNwaWMsIDAgKTsKCiAgICAgICAgICBk
bGMuZmxhZ3MgICAgICAgPSBETENPTkZfUElYRUxGT1JNQVQgfCBETENPTkZfQlVGRkVSTU9E
RTsKICAgICAgICAgIGRsYy5waXhlbGZvcm1hdCA9IERTUEZfTFVUODsKICAgICAgICAgIGRs
Yy5idWZmZXJtb2RlICA9IERMQk1fQkFDS1ZJREVPOwogICAgICAgICAgaWYgKHNwaWMtPlRl
c3RDb25maWd1cmF0aW9uKCBzcGljLCAmZGxjLCAmZmFpbGVkICkgIT0gREZCX09LKQogICAg
ICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICBzcGljLT5TZXRDb25maWd1cmF0aW9u
KCBzcGljLCAmZGxjICk7CgogICAgICAgICAgc3BpYy0+R2V0U3VyZmFjZSggc3BpYywgJnN1
YmZyYW1lICk7CgogICAgICAgICAgc3ViZnJhbWUtPkdldFBhbGV0dGUoIHN1YmZyYW1lLCAm
cGFsZXR0ZSApOwogICAgICAgICAgY29sb3IuYSA9IDA7CiAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgMTY7IGkrKykgewogICAgICAgICAgICAgICBjb2xvci5yID0gaSAqIDE3OwogICAg
ICAgICAgICAgICBjb2xvci5nID0gaSAqIDE3OwogICAgICAgICAgICAgICBjb2xvci5iID0g
aSAqIDE3OwogICAgICAgICAgICAgICBwYWxldHRlLT5TZXRFbnRyaWVzKCBwYWxldHRlLCAm
Y29sb3IsIDEsIGkgKTsKICAgICAgICAgIH0KICAgICAgICAgIHBhbGV0dGUtPlJlbGVhc2Uo
IHBhbGV0dGUgKTsKCiAgICAgICAgICBzdWJmcmFtZS0+Q2xlYXIoIHN1YmZyYW1lLCAwLCAw
LCAwLCAwICk7CiAgICAgICAgICBzdWJmcmFtZS0+RmxpcCggc3ViZnJhbWUsIE5VTEwsIDAg
KTsKICAgICAgICAgIHN1YmZyYW1lLT5DbGVhciggc3ViZnJhbWUsIDAsIDAsIDAsIDAgKTsK
ICAgICB9IGVsc2UgaWYgKHVzZV9jcnRjMikgewogICAgICAgICAgLyogRHJhdyBPU0QgdG8g
Q1JUQzIgc3VyZmFjZSAqLwogICAgICAgICAgc3ViZnJhbWUgPSBjMmZyYW1lOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgICAvKiBEcmF3IE9TRCB0byBCRVMgc3VyZmFjZSAqLwogICAgICAg
ICAgc3ViZnJhbWUgICAgICAgICAgICA9IGZyYW1lOwogICAgICAgICAgc2NyZWVuX3dpZHRo
ICAgICAgICA9IGluX3dpZHRoOwogICAgICAgICAgc2NyZWVuX2hlaWdodCAgICAgICA9IGlu
X2hlaWdodDsKICAgICB9CgogICAgIHN1YmZyYW1lLT5HZXRQaXhlbEZvcm1hdCggc3ViZnJh
bWUsICZzdWJmcmFtZV9mb3JtYXQgKTsKICAgICBzdWJmcmFtZV9waXhlbF9zaXplID0gREZC
X0JZVEVTX1BFUl9QSVhFTCggc3ViZnJhbWVfZm9ybWF0ICk7CiAgICAgcHJpbnRmKCAidm9f
ZGZibWdhOiBTdWItcGljdHVyZSBzdXJmYWNlICVkeCVkICVzICglcylcbiIsCiAgICAgICAg
ICAgICBzY3JlZW5fd2lkdGgsIHNjcmVlbl9oZWlnaHQsCiAgICAgICAgICAgICBwaXhlbGZv
cm1hdF9uYW1lKCBzdWJmcmFtZV9mb3JtYXQgKSwKICAgICAgICAgICAgIHVzZV9jcnRjMiA/
ICh1c2Vfc3BpYyA/ICJTdWItcGljdHVyZSBsYXllciIgOiAiQ1JUQzIiKSA6ICJCRVMiICk7
CgogICAgIC8qIERpc3BsYXkgYWxsIG5lZWRlZCBsYXllcnMgKi8KICAgICBpZiAodXNlX2Jl
cykKICAgICAgICAgIGJlcy0+U2V0T3BhY2l0eSggYmVzLCAweEZGICk7CiAgICAgaWYgKHVz
ZV9jcnRjMikKICAgICAgICAgIGNydGMyLT5TZXRPcGFjaXR5KCBjcnRjMiwgMHhGRiApOwog
ICAgIGlmICh1c2Vfc3BpYykKICAgICAgICAgIHNwaWMtPlNldE9wYWNpdHkoIHNwaWMsIDB4
RkYgKTsKCiAgICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyB1aW50MzJfdApxdWVyeV9mb3JtYXQo
IHVpbnQzMl90IGZvcm1hdCApCnsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgICAgICAg
Y2FzZSBJTUdGTVRfUkdCMzI6CiAgICAgICAgICBjYXNlIElNR0ZNVF9CR1IzMjoKICAgICAg
ICAgIGNhc2UgSU1HRk1UX1JHQjI0OgogICAgICAgICAgY2FzZSBJTUdGTVRfQkdSMjQ6CiAg
ICAgICAgICBjYXNlIElNR0ZNVF9SR0IxNjoKICAgICAgICAgIGNhc2UgSU1HRk1UX0JHUjE2
OgogICAgICAgICAgY2FzZSBJTUdGTVRfUkdCMTU6CiAgICAgICAgICBjYXNlIElNR0ZNVF9C
R1IxNToKICAgICAgICAgIGNhc2UgSU1HRk1UX1lVWTI6CiAgICAgICAgICBjYXNlIElNR0ZN
VF9VWVZZOgogICAgICAgICAgY2FzZSBJTUdGTVRfWVYxMjoKICAgICAgICAgIGNhc2UgSU1H
Rk1UX0k0MjA6CiAgICAgICAgICBjYXNlIElNR0ZNVF9JWVVWOgogICAgICAgICAgICAgICBy
ZXR1cm4gKFZGQ0FQX0hXU0NBTEVfVVAgfAogICAgICAgICAgICAgICAgICAgICAgIFZGQ0FQ
X0hXU0NBTEVfRE9XTiB8CiAgICAgICAgICAgICAgICAgICAgICAgVkZDQVBfQ1NQX1NVUFBP
UlRFRF9CWV9IVyB8CiAgICAgICAgICAgICAgICAgICAgICAgVkZDQVBfQ1NQX1NVUFBPUlRF
RCB8CiAgICAgICAgICAgICAgICAgICAgICAgVkZDQVBfT1NEKTsKICAgICB9CgogICAgIHJl
dHVybiAwOwp9CgpzdGF0aWMgY29uc3Qgdm9faW5mb190ICpnZXRfaW5mbyggdm9pZCApCnsK
CXJldHVybiAmdm9faW5mbzsKfQoKc3RhdGljIHZvaWQgdm9fZHJhd19hbHBoYV9sdXQ4KCBp
bnQgdywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciogc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgKnNyY2EsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY3N0cmlk
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBkc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRzdHN0cmlkZSApCnsKICAg
ICBpbnQgeDsKCiAgICAgd2hpbGUgKGgtLSkgewogICAgICAgICAgZm9yICh4ID0gMDsgeCA8
IHc7IHgrKykgewogICAgICAgICAgICAgICBpZiAoc3JjYVt4XSkKICAgICAgICAgICAgICAg
ICAgICBkc3RbeF0gfD0gKCgyNTUgLSBzcmNhW3hdKSAmIDB4RjApIHwgKHNyY1t4XSA+PiA0
KTsKICAgICAgICAgIH0KICAgICAgICAgIHNyYyAgKz0gc3Jjc3RyaWRlOwogICAgICAgICAg
c3JjYSArPSBzcmNzdHJpZGU7CiAgICAgICAgICBkc3QgICs9IGRzdHN0cmlkZTsKICAgICB9
Cn0KCnN0YXRpYyB2b2lkCmRyYXdfYWxwaGEoIGludCB4MCwgaW50IHkwLAogICAgICAgICAg
ICBpbnQgdywgaW50IGgsCiAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNyYywKCSAgICB1
bnNpZ25lZCBjaGFyICpzcmNhLAogICAgICAgICAgICBpbnQgc3RyaWRlICkKewogICAgIHZv
aWQgKmRzdDsKICAgICBpbnQgcGl0Y2g7CgogICAgIHN1YmZyYW1lLT5Mb2NrKCBzdWJmcmFt
ZSwgRFNMRl9XUklURSwgJmRzdCwgJnBpdGNoICk7CgogICAgIHN3aXRjaCAoc3ViZnJhbWVf
Zm9ybWF0KSB7CiAgICAgY2FzZSBEU1BGX0xVVDg6CiAgICAgICAgICB2b19kcmF3X2FscGhh
X2x1dDgoIHcsIGgsIHNyYywgc3JjYSwgc3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoKHVpbnQ4X3QgKikgZHN0KSArIHBpdGNoICogeTAgKyBzdWJmcmFtZV9waXhl
bF9zaXplICogeDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoICk7CiAg
ICAgICAgICBicmVhazsKICAgICBjYXNlIERTUEZfUkdCMzI6CiAgICAgY2FzZSBEU1BGX0FS
R0I6CgkgIHZvX2RyYXdfYWxwaGFfcmdiMzIoIHcsIGgsIHNyYywgc3JjYSwgc3RyaWRlLAoJ
CQkgICAgICAgKCggdWludDhfdCAqKSBkc3QpICsgcGl0Y2ggKiB5MCArIHN1YmZyYW1lX3Bp
eGVsX3NpemUgKiB4MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoICk7
CgkgIGJyZWFrOwogICAgIGNhc2UgRFNQRl9SR0IyNDoKCSAgdm9fZHJhd19hbHBoYV9yZ2Iy
NCggdywgaCwgc3JjLCBzcmNhLCBzdHJpZGUsCgkJCSAgICAgICAoKHVpbnQ4X3QgKikgZHN0
KSArIHBpdGNoICogeTAgKyBzdWJmcmFtZV9waXhlbF9zaXplICogeDAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwaXRjaCApOwoJICBicmVhazsKICAgICBjYXNlIERTUEZf
UkdCMTY6CgkgIHZvX2RyYXdfYWxwaGFfcmdiMTYoIHcsIGgsIHNyYywgc3JjYSwgc3RyaWRl
LAoJCQkgICAgICAgKCh1aW50OF90ICopIGRzdCkgKyBwaXRjaCAqIHkwICsgc3ViZnJhbWVf
cGl4ZWxfc2l6ZSAqIHgwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2gg
KTsKCSAgYnJlYWs7CiAgICAgY2FzZSBEU1BGX1JHQjE1OgoJICB2b19kcmF3X2FscGhhX3Jn
YjE1KCB3LCBoLCBzcmMsIHNyY2EsIHN0cmlkZSwKCQkJICAgICAgICgodWludDhfdCAqKSBk
c3QpICsgcGl0Y2ggKiB5MCArIHN1YmZyYW1lX3BpeGVsX3NpemUgKiB4MCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBpdGNoICk7CgkgIGJyZWFrOwogICAgIGNhc2UgRFNQ
Rl9ZVVkyOgoJICB2b19kcmF3X2FscGhhX3l1eTIoIHcsIGgsIHNyYywgc3JjYSwgc3RyaWRl
LAoJCQkgICAgICAoKHVpbnQ4X3QgKikgZHN0KSArIHBpdGNoICogeTAgKyBzdWJmcmFtZV9w
aXhlbF9zaXplICogeDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoICk7
CgkgIGJyZWFrOwogICAgIGNhc2UgRFNQRl9VWVZZOgoJICB2b19kcmF3X2FscGhhX3l1eTIo
IHcsIGgsIHNyYywgc3JjYSwgc3RyaWRlLAoJCQkgICAgICAoKHVpbnQ4X3QgKikgZHN0KSAr
IHBpdGNoICogeTAgKyBzdWJmcmFtZV9waXhlbF9zaXplICogeDAgKyAxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwaXRjaCApOwoJICBicmVhazsKICAgICBjYXNlIERTUEZf
STQyMDoKICAgICBjYXNlIERTUEZfWVYxMjoKCSAgdm9fZHJhd19hbHBoYV95djEyKCB3LCBo
LCBzcmMsIHNyY2EsIHN0cmlkZSwKCQkJICAgICAgKCh1aW50OF90ICopIGRzdCkgKyBwaXRj
aCAqIHkwICsgc3ViZnJhbWVfcGl4ZWxfc2l6ZSAqIHgwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwaXRjaCApOwoJICBicmVhazsKICAgICB9CgogICAgIHN1YmZyYW1lLT5V
bmxvY2soIHN1YmZyYW1lICk7Cn0KCnN0YXRpYyB1aW50MzJfdApkcmF3X2ZyYW1lKCB1aW50
OF90ICogc3JjW10gKQp7CiAgICAgdm9pZCAqZHN0OwogICAgIGludCBwaXRjaDsKCiAgICAg
ZnJhbWUtPkxvY2soIGZyYW1lLCBEU0xGX1dSSVRFLCAmZHN0LCAmcGl0Y2ggKTsKCiAgICAg
c3dpdGNoIChmcmFtZV9mb3JtYXQpIHsKICAgICBjYXNlIERTUEZfQVJHQjoKICAgICBjYXNl
IERTUEZfUkdCMzI6CiAgICAgY2FzZSBEU1BGX1JHQjI0OgogICAgIGNhc2UgRFNQRl9SR0Ix
NjoKICAgICBjYXNlIERTUEZfUkdCMTU6CiAgICAgY2FzZSBEU1BGX1lVWTI6CiAgICAgY2Fz
ZSBEU1BGX1VZVlk6CiAgICAgICAgICB7CiAgICAgICAgICAgICAgIGludCBpOwogICAgICAg
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5faGVpZ2h0OyBpKyspIHsKICAgICAgICAgICAg
ICAgICAgICBtZW1jcHkoIGRzdCArIGkgKiBwaXRjaCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNyY1swXSArIGkgKiBpbl93aWR0aCAqIGZyYW1lX3BpeGVsX3NpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbl93aWR0aCAqIGZyYW1lX3BpeGVsX3NpemUgKTsK
ICAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBEU1BGX1lWMTI6CiAgICAgICAgICB7CiAgICAgICAgICAgICAgIGludCBpOwogICAgICAg
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5faGVpZ2h0OyBpKyspIHsKICAgICAgICAgICAg
ICAgICAgICBtZW1jcHkoIGRzdCArIGkgKiBwaXRjaCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNyY1swXSArIGkgKiBpbl93aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluX3dpZHRoICk7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZHN0ICs9
IHBpdGNoICogaW5faGVpZ2h0OwogICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5f
aGVpZ2h0IC8gMjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCBkc3QgKyBp
ICogcGl0Y2ggLyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjWzJdICsgaSAq
IGluX3dpZHRoIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3dpZHRoIC8g
MiApOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGRzdCArPSBwaXRjaCAqIGlu
X2hlaWdodCAvIDQ7CiAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbl9oZWlnaHQg
LyAyOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBtZW1jcHkoIGRzdCArIGkgKiBwaXRj
aCAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNbMV0gKyBpICogaW5fd2lk
dGggLyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fd2lkdGggLyAyICk7CiAg
ICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
RFNQRl9JNDIwOgogICAgICAgICAgewogICAgICAgICAgICAgICBpbnQgaTsKICAgICAgICAg
ICAgICAgZm9yIChpID0gMDsgaSA8IGluX2hlaWdodDsgaSsrKSB7CiAgICAgICAgICAgICAg
ICAgICAgbWVtY3B5KCBkc3QgKyBpICogcGl0Y2gsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzcmNbMF0gKyBpICogaW5fd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbl93aWR0aCApOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGRzdCArPSBw
aXRjaCAqIGluX2hlaWdodDsKICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGluX2hl
aWdodCAvIDI7IGkrKykgewogICAgICAgICAgICAgICAgICAgIG1lbWNweSggZHN0ICsgaSAq
IHBpdGNoIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1sxXSArIGkgKiBp
bl93aWR0aCAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl93aWR0aCAvIDIg
KTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBkc3QgKz0gcGl0Y2ggKiBpbl9o
ZWlnaHQgLyA0OwogICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5faGVpZ2h0IC8g
MjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCBkc3QgKyBpICogcGl0Y2gg
LyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjWzJdICsgaSAqIGluX3dpZHRo
IC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3dpZHRoIC8gMiApOwogICAg
ICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICB9CgogICAg
IGZyYW1lLT5VbmxvY2soIGZyYW1lICk7CgogICAgIHJldHVybiAwOwp9CgpzdGF0aWMgdWlu
dDMyX3QKZHJhd19zbGljZSggdWludDhfdCAqIHNyY1tdLCBpbnQgc3RyaWRlW10sIGludCB3
LCBpbnQgaCwgaW50IHgsIGludCB5ICkKewogICAgIHZvaWQgKmRzdDsKICAgICBpbnQgcGl0
Y2g7CgogICAgIGZyYW1lLT5Mb2NrKCBmcmFtZSwgRFNMRl9XUklURSwgJmRzdCwgJnBpdGNo
ICk7CgogICAgIHN3aXRjaCAoZnJhbWVfZm9ybWF0KSB7CiAgICAgY2FzZSBEU1BGX0FSR0I6
CiAgICAgY2FzZSBEU1BGX1JHQjMyOgogICAgIGNhc2UgRFNQRl9SR0IyNDoKICAgICBjYXNl
IERTUEZfUkdCMTY6CiAgICAgY2FzZSBEU1BGX1JHQjE1OgogICAgIGNhc2UgRFNQRl9ZVVky
OgogICAgIGNhc2UgRFNQRl9VWVZZOgogICAgICAgICAgewogICAgICAgICAgICAgICB2b2lk
ICpzOwogICAgICAgICAgICAgICBpbnQgaTsKCiAgICAgICAgICAgICAgIGRzdCArPSB5ICog
cGl0Y2ggKyB4ICogZnJhbWVfcGl4ZWxfc2l6ZTsKICAgICAgICAgICAgICAgcyA9IHNyY1sw
XTsKICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGg7IGkrKykgewogICAgICAgICAg
ICAgICAgICAgIG1lbWNweSggZHN0LCBzLCB3ICk7CiAgICAgICAgICAgICAgICAgICAgZHN0
ICs9IHBpdGNoOwogICAgICAgICAgICAgICAgICAgIHMgKz0gc3RyaWRlWzBdOwogICAgICAg
ICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICBjYXNlIERTUEZf
WVYxMjoKICAgICAgICAgIHsKICAgICAgICAgICAgICAgdm9pZCAqZCwgKnM7CiAgICAgICAg
ICAgICAgIGludCBpOwogICAgICAgICAgICAgICBkID0gZHN0ICsgcGl0Y2ggKiB5ICsgeDsK
ICAgICAgICAgICAgICAgcyA9IHNyY1swXTsKICAgICAgICAgICAgICAgZm9yIChpID0gMDsg
aSA8IGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIG1lbWNweSggZCwgcywgdyApOwog
ICAgICAgICAgICAgICAgICAgIGQgKz0gcGl0Y2g7CiAgICAgICAgICAgICAgICAgICAgcyAr
PSBzdHJpZGVbMF07CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZCA9IGRzdCAr
IHBpdGNoICogaW5faGVpZ2h0ICsgcGl0Y2ggKiB5IC8gNCArIHggLyAyOwogICAgICAgICAg
ICAgICBzID0gc3JjWzJdOwogICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaCAvIDI7
IGkrKykgewogICAgICAgICAgICAgICAgICAgIG1lbWNweSggZCwgcywgdyAvIDIgKTsKICAg
ICAgICAgICAgICAgICAgICBkICs9IHBpdGNoIC8gMjsKICAgICAgICAgICAgICAgICAgICBz
ICs9IHN0cmlkZVsyXTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBkID0gZHN0
ICsgcGl0Y2ggKiBpbl9oZWlnaHQgKyBwaXRjaCAqIGluX2hlaWdodCAvIDQgKwogICAgICAg
ICAgICAgICAgICAgIHBpdGNoICogeSAvIDQgKyB4IC8gMjsKICAgICAgICAgICAgICAgcyA9
IHNyY1sxXTsKICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGggLyAyOyBpKyspIHsK
ICAgICAgICAgICAgICAgICAgICBtZW1jcHkoIGQsIHMsIHcgLyAyICk7CiAgICAgICAgICAg
ICAgICAgICAgZCArPSBwaXRjaCAvIDI7CiAgICAgICAgICAgICAgICAgICAgcyArPSBzdHJp
ZGVbMV07CiAgICAgICAgICAgICAgIH0KICAgICAgICAgIH0KCSAgYnJlYWs7CiAgICAgY2Fz
ZSBEU1BGX0k0MjA6CiAgICAgICAgICB7CiAgICAgICAgICAgICAgIHZvaWQgKmQsICpzOwog
ICAgICAgICAgICAgICBpbnQgaTsKICAgICAgICAgICAgICAgZCA9IGRzdCArIHBpdGNoICog
eSArIHg7CiAgICAgICAgICAgICAgIHMgPSBzcmNbMF07CiAgICAgICAgICAgICAgIGZvciAo
aSA9IDA7IGkgPCBoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBtZW1jcHkoIGQsIHMs
IHcgKTsKICAgICAgICAgICAgICAgICAgICBkICs9IHBpdGNoOwogICAgICAgICAgICAgICAg
ICAgIHMgKz0gc3RyaWRlWzBdOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGQg
PSBkc3QgKyBwaXRjaCAqIGluX2hlaWdodCArIHBpdGNoICogeSAvIDQgKyB4IC8gMjsKICAg
ICAgICAgICAgICAgcyA9IHNyY1sxXTsKICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8
IGggLyAyOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBtZW1jcHkoIGQsIHMsIHcgLyAy
ICk7CiAgICAgICAgICAgICAgICAgICAgZCArPSBwaXRjaCAvIDI7CiAgICAgICAgICAgICAg
ICAgICAgcyArPSBzdHJpZGVbMV07CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ZCA9IGRzdCArIHBpdGNoICogaW5faGVpZ2h0ICsgcGl0Y2ggKiBpbl9oZWlnaHQgLyA0ICsK
ICAgICAgICAgICAgICAgICAgICBwaXRjaCAqIHkgLyA0ICsgeCAvIDI7CiAgICAgICAgICAg
ICAgIHMgPSBzcmNbMl07CiAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoIC8gMjsg
aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCBkLCBzLCB3IC8gMiApOwogICAg
ICAgICAgICAgICAgICAgIGQgKz0gcGl0Y2ggLyAyOwogICAgICAgICAgICAgICAgICAgIHMg
Kz0gc3RyaWRlWzJdOwogICAgICAgICAgICAgICB9CiAgICAgICAgICB9CgkgIGJyZWFrOwog
ICAgIH0KCiAgICAgZnJhbWUtPlVubG9jayggZnJhbWUgKTsKCiAgICAgcmV0dXJuIDA7Cn0K
CnN0YXRpYyB2b2lkCmRyYXdfb3NkKCB2b2lkICkKewogICAgIGlmICh1c2Vfc3BpYykKICAg
ICAgICAgIHN1YmZyYW1lLT5DbGVhciggc3ViZnJhbWUsIDAsIDAsIDAsIDAgKTsKICAgICBl
bHNlIGlmICghdXNlX2NydGMyKSB7CiAgICAgICAgICAvKiBDbGVhciBibGFjayBiYXJzIGFy
b3VuZCB0aGUgcGljdHVyZSAqLwogICAgICAgICAgYzJmcmFtZS0+U2V0Q29sb3IoIGMyZnJh
bWUsIDAsIDAsIDAsIDAgKTsKICAgICAgICAgIGMyZnJhbWUtPkZpbGxSZWN0YW5nbGUoIGMy
ZnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJlY3QueCwgZHJlY3QueSArIGRyZWN0Lmgg
KTsKICAgICAgICAgIGMyZnJhbWUtPkZpbGxSZWN0YW5nbGUoIGMyZnJhbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBkcmVjdC55ICsgZHJlY3QuaCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyZWN0LnggKyBkcmVjdC53LCBkcmVjdC55
ICk7CiAgICAgICAgICBjMmZyYW1lLT5GaWxsUmVjdGFuZ2xlKCBjMmZyYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJlY3QueCwgMCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRyZWN0LnggKyBkcmVjdC53LCBkcmVjdC55ICk7CiAgICAg
ICAgICBjMmZyYW1lLT5GaWxsUmVjdGFuZ2xlKCBjMmZyYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZHJlY3QueCArIGRyZWN0LncsIGRyZWN0LnksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkcmVjdC54LCBkcmVjdC55ICsgZHJlY3QuaCAp
OwogICAgIH0KCiAgICAgdm9fZHJhd190ZXh0KCBzY3JlZW5fd2lkdGgsIHNjcmVlbl9oZWln
aHQsIGRyYXdfYWxwaGEgKTsKCiAgICAgc3ViZnJhbWUtPkZsaXAoIHN1YmZyYW1lLCBOVUxM
LCBEU0ZMSVBfV0FJVEZPUlNZTkMgKTsKfQoKc3RhdGljIHZvaWQKZmxpcF9wYWdlKCB2b2lk
ICkKewogICAgIC8qIEZsaXAgaXMgZG9uZSBieSBkcmF3X29zZCgpIHdoZW4gb25seSBCRVMg
aXMgdXNlZCAqLwogICAgIGlmICghdXNlX2NydGMyKQogICAgICAgICAgcmV0dXJuOwoKICAg
ICBpZiAodXNlX2JlcykKICAgICAgICAgIC8qIEZsaXAgQkVTICovCiAgICAgICAgICBmcmFt
ZS0+RmxpcCggZnJhbWUsIE5VTEwsIDAgKTsKCiAgICAgLyogQmxpdCBmcm9tIEJFUy90ZW1w
IHRvIENSVEMyICovCiAgICAgYzJmcmFtZS0+U2V0QmxpdHRpbmdGbGFncyggYzJmcmFtZSwg
RFNCTElUX05PRlggKTsKICAgICBpZiAoc3RyZXRjaCkKICAgICAgICAgIGMyZnJhbWUtPlN0
cmV0Y2hCbGl0KCBjMmZyYW1lLCBmcmFtZSwgTlVMTCwgJmRyZWN0ICk7CiAgICAgZWxzZQog
ICAgICAgICAgYzJmcmFtZS0+QmxpdCggYzJmcmFtZSwgZnJhbWUsIE5VTEwsIGRyZWN0Lngs
IGRyZWN0LnkgKTsKCiAgICAgaWYgKHVzZV9zcGljKQogICAgICAgICAgLyogRmxpcCBDUlRD
MiAqLwogICAgICAgICAgYzJmcmFtZS0+RmxpcCggYzJmcmFtZSwgTlVMTCwgRFNGTElQX1dB
SVRGT1JTWU5DICk7Cn0KCnN0YXRpYyB2b2lkCnVuaW5pdCggdm9pZCApCnsKICAgICBidWZm
ZXItPlJlbGVhc2UoIGJ1ZmZlciApOwogICAgIGtleWJvYXJkLT5SZWxlYXNlKCBrZXlib2Fy
ZCApOwoKICAgICBmcmFtZS0+UmVsZWFzZSggZnJhbWUgKTsKICAgICBpZiAodXNlX2Jlcykg
ewogICAgICAgICAgYmVzLT5TZXRPcGFjaXR5KCBiZXMsIDAgKTsKICAgICAgICAgIGJlcy0+
UmVsZWFzZSggYmVzICk7CiAgICAgfQogICAgIGlmICh1c2VfY3J0YzIpIHsKICAgICAgICAg
IGMyZnJhbWUtPlJlbGVhc2UoIGMyZnJhbWUgKTsKICAgICAgICAgIGNydGMyLT5TZXRPcGFj
aXR5KCBjcnRjMiwgMCApOwogICAgICAgICAgY3J0YzItPlJlbGVhc2UoIGNydGMyICk7CiAg
ICAgfQogICAgIGlmICh1c2Vfc3BpYykgewogICAgICAgICAgc3ViZnJhbWUtPlJlbGVhc2Uo
IHN1YmZyYW1lICk7CiAgICAgICAgICBzcGljLT5TZXRPcGFjaXR5KCBzcGljLCAwICk7CiAg
ICAgICAgICBzcGljLT5SZWxlYXNlKCBzcGljICk7CiAgICAgfQoKICAgICAvKgogICAgICAq
IERvbid0IHJlbGVhc2UuIFNlZ2ZhdWx0IGluIHByZWluaXQoKSBpZgogICAgICAqIERpcmVj
dEZCQ3JlYXRlKCkgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLgogICAgICAqCiAgICAgICogZGZi
LT5SZWxlYXNlKCBkZmIgKTsKICAgICAgKi8KfQoKc3RhdGljIGludApkaXJlY3RmYl9zZXRf
dmlkZW9fZXEoIGNvbnN0IHZpZGl4X3ZpZGVvX2VxX3QgKiBpbmZvICkKewogICAgIERGQkNv
bG9yQWRqdXN0bWVudCBjYTsKICAgICBmbG9hdCBmYWN0b3IgPSAoZmxvYXQpIDB4ZmZmZiAv
IDIwMDAuMDsKCiAgICAgY2EuZmxhZ3MgPSBEQ0FGX05PTkU7CgogICAgIGlmIChpbmZvLT5j
YXAgJiBWRVFfQ0FQX0JSSUdIVE5FU1MpIHsKICAgICAgICAgIGNhLmZsYWdzICAgICAgfD0g
RENBRl9CUklHSFRORVNTOwogICAgICAgICAgY2EuYnJpZ2h0bmVzcyAgPSBpbmZvLT5icmln
aHRuZXNzICogZmFjdG9yICsgMHg4MDAwOwogICAgIH0KICAgICBpZiAoaW5mby0+Y2FwICYg
VkVRX0NBUF9DT05UUkFTVCkgewogICAgICAgICAgY2EuZmxhZ3MgICAgfD0gRENBRl9DT05U
UkFTVDsKICAgICAgICAgIGNhLmNvbnRyYXN0ICA9IGluZm8tPmNvbnRyYXN0ICogZmFjdG9y
ICsgMHg4MDAwOwogICAgIH0KICAgICBpZiAoaW5mby0+Y2FwICYgVkVRX0NBUF9IVUUpIHsK
ICAgICAgICAgIGNhLmZsYWdzIHw9IERDQUZfSFVFOwogICAgICAgICAgY2EuaHVlICAgID0g
aW5mby0+aHVlICogZmFjdG9yICsgMHg4MDAwOwogICAgIH0KICAgICBpZiAoaW5mby0+Y2Fw
ICYgVkVRX0NBUF9TQVRVUkFUSU9OKSB7CiAgICAgICAgICBjYS5mbGFncyAgICAgIHw9IERD
QUZfU0FUVVJBVElPTjsKICAgICAgICAgIGNhLnNhdHVyYXRpb24gID0gaW5mby0+c2F0dXJh
dGlvbiAqIGZhY3RvciArIDB4ODAwMDsKICAgICB9CgogICAgIC8qIFByZWZlciBDUlRDMiBv
dmVyIEJFUyAqLwogICAgIGlmICh1c2VfY3J0YzIpCiAgICAgICAgICBjcnRjMi0+U2V0Q29s
b3JBZGp1c3RtZW50KCBjcnRjMiwgJmNhICk7CiAgICAgZWxzZSBpZiAodXNlX2JlcykKICAg
ICAgICAgIGJlcy0+U2V0Q29sb3JBZGp1c3RtZW50KCBiZXMsICZjYSApOwoKICAgICByZXR1
cm4gMDsKfQoKc3RhdGljIGludApkaXJlY3RmYl9nZXRfdmlkZW9fZXEoIHZpZGl4X3ZpZGVv
X2VxX3QgKiBpbmZvICkKewogICAgIERGQkNvbG9yQWRqdXN0bWVudCBjYTsKICAgICBmbG9h
dCBmYWN0b3IgPSAyMDAwLjAgLyAoZmxvYXQpIDB4ZmZmZjsKCiAgICAgLyogUHJlZmVyIENS
VEMyIG92ZXIgQkVTICovCiAgICAgaWYgKHVzZV9jcnRjMikKICAgICAgICAgIGNydGMyLT5H
ZXRDb2xvckFkanVzdG1lbnQoIGNydGMyLCAmY2EgKTsKICAgICBlbHNlIGlmICh1c2VfYmVz
KQogICAgICAgICAgYmVzLT5HZXRDb2xvckFkanVzdG1lbnQoIGJlcywgJmNhICk7CiAgICAg
ZWxzZQogICAgICAgICAgcmV0dXJuIDA7CgogICAgIGlmIChjYS5mbGFncyAmIERDQUZfQlJJ
R0hUTkVTUykgewogICAgICAgICAgaW5mby0+Y2FwICAgICAgICB8PSBWRVFfQ0FQX0JSSUdI
VE5FU1M7CiAgICAgICAgICBpbmZvLT5icmlnaHRuZXNzICA9IChjYS5icmlnaHRuZXNzIC0g
MHg4MDAwKSAqIGZhY3RvcjsKICAgICB9CiAgICAgaWYgKGNhLmZsYWdzICYgRENBRl9DT05U
UkFTVCkgewogICAgICAgICAgaW5mby0+Y2FwICAgICAgfD0gVkVRX0NBUF9DT05UUkFTVDsK
ICAgICAgICAgIGluZm8tPmNvbnRyYXN0ICA9IChjYS5jb250cmFzdCAtIDB4ODAwMCkgKiBm
YWN0b3I7CiAgICAgfQogICAgIGlmIChjYS5mbGFncyAmIERDQUZfSFVFKSB7CiAgICAgICAg
ICBpbmZvLT5jYXAgfD0gVkVRX0NBUF9IVUU7CiAgICAgICAgICBpbmZvLT5odWUgID0gKGNh
Lmh1ZSAtIDB4ODAwMCkgKiBmYWN0b3I7CiAgICAgfQogICAgIGlmIChjYS5mbGFncyAmIERD
QUZfU0FUVVJBVElPTikgewogICAgICAgICAgaW5mby0+Y2FwICAgICAgICB8PSBWRVFfQ0FQ
X1NBVFVSQVRJT047CiAgICAgICAgICBpbmZvLT5zYXR1cmF0aW9uICA9IChjYS5zYXR1cmF0
aW9uIC0gMHg4MDAwKSAqIGZhY3RvcjsKICAgICB9CgogICAgIHJldHVybiAwOwp9CgpzdGF0
aWMgdWludDMyX3QKY29udHJvbCggdWludDMyX3QgcmVxdWVzdCwgdm9pZCAqZGF0YSwgLi4u
ICkKewogICAgIHN3aXRjaCAocmVxdWVzdCkgewogICAgIGNhc2UgVk9DVFJMX1FVRVJZX0ZP
Uk1BVDoKCSAgcmV0dXJuIHF1ZXJ5X2Zvcm1hdCggKigodWludDMyX3QgKikgZGF0YSkgKTsK
ICAgICBjYXNlIFZPQ1RSTF9TRVRfRVFVQUxJWkVSOgogICAgICAgICAgewogICAgICAgICAg
ICAgICB2YV9saXN0IGFwOwogICAgICAgICAgICAgICBpbnQgdmFsdWU7CiAgICAgICAgICAg
ICAgIHZpZGl4X3ZpZGVvX2VxX3QgaW5mbzsKCiAgICAgICAgICAgICAgIHZhX3N0YXJ0KCBh
cCwgZGF0YSApOwogICAgICAgICAgICAgICB2YWx1ZSA9IHZhX2FyZyggYXAsIGludCApOwog
ICAgICAgICAgICAgICB2YV9lbmQoIGFwICk7CgogICAgICAgICAgICAgICBpZiAoIXN0cmNh
c2VjbXAoIGRhdGEsICJicmlnaHRuZXNzIiApKSB7CiAgICAgICAgICAgICAgICAgICAgaW5m
by5jYXAgPSBWRVFfQ0FQX0JSSUdIVE5FU1M7CiAgICAgICAgICAgICAgICAgICAgaW5mby5i
cmlnaHRuZXNzID0gdmFsdWUgKiAxMDsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICBpZiAoIXN0cmNhc2VjbXAoIGRhdGEsICJjb250cmFzdCIgKSkgewogICAgICAgICAgICAg
ICAgICAgIGluZm8uY2FwID0gVkVRX0NBUF9DT05UUkFTVDsKICAgICAgICAgICAgICAgICAg
ICBpbmZvLmNvbnRyYXN0ID0gdmFsdWUgKiAxMDsKICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICBpZiAoIXN0cmNhc2VjbXAoIGRhdGEsICJzYXR1cmF0aW9uIiApKSB7CiAgICAg
ICAgICAgICAgICAgICAgaW5mby5jYXAgPSBWRVFfQ0FQX1NBVFVSQVRJT047CiAgICAgICAg
ICAgICAgICAgICAgaW5mby5zYXR1cmF0aW9uID0gdmFsdWUgKiAxMDsKICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICBpZiAoIXN0cmNhc2VjbXAoIGRhdGEsICJodWUiICkpIHsK
ICAgICAgICAgICAgICAgICAgICBpbmZvLmNhcCA9IFZFUV9DQVBfSFVFOwogICAgICAgICAg
ICAgICAgICAgIGluZm8uaHVlID0gdmFsdWUgKiAxMDsKICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICBpZiAoZGlyZWN0ZmJfc2V0X3ZpZGVvX2VxKCAmaW5mbyApKQogICAgICAg
ICAgICAgICAgICAgIHJldHVybiBWT19GQUxTRTsKCiAgICAgICAgICAgICAgIHJldHVybiBW
T19UUlVFOwogICAgICAgICAgfQogICAgIGNhc2UgVk9DVFJMX0dFVF9FUVVBTElaRVI6CiAg
ICAgICAgICB7CiAgICAgICAgICAgICAgIHZhX2xpc3QgYXA7CiAgICAgICAgICAgICAgIGlu
dCAqdmFsdWU7CiAgICAgICAgICAgICAgIHZpZGl4X3ZpZGVvX2VxX3QgaW5mbzsKCiAgICAg
ICAgICAgICAgIGlmIChkaXJlY3RmYl9nZXRfdmlkZW9fZXEoICZpbmZvICkpCiAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFZPX0ZBTFNFOwoKICAgICAgICAgICAgICAgdmFfc3RhcnQo
IGFwLCBkYXRhICk7CiAgICAgICAgICAgICAgIHZhbHVlID0gdmFfYXJnKCBhcCwgaW50KiAp
OwogICAgICAgICAgICAgICB2YV9lbmQoIGFwICk7CgogICAgICAgICAgICAgICBpZiAoIXN0
cmNhc2VjbXAoIGRhdGEsICJicmlnaHRuZXNzIiApKQogICAgICAgICAgICAgICAgICAgIGlm
IChpbmZvLmNhcCAmIFZFUV9DQVBfQlJJR0hUTkVTUykKICAgICAgICAgICAgICAgICAgICAg
ICAgICp2YWx1ZSA9IGluZm8uYnJpZ2h0bmVzcyAvIDEwOwogICAgICAgICAgICAgICBpZiAo
IXN0cmNhc2VjbXAoIGRhdGEsICJjb250cmFzdCIgKSkKICAgICAgICAgICAgICAgICAgICBp
ZiAoaW5mby5jYXAgJiBWRVFfQ0FQX0NPTlRSQVNUKQogICAgICAgICAgICAgICAgICAgICAg
ICAgKnZhbHVlID0gaW5mby5jb250cmFzdCAvIDEwOwogICAgICAgICAgICAgICBpZiAoIXN0
cmNhc2VjbXAoIGRhdGEsICJzYXR1cmF0aW9uIiApKQogICAgICAgICAgICAgICAgICAgIGlm
IChpbmZvLmNhcCAmIFZFUV9DQVBfU0FUVVJBVElPTikKICAgICAgICAgICAgICAgICAgICAg
ICAgICp2YWx1ZSA9IGluZm8uc2F0dXJhdGlvbiAvIDEwOwogICAgICAgICAgICAgICBpZiAo
IXN0cmNhc2VjbXAoIGRhdGEsICJodWUiICkpCiAgICAgICAgICAgICAgICAgICAgaWYgKGlu
Zm8uY2FwICYgVkVRX0NBUF9IVUUpCiAgICAgICAgICAgICAgICAgICAgICAgICAqdmFsdWUg
PSBpbmZvLmh1ZSAvIDEwOwoKICAgICAgICAgICAgICAgcmV0dXJuIFZPX1RSVUU7CiAgICAg
ICAgICB9CiAgICAgfQoKICAgICByZXR1cm4gVk9fTk9USU1QTDsKfQoKZXh0ZXJuIHZvaWQg
bXBsYXllcl9wdXRfa2V5KCBpbnQgY29kZSApOwoKI2luY2x1ZGUgIi4uL2xpbnV4L2tleWNv
ZGVzLmgiCgpzdGF0aWMgdm9pZApjaGVja19ldmVudHMoIHZvaWQgKQp7CiAgICAgc3RhdGlj
IGludCBvcGEgPSAyNTU7CiAgICAgREZCSW5wdXRFdmVudCBldmVudDsKCiAgICAgaWYgKGJ1
ZmZlci0+R2V0RXZlbnQoIGJ1ZmZlciwgREZCX0VWRU5UKCAmZXZlbnQgKSkgPT0gREZCX09L
KSB7CiAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PSBESUVUX0tFWVBSRVNTKSB7CiAgICAg
ICAgICAgICAgIHN3aXRjaCAoZXZlbnQua2V5X3N5bWJvbCkgewogICAgICAgICAgICAgICBj
YXNlIERJS1NfRVNDQVBFOgogICAgICAgICAgICAgICAgICAgIG1wbGF5ZXJfcHV0X2tleSgg
J3EnICk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2Ug
RElLU19QQUdFX1VQOgogICAgICAgICAgICAgICAgICAgIG1wbGF5ZXJfcHV0X2tleSggS0VZ
X1BBR0VfVVAgKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
Y2FzZSBESUtTX1BBR0VfRE9XTjoKICAgICAgICAgICAgICAgICAgICBtcGxheWVyX3B1dF9r
ZXkoIEtFWV9QQUdFX0RPV04gKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgY2FzZSBESUtTX0NVUlNPUl9VUDoKICAgICAgICAgICAgICAgICAgICBtcGxh
eWVyX3B1dF9rZXkoIEtFWV9VUCApOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICBjYXNlIERJS1NfQ1VSU09SX0RPV046CiAgICAgICAgICAgICAgICAgICAg
bXBsYXllcl9wdXRfa2V5KCBLRVlfRE9XTiApOwogICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICBjYXNlIERJS1NfQ1VSU09SX0xFRlQ6CiAgICAgICAgICAgICAg
ICAgICAgbXBsYXllcl9wdXRfa2V5KCBLRVlfTEVGVCApOwogICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIERJS1NfQ1VSU09SX1JJR0hUOgogICAgICAg
ICAgICAgICAgICAgIG1wbGF5ZXJfcHV0X2tleSggS0VZX1JJR0hUICk7CiAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgRElLU19JTlNFUlQ6CiAgICAg
ICAgICAgICAgICAgICAgbXBsYXllcl9wdXRfa2V5KCBLRVlfSU5TRVJUICk7CiAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgRElLU19ERUxFVEU6CiAg
ICAgICAgICAgICAgICAgICAgbXBsYXllcl9wdXRfa2V5KCBLRVlfREVMRVRFICk7CiAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgRElLU19IT01FOgog
ICAgICAgICAgICAgICAgICAgIG1wbGF5ZXJfcHV0X2tleSggS0VZX0hPTUUgKTsKICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBESUtTX0VORDoKICAg
ICAgICAgICAgICAgICAgICBtcGxheWVyX3B1dF9rZXkoIEtFWV9FTkQgKTsKICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
ICAgICAgICBtcGxheWVyX3B1dF9rZXkoIGV2ZW50LmtleV9zeW1ib2wgKTsKICAgICAgICAg
ICAgICAgfQogICAgICAgICAgfQogICAgIH0KCiAgICAgLyoKICAgICAgKiBlbXB0eSBidWZm
ZXIsIGJlY2F1c2Ugb2YgcmVwZWF0aW5nCiAgICAgICoga2V5Ym9hcmQgcmVwZWF0IGlzIGZh
c3RlciB0aGFuIGtleSBoYW5kbGluZyBhbmQgdGhpcyBjYXVzZXMgcHJvYmxlbXMgZHVyaW5n
IHNlZWsKICAgICAgKiB0ZW1wb3Jhcnkgd29ya2Fib3V0LiBzaG91bGQgYmUgc29sdmVkIGlu
IHRoZSBmdXR1cmUKICAgICAgKi8KICAgICBidWZmZXItPlJlc2V0KCBidWZmZXIgKTsKfQo=


More information about the MPlayer-dev-eng mailing list