Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:39813 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 61566 invoked from network); 10 Aug 2008 22:52:19 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 10 Aug 2008 22:52:19 -0000 Authentication-Results: pb1.pair.com header.from=helly@php.net; sender-id=unknown Authentication-Results: pb1.pair.com smtp.mail=helly@php.net; spf=unknown; sender-id=unknown Received-SPF: unknown (pb1.pair.com: domain php.net does not designate 85.214.94.56 as permitted sender) X-PHP-List-Original-Sender: helly@php.net X-Host-Fingerprint: 85.214.94.56 aixcept.net Linux 2.6 Received: from [85.214.94.56] ([85.214.94.56:45729] helo=h1149922.serverkompetenz.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 41/37-20936-E117F984 for ; Sun, 10 Aug 2008 18:52:19 -0400 Received: from MBOERGER-ZRH.corp.google.com (69-68.106-92.cust.bluewin.ch [92.106.68.69]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by h1149922.serverkompetenz.net (Postfix) with ESMTP id CBDF611F1C0; Mon, 11 Aug 2008 00:52:10 +0200 (CEST) Date: Mon, 11 Aug 2008 00:51:38 +0200 Reply-To: Marcus Boerger X-Priority: 3 (Normal) Message-ID: <1199358810.20080811005138@marcus-boerger.de> To: =?iso-8859-15?Q?Johannes_Schl=FCter?= , Christian Seiler , Felipe Pena CC: Dmitry Stogov , php-dev List In-Reply-To: <803831941.20080809003459@marcus-boerger.de> References: <48886651.80407@gmx.net> <4889F43D.8030609@gmx.net> <4896B0B4.2090801@zend.com> <1217847553.4175.23.camel@goldfinger.johannes.nop> <875726149.20080808234837@marcus-boerger.de> <803831941.20080809003459@marcus-boerger.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------96D83820972375" Subject: Re: [PHP-DEV] [PATCH] Closures and reflection improvements From: helly@php.net (Marcus Boerger) ------------96D83820972375 Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8bit Hello Johannes, Christian, Felipe, and here 5.3 and 6.0 versions that also have most memleaks fixed. marcus Saturday, August 9, 2008, 12:34:59 AM, you wrote: > Hello Christian, Johannes, > Friday, August 8, 2008, 11:48:37 PM, you wrote: >> Hello Christian, >> I updated your patch for 5.3 due to recent changes. It works pretty fine >> for me. Care to test again, especially with your new tests? Note that test >> ext/reflection/tests/closures_001.phpt does not work for me and I have no >> clue why. Well, besides that obviously the closure class no longer has an >> entry for __closure, so it is more a question of how to know when to add >> this. Also, it appears you do not have a cvs account, or did I overlook >> something? >> Modified patch attached, including the updated reflection tests. > Ok, it is actually easy to fix, we just check whether the thing is a > closure and add the method manually, done. New patch attached. > Johannes, this also adresses the switch from E_ERROR to E_RECOVERABLE_ERROR > for the closure handlers. > best regards > marcus >> Monday, August 4, 2008, 12:59:13 PM, you wrote: >>> Christian, >>> On Mon, 2008-08-04 at 11:33 +0400, Dmitry Stogov wrote: >>>> >> http://www.christian-seiler.de/temp/php/2008-07-24-reflection/reflection-closure-fixes-5.3.patch >>>> >> >>>> >> http://www.christian-seiler.de/temp/php/2008-07-24-reflection/reflection-closure-fixes-6.patch >>>> > >>> without applying and testing the patch: >>> - zend_hash_apply_with_arguments(&ce->function_table TSRMLS_CC, >>> (apply_func_args_t) _addmethod, 3, &ce, return_value, filter); >>> + zend_hash_apply_with_arguments(&ce->function_table TSRMLS_CC, >>> (apply_func_args_t) _addmethod, 3, &ce, return_value, filter, intern->obj); >>> that looks a bit strange, probably you want 4 instead of 3 now? >>> johannes >> Best regards, >> Marcus > Best regards, > Marcus Best regards, Marcus ------------96D83820972375 Content-Type: text/plain; name="php-closure-reflection-5.3-20080810.diff.txt" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="php-closure-reflection-5.3-20080810.diff.txt" SW5kZXg6IFplbmQvemVuZF9jbG9zdXJlcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9y ZXBvc2l0b3J5L1plbmRFbmdpbmUyL3plbmRfY2xvc3VyZXMuYyx2CnJldHJpZXZpbmcgcmV2 aXNpb24gMS4zLjIuMTAKZGlmZiAtdSAtcCAtZCAtcjEuMy4yLjEwIHplbmRfY2xvc3VyZXMu YwotLS0gWmVuZC96ZW5kX2Nsb3N1cmVzLmMJNyBBdWcgMjAwOCAxMzozNTo1MSAtMDAwMAkx LjMuMi4xMAorKysgWmVuZC96ZW5kX2Nsb3N1cmVzLmMJMTAgQXVnIDIwMDggMjI6NDg6NDQg LTAwMDAKQEAgLTI2LDExICsyNiwxMCBAQAogI2luY2x1ZGUgInplbmRfb2JqZWN0c19BUEku aCIKICNpbmNsdWRlICJ6ZW5kX2dsb2JhbHMuaCIKIAotI2RlZmluZSBaRU5EX0lOVk9LRV9G VU5DX05BTUUgIl9faW52b2tlIgogI2RlZmluZSBaRU5EX0NMT1NVUkVfUFJJTlRfTkFNRSAi Q2xvc3VyZSBvYmplY3QiCiAKICNkZWZpbmUgWkVORF9DTE9TVVJFX1BST1BFUlRZX0VSUk9S KCkgXAotCXplbmRfZXJyb3IoRV9FUlJPUiwgIkNsb3N1cmUgb2JqZWN0IGNhbm5vdCBoYXZl IHByb3BlcnRpZXMiKQorCXplbmRfZXJyb3IoRV9SRUNPVkVSQUJMRV9FUlJPUiwgIkNsb3N1 cmUgb2JqZWN0IGNhbm5vdCBoYXZlIHByb3BlcnRpZXMiKQogCiB0eXBlZGVmIHN0cnVjdCBf emVuZF9jbG9zdXJlIHsKIAl6ZW5kX29iamVjdCAgICBzdGQ7CkBAIC0zOCw3ICszNyw4IEBA IHR5cGVkZWYgc3RydWN0IF96ZW5kX2Nsb3N1cmUgewogCXp2YWwgICAgICAgICAgKnRoaXNf cHRyOwogfSB6ZW5kX2Nsb3N1cmU7CiAKLXN0YXRpYyB6ZW5kX2NsYXNzX2VudHJ5ICp6ZW5k X2NlX2Nsb3N1cmU7CisvKiBub24tc3RhdGljIHNpbmNlIGl0IG5lZWRzIHRvIGJlIHJlZmVy ZW5jZWQgKi8KK1pFTkRfQVBJIHplbmRfY2xhc3NfZW50cnkgKnplbmRfY2VfY2xvc3VyZTsK IHN0YXRpYyB6ZW5kX29iamVjdF9oYW5kbGVycyBjbG9zdXJlX2hhbmRsZXJzOwogCiBaRU5E X01FVEhPRChDbG9zdXJlLCBfX2ludm9rZSkgLyoge3t7ICovCkBAIC01MCw3ICs1MCw3IEBA IFpFTkRfTUVUSE9EKENsb3N1cmUsIF9faW52b2tlKSAvKiB7e3sgKi8KIAlhcmd1bWVudHMg PSBlbWFsbG9jKHNpemVvZih6dmFsKiopICogWkVORF9OVU1fQVJHUygpKTsKIAlpZiAoemVu ZF9nZXRfcGFyYW1ldGVyc19hcnJheV9leChaRU5EX05VTV9BUkdTKCksIGFyZ3VtZW50cykg PT0gRkFJTFVSRSkgewogCQllZnJlZShhcmd1bWVudHMpOwotCQl6ZW5kX2Vycm9yKEVfRVJS T1IsICJDYW5ub3QgZ2V0IGFyZ3VtZW50cyBmb3IgY2FsbGluZyBjbG9zdXJlIik7CisJCXpl bmRfZXJyb3IoRV9SRUNPVkVSQUJMRV9FUlJPUiwgIkNhbm5vdCBnZXQgYXJndW1lbnRzIGZv ciBjYWxsaW5nIGNsb3N1cmUiKTsKIAkJUkVUVkFMX0ZBTFNFOwogCX0gZWxzZSBpZiAoY2Fs bF91c2VyX2Z1bmN0aW9uX2V4KENHKGZ1bmN0aW9uX3RhYmxlKSwgTlVMTCwgdGhpc19wdHIs ICZjbG9zdXJlX3Jlc3VsdF9wdHIsIFpFTkRfTlVNX0FSR1MoKSwgYXJndW1lbnRzLCAxLCBO VUxMIFRTUk1MU19DQykgPT0gRkFJTFVSRSkgewogCQlSRVRWQUxfRkFMU0U7CkBAIC03NCwy MSArNzQsMjEgQEAgWkVORF9NRVRIT0QoQ2xvc3VyZSwgX19pbnZva2UpIC8qIHt7eyAqLwog CiBzdGF0aWMgemVuZF9mdW5jdGlvbiAqemVuZF9jbG9zdXJlX2dldF9jb25zdHJ1Y3Rvcih6 dmFsICpvYmplY3QgVFNSTUxTX0RDKSAvKiB7e3sgKi8KIHsKLQl6ZW5kX2Vycm9yKEVfRVJS T1IsICJJbnN0YW50aWF0aW9uIG9mICdDbG9zdXJlJyBpcyBub3QgYWxsb3dlZCIpOworCXpl bmRfZXJyb3IoRV9SRUNPVkVSQUJMRV9FUlJPUiwgIkluc3RhbnRpYXRpb24gb2YgJ0Nsb3N1 cmUnIGlzIG5vdCBhbGxvd2VkIik7CiAJcmV0dXJuIE5VTEw7CiB9CiAvKiB9fX0gKi8KIAog c3RhdGljIGludCB6ZW5kX2Nsb3N1cmVfc2VyaWFsaXplKHp2YWwgKm9iamVjdCwgdW5zaWdu ZWQgY2hhciAqKmJ1ZmZlciwgemVuZF91aW50ICpidWZfbGVuLCB6ZW5kX3NlcmlhbGl6ZV9k YXRhICpkYXRhIFRTUk1MU19EQykgLyoge3t7ICovCiB7Ci0JemVuZF9lcnJvcihFX0VSUk9S LCAiU2VyaWFsaXphdGlvbiBvZiAnQ2xvc3VyZScgaXMgbm90IGFsbG93ZWQiKTsKKwl6ZW5k X2Vycm9yKEVfUkVDT1ZFUkFCTEVfRVJST1IsICJTZXJpYWxpemF0aW9uIG9mICdDbG9zdXJl JyBpcyBub3QgYWxsb3dlZCIpOwogCXJldHVybiBGQUlMVVJFOwogfQogLyogfX19ICovCiAK IHN0YXRpYyBpbnQgemVuZF9jbG9zdXJlX3Vuc2VyaWFsaXplKHp2YWwgKipvYmplY3QsIHpl bmRfY2xhc3NfZW50cnkgKmNlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHplbmRfdWlu dCBidWZfbGVuLCB6ZW5kX3Vuc2VyaWFsaXplX2RhdGEgKmRhdGEgVFNSTUxTX0RDKSAvKiB7 e3sgKi8KIHsKLQl6ZW5kX2Vycm9yKEVfRVJST1IsICJVbnNlcmlhbGl6YXRpb24gb2YgJ0Ns b3N1cmUnIGlzIG5vdCBhbGxvd2VkIik7CisJemVuZF9lcnJvcihFX1JFQ09WRVJBQkxFX0VS Uk9SLCAiVW5zZXJpYWxpemF0aW9uIG9mICdDbG9zdXJlJyBpcyBub3QgYWxsb3dlZCIpOwog CXJldHVybiBGQUlMVVJFOwogfQogLyogfX19ICovCkBAIC05OSw2ICs5OSwyNCBAQCBzdGF0 aWMgaW50IHplbmRfY2xvc3VyZV9jb21wYXJlX29iamVjdHMoCiB9CiAvKiB9fX0gKi8KIAor WkVORF9BUEkgemVuZF9mdW5jdGlvbiAqemVuZF9nZXRfY2xvc3VyZV9pbnZva2VfbWV0aG9k KHp2YWwgKm9iaiBUU1JNTFNfREMpIC8qIHt7eyAqLworeworCXplbmRfY2xvc3VyZSAqY2xv c3VyZSA9ICh6ZW5kX2Nsb3N1cmUgKil6ZW5kX29iamVjdF9zdG9yZV9nZXRfb2JqZWN0KG9i aiBUU1JNTFNfQ0MpOwkKKwl6ZW5kX2Z1bmN0aW9uICppbnZva2UgPSAoemVuZF9mdW5jdGlv biopZW1hbGxvYyhzaXplb2YoemVuZF9mdW5jdGlvbikpOworCisJaW52b2tlID0gKHplbmRf ZnVuY3Rpb24qKWVtYWxsb2Moc2l6ZW9mKHplbmRfZnVuY3Rpb24pKTsKKwlpbnZva2UtPmNv bW1vbiA9IGNsb3N1cmUtPmZ1bmMuY29tbW9uOworCWludm9rZS0+dHlwZSA9IFpFTkRfSU5U RVJOQUxfRlVOQ1RJT047CisJaW52b2tlLT5pbnRlcm5hbF9mdW5jdGlvbi5mbl9mbGFncyA9 IFpFTkRfQUNDX1BVQkxJQyB8IFpFTkRfQUNDX0NBTExfVklBX0hBTkRMRVI7CisJaW52b2tl LT5pbnRlcm5hbF9mdW5jdGlvbi5oYW5kbGVyID0gWkVORF9NTihDbG9zdXJlX19faW52b2tl KTsKKwlpbnZva2UtPmludGVybmFsX2Z1bmN0aW9uLm1vZHVsZSA9IDA7CisJaW52b2tlLT5p bnRlcm5hbF9mdW5jdGlvbi5zY29wZSA9IHplbmRfY2VfY2xvc3VyZTsKKwlpbnZva2UtPmlu dGVybmFsX2Z1bmN0aW9uLmZ1bmN0aW9uX25hbWUgPSBlc3RybmR1cChaRU5EX0lOVk9LRV9G VU5DX05BTUUsIHNpemVvZihaRU5EX0lOVk9LRV9GVU5DX05BTUUpLTEpOworCXJldHVybiBp bnZva2U7CisJCit9CisvKiB9fX0gKi8KKwogc3RhdGljIHplbmRfZnVuY3Rpb24gKnplbmRf Y2xvc3VyZV9nZXRfbWV0aG9kKHp2YWwgKipvYmplY3RfcHRyLCBjaGFyICptZXRob2RfbmFt ZSwgaW50IG1ldGhvZF9sZW4gVFNSTUxTX0RDKSAvKiB7e3sgKi8KIHsKIAljaGFyICpsY19u YW1lOwpAQCAtMTA5LDE4ICsxMjcsOCBAQCBzdGF0aWMgemVuZF9mdW5jdGlvbiAqemVuZF9j bG9zdXJlX2dldF9tCiAJaWYgKChtZXRob2RfbGVuID09IHNpemVvZihaRU5EX0lOVk9LRV9G VU5DX05BTUUpLTEpICYmCiAJCW1lbWNtcChsY19uYW1lLCBaRU5EX0lOVk9LRV9GVU5DX05B TUUsIHNpemVvZihaRU5EX0lOVk9LRV9GVU5DX05BTUUpLTEpID09IDAKIAkpIHsKLQkJemVu ZF9jbG9zdXJlICpjbG9zdXJlID0gKHplbmRfY2xvc3VyZSAqKXplbmRfb2JqZWN0X3N0b3Jl X2dldF9vYmplY3QoKm9iamVjdF9wdHIgVFNSTUxTX0NDKTsKLQkJemVuZF9mdW5jdGlvbiAq aW52b2tlID0gKHplbmRfZnVuY3Rpb24qKWVtYWxsb2Moc2l6ZW9mKHplbmRfZnVuY3Rpb24p KTsKLQotCQlpbnZva2UtPmNvbW1vbiA9IGNsb3N1cmUtPmZ1bmMuY29tbW9uOwotCQlpbnZv a2UtPnR5cGUgPSBaRU5EX0lOVEVSTkFMX0ZVTkNUSU9OOwotCQlpbnZva2UtPmludGVybmFs X2Z1bmN0aW9uLmZuX2ZsYWdzID0gWkVORF9BQ0NfQ0FMTF9WSUFfSEFORExFUjsKLQkJaW52 b2tlLT5pbnRlcm5hbF9mdW5jdGlvbi5oYW5kbGVyID0gWkVORF9NTihDbG9zdXJlX19faW52 b2tlKTsKLQkJaW52b2tlLT5pbnRlcm5hbF9mdW5jdGlvbi5tb2R1bGUgPSAwOwotCQlpbnZv a2UtPmludGVybmFsX2Z1bmN0aW9uLnNjb3BlID0gemVuZF9jZV9jbG9zdXJlOwotCQlpbnZv a2UtPmludGVybmFsX2Z1bmN0aW9uLmZ1bmN0aW9uX25hbWUgPSBlc3RybmR1cChaRU5EX0lO Vk9LRV9GVU5DX05BTUUsIHNpemVvZihaRU5EX0lOVk9LRV9GVU5DX05BTUUpLTEpOwogCQlm cmVlX2FsbG9jYShsY19uYW1lLCB1c2VfaGVhcCk7Ci0JCXJldHVybiBpbnZva2U7CisJCXJl dHVybiB6ZW5kX2dldF9jbG9zdXJlX2ludm9rZV9tZXRob2QoKm9iamVjdF9wdHIgVFNSTUxT X0NDKTsKIAl9CiAJZnJlZV9hbGxvY2EobGNfbmFtZSwgdXNlX2hlYXApOwogCXJldHVybiBO VUxMOwpAQCAtMTcwLDcgKzE3OCw3IEBAIHN0YXRpYyB2b2lkIHplbmRfY2xvc3VyZV9mcmVl X3N0b3JhZ2Uodm8KIAkJemVuZF9leGVjdXRlX2RhdGEgKmV4ID0gRUcoY3VycmVudF9leGVj dXRlX2RhdGEpOwogCQl3aGlsZSAoZXgpIHsKIAkJCWlmIChleC0+b3BfYXJyYXkgPT0gJmNs b3N1cmUtPmZ1bmMub3BfYXJyYXkpIHsKLQkJCQl6ZW5kX2Vycm9yKEVfRVJST1IsICJDYW5u b3QgZGVzdHJveSBhY3RpdmUgbGFtYmRhIGZ1bmN0aW9uIik7CisJCQkJemVuZF9lcnJvcihF X1JFQ09WRVJBQkxFX0VSUk9SLCAiQ2Fubm90IGRlc3Ryb3kgYWN0aXZlIGxhbWJkYSBmdW5j dGlvbiIpOwogCQkJfQogCQkJZXggPSBleC0+cHJldl9leGVjdXRlX2RhdGE7CiAJCX0KSW5k ZXg6IFplbmQvemVuZF9jbG9zdXJlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9yZXBv c2l0b3J5L1plbmRFbmdpbmUyL3plbmRfY2xvc3VyZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4xLjIuMgpkaWZmIC11IC1wIC1kIC1yMS4xLjIuMiB6ZW5kX2Nsb3N1cmVzLmgKLS0t IFplbmQvemVuZF9jbG9zdXJlcy5oCTE0IEp1bCAyMDA4IDA5OjQ4OjU5IC0wMDAwCTEuMS4y LjIKKysrIFplbmQvemVuZF9jbG9zdXJlcy5oCTEwIEF1ZyAyMDA4IDIyOjQ4OjQ0IC0wMDAw CkBAIC0yNCwxMCArMjQsMTUgQEAKIAogQkVHSU5fRVhURVJOX0MoKQogCisjZGVmaW5lIFpF TkRfSU5WT0tFX0ZVTkNfTkFNRSAiX19pbnZva2UiCisKIHZvaWQgemVuZF9yZWdpc3Rlcl9j bG9zdXJlX2NlKFRTUk1MU19EKTsKIAorZXh0ZXJuIFpFTkRfQVBJIHplbmRfY2xhc3NfZW50 cnkgKnplbmRfY2VfY2xvc3VyZTsKKwogWkVORF9BUEkgdm9pZCB6ZW5kX2NyZWF0ZV9jbG9z dXJlKHp2YWwgKnJlcywgemVuZF9mdW5jdGlvbiAqb3BfYXJyYXksIHplbmRfY2xhc3NfZW50 cnkgKnNjb3BlLCB6dmFsICp0aGlzX3B0ciBUU1JNTFNfREMpOwogWkVORF9BUEkgaW50IHpl bmRfZ2V0X2Nsb3N1cmUoenZhbCAqb2JqLCB6ZW5kX2NsYXNzX2VudHJ5ICoqY2VfcHRyLCB6 ZW5kX2Z1bmN0aW9uICoqZnB0cl9wdHIsIHp2YWwgKip6b2JqX3B0ciwgenZhbCAqKip6b2Jq X3B0cl9wdHIgVFNSTUxTX0RDKTsKK1pFTkRfQVBJIHplbmRfZnVuY3Rpb24gKnplbmRfZ2V0 X2Nsb3N1cmVfaW52b2tlX21ldGhvZCh6dmFsICpvYmogVFNSTUxTX0RDKTsKIAogRU5EX0VY VEVSTl9DKCkKIApJbmRleDogWmVuZC90ZXN0cy9jbG9zdXJlXzAxNy5waHB0Cj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L1plbmRFbmdpbmUyL3Rlc3RzL2Nsb3N1cmVf MDE3LnBocHQsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4yLjEKZGlmZiAtdSAtcCAtZCAt cjEuMS4yLjEgY2xvc3VyZV8wMTcucGhwdAotLS0gWmVuZC90ZXN0cy9jbG9zdXJlXzAxNy5w aHB0CTE0IEp1bCAyMDA4IDEzOjM2OjQwIC0wMDAwCTEuMS4yLjEKKysrIFplbmQvdGVzdHMv Y2xvc3VyZV8wMTcucGhwdAkxMCBBdWcgMjAwOCAyMjo0ODo0NCAtMDAwMApAQCAtOSw0ICs5 LDQgQEAgJGEoJGEpOwogCiA/PgogLS1FWFBFQ1RGLS0KLUZhdGFsIGVycm9yOiBDYW5ub3Qg ZGVzdHJveSBhY3RpdmUgbGFtYmRhIGZ1bmN0aW9uIGluICVzIG9uIGxpbmUgJWQKK0NhdGNo YWJsZSBmYXRhbCBlcnJvcjogQ2Fubm90IGRlc3Ryb3kgYWN0aXZlIGxhbWJkYSBmdW5jdGlv biBpbiAlcyBvbiBsaW5lICVkCkluZGV4OiBaZW5kL3Rlc3RzL2Nsb3N1cmVfMDIyLnBocHQK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvWmVuZEVuZ2luZTIvdGVzdHMv Y2xvc3VyZV8wMjIucGhwdCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjIuMgpkaWZmIC11 IC1wIC1kIC1yMS4xLjIuMiBjbG9zdXJlXzAyMi5waHB0Ci0tLSBaZW5kL3Rlc3RzL2Nsb3N1 cmVfMDIyLnBocHQJMjIgSnVsIDIwMDggMDc6Mjk6MzEgLTAwMDAJMS4xLjIuMgorKysgWmVu ZC90ZXN0cy9jbG9zdXJlXzAyMi5waHB0CTEwIEF1ZyAyMDA4IDIyOjQ4OjQ0IC0wMDAwCkBA IC04LDUgKzgsNSBAQCAkZm9vID0gZnVuY3Rpb24oKSB1c2UgKCRhKSB7CiAkZm9vLT5hID0g MTsKID8+CiAtLUVYUEVDVEYtLQotRmF0YWwgZXJyb3I6IENsb3N1cmUgb2JqZWN0IGNhbm5v dCBoYXZlIHByb3BlcnRpZXMgaW4gJXNjbG9zdXJlXzAyMi5waHAgb24gbGluZSA1CitDYXRj aGFibGUgZmF0YWwgZXJyb3I6IENsb3N1cmUgb2JqZWN0IGNhbm5vdCBoYXZlIHByb3BlcnRp ZXMgaW4gJXNjbG9zdXJlXzAyMi5waHAgb24gbGluZSA1CiAKSW5kZXg6IGV4dC9yZWZsZWN0 aW9uL3BocF9yZWZsZWN0aW9uLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRv cnkvcGhwLXNyYy9leHQvcmVmbGVjdGlvbi9waHBfcmVmbGVjdGlvbi5jLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjE2NC4yLjMzLjIuNDUuMi4yNwpkaWZmIC11IC1wIC1kIC1yMS4xNjQu Mi4zMy4yLjQ1LjIuMjcgcGhwX3JlZmxlY3Rpb24uYwotLS0gZXh0L3JlZmxlY3Rpb24vcGhw X3JlZmxlY3Rpb24uYwk4IEF1ZyAyMDA4IDEwOjUyOjQ4IC0wMDAwCTEuMTY0LjIuMzMuMi40 NS4yLjI3CisrKyBleHQvcmVmbGVjdGlvbi9waHBfcmVmbGVjdGlvbi5jCTEwIEF1ZyAyMDA4 IDIyOjQ4OjQ1IC0wMDAwCkBAIC0xOTcsNiArMTk3LDggQEAgdHlwZWRlZiBzdHJ1Y3Qgewog CXplbmRfb2JqZWN0IHpvOwogCXZvaWQgKnB0cjsKIAl1bnNpZ25lZCBpbnQgZnJlZV9wdHI6 MTsKKwl1bnNpZ25lZCBpbnQgaXNfZnVuY3Rpb246MTsKKwl1bnNpZ25lZCBpbnQgaXNfcGFy YW1yZWY6MTsKIAl6dmFsICpvYmo7CiAJemVuZF9jbGFzc19lbnRyeSAqY2U7CiB9IHJlZmxl Y3Rpb25fb2JqZWN0OwpAQCAtMjI0LDE0ICsyMjYsMzQgQEAgc3RhdGljIHZvaWQgcmVmbGVj dGlvbl9yZWdpc3Rlcl9pbXBsZW1lbgogCWNsYXNzX2VudHJ5LT5pbnRlcmZhY2VzW251bV9p bnRlcmZhY2VzIC0gMV0gPSBpbnRlcmZhY2VfZW50cnk7CiB9CiAKK3N0YXRpYyB2b2lkIF9m cmVlX2Z1bmN0aW9uKHplbmRfZnVuY3Rpb24gKmZwdHIgVFNSTUxTX0RDKSAvKiB7e3sgKi8K K3sKKwlpZiAoZnB0cgorCQkmJiBmcHRyLT50eXBlICE9IFpFTkRfVVNFUl9GVU5DVElPTgor CQkmJiAoZnB0ci0+aW50ZXJuYWxfZnVuY3Rpb24uZm5fZmxhZ3MgJiBaRU5EX0FDQ19DQUxM X1ZJQV9IQU5ETEVSKSAhPSAwCisJKSB7CisJCWVmcmVlKGZwdHItPmludGVybmFsX2Z1bmN0 aW9uLmZ1bmN0aW9uX25hbWUpOworCQllZnJlZShmcHRyKTsKKwl9Cit9CisvKiB9fX0gKi8K Kwogc3RhdGljIHZvaWQgcmVmbGVjdGlvbl9mcmVlX29iamVjdHNfc3RvcmFnZSh2b2lkICpv YmplY3QgVFNSTUxTX0RDKQogewogCXJlZmxlY3Rpb25fb2JqZWN0ICppbnRlcm4gPSAocmVm bGVjdGlvbl9vYmplY3QgKikgb2JqZWN0OwogCi0JaWYgKGludGVybi0+ZnJlZV9wdHIgJiYg aW50ZXJuLT5wdHIpIHsKLQkJZWZyZWUoaW50ZXJuLT5wdHIpOwotCQlpbnRlcm4tPnB0ciA9 IE5VTEw7CisJaWYgKGludGVybi0+cHRyKSB7CisJCWlmIChpbnRlcm4tPmlzX3BhcmFtcmVm KSB7CisJCQlwYXJhbWV0ZXJfcmVmZXJlbmNlICpyZWZlcmVuY2UgPSAocGFyYW1ldGVyX3Jl ZmVyZW5jZSopaW50ZXJuLT5wdHI7CisJCQlfZnJlZV9mdW5jdGlvbihyZWZlcmVuY2UtPmZw dHIgVFNSTUxTX0NDKTsKKwkJCWVmcmVlKGludGVybi0+cHRyKTsKKwkJfSBlbHNlIGlmIChp bnRlcm4tPmlzX2Z1bmN0aW9uKSB7CisJCQlfZnJlZV9mdW5jdGlvbihpbnRlcm4tPnB0ciBU U1JNTFNfQ0MpOworCQl9IGVsc2UgaWYgKGludGVybi0+ZnJlZV9wdHIpIHsKKwkJCWVmcmVl KGludGVybi0+cHRyKTsKKwkJfQogCX0KKwlpbnRlcm4tPnB0ciA9IE5VTEw7CiAJaWYgKGlu dGVybi0+b2JqKSB7CiAJCXp2YWxfcHRyX2R0b3IoJmludGVybi0+b2JqKTsKIAl9CkBAIC0y NDcsNiArMjY5LDkgQEAgc3RhdGljIHZvaWQgcmVmbGVjdGlvbl9vYmplY3RzX2Nsb25lKHZv aQogCXplbmRfb2JqZWN0X3N0ZF9pbml0KCYoKmludGVybl9jbG9uZSktPnpvLCBpbnRlcm4t PnpvLmNlIFRTUk1MU19DQyk7CiAJKCppbnRlcm5fY2xvbmUpLT5wdHIgPSBpbnRlcm4tPnB0 cjsKIAkoKmludGVybl9jbG9uZSktPmZyZWVfcHRyID0gaW50ZXJuLT5mcmVlX3B0cjsKKwko KmludGVybl9jbG9uZSktPmlzX2Z1bmN0aW9uID0gaW50ZXJuLT5pc19mdW5jdGlvbjsKKwko KmludGVybl9jbG9uZSktPmlzX3BhcmFtcmVmID0gaW50ZXJuLT5pc19wYXJhbXJlZjsKKwkv KiBUT0RPOiBjYW5ub3QgY2xvbmUgYmVjYXVzZSBzb21ldGhpbmcgdGhhdCByZWZlcmVuY2Vz IGEgY2xvc3VyZSB3b3VsZCBiZSBkb3VibGUgZnJlZSdkICovCiAJKCppbnRlcm5fY2xvbmUp LT5vYmogPSBpbnRlcm4tPm9iajsKIAlpZiAoaW50ZXJuLT5vYmopIHsKIAkJenZhbF9hZGRf cmVmKCZpbnRlcm4tPm9iaik7CkBAIC0yNjUsNiArMjkwLDggQEAgc3RhdGljIHplbmRfb2Jq ZWN0X3ZhbHVlIHJlZmxlY3Rpb25fb2JqZQogCWludGVybi0+cHRyID0gTlVMTDsKIAlpbnRl cm4tPm9iaiA9IE5VTEw7CiAJaW50ZXJuLT5mcmVlX3B0ciA9IDA7CisJaW50ZXJuLT5pc19m dW5jdGlvbiA9IDA7CisJaW50ZXJuLT5pc19wYXJhbXJlZiA9IDA7CiAKIAl6ZW5kX29iamVj dF9zdGRfaW5pdCgmaW50ZXJuLT56bywgY2xhc3NfdHlwZSBUU1JNTFNfQ0MpOwogCXplbmRf aGFzaF9jb3B5KGludGVybi0+em8ucHJvcGVydGllcywgJmNsYXNzX3R5cGUtPmRlZmF1bHRf cHJvcGVydGllcywgKGNvcHlfY3Rvcl9mdW5jX3QpIHp2YWxfYWRkX3JlZiwgKHZvaWQgKikg JnRtcCwgc2l6ZW9mKHp2YWwgKikpOwpAQCAtNTM2LDkgKzU2MywyMCBAQCBzdGF0aWMgdm9p ZCBfY2xhc3Nfc3RyaW5nKHN0cmluZyAqc3RyLCB6CiAJCQkJCSAgICB6ZW5kX2hhc2hfZ2V0 X2N1cnJlbnRfa2V5X2V4KCZjZS0+ZnVuY3Rpb25fdGFibGUsICZrZXksICZrZXlfbGVuLCAm bnVtX2luZGV4LCAwLCAmcG9zKSAhPSBIQVNIX0tFWV9JU19TVFJJTkcgfHwKIAkJCQkJICAg IHplbmRfYmluYXJ5X3N0cmNhc2VjbXAoa2V5LCBrZXlfbGVuLTEsIG1wdHItPmNvbW1vbi5m dW5jdGlvbl9uYW1lLCBsZW4pID09IDApIHsKIAorCQkJCQkJemVuZF9mdW5jdGlvbiAqY2xv c3VyZTsKKwkJCQkJCS8qIHNlZSBpZiB0aGlzIGlzIGEgY2xvc3VyZSAqLworCQkJCQkJaWYg KGNlID09IHplbmRfY2VfY2xvc3VyZSAmJiBvYmogJiYgKGxlbiA9PSBzaXplb2YoWkVORF9J TlZPS0VfRlVOQ19OQU1FKS0xKSAmJgorCQkJCQkJCW1lbWNtcChtcHRyLT5jb21tb24uZnVu Y3Rpb25fbmFtZSwgWkVORF9JTlZPS0VfRlVOQ19OQU1FLCBzaXplb2YoWkVORF9JTlZPS0Vf RlVOQ19OQU1FKS0xKSA9PSAwICYmCisJCQkJCQkJKGNsb3N1cmUgPSB6ZW5kX2dldF9jbG9z dXJlX2ludm9rZV9tZXRob2Qob2JqIFRTUk1MU19DQykpICE9IE5VTEwKKwkJCQkJCSkgewor CQkJCQkJCW1wdHIgPSBjbG9zdXJlOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQljbG9zdXJl ID0gTlVMTDsKKwkJCQkJCX0KIAkJCQkJCXN0cmluZ19wcmludGYoJmR5biwgIlxuIik7CiAJ CQkJCQlfZnVuY3Rpb25fc3RyaW5nKCZkeW4sIG1wdHIsIGNlLCBzdWJfaW5kZW50LnN0cmlu ZyBUU1JNTFNfQ0MpOwogCQkJCQkJY291bnQrKzsKKwkJCQkJCV9mcmVlX2Z1bmN0aW9uKGNs b3N1cmUgVFNSTUxTX0NDKTsKIAkJCQkJfQogCQkJCX0KIAkJCQl6ZW5kX2hhc2hfbW92ZV9m b3J3YXJkX2V4KCZjZS0+ZnVuY3Rpb25fdGFibGUsICZwb3MpOwpAQCAtMTA0MCw2ICsxMDc4 LDggQEAgUEhQQVBJIHZvaWQgemVuZF9yZWZsZWN0aW9uX2NsYXNzX2ZhY3RvcgogCWludGVy biA9IChyZWZsZWN0aW9uX29iamVjdCAqKSB6ZW5kX29iamVjdF9zdG9yZV9nZXRfb2JqZWN0 KG9iamVjdCBUU1JNTFNfQ0MpOwogCWludGVybi0+cHRyID0gY2U7CiAJaW50ZXJuLT5mcmVl X3B0ciA9IDA7CisJaW50ZXJuLT5pc19mdW5jdGlvbiA9IDA7CisJaW50ZXJuLT5pc19wYXJh bXJlZiA9IDA7CiAJaW50ZXJuLT5jZSA9IGNlOwogCXplbmRfaGFzaF91cGRhdGUoWl9PQkpQ Uk9QX1Aob2JqZWN0KSwgIm5hbWUiLCBzaXplb2YoIm5hbWUiKSwgKHZvaWQgKiopICZuYW1l LCBzaXplb2YoenZhbCAqKSwgTlVMTCk7CiB9CkBAIC0xMDY5LDYgKzExMDksOCBAQCBzdGF0 aWMgdm9pZCByZWZsZWN0aW9uX2V4dGVuc2lvbl9mYWN0b3J5CiAJWlZBTF9TVFJJTkdMKG5h bWUsIG1vZHVsZS0+bmFtZSwgbmFtZV9sZW4sIDEpOwogCWludGVybi0+cHRyID0gbW9kdWxl OwogCWludGVybi0+ZnJlZV9wdHIgPSAwOworCWludGVybi0+aXNfZnVuY3Rpb24gPSAwOwor CWludGVybi0+aXNfcGFyYW1yZWYgPSAwOwogCWludGVybi0+Y2UgPSBOVUxMOwogCXplbmRf aGFzaF91cGRhdGUoWl9PQkpQUk9QX1Aob2JqZWN0KSwgIm5hbWUiLCBzaXplb2YoIm5hbWUi KSwgKHZvaWQgKiopICZuYW1lLCBzaXplb2YoenZhbCAqKSwgTlVMTCk7CiB9CkBAIC0xMDk2 LDYgKzExMzgsOCBAQCBzdGF0aWMgdm9pZCByZWZsZWN0aW9uX3BhcmFtZXRlcl9mYWN0b3J5 CiAJcmVmZXJlbmNlLT5mcHRyID0gZnB0cjsKIAlpbnRlcm4tPnB0ciA9IHJlZmVyZW5jZTsK IAlpbnRlcm4tPmZyZWVfcHRyID0gMTsKKwlpbnRlcm4tPmlzX2Z1bmN0aW9uID0gMDsKKwlp bnRlcm4tPmlzX3BhcmFtcmVmID0gMTsKIAlpbnRlcm4tPmNlID0gZnB0ci0+Y29tbW9uLnNj b3BlOwogCXplbmRfaGFzaF91cGRhdGUoWl9PQkpQUk9QX1Aob2JqZWN0KSwgIm5hbWUiLCBz aXplb2YoIm5hbWUiKSwgKHZvaWQgKiopICZuYW1lLCBzaXplb2YoenZhbCAqKSwgTlVMTCk7 CiB9CkBAIC0xMTE0LDYgKzExNTgsOCBAQCBzdGF0aWMgdm9pZCByZWZsZWN0aW9uX2Z1bmN0 aW9uX2ZhY3RvcnkoCiAJaW50ZXJuID0gKHJlZmxlY3Rpb25fb2JqZWN0ICopIHplbmRfb2Jq ZWN0X3N0b3JlX2dldF9vYmplY3Qob2JqZWN0IFRTUk1MU19DQyk7CiAJaW50ZXJuLT5wdHIg PSBmdW5jdGlvbjsKIAlpbnRlcm4tPmZyZWVfcHRyID0gMDsKKwlpbnRlcm4tPmlzX2Z1bmN0 aW9uID0gMTsKKwlpbnRlcm4tPmlzX3BhcmFtcmVmID0gMDsKIAlpbnRlcm4tPmNlID0gTlVM TDsKIAl6ZW5kX2hhc2hfdXBkYXRlKFpfT0JKUFJPUF9QKG9iamVjdCksICJuYW1lIiwgc2l6 ZW9mKCJuYW1lIiksICh2b2lkICoqKSAmbmFtZSwgc2l6ZW9mKHp2YWwgKiksIE5VTEwpOwog fQpAQCAtMTEzNCw2ICsxMTgwLDggQEAgc3RhdGljIHZvaWQgcmVmbGVjdGlvbl9tZXRob2Rf ZmFjdG9yeSh6ZQogCWludGVybiA9IChyZWZsZWN0aW9uX29iamVjdCAqKSB6ZW5kX29iamVj dF9zdG9yZV9nZXRfb2JqZWN0KG9iamVjdCBUU1JNTFNfQ0MpOwogCWludGVybi0+cHRyID0g bWV0aG9kOwogCWludGVybi0+ZnJlZV9wdHIgPSAwOworCWludGVybi0+aXNfZnVuY3Rpb24g PSAxOworCWludGVybi0+aXNfcGFyYW1yZWYgPSAwOwogCWludGVybi0+Y2UgPSBjZTsKIAl6 ZW5kX2hhc2hfdXBkYXRlKFpfT0JKUFJPUF9QKG9iamVjdCksICJuYW1lIiwgc2l6ZW9mKCJu YW1lIiksICh2b2lkICoqKSAmbmFtZSwgc2l6ZW9mKHp2YWwgKiksIE5VTEwpOwogCXplbmRf aGFzaF91cGRhdGUoWl9PQkpQUk9QX1Aob2JqZWN0KSwgImNsYXNzIiwgc2l6ZW9mKCJjbGFz cyIpLCAodm9pZCAqKikgJmNsYXNzbmFtZSwgc2l6ZW9mKHp2YWwgKiksIE5VTEwpOwpAQCAt MTE4MSw2ICsxMjI5LDggQEAgc3RhdGljIHZvaWQgcmVmbGVjdGlvbl9wcm9wZXJ0eV9mYWN0 b3J5KAogCXJlZmVyZW5jZS0+aWdub3JlX3Zpc2liaWxpdHkgPSAwOwogCWludGVybi0+cHRy ID0gcmVmZXJlbmNlOwogCWludGVybi0+ZnJlZV9wdHIgPSAxOworCWludGVybi0+aXNfZnVu Y3Rpb24gPSAwOworCWludGVybi0+aXNfcGFyYW1yZWYgPSAwOwogCWludGVybi0+Y2UgPSBj ZTsKIAl6ZW5kX2hhc2hfdXBkYXRlKFpfT0JKUFJPUF9QKG9iamVjdCksICJuYW1lIiwgc2l6 ZW9mKCJuYW1lIiksICh2b2lkICoqKSAmbmFtZSwgc2l6ZW9mKHp2YWwgKiksIE5VTEwpOwog CXplbmRfaGFzaF91cGRhdGUoWl9PQkpQUk9QX1Aob2JqZWN0KSwgImNsYXNzIiwgc2l6ZW9m KCJjbGFzcyIpLCAodm9pZCAqKikgJmNsYXNzbmFtZSwgc2l6ZW9mKHp2YWwgKiksIE5VTEwp OwpAQCAtMTQxMiw2ICsxNDYyLDggQEAgWkVORF9NRVRIT0QocmVmbGVjdGlvbl9mdW5jdGlv biwgX19jb25zdAogCXplbmRfaGFzaF91cGRhdGUoWl9PQkpQUk9QX1Aob2JqZWN0KSwgIm5h bWUiLCBzaXplb2YoIm5hbWUiKSwgKHZvaWQgKiopICZuYW1lLCBzaXplb2YoenZhbCAqKSwg TlVMTCk7CiAJaW50ZXJuLT5wdHIgPSBmcHRyOwogCWludGVybi0+ZnJlZV9wdHIgPSAwOwor CWludGVybi0+aXNfZnVuY3Rpb24gPSAxOworCWludGVybi0+aXNfcGFyYW1yZWYgPSAwOwog CWludGVybi0+Y2UgPSBOVUxMOwogfQogLyogfX19ICovCkBAIC0xODkwLDE1ICsxOTQyLDM0 IEBAIFpFTkRfTUVUSE9EKHJlZmxlY3Rpb25fcGFyYW1ldGVyLCBfX2NvbnMKIAkJCQljb252 ZXJ0X3RvX3N0cmluZ19leChtZXRob2QpOwogCQkJCWxjbmFtZV9sZW4gPSBaX1NUUkxFTl9Q UChtZXRob2QpOwogCQkJCWxjbmFtZSA9IHplbmRfc3RyX3RvbG93ZXJfZHVwKFpfU1RSVkFM X1BQKG1ldGhvZCksIGxjbmFtZV9sZW4pOwotCQkJCWlmICh6ZW5kX2hhc2hfZmluZCgmY2Ut PmZ1bmN0aW9uX3RhYmxlLCBsY25hbWUsIGxjbmFtZV9sZW4gKyAxLCAodm9pZCAqKikgJmZw dHIpID09IEZBSUxVUkUpIHsKKwkJCQlpZiAoY2UgPT0gemVuZF9jZV9jbG9zdXJlICYmIFpf VFlQRV9QUChjbGFzc3JlZikgPT0gSVNfT0JKRUNUICYmCisJCQkJCShsY25hbWVfbGVuID09 IHNpemVvZihaRU5EX0lOVk9LRV9GVU5DX05BTUUpLTEpICYmCisJCQkJCW1lbWNtcChsY25h bWUsIFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSwgc2l6ZW9mKFpFTkRfSU5WT0tFX0ZVTkNfTkFN RSktMSkgPT0gMCAmJgorCQkJCQkoZnB0ciA9IHplbmRfZ2V0X2Nsb3N1cmVfaW52b2tlX21l dGhvZCgqY2xhc3NyZWYgVFNSTUxTX0NDKSkgIT0gTlVMTAorCQkJCSkgeworCQkJCQkvKiBu b3RoaWduIHRvIGRvICovCisJCQkJfSBlbHNlIGlmICh6ZW5kX2hhc2hfZmluZCgmY2UtPmZ1 bmN0aW9uX3RhYmxlLCBsY25hbWUsIGxjbmFtZV9sZW4gKyAxLCAodm9pZCAqKikgJmZwdHIp ID09IEZBSUxVUkUpIHsKIAkJCQkJZWZyZWUobGNuYW1lKTsKIAkJCQkJemVuZF90aHJvd19l eGNlcHRpb25fZXgocmVmbGVjdGlvbl9leGNlcHRpb25fcHRyLCAwIFRTUk1MU19DQywgCi0J CQkJCQkiTWV0aG9kICVzOjolcygpIGRvZXMgbm90IGV4aXN0IiwgWl9TVFJWQUxfUFAoY2xh c3NyZWYpLCBaX1RZUEVfUFAobWV0aG9kKSwgWl9TVFJWQUxfUFAobWV0aG9kKSk7CisJCQkJ CQkiTWV0aG9kICVzOjolcygpIGRvZXMgbm90IGV4aXN0IiwgY2UtPm5hbWUsIFpfU1RSVkFM X1BQKG1ldGhvZCkpOwogCQkJCQlyZXR1cm47CiAJCQkJfQogCQkJCWVmcmVlKGxjbmFtZSk7 CiAJCQl9CiAJCQlicmVhazsKKwkJCisJCWNhc2UgSVNfT0JKRUNUOiB7CisJCQkJY2UgPSBa X09CSkNFX1AocmVmZXJlbmNlKTsKKwkJCQkKKwkJCQlpZiAoY2UgPT0gemVuZF9jZV9jbG9z dXJlICYmIChmcHRyID0gemVuZF9nZXRfY2xvc3VyZV9pbnZva2VfbWV0aG9kKHJlZmVyZW5j ZSBUU1JNTFNfQ0MpKSAhPSBOVUxMKSB7CisJCQkJCS8qIGRvIG5vdGhpbmcsIGZwdHIgaXMg YWxyZWFkeSBzZXQgKi8KKwkJCQl9IGVsc2UgaWYgKHplbmRfaGFzaF9maW5kKCZjZS0+ZnVu Y3Rpb25fdGFibGUsIFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSwgc2l6ZW9mKFpFTkRfSU5WT0tF X0ZVTkNfTkFNRSksICh2b2lkICoqKSZmcHRyKSA9PSBGQUlMVVJFKSB7CisJCQkJCXplbmRf dGhyb3dfZXhjZXB0aW9uX2V4KHJlZmxlY3Rpb25fZXhjZXB0aW9uX3B0ciwgMCBUU1JNTFNf Q0MsCisJCQkJCQkiTWV0aG9kICVzOjolcygpIGRvZXMgbm90IGV4aXN0IiwgY2UtPm5hbWUs IFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQl9CisJ CQlicmVhazsKIAkJCQogCQlkZWZhdWx0OgogCQkJX0RPX1RIUk9XKCJUaGUgcGFyYW1ldGVy IGNsYXNzIGlzIGV4cGVjdGVkIHRvIGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBhcnJheShj bGFzcywgbWV0aG9kKSIpOwpAQCAtMTk0NSw2ICsyMDE2LDggQEAgWkVORF9NRVRIT0QocmVm bGVjdGlvbl9wYXJhbWV0ZXIsIF9fY29ucwogCXJlZi0+ZnB0ciA9IGZwdHI7CiAJaW50ZXJu LT5wdHIgPSByZWY7CiAJaW50ZXJuLT5mcmVlX3B0ciA9IDE7CisJaW50ZXJuLT5pc19mdW5j dGlvbiA9IDA7CisJaW50ZXJuLT5pc19wYXJhbXJlZiA9IDE7CiAJaW50ZXJuLT5jZSA9IGNl OwogfQogLyogfX19ICovCkBAIC0yMjA3LDcgKzIyODAsNyBAQCBaRU5EX01FVEhPRChyZWZs ZWN0aW9uX21ldGhvZCwgZXhwb3J0KQogWkVORF9NRVRIT0QocmVmbGVjdGlvbl9tZXRob2Qs IF9fY29uc3RydWN0KQogewogCXp2YWwgKm5hbWUsICpjbGFzc25hbWU7Ci0JenZhbCAqb2Jq ZWN0OworCXp2YWwgKm9iamVjdCwgKm9yaWdfb2JqOwogCXJlZmxlY3Rpb25fb2JqZWN0ICpp bnRlcm47CiAJY2hhciAqbGNuYW1lOwogCXplbmRfY2xhc3NfZW50cnkgKipwY2U7CkBAIC0y MjE3LDcgKzIyOTAsMTEgQEAgWkVORF9NRVRIT0QocmVmbGVjdGlvbl9tZXRob2QsIF9fY29u c3RydQogCWludCBuYW1lX2xlbiwgdG1wX2xlbjsKIAl6dmFsIHp0bXA7CiAKLQlpZiAoemVu ZF9wYXJzZV9wYXJhbWV0ZXJzX2V4KFpFTkRfUEFSU0VfUEFSQU1TX1FVSUVULCBaRU5EX05V TV9BUkdTKCkgVFNSTUxTX0NDLCAienMiLCAmY2xhc3NuYW1lLCAmbmFtZV9zdHIsICZuYW1l X2xlbikgPT0gRkFJTFVSRSkgeworCWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnNfZXgoWkVO RF9QQVJTRV9QQVJBTVNfUVVJRVQsIFpFTkRfTlVNX0FSR1MoKSBUU1JNTFNfQ0MsICJvIiwg JmNsYXNzbmFtZSkgPT0gU1VDQ0VTUykgeworCQluYW1lX3N0ciA9IFpFTkRfSU5WT0tFX0ZV TkNfTkFNRTsKKwkJbmFtZV9sZW4gPSBzaXplb2YoWkVORF9JTlZPS0VfRlVOQ19OQU1FKS0x OworCQlvcmlnX29iaiA9IGNsYXNzbmFtZTsKKwl9IGVsc2UgaWYgKHplbmRfcGFyc2VfcGFy YW1ldGVyc19leChaRU5EX1BBUlNFX1BBUkFNU19RVUlFVCwgWkVORF9OVU1fQVJHUygpIFRT Uk1MU19DQywgInpzIiwgJmNsYXNzbmFtZSwgJm5hbWVfc3RyLCAmbmFtZV9sZW4pID09IEZB SUxVUkUpIHsKIAkJaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkg VFNSTUxTX0NDLCAicyIsICZuYW1lX3N0ciwgJm5hbWVfbGVuKSA9PSBGQUlMVVJFKSB7CiAJ CQlyZXR1cm47CiAJCX0KQEAgLTIyMzAsNiArMjMwNywxMSBAQCBaRU5EX01FVEhPRChyZWZs ZWN0aW9uX21ldGhvZCwgX19jb25zdHJ1CiAJCVpWQUxfU1RSSU5HTChjbGFzc25hbWUsIG5h bWVfc3RyLCB0bXBfbGVuLCAxKTsKIAkJbmFtZV9sZW4gPSBuYW1lX2xlbiAtICh0bXBfbGVu ICsgMik7CiAJCW5hbWVfc3RyID0gdG1wICsgMjsKKwkJb3JpZ19vYmogPSBOVUxMOworCX0g ZWxzZSBpZiAoWl9UWVBFX1AoY2xhc3NuYW1lKSA9PSBJU19PQkpFQ1QpIHsKKwkJb3JpZ19v YmogPSBjbGFzc25hbWU7CisJfSBlbHNlIHsKKwkJb3JpZ19vYmogPSBOVUxMOwogCX0KIAog CW9iamVjdCA9IGdldFRoaXMoKTsKQEAgLTIyNzUsNyArMjM1NywxMiBAQCBaRU5EX01FVEhP RChyZWZsZWN0aW9uX21ldGhvZCwgX19jb25zdHJ1CiAJCiAJbGNuYW1lID0gemVuZF9zdHJf dG9sb3dlcl9kdXAobmFtZV9zdHIsIG5hbWVfbGVuKTsKIAotCWlmICh6ZW5kX2hhc2hfZmlu ZCgmY2UtPmZ1bmN0aW9uX3RhYmxlLCBsY25hbWUsIG5hbWVfbGVuICsgMSwgKHZvaWQgKiop ICZtcHRyKSA9PSBGQUlMVVJFKSB7CisJaWYgKGNlID09IHplbmRfY2VfY2xvc3VyZSAmJiBv cmlnX29iaiAmJiAobmFtZV9sZW4gPT0gc2l6ZW9mKFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSkt MSkgJiYKKwkJbWVtY21wKGxjbmFtZSwgWkVORF9JTlZPS0VfRlVOQ19OQU1FLCBzaXplb2Yo WkVORF9JTlZPS0VfRlVOQ19OQU1FKS0xKSA9PSAwICYmCisJCShtcHRyID0gemVuZF9nZXRf Y2xvc3VyZV9pbnZva2VfbWV0aG9kKG9yaWdfb2JqIFRTUk1MU19DQykpICE9IE5VTEwKKwkp IHsKKwkJLyogZG8gbm90aGluZywgbXB0ciBhbHJlYWR5IHNldCAqLworCX0gZWxzZSBpZiAo emVuZF9oYXNoX2ZpbmQoJmNlLT5mdW5jdGlvbl90YWJsZSwgbGNuYW1lLCBuYW1lX2xlbiAr IDEsICh2b2lkICoqKSAmbXB0cikgPT0gRkFJTFVSRSkgewogCQllZnJlZShsY25hbWUpOwog CQl6ZW5kX3Rocm93X2V4Y2VwdGlvbl9leChyZWZsZWN0aW9uX2V4Y2VwdGlvbl9wdHIsIDAg VFNSTUxTX0NDLCAKIAkJCSJNZXRob2QgJXM6OiVzKCkgZG9lcyBub3QgZXhpc3QiLCBjZS0+ bmFtZSwgbmFtZV9zdHIpOwpAQCAtMjI4OCw2ICsyMzc1LDggQEAgWkVORF9NRVRIT0QocmVm bGVjdGlvbl9tZXRob2QsIF9fY29uc3RydQogCXplbmRfaGFzaF91cGRhdGUoWl9PQkpQUk9Q X1Aob2JqZWN0KSwgIm5hbWUiLCBzaXplb2YoIm5hbWUiKSwgKHZvaWQgKiopICZuYW1lLCBz aXplb2YoenZhbCAqKSwgTlVMTCk7CiAJaW50ZXJuLT5wdHIgPSBtcHRyOwogCWludGVybi0+ ZnJlZV9wdHIgPSAwOworCWludGVybi0+aXNfZnVuY3Rpb24gPSAxOworCWludGVybi0+aXNf cGFyYW1yZWYgPSAwOwogCWludGVybi0+Y2UgPSBjZTsKIH0KIC8qIH19fSAqLwpAQCAtMjc5 Myw2ICsyODgyLDggQEAgc3RhdGljIHZvaWQgcmVmbGVjdGlvbl9jbGFzc19vYmplY3RfY3Rv cgogCQlpbnRlcm4tPnB0ciA9ICpjZTsKIAl9CiAJaW50ZXJuLT5mcmVlX3B0ciA9IDA7CisJ aW50ZXJuLT5pc19mdW5jdGlvbiA9IDA7CisJaW50ZXJuLT5pc19wYXJhbXJlZiA9IDA7CiB9 CiAvKiB9fX0gKi8KIApAQCAtMzEzOSw3ICszMjMwLDEzIEBAIFpFTkRfTUVUSE9EKHJlZmxl Y3Rpb25fY2xhc3MsIGdldE1ldGhvZCkKIAogCUdFVF9SRUZMRUNUSU9OX09CSkVDVF9QVFIo Y2UpOwogCWxjX25hbWUgPSB6ZW5kX3N0cl90b2xvd2VyX2R1cChuYW1lLCBuYW1lX2xlbik7 Ci0JaWYgKHplbmRfaGFzaF9maW5kKCZjZS0+ZnVuY3Rpb25fdGFibGUsIGxjX25hbWUsIG5h bWVfbGVuICsgMSwgKHZvaWQqKikgJm1wdHIpID09IFNVQ0NFU1MpIHsKKwlpZiAoY2UgPT0g emVuZF9jZV9jbG9zdXJlICYmIGludGVybi0+b2JqICYmIChuYW1lX2xlbiA9PSBzaXplb2Yo WkVORF9JTlZPS0VfRlVOQ19OQU1FKS0xKSAmJgorCQltZW1jbXAobGNfbmFtZSwgWkVORF9J TlZPS0VfRlVOQ19OQU1FLCBzaXplb2YoWkVORF9JTlZPS0VfRlVOQ19OQU1FKS0xKSA9PSAw ICYmCisJCShtcHRyID0gemVuZF9nZXRfY2xvc3VyZV9pbnZva2VfbWV0aG9kKGludGVybi0+ b2JqIFRTUk1MU19DQykpICE9IE5VTEwKKwkpIHsKKwkJcmVmbGVjdGlvbl9tZXRob2RfZmFj dG9yeShjZSwgbXB0ciwgcmV0dXJuX3ZhbHVlIFRTUk1MU19DQyk7CisJCWVmcmVlKGxjX25h bWUpOworCX0gZWxzZSBpZiAoemVuZF9oYXNoX2ZpbmQoJmNlLT5mdW5jdGlvbl90YWJsZSwg bGNfbmFtZSwgbmFtZV9sZW4gKyAxLCAodm9pZCoqKSAmbXB0cikgPT0gU1VDQ0VTUykgewog CQlyZWZsZWN0aW9uX21ldGhvZF9mYWN0b3J5KGNlLCBtcHRyLCByZXR1cm5fdmFsdWUgVFNS TUxTX0NDKTsKIAkJZWZyZWUobGNfbmFtZSk7CiAJfSBlbHNlIHsKQEAgLTMxNTIsMTkgKzMy NDksMzYgQEAgWkVORF9NRVRIT0QocmVmbGVjdGlvbl9jbGFzcywgZ2V0TWV0aG9kKQogLyog fX19ICovCiAKIC8qIHt7eyBfYWRkbWV0aG9kICovCi1zdGF0aWMgaW50IF9hZGRtZXRob2Qo emVuZF9mdW5jdGlvbiAqbXB0ciBUU1JNTFNfREMsIGludCBudW1fYXJncywgdmFfbGlzdCBh cmdzLCB6ZW5kX2hhc2hfa2V5ICpoYXNoX2tleSkKK3N0YXRpYyB2b2lkIF9hZGRtZXRob2Qo emVuZF9mdW5jdGlvbiAqbXB0ciwgemVuZF9jbGFzc19lbnRyeSAqY2UsIHp2YWwgKnJldHZh bCwgbG9uZyBmaWx0ZXIsIHp2YWwgKm9iaiBUU1JNTFNfREMpCiB7CiAJenZhbCAqbWV0aG9k OwotCXplbmRfY2xhc3NfZW50cnkgKmNlID0gKnZhX2FyZyhhcmdzLCB6ZW5kX2NsYXNzX2Vu dHJ5KiopOwotCXp2YWwgKnJldHZhbCA9IHZhX2FyZyhhcmdzLCB6dmFsKik7Ci0JbG9uZyBm aWx0ZXIgPSB2YV9hcmcoYXJncywgbG9uZyk7CisJdWludCBsZW4gPSBzdHJsZW4obXB0ci0+ Y29tbW9uLmZ1bmN0aW9uX25hbWUpOworCXplbmRfZnVuY3Rpb24gKmNsb3N1cmU7CiAKIAlp ZiAobXB0ci0+Y29tbW9uLmZuX2ZsYWdzICYgZmlsdGVyKSB7CiAJCUFMTE9DX1pWQUwobWV0 aG9kKTsKKwkJaWYgKGNlID09IHplbmRfY2VfY2xvc3VyZSAmJiBvYmogJiYgKGxlbiA9PSBz aXplb2YoWkVORF9JTlZPS0VfRlVOQ19OQU1FKS0xKSAmJgorCQkJbWVtY21wKG1wdHItPmNv bW1vbi5mdW5jdGlvbl9uYW1lLCBaRU5EX0lOVk9LRV9GVU5DX05BTUUsIHNpemVvZihaRU5E X0lOVk9LRV9GVU5DX05BTUUpLTEpID09IDAgJiYKKwkJCShjbG9zdXJlID0gemVuZF9nZXRf Y2xvc3VyZV9pbnZva2VfbWV0aG9kKG9iaiBUU1JNTFNfQ0MpKSAhPSBOVUxMCisJCSkgewor CQkJbXB0ciA9IGNsb3N1cmU7CisJCX0KIAkJcmVmbGVjdGlvbl9tZXRob2RfZmFjdG9yeShj ZSwgbXB0ciwgbWV0aG9kIFRTUk1MU19DQyk7CiAJCWFkZF9uZXh0X2luZGV4X3p2YWwocmV0 dmFsLCBtZXRob2QpOwogCX0KLQlyZXR1cm4gMDsKK30KKy8qIH19fSAqLworCisvKiB7e3sg X2FkZG1ldGhvZCAqLworc3RhdGljIGludCBfYWRkbWV0aG9kX3ZhKHplbmRfZnVuY3Rpb24g Km1wdHIgVFNSTUxTX0RDLCBpbnQgbnVtX2FyZ3MsIHZhX2xpc3QgYXJncywgemVuZF9oYXNo X2tleSAqaGFzaF9rZXkpCit7CisJemVuZF9jbGFzc19lbnRyeSAqY2UgPSAqdmFfYXJnKGFy Z3MsIHplbmRfY2xhc3NfZW50cnkqKik7CisJenZhbCAqcmV0dmFsID0gdmFfYXJnKGFyZ3Ms IHp2YWwqKTsKKwlsb25nIGZpbHRlciA9IHZhX2FyZyhhcmdzLCBsb25nKTsKKwl6dmFsICpv YmogPSB2YV9hcmcoYXJncywgenZhbCAqKTsKKwkKKwlfYWRkbWV0aG9kKG1wdHIsIGNlLCBy ZXR2YWwsIGZpbHRlciwgb2JqIFRTUk1MU19DQyk7CisJcmV0dXJuIFpFTkRfSEFTSF9BUFBM WV9LRUVQOwogfQogLyogfX19ICovCiAKQEAgLTMxOTAsNyArMzMwNCwxNCBAQCBaRU5EX01F VEhPRChyZWZsZWN0aW9uX2NsYXNzLCBnZXRNZXRob2RzCiAJR0VUX1JFRkxFQ1RJT05fT0JK RUNUX1BUUihjZSk7CiAKIAlhcnJheV9pbml0KHJldHVybl92YWx1ZSk7Ci0JemVuZF9oYXNo X2FwcGx5X3dpdGhfYXJndW1lbnRzKCZjZS0+ZnVuY3Rpb25fdGFibGUgVFNSTUxTX0NDLCAo YXBwbHlfZnVuY19hcmdzX3QpIF9hZGRtZXRob2QsIDMsICZjZSwgcmV0dXJuX3ZhbHVlLCBm aWx0ZXIpOworCXplbmRfaGFzaF9hcHBseV93aXRoX2FyZ3VtZW50cygmY2UtPmZ1bmN0aW9u X3RhYmxlIFRTUk1MU19DQywgKGFwcGx5X2Z1bmNfYXJnc190KSBfYWRkbWV0aG9kX3ZhLCA0 LCAmY2UsIHJldHVybl92YWx1ZSwgZmlsdGVyLCBpbnRlcm4tPm9iaik7CisJaWYgKGludGVy bi0+b2JqICYmIGluc3RhbmNlb2ZfZnVuY3Rpb24oY2UsIHplbmRfY2VfY2xvc3VyZSkpIHsK KwkJemVuZF9mdW5jdGlvbiAqY2xvc3VyZSA9IHplbmRfZ2V0X2Nsb3N1cmVfaW52b2tlX21l dGhvZChpbnRlcm4tPm9iaiBUU1JNTFNfQ0MpOworCQlpZiAoY2xvc3VyZSkgeworCQkJX2Fk ZG1ldGhvZChjbG9zdXJlLCBjZSwgcmV0dXJuX3ZhbHVlLCBmaWx0ZXIsIGludGVybi0+b2Jq IFRTUk1MU19DQyk7CisJCQlfZnJlZV9mdW5jdGlvbihjbG9zdXJlIFRTUk1MU19DQyk7CisJ CX0KKwl9CiB9CiAvKiB9fX0gKi8KIApAQCAtNDAyOCw2ICs0MTQ5LDggQEAgWkVORF9NRVRI T0QocmVmbGVjdGlvbl9wcm9wZXJ0eSwgX19jb25zdAogCXJlZmVyZW5jZS0+aWdub3JlX3Zp c2liaWxpdHkgPSAwOwogCWludGVybi0+cHRyID0gcmVmZXJlbmNlOwogCWludGVybi0+ZnJl ZV9wdHIgPSAxOworCWludGVybi0+aXNfZnVuY3Rpb24gPSAwOworCWludGVybi0+aXNfcGFy YW1yZWYgPSAwOwogCWludGVybi0+Y2UgPSBjZTsKIH0KIC8qIH19fSAqLwpAQCAtNDM0OCw2 ICs0NDcxLDggQEAgWkVORF9NRVRIT0QocmVmbGVjdGlvbl9leHRlbnNpb24sIF9fY29ucwog CXplbmRfaGFzaF91cGRhdGUoWl9PQkpQUk9QX1Aob2JqZWN0KSwgIm5hbWUiLCBzaXplb2Yo Im5hbWUiKSwgKHZvaWQgKiopICZuYW1lLCBzaXplb2YoenZhbCAqKSwgTlVMTCk7CiAJaW50 ZXJuLT5wdHIgPSBtb2R1bGU7CiAJaW50ZXJuLT5mcmVlX3B0ciA9IDA7CisJaW50ZXJuLT5p c19mdW5jdGlvbiA9IDA7CisJaW50ZXJuLT5pc19wYXJhbXJlZiA9IDA7CiAJaW50ZXJuLT5j ZSA9IE5VTEw7CiB9CiAvKiB9fX0gKi8K ------------96D83820972375 Content-Type: text/plain; name="php-closure-reflection-6.0-20080810.diff.txt" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="php-closure-reflection-6.0-20080810.diff.txt" PyBaZW5kL3Rlc3RzL2NhdGNoXzAwNS5waHB0CkluZGV4OiBaZW5kL3plbmRfY2xvc3VyZXMu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3NpdG9yeS9aZW5kRW5naW5lMi96ZW5k X2Nsb3N1cmVzLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAtdSAtcCAtZCAt cjEuMTEgemVuZF9jbG9zdXJlcy5jCi0tLSBaZW5kL3plbmRfY2xvc3VyZXMuYwk3IEF1ZyAy MDA4IDEzOjM2OjEzIC0wMDAwCTEuMTEKKysrIFplbmQvemVuZF9jbG9zdXJlcy5jCTEwIEF1 ZyAyMDA4IDIyOjQ3OjI5IC0wMDAwCkBAIC0yNiwxMSArMjYsMTAgQEAKICNpbmNsdWRlICJ6 ZW5kX29iamVjdHNfQVBJLmgiCiAjaW5jbHVkZSAiemVuZF9nbG9iYWxzLmgiCiAKLSNkZWZp bmUgWkVORF9JTlZPS0VfRlVOQ19OQU1FICJfX2ludm9rZSIKICNkZWZpbmUgWkVORF9DTE9T VVJFX1BSSU5UX05BTUUgIkNsb3N1cmUgb2JqZWN0IgogCiAjZGVmaW5lIFpFTkRfQ0xPU1VS RV9QUk9QRVJUWV9FUlJPUigpIFwKLQl6ZW5kX2Vycm9yKEVfRVJST1IsICJDbG9zdXJlIG9i amVjdCBjYW5ub3QgaGF2ZSBwcm9wZXJ0aWVzIikKKwl6ZW5kX2Vycm9yKEVfUkVDT1ZFUkFC TEVfRVJST1IsICJDbG9zdXJlIG9iamVjdCBjYW5ub3QgaGF2ZSBwcm9wZXJ0aWVzIikKIAog dHlwZWRlZiBzdHJ1Y3QgX3plbmRfY2xvc3VyZSB7CiAJemVuZF9vYmplY3QgICAgc3RkOwpA QCAtMzgsNyArMzcsNyBAQCB0eXBlZGVmIHN0cnVjdCBfemVuZF9jbG9zdXJlIHsKIAl6dmFs ICAgICAgICAgICp0aGlzX3B0cjsKIH0gemVuZF9jbG9zdXJlOwogCi1zdGF0aWMgemVuZF9j bGFzc19lbnRyeSAqemVuZF9jZV9jbG9zdXJlOworWkVORF9BUEkgemVuZF9jbGFzc19lbnRy eSAqemVuZF9jZV9jbG9zdXJlOwogc3RhdGljIHplbmRfb2JqZWN0X2hhbmRsZXJzIGNsb3N1 cmVfaGFuZGxlcnM7CiAKIFpFTkRfTUVUSE9EKENsb3N1cmUsIF9faW52b2tlKSAvKiB7e3sg Ki8KQEAgLTUwLDcgKzQ5LDcgQEAgWkVORF9NRVRIT0QoQ2xvc3VyZSwgX19pbnZva2UpIC8q IHt7eyAqLwogCWFyZ3VtZW50cyA9IGVtYWxsb2Moc2l6ZW9mKHp2YWwqKikgKiBaRU5EX05V TV9BUkdTKCkpOwogCWlmICh6ZW5kX2dldF9wYXJhbWV0ZXJzX2FycmF5X2V4KFpFTkRfTlVN X0FSR1MoKSwgYXJndW1lbnRzKSA9PSBGQUlMVVJFKSB7CiAJCWVmcmVlKGFyZ3VtZW50cyk7 Ci0JCXplbmRfZXJyb3IoRV9FUlJPUiwgIkNhbm5vdCBnZXQgYXJndW1lbnRzIGZvciBjYWxs aW5nIGNsb3N1cmUiKTsKKwkJemVuZF9lcnJvcihFX1JFQ09WRVJBQkxFX0VSUk9SLCAiQ2Fu bm90IGdldCBhcmd1bWVudHMgZm9yIGNhbGxpbmcgY2xvc3VyZSIpOwogCQlSRVRWQUxfRkFM U0U7CiAJfSBlbHNlIGlmIChjYWxsX3VzZXJfZnVuY3Rpb25fZXgoQ0coZnVuY3Rpb25fdGFi bGUpLCBOVUxMLCB0aGlzX3B0ciwgJmNsb3N1cmVfcmVzdWx0X3B0ciwgWkVORF9OVU1fQVJH UygpLCBhcmd1bWVudHMsIDEsIE5VTEwgVFNSTUxTX0NDKSA9PSBGQUlMVVJFKSB7CiAJCVJF VFZBTF9GQUxTRTsKQEAgLTc0LDIxICs3MywyMSBAQCBaRU5EX01FVEhPRChDbG9zdXJlLCBf X2ludm9rZSkgLyoge3t7ICovCiAKIHN0YXRpYyB6ZW5kX2Z1bmN0aW9uICp6ZW5kX2Nsb3N1 cmVfZ2V0X2NvbnN0cnVjdG9yKHp2YWwgKm9iamVjdCBUU1JNTFNfREMpIC8qIHt7eyAqLwog ewotCXplbmRfZXJyb3IoRV9FUlJPUiwgIkluc3RhbnRpYXRpb24gb2YgJ0Nsb3N1cmUnIGlz IG5vdCBhbGxvd2VkIik7CisJemVuZF9lcnJvcihFX1JFQ09WRVJBQkxFX0VSUk9SLCAiSW5z dGFudGlhdGlvbiBvZiAnQ2xvc3VyZScgaXMgbm90IGFsbG93ZWQiKTsKIAlyZXR1cm4gTlVM TDsKIH0KIC8qIH19fSAqLwogCiBzdGF0aWMgaW50IHplbmRfY2xvc3VyZV9zZXJpYWxpemUo enZhbCAqb2JqZWN0LCBpbnQgKnR5cGUsIHpzdHIgKmJ1ZmZlciwgemVuZF91aW50ICpidWZf bGVuLCB6ZW5kX3NlcmlhbGl6ZV9kYXRhICpkYXRhIFRTUk1MU19EQykgLyoge3t7ICovCiB7 Ci0JemVuZF9lcnJvcihFX0VSUk9SLCAiU2VyaWFsaXphdGlvbiBvZiAnQ2xvc3VyZScgaXMg bm90IGFsbG93ZWQiKTsKKwl6ZW5kX2Vycm9yKEVfUkVDT1ZFUkFCTEVfRVJST1IsICJTZXJp YWxpemF0aW9uIG9mICdDbG9zdXJlJyBpcyBub3QgYWxsb3dlZCIpOwogCXJldHVybiBGQUlM VVJFOwogfQogLyogfX19ICovCiAKIHN0YXRpYyBpbnQgemVuZF9jbG9zdXJlX3Vuc2VyaWFs aXplKHp2YWwgKipvYmplY3QsIHplbmRfY2xhc3NfZW50cnkgKmNlLCBpbnQgdHlwZSwgY29u c3QgenN0ciBidWYsIHplbmRfdWludCBidWZfbGVuLCB6ZW5kX3Vuc2VyaWFsaXplX2RhdGEg KmRhdGEgVFNSTUxTX0RDKSAvKiB7e3sgKi8KIHsKLQl6ZW5kX2Vycm9yKEVfRVJST1IsICJV bnNlcmlhbGl6YXRpb24gb2YgJ0Nsb3N1cmUnIGlzIG5vdCBhbGxvd2VkIik7CisJemVuZF9l cnJvcihFX1JFQ09WRVJBQkxFX0VSUk9SLCAiVW5zZXJpYWxpemF0aW9uIG9mICdDbG9zdXJl JyBpcyBub3QgYWxsb3dlZCIpOwogCXJldHVybiBGQUlMVVJFOwogfQogLyogfX19ICovCkBA IC05OSw2ICs5OCwyNiBAQCBzdGF0aWMgaW50IHplbmRfY2xvc3VyZV9jb21wYXJlX29iamVj dHMoCiB9CiAvKiB9fX0gKi8KIAorWkVORF9BUEkgemVuZF9mdW5jdGlvbiAqemVuZF9nZXRf Y2xvc3VyZV9pbnZva2VfbWV0aG9kKHp2YWwgKm9iaiBUU1JNTFNfREMpIC8qIHt7eyAqLwor eworCXplbmRfY2xvc3VyZSAqY2xvc3VyZSA9ICh6ZW5kX2Nsb3N1cmUgKil6ZW5kX29iamVj dF9zdG9yZV9nZXRfb2JqZWN0KG9iaiBUU1JNTFNfQ0MpOwkKKwl6ZW5kX2Z1bmN0aW9uICpp bnZva2UgPSAoemVuZF9mdW5jdGlvbiopZW1hbGxvYyhzaXplb2YoemVuZF9mdW5jdGlvbikp OworCisJaW52b2tlLT5jb21tb24gPSBjbG9zdXJlLT5mdW5jLmNvbW1vbjsKKwlpbnZva2Ut PnR5cGUgPSBaRU5EX0lOVEVSTkFMX0ZVTkNUSU9OOworCWludm9rZS0+aW50ZXJuYWxfZnVu Y3Rpb24uZm5fZmxhZ3MgPSBaRU5EX0FDQ19QVUJMSUMgfCBaRU5EX0FDQ19DQUxMX1ZJQV9I QU5ETEVSOworCWludm9rZS0+aW50ZXJuYWxfZnVuY3Rpb24uaGFuZGxlciA9IFpFTkRfTU4o Q2xvc3VyZV9fX2ludm9rZSk7CisJaW52b2tlLT5pbnRlcm5hbF9mdW5jdGlvbi5tb2R1bGUg PSAwOworCWludm9rZS0+aW50ZXJuYWxfZnVuY3Rpb24uc2NvcGUgPSB6ZW5kX2NlX2Nsb3N1 cmU7CisJaWYgKFVHKHVuaWNvZGUpKSB7CisJCWludm9rZS0+aW50ZXJuYWxfZnVuY3Rpb24u ZnVuY3Rpb25fbmFtZS51ID0gVVNUUl9NQUtFKFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSk7CisJ fSBlbHNlIHsKKwkJaW52b2tlLT5pbnRlcm5hbF9mdW5jdGlvbi5mdW5jdGlvbl9uYW1lLnMg PSBlc3RybmR1cChaRU5EX0lOVk9LRV9GVU5DX05BTUUsIHNpemVvZihaRU5EX0lOVk9LRV9G VU5DX05BTUUpLTEpOworCX0KKwlyZXR1cm4gaW52b2tlOworfQorLyogfX19ICovCisKIHN0 YXRpYyB6ZW5kX2Z1bmN0aW9uICp6ZW5kX2Nsb3N1cmVfZ2V0X21ldGhvZCh6dmFsICoqb2Jq ZWN0X3B0ciwgenN0ciBtZXRob2RfbmFtZSwgaW50IG1ldGhvZF9sZW4gVFNSTUxTX0RDKSAv KiB7e3sgKi8KIHsKIAl1bnNpZ25lZCBpbnQgbGNfbmFtZV9sZW47CkBAIC0xMTAsMjIgKzEy OSw4IEBAIHN0YXRpYyB6ZW5kX2Z1bmN0aW9uICp6ZW5kX2Nsb3N1cmVfZ2V0X20KIAlpZiAo KGxjX25hbWVfbGVuID09IHNpemVvZihaRU5EX0lOVk9LRV9GVU5DX05BTUUpLTEpICYmCiAJ CShaRU5EX1VfRVFVQUwodHlwZSwgbGNfbmFtZSwgbGNfbmFtZV9sZW4sIFpFTkRfSU5WT0tF X0ZVTkNfTkFNRSwgc2l6ZW9mKFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSktMSkpCiAJKSB7Ci0J CXplbmRfY2xvc3VyZSAqY2xvc3VyZSA9ICh6ZW5kX2Nsb3N1cmUgKil6ZW5kX29iamVjdF9z dG9yZV9nZXRfb2JqZWN0KCpvYmplY3RfcHRyIFRTUk1MU19DQyk7Ci0JCXplbmRfZnVuY3Rp b24gKmludm9rZSA9ICh6ZW5kX2Z1bmN0aW9uKillbWFsbG9jKHNpemVvZih6ZW5kX2Z1bmN0 aW9uKSk7Ci0KLQkJaW52b2tlLT5jb21tb24gPSBjbG9zdXJlLT5mdW5jLmNvbW1vbjsKLQkJ aW52b2tlLT50eXBlID0gWkVORF9JTlRFUk5BTF9GVU5DVElPTjsKLQkJaW52b2tlLT5pbnRl cm5hbF9mdW5jdGlvbi5mbl9mbGFncyA9IFpFTkRfQUNDX0NBTExfVklBX0hBTkRMRVI7Ci0J CWludm9rZS0+aW50ZXJuYWxfZnVuY3Rpb24uaGFuZGxlciA9IFpFTkRfTU4oQ2xvc3VyZV9f X2ludm9rZSk7Ci0JCWludm9rZS0+aW50ZXJuYWxfZnVuY3Rpb24ubW9kdWxlID0gMDsKLQkJ aW52b2tlLT5pbnRlcm5hbF9mdW5jdGlvbi5zY29wZSA9IHplbmRfY2VfY2xvc3VyZTsKLQkJ aWYgKFVHKHVuaWNvZGUpKSB7Ci0JCQlpbnZva2UtPmludGVybmFsX2Z1bmN0aW9uLmZ1bmN0 aW9uX25hbWUudSA9IFVTVFJfTUFLRShaRU5EX0lOVk9LRV9GVU5DX05BTUUpOwotCQl9IGVs c2UgewotCQkJaW52b2tlLT5pbnRlcm5hbF9mdW5jdGlvbi5mdW5jdGlvbl9uYW1lLnMgPSBl c3RybmR1cChaRU5EX0lOVk9LRV9GVU5DX05BTUUsIHNpemVvZihaRU5EX0lOVk9LRV9GVU5D X05BTUUpLTEpOwotCQl9CiAJCWVmcmVlKGxjX25hbWUudik7Ci0JCXJldHVybiBpbnZva2U7 CisJCXJldHVybiB6ZW5kX2dldF9jbG9zdXJlX2ludm9rZV9tZXRob2QoKm9iamVjdF9wdHIg VFNSTUxTX0NDKTsKIAl9CiAJZWZyZWUobGNfbmFtZS52KTsKIAlyZXR1cm4gTlVMTDsKQEAg LTE3NSw3ICsxODAsNyBAQCBzdGF0aWMgdm9pZCB6ZW5kX2Nsb3N1cmVfZnJlZV9zdG9yYWdl KHZvCiAJCXplbmRfZXhlY3V0ZV9kYXRhICpleCA9IEVHKGN1cnJlbnRfZXhlY3V0ZV9kYXRh KTsKIAkJd2hpbGUgKGV4KSB7CiAJCQlpZiAoZXgtPm9wX2FycmF5ID09ICZjbG9zdXJlLT5m dW5jLm9wX2FycmF5KSB7Ci0JCQkJemVuZF9lcnJvcihFX0VSUk9SLCAiQ2Fubm90IGRlc3Ry b3kgYWN0aXZlIGxhbWJkYSBmdW5jdGlvbiIpOworCQkJCXplbmRfZXJyb3IoRV9SRUNPVkVS QUJMRV9FUlJPUiwgIkNhbm5vdCBkZXN0cm95IGFjdGl2ZSBsYW1iZGEgZnVuY3Rpb24iKTsK IAkJCX0KIAkJCWV4ID0gZXgtPnByZXZfZXhlY3V0ZV9kYXRhOwogCQl9CkluZGV4OiBaZW5k L3plbmRfY2xvc3VyZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3NpdG9yeS9a ZW5kRW5naW5lMi96ZW5kX2Nsb3N1cmVzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk aWZmIC11IC1wIC1kIC1yMS4xIHplbmRfY2xvc3VyZXMuaAotLS0gWmVuZC96ZW5kX2Nsb3N1 cmVzLmgJOCBKdWwgMjAwOCAwNzowNTowMyAtMDAwMAkxLjEKKysrIFplbmQvemVuZF9jbG9z dXJlcy5oCTEwIEF1ZyAyMDA4IDIyOjQ3OjI5IC0wMDAwCkBAIC0yNCwxMCArMjQsMTUgQEAK IAogQkVHSU5fRVhURVJOX0MoKQogCisjZGVmaW5lIFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSAi X19pbnZva2UiCisKIHZvaWQgemVuZF9yZWdpc3Rlcl9jbG9zdXJlX2NlKFRTUk1MU19EKTsK IAorZXh0ZXJuIFpFTkRfQVBJIHplbmRfY2xhc3NfZW50cnkgKnplbmRfY2VfY2xvc3VyZTsK KwogWkVORF9BUEkgdm9pZCB6ZW5kX2NyZWF0ZV9jbG9zdXJlKHp2YWwgKnJlcywgemVuZF9m dW5jdGlvbiAqb3BfYXJyYXksIHplbmRfY2xhc3NfZW50cnkgKnNjb3BlLCB6dmFsICp0aGlz X3B0ciBUU1JNTFNfREMpOwogWkVORF9BUEkgaW50IHplbmRfZ2V0X2Nsb3N1cmUoenZhbCAq b2JqLCB6ZW5kX2NsYXNzX2VudHJ5ICoqY2VfcHRyLCB6ZW5kX2Z1bmN0aW9uICoqZnB0cl9w dHIsIHp2YWwgKip6b2JqX3B0ciwgenZhbCAqKip6b2JqX3B0cl9wdHIgVFNSTUxTX0RDKTsK K1pFTkRfQVBJIHplbmRfZnVuY3Rpb24gKnplbmRfZ2V0X2Nsb3N1cmVfaW52b2tlX21ldGhv ZCh6dmFsICpvYmogVFNSTUxTX0RDKTsKIAogRU5EX0VYVEVSTl9DKCkKIApJbmRleDogWmVu ZC90ZXN0cy9jbG9zdXJlXzAxNy5waHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9yZXBv c2l0b3J5L1plbmRFbmdpbmUyL3Rlc3RzL2Nsb3N1cmVfMDE3LnBocHQsdgpyZXRyaWV2aW5n IHJldmlzaW9uIDEuMgpkaWZmIC11IC1wIC1kIC1yMS4yIGNsb3N1cmVfMDE3LnBocHQKLS0t IFplbmQvdGVzdHMvY2xvc3VyZV8wMTcucGhwdAkxNCBKdWwgMjAwOCAxMzozOTozMiAtMDAw MAkxLjIKKysrIFplbmQvdGVzdHMvY2xvc3VyZV8wMTcucGhwdAkxMCBBdWcgMjAwOCAyMjo0 NzoyOSAtMDAwMApAQCAtOSw0ICs5LDQgQEAgJGEoJGEpOwogCiA/PgogLS1FWFBFQ1RGLS0K LUZhdGFsIGVycm9yOiBDYW5ub3QgZGVzdHJveSBhY3RpdmUgbGFtYmRhIGZ1bmN0aW9uIGlu ICVzIG9uIGxpbmUgJWQKK0NhdGNoYWJsZSBmYXRhbCBlcnJvcjogQ2Fubm90IGRlc3Ryb3kg YWN0aXZlIGxhbWJkYSBmdW5jdGlvbiBpbiAlcyBvbiBsaW5lICVkCkluZGV4OiBaZW5kL3Rl c3RzL2Nsb3N1cmVfMDIyLnBocHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRv cnkvWmVuZEVuZ2luZTIvdGVzdHMvY2xvc3VyZV8wMjIucGhwdCx2CnJldHJpZXZpbmcgcmV2 aXNpb24gMS4xCmRpZmYgLXUgLXAgLWQgLXIxLjEgY2xvc3VyZV8wMjIucGhwdAotLS0gWmVu ZC90ZXN0cy9jbG9zdXJlXzAyMi5waHB0CTIyIEp1bCAyMDA4IDA3OjI5OjE0IC0wMDAwCTEu MQorKysgWmVuZC90ZXN0cy9jbG9zdXJlXzAyMi5waHB0CTEwIEF1ZyAyMDA4IDIyOjQ3OjI5 IC0wMDAwCkBAIC04LDUgKzgsNSBAQCAkZm9vID0gZnVuY3Rpb24oKSB1c2UgKCRhKSB7CiAk Zm9vLT5hID0gMTsKID8+CiAtLUVYUEVDVEYtLQotRmF0YWwgZXJyb3I6IENsb3N1cmUgb2Jq ZWN0IGNhbm5vdCBoYXZlIHByb3BlcnRpZXMgaW4gJXNjbG9zdXJlXzAyMi5waHAgb24gbGlu ZSA1CitDYXRjaGFibGUgZmF0YWwgZXJyb3I6IENsb3N1cmUgb2JqZWN0IGNhbm5vdCBoYXZl IHByb3BlcnRpZXMgaW4gJXNjbG9zdXJlXzAyMi5waHAgb24gbGluZSA1CiAKSW5kZXg6IGV4 dC9yZWZsZWN0aW9uL3BocF9yZWZsZWN0aW9uLmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L3JlcG9zaXRvcnkvcGhwLXNyYy9leHQvcmVmbGVjdGlvbi9waHBfcmVmbGVjdGlvbi5jLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjMwOQpkaWZmIC11IC1wIC1kIC1yMS4zMDkgcGhwX3Jl ZmxlY3Rpb24uYwotLS0gZXh0L3JlZmxlY3Rpb24vcGhwX3JlZmxlY3Rpb24uYwk4IEF1ZyAy MDA4IDEwOjUzOjM5IC0wMDAwCTEuMzA5CisrKyBleHQvcmVmbGVjdGlvbi9waHBfcmVmbGVj dGlvbi5jCTEwIEF1ZyAyMDA4IDIyOjQ3OjMxIC0wMDAwCkBAIC0xOTIsNiArMTkyLDggQEAg dHlwZWRlZiBzdHJ1Y3QgewogCXplbmRfb2JqZWN0IHpvOwogCXZvaWQgKnB0cjsKIAl1bnNp Z25lZCBpbnQgZnJlZV9wdHI6MTsKKwl1bnNpZ25lZCBpbnQgaXNfZnVuY3Rpb246MTsKKwl1 bnNpZ25lZCBpbnQgaXNfcGFyYW1yZWY6MTsKIAl6dmFsICpvYmo7CiAJemVuZF9jbGFzc19l bnRyeSAqY2U7CiB9IHJlZmxlY3Rpb25fb2JqZWN0OwpAQCAtMjIxLDE0ICsyMjMsMzQgQEAg c3RhdGljIHZvaWQgcmVmbGVjdGlvbl9yZWdpc3Rlcl9pbXBsZW1lbgogfQogLyogfX19ICov CiAKK3N0YXRpYyB2b2lkIF9mcmVlX2Z1bmN0aW9uKHplbmRfZnVuY3Rpb24gKmZwdHIgVFNS TUxTX0RDKSAvKiB7e3sgKi8KK3sKKwlpZiAoZnB0cgorCQkmJiBmcHRyLT50eXBlICE9IFpF TkRfVVNFUl9GVU5DVElPTgorCQkmJiAoZnB0ci0+aW50ZXJuYWxfZnVuY3Rpb24uZm5fZmxh Z3MgJiBaRU5EX0FDQ19DQUxMX1ZJQV9IQU5ETEVSKSAhPSAwCisJKSB7CisJCWVmcmVlKGZw dHItPmludGVybmFsX2Z1bmN0aW9uLmZ1bmN0aW9uX25hbWUudik7CisJCWVmcmVlKGZwdHIp OworCX0KK30KKy8qIH19fSAqLworCiBzdGF0aWMgdm9pZCByZWZsZWN0aW9uX2ZyZWVfb2Jq ZWN0c19zdG9yYWdlKHZvaWQgKm9iamVjdCBUU1JNTFNfREMpIC8qIHt7eyAqLwogewogCXJl ZmxlY3Rpb25fb2JqZWN0ICppbnRlcm4gPSAocmVmbGVjdGlvbl9vYmplY3QgKikgb2JqZWN0 OwogCi0JaWYgKGludGVybi0+ZnJlZV9wdHIgJiYgaW50ZXJuLT5wdHIpIHsKLQkJZWZyZWUo aW50ZXJuLT5wdHIpOwotCQlpbnRlcm4tPnB0ciA9IE5VTEw7CisJaWYgKGludGVybi0+cHRy KSB7CisJCWlmIChpbnRlcm4tPmlzX3BhcmFtcmVmKSB7CisJCQlwYXJhbWV0ZXJfcmVmZXJl bmNlICpyZWZlcmVuY2UgPSAocGFyYW1ldGVyX3JlZmVyZW5jZSopaW50ZXJuLT5wdHI7CisJ CQlfZnJlZV9mdW5jdGlvbihyZWZlcmVuY2UtPmZwdHIgVFNSTUxTX0NDKTsKKwkJCWVmcmVl KGludGVybi0+cHRyKTsKKwkJfSBlbHNlIGlmIChpbnRlcm4tPmlzX2Z1bmN0aW9uKSB7CisJ CQlfZnJlZV9mdW5jdGlvbihpbnRlcm4tPnB0ciBUU1JNTFNfQ0MpOworCQl9IGVsc2UgaWYg KGludGVybi0+ZnJlZV9wdHIpIHsKKwkJCWVmcmVlKGludGVybi0+cHRyKTsKKwkJfQogCX0K KwlpbnRlcm4tPnB0ciA9IE5VTEw7CiAJaWYgKGludGVybi0+b2JqKSB7CiAJCXp2YWxfcHRy X2R0b3IoJmludGVybi0+b2JqKTsKIAl9CkBAIC0yNDUsNiArMjY3LDkgQEAgc3RhdGljIHZv aWQgcmVmbGVjdGlvbl9vYmplY3RzX2Nsb25lKHZvaQogCXplbmRfb2JqZWN0X3N0ZF9pbml0 KCYoKmludGVybl9jbG9uZSktPnpvLCBpbnRlcm4tPnpvLmNlIFRTUk1MU19DQyk7CiAJKCpp bnRlcm5fY2xvbmUpLT5wdHIgPSBpbnRlcm4tPnB0cjsKIAkoKmludGVybl9jbG9uZSktPmZy ZWVfcHRyID0gaW50ZXJuLT5mcmVlX3B0cjsKKwkoKmludGVybl9jbG9uZSktPmlzX2Z1bmN0 aW9uID0gaW50ZXJuLT5pc19mdW5jdGlvbjsKKwkoKmludGVybl9jbG9uZSktPmlzX3BhcmFt cmVmID0gaW50ZXJuLT5pc19wYXJhbXJlZjsKKwkvKiBUT0RPOiBjYW5ub3QgY2xvbmUgYmVj YXVzZSBzb21ldGhpbmcgdGhhdCByZWZlcmVuY2VzIGEgY2xvc3VyZSB3b3VsZCBiZSBkb3Vi bGUgZnJlZSdkICovCiAJKCppbnRlcm5fY2xvbmUpLT5vYmogPSBpbnRlcm4tPm9iajsKIAlp ZiAoaW50ZXJuLT5vYmopIHsKIAkJenZhbF9hZGRfcmVmKCZpbnRlcm4tPm9iaik7CkBAIC0y NjIsNiArMjg3LDggQEAgc3RhdGljIHplbmRfb2JqZWN0X3ZhbHVlIHJlZmxlY3Rpb25fb2Jq ZQogCWludGVybi0+cHRyID0gTlVMTDsKIAlpbnRlcm4tPm9iaiA9IE5VTEw7CiAJaW50ZXJu LT5mcmVlX3B0ciA9IDA7CisJaW50ZXJuLT5pc19mdW5jdGlvbiA9IDA7CisJaW50ZXJuLT5p c19wYXJhbXJlZiA9IDA7CiAKIAl6ZW5kX29iamVjdF9zdGRfaW5pdCgmaW50ZXJuLT56bywg Y2xhc3NfdHlwZSBUU1JNTFNfQ0MpOwogCXplbmRfaGFzaF9jb3B5KGludGVybi0+em8ucHJv cGVydGllcywgJmNsYXNzX3R5cGUtPmRlZmF1bHRfcHJvcGVydGllcywgKGNvcHlfY3Rvcl9m dW5jX3QpIHp2YWxfYWRkX3JlZiwgKHZvaWQgKikgJnRtcCwgc2l6ZW9mKHp2YWwgKikpOwpA QCAtNTI4LDIwICs1NTUsMzQgQEAgc3RhdGljIHZvaWQgX2NsYXNzX3N0cmluZyhzdHJpbmcg KnN0ciwgegogCQkJCQl6c3RyIGtleTsKIAkJCQkJdWludCBrZXlfbGVuOwogCQkJCQl1bG9u ZyBudW1faW5kZXg7Ci0JCQkJCXVpbnQgbGVuID0gVUcodW5pY29kZSk/dV9zdHJsZW4obXB0 ci0+Y29tbW9uLmZ1bmN0aW9uX25hbWUudSk6c3RybGVuKG1wdHItPmNvbW1vbi5mdW5jdGlv bl9uYW1lLnMpOworCQkJCQl1aW50IGxjbmFtZV9sZW4sIGxlbiA9IFVHKHVuaWNvZGUpP3Vf c3RybGVuKG1wdHItPmNvbW1vbi5mdW5jdGlvbl9uYW1lLnUpOnN0cmxlbihtcHRyLT5jb21t b24uZnVuY3Rpb25fbmFtZS5zKTsKKwkJCQkJenN0ciBsY25hbWUgPSB6ZW5kX3Vfc3RyX2Nh c2VfZm9sZChaRU5EX1NUUl9UWVBFLCBtcHRyLT5jb21tb24uZnVuY3Rpb25fbmFtZSwgbGVu LCAxLCAmbGNuYW1lX2xlbik7CiAKIAkJCQkJLyogRG8gbm90IGRpc3BsYXkgb2xkLXN0eWxl IGluaGVyaXRlZCBjb25zdHJ1Y3RvcnMgKi8KIAkJCQkJaWYgKChtcHRyLT5jb21tb24uZm5f ZmxhZ3MgJiBaRU5EX0FDQ19DVE9SKSA9PSAwIHx8CiAJCQkJCSAgICBtcHRyLT5jb21tb24u c2NvcGUgPT0gY2UgfHwKIAkJCQkJICAgIHplbmRfaGFzaF9nZXRfY3VycmVudF9rZXlfZXgo JmNlLT5mdW5jdGlvbl90YWJsZSwgJmtleSwgJmtleV9sZW4sICZudW1faW5kZXgsIDAsICZw b3MpICE9IChVRyh1bmljb2RlKT9IQVNIX0tFWV9JU19VTklDT0RFOkhBU0hfS0VZX0lTX1NU UklORykgfHwKLQkJCQkJICAgIChVRyh1bmljb2RlKSA/IAotCQkJCQkgICAgICh6ZW5kX3Vf YmluYXJ5X3N0cmNhc2VjbXAoa2V5LnUsIGtleV9sZW4tMSwgbXB0ci0+Y29tbW9uLmZ1bmN0 aW9uX25hbWUudSwgbGVuKSA9PSAwKSA6Ci0JCQkJCSAgICAgKHplbmRfYmluYXJ5X3N0cmNh c2VjbXAoa2V5LnMsIGtleV9sZW4tMSwgbXB0ci0+Y29tbW9uLmZ1bmN0aW9uX25hbWUucywg bGVuKSA9PSAwKSkpIHsKKwkJCQkJICAgIChVRyh1bmljb2RlKQorCQkJCQkgICAgID8gemVu ZF91X2JpbmFyeV9zdHJjbXAoa2V5LnUsIGtleV9sZW4tMSwgbGNuYW1lLnUsIGxjbmFtZV9s ZW4pID09IDAKKwkJCQkJICAgICA6IHplbmRfYmluYXJ5X3N0cmNtcChrZXkucywga2V5X2xl bi0xLCBsY25hbWUucywgbGNuYW1lX2xlbikgPT0gMCkKKwkJCQkJKSB7CisJCQkJCQl6ZW5k X2Z1bmN0aW9uICpjbG9zdXJlOworCQkJCQkJLyogc2VlIGlmIHRoaXMgaXMgYSBjbG9zdXJl ICovCisJCQkJCQlpZiAoY2UgPT0gemVuZF9jZV9jbG9zdXJlICYmIG9iaiAmJiAobGVuID09 IHNpemVvZihaRU5EX0lOVk9LRV9GVU5DX05BTUUpLTEpCisJCQkJCQkJJiYgWkVORF9VX0VR VUFMKFpFTkRfU1RSX1RZUEUsIGxjbmFtZSwgbGVuLCBaRU5EX0lOVk9LRV9GVU5DX05BTUUs IHNpemVvZihaRU5EX0lOVk9LRV9GVU5DX05BTUUpLTEpCisJCQkJCQkJJiYgKGNsb3N1cmUg PSB6ZW5kX2dldF9jbG9zdXJlX2ludm9rZV9tZXRob2Qob2JqIFRTUk1MU19DQykpICE9IE5V TEwKKwkJCQkJCSkgeworCQkJCQkJCW1wdHIgPSBjbG9zdXJlOworCQkJCQkJfSBlbHNlIHsK KwkJCQkJCQljbG9zdXJlID0gTlVMTDsKKwkJCQkJCX0KIAogCQkJCQkJc3RyaW5nX3ByaW50 ZigmZHluLCAiXG4iKTsKIAkJCQkJCV9mdW5jdGlvbl9zdHJpbmcoJmR5biwgbXB0ciwgY2Us IHN1Yl9pbmRlbnQuc3RyaW5nIFRTUk1MU19DQyk7CiAJCQkJCQljb3VudCsrOworCQkJCQkJ X2ZyZWVfZnVuY3Rpb24oY2xvc3VyZSBUU1JNTFNfQ0MpOwogCQkJCQl9CisJCQkJCWVmcmVl KGxjbmFtZS52KTsKIAkJCQl9CiAJCQkJemVuZF9oYXNoX21vdmVfZm9yd2FyZF9leCgmY2Ut PmZ1bmN0aW9uX3RhYmxlLCAmcG9zKTsKIAkJCX0KQEAgLTEwNTgsNiArMTA5OSw4IEBAIFBI UEFQSSB2b2lkIHplbmRfcmVmbGVjdGlvbl9jbGFzc19mYWN0b3IKIAlpbnRlcm4gPSAocmVm bGVjdGlvbl9vYmplY3QgKikgemVuZF9vYmplY3Rfc3RvcmVfZ2V0X29iamVjdChvYmplY3Qg VFNSTUxTX0NDKTsKIAlpbnRlcm4tPnB0ciA9IGNlOwogCWludGVybi0+ZnJlZV9wdHIgPSAw OworCWludGVybi0+aXNfZnVuY3Rpb24gPSAwOworCWludGVybi0+aXNfcGFyYW1yZWYgPSAw OwogCWludGVybi0+Y2UgPSBjZTsKIAl6ZW5kX2FzY2lpX2hhc2hfdXBkYXRlKFpfT0JKUFJP UF9QKG9iamVjdCksICJuYW1lIiwgc2l6ZW9mKCJuYW1lIiksICh2b2lkICoqKSAmbmFtZSwg c2l6ZW9mKHp2YWwgKiksIE5VTEwpOwogfQpAQCAtMTA4Nyw2ICsxMTMwLDggQEAgc3RhdGlj IHZvaWQgcmVmbGVjdGlvbl9leHRlbnNpb25fZmFjdG9yeQogCVpWQUxfQVNDSUlfU1RSSU5H TChuYW1lLCBtb2R1bGUtPm5hbWUsIG5hbWVfbGVuLCAxKTsKIAlpbnRlcm4tPnB0ciA9IG1v ZHVsZTsKIAlpbnRlcm4tPmZyZWVfcHRyID0gMDsKKwlpbnRlcm4tPmlzX2Z1bmN0aW9uID0g MDsKKwlpbnRlcm4tPmlzX3BhcmFtcmVmID0gMDsKIAlpbnRlcm4tPmNlID0gTlVMTDsKIAl6 ZW5kX2FzY2lpX2hhc2hfdXBkYXRlKFpfT0JKUFJPUF9QKG9iamVjdCksICJuYW1lIiwgc2l6 ZW9mKCJuYW1lIiksICh2b2lkICoqKSAmbmFtZSwgc2l6ZW9mKHp2YWwgKiksIE5VTEwpOwog fQpAQCAtMTExNCw2ICsxMTU5LDggQEAgc3RhdGljIHZvaWQgcmVmbGVjdGlvbl9wYXJhbWV0 ZXJfZmFjdG9yeQogCXJlZmVyZW5jZS0+ZnB0ciA9IGZwdHI7CiAJaW50ZXJuLT5wdHIgPSBy ZWZlcmVuY2U7CiAJaW50ZXJuLT5mcmVlX3B0ciA9IDE7CisJaW50ZXJuLT5pc19mdW5jdGlv biA9IDA7CisJaW50ZXJuLT5pc19wYXJhbXJlZiA9IDA7CiAJaW50ZXJuLT5jZSA9IGZwdHIt PmNvbW1vbi5zY29wZTsKIAl6ZW5kX2FzY2lpX2hhc2hfdXBkYXRlKFpfT0JKUFJPUF9QKG9i amVjdCksICJuYW1lIiwgc2l6ZW9mKCJuYW1lIiksICh2b2lkICoqKSAmbmFtZSwgc2l6ZW9m KHp2YWwgKiksIE5VTEwpOwogfQpAQCAtMTEzMiw2ICsxMTc5LDggQEAgc3RhdGljIHZvaWQg cmVmbGVjdGlvbl9mdW5jdGlvbl9mYWN0b3J5KAogCWludGVybiA9IChyZWZsZWN0aW9uX29i amVjdCAqKSB6ZW5kX29iamVjdF9zdG9yZV9nZXRfb2JqZWN0KG9iamVjdCBUU1JNTFNfQ0Mp OwogCWludGVybi0+cHRyID0gZnVuY3Rpb247CiAJaW50ZXJuLT5mcmVlX3B0ciA9IDA7CisJ aW50ZXJuLT5pc19mdW5jdGlvbiA9IDA7CisJaW50ZXJuLT5pc19wYXJhbXJlZiA9IDA7CiAJ aW50ZXJuLT5jZSA9IE5VTEw7CiAJemVuZF9hc2NpaV9oYXNoX3VwZGF0ZShaX09CSlBST1Bf UChvYmplY3QpLCAibmFtZSIsIHNpemVvZigibmFtZSIpLCAodm9pZCAqKikgJm5hbWUsIHNp emVvZih6dmFsICopLCBOVUxMKTsKIH0KQEAgLTExNTIsNiArMTIwMSw4IEBAIHN0YXRpYyB2 b2lkIHJlZmxlY3Rpb25fbWV0aG9kX2ZhY3RvcnkoemUKIAlpbnRlcm4gPSAocmVmbGVjdGlv bl9vYmplY3QgKikgemVuZF9vYmplY3Rfc3RvcmVfZ2V0X29iamVjdChvYmplY3QgVFNSTUxT X0NDKTsKIAlpbnRlcm4tPnB0ciA9IG1ldGhvZDsKIAlpbnRlcm4tPmZyZWVfcHRyID0gMDsK KwlpbnRlcm4tPmlzX2Z1bmN0aW9uID0gMTsKKwlpbnRlcm4tPmlzX3BhcmFtcmVmID0gMDsK IAlpbnRlcm4tPmNlID0gY2U7CiAJemVuZF9hc2NpaV9oYXNoX3VwZGF0ZShaX09CSlBST1Bf UChvYmplY3QpLCAibmFtZSIsIHNpemVvZigibmFtZSIpLCAodm9pZCAqKikgJm5hbWUsIHNp emVvZih6dmFsICopLCBOVUxMKTsKIAl6ZW5kX2FzY2lpX2hhc2hfdXBkYXRlKFpfT0JKUFJP UF9QKG9iamVjdCksICJjbGFzcyIsIHNpemVvZigiY2xhc3MiKSwgKHZvaWQgKiopICZjbGFz c25hbWUsIHNpemVvZih6dmFsICopLCBOVUxMKTsKQEAgLTEyMDEsNiArMTI1Miw4IEBAIHN0 YXRpYyB2b2lkIHJlZmxlY3Rpb25fcHJvcGVydHlfZmFjdG9yeSgKIAlyZWZlcmVuY2UtPmln bm9yZV92aXNpYmlsaXR5ID0gMDsKIAlpbnRlcm4tPnB0ciA9IHJlZmVyZW5jZTsKIAlpbnRl cm4tPmZyZWVfcHRyID0gMTsKKwlpbnRlcm4tPmlzX2Z1bmN0aW9uID0gMDsKKwlpbnRlcm4t PmlzX3BhcmFtcmVmID0gMDsKIAlpbnRlcm4tPmNlID0gY2U7CiAJemVuZF9hc2NpaV9oYXNo X3VwZGF0ZShaX09CSlBST1BfUChvYmplY3QpLCAibmFtZSIsIHNpemVvZigibmFtZSIpLCAo dm9pZCAqKikgJm5hbWUsIHNpemVvZih6dmFsICopLCBOVUxMKTsKIAl6ZW5kX2FzY2lpX2hh c2hfdXBkYXRlKFpfT0JKUFJPUF9QKG9iamVjdCksICJjbGFzcyIsIHNpemVvZigiY2xhc3Mi KSwgKHZvaWQgKiopICZjbGFzc25hbWUsIHNpemVvZih6dmFsICopLCBOVUxMKTsKQEAgLTE0 MzYsNiArMTQ4OSw4IEBAIFpFTkRfTUVUSE9EKHJlZmxlY3Rpb25fZnVuY3Rpb24sIF9fY29u c3QKIAl6ZW5kX2FzY2lpX2hhc2hfdXBkYXRlKFpfT0JKUFJPUF9QKG9iamVjdCksICJuYW1l Iiwgc2l6ZW9mKCJuYW1lIiksICh2b2lkICoqKSAmbmFtZSwgc2l6ZW9mKHp2YWwgKiksIE5V TEwpOwogCWludGVybi0+cHRyID0gZnB0cjsKIAlpbnRlcm4tPmZyZWVfcHRyID0gMDsKKwlp bnRlcm4tPmlzX2Z1bmN0aW9uID0gMTsKKwlpbnRlcm4tPmlzX3BhcmFtcmVmID0gMDsKIAlp bnRlcm4tPmNlID0gTlVMTDsKIH0KIC8qIH19fSAqLwpAQCAtMTkxNiw3ICsxOTcxLDEzIEBA IFpFTkRfTUVUSE9EKHJlZmxlY3Rpb25fcGFyYW1ldGVyLCBfX2NvbnMKIAkJCQkKIAkJCQlj b252ZXJ0X3RvX3RleHRfZXgobWV0aG9kKTsKIAkJCQlsY25hbWUgPSB6ZW5kX3Vfc3RyX2Nh c2VfZm9sZChaX1RZUEVfUFAobWV0aG9kKSwgWl9VTklWQUxfUFAobWV0aG9kKSwgWl9VTklM RU5fUFAobWV0aG9kKSwgMSwgJmxjbmFtZV9sZW4pOwotCQkJCWlmICh6ZW5kX3VfaGFzaF9m aW5kKCZjZS0+ZnVuY3Rpb25fdGFibGUsIFpfVFlQRV9QUChtZXRob2QpLCBsY25hbWUsIGxj bmFtZV9sZW4gKyAxLCAodm9pZCAqKikgJmZwdHIpID09IEZBSUxVUkUpIHsKKwkJCQlpZiAo Y2UgPT0gemVuZF9jZV9jbG9zdXJlICYmIFpfVFlQRV9QUChjbGFzc3JlZikgPT0gSVNfT0JK RUNUCisJCQkJCSYmIGxjbmFtZV9sZW4gPT0gc2l6ZW9mKFpFTkRfSU5WT0tFX0ZVTkNfTkFN RSktMQorCQkJCQkmJiBaRU5EX1VfRVFVQUwoWkVORF9TVFJfVFlQRSwgbGNuYW1lLCBsY25h bWVfbGVuLCBaRU5EX0lOVk9LRV9GVU5DX05BTUUsIHNpemVvZihaRU5EX0lOVk9LRV9GVU5D X05BTUUpLTEpCisJCQkJCSYmIChmcHRyID0gemVuZF9nZXRfY2xvc3VyZV9pbnZva2VfbWV0 aG9kKCpjbGFzc3JlZiBUU1JNTFNfQ0MpKSAhPSBOVUxMCisJCQkJKSB7CisJCQkJCS8qIGRv IG5vdGhpbmcsIGZwdHIgaXMgYWxyZWFkeSBzZXQgKi8KKwkJCQl9IGVsc2UgaWYgKHplbmRf dV9oYXNoX2ZpbmQoJmNlLT5mdW5jdGlvbl90YWJsZSwgWl9UWVBFX1BQKG1ldGhvZCksIGxj bmFtZSwgbGNuYW1lX2xlbiArIDEsICh2b2lkICoqKSAmZnB0cikgPT0gRkFJTFVSRSkgewog CQkJCQllZnJlZShsY25hbWUudik7CiAJCQkJCXplbmRfdGhyb3dfZXhjZXB0aW9uX2V4KHJl ZmxlY3Rpb25fZXhjZXB0aW9uX3B0ciwgMCBUU1JNTFNfQ0MsIAogCQkJCQkJIk1ldGhvZCAl Ujo6JVIoKSBkb2VzIG5vdCBleGlzdCIsIFpfVFlQRV9QUChjbGFzc3JlZiksIFpfVU5JVkFM X1BQKGNsYXNzcmVmKSwgWl9UWVBFX1BQKG1ldGhvZCksIFpfVU5JVkFMX1BQKG1ldGhvZCkp OwpAQCAtMTkyNSw3ICsxOTg2LDIwIEBAIFpFTkRfTUVUSE9EKHJlZmxlY3Rpb25fcGFyYW1l dGVyLCBfX2NvbnMKIAkJCQllZnJlZShsY25hbWUudik7CiAJCQl9CiAJCQlicmVhazsKLQkJ CQorCisJCWNhc2UgSVNfT0JKRUNUOiB7CisJCQkJY2UgPSBaX09CSkNFX1AocmVmZXJlbmNl KTsKKwkJCQkKKwkJCQlpZiAoY2UgPT0gemVuZF9jZV9jbG9zdXJlICYmIChmcHRyID0gemVu ZF9nZXRfY2xvc3VyZV9pbnZva2VfbWV0aG9kKHJlZmVyZW5jZSBUU1JNTFNfQ0MpKSAhPSBO VUxMKSB7CisJCQkJCS8qIGRvIG5vdGhpbmcsIGZwdHIgaXMgYWxyZWFkeSBzZXQgKi8KKwkJ CQl9IGVsc2UgaWYgKHplbmRfdV9oYXNoX2ZpbmQoJmNlLT5mdW5jdGlvbl90YWJsZSwgSVNf U1RSSU5HLCBaU1RSKFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSksIHNpemVvZihaRU5EX0lOVk9L RV9GVU5DX05BTUUpLCAodm9pZCAqKikmZnB0cikgPT0gRkFJTFVSRSkgeworCQkJCQl6ZW5k X3Rocm93X2V4Y2VwdGlvbl9leChyZWZsZWN0aW9uX2V4Y2VwdGlvbl9wdHIsIDAgVFNSTUxT X0NDLAorCQkJCQkJIk1ldGhvZCAldjo6JXMoKSBkb2VzIG5vdCBleGlzdCIsIGNlLT5uYW1l LCBaRU5EX0lOVk9LRV9GVU5DX05BTUUpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQor CQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCV9ET19USFJPVygiVGhlIHBhcmFtZXRlciBj bGFzcyBpcyBleHBlY3RlZCB0byBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gYXJyYXkoY2xh c3MsIG1ldGhvZCkiKTsKIAkJCS8qIHJldHVybnMgb3V0IG9mIHRoaXMgZnVuY3Rpb24gKi8K QEAgLTE5NzQsNiArMjA0OCw4IEBAIFpFTkRfTUVUSE9EKHJlZmxlY3Rpb25fcGFyYW1ldGVy LCBfX2NvbnMKIAlyZWYtPmZwdHIgPSBmcHRyOwogCWludGVybi0+cHRyID0gcmVmOwogCWlu dGVybi0+ZnJlZV9wdHIgPSAxOworCWludGVybi0+aXNfZnVuY3Rpb24gPSAwOworCWludGVy bi0+aXNfcGFyYW1yZWYgPSAxOwogCWludGVybi0+Y2UgPSBjZTsKIH0KIC8qIH19fSAqLwpA QCAtMjIzNyw3ICsyMzEzLDcgQEAgWkVORF9NRVRIT0QocmVmbGVjdGlvbl9tZXRob2QsIGV4 cG9ydCkKIFpFTkRfTUVUSE9EKHJlZmxlY3Rpb25fbWV0aG9kLCBfX2NvbnN0cnVjdCkKIHsK IAl6dmFsICpuYW1lLCAqY2xhc3NuYW1lOwotCXp2YWwgKm9iamVjdDsKKwl6dmFsICpvYmpl Y3QsICpvcmlnX29iajsKIAlyZWZsZWN0aW9uX29iamVjdCAqaW50ZXJuOwogCXVuc2lnbmVk IGludCBsY25hbWVfbGVuOwogCXpzdHIgbGNuYW1lOwpAQCAtMjI0NiwxMSArMjMyMiwyMiBA QCBaRU5EX01FVEhPRChyZWZsZWN0aW9uX21ldGhvZCwgX19jb25zdHJ1CiAJemVuZF9mdW5j dGlvbiAqbXB0cjsKIAl6c3RyIG5hbWVfc3RyOwogCXpzdHIgdG1wOwotCWludCBuYW1lX2xl biwgdG1wX2xlbjsKKwlpbnQgbmFtZV9sZW4sIHRtcF9sZW4sIGZyZWVfbmFtZV9zdHIgPSAw OwogCXp2YWwgenRtcDsKIAl6ZW5kX3VjaGFyIHR5cGU7CiAKLQlpZiAoemVuZF9wYXJzZV9w YXJhbWV0ZXJzX2V4KFpFTkRfUEFSU0VfUEFSQU1TX1FVSUVULCBaRU5EX05VTV9BUkdTKCkg VFNSTUxTX0NDLCAienQiLCAmY2xhc3NuYW1lLCAmbmFtZV9zdHIsICZuYW1lX2xlbiwgJnR5 cGUpID09IEZBSUxVUkUpIHsKKwlpZiAoemVuZF9wYXJzZV9wYXJhbWV0ZXJzX2V4KFpFTkRf UEFSU0VfUEFSQU1TX1FVSUVULCBaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCAibyIsICZj bGFzc25hbWUpID09IFNVQ0NFU1MpIHsKKwkJaWYgKFVHKHVuaWNvZGUpKSB7CisJCQluYW1l X3N0ci51ID0gVVNUUl9NQUtFKFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSk7CisJCQlmcmVlX25h bWVfc3RyID0gMTsKKwkJCXR5cGUgPSBJU19VTklDT0RFOworCQl9IGVsc2UgeworCQkJbmFt ZV9zdHIucyA9IFpFTkRfSU5WT0tFX0ZVTkNfTkFNRTsKKwkJCXR5cGUgPSBJU19TVFJJTkc7 CisJCX0KKwkJbmFtZV9sZW4gPSBzaXplb2YoWkVORF9JTlZPS0VfRlVOQ19OQU1FKS0xOwor CQlvcmlnX29iaiA9IGNsYXNzbmFtZTsKKwl9IGVsc2UgaWYgKHplbmRfcGFyc2VfcGFyYW1l dGVyc19leChaRU5EX1BBUlNFX1BBUkFNU19RVUlFVCwgWkVORF9OVU1fQVJHUygpIFRTUk1M U19DQywgInp0IiwgJmNsYXNzbmFtZSwgJm5hbWVfc3RyLCAmbmFtZV9sZW4sICZ0eXBlKSA9 PSBGQUlMVVJFKSB7CiAJCWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnMoWkVORF9OVU1fQVJH UygpIFRTUk1MU19DQywgInQiLCAmbmFtZV9zdHIsICZuYW1lX2xlbiwgJnR5cGUpID09IEZB SUxVUkUpIHsKIAkJCXJldHVybjsKIAkJfQpAQCAtMjI3MiwxMSArMjM1OSwxOSBAQCBaRU5E X01FVEhPRChyZWZsZWN0aW9uX21ldGhvZCwgX19jb25zdHJ1CiAJCX0gZWxzZSB7CiAJCQlu YW1lX3N0ci5zID0gdG1wLnMgKyAyOwogCQl9Ci0JfQorCQlvcmlnX29iaiA9IE5VTEw7CisJ fSBlbHNlIGlmIChaX1RZUEVfUChjbGFzc25hbWUpID09IElTX09CSkVDVCkgeworCQlvcmln X29iaiA9IGNsYXNzbmFtZTsKKwl9IGVsc2UgeworCQlvcmlnX29iaiA9IE5VTEw7CisgCX0K IAogCW9iamVjdCA9IGdldFRoaXMoKTsKIAlpbnRlcm4gPSAocmVmbGVjdGlvbl9vYmplY3Qg KikgemVuZF9vYmplY3Rfc3RvcmVfZ2V0X29iamVjdChvYmplY3QgVFNSTUxTX0NDKTsKIAlp ZiAoaW50ZXJuID09IE5VTEwpIHsKKwkJaWYgKGZyZWVfbmFtZV9zdHIpIHsKKwkJCWVmcmVl KG5hbWVfc3RyLnYpOworCQl9CiAJCXJldHVybjsKIAl9CiAJCkBAIC0yMjkwLDYgKzIzODUs OSBAQCBaRU5EX01FVEhPRChyZWZsZWN0aW9uX21ldGhvZCwgX19jb25zdHJ1CiAJCQkJaWYg KGNsYXNzbmFtZSA9PSAmenRtcCkgewogCQkJCQl6dmFsX2R0b3IoJnp0bXApOwogCQkJCX0K KwkJCQlpZiAoZnJlZV9uYW1lX3N0cikgeworCQkJCQllZnJlZShuYW1lX3N0ci52KTsKKwkJ CQl9CiAJCQkJcmV0dXJuOwogCQkJfQogCQkJY2UgPSAqcGNlOwpAQCAtMjMxOCwxOSArMjQx NiwzMiBAQCBaRU5EX01FVEhPRChyZWZsZWN0aW9uX21ldGhvZCwgX19jb25zdHJ1CiAJCiAJ bGNuYW1lID0gemVuZF91X3N0cl9jYXNlX2ZvbGQodHlwZSwgbmFtZV9zdHIsIG5hbWVfbGVu LCAxLCAmbGNuYW1lX2xlbik7CiAKLQlpZiAoemVuZF91X2hhc2hfZmluZCgmY2UtPmZ1bmN0 aW9uX3RhYmxlLCB0eXBlLCBsY25hbWUsIGxjbmFtZV9sZW4gKyAxLCAodm9pZCAqKikgJm1w dHIpID09IEZBSUxVUkUpIHsKKwlpZiAoY2UgPT0gemVuZF9jZV9jbG9zdXJlICYmIG9yaWdf b2JqICYmIChsY25hbWVfbGVuID09IHNpemVvZihaRU5EX0lOVk9LRV9GVU5DX05BTUUpLTEp CisJCSYmIFpFTkRfVV9FUVVBTChaRU5EX1NUUl9UWVBFLCBsY25hbWUsIGxjbmFtZV9sZW4s IFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSwgc2l6ZW9mKFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSkt MSkKKwkJJiYgKG1wdHIgPSB6ZW5kX2dldF9jbG9zdXJlX2ludm9rZV9tZXRob2Qob3JpZ19v YmogVFNSTUxTX0NDKSkgIT0gTlVMTAorCSkgeworCQkvKiBkbyBub3RoaW5nLCBtcHRyIGFs cmVhZHkgc2V0ICovCisJfSBlbHNlIGlmICh6ZW5kX3VfaGFzaF9maW5kKCZjZS0+ZnVuY3Rp b25fdGFibGUsIHR5cGUsIGxjbmFtZSwgbGNuYW1lX2xlbiArIDEsICh2b2lkICoqKSAmbXB0 cikgPT0gRkFJTFVSRSkgewogCQllZnJlZShsY25hbWUudik7CiAJCXplbmRfdGhyb3dfZXhj ZXB0aW9uX2V4KHJlZmxlY3Rpb25fZXhjZXB0aW9uX3B0ciwgMCBUU1JNTFNfQ0MsIAogCQkJ Ik1ldGhvZCAldjo6JVIoKSBkb2VzIG5vdCBleGlzdCIsIGNlLT5uYW1lLCB0eXBlLCBuYW1l X3N0cik7CisJCWlmIChmcmVlX25hbWVfc3RyKSB7CisJCQllZnJlZShuYW1lX3N0ci52KTsK KwkJfQogCQlyZXR1cm47CiAJfQogCWVmcmVlKGxjbmFtZS52KTsKKwlpZiAoZnJlZV9uYW1l X3N0cikgeworCQllZnJlZShuYW1lX3N0ci52KTsKKwl9CiAKIAlNQUtFX1NURF9aVkFMKG5h bWUpOwogCVpWQUxfVEVYVChuYW1lLCBtcHRyLT5jb21tb24uZnVuY3Rpb25fbmFtZSwgMSk7 CiAJemVuZF9hc2NpaV9oYXNoX3VwZGF0ZShaX09CSlBST1BfUChvYmplY3QpLCAibmFtZSIs IHNpemVvZigibmFtZSIpLCAodm9pZCAqKikgJm5hbWUsIHNpemVvZih6dmFsICopLCBOVUxM KTsKIAlpbnRlcm4tPnB0ciA9IG1wdHI7CiAJaW50ZXJuLT5mcmVlX3B0ciA9IDA7CisJaW50 ZXJuLT5pc19mdW5jdGlvbiA9IDE7CisJaW50ZXJuLT5pc19wYXJhbXJlZiA9IDA7CiAJaW50 ZXJuLT5jZSA9IGNlOwogfQogLyogfX19ICovCkBAIC0yODU2LDYgKzI5NjcsOCBAQCBzdGF0 aWMgdm9pZCByZWZsZWN0aW9uX2NsYXNzX29iamVjdF9jdG9yCiAJCWludGVybi0+cHRyID0g KmNlOwogCX0KIAlpbnRlcm4tPmZyZWVfcHRyID0gMDsKKwlpbnRlcm4tPmlzX2Z1bmN0aW9u ID0gMDsKKwlpbnRlcm4tPmlzX3BhcmFtcmVmID0gMDsKIH0KIC8qIH19fSAqLwogCkBAIC0z MjA5LDcgKzMzMjIsMTMgQEAgWkVORF9NRVRIT0QocmVmbGVjdGlvbl9jbGFzcywgZ2V0TWV0 aG9kKQogCiAJR0VUX1JFRkxFQ1RJT05fT0JKRUNUX1BUUihjZSk7CiAJbGNfbmFtZSA9IHpl bmRfdV9zdHJfY2FzZV9mb2xkKHR5cGUsIG5hbWUsIG5hbWVfbGVuLCAxLCAmbGNfbmFtZV9s ZW4pOwotCWlmICh6ZW5kX3VfaGFzaF9maW5kKCZjZS0+ZnVuY3Rpb25fdGFibGUsIHR5cGUs IGxjX25hbWUsIGxjX25hbWVfbGVuICsgMSwgKHZvaWQqKikgJm1wdHIpID09IFNVQ0NFU1Mp IHsKKwlpZiAoY2UgPT0gemVuZF9jZV9jbG9zdXJlICYmIGludGVybi0+b2JqICYmIChsY19u YW1lX2xlbiA9PSBzaXplb2YoWkVORF9JTlZPS0VfRlVOQ19OQU1FKS0xKQorCQkmJiBaRU5E X1VfRVFVQUwoWkVORF9TVFJfVFlQRSwgbGNfbmFtZSwgbGNfbmFtZV9sZW4sIFpFTkRfSU5W T0tFX0ZVTkNfTkFNRSwgc2l6ZW9mKFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSktMSkKKwkJJiYg KG1wdHIgPSB6ZW5kX2dldF9jbG9zdXJlX2ludm9rZV9tZXRob2QoaW50ZXJuLT5vYmogVFNS TUxTX0NDKSkgIT0gTlVMTAorCSkgeworCQlyZWZsZWN0aW9uX21ldGhvZF9mYWN0b3J5KGNl LCBtcHRyLCByZXR1cm5fdmFsdWUgVFNSTUxTX0NDKTsKKwkJZWZyZWUobGNfbmFtZS52KTsK Kwl9IGVsc2UgaWYgKHplbmRfdV9oYXNoX2ZpbmQoJmNlLT5mdW5jdGlvbl90YWJsZSwgdHlw ZSwgbGNfbmFtZSwgbGNfbmFtZV9sZW4gKyAxLCAodm9pZCoqKSAmbXB0cikgPT0gU1VDQ0VT UykgewogCQlyZWZsZWN0aW9uX21ldGhvZF9mYWN0b3J5KGNlLCBtcHRyLCByZXR1cm5fdmFs dWUgVFNSTUxTX0NDKTsKIAkJZWZyZWUobGNfbmFtZS52KTsKIAl9IGVsc2UgewpAQCAtMzIy MiwxOSArMzM0MSwzOSBAQCBaRU5EX01FVEhPRChyZWZsZWN0aW9uX2NsYXNzLCBnZXRNZXRo b2QpCiAvKiB9fX0gKi8KIAogLyoge3t7IF9hZGRtZXRob2QgKi8KLXN0YXRpYyBpbnQgX2Fk ZG1ldGhvZCh6ZW5kX2Z1bmN0aW9uICptcHRyIFRTUk1MU19EQywgaW50IG51bV9hcmdzLCB2 YV9saXN0IGFyZ3MsIHplbmRfaGFzaF9rZXkgKmhhc2hfa2V5KQorc3RhdGljIHZvaWQgX2Fk ZG1ldGhvZCh6ZW5kX2Z1bmN0aW9uICptcHRyLCB6ZW5kX2NsYXNzX2VudHJ5ICpjZSwgenZh bCAqcmV0dmFsLCBsb25nIGZpbHRlciwgenZhbCAqb2JqIFRTUk1MU19EQykKIHsKIAl6dmFs ICptZXRob2Q7Ci0JemVuZF9jbGFzc19lbnRyeSAqY2UgPSAqdmFfYXJnKGFyZ3MsIHplbmRf Y2xhc3NfZW50cnkqKik7Ci0JenZhbCAqcmV0dmFsID0gdmFfYXJnKGFyZ3MsIHp2YWwqKTsK LQlsb25nIGZpbHRlciA9IHZhX2FyZyhhcmdzLCBsb25nKTsKKwl1aW50IGxlbiA9IFVHKHVu aWNvZGUpP3Vfc3RybGVuKG1wdHItPmNvbW1vbi5mdW5jdGlvbl9uYW1lLnUpOnN0cmxlbiht cHRyLT5jb21tb24uZnVuY3Rpb25fbmFtZS5zKTsKKwl6ZW5kX2Z1bmN0aW9uICpjbG9zdXJl OwogCiAJaWYgKG1wdHItPmNvbW1vbi5mbl9mbGFncyAmIGZpbHRlcikgewogCQlBTExPQ19a VkFMKG1ldGhvZCk7CisJCXVuc2lnbmVkIGludCBsY19uYW1lX2xlbjsKKwkJenN0ciBsY19u YW1lID0gemVuZF91X3N0cl9jYXNlX2ZvbGQoWkVORF9TVFJfVFlQRSwgbXB0ci0+Y29tbW9u LmZ1bmN0aW9uX25hbWUsIGxlbiwgMSwgJmxjX25hbWVfbGVuKTsKKwkJaWYgKGNlID09IHpl bmRfY2VfY2xvc3VyZSAmJiBvYmogJiYgKGxjX25hbWVfbGVuID09IHNpemVvZihaRU5EX0lO Vk9LRV9GVU5DX05BTUUpLTEpCisJCQkmJiBaRU5EX1VfRVFVQUwoWkVORF9TVFJfVFlQRSwg bGNfbmFtZSwgbGNfbmFtZV9sZW4sIFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSwgc2l6ZW9mKFpF TkRfSU5WT0tFX0ZVTkNfTkFNRSktMSkKKwkJCSYmIChjbG9zdXJlID0gemVuZF9nZXRfY2xv c3VyZV9pbnZva2VfbWV0aG9kKG9iaiBUU1JNTFNfQ0MpKSAhPSBOVUxMCisJCSkgeworCQkJ bXB0ciA9IGNsb3N1cmU7CisJCX0KIAkJcmVmbGVjdGlvbl9tZXRob2RfZmFjdG9yeShjZSwg bXB0ciwgbWV0aG9kIFRTUk1MU19DQyk7CiAJCWFkZF9uZXh0X2luZGV4X3p2YWwocmV0dmFs LCBtZXRob2QpOworCQllZnJlZShsY19uYW1lLnYpOwogCX0KLQlyZXR1cm4gMDsKK30KKy8q IH19fSAqLworCisvKiB7e3sgX2FkZG1ldGhvZCAqLworc3RhdGljIGludCBfYWRkbWV0aG9k X3ZhKHplbmRfZnVuY3Rpb24gKm1wdHIgVFNSTUxTX0RDLCBpbnQgbnVtX2FyZ3MsIHZhX2xp c3QgYXJncywgemVuZF9oYXNoX2tleSAqaGFzaF9rZXkpCit7CisJemVuZF9jbGFzc19lbnRy eSAqY2UgPSAqdmFfYXJnKGFyZ3MsIHplbmRfY2xhc3NfZW50cnkqKik7CisJenZhbCAqcmV0 dmFsID0gdmFfYXJnKGFyZ3MsIHp2YWwqKTsKKwlsb25nIGZpbHRlciA9IHZhX2FyZyhhcmdz LCBsb25nKTsKKwl6dmFsICpvYmogPSB2YV9hcmcoYXJncywgenZhbCAqKTsKKwkKKwlfYWRk bWV0aG9kKG1wdHIsIGNlLCByZXR2YWwsIGZpbHRlciwgb2JqIFRTUk1MU19DQyk7CisJcmV0 dXJuIFpFTkRfSEFTSF9BUFBMWV9LRUVQOwogfQogLyogfX19ICovCiAKQEAgLTMyNjAsNyAr MzM5OSwxNCBAQCBaRU5EX01FVEhPRChyZWZsZWN0aW9uX2NsYXNzLCBnZXRNZXRob2RzCiAJ R0VUX1JFRkxFQ1RJT05fT0JKRUNUX1BUUihjZSk7CiAKIAlhcnJheV9pbml0KHJldHVybl92 YWx1ZSk7Ci0JemVuZF9oYXNoX2FwcGx5X3dpdGhfYXJndW1lbnRzKCZjZS0+ZnVuY3Rpb25f dGFibGUgVFNSTUxTX0NDLCAoYXBwbHlfZnVuY19hcmdzX3QpIF9hZGRtZXRob2QsIDMsICZj ZSwgcmV0dXJuX3ZhbHVlLCBmaWx0ZXIpOworCXplbmRfaGFzaF9hcHBseV93aXRoX2FyZ3Vt ZW50cygmY2UtPmZ1bmN0aW9uX3RhYmxlIFRTUk1MU19DQywgKGFwcGx5X2Z1bmNfYXJnc190 KSBfYWRkbWV0aG9kX3ZhLCA0LCAmY2UsIHJldHVybl92YWx1ZSwgZmlsdGVyLCBpbnRlcm4t Pm9iaik7CisJaWYgKGludGVybi0+b2JqICYmIGluc3RhbmNlb2ZfZnVuY3Rpb24oY2UsIHpl bmRfY2VfY2xvc3VyZSkpIHsKKwkJemVuZF9mdW5jdGlvbiAqY2xvc3VyZSA9IHplbmRfZ2V0 X2Nsb3N1cmVfaW52b2tlX21ldGhvZChpbnRlcm4tPm9iaiBUU1JNTFNfQ0MpOworCQlpZiAo Y2xvc3VyZSkgeworCQkJX2FkZG1ldGhvZChjbG9zdXJlLCBjZSwgcmV0dXJuX3ZhbHVlLCBm aWx0ZXIsIGludGVybi0+b2JqIFRTUk1MU19DQyk7CisJCQlfZnJlZV9mdW5jdGlvbihjbG9z dXJlIFRTUk1MU19DQyk7CisJCX0KKwl9CiB9CiAvKiB9fX0gKi8KIApAQCAtNDEzNiw2ICs0 MjgyLDggQEAgWkVORF9NRVRIT0QocmVmbGVjdGlvbl9wcm9wZXJ0eSwgX19jb25zdAogCXJl ZmVyZW5jZS0+aWdub3JlX3Zpc2liaWxpdHkgPSAwOwogCWludGVybi0+cHRyID0gcmVmZXJl bmNlOwogCWludGVybi0+ZnJlZV9wdHIgPSAxOworCWludGVybi0+aXNfZnVuY3Rpb24gPSAw OworCWludGVybi0+aXNfcGFyYW1yZWYgPSAwOwogCWludGVybi0+Y2UgPSBjZTsKIH0KIC8q IH19fSAqLwpAQCAtNDQ5MSw2ICs0NjM5LDggQEAgWkVORF9NRVRIT0QocmVmbGVjdGlvbl9l eHRlbnNpb24sIF9fY29ucwogCXplbmRfYXNjaWlfaGFzaF91cGRhdGUoWl9PQkpQUk9QX1Ao b2JqZWN0KSwgIm5hbWUiLCBzaXplb2YoIm5hbWUiKSwgKHZvaWQgKiopICZuYW1lLCBzaXpl b2YoenZhbCAqKSwgTlVMTCk7CiAJaW50ZXJuLT5wdHIgPSBtb2R1bGU7CiAJaW50ZXJuLT5m cmVlX3B0ciA9IDA7CisJaW50ZXJuLT5pc19mdW5jdGlvbiA9IDA7CisJaW50ZXJuLT5pc19w YXJhbXJlZiA9IDA7CiAJaW50ZXJuLT5jZSA9IE5VTEw7CiB9CiAvKiB9fX0gKi8KSW5kZXg6 IGV4dC9yZWZsZWN0aW9uL3Rlc3RzL2Nsb3N1cmVzXzAwMS5waHB0Cj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IGV4dC9yZWZsZWN0aW9uL3Rlc3RzL2Nsb3N1cmVzXzAwMS5waHB0CmRpZmYg LU4gZXh0L3JlZmxlY3Rpb24vdGVzdHMvY2xvc3VyZXNfMDAxLnBocHQKLS0tIC9kZXYvbnVs bAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBleHQvcmVmbGVjdGlvbi90ZXN0cy9j bG9zdXJlc18wMDEucGhwdAkxMCBBdWcgMjAwOCAyMjo0NzozMSAtMDAwMApAQCAtMCwwICsx LDcwIEBACistLVRFU1QtLQorUmVmbGVjdGlvbiBvbiBjbG9zdXJlcworLS1GSUxFLS0gCis8 P3BocAorCiskY2xvc3VyZSA9IGZ1bmN0aW9uICgkYSwgJGIgPSAwKSB7IH07CisKKyRybyA9 IG5ldyBSZWZsZWN0aW9uT2JqZWN0ICgkY2xvc3VyZSk7Ciskcm0gPSAkcm8tPmdldE1ldGhv ZCAoJ19faW52b2tlJyk7Cit2YXJfZHVtcCAoJHJtLT5nZXROdW1iZXJPZlBhcmFtZXRlcnMo KSk7Cit2YXJfZHVtcCAoJHJtLT5nZXROdW1iZXJPZlJlcXVpcmVkUGFyYW1ldGVycygpKTsK KyRybXMgPSAkcm8tPmdldE1ldGhvZHMoKTsKK2ZvcmVhY2ggKCRybXMgYXMgJHJtKSB7CisJ aWYgKCRybS0+Z2V0TmFtZSAoKSA9PSAnX19pbnZva2UnKSB7CisJCXZhcl9kdW1wICgkcm0t PmdldE51bWJlck9mUGFyYW1ldGVycygpKTsKKwkJdmFyX2R1bXAgKCRybS0+Z2V0TnVtYmVy T2ZSZXF1aXJlZFBhcmFtZXRlcnMoKSk7CisJfQorfQorCitlY2hvICItLS1cbiI7CisKKyRy bSA9IG5ldyBSZWZsZWN0aW9uTWV0aG9kICgkY2xvc3VyZSk7Cit2YXJfZHVtcCAoJHJtLT5n ZXROYW1lICgpKTsKK3Zhcl9kdW1wICgkcm0tPmdldE51bWJlck9mUGFyYW1ldGVycygpKTsK K3Zhcl9kdW1wICgkcm0tPmdldE51bWJlck9mUmVxdWlyZWRQYXJhbWV0ZXJzKCkpOworCitl Y2hvICItLS1cbiI7CisKKyRycCA9IG5ldyBSZWZsZWN0aW9uUGFyYW1ldGVyIChhcnJheSAo JGNsb3N1cmUsICdfX2ludm9rZScpLCAwKTsKK3Zhcl9kdW1wICgkcnAtPmlzT3B0aW9uYWwg KCkpOworJHJwID0gbmV3IFJlZmxlY3Rpb25QYXJhbWV0ZXIgKGFycmF5ICgkY2xvc3VyZSwg J19faW52b2tlJyksIDEpOwordmFyX2R1bXAgKCRycC0+aXNPcHRpb25hbCAoKSk7CiskcnAg PSBuZXcgUmVmbGVjdGlvblBhcmFtZXRlciAoYXJyYXkgKCRjbG9zdXJlLCAnX19pbnZva2Un KSwgJ2EnKTsKK3Zhcl9kdW1wICgkcnAtPmlzT3B0aW9uYWwgKCkpOworJHJwID0gbmV3IFJl ZmxlY3Rpb25QYXJhbWV0ZXIgKGFycmF5ICgkY2xvc3VyZSwgJ19faW52b2tlJyksICdiJyk7 Cit2YXJfZHVtcCAoJHJwLT5pc09wdGlvbmFsICgpKTsKKworZWNobyAiLS0tXG4iOworCisk cnAgPSBuZXcgUmVmbGVjdGlvblBhcmFtZXRlciAoJGNsb3N1cmUsIDApOwordmFyX2R1bXAg KCRycC0+aXNPcHRpb25hbCAoKSk7CiskcnAgPSBuZXcgUmVmbGVjdGlvblBhcmFtZXRlciAo JGNsb3N1cmUsIDEpOwordmFyX2R1bXAgKCRycC0+aXNPcHRpb25hbCAoKSk7CiskcnAgPSBu ZXcgUmVmbGVjdGlvblBhcmFtZXRlciAoJGNsb3N1cmUsICdhJyk7Cit2YXJfZHVtcCAoJHJw LT5pc09wdGlvbmFsICgpKTsKKyRycCA9IG5ldyBSZWZsZWN0aW9uUGFyYW1ldGVyICgkY2xv c3VyZSwgJ2InKTsKK3Zhcl9kdW1wICgkcnAtPmlzT3B0aW9uYWwgKCkpOworCis/PgorPT09 RE9ORT09PQorLS1FWFBFQ1RGLS0KK2ludCgyKQoraW50KDEpCitpbnQoMikKK2ludCgxKQor LS0tCit1bmljb2RlKDgpICJfX2ludm9rZSIKK2ludCgyKQoraW50KDEpCistLS0KK2Jvb2wo ZmFsc2UpCitib29sKHRydWUpCitib29sKGZhbHNlKQorYm9vbCh0cnVlKQorLS0tCitib29s KGZhbHNlKQorYm9vbCh0cnVlKQorYm9vbChmYWxzZSkKK2Jvb2wodHJ1ZSkKKz09PURPTkU9 PT0KSW5kZXg6IGV4dC9yZWZsZWN0aW9uL3Rlc3RzL2Nsb3N1cmVzXzAwMi5waHB0Cj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUkNTIGZpbGU6IGV4dC9yZWZsZWN0aW9uL3Rlc3RzL2Nsb3N1cmVzXzAwMi5w aHB0CmRpZmYgLU4gZXh0L3JlZmxlY3Rpb24vdGVzdHMvY2xvc3VyZXNfMDAyLnBocHQKLS0t IC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBleHQvcmVmbGVjdGlv bi90ZXN0cy9jbG9zdXJlc18wMDIucGhwdAkxMCBBdWcgMjAwOCAyMjo0NzozMSAtMDAwMApA QCAtMCwwICsxLDI1IEBACistLVRFU1QtLQorUmVmbGVjdGlvbiBvbiBpbnZva2FibGUgb2Jq ZWN0cworLS1GSUxFLS0gCis8P3BocAorCiskcm0gPSBuZXcgUmVmbGVjdGlvbk1ldGhvZCAo bmV3IEMpOwordmFyX2R1bXAgKCRybS0+Z2V0TmFtZSAoKSk7Cit2YXJfZHVtcCAoJHJtLT5n ZXROdW1iZXJPZlBhcmFtZXRlcnMoKSk7Cit2YXJfZHVtcCAoJHJtLT5nZXROdW1iZXJPZlJl cXVpcmVkUGFyYW1ldGVycygpKTsKKworJHJwID0gbmV3IFJlZmxlY3Rpb25QYXJhbWV0ZXIg KG5ldyBDLCAwKTsKK3Zhcl9kdW1wICgkcnAtPmlzT3B0aW9uYWwgKCkpOworCitjbGFzcyBD IHsKKwlmdW5jdGlvbiBfX2ludm9rZSAoJGEpIHsgfQorfQorCis/PgorPT09RE9ORT09PQor LS1FWFBFQ1RGLS0KK3VuaWNvZGUoOCkgIl9faW52b2tlIgoraW50KDEpCitpbnQoMSkKK2Jv b2woZmFsc2UpCis9PT1ET05FPT09Cg== ------------96D83820972375--