From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 144F6428B7 for ; Tue, 5 Jul 2022 14:25:45 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A257668B9EB; Tue, 5 Jul 2022 17:25:35 +0300 (EEST) Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8645B68B7E2 for ; Tue, 5 Jul 2022 17:25:28 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 0DDC12400F5 for ; Tue, 5 Jul 2022 16:25:28 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id bo2xweCqgeYy for ; Tue, 5 Jul 2022 16:25:27 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id EAF60240179 for ; Tue, 5 Jul 2022 16:25:26 +0200 (CEST) Received: by libav.khirnov.net (Postfix, from userid 1000) id 2967A3A061D; Tue, 5 Jul 2022 16:25:24 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 5 Jul 2022 16:25:16 +0200 Message-Id: <20220705142517.4443-1-anton@khirnov.net> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 1/2] lavc: add standalone cached bitstream reader X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: RnJvbTogQWxleGFuZHJhIEjDoWprb3bDoSA8YWxleGFuZHJhLmtoaXJub3ZhQGdtYWlsLmNvbT4K ClRoZSBjYWNoZWQgYml0c3RyZWFtIHJlYWRlciB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEFs ZXhhbmRyYSBIw6Fqa292w6EKZm9yIExpYmF2LCB3aXRoIHNpZ25pZmljYW50IGlucHV0IGZyb20g S29zdHlhIFNoaXNoa292IGFuZCBMdWNhIEJhcmJhdG8uCkl0IHdhcyB0aGVuIGNvbW1pdHRlZCB0 byBGRm1wZWcgaW4gY2EwNzliMDk1NDksIGJ5IG1lcmdpbmcgaXQgd2l0aCB0aGUKaW1wbGVtZW50 YXRpb24gb2YgdGhlIGN1cnJlbnQgYml0c3RyZWFtIHJlYWRlci4KClRoaXMgbWVyZ2UgbWFrZXMg dGhlIGNvZGUgb2YgZ2V0X2JpdHMuaCBzaWduaWZpY2FudGx5IGhhcmRlciB0byByZWFkLApzaW5j ZSBpdCBub3cgY29udGFpbnMgdHdvIGRpZmZlcmVudCBiaXRzdHJlYW0gcmVhZGVycyBpbnRlcmxl YXZlZCB3aXRoCiAjaWZkZWZzLiBBZGRpdGlvbmFsbHksIHRoZSBjb2RlIHdhcyBjb21taXR0ZWQg d2l0aG91dCBwcm9wZXIgYXV0aG9yc2hpcAphdHRyaWJ1dGlvbi4KClRoaXMgY29tbWl0IHJlLWFk ZHMgdGhlIGNhY2hlZCBiaXRzdHJlYW0gcmVhZGVyIGFzIGEgc3RhbmRhbG9uZSBoZWFkZXIsCmFz IGl0IHdhcyBvcmlnaW5hbGx5IGRldmVsb3BlZC4gSXQgd2lsbCBiZSBtYWRlIHVzZWZ1bCBpbiBm b2xsb3dpbmcKY29tbWl0cy4KCkludGVncmF0aW9uIGJ5IEFudG9uIEtoaXJub3YuCgpTaWduZWQt b2ZmLWJ5OiBBbnRvbiBLaGlybm92IDxhbnRvbkBraGlybm92Lm5ldD4KLS0tCkFwcGxpZWQgbW9z dCBjb21tZW50cyBmcm9tIEFuZHJlYXMsIGV4Y2VwdCB0aG9zZSBJIGNvbW1lbnRlZCBvbiBpbiBt eQpyZXBseSB0byB0aGUgcHJldmlvdXMgdGhyZWFkLgoKYml0c191bmdldCgpIGRyb3BwZWQgZm9y IG5vdywgYXMgaXRzIHVzZWZ1bG5lc3MgaXMgdW5kZXIgcXVlc3Rpb24uCi0tLQogbGliYXZjb2Rl Yy9iaXRzdHJlYW0uaCB8IDUyOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogMSBmaWxlIGNoYW5nZWQsIDUyOSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgbGliYXZjb2RlYy9iaXRzdHJlYW0uaAoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYml0c3Ry ZWFtLmggYi9saWJhdmNvZGVjL2JpdHN0cmVhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLjZmZDMyMWRiYTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL2Jp dHN0cmVhbS5oCkBAIC0wLDAgKzEsNTI5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2IEFs ZXhhbmRyYSBIw6Fqa292w6EKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisg KgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8K KworLyoqCisgKiBAZmlsZQorICogYml0c3RyZWFtIHJlYWRlciBBUEkgaGVhZGVyLgorICovCisK KyNpZm5kZWYgQVZDT0RFQ19CSVRTVFJFQU1fSAorI2RlZmluZSBBVkNPREVDX0JJVFNUUkVBTV9I CisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk ZSAibGliYXZ1dGlsL2F2YXNzZXJ0LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2NvbW1vbi5oIgor I2luY2x1ZGUgImxpYmF2dXRpbC9pbnRyZWFkd3JpdGUuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwv bG9nLmgiCisKKyNpbmNsdWRlICJtYXRob3BzLmgiCisjaW5jbHVkZSAidmxjLmgiCisKKyNpZm5k ZWYgVU5DSEVDS0VEX0JJVFNUUkVBTV9SRUFERVIKKyNkZWZpbmUgVU5DSEVDS0VEX0JJVFNUUkVB TV9SRUFERVIgIUNPTkZJR19TQUZFX0JJVFNUUkVBTV9SRUFERVIKKyNlbmRpZgorCit0eXBlZGVm IHN0cnVjdCBCaXRzdHJlYW1Db250ZXh0IHsKKyAgICB1aW50NjRfdCBiaXRzOyAgICAgICAvLyBz dG9yZXMgYml0cyByZWFkIGZyb20gdGhlIGJ1ZmZlcgorICAgIGNvbnN0IHVpbnQ4X3QgKmJ1ZmZl ciwgKmJ1ZmZlcl9lbmQ7CisgICAgY29uc3QgdWludDhfdCAqcHRyOyAgLy8gcG9pbnRlciB0byB0 aGUgcG9zaXRpb24gaW5zaWRlIGEgYnVmZmVyCisgICAgdW5zaWduZWQgYml0c192YWxpZDsgLy8g bnVtYmVyIG9mIGJpdHMgbGVmdCBpbiBiaXRzIGZpZWxkCisgICAgdW5zaWduZWQgc2l6ZV9pbl9i aXRzOworfSBCaXRzdHJlYW1Db250ZXh0OworCisvKioKKyAqIEByZXR1cm4KKyAqIC0gMCBvbiBz dWNjZXNzZnVsIHJlZmlsbAorICogLSBhIG5lZ2F0aXZlIG51bWJlciB3aGVuIGJpdHN0cmVhbSBl bmQgaXMgaGl0CisgKgorICogQWx3YXlzIHN1Y2NlZWRzIHdoZW4gVU5DSEVDS0VEX0JJVFNUUkVB TV9SRUFERVIgaXMgZW5hYmxlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYml0c19wcml2X3Jl ZmlsbF82NChCaXRzdHJlYW1Db250ZXh0ICpiYykKK3sKKyNpZiAhVU5DSEVDS0VEX0JJVFNUUkVB TV9SRUFERVIKKyAgICBpZiAoYmMtPnB0ciA+PSBiYy0+YnVmZmVyX2VuZCkKKyAgICAgICAgcmV0 dXJuIC0xOworI2VuZGlmCisKKyNpZmRlZiBCSVRTVFJFQU1fUkVBREVSX0xFCisgICAgYmMtPmJp dHMgICAgICAgPSBBVl9STDY0KGJjLT5wdHIpOworI2Vsc2UKKyAgICBiYy0+Yml0cyAgICAgICA9 IEFWX1JCNjQoYmMtPnB0cik7CisjZW5kaWYKKyAgICBiYy0+cHRyICAgICAgICs9IDg7CisgICAg YmMtPmJpdHNfdmFsaWQgPSA2NDsKKworICAgIHJldHVybiAwOworfQorCisvKioKKyAqIEByZXR1 cm4KKyAqIC0gMCBvbiBzdWNjZXNzZnVsIHJlZmlsbAorICogLSBhIG5lZ2F0aXZlIG51bWJlciB3 aGVuIGJpdHN0cmVhbSBlbmQgaXMgaGl0CisgKgorICogQWx3YXlzIHN1Y2NlZWRzIHdoZW4gVU5D SEVDS0VEX0JJVFNUUkVBTV9SRUFERVIgaXMgZW5hYmxlZC4KKyAqLworc3RhdGljIGlubGluZSBp bnQgYml0c19wcml2X3JlZmlsbF8zMihCaXRzdHJlYW1Db250ZXh0ICpiYykKK3sKKyNpZiAhVU5D SEVDS0VEX0JJVFNUUkVBTV9SRUFERVIKKyAgICBpZiAoYmMtPnB0ciA+PSBiYy0+YnVmZmVyX2Vu ZCkKKyAgICAgICAgcmV0dXJuIC0xOworI2VuZGlmCisKKyNpZmRlZiBCSVRTVFJFQU1fUkVBREVS X0xFCisgICAgYmMtPmJpdHMgICAgICB8PSAodWludDY0X3QpQVZfUkwzMihiYy0+cHRyKSA8PCBi Yy0+Yml0c192YWxpZDsKKyNlbHNlCisgICAgYmMtPmJpdHMgICAgICB8PSAodWludDY0X3QpQVZf UkIzMihiYy0+cHRyKSA8PCAoMzIgLSBiYy0+Yml0c192YWxpZCk7CisjZW5kaWYKKyAgICBiYy0+ cHRyICAgICAgICArPSA0OworICAgIGJjLT5iaXRzX3ZhbGlkICs9IDMyOworCisgICAgcmV0dXJu IDA7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZSBCaXRzdHJlYW1Db250ZXh0LgorICogQHBhcmFt IGJ1ZmZlciBiaXRzdHJlYW0gYnVmZmVyLCBtdXN0IGJlIEFWX0lOUFVUX0JVRkZFUl9QQURESU5H X1NJWkUgYnl0ZXMKKyAqICAgICAgICBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIHJlYWQgYml0cyBi ZWNhdXNlIHNvbWUgb3B0aW1pemVkIGJpdHN0cmVhbQorICogICAgICAgIHJlYWRlcnMgcmVhZCAz MiBvciA2NCBiaXRzIGF0IG9uY2UgYW5kIGNvdWxkIHJlYWQgb3ZlciB0aGUgZW5kCisgKiBAcGFy YW0gYml0X3NpemUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpbiBiaXRzCisgKiBAcmV0dXJuIDAg b24gc3VjY2VzcywgQVZFUlJPUl9JTlZBTElEREFUQSBpZiB0aGUgYnVmZmVyX3NpemUgd291bGQg b3ZlcmZsb3cuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJpdHNfaW5pdChCaXRzdHJlYW1Db250 ZXh0ICpiYywgY29uc3QgdWludDhfdCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBiaXRfc2l6ZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgYnVmZmVyX3Np emU7CisKKyAgICBpZiAoYml0X3NpemUgPiBJTlRfTUFYIC0gNyB8fCAhYnVmZmVyKSB7CisgICAg ICAgIGJjLT5idWZmZXIgICAgID0gTlVMTDsKKyAgICAgICAgYmMtPnB0ciAgICAgICAgPSBOVUxM OworICAgICAgICBiYy0+Yml0c192YWxpZCA9IDA7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOworICAgIH0KKworICAgIGJ1ZmZlcl9zaXplID0gKGJpdF9zaXplICsgNykgPj4g MzsKKworICAgIGJjLT5idWZmZXIgICAgICAgPSBidWZmZXI7CisgICAgYmMtPmJ1ZmZlcl9lbmQg ICA9IGJ1ZmZlciArIGJ1ZmZlcl9zaXplOworICAgIGJjLT5wdHIgICAgICAgICAgPSBiYy0+YnVm ZmVyOworICAgIGJjLT5zaXplX2luX2JpdHMgPSBiaXRfc2l6ZTsKKyAgICBiYy0+Yml0c192YWxp ZCAgID0gMDsKKyAgICBiYy0+Yml0cyAgICAgICAgID0gMDsKKworICAgIGJpdHNfcHJpdl9yZWZp bGxfNjQoYmMpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZSBCaXRz dHJlYW1Db250ZXh0LgorICogQHBhcmFtIGJ1ZmZlciBiaXRzdHJlYW0gYnVmZmVyLCBtdXN0IGJl IEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUgYnl0ZXMKKyAqICAgICAgICBsYXJnZXIgdGhh biB0aGUgYWN0dWFsIHJlYWQgYml0cyBiZWNhdXNlIHNvbWUgb3B0aW1pemVkIGJpdHN0cmVhbQor ICogICAgICAgIHJlYWRlcnMgcmVhZCAzMiBvciA2NCBiaXRzIGF0IG9uY2UgYW5kIGNvdWxkIHJl YWQgb3ZlciB0aGUgZW5kCisgKiBAcGFyYW0gYnl0ZV9zaXplIHRoZSBzaXplIG9mIHRoZSBidWZm ZXIgaW4gYnl0ZXMKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBBVkVSUk9SX0lOVkFMSUREQVRB IGlmIHRoZSBidWZmZXJfc2l6ZSB3b3VsZCBvdmVyZmxvdworICovCitzdGF0aWMgaW5saW5lIGlu dCBiaXRzX2luaXQ4KEJpdHN0cmVhbUNvbnRleHQgKmJjLCBjb25zdCB1aW50OF90ICpidWZmZXIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlX3NpemUpCit7 CisgICAgaWYgKGJ5dGVfc2l6ZSA+IElOVF9NQVggLyA4KQorICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICByZXR1cm4gYml0c19pbml0KGJjLCBidWZmZXIsIGJ5dGVfc2l6 ZSAqIDgpOworfQorCisvKioKKyAqIFJldHVybiBudW1iZXIgb2YgYml0cyBhbHJlYWR5IHJlYWQu CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJpdHNfdGVsbChjb25zdCBCaXRzdHJlYW1Db250ZXh0 ICpiYykKK3sKKyAgICByZXR1cm4gKGJjLT5wdHIgLSBiYy0+YnVmZmVyKSAqIDggLSBiYy0+Yml0 c192YWxpZDsKK30KKworLyoqCisgKiBSZXR1cm4gYnVmZmVyIHNpemUgaW4gYml0cy4KKyAqLwor c3RhdGljIGlubGluZSBpbnQgYml0c19zaXplKGNvbnN0IEJpdHN0cmVhbUNvbnRleHQgKmJjKQor eworICAgIHJldHVybiBiYy0+c2l6ZV9pbl9iaXRzOworfQorCisvKioKKyAqIFJldHVybiB0aGUg bnVtYmVyIG9mIHRoZSBiaXRzIGxlZnQgaW4gYSBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUg aW50IGJpdHNfbGVmdChjb25zdCBCaXRzdHJlYW1Db250ZXh0ICpiYykKK3sKKyAgICByZXR1cm4g KGJjLT5idWZmZXIgLSBiYy0+cHRyKSAqIDggKyBiYy0+c2l6ZV9pbl9iaXRzICsgYmMtPmJpdHNf dmFsaWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgYml0c19wcml2X3ZhbF9zaG93KEJp dHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgICBhdl9hc3NlcnQyKG4g PiAwICYmIG4gPD0gNjQpOworCisjaWZkZWYgQklUU1RSRUFNX1JFQURFUl9MRQorICAgIHJldHVy biBiYy0+Yml0cyAmIChVSU5UNjRfTUFYID4+ICg2NCAtIG4pKTsKKyNlbHNlCisgICAgcmV0dXJu IGJjLT5iaXRzID4+ICg2NCAtIG4pOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBi aXRzX3ByaXZfc2tpcF9yZW1haW5pbmcoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGlu dCBuKQoreworI2lmZGVmIEJJVFNUUkVBTV9SRUFERVJfTEUKKyAgICBiYy0+Yml0cyA+Pj0gbjsK KyNlbHNlCisgICAgYmMtPmJpdHMgPDw9IG47CisjZW5kaWYKKyAgICBiYy0+Yml0c192YWxpZCAt PSBuOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGJpdHNfcHJpdl92YWxfZ2V0KEJpdHN0 cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgICB1aW50NjRfdCByZXQ7CisK KyAgICBhdl9hc3NlcnQyKG4gPiAwICYmIG4gPCA2NCk7CisKKyAgICByZXQgPSBiaXRzX3ByaXZf dmFsX3Nob3coYmMsIG4pOworICAgIGJpdHNfcHJpdl9za2lwX3JlbWFpbmluZyhiYywgbik7CisK KyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIFJldHVybiBvbmUgYml0IGZyb20gdGhlIGJ1 ZmZlci4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYml0c19yZWFkX2JpdChCaXRz dHJlYW1Db250ZXh0ICpiYykKK3sKKyAgICBpZiAoIWJjLT5iaXRzX3ZhbGlkICYmIGJpdHNfcHJp dl9yZWZpbGxfNjQoYmMpIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYml0 c19wcml2X3ZhbF9nZXQoYmMsIDEpOworfQorCisvKioKKyAqIFJldHVybiBuIGJpdHMgZnJvbSB0 aGUgYnVmZmVyLCBuIGhhcyB0byBiZSBpbiB0aGUgMS0zMiByYW5nZS4KKyAqIE1heSBiZSBmYXN0 ZXIgdGhhbiBiaXRzX3JlYWQoKSB3aGVuIG4gaXMgbm90IGEgY29tcGlsZS10aW1lIGNvbnN0YW50 IGFuZCBpcworICoga25vd24gdG8gYmUgbm9uLXplcm87CisgKi8KK3N0YXRpYyBpbmxpbmUgdWlu dDMyX3QgYml0c19yZWFkX256KEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikK K3sKKyAgICBhdl9hc3NlcnQyKG4gPiAwICYmIG4gPD0gMzIpOworCisgICAgaWYgKG4gPiBiYy0+ Yml0c192YWxpZCkgeworICAgICAgICBpZiAoYml0c19wcml2X3JlZmlsbF8zMihiYykgPCAwKQor ICAgICAgICAgICAgYmMtPmJpdHNfdmFsaWQgPSBuOworICAgIH0KKworICAgIHJldHVybiBiaXRz X3ByaXZfdmFsX2dldChiYywgbik7Cit9CisKKy8qKgorICogUmV0dXJuIG4gYml0cyBmcm9tIHRo ZSBidWZmZXIsIG4gaGFzIHRvIGJlIGluIHRoZSAwLTMyICByYW5nZS4KKyAqLworc3RhdGljIGlu bGluZSB1aW50MzJfdCBiaXRzX3JlYWQoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGlu dCBuKQoreworICAgIGF2X2Fzc2VydDIobiA8PSAzMik7CisKKyAgICBpZiAoIW4pCisgICAgICAg IHJldHVybiAwOworCisgICAgcmV0dXJuIGJpdHNfcmVhZF9ueihiYywgbik7Cit9CisKKy8qKgor ICogUmV0dXJuIG4gYml0cyBmcm9tIHRoZSBidWZmZXIsIG4gaGFzIHRvIGJlIGluIHRoZSAwLTYz IHJhbmdlLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGJpdHNfcmVhZF82MyhCaXRzdHJl YW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCit7CisgICAgdWludDY0X3QgcmV0ID0gMDsK KyAgICB1bnNpZ25lZCBsZWZ0ID0gMDsKKworICAgIGF2X2Fzc2VydDIobiA8PSA2Myk7CisKKyAg ICBpZiAoIW4pCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG4gPiBiYy0+Yml0c192YWxp ZCkgeworICAgICAgICBsZWZ0ID0gYmMtPmJpdHNfdmFsaWQ7CisgICAgICAgIG4gICAtPSBsZWZ0 OworCisgICAgICAgIGlmIChsZWZ0KQorICAgICAgICAgICAgcmV0ID0gYml0c19wcml2X3ZhbF9n ZXQoYmMsIGxlZnQpOworCisgICAgICAgIGlmIChiaXRzX3ByaXZfcmVmaWxsXzY0KGJjKSA8IDAp CisgICAgICAgICAgICBiYy0+Yml0c192YWxpZCA9IG47CisKKyAgICB9CisKKyNpZmRlZiBCSVRT VFJFQU1fUkVBREVSX0xFCisgICAgcmV0ID0gYml0c19wcml2X3ZhbF9nZXQoYmMsIG4pIDw8IGxl ZnQgfCByZXQ7CisjZWxzZQorICAgIHJldCA9IGJpdHNfcHJpdl92YWxfZ2V0KGJjLCBuKSB8IHJl dCA8PCBuOworI2VuZGlmCisKKyAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIFJldHVybiBu IGJpdHMgZnJvbSB0aGUgYnVmZmVyLCBuIGhhcyB0byBiZSBpbiB0aGUgMC02NCByYW5nZS4KKyAq Lworc3RhdGljIGlubGluZSB1aW50NjRfdCBiaXRzX3JlYWRfNjQoQml0c3RyZWFtQ29udGV4dCAq YmMsIHVuc2lnbmVkIGludCBuKQoreworICAgIGF2X2Fzc2VydDIobiA8PSA2NCk7CisKKyAgICBp ZiAobiA9PSA2NCkgeworICAgICAgICB1aW50NjRfdCByZXQgPSBiaXRzX3JlYWRfNjMoYmMsIDYz KTsKKyNpZmRlZiBCSVRTVFJFQU1fUkVBREVSX0xFCisgICAgICAgIHJldHVybiByZXQgfCAoKHVp bnQ2NF90KWJpdHNfcmVhZF9iaXQoYmMpIDw8IDYzKTsKKyNlbHNlCisgICAgICAgIHJldHVybiAo cmV0IDw8IDEpIHwgKHVpbnQ2NF90KWJpdHNfcmVhZF9iaXQoYmMpOworI2VuZGlmCisgICAgfQor ICAgIHJldHVybiBiaXRzX3JlYWRfNjMoYmMsIG4pOworfQorCisvKioKKyAqIFJldHVybiBuIGJp dHMgZnJvbSB0aGUgYnVmZmVyIGFzIGEgc2lnbmVkIGludGVnZXIuCisgKiBuIGhhcyB0byBiZSBp biB0aGUgMC0zMiByYW5nZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQzMl90IGJpdHNfcmVhZF9z aWduZWQoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGludCBuKQoreworICAgIHJldHVy biBzaWduX2V4dGVuZChiaXRzX3JlYWQoYmMsIG4pLCBuKTsKK30KKworLyoqCisgKiBSZXR1cm4g biBiaXRzIGZyb20gdGhlIGJ1ZmZlciBidXQgZG8gbm90IGNoYW5nZSB0aGUgYnVmZmVyIHN0YXRl LgorICogbiBoYXMgdG8gYmUgaW4gdGhlIDEtMzIgcmFuZ2UuIE1heQorICovCitzdGF0aWMgaW5s aW5lIHVpbnQzMl90IGJpdHNfcGVla19ueihCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQg aW50IG4pCit7CisgICAgYXZfYXNzZXJ0MihuID4gMCAmJiBuIDw9IDMyKTsKKworICAgIGlmIChu ID4gYmMtPmJpdHNfdmFsaWQpCisgICAgICAgIGJpdHNfcHJpdl9yZWZpbGxfMzIoYmMpOworCisg ICAgcmV0dXJuIGJpdHNfcHJpdl92YWxfc2hvdyhiYywgbik7Cit9CisKKy8qKgorICogUmV0dXJu IG4gYml0cyBmcm9tIHRoZSBidWZmZXIgYnV0IGRvIG5vdCBjaGFuZ2UgdGhlIGJ1ZmZlciBzdGF0 ZS4KKyAqIG4gaGFzIHRvIGJlIGluIHRoZSAwLTMyIHJhbmdlLgorICovCitzdGF0aWMgaW5saW5l IHVpbnQzMl90IGJpdHNfcGVlayhCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4p Cit7CisgICAgYXZfYXNzZXJ0MihuIDw9IDMyKTsKKworICAgIGlmICghbikKKyAgICAgICAgcmV0 dXJuIDA7CisKKyAgICByZXR1cm4gYml0c19wZWVrX256KGJjLCBuKTsKK30KKworLyoqCisgKiBS ZXR1cm4gbiBiaXRzIGZyb20gdGhlIGJ1ZmZlciBhcyBhIHNpZ25lZCBpbnRlZ2VyLAorICogZG8g bm90IGNoYW5nZSB0aGUgYnVmZmVyIHN0YXRlLgorICogbiBoYXMgdG8gYmUgaW4gdGhlIDAtMzIg cmFuZ2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJpdHNfcGVla19zaWduZWQoQml0c3RyZWFt Q29udGV4dCAqYmMsIHVuc2lnbmVkIGludCBuKQoreworICAgIHJldHVybiBzaWduX2V4dGVuZChi aXRzX3BlZWsoYmMsIG4pLCBuKTsKK30KKworLyoqCisgKiBTa2lwIG4gYml0cyBpbiB0aGUgYnVm ZmVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYml0c19za2lwKEJpdHN0cmVhbUNvbnRleHQg KmJjLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgICBpZiAobiA8IGJjLT5iaXRzX3ZhbGlkKQorICAg ICAgICBiaXRzX3ByaXZfc2tpcF9yZW1haW5pbmcoYmMsIG4pOworICAgIGVsc2UgeworICAgICAg ICBuIC09IGJjLT5iaXRzX3ZhbGlkOworICAgICAgICBiYy0+Yml0cyAgICAgICA9IDA7CisgICAg ICAgIGJjLT5iaXRzX3ZhbGlkID0gMDsKKworICAgICAgICBpZiAobiA+PSA2NCkgeworICAgICAg ICAgICAgdW5zaWduZWQgaW50IHNraXAgPSBuIC8gODsKKworICAgICAgICAgICAgbiAtPSBza2lw ICogODsKKyAgICAgICAgICAgIGJjLT5wdHIgKz0gc2tpcDsKKyAgICAgICAgfQorICAgICAgICBi aXRzX3ByaXZfcmVmaWxsXzY0KGJjKTsKKyAgICAgICAgaWYgKG4pCisgICAgICAgICAgICBiaXRz X3ByaXZfc2tpcF9yZW1haW5pbmcoYmMsIG4pOworICAgIH0KK30KKworLyoqCisgKiBTZWVrIHRv IHRoZSBnaXZlbiBiaXQgcG9zaXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBiaXRzX3Nl ZWsoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIHBvcykKK3sKKyAgICBiYy0+cHRyICAg ICAgICA9IGJjLT5idWZmZXI7CisgICAgYmMtPmJpdHMgICAgICAgPSAwOworICAgIGJjLT5iaXRz X3ZhbGlkID0gMDsKKworICAgIGJpdHNfc2tpcChiYywgcG9zKTsKK30KKworLyoqCisgKiBTa2lw IGJpdHMgdG8gYSBieXRlIGJvdW5kYXJ5LgorICovCitzdGF0aWMgaW5saW5lIGNvbnN0IHVpbnQ4 X3QgKmJpdHNfYWxpZ24oQml0c3RyZWFtQ29udGV4dCAqYmMpCit7CisgICAgdW5zaWduZWQgaW50 IG4gPSAtYml0c190ZWxsKGJjKSAmIDc7CisgICAgaWYgKG4pCisgICAgICAgIGJpdHNfc2tpcChi Yywgbik7CisgICAgcmV0dXJuIGJjLT5idWZmZXIgKyAoYml0c190ZWxsKGJjKSA+PiAzKTsKK30K KworLyoqCisgKiBSZWFkIE1QRUctMSBkYy1zdHlsZSBWTEMgKHNpZ24gYml0ICsgbWFudGlzc2Eg d2l0aCBubyBNU0IpLgorICogSWYgTVNCIG5vdCBzZXQgaXQgaXMgbmVnYXRpdmUuCisgKiBAcGFy YW0gbiBsZW5ndGggaW4gYml0cworICovCitzdGF0aWMgaW5saW5lIGludCBiaXRzX3JlYWRfeGJp dHMoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGludCBuKQoreworICAgIGludDMyX3Qg Y2FjaGUgPSBiaXRzX3BlZWsoYmMsIDMyKTsKKyAgICBpbnQgc2lnbiA9IH5jYWNoZSA+PiAzMTsK KyAgICBiaXRzX3ByaXZfc2tpcF9yZW1haW5pbmcoYmMsIG4pOworCisgICAgcmV0dXJuICgoKCh1 aW50MzJfdCkoc2lnbiBeIGNhY2hlKSkgPj4gKDMyIC0gbikpIF4gc2lnbikgLSBzaWduOworfQor CisvKioKKyAqIFJldHVybiBkZWNvZGVkIHRydW5jYXRlZCB1bmFyeSBjb2RlIGZvciB0aGUgdmFs dWVzIDAsIDEsIDIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJpdHNfZGVjb2RlMDEyKEJpdHN0 cmVhbUNvbnRleHQgKmJjKQoreworICAgIGlmICghYml0c19yZWFkX2JpdChiYykpCisgICAgICAg IHJldHVybiAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGJpdHNfcmVhZF9iaXQoYmMpICsg MTsKK30KKworLyoqCisgKiBSZXR1cm4gZGVjb2RlZCB0cnVuY2F0ZWQgdW5hcnkgY29kZSBmb3Ig dGhlIHZhbHVlcyAyLCAxLCAwLgorICovCitzdGF0aWMgaW5saW5lIGludCBiaXRzX2RlY29kZTIx MChCaXRzdHJlYW1Db250ZXh0ICpiYykKK3sKKyAgICBpZiAoYml0c19yZWFkX2JpdChiYykpCisg ICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDIgLSBiaXRzX3JlYWRf Yml0KGJjKTsKK30KKworLyogUmVhZCBzaWduIGJpdCBhbmQgZmxpcCB0aGUgc2lnbiBvZiB0aGUg cHJvdmlkZWQgdmFsdWUgYWNjb3JkaW5nbHkuICovCitzdGF0aWMgaW5saW5lIGludCBiaXRzX2Fw cGx5X3NpZ24oQml0c3RyZWFtQ29udGV4dCAqYmMsIGludCB2YWwpCit7CisgICAgaW50IHNpZ24g PSBiaXRzX3JlYWRfc2lnbmVkKGJjLCAxKTsKKyAgICByZXR1cm4gKHZhbCBeIHNpZ24pIC0gc2ln bjsKK30KKworc3RhdGljIGlubGluZSBpbnQgYml0c19za2lwXzFzdG9wXzhkYXRhKEJpdHN0cmVh bUNvbnRleHQgKnMpCit7CisgICAgaWYgKGJpdHNfbGVmdChzKSA8PSAwKQorICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgIHdoaWxlIChiaXRzX3JlYWRfYml0KHMpKSB7 CisgICAgICAgIGJpdHNfc2tpcChzLCA4KTsKKyAgICAgICAgaWYgKGJpdHNfbGVmdChzKSA8PSAw KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorCisgICAg cmV0dXJuIDA7Cit9CisKKy8qKgorICogUmV0dXJuIHRoZSBMVVQgZWxlbWVudCBmb3IgdGhlIGdp dmVuIGJpdHN0cmVhbSBjb25maWd1cmF0aW9uLgorICovCitzdGF0aWMgaW5saW5lIGludCBiaXRz X3ByaXZfc2V0X2lkeChCaXRzdHJlYW1Db250ZXh0ICpiYywgaW50IGNvZGUsIGludCAqbiwgaW50 ICpuYl9iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVkxD RWxlbSAqdGFibGUpCit7CisgICAgdW5zaWduZWQgaWR4OworCisgICAgKm5iX2JpdHMgPSAtKm47 CisgICAgaWR4ID0gYml0c19wZWVrKGJjLCAqbmJfYml0cykgKyBjb2RlOworICAgICpuID0gdGFi bGVbaWR4XS5sZW47CisKKyAgICByZXR1cm4gdGFibGVbaWR4XS5zeW07Cit9CisKKy8qKgorICog UGFyc2UgYSB2bGMgY29kZS4KKyAqIEBwYXJhbSBiaXRzIGlzIHRoZSBudW1iZXIgb2YgYml0cyB3 aGljaCB3aWxsIGJlIHJlYWQgYXQgb25jZSwgbXVzdCBiZQorICogICAgICAgICAgICAgaWRlbnRp Y2FsIHRvIG5iX2JpdHMgaW4gaW5pdF92bGMoKQorICogQHBhcmFtIG1heF9kZXB0aCBpcyB0aGUg bnVtYmVyIG9mIHRpbWVzIGJpdHMgYml0cyBtdXN0IGJlIHJlYWQgdG8gY29tcGxldGVseQorICog ICAgICAgICAgICAgICAgICByZWFkIHRoZSBsb25nZXN0IHZsYyBjb2RlCisgKiAgICAgICAgICAg ICAgICAgID0gKG1heF92bGNfbGVuZ3RoICsgYml0cyAtIDEpIC8gYml0cworICogSWYgdGhlIHZs YyBjb2RlIGlzIGludmFsaWQgYW5kIG1heF9kZXB0aD0xLCB0aGVuIG5vIGJpdHMgd2lsbCBiZSBy ZW1vdmVkLgorICogSWYgdGhlIHZsYyBjb2RlIGlzIGludmFsaWQgYW5kIG1heF9kZXB0aD4xLCB0 aGVuIHRoZSBudW1iZXIgb2YgYml0cyByZW1vdmVkCisgKiBpcyB1bmRlZmluZWQuCisgKi8KK3N0 YXRpYyBpbmxpbmUgaW50IGJpdHNfcmVhZF92bGMoQml0c3RyZWFtQ29udGV4dCAqYmMsIGNvbnN0 IFZMQ0VsZW0gKnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0 cywgaW50IG1heF9kZXB0aCkKK3sKKyAgICBpbnQgbmJfYml0czsKKyAgICB1bnNpZ25lZCBpZHgg PSBiaXRzX3BlZWsoYmMsIGJpdHMpOworICAgIGludCBjb2RlICAgICA9IHRhYmxlW2lkeF0uc3lt OworICAgIGludCBuICAgICAgICA9IHRhYmxlW2lkeF0ubGVuOworCisgICAgaWYgKG1heF9kZXB0 aCA+IDEgJiYgbiA8IDApIHsKKyAgICAgICAgYml0c19wcml2X3NraXBfcmVtYWluaW5nKGJjLCBi aXRzKTsKKyAgICAgICAgY29kZSA9IGJpdHNfcHJpdl9zZXRfaWR4KGJjLCBjb2RlLCAmbiwgJm5i X2JpdHMsIHRhYmxlKTsKKyAgICAgICAgaWYgKG1heF9kZXB0aCA+IDIgJiYgbiA8IDApIHsKKyAg ICAgICAgICAgIGJpdHNfcHJpdl9za2lwX3JlbWFpbmluZyhiYywgbmJfYml0cyk7CisgICAgICAg ICAgICBjb2RlID0gYml0c19wcml2X3NldF9pZHgoYmMsIGNvZGUsICZuLCAmbmJfYml0cywgdGFi bGUpOworICAgICAgICB9CisgICAgfQorICAgIGJpdHNfcHJpdl9za2lwX3JlbWFpbmluZyhiYywg bik7CisKKyAgICByZXR1cm4gY29kZTsKK30KKworI2RlZmluZSBCSVRTX1JMX1ZMQyhsZXZlbCwg cnVuLCBiYywgdGFibGUsIGJpdHMsIG1heF9kZXB0aCkgXAorICAgIGRvIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpbnQgbiwg bmJfYml0czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1 bnNpZ25lZCBpbnQgaW5kZXggPSBiaXRzX3BlZWsoYmMsIGJpdHMpOyAgICAgICAgICAgXAorICAg ICAgICBsZXZlbCA9IHRhYmxlW2luZGV4XS5sZXZlbDsgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICBuICAgICA9IHRhYmxlW2luZGV4XS5sZW47ICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICBpZiAobWF4X2RlcHRoID4gMSAmJiBuIDwgMCkgeyAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYml0c19za2lwKGJjLCBiaXRzKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgbmJfYml0cyA9IC1u OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg aW5kZXggPSBiaXRzX3BlZWsoYmMsIG5iX2JpdHMpICsgbGV2ZWw7ICAgICAgICAgXAorICAgICAg ICAgICAgbGV2ZWwgPSB0YWJsZVtpbmRleF0ubGV2ZWw7ICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICAgICAgbiAgICAgPSB0YWJsZVtpbmRleF0ubGVuOyAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICAgICAgaWYgKG1heF9kZXB0aCA+IDIgJiYgbiA8IDApIHsgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJpdHNfc2tpcChiYywgbmJfYml0cyk7ICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG5iX2JpdHMgPSAtbjsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGluZGV4ID0gYml0 c19wZWVrKGJjLCBuYl9iaXRzKSArIGxldmVsOyAgICAgXAorICAgICAgICAgICAgICAgIGxldmVs ID0gdGFibGVbaW5kZXhdLmxldmVsOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg IG4gICAgID0gdGFibGVbaW5kZXhdLmxlbjsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICBydW4gPSB0YWJsZVtpbmRleF0ucnVuOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgICBiaXRzX3NraXAoYmMsIG4pOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBBVkNPREVDX0JJVFNU UkVBTV9IICovCi0tIAoyLjM0LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBl Zy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpU byB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJl cXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K