From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14021 invoked by alias); 31 Jul 2007 08:54:28 -0000 Received: (qmail 13950 invoked by uid 22791); 31 Jul 2007 08:54:25 -0000 X-Spam-Check-By: sourceware.org Received: from mtagate1.de.ibm.com (HELO mtagate1.de.ibm.com) (195.212.29.150) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 31 Jul 2007 08:54:21 +0000 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate1.de.ibm.com (8.13.8/8.13.8) with ESMTP id l6V8sH7S649984 for ; Tue, 31 Jul 2007 08:54:17 GMT Received: from d12av04.megacenter.de.ibm.com (d12av04.megacenter.de.ibm.com [9.149.165.229]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v8.4) with ESMTP id l6V8s9aA1294378 for ; Tue, 31 Jul 2007 10:54:17 +0200 Received: from d12av04.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av04.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id l6V8rqFI018963 for ; Tue, 31 Jul 2007 10:53:52 +0200 Received: from d12mc102.megacenter.de.ibm.com (d12mc102.megacenter.de.ibm.com [9.149.167.114]) by d12av04.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id l6V8rpaS018183 for ; Tue, 31 Jul 2007 10:53:52 +0200 Subject: [autovect, patch] Relax loop-aware SLP group size constraints To: gcc-patches@gcc.gnu.org X-Mailer: Lotus Notes Release 7.0 HF277 June 21, 2006 Message-ID: From: Ira Rosen Date: Tue, 31 Jul 2007 11:08:00 -0000 MIME-Version: 1.0 Content-type: multipart/mixed; Boundary="0__=4DBBF9BADFBD764D8f9e8a93df938690918c4DBBF9BADFBD764D" Content-Disposition: inline X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2007-07/txt/msg02164.txt.bz2 --0__=4DBBF9BADFBD764D8f9e8a93df938690918c4DBBF9BADFBD764D Content-type: text/plain; charset=US-ASCII Content-length: 1211 This patch removes constraints from SLP group size (until now only groups of size multiple of vector size or vice versa were supported). The adjustment to the vector size is done using conceptual unrolling by lcm (group size, vector size) / group size. For example, the loop (with group size 6 and vector size 4) for (i=0; i < n; i++) { a[6*i + 0] = 0; a[6*i + 1] = 1; a[6*i + 2] = 2; a[6*i + 3] = 3; a[6*i + 4] = 4; a[6*i + 5] = 5; } will now be SLPed with conceptual unrolling by 2 (lcm (6,4) / 6 = 12/6 = 2): for (i=0; i < n/2; i++) { a[6*i + 0: 6*i +3] = {0,1,2,3}; a[6*i + 4: 6*i +7] = {4,5,0,1}; a[6*i + 8: 6*i +11] = {2,3,4,5}; } Bootstrapped and tested on ppc-linux. Committed to autovect-branch. Ira ChangeLog entry: * tree-vect-analyze.c (vect_analyze_operations): Set vectorization factor according to SLP unrolling factors. (vect_analyze_data_ref_access): Remove SLP group size constraints. (vect_analyze_slp_instance): Calculate SLP instance unrolling factor. * tree-vect-transform.c (vect_get_constant_vectors): Fix number of copies calculation to handle general group sizes. (See attached file: group_size.txt) --0__=4DBBF9BADFBD764D8f9e8a93df938690918c4DBBF9BADFBD764D Content-type: text/plain; name="group_size.txt" Content-Disposition: attachment; filename="group_size.txt" Content-transfer-encoding: base64 Content-length: 28723 SW5kZXg6IHRlc3RzdWl0ZS9DaGFuZ2VMb2cuYXV0b3ZlY3QKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gdGVzdHN1aXRlL0NoYW5nZUxvZy5hdXRvdmVj dAkocmV2aXNpb24gMTI3MDU3KQorKysgdGVzdHN1aXRlL0NoYW5nZUxvZy5h dXRvdmVjdAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDA3 LTA3LTMxICBJcmEgUm9zZW4gIDxpcmFyQGlsLmlibS5jb20+CisKKwkqIGdj Yy5kZy92ZWN0L3NscC0xNi5jOiBOb3cgU0xQYWJsZS4KKwkqIGdjYy5kZy92 ZWN0L3NscC0xLmM6IEFkZCBuZXcgdGVzdCBjYXNlcyBmb3IgZGlmZmVyZW50 IGdyb3VwIHNpemVzLgorCSogZ2NjLmRnL3ZlY3Qvc2xwLTIuYywgZ2NjLmRn L3ZlY3Qvc2xwLTMuYzogTGlrZXdpc2UuCisJKiBnY2MuZGcvdmVjdC9zbHAt MTkuYzogQ2hhbmdlIHRoZSBncm91cCBzaXplLgorCSogZ2NjLmRnL3ZlY3Qv c2xwLTMzLmM6IE5ldy4KKwkqIGdjYy5kZy92ZWN0L3NscC0zNC5jLCBnY2Mu ZGcvdmVjdC9zbHAtMzUuYzogTGlrZXdpc2UuIAorCiAyMDA3LTA3LTAzICBE b3JpdCBOdXptYW4gPGRvcml0QGlsLmlibS5jb20+CiAKIAkqIGdjYy5kZy92 ZWN0L2Nvc3Rtb2RlbC9wcGMvY29zdG1vZGVsLXZlY3QtcmVkdWMtMWNoYXIu YzogTG9vcHMgbm93CkluZGV4OiB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvc2xw LTMzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3NscC0zMy5jCShyZXZpc2lvbiAwKQorKysgdGVzdHN1aXRl L2djYy5kZy92ZWN0L3NscC0zMy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx LDExMiBAQAorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVj dF9pbnQgfSAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8 c3RkaW8uaD4KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCIKKworI2RlZmluZSBO IDggCisKK2ludAorbWFpbjEgKCkKK3sKKyAgaW50IGk7CisgIHVuc2lnbmVk IGludCBvdXRbTio4XSwgYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3 LCBiMSwgYjAsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjc7CisgIHVuc2lnbmVk IGludCBpbltOKjhdID0gezAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIs MTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcs MjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIs NDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcs NTgsNTksNjAsNjEsNjIsNjN9OworICBmbG9hdCBvdXQyW04qOF07CisKKyAg LyogU0xQIHdpdGggdW5yb2xsaW5nIGJ5IDQuICAqLworICBmb3IgKGkgPSAw OyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgIGEwID0gaW5baSo3XSArIDU7 CisgICAgICBhMSA9IGluW2kqNyArIDFdICsgNjsKKyAgICAgIGEyID0gaW5b aSo3ICsgMl0gKyA3OworICAgICAgYTMgPSBpbltpKjcgKyAzXSArIDg7Cisg ICAgICBhNCA9IGluW2kqNyArIDRdICsgOTsKKyAgICAgIGE1ID0gaW5baSo3 ICsgNV0gKyAxMDsKKyAgICAgIGE2ID0gaW5baSo3ICsgNl0gKyAxMTsKKwor ICAgICAgYjAgPSBhMCAqIDM7CisgICAgICBiMSA9IGExICogMjsKKyAgICAg IGIyID0gYTIgKiAxMjsKKyAgICAgIGIzID0gYTMgKiA1OworICAgICAgYjQg PSBhNCAqIDg7CisgICAgICBiNSA9IGE1ICogNDsKKyAgICAgIGI2ID0gYTYg KiAzOworCisgICAgICBvdXRbaSo3XSA9IGIwIC0gMjsKKyAgICAgIG91dFtp KjcgKyAxXSA9IGIxIC0gMzsgCisgICAgICBvdXRbaSo3ICsgMl0gPSBiMiAt IDI7CisgICAgICBvdXRbaSo3ICsgM10gPSBiMyAtIDE7CisgICAgICBvdXRb aSo3ICsgNF0gPSBiNCAtIDg7CisgICAgICBvdXRbaSo3ICsgNV0gPSBiNSAt IDc7CisgICAgICBvdXRbaSo3ICsgNl0gPSBiNiAtIDM7CisgICAgfQorCisg IC8qIGNoZWNrIHJlc3VsdHM6ICAqLworICBmb3IgKGkgPSAwOyBpIDwgTjsg aSsrKQorICAgIHsKKyAgICAgIGlmIChvdXRbaSo3XSAhPSAgKGluW2kqN10g KyA1KSAqIDMgLSAyCisgICAgICAgICB8fCBvdXRbaSo3ICsgMV0gIT0gKGlu W2kqNyArIDFdICsgNikgKiAyIC0gMworICAgICAgICAgfHwgb3V0W2kqNyAr IDJdICE9IChpbltpKjcgKyAyXSArIDcpICogMTIgLSAyCisgICAgICAgICB8 fCBvdXRbaSo3ICsgM10gIT0gKGluW2kqNyArIDNdICsgOCkgKiA1IC0gMQor ICAgICAgICAgfHwgb3V0W2kqNyArIDRdICE9IChpbltpKjcgKyA0XSArIDkp ICogOCAtIDgKKyAgICAgICAgIHx8IG91dFtpKjcgKyA1XSAhPSAoaW5baSo3 ICsgNV0gKyAxMCkgKiA0IC0gNworICAgICAgICAgfHwgb3V0W2kqNyArIDZd ICE9IChpbltpKjcgKyA2XSArIDExKSAqIDMgLSAzKQorCWFib3J0ICgpOwor ICAgIH0KKworICAvKiBTTFAgd2l0aCB1bnJvbGxpbmcgYnkgNC4gICovCisg IGZvciAoaSA9IDA7IGkgPCBOKjI7IGkrKykKKyAgICB7CisgICAgICBvdXRb aSozXSA9IChpbltpKjNdICsgMikgKiAzOworICAgICAgb3V0W2kqMyArIDFd ID0gKGluW2kqMyArIDFdICsgMikgKiA3OworICAgICAgb3V0W2kqMyArIDJd ID0gKGluW2kqMyArIDJdICsgNykgKiAzOworICAgIH0KKworICAvKiBjaGVj ayByZXN1bHRzOiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IE4qMjsgaSsrKQor ICAgIHsKKyAgICAgIGlmIChvdXRbaSozXSAhPSAgKGluW2kqM10gKyAyKSAq IDMKKyAgICAgICAgIHx8IG91dFtpKjMgKyAxXSAhPSAoaW5baSozICsgMV0g KyAyKSAqIDcKKyAgICAgICAgIHx8IG91dFtpKjMgKyAyXSAhPSAoaW5baSoz ICsgMl0gKyA3KSAqIDMpCisgICAgICAgIGFib3J0ICgpOworICAgIH0KKwor ICAvKiBTTFAgd2l0aCB1bnJvbGxpbmcgYnkgNC4gICovCisgIGZvciAoaSA9 IDA7IGkgPCBOKjI7IGkrKykKKyAgICB7CisgICAgICBvdXQyW2kqM10gPSAo ZmxvYXQpIChpbltpKjNdICogMiArIDYpIDsKKyAgICAgIG91dDJbaSozICsg MV0gPSAoZmxvYXQpIChpbltpKjMgKyAxXSAqIDMgKyA3KTsKKyAgICAgIG91 dDJbaSozICsgMl0gPSAoZmxvYXQpIChpbltpKjMgKyAyXSAqIDUgKyA0KTsK KyAgICB9CisKKyAgLyogY2hlY2sgcmVzdWx0czogICovCisgIGZvciAoaSA9 IDA7IGkgPCBOKjI7IGkrKykKKyAgICB7CisgICAgICBpZiAob3V0MltpKjNd ICE9ICAoZmxvYXQpIChpbltpKjNdICogMiArIDYpCisgICAgICAgICB8fCBv dXQyW2kqMyArIDFdICE9IChmbG9hdCkgKGluW2kqMyArIDFdICogMyArIDcp CisgICAgICAgICB8fCBvdXQyW2kqMyArIDJdICE9IChmbG9hdCkgKGluW2kq MyArIDJdICogNSArIDQpKQorICAgICAgICBhYm9ydCAoKTsKKyAgICB9CisK KworICByZXR1cm4gMDsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGNo ZWNrX3ZlY3QgKCk7CisKKyAgbWFpbjEgKCk7CisKKyAgcmV0dXJuIDA7Cit9 CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVj dG9yaXplZCAzIGxvb3BzIiAxICJ2ZWN0IiAge3RhcmdldCB7dmVjdF9pbnRm bG9hdF9jdnQgJiYgdmVjdF9pbnRfbXVsdH0gfSB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAyIGxv b3BzIiAxICJ2ZWN0IiAge3RhcmdldCB7eyEgeyB2ZWN0X2ludGZsb2F0X2N2 dH19ICYmIHZlY3RfaW50X211bHR9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMCBsb29wcyIg MSAidmVjdCIgIHt0YXJnZXQge3shIHsgdmVjdF9pbnRmbG9hdF9jdnR9fSAm JiB7IXt2ZWN0X2ludF9tdWx0fX19IH0gfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6aW5nIHN0bXRzIHVz aW5nIFNMUCIgMyAidmVjdCIge3RhcmdldCB7dmVjdF9pbnRmbG9hdF9jdnQg JiYgdmVjdF9pbnRfbXVsdH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXppbmcgc3RtdHMgdXNpbmcg U0xQIiAyICJ2ZWN0IiAge3RhcmdldCB7eyEgeyB2ZWN0X2ludGZsb2F0X2N2 dH19ICYmIHZlY3RfaW50X211bHR9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6aW5nIHN0bXRzIHVz aW5nIFNMUCIgMCAidmVjdCIgIHt0YXJnZXQge3shIHsgdmVjdF9pbnRmbG9h dF9jdnR9fSAmJiB7IXt2ZWN0X2ludF9tdWx0fX19IH0gfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgY2xlYW51cC10cmVlLWR1bXAgInZlY3QiIH0gfSAqLwor ICAKSW5kZXg6IHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC9zbHAtMTYuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qv c2xwLTE2LmMJKHJldmlzaW9uIDEyNzA1NykKKysrIHRlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC9zbHAtMTYuYwkod29ya2luZyBjb3B5KQpAQCAtMTUsNyArMTUs OCBAQCBtYWluMSAoKQogICB1bnNpZ25lZCBpbnQgaW4yW04qMTZdID0gezAs MSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgs MTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMs MzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgs NDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjN9 OwogICB1bnNpZ25lZCBpbnQgb3V0MltOKjE2XTsKIAotICAvKiBTTFAgZ3Jv dXBzIG9mIHNpemUgdGhhdCBpcyBub3QgYSBtdWx0aXBsZSBvZiB2ZWN0b3Ig c2l6ZSBpcyBub3Qgc3VwcG9ydGVkIHlldC4gICovCisgIC8qIFNMUCBncm91 cCBvZiBzaXplIHRoYXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdmVjdG9yIHNp emUuIAorICAgICBVbnJvbGxpbmcgYnkgMi4gICovCiAgIGZvciAoaSA9IDA7 IGkgPCBOOyBpKyspCiAgICAgewogICAgICAgYTAgPSBpbltpKjJdICsgNTsK QEAgLTYzLDggKzY0LDcgQEAgaW50IG1haW4gKHZvaWQpCiAgIHJldHVybiAw OwogfQogCi0vKiBOZWVkcyB2ZWN0X211bHRfaW50LiAgKi8KLS8qIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxv b3BzIiAxICJ2ZWN0IiAgeyB4ZmFpbCAqLSotKiB9IH0gfSAqLwotLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemluZyBz dG10cyB1c2luZyBTTFAiIDIgInZlY3QiIHsgeGZhaWwgKi0qLSogfSB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVj dG9yaXplZCAxIGxvb3BzIiAxICJ2ZWN0IiAgeyB0YXJnZXQgdmVjdF9pbnRf bXVsdCB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICJ2ZWN0b3JpemluZyBzdG10cyB1c2luZyBTTFAiIDIgInZlY3Qi IHsgdGFyZ2V0IHZlY3RfaW50X211bHQgfSB9IH0gKi8KIC8qIHsgZGctZmlu YWwgeyBjbGVhbnVwLXRyZWUtZHVtcCAidmVjdCIgfSB9ICovCiAgIApJbmRl eDogdGVzdHN1aXRlL2djYy5kZy92ZWN0L3NscC0zNC5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC9zbHAtMzQu YwkocmV2aXNpb24gMCkKKysrIHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC9zbHAt MzQuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorLyogeyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLworCisjaW5j bHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRl ICJ0cmVlLXZlY3QuaCIKKworI2RlZmluZSBOIDggCisKK2ludAorbWFpbjEg KCkKK3sKKyAgaW50IGk7CisgIHVuc2lnbmVkIHNob3J0IG91dFtOKjhdOwor ICB1bnNpZ25lZCBzaG9ydCBpbltOKjhdID0gezAsMSwyLDMsNCw1LDYsNyw4 LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMs MjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgs MzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMs NTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjN9OworICB1bnNpZ25lZCBz aG9ydCBpbjJbTio4XSA9IHswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEy LDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3 LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQy LDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3 LDU4LDU5LDYwLDYxLDYyLDYzfTsKKyAgdW5zaWduZWQgc2hvcnQgb3V0MltO KjhdOworCisgIC8qIFNMUCB3aXRoIHVucm9sbGluZyBieSA4LiAgKi8KKyAg Zm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB7CisgICAgICBvdXRbaSoz XSA9IGluW2kqM10gKyA1OworICAgICAgb3V0W2kqMyArIDFdID0gaW5baSoz ICsgMV0gKyA2OworICAgICAgb3V0W2kqMyArIDJdID0gaW5baSozICsgMl0g KyAxNjsKKworICAgICAgb3V0MltpKjVdID0gaW4yW2kqNV0gKyAyOworICAg ICAgb3V0MltpKjUgKyAxXSA9IGluMltpKjUgKyAxXSArIDI7CisgICAgICBv dXQyW2kqNSArIDJdID0gaW4yW2kqNSArIDJdICsgMTsKKyAgICAgIG91dDJb aSo1ICsgM10gPSBpbjJbaSo1ICsgM10gKyAzOworICAgICAgb3V0MltpKjUg KyA0XSA9IGluMltpKjUgKyA0XSArIDEzOworICAgIH0KKworICAvKiBjaGVj ayByZXN1bHRzOiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAg ICB7CisgICAgICBpZiAob3V0W2kqM10gIT0gaW5baSozXSArIDUKKyAgICAg ICAgICB8fCBvdXRbaSozICsgMV0gIT0gaW5baSozICsgMV0gKyA2CisgICAg ICAgICAgfHwgb3V0W2kqMyArIDJdICE9IGluW2kqMyArIDJdICsgMTYKKyAg ICAgICAgICB8fCBvdXQyW2kqNV0gIT0gaW4yW2kqNV0gKyAyCisgICAgICAg ICAgfHwgb3V0MltpKjUgKyAxXSAhPSBpbjJbaSo1ICsgMV0gKyAyCisgICAg ICAgICAgfHwgb3V0MltpKjUgKyAyXSAhPSBpbjJbaSo1ICsgMl0gKyAxCisg ICAgICAgICAgfHwgb3V0MltpKjUgKyAzXSAhPSBpbjJbaSo1ICsgM10gKyAz CisgICAgICAgICAgfHwgb3V0MltpKjUgKyA0XSAhPSBpbjJbaSo1ICsgNF0g KyAxMykKKyAgICAgICAgYWJvcnQgKCk7CisgICAgfQorCisgIHJldHVybiAw OworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgY2hlY2tfdmVjdCAoKTsK KworICBtYWluMSAoKTsKKworICByZXR1cm4gMDsKK30KKworLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDEgbG9v cHMiIDEgInZlY3QiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemluZyBzdG10cyB1c2luZyBTTFAiIDIg InZlY3QiICB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBjbGVhbnVwLXRyZWUt ZHVtcCAidmVjdCIgfSB9ICovCisgIApJbmRleDogdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3NscC0zNS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRl c3RzdWl0ZS9nY2MuZGcvdmVjdC9zbHAtMzUuYwkocmV2aXNpb24gMCkKKysr IHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC9zbHAtMzUuYwkocmV2aXNpb24gMCkK QEAgLTAsMCArMSw3MyBAQAorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10 YXJnZXQgdmVjdF9pbnQgfSAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+Cisj aW5jbHVkZSAidHJlZS12ZWN0LmgiCisKKyNkZWZpbmUgTiAxMjggCisKK3R5 cGVkZWYgc3RydWN0IHsKKyAgIGludCBhOworICAgaW50IGI7CisgICBpbnQg YzsKKyAgIGludCBkOworICAgaW50IGU7Cit9IHM7CisKK2ludAorbWFpbjEg KHMgKmFycikKK3sKKyAgaW50IGk7CisgIHMgKnB0ciA9IGFycjsKKyAgcyBy ZXNbTl07CisKKyAgLyogU0xQIHdpdGggdW5yb2xsaW5nIGJ5IDQuICAqLwor ICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgIHJlc1tp XS5jID0gcHRyLT5jICsgcHRyLT5jOworICAgICAgcmVzW2ldLmEgPSBwdHIt PmEgKyBwdHItPmE7CisgICAgICByZXNbaV0uZCA9IHB0ci0+ZCArIHB0ci0+ ZDsKKyAgICAgIHJlc1tpXS5iID0gcHRyLT5iICsgcHRyLT5iOworICAgICAg cmVzW2ldLmUgPSBwdHItPmUgKyBwdHItPmU7IAorICAgICAgcHRyKys7IAor ICAgIH0gCisgICAKKyAgLyogY2hlY2sgcmVzdWx0czogICovCisgIGZvciAo aSA9IDA7IGkgPCBOOyBpKyspCisgICAgeyAKKyAgICAgIGlmIChyZXNbaV0u YyAhPSBhcnJbaV0uYyArIGFycltpXS5jCisgICAgICAgICAgfHwgcmVzW2ld LmEgIT0gYXJyW2ldLmEgKyBhcnJbaV0uYQorICAgICAgICAgIHx8IHJlc1tp XS5kICE9IGFycltpXS5kICsgYXJyW2ldLmQKKyAgICAgICAgICB8fCByZXNb aV0uYiAhPSBhcnJbaV0uYiArIGFycltpXS5iCisgICAgICAgICAgfHwgcmVz W2ldLmUgIT0gYXJyW2ldLmUgKyBhcnJbaV0uZSkKKyAgICAgICAgIGFib3J0 KCk7CisgICAgfQorCit9CisKK2ludCBtYWluICh2b2lkKQoreworICBpbnQg aTsKKyAgcyBhcnJbTl07CisgIAorICBjaGVja192ZWN0ICgpOworCisgIGZv ciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgeyAKKyAgICAgIGFycltpXS5h ID0gaTsKKyAgICAgIGFycltpXS5iID0gaSAqIDI7CisgICAgICBhcnJbaV0u YyA9IDE3OworICAgICAgYXJyW2ldLmQgPSBpKzM0OworICAgICAgYXJyW2ld LmUgPSBpICogMyArIDU7CisgICAgICBpZiAoYXJyW2ldLmEgPT0gMTc4KQor ICAgICAgICAgYWJvcnQoKTsgCisgICAgfSAKKworICBtYWluMSAoYXJyKTsK KworICByZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiICB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi dmVjdG9yaXppbmcgc3RtdHMgdXNpbmcgU0xQIiAxICJ2ZWN0IiAgfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgY2xlYW51cC10cmVlLWR1bXAgInZlY3QiIH0g fSAqLworICAKSW5kZXg6IHRlc3RzdWl0ZS9nY2MuZGcvdmVjdC9zbHAtMS5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3RzdWl0ZS9nY2MuZGcv dmVjdC9zbHAtMS5jCShyZXZpc2lvbiAxMjcwNTcpCisrKyB0ZXN0c3VpdGUv Z2NjLmRnL3ZlY3Qvc2xwLTEuYwkod29ya2luZyBjb3B5KQpAQCAtNTYsNyAr NTYsNTUgQEAgbWFpbjEgKCkKICAgICAgICAgYWJvcnQgKCk7CiAgICAgfQog CisgIC8qIFNMUCB3aXRoIHVucm9sbGluZyBieSA4LiAgKi8KKyAgZm9yIChp ID0gMDsgaSA8IE47IGkrKykKKyAgICB7CisgICAgICBvdXRbaSo1XSA9IDg7 CisgICAgICBvdXRbaSo1ICsgMV0gPSA3OworICAgICAgb3V0W2kqNSArIDJd ID0gODE7CisgICAgICBvdXRbaSo1ICsgM10gPSAyODsKKyAgICAgIG91dFtp KjUgKyA0XSA9IDE4OworICAgIH0KKworICAvKiBjaGVjayByZXN1bHRzOiAg Ki8KKyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB7CisgICAgICBp ZiAob3V0W2kqNV0gIT0gOAorICAgICAgICAgfHwgb3V0W2kqNSArIDFdICE9 IDcKKyAgICAgICAgIHx8IG91dFtpKjUgKyAyXSAhPSA4MQorICAgICAgICAg fHwgb3V0W2kqNSArIDNdICE9IDI4CisgICAgICAgICB8fCBvdXRbaSo1ICsg NF0gIT0gMTgpCisgICAgICAgIGFib3J0ICgpOworICAgIH0KIAorICAvKiBT TFAgd2l0aCB1bnJvbGxpbmcgYnkgOC4gICovCisgIGZvciAoaSA9IDA7IGkg PCBOLzI7IGkrKykKKyAgICB7CisgICAgICBvdXRbaSo5XSA9IDg7CisgICAg ICBvdXRbaSo5ICsgMV0gPSA3OworICAgICAgb3V0W2kqOSArIDJdID0gODE7 CisgICAgICBvdXRbaSo5ICsgM10gPSAyODsKKyAgICAgIG91dFtpKjkgKyA0 XSA9IDE4OworICAgICAgb3V0W2kqOSArIDVdID0gODU7CisgICAgICBvdXRb aSo5ICsgNl0gPSA1OworICAgICAgb3V0W2kqOSArIDddID0gNDsKKyAgICAg IG91dFtpKjkgKyA4XSA9IDE0OworICAgIH0KKworICAvKiBjaGVjayByZXN1 bHRzOiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IE4vMjsgaSsrKQorICAgIHsK KyAgICAgIGlmIChvdXRbaSo5XSAhPSA4CisgICAgICAgICB8fCBvdXRbaSo5 ICsgMV0gIT0gNworICAgICAgICAgfHwgb3V0W2kqOSArIDJdICE9IDgxCisg ICAgICAgICB8fCBvdXRbaSo5ICsgM10gIT0gMjgKKyAgICAgICAgIHx8IG91 dFtpKjkgKyA0XSAhPSAxOAorICAgICAgICAgfHwgb3V0W2kqOSArIDVdICE9 IDg1CisgICAgICAgICB8fCBvdXRbaSo5ICsgNl0gIT0gNQorICAgICAgICAg fHwgb3V0W2kqOSArIDddICE9IDQKKyAgICAgICAgIHx8IG91dFtpKjkgKyA4 XSAhPSAxNCkKKyAgICAgICAgYWJvcnQgKCk7CisgICAgfQogCiAgIHJldHVy biAwOwogfQpAQCAtNzAsNyArMTE4LDcgQEAgaW50IG1haW4gKHZvaWQpCiAg IHJldHVybiAwOwogfQogCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAtdGltZXMgInZlY3Rvcml6ZWQgMiBsb29wcyIgMSAidmVjdCIgIH0gfSAq LwotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0 b3JpemluZyBzdG10cyB1c2luZyBTTFAiIDIgInZlY3QiICB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXpl ZCA0IGxvb3BzIiAxICJ2ZWN0IiAgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6aW5nIHN0bXRzIHVzaW5n IFNMUCIgNCAidmVjdCIgIH0gfSAqLwogLyogeyBkZy1maW5hbCB7IGNsZWFu dXAtdHJlZS1kdW1wICJ2ZWN0IiB9IH0gKi8KICAgCkluZGV4OiB0ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3Qvc2xwLTE5LmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gdGVzdHN1aXRlL2djYy5kZy92ZWN0L3NscC0xOS5jCShyZXZpc2lv biAxMjcwNTcpCisrKyB0ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qvc2xwLTE5LmMJ KHdvcmtpbmcgY29weSkKQEAgLTEwOCwyMSArMTA4LDE1IEBAIG1haW4xICgp CiAgICAgICAgIGFib3J0ICgpOwogICAgIH0KIAotICAvKiBIeWJyaWQgU0xQ LiAgKi8KLSAgZm9yIChpID0gMDsgaSA8IE4vMjsgaSsrKQorICAvKiBIeWJy aWQgU0xQIHdpdGggdW5yb2xsaW5nIGJ5IDIuICAqLworICBmb3IgKGkgPSAw OyBpIDwgTjsgaSsrKQogICAgIHsKLSAgICAgIG91dFtpKjEyXSA9IGluW2kq MTJdOwotICAgICAgb3V0W2kqMTIgKyAxXSA9IGluW2kqMTIgKyAxXTsKLSAg ICAgIG91dFtpKjEyICsgMl0gPSBpbltpKjEyICsgMl07Ci0gICAgICBvdXRb aSoxMiArIDNdID0gaW5baSoxMiArIDNdOwotICAgICAgb3V0W2kqMTIgKyA0 XSA9IGluW2kqMTIgKyA0XTsKLSAgICAgIG91dFtpKjEyICsgNV0gPSBpbltp KjEyICsgNV07Ci0gICAgICBvdXRbaSoxMiArIDZdID0gaW5baSoxMiArIDZd OwotICAgICAgb3V0W2kqMTIgKyA3XSA9IGluW2kqMTIgKyA3XTsKLSAgICAg IG91dFtpKjEyICsgOF0gPSBpbltpKjEyICsgOF07Ci0gICAgICBvdXRbaSox MiArIDldID0gaW5baSoxMiArIDldOwotICAgICAgb3V0W2kqMTIgKyAxMF0g PSBpbltpKjEyICsgMTBdOwotICAgICAgb3V0W2kqMTIgKyAxMV0gPSBpbltp KjEyICsgMTFdOworICAgICAgb3V0W2kqNl0gPSBpbltpKjZdOworICAgICAg b3V0W2kqNiArIDFdID0gaW5baSo2ICsgMV07CisgICAgICBvdXRbaSo2ICsg Ml0gPSBpbltpKjYgKyAyXTsKKyAgICAgIG91dFtpKjYgKyAzXSA9IGluW2kq NiArIDNdOworICAgICAgb3V0W2kqNiArIDRdID0gaW5baSo2ICsgNF07Cisg ICAgICBvdXRbaSo2ICsgNV0gPSBpbltpKjYgKyA1XTsKICAgICAKICAgICAg IGlhW2ldID0gaTsKICAgICB9IApAQCAtMTMwLDE4ICsxMjQsMTIgQEAgbWFp bjEgKCkKICAgLyogY2hlY2sgcmVzdWx0czogICovCiAgIGZvciAoaSA9IDA7 IGkgPCBOLzI7IGkrKykKICAgICB7Ci0gICAgICBpZiAob3V0W2kqMTJdICE9 ICBpbltpKjEyXQotICAgICAgICAgfHwgb3V0W2kqMTIgKyAxXSAhPSBpbltp KjEyICsgMV0KLSAgICAgICAgIHx8IG91dFtpKjEyICsgMl0gIT0gaW5baSox MiArIDJdCi0gICAgICAgICB8fCBvdXRbaSoxMiArIDNdICE9IGluW2kqMTIg KyAzXQotICAgICAgICAgfHwgb3V0W2kqMTIgKyA0XSAhPSBpbltpKjEyICsg NF0KLSAgICAgICAgIHx8IG91dFtpKjEyICsgNV0gIT0gaW5baSoxMiArIDVd Ci0gICAgICAgICB8fCBvdXRbaSoxMiArIDZdICE9IGluW2kqMTIgKyA2XQot ICAgICAgICAgfHwgb3V0W2kqMTIgKyA3XSAhPSBpbltpKjEyICsgN10KLSAg ICAgICAgIHx8IG91dFtpKjEyICsgOF0gIT0gaW5baSoxMiArIDhdCi0gICAg ICAgICB8fCBvdXRbaSoxMiArIDldICE9IGluW2kqMTIgKyA5XQotICAgICAg ICAgfHwgb3V0W2kqMTIgKyAxMF0gIT0gaW5baSoxMiArIDEwXQotICAgICAg ICAgfHwgb3V0W2kqMTIgKyAxMV0gIT0gaW5baSoxMiArIDExXQorICAgICAg aWYgKG91dFtpKjZdICE9ICBpbltpKjZdCisgICAgICAgICB8fCBvdXRbaSo2 ICsgMV0gIT0gaW5baSo2ICsgMV0KKyAgICAgICAgIHx8IG91dFtpKjYgKyAy XSAhPSBpbltpKjYgKyAyXQorICAgICAgICAgfHwgb3V0W2kqNiArIDNdICE9 IGluW2kqNiArIDNdCisgICAgICAgICB8fCBvdXRbaSo2ICsgNF0gIT0gaW5b aSo2ICsgNF0KKyAgICAgICAgIHx8IG91dFtpKjYgKyA1XSAhPSBpbltpKjYg KyA1XQogICAgICAgICAgfHwgaWFbaV0gIT0gaSkKICAgICAgICAgYWJvcnQg KCk7CiAgICAgfQpJbmRleDogdGVzdHN1aXRlL2djYy5kZy92ZWN0L3NscC0y LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3NscC0yLmMJKHJldmlzaW9uIDEyNzA1NykKKysrIHRlc3RzdWl0 ZS9nY2MuZGcvdmVjdC9zbHAtMi5jCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2 ICs3Nyw1NSBAQCBtYWluMSAodW5zaWduZWQgc2hvcnQgYTAsIHVuc2lnbmVk IHNob3J0CiAgICAgICAgIGFib3J0ICgpOwogICAgIH0KIAorICAvKiBTTFAg d2l0aCB1bnJvbGxpbmcgYnkgOC4gICovCisgIGZvciAoaSA9IDA7IGkgPCBO OyBpKyspCisgICAgeworICAgICAgb3V0W2kqM10gPSBhODsKKyAgICAgIG91 dFtpKjMgKyAxXSA9IGExOworICAgICAgb3V0W2kqMyArIDJdID0gYTI7Cisg ICAgfQorCisgIC8qIGNoZWNrIHJlc3VsdHM6ICAqLworICBmb3IgKGkgPSAw OyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgIGlmIChvdXRbaSozXSAhPSBh OAorICAgICAgICAgfHwgb3V0W2kqMyArIDFdICE9IGExCisgICAgICAgICB8 fCBvdXRbaSozICsgMl0gIT0gYTIpCisgICAgICAgIGFib3J0ICgpOworICAg IH0KKworICAvKiBTTFAgd2l0aCB1bnJvbGxpbmcgYnkgOC4gICovCisgIGZv ciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgeworICAgICAgb3V0W2kqMTFd ID0gYTg7CisgICAgICBvdXRbaSoxMSArIDFdID0gYTc7CisgICAgICBvdXRb aSoxMSArIDJdID0gYTE7CisgICAgICBvdXRbaSoxMSArIDNdID0gYTI7Cisg ICAgICBvdXRbaSoxMSArIDRdID0gYTg7CisgICAgICBvdXRbaSoxMSArIDVd ID0gYTU7CisgICAgICBvdXRbaSoxMSArIDZdID0gYTU7CisgICAgICBvdXRb aSoxMSArIDddID0gYTQ7CisgICAgICBvdXRbaSoxMSArIDhdID0gYTEyOwor ICAgICAgb3V0W2kqMTEgKyA5XSA9IGExMzsKKyAgICAgIG91dFtpKjExICsg MTBdID0gYTE0OworICAgIH0KKworICAvKiBjaGVjayByZXN1bHRzOiAgKi8K KyAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB7CisgICAgICBpZiAo b3V0W2kqMTFdICE9IGE4CisgICAgICAgICAgfHwgb3V0W2kqMTEgKyAxXSAh PSBhNworICAgICAgICAgIHx8IG91dFtpKjExICsgMl0gIT0gYTEKKyAgICAg ICAgICB8fCBvdXRbaSoxMSArIDNdICE9IGEyCisgICAgICAgICAgfHwgb3V0 W2kqMTEgKyA0XSAhPSBhOAorICAgICAgICAgIHx8IG91dFtpKjExICsgNV0g IT0gYTUKKyAgICAgICAgICB8fCBvdXRbaSoxMSArIDZdICE9IGE1CisgICAg ICAgICAgfHwgb3V0W2kqMTEgKyA3XSAhPSBhNAorICAgICAgICAgIHx8IG91 dFtpKjExICsgOF0gIT0gYTEyCisgICAgICAgICAgfHwgb3V0W2kqMTEgKyA5 XSAhPSBhMTMKKyAgICAgICAgICB8fCBvdXRbaSoxMSArIDEwXSAhPSBhMTQp CisgICAgICAgIGFib3J0ICgpOworICAgIH0KIAogCiAgIHJldHVybiAwOwpA QCAtOTEsNyArMTQwLDcgQEAgaW50IG1haW4gKHZvaWQpCiAgIHJldHVybiAw OwogfQogCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMg InZlY3Rvcml6ZWQgMiBsb29wcyIgMSAidmVjdCIgIH0gfSAqLwotLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemluZyBz dG10cyB1c2luZyBTTFAiIDIgInZlY3QiICB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCA0IGxvb3Bz IiAxICJ2ZWN0IiAgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAtdGltZXMgInZlY3Rvcml6aW5nIHN0bXRzIHVzaW5nIFNMUCIgNCAi dmVjdCIgIH0gfSAqLwogLyogeyBkZy1maW5hbCB7IGNsZWFudXAtdHJlZS1k dW1wICJ2ZWN0IiB9IH0gKi8KICAgCkluZGV4OiB0ZXN0c3VpdGUvZ2NjLmRn L3ZlY3Qvc2xwLTMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3Qvc2xwLTMuYwkocmV2aXNpb24gMTI3MDU3KQor KysgdGVzdHN1aXRlL2djYy5kZy92ZWN0L3NscC0zLmMJKHdvcmtpbmcgY29w eSkKQEAgLTk5LDYgKzk5LDM1IEBAIG1haW4xICgpCiAgICAgICAgIGFib3J0 ICgpOwogICAgIH0KIAorICAvKiBTTFAgd2l0aCB1bnJvbGxpbmcgYnkgOC4g ICovCisgIGZvciAoaSA9IDA7IGkgPCBOLzI7IGkrKykKKyAgICB7CisgICAg ICBvdXRbaSo5XSA9IGluW2kqOV07CisgICAgICBvdXRbaSo5ICsgMV0gPSBp bltpKjkgKyAxXTsKKyAgICAgIG91dFtpKjkgKyAyXSA9IGluW2kqOSArIDJd OworICAgICAgb3V0W2kqOSArIDNdID0gaW5baSo5ICsgM107CisgICAgICBv dXRbaSo5ICsgNF0gPSBpbltpKjkgKyA0XTsKKyAgICAgIG91dFtpKjkgKyA1 XSA9IGluW2kqOSArIDVdOworICAgICAgb3V0W2kqOSArIDZdID0gaW5baSo5 ICsgNl07CisgICAgICBvdXRbaSo5ICsgN10gPSBpbltpKjkgKyA3XTsKKyAg ICAgIG91dFtpKjkgKyA4XSA9IGluW2kqOSArIDhdOworICAgIH0KKworICAv KiBjaGVjayByZXN1bHRzOiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IE4vMjsg aSsrKQorICAgIHsKKyAgICAgIGlmIChvdXRbaSo5XSAhPSAgaW5baSo5XQor ICAgICAgICAgfHwgb3V0W2kqOSArIDFdICE9IGluW2kqOSArIDFdCisgICAg ICAgICB8fCBvdXRbaSo5ICsgMl0gIT0gaW5baSo5ICsgMl0KKyAgICAgICAg IHx8IG91dFtpKjkgKyAzXSAhPSBpbltpKjkgKyAzXQorICAgICAgICAgfHwg b3V0W2kqOSArIDRdICE9IGluW2kqOSArIDRdCisgICAgICAgICB8fCBvdXRb aSo5ICsgNV0gIT0gaW5baSo5ICsgNV0KKyAgICAgICAgIHx8IG91dFtpKjkg KyA2XSAhPSBpbltpKjkgKyA2XQorICAgICAgICAgfHwgb3V0W2kqOSArIDdd ICE9IGluW2kqOSArIDddCisgICAgICAgICB8fCBvdXRbaSo5ICsgOF0gIT0g aW5baSo5ICsgOF0pCisgICAgICAgIGFib3J0ICgpOworICAgIH0KKwogCiAg IHJldHVybiAwOwogfQpJbmRleDogQ2hhbmdlTG9nLmF1dG92ZWN0Cj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIENoYW5nZUxvZy5hdXRvdmVjdAkocmV2 aXNpb24gMTI3MDU3KQorKysgQ2hhbmdlTG9nLmF1dG92ZWN0CSh3b3JraW5n IGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDctMDctMzEgIElyYSBSb3Nl biAgPGlyYXJAaWwuaWJtLmNvbT4KKworCSogdHJlZS12ZWN0LWFuYWx5emUu YyAodmVjdF9hbmFseXplX29wZXJhdGlvbnMpOiBTZXQgdmVjdG9yaXphdGlv bgorCWZhY3RvciBhY2NvcmRpbmcgdG8gU0xQIHVucm9sbGluZyBmYWN0b3Jz LgorCSh2ZWN0X2FuYWx5emVfZGF0YV9yZWZfYWNjZXNzKTogUmVtb3ZlIFNM UCBncm91cCBzaXplIGNvbnN0cmFpbnRzLgorCSh2ZWN0X2FuYWx5emVfc2xw X2luc3RhbmNlKTogQ2FsY3VsYXRlIFNMUCBpbnN0YW5jZSB1bnJvbGxpbmcg ZmFjdG9yLgorCSogdHJlZS12ZWN0LXRyYW5zZm9ybS5jICh2ZWN0X2dldF9j b25zdGFudF92ZWN0b3JzKTogRml4IG51bWJlciBvZiAKKwljb3BpZXMgY2Fs Y3VsYXRpb24gdG8gaGFuZGxlIGdlbmVyYWwgZ3JvdXAgc2l6ZXMuCisKIDIw MDctMDctMjMgIERvcml0IE51em1hbiAgPGRvcml0QGlsLmlibS5jb20+CiAK IAltZXJnZSByZXZpc2lvbiAxMjQzNzMgZnJvbSB0cnVuazoKSW5kZXg6IHRy ZWUtdmVjdC1hbmFseXplLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g dHJlZS12ZWN0LWFuYWx5emUuYwkocmV2aXNpb24gMTI3MDU3KQorKysgdHJl ZS12ZWN0LWFuYWx5emUuYwkod29ya2luZyBjb3B5KQpAQCAtNTA1LDYgKzUw NSwxNCBAQCB2ZWN0X2FuYWx5emVfb3BlcmF0aW9ucyAobG9vcF92ZWNfaW5m byBsCiAgICAgICBpZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9E RVRBSUxTKSkgCiAJZnByaW50ZiAodmVjdF9kdW1wLCAiUFVSRSBTTFA6IFZG ID0gJWQiLCB2ZWN0b3JpemF0aW9uX2ZhY3Rvcik7CiAgICAgfQorICBlbHNl CisgICAgeworICAgICAgdmVjdG9yaXphdGlvbl9mYWN0b3IgPSBsZWFzdF9j b21tb25fbXVsdGlwbGUgKHZlY3Rvcml6YXRpb25fZmFjdG9yLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9PUF9WSU5GT19TTFBfVU5S T0xMSU5HX0ZBQ1RPUiAobG9vcF92aW5mbykpOworICAgICAgTE9PUF9WSU5G T19WRUNUX0ZBQ1RPUiAobG9vcF92aW5mbykgPSB2ZWN0b3JpemF0aW9uX2Zh Y3RvcjsKKyAgICAgIGlmICh2ZWN0X3ByaW50X2R1bXBfaW5mbyAoUkVQT1JU X0RFVEFJTFMpKQorICAgICAgICBmcHJpbnRmICh2ZWN0X2R1bXAsICJWRiA9 ICVkIiwgdmVjdG9yaXphdGlvbl9mYWN0b3IpOworICAgIH0KIAogICAvKiBB ZnRlciBWRiBpcyBzZXQsIFNMUCBjb3N0cyBzaG91bGQgYmUgdXBkYXRlZCBz aW5jZSB0aGUgbnVtYmVyIG9mIGNyZWF0ZWQKICAgICAgdmVjdG9yIHN0bXRz IGRlcGVuZHMgb24gVkYuICAqLwpAQCAtMTkxMyw3ICsxOTIxLDYgQEAgdmVj dF9hbmFseXplX2RhdGFfcmVmX2FjY2VzcyAoc3RydWN0IGRhdAogICBzdHJ1 Y3QgbG9vcCAqbG9vcCA9IExPT1BfVklORk9fTE9PUCAobG9vcF92aW5mbyk7 CiAgIEhPU1RfV0lERV9JTlQgZHJfc3RlcCA9IFRSRUVfSU5UX0NTVF9MT1cg KHN0ZXApOwogICBIT1NUX1dJREVfSU5UIHN0cmlkZTsKLSAgaW50IG51bml0 cyA9IFRZUEVfVkVDVE9SX1NVQlBBUlRTIChnZXRfdmVjdHlwZV9mb3Jfc2Nh bGFyX3R5cGUgKHNjYWxhcl90eXBlKSk7CiAgIGJvb2wgc2xwX2ltcG9zc2li bGUgPSBmYWxzZTsKIAogICAvKiBEb24ndCBhbGxvdyBpbnZhcmlhbnQgYWNj ZXNzZXMuICAqLwpAQCAtMjExOSwyNCArMjEyNiw2IEBAIHZlY3RfYW5hbHl6 ZV9kYXRhX3JlZl9hY2Nlc3MgKHN0cnVjdCBkYXQKIAogCSAgaWYgKHNscF9p bXBvc3NpYmxlKQogCSAgICByZXR1cm4gZmFsc2U7Ci0KLQkgIGlmIChzdHJp ZGUgPCBudW5pdHMgJiYgKG51bml0cyAlIHN0cmlkZSkgIT0gMCkKLQkgICAg ewotCSAgICAgIC8qIFNMUCBpcyBwb3NzaWJsZSBvbmx5IHdpdGggY29uY2Vw dHVhbCB1bnJvbGxpbmcgYnkgCi0JCSBudW5pdHMvc3RyaWRlLCBoZW5jZSBu dW5pdHMvc3RyaWRlIG11c3QgYmUgYW4gaW50ZWdlci4gICovCi0JICAgICAg aWYgKHZlY3RfcHJpbnRfZHVtcF9pbmZvIChSRVBPUlRfREVUQUlMUykpCi0J CWZwcmludGYgKHZlY3RfZHVtcCwgIlBvc3NpYmxlIFNMUCBncm91cCBvZiBp bGxlZ2FsIHNpemUiKTsJICAgICAgCi0JICAgICAgcmV0dXJuIGZhbHNlOwot CSAgICB9Ci0KLQkgIGlmIChzdHJpZGUgPiBudW5pdHMgJiYgKHN0cmlkZSAl IG51bml0cykgIT0gMCkKLQkgICAgewotCSAgICAgIC8qIEZvciBTTFAsIHRo ZSBncm91cCBzaG91bGQgYmUgZGlzdHJpYnV0ZWQgaW50byBzdHJpZGUvbnVu aXRzCi0JCSB2ZWN0b3JzLCBoZW5jZSBzdHJpZGUvbnVuaXRzIHNob3VsZCBi ZSBhbiBpbnRlZ2VyLiAgKi8KLQkgICAgICBpZiAodmVjdF9wcmludF9kdW1w X2luZm8gKFJFUE9SVF9ERVRBSUxTKSkKLQkJZnByaW50ZiAodmVjdF9kdW1w LCAiUG9zc2libGUgU0xQIGdyb3VwIG9mIGlsbGVnYWwgc2l6ZSIpOwotCSAg ICAgIHJldHVybiBmYWxzZTsKLQkgICAgfQogCX0KICAgICAgIERSX0dST1VQ X1NJWkUgKHZpbmZvX2Zvcl9zdG10IChzdG10KSkgPSBzdHJpZGU7CiAgICAg ICBpZiAodmVjdF9wcmludF9kdW1wX2luZm8gKFJFUE9SVF9ERVRBSUxTKSkK QEAgLTIxNDcsNiArMjEzNiw3IEBAIHZlY3RfYW5hbHl6ZV9kYXRhX3JlZl9h Y2Nlc3MgKHN0cnVjdCBkYXQKICAgICAgIGlmICghRFJfSVNfUkVBRCAoZHIp ICYmICFzbHBfaW1wb3NzaWJsZSkKIAlWRUNfc2FmZV9wdXNoICh0cmVlLCBo ZWFwLCBMT09QX1ZJTkZPX1NUUklERURfU1RPUkVTIChsb29wX3ZpbmZvKSwg c3RtdCk7CiAgICAgfQorCiAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNjQ0 LDExICsyNjM0LDcgQEAgdmVjdF9hbmFseXplX3NscF9pbnN0YW5jZSAobG9v cF92ZWNfaW5mbwogICBTTFBfVFJFRV9JTlNJREVfT0ZfTE9PUF9DT1NUIChu b2RlKSA9IDA7CiAKICAgLyogQ2FsY3VsYXRlIHRoZSB1bnJvbGxpbmcgZmFj dG9yLiAgKi8KLSAgaWYgKG51bml0cyA+IGdyb3VwX3NpemUpCi0gICAgewot ICAgICAgdW5yb2xsaW5nX2ZhY3RvciA9IG51bml0cyAvIGdyb3VwX3NpemU7 Ci0gICAgICBnY2NfYXNzZXJ0ICghKG51bml0cyAlIGdyb3VwX3NpemUpKTsK LSAgICB9CisgIHVucm9sbGluZ19mYWN0b3IgPSBsZWFzdF9jb21tb25fbXVs dGlwbGUgKG51bml0cywgZ3JvdXBfc2l6ZSkgLyBncm91cF9zaXplOwogCQog ICAvKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiB2ZWN0b3Igc3RtdHMgdG8g Y3JlYXRlIGJhc2VkIG9uIHRoZSB1bnJvbGxpbmcKICAgICAgZmFjdG9yIChu dW1iZXIgb2YgdmVjdG9ycyBpcyAxIGlmIE5VTklUUyA+PSBHUk9VUF9TSVpF LCBhbmQgaXMKSW5kZXg6IHRyZWUtdmVjdC10cmFuc2Zvcm0uYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSB0cmVlLXZlY3QtdHJhbnNmb3JtLmMJKHJl dmlzaW9uIDEyNzA1NykKKysrIHRyZWUtdmVjdC10cmFuc2Zvcm0uYwkod29y a2luZyBjb3B5KQpAQCAtMTczNiw4ICsxNzM2LDggQEAgdmVjdF9nZXRfY29u c3RhbnRfdmVjdG9ycyAoc2xwX3RyZWUgc2xwXwogICBpZiAoU1RNVF9WSU5G T19EQVRBX1JFRiAoc3RtdF92aW5mbykpCiAgICAgaXNfc3RvcmUgPSB0cnVl OwogCi0gIC8qIElmIGdyb3VwIHNpemUgaXMgbGVzcyB0aGFuIHRoZSBudW1i ZXIgb2YgdW5pdHMgaW4gdmVjdG9yLCB3ZQotICAgICB3aWxsIHB1dCBOVU5J VFMgLyBHUk9VUF9TSVpFIGNvcGllcyBvZiBlYWNoIG9wZXJhbmQuCisgIC8q IE5VTUJFUl9PRl9DT1BJRVMgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB3ZSBu ZWVkIHRvIHVzZSB0aGUgc2FtZSB2YWx1ZXMgaW4KKyAgICAgY3JlYXRlZCB2 ZWN0b3JzLiBJdCBpcyBncmVhdGVyIHRoYW4gMSBpZiB1bnJvbGxpbmcgaXMg cGVyZm9ybWVkLiAKIAogICAgICBGb3IgZXhhbXBsZSwgd2UgaGF2ZSB0d28g c2NhbGFyIG9wZXJhbmRzLCBzMSBhbmQgczIgKGUuZy4sIGdyb3VwIG9mCiAg ICAgIHN0cmlkZWQgYWNjZXNzZXMgb2Ygc2l6ZSB0d28pLCB3aGlsZSBOVUlO VFMgaXMgZm91ciAoaS5lLiwgZm91ciBzY2FsYXJzCkBAIC0xNzQ1LDE3ICsx NzQ1LDE3IEBAIHZlY3RfZ2V0X2NvbnN0YW50X3ZlY3RvcnMgKHNscF90cmVl IHNscF8KICAgICAgdHdvIGNvcGllcyBvZiBlYWNoIHNjYWxhciBvcGVyYW5k OiB7czEsIHMyLCBzMSwgczJ9LiAoTlVNQkVSX09GX0NPUElFUwogICAgICB3 aWxsIGJlIDIpLgogCi0gICAgIE90aGVyd2lzZSwgd2UgY3JlYXRlIEdST1VQ X1NJWkUgLyBOVU5JVFMgdmVjdG9ycyBjb250YWluaW5nIHRoZSBvcGVyYW5k cy4KKyAgICAgSWYgR1JPVVBfU0laRSA+IE5VTklUUywgdGhlIHNjYWxhcnMg d2lsbCBiZSBzcGxpdCBpbnRvIHNldmVyYWwgdmVjdG9ycyAKKyAgICAgY29u dGFpbmluZyB0aGUgb3BlcmFuZHMuCiAKICAgICAgRm9yIGV4YW1wbGUsIE5V SU5UUyBpcyBmb3VyIGFzIGJlZm9yZSwgYW5kIHRoZSBncm91cCBzaXplIGlz IDggCiAgICAgIChzMSwgczIsIC4uLiwgczgpLiBXZSB3aWxsIGNyZWF0ZSB0 d28gdmVjdG9ycyB7czEsIHMyLCBzMywgczR9IGFuZAogICAgICB7czUsIHM2 LCBzNywgczh9LiAgKi8KLQotICBpZiAoZ3JvdXBfc2l6ZSA8IG51bml0cykK LSAgICBudW1iZXJfb2ZfY29waWVzID0gbnVuaXRzIC8gZ3JvdXBfc2l6ZTsK KyAgICAKKyAgbnVtYmVyX29mX2NvcGllcyA9IGxlYXN0X2NvbW1vbl9tdWx0 aXBsZSAobnVuaXRzLCBncm91cF9zaXplKSAvIGdyb3VwX3NpemU7CiAKICAg bnVtYmVyX29mX3BsYWNlc19sZWZ0X2luX3ZlY3RvciA9IG51bml0czsKLSAg Zm9yIChqID0gMDsgaiA8IG51bWJlcl9vZl9jb3BpZXM7IGogKyspCisgIGZv ciAoaiA9IDA7IGogPCBudW1iZXJfb2ZfY29waWVzOyBqKyspCiAgICAgewog ICAgICAgZm9yIChpID0gZ3JvdXBfc2l6ZSAtIDE7IFZFQ19pdGVyYXRlICh0 cmVlLCBzdG10cywgaSwgc3RtdCk7IGktLSkKICAgICAgICAgewo= --0__=4DBBF9BADFBD764D8f9e8a93df938690918c4DBBF9BADFBD764D--