From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa1.mentor.iphmx.com (esa1.mentor.iphmx.com [68.232.129.153]) by sourceware.org (Postfix) with ESMTPS id E1AA03858D35; Tue, 8 Mar 2022 20:06:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E1AA03858D35 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.90,165,1643702400"; d="diff'?scan'208";a="75472140" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa1.mentor.iphmx.com with ESMTP; 08 Mar 2022 12:06:12 -0800 IronPort-SDR: S1tQIXRoGHY/SeFx6CuGNCz0sOfTIbQ+ZnS9IKJykJqJ1yHXBlfmb7gLU8Vinry7fiMfckovbp YKyu5EQsUod85lib6Ri3oDcH3uZjjnLlIH7WZKroZ823T25b+UyAEnNcDC4XPXQLVARmr+tm9z ScJnDr4y8bsEbsn37oPCwrL/b7z+J1WI2foqYAcYQXTiqONqKhc4GaHn4dxrVPioSMLWiY7Y5F 6Ky7U8zNwfevEIwLjB87hRHBchU47ez5U96nO62fFzEkfe4/ExpRL2BIcqOMLWmjR5bX6t0mlr UYM= Content-Type: multipart/mixed; boundary="------------3NveRg3s3hQqpSp9rqMJcGwT" Message-ID: Date: Tue, 8 Mar 2022 21:06:03 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.6.2 Content-Language: en-US To: gcc-patches , fortran From: Tobias Burnus Subject: [Patch] Fortran: Fix CLASS handling in SIZEOF intrinsic X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: SVR-IES-MBX-07.mgc.mentorg.com (139.181.222.7) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_SHORT, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Mar 2022 20:06:16 -0000 --------------3NveRg3s3hQqpSp9rqMJcGwT Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable Fix SIZEOF handling. I have to admit that I do understand what the current code does, but do not understand what the previous code did. However, it still passes the testsuite - and also some code which did ICE now compiles :-) While writing the testcase, I did find two issues: * Passing a CLASS to TYPE(*),dimension(..) will have an elem_len of the declared type and not of the dynamic type. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D104844 * var%class_array(1,1)%array will have size(...) =3D=3D 0 instead of size(... % array). https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D104845 OK for mainline? (Unless you want to hold off until GCC 13) Tobias ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------3NveRg3s3hQqpSp9rqMJcGwT Content-Type: text/x-patch; charset="UTF-8"; name="sizeof.diff" Content-Disposition: attachment; filename="sizeof.diff" Content-Transfer-Encoding: base64 Rm9ydHJhbjogRml4IENMQVNTIGhhbmRsaW5nIGluIFNJWkVPRiBpbnRyaW5zaWMKCmdjYy9m b3J0cmFuL0NoYW5nZUxvZzoKCgkqIHRyYW5zLWludHJpbnNpYy5jYyAoZ2ZjX2NvbnZfaW50 cmluc2ljX3NpemVvZik6IEZpeCBDTEFTUyBoYW5kbGluZy4KCmdjYy90ZXN0c3VpdGUvQ2hh bmdlTG9nOgoKCSogZ2ZvcnRyYW4uZGcvc2l6ZW9mXzYuZjkwOiBOZXcgdGVzdC4KCiBnY2Mv Zm9ydHJhbi90cmFucy1pbnRyaW5zaWMuY2MgICAgICAgICB8ICAxNiArLQogZ2NjL3Rlc3Rz dWl0ZS9nZm9ydHJhbi5kZy9zaXplb2ZfNi5mOTAgfCA0MzcgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDQ0NiBpbnNlcnRpb25zKCspLCA3 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3RyYW5zLWludHJpbnNp Yy5jYyBiL2djYy9mb3J0cmFuL3RyYW5zLWludHJpbnNpYy5jYwppbmRleCBlNjgwZGUxZGJk MS4uMjI0OTcyMzU0MGQgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5zLWludHJpbnNp Yy5jYworKysgYi9nY2MvZm9ydHJhbi90cmFucy1pbnRyaW5zaWMuY2MKQEAgLTgwOTksMTIg KzgwOTksMTQgQEAgZ2ZjX2NvbnZfaW50cmluc2ljX3NpemVvZiAoZ2ZjX3NlICpzZSwgZ2Zj X2V4cHIgKmV4cHIpCiAJIGNsYXNzIG9iamVjdC4gIFRoZSBjbGFzcyBvYmplY3QgbWF5IGJl IGEgbm9uLXBvaW50ZXIgb2JqZWN0LCBlLmcuCiAJIGxvY2F0ZWQgb24gdGhlIHN0YWNrLCBv ciBhIG1lbW9yeSBsb2NhdGlvbiBwb2ludGVkIHRvLCBlLmcuIGEKIAkgcGFyYW1ldGVyLCBp LmUuLCBhbiBpbmRpcmVjdF9yZWYuICAqLwotICAgICAgaWYgKGFyZy0+cmFuayA8IDAKLQkg IHx8IChhcmctPnJhbmsgPiAwICYmICFWQVJfUCAoYXJnc2UuZXhwcikKLQkgICAgICAmJiAo KElORElSRUNUX1JFRl9QIChUUkVFX09QRVJBTkQgKGFyZ3NlLmV4cHIsIDApKQotCQkgICAm JiBHRkNfREVDTF9DTEFTUyAoVFJFRV9PUEVSQU5EICgKLQkJCQkJVFJFRV9PUEVSQU5EIChh cmdzZS5leHByLCAwKSwgMCkpKQotCQkgIHx8IEdGQ19ERUNMX0NMQVNTIChUUkVFX09QRVJB TkQgKGFyZ3NlLmV4cHIsIDApKSkpKQorICAgICAgaWYgKFBPSU5URVJfVFlQRV9QIChUUkVF X1RZUEUgKGFyZ3NlLmV4cHIpKQorCSAgJiYgR0ZDX0NMQVNTX1RZUEVfUCAoVFJFRV9UWVBF IChUUkVFX1RZUEUgKGFyZ3NlLmV4cHIpKSkpCisJYnl0ZV9zaXplCisJICA9IGdmY19jbGFz c192dGFiX3NpemVfZ2V0IChidWlsZF9mb2xkX2luZGlyZWN0X3JlZiAoYXJnc2UuZXhwcikp OworICAgICAgZWxzZSBpZiAoR0ZDX0NMQVNTX1RZUEVfUCAoVFJFRV9UWVBFIChhcmdzZS5l eHByKSkpCisJYnl0ZV9zaXplID0gZ2ZjX2NsYXNzX3Z0YWJfc2l6ZV9nZXQgKGFyZ3NlLmV4 cHIpOworICAgICAgZWxzZSBpZiAoR0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZUEUg KGFyZ3NlLmV4cHIpKQorCSAgICAgICAmJiBUUkVFX0NPREUgKGFyZ3NlLmV4cHIpID09IENP TVBPTkVOVF9SRUYpCiAJYnl0ZV9zaXplID0gZ2ZjX2NsYXNzX3Z0YWJfc2l6ZV9nZXQgKFRS RUVfT1BFUkFORCAoYXJnc2UuZXhwciwgMCkpOwogICAgICAgZWxzZSBpZiAoYXJnLT5yYW5r ID4gMAogCSAgICAgICB8fCAoYXJnLT5yYW5rID09IDAKQEAgLTgxMTQsNyArODExNiw3IEBA IGdmY19jb252X2ludHJpbnNpY19zaXplb2YgKGdmY19zZSAqc2UsIGdmY19leHByICpleHBy KQogCWJ5dGVfc2l6ZSA9IGdmY19jbGFzc192dGFiX3NpemVfZ2V0ICgKIAkgICAgICBHRkNf REVDTF9TQVZFRF9ERVNDUklQVE9SIChhcmctPnN5bXRyZWUtPm4uc3ltLT5iYWNrZW5kX2Rl Y2wpKTsKICAgICAgIGVsc2UKLQlieXRlX3NpemUgPSBnZmNfY2xhc3NfdnRhYl9zaXplX2dl dCAoYXJnc2UuZXhwcik7CisJZ2NjX3VucmVhY2hhYmxlICgpOwogICAgIH0KICAgZWxzZQog ICAgIHsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvc2l6ZW9mXzYu ZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9zaXplb2ZfNi5mOTAKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIxYjU3MzUwZGMzCi0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9zaXplb2ZfNi5mOTAKQEAgLTAs MCArMSw0MzcgQEAKKyEgeyBkZy1kbyBydW4gfQorIQorISBDaGVjayB0aGF0IHNpemVvZiBp cyBwcm9wZXJseSBoYW5kbGVkCishCit1c2UgaXNvX2NfYmluZGluZworaW1wbGljaXQgbm9u ZSAodHlwZSwgZXh0ZXJuYWwpCisKK3R5cGUgdAorICBpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6 OiBhKDosOiw6KSwgYWEKKyAgaW50ZWdlciA6OiBiKDUpLCBjCitlbmQgdHlwZSB0CisKK3R5 cGUgdDIKKyAgIGNsYXNzKHQpLCBhbGxvY2F0YWJsZSA6OiBkKDosOiksIGUKK2VuZCB0eXBl IHQyCisKK3R5cGUsIGV4dGVuZHModDIpIDo6IHQyZQorICBpbnRlZ2VyIDo6IHEoNyksIHoK K2VuZCB0eXBlIHQyZQorCit0eXBlIHQzCisgICBjbGFzcyh0MiksIGFsbG9jYXRhYmxlIDo6 IGN0MiwgY3QyYSg6LDosOikKKyAgIHR5cGUodDIpLCBhbGxvY2F0YWJsZSA6OiB0dDIsIHR0 MmEoOiw6LDopCisgICBpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiBpaSwgaWlhKDosOiw6KQor ZW5kIHR5cGUgdDMKKwordHlwZSh0MykgOjogdmFyLCB2YXJhKDUpCit0eXBlKHQzKSwgYWxs b2NhdGFibGUgOjogYXZhciwgYXZhcmEoOikKK2NsYXNzKHQzKSwgYWxsb2NhdGFibGUgOjog Y3ZhciwgY3ZhcmEoOikKK3R5cGUodDIpLCBhbGxvY2F0YWJsZSA6OiBheCwgYXhhKDosOiw6 KQorY2xhc3ModDIpLCBhbGxvY2F0YWJsZSA6OiBjeCwgY3hhKDosOiw6KQorCitpbnRlZ2Vy KGNfc2l6ZV90KSA6OiBuCisKK2FsbG9jYXRlICh0MyA6OiBhdmFyLCBhdmFyYSg1KSkKK2Fs bG9jYXRlICh0MyA6OiBjdmFyLCBjdmFyYSg1KSkKKworbiA9IHNpemVvZih2YXIpCisKKyEg QXNzdW1lIGFsaWdubWVudCBwbGF5cyBubyB0cmlja3MgYW5kIHN5c3RlbSBoYXMgMzJiaXQv NjRiaXQuCishIElmIG5lZWRlZCBjaGFuZ2UKK2lmIChuIC89IDM3NiAuYW5kLiBuIC89IDIw MCkgZXJyb3Igc3RvcAorCitpZiAobiAvPSBzaXplb2YoYXZhcikpIGVycm9yIHN0b3AKK2lm IChuIC89IHNpemVvZihjdmFyKSkgZXJyb3Igc3RvcAoraWYgKG4gKiA1IC89IHNpemVvZih2 YXJhKSkgZXJyb3Igc3RvcAoraWYgKG4gKiA1IC89IHNpemVvZihhdmFyYSkpIGVycm9yIHN0 b3AKK2lmIChuICogNSAvPSBzaXplb2YoY3ZhcmEpKSBlcnJvciBzdG9wCisKK2lmIChuIC89 IHN6X2FyKHZhcix2YXIsdmFyLHZhcikpIGVycm9yIHN0b3AKK2lmIChuIC89IHN6X3ModmFy LHZhcikpIGVycm9yIHN0b3AKK2lmIChuIC89IHN6X3QzKHZhcix2YXIsdmFyLHZhcikpIGVy cm9yIHN0b3AKK2lmIChuIC89IHN6X2FyKGF2YXIsYXZhcixhdmFyLGF2YXIpKSBlcnJvciBz dG9wCitpZiAobiAvPSBzel9zKGF2YXIsYXZhcikpIGVycm9yIHN0b3AKK2lmIChuIC89IHN6 X3QzKGF2YXIsYXZhcixhdmFyLGF2YXIpKSBlcnJvciBzdG9wCitpZiAobiAvPSBzel90M19h dChhdmFyLGF2YXIpKSBlcnJvciBzdG9wCitpZiAobiAvPSBzel9hcihjdmFyLGN2YXIsY3Zh cixjdmFyKSkgZXJyb3Igc3RvcAoraWYgKG4gLz0gc3pfcyhjdmFyLGN2YXIpKSBlcnJvciBz dG9wCitpZiAobiAvPSBzel90MyhjdmFyLGN2YXIsY3ZhcixjdmFyKSkgZXJyb3Igc3RvcAor aWYgKG4gLz0gc3pfdDNfYShjdmFyLGN2YXIpKSBlcnJvciBzdG9wCisKK2lmIChuKjUgLz0g c3pfYXIodmFyYSx2YXJhLHZhcmEsdmFyYSkpIGVycm9yIHN0b3AKK2lmIChuKjUgLz0gc3pf cjEodmFyYSx2YXJhLHZhcmEsdmFyYSkpIGVycm9yIHN0b3AKK2lmIChuKjUgLz0gc3pfdDMo dmFyYSx2YXJhLHZhcmEsdmFyYSkpIGVycm9yIHN0b3AKK2lmIChuKjUgLz0gc3pfYXIoYXZh cmEsYXZhcmEsYXZhcmEsYXZhcmEpKSBlcnJvciBzdG9wCitpZiAobio1IC89IHN6X3IxKGF2 YXJhLGF2YXJhLGF2YXJhLGF2YXJhKSkgZXJyb3Igc3RvcAoraWYgKG4qNSAvPSBzel90Myhh dmFyYSxhdmFyYSxhdmFyYSxhdmFyYSkpIGVycm9yIHN0b3AKK2lmIChuKjUgLz0gc3pfdDNf YXQoYXZhcmEsYXZhcmEpKSBlcnJvciBzdG9wCitpZiAobio1IC89IHN6X2FyKGN2YXJhLGN2 YXJhLGN2YXJhLGN2YXJhKSkgZXJyb3Igc3RvcAoraWYgKG4qNSAvPSBzel9yMShjdmFyYSxj dmFyYSxjdmFyYSxjdmFyYSkpIGVycm9yIHN0b3AKK2lmIChuKjUgLz0gc3pfdDMoY3ZhcmEs Y3ZhcmEsY3ZhcmEsY3ZhcmEpKSBlcnJvciBzdG9wCitpZiAobio1IC89IHN6X3QzX2EoY3Zh cmEsY3ZhcmEpKSBlcnJvciBzdG9wCisKK2FsbG9jYXRlICh2YXIlY3QyLCB2YXIlY3QyYSg1 LDQsMiksIHZhciV0dDIsIHZhciV0dDJhKDUsNCwyKSwgdmFyJWlpLCB2YXIlaWlhKDUsMywy KSkKK2FsbG9jYXRlIChhdmFyJWN0MiwgYXZhciVjdDJhKDUsNCwyKSwgYXZhciV0dDIsIGF2 YXIldHQyYSg1LDQsMiksIGF2YXIlaWksIGF2YXIlaWlhKDUsMywyKSkKK2FsbG9jYXRlIChj dmFyJWN0MiwgY3ZhciVjdDJhKDUsNCwyKSwgY3ZhciV0dDIsIGN2YXIldHQyYSg1LDQsMiks IGN2YXIlaWksIGN2YXIlaWlhKDUsMywyKSkKK2FsbG9jYXRlICh2YXJhKDEpJWN0MiwgdmFy YSgxKSVjdDJhKDUsNCwyKSwgdmFyYSgxKSV0dDIsIHZhcmEoMSkldHQyYSg1LDQsMiksIHZh cmEoMSklaWksIHZhcmEoMSklaWlhKDUsMywyKSkKK2FsbG9jYXRlIChhdmFyYSgxKSVjdDIs IGF2YXJhKDEpJWN0MmEoNSw0LDIpLCBhdmFyYSgxKSV0dDIsIGF2YXJhKDEpJXR0MmEoNSw0 LDIpLCBhdmFyYSgxKSVpaSwgYXZhcmEoMSklaWlhKDUsMywyKSkKK2FsbG9jYXRlIChjdmFy YSgxKSVjdDIsIGN2YXJhKDEpJWN0MmEoNSw0LDIpLCBjdmFyYSgxKSV0dDIsIGN2YXJhKDEp JXR0MmEoNSw0LDIpLCBjdmFyYSgxKSVpaSwgY3ZhcmEoMSklaWlhKDUsMywyKSkKK2FsbG9j YXRlIChheCwgYXhhKDUsNCwyKSwgY3gsIGN4YSg1LDQsMikpCisKKyEgU2hvdWxkIGJlIHN0 aWxsIGJlIHRoZSBzYW1lCitpZiAobiAvPSBzaXplb2YoYXZhcikpIGVycm9yIHN0b3AKK2lm IChuIC89IHNpemVvZihjdmFyKSkgZXJyb3Igc3RvcAoraWYgKG4gKiA1IC89IHNpemVvZih2 YXJhKSkgZXJyb3Igc3RvcAoraWYgKG4gKiA1IC89IHNpemVvZihhdmFyYSkpIGVycm9yIHN0 b3AKK2lmIChuICogNSAvPSBzaXplb2YoY3ZhcmEpKSBlcnJvciBzdG9wCisKK2lmIChuIC89 IHN6X2FyKHZhcix2YXIsdmFyLHZhcikpIGVycm9yIHN0b3AKK2lmIChuIC89IHN6X3ModmFy LHZhcikpIGVycm9yIHN0b3AKK2lmIChuIC89IHN6X3QzKHZhcix2YXIsdmFyLHZhcikpIGVy cm9yIHN0b3AKK2lmIChuIC89IHN6X2FyKGF2YXIsYXZhcixhdmFyLGF2YXIpKSBlcnJvciBz dG9wCitpZiAobiAvPSBzel9zKGF2YXIsYXZhcikpIGVycm9yIHN0b3AKK2lmIChuIC89IHN6 X3QzKGF2YXIsYXZhcixhdmFyLGF2YXIpKSBlcnJvciBzdG9wCitpZiAobiAvPSBzel90M19h dChhdmFyLGF2YXIpKSBlcnJvciBzdG9wCitpZiAobiAvPSBzel9hcihjdmFyLGN2YXIsY3Zh cixjdmFyKSkgZXJyb3Igc3RvcAoraWYgKG4gLz0gc3pfcyhjdmFyLGN2YXIpKSBlcnJvciBz dG9wCitpZiAobiAvPSBzel90MyhjdmFyLGN2YXIsY3ZhcixjdmFyKSkgZXJyb3Igc3RvcAor aWYgKG4gLz0gc3pfdDNfYShjdmFyLGN2YXIpKSBlcnJvciBzdG9wCisKK2lmIChuKjUgLz0g c3pfYXIodmFyYSx2YXJhLHZhcmEsdmFyYSkpIGVycm9yIHN0b3AKK2lmIChuKjUgLz0gc3pf cjEodmFyYSx2YXJhLHZhcmEsdmFyYSkpIGVycm9yIHN0b3AKK2lmIChuKjUgLz0gc3pfdDMo dmFyYSx2YXJhLHZhcmEsdmFyYSkpIGVycm9yIHN0b3AKK2lmIChuKjUgLz0gc3pfYXIoYXZh cmEsYXZhcmEsYXZhcmEsYXZhcmEpKSBlcnJvciBzdG9wCitpZiAobio1IC89IHN6X3IxKGF2 YXJhLGF2YXJhLGF2YXJhLGF2YXJhKSkgZXJyb3Igc3RvcAoraWYgKG4qNSAvPSBzel90Myhh dmFyYSxhdmFyYSxhdmFyYSxhdmFyYSkpIGVycm9yIHN0b3AKK2lmIChuKjUgLz0gc3pfdDNf YXQoYXZhcmEsYXZhcmEpKSBlcnJvciBzdG9wCitpZiAobio1IC89IHN6X2FyKGN2YXJhLGN2 YXJhLGN2YXJhLGN2YXJhKSkgZXJyb3Igc3RvcAoraWYgKG4qNSAvPSBzel9yMShjdmFyYSxj dmFyYSxjdmFyYSxjdmFyYSkpIGVycm9yIHN0b3AKK2lmIChuKjUgLz0gc3pfdDMoY3ZhcmEs Y3ZhcmEsY3ZhcmEsY3ZhcmEpKSBlcnJvciBzdG9wCitpZiAobio1IC89IHN6X3QzX2EoY3Zh cmEsY3ZhcmEpKSBlcnJvciBzdG9wCisKKyEgVGhpcyBvbmUgZGlkIHNlZ2ZhdWx0IGJlZm9y ZSBpbiBnZmNfY29udl9pbnRyaW5zaWNfc2l6ZW9mCituID0gc2l6ZW9mKHZhciVjdDIpCitp ZiAobiAvPSAxMTIgLmFuZC4gbiAvPSA2MCkgZXJyb3Igc3RvcAoraWYgKG4gLz0gc2l6ZW9m ICh2YXIldHQyKSkgZXJyb3Igc3RvcAoraWYgKG4gLz0gc2l6ZW9mIChhdmFyJWN0MikpIGVy cm9yIHN0b3AKK2lmIChuIC89IHNpemVvZiAoYXZhciV0dDIpKSBlcnJvciBzdG9wCitpZiAo biAvPSBzaXplb2YgKGN2YXIlY3QyKSkgZXJyb3Igc3RvcAoraWYgKG4gLz0gc2l6ZW9mIChj dmFyJXR0MikpIGVycm9yIHN0b3AKK2lmIChuIC89IHNpemVvZiAodmFyYSgxKSV0dDIpKSBl cnJvciBzdG9wCitpZiAobiAvPSBzaXplb2YgKGF2YXJhKDEpJWN0MikpIGVycm9yIHN0b3AK K2lmIChuIC89IHNpemVvZiAoYXZhcmEoMSkldHQyKSkgZXJyb3Igc3RvcAoraWYgKG4gLz0g c2l6ZW9mIChjdmFyYSgxKSVjdDIpKSBlcnJvciBzdG9wCitpZiAobiAvPSBzaXplb2YgKGN2 YXJhKDEpJXR0MikpIGVycm9yIHN0b3AKKworaWYgKG4gLz0gc2l6ZW9mIChheCkpIGVycm9y IHN0b3AKK2lmIChuIC89IHNpemVvZiAoY3gpKSBlcnJvciBzdG9wCisKK2lmIChuIC89IHN6 X2FyKHZhciVjdDIsdmFyJWN0Mix2YXIlY3QyLHZhciVjdDIpKSBlcnJvciBzdG9wCitpZiAo biAvPSBzel9zKHZhciVjdDIsdmFyJWN0MikpIGVycm9yIHN0b3AKK2lmIChuIC89IHN6X3Qy KHZhciVjdDIsdmFyJWN0Mix2YXIlY3QyLHZhciVjdDIsLmZhbHNlLikpIGVycm9yIHN0b3AK K2lmIChuIC89IHN6X3QyX2EodmFyJWN0Mix2YXIlY3QyKSkgZXJyb3Igc3RvcAoraWYgKG4g Lz0gc3pfYXIodmFyJXR0Mix2YXIldHQyLHZhciV0dDIsdmFyJXR0MikpIGVycm9yIHN0b3AK K2lmIChuIC89IHN6X3ModmFyJXR0Mix2YXIldHQyKSkgZXJyb3Igc3RvcAoraWYgKG4gLz0g c3pfdDIodmFyJXR0Mix2YXIldHQyLHZhciV0dDIsdmFyJXR0MiwuZmFsc2UuKSkgZXJyb3Ig c3RvcAoraWYgKG4gLz0gc3pfdDJfYXQodmFyJXR0Mix2YXIldHQyKSkgZXJyb3Igc3RvcAor CitpZiAobio1KjQqMiAvPSBzaXplb2YgKHZhciV0dDJhKSkgZXJyb3Igc3RvcAoraWYgKG4q NSo0KjIgLz0gc2l6ZW9mIChhdmFyJWN0MmEpKSBlcnJvciBzdG9wCitpZiAobio1KjQqMiAv PSBzaXplb2YgKGF2YXIldHQyYSkpIGVycm9yIHN0b3AKK2lmIChuKjUqNCoyIC89IHNpemVv ZiAoY3ZhciVjdDJhKSkgZXJyb3Igc3RvcAoraWYgKG4qNSo0KjIgLz0gc2l6ZW9mIChjdmFy JXR0MmEpKSBlcnJvciBzdG9wCitpZiAobio1KjQqMiAvPSBzaXplb2YgKHZhcmEoMSkldHQy YSkpIGVycm9yIHN0b3AKK2lmIChuKjUqNCoyIC89IHNpemVvZiAoYXZhcmEoMSklY3QyYSkp IGVycm9yIHN0b3AKK2lmIChuKjUqNCoyIC89IHNpemVvZiAoYXZhcmEoMSkldHQyYSkpIGVy cm9yIHN0b3AKK2lmIChuKjUqNCoyIC89IHNpemVvZiAoY3ZhcmEoMSklY3QyYSkpIGVycm9y IHN0b3AKK2lmIChuKjUqNCoyIC89IHNpemVvZiAoY3ZhcmEoMSkldHQyYSkpIGVycm9yIHN0 b3AKKworaWYgKG4qNSo0KjIgLz0gc2l6ZW9mIChheGEpKSBlcnJvciBzdG9wCitpZiAobio1 KjQqMiAvPSBzaXplb2YgKGN4YSkpIGVycm9yIHN0b3AKKworaWYgKG4qNSo0KjIgLz0gc3pf YXIodmFyJWN0MmEsdmFyJWN0MmEsdmFyJWN0MmEsdmFyJWN0MmEpKSBlcnJvciBzdG9wCitp ZiAobio1KjQqMiAvPSBzel9yMyh2YXIlY3QyYSx2YXIlY3QyYSx2YXIlY3QyYSx2YXIlY3Qy YSkpIGVycm9yIHN0b3AKK2lmIChuKjUqNCoyIC89IHN6X3QyKHZhciVjdDJhLHZhciVjdDJh LHZhciVjdDJhLHZhciVjdDJhLC5mYWxzZS4pKSBlcnJvciBzdG9wCitpZiAobio1KjQqMiAv PSBzel90Ml9hKHZhciVjdDJhLHZhciVjdDJhKSkgZXJyb3Igc3RvcAoraWYgKG4qNSo0KjIg Lz0gc3pfYXIodmFyJXR0MmEsdmFyJXR0MmEsdmFyJXR0MmEsdmFyJXR0MmEpKSBlcnJvciBz dG9wCitpZiAobio1KjQqMiAvPSBzel9yMyh2YXIldHQyYSx2YXIldHQyYSx2YXIldHQyYSx2 YXIldHQyYSkpIGVycm9yIHN0b3AKK2lmIChuKjUqNCoyIC89IHN6X3QyKHZhciV0dDJhLHZh ciV0dDJhLHZhciV0dDJhLHZhciV0dDJhLC5mYWxzZS4pKSBlcnJvciBzdG9wCitpZiAobio1 KjQqMiAvPSBzel90Ml9hdCh2YXIldHQyYSx2YXIldHQyYSkpIGVycm9yIHN0b3AKKworbiA9 IHNpemVvZih2YXIlaWkpCitpZiAobiAvPSA0KSBlcnJvciBzdG9wCitpZiAobiAvPSBzaXpl b2YgKHZhciVpaSkpIGVycm9yIHN0b3AKK2lmIChuIC89IHNpemVvZiAoYXZhciVpaSkpIGVy cm9yIHN0b3AKK2lmIChuIC89IHNpemVvZiAoYXZhciVpaSkpIGVycm9yIHN0b3AKK2lmIChu IC89IHNpemVvZiAoY3ZhciVpaSkpIGVycm9yIHN0b3AKK2lmIChuIC89IHNpemVvZiAoY3Zh ciVpaSkpIGVycm9yIHN0b3AKK2lmIChuIC89IHNpemVvZiAodmFyYSgxKSVpaSkpIGVycm9y IHN0b3AKK2lmIChuIC89IHNpemVvZiAoYXZhcmEoMSklaWkpKSBlcnJvciBzdG9wCitpZiAo biAvPSBzaXplb2YgKGF2YXJhKDEpJWlpKSkgZXJyb3Igc3RvcAoraWYgKG4gLz0gc2l6ZW9m IChjdmFyYSgxKSVpaSkpIGVycm9yIHN0b3AKK2lmIChuIC89IHNpemVvZiAoY3ZhcmEoMSkl aWkpKSBlcnJvciBzdG9wCisKK2lmIChuKjUqMyoyIC89IHNpemVvZiAodmFyJWlpYSkpIGVy cm9yIHN0b3AKK2lmIChuKjUqMyoyIC89IHNpemVvZiAoYXZhciVpaWEpKSBlcnJvciBzdG9w CitpZiAobio1KjMqMiAvPSBzaXplb2YgKGF2YXIlaWlhKSkgZXJyb3Igc3RvcAoraWYgKG4q NSozKjIgLz0gc2l6ZW9mIChjdmFyJWlpYSkpIGVycm9yIHN0b3AKK2lmIChuKjUqMyoyIC89 IHNpemVvZiAoY3ZhciVpaWEpKSBlcnJvciBzdG9wCitpZiAobio1KjMqMiAvPSBzaXplb2Yg KHZhcmEoMSklaWlhKSkgZXJyb3Igc3RvcAoraWYgKG4qNSozKjIgLz0gc2l6ZW9mIChhdmFy YSgxKSVpaWEpKSBlcnJvciBzdG9wCitpZiAobio1KjMqMiAvPSBzaXplb2YgKGF2YXJhKDEp JWlpYSkpIGVycm9yIHN0b3AKK2lmIChuKjUqMyoyIC89IHNpemVvZiAoY3ZhcmEoMSklaWlh KSkgZXJyb3Igc3RvcAoraWYgKG4qNSozKjIgLz0gc2l6ZW9mIChjdmFyYSgxKSVpaWEpKSBl cnJvciBzdG9wCisKK2RlYWxsb2NhdGUgKHZhciVjdDIsIHZhciVjdDJhLCB2YXIldHQyLCB2 YXIldHQyYSwgdmFyJWlpLCB2YXIlaWlhKQorZGVhbGxvY2F0ZSAoYXZhciVjdDIsIGF2YXIl Y3QyYSwgYXZhciV0dDIsIGF2YXIldHQyYSwgYXZhciVpaSwgYXZhciVpaWEpCitkZWFsbG9j YXRlIChjdmFyJWN0MiwgY3ZhciVjdDJhLCBjdmFyJXR0MiwgY3ZhciV0dDJhLCBjdmFyJWlp LCBjdmFyJWlpYSkKK2RlYWxsb2NhdGUgKHZhcmEoMSklY3QyLCB2YXJhKDEpJWN0MmEsIHZh cmEoMSkldHQyLCB2YXJhKDEpJXR0MmEsIHZhcmEoMSklaWksIHZhcmEoMSklaWlhKQorZGVh bGxvY2F0ZSAoYXZhcmEoMSklY3QyLCBhdmFyYSgxKSVjdDJhLCBhdmFyYSgxKSV0dDIsIGF2 YXJhKDEpJXR0MmEsIGF2YXJhKDEpJWlpLCBhdmFyYSgxKSVpaWEpCitkZWFsbG9jYXRlIChj dmFyYSgxKSVjdDIsIGN2YXJhKDEpJWN0MmEsIGN2YXJhKDEpJXR0MiwgY3ZhcmEoMSkldHQy YSwgY3ZhcmEoMSklaWksIGN2YXJhKDEpJWlpYSkKK2RlYWxsb2NhdGUgKGF4LCBheGEsIGN4 LCBjeGEpCisKK2FsbG9jYXRlICh0MmUgOjogdmFyJWN0MiwgdmFyJWN0MmEoNSw0LDIpKQor YWxsb2NhdGUgKHQyZSA6OiBhdmFyJWN0MiwgYXZhciVjdDJhKDUsNCwyKSkKK2FsbG9jYXRl ICh0MmUgOjogY3ZhciVjdDIsIGN2YXIlY3QyYSg1LDQsMikpCithbGxvY2F0ZSAodDJlIDo6 IHZhcmEoMSklY3QyLCB2YXJhKDEpJWN0MmEoNSw0LDIpKQorYWxsb2NhdGUgKHQyZSA6OiBh dmFyYSgxKSVjdDIsIGF2YXJhKDEpJWN0MmEoNSw0LDIpKQorYWxsb2NhdGUgKHQyZSA6OiBj dmFyYSgxKSVjdDIsIGN2YXJhKDEpJWN0MmEoNSw0LDIpKQorYWxsb2NhdGUgKHQyZSA6OiBj eCwgY3hhKDUsNCwyKSkKKworbiA9IHNpemVvZihjeCkKK2lmIChuIC89IDE0NCAuYW5kLiBu IC89IDkyKSBlcnJvciBzdG9wCitpZiAobiAvPSBzaXplb2YodmFyJWN0MikpIGVycm9yIHN0 b3AKK2lmIChuIC89IHNpemVvZihhdmFyJWN0MikpIGVycm9yIHN0b3AKK2lmIChuIC89IHNp emVvZihjdmFyJWN0MikpIGVycm9yIHN0b3AKK2lmIChuIC89IHNpemVvZih2YXJhKDEpJWN0 MikpIGVycm9yIHN0b3AKK2lmIChuIC89IHNpemVvZihhdmFyYSgxKSVjdDIpKSBlcnJvciBz dG9wCitpZiAobiAvPSBzaXplb2YoY3ZhcmEoMSklY3QyKSkgZXJyb3Igc3RvcAoraWYgKG4q NSo0KjIgLz0gc2l6ZW9mKGN4YSkpIGVycm9yIHN0b3AKK2lmIChuKjUqNCoyIC89IHNpemVv Zih2YXIlY3QyYSkpIGVycm9yIHN0b3AKK2lmIChuKjUqNCoyIC89IHNpemVvZihhdmFyJWN0 MmEpKSBlcnJvciBzdG9wCitpZiAobio1KjQqMiAvPSBzaXplb2YoY3ZhciVjdDJhKSkgZXJy b3Igc3RvcAoraWYgKG4qNSo0KjIgLz0gc2l6ZW9mKHZhcmEoMSklY3QyYSkpIGVycm9yIHN0 b3AKK2lmIChuKjUqNCoyIC89IHNpemVvZihhdmFyYSgxKSVjdDJhKSkgZXJyb3Igc3RvcAor aWYgKG4qNSo0KjIgLz0gc2l6ZW9mKGN2YXJhKDEpJWN0MmEpKSBlcnJvciBzdG9wCisKKyEg RkFJTFMgYXMgZGVjbGFyZSBub3QgZHluYW1pYyB0eXBlIGFycml2ZXMgZm9yIFRZUEUoKiks ZGltZW5zaW9uKC4uKQorISAtPiBGSVhNRSwgUFIgZm9ydHJhbi8xMDQ4NDQgICh0cmljZSkK KyFpZiAobiAvPSBzel9hcih2YXIlY3QyLHZhciVjdDIsdmFyJWN0Mix2YXIlY3QyKSkgZXJy b3Igc3RvcCAgISBGSVhNRQoraWYgKG4gLz0gc3pfcyh2YXIlY3QyLHZhciVjdDIpKSBlcnJv ciBzdG9wCitpZiAobiAvPSBzel90Mih2YXIlY3QyLHZhciVjdDIsdmFyJWN0Mix2YXIlY3Qy LC50cnVlLikpIGVycm9yIHN0b3AKK2lmIChuIC89IHN6X3QyX2EodmFyJWN0Mix2YXIlY3Qy KSkgZXJyb3Igc3RvcAorIWlmIChuKjUqNCoyIC89IHN6X2FyKHZhciVjdDJhLHZhciVjdDJh LHZhciVjdDJhLHZhciVjdDJhKSkgZXJyb3Igc3RvcCAhIEZJWE1FCishaWYgKG4qNSo0KjIg Lz0gc3pfcjModmFyJWN0MmEsdmFyJWN0MmEsdmFyJWN0MmEsdmFyJWN0MmEpKSBlcnJvciBz dG9wICEgRklYTUUKK2lmIChuKjUqNCoyIC89IHN6X3QyKHZhciVjdDJhLHZhciVjdDJhLHZh ciVjdDJhLHZhciVjdDJhLC50cnVlLikpIGVycm9yIHN0b3AKK2lmIChuKjUqNCoyIC89IHN6 X3QyX2EodmFyJWN0MmEsdmFyJWN0MmEpKSBlcnJvciBzdG9wCisKK2FsbG9jYXRlICh0IDo6 IHZhciVjdDIlZCgzLDIpLCB2YXIlY3QyYSg1LDQsMiklZCgzLDIpKQorYWxsb2NhdGUgKHQg OjogYXZhciVjdDIlZCgzLDIpLCBhdmFyJWN0MmEoNSw0LDIpJWQoMywyKSkKK2FsbG9jYXRl ICh0IDo6IGN2YXIlY3QyJWQoMywyKSwgY3ZhciVjdDJhKDUsNCwyKSVkKDMsMikpCithbGxv Y2F0ZSAodCA6OiB2YXJhKDEpJWN0MiVkKDMsMiksIHZhcmEoMSklY3QyYSg1LDQsMiklZCgz LDIpKQorYWxsb2NhdGUgKHQgOjogYXZhcmEoMSklY3QyJWQoMywyKSwgYXZhcmEoMSklY3Qy YSg1LDQsMiklZCgzLDIpKQorYWxsb2NhdGUgKHQgOjogY3ZhcmEoMSklY3QyJWQoMywyKSwg Y3ZhcmEoMSklY3QyYSg1LDQsMiklZCgzLDIpKQorYWxsb2NhdGUgKHQgOjogY3glZCgzLDIp LCBjeGEoNSw0LDIpJWQoMywyKSkKKworYWxsb2NhdGUgKHQgOjogdmFyJWN0MiVlLCB2YXIl Y3QyYSg1LDQsMiklZSkKK2FsbG9jYXRlICh0IDo6IGF2YXIlY3QyJWUsIGF2YXIlY3QyYSg1 LDQsMiklZSkKK2FsbG9jYXRlICh0IDo6IGN2YXIlY3QyJWUsIGN2YXIlY3QyYSg1LDQsMikl ZSkKK2FsbG9jYXRlICh0IDo6IHZhcmEoMSklY3QyJWUsIHZhcmEoMSklY3QyYSg1LDQsMikl ZSkKK2FsbG9jYXRlICh0IDo6IGF2YXJhKDEpJWN0MiVlLCBhdmFyYSgxKSVjdDJhKDUsNCwy KSVlKQorYWxsb2NhdGUgKHQgOjogY3ZhcmEoMSklY3QyJWUsIGN2YXJhKDEpJWN0MmEoNSw0 LDIpJWUpCithbGxvY2F0ZSAodCA6OiBjeCVlLCBjeGEoNSw0LDIpJWUpCisKK24gPSBzaXpl b2YoY3glZSkKK2lmIChuIC89IDE0NCAuYW5kLiBuIC89IDg4KSBlcnJvciBzdG9wCitpZiAo biAvPSBzaXplb2YodmFyJWN0MiVlKSkgZXJyb3Igc3RvcAoraWYgKG4gLz0gc2l6ZW9mKHZh ciVjdDJhKDUsNCwyKSVlKSkgZXJyb3Igc3RvcAoraWYgKG4gLz0gc2l6ZW9mKGF2YXIlY3Qy JWUpKSBlcnJvciBzdG9wCitpZiAobiAvPSBzaXplb2YoYXZhciVjdDJhKDUsNCwyKSVlKSkg ZXJyb3Igc3RvcAoraWYgKG4gLz0gc2l6ZW9mKGN2YXIlY3QyJWUpKSBlcnJvciBzdG9wCitp ZiAobiAvPSBzaXplb2YoY3ZhciVjdDJhKDUsNCwyKSVlKSkgZXJyb3Igc3RvcAoraWYgKG4g Lz0gc2l6ZW9mKGF2YXJhKDEpJWN0MiVlKSkgZXJyb3Igc3RvcAoraWYgKG4gLz0gc2l6ZW9m KGF2YXJhKDEpJWN0MmEoNSw0LDIpJWUpKSBlcnJvciBzdG9wCitpZiAobiAvPSBzaXplb2Yo Y3ZhcmEoMSklY3QyJWUpKSBlcnJvciBzdG9wCitpZiAobiAvPSBzaXplb2YoY3ZhcmEoMSkl Y3QyYSg1LDQsMiklZSkpIGVycm9yIHN0b3AKKworaWYgKG4gLz0gc3pfYXIodmFyJWN0MiVl LHZhciVjdDJhKDUsMywyKSVlLGN2YXIlY3QyJWUsY3ZhciVjdDJhKDUsMywyKSVlKSkgZXJy b3Igc3RvcAoraWYgKG4gLz0gc3pfcyh2YXIlY3QyJWUsdmFyJWN0MmEoNSwzLDIpJWUpKSBl cnJvciBzdG9wCitpZiAobiAvPSBzel90KHZhciVjdDIlZSx2YXIlY3QyYSg1LDMsMiklZSxj dmFyJWN0MiVlLGN2YXIlY3QyYSg1LDMsMiklZSkpIGVycm9yIHN0b3AKK2lmIChuIC89IHN6 X3RfYSh2YXIlY3QyJWUsdmFyJWN0MmEoNSwzLDIpJWUpKSBlcnJvciBzdG9wCisKKyEgRklY TUUgLSBhbGwgb2YgdGhlIGZvbGxvd2luZyBmYWlsIGFzIHNpemUoLi4uICUgY3QyYSg1LDMs MikgJSBkKSA9PSAwIGluc3RlYWQgb2YgNgorISBTZWUgUFIgZm9ydHJhbi8xMDQ4NDUKKyFp ZiAobiozKjIgLz0gc3pfYXIodmFyJWN0MiVkLHZhciVjdDJhKDUsMywyKSVkLGN2YXIlY3Qy JWQsY3ZhciVjdDJhKDUsMywyKSVkKSkgZXJyb3Igc3RvcAorIWlmIChuKjMqMiAvPSBzel9y Mih2YXIlY3QyJWQsdmFyJWN0MmEoNSwzLDIpJWQsY3ZhciVjdDIlZCxjdmFyJWN0MmEoNSwz LDIpJWQpKSBlcnJvciBzdG9wCishaWYgKG4qMyoyIC89IHN6X3QodmFyJWN0MiVkLHZhciVj dDJhKDUsMywyKSVkLGN2YXIlY3QyJWQsY3ZhciVjdDJhKDUsMywyKSVkKSkgZXJyb3Igc3Rv cAorIWlmIChuKjMqMiAvPSBzel90X2EodmFyJWN0MiVkLHZhciVjdDJhKDUsMywyKSVkKSkg ZXJyb3Igc3RvcAorCitpZiAobiozKjIgLz0gc2l6ZW9mKHZhciVjdDIlZCkpIGVycm9yIHN0 b3AKK2lmIChuKjMqMiAvPSBzaXplb2YodmFyJWN0MmEoNSw0LDIpJWQpKSBlcnJvciBzdG9w CitpZiAobiozKjIgLz0gc2l6ZW9mKGF2YXIlY3QyJWQpKSBlcnJvciBzdG9wCitpZiAobioz KjIgLz0gc2l6ZW9mKGF2YXIlY3QyYSg1LDQsMiklZCkpIGVycm9yIHN0b3AKK2lmIChuKjMq MiAvPSBzaXplb2YoY3ZhciVjdDIlZCkpIGVycm9yIHN0b3AKK2lmIChuKjMqMiAvPSBzaXpl b2YoY3ZhciVjdDJhKDUsNCwyKSVkKSkgZXJyb3Igc3RvcAoraWYgKG4qMyoyIC89IHNpemVv ZihhdmFyYSgxKSVjdDIlZCkpIGVycm9yIHN0b3AKK2lmIChuKjMqMiAvPSBzaXplb2YoYXZh cmEoMSklY3QyYSg1LDQsMiklZCkpIGVycm9yIHN0b3AKK2lmIChuKjMqMiAvPSBzaXplb2Yo Y3ZhcmEoMSklY3QyJWQpKSBlcnJvciBzdG9wCitpZiAobiozKjIgLz0gc2l6ZW9mKGN2YXJh KDEpJWN0MmEoNSw0LDIpJWQpKSBlcnJvciBzdG9wCisKK2RlYWxsb2NhdGUgKHZhciVjdDIs IHZhciVjdDJhKQorZGVhbGxvY2F0ZSAoYXZhciVjdDIsIGF2YXIlY3QyYSkKK2RlYWxsb2Nh dGUgKGN2YXIlY3QyLCBjdmFyJWN0MmEpCitkZWFsbG9jYXRlIChjeCwgY3hhKQorCitkZWFs bG9jYXRlIChhdmFyLCBhdmFyYSkKK2RlYWxsb2NhdGUgKGN2YXIsIGN2YXJhKQorCitjb250 YWlucworICBpbnRlZ2VyKGNfc2l6ZV90KSBmdW5jdGlvbiBzel9hciAoYSwgYiwgYywgZCkg cmVzdWx0KHJlcykKKyAgICB0eXBlKCopIDo6IGEoLi4pLCBjKC4uKQorICAgIGNsYXNzKCop IDo6IGIoLi4pLCBkKC4uKQorICAgIG9wdGlvbmFsIDo6IGMsIGQKKyAgICByZXMgPSBzaXpl b2YoYSkKKyAgICBpZiAoc2l6ZW9mKGIpIC89IHJlcykgZXJyb3Igc3RvcAorICAgIGlmIChz aXplb2YoYykgLz0gcmVzKSBlcnJvciBzdG9wCisgICAgaWYgKHNpemVvZihkKSAvPSByZXMp IGVycm9yIHN0b3AKKyAgZW5kCisgIGludGVnZXIoY19zaXplX3QpIGZ1bmN0aW9uIHN6X2Fy X2EgKGEsIGIpIHJlc3VsdChyZXMpCisgICAgY2xhc3MoKiksIGFsbG9jYXRhYmxlIDo6IGEo Li4pLCBiKC4uKQorICAgIG9wdGlvbmFsIDo6IGIKKyAgICByZXMgPSBzaXplb2YoYSkKKyAg ICBpZiAoc2l6ZW9mKGIpIC89IHJlcykgZXJyb3Igc3RvcAorICBlbmQKKyAgaW50ZWdlcihj X3NpemVfdCkgZnVuY3Rpb24gc3pfcyAoYSwgYikgcmVzdWx0KHJlcykKKyAgICBjbGFzcygq KSA6OiBhLCBiCisgICAgb3B0aW9uYWwgOjogYgorICAgIHJlcyA9IHNpemVvZihhKQorICAg IGlmIChzaXplb2YoYikgLz0gcmVzKSBlcnJvciBzdG9wCisgIGVuZAorICBpbnRlZ2VyKGNf c2l6ZV90KSBmdW5jdGlvbiBzel9zX2EgKGEsIGIpIHJlc3VsdChyZXMpCisgICAgY2xhc3Mo KiksIGFsbG9jYXRhYmxlIDo6IGEsIGIKKyAgICBvcHRpb25hbCA6OiBiCisgICAgcmVzID0g c2l6ZW9mKGEpCisgICAgaWYgKHNpemVvZihiKSAvPSByZXMpIGVycm9yIHN0b3AKKyAgZW5k CisgIGludGVnZXIoY19zaXplX3QpIGZ1bmN0aW9uIHN6X3IxIChhLCBiLCBjLCBkKSByZXN1 bHQocmVzKQorICAgIHR5cGUoKikgOjogYSg6KSwgYyg6KQorICAgIGNsYXNzKCopIDo6IGIo OiksIGQoOikKKyAgICBvcHRpb25hbCA6OiBjLCBkCisgICAgcmVzID0gc2l6ZW9mKGEpCisg ICAgaWYgKHNpemVvZihiKSAvPSByZXMpIGVycm9yIHN0b3AKKyAgICBpZiAoc2l6ZW9mKGMp IC89IHJlcykgZXJyb3Igc3RvcAorICAgIGlmIChzaXplb2YoZCkgLz0gcmVzKSBlcnJvciBz dG9wCisgIGVuZAorICBpbnRlZ2VyKGNfc2l6ZV90KSBmdW5jdGlvbiBzel9yMV9hIChhLCBi KSByZXN1bHQocmVzKQorICAgIGNsYXNzKCopLCBhbGxvY2F0YWJsZSA6OiBhKDopLCBiKDop CisgICAgb3B0aW9uYWwgOjogYgorICAgIHJlcyA9IHNpemVvZihhKQorICAgIGlmIChzaXpl b2YoYikgLz0gcmVzKSBlcnJvciBzdG9wCisgIGVuZAorICBpbnRlZ2VyKGNfc2l6ZV90KSBm dW5jdGlvbiBzel9yMiAoYSwgYiwgYywgZCkgcmVzdWx0KHJlcykKKyAgICB0eXBlKCopIDo6 IGEoOiw6KSwgYyg6LDopCisgICAgY2xhc3MoKikgOjogYig6LDopLCBkKDosOikKKyAgICBv cHRpb25hbCA6OiBjLCBkCisgICAgcmVzID0gc2l6ZW9mKGEpCisgICAgaWYgKHNpemVvZihi KSAvPSByZXMpIGVycm9yIHN0b3AKKyAgICBpZiAoc2l6ZW9mKGMpIC89IHJlcykgZXJyb3Ig c3RvcAorICAgIGlmIChzaXplb2YoZCkgLz0gcmVzKSBlcnJvciBzdG9wCisgIGVuZAorICBp bnRlZ2VyKGNfc2l6ZV90KSBmdW5jdGlvbiBzel9yMl9hIChhLCBiKSByZXN1bHQocmVzKQor ICAgIGNsYXNzKCopLCBhbGxvY2F0YWJsZSA6OiBhKDosOiksIGIoOiw6KQorICAgIG9wdGlv bmFsIDo6IGIKKyAgICByZXMgPSBzaXplb2YoYSkKKyAgICBpZiAoc2l6ZW9mKGIpIC89IHJl cykgZXJyb3Igc3RvcAorICBlbmQKKyAgaW50ZWdlcihjX3NpemVfdCkgZnVuY3Rpb24gc3pf cjMgKGEsIGIsIGMsIGQpIHJlc3VsdChyZXMpCisgICAgdHlwZSgqKSA6OiBhKDosOiw6KSwg Yyg6LDosOikKKyAgICBjbGFzcygqKSA6OiBiKDosOiw6KSwgZCg6LDosOikKKyAgICBvcHRp b25hbCA6OiBjLCBkCisgICAgcmVzID0gc2l6ZW9mKGEpCisgICAgaWYgKHNpemVvZihiKSAv PSByZXMpIGVycm9yIHN0b3AKKyAgICBpZiAoc2l6ZW9mKGMpIC89IHJlcykgZXJyb3Igc3Rv cAorICAgIGlmIChzaXplb2YoZCkgLz0gcmVzKSBlcnJvciBzdG9wCisgIGVuZAorICBpbnRl Z2VyKGNfc2l6ZV90KSBmdW5jdGlvbiBzel9yM19hIChhLCBiKSByZXN1bHQocmVzKQorICAg IGNsYXNzKCopLCBhbGxvY2F0YWJsZSA6OiBhKDosOiw6KSwgYig6LDosOikKKyAgICBvcHRp b25hbCA6OiBiCisgICAgcmVzID0gc2l6ZW9mKGEpCisgICAgaWYgKHNpemVvZihiKSAvPSBy ZXMpIGVycm9yIHN0b3AKKyAgZW5kCisgIGludGVnZXIoY19zaXplX3QpIGZ1bmN0aW9uIHN6 X3QgKGEsIGIsIGMsIGQpIHJlc3VsdChyZXMpCisgICAgdHlwZSh0KSA6OiBhKC4uKSwgYygu LikKKyAgICBjbGFzcyh0KSA6OiBiKC4uKSwgZCguLikKKyAgICBvcHRpb25hbCA6OiBjLCBk CisKKyAgICByZXMgPSBzaXplb2YoYikKKyAgICBpZiAoc2l6ZW9mKGQpIC89IHNpemVvZihi KSkgZXJyb3Igc3RvcAorICAgIGlmIChzaXplb2YoYSkgLz0gc2l6ZW9mKGMpKSBlcnJvciBz dG9wCisgICAgaWYgKHNpemVvZihhKSAvPSByZXMpIGVycm9yIHN0b3AKKyAgZW5kCisgIGlu dGVnZXIoY19zaXplX3QpIGZ1bmN0aW9uIHN6X3RfYSAoYSwgYikgcmVzdWx0KHJlcykKKyAg ICBjbGFzcyh0KSwgYWxsb2NhdGFibGUgOjogYSguLiksIGIoLi4pCisgICAgb3B0aW9uYWwg OjogYgorCisgICAgcmVzID0gc2l6ZW9mKGIpCisgICAgaWYgKHNpemVvZihiKSAvPSBzaXpl b2YoYSkpIGVycm9yIHN0b3AKKyAgZW5kCisgIGludGVnZXIoY19zaXplX3QpIGZ1bmN0aW9u IHN6X3RfYXQgKGEsIGIpIHJlc3VsdChyZXMpCisgICAgdHlwZSh0KSwgYWxsb2NhdGFibGUg OjogYSguLiksIGIoLi4pCisgICAgb3B0aW9uYWwgOjogYgorCisgICAgcmVzID0gc2l6ZW9m KGIpCisgICAgaWYgKHNpemVvZihiKSAvPSBzaXplb2YoYSkpIGVycm9yIHN0b3AKKyAgZW5k CisgIGludGVnZXIoY19zaXplX3QpIGZ1bmN0aW9uIHN6X3QyIChhLCBiLCBjLCBkLCBleHRl bmRzKSByZXN1bHQocmVzKQorICAgIHR5cGUodDIpIDo6IGEoLi4pLCBjKC4uKQorICAgIGNs YXNzKHQyKSA6OiBiKC4uKSwgZCguLikKKyAgICBvcHRpb25hbCA6OiBjLCBkCisgICAgbG9n aWNhbCwgdmFsdWUgOjogZXh0ZW5kcworCisgICAgcmVzID0gc2l6ZW9mKGIpCisgICAgaWYg KHNpemVvZihkKSAvPSBzaXplb2YoYikpIGVycm9yIHN0b3AKKyAgICBpZiAoc2l6ZW9mKGEp IC89IHNpemVvZihjKSkgZXJyb3Igc3RvcAorICAgIGlmICgubm90LmV4dGVuZHMpIHRoZW4K KyAgICAgIGlmIChzaXplb2YoYSkgLz0gcmVzKSBlcnJvciBzdG9wCisgICAgZWxzZQorICAg ICAgISBIZXJlLCBleHRlbnNpb24gaGFzIGV4dHJhIGVsZW1lbnRzCisgICAgICBpZiAoc2l6 ZW9mKGEpID49IHJlcykgZXJyb3Igc3RvcAorICAgIGVuZCBpZgorICBlbmQKKyAgaW50ZWdl cihjX3NpemVfdCkgZnVuY3Rpb24gc3pfdDJfYSAoYSwgYikgcmVzdWx0KHJlcykKKyAgICBj bGFzcyh0MiksIGFsbG9jYXRhYmxlIDo6IGEoLi4pLCBiKC4uKQorICAgIG9wdGlvbmFsIDo6 IGIKKworICAgIHJlcyA9IHNpemVvZihiKQorICAgIGlmIChzaXplb2YoYikgLz0gc2l6ZW9m KGEpKSBlcnJvciBzdG9wCisgIGVuZAorICBpbnRlZ2VyKGNfc2l6ZV90KSBmdW5jdGlvbiBz el90Ml9hdCAoYSwgYikgcmVzdWx0KHJlcykKKyAgICB0eXBlKHQyKSwgYWxsb2NhdGFibGUg OjogYSguLiksIGIoLi4pCisgICAgb3B0aW9uYWwgOjogYgorCisgICAgcmVzID0gc2l6ZW9m KGIpCisgICAgaWYgKHNpemVvZihiKSAvPSBzaXplb2YoYSkpIGVycm9yIHN0b3AKKyAgZW5k CisgIGludGVnZXIoY19zaXplX3QpIGZ1bmN0aW9uIHN6X3QzIChhLCBiLCBjLCBkKSByZXN1 bHQocmVzKQorICAgIHR5cGUodDMpIDo6IGEoLi4pLCBjKC4uKQorICAgIGNsYXNzKHQzKSA6 OiBiKC4uKSwgZCguLikKKyAgICBvcHRpb25hbCA6OiBjLCBkCisgICAgcmVzID0gc2l6ZW9m KGIpCisgICAgaWYgKHNpemVvZihkKSAvPSBzaXplb2YoYikpIGVycm9yIHN0b3AKKyAgICBp ZiAoc2l6ZW9mKGEpIC89IHNpemVvZihjKSkgZXJyb3Igc3RvcAorICAgIGlmIChzaXplb2Yo YSkgLz0gcmVzKSBlcnJvciBzdG9wCisgIGVuZAorICBpbnRlZ2VyKGNfc2l6ZV90KSBmdW5j dGlvbiBzel90M19hIChhLCBiKSByZXN1bHQocmVzKQorICAgIGNsYXNzKHQzKSwgYWxsb2Nh dGFibGUgOjogYSguLiksIGIoLi4pCisgICAgb3B0aW9uYWwgOjogYgorICAgIHJlcyA9IHNp emVvZihiKQorICAgIGlmIChzaXplb2YoYSkgLz0gc2l6ZW9mKGIpKSBlcnJvciBzdG9wCisg IGVuZAorICBpbnRlZ2VyKGNfc2l6ZV90KSBmdW5jdGlvbiBzel90M19hdCAoYSwgYikgcmVz dWx0KHJlcykKKyAgICB0eXBlKHQzKSwgYWxsb2NhdGFibGUgOjogYSguLiksIGIoLi4pCisg ICAgb3B0aW9uYWwgOjogYgorICAgIHJlcyA9IHNpemVvZihiKQorICAgIGlmIChzaXplb2Yo YSkgLz0gc2l6ZW9mKGIpKSBlcnJvciBzdG9wCisgIGVuZAorZW5kCg== --------------3NveRg3s3hQqpSp9rqMJcGwT--