From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Kocialkowski Subject: [PATCH i-g-t v2 1/3] lib: Add audio library with dedicated helpers Date: Mon, 21 Aug 2017 18:27:18 +0300 Message-ID: <20170821152720.5925-2-paul.kocialkowski@linux.intel.com> References: <20170821152720.5925-1-paul.kocialkowski@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1FC1A6E283 for ; Mon, 21 Aug 2017 15:27:26 +0000 (UTC) In-Reply-To: <20170821152720.5925-1-paul.kocialkowski@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhpcyBpbnRyb2R1Y2VzIGFuIGF1ZGlvIGxpYnJhcnksIHdpdGggZGVkaWNhdGVkIGhlbHBlcnMg Zm9yIGJvdGgKZ2VuZXJhdGluZyBzaWduYWxzIGFuZCBkZXRlY3RpbmcgcGVhayBmcmVxdWVuY2ll cyBpbiBhIHNpZ25hbC4KClRoaXMgbGlicmFyeSBwYXZlcyB0aGUgd2F5IGZvciB0ZXN0aW5nIGF1 ZGlvIGdvaW5nIHRocm91Z2ggZGlzcGxheQpjb25uZWN0b3JzLCBzdWNoIGFzIEhETUkuCgpTaWdu ZWQtb2ZmLWJ5OiBQYXVsIEtvY2lhbGtvd3NraSA8cGF1bC5rb2NpYWxrb3dza2lAbGludXguaW50 ZWwuY29tPgotLS0KIC4uLi9pbnRlbC1ncHUtdG9vbHMvaW50ZWwtZ3B1LXRvb2xzLWRvY3MueG1s ICAgICAgIHwgICAxICsKIGxpYi9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAyICsKIGxpYi9pZ3QuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAxICsKIGxpYi9pZ3RfYXVkaW8uYyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgMzI2ICsrKysrKysrKysrKysrKysrKysrKwogbGliL2lndF9hdWRp by5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDcgKysrCiA1IGZpbGVz IGNoYW5nZWQsIDM3NyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9h dWRpby5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9hdWRpby5oCgpkaWZmIC0tZ2l0IGEv ZG9jcy9yZWZlcmVuY2UvaW50ZWwtZ3B1LXRvb2xzL2ludGVsLWdwdS10b29scy1kb2NzLnhtbCBi L2RvY3MvcmVmZXJlbmNlL2ludGVsLWdwdS10b29scy9pbnRlbC1ncHUtdG9vbHMtZG9jcy54bWwK aW5kZXggZjg4YWZkMmEuLmM3NzE1OWNmIDEwMDY0NAotLS0gYS9kb2NzL3JlZmVyZW5jZS9pbnRl bC1ncHUtdG9vbHMvaW50ZWwtZ3B1LXRvb2xzLWRvY3MueG1sCisrKyBiL2RvY3MvcmVmZXJlbmNl L2ludGVsLWdwdS10b29scy9pbnRlbC1ncHUtdG9vbHMtZG9jcy54bWwKQEAgLTE2LDYgKzE2LDcg QEAKICAgPGNoYXB0ZXI+CiAgICAgPHRpdGxlPkFQSSBSZWZlcmVuY2U8L3RpdGxlPgogICAgIDx4 aTppbmNsdWRlIGhyZWY9InhtbC9kcm10ZXN0LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9 InhtbC9pZ3RfYXVkaW8ueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9hdXgu eG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9jaGFtZWxpdW0ueG1sIi8+CiAg ICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9jb3JlLnhtbCIvPgpkaWZmIC0tZ2l0IGEvbGli L01ha2VmaWxlLmFtIGIvbGliL01ha2VmaWxlLmFtCmluZGV4IDljOTMyZDZmLi41ZWEwODMxNCAx MDA2NDQKLS0tIGEvbGliL01ha2VmaWxlLmFtCisrKyBiL2xpYi9NYWtlZmlsZS5hbQpAQCAtMzMs NiArMzMsOCBAQCBpZiBIQVZFX0dTTAogbGliX3NvdXJjZV9saXN0ICs9CQlcCiAJaWd0X2ZyYW1l LmMJCVwKIAlpZ3RfZnJhbWUuaAkJXAorCWlndF9hdWRpby5jCQlcCisJaWd0X2F1ZGlvLmgJCVwK IAkkKE5VTEwpCiBlbmRpZgogCmRpZmYgLS1naXQgYS9saWIvaWd0LmggYi9saWIvaWd0LmgKaW5k ZXggZDE2YTQ5OTEuLmE3NWQyZGI3IDEwMDY0NAotLS0gYS9saWIvaWd0LmgKKysrIGIvbGliL2ln dC5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiaWd0X2R1bW15bG9hZC5oIgogI2luY2x1 ZGUgImlndF9mYi5oIgogI2luY2x1ZGUgImlndF9mcmFtZS5oIgorI2luY2x1ZGUgImlndF9hdWRp by5oIgogI2luY2x1ZGUgImlndF9ndC5oIgogI2luY2x1ZGUgImlndF9rbXMuaCIKICNpbmNsdWRl ICJpZ3RfcG0uaCIKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfYXVkaW8uYyBiL2xpYi9pZ3RfYXVkaW8u YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNmIzNTUyOWEKLS0tIC9kZXYv bnVsbAorKysgYi9saWIvaWd0X2F1ZGlvLmMKQEAgLTAsMCArMSwzMjYgQEAKKy8qCisgKiBDb3B5 cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUg bmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MK KyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogIFBhdWwgS29jaWFsa293 c2tpIDxwYXVsLmtvY2lhbGtvd3NraUBsaW51eC5pbnRlbC5jb20+CisgKi8KKworI2luY2x1ZGUg ImNvbmZpZy5oIgorCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPGdzbC9nc2xfZmZ0X3Jl YWwuaD4KKworI2luY2x1ZGUgImlndC5oIgorCisjZGVmaW5lIEZSRVFTX01BWAk4CisKKy8qKgor ICogU0VDVElPTjppZ3RfYXVkaW8KKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogTGlicmFyeSBmb3Ig YXVkaW8tcmVsYXRlZCB0ZXN0cworICogQHRpdGxlOiBBdWRpbworICogQGluY2x1ZGU6IGlndF9h dWRpby5oCisgKgorICogVGhpcyBsaWJyYXJ5IGNvbnRhaW5zIGhlbHBlcnMgZm9yIGF1ZGlvLXJl bGF0ZWQgdGVzdHMuIE1vcmUgc3BlY2lmaWNhbGx5LAorICogaXQgYWxsb3dzIGdlbmVyYXRpbmcg YWRkaXRpb25zIG9mIHNpbmUgc2lnbmFscyBhcyB3ZWxsIGFzIGRldGVjdGluZyB0aGVtLgorICov CisKK3N0cnVjdCBhdWRpb19zaWduYWxfZnJlcSB7CisJaW50IGZyZXE7CisKKwlzaG9ydCAqcGVy aW9kOworCWludCBmcmFtZXM7CisJaW50IG9mZnNldDsKK307CisKK3N0cnVjdCBhdWRpb19zaWdu YWwgeworCWludCBjaGFubmVsczsKKwlpbnQgc2FtcGxpbmdfcmF0ZTsKKworCXN0cnVjdCBhdWRp b19zaWduYWxfZnJlcSBmcmVxc1tGUkVRU19NQVhdOworCWludCBmcmVxc19jb3VudDsKK307CisK Ky8qKgorICogYXVkaW9fc2lnbmFsX2luaXQ6CisgKiBAY2hhbm5lbHM6IFRoZSBudW1iZXIgb2Yg Y2hhbm5lbHMgdG8gdXNlIGZvciB0aGUgc2lnbmFsCisgKiBAc2FtcGxpbmdfcmF0ZTogVGhlIHNh bXBsaW5nIHJhdGUgdG8gdXNlIGZvciB0aGUgc2lnbmFsCisgKgorICogQWxsb2NhdGUgYW5kIGlu aXRpYWxpemUgYW4gYXVkaW8gc2lnbmFsIHN0cnVjdHVyZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0 ZXJzLgorICoKKyAqIFJldHVybnM6IEEgbmV3bHktYWxsb2NhdGVkIGF1ZGlvIHNpZ25hbCBzdHJ1 Y3R1cmUKKyAqLworc3RydWN0IGF1ZGlvX3NpZ25hbCAqYXVkaW9fc2lnbmFsX2luaXQoaW50IGNo YW5uZWxzLCBpbnQgc2FtcGxpbmdfcmF0ZSkKK3sKKwlzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWdu YWw7CisKKwlzaWduYWwgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdWRpb19zaWduYWwpKTsKKwlt ZW1zZXQoc2lnbmFsLCAwLCBzaXplb2Yoc3RydWN0IGF1ZGlvX3NpZ25hbCkpOworCisJc2lnbmFs LT5zYW1wbGluZ19yYXRlID0gc2FtcGxpbmdfcmF0ZTsKKwlzaWduYWwtPmNoYW5uZWxzID0gY2hh bm5lbHM7CisKKwlyZXR1cm4gc2lnbmFsOworfQorCisvKioKKyAqIGF1ZGlvX3NpZ25hbF9hZGRf ZnJlcXVlbmN5OgorICogQHNpZ25hbDogVGhlIHRhcmdldCBzaWduYWwgc3RydWN0dXJlCisgKiBA ZnJlcXVlbmN5OiBUaGUgZnJlcXVlbmN5IHRvIGFkZCB0byB0aGUgc2lnbmFsCisgKgorICogQWRk IGEgZnJlcXVlbmN5IHRvIHRoZSBzaWduYWwuCisgKgorICogUmV0dXJuczogQW4gaW50ZWdlciBl cXVhbCB0byB6ZXJvIGZvciBzdWNjZXNzIGFuZCBuZWdhdGl2ZSBmb3IgZmFpbHVyZQorICovCitp bnQgYXVkaW9fc2lnbmFsX2FkZF9mcmVxdWVuY3koc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFs LCBpbnQgZnJlcXVlbmN5KQoreworCWludCBpbmRleCA9IHNpZ25hbC0+ZnJlcXNfY291bnQ7CisK KwlpZiAoaW5kZXggPT0gRlJFUVNfTUFYKQorCQlyZXR1cm4gLTE7CisKKwkvKiBTdGF5IHdpdGhp biB0aGUgTnlxdWlzdOKAk1NoYW5ub24gc2FtcGxpbmcgdGhlb3JlbS4gKi8KKwlpZiAoZnJlcXVl bmN5ID4gc2lnbmFsLT5zYW1wbGluZ19yYXRlIC8gMikKKwkJcmV0dXJuIC0xOworCisJLyogQ2xp cCB0aGUgZnJlcXVlbmN5IHRvIGFuIGludGVnZXIgbXVsdGlwbGUgb2YgdGhlIHNhbXBsaW5nIHJh dGUuCisJICogVGhpcyB0byBiZSBhYmxlIHRvIHN0b3JlIGEgZnVsbCBwZXJpb2Qgb2YgaXQgYW5k IHVzZSB0aGF0IGZvcgorCSAqIHNpZ25hbCBnZW5lcmF0aW9uLCBpbnN0ZWFkIG9mIHJlY3VycmVu dCBjYWxscyB0byBzaW4oKS4KKwkgKi8KKwlmcmVxdWVuY3kgPSBzaWduYWwtPnNhbXBsaW5nX3Jh dGUgLyAoc2lnbmFsLT5zYW1wbGluZ19yYXRlIC8gZnJlcXVlbmN5KTsKKworCWlndF9kZWJ1Zygi QWRkaW5nIHRlc3QgZnJlcXVlbmN5ICVkXG4iLCBmcmVxdWVuY3kpOworCisJc2lnbmFsLT5mcmVx c1tpbmRleF0uZnJlcSA9IGZyZXF1ZW5jeTsKKwlzaWduYWwtPmZyZXFzW2luZGV4XS5mcmFtZXMg PSAwOworCXNpZ25hbC0+ZnJlcXNbaW5kZXhdLm9mZnNldCA9IDA7CisJc2lnbmFsLT5mcmVxc19j b3VudCsrOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYXVkaW9fc2lnbmFsX3N5bnRoZXNp emU6CisgKiBAc2lnbmFsOiBUaGUgdGFyZ2V0IHNpZ25hbCBzdHJ1Y3R1cmUKKyAqCisgKiBTeW50 aGVzaXplIHRoZSBkYXRhIHRhYmxlcyBmb3IgdGhlIGF1ZGlvIHNpZ25hbCwgdGhhdCBjYW4gbGF0 ZXIgYmUgdXNlZAorICogdG8gZmlsbCBhdWRpbyBidWZmZXJzLiBUaGUgcmVzb3VyY2VzIGFsbG9j YXRlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QgYmUKKyAqIGZyZWVkIHdpdGggYSBjYWxsIHRvIGF1 ZGlvX3NpZ25hbF9jbGVhbiB3aGVuIHRoZSBzaWduYWwgaXMgbm8gbG9uZ2VyIHVzZWQuCisgKi8K K3ZvaWQgYXVkaW9fc2lnbmFsX3N5bnRoZXNpemUoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFs KQoreworCXNob3J0ICpwZXJpb2Q7CisJZG91YmxlIHZhbHVlOworCWludCBmcmFtZXM7CisJaW50 IGZyZXE7CisJaW50IGksIGo7CisKKwlpZiAoc2lnbmFsLT5mcmVxc19jb3VudCA9PSAwKQorCQly ZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgc2lnbmFsLT5mcmVxc19jb3VudDsgaSsrKSB7CisJ CWZyZXEgPSBzaWduYWwtPmZyZXFzW2ldLmZyZXE7CisJCWZyYW1lcyA9IHNpZ25hbC0+c2FtcGxp bmdfcmF0ZSAvIGZyZXE7CisKKwkJcGVyaW9kID0gY2FsbG9jKDEsIGZyYW1lcyAqIHNpemVvZihz aG9ydCkpOworCisJCWZvciAoaiA9IDA7IGogPCBmcmFtZXM7IGorKykgeworCQkJdmFsdWUgPSAy LjAgKiBNX1BJICogZnJlcSAvIHNpZ25hbC0+c2FtcGxpbmdfcmF0ZSAqIGo7CisJCQl2YWx1ZSA9 IHNpbih2YWx1ZSkgKiBTSFJUX01BWCAvIHNpZ25hbC0+ZnJlcXNfY291bnQ7CisKKwkJCXBlcmlv ZFtqXSA9IChzaG9ydCkgdmFsdWU7CisJCX0KKworCQlzaWduYWwtPmZyZXFzW2ldLnBlcmlvZCA9 IHBlcmlvZDsKKwkJc2lnbmFsLT5mcmVxc1tpXS5mcmFtZXMgPSBmcmFtZXM7CisJfQorfQorCisv KioKKyAqIGF1ZGlvX3NpZ25hbF9zeW50aGVzaXplOgorICogQHNpZ25hbDogVGhlIHRhcmdldCBz aWduYWwgc3RydWN0dXJlCisgKgorICogRnJlZSB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSBh dWRpb19zaWduYWxfc3ludGhlc2l6ZSBhbmQgcmVtb3ZlCisgKiB0aGUgcHJldmlvdXNseS1hZGRl ZCBmcmVxdWVuY2llcy4KKyAqLwordm9pZCBhdWRpb19zaWduYWxfY2xlYW4oc3RydWN0IGF1ZGlv X3NpZ25hbCAqc2lnbmFsKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNpZ25hbC0+ ZnJlcXNfY291bnQ7IGkrKykgeworCQlpZiAoc2lnbmFsLT5mcmVxc1tpXS5wZXJpb2QpCisJCQlm cmVlKHNpZ25hbC0+ZnJlcXNbaV0ucGVyaW9kKTsKKworCQltZW1zZXQoJnNpZ25hbC0+ZnJlcXNb aV0sIDAsIHNpemVvZihzdHJ1Y3QgYXVkaW9fc2lnbmFsX2ZyZXEpKTsKKwl9CisKKwlzaWduYWwt PmZyZXFzX2NvdW50ID0gMDsKK30KKworLyoqCisgKiBhdWRpb19zaWduYWxfZmlsbDoKKyAqIEBz aWduYWw6IFRoZSB0YXJnZXQgc2lnbmFsIHN0cnVjdHVyZQorICogQGJ1ZmZlcjogVGhlIHRhcmdl dCBidWZmZXIgdG8gZmlsbAorICogQGZyYW1lczogVGhlIG51bWJlciBvZiBmcmFtZXMgdG8gZmls bAorICoKKyAqIEZpbGwgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgZnJhbWVzIHRvIHRoZSB0YXJn ZXQgYnVmZmVyIHdpdGggdGhlIGF1ZGlvCisgKiBzaWduYWwgZGF0YSAoaW4gaW50ZXJsZWF2ZWQg UzE2X0xFIGZvcm1hdCksIGF0IHRoZSByZXF1ZXN0ZWQgc2FtcGxpbmcgcmF0ZQorICogYW5kIG51 bWJlciBvZiBjaGFubmVscy4KKyAqLwordm9pZCBhdWRpb19zaWduYWxfZmlsbChzdHJ1Y3QgYXVk aW9fc2lnbmFsICpzaWduYWwsIHNob3J0ICpidWZmZXIsIGludCBmcmFtZXMpCit7CisJc2hvcnQg KmRlc3RpbmF0aW9uOworCXNob3J0ICpzb3VyY2U7CisJaW50IHRvdGFsOworCWludCBmcmVxX2Zy YW1lczsKKwlpbnQgZnJlcV9vZmZzZXQ7CisJaW50IGNvdW50OworCWludCBpLCBqLCBrOworCisJ bWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKHNob3J0KSAqIHNpZ25hbC0+Y2hhbm5lbHMgKiBmcmFt ZXMpOworCisJZm9yIChpID0gMDsgaSA8IHNpZ25hbC0+ZnJlcXNfY291bnQ7IGkrKykgeworCQl0 b3RhbCA9IDA7CisKKwkJd2hpbGUgKHRvdGFsIDwgZnJhbWVzKSB7CisJCQlmcmVxX2ZyYW1lcyA9 IHNpZ25hbC0+ZnJlcXNbaV0uZnJhbWVzOworCQkJZnJlcV9vZmZzZXQgPSBzaWduYWwtPmZyZXFz W2ldLm9mZnNldDsKKworCQkJc291cmNlID0gc2lnbmFsLT5mcmVxc1tpXS5wZXJpb2QgKyBmcmVx X29mZnNldDsKKwkJCWRlc3RpbmF0aW9uID0gYnVmZmVyICsgdG90YWwgKiBzaWduYWwtPmNoYW5u ZWxzOworCisJCQljb3VudCA9IGZyZXFfZnJhbWVzIC0gZnJlcV9vZmZzZXQ7CisJCQlpZiAoY291 bnQgPiAoZnJhbWVzIC0gdG90YWwpKQorCQkJCWNvdW50ID0gZnJhbWVzIC0gdG90YWw7CisKKwkJ CWZyZXFfb2Zmc2V0ICs9IGNvdW50OworCQkJZnJlcV9vZmZzZXQgJT0gZnJlcV9mcmFtZXM7CisK KwkJCXNpZ25hbC0+ZnJlcXNbaV0ub2Zmc2V0ID0gZnJlcV9vZmZzZXQ7CisKKwkJCWZvciAoaiA9 IDA7IGogPCBjb3VudDsgaisrKSB7CisJCQkJZm9yIChrID0gMDsgayA8IHNpZ25hbC0+Y2hhbm5l bHM7IGsrKykgeworCQkJCQlkZXN0aW5hdGlvbltqICogc2lnbmFsLT5jaGFubmVscyArIGtdICs9 IHNvdXJjZVtqXTsKKwkJCQl9CisJCQl9CisKKwkJCXRvdGFsICs9IGNvdW50OworCQl9CisJfQor fQorCisvKioKKyAqIGF1ZGlvX3NpZ25hbF9kZXRlY3Q6CisgKiBAc2lnbmFsOiBUaGUgdGFyZ2V0 IHNpZ25hbCBzdHJ1Y3R1cmUKKyAqIEBjaGFubmVsczogVGhlIGlucHV0IGRhdGEncyBudW1iZXIg b2YgY2hhbm5lbHMKKyAqIEBzYW1wbGluZ19yYXRlOiBUaGUgaW5wdXQgZGF0YSdzIHNhbXBsaW5n IHJhdGUKKyAqIEBidWZmZXI6IFRoZSBpbnB1dCBkYXRhJ3MgYnVmZmVyCisgKiBAZnJhbWVzOiBU aGUgaW5wdXQgZGF0YSdzIG51bWJlciBvZiBmcmFtZXMKKyAqCisgKiBEZXRlY3QgdGhhdCB0aGUg ZnJlcXVlbmNpZXMgc3BlY2lmaWVkIGluIEBzaWduYWwsIGFuZCBvbmx5IHRob3NlLCBhcmUKKyAq IHByZXNlbnQgaW4gdGhlIGlucHV0IGRhdGEuIFRoZSBpbnB1dCBkYXRhJ3MgZm9ybWF0IGlzIHJl cXVpcmVkIHRvIGJlIFMxNl9MRS4KKyAqCisgKiBSZXR1cm5zOiBBIGJvb2xlYW4gaW5kaWNhdGlu ZyB3aGV0aGVyIHRoZSBkZXRlY3Rpb24gd2FzIHN1Y2Nlc3NmdWwKKyAqLworYm9vbCBhdWRpb19z aWduYWxfZGV0ZWN0KHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCwgaW50IGNoYW5uZWxzLAor CQkJIGludCBzYW1wbGluZ19yYXRlLCBzaG9ydCAqYnVmZmVyLCBpbnQgZnJhbWVzKQoreworCWRv dWJsZSBkYXRhW2ZyYW1lc107CisJaW50IGFtcGxpdHVkZVtmcmFtZXMgLyAyXTsKKwlib29sIGRl dGVjdGVkW3NpZ25hbC0+ZnJlcXNfY291bnRdOworCWludCB0aHJlc2hvbGQ7CisJYm9vbCBhYm92 ZTsKKwlpbnQgZXJyb3I7CisJaW50IGZyZXE7CisJaW50IG1heDsKKwlpbnQgYywgaSwgajsKKwor CS8qIEFsbG93ZWQgZXJyb3IgaW4gSHogZHVlIHRvIEZGVCBzdGVwLiAqLworCWVycm9yID0gc2Ft cGxpbmdfcmF0ZSAvIGZyYW1lczsKKworCWZvciAoYyA9IDA7IGMgPCBjaGFubmVsczsgYysrKSB7 CisJCWZvciAoaSA9IDA7IGkgPCBmcmFtZXM7IGkrKykKKwkJCWRhdGFbaV0gPSAoZG91YmxlKSBi dWZmZXJbaSAqIGNoYW5uZWxzICsgY107CisKKwkJZ3NsX2ZmdF9yZWFsX3JhZGl4Ml90cmFuc2Zv cm0oZGF0YSwgMSwgZnJhbWVzKTsKKworCQltYXggPSAwOworCisJCWZvciAoaSA9IDA7IGkgPCBm cmFtZXMgLyAyOyBpKyspIHsKKwkJCWFtcGxpdHVkZVtpXSA9IHNxcnQoZGF0YVtpXSAqIGRhdGFb aV0gKworCQkJCQkgICAgZGF0YVtmcmFtZXMgLSBpXSAqCisJCQkJCSAgICBkYXRhW2ZyYW1lcyAt IGldKTsKKwkJCWlmIChhbXBsaXR1ZGVbaV0gPiBtYXgpCisJCQkJbWF4ID0gYW1wbGl0dWRlW2ld OworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IHNpZ25hbC0+ZnJlcXNfY291bnQ7IGkrKykKKwkJ CWRldGVjdGVkW2ldID0gZmFsc2U7CisKKwkJdGhyZXNob2xkID0gbWF4IC8gMjsKKwkJYWJvdmUg PSBmYWxzZTsKKwkJbWF4ID0gMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgZnJhbWVzIC8gMjsgaSsr KSB7CisJCQlpZiAoYW1wbGl0dWRlW2ldID4gdGhyZXNob2xkKQorCQkJCWFib3ZlID0gdHJ1ZTsK KworCQkJaWYgKGFib3ZlKSB7CisJCQkJaWYgKGFtcGxpdHVkZVtpXSA8IHRocmVzaG9sZCkgewor CQkJCQlhYm92ZSA9IGZhbHNlOworCQkJCQltYXggPSAwOworCisJCQkJCWZvciAoaiA9IDA7IGog PCBzaWduYWwtPmZyZXFzX2NvdW50OyBqKyspIHsKKwkJCQkJCWlmIChzaWduYWwtPmZyZXFzW2pd LmZyZXEgPgorCQkJCQkJICAgIGZyZXEgLSBlcnJvciAmJgorCQkJCQkJICAgIHNpZ25hbC0+ZnJl cXNbal0uZnJlcSA8CisJCQkJCQkgICAgZnJlcSArIGVycm9yKSB7CisJCQkJCQkJZGV0ZWN0ZWRb al0gPSB0cnVlOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJLyogRGV0 ZWN0ZWQgZnJlcXVlbmN5IHdhcyBub3QgZ2VuZXJhdGVkLiAqLworCQkJCQlpZiAoaiA9PSBzaWdu YWwtPmZyZXFzX2NvdW50KSB7CisJCQkJCQlpZ3RfZGVidWcoIkRldGVjdGVkIGFkZGl0aW9uYWwg ZnJlcXVlbmN5OiAlZFxuIiwKKwkJCQkJCQkgIGZyZXEpOworCQkJCQkJcmV0dXJuIGZhbHNlOwor CQkJCQl9CisJCQkJfQorCisJCQkJaWYgKGFtcGxpdHVkZVtpXSA+IG1heCkgeworCQkJCQltYXgg PSBhbXBsaXR1ZGVbaV07CisJCQkJCWZyZXEgPSBzYW1wbGluZ19yYXRlICogaSAvIGZyYW1lczsK KwkJCQl9CisJCQl9CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgc2lnbmFsLT5mcmVxc19jb3Vu dDsgaSsrKSB7CisJCQlpZiAoIWRldGVjdGVkW2ldKSB7CisJCQkJaWd0X2RlYnVnKCJNaXNzaW5n IGZyZXF1ZW5jeTogJWRcbiIsCisJCQkJCSAgc2lnbmFsLT5mcmVxc1tpXS5mcmVxKTsKKwkJCQly ZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdp dCBhL2xpYi9pZ3RfYXVkaW8uaCBiL2xpYi9pZ3RfYXVkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMC4uNTA3ZTdhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaWd0X2F1 ZGlvLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENv cnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgor ICoKKyAqIEF1dGhvcnM6CisgKiAgUGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293c2tp QGxpbnV4LmludGVsLmNvbT4KKyAqLworCisjaWZuZGVmIElHVF9BVURJT19ICisjZGVmaW5lIElH VF9BVURJT19ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisj ZW5kaWYKKworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworc3RydWN0 IGF1ZGlvX3NpZ25hbDsKKworc3RydWN0IGF1ZGlvX3NpZ25hbCAqYXVkaW9fc2lnbmFsX2luaXQo aW50IGNoYW5uZWxzLCBpbnQgc2FtcGxpbmdfcmF0ZSk7CitpbnQgYXVkaW9fc2lnbmFsX2FkZF9m cmVxdWVuY3koc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBpbnQgZnJlcXVlbmN5KTsKK3Zv aWQgYXVkaW9fc2lnbmFsX3N5bnRoZXNpemUoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsKTsK K3ZvaWQgYXVkaW9fc2lnbmFsX2NsZWFuKHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCk7Cit2 b2lkIGF1ZGlvX3NpZ25hbF9maWxsKHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCwgc2hvcnQg KmJ1ZmZlciwgaW50IGZyYW1lcyk7Citib29sIGF1ZGlvX3NpZ25hbF9kZXRlY3Qoc3RydWN0IGF1 ZGlvX3NpZ25hbCAqc2lnbmFsLCBpbnQgY2hhbm5lbHMsCisJCQkgaW50IHNhbXBsaW5nX3JhdGUs IHNob3J0ICpidWZmZXIsIGludCBmcmFtZXMpOworCisjZW5kaWYKLS0gCjIuMTQuMAoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==