From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Sharma, Shashank" Subject: Re: [PATCH] tests/kms_color:Color IGT Date: Mon, 13 Jul 2015 04:01:19 +0000 Message-ID: References: <1436759693-8501-1-git-send-email-dhanya.p.r@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 9229089137 for ; Sun, 12 Jul 2015 21:01:23 -0700 (PDT) In-Reply-To: <1436759693-8501-1-git-send-email-dhanya.p.r@intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "R, Dhanya p" , "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org TXkgY29tbWVudHMgaW5saW5lLg0KDQpSZWdhcmRzDQpTaGFzaGFuaw0KLS0tLS1PcmlnaW5hbCBN ZXNzYWdlLS0tLS0NCkZyb206IFIsIERoYW55YSBwIA0KU2VudDogTW9uZGF5LCBKdWx5IDEzLCAy MDE1IDk6MjUgQU0NClRvOiBpbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQpDYzogUGFs bGV0aSwgQXZpbmFzaCBSZWRkeTsgTWFsbGFkaSwgS2F1c2FsOyBTaGFybWEsIFNoYXNoYW5rOyBT dXJlc2gsIEFuaXRoYTsgUiwgRGhhbnlhIHANClN1YmplY3Q6IFtQQVRDSF0gdGVzdHMva21zX2Nv bG9yOkNvbG9yIElHVA0KDQpGcm9tOiBEaGFueWEgPGRoYW55YS5wLnJAaW50ZWwuY29tPg0KDQpU aGlzIHBhdGNoIHdpbGwgdmVyaWZ5IGNvbG9yIGNvcnJlY3Rpb24gY2FwYWJpbGl0eSBvZiBhIGRp c3BsYXkgZHJpdmVyLg0KR2FtbWEvQ1NDL0RlLWdhbW1hIHN1cHBvcnRlZC4NCg0KU2lnbmVkLW9m Zi1ieTogRGhhbnlhIDxkaGFueWEucC5yQGludGVsLmNvbT4NCi0tLQ0KIHRlc3RzL01ha2VmaWxl LnNvdXJjZXMgfCAgIDMgKw0KIHRlc3RzL2ttc19jb2xvci5jICAgICAgfCA2MzkgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KIDIgZmlsZXMgY2hhbmdl ZCwgNjQyIGluc2VydGlvbnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX2NvbG9y LmMNCg0KZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmls ZS5zb3VyY2VzIGluZGV4IDk5NGMzMWIuLmY0OWMzOTYgMTAwNjQ0DQotLS0gYS90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzDQorKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzDQpAQCAtNzcsOSArNzcs MTIgQEAgVEVTVFNfcHJvZ3NfTSA9IFwNCiAJa21zX3NldG1vZGUgXA0KIAlrbXNfdW5pdmVyc2Fs X3BsYW5lIFwNCiAJa21zX3ZibGFuayBcDQorCWttc19jb2xvciBcDQorCWNvbG9yLWNvcnJlY3Rp b24JXA0KIAlrbXNfY3J0Y19iYWNrZ3JvdW5kX2NvbG9yIFwNCiAJa21zX3BsYW5lX3NjYWxpbmcg XA0KIAlrbXNfcGFuZWxfZml0dGluZyBcDQorCWttc19yZW5kZXJfY29tcHJlc3Npb24gXA0KV2h5 IGFyZSB3ZSBhZGRpbmcgcmVuZGVyIGNvbXByZXNzaW9uIEFQSSBoZXJlID8NCiAJcG1fbHBzcCBc DQogCXBtX3JwbSBcDQogCXBtX3JwcyBcDQpkaWZmIC0tZ2l0IGEvdGVzdHMva21zX2NvbG9yLmMg Yi90ZXN0cy9rbXNfY29sb3IuYyBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleCAwMDAwMDAwLi40 OGZhZDdhDQotLS0gL2Rldi9udWxsDQorKysgYi90ZXN0cy9rbXNfY29sb3IuYw0KQEAgLTAsMCAr MSw2MzkgQEANCisvKg0KKyAqIENvcHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uDQor ICoNCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiANCitvYnRhaW5pbmcgYQ0KKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQg YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgDQorIlNvZnR3YXJlIiksDQorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgDQorbGltaXRhdGlvbg0KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCANCitzdWJsaWNlbnNlLA0KKyAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IA0KK3RoZQ0KKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQorICoNCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSANCituZXh0DQor ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIA0KK29mIHRoZQ0KKyAqIFNvZnR3YXJlLg0KKyAqDQorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIA0K K0VYUFJFU1MgT1INCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIA0KK01FUkNIQU5UQUJJTElUWSwNCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgDQorU0hB TEwNCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiANCitPVEhFUg0KKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCANCitBUklTSU5HDQorICog RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUiBPVEhFUiANCitERUFMSU5HUw0KKyAqIElOIFRIRSBTT0ZUV0FSRS4NCisgKg0KKyAqLw0K Kw0KKyNpbmNsdWRlIDxtYXRoLmg+DQorI2luY2x1ZGUgImRybXRlc3QuaCINCisjaW5jbHVkZSAi aWd0X2RlYnVnZnMuaCINCisjaW5jbHVkZSAiaWd0X2ttcy5oIg0KKyNpbmNsdWRlICJpZ3RfY29y ZS5oIg0KKyNpbmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiDQorI2luY2x1ZGUgImlndF9hdXguaCIN CisjaW5jbHVkZTx1bmlzdGQuaD4NCisjaW5jbHVkZTxzdGRsaWIuaD4NCitJR1RfVEVTVF9ERVND UklQVElPTigiVGVzdCBDb2xvciBGZWF0dXJlcyBhdCBQbGFuZS9QaXBlIGxldmVsIik7DQorDQor DQorI2RlZmluZSBDSFZfQ1NDX1ZBTFMgICAgOQ0KKyNkZWZpbmUgSTkxNV9QSVBFX0NTQyAgICAg ICAgICAgKDE8PDApDQorI2RlZmluZSBJOTE1X1BMQU5FX0NTQyAgKDE8PDEpDQorDQorI2RlZmlu ZSBDU0NfTUFOVElTU0FfTUFYX0JJVFMgICAgMQ0KKyNkZWZpbmUgQ1NDX01BTlRJU1NBX01BWF9W QUxVRSAgICgoMSA8PCBDU0NfTUFOVElTU0FfTUFYX0JJVFMpIC0gMSkNCisjZGVmaW5lIENTQ19G UkFDVElPTl9NQVhfQklUUyAgICAxMA0KKyNkZWZpbmUgR0FNTUFfUkVEX1NISUZUCTE2DQorI2Rl ZmluZSBHQU1NQV9HUkVFTl9TSElGVAk4DQorI2RlZmluZSBTVEFOREFSRF9HQU1NQQkJCQkyLjIN CisjZGVmaW5lIEk5MTVfR0FNTUFfRkxBR19ERUdBTU1BCQkoMTw8MCkNCisjZGVmaW5lIEk5MTVf UElQRV9HQU1NQQkJKDE8PDApDQorI2RlZmluZSBJOTE1X1BMQU5FX0dBTU1BCSgxPDwxKQ0KKyNk ZWZpbmUgSTkxNV9HQU1NQV9QUkVDSVNJT05fVU5LTk9XTgkwDQorI2RlZmluZSBJOTE1X0dBTU1B X1BSRUNJU0lPTl9DVVJSRU5UCTB4RkZGRkZGRkYNCisjZGVmaW5lIEk5MTVfR0FNTUFfUFJFQ0lT SU9OX0xFR0FDWQkoMTw8MCkNCisjZGVmaW5lIEk5MTVfR0FNTUFfUFJFQ0lTSU9OXzEwQklUCSgx PDwxKQ0KKyNkZWZpbmUgSTkxNV9HQU1NQV9QUkVDSVNJT05fMTJCSVQJKDE8PDIpDQorI2RlZmlu ZSBJOTE1X0dBTU1BX1BSRUNJU0lPTl8xNEJJVAkoMTw8MykNCisjZGVmaW5lIEk5MTVfR0FNTUFf UFJFQ0lTSU9OXzE2QklUCSgxPDw0KQ0KKyNkZWZpbmUgQ0hWX0RFR0FNTUFfTUFYX0lOREVYCTY0 DQorI2RlZmluZSBDSFZfREVHQU1NQV9WQUxTCTY1DQorI2RlZmluZSBDSFZfOEJJVF9HQU1NQV9N QVhfSU5ERVgJMjU2DQorI2RlZmluZSBDSFZfOEJJVF9HQU1NQV9NQVhfVkFMUwlDSFZfOEJJVF9H QU1NQV9NQVhfSU5ERVgNCisjZGVmaW5lIENIVl8xMEJJVF9HQU1NQV9NQVhfSU5ERVgJMjU2DQor I2RlZmluZSBDSFZfMTBCSVRfR0FNTUFfTUFYX1ZBTFMJKENIVl8xMEJJVF9HQU1NQV9NQVhfSU5E RVggKyAxKQ0KKyNkZWZpbmUgREVGQVVMVCAwDQorI2RlZmluZSBSQU5ET00gMQ0KKyNkZWZpbmUg RFJNX0lPQ1RMX01PREVfQ1JFQVRFUFJPUEJMT0IJXA0KKwlEUk1fSU9XUigweEJELCBzdHJ1Y3Qg ZHJtX21vZGVfY3JlYXRlX2Jsb2IpDQpXaHkgYXJlIHdlIGFkZGluZyB0aGVzZSBkZWZpbml0aW9u cyBoZXJlID8gV2Ugc2hvdWxkIHJldXNlIHdoYXRldmVyIGlzIGF2YWlsYWJsZSBpbiB0aGUgVUFQ SSBsYXllciwgbGluayB0byBhcHByb3ByaWF0ZSBoZWFkZXIgZmlsZXMsIGFuZCB0aGVuIGhhcmRj b2RlIHdoYXRldmVyIGlzIG5vdCBhY2Nlc3NpYmxlLiANCkkgZG9u4oCZdCBzZWUgYSByZWFzb24g dG8gYWRkIElPQ1RMIG5vcyBoZXJlLg0KKw0KK3N0cnVjdCBkcm1faW50ZWxfY3NjIHsNCisJdWlu dDMyX3QgdmVyc2lvbjsNCisJaW50IGNzY19tYXRyaXhbOV07DQorDQorfTsNClNhbWUgaGVyZSwg dGhpcyBzaG91bGQgYmUgYXZhaWxhYmxlIGluIGRybSBoZWFkZXJzLiANCisNCitzdHJ1Y3QgQ1VS VkVfU0xJREVSX1ZBTFVFUyB7DQorCWludDMyX3QgYnJpZ2h0bmVzczsNCisJaW50MzJfdCBjb250 cmFzdDsNCisJZmxvYXQgZ2FtbWE7DQorfTsNCisNCitzdHJ1Y3QgcmdiX3BpeGVsIHsNCisJdWlu dDMyX3QgcmVkOw0KKwl1aW50MzJfdCBncmVlbjsNCisJdWludDMyX3QgYmx1ZTsNCit9Ow0KKw0K K3N0cnVjdCBkcm1faW50ZWxfZ2FtbWEgew0KKwl1aW50MzJfdCB2ZXJzaW9uOw0KKwl1aW50MzJf dCBudW1fc2FtcGxlczsNCisJc3RydWN0IHJnYl9waXhlbCBnYW1tYV92YWx1ZXNbMjU3XTsNCit9 Ow0KK3N0cnVjdCBkcm1faW50ZWxfZGVnYW1tYSB7DQorCXVpbnQzMl90IHZlcnNpb247DQorCXVp bnQzMl90IG51bV9zYW1wbGVzOw0KKwlzdHJ1Y3QgcmdiX3BpeGVsIGRlZ2FtbWFfdmFsdWVzWzY1 XTsNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2Jsb2Igew0KKwl1aW50 NjRfdCBkYXRhOw0KKwl1aW50MzJfdCBsZW5ndGg7DQorCXVpbnQzMl90IGJsb2JfaWQ7DQorfTsN ClNhbWUgaGVyZSwgdGhpcyBzaG91bGQgYmUgYXZhaWxhYmxlIGluIGRybSBoZWFkZXJzLg0KKw0K Kw0KK3N0cnVjdCBkYXRhX3Qgew0KKwlpbnQgZmJfaW5pdGlhbDsNCisJaW50IGRybV9mZDsNCisJ aW50IHcsIGg7DQorCWlndF9kaXNwbGF5X3QgZGlzcGxheTsNCisJc3RydWN0IGlndF9mYiBmYl9w cmVwOw0KKwlzdHJ1Y3QgaWd0X2ZiIGZiLCBmYjE7DQorfTsNCisNCisJc3RhdGljIHZvaWQNCitw YWludF9jb2xvcihzdHJ1Y3QgZGF0YV90ICpkLCBzdHJ1Y3QgaWd0X2ZiICpmYiwgdWludDE2X3Qg dywgdWludDE2X3QgDQoraCkgew0KKwljYWlyb190ICpjcjsNCisNCisJY3IgPSBpZ3RfZ2V0X2Nh aXJvX2N0eChkLT5kcm1fZmQsIGZiKTsNCisJaWd0X3BhaW50X3Rlc3RfcGF0dGVybihjciwgdywg aCk7DQorCWNhaXJvX2Rlc3Ryb3koY3IpOw0KK30NCisNCitpbnQgY3JlYXRlX2Jsb2IoaW50IGZk LCB1aW50NjRfdCAqZGF0YSwgaW50IGxlbmd0aCkgew0KKwlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRl X2Jsb2IgYmxvYjsNCisJaW50IHJldCA9IC0xOw0KKw0KKwlibG9iLmRhdGEgPSAodWludDY0X3Qp ZGF0YTsNCisJYmxvYi5sZW5ndGggPSBsZW5ndGg7DQorCWJsb2IuYmxvYl9pZCA9IC0xOw0KKwly ZXQgPSBpb2N0bChmZCwgRFJNX0lPQ1RMX01PREVfQ1JFQVRFUFJPUEJMT0IsICZibG9iKTsNCisJ aWYgKCFyZXQpDQorCQlyZXR1cm4gYmxvYi5ibG9iX2lkOw0KKwlwcmludGYoIkJsb2IgY3JlYXRp b24gaW9jdGwgZmFpbGVkIik7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHBy ZXBhcmVfY3J0YyhzdHJ1Y3QgZGF0YV90ICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwNCisJ CWVudW0gcGlwZSBwaXBlLCBpZ3RfcGxhbmVfdCAqcGxhbmUsIGRybU1vZGVNb2RlSW5mbyAqbW9k ZSwNCisJCWVudW0gaWd0X2NvbW1pdF9zdHlsZSBzKQ0KK3sNCisJaWd0X2Rpc3BsYXlfdCAqZGlz cGxheSA9ICZkYXRhLT5kaXNwbGF5Ow0KKw0KKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwg cGlwZSk7DQorDQorDQorCS8qIGJlZm9yZSBhbGxvY2F0aW5nLCBmcmVlIGlmIGFueSBvbGRlciBm YiAqLw0KKwlpZiAoZGF0YS0+ZmJfaW5pdGlhbCkgew0KKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5k cm1fZmQsICZkYXRhLT5mYl9wcmVwKTsNCisJCWRhdGEtPmZiX2luaXRpYWwgPSAwOw0KKwl9DQor DQorCS8qIGFsbG9jYXRlIGZiIGZvciBwbGFuZSAxICovDQorCWRhdGEtPmZiX2luaXRpYWwgPSBp Z3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwNCisJCQltb2RlLT5oZGlzcGxheSwgbW9k ZS0+dmRpc3BsYXksDQorCQkJRFJNX0ZPUk1BVF9YUkdCODg4OCwNCisJCQlMT0NBTF9JOTE1X0ZP Uk1BVF9NT0RfWF9USUxFRCwgLyogdGlsZWQgKi8NCisJCQkwLCAwLCAxLjAsDQorCQkJJmRhdGEt PmZiX3ByZXApOw0KKwlpZ3RfYXNzZXJ0KGRhdGEtPmZiX2luaXRpYWwpOw0KKw0KKwlpZ3RfcGxh bmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ZmJfcHJlcCk7DQorCWlmIChzID09IENPTU1JVF9MRUdB Q1kpIHsNCisJCWludCByZXQ7DQorDQorCQlyZXQgPSBkcm1Nb2RlU2V0Q3J0YyhkYXRhLT5kcm1f ZmQsDQorCQkJCW91dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsDQorCQkJCWRhdGEtPmZiX2lu aXRpYWwsDQorCQkJCXBsYW5lLT5wYW5feCwgcGxhbmUtPnBhbl95LA0KKwkJCQkmb3V0cHV0LT5p ZCwNCisJCQkJMSwNCisJCQkJbW9kZSk7DQorCQlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsNCisJfSBl bHNlIHsNCisJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgcyk7DQorCX0NCit9DQorc3Rh dGljIHZvaWQgY2xlYW51cF9mYihzdHJ1Y3QgZGF0YV90ICpkYXRhKSB7DQorCWlndF9kaXNwbGF5 X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsNCisNCisJaWYgKGRhdGEtPmZiX2luaXRpYWwp IHsNCisJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ZmJfcHJlcCk7DQorCQlk YXRhLT5mYl9pbml0aWFsID0gMDsNCisJfQ0KKwlpZiAoZGF0YS0+ZmIuZmJfaWQpDQorCQlpZ3Rf cmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmRhdGEtPmZiKTsNCisJaWYgKGRhdGEtPmZiMS5mYl9p ZCkNCisJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ZmIxKTsNCisNCit9DQor c3RhdGljIHZvaWQgY2xlYW51cF9jcnRjKHN0cnVjdCBkYXRhX3QgKmRhdGEsIGlndF9vdXRwdXRf dCAqb3V0cHV0LA0KKwkJaWd0X3BsYW5lX3QgKnBsYW5lKQ0KK3sNCisJaWd0X2Rpc3BsYXlfdCAq ZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Ow0KKw0KKwlpZiAoIXBsYW5lLT5pc19wcmltYXJ5KSB7 DQorCQlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsNCisNCisJCXByaW1hcnkgPSBpZ3Rfb3V0cHV0X2dl dF9wbGFuZShvdXRwdXQsIElHVF9QTEFORV9QUklNQVJZKTsNCisJCWlndF9wbGFuZV9zZXRfZmIo cHJpbWFyeSwgTlVMTCk7DQorCX0NCisNCisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7 DQorCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBQSVBFX0FOWSk7DQorCWlndF9kaXNwbGF5 X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0xFR0FDWSk7IH0NCisNCitpbnQgY29udmVydFRvQmlu YXJ5U2lnbmVkKGZsb2F0IHZhbHVlKQ0KK3sNCisJaW50IG1hbnRpc3NhID0gMDsNCisJaW50IGZy YWN0aW9uID0gMDsNCisJaW50IHNpZ24gPSAwOw0KKwlpbnQgbG9vcDsNCisJZmxvYXQgZnRtcDsN CisJaW50IHJldCA9IDA7DQorDQorCWlmICh2YWx1ZSA8IDApIHsNCisJCXNpZ24gPSAxOw0KKwkJ dmFsdWUgKj0gKC0xKTsNCisJfQ0KKwltYW50aXNzYSA9IChpbnQpIHZhbHVlIC8gMTsNCisJbWFu dGlzc2EgJj0gQ1NDX01BTlRJU1NBX01BWF9WQUxVRTsNCisJZnRtcCA9IHZhbHVlIC0gbWFudGlz c2E7DQorCWZvciAobG9vcCA9IDA7IGxvb3AgPCBDU0NfRlJBQ1RJT05fTUFYX0JJVFM7IGxvb3Ar Kykgew0KKwkJZnRtcCA9IGZ0bXAgKiAyOw0KKwkJaWYgKGZ0bXAgPj0gMSkgew0KKwkJCWZyYWN0 aW9uIHw9IDB4MTsNCisJCQlmdG1wIC09IDEuMDsNCisJCX0NCisJCWlmIChsb29wID09IChDU0Nf RlJBQ1RJT05fTUFYX0JJVFMgLSAxKSkNCisJCQlicmVhazsNCisJCWZyYWN0aW9uIDw8PSAxOw0K Kw0KKwl9DQorCWZyYWN0aW9uICY9IDB4M0ZGOw0KKwlyZXQgPSAoZnJhY3Rpb24gfCAobWFudGlz c2EgPDwgQ1NDX0ZSQUNUSU9OX01BWF9CSVRTKSk7DQorCWlmIChzaWduKQ0KKwkJcmV0ID0gKH5y ZXQpICsgMTsNCisJcmV0IHw9IChzaWduIDw8IDExKTsNCisJcmV0ICY9IDB4RkZGOw0KKwlyZXR1 cm4gcmV0Ow0KK30NCit2b2lkIGNzY1dyaXRlKGZsb2F0ICpjc2NfdmFsLCBpbnQgKmNzY19tYXRy aXgpIHsNCisJZm9yIChpbnQgaSA9IDA7IGkgPCBDSFZfQ1NDX1ZBTFM7IGkrKykNCisJCWNzY19t YXRyaXhbaV0gPSAodWludDY0X3QpY29udmVydFRvQmluYXJ5U2lnbmVkKGNzY192YWxbaV0pOw0K K30NCisNCit2b2lkIGdlbmVyYXRlQ3VydmVGcm9tU2xpZGVyKHN0cnVjdCBDVVJWRV9TTElERVJf VkFMVUVTICpwU2xpZGVyLA0KKwkJdWludDMyX3QgKnBDdXJ2ZSwgdWludDMyX3QgbnVtX3NhbXBs ZXMpIHsNCisJZG91YmxlIGRHYW1tYSA9IChkb3VibGUpcFNsaWRlci0+Z2FtbWE7DQorCWRvdWJs ZSBkQnJpZ2h0bmVzcyA9IChkb3VibGUpcFNsaWRlci0+YnJpZ2h0bmVzcyAqIDI1NjsNCisJZG91 YmxlIGRDb250cmFzdCA9IChkb3VibGUpcFNsaWRlci0+Y29udHJhc3Q7DQorCWRvdWJsZSBkU2xv cGUsIGRPdXRwdXQsIG91dFZhbDsNCisJdWludDMyX3QgaW5wdXQsIGluZGV4LCBpOw0KKwlpbnQg bWF4VmFsID0gNjU1MzU7DQorDQorCWZvciAoaSA9IDA7IGkgPCBudW1fc2FtcGxlcyoyOyBpKysp IHsNCisJCW91dFZhbCA9IChkb3VibGUpKDI1NSAqIHBvdygoKGRvdWJsZSlpIC8gMjU1LjApLA0K KwkJCQkJKFNUQU5EQVJEX0dBTU1BIC8gZEdhbW1hKSkpOw0KKwkJb3V0VmFsICs9IDAuNTsNCisJ CWlmIChtYXhWYWwgPCBvdXRWYWwpDQorCQkJb3V0VmFsID0gbWF4VmFsOw0KKwkJcEN1cnZlW2ld ID0gb3V0VmFsOw0KKwl9DQorCWRTbG9wZSA9IDEuMCArIGRDb250cmFzdCAvIDEwMC4wOw0KKwlm b3IgKGlucHV0ID0gMDsgaW5wdXQgPCBudW1fc2FtcGxlcyoyOyBpbnB1dCsrKSB7DQorCQlkT3V0 cHV0ID0gZFNsb3BlICogcEN1cnZlW2lucHV0XTsNCisJCWRPdXRwdXQgKz0gZEJyaWdodG5lc3Mg KyAwLjU7DQorCQlpZiAoZE91dHB1dCA+IG1heFZhbCkNCisJCQlkT3V0cHV0ID0gbWF4VmFsOw0K KwkJaWYgKGRPdXRwdXQgPCAwKQ0KKwkJCWRPdXRwdXQgPSAwOw0KKwkJcEN1cnZlW2lucHV0XSA9 IGRPdXRwdXQ7DQorCX0NCit9DQordm9pZCB3cml0ZUN1cnZlQ3N2KHVpbnQzMl90ICpwQ3VydmVE YXRhLCB1aW50MzJfdCBudW1fc2FtcGxlcywNCisJCXN0cnVjdCByZ2JfcGl4ZWwgKmdhbW1hX3B0 cikNCldoYXQgZG9lcyBDc3Ygc3RhbmQgZm9yID8NCit7DQorCXVpbnQzMl90ICpwUmVkLCAqcEdy ZWVuLCAqcEJsdWU7DQorCXVpbnQ2NF90IGksIGluZGV4Ow0KKw0KKwlwUmVkID0gcEN1cnZlRGF0 YTsNCisJcEdyZWVuID0gcEN1cnZlRGF0YTsNCisJcEJsdWUgPSBwQ3VydmVEYXRhOw0KKwlmb3Ig KGkgPSAwOyBpIDwgbnVtX3NhbXBsZXM7IGkrKykgew0KKwkJaW5kZXggPSBpICogMjsNCisJCWdh bW1hX3B0cltpXS5yZWQgPSBwUmVkW2luZGV4XTsNCisJCWdhbW1hX3B0cltpXS5ncmVlbiA9IHBH cmVlbltpbmRleF07DQorCQlnYW1tYV9wdHJbaV0uYmx1ZSA9IHBCbHVlW2luZGV4XTsNCisJfQ0K K30NCisNCit2b2lkIGdhbW1hUGlwZShpbnQgYnJpZ2h0bmVzcywgaW50IGNvbnRyYXN0LCBmbG9h dCBnYW1tYSwNCisJCXVpbnQzMl90IG51bV9zYW1wbGVzLCBzdHJ1Y3QgcmdiX3BpeGVsICpnYW1t YV9wdHIpIHsNCisJc3RydWN0IENVUlZFX1NMSURFUl9WQUxVRVMgc1NsaWRlRGF0YTsNCisJdWlu dDMyX3QgcEN1cnZlWzIqbnVtX3NhbXBsZXNdOw0KKw0KKwlzU2xpZGVEYXRhLmJyaWdodG5lc3Mg PSBicmlnaHRuZXNzOw0KKwlzU2xpZGVEYXRhLmNvbnRyYXN0ID0gY29udHJhc3Q7DQorCXNTbGlk ZURhdGEuZ2FtbWEgPSBnYW1tYTsNCisJZ2VuZXJhdGVDdXJ2ZUZyb21TbGlkZXIoJnNTbGlkZURh dGEsIHBDdXJ2ZSwgbnVtX3NhbXBsZXMpOw0KKwl3cml0ZUN1cnZlQ3N2KHBDdXJ2ZSwgbnVtX3Nh bXBsZXMsIGdhbW1hX3B0cik7IH0gc3RhdGljIGludCANCitnZXRfY29sb3JfcHJvcGVydHkoaW50 IGRybV9mZCwgaW50IGlkLCBpbnQgb2JqZWN0LA0KKwkJY2hhciAqcHJvcF9uYW1lLCBpbnQgYmxv Yl9pZCkNCit7DQorCWludCBpID0gMCwgcmV0ID0gMDsNCisJdWludDY0X3QgdmFsdWUgPSAwOw0K KwlzdHJ1Y3QgZHJtX2ludGVsX2dhbW1hICpnYW1tYV9kYXRhID0gTlVMTDsNCisJZHJtTW9kZU9i amVjdFByb3BlcnRpZXNQdHIgcHJvcHMgPSBOVUxMOw0KKw0KKwlpZiAoaWQgPCAwIHx8ICgob2Jq ZWN0ICE9IERSTV9NT0RFX09CSkVDVF9DUlRDKSAmJg0KKwkJCQkob2JqZWN0ICE9IERSTV9NT0RF X09CSkVDVF9QTEFORSkpKQ0KKwkJcmV0dXJuIC0xOw0KKwl2YWx1ZSA9IGJsb2JfaWQ7DQorDQor CS8qIEdldCBhbGwgdGhlIHByb3BlcnRpZXMgZnJvbSBvYmplY3QgKi8NCisJcHJvcHMgPSBkcm1N b2RlT2JqZWN0R2V0UHJvcGVydGllcyhkcm1fZmQsIGlkLCBvYmplY3QpOw0KKwlpZiAoIXByb3Bz KQ0KSXRzIGdvb2QgdG8gYWRkIGEgcHJpbnQgZm9yIGZhaWx1cmUgY2FzZS4NCisJCXJldHVybiAt MTsNCisJZm9yIChpID0gMDsgaSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7DQorCQlkcm1N b2RlUHJvcGVydHlQdHIgcHJvcCA9IGRybU1vZGVHZXRQcm9wZXJ0eShkcm1fZmQsDQorCQkJCXBy b3BzLT5wcm9wc1tpXSk7DQorCQlpZiAoc3RyY21wKHByb3AtPm5hbWUsIHByb3BfbmFtZSkgPT0g MCkgew0KKwkJCS8qIEZvdW5kIHByb3BlcnR5LCBub3cgc2V0IHRoZSB2YWx1ZXMgKi8NCisJCQli bG9iX2lkID0gcHJvcHMtPnByb3BfdmFsdWVzW2ldOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwkJZHJt TW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsNCisJfQ0KKw0KKwlyZXQgPSBibG9iX2lkOw0KKwkvKiBG cmVlIHRoZSBhbGxvY2F0ZWQgcHJvcGVydHkgKi8NCisJZHJtTW9kZUZyZWVPYmplY3RQcm9wZXJ0 aWVzKHByb3BzKTsNCisJaWYgKGkgPT0gcHJvcHMtPmNvdW50X3Byb3BzKSB7DQorCQkvKiBQcm9w ZXJ0eSBub3QgZm91bmQgKi8NCisJCXJldHVybiAtMTsNCisJfQ0KKwlyZXR1cm4gcmV0Ow0KK30N CisNCisNCitpbnQgc2V0X2NvbG9yX3Byb3BlcnR5KGludCBkcm1fZmQsIGludCBpZCwgaW50IG9i amVjdCwgY2hhciAqcHJvcF9uYW1lLA0KKwkJCSBpbnQgYmxvYl9pZCkNCit7DQorCWludCBpID0g MCwgcmVzOw0KKw0KKwlkcm1Nb2RlT2JqZWN0UHJvcGVydGllc1B0ciBwcm9wcyA9IE5VTEw7DQor DQorCWlmIChpZCA8IDAgfHwgKChvYmplY3QgIT0gRFJNX01PREVfT0JKRUNUX0NSVEMpICYmDQor CQkJKG9iamVjdCAhPSBEUk1fTU9ERV9PQkpFQ1RfUExBTkUpKSkgew0KU2FtZSBoZXJlLCBhbiBl cnJvciBtZXNzYWdlIHdpbGwgZG8gZ29vZC4NCisJCXJldHVybiAtMTsNCisJfQ0KKw0KKwlwcm9w cyA9IGRybU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVzKGRybV9mZCwgaWQsIG9iamVjdCk7DQorCWlm ICghcHJvcHMpDQorCQlyZXR1cm4gLTE7DQorCWZvciAoaSA9IDA7IGkgPCBwcm9wcy0+Y291bnRf cHJvcHM7IGkrKykgew0KKwkJZHJtTW9kZVByb3BlcnR5UHRyIHByb3AgPSBkcm1Nb2RlR2V0UHJv cGVydHkoZHJtX2ZkLA0KKwkJCQkJCQkgcHJvcHMtPnByb3BzW2ldKTsNCisJCWlmIChzdHJjbXAo cHJvcC0+bmFtZSwgcHJvcF9uYW1lKSA9PSAwKSB7DQorCQkJLyogRm91bmQgcHJvcGVydHksIG5v dyBzZXQgdGhlIHZhbHVlcyAqLw0KKwkJCXJlcyA9IGRybU1vZGVPYmplY3RTZXRQcm9wZXJ0eShk cm1fZmQsIGlkLCBvYmplY3QsDQorCQkJCQkgKHVpbnQzMl90KXByb3AtPnByb3BfaWQsIGJsb2Jf aWQpOw0KKw0KKwkJCWlmIChyZXMpIHsNCisJCQkJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsN CisJCQkJZHJtTW9kZUZyZWVPYmplY3RQcm9wZXJ0aWVzKHByb3BzKTsNCisJCQl9IGVsc2Ugew0K KwkJCQlkcm1Nb2RlRnJlZVByb3BlcnR5KHByb3ApOw0KKwkJCQlicmVhazsNCisJCQl9DQorCQl9 DQorDQorCQlkcm1Nb2RlRnJlZVByb3BlcnR5KHByb3ApOw0KKwl9DQorCWRybU1vZGVGcmVlT2Jq ZWN0UHJvcGVydGllcyhwcm9wcyk7DQorCWlmIChpID09IHByb3BzLT5jb3VudF9wcm9wcykgew0K KwkJLyogUHJvcGVydHkgbm90IGZvdW5kICovDQorCQlyZXR1cm4gLTE7DQorCX0NCisJcmV0dXJu IDA7DQorfQ0KK3ZvaWQgdGVzdF9waXBlX2NzYyhpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3Rf b3V0cHV0X3QgKm91dHB1dCwNCisJCQkJIGlndF9wbGFuZV90ICpwbGFuZSwgaW50IHZhbHVlKQ0K K3sNCisJc3RydWN0IGRybV9pbnRlbF9jc2MgKmNzY19kYXRhID0gTlVMTDsNCisNCisJY3NjX2Rh dGEgPSAoc3RydWN0IGRybV9pbnRlbF9jc2MgKikNCisJCSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBk cm1faW50ZWxfY3NjKSk7DQorCWludCBjc2NfbWF0cml4W0NIVl9DU0NfVkFMU107DQorCWZsb2F0 ICBjc2NfdmFsW0NIVl9DU0NfVkFMU107DQorCWludCBjc2NfcmFuZG9tW0NIVl9DU0NfVkFMU10g PSB7MSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMH07DQorCWludCBjc2NfZGVmYXVsdFtDSFZfQ1ND X1ZBTFNdID0gezEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDF9Ow0KKwlpbnQgaSwgcmVzOw0KKw0K Kwljc2NfZGF0YS0+dmVyc2lvbiA9IDE7DQorCWlmICh2YWx1ZSA9PSBERUZBVUxUKQ0KKwkJbWVt Y3B5KGNzY192YWwsIGNzY19kZWZhdWx0LCBzaXplb2YoY3NjX3ZhbCkpOw0KKwllbHNlDQorCQlt ZW1jcHkoY3NjX3ZhbCwgY3NjX3JhbmRvbSwgc2l6ZW9mKGNzY192YWwpKTsNCisNCisJY3NjV3Jp dGUoY3NjX3ZhbCwgY3NjX21hdHJpeCk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBDSFZfQ1NDX1ZB TFM7IGkrKykNCisJCWNzY19kYXRhLT5jc2NfbWF0cml4W2ldID0gY3NjX21hdHJpeFtpXTsNCisN CisJaW50IGJsb2JfaWQgPSBjcmVhdGVfYmxvYihkaXNwbGF5LT5kcm1fZmQsDQorCQkJIChpbnQg KikoY3NjX2RhdGEpLCBzaXplb2Yoc3RydWN0IGRybV9pbnRlbF9jc2MpKTsNCisNCisJaWd0X2Fz c2VydChibG9iX2lkID4gMCk7DQorDQoJV2Ugc2hvdWxkIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24s IGlmIHRoZSBibG9iIGNyZWF0aW9uIGlzIG5vdCBzdWNjZXNzZnVsLg0KKwlyZXMgPSBzZXRfY29s b3JfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lk LA0KKwkJIERSTV9NT0RFX09CSkVDVF9DUlRDLCAiQ1RNIiwgYmxvYl9pZCk7DQorCWlmIChyZXMg PCAwKQ0KKwkJcHJpbnRmKCJTZXR0aW5nIENTQyBmYWlsZWQhIik7DQorCWZyZWUoY3NjX2RhdGEp Ow0KKw0KKw0KK30NCit2b2lkIHRlc3RfcGlwZV9kZWdhbW1hKGlndF9kaXNwbGF5X3QgKmRpc3Bs YXksIGlndF9vdXRwdXRfdCAqb3V0cHV0LA0KKwkgaWd0X3BsYW5lX3QgKnBsYW5lLCBmbG9hdCBk ZWdhbW1hLCBpbnQgYnJpZ2h0bmVzcywgaW50IGNvbnRyYXN0LA0KKwkJCSB1aW50MzJfdCBnYW1t YV9wcmVjaXNpb24sIHVpbnQzMl90IG51bV9zYW1wbGVzKSB7DQorCXN0cnVjdCBkcm1faW50ZWxf ZGVnYW1tYSAqZGVnYW1tYV9kYXRhID0gIE5VTEw7DQorCWludCByZXMsIHJldDsNCisNCisJZGVn YW1tYV9kYXRhID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2ludGVsX2RlZ2FtbWEpICsNCisJ CQkgKG51bV9zYW1wbGVzICogc2l6ZW9mKHN0cnVjdCByZ2JfcGl4ZWwpKSk7DQorCWRlZ2FtbWFf ZGF0YS0+dmVyc2lvbiA9IDE7DQorCWRlZ2FtbWFfZGF0YS0+bnVtX3NhbXBsZXMgPSBudW1fc2Ft cGxlczsNCisJc3RydWN0IHJnYl9waXhlbCBkZWdhbW1hX3B0cltudW1fc2FtcGxlc107DQorDQor CWdhbW1hUGlwZShicmlnaHRuZXNzLCBjb250cmFzdCwgZGVnYW1tYSwgbnVtX3NhbXBsZXMsIGRl Z2FtbWFfcHRyKTsNCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fc2FtcGxlczsgaSsrKQ0KKwkJ ZGVnYW1tYV9kYXRhLT5kZWdhbW1hX3ZhbHVlc1tpXSA9IGRlZ2FtbWFfcHRyW2ldOw0KKw0KKwlp bnQgYmxvYl9pZCA9IGNyZWF0ZV9ibG9iKGRpc3BsYXktPmRybV9mZCwgKHVpbnQ2NF90ICopKGRl Z2FtbWFfZGF0YSksDQorCQkgc2l6ZW9mKHN0cnVjdCBkcm1faW50ZWxfZGVnYW1tYSkgKyAobnVt X3NhbXBsZXMgKg0KKwkJCSBzaXplb2Yoc3RydWN0IHJnYl9waXhlbCkpKTsNCisNCisJaWd0X2Fz c2VydChibG9iX2lkID4gMCk7DQpTYW1lIGZvciBnYW1tYS4NCisJcmVzID0gc2V0X2NvbG9yX3By b3BlcnR5KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwNCisJ CQkgRFJNX01PREVfT0JKRUNUX0NSVEMsICJQQUxFVFRFX0JFRk9SRV9DVE0iLCBibG9iX2lkKTsN CisJcmV0ID0gZ2V0X2NvbG9yX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LT5jb25m aWcuY3J0Yy0+Y3J0Y19pZCwNCisJCQkgRFJNX01PREVfT0JKRUNUX0NSVEMsICJQQUxFVFRFX0JF Rk9SRV9DVE0iLCBibG9iX2lkKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gLTE7DQorCWlm IChyZXMgPCAwKQ0KKwkJcHJpbnRmKCJTZXR0aW5nIEdhbW1hIGZhaWxlZCEiKTsNCisJZnJlZShk ZWdhbW1hX2RhdGEpOw0KK30NCit2b2lkIHRlc3RfcGlwZV9nYW1tYShpZ3RfZGlzcGxheV90ICpk aXNwbGF5LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwNCisJCQkgaWd0X3BsYW5lX3QgKnBsYW5lLCBm bG9hdCBnYW1tYSwgaW50IGJyaWdodG5lc3MsDQorCQkJIGludCBjb250cmFzdCwgdWludDMyX3Qg Z2FtbWFfcHJlY2lzaW9uLA0KKwkJCQkgdWludDMyX3QgbnVtX3NhbXBsZXMpDQorew0KKwlzdHJ1 Y3QgZHJtX2ludGVsX2dhbW1hICpnYW1tYV9kYXRhID0gIE5VTEw7DQorCWludCByZXMsIHJldDsN CisNCisJZ2FtbWFfZGF0YSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGRybV9pbnRlbF9nYW1tYSkg Kw0KKwkJCSAobnVtX3NhbXBsZXMgKiBzaXplb2Yoc3RydWN0IHJnYl9waXhlbCkpKTsNCisJZ2Ft bWFfZGF0YS0+dmVyc2lvbiA9IDE7DQorCWdhbW1hX2RhdGEtPm51bV9zYW1wbGVzID0gbnVtX3Nh bXBsZXM7DQorCXN0cnVjdCByZ2JfcGl4ZWwgZ2FtbWFfcHRyW251bV9zYW1wbGVzXTsNCisNCisJ Z2FtbWFQaXBlKGJyaWdodG5lc3MsIGNvbnRyYXN0LCBnYW1tYSwgbnVtX3NhbXBsZXMsIGdhbW1h X3B0cik7DQorCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3NhbXBsZXM7IGkrKykNCisJCWdhbW1h X2RhdGEtPmdhbW1hX3ZhbHVlc1tpXSA9IGdhbW1hX3B0cltpXTsNCisNCisNCisJaW50IGJsb2Jf aWQgPSBjcmVhdGVfYmxvYihkaXNwbGF5LT5kcm1fZmQsICh1aW50NjRfdCAqKShnYW1tYV9kYXRh KSwNCisJCQkgc2l6ZW9mKHN0cnVjdCBkcm1faW50ZWxfZ2FtbWEpICsgKG51bV9zYW1wbGVzICoN CisJCQkJCXNpemVvZihzdHJ1Y3QgcmdiX3BpeGVsKSkpOw0KKw0KKwlpZ3RfYXNzZXJ0KGJsb2Jf aWQgPiAwKTsNClNhbWUgZm9yIHNldCBjb2xvciBwcm9wZXJ0eS4NCisJcmVzID0gc2V0X2NvbG9y X3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwN CisJCQkgRFJNX01PREVfT0JKRUNUX0NSVEMsICJQQUxFVFRFX0FGVEVSX0NUTSIsIGJsb2JfaWQp Ow0KKwlyZXQgPSBnZXRfY29sb3JfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXQtPmNv bmZpZy5jcnRjLT5jcnRjX2lkLA0KKwkJCURSTV9NT0RFX09CSkVDVF9DUlRDLCAiUEFMRVRURV9B RlRFUl9DVE0iLCBibG9iX2lkKTsNCisJaWYgKHJldCA8IDApDQpTaG91bGRuJ3Qgd2UgY2hlY2sg dGhpcyBiZWZvcmUgZG9pbmcgYSBnZXRfY29sb3JfcHJvcCBmaXJzdCA/DQorCQlyZXR1cm4gLTE7 DQorCWlmIChyZXMgPCAwKQ0KKwkJcHJpbnRmKCJTZXR0aW5nIEdhbW1hIGZhaWxlZCEiKTsNCisN CisJZnJlZShnYW1tYV9kYXRhKTsNCit9DQordm9pZCB0ZXN0X3BpcGVfY29sb3Ioc3RydWN0IGRh dGFfdCAqZGF0YSwgY2hhciAqcHJvcF9uYW1lLCBpbnQgdmFsdWUpIHsNCisJaWd0X2Rpc3BsYXlf dCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Ow0KKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsNCisJ aWd0X3BsYW5lX3QgKnBsYW5lOw0KKwllbnVtIHBpcGUgcGlwZTsNCisJZW51bSBpZ3RfY29tbWl0 X3N0eWxlIGNvbW1pdCA9IENPTU1JVF9MRUdBQ1k7DQorCWludCByZXMsIGk7DQorCWludCBmYl9p ZCwgZmJfaWQxOw0KKwlpbnQgd2lkdGgsIGhlaWdodDsNCisJdWludDMyX3QgcGl4ZWxmb3JtYXQg PSBEUk1fRk9STUFUX1hSR0I4ODg4Ow0KKw0KKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KGRp c3BsYXksIG91dHB1dCkgew0KKwkJZHJtTW9kZU1vZGVJbmZvICptb2RlOw0KKw0KKwkJcGlwZSA9 IG91dHB1dC0+Y29uZmlnLnBpcGU7DQorDQorCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwg cGlwZSk7DQorCQltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOw0KKwkJLypEcmF3 IHRoZSBpbml0aWFsIHByaW1hcnkgcGxhbmUqLw0KKwkJcGxhbmUgPSBpZ3Rfb3V0cHV0X2dldF9w bGFuZShvdXRwdXQsIElHVF9QTEFORV9QUklNQVJZKTsNCisNCisJCXByZXBhcmVfY3J0YyhkYXRh LCBvdXRwdXQsIHBpcGUsIHBsYW5lLCBtb2RlLCBjb21taXQpOw0KKwkJd2lkdGggPSA2MDA7DQor CQloZWlnaHQgPSA2MDA7DQorDQorCQlwbGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1 dCwgSUdUX1BMQU5FXzIpOw0KKwkJZmJfaWQgPSBpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRy bV9mZCwNCisJCQkJd2lkdGgsIGhlaWdodCwNCisJCQkJcGl4ZWxmb3JtYXQsDQorCQkJCUxPQ0FM X0RSTV9GT1JNQVRfTU9EX05PTkUsDQorCQkJCTEuMCwNCisJCQkJMC4wLA0KKwkJCQkwLjAsDQor CQkJCSZkYXRhLT5mYik7DQorCQlwbGFuZS0+Y3J0Y194ID0gMTAwOw0KKwkJcGxhbmUtPmNydGNf eSA9IDEwMDsNCisJCXBsYW5lLT5mYl9jaGFuZ2VkID0gdHJ1ZTsNCisJCWlndF9wbGFuZV9zZXRf ZmIocGxhbmUsICZkYXRhLT5mYik7DQorCQkvKiBzZXQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgZm9y IHNwcml0ZSBwbGFuZSAyLiAqLw0KKwkJd2lkdGggPSAyMDA7DQorCQloZWlnaHQgPSAyMDA7DQor CQlwbGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgSUdUX1BMQU5FXzMpOw0KKwkJ ZmJfaWQxID0gaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsDQorCQkJCXdpZHRoLCBo ZWlnaHQsDQorCQkJCXBpeGVsZm9ybWF0LA0KKwkJCQlMT0NBTF9EUk1fRk9STUFUX01PRF9OT05F LA0KKwkJCQkxLjAsDQorCQkJCTEuMCwNCisJCQkJMC4wLA0KKwkJCQkmZGF0YS0+ZmIxKTsNCisJ CWlndF9hc3NlcnQoZmJfaWQxKTsNCisNCisJCXBsYW5lLT5jcnRjX3ggPSAzMDsNCisJCXBsYW5l LT5jcnRjX3kgPSAzMDsNCisJCXBsYW5lLT5mYl9jaGFuZ2VkID0gdHJ1ZTsNCisJCWlndF9wbGFu ZV9zZXRfZmIocGxhbmUsICZkYXRhLT5mYjEpOw0KKw0KKwkJaWd0X2Rpc3BsYXlfY29tbWl0Mihk aXNwbGF5LCBjb21taXQpOw0KKwkJdXNsZWVwKDIwMDAwMDApOw0KKwkJaWYgKChzdHJjbXAocHJv cF9uYW1lLCAiZ2FtbWFfcHJvcGVydHlfOGJpdCIpID09IDApICYmDQorCQkJCQl2YWx1ZSA9PSBS QU5ET00pew0KKwkJCXRlc3RfcGlwZV9nYW1tYShkaXNwbGF5LCBvdXRwdXQsIHBsYW5lLCAxLCA1 MCwgNTAsDQorCQkJCQkgSTkxNV9HQU1NQV9QUkVDSVNJT05fTEVHQUNZLA0KKwkJCQkJCSBDSFZf OEJJVF9HQU1NQV9NQVhfVkFMUyk7DQorCQl9IGVsc2UgIGlmICgoc3RyY21wKHByb3BfbmFtZSwg ImdhbW1hX3Byb3BlcnR5XzhiaXQiKSA9PSAwKSAmJg0KKwkJCQkJCXZhbHVlID09IERFRkFVTFQp IHsNCisJCQl0ZXN0X3BpcGVfZ2FtbWEoZGlzcGxheSwgb3V0cHV0LCBwbGFuZSwgMSwgNTAsIDUw LA0KKwkJCQkJIEk5MTVfR0FNTUFfUFJFQ0lTSU9OXzEwQklULCAwKTsNCisJCX0gZWxzZSAgaWYg KChzdHJjbXAocHJvcF9uYW1lLCAiZ2FtbWFfcHJvcGVydHlfMTBiaXQiKSA9PSAwKSAmJg0KKwkJ CQkJdmFsdWUgPT0gREVGQVVMVCkgew0KKwkJCXRlc3RfcGlwZV9nYW1tYShkaXNwbGF5LCBvdXRw dXQsIHBsYW5lLCAxLCA1MCwgNTAsDQorCQkJCQkgSTkxNV9HQU1NQV9QUkVDSVNJT05fMTBCSVQs IDApOw0KKwkJfSBlbHNlICBpZiAoKHN0cmNtcChwcm9wX25hbWUsICJnYW1tYV9wcm9wZXJ0eV8x MGJpdCIpID09IDApICYmDQorCQkJCQkgdmFsdWUgPT0gUkFORE9NKSB7DQorCQkJdGVzdF9waXBl X2dhbW1hKGRpc3BsYXksIG91dHB1dCwgcGxhbmUsIDEsIDUwLCA1MCwNCisJCQkJCSBJOTE1X0dB TU1BX1BSRUNJU0lPTl8xMEJJVCwNCisJCQkJCQlDSFZfMTBCSVRfR0FNTUFfTUFYX1ZBTFMpOw0K Kw0KKwkJfSBlbHNlICBpZiAoKHN0cmNtcChwcm9wX25hbWUsICJjc2NfcHJvcGVydHkiKSA9PSAw KSkgew0KKwkJCXRlc3RfcGlwZV9jc2MoZGlzcGxheSwgb3V0cHV0LCBwbGFuZSwgdmFsdWUpOw0K KwkJfSBlbHNlICBpZiAoKHN0cmNtcChwcm9wX25hbWUsICJkZWdhbW1hX3Byb3BlcnR5IikgPT0g MCkgJiYNCisJCQkJCXZhbHVlID09IFJBTkRPTSkgew0KKwkJCXRlc3RfcGlwZV9kZWdhbW1hKGRp c3BsYXksIG91dHB1dCwgcGxhbmUsIDEsIDUwLCA1MCwNCisJCQkJCSBJOTE1X0dBTU1BX1BSRUNJ U0lPTl8xMEJJVCwgNjUpOw0KKwkJfSBlbHNlICBpZiAoKHN0cmNtcChwcm9wX25hbWUsICJkZWdh bW1hX3Byb3BlcnR5IikgPT0gMCkgJiYNCisJCQkJCXZhbHVlID09IERFRkFVTFQpIHsNCisJCQl0 ZXN0X3BpcGVfZGVnYW1tYShkaXNwbGF5LCBvdXRwdXQsIHBsYW5lLCAxLCA1MCwgNTAsDQorCQkJ CQkgSTkxNV9HQU1NQV9QUkVDSVNJT05fMTBCSVQsIDApOw0KKw0KKwkJfSBlbHNlIHsNCisJCQlw cmludGYoIkludmFsaWQgVGVzdFxuIik7DQorCQl9DQorDQorCQl1c2xlZXAoMjAwMDAwMCk7DQor CQljbGVhbnVwX2ZiKGRhdGEpOw0KKwkJcGxhbmUgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShvdXRw dXQsIElHVF9QTEFORV8zKTsNCisJCWNsZWFudXBfY3J0YyhkYXRhLCBvdXRwdXQsIHBsYW5lKTsN CisJCXBsYW5lID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVfMik7DQor CQljbGVhbnVwX2NydGMoZGF0YSwgb3V0cHV0LCBwbGFuZSk7DQorCQlicmVhazsNCisNCisJfQ0K K30NCisNCitpZ3RfbWFpbg0KK3sNCisJc3RydWN0IGRhdGFfdCBkYXRhID0ge307DQorCWludCBn ZW4gPSAwOw0KKwlpbnQgcGxhbmVfaXQgPSAwLCBpdF9yb3RhdGlvbiA9IDAsIGl0X3RpbGluZyA9 IDA7DQorDQorCWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsNCisNCisJaWd0X2ZpeHR1cmV7DQor CQlkYXRhLmRybV9mZCA9IGRybV9vcGVuX2FueV9tYXN0ZXIoKTsNCisNCisJCWttc3Rlc3Rfc2V0 X3Z0X2dyYXBoaWNzX21vZGUoKTsNCisNCisJCWlndF9kaXNwbGF5X2luaXQoJmRhdGEuZGlzcGxh eSwgZGF0YS5kcm1fZmQpOw0KKwl9DQorCWlndF9zdWJ0ZXN0X2YoIkVuYWJsZV9HYW1tYV84Yml0 Iikgew0KKwkJdGVzdF9waXBlX2NvbG9yKCZkYXRhLCAiZ2FtbWFfcHJvcGVydHlfOGJpdCIsIFJB TkRPTSk7DQorCX0NCisJaWd0X3N1YnRlc3RfZigiRGlzYWJsZV9HYW1tYV84Yml0Iikgew0KKwkJ dGVzdF9waXBlX2NvbG9yKCZkYXRhLCAiZ2FtbWFfcHJvcGVydHlfOGJpdCIsIERFRkFVTFQpOw0K Kwl9DQorCWlndF9zdWJ0ZXN0X2YoIkVuYWJsZV9HYW1tYV8xMGJpdCIpIHsNCisJCXRlc3RfcGlw ZV9jb2xvcigmZGF0YSwgImdhbW1hX3Byb3BlcnR5XzEwYml0IiwgUkFORE9NKTsNCisJfQ0KKwlp Z3Rfc3VidGVzdF9mKCJEaXNhYmxlX0dhbW1hXzEwYml0Iikgew0KKwkJdGVzdF9waXBlX2NvbG9y KCZkYXRhLCAiZ2FtbWFfcHJvcGVydHlfMTBiaXQiLCBERUZBVUxUKTsNCisJfQ0KKw0KKwlpZ3Rf c3VidGVzdF9mKCJFbmFibGVfRGUtZ2FtbWEiKSB7DQorCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEs ICJkZWdhbW1hX3Byb3BlcnR5IiwgUkFORE9NKTsNCisJfQ0KKwlpZ3Rfc3VidGVzdF9mKCJFbmFi bGVfRGUtZ2FtbWEiKSB7DQorCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJkZWdhbW1hX3Byb3Bl cnR5IiwgREVGQVVMVCk7DQorCX0NCisJaWd0X3N1YnRlc3RfZigiRW5hYmxlX0NTQyIpIHsNCisJ CXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgImNzY19wcm9wZXJ0eSIsIFJBTkRPTSk7DQorCX0NCisN CisJaWd0X2ZpeHR1cmV7DQorCQlpZ3RfZGlzcGxheV9maW5pKCZkYXRhLmRpc3BsYXkpOw0KKwl9 DQorfQ0KKw0KLS0NCjEuOS4xDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cg==