Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:12792 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 76390 invoked by uid 1010); 14 Sep 2004 11:17:16 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 72246 invoked from network); 14 Sep 2004 11:14:33 -0000 Received: from unknown (HELO jdi.jdimedia.nl) (212.204.192.51) by pb1.pair.com with SMTP; 14 Sep 2004 11:14:33 -0000 Received: from localhost (localhost [127.0.0.1]) by jdi.jdimedia.nl (8.12.11/8.12.11) with ESMTP id i8EBEW4s024288 for ; Tue, 14 Sep 2004 13:14:32 +0200 Received: from localhost (localhost [127.0.0.1]) by jdi.jdimedia.nl (8.12.11/8.12.11) with ESMTP id i8EBESZD024272; Tue, 14 Sep 2004 13:14:29 +0200 Date: Tue, 14 Sep 2004 13:14:28 +0200 (CEST) X-X-Sender: derick@localhost To: PHP Developers Mailing List cc: Ilia Alshanetsky Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323328-1652703221-1095160468=:1930" X-Virus-Scanned: by amavisd-new at jdimedia.nl Subject: Patch: Foreach Performance for 4.3 From: derick@derickrethans.nl (Derick Rethans) --8323328-1652703221-1095160468=:1930 Content-Type: TEXT/PLAIN; charset=US-ASCII Hei, I backported Marcus' performance-improvement-when-not-using-a-key-in-foreach patch to 4.3 and attached it. I am planning to commit this after 4.3.9 is released. If there are any comments, please let me know. Derick -- Derick Rethans http://derickrethans.nl | http://ez.no | http://xdebug.org --8323328-1652703221-1095160468=:1930 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="php-4.3-foreach.patch" Content-Transfer-Encoding: BASE64 Content-Description: Content-Disposition: attachment; filename="php-4.3-foreach.patch" PyBwaHBfdGVzdF9yZXN1bHRzXzIwMDQwOTE0LnR4dA0KPyBleHQvZ2QvdGVz dHNidWcyNzU4Mi5wbmcNCj8gZXh0L3Rva2VuaXplci90ZXN0cy9idWcyNjQ2 My5kaWZmDQo/IGV4dC90b2tlbml6ZXIvdGVzdHMvYnVnMjY0NjMuZXhwDQo/ IGV4dC90b2tlbml6ZXIvdGVzdHMvYnVnMjY0NjMubG9nDQo/IGV4dC90b2tl bml6ZXIvdGVzdHMvYnVnMjY0NjMub3V0DQo/IGV4dC90b2tlbml6ZXIvdGVz dHMvYnVnMjY0NjMucGhwDQpJbmRleDogWmVuZC96ZW5kX2NvbXBpbGUuYw0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5 L1plbmQvQXR0aWMvemVuZF9jb21waWxlLmMsdg0KcmV0cmlldmluZyByZXZp c2lvbiAxLjI0MC4yLjcNCmRpZmYgLXUgLXAgLXIxLjI0MC4yLjcgemVuZF9j b21waWxlLmMNCi0tLSBaZW5kL3plbmRfY29tcGlsZS5jCTI5IEF1ZyAyMDA0 IDE2OjUxOjA5IC0wMDAwCTEuMjQwLjIuNw0KKysrIFplbmQvemVuZF9jb21w aWxlLmMJMTQgU2VwIDIwMDQgMTE6MTA6NTggLTAwMDANCkBAIC0yMTQ3LDkg KzIxNDcsOSBAQCB2b2lkIHplbmRfZG9fZm9yZWFjaF9iZWdpbih6bm9kZSAq Zm9yZWFjDQogfQ0KIA0KIA0KLXZvaWQgemVuZF9kb19mb3JlYWNoX2NvbnQo em5vZGUgKnZhbHVlLCB6bm9kZSAqa2V5LCB6bm9kZSAqYXNfdG9rZW4gVFNS TUxTX0RDKQ0KK3ZvaWQgemVuZF9kb19mb3JlYWNoX2NvbnQoem5vZGUgKnZh bHVlLCB6bm9kZSAqa2V5LCB6bm9kZSAqYXNfdG9rZW4sIHpub2RlICpmb3Jl YWNoX3Rva2VuIFRTUk1MU19EQykNCiB7DQotCXplbmRfb3AgKm9wbGluZSA9 IGdldF9uZXh0X29wKENHKGFjdGl2ZV9vcF9hcnJheSkgVFNSTUxTX0NDKTsN CisJemVuZF9vcCAqb3BsaW5lOw0KIAl6bm9kZSByZXN1bHRfdmFsdWUsIHJl c3VsdF9rZXksIGR1bW15Ow0KIA0KIAlpZiAoa2V5LT5vcF90eXBlICE9IElT X1VOVVNFRCkgew0KQEAgLTIxNTksMTggKzIxNTksMTAgQEAgdm9pZCB6ZW5k X2RvX2ZvcmVhY2hfY29udCh6bm9kZSAqdmFsdWUsIA0KIAkJdG1wID0ga2V5 Ow0KIAkJa2V5ID0gdmFsdWU7DQogCQl2YWx1ZSA9IHRtcDsNCi0JfQ0KIA0K LQlvcGxpbmUtPm9wY29kZSA9IFpFTkRfRkVUQ0hfRElNX1RNUF9WQVI7DQot CW9wbGluZS0+cmVzdWx0Lm9wX3R5cGUgPSBJU19WQVI7DQotCW9wbGluZS0+ cmVzdWx0LnUuRUEudHlwZSA9IDA7DQotCW9wbGluZS0+cmVzdWx0LnUub3Bs aW5lX251bSA9IGdldF90ZW1wb3JhcnlfdmFyaWFibGUoQ0coYWN0aXZlX29w X2FycmF5KSk7DQotCW9wbGluZS0+b3AxID0gKmFzX3Rva2VuOw0KLQlvcGxp bmUtPm9wMi5vcF90eXBlID0gSVNfQ09OU1Q7DQotCW9wbGluZS0+b3AyLnUu Y29uc3RhbnQudHlwZSA9IElTX0xPTkc7DQotCW9wbGluZS0+b3AyLnUuY29u c3RhbnQudmFsdWUubHZhbCA9IDA7DQotCW9wbGluZS0+ZXh0ZW5kZWRfdmFs dWUgPSBaRU5EX0ZFVENIX1NUQU5EQVJEOyAvKiBpZ25vcmVkIGluIGZldGNo X2RpbV90bXBfdmFyLCBidXQgd2hhdCB0aGUgaGVsbC4gKi8NCi0JcmVzdWx0 X3ZhbHVlID0gb3BsaW5lLT5yZXN1bHQ7DQorCQkvKiBNYXJrIGV4dGVuZGVk X3ZhbHVlIGluIGNhc2UgYm90aCBrZXkgYW5kIHZhbHVlIGFyZSBiZWluZyB1 c2VkICovDQorCQlDRyhhY3RpdmVfb3BfYXJyYXkpLT5vcGNvZGVzW2ZvcmVh Y2hfdG9rZW4tPnUub3BsaW5lX251bV0uZXh0ZW5kZWRfdmFsdWUgfD0gWkVO RF9GRV9GRVRDSF9XSVRIX0tFWTsNCisJfQ0KIA0KIAlpZiAoa2V5LT5vcF90 eXBlICE9IElTX1VOVVNFRCkgew0KIAkJb3BsaW5lID0gZ2V0X25leHRfb3Ao Q0coYWN0aXZlX29wX2FycmF5KSBUU1JNTFNfQ0MpOw0KQEAgLTIxODEsOSAr MjE3MywyMyBAQCB2b2lkIHplbmRfZG9fZm9yZWFjaF9jb250KHpub2RlICp2 YWx1ZSwgDQogCQlvcGxpbmUtPm9wMSA9ICphc190b2tlbjsNCiAJCW9wbGlu ZS0+b3AyLm9wX3R5cGUgPSBJU19DT05TVDsNCiAJCW9wbGluZS0+b3AyLnUu Y29uc3RhbnQudHlwZSA9IElTX0xPTkc7DQorCQlvcGxpbmUtPm9wMi51LmNv bnN0YW50LnZhbHVlLmx2YWwgPSAwOw0KKwkJb3BsaW5lLT5leHRlbmRlZF92 YWx1ZSA9IFpFTkRfRkVUQ0hfU1RBTkRBUkQ7IC8qIGlnbm9yZWQgaW4gZmV0 Y2hfZGltX3RtcF92YXIsIGJ1dCB3aGF0IHRoZSBoZWxsLiAqLw0KKwkJcmVz dWx0X3ZhbHVlID0gb3BsaW5lLT5yZXN1bHQ7DQorDQorCQlvcGxpbmUgPSBn ZXRfbmV4dF9vcChDRyhhY3RpdmVfb3BfYXJyYXkpIFRTUk1MU19DQyk7DQor CQlvcGxpbmUtPm9wY29kZSA9IFpFTkRfRkVUQ0hfRElNX1RNUF9WQVI7DQor CQlvcGxpbmUtPnJlc3VsdC5vcF90eXBlID0gSVNfVkFSOw0KKwkJb3BsaW5l LT5yZXN1bHQudS5FQS50eXBlID0gMDsNCisJCW9wbGluZS0+cmVzdWx0LnUu b3BsaW5lX251bSA9IGdldF90ZW1wb3JhcnlfdmFyaWFibGUoQ0coYWN0aXZl X29wX2FycmF5KSk7DQorCQlvcGxpbmUtPm9wMSA9ICphc190b2tlbjsNCisJ CW9wbGluZS0+b3AyLm9wX3R5cGUgPSBJU19DT05TVDsNCisJCW9wbGluZS0+ b3AyLnUuY29uc3RhbnQudHlwZSA9IElTX0xPTkc7DQogCQlvcGxpbmUtPm9w Mi51LmNvbnN0YW50LnZhbHVlLmx2YWwgPSAxOw0KIAkJb3BsaW5lLT5leHRl bmRlZF92YWx1ZSA9IFpFTkRfRkVUQ0hfU1RBTkRBUkQ7IC8qIGlnbm9yZWQg aW4gZmV0Y2hfZGltX3RtcF92YXIsIGJ1dCB3aGF0IHRoZSBoZWxsLiAqLw0K IAkJcmVzdWx0X2tleSA9IG9wbGluZS0+cmVzdWx0Ow0KKwl9IGVsc2Ugew0K KwkJcmVzdWx0X3ZhbHVlID0gQ0coYWN0aXZlX29wX2FycmF5KS0+b3Bjb2Rl c1tmb3JlYWNoX3Rva2VuLT51Lm9wbGluZV9udW1dLnJlc3VsdDsNCiAJfQ0K IA0KIAl6ZW5kX2RvX2Fzc2lnbigmZHVtbXksIHZhbHVlLCAmcmVzdWx0X3Zh bHVlIFRTUk1MU19DQyk7DQpAQCAtMjE5MSw4ICsyMTk3LDggQEAgdm9pZCB6 ZW5kX2RvX2ZvcmVhY2hfY29udCh6bm9kZSAqdmFsdWUsIA0KIAlpZiAoa2V5 LT5vcF90eXBlICE9IElTX1VOVVNFRCkgew0KIAkJemVuZF9kb19hc3NpZ24o JmR1bW15LCBrZXksICZyZXN1bHRfa2V5IFRTUk1MU19DQyk7DQogCQlDRyhh Y3RpdmVfb3BfYXJyYXkpLT5vcGNvZGVzW0NHKGFjdGl2ZV9vcF9hcnJheSkt Pmxhc3QtMV0ucmVzdWx0LnUuRUEudHlwZSB8PSBFWFRfVFlQRV9VTlVTRUQ7 DQorCQl6ZW5kX2RvX2ZyZWUoYXNfdG9rZW4gVFNSTUxTX0NDKTsNCiAJfQ0K LQl6ZW5kX2RvX2ZyZWUoYXNfdG9rZW4gVFNSTUxTX0NDKTsNCiANCiAJZG9f YmVnaW5fbG9vcChUU1JNTFNfQyk7DQogCUlOQ19CUEMoQ0coYWN0aXZlX29w X2FycmF5KSk7DQpJbmRleDogWmVuZC96ZW5kX2NvbXBpbGUuaA0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L1plbmQv QXR0aWMvemVuZF9jb21waWxlLmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAx LjE0NC40LjUNCmRpZmYgLXUgLXAgLXIxLjE0NC40LjUgemVuZF9jb21waWxl LmgNCi0tLSBaZW5kL3plbmRfY29tcGlsZS5oCTMxIE1heSAyMDAzIDAxOjM3 OjQzIC0wMDAwCTEuMTQ0LjQuNQ0KKysrIFplbmQvemVuZF9jb21waWxlLmgJ MTQgU2VwIDIwMDQgMTE6MTA6NTggLTAwMDANCkBAIC0zMjYsNyArMzI2LDcg QEAgdm9pZCB6ZW5kX2RvX3Vuc2V0KHpub2RlICp2YXJpYWJsZSBUU1JNTA0K IHZvaWQgemVuZF9kb19pc3NldF9vcl9pc2VtcHR5KGludCB0eXBlLCB6bm9k ZSAqcmVzdWx0LCB6bm9kZSAqdmFyaWFibGUgVFNSTUxTX0RDKTsNCiANCiB2 b2lkIHplbmRfZG9fZm9yZWFjaF9iZWdpbih6bm9kZSAqZm9yZWFjaF90b2tl biwgem5vZGUgKmFycmF5LCB6bm9kZSAqb3Blbl9icmFja2V0c190b2tlbiwg em5vZGUgKmFzX3Rva2VuLCBpbnQgdmFyaWFibGUgVFNSTUxTX0RDKTsNCi12 b2lkIHplbmRfZG9fZm9yZWFjaF9jb250KHpub2RlICp2YWx1ZSwgem5vZGUg KmtleSwgem5vZGUgKmFzX3Rva2VuIFRTUk1MU19EQyk7DQordm9pZCB6ZW5k X2RvX2ZvcmVhY2hfY29udCh6bm9kZSAqdmFsdWUsIHpub2RlICprZXksIHpu b2RlICphc190b2tlbiwgem5vZGUgKmZvcmVhY2hfdG9rZW4gVFNSTUxTX0RD KTsNCiB2b2lkIHplbmRfZG9fZm9yZWFjaF9lbmQoem5vZGUgKmZvcmVhY2hf dG9rZW4sIHpub2RlICpvcGVuX2JyYWNrZXRzX3Rva2VuIFRTUk1MU19EQyk7 DQogDQogdm9pZCB6ZW5kX2RvX2RlY2xhcmVfYmVnaW4oVFNSTUxTX0QpOw0K QEAgLTU3Nyw2ICs1NzcsOSBAQCBpbnQgemVuZGxleCh6bm9kZSAqemVuZGx2 YWwgVFNSTUxTX0RDKTsNCiAjZGVmaW5lIFpFTkRfRkVUQ0hfU1RBTkRBUkQJ CTANCiAjZGVmaW5lIFpFTkRfRkVUQ0hfQUREX0xPQ0sJCTENCiANCisjZGVm aW5lIFpFTkRfRkVfRkVUQ0hfQllSRUYJMQ0KKyNkZWZpbmUgWkVORF9GRV9G RVRDSF9XSVRIX0tFWQkyDQorDQogI2RlZmluZSBaRU5EX01FTUJFUl9GVU5D X0NBTEwJMTw8MA0KICNkZWZpbmUgWkVORF9DVE9SX0NBTEwJCQkxPDwxDQog DQpJbmRleDogWmVuZC96ZW5kX2V4ZWN1dGUuYw0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L1plbmQvQXR0aWMvemVu ZF9leGVjdXRlLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjMxNi4yLjM5 DQpkaWZmIC11IC1wIC1yMS4zMTYuMi4zOSB6ZW5kX2V4ZWN1dGUuYw0KLS0t IFplbmQvemVuZF9leGVjdXRlLmMJMiBBdWcgMjAwNCAwMjozNTowNSAtMDAw MAkxLjMxNi4yLjM5DQorKysgWmVuZC96ZW5kX2V4ZWN1dGUuYwkxNCBTZXAg MjAwNCAxMToxMDo1OCAtMDAwMA0KQEAgLTIzNTAsMTMgKzIzNTAsMTQgQEAg c2VuZF9ieV9yZWY6DQogCQkJCX0NCiAJCQkJTkVYVF9PUENPREUoKTsNCiAJ CQljYXNlIFpFTkRfRkVfRkVUQ0g6IHsNCi0JCQkJCXp2YWwgKmFycmF5ID0g Z2V0X3p2YWxfcHRyKCZFWChvcGxpbmUpLT5vcDEsIEVYKFRzKSwgJkVHKGZy ZWVfb3AxKSwgQlBfVkFSX1IpOw0KLQkJCQkJenZhbCAqcmVzdWx0ID0gJkVY KFRzKVtFWChvcGxpbmUpLT5yZXN1bHQudS52YXJdLnRtcF92YXI7DQorCQkJ CQl6ZW5kX29wICpvcGxpbmUgPSBFWChvcGxpbmUpOw0KKwkJCQkJenZhbCAq YXJyYXkgPSBnZXRfenZhbF9wdHIoJm9wbGluZS0+b3AxLCBFWChUcyksICZF RyhmcmVlX29wMSksIEJQX1ZBUl9SKTsNCiAJCQkJCXp2YWwgKip2YWx1ZSwg KmtleTsNCiAJCQkJCWNoYXIgKnN0cl9rZXk7DQogCQkJCQl1aW50IHN0cl9r ZXlfbGVuOw0KIAkJCQkJdWxvbmcgaW50X2tleTsNCiAJCQkJCUhhc2hUYWJs ZSAqZmVfaHQ7DQorCQkJCQl6ZW5kX2Jvb2wgdXNlX2tleSA9IG9wbGluZS0+ ZXh0ZW5kZWRfdmFsdWUgJiBaRU5EX0ZFX0ZFVENIX1dJVEhfS0VZOw0KIA0K IAkJCQkJUFpWQUxfTE9DSyhhcnJheSk7DQogDQpAQCAtMjM3MCwyNyArMjM3 MSwzMyBAQCBzZW5kX2J5X3JlZjoNCiAJCQkJCQlFWChvcGxpbmUpID0gb3Bf YXJyYXktPm9wY29kZXMrRVgob3BsaW5lKS0+b3AyLnUub3BsaW5lX251bTsN CiAJCQkJCQljb250aW51ZTsNCiAJCQkJCX0NCi0JCQkJCWFycmF5X2luaXQo cmVzdWx0KTsNCiANCisJCQkJCXp2YWwgKnJlc3VsdCA9ICZFWChUcylbb3Bs aW5lLT5yZXN1bHQudS52YXJdLnRtcF92YXI7DQorCQkJCQlpZiAoIXVzZV9r ZXkpIHsNCisJCQkJCQkqcmVzdWx0ID0gKip2YWx1ZTsNCisJCQkJCQl6dmFs X2NvcHlfY3RvcihyZXN1bHQpOw0KKwkJCQkJfSBlbHNlIHsNCisJCQkJCQlh cnJheV9pbml0KHJlc3VsdCk7DQogDQotCQkJCQkoKnZhbHVlKS0+cmVmY291 bnQrKzsNCi0JCQkJCXplbmRfaGFzaF9pbmRleF91cGRhdGUocmVzdWx0LT52 YWx1ZS5odCwgMCwgdmFsdWUsIHNpemVvZih6dmFsICopLCBOVUxMKTsNCisJ CQkJCQkoKnZhbHVlKS0+cmVmY291bnQrKzsNCisJCQkJCQl6ZW5kX2hhc2hf aW5kZXhfdXBkYXRlKHJlc3VsdC0+dmFsdWUuaHQsIDAsIHZhbHVlLCBzaXpl b2YoenZhbCAqKSwgTlVMTCk7DQogDQotCQkJCQlBTExPQ19aVkFMKGtleSk7 DQotCQkJCQlJTklUX1BaVkFMKGtleSk7DQotCQkJCQlzd2l0Y2ggKHplbmRf aGFzaF9nZXRfY3VycmVudF9rZXlfZXgoZmVfaHQsICZzdHJfa2V5LCAmc3Ry X2tleV9sZW4sICZpbnRfa2V5LCAxLCBOVUxMKSkgew0KLQkJCQkJCWNhc2Ug SEFTSF9LRVlfSVNfU1RSSU5HOg0KLQkJCQkJCQlrZXktPnZhbHVlLnN0ci52 YWwgPSBzdHJfa2V5Ow0KLQkJCQkJCQlrZXktPnZhbHVlLnN0ci5sZW4gPSBz dHJfa2V5X2xlbi0xOw0KLQkJCQkJCQlrZXktPnR5cGUgPSBJU19TVFJJTkc7 DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWNhc2UgSEFTSF9LRVlfSVNfTE9O RzoNCi0JCQkJCQkJa2V5LT52YWx1ZS5sdmFsID0gaW50X2tleTsNCi0JCQkJ CQkJa2V5LT50eXBlID0gSVNfTE9ORzsNCi0JCQkJCQkJYnJlYWs7DQotCQkJ CQkJRU1QVFlfU1dJVENIX0RFRkFVTFRfQ0FTRSgpDQorCQkJCQkJQUxMT0Nf WlZBTChrZXkpOw0KKwkJCQkJCUlOSVRfUFpWQUwoa2V5KTsNCisJCQkJCQlz d2l0Y2ggKHplbmRfaGFzaF9nZXRfY3VycmVudF9rZXlfZXgoZmVfaHQsICZz dHJfa2V5LCAmc3RyX2tleV9sZW4sICZpbnRfa2V5LCAxLCBOVUxMKSkgew0K KwkJCQkJCQljYXNlIEhBU0hfS0VZX0lTX1NUUklORzoNCisJCQkJCQkJCWtl eS0+dmFsdWUuc3RyLnZhbCA9IHN0cl9rZXk7DQorCQkJCQkJCQlrZXktPnZh bHVlLnN0ci5sZW4gPSBzdHJfa2V5X2xlbi0xOw0KKwkJCQkJCQkJa2V5LT50 eXBlID0gSVNfU1RSSU5HOw0KKwkJCQkJCQkJYnJlYWs7DQorCQkJCQkJCWNh c2UgSEFTSF9LRVlfSVNfTE9ORzoNCisJCQkJCQkJCWtleS0+dmFsdWUubHZh bCA9IGludF9rZXk7DQorCQkJCQkJCQlrZXktPnR5cGUgPSBJU19MT05HOw0K KwkJCQkJCQkJYnJlYWs7DQorCQkJCQkJCUVNUFRZX1NXSVRDSF9ERUZBVUxU X0NBU0UoKQ0KKwkJCQkJCX0NCisJCQkJCQl6ZW5kX2hhc2hfaW5kZXhfdXBk YXRlKHJlc3VsdC0+dmFsdWUuaHQsIDEsICZrZXksIHNpemVvZih6dmFsICop LCBOVUxMKTsNCiAJCQkJCX0NCi0JCQkJCXplbmRfaGFzaF9pbmRleF91cGRh dGUocmVzdWx0LT52YWx1ZS5odCwgMSwgJmtleSwgc2l6ZW9mKHp2YWwgKiks IE5VTEwpOw0KIAkJCQkJemVuZF9oYXNoX21vdmVfZm9yd2FyZChmZV9odCk7 DQogCQkJCX0NCiAJCQkJTkVYVF9PUENPREUoKTsNCkluZGV4OiBaZW5kL3pl bmRfbGFuZ3VhZ2VfcGFyc2VyLnkNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N ClJDUyBmaWxlOiAvcmVwb3NpdG9yeS9aZW5kL0F0dGljL3plbmRfbGFuZ3Vh Z2VfcGFyc2VyLnksdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjIzDQpkaWZm IC11IC1wIC1yMS4yMyB6ZW5kX2xhbmd1YWdlX3BhcnNlci55DQotLS0gWmVu ZC96ZW5kX2xhbmd1YWdlX3BhcnNlci55CTQgQXVnIDIwMDIgMDY6Mzk6NDQg LTAwMDAJMS4yMw0KKysrIFplbmQvemVuZF9sYW5ndWFnZV9wYXJzZXIueQkx NCBTZXAgMjAwNCAxMToxMDo1OCAtMDAwMA0KQEAgLTE5OSw4ICsxOTksOCBA QCB1bnRpY2tlZF9zdGF0ZW1lbnQ6DQogCXwJZXhwciAnOycJCQkJeyB6ZW5k X2RvX2ZyZWUoJiQxIFRTUk1MU19DQyk7IH0NCiAJfAlUX1VTRSB1c2VfZmls ZW5hbWUgJzsnCQl7IHplbmRfZXJyb3IoRV9DT01QSUxFX0VSUk9SLCJ1c2U6 IE5vdCB5ZXQgc3VwcG9ydGVkLiBQbGVhc2UgdXNlIGluY2x1ZGVfb25jZSgp IG9yIHJlcXVpcmVfb25jZSgpIik7ICB6dmFsX2R0b3IoJiQyLnUuY29uc3Rh bnQpOyB9DQogCXwJVF9VTlNFVCAnKCcgdW5zZXRfdmFyaWFibGVzICcpJyAn OycNCi0JfAlUX0ZPUkVBQ0ggJygnIHdfY3ZhciBUX0FTIHsgemVuZF9kb19m b3JlYWNoX2JlZ2luKCYkMSwgJiQzLCAmJDIsICYkNCwgMSBUU1JNTFNfQ0Mp OyB9IHdfY3ZhciBmb3JlYWNoX29wdGlvbmFsX2FyZyAnKScgeyB6ZW5kX2Rv X2ZvcmVhY2hfY29udCgmJDYsICYkNywgJiQ0IFRTUk1MU19DQyk7IH0gZm9y ZWFjaF9zdGF0ZW1lbnQgeyB6ZW5kX2RvX2ZvcmVhY2hfZW5kKCYkMSwgJiQy IFRTUk1MU19DQyk7IH0NCi0JfAlUX0ZPUkVBQ0ggJygnIGV4cHJfd2l0aG91 dF92YXJpYWJsZSBUX0FTIHsgemVuZF9kb19mb3JlYWNoX2JlZ2luKCYkMSwg JiQzLCAmJDIsICYkNCwgMCBUU1JNTFNfQ0MpOyB9IHdfY3ZhciBmb3JlYWNo X29wdGlvbmFsX2FyZyAnKScgeyB6ZW5kX2RvX2ZvcmVhY2hfY29udCgmJDYs ICYkNywgJiQ0IFRTUk1MU19DQyk7IH0gZm9yZWFjaF9zdGF0ZW1lbnQgeyB6 ZW5kX2RvX2ZvcmVhY2hfZW5kKCYkMSwgJiQyIFRTUk1MU19DQyk7IH0NCisJ fAlUX0ZPUkVBQ0ggJygnIHdfY3ZhciBUX0FTIHsgemVuZF9kb19mb3JlYWNo X2JlZ2luKCYkMSwgJiQzLCAmJDIsICYkNCwgMSBUU1JNTFNfQ0MpOyB9IHdf Y3ZhciBmb3JlYWNoX29wdGlvbmFsX2FyZyAnKScgeyB6ZW5kX2RvX2ZvcmVh Y2hfY29udCgmJDYsICYkNywgJiQ0LCAmJDEgVFNSTUxTX0NDKTsgfSBmb3Jl YWNoX3N0YXRlbWVudCB7IHplbmRfZG9fZm9yZWFjaF9lbmQoJiQxLCAmJDIg VFNSTUxTX0NDKTsgfQ0KKwl8CVRfRk9SRUFDSCAnKCcgZXhwcl93aXRob3V0 X3ZhcmlhYmxlIFRfQVMgeyB6ZW5kX2RvX2ZvcmVhY2hfYmVnaW4oJiQxLCAm JDMsICYkMiwgJiQ0LCAwIFRTUk1MU19DQyk7IH0gd19jdmFyIGZvcmVhY2hf b3B0aW9uYWxfYXJnICcpJyB7IHplbmRfZG9fZm9yZWFjaF9jb250KCYkNiwg JiQ3LCAmJDQsICYkMSBUU1JNTFNfQ0MpOyB9IGZvcmVhY2hfc3RhdGVtZW50 IHsgemVuZF9kb19mb3JlYWNoX2VuZCgmJDEsICYkMiBUU1JNTFNfQ0MpOyB9 DQogCXwJVF9ERUNMQVJFIHsgJDEudS5vcGxpbmVfbnVtID0gZ2V0X25leHRf b3BfbnVtYmVyKENHKGFjdGl2ZV9vcF9hcnJheSkpOyB6ZW5kX2RvX2RlY2xh cmVfYmVnaW4oVFNSTUxTX0MpOyB9ICcoJyBkZWNsYXJlX2xpc3QgJyknIGRl Y2xhcmVfc3RhdGVtZW50IHt6ZW5kX2RvX2RlY2xhcmVfZW5kKCYkMSBUU1JN TFNfQ0MpOyB9DQogCXwJJzsnCQkvKiBlbXB0eSBzdGF0ZW1lbnQgKi8NCiA7 DQpJbmRleDogZXh0L3N0YW5kYXJkL2FycmF5LmMNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NClJDUyBmaWxlOiAvcmVwb3NpdG9yeS9waHAtc3JjL2V4dC9z dGFuZGFyZC9hcnJheS5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOTku Mi4zNg0KZGlmZiAtdSAtcCAtcjEuMTk5LjIuMzYgYXJyYXkuYw0KLS0tIGV4 dC9zdGFuZGFyZC9hcnJheS5jCTEwIEF1ZyAyMDA0IDA2OjA0OjEyIC0wMDAw CTEuMTk5LjIuMzYNCisrKyBleHQvc3RhbmRhcmQvYXJyYXkuYwkxNCBTZXAg MjAwNCAxMToxMDo1OSAtMDAwMA0KQEAgLTE3MTIsNyArMTcxMiw3IEBAIHN0 YXRpYyB2b2lkIF9waHBpX3BvcChJTlRFUk5BTF9GVU5DVElPTl8NCiAJenZh bAkgICAqKnN0YWNrLAkJCS8qIElucHV0IHN0YWNrICovDQogCQkJICAgKip2 YWw7CQkJLyogVmFsdWUgdG8gYmUgcG9wcGVkICovDQogCWNoYXIgKmtleSA9 IE5VTEw7DQotCWludCBrZXlfbGVuID0gMDsNCisJdWludCBrZXlfbGVuID0g MDsNCiAJdWxvbmcgaW5kZXg7DQogCQ0KIAkvKiBHZXQgdGhlIGFyZ3VtZW50 cyBhbmQgZG8gZXJyb3ItY2hlY2tpbmcgKi8NCkluZGV4OiBleHQvc3RhbmRh cmQvZmlsZS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog L3JlcG9zaXRvcnkvcGhwLXNyYy9leHQvc3RhbmRhcmQvZmlsZS5jLHYNCnJl dHJpZXZpbmcgcmV2aXNpb24gMS4yNzkuMi42MQ0KZGlmZiAtdSAtcCAtcjEu Mjc5LjIuNjEgZmlsZS5jDQotLS0gZXh0L3N0YW5kYXJkL2ZpbGUuYwkxNyBB dWcgMjAwNCAxNDoxMDowMyAtMDAwMAkxLjI3OS4yLjYxDQorKysgZXh0L3N0 YW5kYXJkL2ZpbGUuYwkxNCBTZXAgMjAwNCAxMToxMTowMCAtMDAwMA0KQEAg LTkwOSw3ICs5MDksNyBAQCBzdGF0aWMgaW50IHBhcnNlX2NvbnRleHRfb3B0 aW9ucyhwaHBfc3RyDQogCUhhc2hQb3NpdGlvbiBwb3MsIG9wb3M7DQogCXp2 YWwgKip3dmFsLCAqKm92YWw7DQogCWNoYXIgKndrZXksICpva2V5Ow0KLQlp bnQgd2tleV9sZW4sIG9rZXlfbGVuOw0KKwl1aW50IHdrZXlfbGVuLCBva2V5 X2xlbjsNCiAJaW50IHJldCA9IFNVQ0NFU1M7DQogCXVsb25nIG51bV9rZXk7 DQogDQo= --8323328-1652703221-1095160468=:1930--