From owner-freebsd-multimedia Wed Jan 22 07:50:06 1997 Return-Path: Received: (from root@localhost) by freefall.freebsd.org (8.8.5/8.8.5) id HAA09936 for multimedia-outgoing; Wed, 22 Jan 1997 07:50:06 -0800 (PST) Received: from rah.star-gate.com (rah.star-gate.com [204.188.121.18]) by freefall.freebsd.org (8.8.5/8.8.5) with ESMTP id HAA09930 for ; Wed, 22 Jan 1997 07:50:02 -0800 (PST) Received: from rah.star-gate.com (localhost.star-gate.com [127.0.0.1]) by rah.star-gate.com (8.7.6/8.7.3) with ESMTP id HAA00337 for ; Wed, 22 Jan 1997 07:50:01 -0800 (PST) Message-Id: <199701221550.HAA00337@rah.star-gate.com> X-Mailer: exmh version 1.6.9 8/22/96 To: multimedia@freebsd.org Subject: grabber-meteor.cc (packed mode) for Pentium Pro Users Content-Type: multipart/mixed ; boundary="===_0_Wed_Jan_22_07:48:28_PST_1997" Date: Wed, 22 Jan 1997 07:50:00 -0800 From: Amancio Hasty Sender: owner-multimedia@freebsd.org X-Loop: FreeBSD.org Precedence: bulk This is a multipart MIME message. --===_0_Wed_Jan_22_07:48:28_PST_1997 -------- Hi, The packed mode for the Bt848 and the Meteor is slightly different or at least the way that meteor driver has been programmed. This means that you can't use this grabber-meteor.cc with an Intel Smart Video Recorder cause it is a quick hack to check the meteor. At any rate, more to the point, I tested this lightly over here and will be interested to hear from other Pentium PRO owners. I still consider the Matrox Meteor outright dangerous with a PPRO and a Natoma chipset... What follows is grabber-meteor.cc for vic-2.8 . Cheers, Amancio --===_0_Wed_Jan_22_07:48:28_PST_1997 Content-Type: application/octet-stream Content-Description: grabber-meteor.cc Content-Transfer-Encoding: base64 LyoKICogQ29weXJpZ2h0IChjKSBKaW0gTG93ZSwgMTk5NSwgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCiAq ICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKICogICAg ICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IEppbSBMb3dl CiAqIDQuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwogKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5Z IEVYUFJFU1MgT1IKICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFIElNUExJRUQKICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQogKiBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsCiAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUwogKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKICogU0VSVklDRVM7IExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CiAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCiAqIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQog KiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICovCgovKgogKiAxLjAJMTEvMDkvOTUK ICoJSW5pdGlhbCBSZWxlYXNlLgogKiAxLjEJMTIvMjAvOTUKICoJQ2hhbmdlZCB0byB1c2Ug bmV3IG1vZGUgaW4gbWV0ZW9yIGRyaXZlciAoTUVURU9SX0dFT19ZVVZfNDIyKSBhbmQKICoJ YWxsb3cgZXZlbiBvbmx5IGZpZWxkcyB0byBiZSBjYXB0dXJlZCB1bmRlciBjZXJ0YWluIGNv bmRpdGlvbnMuCiAqCUFkZGVkIEZSQU1FX0NOVFMgZGVidWdnaW5nIG9wdGlvbi4KICogMS4y CTMvMjUvOTYKICoJQ2hhbmdlZCB0aGUgY29uZGl0aW9ucyBFVkVOX09OTFkgbW9kZSB3YXMg c3BlY2lmaWVkLiAgV2Ugbm93IGNoZWNrCiAqCXRoZSBzdGF0dXMgdG8gZGV0ZXJtaW5lIGlm IHdlIGNhbiBydW4gaW4gRVZFTl9PTkxZIG1vZGUuCiAqIDEuMwk1LzEzLzk2CiAqCUFkZGVk IHRoZSBmcHMgY29kZSB0byB0aGUgZ3JhYmJlciBzbyB3ZSBvbmx5IHRyYW5zZmVyIHdoYXQg d2UgbmVlZC4KICoJCiAqLwoKLyojZGVmaW5lIEZSQU1FX0NOVFMgLyogcHJpbnQgZnJhbWUg Y291bnRzIGFuZCBmcHMgd2hlbiBkZXZpY2Ugc3RvcHMgLS0gZGVidWcgKi8KI2luY2x1ZGUg PHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5j bHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8c3lzL2lv Y3RsLmg+CiNpbmNsdWRlIDxzeXMvbW1hbi5oPgojaWZkZWYgRlJBTUVfQ05UUwojaW5jbHVk ZSA8c3lzL3RpbWUuaD4KI2VuZGlmCgojaW5jbHVkZSAiZ3JhYmJlci5oIgojaW5jbHVkZSAi VGNsLmgiCiNpbmNsdWRlICJkZXZpY2UtaW5wdXQuaCIKI2luY2x1ZGUgIm1vZHVsZS5oIgoK I2luY2x1ZGUgPG1hY2hpbmUvaW9jdGxfbWV0ZW9yLmg+CgovKlhYWCovCiNkZWZpbmUgTlRT Q19XSURUSCAzMjAKI2RlZmluZSBOVFNDX0hFSUdIVCAyNDAKI2RlZmluZSBQQUxfV0lEVEgg Mzg0CiNkZWZpbmUgUEFMX0hFSUdIVCAyODgKI2RlZmluZSBDSUZfV0lEVEggMzUyCiNkZWZp bmUgQ0lGX0hFSUdIVCAyODgKCgpjbGFzcyBNZXRlb3JHcmFiYmVyIDogcHVibGljIEdyYWJi ZXIgewogcHVibGljOgoJTWV0ZW9yR3JhYmJlcihjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBj aGFyKiBmb3JtYXQpOwoJdmlydHVhbCB+TWV0ZW9yR3JhYmJlcigpOwoJdmlydHVhbCB2b2lk IHN0YXJ0KCk7Cgl2aXJ0dWFsIHZvaWQgc3RvcCgpOwoJdmlydHVhbCB2b2lkIGZwcyhpbnQp OwogcHJvdGVjdGVkOgoJdmlydHVhbCBpbnQgY29tbWFuZChpbnQgYXJnYywgY29uc3QgY2hh cipjb25zdCogYXJndik7Cgl2aXJ0dWFsIGludCBjYXB0dXJlKCk7Cgl2aXJ0dWFsIGludCBn cmFiKCk7Cgl2b2lkIGZvcm1hdCgpOwoJdm9pZCBzZXRzaXplKCk7CgoJaW50IHZpZGVvX2Zv cm1hdF87CS8qIHZpZGVvIGlucHV0IGZvcm1hdDogTlRTQyBvciBQQUwgKi8KCWludCBkZXZf OwkJLyogZGV2aWNlIGZkICovCglpbnQgcG9ydF87CQkvKiB2aWRlbyBpbnB1dCBwb3J0ICov CglpbnQgY29kZXJfZm9ybWF0XzsJLyogNDExLCA0MjIsIG9yIGNpZiAqLwoJdV9pbnQgYmFz ZXdpZHRoXzsJLyogSGVpZ2h0IG9mIGZyYW1lIHRvIGJlIGNhcHR1cmVkICovCgl1X2ludCBi YXNlaGVpZ2h0XzsJLyogV2lkdGggb2YgZnJhbWUgdG8gYmUgY2FwdHVyZWQgKi8KCXVfaW50 IGRlY2ltYXRlXzsJLyogZGl2aXNpb24gb2YgYmFzZSBzaXplcyAqLwoJdm9sYXRpbGUgdV9p bnQqIHB5dXZfOwkvKiBwb2ludGVyIHRvIHl1diBkYXRhICovCiNpZmRlZiBGUkFNRV9DTlRT CglzdHJ1Y3QgbWV0ZW9yX2NvdW50cyBjbnRzXzsJLyogcG9pbnRlciB0byBjb3VudGVycyAq LwoJZG91YmxlCXN0YXJ0X3RpbWVfOwojZW5kaWYKfTsKCnN0YXRpYyBjb25zdCBpbnQJZl80 MTEgPSAwOwkvKiBjb2Rlcl9mb3JtYXRfcyAqLwpzdGF0aWMgY29uc3QgaW50CWZfNDIyID0g MTsKc3RhdGljIGNvbnN0IGludAlmX2NpZiA9IDI7CgpjbGFzcyBNZXRlb3JEZXZpY2UgOiBw dWJsaWMgSW5wdXREZXZpY2UgewogcHVibGljOgoJTWV0ZW9yRGV2aWNlKGNvbnN0IGNoYXIq IG5pY2tuYW1lLCBjb25zdCBjaGFyKiBkZXZuYW1lLCBpbnQgZnJlZSk7Cgl2aXJ0dWFsIGlu dCBjb21tYW5kKGludCBhcmdjLCBjb25zdCBjaGFyKmNvbnN0KiBhcmd2KTsKIHByb3RlY3Rl ZDoKCWNvbnN0IGNoYXIqIG5hbWVfOwp9OwoKY2xhc3MgTWV0ZW9yU2Nhbm5lciB7CiBwdWJs aWM6CglNZXRlb3JTY2FubmVyKGNvbnN0IGludCBuKTsKfTsKc3RhdGljIE1ldGVvclNjYW5u ZXIgZmluZF9tZXRlb3JfZGV2aWNlcyg4KTsKCk1ldGVvclNjYW5uZXI6Ok1ldGVvclNjYW5u ZXIoY29uc3QgaW50IG4pCnsKCWNoYXIqCWRldm5hbWVfdGVtcGxhdGUgID0gIi9kZXYvbWV0 ZW9yJWQiOwoJY2hhcioJbmlja25hbWVfdGVtcGxhdGUgPSAiTWF0cm94IE1ldGVvciAlZCI7 CgljaGFyKglkZXZuYW1lX3RlbXBsYXRlMSAgPSAiL2Rldi9ia3RyJWQiOwoJY2hhcioJbmlj a25hbWVfdGVtcGxhdGUxID0gIkJyb29rVHJlZTg0OCAlZCI7CgoKCglmb3IoaW50IGkgPSAw OyBpIDwgbjsgaSsrKSB7CgkJY2hhcgkqZGV2bmFtZSAgPSBuZXcgY2hhcltzdHJsZW4oZGV2 bmFtZV90ZW1wbGF0ZSkgICsgM107CgkJY2hhcgkqbmlja25hbWUgPSBuZXcgY2hhcltzdHJs ZW4obmlja25hbWVfdGVtcGxhdGUpICsgM107CgkJY2hhcgkqZGV2bmFtZTEgID0gbmV3IGNo YXJbc3RybGVuKGRldm5hbWVfdGVtcGxhdGUxKSAgKyAzXTsKCQljaGFyCSpuaWNrbmFtZTEg PSBuZXcgY2hhcltzdHJsZW4obmlja25hbWVfdGVtcGxhdGUxKSArIDNdOwoKCQlzcHJpbnRm KG5pY2tuYW1lLCBuaWNrbmFtZV90ZW1wbGF0ZSwgaSArIDEpOwoJCXNwcmludGYoZGV2bmFt ZSwgZGV2bmFtZV90ZW1wbGF0ZSwgaSk7CgoJCXNwcmludGYobmlja25hbWUxLCBuaWNrbmFt ZV90ZW1wbGF0ZTEsIGkgKyAxKTsKCQlzcHJpbnRmKGRldm5hbWUxLCBkZXZuYW1lX3RlbXBs YXRlMSwgaSk7CgkJaWYoYWNjZXNzKGRldm5hbWUsIFJfT0spID09IDApIHsKCQkJaW50IGZk ID0gb3BlbihkZXZuYW1lLCBPX1JET05MWSk7CgkJCWlmKGZkIDwgMCkgewoJCQkJbmV3IE1l dGVvckRldmljZShuaWNrbmFtZSwgZGV2bmFtZSwgMCk7CgkJCX0gZWxzZSB7CgkJCQkodm9p ZCljbG9zZShmZCk7CgkJCQluZXcgTWV0ZW9yRGV2aWNlKG5pY2tuYW1lLCBkZXZuYW1lLCAx KTsKCQkJfQoJCX0gZWxzZSB7CgkJCWRlbGV0ZSBuaWNrbmFtZTsKCQkJZGVsZXRlIGRldm5h bWU7CgkJfQoKCQlpZihhY2Nlc3MoZGV2bmFtZTEsIFJfT0spID09IDApIHsKCQkJaW50IGZk ID0gb3BlbihkZXZuYW1lMSwgT19SRE9OTFkpOwoJCQlpZihmZCA8IDApIHsKCQkJCW5ldyBN ZXRlb3JEZXZpY2Uobmlja25hbWUxLCBkZXZuYW1lMSwgMCk7CgkJCX0gZWxzZSB7CgkJCQko dm9pZCljbG9zZShmZCk7CgkJCQluZXcgTWV0ZW9yRGV2aWNlKG5pY2tuYW1lMSwgZGV2bmFt ZTEsIDEpOwoJCQl9CgkJfSBlbHNlIHsKCQkJZGVsZXRlIG5pY2tuYW1lMTsKCQkJZGVsZXRl IGRldm5hbWUxOwoJCX0KCX0KfQoKTWV0ZW9yRGV2aWNlOjpNZXRlb3JEZXZpY2UoY29uc3Qg Y2hhciogbmlja25hbWUsIGNvbnN0IGNoYXIgKmRldm5hbWUsIGludCBmcmVlKToKCQkJCQlJ bnB1dERldmljZShuaWNrbmFtZSksIG5hbWVfKGRldm5hbWUpCnsKCWlmKGZyZWUpCgkJYXR0 cmlidXRlc18gPSAiXApmb3JtYXQgezQyMiA0MTF9IFwKc2l6ZSB7bGFyZ2Ugbm9ybWFsIHNt YWxsIGNpZn0gXApwb3J0IHtSQ0EgUG9ydC0xIFBvcnQtMiBQb3J0LTMgUy1WaWRlbyBSR0J9 IjsKCWVsc2UKCQlhdHRyaWJ1dGVzXyA9ICJkaXNhYmxlZCI7Cn0KCmludCBNZXRlb3JEZXZp Y2U6OmNvbW1hbmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIqY29uc3QqIGFyZ3YpCnsKCVRjbCYg dGNsID0gVGNsOjppbnN0YW5jZSgpOwoJaWYgKChhcmdjID09IDMpICYmIChzdHJjbXAoYXJn dlsxXSwgIm9wZW4iKSA9PSAwKSkgewoJCVRjbE9iamVjdCogbyA9IDA7CgkJbyA9IG5ldyBN ZXRlb3JHcmFiYmVyKG5hbWVfLCBhcmd2WzJdKTsKCQlpZiAobyAhPSAwKQoJCQl0Y2wucmVz dWx0KG8tPm5hbWUoKSk7CgkJcmV0dXJuIChUQ0xfT0spOwoJfQoJcmV0dXJuIChJbnB1dERl dmljZTo6Y29tbWFuZChhcmdjLCBhcmd2KSk7Cn0KCk1ldGVvckdyYWJiZXI6Ok1ldGVvckdy YWJiZXIoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogZm9ybWF0KQp7Cgljb2Rlcl9m b3JtYXRfID0gLTE7CglpZighc3RyY21wKGZvcm1hdCwgIjQxMSIpKSBjb2Rlcl9mb3JtYXRf ID0gZl80MTE7CglpZighc3RyY21wKGZvcm1hdCwgIjQyMiIpKSBjb2Rlcl9mb3JtYXRfID0g Zl80MjI7CglpZighc3RyY21wKGZvcm1hdCwgImNpZiIpKSBjb2Rlcl9mb3JtYXRfID0gZl9j aWY7CglpZihjb2Rlcl9mb3JtYXRfID09IC0xKSB7CgkJZnByaW50ZihzdGRlcnIsCgkJCSJ2 aWM6IE1ldGVvckdyYWJiZXI6IHVuc3VwcG9ydGVkIGZvcm1hdDogJXNcbiIsCgkJCWZvcm1h dCk7CgkJYWJvcnQoKTsKCX0KCglkZXZfID0gb3BlbihuYW1lLCBPX1JET05MWSk7CglpZiAo ZGV2XyA9PSAtMSkgewoJCXN0YXR1c18gPSAtMTsKCQlyZXR1cm47Cgl9Cglwb3J0XyA9IE1F VEVPUl9JTlBVVF9ERVYwOwoJdmlkZW9fZm9ybWF0XyA9IE1FVEVPUl9GTVRfQVVUT01PREU7 CglkZWNpbWF0ZV8gPSAyOwoJYmFzZXdpZHRoXyA9IFBBTF9XSURUSCAqIDI7CgliYXNlaGVp Z2h0XyA9IFBBTF9IRUlHSFQgKiAyOwoJCglpbnQgdGVtcCA9ICgoYmFzZXdpZHRoXyAqIGJh c2VoZWlnaHRfICogMiArIDQwOTUpLzQwOTYpKjQwOTY7CglweXV2XyA9ICh1X2ludCopIG1t YXAoKGNhZGRyX3QpMCwgdGVtcCwgUFJPVF9SRUFELCAwLCBkZXZfLCAob2ZmX3QpMCk7Cglp ZihweXV2XyA9PSAodV9pbnQqKS0xKQoJCXB5dXZfID0gMDsKfQoKTWV0ZW9yR3JhYmJlcjo6 fk1ldGVvckdyYWJiZXIoKQp7CglpZiAoZGV2XyAhPSAtMSkgewoJCWNsb3NlKGRldl8pOwoJ fQp9Cgp2b2lkIE1ldGVvckdyYWJiZXI6OnNldHNpemUoKQp7CglzdHJ1Y3QgbWV0ZW9yX2dl b21ldCBnZW9tOwoKCWdlb20ucm93cyA9IChiYXNlaGVpZ2h0XyAvIGRlY2ltYXRlXykgJn4w eGY7CS8qIDB4ZiwgdWdoISAqLwoJZ2VvbS5jb2x1bW5zID0gKGJhc2V3aWR0aF8gLyBkZWNp bWF0ZV8pICAmfjB4ZjsKCWdlb20uZnJhbWVzID0gMTsKCWdlb20ub2Zvcm1hdCA9IE1FVEVP Ul9HRU9fVU5TSUdORUQ7CglnZW9tLm9mb3JtYXQgfD0gTUVURU9SX0dFT19ZVVZfUEFDS0VE OwoJLyoKCSAqIElmIHdlIGNhbiBnZXQgYnkgd2l0aCBvbmx5IHJlYWRpbmcgZXZlbiBmaWVs ZHMsIHRoZW4gYnkgYWxsCgkgKiBtZWFucyBkbyBzby4KCSAqLwoJdW5zaWduZWQgc2hvcnQg c3RhdHVzOwoJaW9jdGwoZGV2XywgTUVURU9SU1RBVFVTLCAmc3RhdHVzKTsKCWlmKHN0YXR1 cyAmIE1FVEVPUl9TVEFUVVNfSENMSykgewkvKiBkbyB3ZSBoYXZlIGEgc291cmNlPyAqLwoJ CQkJCQkvKiBObyBzb3VyY2UsIGFzc3VtZSBudHNjKi8KCQlpZihnZW9tLnJvd3MgPD0gTlRT Q19IRUlHSFQgJiYgZ2VvbS5jb2x1bW5zIDw9IE5UU0NfV0lEVEgpCgkJCWdlb20ub2Zvcm1h dCB8PSBNRVRFT1JfR0VPX0VWRU5fT05MWTsKCX0gZWxzZSB7CgkJaWYoc3RhdHVzICYgTUVU RU9SX1NUQVRVU19GSURUKSB7IC8qIGlzIGl0IHBhbCBvciBudHNjPyAqLwoJCQkJCQkvKiA2 MCBoeiAqLwoJCQlpZihnZW9tLnJvd3M8PU5UU0NfSEVJR0hUICYmIGdlb20uY29sdW1uczw9 TlRTQ19XSURUSCkKCQkJCWdlb20ub2Zvcm1hdCB8PSBNRVRFT1JfR0VPX0VWRU5fT05MWTsK CQl9IGVsc2UgewkJCS8qIDUwIGh6ICovCgkJCWlmKGdlb20ucm93czw9UEFMX0hFSUdIVCAm JiBnZW9tLmNvbHVtbnM8PVBBTF9XSURUSCkKCQkJCWdlb20ub2Zvcm1hdCB8PSBNRVRFT1Jf R0VPX0VWRU5fT05MWTsKCQl9Cgl9CgoJaWYoaW9jdGwoZGV2XywgTUVURU9SU0VUR0VPLCAm Z2VvbSkgPCAwKSAKCQlwZXJyb3IoInZpYzogTUVURVJTRVRHRU86ICIpOwoKCXN3aXRjaChj b2Rlcl9mb3JtYXRfKSB7CgljYXNlIGZfNDIyOgoJCXNldF9zaXplXzQyMihnZW9tLmNvbHVt bnMsIGdlb20ucm93cyk7CgkJYnJlYWs7CgljYXNlIGZfY2lmOgoJY2FzZSBmXzQxMToKCQlz ZXRfc2l6ZV80MTEoZ2VvbS5jb2x1bW5zLCBnZW9tLnJvd3MpOwoJCWJyZWFrOwoJfQoKCWFs bG9jcmVmKCk7CS8qIGFsbG9jYXRlIHJlZmVyZW5jZSBmcmFtZSAqLwp9Cgp2b2lkIE1ldGVv ckdyYWJiZXI6OmZvcm1hdCgpCnsKCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKCWludAlmbXQ7 CgoJaW9jdGwoZGV2XywgTUVURU9SU0lOUFVULCAmcG9ydF8pOwoJLy8JaW9jdGwoZGV2Xywg TUVURU9SU0ZNVCwgJnZpZGVvX2Zvcm1hdF8pOwoJc2xlZXAoMSk7CS8qIHdhaXQgZm9yIHNp Z25hbCBsb2NrLi4uICovCglpb2N0bChkZXZfLCBNRVRFT1JTVEFUVVMsICZzdGF0dXMpOwoK CWlmKHZpZGVvX2Zvcm1hdF8gPT0gTUVURU9SX0ZNVF9BVVRPTU9ERSkgewoJCXN3aXRjaCAo c3RhdHVzICYgKE1FVEVPUl9TVEFUVVNfSENMS3xNRVRFT1JfU1RBVFVTX0ZJRFQpKSB7CgkJ ZGVmYXVsdDoKCQkJZnByaW50ZihzdGRlcnIsCgkJCQkidmljOiBtZXRlb3Igc2VlcyBubyBz aWduYWwoJWQpLXVzaW5nIG50c2MuXG4iLAoJCQkJKHN0YXR1cyZNRVRFT1JfU1RBVFVTX0hD TEspID4gMCApOwoJCQkvKiBmYWxsIHRocm91Z2ggKi8KCQljYXNlIE1FVEVPUl9TVEFUVVNf RklEVDoKCQkJZm10ID0gTUVURU9SX0ZNVF9OVFNDOwoJCQlicmVhazsKCQljYXNlIDA6CgkJ CWZtdD0gTUVURU9SX0ZNVF9QQUw7CgkJCWJyZWFrOwoJCX0KCX0gZWxzZQoJCWZtdCA9IHZp ZGVvX2Zvcm1hdF87CgoJaWYoZm10ID09IE1FVEVPUl9GTVRfTlRTQykgewoJCWJhc2VoZWln aHRfID0gTlRTQ19IRUlHSFQgKiAyOwoJCWJhc2V3aWR0aF8gPSBOVFNDX1dJRFRIICogMjsK CX0gZWxzZSB7IAkvKiBQQUwgYW5kIFNFQ0FNICovCgkJYmFzZWhlaWdodF8gPSBQQUxfSEVJ R0hUICogMjsKCQliYXNld2lkdGhfID0gUEFMX1dJRFRIICogMjsKCX0KCQkKCWlmKGNvZGVy X2Zvcm1hdF8gPT0gZl9jaWYpIHsKCQliYXNlaGVpZ2h0XyA9IENJRl9IRUlHSFQgKiAyOwoJ CWJhc2V3aWR0aF8gPSBDSUZfV0lEVEggKiAyOwoJfQoJc2V0c2l6ZSgpOwp9CgoKdm9pZCBN ZXRlb3JHcmFiYmVyOjpzdGFydCgpCnsKCWZvcm1hdCgpOwoJaW50IGNtZCA9IE1FVEVPUl9D QVBfU0lOR0xFOwoJaW9jdGwoZGV2XywgTUVURU9SQ0FQVFVSLCAoY2hhciopJmNtZCk7CiNp ZmRlZiBGUkFNRV9DTlRTCgljbnRzXy5maWZvX2Vycm9ycyA9IDA7CgljbnRzXy5kbWFfZXJy b3JzID0gMDsKCWNudHNfLmZyYW1lc19jYXB0dXJlZCA9IDA7CgljbnRzXy5ldmVuX2ZpZWxk c19jYXB0dXJlZCA9IDA7CgljbnRzXy5vZGRfZmllbGRzX2NhcHR1cmVkID0gMDsKCWlvY3Rs KGRldl8sIE1FVEVPUlNDT1VOVCwgJmNudHNfKTsKCXN0YXJ0X3RpbWVfID0gZ2V0dGltZW9m ZGF5KCk7CiNlbmRpZgoKCWNtZCA9IE1FVEVPUl9DQVBfQ09OVElOT1VTOwoJaW9jdGwoZGV2 XywgTUVURU9SQ0FQVFVSLCAoY2hhciopJmNtZCk7CglHcmFiYmVyOjpzdGFydCgpOwp9Cgp2 b2lkIE1ldGVvckdyYWJiZXI6OnN0b3AoKQp7CgoJaW50IGNtZCA9IE1FVEVPUl9DQVBfU1RP UF9DT05UOwoJaW9jdGwoZGV2XywgTUVURU9SQ0FQVFVSLCAoY2hhciopJmNtZCk7CiNpZmRl ZiBGUkFNRV9DTlRTCglkb3VibGUgZW5kdGltZSA9IGdldHRpbWVvZmRheSgpIDsKCWlvY3Rs KGRldl8sIE1FVEVPUkdDT1VOVCwgJmNudHNfKTsKCWludCBkaWZmID0gKGludCkoKGVuZHRp bWUtc3RhcnRfdGltZV8pICogMWUtNiArIDAuNSk7CglwcmludGYoImZyYW1lcyA9ICVkLCBl dmVuIGZpZWxkcyA9ICVkLCBvZGQgZmllbGRzID0gJWQsXG5cCmZpZm8gZXJyb3JzID0gJWQs IGRtYSBlcnJvcnMgPSAlZCwgc2Vjb25kcyA9ICVkIiwKCQljbnRzXy5mcmFtZXNfY2FwdHVy ZWQsIGNudHNfLmV2ZW5fZmllbGRzX2NhcHR1cmVkLAoJCWNudHNfLm9kZF9maWVsZHNfY2Fw dHVyZWQsIGNudHNfLmZpZm9fZXJyb3JzLCBjbnRzXy5kbWFfZXJyb3JzLAoJCWRpZmYpOwoJ aWYoZGlmZikKCQlwcmludGYoIixmcHMgPSAlZCIsIGNudHNfLmZyYW1lc19jYXB0dXJlZC9k aWZmKTsKCXByaW50ZigiXG4iKTsKI2VuZGlmCglHcmFiYmVyOjpzdG9wKCk7Cn0KCnZvaWQg TWV0ZW9yR3JhYmJlcjo6ZnBzKGludCBmKQp7Cgl1X3Nob3J0IG1ldF9mcHMgPSAodV9zaG9y dClmOwoJKHZvaWQpaW9jdGwoZGV2XywgTUVURU9SU0ZQUywgJm1ldF9mcHMpOwoKCUdyYWJi ZXI6OmZwcyhmKTsKfQoKaW50IE1ldGVvckdyYWJiZXI6OmNvbW1hbmQoaW50IGFyZ2MsIGNv bnN0IGNoYXIqY29uc3QqIGFyZ3YpCnsKCWlmIChhcmdjID09IDMpIHsKCQlpZiAoc3RyY21w KGFyZ3ZbMV0sICJkZWNpbWF0ZSIpID09IDApIHsKCQkJaW50IGRlYyA9IGF0b2koYXJndlsy XSk7CgkJCVRjbCYgdGNsID0gVGNsOjppbnN0YW5jZSgpOwoJCQlpZiAoZGVjIDw9IDApIHsK CQkJCXRjbC5yZXN1bHRmKCIlczogZGl2aWRlIGJ5IHplcm8iLCBhcmd2WzBdKTsKCQkJCXJl dHVybiAoVENMX0VSUk9SKTsKCQkJfQoJCQlpZiAoZGVjICE9IGRlY2ltYXRlXykgewoJCQkJ ZGVjaW1hdGVfID0gZGVjOwoJCQkJaWYocnVubmluZ18pIHsKCQkJCQlzdG9wKCk7CgkJCQkJ c2V0c2l6ZSgpOwoJCQkJCXN0YXJ0KCk7CgkJCQl9CgkJCX0KCQkJcmV0dXJuIChUQ0xfT0sp OwkKCQl9IGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAicG9ydCIpID09IDApIHsKCQkJaW50 IHAgPSBwb3J0XzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXN0cmNtcChhcmd2WzJd LCAiUkNBIikpIHAgPSBNRVRFT1JfSU5QVVRfREVWMDsKICAgICAgICAgICAgICAgICAgICAg ICAgaWYoIXN0cmNtcChhcmd2WzJdLCAiUG9ydC0xIikpIHAgPSBNRVRFT1JfSU5QVVRfREVW MTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXN0cmNtcChhcmd2WzJdLCAiUG9ydC0y IikpIHAgPSBNRVRFT1JfSU5QVVRfREVWMjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYo IXN0cmNtcChhcmd2WzJdLCAiUG9ydC0zIikpIHAgPSBNRVRFT1JfSU5QVVRfREVWMzsKICAg ICAgICAgICAgICAgICAgICAgICAgaWYoIXN0cmNtcChhcmd2WzJdLCAiUy1WaWRlbyIpKQoJ CQkJcCA9IE1FVEVPUl9JTlBVVF9ERVZfU1ZJREVPOwogICAgICAgICAgICAgICAgICAgICAg ICBpZighc3RyY21wKGFyZ3ZbMl0sICJSR0IiKSkgcCA9IE1FVEVPUl9JTlBVVF9ERVZfUkdC OwoKCQkJaWYgKHAgIT0gcG9ydF8pIHsKCQkJCXBvcnRfID0gcDsKCQkJCWlvY3RsKGRldl8s IE1FVEVPUlNJTlBVVCwgJnBvcnRfKTsKCQkJfQoJCQlyZXR1cm4gKFRDTF9PSyk7CQoJCX0g ZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJmb3JtYXQiKSA9PSAwIHx8CgkJCSAgIHN0cmNt cChhcmd2WzFdLCAidHlwZSIpID09IDApIHsKCQkJaWYgKHN0cmNtcChhcmd2WzJdLCAiYXV0 byIpID09IDApCgkJCQl2aWRlb19mb3JtYXRfID0gTUVURU9SX0ZNVF9BVVRPTU9ERTsKCQkJ ZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMl0sICJwYWwiKSA9PSAwKQoJCQkJdmlkZW9fZm9ybWF0 XyA9IE1FVEVPUl9GTVRfUEFMOwoJCQllbHNlIGlmIChzdHJjbXAoYXJndlsyXSwgInNlY2Ft IikgPT0gMCkKCQkJCXZpZGVvX2Zvcm1hdF8gPSBNRVRFT1JfRk1UX1NFQ0FNOwoJCQllbHNl CgkJCQl2aWRlb19mb3JtYXRfID0gTUVURU9SX0ZNVF9OVFNDOwoJCQlpZiAocnVubmluZ18p CgkJCQlmb3JtYXQoKTsKCQkJcmV0dXJuIChUQ0xfT0spOwkKCQl9IGVsc2UgaWYgKHN0cmNt cChhcmd2WzFdLCAiY29udHJhc3QiKSA9PSAwKSB7CgkJCWNvbnRyYXN0KGF0b2YoYXJndlsy XSkpOwoJCQlyZXR1cm4gKFRDTF9PSyk7CQoJCX0KCX0gZWxzZSBpZiAoYXJnYyA9PSAyKSB7 CgkJaWYgKHN0cmNtcChhcmd2WzFdLCAiZm9ybWF0IikgPT0gMCB8fAoJCQkgICBzdHJjbXAo YXJndlsxXSwgInR5cGUiKSA9PSAwKSB7CgkJCVRjbCYgdGNsID0gVGNsOjppbnN0YW5jZSgp OwoJCQlzd2l0Y2ggKHZpZGVvX2Zvcm1hdF8pIHsKCgkJCWNhc2UgTUVURU9SX0ZNVF9BVVRP TU9ERToKCQkJCXRjbC5yZXN1bHQoImF1dG8iKTsKCQkJCWJyZWFrOwoKCQkJY2FzZSBNRVRF T1JfRk1UX05UU0M6CgkJCQl0Y2wucmVzdWx0KCJudHNjIik7CgkJCQlicmVhazsKCgkJCWNh c2UgTUVURU9SX0ZNVF9QQUw6CgkJCQl0Y2wucmVzdWx0KCJwYWwiKTsKCQkJCWJyZWFrOwoK CQkJY2FzZSBNRVRFT1JfRk1UX1NFQ0FNOgoJCQkJdGNsLnJlc3VsdCgic2VjYW0iKTsKCQkJ CWJyZWFrOwoKCQkJZGVmYXVsdDoKCQkJCXRjbC5yZXN1bHQoIiIpOwoJCQkJYnJlYWs7CgkJ CX0KCQkJcmV0dXJuIChUQ0xfT0spOwoJCQkKCQl9Cgl9CglyZXR1cm4gKEdyYWJiZXI6OmNv bW1hbmQoYXJnYywgYXJndikpOwp9CgppbnQgTWV0ZW9yR3JhYmJlcjo6Y2FwdHVyZSgpCnsK CWlmKHB5dXZfID09IDApIHJldHVybiAwOwoKCXZvbGF0aWxlIHVfaW50KiBweSAgID0gcHl1 dl87Cgl2b2xhdGlsZSB1X2ludCogcHUgICA9ICh1X2ludCAqKSgodV9pbnQpcHkgKyAodV9p bnQpZnJhbWVzaXplXyk7Cgl2b2xhdGlsZSB1X2ludCogcHYgICA9ICh1X2ludCAqKSgodV9p bnQpcHUgKyAoZnJhbWVzaXplXyA+PiAxKSk7Cgl1X2ludCogCQlsdW0gID0gKHVfaW50ICop ZnJhbWVfOwoJdV9pbnQqCQl1b2ZmID0gKHVfaW50ICopKCh1X2ludClsdW0gKyAodV9pbnQp ZnJhbWVzaXplXyk7CglpbnQJCWY0MjIgPSBjb2Rlcl9mb3JtYXRfID09IGZfNDIyOwoJdV9p bnQqCSAJdm9mZiA9ICh1X2ludCAqKSgodV9pbnQpdW9mZiArIAoJCQkJCSAodV9pbnQpKGZy YW1lc2l6ZV8+PihmNDIyPzE6MikpKTsKCWludCAJCW51bWMgPSAoKGJhc2V3aWR0aF8vZGVj aW1hdGVfKSAmfjB4ZikgPj4gMzsKCgljaGFyICogeTsKCWNoYXIgKiB1OwoJY2hhciAqIHY7 CgljaGFyICogZjsKCWludCBjID0gYmFzZXdpZHRoXy9kZWNpbWF0ZV87CglpbnQgciA9IGJh c2VoZWlnaHRfL2RlY2ltYXRlXzsKCWNoYXIgZm9vW2Mqcl07CgljaGFyIGZvbzFbYypyXTsK Cgl5ID0gKGNoYXIgKikgcHl1dl8gKyAxOwoJZiA9ICggY2hhciAqKSBmcmFtZV87Cglmb3Ig KGludCBpID0gMDsgaSA8IGMqcjsgaSsrICkgewoKCSAqZisrID0gICp5Kys7CgkgeSsrOwoK CX0KCgl5ID0gKGNoYXIgKikgcHl1dl8gKyAxOwoJdSA9IChjaGFyICopIHB5dXZfICsgMDsK CXYgPSAoY2hhciAqKSBweXV2XyArIDI7Cglmb3IgKGludCBpID0gMDsgaSA8ICBjKnIvMjsg aSsrICkgewoJICBmb29baV0gID0gKnU7CgkgIGZvbzFbaV0gPSAgKnY7CgkgIHYgKz0gNDsK CSAgdSArPSA0OwoJfQoJdSA9IChjaGFyICopIGZyYW1lXyAgKyBjKnI7Cgl2ID0gKGNoYXIg KikgZnJhbWVfICArIGMqciArICBjKnIvNDsKCWZvciAoaW50IGkgPSAwLGogPSAwOyBpIDwg ci8yOyBpKyspIHsKCSAgYmNvcHkoJmZvb1tqXSwgdSwgYy8yKTsKCSAgYmNvcHkoJmZvbzFb al0sIHYsIGMvMik7CgkgIGogKz0gYzsKCSAgdSArPSBjLzI7CgkgIHYgKz0gYy8yOwoJfQoj aWYgMAoJZm9yIChpbnQgcm93ID0gMDsgcm93IDwgKCgoYmFzZWhlaWdodF8vZGVjaW1hdGVf KSZ+MHhmKSA+PiAxKTsgcm93KyspIHsKCQlmb3IoaW50IGNvbCA9IDA7IGNvbCA8IG51bWM7 IGNvbCsrKSB7CgkJCSpsdW0rKyA9ICpweSsrOwoJCQkqbHVtKysgPSAqcHkrKzsKCQkJKnVv ZmYrKyA9ICpwdSsrOwoJCQkqdm9mZisrID0gKnB2Kys7CgkJfQoJCWZvcihjb2wgPSAwOyBj b2wgPCBudW1jOyBjb2wrKykgeyAgIAogICAgICAgICAgICAgICAgICAgICAgICAqbHVtKysg PSAqcHkrKzsKICAgICAgICAgICAgICAgICAgICAgICAgKmx1bSsrID0gKnB5Kys7CiAgICAg ICAgICAgICAgICAgICAgICAgIGlmKGY0MjIpIHsJLyogb25seSBjb3B5IG9kZCBpbiA0OjI6 MiBmb3JtYXQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdW9mZisrID0g KnB1Kys7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSp2b2ZmKysgPSAqcHYr KzsKCQkJCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgIGlmKCFmNDIyKSB7CS8qIHNraXAgb2RkIGlmIDQ6MToxIG9yIGNpZiBm b3JtYXQgKi8KCQkJcHUgKz0gbnVtYzsKCQkJcHYgKz0gbnVtYzsKCQl9Cgl9CgojZW5kaWYK CglyZXR1cm4gMTsKfQoKaW50IE1ldGVvckdyYWJiZXI6OmdyYWIoKQp7CglpZiAoY2FwdHVy ZSgpID09IDApCgkJcmV0dXJuICgwKTsKCXN1cHByZXNzKGZyYW1lXyk7CglzYXZlYmxrcyhm cmFtZV8pOwoJWXV2RnJhbWUgZihtZWRpYV90cygpLCBmcmFtZV8sIGNydmVjXywgb3V0d18s IG91dGhfKTsKCXJldHVybiAodGFyZ2V0Xy0+Y29uc3VtZSgmZikpOwp9Cg== --===_0_Wed_Jan_22_07:48:28_PST_1997--