From unknown Fri Aug 15 12:54:17 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#18302 <18302@debbugs.gnu.org> To: bug#18302 <18302@debbugs.gnu.org> Subject: Status: MSYS2 build issues Reply-To: bug#18302 <18302@debbugs.gnu.org> Date: Fri, 15 Aug 2025 19:54:17 +0000 retitle 18302 MSYS2 build issues reassign 18302 emacs submitter 18302 Karol Ostrovsky severity 18302 normal thanks From debbugs-submit-bounces@debbugs.gnu.org Wed Aug 20 11:45:36 2014 Received: (at submit) by debbugs.gnu.org; 20 Aug 2014 15:45:36 +0000 Received: from localhost ([127.0.0.1]:48328 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XK84t-0008Va-St for submit@debbugs.gnu.org; Wed, 20 Aug 2014 11:45:36 -0400 Received: from eggs.gnu.org ([208.118.235.92]:41551) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XK2bg-00071Z-6K for submit@debbugs.gnu.org; Wed, 20 Aug 2014 05:55:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XK2bZ-0008MR-Ue for submit@debbugs.gnu.org; Wed, 20 Aug 2014 05:54:58 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, T_DKIM_INVALID autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:35494) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XK2bZ-0008ML-NR for submit@debbugs.gnu.org; Wed, 20 Aug 2014 05:54:57 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43262) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XK2bY-0006yt-Gu for bug-gnu-emacs@gnu.org; Wed, 20 Aug 2014 05:54:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XK2bX-0008Lr-BH for bug-gnu-emacs@gnu.org; Wed, 20 Aug 2014 05:54:56 -0400 Received: from mail-vc0-x22e.google.com ([2607:f8b0:400c:c03::22e]:36789) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XK2bW-0008Lh-SS for bug-gnu-emacs@gnu.org; Wed, 20 Aug 2014 05:54:55 -0400 Received: by mail-vc0-f174.google.com with SMTP id la4so8698212vcb.5 for ; Wed, 20 Aug 2014 02:54:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:cc:content-type; bh=wc4OGkyw1dg1U7LQDsNlXBElITbDwnixAqO/geqMhZo=; b=n2w/in4L41tXU9noe+6espzX3qVbOMCZ+EbI14jN5rlZusLAtre6RPxGi27c7uw+EU R0XPC/BGxA9RWZOrOVCaeqbJ5GBWkuJr0agg2Ci31Blx/I/pFq8qDOilzCeN8sbuuNLp PAW/iNaX0IjdxDaWtWGLzmcmVveCm+Z/hbGKOrQDcqkaIk3YC0mLAKwbd2zwNbLKWIlX MBD5Pfwa391Tx40yhZgbu742AnypWxmwadYcB2pBa+RcijEHWdX6nvDefM51u/l0ratc WZcqFa/imMbUAJgAAcjB00w/4SCSYkPEmtyEuS9hsvY79Kuq01aAT3aVonlV0NpgUtuw Yijg== MIME-Version: 1.0 X-Received: by 10.52.164.80 with SMTP id yo16mr5231439vdb.44.1408528493465; Wed, 20 Aug 2014 02:54:53 -0700 (PDT) Received: by 10.221.48.196 with HTTP; Wed, 20 Aug 2014 02:54:53 -0700 (PDT) Date: Wed, 20 Aug 2014 11:54:53 +0200 Message-ID: Subject: MSYS2 build issues From: Karol Ostrovsky To: bug-gnu-emacs@gnu.org Content-Type: multipart/mixed; boundary=001a11c359a08282d605010c98b1 X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-Debbugs-Envelope-To: submit X-Mailman-Approved-At: Wed, 20 Aug 2014 11:45:32 -0400 Cc: Chris Zheng X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" --001a11c359a08282d605010c98b1 Content-Type: text/plain; charset=UTF-8 Dear Emacs maintainers, thanks to the work of Chris Zheng and Eli Zaretskii we can build Emacs on MSYS2 with MinGW-w64. However, the process is not completely painless: xpm support needs manual tweaking of CFLAGS, configure script must be run with special flags, and make sometimes crashes for the "emacs$(EXEEXT)" target. I am submitting my proposed fixes for these three issues (based on the latest trunk version of Emacs). With this fix I can successfully compile 64-bit Emacs using MSYS2 and MinGW-w64 with automatic xpm support, and the process follows the same easy steps as described in nt/INSTALL (just running ./autogen.sh, ./configure --prefix=..., and make). I intend to submit some additional MSYS2+MinGW-w64 documentation (file nt/INSTALL) should this patch be accepted. Best regards, Karol --001a11c359a08282d605010c98b1 Content-Type: application/octet-stream; name="configure.ac" Content-Disposition: attachment; filename="configure.ac" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hz2h2yv50 ZG5sICBBdXRvY29uZiBzY3JpcHQgZm9yIEdOVSBFbWFjcwpkbmwgVG8gcmVidWlsZCB0aGUgYGNv bmZpZ3VyZScgc2NyaXB0IGZyb20gdGhpcywgZXhlY3V0ZSB0aGUgY29tbWFuZApkbmwgCWF1dG9j b25mCmRubCBpbiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQuCmRubCBJZiB5 b3UgY2hhbmdlZCBhbnkgQUNfREVGSU5FUywgYWxzbyBydW4gYXV0b2hlYWRlci4KZG5sCmRubCBD b3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgMTk5OS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgpkbmwKZG5sICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgRW1hY3MuCmRubApkbmwg IEdOVSBFbWFjcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CmRubCAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZG5sICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgpkbmwgIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCmRubApkbmwgIEdOVSBFbWFjcyBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApkbmwgIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCmRubCAgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQpkbmwgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCmRubApk bmwgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCmRubCAgYWxvbmcgd2l0aCBHTlUgRW1hY3MuICBJZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCgpBQ19QUkVSRVEoMi42NSkKZG5sIE5vdGUgdGhp cyBpcyBwYXJzZWQgYnkgKGF0IGxlYXN0KSBtYWtlLWRpc3QgYW5kIGxpc3AvY2VkZXQvZWRlL2Vt YWNzLmVsLgpBQ19JTklUKEdOVSBFbWFjcywgMjQuNC41MCwgYnVnLWdudS1lbWFjc0BnbnUub3Jn KQoKZG5sIFNldCBlbWFjc19jb25maWdfb3B0aW9ucyB0byB0aGUgb3B0aW9ucyBvZiAnY29uZmln dXJlJywgcXVvdGVkIGZvciB0aGUgc2hlbGwsCmRubCBhbmQgdGhlbiBxdW90ZWQgYWdhaW4gZm9y IGEgQyBzdHJpbmcuICBTZXBhcmF0ZSBvcHRpb25zIHdpdGggc3BhY2VzLgpkbmwgQWRkIHNvbWUg ZW52aXJvbm1lbnQgdmFyaWFibGVzLCBpZiB0aGV5IHdlcmUgcGFzc2VkIHZpYSB0aGUgZW52aXJv bm1lbnQKZG5sIHJhdGhlciB0aGFuIG9uIHRoZSBjb21tYW5kLWxpbmUuCmVtYWNzX2NvbmZpZ19v cHRpb25zPQpvcHRzZXA9CmRubCBUaGlzIGlzIHRoZSBkb2N1bWVudGVkIHdheSB0byByZWNvcmQg dGhlIGFyZ3MgcGFzc2VkIHRvIGNvbmZpZ3VyZSwKZG5sIHJhdGhlciB0aGFuICRhY19jb25maWd1 cmVfYXJncy4KZm9yIG9wdCBpbiAkezErIiRAIn0gQ0ZMQUdTIENQUEZMQUdTIExERkxBR1M7IGRv CiAgY2FzZSAkb3B0IGluCiAgICAtbiB8IC0tbm8tY3JlYXRlIHwgLS1uby1yZWN1cnNpb24pCiAg ICAgIGNvbnRpbnVlIDs7CiAgICBDRkxBR1MgfCBDUFBGTEFHUyB8IExERkxBR1MpCiAgICAgIGV2 YWwgJ3Rlc3QgIiR7JyRvcHQnK3NldH0iID0gc2V0JyB8fCBjb250aW51ZQogICAgICBjYXNlICIg JCoiIGluCgkqIiAkb3B0PSIqKSBjb250aW51ZSA7OwogICAgICBlc2FjCiAgICAgIGV2YWwgb3B0 PSRvcHQ9XCQkb3B0IDs7CiAgZXNhYwoKICBlbWFjc19zaGVsbF9zcGVjaWFscz0kSUZTXCcnIiMk JigpKjs8Pj9APDpAXFxge3x+JwogIGNhc2UgJG9wdCBpbgogICAgKltbIiRlbWFjc19zaGVsbF9z cGVjaWFscyJdXSopCiAgICAgIGNhc2UgJG9wdCBpbgoJKlwnKikKCSAgZW1hY3NfcXVvdGVfYXBv c3Ryb3BoZXM9InMvJy8nXFxcXCcnL2ciCgkgIG9wdD1gQVNfRUNITyhbIiRvcHQiXSkgfCBzZWQg IiRlbWFjc19xdW90ZV9hcG9zdHJvcGhlcyJgIDs7CiAgICAgIGVzYWMKICAgICAgb3B0PSInJG9w dCciCiAgICAgIGNhc2UgJG9wdCBpbgoJKltbJyJcXCddXSopCgkgIGVtYWNzX3F1b3RlX2Zvcl9j PSdzL1tbIlxcXV0vXFwmL2c7ICQhcy8kL1xcblxcLycKCSAgb3B0PWBBU19FQ0hPKFsiJG9wdCJd KSB8IHNlZCAiJGVtYWNzX3F1b3RlX2Zvcl9jImAgOzsKICAgICAgZXNhYyA7OwogIGVzYWMKICBB U19WQVJfQVBQRU5EKFtlbWFjc19jb25maWdfb3B0aW9uc10sIFsiJG9wdHNlcCRvcHQiXSkKICBv cHRzZXA9JyAnCmRvbmUKCkFDX0NPTkZJR19IRUFERVJTKHNyYy9jb25maWcuaDpzcmMvY29uZmln LmluKQpBQ19DT05GSUdfU1JDRElSKHNyYy9saXNwLmgpCkFDX0NPTkZJR19BVVhfRElSKGJ1aWxk LWF1eCkKZG5sIGF1dG9tYWtlIDEuMTMgYW5kIGxhdGVyIHVuZGVyc3RhbmQgdGhpcywgbWFraW5n IC1JIG00IHVubmVjZXNzYXJ5LgpkbmwgV2l0aCBvbGRlciB2ZXJzaW9ucyB0aGlzIGlzIGEgbm8t b3AuCkFDX0NPTkZJR19NQUNST19ESVIobTQpCgp4Y3Nka2Rpcj0KQUNfQ0hFQ0tfUFJPR1MoWENS VU4sIFt4Y3J1bl0pCmlmIHRlc3QgLW4gIiRYQ1JVTiI7IHRoZW4KICBpZiB0ZXN0IC16ICIkTUFL RSI7IHRoZW4KICAgIGRubCBDYWxsIHRoZSB2YXJpYWJsZSBNQUtFX1BST0csIG5vdCBNQUtFLCB0 byBhdm9pZCBjb25mdXNpb24gd2l0aAogICAgZG5sIHRoZSB1c3VhbCBNQUtFIHZhcmlhYmxlIHRo YXQgJ21ha2UnIGl0c2VsZiB1c2VzLgogICAgQUNfQ0hFQ0tfUFJPRyhbTUFLRV9QUk9HXSwgW21h a2VdLCBbeWVzXSkKICAgIGlmIHRlc3QgLXogIiRNQUtFX1BST0ciOyB0aGVuCiAgICAgIE1BS0U9 IiRYQ1JVTiBNQUtFIgogICAgICBleHBvcnQgTUFLRQogICAgICB4Y3Nka2Rpcj1gJFhDUlVOIC0t c2hvdy1zZGstcGF0aCAyPi9kZXYvbnVsbGAKICAgIGZpCiAgZmkKZmkKCmRubCBHTlUgTWFrZSBp cyByZXF1aXJlZCwgc28gZG9uJ3QgdGVzdCBmb3IgaXRzIGluZGl2aWR1YWwgZmVhdHVyZXMuCmFt X2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPXllcwpBQ19ERUZVTihbQUNfUFJPR19N QUtFX1NFVF0sCiAgW1NFVF9NQUtFPQogICBBQ19TVUJTVChbU0VUX01BS0VdKV0pCgpkbmwgQ2hl Y2sgZm9yIEdOVSBNYWtlIGFuZCBwb3NzaWJseSBzZXQgTUFLRSBiZWZvcmUgcnVubmluZyBBTV9J TklUX0FVVE9NQUtFLgpbZW1hY3NfY2hlY2tfZ251X21ha2UgKCkKewogIGVtYWNzX21ha2VvdXQ9 YCgkMSAtLXZlcnNpb24pIDI+L2Rldi9udWxsYCAmJgogIGNhc2UgJGVtYWNzX21ha2VvdXQgaW4K ICAgICdHTlUgTWFrZSAnMy44WzEtOV0qIHwgJ0dOVSBNYWtlICczLjlbMC05XSogfCBcCiAgICAn R05VIE1ha2UgJzMuWzEtOV1bMC05XVswLTldKiB8ICdHTlUgTWFrZSAnWzQtOV0qIHwgJ0dOVSBN YWtlICdbMS05XVswLTldKiApCiAgICAgICBhY19wYXRoX01BS0VfZm91bmQ9Ojs7CiAgZXNhYwp9 XQpBQ19DQUNIRV9DSEVDSyhbZm9yIEdOVSBNYWtlXSwgW2FjX2N2X3BhdGhfTUFLRV0sCiAgW2Fj X3BhdGhfTUFLRV9mb3VuZD1mYWxzZQogICBpZiB0ZXN0IC1uICIkTUFLRSI7IHRoZW4KICAgICBl bWFjc19jaGVja19nbnVfbWFrZSAiJE1BS0UiCiAgICAgYWNfY3ZfcGF0aF9NQUtFPSRNQUtFCiAg IGVsc2UKICAgICBlbWFjc190cmllZF9tYWtlPWZhbHNlCiAgICAgZW1hY3NfdHJpZWRfZ21ha2U9 ZmFsc2UKICAgICBlbWFjc190cmllZF9nbnVtYWtlPWZhbHNlCiAgICAgQUNfUEFUSF9QUk9HU19G RUFUVVJFX0NIRUNLKFtNQUtFXSwgW21ha2UgZ21ha2UgZ251bWFrZV0sCiAgICAgICBbW2VtYWNz X2NoZWNrX2dudV9tYWtlICIkYWNfcGF0aF9NQUtFIgoJIGlmICRhY19wYXRoX01BS0VfZm91bmQ7 IHRoZW4KCSAgICMgVXNlIHRoZSBmdWxseS1xdWFsaWZpZWQgcHJvZ3JhbSBuYW1lIG9ubHkgaWYg dGhlIGJhc2VuYW1lCgkgICAjIHdvdWxkIG5vdCByZXNvbHZlIHRvIGl0LgoJICAgaWYgZXZhbCBc JGVtYWNzX3RyaWVkXyRhY19wcm9nOyB0aGVuCgkgICAgIGFjX2N2X3BhdGhfTUFLRT0kYWNfcGF0 aF9NQUtFCgkgICBlbHNlCgkgICAgIGFjX2N2X3BhdGhfTUFLRT0kYWNfcHJvZwoJICAgZmkKCSBm aQoJIGV2YWwgZW1hY3NfdHJpZWRfJGFjX3Byb2c9Ol1dKQogICBmaV0pCiRhY19wYXRoX01BS0Vf Zm91bmQgfHwgewpBQ19NU0dfRVJST1IoW1tCdWlsZGluZyBFbWFjcyByZXF1aXJlcyBHTlUgTWFr ZSwgYXQgbGVhc3QgdmVyc2lvbiAzLjgxLgpJZiB5b3UgaGF2ZSBpdCBpbnN0YWxsZWQgdW5kZXIg YW5vdGhlciBuYW1lLCBjb25maWd1cmUgd2l0aCAnTUFLRT0uLi4nLgpGb3IgZXhhbXBsZSwgcnVu ICckMCBNQUtFPWdudS1tYWtlJy5dXSkKfQpNQUtFPSRhY19jdl9wYXRoX01BS0UKCmRubCBGYWly bHkgYXJiaXRyYXJ5LCBvbGRlciB2ZXJzaW9ucyBtaWdodCB3b3JrIHRvby4KQU1fSU5JVF9BVVRP TUFLRSgxLjExKQoKZG5sIENhbm9uaWNhbGl6ZSB0aGUgY29uZmlndXJhdGlvbiBuYW1lLgpBQ19D QU5PTklDQUxfSE9TVApjYW5vbmljYWw9JGhvc3QKY29uZmlndXJhdGlvbj0ke2hvc3RfYWxpYXMt JHtidWlsZF9hbGlhcy0kaG9zdH19CgpkbmwgV2UgZ2V0IE1JTkdXNjQgd2l0aCBNU1lTMi4KY2Fz ZSAkY2Fub25pY2FsIGluCiAqLW1pbmd3KikKICAuICRzcmNkaXIvbnQvbWluZ3ctY2ZnLnNpdGUK CiAgY2FzZSAkc3JjZGlyIGluCiAgICAvKiB8ID86KikKICAgICAgIyBzcmNkaXIgaXMgYW4gYWJz b2x1dGUgcGF0aC4gIEluIHRoaXMgY2FzZSwgZm9yY2UgdGhlIGZvcm1hdAogICAgICAjICIvYy9m b28vYmFyIiwgdG8gc2ltcGxpZnkgbGF0ZXIgY29udmVyc2lvbnMgdG8gbmF0aXZlIFdpbmRvd3MK ICAgICAgIyBmb3JtYXQgKCJjOi9mb28vYmFyIikuCiAgICAgIHNyY2Rpcj1gY2QgIiR7c3JjZGly fSIgJiYgcHdkIC1XYAogICAgICBzcmNkaXI9Ii8ke3NyY2RpcjowOjF9JHtzcmNkaXI6Mn0iCiAg ICAgIDs7CiAgZXNhYzs7CmVzYWMKCmRubCBTdXBwb3J0IGZvciAtLXByb2dyYW0tcHJlZml4LCAt LXByb2dyYW0tc3VmZml4IGFuZApkbmwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIG9wdGlvbnMK QUNfQVJHX1BST0dSQU0KCmRubCBJdCBpcyBpbXBvcnRhbnQgdGhhdCB2YXJpYWJsZXMgb24gdGhl IFJIUyBub3QgYmUgZXhwYW5kZWQgaGVyZSwKZG5sIGhlbmNlIHRoZSBzaW5nbGUgcXVvdGVzLiAg VGhpcyBpcyBwZXIgdGhlIEdOVSBjb2Rpbmcgc3RhbmRhcmRzLCBzZWUKZG5sIChhdXRvY29uZikg SW5zdGFsbGF0aW9uIERpcmVjdG9yeSBWYXJpYWJsZXMKZG5sIFNlZSBhbHNvIGVwYXRocy5oIGJl bG93LgpsaXNwZGlyPScke2RhdGFkaXJ9L2VtYWNzLyR7dmVyc2lvbn0vbGlzcCcKc3RhbmRhcmRs aXNwcGF0aD0nJHtsaXNwZGlyfScKbG9jYWxsaXNwcGF0aD0nJHtkYXRhZGlyfS9lbWFjcy8ke3Zl cnNpb259L3NpdGUtbGlzcDonXAonJHtkYXRhZGlyfS9lbWFjcy9zaXRlLWxpc3AnCmxpc3BwYXRo PScke2xvY2FsbGlzcHBhdGh9OiR7c3RhbmRhcmRsaXNwcGF0aH0nCmV0Y2Rpcj0nJHtkYXRhZGly fS9lbWFjcy8ke3ZlcnNpb259L2V0YycKYXJjaGxpYmRpcj0nJHtsaWJleGVjZGlyfS9lbWFjcy8k e3ZlcnNpb259LyR7Y29uZmlndXJhdGlvbn0nCmV0Y2RvY2Rpcj0nJHtkYXRhZGlyfS9lbWFjcy8k e3ZlcnNpb259L2V0YycKZ2FtZWRpcj0nJHtsb2NhbHN0YXRlZGlyfS9nYW1lcy9lbWFjcycKCmRu bCBTcGVjaWFsIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBtb3N0IG9mIG90aGVyIG9wdGlvbnMuCkFD X0FSR19XSVRIKGFsbCwKW0FTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtYWxsXSwKCQlbb21pdCBh bG1vc3QgYWxsIGZlYXR1cmVzIGFuZCBidWlsZAoJCXNtYWxsIGV4ZWN1dGFibGUgd2l0aCBtaW5p bWFsIGRlcGVuZGVuY2llc10pXSwKICBbd2l0aF9mZWF0dXJlcz0kd2l0aHZhbF0sCiAgW3dpdGhf ZmVhdHVyZXM9eWVzXSkKCmRubCBPUFRJT05fREVGQVVMVF9PRkYoTkFNRSwgSEVMUC1TVFJJTkcp CmRubCBDcmVhdGUgYSBuZXcgLS13aXRoIG9wdGlvbiB0aGF0IGRlZmF1bHRzIHRvIGJlaW5nIGRp c2FibGVkLgpkbmwgTkFNRSBpcyB0aGUgYmFzZSBuYW1lIG9mIHRoZSBvcHRpb24uICBUaGUgc2hl bGwgdmFyaWFibGUgd2l0aF9OQU1FCmRubCAgIHdpbGwgYmUgc2V0IHRvIGVpdGhlciB0aGUgdXNl cidzIHZhbHVlIChpZiB0aGUgb3B0aW9uIGlzCmRubCAgIHNwZWNpZmllZDsgJ3llcycgZm9yIGEg cGxhaW4gLS13aXRoLU5BTUUpIG9yIHRvICdubycgKGlmIHRoZQpkbmwgICBvcHRpb24gaXMgbm90 IHNwZWNpZmllZCkuICBOb3RlIHRoYXQgdGhlIHNoZWxsIHZhcmlhYmxlIG5hbWUgaXMKZG5sICAg Y29uc3RydWN0ZWQgYXMgYXV0b2NvbmYgZG9lcywgYnkgcmVwbGFjaW5nIG5vbi1hbHBoYW51bWVy aWMKZG5sICAgY2hhcmFjdGVycyB3aXRoICJfIi4KZG5sIEhFTFAtU1RSSU5HIGlzIHRoZSBoZWxw IHRleHQgZm9yIHRoZSBvcHRpb24uCkFDX0RFRlVOKFtPUFRJT05fREVGQVVMVF9PRkZdLCBbZG5s CiAgQUNfQVJHX1dJVEgoWyQxXSxbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC0kMV0sWyQyXSldLFtd LFtkbmwKICAgIG00X2JwYXRzdWJzdChbd2l0aF8kMV0sIFtbXjAtOWEtel1dLCBbX10pPW5vXSlk bmwKXSlkbmwKCmRubCBPUFRJT05fREVGQVVMVF9PTihOQU1FLCBIRUxQLVNUUklORykKZG5sIENy ZWF0ZSBhIG5ldyAtLXdpdGggb3B0aW9uIHRoYXQgZGVmYXVsdHMgdG8gJHdpdGhfZmVhdHVyZXMu CmRubCBOQU1FIGlzIHRoZSBiYXNlIG5hbWUgb2YgdGhlIG9wdGlvbi4gIFRoZSBzaGVsbCB2YXJp YWJsZSB3aXRoX05BTUUKZG5sICAgd2lsbCBiZSBzZXQgZWl0aGVyIHRvICdubycgKGZvciBhIHBs YWluIC0td2l0aG91dC1OQU1FKSBvciB0bwpkbmwgICAneWVzJyAoaWYgdGhlIG9wdGlvbiBpcyBu b3Qgc3BlY2lmaWVkKS4gIE5vdGUgdGhhdCB0aGUgc2hlbGwKZG5sICAgdmFyaWFibGUgbmFtZSBp cyBjb25zdHJ1Y3RlZCBhcyBhdXRvY29uZiBkb2VzLCBieSByZXBsYWNpbmcKZG5sICAgbm9uLWFs cGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHdpdGggIl8iLgpkbmwgSEVMUC1TVFJJTkcgaXMgdGhlIGhl bHAgdGV4dCBmb3IgdGhlIG9wdGlvbi4KQUNfREVGVU4oW09QVElPTl9ERUZBVUxUX09OXSwgW2Ru bAogIEFDX0FSR19XSVRIKFskMV0sW0FTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtJDFdLFskMl0p XSxbXSxbZG5sCiAgIG00X2JwYXRzdWJzdChbd2l0aF8kMV0sIFtbXjAtOWEtel1dLCBbX10pPSR3 aXRoX2ZlYXR1cmVzXSlkbmwKXSlkbmwKCk9QVElPTl9ERUZBVUxUX09OKFtwb3BdLFtkb24ndCBz dXBwb3J0IFBPUCBtYWlsIHJldHJpZXZhbCB3aXRoIG1vdmVtYWlsXSkKaWYgdGVzdCAiJHdpdGhf cG9wIiA9IHllczsgdGhlbgogICBBQ19ERUZJTkUoTUFJTF9VU0VfUE9QKQpmaQpBSF9URU1QTEFU RShNQUlMX1VTRV9QT1AsIFtEZWZpbmUgdG8gc3VwcG9ydCBQT1AgbWFpbCByZXRyaWV2YWwuXSlk bmwKCk9QVElPTl9ERUZBVUxUX09GRihba2VyYmVyb3NdLFtzdXBwb3J0IEtlcmJlcm9zLWF1dGhl bnRpY2F0ZWQgUE9QXSkKaWYgdGVzdCAiJHdpdGhfa2VyYmVyb3MiICE9IG5vOyB0aGVuCiAgIEFD X0RFRklORShLRVJCRVJPUykKZmkKQUhfVEVNUExBVEUoS0VSQkVST1MsCgkgICAgW0RlZmluZSB0 byBzdXBwb3J0IEtlcmJlcm9zLWF1dGhlbnRpY2F0ZWQgUE9QIG1haWwgcmV0cmlldmFsLl0pZG5s CgpPUFRJT05fREVGQVVMVF9PRkYoW2tlcmJlcm9zNV0sW3N1cHBvcnQgS2VyYmVyb3MgdmVyc2lv biA1IGF1dGhlbnRpY2F0ZWQgUE9QXSkKaWYgdGVzdCAiJHt3aXRoX2tlcmJlcm9zNX0iICE9IG5v OyB0aGVuCiAgaWYgdGVzdCAiJHt3aXRoX2tlcmJlcm9zfSIgPSBubzsgdGhlbgogICAgd2l0aF9r ZXJiZXJvcz15ZXMKICAgIEFDX0RFRklORShLRVJCRVJPUykKICBmaQogIEFDX0RFRklORShLRVJC RVJPUzUsIDEsIFtEZWZpbmUgdG8gdXNlIEtlcmJlcm9zIDUgaW5zdGVhZCBvZiBLZXJiZXJvcyA0 Ll0pCmZpCgpPUFRJT05fREVGQVVMVF9PRkYoW2hlc2lvZF0sW3N1cHBvcnQgSGVzaW9kIHRvIGdl dCB0aGUgUE9QIHNlcnZlciBob3N0XSkKZG5sIEZJWE1FIGhlc2lvZCBzdXBwb3J0IG1heSBub3Qg YmUgcHJlc2VudCwgc28gaXQgc2VlbXMgbGlrZSBhbiBlcnJvcgpkbmwgdG8gZGVmaW5lLCBvciBh dCBsZWFzdCB1c2UsIHRoaXMgdW5jb25kaXRpb25hbGx5LgppZiB0ZXN0ICIkd2l0aF9oZXNpb2Qi ICE9IG5vOyB0aGVuCiAgQUNfREVGSU5FKEhFU0lPRCwgMSwgW0RlZmluZSB0byBzdXBwb3J0IHVz aW5nIGEgSGVzaW9kIGRhdGFiYXNlIHRvIGZpbmQgdGhlIFBPUCBzZXJ2ZXIuXSkKZmkKCk9QVElP Tl9ERUZBVUxUX09GRihbbW1kZl0sW3N1cHBvcnQgTU1ERiBtYWlsYm94ZXNdKQppZiB0ZXN0ICIk d2l0aF9tbWRmIiAhPSBubzsgdGhlbgogICBBQ19ERUZJTkUoTUFJTF9VU0VfTU1ERiwgMSwgW0Rl ZmluZSB0byBzdXBwb3J0IE1NREYgbWFpbGJveGVzIGluIG1vdmVtYWlsLl0pCmZpCgpPUFRJT05f REVGQVVMVF9PRkYoW21haWwtdW5saW5rXSxbdW5saW5rLCByYXRoZXIgdGhhbiBlbXB0eSwgbWFp bCBzcG9vbCBhZnRlciByZWFkaW5nXSkKaWYgdGVzdCAiJHdpdGhfbWFpbF91bmxpbmsiICE9IG5v OyB0aGVuCiAgIEFDX0RFRklORShNQUlMX1VOTElOS19TUE9PTCwgMSwgW0RlZmluZSB0byB1bmxp bmssIHJhdGhlciB0aGFuIGVtcHR5LCBtYWlsIHNwb29sIGFmdGVyIHJlYWRpbmcuXSkKZmkKCkFD X0FSR19XSVRIKFttYWlsaG9zdF0sW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbWFpbGhvc3Q9SE9T VE5BTUVdLAogICAgW3N0cmluZyBnaXZpbmcgZGVmYXVsdCBQT1AgbWFpbCBob3N0XSldLAogICAg QUNfREVGSU5FX1VOUVVPVEVEKE1BSUxIT1NULCBbIiR3aXRodmFsIl0sIFtTdHJpbmcgZ2l2aW5n IGZhbGxiYWNrIFBPUCBtYWlsIGhvc3QuXSkpCgpBQ19BUkdfV0lUSChbc291bmRdLFtBU19IRUxQ X1NUUklORyhbLS13aXRoLXNvdW5kPVZBTFVFXSwKICBbY29tcGlsZSB3aXRoIHNvdW5kIHN1cHBv cnQgKFZBTFVFIG9uZSBvZjogeWVzLCBhbHNhLCBvc3MsIGJzZC1vc3NhdWRpbywgbm87CmRlZmF1 bHQgeWVzKS4gIE9ubHkgZm9yIEdOVS9MaW51eCwgRnJlZUJTRCwgTmV0QlNELCBNaW5HVy5dKV0s CiAgWyBjYXNlICIke3dpdGh2YWx9IiBpbgogICAgICB5ZXN8bm98YWxzYXxvc3N8YnNkLW9zc2F1 ZGlvKSB2YWw9JHdpdGh2YWwgOzsKICAgICAgKikgQUNfTVNHX0VSUk9SKFtgLS13aXRoLXNvdW5k PSR3aXRodmFsJyBpcyBpbnZhbGlkOwp0aGlzIG9wdGlvbidzIHZhbHVlIHNob3VsZCBiZSBgeWVz JywgYG5vJywgYGFsc2EnLCBgb3NzJywgb3IgYGJzZC1vc3NhdWRpbycuXSkKICAgICAgOzsKICAg IGVzYWMKICAgIHdpdGhfc291bmQ9JHZhbAogIF0sCiAgW3dpdGhfc291bmQ9JHdpdGhfZmVhdHVy ZXNdKQoKZG5sIEZJWE1FIGN1cnJlbnRseSBpdCBpcyBub3QgdGhlIGxhc3QuCmRubCBUaGlzIHNo b3VsZCBiZSB0aGUgbGFzdCAtLXdpdGggb3B0aW9uLCBiZWNhdXNlIC0td2l0aC14IGlzCmRubCBh ZGRlZCBsYXRlciBvbiB3aGVuIHdlIGZpbmQgdGhlIGZpbGUgbmFtZSBvZiBYLCBhbmQgaXQncyBi ZXN0IHRvCmRubCBrZWVwIHRoZW0gdG9nZXRoZXIgdmlzdWFsbHkuCkFDX0FSR19XSVRIKFt4LXRv b2xraXRdLFtBU19IRUxQX1NUUklORyhbLS13aXRoLXgtdG9vbGtpdD1LSVRdLAogW3VzZSBhbiBY IHRvb2xraXQgKEtJVCBvbmUgb2Y6IHllcyBvciBndGssIGd0azIsIGd0azMsIGx1Y2lkIG9yIGF0 aGVuYSwgbW90aWYsIG5vKV0pXSwKWwkgIGNhc2UgIiR7d2l0aHZhbH0iIGluCgkgICAgeSB8IHll IHwgeWVzICkJdmFsPWd0ayA7OwoJICAgIG4gfCBubyApCQl2YWw9bm8gIDs7CgkgICAgbCB8IGx1 IHwgbHVjIHwgbHVjaSB8IGx1Y2lkICkJdmFsPWx1Y2lkIDs7CgkgICAgYSB8IGF0IHwgYXRoIHwg YXRoZSB8IGF0aGVuIHwgYXRoZW5hICkJdmFsPWF0aGVuYSA7OwoJICAgIG0gfCBtbyB8IG1vdCB8 IG1vdGkgfCBtb3RpZiApCXZhbD1tb3RpZiA7OwoJICAgIGcgfCBndCB8IGd0ayAgKQl2YWw9Z3Rr IDs7CgkgICAgZ3RrMiAgKQl2YWw9Z3RrMiA7OwoJICAgIGd0azMgICkJdmFsPWd0azMgOzsKCSAg ICAqICkKQUNfTVNHX0VSUk9SKFtgLS13aXRoLXgtdG9vbGtpdD0kd2l0aHZhbCcgaXMgaW52YWxp ZDsKdGhpcyBvcHRpb24ncyB2YWx1ZSBzaG91bGQgYmUgYHllcycsIGBubycsIGBsdWNpZCcsIGBh dGhlbmEnLCBgbW90aWYnLCBgZ3RrJywKYGd0azInIG9yIGBndGszJy4gIGB5ZXMnIGFuZCBgZ3Rr JyBhcmUgc3lub255bXMuCmBhdGhlbmEnIGFuZCBgbHVjaWQnIGFyZSBzeW5vbnltcy5dKQoJICAg IDs7CgkgIGVzYWMKCSAgd2l0aF94X3Rvb2xraXQ9JHZhbApdKQoKT1BUSU9OX0RFRkFVTFRfT0ZG KFt3aWRlLWludF0sIFtwcmVmZXIgd2lkZSBFbWFjcyBpbnRlZ2VycyAodHlwaWNhbGx5IDYyLWJp dCldKQppZiB0ZXN0ICIkd2l0aF93aWRlX2ludCIgPSB5ZXM7IHRoZW4KICBBQ19ERUZJTkUoW1dJ REVfRU1BQ1NfSU5UXSwgMSwgW1VzZSBsb25nIGxvbmcgZm9yIEVNQUNTX0lOVCBpZiBhdmFpbGFi bGUuXSkKZmkKCmRubCBfT04gcmVzdWx0cyBpbiBhICctLXdpdGhvdXQnIG9wdGlvbiBpbiB0aGUg LS1oZWxwIG91dHB1dCwgc28KZG5sIHRoZSBoZWxwIHRleHQgc2hvdWxkIHJlZmVyIHRvICJkb24n dCBjb21waWxlIiwgZXRjLgp3aXRoX3hwbV9zZXQ9JHt3aXRoX3hwbStzZXR9Ck9QVElPTl9ERUZB VUxUX09OKFt4cG1dLFtkb24ndCBjb21waWxlIHdpdGggWFBNIGltYWdlIHN1cHBvcnRdKQpPUFRJ T05fREVGQVVMVF9PTihbanBlZ10sW2Rvbid0IGNvbXBpbGUgd2l0aCBKUEVHIGltYWdlIHN1cHBv cnRdKQpPUFRJT05fREVGQVVMVF9PTihbdGlmZl0sW2Rvbid0IGNvbXBpbGUgd2l0aCBUSUZGIGlt YWdlIHN1cHBvcnRdKQpPUFRJT05fREVGQVVMVF9PTihbZ2lmXSxbZG9uJ3QgY29tcGlsZSB3aXRo IEdJRiBpbWFnZSBzdXBwb3J0XSkKT1BUSU9OX0RFRkFVTFRfT04oW3BuZ10sW2Rvbid0IGNvbXBp bGUgd2l0aCBQTkcgaW1hZ2Ugc3VwcG9ydF0pCk9QVElPTl9ERUZBVUxUX09OKFtyc3ZnXSxbZG9u J3QgY29tcGlsZSB3aXRoIFNWRyBpbWFnZSBzdXBwb3J0XSkKT1BUSU9OX0RFRkFVTFRfT04oW3ht bDJdLFtkb24ndCBjb21waWxlIHdpdGggWE1MIHBhcnNpbmcgc3VwcG9ydF0pCk9QVElPTl9ERUZB VUxUX09OKFtpbWFnZW1hZ2lja10sW2Rvbid0IGNvbXBpbGUgd2l0aCBJbWFnZU1hZ2ljayBpbWFn ZSBzdXBwb3J0XSkKCk9QVElPTl9ERUZBVUxUX09OKFt4ZnRdLFtkb24ndCB1c2UgWEZUIGZvciBh bnRpIGFsaWFzZWQgZm9udHNdKQpPUFRJT05fREVGQVVMVF9PTihbbGlib3RmXSxbZG9uJ3QgdXNl IGxpYm90ZiBmb3IgT3BlblR5cGUgZm9udCBzdXBwb3J0XSkKT1BUSU9OX0RFRkFVTFRfT04oW20x N24tZmx0XSxbZG9uJ3QgdXNlIG0xN24tZmx0IGZvciB0ZXh0IHNoYXBpbmddKQoKT1BUSU9OX0RF RkFVTFRfT04oW3Rvb2xraXQtc2Nyb2xsLWJhcnNdLFtkb24ndCB1c2UgTW90aWYgb3IgWGF3M2Qg c2Nyb2xsIGJhcnNdKQpPUFRJT05fREVGQVVMVF9PTihbeGF3M2RdLFtkb24ndCB1c2UgWGF3M2Rd KQpPUFRJT05fREVGQVVMVF9PTihbeGltXSxbZG9uJ3QgdXNlIFgxMSBYSU1dKQpPUFRJT05fREVG QVVMVF9PRkYoW25zXSxbdXNlIE5lWFRzdGVwIChDb2NvYSBvciBHTlVzdGVwKSB3aW5kb3dpbmcg c3lzdGVtXSkKT1BUSU9OX0RFRkFVTFRfT0ZGKFt3MzJdLCBbdXNlIG5hdGl2ZSBNUyBXaW5kb3dz IEdVSSBpbiBhIEN5Z3dpbiBidWlsZF0pCgpPUFRJT05fREVGQVVMVF9PTihbZ3BtXSxbZG9uJ3Qg dXNlIC1sZ3BtIGZvciBtb3VzZSBzdXBwb3J0IG9uIGEgR05VL0xpbnV4IGNvbnNvbGVdKQpPUFRJ T05fREVGQVVMVF9PTihbZGJ1c10sW2Rvbid0IGNvbXBpbGUgd2l0aCBELUJ1cyBzdXBwb3J0XSkK T1BUSU9OX0RFRkFVTFRfT04oW2djb25mXSxbZG9uJ3QgY29tcGlsZSB3aXRoIEdDb25mIHN1cHBv cnRdKQpPUFRJT05fREVGQVVMVF9PTihbZ3NldHRpbmdzXSxbZG9uJ3QgY29tcGlsZSB3aXRoIEdT ZXR0aW5ncyBzdXBwb3J0XSkKT1BUSU9OX0RFRkFVTFRfT04oW3NlbGludXhdLFtkb24ndCBjb21w aWxlIHdpdGggU0VMaW51eCBzdXBwb3J0XSkKT1BUSU9OX0RFRkFVTFRfT04oW2dudXRsc10sW2Rv bid0IHVzZSAtbGdudXRscyBmb3IgU1NML1RMUyBzdXBwb3J0XSkKT1BUSU9OX0RFRkFVTFRfT04o W3psaWJdLFtkb24ndCBjb21waWxlIHdpdGggemxpYiBkZWNvbXByZXNzaW9uIHN1cHBvcnRdKQoK QUNfQVJHX1dJVEgoW2ZpbGUtbm90aWZpY2F0aW9uXSxbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1m aWxlLW5vdGlmaWNhdGlvbj1MSUJdLAogW3VzZSBhIGZpbGUgbm90aWZpY2F0aW9uIGxpYnJhcnkg KExJQiBvbmUgb2Y6IHllcywgZ2ZpbGUsIGlub3RpZnksIHczMiwgbm8pXSldLAogWyBjYXNlICIk e3dpdGh2YWx9IiBpbgogICAgeSB8IHllIHwgeWVzICkJdmFsPXllcyA7OwogICAgbiB8IG5vICkJ CXZhbD1ubyAgOzsKICAgIGcgfCBnZiB8IGdmaSB8IGdmaWwgfCBnZmlsZSApCXZhbD1nZmlsZSA7 OwogICAgaSB8IGluIHwgaW5vIHwgaW5vdCB8IGlub3RpIHwgaW5vdGlmIHwgaW5vdGlmeSApCXZh bD1pbm90aWZ5IDs7CiAgICB3IHwgdzMgfCB3MzIgKQl2YWw9dzMyIDs7CiAgICAqICkgQUNfTVNH X0VSUk9SKFtgLS13aXRoLWZpbGUtbm90aWZpY2F0aW9uPSR3aXRodmFsJyBpcyBpbnZhbGlkOwp0 aGlzIG9wdGlvbidzIHZhbHVlIHNob3VsZCBiZSBgeWVzJywgYG5vJywgYGdmaWxlJywgYGlub3Rp ZnknIG9yIGB3MzInLgpgeWVzJyBpcyBhIHN5bm9ueW0gZm9yIGB3MzInIG9uIE1TLVdpbmRvd3Ms IGZvciBgbm8nIG9uIE5leHRzdGVwLApvdGhlcndpc2UgZm9yIHRoZSBmaXJzdCBvZiBgZ2ZpbGUn IG9yIGBpbm90aWZ5JyB0aGF0IGlzIHVzYWJsZS5dKQogICAgOzsKICAgZXNhYwogICB3aXRoX2Zp bGVfbm90aWZpY2F0aW9uPSR2YWwKIF0sCiBbd2l0aF9maWxlX25vdGlmaWNhdGlvbj0kd2l0aF9m ZWF0dXJlc10pCgojIyBGb3IgdGhlIHRpbWVzIHdoZW4geW91IHdhbnQgdG8gYnVpbGQgRW1hY3Mg YnV0IGRvbid0IGhhdmUKIyMgYSBzdWl0YWJsZSBtYWtlaW5mbywgYW5kIGNhbiBsaXZlIHdpdGhv dXQgdGhlIG1hbnVhbHMuCmRubCBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZW1h Y3MtZGV2ZWwvMjAwOC0wNC9tc2cwMTg0NC5odG1sCk9QVElPTl9ERUZBVUxUX09OKFttYWtlaW5m b10sW2Rvbid0IHJlcXVpcmUgbWFrZWluZm8gZm9yIGJ1aWxkaW5nIG1hbnVhbHNdKQoKIyMgVGhp cyBtaWdodCBiZSBhICdjb25maWd1cmUnIGFyZy4KQUNfU1VCU1QoW0FDTE9DQUxfUEFUSF0pCgoj IyBNYWtlZmlsZS5pbiBuZWVkcyB0aGUgY2FjaGUgZmlsZSBuYW1lLgpBQ19TVUJTVChjYWNoZV9m aWxlKQoKIyMgVGhpcyBpcyBhbiBvcHRpb24gYmVjYXVzZSBJIGRvIG5vdCBrbm93IGlmIGFsbCBp bmZvL21hbiBzdXBwb3J0CiMjIGNvbXByZXNzZWQgZmlsZXMsIG5vciBob3cgdG8gdGVzdCBpZiB0 aGV5IGRvIHNvLgpPUFRJT05fREVGQVVMVF9PTihbY29tcHJlc3MtaW5zdGFsbF0sCiAgW2Rvbid0 IGNvbXByZXNzIHNvbWUgZmlsZXMgKC5lbCwgLmluZm8sIGV0Yy4pIHdoZW4gaW5zdGFsbGluZy4g IEVxdWl2YWxlbnQgdG86Cm1ha2UgR1pJUF9QUk9HPSBpbnN0YWxsXSkKCkFDX0FSR19XSVRIKGdh bWV1c2VyLGRubApbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1nYW1ldXNlcj1VU0VSXSxbdXNlciBm b3Igc2hhcmVkIGdhbWUgc2NvcmUgZmlsZXNdKV0pCnRlc3QgIlgke3dpdGhfZ2FtZXVzZXJ9IiAh PSBYICYmIHRlc3QgIiR7d2l0aF9nYW1ldXNlcn0iICE9IHllcyBcCiAgJiYgZ2FtZXVzZXI9IiR7 d2l0aF9nYW1ldXNlcn0iCnRlc3QgIlgkZ2FtZXVzZXIiID0gWCAmJiBnYW1ldXNlcj1nYW1lcwoK QUNfQVJHX1dJVEgoW2dudXN0ZXAtY29uZl0sZG5sCltBU19IRUxQX1NUUklORyhbLS13aXRoLWdu dXN0ZXAtY29uZj1GSUxFTkFNRV0sCiAgIFtuYW1lIG9mIEdOVXN0ZXAuY29uZjsgZGVmYXVsdCAk R05VU1RFUF9DT05GSUdfRklMRSwgb3IgL2V0Yy9HTlVzdGVwL0dOVXN0ZXAuY29uZl0pXSkKdGVz dCAiWCR7d2l0aF9nbnVzdGVwX2NvbmZ9IiAhPSBYICYmIHRlc3QgIiR7d2l0aF9nbnVzdGVwX2Nv bmZ9IiAhPSB5ZXMgJiYgXAogIEdOVVNURVBfQ09ORklHX0ZJTEU9IiR7d2l0aF9nbnVzdGVwX2Nv bmZ9Igp0ZXN0ICJYJEdOVVNURVBfQ09ORklHX0ZJTEUiID0gIlgiICYmIFwKICAgICBHTlVTVEVQ X0NPTkZJR19GSUxFPS9ldGMvR05Vc3RlcC9HTlVzdGVwLmNvbmYKCkFDX0FSR19FTkFCTEUobnMt c2VsZi1jb250YWluZWQsCltBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLW5zLXNlbGYtY29udGFp bmVkXSwKICAgICAgICAgICAgICAgIFtkaXNhYmxlIHNlbGYgY29udGFpbmVkIGJ1aWxkIHVuZGVy IE5lWFRzdGVwXSldLAogICBFTl9OU19TRUxGX0NPTlRBSU5FRD0kZW5hYmxldmFsLAogICBFTl9O U19TRUxGX0NPTlRBSU5FRD15ZXMpCgpBQ19BUkdfRU5BQkxFKGxvY2FsbGlzcHBhdGgsCltBU19I RUxQX1NUUklORyhbLS1lbmFibGUtbG9jYWxsaXNwcGF0aD1QQVRIXSwKICAgICAgICAgICAgICAg IFtkaXJlY3RvcmllcyBFbWFjcyBzaG91bGQgc2VhcmNoIGZvciBsaXNwIGZpbGVzIHNwZWNpZmlj CgkJIHRvIHRoaXMgc2l0ZV0pXSwKaWYgdGVzdCAiJHtlbmFibGV2YWx9IiA9ICJubyI7IHRoZW4K ICBsb2NhbGxpc3BwYXRoPQplbGlmIHRlc3QgIiR7ZW5hYmxldmFsfSIgIT0gInllcyI7IHRoZW4K ICBsb2NhbGxpc3BwYXRoPSR7ZW5hYmxldmFsfQpmaSkKCkFDX0FSR19FTkFCTEUoY2hlY2tpbmcs CltBU19IRUxQX1NUUklORyhbLS1lbmFibGUtY2hlY2tpbmdAPDpAPUxJU1RAOj5AXSwKCQlbZW5h YmxlIGV4cGVuc2l2ZSBydW4tdGltZSBjaGVja3MuICBXaXRoIExJU1QsCgkJIGVuYWJsZSBvbmx5 IHNwZWNpZmljIGNhdGVnb3JpZXMgb2YgY2hlY2tzLgoJCSBDYXRlZ29yaWVzIGFyZTogYWxsLHll cyxuby4KCQkgRmxhZ3MgYXJlOiBzdHJpbmdieXRlcywgc3RyaW5nb3ZlcnJ1biwgc3RyaW5nZnJl ZWxpc3QsCgkJIHhtYWxsb2NvdmVycnVuLCBjb25zbGlzdCwgZ2x5cGhzXSldLApbYWNfY2hlY2tp bmdfZmxhZ3M9IiR7ZW5hYmxldmFsfSJdLFtdKQpJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfSUZT PSIkSUZTIjsgSUZTPSIkSUZTLCIKZm9yIGNoZWNrIGluICRhY19jaGVja2luZ19mbGFncwpkbwoJ Y2FzZSAkY2hlY2sgaW4KCSMgdGhlc2Ugc2V0IGFsbCB0aGUgZmxhZ3MgdG8gc3BlY2lmaWMgc3Rh dGVzCgl5ZXMpCQlhY19lbmFibGVfY2hlY2tpbmc9MSA7OwoJbm8pCQlhY19lbmFibGVfY2hlY2tp bmc9IDsKCQkJYWNfZ2NfY2hlY2tfc3RyaW5nYnl0ZXM9IDsKCSAgICAgICAgICAgICAgICBhY19n Y19jaGVja19zdHJpbmdfb3ZlcnJ1bj0gOwoJICAgICAgICAgICAgICAgIGFjX2djX2NoZWNrX3N0 cmluZ19mcmVlX2xpc3Q9IDsKCSAgICAgICAgICAgICAgICBhY194bWFsbG9jX292ZXJydW49IDsK CSAgICAgICAgICAgICAgICBhY19nY19jaGVja19jb25zX2xpc3Q9IDsKCQkJYWNfZ2x5cGhzX2Rl YnVnPSA7OwoJYWxsKQkJYWNfZW5hYmxlX2NoZWNraW5nPTEgOwoJCQlhY19nY19jaGVja19zdHJp bmdieXRlcz0xIDsKCSAgICAgICAgICAgICAgICBhY19nY19jaGVja19zdHJpbmdfb3ZlcnJ1bj0x IDsKCSAgICAgICAgICAgICAgICBhY19nY19jaGVja19zdHJpbmdfZnJlZV9saXN0PTEgOwoJICAg ICAgICAgICAgICAgIGFjX3htYWxsb2Nfb3ZlcnJ1bj0xIDsKCSAgICAgICAgICAgICAgICBhY19n Y19jaGVja19jb25zX2xpc3Q9MSA7CgkJCWFjX2dseXBoc19kZWJ1Zz0xIDs7CgkjIHRoZXNlIGVu YWJsZSBwYXJ0aWN1bGFyIGNoZWNrcwoJc3RyaW5nYnl0ZXMpIAlhY19nY19jaGVja19zdHJpbmdi eXRlcz0xIDs7CglzdHJpbmdvdmVycnVuKSAJYWNfZ2NfY2hlY2tfc3RyaW5nX292ZXJydW49MSA7 OwoJc3RyaW5nZnJlZWxpc3QpIGFjX2djX2NoZWNrX3N0cmluZ19mcmVlX2xpc3Q9MSA7OwoJeG1h bGxvY292ZXJydW4pCWFjX3htYWxsb2Nfb3ZlcnJ1bj0xIDs7Cgljb25zbGlzdCkJYWNfZ2NfY2hl Y2tfY29uc19saXN0PTEgOzsKCWdseXBocykJCWFjX2dseXBoc19kZWJ1Zz0xIDs7CgkqKQlBQ19N U0dfRVJST1IodW5rbm93biBjaGVjayBjYXRlZ29yeSAkY2hlY2spIDs7Cgllc2FjCmRvbmUKSUZT PSIkYWNfc2F2ZV9JRlMiCgppZiB0ZXN0IHgkYWNfZW5hYmxlX2NoZWNraW5nICE9IHggOyB0aGVu CiAgQUNfREVGSU5FKEVOQUJMRV9DSEVDS0lORywgMSwKW0RlZmluZSB0byAxIGlmIGV4cGVuc2l2 ZSBydW4tdGltZSBkYXRhIHR5cGUgYW5kIGNvbnNpc3RlbmN5IGNoZWNrcyBhcmUgZW5hYmxlZC5d KQpmaQppZiB0ZXN0IHgkYWNfZ2NfY2hlY2tfc3RyaW5nYnl0ZXMgIT0geCA7IHRoZW4KICBBQ19E RUZJTkUoR0NfQ0hFQ0tfU1RSSU5HX0JZVEVTLCAxLApbRGVmaW5lIHRoaXMgdGVtcG9yYXJpbHkg dG8gaHVudCBhIGJ1Zy4gIElmIGRlZmluZWQsIHRoZSBzaXplIG9mCiAgIHN0cmluZ3MgaXMgcmVk dW5kYW50bHkgcmVjb3JkZWQgaW4gc2RhdGEgc3RydWN0dXJlcyBzbyB0aGF0IGl0IGNhbgogICBi ZSBjb21wYXJlZCB0byB0aGUgc2l6ZXMgcmVjb3JkZWQgaW4gTGlzcCBzdHJpbmdzLl0pCmZpCmlm IHRlc3QgeCRhY19nY19jaGVja19zdHJpbmdfb3ZlcnJ1biAhPSB4IDsgdGhlbgogIEFDX0RFRklO RShHQ19DSEVDS19TVFJJTkdfT1ZFUlJVTiwgMSwKW0RlZmluZSB0aGlzIHRvIGNoZWNrIGZvciBz aG9ydCBzdHJpbmcgb3ZlcnJ1bi5dKQpmaQppZiB0ZXN0IHgkYWNfZ2NfY2hlY2tfc3RyaW5nX2Zy ZWVfbGlzdCAhPSB4IDsgdGhlbgogIEFDX0RFRklORShHQ19DSEVDS19TVFJJTkdfRlJFRV9MSVNU LCAxLApbRGVmaW5lIHRoaXMgdG8gY2hlY2sgdGhlIHN0cmluZyBmcmVlIGxpc3QuXSkKZmkKaWYg dGVzdCB4JGFjX3htYWxsb2Nfb3ZlcnJ1biAhPSB4IDsgdGhlbgogIEFDX0RFRklORShYTUFMTE9D X09WRVJSVU5fQ0hFQ0ssIDEsCltEZWZpbmUgdGhpcyB0byBjaGVjayBmb3IgbWFsbG9jIGJ1ZmZl ciBvdmVycnVuLl0pCmZpCmlmIHRlc3QgeCRhY19nY19jaGVja19jb25zX2xpc3QgIT0geCA7IHRo ZW4KICBBQ19ERUZJTkUoR0NfQ0hFQ0tfQ09OU19MSVNULCAxLApbRGVmaW5lIHRoaXMgdG8gY2hl Y2sgZm9yIGVycm9ycyBpbiBjb25zIGxpc3QuXSkKZmkKaWYgdGVzdCB4JGFjX2dseXBoc19kZWJ1 ZyAhPSB4IDsgdGhlbgogIEFDX0RFRklORShHTFlQSF9ERUJVRywgMSwKW0RlZmluZSB0aGlzIHRv IGVuYWJsZSBnbHlwaHMgZGVidWdnaW5nIGNvZGUuXSkKZmkKCkFDX0FSR19FTkFCTEUoY2hlY2st bGlzcC1vYmplY3QtdHlwZSwKW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jaGVjay1saXNwLW9i amVjdC10eXBlXSwKICAgICAgICAgICAgICAgIFtlbmFibGUgY29tcGlsZSB0aW1lIGNoZWNrcyBm b3IgdGhlIExpc3BfT2JqZWN0IGRhdGEgdHlwZS4KCQlUaGlzIGlzIHVzZWZ1bCBmb3IgZGV2ZWxv cG1lbnQgZm9yIGNhdGNoaW5nIGNlcnRhaW4gdHlwZXMgb2YgYnVncy5dKV0sCmlmIHRlc3QgIiR7 ZW5hYmxldmFsfSIgIT0gIm5vIjsgdGhlbgogICBBQ19ERUZJTkUoQ0hFQ0tfTElTUF9PQkpFQ1Rf VFlQRSwgMSwKICAgW0RlZmluZSB0aGlzIHRvIGVuYWJsZSBjb21waWxlIHRpbWUgY2hlY2tzIGZv ciB0aGUgTGlzcF9PYmplY3QgZGF0YSB0eXBlLl0pCmZpKQoKCmRubCBUaGUgbmFtZSBvZiB0aGlz IG9wdGlvbiBpcyB1bmZvcnR1bmF0ZS4gIEl0IHByZWRhdGVzLCBhbmQgaGFzIG5vCmRubCByZWxh dGlvbiB0bywgdGhlICJzYW1wbGluZy1iYXNlZCBlbGlzcCBwcm9maWxlciIgYWRkZWQgaW4gMjQu My4KZG5sIEFjdHVhbGx5LCBpdCBzdG9wcyBpdCB3b3JraW5nLgpkbmwgaHR0cDovL2xpc3RzLmdu dS5vcmcvYXJjaGl2ZS9odG1sL2VtYWNzLWRldmVsLzIwMTItMTEvbXNnMDAzOTMuaHRtbApBQ19B UkdfRU5BQkxFKHByb2ZpbGluZywKW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wcm9maWxpbmdd LAoJCVtidWlsZCBlbWFjcyB3aXRoIGxvdy1sZXZlbCwgZ3Byb2YgcHJvZmlsaW5nIHN1cHBvcnQu CiAgICAgICAgICAgICAgICBNYWlubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgRW1hY3MgaXRzZWxm LiAgTWF5IG5vdCB3b3JrIG9uCiAgICAgICAgICAgICAgICBhbGwgcGxhdGZvcm1zLiAgU3RvcHMg cHJvZmlsZXIuZWwgd29ya2luZy5dKV0sClthY19lbmFibGVfcHJvZmlsaW5nPSIke2VuYWJsZXZh bH0iXSxbXSkKaWYgdGVzdCB4JGFjX2VuYWJsZV9wcm9maWxpbmcgIT0geCA7IHRoZW4KICAgUFJP RklMSU5HX0NGTEFHUz0iLURQUk9GSUxJTkc9MSAtcGciCmVsc2UKICAgUFJPRklMSU5HX0NGTEFH Uz0KZmkKQUNfU1VCU1QoUFJPRklMSU5HX0NGTEFHUykKCkFDX0FSR19FTkFCTEUoYXV0b2RlcGVu ZCwKW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hdXRvZGVwZW5kXSwKCQlbYXV0b21hdGljYWxs eSBnZW5lcmF0ZSBkZXBlbmRlbmNpZXMgdG8gLmgtZmlsZXMuCiAJCSBSZXF1aXJlcyBnY2MsIGVu YWJsZWQgaWYgZm91bmQuXSldLApbYWNfZW5hYmxlX2F1dG9kZXBlbmQ9IiR7ZW5hYmxldmFsfSJd LFthY19lbmFibGVfYXV0b2RlcGVuZD15ZXNdKQoKQUNfQVJHX0VOQUJMRShndGstZGVwcmVjYXRp b24td2FybmluZ3MsCltBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ3RrLWRlcHJlY2F0aW9uLXdh cm5pbmdzXSwKCQlbU2hvdyBHdGsrL0dkayBkZXByZWNhdGlvbiB3YXJuaW5ncyBmb3IgR3RrKyA+ PSAzLjBdKV0sClthY19lbmFibGVfZ3RrX2RlcHJlY2F0aW9uX3dhcm5pbmdzPSIke2VuYWJsZXZh bH0iXSxbXSkKCmRubCBUaGlzIHVzZWQgdG8gdXNlIGNoYW5nZXF1b3RlLCBidXQsIGFwYXJ0IGZy b20gYGNoYW5nZXF1b3RlIGlzIGV2aWwnCmRubCBwZXIgdGhlIGF1dG9jb25mIG1hbnVhbCwgd2Ug Y2FuIHNwZWVkIHVwIGF1dG9jb25mIHNvbWV3aGF0IGJ5IHF1b3RpbmcKZG5sIHRoZSBncmVhdCBn b2Igb2YgdGV4dC4gIFRodXMgaXQncyBub3QgcHJvY2Vzc2VkIGZvciBwb3NzaWJsZSBleHBhbnNp b24uCmRubCBKdXN0IG1ha2Ugc3VyZSB0aGUgYnJhY2tldHMgcmVtYWluIGJhbGFuY2VkLgpkbmwK ZG5sIFNpbmNlIEVtYWNzIGNhbid0IGZpbmQgbWF0Y2hpbmcgcGFpcnMgb2YgcXVvdGVzLCBib3Vu ZGFyaWVzIGFyZQpkbmwgaW5kaWNhdGVkIGJ5IGNvbW1lbnRzLgpkbmwgcXVvdGF0aW9uIGJlZ2lu cwpbCgojIyMgSWYgeW91IGFkZCBzdXBwb3J0IGZvciBhIG5ldyBjb25maWd1cmF0aW9uLCBhZGQg Y29kZSB0byB0aGlzCiMjIyBzd2l0Y2ggc3RhdGVtZW50IHRvIHJlY29nbml6ZSB5b3VyIGNvbmZp Z3VyYXRpb24gbmFtZSBhbmQgc2VsZWN0CiMjIyB0aGUgYXBwcm9wcmlhdGUgb3BzeXMuCgojIyMg QXMgZmFyIGFzIGhhbmRsaW5nIHZlcnNpb24gbnVtYmVycyBvbiBvcGVyYXRpbmcgc3lzdGVtcyBp cwojIyMgY29uY2VybmVkLCBtYWtlIHN1cmUgdGhpbmdzIHdpbGwgZmFpbCBpbiBhIGZpeGFibGUg d2F5LiAgSWYKIyMjIC9ldGMvTUFDSElORVMgZG9lc24ndCBzYXkgYW55dGhpbmcgYWJvdXQgdmVy c2lvbiBudW1iZXJzLCBiZQojIyMgcHJlcGFyZWQgdG8gaGFuZGxlIGFueXRoaW5nIHJlYXNvbmFi bHkuICBJZiB2ZXJzaW9uIG51bWJlcnMKIyMjIG1hdHRlciwgYmUgc3VyZSAvZXRjL01BQ0hJTkVT IHNheXMgc29tZXRoaW5nIGFib3V0IGl0LgoKb3BzeXM9JycgdW5wb3J0ZWQ9bm8KY2FzZSAiJHtj YW5vbmljYWx9IiBpbgoKICAjIyBHTlUvTGludXggYW5kIHNpbWlsYXIgcG9ydHMKICAqLSotbGlu dXgqICkKICAgIG9wc3lzPWdudS1saW51eAogIDs7CgogICMjIEZyZWVCU0QgcG9ydHMKICAqLSot ZnJlZWJzZCogKQogICAgb3BzeXM9ZnJlZWJzZAogIDs7CgogICMjIERyYWdvbkZseSBwb3J0cwog ICotKi1kcmFnb25mbHkqICkKICAgIG9wc3lzPWRyYWdvbmZseQogIDs7CgogICMjIEZyZWVCU0Qg a2VybmVsICsgZ2xpYmMgYmFzZWQgdXNlcmxhbmQKICAqLSota2ZyZWVic2QqZ251KiApCiAgICBv cHN5cz1nbnUta2ZyZWVic2QKICA7OwoKICAjIyBOZXRCU0QgcG9ydHMKICAqLSotbmV0YnNkKiAp CiAgICBvcHN5cz1uZXRic2QKICA7OwoKICAjIyBPcGVuQlNEIHBvcnRzCiAgKi0qLW9wZW5ic2Qq IHwgKi0qLW1pcmJzZCogKQogICAgb3BzeXM9b3BlbmJzZAogIDs7CgogICMjIEFwcGxlIERhcndp biAvIE1hYyBPUyBYCiAgKi1hcHBsZS1kYXJ3aW4qICkKICAgIGNhc2UgIiR7Y2Fub25pY2FsfSIg aW4KICAgICAgaVszNDU2XTg2LSogKSAgOzsKICAgICAgcG93ZXJwYy0qICkgICAgOzsKICAgICAg eDg2XzY0LSogKSAgICAgOzsKICAgICAgKiApICAgICAgICAgICAgdW5wb3J0ZWQ9eWVzIDs7CiAg ICBlc2FjCiAgICBvcHN5cz1kYXJ3aW4KICAgICMjIFVzZSBmaW5rIHBhY2thZ2VzIGlmIGF2YWls YWJsZS4KICAgICMjIEZJWE1FIGZpbmQgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXM6IGh0dHA6Ly9k ZWJidWdzLmdudS5vcmcvMTE1MDcKIyMgICAgaWYgdGVzdCAtZCAvc3cvaW5jbHVkZSAmJiB0ZXN0 IC1kIC9zdy9saWI7IHRoZW4KIyMgICAgICBHQ0NfVEVTVF9PUFRJT05TPSItSS9zdy9pbmNsdWRl IC1ML3N3L2xpYiIKIyMgICAgICBOT05fR0NDX1RFU1RfT1BUSU9OUz0ke0dDQ19URVNUX09QVElP TlN9CiMjICAgIGZpCiAgOzsKCiAgIyMgQ3lnd2luIHBvcnRzCiAgKi0qLWN5Z3dpbiApCiAgICBv cHN5cz1jeWd3aW4KICA7OwoKICAjIyBIUCA5MDAwIHNlcmllcyA3MDAgYW5kIDgwMCwgcnVubmlu ZyBIUC9VWAogIGhwcGEqLWhwLWhwdXgxMC4yKiApCiAgICBvcHN5cz1ocHV4MTAtMjAKICA7Owog IGhwcGEqLWhwLWhwdXgxWzEtOV0qICkKICAgIG9wc3lzPWhwdXgxMQogICAgQ0ZMQUdTPSItRF9J TkNMVURFX19TVERDX0ExX1NPVVJDRSAkQ0ZMQUdTIgogIDs7CgogICMjIElCTSBtYWNoaW5lcwog IHJzNjAwMC1pYm0tYWl4NC5bMjNdKiApCiAgICBvcHN5cz1haXg0LTIKICA7OwogIHBvd2VycGMt aWJtLWFpeDQuWzIzXSogICkKICAgIG9wc3lzPWFpeDQtMgogIDs7CiAgcnM2MDAwLWlibS1haXhb NTZdKiApCiAgICBvcHN5cz1haXg0LTIKICA7OwogIHBvd2VycGMtaWJtLWFpeFs1LTldKiB8IHBv d2VycGMtaWJtLWFpeFsxLTldWzAtOV0qICkKICAgIG9wc3lzPWFpeDQtMgogIDs7CgogICMjIFNp bGljb24gR3JhcGhpY3MgbWFjaGluZXMKICAjIyBJcmlzIDRECiAgbWlwcy1zZ2ktaXJpeDYuNSAp CiAgICBvcHN5cz1pcml4Ni01CiAgICAjIFdpdGhvdXQgZGVmaW5pbmcgX0xBTkdVQUdFX0MsIHRo aW5ncyBnZXQgbWFza2VkIG91dCBpbiB0aGUgaGVhZGVycwogICAgIyBzbyB0aGF0LCBmb3IgaW5z dGFuY2UsIGdyZXBwaW5nIGZvciBgZnJlZScgaW4gc3RkbGliLmggZmFpbHMgYW5kCiAgICAjIEFD X0hFQURFUl9TVERfQyBmYWlscy4gICAoTUlQU1BybyA3LjIuMS4ybSBjb21waWxlcnMsIElyaXgg Ni41LjNtKS4KICAgIE5PTl9HQ0NfVEVTVF9PUFRJT05TPSItRF9MQU5HVUFHRV9DIgogIDs7Cgog ICMjIFN1bnMKICAqLXN1bi1zb2xhcmlzKiBcCiAgICB8IGlbMzQ1Nl04Ni0qLXNvbGFyaXMyKiB8 IGlbMzQ1Nl04Ni0qLXN1bm9zNSogXAogICAgfCB4ODZfNjQtKi1zb2xhcmlzMiogICAgfCB4ODZf NjQtKi1zdW5vczUqKQogICAgY2FzZSAiJHtjYW5vbmljYWx9IiBpbgogICAgICBpWzM0NTZdODYt Ki0qICkgICA7OwogICAgICBhbWQ2NC0qLSp8eDg2XzY0LSotKikgOzsKICAgICAgc3BhcmMqICkJ CTs7CiAgICAgICogKQkJdW5wb3J0ZWQ9eWVzIDs7CiAgICBlc2FjCiAgICBjYXNlICIke2Nhbm9u aWNhbH0iIGluCiAgICAgICotc3Vub3M1LlsxLTldWzAtOV0qIHwgKi1zb2xhcmlzMi5bMS05XVsw LTldKiApCgkJb3BzeXM9c29sMi0xMAoJCWVtYWNzX2NoZWNrX3N1bnByb19jPXllcwoJCTs7CiAg ICAgICotc3Vub3M1LlsxLTVdKiB8ICotc29sYXJpczIuWzEtNV0qICkgdW5wb3J0ZWQ9eWVzIDs7 CiAgICAgICMjIE5vdGUgdGhhdCBFbWFjcyAyMy4xJ3MgTkVXUyBzYWlkIHRoZSBmb2xsb3dpbmcg d291bGQgYmUgZHJvcHBlZC4KICAgICAgKi1zdW5vczUuNiogfCAqLXNvbGFyaXMyLjYqICkKCQlv cHN5cz1zb2wyLTYKCQlSQU5MSUI9ImFyIC10cyIKCQk7OwogICAgICAjIyA1LjcgRU9MIEF1ZyAy MDA4LCA1LjggRU9MIE1hciAyMDEyLgogICAgICAqLXN1bm9zNS5bNy05XSogfCAqLXNvbGFyaXMy Lls3LTldKiApCgkJb3BzeXM9c29sMi02CgkJZW1hY3NfY2hlY2tfc3VucHJvX2M9eWVzCgkJOzsK ICAgIGVzYWMKICAgICMjIFdhdGNoIG91dCBmb3IgYSBjb21waWxlciB0aGF0IHdlIGtub3cgd2ls bCBub3Qgd29yay4KICAgIGNhc2UgIiR7Y2Fub25pY2FsfSIgaW4KICAgICAqLXNvbGFyaXMqIHwg Ki1zdW5vczUqICkKCQlpZiBbICJ4JENDIiA9IHgvdXNyL3VjYi9jYyBdOyB0aGVuCgkJICAjIyAv dXNyL3VjYi9jYyBkb2Vzbid0IHdvcms7CgkJICAjIyB3ZSBzaG91bGQgZmluZCBzb21lIG90aGVy IGNvbXBpbGVyIHRoYXQgZG9lcyB3b3JrLgoJCSAgdW5zZXQgQ0MKCQlmaQoJCTs7CiAgICAgICop IDs7CiAgICBlc2FjCiAgOzsKCiAgIyMgSW50ZWwgMzg2IG1hY2hpbmVzIHdoZXJlIHdlIGRvbid0 IGNhcmUgYWJvdXQgdGhlIG1hbnVmYWN0dXJlci4KICBpWzM0NTZdODYtKi0qICkKICAgIGNhc2Ug IiR7Y2Fub25pY2FsfSIgaW4KICAgICAgKi1kYXJ3aW4qICkgICAgICAgICAgICAgICBvcHN5cz1k YXJ3aW4gOzsKICAgICAgKi1taW5ndyogKQoJCW9wc3lzPW1pbmd3CgkJIyBNaW5HVyBvdmVycmlk ZXMgYW5kIGFkZHMgc29tZSBzeXN0ZW0gaGVhZGVycyBpbiBudC9pbmMuCgkJR0NDX1RFU1RfT1BU SU9OUz0iLUkgJHNyY2Rpci9udC9pbmMiCgkJOzsKICAgICAgKi1zeXN2NC4ydXcqICkJICAJb3Bz eXM9dW5peHdhcmUgOzsKICAgICAgKi1zeXN2NXV3KiApCSAgCW9wc3lzPXVuaXh3YXJlIDs7CiAg ICAgICotc3lzdjVPcGVuVU5JWCogKSAgCW9wc3lzPXVuaXh3YXJlIDs7CiAgICAgICMjIE90aGVy d2lzZSwgd2UnbGwgZmFsbCB0aHJvdWdoIHRvIHRoZSBnZW5lcmljIG9wc3lzIGNvZGUgYXQgdGhl IGJvdHRvbS4KICAgIGVzYWMKICA7OwoKICAjIE1pbkdXNjQKICB4ODZfNjQtKi0qICkKICAgIGNh c2UgIiR7Y2Fub25pY2FsfSIgaW4KICAgICAgKi1taW5ndyogKQoJCW9wc3lzPW1pbmd3CgkJIyBN aW5HVyBvdmVycmlkZXMgYW5kIGFkZHMgc29tZSBzeXN0ZW0gaGVhZGVycyBpbiBudC9pbmMuCgkJ R0NDX1RFU1RfT1BUSU9OUz0iLUkgJHNyY2Rpci9udC9pbmMiCgkJOzsKICAgICAgIyMgT3RoZXJ3 aXNlLCB3ZSdsbCBmYWxsIHRocm91Z2ggdG8gdGhlIGdlbmVyaWMgb3BzeXMgY29kZSBhdCB0aGUg Ym90dG9tLgogICAgZXNhYwogIDs7CgogICogKQogICAgdW5wb3J0ZWQ9eWVzCiAgOzsKZXNhYwoK IyMjIElmIHRoZSBjb2RlIGFib3ZlIGRpZG4ndCBjaG9vc2UgYW4gb3BlcmF0aW5nIHN5c3RlbSwg anVzdCBjaG9vc2UKIyMjIGFuIG9wZXJhdGluZyBzeXN0ZW0gYmFzZWQgb24gdGhlIGNvbmZpZ3Vy YXRpb24gbmFtZS4gIFlvdSByZWFsbHkKIyMjIG9ubHkgd2FudCB0byB1c2UgdGhpcyB3aGVuIHlv dSBoYXZlIG5vIGlkZWEgd2hhdCB0aGUgcmlnaHQKIyMjIG9wZXJhdGluZyBzeXN0ZW0gaXM7IGlm IHlvdSBrbm93IHdoYXQgb3BlcmF0aW5nIHN5c3RlbXMgYSBtYWNoaW5lCiMjIyBydW5zLCBpdCdz IGNsZWFuZXIgdG8gbWFrZSBpdCBleHBsaWNpdCBpbiB0aGUgY2FzZSBzdGF0ZW1lbnQKIyMjIGFi b3ZlLgppZiB0ZXN0IHgiJHtvcHN5c30iID0geDsgdGhlbgogIGNhc2UgIiR7Y2Fub25pY2FsfSIg aW4KICAgICotZ251KiApCQkJCW9wc3lzPWdudSA7OwogICAgKiApCiAgICAgIHVucG9ydGVkPXll cwogICAgOzsKICBlc2FjCmZpCgpdCmRubCBxdW90YXRpb24gZW5kcwoKaWYgdGVzdCAkdW5wb3J0 ZWQgPSB5ZXM7IHRoZW4KICBBQ19NU0dfRVJST1IoW0VtYWNzIGRvZXMgbm90IHN1cHBvcnQgYCR7 Y2Fub25pY2FsfScgc3lzdGVtcy4KSWYgeW91IHRoaW5rIGl0IHNob3VsZCwgcGxlYXNlIHNlbmQg YSByZXBvcnQgdG8gJHtQQUNLQUdFX0JVR1JFUE9SVH0uCkNoZWNrIGBldGMvTUFDSElORVMnIGZv ciByZWNvZ25pemVkIGNvbmZpZ3VyYXRpb24gbmFtZXMuXSkKZmkKCgojIyMjIENob29zZSBhIGNv bXBpbGVyLgoKZG5sIERvbid0IGJvdGhlciB0byB0ZXN0IGZvciBDODkuCkFDX0RFRlVOKFtfQUNf UFJPR19DQ19DODldLCBbJDJdKQoKZG5sIFNldHMgR0NDPXllcyBpZiB1c2luZyBnY2MuCkFDX1BS T0dfQ0MoW2djYyBjYyBjbCBjbGFuZyAiJFhDUlVOIGdjYyIgIiRYQ1JVTiBjbGFuZyJdKQppZiB0 ZXN0IC1uICIkWENSVU4iOyB0aGVuCiAgQUNfQ0hFQ0tfUFJPR1MoQVIsIFthciAiJFhDUlVOIGFy Il0pCiAgdGVzdCAtbiAiJEFSIiAmJiBleHBvcnQgQVIKZmkKCmRubCBFbWFjcyBuZWVkcyBDOTkg b3IgbGF0ZXIuCmdsX1BST0dfQ0NfQzk5CgpBTV9QUk9HX0NDX0NfTwoKaWYgdGVzdCB4JEdDQyA9 IHh5ZXM7IHRoZW4KICB0ZXN0ICJ4JEdDQ19URVNUX09QVElPTlMiICE9IHggJiYgQ0M9IiRDQyAk R0NDX1RFU1RfT1BUSU9OUyIKZWxzZQogIHRlc3QgIngkTk9OX0dDQ19URVNUX09QVElPTlMiICE9 IHggJiYgQ0M9IiRDQyAkTk9OX0dDQ19URVNUX09QVElPTlMiCmZpCgpkbmwgVGhpcyBpcyB1c2Vk IGluIGxpYi9NYWtlZmlsZS5hbSB0byB1c2UgbnQvZ251bGliLm1rLCB0aGUKZG5sIGFsdGVybmF0 aXZlIHRvIGxpYi9nbnVsaWIubWssIHNvIGFzIHRvIGF2b2lkIGdlbmVyYXRpbmcgaGVhZGVyIGZp bGVzCmRubCB0aGF0IGNsYXNoIHdpdGggTWluR1cuCkFNX0NPTkRJVElPTkFMKFtCVUlMRElOR19G T1JfV0lORE9XU05UXSwgW3Rlc3QgIngkb3BzeXMiID0gInhtaW5ndyJdKQoKIyBBdm9pZCBnbnVs aWIncyB0ZXN0cyBmb3IgLWxjcnlwdG8sIHNvIHRoYXQgdGhlcmUncyBubyBzdGF0aWMgZGVwZW5k ZW5jeSBvbiBpdC4KQUNfREVGVU4oW2dsX0NSWVBUT19DSEVDS10pCiMgQXZvaWQgZ251bGliJ3Mg dGVzdHMgZm9yIEhBVkVfV09SS0lOR19PX05PQVRJTUUgYW5kIEhBVkVfV09SS0lOR19PX05PRk9M TE9XLAojIGFzIHdlIGRvbid0IHVzZSB0aGVtLgpBQ19ERUZVTihbZ2xfRkNOVExfT19GTEFHU10p CgojIEluaXRpYWxpemUgZ251bGliIHJpZ2h0IGFmdGVyIGNob29zaW5nIHRoZSBjb21waWxlci4K ZG5sIEFtb25nc3Qgb3RoZXIgdGhpbmdzLCB0aGlzIHNldHMgQVIgYW5kIEFSRkxBR1MuCmdsX0VB UkxZCgppZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiICE9IHNldDsgdGhlbgogICMgSXQncyBoZWxw ZnVsIHRvIGhhdmUgQyBtYWNyb3MgYXZhaWxhYmxlIHRvIEdEQiwgc28gcHJlZmVyIC1nMyB0byAt ZwogICMgaWYgLWczIHdvcmtzIGFuZCB0aGUgdXNlciBkb2VzIG5vdCBzcGVjaWZ5IENGTEFHUy4K ICAjIFRoaXMgdGVzdCBtdXN0IGZvbGxvdyBnbF9FQVJMWTsgb3RoZXJ3aXNlIEFDX0xJTktfSUZF TFNFIGNvbXBsYWlucy4KICBjYXNlICRDRkxBR1MgaW4KICAgICctZycpCiAgICAgIGVtYWNzX2cz X0NGTEFHUz0nLWczJzs7CiAgICAnLWcgLU8yJykKICAgICAgZW1hY3NfZzNfQ0ZMQUdTPSctZzMg LU8yJzs7CiAgICAqKQogICAgICBlbWFjc19nM19DRkxBR1M9Jyc7OwogIGVzYWMKICBpZiB0ZXN0 IC1uICIkZW1hY3NfZzNfQ0ZMQUdTIjsgdGhlbgogICAgZW1hY3Nfc2F2ZV9DRkxBR1M9JENGTEFH UwogICAgQ0ZMQUdTPSRlbWFjc19nM19DRkxBR1MKICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVy ICRDQyBhY2NlcHRzICRlbWFjc19nM19DRkxBR1NdLAogICAgICBbZW1hY3NfY3ZfcHJvZ19jY19n M10sCiAgICAgIFtBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKCldLAoJIFtlbWFjc19j dl9wcm9nX2NjX2czPXllc10sCgkgW2VtYWNzX2N2X3Byb2dfY2NfZzM9bm9dKV0pCiAgICBpZiB0 ZXN0ICRlbWFjc19jdl9wcm9nX2NjX2czICE9IHllczsgdGhlbgogICAgICBDRkxBR1M9JGVtYWNz X3NhdmVfQ0ZMQUdTCiAgICBmaQogICAgaWYgdGVzdCAkb3BzeXMgPSBtaW5ndzsgdGhlbgogICAg ICBDRkxBR1M9IiRDRkxBR1MgLWdkd2FyZi0yIgogICAgZmkKICBmaQoKICBjYXNlICRDRkxBR1Mg aW4KICAgICotTyopIDs7CiAgICAqKQogICAgICAjIE5vIG9wdGltaXphdGlvbiBmbGFnIHdhcyBp bmZlcnJlZCBmb3IgdGhpcyBub24tR0NDIGNvbXBpbGVyLgogICAgICAjIFRyeSAtTy4gIFRoaXMg aXMgbmVlZGVkIGZvciB4bGMgb24gQUlYOyBzZWUgQnVnIzE0MjU4LgogICAgICBlbWFjc19zYXZl X0NGTEFHUz0kQ0ZMQUdTCiAgICAgIHRlc3QgLXogIiRDRkxBR1MiIHx8IENGTEFHUz0iJENGTEFH UyAiCiAgICAgIENGTEFHUz0ke0NGTEFHU30tTwogICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhl ciAkQ0MgYWNjZXB0cyAtT10sCiAgICAgICAgW2VtYWNzX2N2X3Byb2dfY2Nfb10sCglbQUNfTElO S19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTSgpXSwKCSAgIFtlbWFjc19jdl9wcm9nX2NjX289eWVz XSwKCSAgIFtlbWFjc19jdl9wcm9nX2NjX289bm9dKV0pCiAgICAgIGlmIHRlc3QgJGVtYWNzX2N2 X3Byb2dfY2NfbyAhPSB5ZXM7IHRoZW4KCUNGTEFHUz0kZW1hY3Nfc2F2ZV9DRkxBR1MKICAgICAg ZmkgOzsKICBlc2FjCmZpCgpBQ19BUkdfRU5BQkxFKFtnY2Mtd2FybmluZ3NdLAogIFtBU19IRUxQ X1NUUklORyhbLS1lbmFibGUtZ2NjLXdhcm5pbmdzXSwKICAgICAgICAgICAgICAgICAgW3R1cm4g b24gbG90cyBvZiBHQ0Mgd2FybmluZ3MvZXJyb3JzLiBUaGlzIGlzIGludGVuZGVkIGZvcgoJCSAg IGRldmVsb3BlcnMsIGFuZCBtYXkgZ2VuZXJhdGUgZmFsc2UgYWxhcm1zIHdoZW4gdXNlZAoJCSAg IHdpdGggb2xkZXIgb3Igbm9uLUdOVSBkZXZlbG9wbWVudCB0b29scy5dKV0sCiAgW2Nhc2UgJGVu YWJsZXZhbCBpbgogICAgIHllc3xubykgOzsKICAgICAqKSAgICAgIEFDX01TR19FUlJPUihbYmFk IHZhbHVlICRlbmFibGV2YWwgZm9yIGdjYy13YXJuaW5ncyBvcHRpb25dKSA7OwogICBlc2FjCiAg IGdsX2djY193YXJuaW5ncz0kZW5hYmxldmFsXSwKICBbZ2xfZ2NjX3dhcm5pbmdzPW5vXQopCgoj IGNsYW5nIGlzIHVuZHVseSBwaWNreSBhYm91dCBzb21lIHRoaW5ncy4KQUNfQ0FDSEVfQ0hFQ0so W3doZXRoZXIgdGhlIGNvbXBpbGVyIGlzIGNsYW5nXSwgW2VtYWNzX2N2X2NsYW5nXSwKICBbQUNf Q09NUElMRV9JRkVMU0UoCiAgICAgW0FDX0xBTkdfUFJPR1JBTShbWwoJICAjaWZuZGVmIF9fY2xh bmdfXwoJICAgIGVycm9yICJub3QgY2xhbmciOwoJICAjZW5kaWYKICAgICAgICBdXSldLAogICAg IFtlbWFjc19jdl9jbGFuZz15ZXNdLAogICAgIFtlbWFjc19jdl9jbGFuZz1ub10pXSkKCiMgV2hl biBjb21waWxpbmcgd2l0aCBHQ0MsIHByZWZlciAtaXN5c3RlbSB0byAtSSB3aGVuIGluY2x1ZGlu ZyBzeXN0ZW0KIyBpbmNsdWRlIGZpbGVzLCB0byBhdm9pZCBnZW5lcmF0aW5nIHVzZWxlc3MgZGlh Z25vc3RpY3MgZm9yIHRoZSBmaWxlcy4KaWYgdGVzdCAiJGdsX2djY193YXJuaW5ncyIgIT0geWVz OyB0aGVuCiAgaXN5c3RlbT0nLUknCiAgaWYgdGVzdCAiJGVtYWNzX2N2X2NsYW5nIiA9IHllcwog IHRoZW4KICAgICAjIFR1cm4gb2ZmIHNvbWUgd2FybmluZ3MgaWYgc3VwcG9ydGVkLgogICAgIGds X1dBUk5fQUREKFstV25vLXN3aXRjaF0pCiAgICAgZ2xfV0FSTl9BREQoWy1Xbm8tdGF1dG9sb2dp Y2FsLWNvbnN0YW50LW91dC1vZi1yYW5nZS1jb21wYXJlXSkKICAgICBnbF9XQVJOX0FERChbLVdu by1wb2ludGVyLXNpZ25dKQogIGZpCmVsc2UKICBpc3lzdGVtPSctaXN5c3RlbSAnCgogICMgVGhp cywgJG53LCBpcyB0aGUgbGlzdCBvZiB3YXJuaW5ncyB3ZSBkaXNhYmxlLgogIG53PQoKICBjYXNl ICR3aXRoX3hfdG9vbGtpdCBpbgogICAgbHVjaWQgfCBhdGhlbmEgfCBtb3RpZikKICAgICAgICMg T2xkIHRvb2xraXRzIG1pc2hhbmRsZSAnY29uc3QnLgogICAgICAgbnc9IiRudyAtV3dyaXRlLXN0 cmluZ3MiCiAgICAgICA7OwogICAgKikKICAgICAgIGdsX1dBUk5fQUREKFstV2Vycm9yXSwgW1dF UlJPUl9DRkxBR1NdKQogICAgICAgOzsKICBlc2FjCiAgQUNfU1VCU1QoW1dFUlJPUl9DRkxBR1Nd KQoKICBudz0iJG53IC1Xc3lzdGVtLWhlYWRlcnMiICAgICAgICAgIyBEb24ndCBsZXQgc3lzdGVt IGhlYWRlcnMgdHJpZ2dlciB3YXJuaW5ncwogIG53PSIkbncgLVdvdmVybGVuZ3RoLXN0cmluZ3Mi ICAgICAjIE5vdCBhIHByb2JsZW0gdGhlc2UgZGF5cwogIG53PSIkbncgLVdsb2dpY2FsLW9wIiAg ICAgICAgICAgICAjIGFueSB1c2Ugb2YgZndyaXRlIHByb3Zva2VzIHRoaXMKICBudz0iJG53IC1X Zm9ybWF0LW5vbmxpdGVyYWwiICAgICAgIyB3ZSBkbyB0aGlzIGEgbG90CiAgbnc9IiRudyAtV3Zs YSIgICAgICAgICAgICAgICAgICAgICMgd2FybmluZ3MgaW4gZ2V0dGV4dC5oCiAgbnc9IiRudyAt V25lc3RlZC1leHRlcm5zIiAgICAgICAgICMgdXNlIG9mIFhBUkdNQVRDSC92ZXJpZnlfZnVuY3Rp b25fXwogIG53PSIkbncgLVdzd2l0Y2gtZGVmYXVsdCIgICAgICAgICAjIFRvbyBtYW55IHdhcm5p bmdzIGZvciBub3cKICBudz0iJG53IC1XaW5saW5lIiAgICAgICAgICAgICAgICAgIyBPSyB0byBp Z25vcmUgJ2lubGluZScKICBudz0iJG53IC1XanVtcC1taXNzZXMtaW5pdCIgICAgICAgIyBXZSBz b21ldGltZXMgc2FmZWx5IGp1bXAgb3ZlciBpbml0LgogIG53PSIkbncgLVdzdHJpY3Qtb3ZlcmZs b3ciICAgICAgICAjIE9LIHRvIG9wdGltaXplIGFzc3VtaW5nIHRoYXQKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBzaWduZWQgb3ZlcmZsb3cgaGFzIHVuZGVmaW5lZCBiZWhh dmlvcgogIG53PSIkbncgLVdzeW5jLW5hbmQiICAgICAgICAgICAgICAjIGlycmVsZXZhbnQgaGVy ZSwgYW5kIHByb3Zva2VzIE9iakMgd2FybmluZwogIG53PSIkbncgLVd1bnNhZmUtbG9vcC1vcHRp bWl6YXRpb25zIiAjIE9LIHRvIHN1cHByZXNzIHVuc2FmZSBvcHRpbWl6YXRpb25zCiAgbnc9IiRu dyAtV2JhZC1mdW5jdGlvbi1jYXN0IiAgICAgICMgVGhlc2UgY2FzdHMgYXJlIG5vIHdvcnNlIHRo YW4gb3RoZXJzLgoKICAjIEVtYWNzIGRvZXNuJ3QgY2FyZSBhYm91dCBzaGFkb3dpbmc7IHNlZQog ICMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9lbWFjcy1kaWZmcy8yMDExLTEx L21zZzAwMjY1Lmh0bWw+LgogIG53PSIkbncgLVdzaGFkb3ciCgogICMgRW1hY3MncyB1c2Ugb2Yg YWxsb2NhIGluaGliaXRzIHByb3RlY3RpbmcgdGhlIHN0YWNrLgogIG53PSIkbncgLVdzdGFjay1w cm90ZWN0b3IiCgogICMgVGhlIGZvbGxvd2luZyBsaW5lIHNob3VsZCBiZSByZW1vdmFibGUgYXQg c29tZSBwb2ludC4KICBudz0iJG53IC1Xc3VnZ2VzdC1hdHRyaWJ1dGU9cHVyZSIKCiAgIyBUaGlz IHBhcnQgaXMgbWVyZWx5IGZvciBzaG9ydGVuaW5nIHRoZSBjb21tYW5kIGxpbmUsCiAgIyBzaW5j ZSAtV25vLUZPTyBuZWVkcyB0byBiZSBhZGRlZCBiZWxvdyByZWdhcmRsZXNzLgogIG53PSIkbncg LVdtaXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyIKICBudz0iJG53IC1Xc3dpdGNoIgogIG53PSIk bncgLVd0eXBlLWxpbWl0cyIKICBudz0iJG53IC1XdW51c2VkLXBhcmFtZXRlciIKCiAgaWYgdGVz dCAkZW1hY3NfY3ZfY2xhbmcgPSB5ZXM7IHRoZW4KICAgIG53PSIkbncgLVdjYXN0LWFsaWduIgog IGZpCgogIGdsX01BTllXQVJOX0FMTF9HQ0MoW3dzXSkKICBnbF9NQU5ZV0FSTl9DT01QTEVNRU5U KFt3c10sIFskd3NdLCBbJG53XSkKICBmb3IgdyBpbiAkd3M7IGRvCiAgICBnbF9XQVJOX0FERChb JHddKQogIGRvbmUKICBnbF9XQVJOX0FERChbLVdyZWR1bmRhbnQtZGVjbHNdKSAgICAgIyBQcmVm ZXIgdGhpcywgYXMgd2UgZG9uJ3QgdXNlIEJpc29uLgogIGdsX1dBUk5fQUREKFstV25vLW1pc3Np bmctZmllbGQtaW5pdGlhbGl6ZXJzXSkgIyBXZSBuZWVkIHRoaXMgb25lCiAgZ2xfV0FSTl9BREQo Wy1Xbm8tc2lnbi1jb21wYXJlXSkgICAgICMgVG9vIG1hbnkgd2FybmluZ3MgZm9yIG5vdwogIGds X1dBUk5fQUREKFstV25vLXR5cGUtbGltaXRzXSkgICAgICAjIFRvbyBtYW55IHdhcm5pbmdzIGZv ciBub3cKICBnbF9XQVJOX0FERChbLVduby1zd2l0Y2hdKSAgICAgICAgICAgIyBUb28gbWFueSB3 YXJuaW5ncyBmb3Igbm93CiAgZ2xfV0FSTl9BREQoWy1Xbm8tdW51c2VkLXBhcmFtZXRlcl0pICMg VG9vIG1hbnkgd2FybmluZ3MgZm9yIG5vdwogIGdsX1dBUk5fQUREKFstV25vLWZvcm1hdC1ub25s aXRlcmFsXSkKCiAgIyBJbiBzcGl0ZSBvZiBleGNsdWRpbmcgLVdsb2dpY2FsLW9wIGFib3ZlLCBp dCBpcyBlbmFibGVkLCBhcyBvZgogICMgZ2NjIDQuNS4wIDIwMDkwNTE3LgogIGdsX1dBUk5fQURE KFstV25vLWxvZ2ljYWwtb3BdKQoKICAjIE1vcmUgdGhpbmdzIHRoYXQgY2xhbmcgaXMgdW5kdWx5 IHBpY2t5IGFib3V0LgogIGlmIHRlc3QgJGVtYWNzX2N2X2NsYW5nID0geWVzOyB0aGVuCiAgICBn bF9XQVJOX0FERChbLVduby1mb3JtYXQtZXh0cmEtYXJnc10pCiAgICBnbF9XQVJOX0FERChbLVdu by10YXV0b2xvZ2ljYWwtY29uc3RhbnQtb3V0LW9mLXJhbmdlLWNvbXBhcmVdKQogICAgZ2xfV0FS Tl9BREQoWy1Xbm8tdW51c2VkLWNvbW1hbmQtbGluZS1hcmd1bWVudF0pCiAgICBnbF9XQVJOX0FE RChbLVduby11bnVzZWQtdmFsdWVdKQogIGZpCgogIEFDX0RFRklORShbbGludF0sIFsxXSwgW0Rl ZmluZSB0byAxIGlmIHRoZSBjb21waWxlciBpcyBjaGVja2luZyBmb3IgbGludC5dKQogIEFIX1ZF UkJBVElNKFtGT1JUSUZZX1NPVVJDRV0sCiAgWy8qIEVuYWJsZSBjb21waWxlLXRpbWUgYW5kIHJ1 bi10aW1lIGJvdW5kcy1jaGVja2luZywgYW5kIHNvbWUgd2FybmluZ3MsCiAgICAgIHdpdGhvdXQg dXBzZXR0aW5nIGdsaWJjIDIuMTUrLiAqLwogICAjaWYgIWRlZmluZWQgX0ZPUlRJRllfU09VUkNF ICYmIGRlZmluZWQgX19PUFRJTUlaRV9fICYmIF9fT1BUSU1JWkVfXwogICAjIGRlZmluZSBfRk9S VElGWV9TT1VSQ0UgMgogICAjZW5kaWYKICBdKQogIEFDX0RFRklORShbR05VTElCX1BPUlRDSEVD S10sIFsxXSwgW2VuYWJsZSBzb21lIGdudWxpYiBwb3J0YWJpbGl0eSBjaGVja3NdKQoKICAjIFdl IHVzZSBhIHNsaWdodGx5IHNtYWxsZXIgc2V0IG9mIHdhcm5pbmcgb3B0aW9ucyBmb3IgbGliLy4K ICAjIFJlbW92ZSB0aGUgZm9sbG93aW5nIGFuZCBzYXZlIHRoZSByZXN1bHQgaW4gR05VTElCX1dB Uk5fQ0ZMQUdTLgogIG53PQogIG53PSIkbncgLVd1bnVzZWQtbWFjcm9zIgoKICBnbF9NQU5ZV0FS Tl9DT01QTEVNRU5UKFtHTlVMSUJfV0FSTl9DRkxBR1NdLCBbJFdBUk5fQ0ZMQUdTXSwgWyRud10p CiAgQUNfU1VCU1QoW0dOVUxJQl9XQVJOX0NGTEFHU10pCmZpCgplZGl0X2NmbGFncz0iCiAgcywv Ly8qLC8sZwogIHMvXi8gLwogIHMvIC1JLyAkaXN5c3RlbS9nCiAgcy9eIC8vCiIKCkFDX0FSR19F TkFCTEUobGluay10aW1lLW9wdGltaXphdGlvbiwKW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1s aW5rLXRpbWUtb3B0aW1pemF0aW9uXSwKICAgICAgICAgICAgICAgIFtidWlsZCBlbWFjcyB3aXRo IGxpbmstdGltZSBvcHRpbWl6YXRpb24uCgkJIFRoaXMgcmVxdWlyZXMgR0NDIDQuNS4wIG9yIGxh dGVyLCBvciBjbGFuZy4KCQkgKE5vdGUgdGhhdCBjbGFuZyBzdXBwb3J0IGlzIGV4cGVyaW1lbnRh bCAtIHNlZSBJTlNUQUxMLikKCQkgSXQgYWxzbyBtYWtlcyBFbWFjcyBoYXJkZXIgdG8gZGVidWcs IGFuZCB3aGVuIHdlIHRyaWVkIGl0CgkJIHdpdGggR0NDIDQuOS4wIHg4Ni02NCBpdCBtYWRlIEVt YWNzIHNsb3dlciwgc28gaXQncyBub3QKCQkgcmVjb21tZW5kZWQgZm9yIHR5cGljYWwgdXNlLl0p XSwKaWYgdGVzdCAiJHtlbmFibGV2YWx9IiAhPSAibm8iOyB0aGVuCiAgIGFjX2x0b19zdXBwb3J0 ZWQ9bm8KICAgaWYgdGVzdCAkZW1hY3NfY3ZfY2xhbmcgPSB5ZXM7IHRoZW4KICAgICAgQUNfTVNH X0NIRUNLSU5HKFt3aGV0aGVyIGxpbmstdGltZSBvcHRpbWl6YXRpb24gaXMgc3VwcG9ydGVkIGJ5 IGNsYW5nXSkKICAgICAgR09MRF9QTFVHSU49YCRDQyAtcHJpbnQtZmlsZS1uYW1lPUxMVk1nb2xk LnNvIDI+L2Rldi9udWxsYAogICAgICBpZiB0ZXN0IC14ICIkR09MRF9QTFVHSU4iOyB0aGVuCgkg TFRPPSItZmx0byIKICAgICAgZmkKICAgZWxpZiB0ZXN0IHgkR0NDID0geHllczsgdGhlbgogICAg ICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgbGluay10aW1lIG9wdGltaXphdGlvbiBpcyBzdXBw b3J0ZWQgYnkgZ2NjXSkKICAgICAgQ1BVUz1gZ2V0Y29uZiBfTlBST0NFU1NPUlNfT05MTiAyPi9k ZXYvbnVsbGAKICAgICAgaWYgdGVzdCB4JENQVVMgIT0geDsgdGhlbgoJIExUTz0iLWZsdG89JENQ VVMiCiAgICAgIGVsc2UKCSBMVE89Ii1mbHRvIgogICAgICBmaQogICBlbHNlCiAgICAgIEFDX01T R19FUlJPUihbTGluay10aW1lIG9wdGltaXphdGlvbiBpcyBub3Qgc3VwcG9ydGVkIHdpdGggeW91 ciBjb21waWxlci5dKQogICBmaQogICBpZiB0ZXN0IC16ICIkTFRPIjsgdGhlbgogICAgICBhY19s dG9fc3VwcG9ydGVkPW5vCiAgIGVsc2UKICAgICAgb2xkX0NGTEFHUz0kQ0ZMQUdTCiAgICAgIENG TEFHUz0iJENGTEFHUyAkTFRPIgogICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9H UkFNKFtbXV0sIFtbXV0pXSwKICAgICAgICAgW2FjX2x0b19zdXBwb3J0ZWQ9eWVzXSwgW2FjX2x0 b19zdXBwb3J0ZWQ9bm9dKQogICAgICAgICBDRkxBR1M9IiRvbGRfQ0ZMQUdTIgogICBmaQogICBB Q19NU0dfUkVTVUxUKFskYWNfbHRvX3N1cHBvcnRlZF0pCiAgIGlmIHRlc3QgIiRhY19sdG9fc3Vw cG9ydGVkIiA9ICJ5ZXMiOyB0aGVuCiAgICAgIENGTEFHUz0iJENGTEFHUyAkTFRPIgogICAgICBp ZiB0ZXN0IHgkZW1hY3NfY3ZfY2xhbmcgPSB4eWVzOyB0aGVuCgkgQUNfTVNHX1dBUk4oW1BsZWFz ZSByZWFkIElOU1RBTEwgYmVmb3JlIHVzaW5nIGxpbmstdGltZSBvcHRpbWl6YXRpb24gd2l0aCBj bGFuZ10pCgkgIyBXQVJOSU5HOiAnYXIgLS1wbHVnaW4gLi4uJyBkb2Vzbid0IHdvcmsgd2l0aG91 dAoJICMgY29tbWFuZCwgc28gcGx1Z2luIG5hbWUgaXMgYXBwZW5kZWQgdG8gQVJGTEFHUy4KCSBB UkZMQUdTPSJjcnUgLS1wbHVnaW4gJEdPTERfUExVR0lOIgoJIFJBTkxJQj0iJFJBTkxJQiAtLXBs dWdpbiAkR09MRF9QTFVHSU4iCiAgICAgIGVsc2UKICAgICAgICBkbmwgVGhlIGZvbGxvd2luZyBp cyBuZWVkZWQgZm9yIEdDQyA0LjkuMC4gIFRoZSBHQ0MgNC45LjAgcmVsZWFzZSBub3RlcwogICAg ICAgIGRubCBzdWdnZXN0IHRoYXQgaW5zdGVhZCBvZiAtZmZhdC1sdG8tb2JqZWN0cyB3ZSBzaG91 bGQgdXNlIGdjYy1hciBhbmQKICAgICAgICBkbmwgZ2NjLXJhbmxpYiBpbiBwbGFjZSBvZiBhciBh bmQgcmFubGliLCBidXQgZ2NjLWFyIG1ha2VzIC91c3IvYmluL2FyCiAgICAgICAgZG5sIGR1bXAg Y29yZSBvbiBGZWRvcmEgMjAsIHNvIHBsYXkgaXQgc2FmZSBmb3Igbm93LgogICAgICAgIGdsX0NP TVBJTEVSX09QVElPTl9JRihbLWZmYXQtbHRvLW9iamVjdHNdLAogICAgICAgICAgW0NGTEFHUz0i JENGTEFHUyAtZmZhdC1sdG8tb2JqZWN0cyJdKQogICAgICBmaQogICBmaQpmaSkKCmRubCBTb21l IG90aGVyIG5pY2UgYXV0b2NvbmYgdGVzdHMuCmRubCBUaGVzZSBhcmUgY29tbWVudGVkIG91dCwg c2luY2UgZ2xfRUFSTFkgYW5kL29yIEF1dG9jb25mIGFscmVhZHkgZG9lcyB0aGVtLgpkbmwgQUNf UFJPR19JTlNUQUxMCmRubCBBQ19QUk9HX01LRElSX1AKZG5sIGlmIHRlc3QgIngkUkFOTElCIiA9 IHg7IHRoZW4KZG5sICAgQUNfUFJPR19SQU5MSUIKZG5sIGZpCgoKZG5sIFNhZGx5LCBBQ19QUk9H X0xOX1MgaXMgdG9vIHJlc3RyaWN0aXZlLiAgSXQgYWxzbyB0ZXN0cyB3aGV0aGVyIGxpbmtzCmRu bCBjYW4gYmUgbWFkZSB0byBkaXJlY3Rvcmllcy4gIFRoaXMgaXMgbm90IHJlbGV2YW50IGZvciBv dXIgdXNhZ2UsIGFuZApkbmwgZXhjbHVkZXMgc29tZSBjYXNlcyB0aGF0IHdvcmsgZmluZSBmb3Ig dXMuICBFZyBNUyBXaW5kb3dzIG9yIGZpbGVzCmRubCBob3N0ZWQgb24gQUZTLCBib3RoIGV4YW1w bGVzIHdoZXJlIHNpbXBsZSBsaW5rcyB3b3JrLCBidXQgbGlua3MgdG8KZG5sIGRpcmVjdG9yaWVz IGZhaWwuICBXZSB1c2UgYSBjdXQtZG93biB2ZXJzaW9uIGluc3RlYWQuCmRubCBBQ19QUk9HX0xO X1MKCkFDX01TR19DSEVDS0lORyhbd2hldGhlciBsbiAtcyB3b3JrcyBmb3IgZmlsZXMgaW4gdGhl IHNhbWUgZGlyZWN0b3J5XSkKcm0gLWYgY29uZiQkIGNvbmYkJC5maWxlCgpMTl9TX0ZJTEVPTkxZ PSdjcCAtcCcKCmRubCBPbiBNaW5HVywgZW5zdXJlIHdlIHdpbGwgY2FsbCB0aGUgTVNZUyAvYmlu L2xuLmV4ZSwgbm90IHNvbWUKZG5sIHJhbmRvbSBwcm9ncmFtIGluIHRoZSBjdXJyZW50IGRpcmVj dG9yeS4KaWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgogIGlmIGxuIC1z IGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgogICAgaWYgdGVzdCAiJG9wc3lz IiA9ICJtaW5ndyI7IHRoZW4KICAgICAgTE5fU19GSUxFT05MWT0nL2Jpbi9sbiAtcycKICAgIGVs c2UKICAgICAgTE5fU19GSUxFT05MWT0nbG4gLXMnCiAgICBmaQogIGVsaWYgbG4gY29uZiQkLmZp bGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCiAgICBpZiB0ZXN0ICIkb3BzeXMiID0gIm1pbmd3 IjsgdGhlbgogICAgICBMTl9TX0ZJTEVPTkxZPS9iaW4vbG4KICAgIGVsc2UKICAgICAgTE5fU19G SUxFT05MWT1sbgogICAgZmkKICBmaQpmaQoKcm0gLWYgY29uZiQkIGNvbmYkJC5maWxlCgppZiB0 ZXN0ICIkTE5fU19GSUxFT05MWSIgPSAibG4gLXMiOyB0aGVuCiAgIEFDX01TR19SRVNVTFQoW3ll c10pCmVsc2UKICAgQUNfTVNHX1JFU1VMVChbbm8sIHVzaW5nICRMTl9TX0ZJTEVPTkxZXSkKZmkK CkFDX1NVQlNUKExOX1NfRklMRU9OTFkpCgoKZG5sIEFDX1BST0dfTE5fUyBzZXRzIExOX1MgdG8g J2NwIC1wUicgZm9yIE1pbkdXLCBvbiB0aGUgcHJlbWlzZSB0aGF0ICdsbicKZG5sIGRvZXNuJ3Qg c3VwcG9ydCBsaW5rcyB0byBkaXJlY3RvcmllcywgYXMgaW4gImxuIGZpbGUgZGlyIi4gIEJ1dCB0 aGF0CmRubCB1c2UgaXMgbm9uLXBvcnRhYmxlLCBhbmQgT1RPSCBNaW5HVyB3YW50cyB0byB1c2Ug aGFyZCBsaW5rcyBmb3IgRW1hY3MKZG5sIGV4ZWN1dGFibGVzIGF0ICJtYWtlIGluc3RhbGwiIHRp bWUuCmRubCBTZWUgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2VtYWNzLWRldmVs LzIwMTMtMDQvbXNnMDA0NzUuaHRtbApkbmwgZm9yIG1vcmUgZGV0YWlscy4KaWYgdGVzdCAiJG9w c3lzIiA9ICJtaW5ndyI7IHRoZW4KICBMTl9TPSIvYmluL2xuIgpmaQoKZG5sIE9uIHNvbWUgRGVi aWFuIHZlcnNpb25zLCAiaW5zdGFsbC1pbmZvIiBwcmludHMgaXJyaXRhdGluZyBtZXNzYWdlcwpk bmwgIlRoaXMgaXMgbm90IGRwa2cgaW5zdGFsbC1pbmZvIGFueW1vcmUsIGJ1dCBHTlUgaW5zdGFs bC1pbmZvIgpkbmwgaWYgY2FsbGVkIHZpYSBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUuCmRubCBVc2Ug dGhlIGVudGlyZWx5LWlkZW50aWNhbC1idXQtcXVpZXRlciBnaW5zdGFsbC1pbmZvIGluc3RlYWQg aWYgcHJlc2VudC4KZG5sIFNhZGx5IHNvbWUgcGVvcGxlIG1heSBoYXZlIGFuIG9sZCBnaW5zdGFs bC1pbmZvIGluc3RhbGxlZCBvbgpkbmwgbm9uLURlYmlhbiBzeXN0ZW1zLCBzbyB3ZSBjYW4ndCB1 c2UgdGhpcy4KZG5sIEFDX1BBVEhfUFJPR1MoSU5TVEFMTF9JTkZPLCBbZ2luc3RhbGwtaW5mbyBp bnN0YWxsLWluZm9dLCA6LApkbmwgICAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3Ivc2JpbiRQQVRI X1NFUEFSQVRPUi9zYmluKQoKQUNfUEFUSF9QUk9HKElOU1RBTExfSU5GTywgaW5zdGFsbC1pbmZv LCA6LAogICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci9zYmluJFBBVEhfU0VQQVJBVE9SL3NiaW4p CmRubCBEb24ndCB1c2UgR1pJUCwgd2hpY2ggaXMgdXNlZCBieSBnemlwIGZvciBhZGRpdGlvbmFs IHBhcmFtZXRlcnMuCkFDX1BBVEhfUFJPRyhHWklQX1BST0csIGd6aXApCgp0ZXN0ICR3aXRoX2Nv bXByZXNzX2luc3RhbGwgIT0geWVzICYmIHRlc3QgLW4gIiRHWklQX1BST0ciICYmIFwKICAgR1pJ UF9QUk9HPSIgIyAkR1pJUF9QUk9HICMgKGRpc2FibGVkIGJ5IGNvbmZpZ3VyZSAtLXdpdGhvdXQt Y29tcHJlc3MtaW5zdGFsbCkiCgppZiB0ZXN0ICRvcHN5cyA9IGdudS1saW51eDsgdGhlbgogIEFD X1BBVEhfUFJPRyhQQVhDVEwsIHBheGN0bCwsCiAgICBbJFBBVEgkUEFUSF9TRVBBUkFUT1Ivc2Jp biRQQVRIX1NFUEFSQVRPUi91c3Ivc2Jpbl0pCiAgaWYgdGVzdCAiWCRQQVhDVEwiICE9IFg7IHRo ZW4KICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBiaW5hcmllcyBoYXZlIGEgUFRfUEFYX0ZM QUdTIGhlYWRlcl0pCiAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLCBbXSld LAogICAgICBbaWYgJFBBWENUTCAtdiBjb25mdGVzdCRFWEVFWFQgPi9kZXYvbnVsbCAyPiYxOyB0 aGVuIEFDX01TR19SRVNVTFQoeWVzKQogICAgICBlbHNlIEFDX01TR19SRVNVTFQobm8pOyBQQVhD VEw9IiI7IGZpXSkKICBmaQoKICBpZiB0ZXN0ICIke1NFVEZBVFRSK3NldH0iICE9IHNldDsgdGhl bgogICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzZXRmYXR0cl0sCiAgICAgIFtlbWFjc19jdl9wcm9n X3NldGZhdHRyXSwKICAgICAgW3RvdWNoIGNvbmZ0ZXN0LnRtcAogICAgICAgaWYgKHNldGZhdHRy IC1uIHVzZXIucGF4LmZsYWdzIGNvbmZ0ZXN0LnRtcCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCgkg ZW1hY3NfY3ZfcHJvZ19zZXRmYXR0cj15ZXMKICAgICAgIGVsc2UKCSBlbWFjc19jdl9wcm9nX3Nl dGZhdHRyPW5vCiAgICAgICBmaV0pCiAgICBpZiB0ZXN0ICIkZW1hY3NfY3ZfcHJvZ19zZXRmYXR0 ciIgPSB5ZXM7IHRoZW4KICAgICAgU0VURkFUVFI9c2V0ZmF0dHIKICAgIGVsc2UKICAgICAgU0VU RkFUVFI9CiAgICBmaQogICAgcm0gLWYgY29uZnRlc3QudG1wCiAgICBBQ19TVUJTVChbU0VURkFU VFJdKQogIGZpCmZpCgojIyBOZWVkIG1ha2VpbmZvID49IDQuNyAoPykgdG8gYnVpbGQgdGhlIG1h bnVhbHMuCkFDX1BBVEhfUFJPRyhNQUtFSU5GTywgbWFrZWluZm8sIG5vKQpkbmwgQnkgdGhpcyBz dGFnZSwgY29uZmlndXJlIGhhcyBhbHJlYWR5IGNoZWNrZWQgZm9yIGVncmVwIGFuZCBzZXQgRUdS RVAsCmRubCBvciBleGl0ZWQgd2l0aCBhbiBlcnJvciBpZiBubyBlZ3JlcCB3YXMgZm91bmQuCmlm IHRlc3QgIiRNQUtFSU5GTyIgIT0gIm5vIjsgdGhlbgogIGNhc2UgYAogICAgJE1BS0VJTkZPIC0t dmVyc2lvbiAyPiAvZGV2L251bGwgfAogICAgJEVHUkVQICd0ZXhpbmZvW1teMC05XV0qKFtbMS00 XV1bWzAtOV1dK3xbWzUtOV1dfDRcLltbNy05XV18NFwuW1sxLTZdXVtbMC05XV0rKScKICBgIGlu CiAgICAnJykgTUFLRUlORk89bm87OwogIGVzYWMKZmkKCiMjIE1ha2VpbmZvIGlzIHVudXN1YWwu ICBGb3IgYSByZWxlYXNlZCBFbWFjcywgdGhlIG1hbnVhbHMgYXJlCiMjIHByZS1idWlsdCwgYW5k IG5vdCBkZWxldGVkIGJ5IHRoZSBub3JtYWwgY2xlYW4gcnVsZXMuICBtYWtlaW5mbyBpcwojIyB0 aGVyZWZvcmUgaW4gdGhlIGNhdGVnb3J5IG9mICJzcGVjaWFsIHRvb2xzIiBub3Qgbm9ybWFsbHkg cmVxdWlyZWQsIHdoaWNoCiMjIGNvbmZpZ3VyZSBkb2VzIG5vdCBoYXZlIHRvIGNoZWNrIGZvciAo ZWcgYXV0b2NvbmYgaXRzZWxmKS4KIyMgSW4gYSByZXBvc2l0b3J5IGNoZWNrb3V0IG9uIHRoZSBv dGhlciBoYW5kLCB0aGUgbWFudWFscyBhcmUgbm90IGluY2x1ZGVkLgojIyBTbyBtYWtlaW5mbyBp cyBhIHJlcXVpcmVtZW50IHRvIGJ1aWxkIGZyb20gdGhlIHJlcG9zaXRvcnksIGFuZCBjb25maWd1 cmUKIyMgc2hvdWxkIHRlc3QgZm9yIGl0IGFzIGl0IGRvZXMgZm9yIGFueSBvdGhlciBidWlsZCBy ZXF1aXJlbWVudC4KIyMgV2UgdXNlIHRoZSBwcmVzZW5jZSBvZiAkc3JjZGlyL2luZm8vZW1hY3Mg dG8gZGlzdGluZ3Vpc2ggYSByZWxlYXNlLAojIyB3aXRoIHByZS1idWlsdCBtYW51YWxzLCBmcm9t IGEgcmVwb3NpdG9yeSBjaGVja291dC4KSEFWRV9NQUtFSU5GTz15ZXMKCmlmIHRlc3QgIiRNQUtF SU5GTyIgPSAibm8iOyB0aGVuCiAgTUFLRUlORk89bWFrZWluZm8KICBpZiB0ZXN0ICJ4JHt3aXRo X21ha2VpbmZvfSIgPSAieG5vIjsgdGhlbgogICAgSEFWRV9NQUtFSU5GTz1ubwogIGVsaWYgdGVz dCAhIC1lICIkc3JjZGlyL2luZm8vZW1hY3MiICYmIHRlc3QgISAtZSAiJHNyY2Rpci9pbmZvL2Vt YWNzLmluZm8iOyB0aGVuCiAgICBBQ19NU0dfRVJST1IoIFtZb3UgZG8gbm90IHNlZW0gdG8gaGF2 ZSBtYWtlaW5mbyA+PSA0LjcsIGFuZCB5b3VyCnNvdXJjZSB0cmVlIGRvZXMgbm90IHNlZW0gdG8g aGF2ZSBwcmUtYnVpbHQgbWFudWFscyBpbiB0aGUgYGluZm8nIGRpcmVjdG9yeS4KRWl0aGVyIGlu c3RhbGwgYSBzdWl0YWJsZSB2ZXJzaW9uIG9mIG1ha2VpbmZvLCBvciByZS1ydW4gY29uZmlndXJl CndpdGggdGhlIGAtLXdpdGhvdXQtbWFrZWluZm8nIG9wdGlvbiB0byBidWlsZCB3aXRob3V0IHRo ZSBtYW51YWxzLl0gKQogIGZpCmZpCkFDX1NVQlNUKEhBVkVfTUFLRUlORk8pCgppZiB0ZXN0ICRv cHN5cyA9IG1pbmd3OyB0aGVuCiAgIERPQ01JU0NfVzMyPWVmYXEtdzMyCmVsc2UKICAgRE9DTUlT Q19XMzI9CmZpCkFDX1NVQlNUKERPQ01JU0NfVzMyKQoKZG5sIEFkZCBvdXIgb3B0aW9ucyB0byBh Y19saW5rIG5vdywgYWZ0ZXIgaXQgaXMgc2V0IHVwLgoKaWYgdGVzdCB4JEdDQyA9IHh5ZXM7IHRo ZW4KICB0ZXN0ICJ4JEdDQ19MSU5LX1RFU1RfT1BUSU9OUyIgIT0geCAmJiBcCiAgICBhY19saW5r PSIkYWNfbGluayAkR0NDX0xJTktfVEVTVF9PUFRJT05TIgplbHNlCiAgdGVzdCAieCROT05fR0ND X0xJTktfVEVTVF9PUFRJT05TIiAhPSB4ICYmIFwKICAgIGFjX2xpbms9IiRhY19saW5rICROT05f R0NDX0xJTktfVEVTVF9PUFRJT05TIgpmaQoKZG5sIFdlIG5lZWQgLXpub2NvbWJyZWxvYyBpZiB3 ZSdyZSB1c2luZyBhIHJlbGF0aXZlbHkgcmVjZW50IEdOVSBsZC4KZG5sIElmIHdlIGNhbiBsaW5r IHdpdGggdGhlIGZsYWcsIGl0IHNob3VsZG4ndCBkbyBhbnkgaGFybSBhbnlob3cuCmRubCAoRG9u J3QgdXNlIGAteiBub2NvbWJyZWxvYycgYXMgLXogdGFrZXMgbm8gYXJnIG9uIElyaXguKQpkbmwg VHJlYXQgR0NDIHNwZWNpYWxseSBzaW5jZSBpdCBqdXN0IGdpdmVzIGEgbm9uLWZhdGFsIGB1bnJl Y29nbml6ZWQgb3B0aW9uJwpkbmwgaWYgbm90IGJ1aWx0IHRvIHN1cHBvcnQgR05VIGxkLgoKZG5s IEZvciBhIGxvbmcgdGltZSwgLXpub2NvbWJyZWxvYyB3YXMgYWRkZWQgdG8gTERGTEFHUyByYXRo ZXIgdGhhbgpkbmwgTERfU1dJVENIX1NZU1RFTV9URU1BQ1MuICBUaGF0IGlzOgpkbmwgKiBpbmFw cHJvcHJpYXRlLCBhcyBMREZMQUdTIGlzIGEgdXNlciBvcHRpb24gYnV0IHRoaXMgaXMgZXNzZW50 aWFsLgpkbmwgICBFZyAibWFrZSBMREZMQUdTPS4uLiBhbGwiIGNvdWxkIHJ1biBpbnRvIHByb2Js ZW1zLApkbmwgICBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzY4NDc4OApkbmwgKiB1bm5lY2Vzc2Fy eSwgc2luY2UgdGVtYWNzIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgYWN0dWFsbHkgbmVlZHMgaXQu CmRubCAgIEluZGVlZCB0aGlzIGlzIHdoZXJlIGl0IHdhcyBvcmlnaW5hbGx5LCBwcmlvciB0bzoK ZG5sICAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2VtYWNzLXByZXRlc3QtYnVn LzIwMDQtMDMvbXNnMDAxNzAuaHRtbApsYXRlX0xERkxBR1M9IiRMREZMQUdTIgppZiB0ZXN0IHgk R0NDID0geHllczsgdGhlbgogIExERkxBR1NfTk9DT01CUkVMT0M9Ii1XbCwtem5vY29tYnJlbG9j IgplbHNlCiAgTERGTEFHU19OT0NPTUJSRUxPQz0iLXpub2NvbWJyZWxvYyIKZmkKCkxERkxBR1M9 IiRMREZMQUdTICRMREZMQUdTX05PQ09NQlJFTE9DIgoKQUNfTVNHX0NIRUNLSU5HKFtmb3IgLXpu b2NvbWJyZWxvY10pCkFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtdKV0sCiAg W0FDX01TR19SRVNVTFQoeWVzKV0sCiAgTERGTEFHU19OT0NPTUJSRUxPQz0KICBbQUNfTVNHX1JF U1VMVChubyldKQoKTERGTEFHUz0iJGxhdGVfTERGTEFHUyIKCkFDX0NBQ0hFX0NIRUNLKFt3aGV0 aGVyIGFkZHJlc3NlcyBhcmUgc2FuaXRpemVkXSwKICBbZW1hY3NfY3Zfc2FuaXRpemVfYWRkcmVz c10sCiAgW0FDX0NPTVBJTEVfSUZFTFNFKAogICAgIFtBQ19MQU5HX1BST0dSQU0oCglbWyNpZm5k ZWYgX19oYXNfZmVhdHVyZQoJICAjZGVmaW5lIF9faGFzX2ZlYXR1cmUoZikgMAoJICAjZW5kaWYK CSAgI2lmIGRlZmluZWQgX19TQU5JVElaRV9BRERSRVNTX18gfHwgX19oYXNfZmVhdHVyZSAoYWRk cmVzc19zYW5pdGl6ZXIpCgkgICNlbHNlCgkgICBlcnJvciAiQWRkcmVzc2VzIGFyZSBub3Qgc2Fu aXRpemVkLiI7CgkgICNlbmRpZgoJXV0pXSwKICAgICBbZW1hY3NfY3Zfc2FuaXRpemVfYWRkcmVz cz15ZXNdLAogICAgIFtlbWFjc19jdl9zYW5pdGl6ZV9hZGRyZXNzPW5vXSldKQoKZG5sIFRoZSBm dW5jdGlvbiBkdW1wLWVtYWNzIHdpbGwgbm90IGJlIGRlZmluZWQgYW5kIHRlbWFjcyB3aWxsIGRv CmRubCAobG9hZCAibG9hZHVwIikgYXV0b21hdGljYWxseSB1bmxlc3MgdG9sZCBvdGhlcndpc2Uu CnRlc3QgIngkQ0FOTk9UX0RVTVAiID0gIngiICYmIENBTk5PVF9EVU1QPW5vCmNhc2UgIiRvcHN5 cyIgaW4KICB5b3VyLW9wc3lzLWhlcmUpIENBTk5PVF9EVU1QPXllcyA7Owplc2FjCgppZiB0ZXN0 ICIkQ0FOTk9UX0RVTVAiID0gInllcyI7IHRoZW4KICBBQ19ERUZJTkUoQ0FOTk9UX0RVTVAsIDEs IFtEZWZpbmUgaWYgRW1hY3MgY2Fubm90IGJlIGR1bXBlZCBvbiB5b3VyIHN5c3RlbS5dKQplbGlm IHRlc3QgIiRlbWFjc19jdl9zYW5pdGl6ZV9hZGRyZXNzIiA9IHllczsgdGhlbgogIEFDX01TR19X QVJOKFtbQWRkcmVzc2VzIGFyZSBzYW5pdGl6ZWQ7IHN1Z2dlc3QgQ0FOTk9UX0RVTVA9eWVzXV0p CmZpCgpBQ19TVUJTVChDQU5OT1RfRFVNUCkKCgpVTkVYRUNfT0JKPXVuZXhlbGYubwpjYXNlICIk b3BzeXMiIGluCiAgIyBNU0RPUyB1c2VzIHVuZXhjb2ZmLm8KICBhaXg0LTIpCiAgIFVORVhFQ19P Qko9dW5leGFpeC5vCiAgIDs7CiAgY3lnd2luKQogICBVTkVYRUNfT0JKPXVuZXhjdy5vCiAgIDs7 CiAgZGFyd2luKQogICBVTkVYRUNfT0JKPXVuZXhtYWNvc3gubwogICA7OwogIGhwdXgxMC0yMCB8 IGhwdXgxMSkKICAgVU5FWEVDX09CSj11bmV4aHA5azgwMC5vCiAgIDs7CiAgbWluZ3cpCiAgIFVO RVhFQ19PQko9dW5leHczMi5vCiAgIDs7CiAgc29sMi0xMCkKICAgIyBVc2UgdGhlIFNvbGFyaXMg ZGxkdW1wKCkgZnVuY3Rpb24sIGNhbGxlZCBmcm9tIHVuZXhzb2wuYywgdG8gZHVtcAogICAjIGVt YWNzLCBpbnN0ZWFkIG9mIHRoZSBnZW5lcmljIEVMRiBkdW1wIGNvZGUgZm91bmQgaW4gdW5leGVs Zi5jLgogICAjIFRoZSByZXN1bHRpbmcgYmluYXJ5IGhhcyBhIGNvbXBsZXRlIHN5bWJvbCB0YWJs ZSwgYW5kIGlzIGJldHRlcgogICAjIGZvciBkZWJ1Z2dpbmcgYW5kIG90aGVyIG9ic2VydmFiaWxp dHkgdG9vbHMgKGRlYnVnZ2VycywgcHN0YWNrLCBldGMpLgogICAjCiAgICMgSWYgeW91IGVuY291 bnRlciBhIHByb2JsZW0gdXNpbmcgZGxkdW1wKCksIHBsZWFzZSBjb25zaWRlciBzZW5kaW5nCiAg ICMgYSBtZXNzYWdlIHRvIHRoZSBPcGVuU29sYXJpcyB0b29scy1saW5raW5nIG1haWxpbmcgbGlz dDoKICAgIyAgICAgIGh0dHA6Ly9tYWlsLm9wZW5zb2xhcmlzLm9yZy9tYWlsbWFuL2xpc3RpbmZv L3Rvb2xzLWxpbmtpbmcKICAgIwogICAjIEl0IGlzIGxpa2VseSB0aGF0IGRsZHVtcCgpIHdvcmtz IHdpdGggb2xkZXIgU29sYXJpcyB0b28sIGJ1dCB0aGlzIGhhcwogICAjIG5vdCBiZWVuIHRlc3Rl ZCwgc28gZm9yIG5vdyB0aGlzIGNoYW5nZSBpcyBmb3IgU29sYXJpcyAxMCBvciBuZXdlci4KICAg VU5FWEVDX09CSj11bmV4c29sLm8KICAgOzsKZXNhYwoKTERfU1dJVENIX1NZU1RFTT0KY2FzZSAi JG9wc3lzIiBpbgogIGZyZWVic2R8ZHJhZ29uZmx5KQogICAjIyBMZXQgYGxkJyBmaW5kIGltYWdl IGxpYnMgYW5kIHNpbWlsYXIgdGhpbmdzIGluIC91c3IvbG9jYWwvbGliLgogICAjIyBUaGUgc3lz dGVtIGNvbXBpbGVyLCBHQ0MsIGhhcyBhcHBhcmVudGx5IGJlZW4gbW9kaWZpZWQgdG8gbm90CiAg ICMjIGxvb2sgdGhlcmUsIGNvbnRyYXJ5IHRvIHdoYXQgYSBzdG9jayBHQ0Mgd291bGQgZG8uCiMj IyBJdCdzIG5vdCBvdXIgcGxhY2UgdG8gZG8gdGhpcy4gIFNlZSBidWcjMTAzMTMjMTcuCiMjIyAg IExEX1NXSVRDSF9TWVNURU09LUwvdXNyL2xvY2FsL2xpYgogICAgICA6CiAgIDs7CgogIGdudS1s aW51eCkKICAgIyMgY3BwIHRlc3Qgd2FzICJpZmRlZiBfX21pcHNfXyIsIGJ1dCBwcmVzdW1hYmx5 IHRoaXMgaXMgZXF1aXZhbGVudC4uLgogICBjYXNlICRob3N0X2NwdSBpbiBtaXBzKikgTERfU1dJ VENIX1NZU1RFTT0iLUcgMCI7OyBlc2FjCiAgIDs7CgogIG5ldGJzZCkKIyMjIEl0J3Mgbm90IG91 ciBwbGFjZSB0byBkbyB0aGlzLiAgU2VlIGJ1ZyMxMDMxMyMxNy4KIyMjICAgTERfU1dJVENIX1NZ U1RFTT0iLVdsLC1ycGF0aCwvdXNyL3BrZy9saWIgLUwvdXNyL3BrZy9saWIgLVdsLC1ycGF0aCwv dXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIgogICAgICA6CiAgIDs7CgogIG9wZW5ic2Qp CiAgICMjIEhhbiBCb2V0ZXMgPGhhbkBib2V0ZXMub3JnPiBzYXlzIHRoaXMgaXMgbmVjZXNzYXJ5 LAogICAjIyBvdGhlcndpc2UgRW1hY3MgZHVtcHMgY29yZSBvbiBlbGYgc3lzdGVtcy4KICAgTERf U1dJVENIX1NZU1RFTT0iLVoiCiAgIDs7CmVzYWMKQUNfU1VCU1QoTERfU1dJVENIX1NZU1RFTSkK CmFjX2xpbms9IiRhY19saW5rICRMRF9TV0lUQ0hfU1lTVEVNIgoKIyMgVGhpcyBzZXR0aW5nIG9m IExEX1NXSVRDSF9TWVNURU0gcmVmZXJlbmNlcyBMRF9TV0lUQ0hfWF9TSVRFX1JQQVRILAojIyB3 aGljaCBoYXMgbm90IGJlZW4gZGVmaW5lZCB5ZXQuICBXaGVuIHRoaXMgd2FzIGhhbmRsZWQgd2l0 aCBjcHAsCiMjIGl0IHdhcyBleHBhbmRlZCB0byBudWxsIHdoZW4gY29uZmlndXJlIHNvdXJjZWQg dGhlIHMvKi5oIGZpbGUuCiMjIFRodXMgTERfU1dJVENIX1NZU1RFTSBoYWQgZGlmZmVyZW50IHZh bHVlcyBpbiBjb25maWd1cmUgYW5kIHRoZSBNYWtlZmlsZXMuCiMjIEZJWE1FIGl0IHdvdWxkIGJl IGNsZWFuZXIgdG8gcHV0IHRoaXMgaW4gTERfU1dJVENIX1NZU1RFTV9URU1BQ1MKIyMgKG9yIHNv bWVzdWNoKSwgYnV0IGJlY2F1c2UgaXQgaXMgc3VwcG9zZWQgdG8gZ28gYXQgdGhlIF9mcm9udF8K IyMgb2YgTERfU1dJVENIX1NZU1RFTSwgd2UgY2Fubm90IGRvIHRoYXQgaW4gZXhhY3RseSB0aGUg c2FtZSB3YXkuCiMjIENvbXBhcmUgd2l0aCB0aGUgZ251LWxpbnV4IGNhc2UgYmVsb3csIHdoaWNo IGFkZGVkIHRvIHRoZSBlbmQKIyMgb2YgTERfU1dJVENIX1NZU1RFTSwgYW5kIHNvIGNhbiBpbnN0 ZWFkIGdvIGF0IHRoZSBmcm9udCBvZgojIyBMRF9TV0lUQ0hfU1lTVEVNX1RFTUFDUy4KY2FzZSAi JG9wc3lzIiBpbgogIG5ldGJzZHxvcGVuYnNkKQogICBMRF9TV0lUQ0hfU1lTVEVNPSJcJChMRF9T V0lUQ0hfWF9TSVRFX1JQQVRIKSAkTERfU1dJVENIX1NZU1RFTSIgOzsKZXNhYwoKCkNfU1dJVENI X01BQ0hJTkU9CmNhc2UgJGNhbm9uaWNhbCBpbgogYWxwaGEqKQogIEFDX0NIRUNLX0RFQ0woW19f RUxGX19dKQogIGlmIHRlc3QgIiRhY19jdl9oYXZlX2RlY2xfX19FTEZfXyIgPSAieWVzIjsgdGhl bgogICAgIyMgV2l0aCBFTEYsIG1ha2Ugc3VyZSB0aGF0IGFsbCBjb21tb24gc3ltYm9scyBnZXQg YWxsb2NhdGVkIHRvIGluIHRoZQogICAgIyMgZGF0YSBzZWN0aW9uLiAgT3RoZXJ3aXNlLCB0aGUg ZHVtcCBvZiB0ZW1hY3MgbWF5IG1pc3MgdmFyaWFibGVzIGluCiAgICAjIyB0aGUgc2hhcmVkIGxp YnJhcnkgdGhhdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQuICBGb3IgZXhhbXBsZSwgd2l0aAogICAg IyMgR05VIGxpYmMsIF9fbWFsbG9jX2luaXRpYWxpemVkIHdvdWxkIG5vcm1hbGx5IGJlIHJlc29s dmVkIHRvIHRoZQogICAgIyMgc2hhcmVkIGxpYnJhcnkncyAuYnNzIHNlY3Rpb24sIHdoaWNoIGlz IGZhdGFsLgogICAgaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCiAgICAgIENfU1dJVENI X01BQ0hJTkU9Ii1mbm8tY29tbW9uIgogICAgZWxzZQogICAgICBBQ19NU0dfRVJST1IoW05vbi1H Q0MgY29tcGlsZXJzIGFyZSBub3Qgc3VwcG9ydGVkLl0pCiAgICBmaQogIGVsc2UKICAgICAgZG5s IFRoaXMgd2FzIHRoZSB1bmV4YWxwaGEuYyBjYXNlLiAgUmVtb3ZlZCBpbiAyNC4xLCAyMDEwLTA3 LTI0LAogICAgICBkbmwgYWxiZWl0IHVuZGVyIHRoZSBtaXN0YWtlbiBhc3N1bXB0aW9uIHRoYXQg c2FpZCBmaWxlCiAgICAgIGRubCB3YXMgbm8gbG9uZ2VyIHVzZWQuCiAgICAgIEFDX01TR19FUlJP UihbTm9uLUVMRiBzeXN0ZW1zIGFyZSBub3Qgc3VwcG9ydGVkIHNpbmNlIEVtYWNzIDI0LjEuXSkK ICBmaQogIDs7CmVzYWMKQUNfU1VCU1QoQ19TV0lUQ0hfTUFDSElORSkKCkFDX1NVQlNUKFVORVhF Q19PQkopCgpDX1NXSVRDSF9TWVNURU09CiMjIFNvbWUgcHJvZ3JhbXMgaW4gc3JjIHByb2R1Y2Ug d2FybmluZ3Mgc2F5aW5nIGNlcnRhaW4gc3VicHJvZ3JhbXMKIyMgYXJlIHRvbyBjb21wbGV4IGFu ZCBuZWVkIGEgTUFYTUVNIHZhbHVlIGdyZWF0ZXIgdGhhbiAyMDAwIGZvcgojIyBhZGRpdGlvbmFs IG9wdGltaXphdGlvbi4gIC0tbmlsc0BleHAtbWF0aC51bmktZXNzZW4uZGUKdGVzdCAiJG9wc3lz IiA9ICJhaXg0LjIiICYmIHRlc3QgIngkR0NDIiAhPSAieHllcyIgJiYgXAogIENfU1dJVENIX1NZ U1RFTT0iLW1hIC1xbWF4bWVtPTQwMDAiCmlmIHRlc3QgIiRvcHN5cyIgPSAibWluZ3ciOyB0aGVu CiAgQ19TV0lUQ0hfU1lTVEVNPSItbXR1bmU9Z2VuZXJpYyIKZmkKIyMgZ251LWxpbnV4IG1pZ2h0 IG5lZWQgLURfQlNEX1NPVVJDRSBvbiBvbGQgbGliYzUgc3lzdGVtcy4KIyMgSXQgaXMgcmVkdW5k YW50IGluIGdsaWJjMiwgc2luY2Ugd2UgZGVmaW5lIF9HTlVfU09VUkNFLgpBQ19TVUJTVChDX1NX SVRDSF9TWVNURU0pCgoKTElCU19TWVNURU09CmNhc2UgIiRvcHN5cyIgaW4KICAjIyBJQk0ncyBY MTFSNSB1c2VzIC1sSU0gYW5kIC1saWNvbnYgaW4gQUlYIDMuMi4yLgogIGFpeDQtMikgTElCU19T WVNURU09Ii1scnRzIC1sSU0gLWxpY29udiIgOzsKCiAgZnJlZWJzZHxkcmFnb25mbHkpIExJQlNf U1lTVEVNPSItbHV0aWwiIDs7CgogIGhwdXgqKSBMSUJTX1NZU1RFTT0iLWw6bGliZGxkLnNsIiA7 OwoKICBzb2wyKikgTElCU19TWVNURU09Ii1sc29ja2V0IC1sbnNsIiA7OwoKICAjIyBNb3RpZiBu ZWVkcyAtbGdlbi4KICB1bml4d2FyZSkgTElCU19TWVNURU09Ii1sc29ja2V0IC1sbnNsIC1sZWxm IC1sZ2VuIiA7Owplc2FjCgpBQ19TVUJTVChMSUJTX1NZU1RFTSkKCiMjIyBNYWtlIHN1cmUgc3Vi c2VxdWVudCB0ZXN0cyB1c2UgZmxhZ3MgY29uc2lzdGVudCB3aXRoIHRoZSBidWlsZCBmbGFncy4K CmlmIHRlc3QgeCIke09WRVJSSURFX0NQUEZMQUdTfSIgIT0geDsgdGhlbgogIENQUEZMQUdTPSIk e09WRVJSSURFX0NQUEZMQUdTfSIKZWxzZQogIENQUEZMQUdTPSIkQ19TV0lUQ0hfU1lTVEVNICRD X1NXSVRDSF9NQUNISU5FICRDUFBGTEFHUyIKZmkKCiMgU3VwcHJlc3Mgb2Jzb2xlc2NlbnQgQXV0 b2NvbmYgdGVzdCBmb3Igc2l6ZV90OyBFbWFjcyBhc3N1bWVzIEM5OSBvciBiZXR0ZXIuCkFDX0RF RlVOKFtBQ19UWVBFX1NJWkVfVF0pCiMgTGlrZXdpc2UgZm9yIG9ic29sZXNjZW50IHRlc3QgZm9y IHVpZF90LCBnaWRfdDsgRW1hY3MgYXNzdW1lcyB0aGVtLgpBQ19ERUZVTihbQUNfVFlQRV9VSURf VF0pCgojIHNxcnQgYW5kIG90aGVyIGZsb2F0aW5nLXBvaW50IGZ1bmN0aW9ucyBzdWNoIGFzIGZt b2QgYW5kIGZyZXhwCiMgYXJlIGZvdW5kIGluIC1sbSBvbiBtYW55IHN5c3RlbXMuCk9MRF9MSUJT PSRMSUJTCkFDX1NFQVJDSF9MSUJTKFtzcXJ0XSwgW21dKQppZiB0ZXN0ICJYJExJQlMiID0gIlgk T0xEX0xJQlMiOyB0aGVuCiAgTElCX01BVEg9CmVsc2UKICBMSUJfTUFUSD0kYWNfY3Zfc2VhcmNo X3NxcnQKZmkKTElCUz0kT0xEX0xJQlMKCmRubCBDdXJyZW50IHBvc3NpYmlsaXRpZXMgaGFuZGxl ZCBieSBzZWQgKGFpeDQtMiAtPiBhaXgsCmRubCBnbnUtbGludXggLT4gZ251L2xpbnV4LCBldGMu KToKZG5sIGdudSwgZ251L2xpbnV4LCBnbnUva2ZyZWVic2QsIGFpeCwgY3lnd2luLCBkYXJ3aW4s IGhwdXgsIGlyaXguCmRubCBBbmQgc3BlY2lhbCBjYXNlczogYmVya2VsZXktdW5peCwgdXNnLXVu aXgtdiwgbXMtZG9zLCB3aW5kb3dzLW50LgpTWVNURU1fVFlQRT1gZWNobyAkb3BzeXMgfCBzZWQg LWUgJ3MvW1swLTldXS4qLy8nIC1lICdzfC18L3wnYAoKY2FzZSAkb3BzeXMgaW4KICBjeWd3aW4g KQogICAgTElCX01BVEg9CiAgICA7OwogIGRhcndpbiApCiAgICAjIyBBZGRpbmcgLWxtIGNvbmZ1 c2VzIHRoZSBkeW5hbWljIGxpbmtlciwgc28gb21pdCBpdC4KICAgIExJQl9NQVRIPQogICAgOzsK ICBmcmVlYnNkIHwgZHJhZ29uZmx5ICkKICAgIFNZU1RFTV9UWVBFPWJlcmtlbGV5LXVuaXgKICAg IDs7CiAgZ251LWxpbnV4IHwgZ251LWtmcmVlYnNkICkKICAgIDs7CiAgaHB1eDEwLTIwIHwgaHB1 eDExICkKICAgIDs7CiAgbWluZ3cgKQogICAgTElCX01BVEg9CiAgICBTWVNURU1fVFlQRT13aW5k b3dzLW50CiAgICA7OwogIGRubCBOQiB0aGlzIG1heSBiZSBhZGp1c3RlZCBiZWxvdy4KICBuZXRi c2QgfCBvcGVuYnNkICkKICAgIFNZU1RFTV9UWVBFPWJlcmtlbGV5LXVuaXgKICAgIDs7CgogIHNv bDIqIHwgdW5peHdhcmUgKQogICAgU1lTVEVNX1RZUEU9dXNnLXVuaXgtdgogICAgOzsKCmVzYWMK CkFDX1NVQlNUKExJQl9NQVRIKQpBQ19ERUZJTkVfVU5RVU9URUQoU1lTVEVNX1RZUEUsICIkU1lT VEVNX1RZUEUiLAogIFtUaGUgdHlwZSBvZiBzeXN0ZW0geW91IGFyZSBjb21waWxpbmcgZm9yOyBz ZXRzIGBzeXN0ZW0tdHlwZScuXSkKCgpwcmVfUEtHX0NPTkZJR19DRkxBR1M9JENGTEFHUwpwcmVf UEtHX0NPTkZJR19MSUJTPSRMSUJTCgpQS0dfUFJPR19QS0dfQ09ORklHKDAuOS4wKQoKZG5sIEVN QUNTX0NIRUNLX01PRFVMRVMoR1NUVUZGLCBndGsrLTIuMCA+PSAxLjMgZ2xpYiA9IDEuMy40KQpk bmwgYWN0cyBsaWtlIFBLR19DSEVDS19NT0RVTEVTKEdTVFVGRiwgZ3RrKy0yLjAgPj0gMS4zIGds aWIgPSAxLjMuNCwKZG5sIEhBVkVfR1NUVUZGPXllcywgSEFWRV9HU1RVRkY9bm8pIC0tIHNlZSBw a2ctY29uZmlnIG1hbiBwYWdlIC0tCmRubCBleGNlcHQgdGhhdCBpdCBwb3N0cHJvY2Vzc2VzIENG TEFHUyBhcyBuZWVkZWQgZm9yIC0tZW5hYmxlLWdjYy13YXJuaW5ncy4KZG5sIEVNQUNTX0NIRUNL X01PRFVMRVMgYWNjZXB0cyBvcHRpb25hbCAzcmQgYW5kIDR0aCBhcmd1bWVudHMgdGhhdApkbmwg Y2FuIHRha2UgdGhlIHBsYWNlIG9mIHRoZSBkZWZhdWx0IEhBVkVfR1NUVUZGPXllcyBhbmQgSEFW RV9HU1RVRkY9bm8KZG5sIGFjdGlvbnMuCkFDX0RFRlVOKFtFTUFDU19DSEVDS19NT0RVTEVTXSwK ICBbUEtHX0NIRUNLX01PRFVMRVMoWyQxXSwgWyQyXSwKICAgICBbJDFfQ0ZMQUdTPWBBU19FQ0hP KFsiJCQxX0NGTEFHUyJdKSB8IHNlZCAtZSAiJGVkaXRfY2ZsYWdzImAKICAgICAgbTRfZGVmYXVs dChbJDNdLCBbSEFWRV8kMT15ZXNdKV0sCiAgICAgW200X2RlZmF1bHQoWyQ0XSwgW0hBVkVfJDE9 bm9dKV0pXSkKCkhBVkVfU09VTkQ9bm8KaWYgdGVzdCAiJHt3aXRoX3NvdW5kfSIgIT0gIm5vIjsg dGhlbgogICMgU291bmQgc3VwcG9ydCBmb3IgR05VL0xpbnV4LCB0aGUgZnJlZSBCU0RzLCBhbmQg TWluR1cuCiAgQUNfQ0hFQ0tfSEVBREVSUyhbbWFjaGluZS9zb3VuZGNhcmQuaCBzeXMvc291bmRj YXJkLmggc291bmRjYXJkLmhdLAogICAgaGF2ZV9zb3VuZF9oZWFkZXI9eWVzLCBbXSwgWwogICAg I2lmZGVmIF9fTUlOR1czMl9fCiAgICAjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KICAgICNp bmNsdWRlIDx3aW5kb3dzLmg+CiAgICAjZW5kaWYKICAgIF0pCiAgdGVzdCAiJHt3aXRoX3NvdW5k fSIgPSAib3NzIiAmJiB0ZXN0ICIke2hhdmVfc291bmRfaGVhZGVyfSIgIT0gInllcyIgJiYgXAog ICAgQUNfTVNHX0VSUk9SKFtPU1Mgc291bmQgc3VwcG9ydCByZXF1ZXN0ZWQgYnV0IG5vdCBmb3Vu ZC5dKQoKICBpZiB0ZXN0ICIke3dpdGhfc291bmR9IiA9ICJic2Qtb3NzYXVkaW8iIHx8IHRlc3Qg IiR7d2l0aF9zb3VuZH0iID0gInllcyI7IHRoZW4KICAgICMgRW11bGF0aW9uIGxpYnJhcnkgdXNl ZCBvbiBOZXRCU0QuCiAgICBBQ19DSEVDS19MSUIob3NzYXVkaW8sIF9vc3NfaW9jdGwsIExJQlNP VU5EPS1sb3NzYXVkaW8sIExJQlNPVU5EPSkKICAgIHRlc3QgIiR7d2l0aF9zb3VuZH0iID0gImJz ZC1vc3NhdWRpbyIgJiYgdGVzdCAteiAiJExJQlNPVU5EIiAmJiBcCiAgICAgIEFDX01TR19FUlJP UihbYnNkLW9zc2F1ZGlvIHNvdW5kIHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBub3QgZm91bmQuXSkK ICAgIGRubCBGSVhNRT8gIElmIHdlIGRpZCBmaW5kIG9zc2F1ZGlvLCBzaG91bGQgd2Ugc2V0IHdp dGhfc291bmQ9YnNkLW9zc2F1ZGlvPwogICAgZG5sIFRyYWRpdGlvbmFsbHksIHdlIGdvIG9uIHRv IGNoZWNrIGZvciBhbHNhIHRvby4gIERvZXMgdGhhdCBtYWtlIHNlbnNlPwogIGZpCiAgQUNfU1VC U1QoTElCU09VTkQpCgogIGlmIHRlc3QgIiR7d2l0aF9zb3VuZH0iID0gImFsc2EiIHx8IHRlc3Qg IiR7d2l0aF9zb3VuZH0iID0gInllcyI7IHRoZW4KICAgIEFMU0FfUkVRVUlSRUQ9MS4wLjAKICAg IEFMU0FfTU9EVUxFUz0iYWxzYSA+PSAkQUxTQV9SRVFVSVJFRCIKICAgIEVNQUNTX0NIRUNLX01P RFVMRVMoW0FMU0FdLCBbJEFMU0FfTU9EVUxFU10pCiAgICBpZiB0ZXN0ICRIQVZFX0FMU0EgPSB5 ZXM7IHRoZW4KICAgICAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCiAgICAgIFNBVkVfTElCUz0iJExJ QlMiCiAgICAgIENGTEFHUz0iJEFMU0FfQ0ZMQUdTICRDRkxBR1MiCiAgICAgIExJQlM9IiRBTFNB X0xJQlMgJExJQlMiCiAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sj aW5jbHVkZSA8YXNvdW5kbGliLmg+XV0sIFtbc25kX2xpYl9lcnJvcl9zZXRfaGFuZGxlciAoMCk7 XV0pXSwKICAgICAgICAgICAgICAgICAgICAgIGVtYWNzX2Fsc2Ffbm9ybWFsPXllcywKICAJICAg ICAgICAgICAgZW1hY3NfYWxzYV9ub3JtYWw9bm8pCiAgICAgIGlmIHRlc3QgIiRlbWFjc19hbHNh X25vcm1hbCIgIT0geWVzOyB0aGVuCiAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdf UFJPR1JBTShbWyNpbmNsdWRlIDxhbHNhL2Fzb3VuZGxpYi5oPl1dLAogICAgICAgICAgICAgICAg ICAgICAgIFtbc25kX2xpYl9lcnJvcl9zZXRfaGFuZGxlciAoMCk7XV0pXSwKICAgICAgICAgICAg ICAgICAgICAgICBlbWFjc19hbHNhX3N1YmRpcj15ZXMsCiAgCSAgICAgICAgICAgICBlbWFjc19h bHNhX3N1YmRpcj1ubykKICAgICAgICBpZiB0ZXN0ICIkZW1hY3NfYWxzYV9zdWJkaXIiICE9IHll czsgdGhlbgogICAgICAgICAgQUNfTVNHX0VSUk9SKFtwa2ctY29uZmlnIGZvdW5kIGFsc2EsIGJ1 dCBpdCBkb2VzIG5vdCBjb21waWxlLiAgU2VlIGNvbmZpZy5sb2cgZm9yIGVycm9yIG1lc3NhZ2Vz Ll0pCiAgICAgICAgZmkKICAgICAgICBBTFNBX0NGTEFHUz0iJEFMU0FfQ0ZMQUdTIC1EQUxTQV9T VUJESVJfSU5DTFVERSIKICAgICAgZmkKCiAgICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgogICAg ICBMSUJTPSIkU0FWRV9MSUJTIgogICAgICBMSUJTT1VORD0iJExJQlNPVU5EICRBTFNBX0xJQlMi CiAgICAgIENGTEFHU19TT1VORD0iJENGTEFHU19TT1VORCAkQUxTQV9DRkxBR1MiCiAgICAgIEFD X0RFRklORShIQVZFX0FMU0EsIDEsIFtEZWZpbmUgdG8gMSBpZiBBTFNBIGlzIGF2YWlsYWJsZS5d KQogICAgZWxpZiB0ZXN0ICIke3dpdGhfc291bmR9IiA9ICJhbHNhIjsgdGhlbgogICAgICBBQ19N U0dfRVJST1IoW0FMU0Egc291bmQgc3VwcG9ydCByZXF1ZXN0ZWQgYnV0IG5vdCBmb3VuZC5dKQog ICAgZmkKICBmaSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgd2l0aF9zb3VuZCA9IGFs c2F8eWVzCgogIGRubCBEZWZpbmUgSEFWRV9TT1VORCBpZiB3ZSBoYXZlIHNvdW5kIHN1cHBvcnQu ICBXZSBrbm93IGl0IHdvcmtzIGFuZAogIGRubCBjb21waWxlcyBvbmx5IG9uIHRoZSBzcGVjaWZp ZWQgcGxhdGZvcm1zLiAgRm9yIG90aGVycywgaXQKICBkbmwgcHJvYmFibHkgZG9lc24ndCBtYWtl IHNlbnNlIHRvIHRyeS4KICBkbmwgRklYTUUgU28gc3VyZWx5IHdlIHNob3VsZCBieXBhc3MgdGhp cyB3aG9sZSBzZWN0aW9uIGlmIG5vdCB1c2luZwogIGRubCBvbmUgb2YgdGhlc2UgcGxhdGZvcm1z PwogIGlmIHRlc3QgeCRoYXZlX3NvdW5kX2hlYWRlciA9IHh5ZXMgfHwgdGVzdCAkSEFWRV9BTFNB ID0geWVzOyB0aGVuCiAgICAgY2FzZSAiJG9wc3lzIiBpbgogICAgICAgZG5sIGRlZmluZWQgX19G cmVlQlNEX18gfHwgZGVmaW5lZCBfX05ldEJTRF9fIHx8IGRlZmluZWQgX19saW51eF9fCiAgICAg ICBkbmwgQWRqdXN0IHRoZSAtLXdpdGgtc291bmQgaGVscCB0ZXh0IGlmIHlvdSBjaGFuZ2UgdGhp cy4KICAgICAgIGdudS1saW51eHxmcmVlYnNkfG5ldGJzZHxtaW5ndykKICAgICAgICAgQUNfREVG SU5FKEhBVkVfU09VTkQsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBzb3VuZCBzdXBwb3J0 Ll0pCiAgICAgICAgIEhBVkVfU09VTkQ9eWVzCiAgICAgICAgIDs7CiAgICAgZXNhYwogIGZpCgog IEFDX1NVQlNUKENGTEFHU19TT1VORCkKZmkKCmRubCBjaGVja3MgZm9yIGhlYWRlciBmaWxlcwpB Q19DSEVDS19IRUFERVJTX09OQ0UoCiAgc3lzL3N5c3RlbWluZm8uaAogIHN5cy9zeXNpbmZvLmgK ICBjb2ZmLmggcHR5LmgKICBzeXMvcmVzb3VyY2UuaAogIHN5cy91dHNuYW1lLmggcHdkLmggdXRt cC5oIHV0aWwuaCkKCkFDX01TR19DSEVDS0lORyhpZiBwZXJzb25hbGl0eSBMSU5VWDMyIGNhbiBi ZSBzZXQpCkFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3lz L3BlcnNvbmFsaXR5Lmg+XV0sIFtbcGVyc29uYWxpdHkgKFBFUl9MSU5VWDMyKV1dKV0sCiAgICAg ICAgICAgICAgIGVtYWNzX2N2X3BlcnNvbmFsaXR5X2xpbnV4MzI9eWVzLAoJICAgICAgIGVtYWNz X2N2X3BlcnNvbmFsaXR5X2xpbnV4MzI9bm8pCkFDX01TR19SRVNVTFQoJGVtYWNzX2N2X3BlcnNv bmFsaXR5X2xpbnV4MzIpCgppZiB0ZXN0ICRlbWFjc19jdl9wZXJzb25hbGl0eV9saW51eDMyID0g eWVzOyB0aGVuCiAgQUNfREVGSU5FKEhBVkVfUEVSU09OQUxJVFlfTElOVVgzMiwgMSwKICAgICAg ICAgICAgW0RlZmluZSB0byAxIGlmIHBlcnNvbmFsaXR5IExJTlVYMzIgY2FuIGJlIHNldC5dKQpm aQoKaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9zeXNfc3lzaW5mb19oIiA9IHllczsgdGhlbgogIEFD X01TR19DSEVDS0lORyhbaWYgTGludXggc3lzaW5mbyBtYXkgYmUgdXNlZF0pCiAgQUNfQ09NUElM RV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvc3lzaW5mby5oPl1dLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tzdHJ1Y3Qgc3lzaW5mbyBzaTsg c3lzaW5mbyAoJnNpKV1dKV0sCiAgICBlbWFjc19jdl9saW51eF9zeXNpbmZvPXllcywgZW1hY3Nf Y3ZfbGludXhfc3lzaW5mbz1ubykKICBBQ19NU0dfUkVTVUxUKCRlbWFjc19jdl9saW51eF9zeXNp bmZvKQogIGlmIHRlc3QgJGVtYWNzX2N2X2xpbnV4X3N5c2luZm8gPSB5ZXM7IHRoZW4KICAgIEFD X0RFRklORShbSEFWRV9MSU5VWF9TWVNJTkZPXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZl IExpbnV4IHN5c2luZm8gZnVuY3Rpb24uXSkKICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5H X1BST0dSQU0oW1sjaW5jbHVkZSA8c3lzL3N5c2luZm8uaD5dXSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgW1tzdHJ1Y3Qgc3lzaW5mbyBzaTsgcmV0dXJuIHNpLm1lbV91 bml0XV0pXSwKICAgICAgQUNfREVGSU5FKExJTlVYX1NZU0lORk9fVU5JVCwgMSwKICAgICAgICAg ICAgICAgIFtEZWZpbmUgdG8gMSBpZiBMaW51eCBzeXNpbmZvIHNpemVzIGFyZSBpbiBtdWx0aXBs ZXMgb2YgbWVtX3VuaXQgYnl0ZXMuXSkpCiAgZmkKZmkKCmRubCBPbiBTb2xhcmlzIDggdGhlcmUn cyBhIGNvbXBpbGF0aW9uIHdhcm5pbmcgZm9yIHRlcm0uaCBiZWNhdXNlCmRubCBpdCBkb2Vzbid0 IGRlZmluZSBgYm9vbCcuCkFDX0NIRUNLX0hFQURFUlModGVybS5oLCAsICwgLSkKQUNfSEVBREVS X1RJTUUKQUNfQ0hFQ0tfREVDTFMoW3N5c19zaWdsaXN0XSwgW10sIFtdLCBbWyNpbmNsdWRlIDxz aWduYWwuaD4KCQkJICAgICAgICAgICAgICBdXSkKaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N5 c19zaWdsaXN0ICE9IHllczsgdGhlbgogICMgRm9yIFRydTY0LCBhdCBsZWFzdDoKICBBQ19DSEVD S19ERUNMUyhbX19zeXNfc2lnbGlzdF0sIFtdLCBbXSwgW1sjaW5jbHVkZSA8c2lnbmFsLmg+CgkJ CSAgICAgICAgICAgICAgICAgIF1dKQpmaQpBQ19IRUFERVJfU1lTX1dBSVQKCkFDX0NIRUNLX0hF QURFUlNfT05DRShzeXMvc29ja2V0LmgpCkFDX0NIRUNLX0hFQURFUlMobmV0L2lmLmgsICwgLCBb QUNfSU5DTFVERVNfREVGQVVMVAojaWYgSEFWRV9TWVNfU09DS0VUX0gKI2luY2x1ZGUgPHN5cy9z b2NrZXQuaD4KI2VuZGlmXSkKQUNfQ0hFQ0tfSEVBREVSUyhpZmFkZHJzLmgsICwgLCBbQUNfSU5D TFVERVNfREVGQVVMVAojaWYgSEFWRV9TWVNfU09DS0VUX0gKI2luY2x1ZGUgPHN5cy9zb2NrZXQu aD4KI2VuZGlmXSkKQUNfQ0hFQ0tfSEVBREVSUyhuZXQvaWZfZGwuaCwgLCAsIFtBQ19JTkNMVURF U19ERUZBVUxUCiNpZiBIQVZFX1NZU19TT0NLRVRfSAojaW5jbHVkZSA8c3lzL3NvY2tldC5oPgoj ZW5kaWZdKQoKZG5sIGNoZWNrcyBmb3Igc3RydWN0dXJlIG1lbWJlcnMKQUNfQ0hFQ0tfTUVNQkVS Uyhbc3RydWN0IGlmcmVxLmlmcl9mbGFncywgc3RydWN0IGlmcmVxLmlmcl9od2FkZHIsCgkJICBz dHJ1Y3QgaWZyZXEuaWZyX25ldG1hc2ssIHN0cnVjdCBpZnJlcS5pZnJfYnJvYWRhZGRyLAoJCSAg c3RydWN0IGlmcmVxLmlmcl9hZGRyLAoJCSAgc3RydWN0IGlmcmVxLmlmcl9hZGRyLnNhX2xlbl0s ICwgLAoJCSBbQUNfSU5DTFVERVNfREVGQVVMVAojaWYgSEFWRV9TWVNfU09DS0VUX0gKI2luY2x1 ZGUgPHN5cy9zb2NrZXQuaD4KI2VuZGlmCiNpZiBIQVZFX05FVF9JRl9ICiNpbmNsdWRlIDxuZXQv aWYuaD4KI2VuZGlmXSkKCmRubCBDaGVjayBmb3IgZW5kaWFubmVzcy4KZG5sIEFDX0NfQklHRU5E SUFOIGlzIGRvbmUgYnkgZ251bGliLgoKZG5sIGNoZWNrIGZvciBNYWtlIGZlYXR1cmUKCkRFUEZM QUdTPQpNS0RFUERJUj0iOiIKZGVwc19mcmFnPWRlcHMubWsKZG5sIGNoZWNrIGlmIHdlIGhhdmUg R0NDIGFuZCBhdXRvZGVwZW5kIGlzIG9uLgppZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIk YWNfZW5hYmxlX2F1dG9kZXBlbmQiID0geWVzOyB0aGVuCiAgIEFDX01TR19DSEVDS0lORyhbd2hl dGhlciBnY2MgdW5kZXJzdGFuZHMgLU1NRCAtTUZdKQogICBTQVZFX0NGTEFHUz0iJENGTEFHUyIK ICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1NTUQgLU1GIGRlcHMuZCAtTVAiCiAgIEFDX0NPTVBJTEVfSUZF TFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tdXSldLCAsIGFjX2VuYWJsZV9hdXRvZGVwZW5k PW5vKQogICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKICAgdGVzdCAtZiBkZXBzLmQgfHwgYWNfZW5h YmxlX2F1dG9kZXBlbmQ9bm8KICAgcm0gLXJmIGRlcHMuZAogICBBQ19NU0dfUkVTVUxUKFskYWNf ZW5hYmxlX2F1dG9kZXBlbmRdKQogICBpZiB0ZXN0ICRhY19lbmFibGVfYXV0b2RlcGVuZCA9IHll czsgdGhlbgogICAgICBERVBGTEFHUz0nLU1NRCAtTUYgJHtERVBESVJ9LyQqLmQgLU1QJwogICAg ICAjIyBNS0RJUl9QIGlzIGRvY3VtZW50ZWQgKHNlZSBBQ19QUk9HX01LRElSX1ApIHRvIGJlIHBh cmFsbGVsLXNhZmUuCiAgICAgIE1LREVQRElSPScke01LRElSX1B9ICR7REVQRElSfScKICAgICAg ZGVwc19mcmFnPWF1dG9kZXBzLm1rCiAgIGZpCmZpCmx3bGliX2RlcHNfZnJhZz0kc3JjZGlyL2x3 bGliLyRkZXBzX2ZyYWcKb2xkeG1lbnVfZGVwc19mcmFnPSRzcmNkaXIvb2xkWE1lbnUvJGRlcHNf ZnJhZwpkZXBzX2ZyYWc9JHNyY2Rpci9zcmMvJGRlcHNfZnJhZwpBQ19TVUJTVChNS0RFUERJUikK QUNfU1VCU1QoREVQRkxBR1MpCkFDX1NVQlNUX0ZJTEUoZGVwc19mcmFnKQpBQ19TVUJTVF9GSUxF KGx3bGliX2RlcHNfZnJhZykKQUNfU1VCU1RfRklMRShvbGR4bWVudV9kZXBzX2ZyYWcpCgpsaXNw X2ZyYWc9JHNyY2Rpci9zcmMvbGlzcC5tawpBQ19TVUJTVF9GSUxFKGxpc3BfZnJhZykKCgpkbmwg Y2hlY2tzIGZvciBvcGVyYXRpbmcgc3lzdGVtIHNlcnZpY2VzCkFDX1NZU19MT05HX0ZJTEVfTkFN RVMKCiMjIyMgQ2hvb3NlIGEgd2luZG93IHN5c3RlbS4KCiMjIFdlIGxlYXZlIHdpbmRvd19zeXN0 ZW0gZXF1YWwgdG8gbm9uZSBpZgojIyB3ZSBlbmQgdXAgYnVpbGRpbmcgd2l0aG91dCBvbmUuICBB bnkgbmV3IHdpbmRvdyBzeXN0ZW0gc2hvdWxkCiMjIHNldCB3aW5kb3dfc3lzdGVtIHRvIGFuIGFw cHJvcHJpYXRlIHZhbHVlIGFuZCBhZGQgb2JqZWN0cyB0bwojIyB3aW5kb3ctc3lzdGVtLXNwZWNp ZmljIHN1YnN0cy4KCndpbmRvd19zeXN0ZW09bm9uZQpBQ19QQVRIX1gKaWYgdGVzdCAiJG5vX3gi ICE9IHllczsgdGhlbgogIHdpbmRvd19zeXN0ZW09eDExCmZpCgpMRF9TV0lUQ0hfWF9TSVRFX1JQ QVRIPQppZiB0ZXN0ICIke3hfbGlicmFyaWVzfSIgIT0gTk9ORTsgdGhlbgogIGlmIHRlc3QgLW4g IiR7eF9saWJyYXJpZXN9IjsgdGhlbgogICAgTERfU1dJVENIX1hfU0lURT0tTGBlY2hvICR7eF9s aWJyYXJpZXN9IHwgc2VkIC1lICJzLzovIC1ML2ciYAogICAgTERfU1dJVENIX1hfU0lURV9SUEFU SD0tV2wsLXJwYXRoLGBlY2hvICR7eF9saWJyYXJpZXN9IHwgc2VkIC1lICJzLzovIC1XbCwtcnBh dGgsL2ciYAogIGZpCiAgeF9kZWZhdWx0X3NlYXJjaF9wYXRoPSIiCiAgeF9zZWFyY2hfcGF0aD0k e3hfbGlicmFyaWVzfQogIGlmIHRlc3QgLXogIiR7eF9zZWFyY2hfcGF0aH0iOyB0aGVuCiAgICB4 X3NlYXJjaF9wYXRoPS91c3IvbGliCiAgZmkKICBmb3IgeF9saWJyYXJ5IGluIGBlY2hvICR7eF9z ZWFyY2hfcGF0aH06IHwgXAoJCSAgICBzZWQgLWUgInMvOi8gL2ciIC1lIHAgLWUgInM6L2xpYltb XiAvXV0qIDovc2hhcmUgOmciYDsgZG8KICAgIHhfc2VhcmNoX3BhdGg9IlwKJHt4X2xpYnJhcnl9 L1gxMS8lTC8lVC8lTiVDJVM6XAoke3hfbGlicmFyeX0vWDExLyVsLyVULyVOJUMlUzpcCiR7eF9s aWJyYXJ5fS9YMTEvJVQvJU4lQyVTOlwKJHt4X2xpYnJhcnl9L1gxMS8lTC8lVC8lTiVTOlwKJHt4 X2xpYnJhcnl9L1gxMS8lbC8lVC8lTiVTOlwKJHt4X2xpYnJhcnl9L1gxMS8lVC8lTiVTIgogICAg aWYgdGVzdCB4IiR7eF9kZWZhdWx0X3NlYXJjaF9wYXRofSIgPSB4OyB0aGVuCiAgICAgIHhfZGVm YXVsdF9zZWFyY2hfcGF0aD0ke3hfc2VhcmNoX3BhdGh9CiAgICBlbHNlCiAgICAgIHhfZGVmYXVs dF9zZWFyY2hfcGF0aD0iJHt4X3NlYXJjaF9wYXRofToke3hfZGVmYXVsdF9zZWFyY2hfcGF0aH0i CiAgICBmaQogIGRvbmUKZmkKQUNfU1VCU1QoTERfU1dJVENIX1hfU0lURV9SUEFUSCkKCmlmIHRl c3QgIiR7eF9pbmNsdWRlc30iICE9IE5PTkUgJiYgdGVzdCAtbiAiJHt4X2luY2x1ZGVzfSI7IHRo ZW4KICBDX1NXSVRDSF9YX1NJVEU9IiRpc3lzdGVtImBlY2hvICR7eF9pbmNsdWRlc30gfCBzZWQg LWUgInMvOi8gJGlzeXN0ZW0vZyJgCmZpCgppZiB0ZXN0IHgiJHt4X2luY2x1ZGVzfSIgPSB4OyB0 aGVuCiAgYml0bWFwZGlyPS91c3IvaW5jbHVkZS9YMTEvYml0bWFwcwplbHNlCiAgIyBhY2N1bXVs YXRlIGluY2x1ZGUgZGlyZWN0b3JpZXMgdGhhdCBoYXZlIFgxMSBiaXRtYXAgc3ViZGlyZWN0b3Jp ZXMKICBibWRfYWNjPSJkdW1teXZhbCIKICBmb3IgYm1kIGluIGBlY2hvICR7eF9pbmNsdWRlc30g fCBzZWQgLWUgInMvOi8gL2ciYDsgZG8KICAgIGlmIHRlc3QgLWQgIiR7Ym1kfS9YMTEvYml0bWFw cyI7IHRoZW4KICAgICAgYm1kX2FjYz0iJHtibWRfYWNjfToke2JtZH0vWDExL2JpdG1hcHMiCiAg ICBmaQogICAgaWYgdGVzdCAtZCAiJHtibWR9L2JpdG1hcHMiOyB0aGVuCiAgICAgIGJtZF9hY2M9 IiR7Ym1kX2FjY306JHtibWR9L2JpdG1hcHMiCiAgICBmaQogIGRvbmUKICBpZiB0ZXN0ICR7Ym1k X2FjY30gIT0gImR1bW15dmFsIjsgdGhlbgogICAgYml0bWFwZGlyPWBlY2hvICR7Ym1kX2FjY30g fCBzZWQgLWUgInMvXmR1bW15dmFsOi8vImAKICBmaQpmaQoKSEFWRV9OUz1ubwpOU19JTVBMX0NP Q09BPW5vCk5TX0lNUExfR05VU1RFUD1ubwp0bXBfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKdG1wX0NG TEFHUz0iJENGTEFHUyIKQ1BQRkxBR1M9IiRDUFBGTEFHUyAteCBvYmplY3RpdmUtYyIKQ0ZMQUdT PSIkQ0ZMQUdTIC14IG9iamVjdGl2ZS1jIgpHTlVfT0JKQ19DRkxBR1M9CkxJQlNfR05VU1RFUD0K aWYgdGVzdCAiJHt3aXRoX25zfSIgIT0gbm87IHRoZW4KICBpZiB0ZXN0ICIke29wc3lzfSIgPSBk YXJ3aW47IHRoZW4KICAgICBOU19JTVBMX0NPQ09BPXllcwogICAgIG5zX2FwcGRpcj1gcHdkYC9u ZXh0c3RlcC9FbWFjcy5hcHAKICAgICBuc19hcHBiaW5kaXI9JHtuc19hcHBkaXJ9L0NvbnRlbnRz L01hY09TCiAgICAgbnNfYXBwcmVzZGlyPSR7bnNfYXBwZGlyfS9Db250ZW50cy9SZXNvdXJjZXMK ICAgICBuc19hcHBzcmM9Q29jb2EvRW1hY3MuYmFzZQogIGVsaWYgdGVzdCAtZiAkR05VU1RFUF9D T05GSUdfRklMRTsgdGhlbgogICAgIE5TX0lNUExfR05VU1RFUD15ZXMKICAgICBuc19hcHBkaXI9 YHB3ZGAvbmV4dHN0ZXAvRW1hY3MuYXBwCiAgICAgbnNfYXBwYmluZGlyPSR7bnNfYXBwZGlyfQog ICAgIG5zX2FwcHJlc2Rpcj0ke25zX2FwcGRpcn0vUmVzb3VyY2VzCiAgICAgbnNfYXBwc3JjPUdO VXN0ZXAvRW1hY3MuYmFzZQogICAgIGRubCBGSVhNRSBzb3VyY2luZyB0aGlzIHNldmVyYWwgdGlt ZXMgaW4gc3Vic2hlbGxzIHNlZW1zIGluZWZmaWNpZW50LgogICAgIEdOVVNURVBfU1lTVEVNX0hF QURFUlM9IiQoLiAkR05VU1RFUF9DT05GSUdfRklMRTsgZWNobyAkR05VU1RFUF9TWVNURU1fSEVB REVSUykiCiAgICAgR05VU1RFUF9TWVNURU1fTElCUkFSSUVTPSIkKC4gJEdOVVNURVBfQ09ORklH X0ZJTEU7IGVjaG8gJEdOVVNURVBfU1lTVEVNX0xJQlJBUklFUykiCiAgICAgZG5sIEkgc2VlbWVk IHRvIG5lZWQgdGhlc2UgYXMgd2VsbCB3aXRoIEdOVXN0ZXAtc3RhcnR1cCAwLjI1LgogICAgIEdO VVNURVBfTE9DQUxfSEVBREVSUz0iJCguICRHTlVTVEVQX0NPTkZJR19GSUxFOyBlY2hvICRHTlVT VEVQX0xPQ0FMX0hFQURFUlMpIgogICAgIEdOVVNURVBfTE9DQUxfTElCUkFSSUVTPSIkKC4gJEdO VVNURVBfQ09ORklHX0ZJTEU7IGVjaG8gJEdOVVNURVBfTE9DQUxfTElCUkFSSUVTKSIKICAgICB0 ZXN0ICJ4JHtHTlVTVEVQX0xPQ0FMX0hFQURFUlN9IiAhPSAieCIgJiYgXAogICAgICAgR05VU1RF UF9MT0NBTF9IRUFERVJTPSItSSR7R05VU1RFUF9MT0NBTF9IRUFERVJTfSIKICAgICB0ZXN0ICJ4 JHtHTlVTVEVQX0xPQ0FMX0xJQlJBUklFU30iICE9ICJ4IiAmJiBcCiAgICAgICBHTlVTVEVQX0xP Q0FMX0xJQlJBUklFUz0iLUwke0dOVVNURVBfTE9DQUxfTElCUkFSSUVTfSIKICAgICBDUFBGTEFH Uz0iJENQUEZMQUdTIC1JJHtHTlVTVEVQX1NZU1RFTV9IRUFERVJTfSAke0dOVVNURVBfTE9DQUxf SEVBREVSU30iCiAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1JJHtHTlVTVEVQX1NZU1RFTV9IRUFERVJT fSAke0dOVVNURVBfTE9DQUxfSEVBREVSU30iCiAgICAgTERGTEFHUz0iJExERkxBR1MgLUwke0dO VVNURVBfU1lTVEVNX0xJQlJBUklFU30gJHtHTlVTVEVQX0xPQ0FMX0xJQlJBUklFU30iCiAgICAg TElCU19HTlVTVEVQPSItbGdudXN0ZXAtZ3VpIC1sZ251c3RlcC1iYXNlIC1sb2JqYyAtbHB0aHJl YWQiCiAgICAgZG5sIEdOVXN0ZXAgZGVmaW5lcyBCQVNFX05BVElWRV9PQkpDX0VYQ0VQVElPTlMg dG8gMCBvciAxLgogICAgIGRubCBJZiB0aGV5IGhhZCBjaG9zZW4gdG8gZWl0aGVyIGRlZmluZSBp dCBvciBub3QsIHdlIGNvdWxkIGhhdmUKICAgICBkbmwganVzdCB1c2VkIEFDX0NIRUNLX0RFQ0wg aGVyZS4KICAgICBBQ19DQUNIRV9DSEVDSyhpZiBHTlVzdGVwIGRlZmluZXMgQkFTRV9OQVRJVkVf T0JKQ19FWENFUFRJT05TLAogICAgICAgZW1hY3NfY3Zfb2JqY19leGNlcHRpb25zLApBQ19DT01Q SUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPEdOVXN0ZXBCYXNlL0dTQ29u ZmlnLmg+XV0sCltbI2lmIGRlZmluZWQgQkFTRV9OQVRJVkVfT0JKQ19FWENFUFRJT05TICYmIEJB U0VfTkFUSVZFX09CSkNfRVhDRVBUSU9OUyA+IDAKMTsKI2Vsc2UKZmFpbDsKI2VuZGlmXV0pXSwg ZW1hY3NfY3Zfb2JqY19leGNlcHRpb25zPXllcywgZW1hY3NfY3Zfb2JqY19leGNlcHRpb25zPW5v ICkgKQogICAgIGlmIHRlc3QgJGVtYWNzX2N2X29iamNfZXhjZXB0aW9ucyA9IHllczsgdGhlbgog ICAgICAgZG5sIF9OQVRJVkVfT0JKQ19FWENFUFRJT05TIGlzIHVzZWQgYnkgdGhlIEdOVXN0ZXAg aGVhZGVycy4KICAgICAgIEFDX0RFRklORShfTkFUSVZFX09CSkNfRVhDRVBUSU9OUywgMSwKICAg ICAgICAgW0RlZmluZSBpZiBHTlVzdGVwIHVzZXMgT2JqQyBleGNlcHRpb25zLl0pCiAgICAgICBH TlVfT0JKQ19DRkxBR1M9Ii1mb2JqYy1leGNlcHRpb25zIgogICAgIGZpCiAgZmkKCiAgZG5sIFRo aXMgaXMgb25seSB1c2VkIHdoaWxlIHdlIHRlc3QgdGhlIE5TIGhlYWRlcnMsIGl0IGdldHMgcmVz ZXQgYmVsb3cuCiAgQ0ZMQUdTPSIkQ0ZMQUdTICRHTlVfT0JKQ19DRkxBR1MiCgogIEFDX0NIRUNL X0hFQURFUihbQXBwS2l0L0FwcEtpdC5oXSwgW0hBVkVfTlM9eWVzXSwKICAJCSAgW0FDX01TR19F UlJPUihbYC0td2l0aC1ucycgd2FzIHNwZWNpZmllZCwgYnV0IHRoZSBpbmNsdWRlCiAgZmlsZXMg YXJlIG1pc3Npbmcgb3IgY2Fubm90IGJlIGNvbXBpbGVkLl0pXSkKCiAgbWFjZm9udF9maWxlPSIi CiAgaWYgdGVzdCAiJHtOU19JTVBMX0NPQ09BfSIgPSAieWVzIjsgdGhlbgogICAgQUNfTVNHX0NI RUNLSU5HKFtmb3IgT1NYIDEwLjQgb3IgbmV3ZXJdKQogICAgQUNfQ09NUElMRV9JRkVMU0UoW0FD X0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPEFwcEtpdC9BcHBLaXQuaD5dLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgWwojaWZkZWYgTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxM T1dFRAojaWYgTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDQwCiA7IC8qIE9LICov CiNlbHNlCiBlcnJvciAiT1NYIDEwLjQgb3IgbmV3ZXIgcmVxdWlyZWQiOwojZW5kaWYKI2VuZGlm CgkJICAgIF0pXSwKCQkgICAgbnNfb3N4X2hhdmVfMTA0PXllcywKCQkgICAgbnNfb3N4X2hhdmVf MTA0PW5vKQogICAgQUNfTVNHX1JFU1VMVChbJG5zX29zeF9oYXZlXzEwNF0pCgogICAgaWYgdGVz dCAkbnNfb3N4X2hhdmVfMTA0ID0gbm87IHRoZW4KICAgICAgIEFDX01TR19FUlJPUihbYE9TWCAx MC40IG9yIG5ld2VyIGlzIHJlcXVpcmVkJ10pOwogICAgZmkKICAgIEFDX01TR19DSEVDS0lORyhb Zm9yIE9TWCAxMC41IG9yIG5ld2VyXSkKICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BS T0dSQU0oWyNpbmNsdWRlIDxBcHBLaXQvQXBwS2l0Lmg+XSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFsKI2lmZGVmIE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQKI2lm IE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTA1MAogOyAvKiBPSyAqLwojZWxzZQog ZXJyb3IgIk9TWCAxMC41IG5vdCBmb3VuZCI7CiNlbmRpZgojZW5kaWYKCQkgICAgXSldLAoJCSAg ICBuc19vc3hfaGF2ZV8xMDU9eWVzLAoJCSAgICBuc19vc3hfaGF2ZV8xMDU9bm8pCiAgICBBQ19N U0dfUkVTVUxUKFskbnNfb3N4X2hhdmVfMTA1XSkKICAgIGlmIHRlc3QgJG5zX29zeF9oYXZlXzEw NSA9IHllczsgdGhlbgogICAgICBtYWNmb250X2ZpbGU9Im1hY2ZvbnQubyIKICAgIGZpCiAgZmkK ICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8Rm91bmRhdGlv bi9OU09iakNSdW50aW1lLmg+XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFtOU0ludGVnZXIgaTtdKV0sCgkJICAgIG5zX2hhdmVfbnNpbnRlZ2VyPXllcywKCQkgICAgbnNf aGF2ZV9uc2ludGVnZXI9bm8pCiAgaWYgdGVzdCAkbnNfaGF2ZV9uc2ludGVnZXIgPSB5ZXM7IHRo ZW4KICAgIEFDX0RFRklORShOU19IQVZFX05TSU5URUdFUiwgMSwgW0RlZmluZSB0byAxIGlmIGBO U0ludGVnZXInIGlzIGRlZmluZWQuXSkKICBmaQpmaQoKQUNfU1VCU1QoTElCU19HTlVTVEVQKQoK SU5TVEFMTF9BUkNIX0lOREVQX0VYVFJBPWluc3RhbGwtZXRjCm5zX3NlbGZfY29udGFpbmVkPW5v Ck5TX09CSj0KTlNfT0JKQ19PQko9CmlmIHRlc3QgIiR7SEFWRV9OU30iID0geWVzOyB0aGVuCiAg aWYgdGVzdCAiJHdpdGhfdG9vbGtpdF9zY3JvbGxfYmFycyIgPSAibm8iOyB0aGVuCiAgICBBQ19N U0dfRVJST1IoW05vbi10b29sa2l0IHNjcm9sbCBiYXJzIGFyZSBub3QgaW1wbGVtZW50ZWQgZm9y IE5leHRzdGVwLl0pCiAgZmkKCiAgd2luZG93X3N5c3RlbT1uZXh0c3RlcAogICMgc2V0IHVwIHBh Y2thZ2luZyBkaXJzCiAgaWYgdGVzdCAiJHtFTl9OU19TRUxGX0NPTlRBSU5FRH0iID0geWVzOyB0 aGVuCiAgICAgbnNfc2VsZl9jb250YWluZWQ9eWVzCiAgICAgcHJlZml4PSR7bnNfYXBwcmVzZGly fQogICAgIGV4ZWNfcHJlZml4PSR7bnNfYXBwYmluZGlyfQogICAgIGRubCBUaGlzIG9uZSBpc24n dCByZWFsbHkgdXNlZCwgb25seSBhcmNobGliZGlyIGlzLgogICAgIGxpYmV4ZWNkaXI9Ilwke25z X2FwcGJpbmRpcn0vbGliZXhlYyIKICAgICBhcmNobGliZGlyPSJcJHtuc19hcHBiaW5kaXJ9L2xp YmV4ZWMiCiAgICAgZXRjZG9jZGlyPSJcJHtuc19hcHByZXNkaXJ9L2V0YyIKICAgICBldGNkaXI9 Ilwke25zX2FwcHJlc2Rpcn0vZXRjIgogICAgIGRubCBGSVhNRSBtYXliZSBzZXQgZGF0YXJvb3Rk aXIgaW5zdGVhZC4KICAgICBkbmwgVGhhdCB3b3VsZCBhbHNvIGdldCBhcHBsaWNhdGlvbnMsIGlj b25zLCBtYW4uCiAgICAgaW5mb2Rpcj0iXCR7bnNfYXBwcmVzZGlyfS9pbmZvIgogICAgIG1hbmRp cj0iXCR7bnNfYXBwcmVzZGlyfS9tYW4iCiAgICAgbGlzcGRpcj0iXCR7bnNfYXBwcmVzZGlyfS9s aXNwIgogICAgIElOU1RBTExfQVJDSF9JTkRFUF9FWFRSQT0KICBmaQoKICBOU19PQkpDX09CSj0i bnN0ZXJtLm8gbnNmbnMubyBuc21lbnUubyBuc3NlbGVjdC5vIG5zaW1hZ2UubyBuc2ZvbnQubyAk bWFjZm9udF9maWxlIgpmaQpDRkxBR1M9IiR0bXBfQ0ZMQUdTIgpDUFBGTEFHUz0iJHRtcF9DUFBG TEFHUyIKQUNfU1VCU1QoSU5TVEFMTF9BUkNIX0lOREVQX0VYVFJBKQpBQ19TVUJTVChuc19zZWxm X2NvbnRhaW5lZCkKQUNfU1VCU1QoTlNfT0JKKQpBQ19TVUJTVChOU19PQkpDX09CSikKCkhBVkVf VzMyPW5vClczMl9PQko9ClczMl9MSUJTPQpFTUFDU1JFUz0KQ0xJRU5UUkVTPQpDTElFTlRXPQpX MzJfUkVTX0xJTks9CkVNQUNTX01BTklGRVNUPQpVUERBVEVfTUFOSUZFU1Q9CmlmIHRlc3QgIiR7 d2l0aF93MzJ9IiAhPSBubzsgdGhlbgogIGNhc2UgIiR7b3BzeXN9IiBpbgogICAgY3lnd2luKQog ICAgICBBQ19DSEVDS19IRUFERVIoW3dpbmRvd3MuaF0sIFtIQVZFX1czMj15ZXNdLAogICAgICAg ICAgICAgW0FDX01TR19FUlJPUihbYC0td2l0aC13MzInIHdhcyBzcGVjaWZpZWQsIGJ1dCB3aW5k b3dzLmgKICAgICAgICAgICAgICAgICAgIGNhbm5vdCBiZSBmb3VuZC5dKV0pCiAgICA7OwogICAg bWluZ3cpCiAgICAjIyBVc2luZyAtLXdpdGgtdzMyIHdpdGggTWluR1cgaXMgYSBuby1vcCwgYnV0 IHdlIGFsbG93IGl0LgogICAgOzsKICAgICopCiAgICAgIEFDX01TR19FUlJPUihbVXNpbmcgdzMy IHdpdGggYW4gYXV0b3Rvb2xzIGJ1aWxkIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBDeWd3aW4gYW5k IE1pbkdXMzIuXSkKICAgIDs7CiAgZXNhYwpmaQoKaWYgdGVzdCAiJHtvcHN5c30iID0gIm1pbmd3 IjsgdGhlbgogIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBXaW5kb3dzIEFQSSBoZWFkZXJzIGFy ZSByZWNlbnQgZW5vdWdoXSkKICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtb CiAgICAgI2luY2x1ZGUgPHdpbmRvd3MuaD4KICAgICAjaW5jbHVkZSA8dXNwMTAuaD5dXSwKICAg W1tQSU1BR0VfTlRfSEVBREVSUyBwSGVhZGVyOwogICAgIFBJTUFHRV9TRUNUSU9OX0hFQURFUiBw U2VjdGlvbiA9IElNQUdFX0ZJUlNUX1NFQ1RJT04ocEhlYWRlcildXSldLAogICBbZW1hY3NfY3Zf dzMyYXBpPXllcwogICAgSEFWRV9XMzI9eWVzXSwKICAgZW1hY3NfY3ZfdzMyYXBpPW5vKQogIEFD X01TR19SRVNVTFQoJGVtYWNzX2N2X3czMmFwaSkKICBpZiB0ZXN0ICIke2VtYWNzX2N2X3czMmFw aX0iID0gIm5vIjsgdGhlbgogICAgQUNfTVNHX0VSUk9SKFt0aGUgV2luZG93cyBBUEkgaGVhZGVy cyBhcmUgdG9vIG9sZCB0byBzdXBwb3J0IHRoaXMgYnVpbGQuXSkKICBmaQpmaQoKRklSU1RGSUxF X09CSj0KTlRESVI9CkxJQlNfRUNMSUVOVD0KTElCX1dTT0NLMzI9Ck5UTElCPQpDTV9PQko9ImNt Lm8iClhBUkdTX0xJTUlUPQppZiB0ZXN0ICIke0hBVkVfVzMyfSIgPSAieWVzIjsgdGhlbgogIEFD X0RFRklORShIQVZFX05UR1VJLCAxLCBbRGVmaW5lIHRvIHVzZSBuYXRpdmUgTVMgV2luZG93cyBH VUkuXSkKICBBQ19DSEVDS19UT09MKFdJTkRSRVMsIFt3aW5kcmVzXSwKICAgICAgICAgICAgICAg IFtBQ19NU0dfRVJST1IoW05vIHJlc291cmNlIGNvbXBpbGVyIGZvdW5kLl0pXSkKICBXMzJfT0JK PSJ3MzJmbnMubyB3MzJtZW51Lm8gdzMycmVnLm8gdzMyZm9udC5vIHczMnRlcm0ubyIKICBXMzJf T0JKPSIkVzMyX09CSiB3MzJ4Zm5zLm8gdzMyc2VsZWN0Lm8gdzMydW5pc2NyaWJlLm8iCiAgRU1B Q1NSRVM9ImVtYWNzLnJlcyIKICBjYXNlICIkY2Fub25pY2FsIiBpbgogICAgeDg2XzY0LSotKikg RU1BQ1NfTUFOSUZFU1Q9ImVtYWNzLXg2NC5tYW5pZmVzdCIgOzsKICAgICopIEVNQUNTX01BTklG RVNUPSJlbWFjcy14ODYubWFuaWZlc3QiIDs7CiAgZXNhYwogIGlmIHRlc3QgIiR7b3BzeXN9IiA9 ICJjeWd3aW4iOyB0aGVuCiAgICBXMzJfTElCUz0iJFczMl9MSUJTIC1sa2VybmVsMzIgLWx1c2Vy MzIgLWxnZGkzMiAtbG9sZTMyIC1sY29tZGxnMzIiCiAgICBXMzJfTElCUz0iJFczMl9MSUJTIC1s dXNwMTAgLWxjb21jdGwzMiAtbHdpbnNwb29sIgogICAgIyBUZWxsIHRoZSBsaW5rZXIgdGhhdCBl bWFjcy5yZXMgaXMgYW4gb2JqZWN0ICh3aGljaCB3ZSBjb21waWxlIGZyb20KICAgICMgdGhlIHJj IGZpbGUpLCBub3QgYSBsaW5rZXIgc2NyaXB0LgogICAgVzMyX1JFU19MSU5LPSItV2wsZW1hY3Mu cmVzIgogIGVsc2UKICAgIFVQREFURV9NQU5JRkVTVD11cGRhdGUtZ2FtZS1zY29yZS5leGUubWFu aWZlc3QKICAgIFczMl9PQko9IiRXMzJfT0JKIHczMi5vIHczMmNvbnNvbGUubyB3MzJoZWFwLm8g dzMyaW5ldnQubyB3MzJwcm9jLm8iCiAgICBXMzJfTElCUz0iJFczMl9MSUJTIC1sd2lubW0gLWxn ZGkzMiAtbGNvbWRsZzMyIgogICAgVzMyX0xJQlM9IiRXMzJfTElCUyAtbG1wciAtbHdpbnNwb29s IC1sb2xlMzIgLWxjb21jdGwzMiAtbHVzcDEwIgogICAgVzMyX1JFU19MSU5LPSJcJChFTUFDU1JF UykiCiAgICBDTElFTlRSRVM9ImVtYWNzY2xpZW50LnJlcyIKICAgIENMSUVOVFc9ImVtYWNzY2xp ZW50d1wkKEVYRUVYVCkiCiAgICBGSVJTVEZJTEVfT0JKPWZpcnN0ZmlsZS5vCiAgICBOVERJUj1u dAogICAgQ01fT0JKPQogICAgTElCU19FQ0xJRU5UPSItbGNvbWN0bDMyIgogICAgTElCX1dTT0NL MzI9Ii1sd3NvY2szMiIKICAgIE5UTElCPSJudGxpYi4kYWNfb2JqZXh0IgogICAgWEFSR1NfTElN SVQ9Ii1zIDEwMDAwIgogIGZpCmZpCkFDX1NVQlNUKFczMl9PQkopCkFDX1NVQlNUKFczMl9MSUJT KQpBQ19TVUJTVChFTUFDU1JFUykKQUNfU1VCU1QoRU1BQ1NfTUFOSUZFU1QpCkFDX1NVQlNUKFVQ REFURV9NQU5JRkVTVCkKQUNfU1VCU1QoQ0xJRU5UUkVTKQpBQ19TVUJTVChDTElFTlRXKQpBQ19T VUJTVChXMzJfUkVTX0xJTkspCkFDX1NVQlNUKEZJUlNURklMRV9PQkopCkFDX1NVQlNUKE5URElS KQpBQ19TVUJTVChDTV9PQkopCkFDX1NVQlNUKExJQlNfRUNMSUVOVCkKQUNfU1VCU1QoTElCX1dT T0NLMzIpCkFDX1NVQlNUKE5UTElCKQpBQ19TVUJTVChYQVJHU19MSU1JVCkKCmlmIHRlc3QgIiR7 SEFWRV9XMzJ9IiA9ICJ5ZXMiOyB0aGVuCiAgd2luZG93X3N5c3RlbT13MzIKICB3aXRoX3hmdD1u bwpmaQoKIyMgJHdpbmRvd19zeXN0ZW0gaXMgbm93IHNldCB0byB0aGUgd2luZG93IHN5c3RlbSB3 ZSB3aWxsCiMjIHVsdGltYXRlbHkgdXNlLgoKaWYgdGVzdCAiJHdpbmRvd19zeXN0ZW0iID0gbm9u ZSAmJiB0ZXN0ICIkZ2xfZ2NjX3dhcm5pbmdzIiA9IHllczsgdGhlbgogICAjIFRvbyBtYW55IHdh cm5pbmdzIGZvciBub3cuCiAgIG53PQogICBudz0iJG53IC1Xc3VnZ2VzdC1hdHRyaWJ1dGU9Y29u c3QiCiAgIG53PSIkbncgLVdzdWdnZXN0LWF0dHJpYnV0ZT1ub3JldHVybiIKICAgZ2xfTUFOWVdB Uk5fQ09NUExFTUVOVChbV0FSTl9DRkxBR1NdLCBbJFdBUk5fQ0ZMQUdTXSwgWyRud10pCgogICBn bF9XQVJOX0FERChbLVduby11bnVzZWQtdmFyaWFibGVdKQogICBnbF9XQVJOX0FERChbLVduby11 bnVzZWQtYnV0LXNldC12YXJpYWJsZV0pCiAgIGdsX1dBUk5fQUREKFstV25vLXVudXNlZC1idXQt c2V0LXBhcmFtZXRlcl0pCmZpCgp0ZXJtX2hlYWRlcj0KSEFWRV9YX1dJTkRPV1M9bm8KSEFWRV9Y MTE9bm8KVVNFX1hfVE9PTEtJVD1ub25lCgpjYXNlICIke3dpbmRvd19zeXN0ZW19IiBpbgogIHgx MSApCiAgICBIQVZFX1hfV0lORE9XUz15ZXMKICAgIEhBVkVfWDExPXllcwogICAgdGVybV9oZWFk ZXI9eHRlcm0uaAogICAgY2FzZSAiJHt3aXRoX3hfdG9vbGtpdH0iIGluCiAgICAgIGF0aGVuYSB8 IGx1Y2lkICkgVVNFX1hfVE9PTEtJVD1MVUNJRCA7OwogICAgICBtb3RpZiApIFVTRV9YX1RPT0xL SVQ9TU9USUYgOzsKICAgICAgZ3RrICkgd2l0aF9ndGs9eWVzCiAgICAgICAgICAgIHRlcm1faGVh ZGVyPWd0a3V0aWwuaApkbmwgRG9uJ3Qgc2V0IHRoaXMgZm9yIEdUSy4gIEEgbG90IG9mIHRlc3Rz IGJlbG93IGFzc3VtZXMgWHQgd2hlbgpkbmwgVVNFX1hfVE9PTEtJVCBpcyBzZXQuCiAgICAgICAg ICAgIFVTRV9YX1RPT0xLSVQ9bm9uZSA7OwogICAgICBndGsyICkgd2l0aF9ndGsyPXllcwogICAg ICAgICAgICAgdGVybV9oZWFkZXI9Z3RrdXRpbC5oCiAgICAgICAgICAgICBVU0VfWF9UT09MS0lU PW5vbmUgOzsKICAgICAgZ3RrMyApIHdpdGhfZ3RrMz15ZXMKICAgICAgICAgICAgIHRlcm1faGVh ZGVyPWd0a3V0aWwuaAogICAgICAgICAgICAgVVNFX1hfVE9PTEtJVD1ub25lIDs7CiAgICAgIG5v ICkgVVNFX1hfVE9PTEtJVD1ub25lIDs7CmRubCBJZiB1c2VyIGRpZCBub3Qgc2F5IHdoZXRoZXIg dG8gdXNlIGEgdG9vbGtpdCwgbWFrZSB0aGlzIGRlY2lzaW9uIGxhdGVyOgpkbmwgdXNlIHRoZSB0 b29sa2l0IGlmIHdlIGhhdmUgZ3RrLCBvciBYMTFSNSBvciBuZXdlci4KICAgICAgKiApIFVTRV9Y X1RPT0xLSVQ9bWF5YmUgOzsKICAgIGVzYWMKICA7OwogIG5leHRzdGVwICkKICAgIHRlcm1faGVh ZGVyPW5zdGVybS5oCiAgOzsKICB3MzIgKQogICAgdGVybV9oZWFkZXI9dzMydGVybS5oCiAgOzsK ZXNhYwoKaWYgdGVzdCAiJHdpbmRvd19zeXN0ZW0iID0gbm9uZSAmJiB0ZXN0ICJYJHdpdGhfeCIg IT0gIlhubyI7IHRoZW4KICAgQUNfQ0hFQ0tfUFJPRyhIQVZFX1hTRVJWRVIsIFgsIHRydWUsIGZh bHNlKQogICBpZiB0ZXN0ICIkSEFWRV9YU0VSVkVSIiA9IHRydWUgfHwKICAgICAgdGVzdCAtbiAi JERJU1BMQVkiIHx8CiAgICAgIHRlc3QgImBlY2hvIC91c3IvbGliL2xpYlgxMS4qYCIgIT0gIi91 c3IvbGliL2xpYlgxMS4qIjsgdGhlbgogICAgICAgIEFDX01TR19FUlJPUihbWW91IHNlZW0gdG8g YmUgcnVubmluZyBYLCBidXQgbm8gWCBkZXZlbG9wbWVudCBsaWJyYXJpZXMKd2VyZSBmb3VuZC4g IFlvdSBzaG91bGQgaW5zdGFsbCB0aGUgcmVsZXZhbnQgZGV2ZWxvcG1lbnQgZmlsZXMgZm9yIFgK YW5kIGZvciB0aGUgdG9vbGtpdCB5b3Ugd2FudCwgc3VjaCBhcyBHdGsrIG9yIE1vdGlmLiAgQWxz byBtYWtlCnN1cmUgeW91IGhhdmUgZGV2ZWxvcG1lbnQgZmlsZXMgZm9yIGltYWdlIGhhbmRsaW5n LCBpLmUuCnRpZmYsIGdpZiwganBlZywgcG5nIGFuZCB4cG0uCklmIHlvdSBhcmUgc3VyZSB5b3Ug d2FudCBFbWFjcyBjb21waWxlZCB3aXRob3V0IFggd2luZG93IHN1cHBvcnQsIHBhc3MKICAtLXdp dGhvdXQteAp0byBjb25maWd1cmUuXSkKICAgZmkKZmkKCiMgRG9lcyB0aGUgb3BzeXN0ZW0gZmls ZSBwcm9oaWJpdCB0aGUgdXNlIG9mIHRoZSBHTlUgbWFsbG9jPwojIEFzc3VtZSBub3QsIHVudGls IHRvbGQgb3RoZXJ3aXNlLgpHTlVfTUFMTE9DPXllcwoKQUNfQ0FDSEVfQ0hFQ0soCiAgW3doZXRo ZXIgbWFsbG9jIGlzIERvdWcgTGVhIHN0eWxlXSwKICBbZW1hY3NfY3ZfdmFyX2RvdWdfbGVhX21h bGxvY10sCiAgW2VtYWNzX2N2X3Zhcl9kb3VnX2xlYV9tYWxsb2M9bm8KICAgZG5sIEhvb2tzIGRv IG5vdCB3b3JrIHdpdGggYWRkcmVzcyBzYW5pdGl6YXRpb24uCiAgIGlmIHRlc3QgIiRlbWFjc19j dl9zYW5pdGl6ZV9hZGRyZXNzIiAhPSB5ZXM7IHRoZW4KICAgICBBQ19MSU5LX0lGRUxTRSgKICAg ICAgIFtBQ19MQU5HX1BST0dSQU0oCgkgIFtbI2luY2x1ZGUgPG1hbGxvYy5oPgoJICAgIHN0YXRp YyB2b2lkIGhvb2sgKHZvaWQpIHt9XV0sCgkgIFtbbWFsbG9jX3NldF9zdGF0ZSAobWFsbG9jX2dl dF9zdGF0ZSAoKSk7CgkgICAgX19hZnRlcl9tb3JlY29yZV9ob29rID0gaG9vazsKCSAgICBfX21h bGxvY19pbml0aWFsaXplX2hvb2sgPSBob29rO11dKV0sCiAgICAgICBbZW1hY3NfY3ZfdmFyX2Rv dWdfbGVhX21hbGxvYz15ZXNdKV0pCiAgIGZpCmRvdWdfbGVhX21hbGxvYz0kZW1hY3NfY3ZfdmFy X2RvdWdfbGVhX21hbGxvYwoKc3lzdGVtX21hbGxvYz0kZW1hY3NfY3Zfc2FuaXRpemVfYWRkcmVz cwpjYXNlICIkb3BzeXMiIGluCiAgIyMgZGFyd2luIGxkIGluc2lzdHMgb24gdGhlIHVzZSBvZiBt YWxsb2Mgcm91dGluZXMgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsuCiAgZGFyd2lufG1pbmd3fHNv bDItMTApIHN5c3RlbV9tYWxsb2M9eWVzIDs7CmVzYWMKCkdNQUxMT0NfT0JKPQppZiB0ZXN0ICIk e3N5c3RlbV9tYWxsb2N9IiA9ICJ5ZXMiOyB0aGVuCiAgQUNfREVGSU5FKFtTWVNURU1fTUFMTE9D XSwgMSwKICAgIFtEZWZpbmUgdG8gMSB0byB1c2UgdGhlIHN5c3RlbSBtZW1vcnkgYWxsb2NhdG9y LCBldmVuIGlmIGl0IGlzIG5vdAogICAgIERvdWcgTGVhIHN0eWxlLl0pCiAgR05VX01BTExPQz1u bwogIEdOVV9NQUxMT0NfcmVhc29uPSIKICAgIChUaGUgR05VIGFsbG9jYXRvcnMgZG9uJ3Qgd29y ayB3aXRoIHRoaXMgc3lzdGVtIGNvbmZpZ3VyYXRpb24uKSIKICBWTUxJTUlUX09CSj0KZWxzZQog IHRlc3QgIiRkb3VnX2xlYV9tYWxsb2MiICE9ICJ5ZXMiICYmIEdNQUxMT0NfT0JKPWdtYWxsb2Mu bwogIFZNTElNSVRfT0JKPXZtLWxpbWl0Lm8KCiAgQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3ZsaW1p dC5oXSkKICBBQ19DQUNIRV9DSEVDSyhbZm9yIGRhdGFfc3RhcnRdLCBbZW1hY3NfY3ZfZGF0YV9z dGFydF0sCiAgICBbQUNfTElOS19JRkVMU0UoCiAgICAgICBbQUNfTEFOR19QUk9HUkFNKAoJIFtb ZXh0ZXJuIGNoYXIgZGF0YV9zdGFydFtdOyBjaGFyIGNoO11dLAoJIFtbcmV0dXJuIGRhdGFfc3Rh cnQgPCAmY2g7XV0pXSwKICAgICAgIFtlbWFjc19jdl9kYXRhX3N0YXJ0PXllc10sCiAgICAgICBb ZW1hY3NfY3ZfZGF0YV9zdGFydD1ub10pXSkKICBpZiB0ZXN0ICRlbWFjc19jdl9kYXRhX3N0YXJ0 ID0geWVzOyB0aGVuCiAgICBBQ19ERUZJTkUoW0hBVkVfREFUQV9TVEFSVF0sIDEsCiAgICAgIFtE ZWZpbmUgdG8gMSBpZiBkYXRhX3N0YXJ0IGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGFydAogICAg ICAgb2YgdGhlIG1haW4gZGF0YSBzZWdtZW50Ll0pCiAgZmkKZmkKQUNfU1VCU1QoR01BTExPQ19P QkopCkFDX1NVQlNUKFZNTElNSVRfT0JKKQoKaWYgdGVzdCAiJGRvdWdfbGVhX21hbGxvYyIgPSAi eWVzIiA7IHRoZW4KICBpZiB0ZXN0ICIkR05VX01BTExPQyIgPSB5ZXMgOyB0aGVuCiAgICBHTlVf TUFMTE9DX3JlYXNvbj0iCiAgICAgIChVc2luZyBEb3VnIExlYSdzIG5ldyBtYWxsb2MgZnJvbSB0 aGUgR05VIEMgTGlicmFyeS4pIgogIGZpCiAgQUNfREVGSU5FKERPVUdfTEVBX01BTExPQywgMSwK ICAgIFtEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIG1lbW9yeSBhbGxvY2F0b3IgaXMgRG91ZyBM ZWEgc3R5bGUsCiAgICAgd2l0aCBtYWxsb2MgaG9va3MgYW5kIG1hbGxvY19zZXRfc3RhdGUuXSkK CiAgIyMgVXNlIG1tYXAgZGlyZWN0bHkgZm9yIGFsbG9jYXRpbmcgbGFyZ2VyIGJ1ZmZlcnMuCiAg IyMgRklYTUUgdGhpcyBjb21lcyBmcm9tIHNyYy9zL3tnbnUsZ251LWxpbnV4fS5oOgogICMjICNp ZmRlZiBET1VHX0xFQV9NQUxMT0M7ICN1bmRlZiBSRUxfQUxMT0M7ICNlbmRpZgogICMjIERvZXMg dGhlIEFDX0ZVTkNfTU1BUCB0ZXN0IGJlbG93IG1ha2UgdGhpcyBjaGVjayB1bm5lY2Vzc2FyeT8K ICBjYXNlICIkb3BzeXMiIGluCiAgICBtaW5nd3xnbnUqKSBSRUxfQUxMT0M9bm8gOzsKICBlc2Fj CmZpCgppZiB0ZXN0IHgiJHtSRUxfQUxMT0N9IiA9IHg7IHRoZW4KICBSRUxfQUxMT0M9JHtHTlVf TUFMTE9DfQpmaQoKdXNlX21tYXBfZm9yX2J1ZmZlcnM9bm8KY2FzZSAiJG9wc3lzIiBpbgogIGN5 Z3dpbnxtaW5nd3xmcmVlYnNkfGlyaXg2LTUpIHVzZV9tbWFwX2Zvcl9idWZmZXJzPXllcyA7Owpl c2FjCgpBQ19GVU5DX01NQVAKaWYgdGVzdCAkdXNlX21tYXBfZm9yX2J1ZmZlcnMgPSB5ZXM7IHRo ZW4KICBBQ19ERUZJTkUoVVNFX01NQVBfRk9SX0JVRkZFUlMsIDEsIFtEZWZpbmUgdG8gdXNlIG1t YXAgdG8gYWxsb2NhdGUgYnVmZmVyIHRleHQuXSkKICBSRUxfQUxMT0M9bm8KZmkKCkxJQlM9IiRM SUJTX1NZU1RFTSAkTElCUyIKCmRubCBGSVhNRSByZXBsYWNlIG1haW4gd2l0aCBhIGZ1bmN0aW9u IHdlIGFjdHVhbGx5IHdhbnQgZnJvbSB0aGlzIGxpYnJhcnkuCkFDX0NIRUNLX0xJQihYYnNkLCBt YWluLCBMRF9TV0lUQ0hfWF9TSVRFPSIkTERfU1dJVENIX1hfU0lURSAtbFhic2QiKQoKZG5sIENo ZWNrIGZvciB0aGUgUE9TSVggdGhyZWFkIGxpYnJhcnkuCkxJQl9QVEhSRUFEPQppZiB0ZXN0ICIk b3BzeXMiICE9ICJtaW5ndyI7IHRoZW4KQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHB0aHJlYWQuaCkK aWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9wdGhyZWFkX2giOyB0aGVuCiAgZG5sIGdtYWxsb2MuYyB1 c2VzIHB0aHJlYWRfYXRmb3JrLCB3aGljaCBpcyBub3QgYXZhaWxhYmxlIG9uIG9sZGVyLXN0eWxl CiAgZG5sIGhvc3RzIHN1Y2ggYXMgTWlyQlNEIDEwLCBzbyB0ZXN0IGZvciBwdGhyZWFkX2F0Zm9y ayBpbnN0ZWFkIG9mIG1lcmVseQogIGRubCB0ZXN0aW5nIGZvciBwdGhyZWFkX2tpbGwgaWYgRW1h Y3MgdXNlcyBnbWFsbG9jLmMuCiAgaWYgdGVzdCAiJEdNQUxMT0NfT0JKIiA9IGdtYWxsb2Mubzsg dGhlbgogICAgZW1hY3NfcHRocmVhZF9mdW5jdGlvbj1wdGhyZWFkX2F0Zm9yawogIGVsc2UKICAg IGVtYWNzX3B0aHJlYWRfZnVuY3Rpb249cHRocmVhZF9raWxsCiAgZmkKICBPTERfTElCUz0kTElC UwogIEFDX1NFQVJDSF9MSUJTKFskZW1hY3NfcHRocmVhZF9mdW5jdGlvbl0sIFtwdGhyZWFkXSwK ICAgIFtBQ19ERUZJTkUoW0hBVkVfUFRIUkVBRF0sIFsxXSwKICAgICAgIFtEZWZpbmUgdG8gMSBp ZiB5b3UgaGF2ZSBwdGhyZWFkICgtbHB0aHJlYWQpLl0pCiAgICAgIyBTb21lIHN5c3RlbXMgb3B0 aW1pemUgZm9yIHNpbmdsZS10aHJlYWRlZCBwcm9ncmFtcyBieSBkZWZhdWx0LCBhbmQKICAgICAj IG5lZWQgc3BlY2lhbCBmbGFncyB0byBkaXNhYmxlIHRoZXNlIG9wdGltaXphdGlvbnMuIEZvciBl eGFtcGxlLCB0aGUKICAgICAjIGRlZmluaXRpb24gb2YgJ2Vycm5vJyBpbiA8ZXJybm8uaD4uCiAg ICAgY2FzZSAkb3BzeXMgaW4KICAgICAgIHNvbCopCiAgICAgICAgIEFDX0RFRklORShbX1JFRU5U UkFOVF0sIDEsCiAgIAlbRGVmaW5lIHRvIDEgaWYgeW91ciBzeXN0ZW0gcmVxdWlyZXMgdGhpcyBp biBtdWx0aXRocmVhZGVkIGNvZGUuXSk7OwogICAgICAgYWl4NC0yKQogICAgICAgICBBQ19ERUZJ TkUoW19USFJFQURfU0FGRV0sIDEsCiAgIAlbRGVmaW5lIHRvIDEgaWYgeW91ciBzeXN0ZW0gcmVx dWlyZXMgdGhpcyBpbiBtdWx0aXRocmVhZGVkIGNvZGUuXSk7OwogICAgIGVzYWNdKQogaWYgdGVz dCAiWCRMSUJTIiAhPSAiWCRPTERfTElCUyI7IHRoZW4KICAgIGV2YWwgTElCX1BUSFJFQUQ9XCRh Y19jdl9zZWFyY2hfJGVtYWNzX3B0aHJlYWRfZnVuY3Rpb24KICBmaQogIExJQlM9JE9MRF9MSUJT CmZpCkFDX1NVQlNUKFtMSUJfUFRIUkVBRF0pCmZpCgpkbmwgQ2hlY2sgZm9yIG5lZWQgZm9yIGJp Z3RvYyBzdXBwb3J0IG9uIElCTSBBSVgKCmNhc2UgJHtob3N0X29zfSBpbgphaXgqKQogIEFDX0NB Q0hFX0NIRUNLKFtmb3IgLWJiaWd0b2Mgb3B0aW9uXSwgW2dkYl9jdl9iaWd0b2NdLCBbCiAgICBj YXNlICRHQ0MgaW4KICAgIHllcykgZ2RiX2N2X2JpZ3RvYz0tV2wsLWJiaWd0b2MgOzsKICAgICop IGdkYl9jdl9iaWd0b2M9LWJiaWd0b2MgOzsKICAgIGVzYWMKCiAgICBMREZMQUdTPSRMREZMQUdT XCAkZ2RiX2N2X2JpZ3RvYwogICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11d LCBbW2ludCBpO11dKV0sIFtdLCBbZ2RiX2N2X2JpZ3RvYz1dKQogIF0pCiAgOzsKZXNhYwoKIyBD aGFuZ2UgQ0ZMQUdTLCBDUFBGTEFHUywgYW5kIExJQlMgdGVtcG9yYXJpbHkgc28gdGhhdCBDX1NX SVRDSF9YX1NJVEUKIyBpcyBmb3IgdGhlIHRlc3RzIHRoYXQgZm9sbG93LiAgV2Ugc2V0IHRoZW0g YmFjayBsYXRlciBvbi4KClJFQUxfQ0ZMQUdTPSIkQ0ZMQUdTIgpSRUFMX0NQUEZMQUdTPSIkQ1BQ RkxBR1MiClJFQUxfTElCUz0iJExJQlMiCgppZiB0ZXN0ICIke0hBVkVfWDExfSIgPSAieWVzIjsg dGhlbgogIERFRlM9IiRDX1NXSVRDSF9YX1NJVEUgJERFRlMiCiAgTERGTEFHUz0iJExERkxBR1Mg JExEX1NXSVRDSF9YX1NJVEUiCiAgTElCUz0iLWxYMTEgJExJQlMiCiAgQ0ZMQUdTPSIkQ19TV0lU Q0hfWF9TSVRFICRDRkxBR1MiCiAgQ1BQRkxBR1M9IiRDX1NXSVRDSF9YX1NJVEUgJENQUEZMQUdT IgoKICAjIE9uIFNvbGFyaXMsIGFycmFuZ2UgZm9yIExEX1JVTl9QQVRIIHRvIHBvaW50IHRvIHRo ZSBYIGxpYnJhcmllcyBmb3IgdGVzdHMuCiAgIyBUaGlzIGlzIGhhbmRsZWQgYnkgTERfU1dJVENI X1hfU0lURV9SUEFUSCBkdXJpbmcgdGhlIHJlYWwgYnVpbGQsCiAgIyBidXQgaXQncyBtb3JlIGNv bnZlbmllbnQgaGVyZSB0byBzZXQgTERfUlVOX1BBVEggc2luY2UgdGhpcwogICMgYWxzbyB3b3Jr cyBvbiBob3N0cyB0aGF0IGRvbid0IHVuZGVyc3RhbmQgTERfU1dJVENIX1hfU0lURV9SUEFUSC4K ICBpZiB0ZXN0ICIke3hfbGlicmFyaWVzfSIgIT0gTk9ORSAmJiB0ZXN0IC1uICIke3hfbGlicmFy aWVzfSI7IHRoZW4KICAgIExEX1JVTl9QQVRIPSR4X2xpYnJhcmllcyR7TERfUlVOX1BBVEgrOn0k TERfUlVOX1BBVEgKICAgIGV4cG9ydCBMRF9SVU5fUEFUSAogIGZpCgogIGlmIHRlc3QgIiR7b3Bz eXN9IiA9ICJnbnUtbGludXgiOyB0aGVuCiAgICBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBYIG9u IEdOVS9MaW51eCBuZWVkcyAtYiB0byBsaW5rKQogICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdf UFJPR1JBTShbW11dLAogICAgIFtbWE9wZW5EaXNwbGF5ICgiZm9vIik7XV0pXSwKICAgICBbeGdu dV9saW51eF9maXJzdF9mYWlsdXJlPW5vXSwKICAgICBbeGdudV9saW51eF9maXJzdF9mYWlsdXJl PXllc10pCiAgICBpZiB0ZXN0ICIke3hnbnVfbGludXhfZmlyc3RfZmFpbHVyZX0iID0gInllcyI7 IHRoZW4KICAgICAgT0xEX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCiAgICAgIE9MRF9MSUJTPSIkTElC UyIKICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtYiBpNDg2LWxpbnV4YW91dCIKICAgICAgTElC Uz0iJExJQlMgLWIgaTQ4Ni1saW51eGFvdXQiCiAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5H X1BST0dSQU0oW1tdXSwKICAgICAgIFtbWE9wZW5EaXNwbGF5ICgiZm9vIik7XV0pXSwKICAgICAg IFt4Z251X2xpbnV4X3NlY29uZF9mYWlsdXJlPW5vXSwKICAgICAgIFt4Z251X2xpbnV4X3NlY29u ZF9mYWlsdXJlPXllc10pCiAgICAgIGlmIHRlc3QgIiR7eGdudV9saW51eF9zZWNvbmRfZmFpbHVy ZX0iID0gInllcyI7IHRoZW4KCSMgSWYgd2UgZ2V0IHRoZSBzYW1lIGZhaWx1cmUgd2l0aCAtYiwg dGhlcmUgaXMgbm8gdXNlIGFkZGluZyAtYi4KCSMgU28gbGVhdmUgaXQgb3V0LiAgVGhpcyBwbGF5 cyBzYWZlLgogICAgICAgIEFDX01TR19SRVNVTFQobm8pCiAgICAgIGVsc2UKCUxEX1NXSVRDSF9Y X1NJVEU9IiRMRF9TV0lUQ0hfWF9TSVRFIC1iIGk0ODYtbGludXhhb3V0IgoJQ19TV0lUQ0hfWF9T SVRFPSIkQ19TV0lUQ0hfWF9TSVRFIC1iIGk0ODYtbGludXhhb3V0IgogICAgICAgIEFDX01TR19S RVNVTFQoeWVzKQogICAgICBmaQogICAgICBDUFBGTEFHUz0kT0xEX0NQUEZMQUdTCiAgICAgIExJ QlM9JE9MRF9MSUJTCiAgICBlbHNlCiAgICAgIEFDX01TR19SRVNVTFQobm8pCiAgICBmaQogIGZp CgogICMgUmVwb3J0ZWRseSwgc29tZSBicm9rZW4gU29sYXJpcyBzeXN0ZW1zIGhhdmUgWEtCbGli LmggYnV0IGFyZSBtaXNzaW5nCiAgIyBoZWFkZXIgZmlsZXMgaW5jbHVkZWQgZnJvbSB0aGVyZS4K ICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIFhrYikKICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9H UkFNKFtbI2luY2x1ZGUgPFgxMS9YbGliLmg+CiNpbmNsdWRlIDxYMTEvWEtCbGliLmg+XV0sCglb W1hrYkRlc2NQdHIga2IgPSBYa2JHZXRLZXlib2FyZCAoMCwgWGtiQWxsQ29tcG9uZW50c01hc2ss IFhrYlVzZUNvcmVLYmQpO11dKV0sCgllbWFjc194a2I9eWVzLCBlbWFjc194a2I9bm8pCiAgQUNf TVNHX1JFU1VMVCgkZW1hY3NfeGtiKQogIGlmIHRlc3QgJGVtYWNzX3hrYiA9IHllczsgdGhlbgog ICAgQUNfREVGSU5FKEhBVkVfWEtCLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIFhr YiBleHRlbnNpb24uXSkKICBmaQoKICBBQ19DSEVDS19GVU5DUyhYcm1TZXREYXRhYmFzZSBYU2Ny ZWVuUmVzb3VyY2VTdHJpbmcgXApYU2NyZWVuTnVtYmVyT2ZTY3JlZW4pCmZpCgppZiB0ZXN0ICIk e3dpbmRvd19zeXN0ZW19IiA9ICJ4MTEiOyB0aGVuCiAgQUNfTVNHX0NIRUNLSU5HKFgxMSB2ZXJz aW9uIDYpCiAgQUNfQ0FDSEVfVkFMKGVtYWNzX2N2X3gxMV92ZXJzaW9uXzYsCiAgW0FDX0xJTktf SUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8WDExL1hsaWIuaD5dXSwKW1sjaWYg WGxpYlNwZWNpZmljYXRpb25SZWxlYXNlIDwgNgpmYWlsOwojZW5kaWYKXV0pXSwgZW1hY3NfY3Zf eDExX3ZlcnNpb25fNj15ZXMsIGVtYWNzX2N2X3gxMV92ZXJzaW9uXzY9bm8pXSkKICBpZiB0ZXN0 ICRlbWFjc19jdl94MTFfdmVyc2lvbl82ID0geWVzOyB0aGVuCiAgICBBQ19NU0dfUkVTVUxUKDYg b3IgbmV3ZXIpCiAgICBBQ19ERUZJTkUoSEFWRV9YMTFSNiwgMSwKCSAgICAgIFtEZWZpbmUgdG8g MSBpZiB5b3UgaGF2ZSB0aGUgWDExUjYgb3IgbmV3ZXIgdmVyc2lvbiBvZiBYbGliLl0pCiAgICBB Q19ERUZJTkUoSEFWRV9YX0kxOE4sIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdXNhYmxlIGkxOG4g c3VwcG9ydC5dKQogICAgIyMgaW5vdWVAYWluZXQub3IuanAgc2F5cyBTb2xhcmlzIGhhcyBhIGJ1 ZyByZWxhdGVkIHRvIFgxMVI2LXN0eWxlCiAgICAjIyBYSU0gc3VwcG9ydC4KICAgIGNhc2UgIiRv cHN5cyIgaW4KICAgICAgc29sMi0qKSA6IDs7CiAgICAgICopIEFDX0RFRklORShIQVZFX1gxMVI2 X1hJTSwgMSwKICAgICAgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHVzYWJsZSBYMTFSNi1zdHls ZSBYSU0gc3VwcG9ydC5dKQogICAgICAgICA7OwogICAgZXNhYwogIGVsc2UKICAgIEFDX01TR19S RVNVTFQoYmVmb3JlIDYpCiAgZmkKZmkKCgojIyMgVXNlIC1scnN2Zy0yIGlmIGF2YWlsYWJsZSwg dW5sZXNzIGAtLXdpdGgtcnN2Zz1ubycgaXMgc3BlY2lmaWVkLgpIQVZFX1JTVkc9bm8KaWYgdGVz dCAiJHtIQVZFX1gxMX0iID0gInllcyIgfHwgdGVzdCAiJHtIQVZFX05TfSIgPSAieWVzIiB8fCB0 ZXN0ICIke29wc3lzfSIgPSAibWluZ3ciOyB0aGVuCiAgaWYgdGVzdCAiJHt3aXRoX3Jzdmd9IiAh PSAibm8iOyB0aGVuCiAgICBSU1ZHX1JFUVVJUkVEPTIuMTEuMAogICAgUlNWR19NT0RVTEU9Imxp YnJzdmctMi4wID49ICRSU1ZHX1JFUVVJUkVEIgoKICAgIEVNQUNTX0NIRUNLX01PRFVMRVMoW1JT VkddLCBbJFJTVkdfTU9EVUxFXSkKICAgIEFDX1NVQlNUKFJTVkdfQ0ZMQUdTKQogICAgQUNfU1VC U1QoUlNWR19MSUJTKQoKICAgIGlmIHRlc3QgJEhBVkVfUlNWRyA9IHllczsgdGhlbgogICAgICBB Q19ERUZJTkUoSEFWRV9SU1ZHLCAxLCBbRGVmaW5lIHRvIDEgaWYgdXNpbmcgbGlicnN2Zy5dKQog ICAgICBDRkxBR1M9IiRDRkxBR1MgJFJTVkdfQ0ZMQUdTIgogICAgICAjIFdpbmRvd3MgbG9hZHMg bGlicnN2ZyBkeW5hbWljYWxseQogICAgICBpZiB0ZXN0ICIke29wc3lzfSIgPSAibWluZ3ciOyB0 aGVuCiAgICAgICAJUlNWR19MSUJTPQogICAgICBmaQogICAgZmkKICBmaQpmaQoKSEFWRV9JTUFH RU1BR0lDSz1ubwppZiB0ZXN0ICIke0hBVkVfWDExfSIgPSAieWVzIiB8fCB0ZXN0ICIke0hBVkVf TlN9IiA9ICJ5ZXMiIHx8IHRlc3QgIiR7SEFWRV9XMzJ9IiA9ICJ5ZXMiOyB0aGVuCiAgaWYgdGVz dCAiJHt3aXRoX2ltYWdlbWFnaWNrfSIgIT0gIm5vIjsgdGhlbgogICAgIyMgNi4zLjUgaXMgdGhl IGVhcmxpZXN0IHZlcnNpb24ga25vd24gdG8gd29yazsgc2VlIEJ1ZyMxNzMzOS4KICAgICMjIDYu OC4yIG1ha2VzIEVtYWNzIGNyYXNoOyBzZWUgQnVnIzEzODY3LgogICAgSU1BR0VNQUdJQ0tfTU9E VUxFPSJXYW5kID49IDYuMy41IFdhbmQgIT0gNi44LjIiCiAgICBFTUFDU19DSEVDS19NT0RVTEVT KFtJTUFHRU1BR0lDS10sIFskSU1BR0VNQUdJQ0tfTU9EVUxFXSkKICAgIEFDX1NVQlNUKElNQUdF TUFHSUNLX0NGTEFHUykKICAgIEFDX1NVQlNUKElNQUdFTUFHSUNLX0xJQlMpCgogICAgaWYgdGVz dCAkSEFWRV9JTUFHRU1BR0lDSyA9IHllczsgdGhlbgogICAgICBBQ19ERUZJTkUoSEFWRV9JTUFH RU1BR0lDSywgMSwgW0RlZmluZSB0byAxIGlmIHVzaW5nIGltYWdlbWFnaWNrLl0pCiAgICAgIE9M RF9DRkxBR1M9JENGTEFHUwogICAgICBPTERfTElCUz0kTElCUwogICAgICBDRkxBR1M9IiRDRkxB R1MgJElNQUdFTUFHSUNLX0NGTEFHUyIKICAgICAgTElCUz0iJElNQUdFTUFHSUNLX0xJQlMgJExJ QlMiCiAgICAgIEFDX0NIRUNLX0ZVTkNTKE1hZ2lja0V4cG9ydEltYWdlUGl4ZWxzIE1hZ2lja01l cmdlSW1hZ2VMYXllcnMpCiAgICAgIENGTEFHUz0kT0xEX0NGTEFHUwogICAgICBMSUJTPSRPTERf TElCUwogICAgZmkKICBmaQpmaQoKCkhBVkVfR1RLPW5vCkdUS19PQko9Cmd0a190ZXJtX2hlYWRl cj0kdGVybV9oZWFkZXIKY2hlY2tfZ3RrMj1ubwpndGszX3BrZ19lcnJvcnM9CmlmIHRlc3QgIiR7 b3BzeXN9IiAhPSAibWluZ3ciOyB0aGVuCiAgaWYgdGVzdCAiJHt3aXRoX2d0azN9IiA9ICJ5ZXMi IHx8IHRlc3QgIiR7d2l0aF9ndGt9IiA9ICJ5ZXMiIHx8IHRlc3QgIiRVU0VfWF9UT09MS0lUIiA9 ICJtYXliZSI7IHRoZW4KICAgIEdMSUJfUkVRVUlSRUQ9Mi4yOAogICAgR1RLX1JFUVVJUkVEPTMu MAogICAgR1RLX01PRFVMRVM9Imd0aystMy4wID49ICRHVEtfUkVRVUlSRUQgZ2xpYi0yLjAgPj0g JEdMSUJfUkVRVUlSRUQiCgogICAgZG5sIENoZWNrcyBmb3IgbGlicmFyaWVzLgogICAgRU1BQ1Nf Q0hFQ0tfTU9EVUxFUyhbR1RLXSwgWyRHVEtfTU9EVUxFU10sCiAgICAgIFtwa2dfY2hlY2tfZ3Rr PXllc10sIFtwa2dfY2hlY2tfZ3RrPW5vXSkKICAgIGlmIHRlc3QgIiRwa2dfY2hlY2tfZ3RrIiA9 ICJubyIgJiYgdGVzdCAiJHdpdGhfZ3RrMyIgPSAieWVzIjsgdGhlbgogICAgICAgQUNfTVNHX0VS Uk9SKCRHVEtfUEtHX0VSUk9SUykKICAgIGZpCiAgICBpZiB0ZXN0ICIkcGtnX2NoZWNrX2d0ayIg PSAieWVzIjsgdGhlbgogICAgICAgQUNfREVGSU5FKEhBVkVfR1RLMywgMSwgW0RlZmluZSB0byAx IGlmIHVzaW5nIEdUSyAzIG9yIGxhdGVyLl0pCiAgICAgICBHVEtfT0JKPWVtYWNzZ3RrZml4ZWQu bwogICAgICAgZ3RrX3Rlcm1faGVhZGVyPWd0a3V0aWwuaAogICAgICAgVVNFX0dUS19UT09MS0lU PSJHVEszIgogICAgICAgaWYgdGVzdCAieCRhY19lbmFibGVfZ3RrX2RlcHJlY2F0aW9uX3dhcm5p bmdzIiA9IHg7IHRoZW4KCSBBQ19ERUZJTkUoW0dES19ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5J TkdTXSwgWzFdLAoJICAgW0RlZmluZSB0byAxIHRvIGRpc2FibGUgR1RLKy9HREsgZGVwcmVjYXRp b24gd2FybmluZ3MuXSkKCSBBQ19ERUZJTkUoW0dMSUJfRElTQUJMRV9ERVBSRUNBVElPTl9XQVJO SU5HU10sIFsxXSwKCSAgIFtEZWZpbmUgdG8gMSB0byBkaXNhYmxlIEdsaWIgZGVwcmVjYXRpb24g d2FybmluZ3MuXSkKICAgICAgIGZpCiAgICBlbHNlCiAgICAgICBjaGVja19ndGsyPXllcwogICAg ICAgZ3RrM19wa2dfZXJyb3JzPSIkR1RLX1BLR19FUlJPUlMgIgogICAgZmkKICBmaQoKICBpZiB0 ZXN0ICIke3dpdGhfZ3RrMn0iID0gInllcyIgfHwgdGVzdCAiJGNoZWNrX2d0azIiID0gInllcyI7 IHRoZW4KICAgIEdMSUJfUkVRVUlSRUQ9Mi4xMAogICAgR1RLX1JFUVVJUkVEPTIuMTAKICAgIEdU S19NT0RVTEVTPSJndGsrLTIuMCA+PSAkR1RLX1JFUVVJUkVEIGdsaWItMi4wID49ICRHTElCX1JF UVVJUkVEIgoKICAgIGRubCBDaGVja3MgZm9yIGxpYnJhcmllcy4KICAgIEVNQUNTX0NIRUNLX01P RFVMRVMoW0dUS10sIFskR1RLX01PRFVMRVNdLAogICAgICBbcGtnX2NoZWNrX2d0az15ZXNdLCBb cGtnX2NoZWNrX2d0az1ub10pCiAgICBpZiB0ZXN0ICIkcGtnX2NoZWNrX2d0ayIgPSAibm8iICYm CiAgICAgICB7IHRlc3QgIiR3aXRoX2d0ayIgPSB5ZXMgfHwgdGVzdCAiJHdpdGhfZ3RrMiIgPSAi eWVzIjsgfQogICAgdGhlbgogICAgICBBQ19NU0dfRVJST1IoJGd0azNfcGtnX2Vycm9ycyRHVEtf UEtHX0VSUk9SUykKICAgIGZpCiAgICB0ZXN0ICIkcGtnX2NoZWNrX2d0ayIgPSAieWVzIiAmJiBV U0VfR1RLX1RPT0xLSVQ9IkdUSzIiCiAgZmkKZmkKCk9MRF9DRkxBR1M9JENGTEFHUwpPTERfTElC Uz0kTElCUwoKaWYgdGVzdCB4IiRwa2dfY2hlY2tfZ3RrIiA9IHh5ZXM7IHRoZW4KCiAgQUNfU1VC U1QoR1RLX0xJQlMpCiAgQ0ZMQUdTPSIkQ0ZMQUdTICRHVEtfQ0ZMQUdTIgogIExJQlM9IiRHVEtf TElCUyAkTElCUyIKICBkbmwgVHJ5IHRvIGNvbXBpbGUgYSBzaW1wbGUgR1RLIHByb2dyYW0uCiAg QUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIEdUSyBjb21waWxlc10pCiAgR1RLX0NPTVBJTEVTPW5v CiAgQUNfTElOS19JRkVMU0UoCiAgICBbQUNfTEFOR19QUk9HUkFNKAogICAgICAgW1svKiBDaGVj ayB0aGUgR3RrIGFuZCBHbGliIEFQSXMuICAqLwoJICNpbmNsdWRlIDxndGsvZ3RrLmg+CgkgI2lu Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+Cgkgc3RhdGljIHZvaWQKCSBjYWxsYmFjayAoR09iamVjdCAq Z28sIEdQYXJhbVNwZWMgKnNwZWMsIGdwb2ludGVyIHVzZXJfZGF0YSkKCSB7fQogICAgICAgXV0s CiAgICAgICBbWwoJIEd0a1NldHRpbmdzICpncyA9IDA7CgkgLyogVXNlIEdfQ0FMTEJBQ0sgdG8g bWFrZSBzdXJlIGZ1bmN0aW9uIHBvaW50ZXJzIGNhbiBiZSBjYXN0IHRvIHZvaWQgKjsKCSAgICBz dHJpY3QgQyBwcm9oaWJpdHMgdGhpcy4gIFVzZSBndGtfbWFpbl9pdGVyYXRpb24gdG8gdGVzdCB0 aGF0IHRoZQoJICAgIGxpYnJhcmllcyBhcmUgdGhlcmUuICAqLwoJIGlmIChnX3NpZ25hbF9oYW5k bGVyX2ZpbmQgKEdfT0JKRUNUIChncyksIEdfU0lHTkFMX01BVENIX0ZVTkMsCgkJCQkgICAgMCwg MCwgMCwgR19DQUxMQkFDSyAoY2FsbGJhY2spLCAwKSkKCSAgIGd0a19tYWluX2l0ZXJhdGlvbiAo KTsKICAgICAgIF1dKV0sCiAgICBbR1RLX0NPTVBJTEVTPXllc10pCiAgQUNfTVNHX1JFU1VMVChb JEdUS19DT01QSUxFU10pCiAgaWYgdGVzdCAiJHtHVEtfQ09NUElMRVN9IiAhPSAieWVzIjsgdGhl bgogICAgR1RLX09CSj0KICAgIGlmIHRlc3QgIiRVU0VfWF9UT09MS0lUIiAhPSAibWF5YmUiOyB0 aGVuCiAgICAgIEFDX01TR19FUlJPUihbR3RrKyB3YW50ZWQsIGJ1dCBpdCBkb2VzIG5vdCBjb21w aWxlLCBzZWUgY29uZmlnLmxvZy4gIE1heWJlIHNvbWUgeDExLWRldmVsIGZpbGVzIG1pc3Npbmc/ XSk7CiAgICBmaQogIGVsc2UKICAgIENfU1dJVENIX1hfU0lURT0iJENfU1dJVENIX1hfU0lURSAk R1RLX0NGTEFHUyIKICAgIEhBVkVfR1RLPXllcwogICAgQUNfREVGSU5FKFVTRV9HVEssIDEsIFtE ZWZpbmUgdG8gMSBpZiB1c2luZyBHVEsuXSkKICAgIEdUS19PQko9Imd0a3V0aWwubyAkR1RLX09C SiIKICAgIHRlcm1faGVhZGVyPSRndGtfdGVybV9oZWFkZXIKICAgIFVTRV9YX1RPT0xLSVQ9bm9u ZQogICAgaWYgIiRQS0dfQ09ORklHIiAtLWF0bGVhc3QtdmVyc2lvbj0yLjEwIGd0aystMi4wOyB0 aGVuCiAgICAgIDoKICAgIGVsc2UKICAgICAgQUNfTVNHX1dBUk4oW1tZb3VyIHZlcnNpb24gb2Yg R3RrKyB3aWxsIGhhdmUgcHJvYmxlbXMgd2l0aAogICAgICAgY2xvc2luZyBvcGVuIGRpc3BsYXlz LiAgVGhpcyBpcyBubyBwcm9ibGVtIGlmIHlvdSBqdXN0IHVzZQogICAgICAgb25lIGRpc3BsYXks IGJ1dCBpZiB5b3UgdXNlIG1vcmUgdGhhbiBvbmUgYW5kIGNsb3NlIG9uZSBvZiB0aGVtCiAgICAg ICBFbWFjcyBtYXkgY3Jhc2guXV0pCiAgICAgIHNsZWVwIDMKICAgIGZpCiAgZmkKCmZpCkFDX1NV QlNUKEdUS19PQkopCgoKaWYgdGVzdCAiJHtIQVZFX0dUS30iID0gInllcyI7IHRoZW4KCiAgZG5s ICBHVEsgc2Nyb2xsYmFycyByZXNlbWJsZSB0b29sa2l0IHNjcm9sbGJhcnMgYSBsb3QsIHNvIHRv IGF2b2lkCiAgZG5sICBhIGxvdCBpZiAjaWZkZWY6cywgc2F5IHdlIGhhdmUgdG9vbGtpdCBzY3Jv bGxiYXJzLgogIGlmIHRlc3QgIiR3aXRoX3Rvb2xraXRfc2Nyb2xsX2JhcnMiICE9IG5vOyB0aGVu CiAgICB3aXRoX3Rvb2xraXRfc2Nyb2xsX2JhcnM9eWVzCiAgZmkKCiAgZG5sICBDaGVjayBpZiB3 ZSBoYXZlIHRoZSBvbGQgZmlsZSBzZWxlY3Rpb24gZGlhbG9nIGRlY2xhcmVkIGFuZAogIGRubCAg aW4gdGhlIGxpbmsgbGlicmFyeS4gIEluIDIueCBpdCBtYXkgYmUgaW4gdGhlIGxpYnJhcnksCiAg ZG5sICBidXQgbm90IGRlY2xhcmVkIGlmIGRlcHJlY2F0ZWQgZmVhdHVyZWQgaGFzIGJlZW4gc2Vs ZWN0ZWQgb3V0LgogIGRubCAgQUNfQ0hFQ0tfREVDTCBjaGVja3MgZm9yIGEgbWFjcm8sIHNvIGNo ZWNrIGZvciBHVEtfVFlQRV9GSUxFX1NFTEVDVElPTi4KICBIQVZFX0dUS19GSUxFX1NFTEVDVElP Tj1ubwogIEFDX0NIRUNLX0RFQ0woR1RLX1RZUEVfRklMRV9TRUxFQ1RJT04sIEhBVkVfR1RLX0ZJ TEVfU0VMRUNUSU9OPXllcywKICAgICAgICAgICAgICAgICAgIEhBVkVfR1RLX0ZJTEVfU0VMRUNU SU9OPW5vLCBbQUNfSU5DTFVERVNfREVGQVVMVAojaW5jbHVkZSA8Z3RrL2d0ay5oPl0pCiAgaWYg dGVzdCAiJEhBVkVfR1RLX0ZJTEVfU0VMRUNUSU9OIiA9IHllczsgdGhlbgogICAgQUNfQ0hFQ0tf RlVOQ1MoZ3RrX2ZpbGVfc2VsZWN0aW9uX25ldykKICBmaQoKICBkbmwgU2FtZSBhcyBhYm92ZSBm b3IgZ3RrX2hhbmRsZV9ib3guCiAgSEFWRV9HVEtfSEFORExFX0JPWD1ubwogIEFDX0NIRUNLX0RF Q0woR1RLX1RZUEVfSEFORExFX0JPWCwgSEFWRV9HVEtfSEFORExFX0JPWD15ZXMsCiAgICAgICAg ICAgICAgICAgICBIQVZFX0dUS19IQU5ETEVfQk9YPW5vLCBbQUNfSU5DTFVERVNfREVGQVVMVAoj aW5jbHVkZSA8Z3RrL2d0ay5oPl0pCiAgaWYgdGVzdCAiJEhBVkVfR1RLX0hBTkRMRV9CT1giID0g eWVzOyB0aGVuCiAgICBBQ19DSEVDS19GVU5DUyhndGtfaGFuZGxlX2JveF9uZXcpCiAgZmkKCiAg ZG5sIFNhbWUgYXMgYWJvdmUgZm9yIGd0a190ZWFyb2ZmX21lbnVfaXRlbS4KICBIQVZFX0dUS19U RUFST0ZGX01FTlVfSVRFTT1ubwogIEFDX0NIRUNLX0RFQ0woR1RLX1RZUEVfVEVBUk9GRl9NRU5V X0lURU0sIEhBVkVfR1RLX1RFQVJPRkZfTUVOVV9JVEVNPXllcywKICAgICAgICAgICAgICAgICAg IEhBVkVfR1RLX1RFQVJPRkZfTUVOVV9JVEVNPW5vLCBbQUNfSU5DTFVERVNfREVGQVVMVAojaW5j bHVkZSA8Z3RrL2d0ay5oPl0pCiAgaWYgdGVzdCAiJEhBVkVfR1RLX1RFQVJPRkZfTUVOVV9JVEVN IiA9IHllczsgdGhlbgogICAgQUNfQ0hFQ0tfRlVOQ1MoZ3RrX3RlYXJvZmZfbWVudV9pdGVtX25l dykKICBmaQoKICBkbmwgQ2hlY2sgZm9yIGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGluIDIuMTQgYW5k IGxhdGVyLgogIEFDX0NIRUNLX0ZVTkNTKGd0a193aWRnZXRfZ2V0X3dpbmRvdyBndGtfd2lkZ2V0 X3NldF9oYXNfd2luZG93IFwKICAgICAgICAgICAgICAgICBndGtfZGlhbG9nX2dldF9hY3Rpb25f YXJlYSBndGtfd2lkZ2V0X2dldF9zZW5zaXRpdmUgXAogICAgICAgICAgICAgICAgIGd0a193aWRn ZXRfZ2V0X21hcHBlZCBndGtfYWRqdXN0bWVudF9nZXRfcGFnZV9zaXplIFwKICAgICAgICAgICAg ICAgICBndGtfb3JpZW50YWJsZV9zZXRfb3JpZW50YXRpb24gXAoJCSBndGtfd2luZG93X3NldF9o YXNfcmVzaXplX2dyaXApCgogdGVybV9oZWFkZXI9Z3RrdXRpbC5oCmZpCgpDRkxBR1M9JE9MRF9D RkxBR1MKTElCUz0kT0xEX0xJQlMKCmRubCBELUJ1cyBoYXMgYmVlbiB0ZXN0ZWQgdW5kZXIgR05V L0xpbnV4IG9ubHkuICBNdXN0IGJlIGFkYXB0ZWQgZm9yCmRubCBvdGhlciBwbGF0Zm9ybXMuCkhB VkVfREJVUz1ubwpEQlVTX09CSj0KaWYgdGVzdCAiJHt3aXRoX2RidXN9IiA9ICJ5ZXMiOyB0aGVu CiAgIEVNQUNTX0NIRUNLX01PRFVMRVMoW0RCVVNdLCBbZGJ1cy0xID49IDEuMF0pCiAgIGlmIHRl c3QgIiRIQVZFX0RCVVMiID0geWVzOyB0aGVuCiAgICAgQUNfREVGSU5FKEhBVkVfREJVUywgMSwg W0RlZmluZSB0byAxIGlmIHVzaW5nIEQtQnVzLl0pCiAgICAgZG5sIGRidXNfd2F0Y2hfZ2V0X3Vu aXhfZmQgaGFzIGJlZW4gaW50cm9kdWNlZCBpbiBELUJ1cyAxLjEuMS4KICAgICBkbmwgZGJ1c190 eXBlX2lzX3ZhbGlkIGFuZCBkYnVzX3ZhbGlkYXRlXyogaGF2ZSBiZWVuIGludHJvZHVjZWQgaW4K ICAgICBkbmwgRC1CdXMgMS41LjEyLgogICAgIE9MRF9MSUJTPSRMSUJTCiAgICAgTElCUz0iJExJ QlMgJERCVVNfTElCUyIKICAgICBBQ19DSEVDS19GVU5DUyhkYnVzX3dhdGNoX2dldF91bml4X2Zk IFwKCQkgICAgZGJ1c190eXBlX2lzX3ZhbGlkIFwKCQkgICAgZGJ1c192YWxpZGF0ZV9idXNfbmFt ZSBcCiAgICAgICAgICAgICAgICAgICAgZGJ1c192YWxpZGF0ZV9wYXRoIFwKCQkgICAgZGJ1c192 YWxpZGF0ZV9pbnRlcmZhY2UgXAoJCSAgICBkYnVzX3ZhbGlkYXRlX21lbWJlcikKICAgICBMSUJT PSRPTERfTElCUwogICAgIERCVVNfT0JKPWRidXNiaW5kLm8KICAgZmkKZmkKQUNfU1VCU1QoREJV U19DRkxBR1MpCkFDX1NVQlNUKERCVVNfTElCUykKQUNfU1VCU1QoREJVU19PQkopCgpkbmwgR1Nl dHRpbmdzIGhhcyBiZWVuIHRlc3RlZCB1bmRlciBHTlUvTGludXggb25seS4KSEFWRV9HU0VUVElO R1M9bm8KaWYgdGVzdCAiJHtIQVZFX1gxMX0iID0gInllcyIgJiYgdGVzdCAiJHt3aXRoX2dzZXR0 aW5nc30iID0gInllcyI7IHRoZW4KICAgRU1BQ1NfQ0hFQ0tfTU9EVUxFUyhbR1NFVFRJTkdTXSwg W2dpby0yLjAgPj0gMi4yNl0pCiAgIGlmIHRlc3QgIiRIQVZFX0dTRVRUSU5HUyIgPSAieWVzIjsg dGhlbgogICAgICBvbGRfQ0ZMQUdTPSRDRkxBR1MKICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHU0VU VElOR1NfQ0ZMQUdTIgogICAgICBvbGRfTElCUz0kTElCUwogICAgICBMSUJTPSIkTElCUyAkR1NF VFRJTkdTX0xJQlMiCiAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBHU2V0dGluZ3MgaXMg aW4gZ2lvXSkKICAgICAgQUNfTElOS19JRkVMU0UoCiAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0o CiAJICAgICBbWy8qIENoZWNrIHRoYXQgZ3NldHRpbmdzIHJlYWxseSBpcyBwcmVzZW50LiAgKi8K ICAgICAgICAgICAgICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgoJICAgICAjaW5jbHVkZSA8Z2lv L2dpby5oPgogCSAgICAgXV0sCiAJICAgICBbWwoJICAgICAgIEdTZXR0aW5ncyAqc2V0dGluZ3M7 CgkgICAgICAgR1ZhcmlhbnQgKnZhbCA9IGdfc2V0dGluZ3NfZ2V0X3ZhbHVlIChzZXR0aW5ncywg IiIpOwogCSAgICAgXV0pXSwKIAkgW10sIEhBVkVfR1NFVFRJTkdTPW5vKQogICAgICBBQ19NU0df UkVTVUxUKFskSEFWRV9HU0VUVElOR1NdKQoKICAgICAgaWYgdGVzdCAiJEhBVkVfR1NFVFRJTkdT IiA9ICJ5ZXMiOyB0aGVuCiAgICAgICAgQUNfREVGSU5FKEhBVkVfR1NFVFRJTkdTLCAxLCBbRGVm aW5lIHRvIDEgaWYgdXNpbmcgR1NldHRpbmdzLl0pCiAJU0VUVElOR1NfQ0ZMQUdTPSIkR1NFVFRJ TkdTX0NGTEFHUyIKIAlTRVRUSU5HU19MSUJTPSIkR1NFVFRJTkdTX0xJQlMiCiAgICAgIGZpCiAg ICAgIENGTEFHUz0kb2xkX0NGTEFHUwogICAgICBMSUJTPSRvbGRfTElCUwogICBmaQpmaQoKZG5s IEdDb25mIGhhcyBiZWVuIHRlc3RlZCB1bmRlciBHTlUvTGludXggb25seS4KZG5sIFRoZSB2ZXJz aW9uIGlzIHJlYWxseSBhcmJpdHJhcnksIGl0IGlzIGFib3V0IHRoZSBzYW1lIGFnZSBhcyBHdGsr IDIuNi4KSEFWRV9HQ09ORj1ubwppZiB0ZXN0ICIke0hBVkVfWDExfSIgPSAieWVzIiAmJiB0ZXN0 ICIke3dpdGhfZ2NvbmZ9IiA9ICJ5ZXMiOyB0aGVuCiAgIEVNQUNTX0NIRUNLX01PRFVMRVMoW0dD T05GXSwgW2djb25mLTIuMCA+PSAyLjEzXSkKICAgaWYgdGVzdCAiJEhBVkVfR0NPTkYiID0geWVz OyB0aGVuCiAgICAgIEFDX0RFRklORShIQVZFX0dDT05GLCAxLCBbRGVmaW5lIHRvIDEgaWYgdXNp bmcgR0NvbmYuXSkKICAgICAgZG5sIE5ld2VyIEdDb25mIGRvZXNuJ3QgbGluayB3aXRoIGdfb2Jq ZWN0cywgc28gdGhpcyBpcyBub3QgZGVmaW5lZC4KICAgICAgU0VUVElOR1NfQ0ZMQUdTPSIkU0VU VElOR1NfQ0ZMQUdTICRHQ09ORl9DRkxBR1MiCiAgICAgIFNFVFRJTkdTX0xJQlM9IiRTRVRUSU5H U19MSUJTICRHQ09ORl9MSUJTIgogICBmaQpmaQoKaWYgdGVzdCAiJEhBVkVfR1NFVFRJTkdTIiA9 ICJ5ZXMiIHx8IHRlc3QgIiRIQVZFX0dDT05GIiA9ICJ5ZXMiOyB0aGVuCiAgICBFTUFDU19DSEVD S19NT0RVTEVTKFtHT0JKRUNUXSwgW2dvYmplY3QtMi4wID49IDIuMF0pCiAgICBpZiB0ZXN0ICIk SEFWRV9HT0JKRUNUIiA9ICJ5ZXMiOyB0aGVuCiAgICAgICBTRVRUSU5HU19DRkxBR1M9IiRTRVRU SU5HU19DRkxBR1MgJEdPQkpFQ1RfQ0ZMQUdTIgogICAgICAgU0VUVElOR1NfTElCUz0iJFNFVFRJ TkdTX0xJQlMgJEdPQkpFQ1RfTElCUyIKICAgIGZpCiAgICBTQVZFX0NGTEFHUz0iJENGTEFHUyIK ICAgIFNBVkVfTElCUz0iJExJQlMiCiAgICBDRkxBR1M9IiRTRVRUSU5HU19DRkxBR1MgJENGTEFH UyIKICAgIExJQlM9IiRTRVRUSU5HU19MSUJTICRMSUJTIgogICAgQ0ZMQUdTPSIkU0FWRV9DRkxB R1MiCiAgICBMSUJTPSIkU0FWRV9MSUJTIgpmaQpBQ19TVUJTVChTRVRUSU5HU19DRkxBR1MpCkFD X1NVQlNUKFNFVFRJTkdTX0xJQlMpCgoKZG5sIFNFTGludXggaXMgYXZhaWxhYmxlIGZvciBHTlUv TGludXggb25seS4KSEFWRV9MSUJTRUxJTlVYPW5vCkxJQlNFTElOVVhfTElCUz0KaWYgdGVzdCAi JHt3aXRoX3NlbGludXh9IiA9ICJ5ZXMiOyB0aGVuCiAgIEFDX0NIRUNLX0xJQihbc2VsaW51eF0s IFtsZ2V0ZmlsZWNvbl0sIEhBVkVfTElCU0VMSU5VWD15ZXMsIEhBVkVfTElCU0VMSU5VWD1ubykK ICAgaWYgdGVzdCAiJEhBVkVfTElCU0VMSU5VWCIgPSB5ZXM7IHRoZW4KICAgICAgQUNfREVGSU5F KEhBVkVfTElCU0VMSU5VWCwgMSwgW0RlZmluZSB0byAxIGlmIHVzaW5nIFNFTGludXguXSkKICAg ICAgTElCU0VMSU5VWF9MSUJTPS1sc2VsaW51eAogICBmaQpmaQpBQ19TVUJTVChMSUJTRUxJTlVY X0xJQlMpCgpIQVZFX0dOVVRMUz1ubwpIQVZFX0dOVVRMUzM9bm8KaWYgdGVzdCAiJHt3aXRoX2du dXRsc30iID0gInllcyIgOyB0aGVuCiAgRU1BQ1NfQ0hFQ0tfTU9EVUxFUyhbTElCR05VVExTXSwg W2dudXRscyA+PSAzLjAuMF0sCiAgICBbSEFWRV9HTlVUTFMzPXllc10sIFtIQVZFX0dOVVRMUzM9 bm9dKQogIGlmIHRlc3QgIiR7SEFWRV9HTlVUTFMzfSIgPSAieWVzIjsgdGhlbgogICAgQUNfREVG SU5FKEhBVkVfR05VVExTMywgMSwgW0RlZmluZSBpZiB1c2luZyBHbnVUTFMgdjMuXSkKICAgIEhB VkVfR05VVExTPSJ5ZXMiCiAgZWxzZQogICAgRU1BQ1NfQ0hFQ0tfTU9EVUxFUyhbTElCR05VVExT XSwgW2dudXRscyA+PSAyLjYuNl0sCiAgICAgIFtIQVZFX0dOVVRMUz15ZXNdLCBbSEFWRV9HTlVU TFM9bm9dKQogIGZpCiAgaWYgdGVzdCAiJHtIQVZFX0dOVVRMU30iID0gInllcyI7IHRoZW4KICAg IEFDX0RFRklORShIQVZFX0dOVVRMUywgMSwgW0RlZmluZSBpZiB1c2luZyBHbnVUTFMuXSkKICBm aQoKICAjIFdpbmRvd3MgbG9hZHMgR251VExTIGR5bmFtaWNhbGx5CiAgaWYgdGVzdCAiJHtvcHN5 c30iID0gIm1pbmd3IjsgdGhlbgogICAgTElCR05VVExTX0xJQlM9CiAgZmkKZmkKCkFDX1NVQlNU KExJQkdOVVRMU19MSUJTKQpBQ19TVUJTVChMSUJHTlVUTFNfQ0ZMQUdTKQoKTk9USUZZX09CSj0K Tk9USUZZX1NVTU1BUlk9bm8KCmRubCBGSVhNRT8gIERvbid0IGF1dG8tZGV0ZWN0IG9uIE5TLCBi dXQgZG8gYWxsb3cgc29tZW9uZSB0byBzcGVjaWZ5CmRubCBhIHBhcnRpY3VsYXIgbGlicmFyeS4g IFRoaXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2U/CmlmIHRlc3QgIiR7d2l0aF9uc30iID0geWVz ICYmIHRlc3QgJHt3aXRoX2ZpbGVfbm90aWZpY2F0aW9ufSA9IHllczsgdGhlbgogIHdpdGhfZmls ZV9ub3RpZmljYXRpb249bm8KZmkKCmRubCBNUyBXaW5kb3dzIG5hdGl2ZSBmaWxlIG1vbml0b3Ig aXMgYXZhaWxhYmxlIGZvciBtaW5ndzMyIG9ubHkuCmNhc2UgJHdpdGhfZmlsZV9ub3RpZmljYXRp b24sJG9wc3lzIGluCiAgdzMyLCogfCB5ZXMsbWluZ3cpCiAgICBBQ19DSEVDS19IRUFERVIod2lu ZG93cy5oKQogICAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93aW5kb3dzX2giID0geWVzIDsgdGhl bgogICAgICAgQUNfREVGSU5FKEhBVkVfVzMyTk9USUZZLCAxLCBbRGVmaW5lIHRvIDEgdG8gdXNl IHczMm5vdGlmeS5dKQogICAgICAgTk9USUZZX09CSj13MzJub3RpZnkubwogICAgICAgTk9USUZZ X1NVTU1BUlk9InllcyAodzMyKSIKICAgIGZpIDs7CmVzYWMKCmRubCBnX2ZpbGVfbW9uaXRvciBl eGlzdHMgc2luY2UgZ2xpYiAyLjE4LiAgR19GSUxFX01PTklUT1JfRVZFTlRfTU9WRUQKZG5sIGhh cyBiZWVuIGFkZGVkIGluIGdsaWIgMi4yNC4gIEl0IGhhcyBiZWVuIHRlc3RlZCB1bmRlcgpkbmwg R05VL0xpbnV4IG9ubHkuICBXZSB0YWtlIHByZWNlZGVuY2Ugb3ZlciBpbm90aWZ5LCBidXQgdGhp cyBtYWtlcwpkbmwgb25seSBzZW5zZSB3aGVuIGdsaWIgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBp bm90aWZ5IHN1cHBvcnQuICBIb3cKZG5sIHRvIGNoZWNrPwpjYXNlICR3aXRoX2ZpbGVfbm90aWZp Y2F0aW9uLCROT1RJRllfT0JKIGluCiAgZ2ZpbGUsIHwgeWVzLCkKICAgIEVNQUNTX0NIRUNLX01P RFVMRVMoW0dGSUxFTk9USUZZXSwgW2dpby0yLjAgPj0gMi4yNF0pCiAgICBpZiB0ZXN0ICIkSEFW RV9HRklMRU5PVElGWSIgPSAieWVzIjsgdGhlbgogICAgICAgQUNfREVGSU5FKEhBVkVfR0ZJTEVO T1RJRlksIDEsIFtEZWZpbmUgdG8gMSBpZiB1c2luZyBHRmlsZS5dKQogICAgICAgTk9USUZZX09C Sj1nZmlsZW5vdGlmeS5vCiAgICAgICBOT1RJRllfU1VNTUFSWT0ieWVzIC1sZ2lvIChnZmlsZSki CiAgICBmaSA7Owplc2FjCgpkbmwgaW5vdGlmeSBpcyBvbmx5IGF2YWlsYWJsZSBvbiBHTlUvTGlu dXguCmNhc2UgJHdpdGhfZmlsZV9ub3RpZmljYXRpb24sJE5PVElGWV9PQkogaW4KICBpbm90aWZ5 LCB8IHllcywpCiAgICBBQ19DSEVDS19IRUFERVIoc3lzL2lub3RpZnkuaCkKICAgIGlmIHRlc3Qg IiRhY19jdl9oZWFkZXJfc3lzX2lub3RpZnlfaCIgPSB5ZXMgOyB0aGVuCglBQ19DSEVDS19GVU5D KGlub3RpZnlfaW5pdDEpCglpZiB0ZXN0ICIkYWNfY3ZfZnVuY19pbm90aWZ5X2luaXQxIiA9IHll czsgdGhlbgoJICBBQ19ERUZJTkUoSEFWRV9JTk9USUZZLCAxLCBbRGVmaW5lIHRvIDEgdG8gdXNl IGlub3RpZnkuXSkKCSAgTk9USUZZX09CSj1pbm90aWZ5Lm8KCSAgTk9USUZZX1NVTU1BUlk9Inll cyAtbGdsaWJjIChpbm90aWZ5KSIKICAgICAgIGZpCiAgICBmaSA7Owplc2FjCgpjYXNlICR3aXRo X2ZpbGVfbm90aWZpY2F0aW9uLCROT1RJRllfT0JKIGluCiAgeWVzLCogfCBubywqIHwgKiw/Kikg OzsKICAqKSBBQ19NU0dfRVJST1IoW0ZpbGUgbm90aWZpY2F0aW9uIGAkd2l0aF9maWxlX25vdGlm aWNhdGlvbicgcmVxdWVzdGVkIGJ1dCByZXF1aXJlbWVudHMgbm90IGZvdW5kLl0pIDs7CmVzYWMK CmlmIHRlc3QgLW4gIiROT1RJRllfT0JKIjsgdGhlbgogICBBQ19ERUZJTkUoVVNFX0ZJTEVfTk9U SUZZLCAxLCBbRGVmaW5lIHRvIDEgaWYgdXNpbmcgZmlsZSBub3RpZmljYXRpb25zLl0pCmZpCkFD X1NVQlNUKE5PVElGWV9PQkopCkFDX1NVQlNUKEdGSUxFTk9USUZZX0NGTEFHUykKQUNfU1VCU1Qo R0ZJTEVOT1RJRllfTElCUykKCmRubCBEbyBub3QgcHV0IHdoaXRlc3BhY2UgYmVmb3JlIHRoZSAj aW5jbHVkZSBzdGF0ZW1lbnRzIGJlbG93LgpkbmwgT2xkZXIgY29tcGlsZXJzIChlZyBzdW5vczQg Y2MpIGNob2tlIG9uIGl0LgpIQVZFX1hBVzNEPW5vCkxVQ0lEX0xJQlc9CmlmIHRlc3QgeCIke1VT RV9YX1RPT0xLSVR9IiA9IHhtYXliZSB8fCB0ZXN0IHgiJHtVU0VfWF9UT09MS0lUfSIgPSB4TFVD SUQ7IHRoZW4KICBpZiB0ZXN0ICIkd2l0aF94YXczZCIgIT0gbm87IHRoZW4KICAgIEFDX0NBQ0hF X1ZBTChlbWFjc19jdl94YXczZCwKICAgIFtBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFN KFtbCiNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CiNpbmNsdWRlIDxYMTEvWGF3M2QvU2ltcGxl Lmg+XV0sCiAgICAgIFtbXV0pXSwKICAgICAgW0FDX0NIRUNLX0xJQihYYXczZCwgWGF3U2Nyb2xs YmFyU2V0VGh1bWIsCiAgICAgICAgICAgICAgICAgICAgZW1hY3NfY3ZfeGF3M2Q9eWVzLCBlbWFj c19jdl94YXczZD1ubyldLAogICAgICBlbWFjc19jdl94YXczZD1ubyldKQogIGVsc2UKICAgIGVt YWNzX2N2X3hhdzNkPW5vCiAgZmkKICBpZiB0ZXN0ICRlbWFjc19jdl94YXczZCA9IHllczsgdGhl bgogICAgQUNfTVNHX0NIRUNLSU5HKGZvciB4YXczZCkKICAgIEFDX01TR19SRVNVTFQoW3llczsg dXNpbmcgTHVjaWQgdG9vbGtpdF0pCiAgICBVU0VfWF9UT09MS0lUPUxVQ0lECiAgICBIQVZFX1hB VzNEPXllcwogICAgTFVDSURfTElCVz0tbFhhdzNkCiAgICBBQ19ERUZJTkUoSEFWRV9YQVczRCwg MSwKICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIFhhdzNkIGxpYnJh cnkgKC1sWGF3M2QpLl0pCiAgZWxzZQogICAgQUNfTVNHX0NIRUNLSU5HKGZvciB4YXczZCkKICAg IEFDX01TR19SRVNVTFQobm8pCiAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGxpYlhhdykKICAgIEFD X0NBQ0hFX1ZBTChlbWFjc19jdl94YXcsCiAgICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJP R1JBTShbWwojaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgojaW5jbHVkZSA8WDExL1hhdy9TaW1w bGUuaD5dXSwKICAgICAgW1tdXSldLAogICAgICBlbWFjc19jdl94YXc9eWVzLAogICAgICBlbWFj c19jdl94YXc9bm8pXSkKICAgIGlmIHRlc3QgJGVtYWNzX2N2X3hhdyA9IHllczsgdGhlbgogICAg ICBBQ19NU0dfUkVTVUxUKFt5ZXM7IHVzaW5nIEx1Y2lkIHRvb2xraXRdKQogICAgICBVU0VfWF9U T09MS0lUPUxVQ0lECiAgICAgIExVQ0lEX0xJQlc9LWxYYXcKICAgIGVsaWYgdGVzdCB4IiR7VVNF X1hfVE9PTEtJVH0iID0geExVQ0lEOyB0aGVuCiAgICAgIEFDX01TR19FUlJPUihbTHVjaWQgdG9v bGtpdCByZXF1aXJlcyBYMTEvWGF3IGluY2x1ZGUgZmlsZXNdKQogICAgZWxzZQogICAgICBBQ19N U0dfRVJST1IoW05vIFggdG9vbGtpdCBjb3VsZCBiZSBmb3VuZC4KSWYgeW91IGFyZSBzdXJlIHlv dSB3YW50IEVtYWNzIGNvbXBpbGVkIHdpdGhvdXQgYW4gWCB0b29sa2l0LCBwYXNzCiAgLS13aXRo LXgtdG9vbGtpdD1ubwp0byBjb25maWd1cmUuICBPdGhlcndpc2UsIGluc3RhbGwgdGhlIGRldmVs b3BtZW50IGxpYnJhcmllcyBmb3IgdGhlIHRvb2xraXQKdGhhdCB5b3Ugd2FudCB0byB1c2UgKGUu Zy4gR3RrKykgYW5kIHJlLXJ1biBjb25maWd1cmUuXSkKICAgIGZpCiAgZmkKZmkKClhfVE9PTEtJ VF9UWVBFPSRVU0VfWF9UT09MS0lUCgpMSUJYVFI2PQpMSUJYTVU9CmlmIHRlc3QgIiR7VVNFX1hf VE9PTEtJVH0iICE9ICJub25lIjsgdGhlbgogIEFDX01TR19DSEVDS0lORyhYMTEgdG9vbGtpdCB2 ZXJzaW9uKQogIEFDX0NBQ0hFX1ZBTChlbWFjc19jdl94MTFfdG9vbGtpdF92ZXJzaW9uXzYsCiAg W0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8WDExL0ludHJpbnNp Yy5oPl1dLApbWyNpZiBYdFNwZWNpZmljYXRpb25SZWxlYXNlIDwgNgpmYWlsOwojZW5kaWYKXV0p XSwgZW1hY3NfY3ZfeDExX3Rvb2xraXRfdmVyc2lvbl82PXllcywgZW1hY3NfY3ZfeDExX3Rvb2xr aXRfdmVyc2lvbl82PW5vKV0pCiAgSEFWRV9YMTFYVFI2PSRlbWFjc19jdl94MTFfdG9vbGtpdF92 ZXJzaW9uXzYKICBpZiB0ZXN0ICRlbWFjc19jdl94MTFfdG9vbGtpdF92ZXJzaW9uXzYgPSB5ZXM7 IHRoZW4KICAgIEFDX01TR19SRVNVTFQoNiBvciBuZXdlcikKICAgIEFDX0RFRklORShIQVZFX1gx MVhUUjYsIDEsCgkgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIFgxMVI2IG9yIG5l d2VyIHZlcnNpb24gb2YgWHQuXSkKICAgIExJQlhUUjY9Ii1sU00gLWxJQ0UiCiAgICBjYXNlICIk b3BzeXMiIGluCiAgICAgICMjIFVzZSBsaWJ3LmEgYWxvbmcgd2l0aCBYMTFSNiBYdC4KICAgICAg dW5peHdhcmUpIExJQlhUUjY9IiRMSUJYVFI2IC1sdyIgOzsKICAgIGVzYWMKICBlbHNlCiAgICBB Q19NU0dfUkVTVUxUKGJlZm9yZSA2KQogIGZpCgpkbmwgSWYgdXNpbmcgdG9vbGtpdCwgY2hlY2sg d2hldGhlciBsaWJYbXUuYSBleGlzdHMuCmRubCB0cmFubGVAaW50ZWxsaWNvcnAuY29tIHNheXMg bGliWG11LmEgY2FuIG5lZWQgWHRNYWxsb2MgaW4gbGliWHQuYSB0byBsaW5rLgogIE9MRExJQlM9 IiRMSUJTIgogIGlmIHRlc3QgeCRIQVZFX1gxMVhUUjYgPSB4eWVzOyB0aGVuCiAgICBPVEhFUkxJ QlM9Jy1sWHQgLWxTTSAtbElDRScKICBlbHNlCiAgICBPVEhFUkxJQlM9Jy1sWHQnCiAgZmkKICBB Q19TRUFSQ0hfTElCUyhbWG11Q29udmVydFN0YW5kYXJkU2VsZWN0aW9uXSwgW1htdV0sIFtdLCBb XSwgWyRPVEhFUkxJQlNdKQogIGlmIHRlc3QgIlgkTElCUyIgIT0gIlgkT0xETElCUyI7IHRoZW4K ICAgIExJQlhNVT0kYWNfY3Zfc2VhcmNoX1htdUNvbnZlcnRTdGFuZGFyZFNlbGVjdGlvbgogIGZp CiAgTElCUz0kT0xETElCUwogIGRubCBhY19jdl9zZWFyY2hfWG11Q29udmVydFN0YW5kYXJkU2Vs ZWN0aW9uIGlzIGFsc28gcmVmZXJlbmNlZCBiZWxvdy4KZmkKQUNfU1VCU1QoTElCWFRSNikKQUNf U1VCU1QoTElCWE1VKQoKTElCWFA9CmlmIHRlc3QgIiR7VVNFX1hfVE9PTEtJVH0iID0gIk1PVElG IjsgdGhlbgogICMgT3Blbk1vdGlmIG1heSBiZSBpbnN0YWxsZWQgaW4gc3VjaCBhIHdheSBvbiBz b21lIEdOVS9MaW51eCBzeXN0ZW1zLgogIGlmIHRlc3QgLWQgL3Vzci9pbmNsdWRlL29wZW5tb3Rp ZjsgdGhlbgogICAgQ1BQRkxBR1M9Ii1JL3Vzci9pbmNsdWRlL29wZW5tb3RpZiAkQ1BQRkxBR1Mi CiAgICBlbWFjc19jdl9vcGVubW90aWY9eWVzCiAgICBjYXNlICIkY2Fub25pY2FsIiBpbgogICAg ICB4ODZfNjQtKi1saW51eC1nbnUqIHwgcG93ZXJwYzY0LSotbGludXgtZ251KiB8IHNwYXJjNjQt Ki1saW51eC1nbnUqKQogICAgICB0ZXN0IC1kIC91c3IvbGliNjQvb3Blbm1vdGlmICYmIExERkxB R1M9Ii1ML3Vzci9saWI2NC9vcGVubW90aWYgJExERkxBR1MiCiAgICAgIDs7CiAgICAgICopCiAg ICAgIHRlc3QgLWQgL3Vzci9saWIvb3Blbm1vdGlmICYmIExERkxBR1M9Ii1ML3Vzci9saWIvb3Bl bm1vdGlmICRMREZMQUdTIgogICAgZXNhYwogIGVsc2UKICAgIGVtYWNzX2N2X29wZW5tb3RpZj1u bwogIGZpCiAgQUNfQ0FDSEVfQ0hFQ0soZm9yIChPcGVuKU1vdGlmIHZlcnNpb24gMi4xLCBlbWFj c19jdl9tb3RpZl92ZXJzaW9uXzJfMSwKICBbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJP R1JBTShbWyNpbmNsdWRlIDxYbS9YbS5oPl1dLAogICAgW1sjaWYgWG1WRVJTSU9OID4gMiB8fCAo WG1WRVJTSU9OID09IDIgJiYgWG1SRVZJU0lPTiA+PSAxKQppbnQgeCA9IDU7CiNlbHNlCk1vdGlm IHZlcnNpb24gcHJpb3IgdG8gMi4xLgojZW5kaWZdXSldLAogICAgZW1hY3NfY3ZfbW90aWZfdmVy c2lvbl8yXzE9eWVzLCBlbWFjc19jdl9tb3RpZl92ZXJzaW9uXzJfMT1ubyldKQogIGlmIHRlc3Qg JGVtYWNzX2N2X21vdGlmX3ZlcnNpb25fMl8xID0geWVzOyB0aGVuCiAgICBBQ19DSEVDS19MSUIo WHAsIFhwQ3JlYXRlQ29udGV4dCwgTElCWFA9LWxYcCkKICAgIGlmIHRlc3QgeCRlbWFjc19jdl9v cGVubW90aWYgPSB4eWVzOyB0aGVuCiAgICAgIFJFQUxfQ1BQRkxBR1M9Ii1JL3Vzci9pbmNsdWRl L29wZW5tb3RpZiAkUkVBTF9DUFBGTEFHUyIKICAgIGZpCiAgZWxzZQogICAgQUNfQ0FDSEVfQ0hF Q0soZm9yIExlc3NUaWYgd2hlcmUgc29tZSBzeXN0ZW1zIHB1dCBpdCwgZW1hY3NfY3ZfbGVzc3Rp ZiwKICAgICMgV2UgcHV0IHRoaXMgaW4gQ0ZMQUdTIHRlbXBvcmFyaWx5IHRvIHByZWNlZGUgb3Ro ZXIgLUkgb3B0aW9ucwogICAgIyB0aGF0IG1pZ2h0IGJlIGluIENGTEFHUyB0ZW1wb3JhcmlseS4K ICAgICMgV2UgcHV0IHRoaXMgaW4gQ1BQRkxBR1Mgd2hlcmUgaXQgcHJlY2VkZXMgdGhlIG90aGVy IC1JIG9wdGlvbnMuCiAgICBPTERfQ1BQRkxBR1M9JENQUEZMQUdTCiAgICBPTERfQ0ZMQUdTPSRD RkxBR1MKICAgIENQUEZMQUdTPSItSS91c3IvWDExUjYvTGVzc1RpZi9Nb3RpZjEuMi9pbmNsdWRl ICRDUFBGTEFHUyIKICAgIENGTEFHUz0iLUkvdXNyL1gxMVI2L0xlc3NUaWYvTW90aWYxLjIvaW5j bHVkZSAkQ0ZMQUdTIgogICAgW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sj aW5jbHVkZSA8L3Vzci9YMTFSNi9MZXNzVGlmL01vdGlmMS4yL2luY2x1ZGUvWG0vWG0uaD5dXSwK ICAgICAgW1tpbnQgeCA9IDU7XV0pXSwKICAgICAgZW1hY3NfY3ZfbGVzc3RpZj15ZXMsIGVtYWNz X2N2X2xlc3N0aWY9bm8pXSkKICAgIGlmIHRlc3QgJGVtYWNzX2N2X2xlc3N0aWYgPSB5ZXM7IHRo ZW4KICAgICAgIyBNYWtlIHN1cmUgdGhpcyAtSSBvcHRpb24gcmVtYWlucyBpbiBDUFBGTEFHUyBh ZnRlciBpdCBpcyBzZXQKICAgICAgIyBiYWNrIHRvIFJFQUxfQ1BQRkxBR1MuCiAgICAgICMgVGhl cmUgaXMgbm8gbmVlZCB0byBjaGFuZ2UgUkVBTF9DRkxBR1MsIGJlY2F1c2UgUkVBTF9DRkxBR1Mg ZG9lcyBub3QKICAgICAgIyBoYXZlIHRob3NlIG90aGVyIC1JIG9wdGlvbnMgYW55d2F5LiAgVWx0 aW1hdGVseSwgaGF2aW5nIHRoaXMKICAgICAgIyBkaXJlY3RvcnkgdWx0aW1hdGVseSBpbiBDUFBG TEFHUyB3aWxsIGJlIGVub3VnaC4KICAgICAgUkVBTF9DUFBGTEFHUz0iLUkvdXNyL1gxMVI2L0xl c3NUaWYvTW90aWYxLjIvaW5jbHVkZSAkUkVBTF9DUFBGTEFHUyIKICAgICAgTERGTEFHUz0iLUwv dXNyL1gxMVI2L0xlc3NUaWYvTW90aWYxLjIvbGliICRMREZMQUdTIgogICAgZWxzZQogICAgICBD RkxBR1M9JE9MRF9DRkxBR1MKICAgICAgQ1BQRkxBR1M9JE9MRF9DUFBGTEFHUwogICAgZmkKICBm aQogIEFDX0NIRUNLX0hFQURFUihbWG0vQnVsbGV0aW5CLmhdLCBbXSwKICAgIFtBQ19NU0dfRVJS T1IoW01vdGlmIHRvb2xraXQgcmVxdWVzdGVkIGJ1dCByZXF1aXJlbWVudHMgbm90IGZvdW5kLl0p XSkKZmkKCmRubCBVc2UgdG9vbGtpdCBzY3JvbGwgYmFycyBpZiBjb25maWd1cmVkIGZvciBHVEsg b3IgWCB0b29sa2l0IGFuZCBlaXRoZXIKZG5sIHVzaW5nIE1vdGlmIG9yIFhhdzNkIGlzIGF2YWls YWJsZSwgYW5kIHVubGVzcwpkbmwgLS13aXRoLXRvb2xraXQtc2Nyb2xsLWJhcnM9bm8gd2FzIHNw ZWNpZmllZC4KCkFIX1RFTVBMQVRFKFVTRV9UT09MS0lUX1NDUk9MTF9CQVJTLAoJICAgIFtEZWZp bmUgdG8gMSBpZiB3ZSBzaG91bGQgdXNlIHRvb2xraXQgc2Nyb2xsIGJhcnMuXSlkbmwKVVNFX1RP T0xLSVRfU0NST0xMX0JBUlM9bm8KaWYgdGVzdCAiJHt3aXRoX3Rvb2xraXRfc2Nyb2xsX2JhcnN9 IiAhPSAibm8iOyB0aGVuCiAgaWYgdGVzdCAiJHtVU0VfWF9UT09MS0lUfSIgIT0gIm5vbmUiOyB0 aGVuCiAgICBpZiB0ZXN0ICIke1VTRV9YX1RPT0xLSVR9IiA9ICJNT1RJRiI7IHRoZW4KICAgICAg QUNfREVGSU5FKFVTRV9UT09MS0lUX1NDUk9MTF9CQVJTKQogICAgICBIQVZFX1hBVzNEPW5vCiAg ICAgIFVTRV9UT09MS0lUX1NDUk9MTF9CQVJTPXllcwogICAgZWxpZiB0ZXN0ICIke0hBVkVfWEFX M0R9IiA9ICJ5ZXMiIHx8IHRlc3QgIiR7VVNFX1hfVE9PTEtJVH0iID0gIkxVQ0lEIjsgdGhlbgog ICAgICBBQ19ERUZJTkUoVVNFX1RPT0xLSVRfU0NST0xMX0JBUlMpCiAgICAgIFVTRV9UT09MS0lU X1NDUk9MTF9CQVJTPXllcwogICAgZmkKICBlbGlmIHRlc3QgIiR7SEFWRV9HVEt9IiA9ICJ5ZXMi OyB0aGVuCiAgICBBQ19ERUZJTkUoVVNFX1RPT0xLSVRfU0NST0xMX0JBUlMpCiAgICBVU0VfVE9P TEtJVF9TQ1JPTExfQkFSUz15ZXMKICBlbGlmIHRlc3QgIiR7SEFWRV9OU30iID0gInllcyI7IHRo ZW4KICAgIEFDX0RFRklORShVU0VfVE9PTEtJVF9TQ1JPTExfQkFSUykKICAgIFVTRV9UT09MS0lU X1NDUk9MTF9CQVJTPXllcwogIGVsaWYgdGVzdCAiJHtIQVZFX1czMn0iID0gInllcyI7IHRoZW4K ICAgIEFDX0RFRklORShVU0VfVE9PTEtJVF9TQ1JPTExfQkFSUykKICAgIFVTRV9UT09MS0lUX1ND Uk9MTF9CQVJTPXllcwogIGZpCmZpCgpkbmwgU2VlIGlmIFhJTSBpcyBhdmFpbGFibGUuCkFDX0NP TVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKCSAgI2luY2x1ZGUgPFgxMS9YbGliLmg+ CgkgICNpbmNsdWRlIDxYMTEvWHJlc291cmNlLmg+XV0sCgkgW1tYSU1Qcm9jICBjYWxsYmFjaztd XSldLAoJIFtIQVZFX1hJTT15ZXMKCSBBQ19ERUZJTkUoSEFWRV9YSU0sIDEsIFtEZWZpbmUgdG8g MSBpZiBYSU0gaXMgYXZhaWxhYmxlXSldLAoJIEhBVkVfWElNPW5vKQoKZG5sIGAtLXdpdGgteGlt JyBub3cgY29udHJvbHMgb25seSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB1c2VfeGltIGF0IHJ1biB0 aW1lLgoKaWYgdGVzdCAiJHt3aXRoX3hpbX0iICE9ICJubyI7IHRoZW4KICBBQ19ERUZJTkUoVVNF X1hJTSwgMSwKCSAgICBbRGVmaW5lIHRvIDEgaWYgd2Ugc2hvdWxkIHVzZSBYSU0sIGlmIGl0IGlz IGF2YWlsYWJsZS5dKQpmaQoKCmlmIHRlc3QgIiR7SEFWRV9YSU19IiAhPSAibm8iOyB0aGVuCiAg bGF0ZV9DRkxBR1M9JENGTEFHUwogIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAgICBDRkxB R1M9IiRDRkxBR1MgLS1wZWRhbnRpYy1lcnJvcnMiCiAgZmkKICBBQ19DT01QSUxFX0lGRUxTRShb QUNfTEFOR19QUk9HUkFNKFtbCiNpbmNsdWRlIDxYMTEvWGxpYi5oPgojaW5jbHVkZSA8WDExL1hy ZXNvdXJjZS5oPl1dLApbW0Rpc3BsYXkgKmRpc3BsYXk7ClhybURhdGFiYXNlIGRiOwpjaGFyICpy ZXNfbmFtZTsKY2hhciAqcmVzX2NsYXNzOwpYSU1Qcm9jICBjYWxsYmFjazsKWFBvaW50ZXIgKmNs aWVudF9kYXRhOwojaWZuZGVmIF9fR05VQ19fCi8qIElmIHdlJ3JlIG5vdCB1c2luZyBHQ0MsIGl0 J3MgcHJvYmFibHkgbm90IFhGcmVlODYsIGFuZCB0aGlzIGlzCiAgIHByb2JhYmx5IHJpZ2h0LCBi dXQgd2UgY2FuJ3QgdXNlIHNvbWV0aGluZyBsaWtlIC0tcGVkYW50aWMtZXJyb3JzLiAgKi8KZXh0 ZXJuIEJvb2wgWFJlZ2lzdGVySU1JbnN0YW50aWF0ZUNhbGxiYWNrKERpc3BsYXkqLCBYcm1EYXRh YmFzZSwgY2hhciosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyKiwgWElNUHJvYywgWFBvaW50ZXIqKTsKI2VuZGlmCih2b2lkKVhSZWdpc3RlcklNSW5zdGFu dGlhdGVDYWxsYmFjayhkaXNwbGF5LCBkYiwgcmVzX25hbWUsIHJlc19jbGFzcywgY2FsbGJhY2ss CiAgIGNsaWVudF9kYXRhKTtdXSldLAogICAgW2VtYWNzX2N2X2FyZzZfc3Rhcj15ZXNdKQogIEFI X1RFTVBMQVRFKFhSZWdpc3RlcklNSW5zdGFudGlhdGVDYWxsYmFja19hcmc2LAogICAgICAgICBb RGVmaW5lIHRvIHRoZSB0eXBlIG9mIHRoZSA2dGggYXJnIG9mIFhSZWdpc3RlcklNSW5zdGFudGlh dGVDYWxsYmFjaywKZWl0aGVyIFhQb2ludGVyIG9yIFhQb2ludGVyKi5dKWRubAogIGlmIHRlc3Qg IiRlbWFjc19jdl9hcmc2X3N0YXIiID0geWVzOyB0aGVuCiAgICBBQ19ERUZJTkUoWFJlZ2lzdGVy SU1JbnN0YW50aWF0ZUNhbGxiYWNrX2FyZzYsIFtYUG9pbnRlcipdKQogIGVsc2UKICAgIEFDX0RF RklORShYUmVnaXN0ZXJJTUluc3RhbnRpYXRlQ2FsbGJhY2tfYXJnNiwgW1hQb2ludGVyXSkKICBm aQogIENGTEFHUz0kbGF0ZV9DRkxBR1MKZmkKCiMjIyBTdGFydCBvZiBmb250LWJhY2tlbmQgKHVu ZGVyIGFueSBwbGF0Zm9ybSkgc2VjdGlvbi4KIyAobm90aGluZyBoZXJlIHlldCAtLSB0aGlzIGlz IGEgcGxhY2Vob2xkZXIpCiMjIyBFbmQgb2YgZm9udC1iYWNrZW5kICh1bmRlciBhbnkgcGxhdGZv cm0pIHNlY3Rpb24uCgojIyMgU3RhcnQgb2YgZm9udC1iYWNrZW5kICh1bmRlciBYMTEpIHNlY3Rp b24uCmlmIHRlc3QgIiR7SEFWRV9YMTF9IiA9ICJ5ZXMiOyB0aGVuCiAgICAjIyBVc2UgLWxYZnQg aWYgYXZhaWxhYmxlLCB1bmxlc3MgYC0td2l0aC14ZnQ9bm8nLgogICAgSEFWRV9YRlQ9bWF5YmUK ICAgIGlmIHRlc3QgIngke3dpdGhfeH0iID0gInhubyI7IHRoZW4KICAgICAgd2l0aF94ZnQ9Im5v IjsKICAgIGZpCgogICAgaWYgdGVzdCAiJHdpdGhfeGZ0IiAhPSBubzsgdGhlbgogICAgICBFTUFD U19DSEVDS19NT0RVTEVTKFtGT05UQ09ORklHXSwgW2ZvbnRjb25maWcgPj0gMi4yLjBdKQogICAg ICB3aXRoX3hmdD0kSEFWRV9GT05UQ09ORklHCiAgICBmaQoKICAgIGlmIHRlc3QgIngke3dpdGhf eGZ0fSIgIT0gInhubyI7IHRoZW4KCiAgICAgIEVNQUNTX0NIRUNLX01PRFVMRVMoW1hGVF0sIFt4 ZnQgPj0gMC4xMy4wXSwgW10sIFtIQVZFX1hGVD1ub10pCiAgICAgICMjIEJlY2F1c2UgeGZ0Zm9u dC5jIHVzZXMgWFJlbmRlclF1ZXJ5RXh0ZW5zaW9uLCB3ZSBhbHNvCiAgICAgICMjIG5lZWQgdG8g bGluayB0byAtbFhyZW5kZXIuCiAgICAgIEhBVkVfWFJFTkRFUj1ubwogICAgICBBQ19DSEVDS19M SUIoWHJlbmRlciwgWFJlbmRlclF1ZXJ5RXh0ZW5zaW9uLCBIQVZFX1hSRU5ERVI9eWVzKQogICAg ICBpZiB0ZXN0ICIkSEFWRV9YRlQiICE9IG5vICYmIHRlc3QgIiRIQVZFX1hSRU5ERVIiICE9IG5v OyB0aGVuCglPTERfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKCU9MRF9DRkxBR1M9IiRDRkxBR1MiCglP TERfTElCUz0iJExJQlMiCglDUFBGTEFHUz0iJENQUEZMQUdTICRYRlRfQ0ZMQUdTIgoJQ0ZMQUdT PSIkQ0ZMQUdTICRYRlRfQ0ZMQUdTIgoJWEZUX0xJQlM9Ii1sWHJlbmRlciAkWEZUX0xJQlMiCglM SUJTPSIkWEZUX0xJQlMgJExJQlMiCglBQ19DSEVDS19IRUFERVIoWDExL1hmdC9YZnQuaCwKCSAg QUNfQ0hFQ0tfTElCKFhmdCwgWGZ0Rm9udE9wZW4sIEhBVkVfWEZUPXllcywgLCAkWEZUX0xJQlMp ICwgLAogICAgICAgICAgW1sjaW5jbHVkZSA8WDExL1guaD5dXSkKCglpZiB0ZXN0ICIke0hBVkVf WEZUfSIgPSAieWVzIjsgdGhlbgoJICBBQ19ERUZJTkUoSEFWRV9YRlQsIDEsIFtEZWZpbmUgdG8g MSBpZiB5b3UgaGF2ZSB0aGUgWGZ0IGxpYnJhcnkuXSkKCSAgICBBQ19TVUJTVChYRlRfTElCUykK CSAgQ19TV0lUQ0hfWF9TSVRFPSIkQ19TV0lUQ0hfWF9TSVRFICRYRlRfQ0ZMQUdTIgoJZmkgICAg ICAgICAgICAgICAgICAgICAgICAjICIke0hBVkVfWEZUfSIgPSAieWVzIgoJQ1BQRkxBR1M9JE9M RF9DUFBGTEFHUwoJQ0ZMQUdTPSRPTERfQ0ZMQUdTCglMSUJTPSRPTERfTElCUwogICAgICBmaSAg ICAgICAgICAgICAgICAgICAgICAgICAgIyAiJEhBVkVfWEZUIiAhPSBubwogICAgZmkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyAieCR7d2l0aF94ZnR9IiAhPSAieG5vIgoKICAgICMjIFdl IHVzZWQgdG8gYWxsb3cgYnVpbGRpbmcgd2l0aCBGcmVlVHlwZSBhbmQgd2l0aG91dCBYZnQuCiAg ICAjIyBIb3dldmVyLCB0aGUgZnR4IGZvbnQgYmFja2VuZCBkcml2ZXIgaXMgbm90IGluIGdvb2Qg c2hhcGUuCiAgICBpZiB0ZXN0ICIkSEFWRV9YRlQiICE9ICJ5ZXMiOyB0aGVuCiAgICAgICBkbmwg Rm9yIHRoZSAiRG9lcyBFbWFjcyB1c2UiIG1lc3NhZ2UgYXQgdGhlIGVuZC4KICAgICAgIEhBVkVf WEZUPW5vCiAgICAgICBIQVZFX0ZSRUVUWVBFPW5vCiAgICBlbHNlCiAgICAgICBkbmwgU3RyaWN0 IGxpbmtlcnMgZmFpbCB3aXRoCiAgICAgICBkbmwgZnRmb250Lm86IHVuZGVmaW5lZCByZWZlcmVu Y2UgdG8gc3ltYm9sICdGVF9OZXdfRmFjZScKICAgICAgIGRubCBpZiAtbGZyZWV0eXBlIGlzIG5v dCBzcGVjaWZpZWQuCiAgICAgICBkbmwgVGhlIGZvbGxvd2luZyBpcyBuZWVkZWQgdG8gc2V0IEZS RUVUWVBFX0xJQlMuCiAgICAgICBFTUFDU19DSEVDS19NT0RVTEVTKFtGUkVFVFlQRV0sIFtmcmVl dHlwZTJdKQoKICAgICAgIHRlc3QgIiRIQVZFX0ZSRUVUWVBFIiA9ICJubyIgJiYgQUNfTVNHX0VS Uk9SKGxpYnhmdCByZXF1aXJlcyBsaWJmcmVldHlwZSkKICAgIGZpCgogICAgSEFWRV9MSUJPVEY9 bm8KICAgIGlmIHRlc3QgIiR7SEFWRV9GUkVFVFlQRX0iID0gInllcyI7IHRoZW4KICAgICAgQUNf REVGSU5FKEhBVkVfRlJFRVRZUEUsIDEsCgkJW0RlZmluZSB0byAxIGlmIHVzaW5nIHRoZSBmcmVl dHlwZSBhbmQgZm9udGNvbmZpZyBsaWJyYXJpZXMuXSkKICAgICAgaWYgdGVzdCAiJHt3aXRoX2xp Ym90Zn0iICE9ICJubyI7IHRoZW4KCUVNQUNTX0NIRUNLX01PRFVMRVMoW0xJQk9URl0sIFtsaWJv dGZdKQoJaWYgdGVzdCAiJEhBVkVfTElCT1RGIiA9ICJ5ZXMiOyB0aGVuCgkgIEFDX0RFRklORShI QVZFX0xJQk9URiwgMSwgW0RlZmluZSB0byAxIGlmIHVzaW5nIGxpYm90Zi5dKQoJICBBQ19DSEVD S19MSUIob3RmLCBPVEZfZ2V0X3ZhcmlhdGlvbl9nbHlwaHMsCgkJICAgICAgIEhBVkVfT1RGX0dF VF9WQVJJQVRJT05fR0xZUEhTPXllcywKCQkgICAgICAgSEFWRV9PVEZfR0VUX1ZBUklBVElPTl9H TFlQSFM9bm8pCgkgIGlmIHRlc3QgIiR7SEFWRV9PVEZfR0VUX1ZBUklBVElPTl9HTFlQSFN9IiA9 ICJ5ZXMiOyB0aGVuCgkgICAgQUNfREVGSU5FKEhBVkVfT1RGX0dFVF9WQVJJQVRJT05fR0xZUEhT LCAxLAoJCSAgICAgIFtEZWZpbmUgdG8gMSBpZiBsaWJvdGYgaGFzIE9URl9nZXRfdmFyaWF0aW9u X2dseXBocy5dKQoJICBmaQoJZmkKICAgICAgZmkKICAgIGRubCBGSVhNRSBzaG91bGQgdGhlcmUg YmUgYW4gZXJyb3IgaWYgSEFWRV9GUkVFVFlQRSAhPSB5ZXM/CiAgICBkbmwgRG9lcyB0aGUgbmV3 IGZvbnQgYmFja2VuZCByZXF1aXJlIGl0LCBvciBjYW4gaXQgd29yayB3aXRob3V0IGl0PwogICAg ZmkKCiAgICBIQVZFX00xN05fRkxUPW5vCiAgICBpZiB0ZXN0ICIke0hBVkVfTElCT1RGfSIgPSB5 ZXM7IHRoZW4KICAgICAgaWYgdGVzdCAiJHt3aXRoX20xN25fZmx0fSIgIT0gIm5vIjsgdGhlbgoJ RU1BQ1NfQ0hFQ0tfTU9EVUxFUyhbTTE3Tl9GTFRdLCBbbTE3bi1mbHRdKQoJaWYgdGVzdCAiJEhB VkVfTTE3Tl9GTFQiID0gInllcyI7IHRoZW4KCSAgQUNfREVGSU5FKEhBVkVfTTE3Tl9GTFQsIDEs IFtEZWZpbmUgdG8gMSBpZiB1c2luZyBsaWJtMTduLWZsdC5dKQoJZmkKICAgICAgZmkKICAgIGZp CmVsc2UKICAgIEhBVkVfWEZUPW5vCiAgICBIQVZFX0ZSRUVUWVBFPW5vCiAgICBIQVZFX0xJQk9U Rj1ubwogICAgSEFWRV9NMTdOX0ZMVD1ubwpmaQoKIyMjIEVuZCBvZiBmb250LWJhY2tlbmQgKHVu ZGVyIFgxMSkgc2VjdGlvbi4KCkFDX1NVQlNUKEZSRUVUWVBFX0NGTEFHUykKQUNfU1VCU1QoRlJF RVRZUEVfTElCUykKQUNfU1VCU1QoRk9OVENPTkZJR19DRkxBR1MpCkFDX1NVQlNUKEZPTlRDT05G SUdfTElCUykKQUNfU1VCU1QoTElCT1RGX0NGTEFHUykKQUNfU1VCU1QoTElCT1RGX0xJQlMpCkFD X1NVQlNUKE0xN05fRkxUX0NGTEFHUykKQUNfU1VCU1QoTTE3Tl9GTFRfTElCUykKCiMjIyBVc2Ug LWxYcG0gaWYgYXZhaWxhYmxlLCB1bmxlc3MgYC0td2l0aC14cG09bm8nLgojIyMgbWluZ3cgZG9l c24ndCB1c2UgLWxYcG0sIHNpbmNlIGl0IGxvYWRzIHRoZSBsaWJyYXJ5IGR5bmFtaWNhbGx5LgpI QVZFX1hQTT1ubwpMSUJYUE09CmlmIHRlc3QgIiR7SEFWRV9XMzJ9IiA9ICJ5ZXMiICYmIHRlc3Qg IiR7b3BzeXN9IiA9ICJjeWd3aW4iOyB0aGVuCiAgaWYgdGVzdCAiJHt3aXRoX3hwbX0iICE9ICJu byI7IHRoZW4KICAgIFNBVkVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKICAgIFNBVkVfTERGTEFHUz0i JExERkxBR1MiCiAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JL3Vzci9pbmNsdWRlL25vWCIKICAg IExERkxBR1M9IiRMREZMQUdTIC1ML3Vzci9saWIvbm9YIgogICAgQUNfQ0hFQ0tfSEVBREVSKFgx MS94cG0uaCwKICAgICAgW0FDX0NIRUNLX0xJQihYcG0sIFhwbVJlYWRGaWxlVG9JbWFnZSwgSEFW RV9YUE09eWVzKV0pCiAgICBpZiB0ZXN0ICIke0hBVkVfWFBNfSIgPSAieWVzIjsgdGhlbgogICAg ICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIFhwbVJldHVybkFsbG9jUGl4ZWxzIHByZXByb2Nlc3NvciBk ZWZpbmUpCiAgICAgIEFDX0VHUkVQX0NQUChub19yZXR1cm5fYWxsb2NfcGl4ZWxzLAogICAgICBb I2luY2x1ZGUgIlgxMS94cG0uaCIKI2lmbmRlZiBYcG1SZXR1cm5BbGxvY1BpeGVscwpub19yZXR1 cm5fYWxsb2NfcGl4ZWxzCiNlbmRpZgogICAgICBdLCBIQVZFX1hQTT1ubywgSEFWRV9YUE09eWVz KQoKICAgICAgaWYgdGVzdCAiJHtIQVZFX1hQTX0iID0gInllcyI7IHRoZW4KICAgICAgICBSRUFM X0NQUEZMQUdTPSIkUkVBTF9DUFBGTEFHUyAtSS91c3IvaW5jbHVkZS9ub1giCglBQ19NU0dfUkVT VUxUKHllcykKICAgICAgZWxzZQoJQUNfTVNHX1JFU1VMVChubykKICAgICAgICBDUFBGTEFHUz0i JFNBVkVfQ1BQRkxBR1MiCiAgICAgICAgTERGTEFHUz0iJFNBVkVfTERGTEFHUyIKICAgICAgZmkK ICAgIGZpCiAgZmkKCiAgaWYgdGVzdCAiJHtIQVZFX1hQTX0iID0gInllcyI7IHRoZW4KICAgIEFD X0RFRklORShIQVZFX1hQTSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBYcG0gbGli cmFyeSAoLWxYcG0pLl0pCiAgICBMSUJYUE09LWxYcG0KICBmaQpmaQoKaWYgdGVzdCAiJHtIQVZF X1gxMX0iID0gInllcyI7IHRoZW4KICBkbmwgQXZvaWQgWHBtIG9uIEFJWCB1bmxlc3MgcmVxdWVz dGVkLCBhcyBpdCBjcmFzaGVzOyBzZWUgQnVnIzE3NTk4LgogIHRlc3QgIiRvcHN5cyR3aXRoX3hw bV9zZXQiID0gYWl4NC0yICYmIHdpdGhfeHBtPW5vCgogIGlmIHRlc3QgIiR7d2l0aF94cG19IiAh PSAibm8iOyB0aGVuCiAgICBBQ19DSEVDS19IRUFERVIoWDExL3hwbS5oLAogICAgICBbQUNfQ0hF Q0tfTElCKFhwbSwgWHBtUmVhZEZpbGVUb1BpeG1hcCwgSEFWRV9YUE09eWVzLCAsIC1sWDExKV0p CiAgICBpZiB0ZXN0ICIke0hBVkVfWFBNfSIgPSAieWVzIjsgdGhlbgogICAgICBBQ19NU0dfQ0hF Q0tJTkcoZm9yIFhwbVJldHVybkFsbG9jUGl4ZWxzIHByZXByb2Nlc3NvciBkZWZpbmUpCiAgICAg IEFDX0VHUkVQX0NQUChub19yZXR1cm5fYWxsb2NfcGl4ZWxzLAogICAgICBbI2luY2x1ZGUgIlgx MS94cG0uaCIKI2lmbmRlZiBYcG1SZXR1cm5BbGxvY1BpeGVscwpub19yZXR1cm5fYWxsb2NfcGl4 ZWxzCiNlbmRpZgogICAgICBdLCBIQVZFX1hQTT1ubywgSEFWRV9YUE09eWVzKQoKICAgICAgaWYg dGVzdCAiJHtIQVZFX1hQTX0iID0gInllcyI7IHRoZW4KCUFDX01TR19SRVNVTFQoeWVzKQogICAg ICBlbHNlCglBQ19NU0dfUkVTVUxUKG5vKQogICAgICBmaQogICAgZmkKICBmaQoKICBpZiB0ZXN0 ICIke0hBVkVfWFBNfSIgPSAieWVzIjsgdGhlbgogICAgQUNfREVGSU5FKEhBVkVfWFBNLCAxLCBb RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIFhwbSBsaWJyYXJ5ICgtbFhwbSkuXSkKICAgIExJ QlhQTT0tbFhwbQogIGVsaWYgdGVzdCAiJG9wc3lzLCRMVUNJRF9MSUJXIiA9IGFpeDQtMiwtbFhh dzsgdGhlbgogICAgZG5sIEFJWCAtbFhhdyBuZWVkcyAtbFhwbSBsaW5rZWQgdG9vOyBzZWUgQnVn IzE3NTk4IE1lc3NhZ2UjMTUyLgogICAgTElCWFBNPS1sWHBtCiAgZmkKZmkKCiMjIyBGSVhNRTog UGVyaGFwcyByZWdyb3VwIHRvIG1pbmltaXplIGNvZGUgZHVwbGljYXRpb24gZHVlIHRvIE1pbkdX J3MKIyMjIHNsaWdodGx5IGRpZmZlcmVudCByZXF1aXJlbWVudHMgd3J0IGltYWdlIGxpYnJhcmll cyAoaXQgZG9lc24ndAojIyMgdXNlIC1sWHBtIGJlY2F1c2UgaXQgbG9hZHMgdGhlIHhwbSBzaGFy ZWQgbGlicmFyeSBkeW5hbWljYWxseSBhdAojIyMgcnVuIHRpbWUpLgppZiB0ZXN0ICIke29wc3lz fSIgPSAibWluZ3ciOyB0aGVuCiAgaWYgdGVzdCAiJHt3aXRoX3hwbX0iICE9ICJubyI7IHRoZW4K ICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkvbWluZ3c2NC9pbmNsdWRlL25vWCIKICAgIEFDX0NI RUNLX0hFQURFUihYMTEveHBtLmgsIEhBVkVfWFBNPXllcywgSEFWRV9YUE09bm8sIFsKI2RlZmlu ZSBGT1JfTVNXIDFdKQogIGZpCgogIGlmIHRlc3QgIiR7SEFWRV9YUE19IiA9ICJ5ZXMiOyB0aGVu CiAgICBSRUFMX0NQUEZMQUdTPSIkUkVBTF9DUFBGTEFHUyAtSS9taW5ndzY0L2luY2x1ZGUvbm9Y IgogICAgQUNfREVGSU5FKEhBVkVfWFBNLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl IFhwbSBsaWJyYXJ5ICgtbFhwbSkuXSkKICBmaQpmaQoKQUNfU1VCU1QoTElCWFBNKQoKIyMjIFVz ZSAtbGpwZWcgaWYgYXZhaWxhYmxlLCB1bmxlc3MgYC0td2l0aC1qcGVnPW5vJy4KIyMjIG1pbmd3 IGRvZXNuJ3QgdXNlIC1sanBlZywgc2luY2UgaXQgbG9hZHMgdGhlIGxpYnJhcnkgZHluYW1pY2Fs bHkuCkhBVkVfSlBFRz1ubwpMSUJKUEVHPQppZiB0ZXN0ICIke29wc3lzfSIgPSAibWluZ3ciOyB0 aGVuCiAgaWYgdGVzdCAiJHt3aXRoX2pwZWd9IiAhPSAibm8iOyB0aGVuCiAgICBkbmwgQ2hlY2tp bmcgZm9yIGpwZWdsaWIuaCBjYW4gbG9zZSBiZWNhdXNlIG9mIGEgcmVkZWZpbml0aW9uIG9mCiAg ICBkbmwgSEFWRV9TVERMSUJfSC4KICAgIEFDX0NIRUNLX0hFQURFUihqZXJyb3IuaCwgSEFWRV9K UEVHPXllcywgSEFWRV9KUEVHPW5vKQogIGZpCiAgQUhfVEVNUExBVEUoSEFWRV9KUEVHLCBbRGVm aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGpwZWcgbGlicmFyeSAoLWxqcGVnKS5dKWRubAogIGlm IHRlc3QgIiR7SEFWRV9KUEVHfSIgPSAieWVzIjsgdGhlbgogICAgQUNfREVGSU5FKEhBVkVfSlBF RykKICAgIEFDX0VHUkVQX0NQUChbdmVyc2lvbj0gKig2WzItOV18WzctOV1bMC05XSldLAogICAg ICAgIFsjaW5jbHVkZSA8anBlZ2xpYi5oPgoJIHZlcnNpb249SlBFR19MSUJfVkVSU0lPTgpdLAog ICAgICAgIFtBQ19ERUZJTkUoSEFWRV9KUEVHKV0sCiAgICAgICAgW0FDX01TR19XQVJOKFtsaWJq cGVnIGZvdW5kLCBidXQgbm90IHZlcnNpb24gNmIgb3IgbGF0ZXJdKQogICAgICAgIEhBVkVfSlBF Rz1ub10pCiAgZmkKZWxpZiB0ZXN0ICIke0hBVkVfWDExfSIgPSAieWVzIiB8fCB0ZXN0ICIke0hB VkVfVzMyfSIgPSAieWVzIjsgdGhlbgogIGlmIHRlc3QgIiR7d2l0aF9qcGVnfSIgIT0gIm5vIjsg dGhlbgogICAgZG5sIENoZWNraW5nIGZvciBqcGVnbGliLmggY2FuIGxvc2UgYmVjYXVzZSBvZiBh IHJlZGVmaW5pdGlvbiBvZgogICAgZG5sICBIQVZFX1NURExJQl9ILgogICAgQUNfQ0hFQ0tfSEVB REVSKGplcnJvci5oLAogICAgICBbQUNfQ0hFQ0tfTElCKGpwZWcsIGpwZWdfZGVzdHJveV9jb21w cmVzcywgSEFWRV9KUEVHPXllcyldKQogIGZpCgogIEFIX1RFTVBMQVRFKEhBVkVfSlBFRywgW0Rl ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBqcGVnIGxpYnJhcnkgKC1sanBlZykuXSlkbmwKICBp ZiB0ZXN0ICIke0hBVkVfSlBFR30iID0gInllcyI7IHRoZW4KICAgIEFDX0RFRklORShIQVZFX0pQ RUcpCiAgICBBQ19FR1JFUF9DUFAoW3ZlcnNpb249ICooNlsyLTldfFs3LTldWzAtOV0pXSwKCVsj aW5jbHVkZSA8anBlZ2xpYi5oPgoJIHZlcnNpb249SlBFR19MSUJfVkVSU0lPTgpdLAoJW0FDX0RF RklORShIQVZFX0pQRUcpXSwKCVtBQ19NU0dfV0FSTihbbGlianBlZyBmb3VuZCwgYnV0IG5vdCB2 ZXJzaW9uIDZiIG9yIGxhdGVyXSkKCUhBVkVfSlBFRz1ub10pCiAgZmkKICBpZiB0ZXN0ICIke0hB VkVfSlBFR30iID0gInllcyI7IHRoZW4KICAgIExJQkpQRUc9LWxqcGVnCiAgZmkKZmkKQUNfU1VC U1QoTElCSlBFRykKCkhBVkVfWkxJQj1ubwpMSUJaPQppZiB0ZXN0ICIke3dpdGhfemxpYn0iICE9 ICJubyI7IHRoZW4KICBPTElCUz0kTElCUwogIEFDX1NFQVJDSF9MSUJTKFtpbmZsYXRlRW5kXSwg W3pdLCBbSEFWRV9aTElCPXllc10pCiAgTElCUz0kT0xJQlMKICBjYXNlICRhY19jdl9zZWFyY2hf aW5mbGF0ZUVuZCBpbgogICAgLSopIExJQlo9JGFjX2N2X3NlYXJjaF9pbmZsYXRlRW5kIDs7CiAg ZXNhYwpmaQppZiB0ZXN0ICIke0hBVkVfWkxJQn0iID0gInllcyI7IHRoZW4KICBBQ19ERUZJTkUo W0hBVkVfWkxJQl0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgemxpYiBsaWJyYXJ5 ICgtbHopLl0pCiAgIyMjIG1pbmd3IGRvZXNuJ3QgdXNlIC1seiwgc2luY2UgaXQgbG9hZHMgdGhl IGxpYnJhcnkgZHluYW1pY2FsbHkuCiAgaWYgdGVzdCAiJHtvcHN5c30iID0gIm1pbmd3IjsgdGhl bgogICAgIExJQlo9CiAgZmkKZmkKQUNfU1VCU1QoTElCWikKCiMjIyBVc2UgLWxwbmcgaWYgYXZh aWxhYmxlLCB1bmxlc3MgYC0td2l0aC1wbmc9bm8nLgpIQVZFX1BORz1ubwpMSUJQTkc9ClBOR19D RkxBR1M9CmlmIHRlc3QgIiR7TlNfSU1QTF9DT0NPQX0iID0geWVzOyB0aGVuCiAgOiAjIE5vdGhp bmcgdG8gZG8KZWxpZiB0ZXN0ICIke3dpdGhfcG5nfSIgIT0gbm87IHRoZW4KICAjIG1pbmd3IGxv YWRzIHRoZSBsaWJyYXJ5IGR5bmFtaWNhbGx5LgogIGlmIHRlc3QgIiRvcHN5cyIgPSBtaW5ndzsg dGhlbgogICAgQUNfQ0hFQ0tfSEVBREVSKFtwbmcuaF0sIFtIQVZFX1BORz15ZXNdKQogIGVsaWYg dGVzdCAiJHtIQVZFX1gxMX0iID0gInllcyIgfHwgdGVzdCAiJHtIQVZFX1czMn0iID0gInllcyI7 IHRoZW4KICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHBuZ10pCiAgICBwbmdfY2ZsYWdzPWAobGli cG5nLWNvbmZpZyAtLWNmbGFncykgMj4mQVNfTUVTU0FHRV9MT0dfRkRgICYmCiAgICBwbmdfbGli cz1gKGxpYnBuZy1jb25maWcgLS1saWJzKSAyPiZBU19NRVNTQUdFX0xPR19GRGAgfHwgewogICAg ICAjIGxpYnBuZy1jb25maWcgZG9lcyBub3Qgd29yazsgY29uZmlndXJlIGJ5IGhhbmQuCiAgICAg ICMgRGViaWFuIHVuc3RhYmxlIGFzIG9mIEp1bHkgMjAwMyBoYXMgbXVsdGlwbGUgbGlicG5ncywg YW5kIHB1dHMgcG5nLmgKICAgICAgIyBpbiAvdXNyL2luY2x1ZGUvbGlicG5nLgogICAgICBpZiB0 ZXN0IC1yIC91c3IvaW5jbHVkZS9saWJwbmcvcG5nLmggJiYKCSB0ZXN0ICEgLXIgL3Vzci9pbmNs dWRlL3BuZy5oOyB0aGVuCglwbmdfY2ZsYWdzPS1JL3Vzci9pbmNsdWRlL2xpYnBuZwogICAgICBl bHNlCglwbmdfY2ZsYWdzPQogICAgICBmaQogICAgICBwbmdfbGlicz0nLWxwbmcnCiAgICB9CiAg ICBTQVZFX0NGTEFHUz0kQ0ZMQUdTCiAgICBTQVZFX0xJQlM9JExJQlMKICAgIENGTEFHUz0iJENG TEFHUyAkcG5nX2NmbGFncyIKICAgIExJQlM9IiRwbmdfbGlicyAtbHogLWxtICRMSUJTIgogICAg QUNfTElOS19JRkVMU0UoCiAgICAgIFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8cG5nLmg+ XV0sCgkgW1tyZXR1cm4gIXBuZ19nZXRfY2hhbm5lbHMgKDAsIDApO11dKV0sCiAgICAgIFtIQVZF X1BORz15ZXMKICAgICAgIFBOR19DRkxBR1M9YEFTX0VDSE8oWyIkcG5nX2NmbGFncyJdKSB8IHNl ZCAtZSAiJGVkaXRfY2ZsYWdzImAKICAgICAgIExJQlBORz0kcG5nX2xpYnMKICAgICAgICMgJExJ QlBORyByZXF1aXJlcyBleHBsaWNpdCAtbHogaW4gc29tZSBjYXNlcy4KICAgICAgICMgV2UgZG9u J3Qga25vdyB3aGF0IHRob3NlIGNhc2VzIGFyZSwgZXhhY3RseSwgc28gcGxheSBpdCBzYWZlIGFu ZAogICAgICAgIyBhcHBlbmQgLWx6IHRvIGFueSBub25lbXB0eSAkTElCUE5HLCB1bmxlc3Mgd2Un cmUgYWxyZWFkeSB1c2luZyBMSUJaLgogICAgICAgaWYgdGVzdCAtbiAiJExJQlBORyIgJiYgdGVz dCAteiAiJExJQloiOyB0aGVuCgkgTElCUE5HPSIkTElCUE5HIC1seiIKICAgICAgIGZpXSkKICAg IENGTEFHUz0kU0FWRV9DRkxBR1MKICAgIExJQlM9JFNBVkVfTElCUwogICAgQUNfTVNHX1JFU1VM VChbJEhBVkVfUE5HXSkKICBmaQpmaQppZiB0ZXN0ICRIQVZFX1BORyA9IHllczsgdGhlbgogIEFD X0RFRklORShbSEFWRV9QTkddLCBbMV0sIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgcG5n IGxpYnJhcnkuXSkKCiAgU0FWRV9DRkxBR1M9JENGTEFHUwogIENGTEFHUz0iJENGTEFHUyAkUE5H X0NGTEFHUyIKICBBQ19DSEVDS19ERUNMKFtwbmdfbG9uZ2ptcF0sCiAgICBbXSwKICAgIFtBQ19E RUZJTkUoW1BOR19ERVBTVFJVQ1RdLCBbXSwKICAgICAgIFtEZWZpbmUgdG8gZW1wdHkgdG8gc3Vw cHJlc3MgZGVwcmVjYXRpb24gd2FybmluZ3Mgd2hlbiBidWlsZGluZwoJd2l0aCAtLWVuYWJsZS1n Y2Mtd2FybmluZ3MgYW5kIHdpdGggbGlicG5nIHZlcnNpb25zIGJlZm9yZSAxLjUsCgl3aGljaCBs YWNrIHBuZ19sb25nam1wLl0pXSwKICAgIFtbI2luY2x1ZGUgPHBuZy5oPgogICAgXV0pCiAgQ0ZM QUdTPSRTQVZFX0NGTEFHUwpmaQpBQ19TVUJTVChMSUJQTkcpCkFDX1NVQlNUKFBOR19DRkxBR1Mp CgojIyMgVXNlIC1sdGlmZiBpZiBhdmFpbGFibGUsIHVubGVzcyBgLS13aXRoLXRpZmY9bm8nLgoj IyMgbWluZ3cgZG9lc24ndCB1c2UgLWx0aWZmLCBzaW5jZSBpdCBsb2FkcyB0aGUgbGlicmFyeSBk eW5hbWljYWxseS4KSEFWRV9USUZGPW5vCkxJQlRJRkY9CmlmIHRlc3QgIiR7b3BzeXN9IiA9ICJt aW5ndyI7IHRoZW4KICBpZiB0ZXN0ICIke3dpdGhfdGlmZn0iICE9ICJubyI7IHRoZW4KICAgIEFD X0NIRUNLX0hFQURFUih0aWZmaW8uaCwgSEFWRV9USUZGPXllcywgSEFWRV9USUZGPW5vKQogIGZp CiAgaWYgdGVzdCAiJHtIQVZFX1RJRkZ9IiA9ICJ5ZXMiOyB0aGVuCiAgICBBQ19ERUZJTkUoSEFW RV9USUZGLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHRpZmYgbGlicmFyeSAoLWx0 aWZmKS5dKQogIGZpCmVsaWYgdGVzdCAiJHtIQVZFX1gxMX0iID0gInllcyIgfHwgdGVzdCAiJHtI QVZFX1czMn0iID0gInllcyI7IHRoZW4KICBpZiB0ZXN0ICIke3dpdGhfdGlmZn0iICE9ICJubyI7 IHRoZW4KICAgIEFDX0NIRUNLX0hFQURFUih0aWZmaW8uaCwKICAgICAgW3RpZmZsaWJzPSItbHog LWxtIgogICAgICAjIEF0IGxlYXN0IG9uZSB0aWZmIHBhY2thZ2UgcmVxdWlyZXMgdGhlIGpwZWcg bGlicmFyeS4KICAgICAgaWYgdGVzdCAiJHtIQVZFX0pQRUd9IiA9IHllczsgdGhlbiB0aWZmbGli cz0iLWxqcGVnICR0aWZmbGlicyI7IGZpCiAgICAgIEFDX0NIRUNLX0xJQih0aWZmLCBUSUZGR2V0 VmVyc2lvbiwgSEFWRV9USUZGPXllcywgLCAkdGlmZmxpYnMpXSkKICBmaQoKICBpZiB0ZXN0ICIk e0hBVkVfVElGRn0iID0gInllcyI7IHRoZW4KICAgIEFDX0RFRklORShIQVZFX1RJRkYsIDEsIFtE ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgdGlmZiBsaWJyYXJ5ICgtbHRpZmYpLl0pCiAgICBk bmwgRklYTUUgLWx6IC1sbSwgYXMgcGVyIGxpYnBuZz8KICAgIExJQlRJRkY9LWx0aWZmCiAgZmkK ZmkKQUNfU1VCU1QoTElCVElGRikKCiMjIyBVc2UgLWxnaWYgb3IgLWx1bmdpZiBpZiBhdmFpbGFi bGUsIHVubGVzcyBgLS13aXRoLWdpZj1ubycuCiMjIyBtaW5ndyBkb2Vzbid0IHVzZSAtbGdpZi8t bHVuZ2lmLCBzaW5jZSBpdCBsb2FkcyB0aGUgbGlicmFyeSBkeW5hbWljYWxseS4KSEFWRV9HSUY9 bm8KTElCR0lGPQppZiB0ZXN0ICIke29wc3lzfSIgPSAibWluZ3ciOyB0aGVuCiAgaWYgdGVzdCAi JHt3aXRoX2dpZn0iICE9ICJubyI7IHRoZW4KICAgIEFDX0NIRUNLX0hFQURFUihnaWZfbGliLmgs IEhBVkVfR0lGPXllcywgSEFWRV9HSUY9bm8pCiAgZmkKICBpZiB0ZXN0ICIke0hBVkVfR0lGfSIg PSAieWVzIjsgdGhlbgogICAgQUNfREVGSU5FKEhBVkVfR0lGLCAxLCBbRGVmaW5lIHRvIDEgaWYg eW91IGhhdmUgYSBnaWYgKG9yIHVuZ2lmKSBsaWJyYXJ5Ll0pCiAgZmkKZWxpZiB0ZXN0ICIke0hB VkVfWDExfSIgPSAieWVzIiAmJiB0ZXN0ICIke3dpdGhfZ2lmfSIgIT0gIm5vIiBcCiAgICAgICAg fHwgdGVzdCAiJHtIQVZFX1czMn0iID0gInllcyI7IHRoZW4KICBBQ19DSEVDS19IRUFERVIoZ2lm X2xpYi5oLAojIEVHaWZQdXRFeHRlbnNpb25MYXN0IG9ubHkgZXhpc3RzIGZyb20gdmVyc2lvbiBs aWJ1bmdpZi00LjEuMGIxLgojIEVhcmxpZXIgdmVyc2lvbnMgY2FuIGNyYXNoIEVtYWNzLCBidXQg dmVyc2lvbiA1LjAgcmVtb3ZlcyBFR2lmUHV0RXh0ZW5zaW9uTGFzdC4KICAgIFtBQ19DSEVDS19M SUIoZ2lmLCBHaWZNYWtlTWFwT2JqZWN0LCBIQVZFX0dJRj15ZXMsCiAgICAgICAgW0FDX0NIRUNL X0xJQihnaWYsIEVHaWZQdXRFeHRlbnNpb25MYXN0LCBIQVZFX0dJRj15ZXMsIEhBVkVfR0lGPW1h eWJlKV0pXSkKCiAgaWYgdGVzdCAiJEhBVkVfR0lGIiA9IHllczsgdGhlbgogICAgTElCR0lGPS1s Z2lmCiAgZWxpZiB0ZXN0ICIkSEFWRV9HSUYiID0gbWF5YmU7IHRoZW4KIyBJZiBnaWZfbGliLmgg YnV0IG5vIGxpYmdpZiwgdHJ5IGxpYnVuZ2lmLgogICAgQUNfQ0hFQ0tfTElCKHVuZ2lmLCBFR2lm UHV0RXh0ZW5zaW9uTGFzdCwgSEFWRV9HSUY9eWVzLCBIQVZFX0dJRj1ubykKICAgIHRlc3QgIiRI QVZFX0dJRiIgPSB5ZXMgJiYgTElCR0lGPS1sdW5naWYKICBmaQoKICBpZiB0ZXN0ICIke0hBVkVf R0lGfSIgPSAieWVzIjsgdGhlbgogICAgQUNfREVGSU5FKEhBVkVfR0lGLCAxLCBbRGVmaW5lIHRv IDEgaWYgeW91IGhhdmUgYSBnaWYgKG9yIHVuZ2lmKSBsaWJyYXJ5Ll0pCiAgZmkKZmkKQUNfU1VC U1QoTElCR0lGKQoKZG5sIENoZWNrIGZvciByZXF1aXJlZCBsaWJyYXJpZXMuCmlmIHRlc3QgIiR7 SEFWRV9YMTF9IiA9ICJ5ZXMiOyB0aGVuCiAgTUlTU0lORz0iIgogIFdJVEhfTk89IiIKICB0ZXN0 ICIke3dpdGhfeHBtfSIgIT0gIm5vIiAmJiB0ZXN0ICIke0hBVkVfWFBNfSIgIT0gInllcyIgJiYK ICAgIE1JU1NJTkc9ImxpYlhwbSIgJiYgV0lUSF9OTz0iLS13aXRoLXhwbT1ubyIKICB0ZXN0ICIk e3dpdGhfanBlZ30iICE9ICJubyIgJiYgdGVzdCAiJHtIQVZFX0pQRUd9IiAhPSAieWVzIiAmJgog ICAgTUlTU0lORz0iJE1JU1NJTkcgbGlianBlZyIgJiYgV0lUSF9OTz0iJFdJVEhfTk8gLS13aXRo LWpwZWc9bm8iCiAgdGVzdCAiJHt3aXRoX3BuZ30iICE9ICJubyIgJiYgdGVzdCAiJHtIQVZFX1BO R30iICE9ICJ5ZXMiICYmCiAgICBNSVNTSU5HPSIkTUlTU0lORyBsaWJwbmciICYmIFdJVEhfTk89 IiRXSVRIX05PIC0td2l0aC1wbmc9bm8iCiAgdGVzdCAiJHt3aXRoX2dpZn0iICE9ICJubyIgJiYg dGVzdCAiJHtIQVZFX0dJRn0iICE9ICJ5ZXMiICYmCiAgICBNSVNTSU5HPSIkTUlTU0lORyBsaWJn aWYvbGlidW5naWYiICYmIFdJVEhfTk89IiRXSVRIX05PIC0td2l0aC1naWY9bm8iCiAgdGVzdCAi JHt3aXRoX3RpZmZ9IiAhPSAibm8iICYmIHRlc3QgIiR7SEFWRV9USUZGfSIgIT0gInllcyIgJiYK ICAgIE1JU1NJTkc9IiRNSVNTSU5HIGxpYnRpZmYiICYmIFdJVEhfTk89IiRXSVRIX05PIC0td2l0 aC10aWZmPW5vIgoKICBpZiB0ZXN0ICJYJHtNSVNTSU5HfSIgIT0gWDsgdGhlbgogICAgQUNfTVNH X0VSUk9SKFtUaGUgZm9sbG93aW5nIHJlcXVpcmVkIGxpYnJhcmllcyB3ZXJlIG5vdCBmb3VuZDoK ICAgICRNSVNTSU5HCk1heWJlIHNvbWUgZGV2ZWxvcG1lbnQgbGlicmFyaWVzL3BhY2thZ2VzIGFy ZSBtaXNzaW5nPwpJZiB5b3UgZG9uJ3Qgd2FudCB0byBsaW5rIHdpdGggdGhlbSBnaXZlCiAgICAk V0lUSF9OTwphcyBvcHRpb25zIHRvIGNvbmZpZ3VyZV0pCiAgZmkKZmkKCiMjIyBVc2UgLWxncG0g aWYgYXZhaWxhYmxlLCB1bmxlc3MgYC0td2l0aC1ncG09bm8nLgpIQVZFX0dQTT1ubwpMSUJHUE09 CmlmIHRlc3QgIiR7d2l0aF9ncG19IiAhPSAibm8iOyB0aGVuCiAgQUNfQ0hFQ0tfSEVBREVSKGdw bS5oLAogICAgW0FDX0NIRUNLX0xJQihncG0sIEdwbV9PcGVuLCBIQVZFX0dQTT15ZXMpXSkKCiAg aWYgdGVzdCAiJHtIQVZFX0dQTX0iID0gInllcyI7IHRoZW4KICAgIEFDX0RFRklORShIQVZFX0dQ TSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBncG0gbGlicmFyeSAoLWxncG0pLl0p CiAgICBMSUJHUE09LWxncG0KICBmaQpmaQpBQ19TVUJTVChMSUJHUE0pCgpkbmwgQ2hlY2sgZm9y IG1hbGxvYy9tYWxsb2MuaCBvbiBkYXJ3aW4KQUNfQ0hFQ0tfSEVBREVSU19PTkNFKG1hbGxvYy9t YWxsb2MuaCkKCkdOVVNURVBfQ0ZMQUdTPQojIyMgVXNlIE5lWFRzdGVwIEFQSSB0byBpbXBsZW1l bnQgR1VJLgppZiB0ZXN0ICIke0hBVkVfTlN9IiA9ICJ5ZXMiOyB0aGVuCiAgQUNfREVGSU5FKEhB VkVfTlMsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBOZVhUc3RlcCBBUEks IGVpdGhlciBHTlVzdGVwIG9yIENvY29hIG9uIE1hYyBPUyBYLl0pCiAgaWYgdGVzdCAiJHtOU19J TVBMX0NPQ09BfSIgPSAieWVzIjsgdGhlbgogICAgQUNfREVGSU5FKE5TX0lNUExfQ09DT0EsIDEs IFtEZWZpbmUgdG8gMSBpZiB5b3UgYXJlIHVzaW5nIE5TIHdpbmRvd2luZyB1bmRlciBNYWNPUyBY Ll0pCiAgZmkKICBpZiB0ZXN0ICIke05TX0lNUExfR05VU1RFUH0iID0gInllcyI7IHRoZW4KICAg IEFDX0RFRklORShOU19JTVBMX0dOVVNURVAsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgYXJlIHVz aW5nIE5TIHdpbmRvd2luZyB1bmRlciBHTlVzdGVwLl0pCiAgICAjIFNlZSBhbHNvIC5tLm8gcnVs ZSBpbiBNYWtlZmlsZS5pbiAqLwogICAgIyBGSVhNRTogYXJlIGFsbCB0aGVzZSBmbGFncyByZWFs bHkgbmVlZGVkPyAgRG9jdW1lbnQgaGVyZSB3aHkuICAqLwogICAgR05VU1RFUF9DRkxBR1M9Ii1E X1JFRU5UUkFOVCAtZlBJQyAtZm5vLXN0cmljdC1hbGlhc2luZyAtSSR7R05VU1RFUF9TWVNURU1f SEVBREVSU30gJHtHTlVTVEVQX0xPQ0FMX0hFQURFUlN9IgogICAgIyMgRXh0cmEgQ0ZMQUdTIGFw cGxpZWQgdG8gc3JjLyoubSBmaWxlcy4KICAgIEdOVV9PQkpDX0NGTEFHUz0iJEdOVV9PQkpDX0NG TEFHUyAtZmdudS1ydW50aW1lIC1Xbm8taW1wb3J0IC1mY29uc3RhbnQtc3RyaW5nLWNsYXNzPU5T Q29uc3RhbnRTdHJpbmcgLURHTlVTVEVQX0JBU0VfTElCUkFSWT0xIC1ER05VX0dVSV9MSUJSQVJZ PTEgLURHTlVfUlVOVElNRT0xIC1ER1NXQVJOIC1ER1NESUFHTk9TRSIKICBmaQogIE9USEVSX0ZJ TEVTPW5zLWFwcApmaQoKIyMjIFVzZSBzZXNzaW9uIG1hbmFnZW1lbnQgKC1sU00gLWxJQ0UpIGlm IGF2YWlsYWJsZQpIQVZFX1hfU009bm8KTElCWFNNPQppZiB0ZXN0ICIke0hBVkVfWDExfSIgPSAi eWVzIjsgdGhlbgogIEFDX0NIRUNLX0hFQURFUihYMTEvU00vU01saWIuaCwKICAgIFtBQ19DSEVD S19MSUIoU00sIFNtY09wZW5Db25uZWN0aW9uLCBIQVZFX1hfU009eWVzLCAsIC1sSUNFKV0pCgog IGlmIHRlc3QgIiR7SEFWRV9YX1NNfSIgPSAieWVzIjsgdGhlbgogICAgQUNfREVGSU5FKEhBVkVf WF9TTSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBTTSBsaWJyYXJ5ICgtbFNNKS5d KQogICAgTElCWFNNPSItbFNNIC1sSUNFIgogIGZpCmZpCkFDX1NVQlNUKExJQlhTTSkKCiMjIyBV c2UgWFJhbmRyICgtbFhyYW5kcikgaWYgYXZhaWxhYmxlCkhBVkVfWFJBTkRSPW5vCmlmIHRlc3Qg IiR7SEFWRV9YMTF9IiA9ICJ5ZXMiOyB0aGVuCiAgWFJBTkRSX1JFUVVJUkVEPTEuMi4yCiAgWFJB TkRSX01PRFVMRVM9InhyYW5kciA+PSAkWFJBTkRSX1JFUVVJUkVEIgogIEVNQUNTX0NIRUNLX01P RFVMRVMoW1hSQU5EUl0sIFskWFJBTkRSX01PRFVMRVNdKQogIGlmIHRlc3QgJEhBVkVfWFJBTkRS ID0gbm87IHRoZW4KICAgICMgVGVzdCBvbGQgd2F5IGluIGNhc2UgcGtnLWNvbmZpZyBkb2Vzbid0 IGhhdmUgaXQgKG9sZGVyIG1hY2hpbmVzKS4KICAgIEFDX0NIRUNLX0hFQURFUihYMTEvZXh0ZW5z aW9ucy9YcmFuZHIuaCwKICAgICAgW0FDX0NIRUNLX0xJQihYcmFuZHIsIFhSUkdldFNjcmVlblJl c291cmNlcywgSEFWRV9YUkFORFI9eWVzKV0pCiAgICBpZiB0ZXN0ICRIQVZFX1hSQU5EUiA9IHll czsgdGhlbgogICAgICBYUkFORFJfTElCUz0tbFhyYW5kcgogICAgZmkKICBmaQogIGlmIHRlc3Qg JEhBVkVfWFJBTkRSID0geWVzOyB0aGVuCiAgICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKICAgIFNB VkVfTElCUz0iJExJQlMiCiAgICBDRkxBR1M9IiRYUkFORFJfQ0ZMQUdTICRDRkxBR1MiCiAgICBM SUJTPSIkWFJBTkRSX0xJQlMgJExJQlMiCiAgICBBQ19DSEVDS19GVU5DUyhYUlJHZXRPdXRwdXRQ cmltYXJ5IFhSUkdldFNjcmVlblJlc291cmNlc0N1cnJlbnQpCiAgICBDRkxBR1M9IiRTQVZFX0NG TEFHUyIKICAgIExJQlM9IiRTQVZFX0xJQlMiCgogICAgQUNfREVGSU5FKEhBVkVfWFJBTkRSLCAx LCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIFhSYW5kciBleHRlbnNpb24uXSkKICBmaQpm aQpBQ19TVUJTVChYUkFORFJfQ0ZMQUdTKQpBQ19TVUJTVChYUkFORFJfTElCUykKCiMjIyBVc2Ug WGluZXJhbWEgKC1sWGluZXJhbWEpIGlmIGF2YWlsYWJsZQpIQVZFX1hJTkVSQU1BPW5vCmlmIHRl c3QgIiR7SEFWRV9YMTF9IiA9ICJ5ZXMiOyB0aGVuCiAgWElORVJBTUFfUkVRVUlSRUQ9MS4wLjIK ICBYSU5FUkFNQV9NT0RVTEVTPSJ4aW5lcmFtYSA+PSAkWElORVJBTUFfUkVRVUlSRUQiCiAgRU1B Q1NfQ0hFQ0tfTU9EVUxFUyhbWElORVJBTUFdLCBbJFhJTkVSQU1BX01PRFVMRVNdKQogIGlmIHRl c3QgJEhBVkVfWElORVJBTUEgPSBubzsgdGhlbgogICAgIyBUZXN0IG9sZCB3YXkgaW4gY2FzZSBw a2ctY29uZmlnIGRvZXNuJ3QgaGF2ZSBpdCAob2xkZXIgbWFjaGluZXMpLgogICAgQUNfQ0hFQ0tf SEVBREVSKFgxMS9leHRlbnNpb25zL1hpbmVyYW1hLmgsCiAgICAgIFtBQ19DSEVDS19MSUIoWGlu ZXJhbWEsIFhpbmVyYW1hUXVlcnlFeHRlbnNpb24sIEhBVkVfWElORVJBTUE9eWVzKV0pCiAgICBp ZiB0ZXN0ICRIQVZFX1hJTkVSQU1BID0geWVzOyB0aGVuCiAgICAgIFhJTkVSQU1BX0xJQlM9LWxY aW5lcmFtYQogICAgZmkKICBmaQogIGlmIHRlc3QgJEhBVkVfWElORVJBTUEgPSB5ZXM7IHRoZW4K ICAgIEFDX0RFRklORShIQVZFX1hJTkVSQU1BLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg dGhlIFhpbmVyYW1hIGV4dGVuc2lvbi5dKQogIGZpCmZpCkFDX1NVQlNUKFhJTkVSQU1BX0NGTEFH UykKQUNfU1VCU1QoWElORVJBTUFfTElCUykKCiMjIyBVc2UgWGZpeGVzICgtbFhmaXhlcykgaWYg YXZhaWxhYmxlCkhBVkVfWEZJWEVTPW5vCmlmIHRlc3QgIiR7SEFWRV9YMTF9IiA9ICJ5ZXMiOyB0 aGVuCiAgWEZJWEVTX1JFUVVJUkVEPTQuMC4wCiAgWEZJWEVTX01PRFVMRVM9InhmaXhlcyA+PSAk WEZJWEVTX1JFUVVJUkVEIgogIEVNQUNTX0NIRUNLX01PRFVMRVMoW1hGSVhFU10sIFskWEZJWEVT X01PRFVMRVNdKQogIGlmIHRlc3QgJEhBVkVfWEZJWEVTID0gbm87IHRoZW4KICAgICMgVGVzdCBv bGQgd2F5IGluIGNhc2UgcGtnLWNvbmZpZyBkb2Vzbid0IGhhdmUgaXQgKG9sZGVyIG1hY2hpbmVz KS4KICAgIEFDX0NIRUNLX0hFQURFUihYMTEvZXh0ZW5zaW9ucy9YZml4ZXMuaCwKICAgICAgW0FD X0NIRUNLX0xJQihYZml4ZXMsIFhGaXhlc0hpZGVDdXJzb3IsIEhBVkVfWEZJWEVTPXllcyldKQog ICAgaWYgdGVzdCAkSEFWRV9YRklYRVMgPSB5ZXM7IHRoZW4KICAgICAgWEZJWEVTX0xJQlM9LWxY Zml4ZXMKICAgIGZpCiAgZmkKICBpZiB0ZXN0ICRIQVZFX1hGSVhFUyA9IHllczsgdGhlbgogICAg QUNfREVGSU5FKEhBVkVfWEZJWEVTLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIFhm aXhlcyBleHRlbnNpb24uXSkKICBmaQpmaQpBQ19TVUJTVChYRklYRVNfQ0ZMQUdTKQpBQ19TVUJT VChYRklYRVNfTElCUykKCiMjIyBVc2UgbGlieG1sICgtbHhtbDIpIGlmIGF2YWlsYWJsZQojIyMg bWluZ3cgZG9lc24ndCB1c2UgLWx4bWwyLCBzaW5jZSBpdCBsb2FkcyB0aGUgbGlicmFyeSBkeW5h bWljYWxseS4KSEFWRV9MSUJYTUwyPW5vCmlmIHRlc3QgIiR7d2l0aF94bWwyfSIgIT0gIm5vIjsg dGhlbgogICMjIyBJJ20gbm90IHN1cmUgd2hhdCB0aGUgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJl LCBzbyBJIGp1c3QgZ3Vlc3NlZC4KICBFTUFDU19DSEVDS19NT0RVTEVTKFtMSUJYTUwyXSwgW2xp YnhtbC0yLjAgPiAyLjYuMTddKQogICMgQnVpbHQtaW4gbGlieG1sMiBvbiBPUyBYIDEwLjggbGFj a3MgbGlieG1sLTIuMC5wYy4KICBpZiB0ZXN0ICIke0hBVkVfTElCWE1MMn0iICE9ICJ5ZXMiIC1h ICIkb3BzeXMiID0gImRhcndpbiI7IHRoZW4KICAgIFNBVkVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIK ICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkeGNzZGtkaXIvdXNyL2luY2x1ZGUvbGlieG1sMiIK ICAgIEFDX0NIRUNLX0hFQURFUihsaWJ4bWwvSFRNTHBhcnNlci5oLAogICAgICBbQUNfQ0hFQ0tf REVDTChIVE1MX1BBUlNFX1JFQ09WRVIsIEhBVkVfTElCWE1MMj15ZXMsICwKICAgICAgCQkgICAg IFsjaW5jbHVkZSA8bGlieG1sL0hUTUxwYXJzZXIuaD5dKV0pCiAgICBDUFBGTEFHUz0iJFNBVkVf Q1BQRkxBR1MiCiAgICBpZiB0ZXN0ICIke0hBVkVfTElCWE1MMn0iID0gInllcyI7IHRoZW4KICAg ICAgTElCWE1MMl9DRkxBR1M9Ii1JJyR4Y3Nka2Rpci91c3IvaW5jbHVkZS9saWJ4bWwyJyIKICAg ICAgTElCWE1MMl9MSUJTPSItbHhtbDIiCiAgICBmaQogIGZpCiAgaWYgdGVzdCAiJHtIQVZFX0xJ QlhNTDJ9IiA9ICJ5ZXMiOyB0aGVuCiAgICBpZiB0ZXN0ICIke29wc3lzfSIgIT0gIm1pbmd3Ijsg dGhlbgogICAgICBBQ19DSEVDS19MSUIoeG1sMiwgaHRtbFJlYWRNZW1vcnksIEhBVkVfTElCWE1M Mj15ZXMsIEhBVkVfTElCWE1MMj1ubwogICAgICAgIFskTElCWE1MMl9MSUJTXSkKICAgIGVsc2UK ICAgICAgTElCWE1MMl9MSUJTPSIiCiAgICBmaQogICAgaWYgdGVzdCAiJHtIQVZFX0xJQlhNTDJ9 IiA9ICJ5ZXMiOyB0aGVuCiAgICAgIEFDX0RFRklORShIQVZFX0xJQlhNTDIsIDEsIFtEZWZpbmUg dG8gMSBpZiB5b3UgaGF2ZSB0aGUgbGlieG1sIGxpYnJhcnkgKC1seG1sMikuXSkKICAgIGVsc2UK ICAgICAgTElCWE1MMl9MSUJTPSIiCiAgICAgIExJQlhNTDJfQ0ZMQUdTPSIiCiAgICBmaQogIGZp CmZpCkFDX1NVQlNUKExJQlhNTDJfTElCUykKQUNfU1VCU1QoTElCWE1MMl9DRkxBR1MpCgojIElm IG5ldGRiLmggZG9lc24ndCBkZWNsYXJlIGhfZXJybm8sIHdlIG11c3QgZGVjbGFyZSBpdCBieSBo YW5kLgojIE9uIE1pbkdXLCB0aGF0IGlzIHByb3ZpZGVkIGJ5IG50L2luYy9zeXMvc29ja2V0Lmgg YW5kIHczMi5jLgppZiB0ZXN0ICIke29wc3lzfSIgPSAibWluZ3ciOyB0aGVuCiAgZW1hY3NfY3Zf bmV0ZGJfZGVjbGFyZXNfaF9lcnJubz15ZXMKZmkKQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciBuZXRk YiBkZWNsYXJlcyBoX2Vycm5vLAoJICAgICAgIGVtYWNzX2N2X25ldGRiX2RlY2xhcmVzX2hfZXJy bm8sCltBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPG5ldGRiLmg+ XV0sCiAgW1tyZXR1cm4gaF9lcnJubztdXSldLAogIGVtYWNzX2N2X25ldGRiX2RlY2xhcmVzX2hf ZXJybm89eWVzLCBlbWFjc19jdl9uZXRkYl9kZWNsYXJlc19oX2Vycm5vPW5vKV0pCmlmIHRlc3Qg JGVtYWNzX2N2X25ldGRiX2RlY2xhcmVzX2hfZXJybm8gPSB5ZXM7IHRoZW4KICBBQ19ERUZJTkUo SEFWRV9IX0VSUk5PLCAxLCBbRGVmaW5lIHRvIDEgaWYgbmV0ZGIuaCBkZWNsYXJlcyBoX2Vycm5v Ll0pCmZpCgojIENoZWNrIGZvciBtYWlsLWxvY2tpbmcgZnVuY3Rpb25zIGluIGEgIm1haWwiIGxp YnJhcnkuICBQcm9iYWJseSB0aGlzIHNob3VsZAojIGhhdmUgdGhlIHNhbWUgY2hlY2sgYXMgZm9y IGxpYmxvY2tmaWxlIGJlbG93LgpBQ19DSEVDS19MSUIobWFpbCwgbWFpbGxvY2ssIGhhdmVfbWFp bD15ZXMsIGhhdmVfbWFpbD1ubykKaWYgdGVzdCAkaGF2ZV9tYWlsID0geWVzOyB0aGVuCiAgTElC U19NQUlMPS1sbWFpbAogIEFDX0RFRklORShIQVZFX0xJQk1BSUwsIDEsIFtEZWZpbmUgdG8gMSBp ZiB5b3UgaGF2ZSB0aGUgYG1haWwnIGxpYnJhcnkgKC1sbWFpbCkuXSkKCiAgT0xEX0xJQlM9JExJ QlMKICBMSUJTPSIkTElCU19NQUlMICRMSUJTIgogIEFDX0NIRUNLX0ZVTkNTKHRvdWNobG9jaykK ICBMSUJTPSRPTERfTElCUwplbHNlCiAgTElCU19NQUlMPQpmaQpkbmwgRGViaWFuLCBhdCBsZWFz dDoKQUNfQ0hFQ0tfTElCKGxvY2tmaWxlLCBtYWlsbG9jaywgaGF2ZV9sb2NrZmlsZT15ZXMsIGhh dmVfbG9ja2ZpbGU9bm8pCmlmIHRlc3QgJGhhdmVfbG9ja2ZpbGUgPSB5ZXM7IHRoZW4KICAgTElC U19NQUlMPS1sbG9ja2ZpbGUKICAgQUNfREVGSU5FKEhBVkVfTElCTE9DS0ZJTEUsIDEsIFtEZWZp bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxvY2tmaWxlJyBsaWJyYXJ5ICgtbGxvY2tmaWxlKS5d KQplbHNlCiMgSWYgd2UgaGF2ZSB0aGUgc2hhcmVkIGxpYmxvY2tmaWxlLCBhc3N1bWUgd2UgbXVz dCB1c2UgaXQgZm9yIG1haWwKIyBsb2NraW5nIChlLmcuIERlYmlhbikuICBJZiB3ZSBjb3VsZG4n dCBsaW5rIGFnYWluc3QgbGlibG9ja2ZpbGUKIyAobm8gbGlibG9ja2ZpbGUuYSBpbnN0YWxsZWQp LCBlbnN1cmUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvLgogIGRubCBUaGlzIHdvcmtzIGZvciBmaWxl cyBnZW5lcmFsbHksIG5vdCBqdXN0IGV4ZWN1dGFibGVzLgogIGRubCBTaG91bGQgd2UgbG9vayBl bHNld2hlcmUgZm9yIGl0PyAgTWF5YmUgZXhhbWluZSAvZXRjL2xkLnNvLmNvbmY/CiAgQUNfQ0hF Q0tfUFJPRyhsaWJsb2NrZmlsZSwgbGlibG9ja2ZpbGUuc28sIHllcywgbm8sCiAgICAgICAgICAg ICAgICAvdXNyL2xpYjovbGliOi91c3IvbG9jYWwvbGliOiRMRF9MSUJSQVJZX1BBVEgpCiAgaWYg dGVzdCAkYWNfY3ZfcHJvZ19saWJsb2NrZmlsZSA9IHllczsgdGhlbgogICAgQUNfTVNHX0VSUk9S KFtTaGFyZWQgbGlibG9ja2ZpbGUgZm91bmQgYnV0IGNhbid0IGxpbmsgYWdhaW5zdCBpdC4KVGhp cyBwcm9iYWJseSBtZWFucyB0aGF0IG1vdmVtYWlsIGNvdWxkIGxvc2UgbWFpbC4KVGhlcmUgbWF5 IGJlIGEgYGRldmVsb3BtZW50JyBwYWNrYWdlIHRvIGluc3RhbGwgY29udGFpbmluZyBsaWJsb2Nr ZmlsZS5dKQogIGZpCmZpCkFDX0NIRUNLX0hFQURFUlNfT05DRShtYWlsbG9jay5oKQpBQ19TVUJT VChMSUJTX01BSUwpCgojIyBEZWZpbmUgTUFJTF9VU0VfRkxPQ0sgKG9yIExPQ0tGKSBpZiB0aGUg bWFpbGVyIHVzZXMgZmxvY2sgKG9yIGxvY2tmKSB0bwojIyBpbnRlcmxvY2sgYWNjZXNzIHRvIHRo ZSBtYWlsIHNwb29sLiAgVGhlIGFsdGVybmF0aXZlIGlzIGEgbG9jayBmaWxlIG5hbWVkCiMjIC91 c3Ivc3Bvb2wvbWFpbC8kVVNFUi5sb2NrLgptYWlsX2xvY2s9bm8KY2FzZSAiJG9wc3lzIiBpbgog IGFpeDQtMikgbWFpbF9sb2NrPSJsb2NrZiIgOzsKCiAgZ251fGZyZWVic2R8ZHJhZ29uZmx5fG5l dGJzZHxvcGVuYnNkfGRhcndpbnxpcml4Ni01KSBtYWlsX2xvY2s9ImZsb2NrIiA7OwoKICAjIyBP biBHTlUvTGludXggc3lzdGVtcywgYm90aCBtZXRob2RzIGFyZSB1c2VkIGJ5IHZhcmlvdXMgbWFp bCBwcm9ncmFtcy4KICAjIyBJIGFzc3VtZSBtb3N0IHBlb3BsZSBhcmUgdXNpbmcgbmV3ZXIgbWFp bGVycyB0aGF0IGhhdmUgaGVhcmQgb2YgZmxvY2suCiAgIyMgQ2hhbmdlIHRoaXMgaWYgeW91IG5l ZWQgdG8uCiAgIyMgRGViaWFuIGNvbnRhaW5zIGEgcGF0Y2ggd2hpY2ggc2F5czogYGBPbiBEZWJp YW4vR05VL0xpbnV4IHN5c3RlbXMsCiAgIyMgY29uZmlndXJlIGdldHMgdGhlIHJpZ2h0IGFuc3dl cnMsIGFuZCB0aGF0IG1lYW5zICpOT1QqIHVzaW5nIGZsb2NrLgogICMjIFVzaW5nIGZsb2NrIGlz IGd1YXJhbnRlZWQgdG8gYmUgdGhlIHdyb25nIHRoaW5nLiBTZWUgRGViaWFuIFBvbGljeQogICMj IGZvciBkZXRhaWxzLicnIGFuZCB0aGVuIHVzZXMgYCNpZmRlZiBERUJJQU4nLiAgVW5mb3J0dW5h dGVseSB0aGUKICAjIyBEZWJpYW4gbWFpbnRhaW5lciBoYXNuJ3QgcHJvdmlkZWQgYSBjbGVhbiBm aXggZm9yIEVtYWNzLgogICMjIG1vdmVtYWlsLmMgd2lsbCB1c2UgYG1haWxsb2NrJyB3aGVuIE1B SUxESVIsIEhBVkVfTElCTUFJTCBhbmQKICAjIyBIQVZFX01BSUxMT0NLX0ggYXJlIGRlZmluZWQs IHNvIHRoZSBmb2xsb3dpbmcgYXBwZWFycyB0byBiZSB0aGUKICAjIyBjb3JyZWN0IGxvZ2ljLiAg LS0gZngKICAjIyBXZSBtdXN0IGNoZWNrIGZvciBIQVZFX0xJQkxPQ0tGSUxFIHRvbywgYXMgbW92 ZW1haWwgZG9lcy4KICAjIyBsaWJsb2NrZmlsZSBpcyBhIEZyZWUgU29mdHdhcmUgcmVwbGFjZW1l bnQgZm9yIGxpYm1haWwsIHVzZWQgb24KICAjIyBEZWJpYW4gc3lzdGVtcyBhbmQgZWxzZXdoZXJl LiAtcmZyLgogIGdudS0qKQogICAgbWFpbF9sb2NrPSJmbG9jayIKICAgIGlmIHRlc3QgJGhhdmVf bWFpbCA9IHllcyB8fCB0ZXN0ICRoYXZlX2xvY2tmaWxlID0geWVzOyB0aGVuCiAgICAgIHRlc3Qg JGFjX2N2X2hlYWRlcl9tYWlsbG9ja19oID0geWVzICYmIG1haWxfbG9jaz1ubwogICAgZmkKICAg IDs7CgogIG1pbmd3KQogICAgbWFpbF9sb2NrPSJub25lLW5lZWRlZCIgOzsKZXNhYwoKQkxFU1NN QUlMX1RBUkdFVD0KY2FzZSAiJG1haWxfbG9jayIgaW4KICBmbG9jaykgQUNfREVGSU5FKE1BSUxf VVNFX0ZMT0NLLCAxLCBbRGVmaW5lIGlmIHRoZSBtYWlsZXIgdXNlcyBmbG9jayB0byBpbnRlcmxv Y2sgdGhlIG1haWwgc3Bvb2wuXSkgOzsKCiAgbG9ja2YpIEFDX0RFRklORShNQUlMX1VTRV9MT0NL RiwgMSwgW0RlZmluZSBpZiB0aGUgbWFpbGVyIHVzZXMgbG9ja2YgdG8gaW50ZXJsb2NrIHRoZSBt YWlsIHNwb29sLl0pIDs7CgogIG5vbmUtbmVlZGVkKSA7OwoKICAqKSBCTEVTU01BSUxfVEFSR0VU PSJuZWVkLWJsZXNzbWFpbCIgOzsKZXNhYwpBQ19TVUJTVChCTEVTU01BSUxfVEFSR0VUKQoKT0xE X0xJQlM9JExJQlMKTElCUz0iJExJQl9QVEhSRUFEICRMSUJfTUFUSCAkTElCUyIKQUNfQ0hFQ0tf RlVOQ1MoYWNjZXB0NCBmY2hkaXIgZ2V0aG9zdG5hbWUgXApnZXRydXNhZ2UgZ2V0X2N1cnJlbnRf ZGlyX25hbWUgXApscmFuZDQ4IHJhbmRvbSByaW50IFwKc2VsZWN0IGdldHBhZ2VzaXplIHNldGxv Y2FsZSBcCmdldHJsaW1pdCBzZXRybGltaXQgc2h1dGRvd24gZ2V0YWRkcmluZm8gXApwdGhyZWFk X3NpZ21hc2sgc3Ryc2lnbmFsIHNldGl0aW1lciBcCnNlbmR0byByZWN2ZnJvbSBnZXRzb2NrbmFt ZSBnZXRwZWVybmFtZSBnZXRpZmFkZHJzIGZyZWVpZmFkZHJzIFwKZ2FpX3N0cmVycm9yIHN5bmMg XApnZXRwd2VudCBlbmRwd2VudCBnZXRncmVudCBlbmRncmVudCBcCmNmbWFrZXJhdyBjZnNldHNw ZWVkIGNvcHlzaWduIF9fZXhlY3V0YWJsZV9zdGFydCBsb2cyKQpMSUJTPSRPTERfTElCUwoKZG5s IE5vIG5lZWQgdG8gY2hlY2sgZm9yIGFsaWduZWRfYWxsb2MgYW5kIHBvc2l4X21lbWFsaWduIGlm IHVzaW5nCmRubCBnbWFsbG9jLm8sIGFzIGl0IHN1cHBsaWVzIHRoZW0uICBEb24ndCB1c2UgdGhl c2UgZnVuY3Rpb25zIG9uCmRubCBEYXJ3aW4gYXMgdGhleSBhcmUgaW5jb21wYXRpYmxlIHdpdGgg dW5leG1hY29zeC5jLgppZiB0ZXN0IC16ICIkR01BTExPQ19PQkoiICYmIHRlc3QgIiRvcHN5cyIg IT0gZGFyd2luOyB0aGVuCiAgQUNfQ0hFQ0tfRlVOQ1MoW2FsaWduZWRfYWxsb2MgcG9zaXhfbWVt YWxpZ25dLCBbYnJlYWtdKQpmaQoKZG5sIENhbm5vdCB1c2UgQUNfQ0hFQ0tfRlVOQ1MKQUNfQ0FD SEVfQ0hFQ0soW2ZvciBfX2J1aWx0aW5fdW53aW5kX2luaXRdLAoJICAgICAgIGVtYWNzX2N2X2Z1 bmNfX19idWlsdGluX3Vud2luZF9pbml0LApbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JB TShbXSwgW19fYnVpbHRpbl91bndpbmRfaW5pdCAoKTtdKV0sCgkJZW1hY3NfY3ZfZnVuY19fX2J1 aWx0aW5fdW53aW5kX2luaXQ9eWVzLAoJCWVtYWNzX2N2X2Z1bmNfX19idWlsdGluX3Vud2luZF9p bml0PW5vKV0pCmlmIHRlc3QgJGVtYWNzX2N2X2Z1bmNfX19idWlsdGluX3Vud2luZF9pbml0ID0g eWVzOyB0aGVuCiAgQUNfREVGSU5FKEhBVkVfX19CVUlMVElOX1VOV0lORF9JTklULCAxLAoJICAg IFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9fYnVpbHRpbl91bndpbmRfaW5pdCcgZnVu Y3Rpb24uXSkKZmkKCkFDX0NIRUNLX0hFQURFUlNfT05DRShzeXMvdW4uaCkKCkFDX0ZVTkNfRlNF RUtPCgojIFVOSVg5OCBQVFlzLgpBQ19DSEVDS19GVU5DUyhncmFudHB0KQoKIyBQVFktcmVsYXRl ZCBHTlUgZXh0ZW5zaW9ucy4KQUNfQ0hFQ0tfRlVOQ1MoZ2V0cHQgcG9zaXhfb3BlbnB0KQoKIyBD aGVjayB0aGlzIG5vdywgc28gdGhhdCB3ZSB3aWxsIE5PVCBmaW5kIHRoZSBhYm92ZSBmdW5jdGlv bnMgaW4gbmN1cnNlcy4KIyBUaGF0IGlzIGJlY2F1c2Ugd2UgaGF2ZSBub3Qgc2V0IHVwIHRvIGxp bmsgbmN1cnNlcyBpbiBsaWItc3JjLgojIEl0J3MgYmV0dGVyIHRvIGJlbGlldmUgYSBmdW5jdGlv biBpcyBub3QgYXZhaWxhYmxlCiMgdGhhbiB0byBleHBlY3QgdG8gZmluZCBpdCBpbiBuY3Vyc2Vz LgojIEFsc28gd2UgbmVlZCB0cHV0cyBhbmQgZnJpZW5kcyB0byBiZSBhYmxlIHRvIGJ1aWxkIGF0 IGFsbC4KQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGlicmFyeSBjb250YWluaW5nIHRwdXRzXSkKIyBS dW4gYSB0ZXN0IHByb2dyYW0gdGhhdCBjb250YWlucyBhIGNhbGwgdG8gdHB1dHMsIGEgY2FsbCB0 aGF0IGlzCiMgbmV2ZXIgZXhlY3V0ZWQuICBUaGlzIHRlc3RzIHdoZXRoZXIgYSBwcmUtJ21haW4n IGR5bmFtaWMgbGlua2VyCiMgd29ya3Mgd2l0aCB0aGUgbGlicmFyeS4gIEl0J3MgdG9vIG11Y2gg dHJvdWJsZSB0byBhY3R1YWxseSBjYWxsCiMgdHB1dHMgaW4gdGhlIHRlc3QgcHJvZ3JhbSwgZHVl IHRvIHBvcnRhYmlsaXR5IGhhc3NsZXMuICBXaGVuCiMgY3Jvc3MtY29tcGlsaW5nLCBhc3N1bWUg dGhlIHRlc3QgcHJvZ3JhbSB3aWxsIHJ1biBpZiBpdCBsaW5rcy4KQUNfREVGVU4oW3RwdXRzX2xp bmtfc291cmNlXSwgWwogIEFDX0xBTkdfU09VUkNFKAogICAgIFtbZXh0ZXJuIHZvaWQgdHB1dHMg KGNvbnN0IGNoYXIgKiwgaW50LCBpbnQgKCopKGludCkpOwogICAgICAgaW50IG1haW4gKGludCBh cmdjLCBjaGFyICoqYXJndikKICAgICAgIHsKCSAgaWYgKGFyZ2MgPT0gMTAwMDApCgkgICAgdHB1 dHMgKGFyZ3ZbMF0sIDAsIDApOwoJICByZXR1cm4gMDsKICAgICAgIH1dXSkKXSkKaWYgdGVzdCAi JHtvcHN5c30iID0gIm1pbmd3IjsgdGhlbgogIG1zZz0nbm9uZSByZXF1aXJlZCcKZWxzZQogICMg TWF5YmUgY3Vyc2VzIHNob3VsZCBiZSB0cmllZCBlYXJsaWVyPwogICMgU2VlIGh0dHA6Ly9kZWJi dWdzLmdudS5vcmcvY2dpL2J1Z3JlcG9ydC5jZ2k/YnVnPTk3MzYjMzUKICBmb3IgdHB1dHNfbGli cmFyeSBpbiAnJyB0aW5mbyBuY3Vyc2VzIHRlcm1pbmZvIHRlcm1jYXAgY3Vyc2VzOyBkbwogICAg T0xJQlM9JExJQlMKICAgIGlmIHRlc3QgLXogIiR0cHV0c19saWJyYXJ5IjsgdGhlbgogICAgICBM SUJTX1RFUk1DQVA9CiAgICAgIG1zZz0nbm9uZSByZXF1aXJlZCcKICAgIGVsc2UKICAgICAgTElC U19URVJNQ0FQPS1sJHRwdXRzX2xpYnJhcnkKICAgICAgbXNnPSRMSUJTX1RFUk1DQVAKICAgICAg TElCUz0iJExJQlNfVEVSTUNBUCAkTElCUyIKICAgIGZpCiAgICBBQ19SVU5fSUZFTFNFKFt0cHV0 c19saW5rX3NvdXJjZV0sIFtdLCBbbXNnPW5vXSwKICAgICAgW0FDX0xJTktfSUZFTFNFKFt0cHV0 c19saW5rX3NvdXJjZV0sIFtdLCBbbXNnPW5vXSldKQogICAgTElCUz0kT0xJQlMKICAgIGlmIHRl c3QgIlgkbXNnIiAhPSBYbm87IHRoZW4KICAgICAgYnJlYWsKICAgIGZpCiAgZG9uZQpmaQpBQ19N U0dfUkVTVUxUKFskbXNnXSkKaWYgdGVzdCAiWCRtc2ciID0gWG5vOyB0aGVuCiAgQUNfTVNHX0VS Uk9SKFtUaGUgcmVxdWlyZWQgZnVuY3Rpb24gYHRwdXRzJyB3YXMgbm90IGZvdW5kIGluIGFueSBs aWJyYXJ5LgpUaGUgZm9sbG93aW5nIGxpYnJhcmllcyB3ZXJlIHRyaWVkIChpbiBvcmRlcik6CiAg bGlidGluZm8sIGxpYm5jdXJzZXMsIGxpYnRlcm1pbmZvLCBsaWJ0ZXJtY2FwLCBsaWJjdXJzZXMK UGxlYXNlIHRyeSBpbnN0YWxsaW5nIHdoaWNoZXZlciBvZiB0aGVzZSBsaWJyYXJpZXMgaXMgbW9z dCBhcHByb3ByaWF0ZQpmb3IgeW91ciBzeXN0ZW0sIHRvZ2V0aGVyIHdpdGggaXRzIGhlYWRlciBm aWxlcy4KRm9yIGV4YW1wbGUsIGEgbGlibmN1cnNlcy1kZXYoZWwpIG9yIHNpbWlsYXIgcGFja2Fn ZS5dKQpmaQoKIyMgVXNlIHRlcm1jYXAgaW5zdGVhZCBvZiB0ZXJtaW5mbz8KIyMgT25seSB0cnVl IGZvcjogZnJlZWJzZCA8IDQwMDAwLCBtcy13MzIsIG1zZG9zLCBuZXRic2QgPCA1OTkwMDI1MDAu ClRFUk1JTkZPPXllcwojIyBGSVhNRT8gIEluIHRoZSBjYXNlcyBiZWxvdyB3aGVyZSB3ZSB1bmNv bmRpdGlvbmFsbHkgc2V0CiMjIExJQlNfVEVSTUNBUD0iLWxuY3Vyc2VzIiwgdGhpcyBvdmVycmlk ZXMgTElCU19URVJNQ0FQID0gLWx0aW5mbywKIyMgaWYgdGhhdCB3YXMgZm91bmQgYWJvdmUgdG8g aGF2ZSB0cHV0cy4KIyMgU2hvdWxkIHdlIHVzZSB0aGUgZ251KiBsb2dpYyBldmVyeXdoZXJlPwpj YXNlICIkb3BzeXMiIGluCiAgIyMgZGFyd2luOiBQcmV2ZW50cyBjcmFzaGVzIHdoZW4gcnVubmlu ZyBFbWFjcyBpbiBUZXJtaW5hbC5hcHAgdW5kZXIgMTAuMi4KICAjIyAgVGhlIG5jdXJzZXMgbGli cmFyeSBoYXMgYmVlbiBtb3ZlZCBvdXQgb2YgdGhlIFN5c3RlbSBmcmFtZXdvcmsgaW4KICAjIyAg TWFjIE9TIFggMTAuMi4gIFNvIGlmIGNvbmZpZ3VyZSBkZXRlY3RzIGl0LCBzZXQgdGhlIGNvbW1h bmQtbGluZQogICMjICBvcHRpb24gdG8gdXNlIGl0LgogIGRhcndpbikgTElCU19URVJNQ0FQPSIt bG5jdXJzZXMiIDs7CgogIGdudSopIHRlc3QgLXogIiRMSUJTX1RFUk1DQVAiICYmIExJQlNfVEVS TUNBUD0iLWxuY3Vyc2VzIiA7OwoKICBmcmVlYnNkKQogICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0 aGVyIEZyZWVCU0QgaXMgbmV3IGVub3VnaCB0byB1c2UgdGVybWluZm9dKQogICAgQUNfQ0FDSEVf VkFMKGVtYWNzX2N2X2ZyZWVic2RfdGVybWluZm8sCiAgICBbQUNfTElOS19JRkVMU0UoW0FDX0xB TkdfUFJPR1JBTShbWyNpbmNsdWRlIDxvc3JlbGRhdGUuaD5dXSwKW1sjaWYgX19GcmVlQlNEX3Zl cnNpb24gPCA0MDAwMDAKZmFpbDsKI2VuZGlmCl1dKV0sIGVtYWNzX2N2X2ZyZWVic2RfdGVybWlu Zm89eWVzLCBlbWFjc19jdl9mcmVlYnNkX3Rlcm1pbmZvPW5vKV0pCgogICAgQUNfTVNHX1JFU1VM VCgkZW1hY3NfY3ZfZnJlZWJzZF90ZXJtaW5mbykKCiAgICBpZiB0ZXN0ICRlbWFjc19jdl9mcmVl YnNkX3Rlcm1pbmZvID0geWVzOyB0aGVuCiAgICAgIExJQlNfVEVSTUNBUD0iLWxuY3Vyc2VzIgog ICAgZWxzZQogICAgICBURVJNSU5GTz1ubwogICAgICBMSUJTX1RFUk1DQVA9Ii1sdGVybWNhcCIK ICAgIGZpCiAgICA7OwoKICBtaW5ndykKICAgIFRFUk1JTkZPPW5vCiAgICBMSUJTX1RFUk1DQVA9 CiAgICA7OwoKICBuZXRic2QpCiAgICBpZiB0ZXN0ICJ4JExJQlNfVEVSTUNBUCIgIT0gIngtbHRl cm1pbmZvIjsgdGhlbgogICAgICBURVJNSU5GTz1ubwogICAgICBMSUJTX1RFUk1DQVA9Ii1sdGVy bWNhcCIKICAgIGZpCiAgICA7OwoKICBvcGVuYnNkIHwgZHJhZ29uZmx5KSBMSUJTX1RFUk1DQVA9 Ii1sbmN1cnNlcyIgOzsKCiAgIyMgaHB1eDogTWFrZSBzdXJlIHdlIGdldCBzZWxlY3QgZnJvbSBs aWJjIHJhdGhlciB0aGFuIGZyb20gbGliY3Vyc2VzCiAgIyMgIGJlY2F1c2UgbGliY3Vyc2VzIG9u IEhQVVggMTAuMTAgaGFzIGEgYnJva2VuIHZlcnNpb24gb2Ygc2VsZWN0LgogICMjICBXZSB1c2Vk IHRvIHVzZSAtbGMgLWxjdXJzZXMsIGJ1dCB0aGlzIG1heSBiZSBjbGVhbmVyLgogICMjIEZJWE1F PyAgQnV0IFRFUk1JTkZPID0geWVzIG9uIGhwdXggKGl0IHVzZWQgdG8gYmUgZXhwbGljaXRseQog ICMgc2V0IHRoYXQgd2F5LCBub3cgaXQgdXNlcyB0aGUgZGVmYXVsdCkuICBJc24ndCB0aGlzIGEg Y29udHJhZGljdGlvbj8KICBocHV4KikgTElCU19URVJNQ0FQPSItbHRlcm1jYXAiIDs7Cgplc2Fj CgpURVJNQ0FQX09CSj10cGFyYW0ubwppZiB0ZXN0ICRURVJNSU5GTyA9IHllczsgdGhlbgogIEFD X0RFRklORShURVJNSU5GTywgMSwgW0RlZmluZSB0byAxIGlmIHlvdSB1c2UgdGVybWluZm8gaW5z dGVhZCBvZiB0ZXJtY2FwLl0pCiAgVEVSTUNBUF9PQko9dGVybWluZm8ubwpmaQppZiB0ZXN0ICJY JExJQlNfVEVSTUNBUCIgPSAiWC1sbmN1cnNlcyI7IHRoZW4KICBBQ19ERUZJTkUoVVNFX05DVVJT RVMsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgdXNlIG5jdXJzZXMuXSkKZmkKQUNfU1VCU1QoTElC U19URVJNQ0FQKQpBQ19TVUJTVChURVJNQ0FQX09CSikKCiMgR05VL0xpbnV4LXNwZWNpZmljIHRp bWVyIGZ1bmN0aW9ucy4KQUNfQ0FDSEVfQ0hFQ0soW2ZvciB0aW1lcmZkIGludGVyZmFjZV0sIFtl bWFjc19jdl9oYXZlX3RpbWVyZmRdLAogIFtBQ19DT01QSUxFX0lGRUxTRSgKICAgICBbQUNfTEFO R19QUk9HUkFNKFtbI2luY2x1ZGUgPHN5cy90aW1lcmZkLmg+CgkJICAgICAgXV0sCgkJICAgICAg W1t0aW1lcmZkX2NyZWF0ZSAoQ0xPQ0tfUkVBTFRJTUUsCgkJCQkJVEZEX0NMT0VYRUMgfCBURkRf Tk9OQkxPQ0spOwoJCQl0aW1lcmZkX3NldHRpbWUgKDAsIFRGRF9USU1FUl9BQlNUSU1FLCAwLCAw KTtdXSldLAogICAgIFtlbWFjc19jdl9oYXZlX3RpbWVyZmQ9eWVzXSwKICAgICBbZW1hY3NfY3Zf aGF2ZV90aW1lcmZkPW5vXSldKQppZiB0ZXN0ICIkZW1hY3NfY3ZfaGF2ZV90aW1lcmZkIiA9IHll czsgdGhlbgogIEFDX0RFRklORShbSEFWRV9USU1FUkZEXSwgMSwKICAgIFtEZWZpbmUgdG8gMSBp ZiB0aW1lcmZkIGZ1bmN0aW9ucyBhcmUgc3VwcG9ydGVkIGFzIGluIEdOVS9MaW51eC5dKQpmaQoK IyBEbyB3ZSBoYXZlIHJlc19pbml0LCBmb3IgZGV0ZWN0aW5nIGNoYW5nZXMgaW4gL2V0Yy9yZXNv bHYuY29uZj8KIyBPbiBEYXJ3aW4sIHJlc19pbml0IGFwcGVhcnMgbm90IHRvIGJlIHVzZWZ1bDog c2VlIGJ1ZyM1NjIgYW5kCiMgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2VtYWNz LWRldmVsLzIwMDctMTEvbXNnMDE0NjcuaHRtbApyZXNvbHY9bm8KCmlmIHRlc3QgJG9wc3lzICE9 IGRhcndpbjsgdGhlbgoKICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1 ZGUgPG5ldGluZXQvaW4uaD4KI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgojaW5jbHVkZSA8cmVz b2x2Lmg+XV0sCiAgICBbW3JldHVybiByZXNfaW5pdCgpO11dKV0sCiAgICBoYXZlX3Jlc19pbml0 PXllcywgaGF2ZV9yZXNfaW5pdD1ubykKICBpZiB0ZXN0ICIkaGF2ZV9yZXNfaW5pdCIgPSBubzsg dGhlbgogICAgT0xJQlM9IiRMSUJTIgogICAgTElCUz0iJExJQlMgLWxyZXNvbHYiCiAgICBBQ19N U0dfQ0hFQ0tJTkcoZm9yIHJlc19pbml0IHdpdGggLWxyZXNvbHYpCiAgICBBQ19MSU5LX0lGRUxT RShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KI2luY2x1ZGUgPGFy cGEvbmFtZXNlci5oPgojaW5jbHVkZSA8cmVzb2x2Lmg+XV0sCiAgICAgIFtbcmV0dXJuIHJlc19p bml0KCk7XV0pXSwKICAgICAgaGF2ZV9yZXNfaW5pdD15ZXMsIGhhdmVfcmVzX2luaXQ9bm8pCiAg ICBBQ19NU0dfUkVTVUxUKCRoYXZlX3Jlc19pbml0KQogICAgaWYgdGVzdCAiJGhhdmVfcmVzX2lu aXQiID0geWVzIDsgdGhlbgogICAgICByZXNvbHY9eWVzCiAgICBmaQogICAgTElCUz0iJE9MSUJT IgogIGZpCgogIGlmIHRlc3QgIiRoYXZlX3Jlc19pbml0IiA9IHllczsgdGhlbgogICAgQUNfREVG SU5FKEhBVkVfUkVTX0lOSVQsIDEsIFtEZWZpbmUgdG8gMSBpZiByZXNfaW5pdCBpcyBhdmFpbGFi bGUuXSkKICBmaQpmaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRubCAhZGFyd2luCgoj IERvIHdlIG5lZWQgdGhlIEhlc2lvZCBsaWJyYXJ5IHRvIHByb3ZpZGUgdGhlIHN1cHBvcnQgcm91 dGluZXM/CmRubCBGSVhNRT8gIFNob3VsZCB3ZSBiZSBza2lwcGluZyB0aGlzIG9uIERhcndpbiB0 b28/CkxJQkhFU0lPRD0KaWYgdGVzdCAiJHdpdGhfaGVzaW9kIiAhPSBubyA7IHRoZW4KICAjIERv bid0IHNldCAkTElCUyBoZXJlIC0tIHNlZSBjb21tZW50cyBhYm92ZS4gIEZJWE1FIHdoaWNoIGNv bW1lbnRzPwogIEFDX0NIRUNLX0ZVTkMocmVzX3NlbmQsICwgW0FDX0NIRUNLX0ZVTkMoX19yZXNf c2VuZCwgLAogICAgIFtBQ19DSEVDS19MSUIocmVzb2x2LCByZXNfc2VuZCwgcmVzb2x2PXllcywK CQkgIFtBQ19DSEVDS19MSUIocmVzb2x2LCBfX3Jlc19zZW5kLCByZXNvbHY9eWVzKV0pXSldKQog IGlmIHRlc3QgIiRyZXNvbHYiID0geWVzIDsgdGhlbgogICAgUkVTT0xWTElCPS1scmVzb2x2CiAg ZWxzZQogICAgUkVTT0xWTElCPQogIGZpCiAgQUNfQ0hFQ0tfRlVOQyhoZXNfZ2V0bWFpbGhvc3Qs ICwgW0FDX0NIRUNLX0xJQihoZXNpb2QsIGhlc19nZXRtYWlsaG9zdCwKCWhlc2lvZD15ZXMsIDos ICRSRVNPTFZMSUIpXSkKCiAgaWYgdGVzdCB4IiRoZXNpb2QiID0geHllczsgdGhlbgogICAgTElC SEVTSU9EPS1saGVzaW9kCiAgZmkKZmkKQUNfU1VCU1QoTElCSEVTSU9EKQoKIyBEbyB3ZSBuZWVk IGxpYnJlc29sdiAoZHVlIHRvIHJlc19pbml0IG9yIEhlc2lvZCk/CmlmIHRlc3QgIiRyZXNvbHYi ID0geWVzICYmIHRlc3QgJG9wc3lzICE9IGRhcndpbjsgdGhlbgogIExJQlJFU09MVj0tbHJlc29s dgplbHNlCiAgTElCUkVTT0xWPQpmaQpBQ19TVUJTVChMSUJSRVNPTFYpCgojIFRoZXNlIHRlbGwg dXMgd2hpY2ggS2VyYmVyb3MtcmVsYXRlZCBsaWJyYXJpZXMgdG8gdXNlLgpDT01fRVJSTElCPQpD UllQVE9MSUI9CktSQjVMSUI9CkRFU0xJQj0KS1JCNExJQj0KCmlmIHRlc3QgIiR7d2l0aF9rZXJi ZXJvc30iICE9IG5vOyB0aGVuCiAgT0xEX0xJQlM9JExJQlMKICBBQ19DSEVDS19MSUIoY29tX2Vy ciwgY29tX2VyciwgaGF2ZV9jb21fZXJyPXllcywgaGF2ZV9jb21fZXJyPW5vKQogIGlmIHRlc3Qg JGhhdmVfY29tX2VyciA9IHllczsgdGhlbgogICAgQ09NX0VSUkxJQj0tbGNvbV9lcnIKICAgIExJ QlM9IiRDT01fRVJSTElCICRMSUJTIgogIGZpCiAgQUNfQ0hFQ0tfTElCKGNyeXB0bywgbWl0X2Rl c19jYmNfZW5jcnlwdCwgaGF2ZV9jcnlwdG89eWVzLCBoYXZlX2NyeXB0bz1ubykKICBpZiB0ZXN0 ICRoYXZlX2NyeXB0byA9IHllczsgdGhlbgogICAgQ1JZUFRPTElCPS1sY3J5cHRvCiAgICBMSUJT PSIkQ1JZUFRPTElCICRMSUJTIgogIGZpCiAgQUNfQ0hFQ0tfTElCKGs1Y3J5cHRvLCBtaXRfZGVz X2NiY19lbmNyeXB0LCBoYXZlX2s1Y3J5cHRvPXllcywgaGF2ZV9rNWNyeXB0bz1ubykKICBpZiB0 ZXN0ICRoYXZlX2s1Y3J5cHRvID0geWVzOyB0aGVuCiAgICBDUllQVE9MSUI9LWxrNWNyeXB0bwog ICAgTElCUz0iJENSWVBUT0xJQiAkTElCUyIKICBmaQogIEFDX0NIRUNLX0xJQihrcmI1LCBrcmI1 X2luaXRfY29udGV4dCwgaGF2ZV9rcmI1PXllcywgaGF2ZV9rcmI1PW5vKQogIGlmIHRlc3QgJGhh dmVfa3JiNT15ZXM7IHRoZW4KICAgIEtSQjVMSUI9LWxrcmI1CiAgICBMSUJTPSIkS1JCNUxJQiAk TElCUyIKICBmaQogIGRubCBGSVhNRSBTaW1wbGlmeS4gIERvZXMgbm90IG1hdGNoIDIyIGxvZ2lj LCB0aGFua3MgdG8gZGVmYXVsdF9vZmY/CiAgaWYgdGVzdCAiJHt3aXRoX2tlcmJlcm9zNX0iID0g bm87IHRoZW4KICAgIEFDX0NIRUNLX0xJQihkZXM0MjUsIGRlc19jYmNfZW5jcnlwdCwgaGF2ZV9k ZXM0MjU9eWVzLCBoYXZlX2RlczQyNT1ubyApCiAgICBpZiB0ZXN0ICRoYXZlX2RlczQyNSA9IHll czsgdGhlbgogICAgICBERVNMSUI9LWxkZXM0MjUKICAgICAgTElCUz0iJERFU0xJQiAkTElCUyIK ICAgIGVsc2UKICAgICAgQUNfQ0hFQ0tfTElCKGRlcywgZGVzX2NiY19lbmNyeXB0LCBoYXZlX2Rl cz15ZXMsIGhhdmVfZGVzPW5vKQogICAgICBpZiB0ZXN0ICRoYXZlX2RlcyA9IHllczsgdGhlbgog ICAgICAgIERFU0xJQj0tbGRlcwogICAgICAgIExJQlM9IiRERVNMSUIgJExJQlMiCiAgICAgIGZp CiAgICBmaQogICAgQUNfQ0hFQ0tfTElCKGtyYjQsIGtyYl9nZXRfY3JlZCwgaGF2ZV9rcmI0PXll cywgaGF2ZV9rcmI0PW5vKQogICAgaWYgdGVzdCAkaGF2ZV9rcmI0ID0geWVzOyB0aGVuCiAgICAg IEtSQjRMSUI9LWxrcmI0CiAgICAgIExJQlM9IiRLUkI0TElCICRMSUJTIgogICAgZWxzZQogICAg ICBBQ19DSEVDS19MSUIoa3JiLCBrcmJfZ2V0X2NyZWQsIGhhdmVfa3JiPXllcywgaGF2ZV9rcmI9 bm8pCiAgICAgIGlmIHRlc3QgJGhhdmVfa3JiID0geWVzOyB0aGVuCiAgICAgICAgS1JCNExJQj0t bGtyYgogICAgICAgIExJQlM9IiRLUkI0TElCICRMSUJTIgogICAgICBmaQogICAgZmkKICBmaQoK ICBpZiB0ZXN0ICIke3dpdGhfa2VyYmVyb3M1fSIgIT0gbm87IHRoZW4KICAgIEFDX0NIRUNLX0hF QURFUlMoa3JiNS5oLAogICAgICBbQUNfQ0hFQ0tfTUVNQkVSUyhba3JiNV9lcnJvci50ZXh0LCBr cmI1X2Vycm9yLmVfdGV4dF0sLCwKCQkgICAgICAgIFsjaW5jbHVkZSA8a3JiNS5oPl0pXSkKICBl bHNlCiAgICBBQ19DSEVDS19IRUFERVJTKGtyYi5oLCwKCQkgICAgIFtBQ19DSEVDS19IRUFERVJT KGtlcmJlcm9zSVYva3JiLmgsLAoJCQkJICAgICAgIFtBQ19DSEVDS19IRUFERVJTKGtlcmJlcm9z L2tyYi5oKV0pXSkKICBmaQogIEFDX0NIRUNLX0hFQURFUlMoY29tX2Vyci5oKQogIExJQlM9JE9M RF9MSUJTCmZpCgpBQ19TVUJTVChDT01fRVJSTElCKQpBQ19TVUJTVChDUllQVE9MSUIpCkFDX1NV QlNUKEtSQjVMSUIpCkFDX1NVQlNUKERFU0xJQikKQUNfU1VCU1QoS1JCNExJQikKCkFDX0NIRUNL X0hFQURFUlModmFsZ3JpbmQvdmFsZ3JpbmQuaCkKCkFDX0NIRUNLX0ZVTkNTX09OQ0UodHpzZXQp CkFDX01TR19DSEVDS0lORyh3aGV0aGVyIGxvY2FsdGltZSBjYWNoZXMgVFopCkFDX0NBQ0hFX1ZB TChlbWFjc19jdl9sb2NhbHRpbWVfY2FjaGUsCltpZiB0ZXN0IHgkYWNfY3ZfZnVuY190enNldCA9 IHh5ZXM7IHRoZW4KQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sjaW5jbHVkZSA8dGlt ZS5oPgpjaGFyIFRaX0dNVDBbXSA9ICJUWj1HTVQwIjsKY2hhciBUWl9QU1Q4W10gPSAiVFo9UFNU OCI7Cm1haW4oKQp7CiAgdGltZV90IG5vdyA9IHRpbWUgKCh0aW1lX3QgKikgMCk7CiAgaW50IGhv dXJfR01UMCwgaG91cl91bnNldDsKICBpZiAocHV0ZW52IChUWl9HTVQwKSAhPSAwKQogICAgZXhp dCAoMSk7CiAgaG91cl9HTVQwID0gbG9jYWx0aW1lICgmbm93KS0+dG1faG91cjsKICB1bnNldGVu digiVFoiKTsKICBob3VyX3Vuc2V0ID0gbG9jYWx0aW1lICgmbm93KS0+dG1faG91cjsKICBpZiAo cHV0ZW52IChUWl9QU1Q4KSAhPSAwKQogICAgZXhpdCAoMSk7CiAgaWYgKGxvY2FsdGltZSAoJm5v dyktPnRtX2hvdXIgPT0gaG91cl9HTVQwKQogICAgZXhpdCAoMSk7CiAgdW5zZXRlbnYoIlRaIik7 CiAgaWYgKGxvY2FsdGltZSAoJm5vdyktPnRtX2hvdXIgIT0gaG91cl91bnNldCkKICAgIGV4aXQg KDEpOwogIGV4aXQgKDApOwp9XV0pXSwgZW1hY3NfY3ZfbG9jYWx0aW1lX2NhY2hlPW5vLCBlbWFj c19jdl9sb2NhbHRpbWVfY2FjaGU9eWVzLApbIyBJZiB3ZSBoYXZlIHR6c2V0LCBhc3N1bWUgdGhl IHdvcnN0IHdoZW4gY3Jvc3MtY29tcGlsaW5nLgplbWFjc19jdl9sb2NhbHRpbWVfY2FjaGU9eWVz XSkKZWxzZQoJIyBJZiB3ZSBsYWNrIHR6c2V0LCByZXBvcnQgdGhhdCBsb2NhbHRpbWUgZG9lcyBu b3QgY2FjaGUgVFosCgkjIHNpbmNlIHdlIGNhbid0IGludmFsaWRhdGUgdGhlIGNhY2hlIGlmIHdl IGRvbid0IGhhdmUgdHpzZXQuCgllbWFjc19jdl9sb2NhbHRpbWVfY2FjaGU9bm8KZmldKWRubApB Q19NU0dfUkVTVUxUKCRlbWFjc19jdl9sb2NhbHRpbWVfY2FjaGUpCmlmIHRlc3QgJGVtYWNzX2N2 X2xvY2FsdGltZV9jYWNoZSA9IHllczsgdGhlbgogIEFDX0RFRklORShMT0NBTFRJTUVfQ0FDSEUs IDEsCgkgICAgW0RlZmluZSB0byAxIGlmIGxvY2FsdGltZSBjYWNoZXMgVFouXSkKZmkKCm9rX3Nv X2Zhcj15ZXMKQUNfQ0hFQ0tfRlVOQyhzb2NrZXQsICwgb2tfc29fZmFyPW5vKQppZiB0ZXN0ICRv a19zb19mYXIgPSB5ZXM7IHRoZW4KICBBQ19DSEVDS19IRUFERVIobmV0aW5ldC9pbi5oLCAsIG9r X3NvX2Zhcj1ubykKZmkKaWYgdGVzdCAkb2tfc29fZmFyID0geWVzOyB0aGVuCiAgQUNfQ0hFQ0tf SEVBREVSKGFycGEvaW5ldC5oLCAsIG9rX3NvX2Zhcj1ubykKZmkKaWYgdGVzdCAkb2tfc29fZmFy ID0geWVzOyB0aGVuCmRubCBGaXhtZTogTm90IHVzZWQuICBTaG91bGQgdGhpcyBiZSBIQVZFX1NP Q0tFVFM/CiAgQUNfREVGSU5FKEhBVkVfSU5FVF9TT0NLRVRTLCAxLAoJICAgIFtEZWZpbmUgdG8g MSBpZiB5b3UgaGF2ZSBpbmV0IHNvY2tldHMuXSkKZmkKCkFDX0ZVTkNfRk9SSwoKQUNfQ0hFQ0tf RlVOQ1Moc25wcmludGYpCgpkbmwgQ2hlY2sgZm9yIGdsaWIuICBUaGlzIGRpZmZlcnMgZnJvbSBv dGhlciBsaWJyYXJ5IGNoZWNrcyBpbiB0aGF0CmRubCBFbWFjcyBuZWVkIG5vdCBsaW5rIHRvIGds aWIgdW5sZXNzIHNvbWUgb3RoZXIgbGlicmFyeSBpcyBhbHJlYWR5CmRubCBsaW5raW5nIHRvIGds aWIuICBBbHRob3VnaCBnbGliIHByb3ZpZGVzIG5vIGZhY2lsaXRpZXMgdGhhdCBFbWFjcwpkbmwg bmVlZHMgZm9yIGl0cyBvd24gcHVycG9zZXMsIHdoZW4gZ2xpYiBpcyBwcmVzZW50IEVtYWNzIG5l ZWRzIHRvCmRubCB1c2UgcHJpbWl0aXZlcyBsaWtlIGdfbWFpbl9jb250ZXh0X3F1ZXJ5IHRvIGF2 b2lkIGNsYXNoaW5nIHdpdGgKZG5sIGdsaWIgYXQgYSBsb3cgbGV2ZWwuCmRubApkbmwgQ2hlY2sg dGhpcyBsYXRlLCBzaW5jZSBpdCBkZXBlbmRzIG9uICRHVEtfQ0ZMQUdTIGV0Yy4KWEdTRUxPQko9 Ck9MRENGTEFHUz0iJENGTEFHUyIKT0xETElCUz0iJExJQlMiCkNGTEFHUz0iJENGTEFHUyAkR1RL X0NGTEFHUyAkUlNWR19DRkxBR1MgJERCVVNfQ0ZMQUdTICRTRVRUSU5HU19DRkxBR1MiCkxJQlM9 IiRMSUJTICRHVEtfTElCUyAkUlNWR19MSUJTICREQlVTX0xJQlMgJFNFVFRJTkdTX0xJQlMiCkNG TEFHUz0iJENGTEFHUyAkR0ZJTEVOT1RJRllfQ0ZMQUdTIgpMSUJTPSIkTElCUyAkR0ZJTEVOT1RJ RllfTElCUyIKQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIEdMaWIgaXMgbGlua2VkIGluXSkKQUNf TElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTSgKCVtbI2luY2x1ZGUgPGdsaWIuaD4KIAldXSwK CVtbZ19wcmludCAoIkhlbGxvIHdvcmxkIik7XV0pXSwKICAgICBbbGlua3NfZ2xpYj15ZXNdLAog ICAgIFtsaW5rc19nbGliPW5vXSkKQUNfTVNHX1JFU1VMVChbJGxpbmtzX2dsaWJdKQppZiB0ZXN0 ICIke2xpbmtzX2dsaWJ9IiA9ICJ5ZXMiOyB0aGVuCiAgQUNfREVGSU5FKEhBVkVfR0xJQiwgMSwg W0RlZmluZSB0byAxIGlmIEdMaWIgaXMgbGlua2VkIGluLl0pCiAgaWYgdGVzdCAiJEhBVkVfTlMi ID0gbm87dGhlbgogICAgWEdTRUxPQko9eGdzZWxlY3QubwogIGZpCmZpCkNGTEFHUz0iJE9MRENG TEFHUyIKTElCUz0iJE9MRExJQlMiCkFDX1NVQlNUKFhHU0VMT0JKKQoKZG5sIEFkYXB0ZWQgZnJv bSBIYWlibGUncyB2ZXJzaW9uLgpBQ19DQUNIRV9DSEVDSyhbZm9yIG5sX2xhbmdpbmZvIGFuZCBD T0RFU0VUXSwgZW1hY3NfY3ZfbGFuZ2luZm9fY29kZXNldCwKICBbQUNfTElOS19JRkVMU0UoW0FD X0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxsYW5naW5mby5oPl1dLAogICAgW1tjaGFyKiBjcyA9 IG5sX2xhbmdpbmZvKENPREVTRVQpO11dKV0sCiAgICBlbWFjc19jdl9sYW5naW5mb19jb2Rlc2V0 PXllcywKICAgIGVtYWNzX2N2X2xhbmdpbmZvX2NvZGVzZXQ9bm8pCiAgXSkKaWYgdGVzdCAkZW1h Y3NfY3ZfbGFuZ2luZm9fY29kZXNldCA9IHllczsgdGhlbgogIEFDX0RFRklORShIQVZFX0xBTkdJ TkZPX0NPREVTRVQsIDEsCiAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIDxsYW5naW5mby5oPiBhbmQg bmxfbGFuZ2luZm8oQ09ERVNFVCkuXSkKZmkKCkFDX1RZUEVfTUJTVEFURV9UCgpBQ19DQUNIRV9D SEVDSyhbZm9yIEMgcmVzdHJpY3RlZCBhcnJheSBkZWNsYXJhdGlvbnNdLCBlbWFjc19jdl9jX3Jl c3RyaWN0X2FyciwKICBbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW3ZvaWQg ZnJlZCAoaW50IHhbX19yZXN0cmljdF0pO11dLCBbW11dKV0sCiAgICAgICAgICAgICAgICAgIGVt YWNzX2N2X2NfcmVzdHJpY3RfYXJyPXllcywgZW1hY3NfY3ZfY19yZXN0cmljdF9hcnI9bm8pXSkK aWYgdGVzdCAiJGVtYWNzX2N2X2NfcmVzdHJpY3RfYXJyIiA9IHllczsgdGhlbgogIEFDX0RFRklO RShfX3Jlc3RyaWN0X2FyciwgX19yZXN0cmljdCwKICAgIFtEZWZpbmUgdG8gY29tcGlsZXIncyBl cXVpdmFsZW50IG9mIEM5OSByZXN0cmljdCBrZXl3b3JkIGluIGFycmF5CiAgICAgZGVjbGFyYXRp b25zLiAgRGVmaW5lIGFzIGVtcHR5IGZvciBubyBlcXVpdmFsZW50Ll0pCmZpCgpkbmwgRml4bWU6 IEFDX1NZU19QT1NJWF9URVJNSU9TIHNob3VsZCBwcm9iYWJseSBiZSB1c2VkLCBidXQgaXQncyBu b3QgY2xlYXIKZG5sIGhvdyB0aGUgdHR5IGNvZGUgaXMgcmVsYXRlZCB0byBQT1NJWCBhbmQvb3Ig b3RoZXIgdmVyc2lvbnMgb2YgdGVybWlvcy4KZG5sIFRoZSBmb2xsb3dpbmcgbG9va3MgbGlrZSBh IHVzZWZ1bCBzdGFydC4KZG5sCmRubCBBQ19TWVNfUE9TSVhfVEVSTUlPUwpkbmwgaWYgdGVzdCAk YWNfY3Zfc3lzX3Bvc2l4X3Rlcm1pb3MgPSB5ZXM7IHRoZW4KZG5sICAgIEFDX0RFRklORShIQVZF X1RFUk1JT1MsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBQT1NJWC1zdHlsZSBmdW5jdGlv bnMKZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbWFjcm9zIGZvciB0ZXJt aW5hbCBjb250cm9sLl0pCmRubCAgICBBQ19ERUZJTkUoSEFWRV9UQ0FUVFIsIDEsIFtEZWZpbmUg dG8gMSBpZiB5b3UgaGF2ZSB0Y2dldGF0dHIgYW5kIHRjc2V0YXR0ci5dKQpkbmwgZmkKCmRubCBU dXJuZWQgb24gSnVuZSAxOTk2IHN1cHBvc2luZyBub2JvZHkgd2lsbCBtaW5kIGl0LgpkbmwgTWlu R1cgZW11bGF0ZXMgcGFzc3dkIGRhdGFiYXNlLCBzbyB0aGlzIGZlYXR1cmUgZG9lc24ndCBtYWtl IHNlbnNlIHRoZXJlLgppZiB0ZXN0ICIke29wc3lzfSIgIT0gIm1pbmd3IjsgdGhlbgogICBBQ19E RUZJTkUoQU1QRVJTQU5EX0ZVTExfTkFNRSwgMSwgW0RlZmluZSB0byB1c2UgdGhlIGNvbnZlbnRp b24gdGhhdCAmCiAgICAgaW4gdGhlIGZ1bGwgbmFtZSBzdGFuZHMgZm9yIHRoZSBsb2dpbiBpZC5d KQpmaQoKZG5sIEV2ZXJ5Ym9keSBzdXBwb3J0cyB0aGlzLCBleGNlcHQgTVMuCmRubCBTZWVtcyBs aWtlIHRoZSBraW5kIG9mIHRoaW5nIHdlIHNob3VsZCBiZSB0ZXN0aW5nIGZvciwgdGhvdWdoLgoj IyBOb3RlOiBQVFlzIGFyZSBicm9rZW4gb24gZGFyd2luIDw2LiAgVXNlIGF0IHlvdXIgb3duIHJp c2suCmlmIHRlc3QgIiR7b3BzeXN9IiAhPSAibWluZ3ciOyB0aGVuCiAgQUNfREVGSU5FKEhBVkVf UFRZUywgMSwgW0RlZmluZSBpZiB0aGUgc3lzdGVtIHN1cHBvcnRzIHB0eSBkZXZpY2VzLl0pCmZp CgpkbmwgRXZlcnlib2R5IHN1cHBvcnRzIHRoaXMsIGV4Y2VwdCBNUy1ET1MuCmRubCBTZWVtcyBs aWtlIHRoZSBraW5kIG9mIHRoaW5nIHdlIHNob3VsZCBiZSB0ZXN0aW5nIGZvciwgdGhvdWdoLgpk bmwgQ29tcGFyZSB3aXRoIEhBVkVfSU5FVF9TT0NLRVRTICh3aGljaCBpcyB1bnVzZWQuLi4pIGFi b3ZlLgpBQ19ERUZJTkUoSEFWRV9TT0NLRVRTLCAxLCBbRGVmaW5lIGlmIHRoZSBzeXN0ZW0gc3Vw cG9ydHMKICA0LjItY29tcGF0aWJsZSBzb2NrZXRzLl0pCgpBSF9URU1QTEFURShJTlRFUk5BTF9U RVJNSU5BTCwgW1RoaXMgaXMgc3Vic3RpdHV0ZWQgd2hlbiAkVEVSTSBpcyAiaW50ZXJuYWwiLl0p CgpBSF9URU1QTEFURShOVUxMX0RFVklDRSwgW05hbWUgb2YgdGhlIGZpbGUgdG8gb3BlbiB0byBn ZXQKICBhIG51bGwgZmlsZSwgb3IgYSBkYXRhIHNpbmsuXSkKaWYgdGVzdCAiJHtvcHN5c30iID0g Im1pbmd3IjsgdGhlbgogIEFDX0RFRklORShOVUxMX0RFVklDRSwgWyJOVUw6Il0pCmVsc2UKICBB Q19ERUZJTkUoTlVMTF9ERVZJQ0UsIFsiL2Rldi9udWxsIl0pCmZpCgppZiB0ZXN0ICIke29wc3lz fSIgPSAibWluZ3ciOyB0aGVuCiAgU0VQQ0hBUj0nOycKZWxzZQogIFNFUENIQVI9JzonCmZpCkFD X0RFRklORV9VTlFVT1RFRChTRVBDSEFSLCBbJyRTRVBDSEFSJ10sIFtDaGFyYWN0ZXIgdGhhdCBz ZXBhcmF0ZXMgUEFUSCBlbGVtZW50cy5dKQpkbmwgVGhpcyBpcyBmb3IgTWluR1csIGFuZCBpcyB1 c2VkIGluIHRlc3QvYXV0b21hdGVkL01ha2VmaWxlLmluLgpkbmwgVGhlIE1TWVMgQmFzaCBoYXMg aGV1cmlzdGljcyBmb3IgcmVwbGFjaW5nICc6JyB3aXRoICc7JyB3aGVuIGl0CmRubCBkZWNpZGVz IHRoYXQgYSBjb21tYW5kLWxpbmUgYXJndW1lbnQgdG8gYmUgcGFzc2VkIHRvIGEgTWluR1cgcHJv Z3JhbQpkbmwgaXMgYSBQQVRILXN0eWxlIGxpc3Qgb2YgZGlyZWN0b3JpZXMuICBCdXQgdGhhdCBo ZXVyaXN0aWNzIHBsYXlzIGl0CmRubCBzYWZlLCBhbmQgb25seSBkb2VzIHRoZSByZXBsYWNlbWVu dCB3aGVuIGl0IGlzIF9hYnNvbHV0ZWx5XyBzdXJlIGl0CmRubCBzZWVzIGEgY29sb24tc2VwYXJh dGVkIGxpc3Qgb2YgZmlsZSBuYW1lczsgZS5nLiAiOi4iIGlzIGxlZnQgYWxvbmUsCmRubCB3aGlj aCBicmVha3MgaW4tdHJlZSBidWlsZHMuICBTbyB3ZSBkbyB0aGlzIG1hbnVhbGx5IGluc3RlYWQu CmRubCBOb3RlIHRoYXQgd2UgY2Fubm90IHJlbHkgb24gUEFUSF9TRVBBUkFUT1IsIGFzIHRoYXQg b25lIHdpbGwgYWx3YXlzCmRubCBiZSBjb21wdXRlZCBhcyAnOicgaW4gTVNZUyBCYXNoLgpBQ19T VUJTVChTRVBDSEFSKQoKZG5sIEV2ZXJ5Ym9keSBzdXBwb3J0cyB0aGlzLCBleGNlcHQgTVMtRE9T LgpBQ19ERUZJTkUoc3VicHJvY2Vzc2VzLCAxLCBbRGVmaW5lIHRvIGVuYWJsZSBhc3luY2hyb25v dXMgc3VicHJvY2Vzc2VzLl0pCgpBQ19ERUZJTkUoVVNFUl9GVUxMX05BTUUsIFtwdy0+cHdfZ2Vj b3NdLCBbSG93IHRvIGdldCBhIHVzZXIncyBmdWxsIG5hbWUuXSkKCgpBQ19ERUZJTkUoRElSRUNU T1JZX1NFUCwgWycvJ10sCiAgW0NoYXJhY3RlciB0aGF0IHNlcGFyYXRlcyBkaXJlY3RvcmllcyBp biBhIGZpbGUgbmFtZS5dKQoKaWYgdGVzdCAiJHtvcHN5c30iID0gIm1pbmd3IjsgdGhlbgogIEFD X0RFRklORShJU19ERVZJQ0VfU0VQKF9jXyksIFsoKF9jXykgPT0gJzonKV0sCiAgICBbUmV0dXJu cyB0cnVlIGlmIGNoYXJhY3RlciBpcyBhIGRldmljZSBzZXBhcmF0b3IuXSkKCiAgQUNfREVGSU5F KElTX0RJUkVDVE9SWV9TRVAoX2NfKSwgWygoX2NfKSA9PSAnLycgfHwgKF9jXykgPT0gJ1xcJyld LAogICAgW1JldHVybnMgdHJ1ZSBpZiBjaGFyYWN0ZXIgaXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9y Ll0pCgogIEFDX0RFRklORShJU19BTllfU0VQKF9jXyksIFsoSVNfRElSRUNUT1JZX1NFUCAoX2Nf KSB8fCBJU19ERVZJQ0VfU0VQKF9jXykpXSwKICAgIFtSZXR1cm5zIHRydWUgaWYgY2hhcmFjdGVy IGlzIGFueSBmb3JtIG9mIHNlcGFyYXRvci5dKQplbHNlCiAgQUNfREVGSU5FKElTX0RFVklDRV9T RVAoX2NfKSwgMCwKICAgIFtSZXR1cm5zIHRydWUgaWYgY2hhcmFjdGVyIGlzIGEgZGV2aWNlIHNl cGFyYXRvci5dKQoKICBBQ19ERUZJTkUoSVNfRElSRUNUT1JZX1NFUChfY18pLCBbKChfY18pID09 IERJUkVDVE9SWV9TRVApXSwKICAgIFtSZXR1cm5zIHRydWUgaWYgY2hhcmFjdGVyIGlzIGEgZGly ZWN0b3J5IHNlcGFyYXRvci5dKQoKICBBQ19ERUZJTkUoSVNfQU5ZX1NFUChfY18pLCBbKElTX0RJ UkVDVE9SWV9TRVAgKF9jXykpXSwKICAgIFtSZXR1cm5zIHRydWUgaWYgY2hhcmFjdGVyIGlzIGFu eSBmb3JtIG9mIHNlcGFyYXRvci5dKQpmaQoKQUhfVEVNUExBVEUoTk9fRURJVFJFUywgW0RlZmlu ZSBpZiBYRWRpdFJlcyBzaG91bGQgbm90IGJlIHVzZWQuXSkKCmNhc2UgJG9wc3lzIGluCiAgYWl4 NC0yKQogICAgZG5sIFVuZm9ydHVuYXRlbHkgd2l0aG91dCBsaWJYbXUgd2UgY2Fubm90IHN1cHBv cnQgRWRpdFJlcy4KICAgIGlmIHRlc3QgIngkYWNfY3Zfc2VhcmNoX1htdUNvbnZlcnRTdGFuZGFy ZFNlbGVjdGlvbiIgPSB4bm87IHRoZW4KICAgICAgQUNfREVGSU5FKE5PX0VESVRSRVMsIDEpCiAg ICBmaQogICAgOzsKCiAgaHB1eCopCiAgICBkbmwgQXNzYXIgV2VzdGVybHVuZCA8YXNzYXJAc2lj cy5zZT4gc2F5cyB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IKICAgIGRubCBIUC1VWCAxMC4yMCwgYW5k IHRoYXQgaXQgd29ya3MgZm9yIEhQLVVYIDAgYXMgd2VsbC4KICAgIEFDX0RFRklORShOT19FRElU UkVTLCAxKQogICAgOzsKZXNhYwoKCmNhc2UgJG9wc3lzIGluCiAgaXJpeDYtNSB8IHNvbDIqIHwg dW5peHdhcmUgKQogICAgZG5sIFNvbWUgU1ZyNHMgZG9uJ3QgZGVmaW5lIE5TSUcgaW4gc3lzL3Np Z25hbC5oIGZvciBBTlNJIGVudmlyb25tZW50czsKICAgIGRubCBpbnN0ZWFkLCB0aGVyZSdzIGEg c3lzdGVtIHZhcmlhYmxlIF9zeXNfbnNpZy4gIFVuZm9ydHVuYXRlbHksIHdlCiAgICBkbmwgbmVl ZCB0aGUgY29uc3RhbnQgdG8gZGltZW5zaW9uIGFuIGFycmF5LiAgU28gd2lyZSBpbiB0aGUgYXBw cm9wcmlhdGUKICAgIGRubCB2YWx1ZSBoZXJlLgogICAgQUNfREVGSU5FKE5TSUdfTUlOSU1VTSwg MzIsIFtNaW5pbXVtIHZhbHVlIG9mIE5TSUcuXSkKICAgIDs7CmVzYWMKCmVtYWNzX2Jyb2tlbl9T SUdJTz1ubwoKY2FzZSAkb3BzeXMgaW4KICBkbmwgU0lHSU8gZXhpc3RzLCBidXQgdGhlIGZlYXR1 cmUgZG9lc24ndCB3b3JrIGluIHRoZSB3YXkgRW1hY3MgbmVlZHMuCiAgZG5sIFNlZSBlZyA8aHR0 cDovL2FydGljbGUuZ21hbmUub3JnL2dtYW5lLm9zLm9wZW5ic2QucG9ydHMvNDY4MzE+LgogIGhw dXgqIHwgaXJpeDYtNSB8IG9wZW5ic2QgfCBzb2wyKiB8IHVuaXh3YXJlICkKICAgIGVtYWNzX2Jy b2tlbl9TSUdJTz15ZXMKICAgIDs7CgogIGFpeDQtMikKICAgIGRubCBPbiBBSVggRW1hY3MgdXNl cyB0aGUgZ21hbGxvYy5jIG1hbGxvYyBpbXBsZW1lbnRhdGlvbi4gIEJ1dCBnaXZlbgogICAgZG5s IHRoZSB3YXkgdGhpcyBzeXN0ZW0gd29ya3MsIGxpYmMgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIG1h bGxvY2VkCiAgICBkbmwgbWVtb3J5IHVzZSB0aGUgbGliYyBtYWxsb2MgaW1wbGVtZW50YXRpb24u IENhbGxpbmcgeGZyZWUgb3IKICAgIGRubCB4cmVhbGxvYyBvbiB0aGUgcmVzdWx0cyBvZiBzdWNo IGZ1bmN0aW9ucyByZXN1bHRzIGluIGEgY3Jhc2guCiAgICBkbmwKICAgIGRubCBPbmUgc29sdXRp b24gZm9yIHRoaXMgY291bGQgYmUgdG8gZGVmaW5lIFNZU1RFTV9NQUxMT0MgaW4gY29uZmlndXJl LAogICAgZG5sIGJ1dCB0aGF0IGRvZXMgbm90IGN1cnJlbnRseSB3b3JrIG9uIHRoaXMgc3lzdGVt LgogICAgZG5sCiAgICBkbmwgSXQgaXMgcG9zc2libGUgdG8gY29tcGxldGVseSBvdmVycmlkZSB0 aGUgbWFsbG9jIGltcGxlbWVudGF0aW9uIG9uCiAgICBkbmwgQUlYLCBidXQgdGhhdCBpbnZvbHZl cyBwdXR0aW5nIHRoZSBtYWxsb2MgZnVuY3Rpb25zIGluIGEgc2hhcmVkCiAgICBkbmwgbGlicmFy eSBhbmQgc2V0dGluZyB0aGUgTUFMTE9DVFlQRSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBwb2lu dCB0bwogICAgZG5sIHRoYXQgc2hhcmVkIGxpYnJhcnkuCiAgICBkbmwKICAgIGRubCBFbWFjcyBj dXJyZW50bHkgY2FsbHMgeHJlYWxsb2Mgb24gdGhlIHJlc3VsdHMgb2YgZ2V0X2N1cnJlbnRfZGly IG5hbWUsCiAgICBkbmwgdG8gYXZvaWQgYSBjcmFzaCBqdXN0IHVzZSB0aGUgRW1hY3MgaW1wbGVt ZW50YXRpb24gZm9yIHRoYXQgZnVuY3Rpb24uCiAgICBkbmwKICAgIGRubCBGSVhNRSBXZSBjb3Vs ZCBjaGFuZ2UgdGhlIEFDX0NIRUNLX0ZVTkNTIGNhbGwgbmVhciB0aGUgc3RhcnQKICAgIGRubCBv ZiB0aGlzIGZpbGUsIHNvIHRoYXQgd2UgZG8gbm90IGNoZWNrIGZvciBnZXRfY3VycmVudF9kaXJf bmFtZQogICAgZG5sIG9uIEFJWC4gIEJ1dCB0aGF0IG1pZ2h0IGJlIGZyYWdpbGUgaWYgc29tZXRo aW5nIGVsc2UgZW5kcwogICAgZG5sIHVwIHRlc3RpbmcgZm9yIGdldF9jdXJyZW50X2Rpcl9uYW1l IGFzIGEgZGVwZW5kZW5jeS4KICAgIEFDX0RFRklORShCUk9LRU5fR0VUX0NVUlJFTlRfRElSX05B TUUsIDEsIFtEZWZpbmUgaWYKICAgICAgZ2V0X2N1cnJlbnRfZGlyX25hbWUgc2hvdWxkIG5vdCBi ZSB1c2VkLl0pCiAgICA7OwoKICBmcmVlYnNkKQogICAgZG5sIENpcmN1bXZlbnQgYSBidWcgaW4g RnJlZUJTRC4gIEluIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YKICAgIGRubCB3cml0ZXMvcmVh ZHMgb24gYSBQVFksIHJlYWQoMikgcmV0dXJucyBib2d1cyBkYXRhOgogICAgZG5sCiAgICBkbmwg d3JpdGUoMikgIDEwMjIgYnl0ZXMKICAgIGRubCB3cml0ZSgyKSAgIDk1NCBieXRlcywgZ2V0IEVB R0FJTgogICAgZG5sIHJlYWQoMikgICAxMDI0IGJ5dGVzIGluIHByb2Nlc3NfcmVhZF9vdXRwdXQK ICAgIGRubCByZWFkKDIpICAgICAxMSBieXRlcyBpbiBwcm9jZXNzX3JlYWRfb3V0cHV0CiAgICBk bmwKICAgIGRubCBUaGF0IGlzLCByZWFkKDIpIHJldHVybnMgbW9yZSBieXRlcyB0aGFuIGhhdmUg ZXZlciBiZWVuIHdyaXR0ZW4KICAgIGRubCBzdWNjZXNzZnVsbHkuICBUaGUgMTAzMyBieXRlcyBy ZWFkIGFyZSB0aGUgMTAyMiBieXRlcyB3cml0dGVuCiAgICBkbmwgc3VjY2Vzc2Z1bGx5IGFmdGVy IHByb2Nlc3NpbmcgKGZvciBleGFtcGxlIHdpdGggQ1JzIGFkZGVkIGlmIHRoZQogICAgZG5sIHRl cm1pbmFsIGlzIHNldCB1cCB0aGF0IHdheSB3aGljaCBpdCBpcyBoZXJlKS4gIFRoZSBzYW1lIGJ5 dGVzIHdpbGwKICAgIGRubCBiZSBzZWVuIGFnYWluIGluIGEgbGF0ZXIgcmVhZCgyKSwgd2l0aG91 dCB0aGUgQ1JzLgogICAgQUNfREVGSU5FKEJST0tFTl9QVFlfUkVBRF9BRlRFUl9FQUdBSU4sIDEs IFtEZWZpbmUgb24gRnJlZUJTRCB0bwogICAgICB3b3JrIGFyb3VuZCBhbiBpc3N1ZSB3aGVuIHJl YWRpbmcgZnJvbSBhIFBUWS5dKQogICAgOzsKZXNhYwoKY2FzZSAkb3BzeXMgaW4KICBnbnUtKiB8 IHNvbDItMTAgKQogICAgZG5sIEZJWE1FIENhbid0IHdlIHRlc3QgaWYgdGhpcyBleGlzdHMgKGVn IC9wcm9jLyQkKT8KICAgIEFDX0RFRklORShIQVZFX1BST0NGUywgMSwgW0RlZmluZSBpZiB5b3Ug aGF2ZSB0aGUgL3Byb2MgZmlsZXN5c3RlbS5dKQogIDs7CmVzYWMKCmNhc2UgJG9wc3lzIGluCiAg ZGFyd2luIHwgZHJhZ29uZmx5IHwgZnJlZWJzZCB8IG5ldGJzZCB8IG9wZW5ic2QgKQogICAgQUNf REVGSU5FKERPTlRfUkVPUEVOX1BUWSwgMSwgW0RlZmluZSBpZiBwcm9jZXNzLmMgZG9lcyBub3Qg bmVlZCB0bwogICAgICBjbG9zZSBhIHB0eSB0byBtYWtlIGl0IGEgY29udHJvbGxpbmcgdGVybWlu YWwgKGl0IGlzIGFscmVhZHkgYQogICAgICBjb250cm9sbGluZyB0ZXJtaW5hbCBvZiB0aGUgc3Vi cHJvY2VzcywgYmVjYXVzZSB3ZSBkaWQgaW9jdGwgVElPQ1NDVFRZKS5dKQogIDs7CmVzYWMKCmRu bCBGSVhNRSBTdXJlbHkgd2UgY2FuIHRlc3QgZm9yIHRoaXMgcmF0aGVyIHRoYW4gaGFyZC1jb2Rl IGl0LgpjYXNlICRvcHN5cyBpbgogIG5ldGJzZCB8IG9wZW5ic2QpIHNvdW5kX2RldmljZT0iL2Rl di9hdWRpbyIgOzsKICAqKSBzb3VuZF9kZXZpY2U9Ii9kZXYvZHNwIiA7Owplc2FjCgpkbmwgVXNl ZCBpbiBzb3VuZC5jCkFDX0RFRklORV9VTlFVT1RFRChERUZBVUxUX1NPVU5EX0RFVklDRSwgIiRz b3VuZF9kZXZpY2UiLAogIFtOYW1lIG9mIHRoZSBkZWZhdWx0IHNvdW5kIGRldmljZS5dKQoKCmRu bCBFbWFjcyBjYW4gcmVhZCBpbnB1dCB1c2luZyBTSUdJTyBhbmQgYnVmZmVyaW5nIGNoYXJhY3Rl cnMgaXRzZWxmLApkbmwgb3IgdXNpbmcgQ0JSRUFLIG1vZGUgYW5kIG1ha2luZyBDLWcgY2F1c2Ug U0lHSU5ULgpkbmwgVGhlIGNob2ljZSBpcyBjb250cm9sbGVkIGJ5IHRoZSB2YXJpYWJsZSBpbnRl cnJ1cHRfaW5wdXQuCmRubApkbmwgRGVmaW5lIElOVEVSUlVQVF9JTlBVVCB0byBtYWtlIGludGVy cnVwdF9pbnB1dCA9IDEgdGhlIGRlZmF1bHQgKHVzZSBTSUdJTykKZG5sCmRubCBFbWFjcyB1c2Vz IHRoZSBwcmVzZW5jZSBvZiB0aGUgVVNBQkxFX1NJR0lPIG1hY3JvCmRubCB0byBpbmRpY2F0ZSB3 aGV0aGVyIG9yIG5vdCBzaWduYWwtZHJpdmVuIEkvTyBpcyBwb3NzaWJsZS4gIEl0IHVzZXMKZG5s IElOVEVSUlVQVF9JTlBVVCB0byBkZWNpZGUgd2hldGhlciB0byB1c2UgaXQgYnkgZGVmYXVsdC4K ZG5sCmRubCBTSUdJTyBjYW4gYmUgdXNlZCBvbmx5IG9uIHN5c3RlbXMgdGhhdCBpbXBsZW1lbnQg aXQgKDQuMiBhbmQgNC4zKS4KZG5sIENCUkVBSyBtb2RlIGhhcyB0d28gZGlzYWR2YW50YWdlcwpk bmwgMSkgQXQgbGVhc3QgaW4gNC4yLCBpdCBpcyBpbXBvc3NpYmxlIHRvIGhhbmRsZSB0aGUgTWV0 YSBrZXkgcHJvcGVybHkuCmRubCBJIGhlYXIgdGhhdCBpbiBzeXN0ZW0gViB0aGlzIHByb2JsZW0g ZG9lcyBub3QgZXhpc3QuCmRubCAyKSBDb250cm9sLUcgY2F1c2VzIG91dHB1dCB0byBiZSBkaXNj YXJkZWQuCmRubCBJIGRvIG5vdCBrbm93IHdoZXRoZXIgdGhpcyBjYW4gYmUgZml4ZWQgaW4gc3lz dGVtIFYuCmRubApkbmwgQW5vdGhlciBtZXRob2Qgb2YgZG9pbmcgaW5wdXQgaXMgcGxhbm5lZCBi dXQgbm90IGltcGxlbWVudGVkLgpkbmwgSXQgd291bGQgaGF2ZSBFbWFjcyBmb3JrIG9mZiBhIHNl cGFyYXRlIHByb2Nlc3MKZG5sIHRvIHJlYWQgdGhlIGlucHV0IGFuZCBzZW5kIGl0IHRvIHRoZSB0 cnVlIEVtYWNzIHByb2Nlc3MKZG5sIHRocm91Z2ggYSBwaXBlLgpjYXNlICRvcHN5cyBpbgogIGRh cndpbiB8IGdudS1saW51eCB8IGdudS1rZnJlZWJzZCApCiAgICBBQ19ERUZJTkUoSU5URVJSVVBU X0lOUFVULCAxLCBbRGVmaW5lIHRvIHJlYWQgaW5wdXQgdXNpbmcgU0lHSU8uXSkKICA7Owplc2Fj CgoKZG5sIElmIHRoZSBzeXN0ZW0ncyBpbWFrZSBjb25maWd1cmF0aW9uIGZpbGUgZGVmaW5lcyBg TmVlZFdpZGVQcm90b3R5cGVzJwpkbmwgYXMgYE5PJywgd2UgbXVzdCBkZWZpbmUgTkFSUk9XUFJP VE8gbWFudWFsbHkuICBTdWNoIGEgZGVmaW5lIGlzCmRubCBnZW5lcmF0ZWQgaW4gdGhlIE1ha2Vm aWxlIGdlbmVyYXRlZCBieSBgeG1rbWYnLiAgSWYgd2UgZG9uJ3QgZGVmaW5lCmRubCBOQVJST1dQ Uk9UTywgd2Ugd2lsbCBzZWUgdGhlIHdyb25nIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIFggZnVu Y3Rpb25zCmRubCB0YWtpbmcgZmxvYXQgb3IgZG91YmxlIHBhcmFtZXRlcnMuCmNhc2UgJG9wc3lz IGluCiAgY3lnd2lufGdudXxnbnUtbGludXh8Z251LWtmcmVlYnNkfGlyaXg2LTV8ZnJlZWJzZHxu ZXRic2R8b3BlbmJzZCkKICAgIEFDX0RFRklORShOQVJST1dQUk9UTywgMSwgW0RlZmluZSBpZiBz eXN0ZW0ncyBpbWFrZSBjb25maWd1cmF0aW9uCiAgICAgIGZpbGUgZGVmaW5lcyBgTmVlZFdpZGVQ cm90b3R5cGVzJyBhcyBgTk8nLl0pCiAgOzsKZXNhYwoKCmRubCBVc2VkIGluIHByb2Nlc3MuYywg dGhpcyBtdXN0IGJlIGEgbG9vcCwgZXZlbiBpZiBpdCBvbmx5IHJ1bnMgb25jZS4KZG5sIChFeGNl cHQgb24gU0dJOyBzZWUgYmVsb3cuICBUYWtlIHRoYXQsIGNsYXJpdHkgYW5kIGNvbnNpc3RlbmN5 ISkKQUhfVEVNUExBVEUoUFRZX0lURVJBVElPTiwgW0hvdyB0byBpdGVyYXRlIG92ZXIgUFRZcy5d KQpkbmwgT25seSB1c2VkIGlmICFQVFlfSVRFUkFUSU9OLiAgSXRlcmF0ZSBmcm9tIEZJUlNUX1BU WV9MRVRURVIgdG8geiwKZG5sIHRyeWluZyBzdWZmaXhlcyAwLTE2LgpBSF9URU1QTEFURShGSVJT VF9QVFlfTEVUVEVSLCBbTGV0dGVyIHRvIHVzZSBpbiBmaW5kaW5nIGRldmljZSBuYW1lIG9mCiAg Zmlyc3QgUFRZLCBpZiBQVFlzIGFyZSBzdXBwb3J0ZWQuXSkKQUhfVEVNUExBVEUoUFRZX09QRU4s IFtIb3cgdG8gb3BlbiBhIFBUWSwgaWYgbm9uLXN0YW5kYXJkLl0pCkFIX1RFTVBMQVRFKFBUWV9O QU1FX1NQUklOVEYsIFtIb3cgdG8gZ2V0IHRoZSBkZXZpY2UgbmFtZSBvZiB0aGUgY29udHJvbAog IGVuZCBvZiBhIFBUWSwgaWYgbm9uLXN0YW5kYXJkLl0pCkFIX1RFTVBMQVRFKFBUWV9UVFlfTkFN RV9TUFJJTlRGLCBbSG93IHRvIGdldCBkZXZpY2UgbmFtZSBvZiB0aGUgdHR5CiAgZW5kIG9mIGEg UFRZLCBpZiBub24tc3RhbmRhcmQuXSkKCmNhc2UgJG9wc3lzIGluCiAgYWl4NC0yICkKICAgIEFD X0RFRklORShQVFlfSVRFUkFUSU9OLCBbaW50IGM7IGZvciAoYyA9IDA7ICFjIDsgYysrKV0pCiAg ICBkbmwgWW91IGFsbG9jYXRlIGEgcHR5IGJ5IG9wZW5pbmcgL2Rldi9wdGMgdG8gZ2V0IHRoZSBt YXN0ZXIgc2lkZS4KICAgIGRubCBUbyBnZXQgdGhlIG5hbWUgb2YgdGhlIHNsYXZlIHNpZGUsIHlv dSBqdXN0IHR0eW5hbWUoKSB0aGUgbWFzdGVyIHNpZGUuCiAgICBBQ19ERUZJTkUoUFRZX05BTUVf U1BSSU5URiwgW3N0cmNweSAocHR5X25hbWUsICIvZGV2L3B0YyIpO10pCiAgICBBQ19ERUZJTkUo UFRZX1RUWV9OQU1FX1NQUklOVEYsIFtzdHJjcHkgKHB0eV9uYW1lLCB0dHluYW1lIChmZCkpO10p CiAgICA7OwoKICBjeWd3aW4gKQogICAgQUNfREVGSU5FKFBUWV9JVEVSQVRJT04sIFtpbnQgaTsg Zm9yIChpID0gMDsgaSA8IDE7IGkrKyldKQogICAgZG5sIG11bHRpLWxpbmUgQUNfREVGSU5FcyBh cmUgaGFyZC4gOigKICAgIEFDX0RFRklORShQVFlfT1BFTiwgWyBkbyB7IGludCBkdW1teTsgc2ln c2V0X3QgYmxvY2tlZCwgcHJvY21hc2s7IHNpZ2VtcHR5c2V0ICgmYmxvY2tlZCk7IHNpZ2FkZHNl dCAoJmJsb2NrZWQsIFNJR0NITEQpOyBwdGhyZWFkX3NpZ21hc2sgKFNJR19CTE9DSywgJmJsb2Nr ZWQsICZwcm9jbWFzayk7IGlmICgtMSA9PSBvcGVucHR5ICgmZmQsICZkdW1teSwgcHR5X25hbWUs IDAsIDApKSBmZCA9IC0xOyBwdGhyZWFkX3NpZ21hc2sgKFNJR19TRVRNQVNLLCAmcHJvY21hc2ss IDApOyBpZiAoZmQgPj0gMCkgZW1hY3NfY2xvc2UgKGR1bW15KTsgfSB3aGlsZSAoZmFsc2UpXSkK ICAgIEFDX0RFRklORShQVFlfTkFNRV9TUFJJTlRGLCBbXSkKICAgIEFDX0RFRklORShQVFlfVFRZ X05BTUVfU1BSSU5URiwgW10pCiAgICA7OwoKICBkbmwgRklYTUU/ICBNYXliZSB1c2Ugc2FtZSBh cyBmcmVlYnNkIC0gc2VlIGJ1ZyMxMjA0MC4KICBkYXJ3aW4gKQogICAgQUNfREVGSU5FKFBUWV9J VEVSQVRJT04sIFtpbnQgaTsgZm9yIChpID0gMDsgaSA8IDE7IGkrKyldKQogICAgZG5sIE5vdCB1 c2VkLCBiZWNhdXNlIFBUWV9JVEVSQVRJT04gaXMgZGVmaW5lZC4KICAgIEFDX0RFRklORShGSVJT VF9QVFlfTEVUVEVSLCBbJ3AnXSkKICAgIGRubCBOb3RlIHRoYXQgb3BlbnB0eSBtYXkgZm9yayB2 aWEgZ3JhbnRwdCBvbiBNYWMgT1MgWCAxMC40L0RhcndpbiA4LgogICAgZG5sIEJ1dCB3ZSBkb24n dCBoYXZlIHRvIGJsb2NrIFNJR0NITEQgYmVjYXVzZSBpdCBpcyBibG9ja2VkIGluIHRoZQogICAg ZG5sIGltcGxlbWVudGF0aW9uIG9mIGdyYW50cHQuCiAgICBBQ19ERUZJTkUoUFRZX09QRU4sIFsg ZG8geyBpbnQgc2xhdmU7IGlmIChvcGVucHR5ICgmZmQsICZzbGF2ZSwgcHR5X25hbWUsIE5VTEws IE5VTEwpID09IC0xKSBmZCA9IC0xOyBlbHNlIGVtYWNzX2Nsb3NlIChzbGF2ZSk7IH0gd2hpbGUg KGZhbHNlKV0pCiAgICBBQ19ERUZJTkUoUFRZX05BTUVfU1BSSU5URiwgW10pCiAgICBBQ19ERUZJ TkUoUFRZX1RUWV9OQU1FX1NQUklOVEYsIFtdKQogICAgOzsKCiAgZ251IHwgb3BlbmJzZCApCiAg ICBBQ19ERUZJTkUoRklSU1RfUFRZX0xFVFRFUiwgWydwJ10pCiAgICA7OwoKICBnbnUtbGludXgg fCBnbnUta2ZyZWVic2QgfCBkcmFnb25mbHkgfCBmcmVlYnNkIHwgbmV0YnNkICkKICAgIGRubCBp ZiBIQVZFX0dSQU5UUFQKICAgIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19ncmFudHB0IiA9IHh5ZXM7 IHRoZW4KICAgICAgQUNfREVGSU5FKFVOSVg5OF9QVFlTLCAxLCBbRGVmaW5lIGlmIHRoZSBzeXN0 ZW0gaGFzIFVuaXg5OCBQVFlzLl0pCiAgICAgIEFDX0RFRklORShQVFlfSVRFUkFUSU9OLCBbaW50 IGk7IGZvciAoaSA9IDA7IGkgPCAxOyBpKyspXSkKICAgICAgZG5sIE5vdGUgdGhhdCBncmFudHB0 IGFuZCB1bmxvY2twdCBtYXkgZm9yay4gIFdlIG11c3QgYmxvY2sgU0lHQ0hMRAogICAgICBkbmwg dG8gcHJldmVudCBzaWdjaGxkX2hhbmRsZXIgZnJvbSBpbnRlcmNlcHRpbmcgdGhlIGNoaWxkJ3Mg ZGVhdGguCiAgICAgIEFDX0RFRklORShQVFlfVFRZX05BTUVfU1BSSU5URiwgW3sgY2hhciAqcHR5 bmFtZSA9IDA7IHNpZ3NldF90IGJsb2NrZWQ7IHNpZ2VtcHR5c2V0ICgmYmxvY2tlZCk7IHNpZ2Fk ZHNldCAoJmJsb2NrZWQsIFNJR0NITEQpOyBwdGhyZWFkX3NpZ21hc2sgKFNJR19CTE9DSywgJmJs b2NrZWQsIDApOyBpZiAoZ3JhbnRwdCAoZmQpICE9IC0xICYmIHVubG9ja3B0IChmZCkgIT0gLTEp IHB0eW5hbWUgPSBwdHNuYW1lKGZkKTsgcHRocmVhZF9zaWdtYXNrIChTSUdfVU5CTE9DSywgJmJs b2NrZWQsIDApOyBpZiAoIXB0eW5hbWUpIHsgZW1hY3NfY2xvc2UgKGZkKTsgcmV0dXJuIC0xOyB9 IHNucHJpbnRmIChwdHlfbmFtZSwgUFRZX05BTUVfU0laRSwgIiVzIiwgcHR5bmFtZSk7IH1dKQog ICAgICBkbmwgaWYgSEFWRV9QT1NJWF9PUEVOUFQKICAgICAgaWYgdGVzdCAieCRhY19jdl9mdW5j X3Bvc2l4X29wZW5wdCIgPSB4eWVzOyB0aGVuCiAgICAgICAgQUNfREVGSU5FKFBUWV9PUEVOLCBb ZG8geyBmZCA9IHBvc2l4X29wZW5wdCAoT19SRFdSIHwgT19DTE9FWEVDIHwgT19OT0NUVFkpOyBp ZiAoZmQgPCAwICYmIGVycm5vID09IEVJTlZBTCkgZmQgPSBwb3NpeF9vcGVucHQgKE9fUkRXUiB8 IE9fTk9DVFRZKTsgfSB3aGlsZSAoZmFsc2UpXSkKICAgICAgICBBQ19ERUZJTkUoUFRZX05BTUVf U1BSSU5URiwgW10pCiAgICAgIGRubCBpZiBIQVZFX0dFVFBUCiAgICAgIGVsaWYgdGVzdCAieCRh Y19jdl9mdW5jX2dldHB0IiA9IHh5ZXM7IHRoZW4KICAgICAgICBBQ19ERUZJTkUoUFRZX09QRU4s IFtmZCA9IGdldHB0ICgpXSkKICAgICAgICBBQ19ERUZJTkUoUFRZX05BTUVfU1BSSU5URiwgW10p CiAgICAgIGVsc2UKICAgICAgICBBQ19ERUZJTkUoUFRZX05BTUVfU1BSSU5URiwgW3N0cmNweSAo cHR5X25hbWUsICIvZGV2L3B0bXgiKTtdKQogICAgICBmaQogICAgZWxzZQogICAgICBBQ19ERUZJ TkUoRklSU1RfUFRZX0xFVFRFUiwgWydwJ10pCiAgICBmaQogICAgOzsKCiAgaHB1eCopCiAgICBB Q19ERUZJTkUoRklSU1RfUFRZX0xFVFRFUiwgWydwJ10pCiAgICBBQ19ERUZJTkUoUFRZX05BTUVf U1BSSU5URiwgW3NwcmludGYgKHB0eV9uYW1lLCAiL2Rldi9wdHltL3B0eSVjJXgiLCBjLCBpKTtd KQogICAgQUNfREVGSU5FKFBUWV9UVFlfTkFNRV9TUFJJTlRGLCBbc3ByaW50ZiAocHR5X25hbWUs ICIvZGV2L3B0eS90dHklYyV4IiwgYywgaSk7XSkKICAgIDs7CgogIGlyaXg2LTUgKQogICAgZG5s IEl0IGxvb2tzIGxpa2UgdGhpcyBjYW5ub3QgYmUgcmlnaHQsIGJlY2F1c2UgaXQgaXMgbm90IGEg bG9vcC4KICAgIGRubCBIb3dldmVyLCBwcm9jZXNzLmMgYWN0dWFsbHkgZG9lcyB0aGlzOgogICAg ZG5sICMgaWZuZGVmIF9fc2dpCiAgICBkbmwgICBjb250aW51ZTsKICAgIGRubCAjIGVsc2UKICAg IGRubCAgIHJldHVybiAtMTsKICAgIGRubCAjIGVuZGlmCiAgICBkbmwgd2hpY2ggcHJlc3VtYWJs eSBtYWtlcyBpdCBPSywgc2luY2UgaXJpeCA9PSBzZ2kgKD8pLgogICAgZG5sIEZJWE1FIGl0IHNl ZW1zIGxpa2UgdGhpcyBzcGVjaWFsIHRyZWF0bWVudCBpcyB1bm5lY2Vzc2FyeT8KICAgIGRubCBX aHkgY2FuJ3QgaXJpeCB1c2UgYSBzaW5nbGUtdHJpcCBsb29wIGxpa2UgZWcgY3lnd2luPwogICAg QUNfREVGSU5FKFBUWV9JVEVSQVRJT04sIFtdKQogICAgZG5sIE5vdCB1c2VkLCBiZWNhdXNlIFBU WV9JVEVSQVRJT04gaXMgZGVmaW5lZC4KICAgIEFDX0RFRklORShGSVJTVF9QVFlfTEVUVEVSLCBb J3EnXSkKICAgIEFDX0RFRklORShQVFlfT1BFTiwgWyB7IHN0cnVjdCBzaWdhY3Rpb24gb2NzdGF0 LCBjc3RhdDsgc3RydWN0IHN0YXQgc3RiOyBjaGFyICogbmFtZTsgc2lnZW1wdHlzZXQoJmNzdGF0 LnNhX21hc2spOyBjc3RhdC5zYV9oYW5kbGVyID0gU0lHX0RGTDsgY3N0YXQuc2FfZmxhZ3MgPSAw OyBzaWdhY3Rpb24oU0lHQ0hMRCwgJmNzdGF0LCAmb2NzdGF0KTsgbmFtZSA9IF9nZXRwdHkgKCZm ZCwgT19SRFdSIHwgT19OREVMQVksIDA2MDAsIDApOyBzaWdhY3Rpb24oU0lHQ0hMRCwgJm9jc3Rh dCwgKHN0cnVjdCBzaWdhY3Rpb24gKikwKTsgaWYgKG5hbWUgPT0gMCkgcmV0dXJuIC0xOyBpZiAo ZmQgPCAwKSByZXR1cm4gLTE7IGlmIChmc3RhdCAoZmQsICZzdGIpIDwgMCkgcmV0dXJuIC0xOyBz dHJjcHkgKHB0eV9uYW1lLCBuYW1lKTsgfV0pCiAgICBkbmwgTm8gbmVlZCB0byBnZXQgdGhlIHB0 eSBuYW1lIGF0IGFsbC4KICAgIEFDX0RFRklORShQVFlfTkFNRV9TUFJJTlRGLCBbXSkKICAgIGRu bCBObyBuZWVkIHRvIHVzZSBzcHJpbnRmIHRvIGdldCB0aGUgdHR5IG5hbWUtLXdlIGdldCB0aGF0 IGZyb20gX2dldHB0eS4KICAgIEFDX0RFRklORShQVFlfVFRZX05BTUVfU1BSSU5URiwgW10pCiAg ICA7OwoKICBzb2wyKiApCiAgICBkbmwgT24gU3lzVnI0LCBncmFudHB0KDMpIGZvcmtzIGEgc3Vi cHJvY2Vzcywgc28ga2VlcCBzaWdjaGxkX2hhbmRsZXIoKQogICAgZG5sIGZyb20gaW50ZXJjZXB0 aW5nIHRoYXQgZGVhdGguICBJZiBhbnkgY2hpbGQgYnV0IGdyYW50cHQncyBzaG91bGQgZGllCiAg ICBkbmwgd2l0aGluLCBpdCBzaG91bGQgYmUgY2F1Z2h0IGFmdGVyIHNpZ3JlbHNlKDIpLgogICAg QUNfREVGSU5FKFBUWV9UVFlfTkFNRV9TUFJJTlRGLCBbeyBjaGFyICpwdHNuYW1lIChpbnQpLCAq cHR5bmFtZTsgaW50IGdyYW50cHRfcmVzdWx0OyBzaWdzZXRfdCBibG9ja2VkOyBzaWdlbXB0eXNl dCAoJmJsb2NrZWQpOyBzaWdhZGRzZXQgKCZibG9ja2VkLCBTSUdDSExEKTsgcHRocmVhZF9zaWdt YXNrIChTSUdfQkxPQ0ssICZibG9ja2VkLCAwKTsgZ3JhbnRwdF9yZXN1bHQgPSBncmFudHB0IChm ZCk7IHB0aHJlYWRfc2lnbWFzayAoU0lHX1VOQkxPQ0ssICZibG9ja2VkLCAwKTsgaWYgKGdyYW50 cHRfcmVzdWx0ID09IC0xIHx8IHVubG9ja3B0IChmZCkgPT0gLTEgfHwgIShwdHluYW1lID0gcHRz bmFtZSAoZmQpKSkgeyBlbWFjc19jbG9zZSAoZmQpOyByZXR1cm4gLTE7IH0gc25wcmludGYgKHB0 eV9uYW1lLCBQVFlfTkFNRV9TSVpFLCAiJXMiLCBwdHluYW1lKTsgfV0pCiAgICA7OwoKICB1bml4 d2FyZSApCiAgICBkbmwgQ29tbWVudHMgYXJlIGFzIHBlciBzb2wyKi4KICAgIEFDX0RFRklORShQ VFlfVFRZX05BTUVfU1BSSU5URiwgW3sgY2hhciAqcHRzbmFtZSAoaW50KSwgKnB0eW5hbWU7IGlu dCBncmFudHB0X3Jlc3VsdDsgc2lnc2V0X3QgYmxvY2tlZDsgc2lnZW1wdHlzZXQgKCZibG9ja2Vk KTsgc2lnYWRkc2V0ICgmYmxvY2tlZCwgU0lHQ0hMRCk7IHB0aHJlYWRfc2lnbWFzayAoU0lHX0JM T0NLLCAmYmxvY2tlZCwgMCk7IGdyYW50cHRfcmVzdWx0ID0gZ3JhbnRwdCAoZmQpOyBwdGhyZWFk X3NpZ21hc2sgKFNJR19VTkJMT0NLLCAmYmxvY2tlZCwgMCk7IGlmIChncmFudHB0X3Jlc3VsdCA9 PSAtMSkgZmF0YWwoImNvdWxkIG5vdCBncmFudCBzbGF2ZSBwdHkiKTsgaWYgKHVubG9ja3B0KGZk KSA9PSAtMSkgZmF0YWwoImNvdWxkIG5vdCB1bmxvY2sgc2xhdmUgcHR5Iik7IGlmICghKHB0eW5h bWUgPSBwdHNuYW1lKGZkKSkpIGZhdGFsICgiY291bGQgbm90IGVuYWJsZSBzbGF2ZSBwdHkiKTsg c25wcmludGYgKHB0eV9uYW1lLCBQVFlfTkFNRV9TSVpFLCAiJXMiLCBwdHluYW1lKTsgfV0pCiAg ICA7Owplc2FjCgoKY2FzZSAkb3BzeXMgaW4KICBzb2wyKiB8IHVuaXh3YXJlICkKICAgIGRubCBU aGlzIGNoYW5nZSBtZWFucyB0aGF0IHdlIGRvbid0IGxvb3AgdGhyb3VnaCBhbGxvY2F0ZV9wdHkg dG9vCiAgICBkbmwgbWFueSB0aW1lcyBpbiB0aGUgKHJhcmUpIGV2ZW50IG9mIGEgZmFpbHVyZS4K ICAgIEFDX0RFRklORShGSVJTVF9QVFlfTEVUVEVSLCBbJ3onXSkKICAgIEFDX0RFRklORShQVFlf TkFNRV9TUFJJTlRGLCBbc3RyY3B5IChwdHlfbmFtZSwgIi9kZXYvcHRteCIpO10pCiAgICBkbmwg UHVzaCB2YXJpb3VzIHN0cmVhbXMgbW9kdWxlcyBvbnRvIGEgUFRZIGNoYW5uZWwuICBVc2VkIGlu IHByb2Nlc3MuYy4KICAgIEFDX0RFRklORShTRVRVUF9TTEFWRV9QVFksIFtpZiAoaW9jdGwgKHhm b3JraW4sIElfUFVTSCwgInB0ZW0iKSA9PSAtMSkgZmF0YWwgKCJpb2N0bCBJX1BVU0ggcHRlbSIp OyBpZiAoaW9jdGwgKHhmb3JraW4sIElfUFVTSCwgImxkdGVybSIpID09IC0xKSBmYXRhbCAoImlv Y3RsIElfUFVTSCBsZHRlcm0iKTsgaWYgKGlvY3RsICh4Zm9ya2luLCBJX1BVU0gsICJ0dGNvbXBh dCIpID09IC0xKSBmYXRhbCAoImlvY3RsIElfUFVTSCB0dGNvbXBhdCIpO10sIFtIb3cgdG8gc2V0 IHVwIGEgc2xhdmUgUFRZLCBpZiBuZWVkZWQuXSkKICAgIDs7CmVzYWMKCgpBSF9URU1QTEFURShT SUdOQUxTX1ZJQV9DSEFSQUNURVJTLCBbTWFrZSBwcm9jZXNzX3NlbmRfc2lnbmFsIHdvcmsgYnkK InR5cGluZyIgYSBzaWduYWwgY2hhcmFjdGVyIG9uIHRoZSBwdHkuXSkKCmNhc2UgJG9wc3lzIGlu CiAgZG5sIFBlcnJ5IFNtaXRoIDxwZWR6QGRkaXZ0MS5hdXN0aW4uaWJtLmNvbT4gc2F5cyB0aGlz IGlzIGNvcnJlY3QgZm9yIEFJWC4KICBkbmwgdGhvbWFzQG1hdGhlbWF0aWsudW5pLWJyZW1lbi5k ZSBzYXlzIHRoaXMgaXMgbmVlZGVkIGZvciBJUklYLgogIGFpeDQtMiB8IGN5Z3dpbiB8IGdudSB8 IGlyaXg2LTUgfCBkcmFnb25mbHkgfCBmcmVlYnNkIHwgbmV0YnNkIHwgb3BlbmJzZCB8IGRhcndp biApCiAgICBBQ19ERUZJTkUoU0lHTkFMU19WSUFfQ0hBUkFDVEVSUywgMSkKICAgIDs7CgogIGRu bCAyMSBKdW4gMDY6IEVyaWMgSGFuY2hyb3cgPG9mZmJ5MUBibGFyZy5uZXQ+IHNheXMgdGhpcyB3 b3Jrcy4KICBkbmwgRklYTUUgRG9lcyBnbnUta2ZyZWVic2QgaGF2ZSBsaW51eC92ZXJzaW9uLmg/ ICBJdCBzZWVtcyB1bmxpa2VseS4uLgogIGdudS1saW51eCB8IGdudS1rZnJlZWJzZCApCgogICAg QUNfTVNHX0NIRUNLSU5HKFtmb3Igc2lnbmFscyB2aWEgY2hhcmFjdGVyc10pCiAgICBBQ19QUkVQ Uk9DX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ CiNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCAweDIwNDAwCiMgZXJyb3IgIkxpbnV4IHZlcnNpb24g dG9vIG9sZCIKI2VuZGlmCiAgICAgIF1dLCBbW11dKV0sIGVtYWNzX3NpZ25hbHNfdmlhX2NoYXJz PXllcywgZW1hY3Nfc2lnbmFsc192aWFfY2hhcnM9bm8pCgogICAgQUNfTVNHX1JFU1VMVChbJGVt YWNzX3NpZ25hbHNfdmlhX2NoYXJzXSkKICAgIHRlc3QgJGVtYWNzX3NpZ25hbHNfdmlhX2NoYXJz ID0geWVzICYmIEFDX0RFRklORShTSUdOQUxTX1ZJQV9DSEFSQUNURVJTLCAxKQogICAgOzsKZXNh YwoKCkFIX1RFTVBMQVRFKFRBQjMsIFtVbmRvY3VtZW50ZWQuXSkKCmNhc2UgJG9wc3lzIGluCiAg ZGFyd2luKSBBQ19ERUZJTkUoVEFCMywgT1hUQUJTKSA7OwoKICBnbnUgfCBkcmFnb25mbHkgfCBm cmVlYnNkIHwgbmV0YnNkIHwgb3BlbmJzZCApCiAgICBBQ19ERUZJTkUoVEFCRExZLCBPWFRBQlMs IFtVbmRvY3VtZW50ZWQuXSkKICAgIEFDX0RFRklORShUQUIzLCBPWFRBQlMpCiAgICA7OwoKICBn bnUtbGludXggfCBnbnUta2ZyZWVic2QgKQogICAgQUNfUFJFUFJPQ19JRkVMU0UoW0FDX0xBTkdf UFJPR1JBTShbWwojaWZuZGVmIF9faWE2NF9fCiMgZXJyb3IgIm5vdCBpYTY0IgojZW5kaWYKICAg ICAgXV0sIFtbXV0pXSwgQUNfREVGSU5FKEdDX01BUktfU0VDT05EQVJZX1NUQUNLKCksCiAgICAg ICAgW2RvIHsgZXh0ZXJuIHZvaWQgKl9fbGliY19pYTY0X3JlZ2lzdGVyX2JhY2tpbmdfc3RvcmVf YmFzZTsgX19idWlsdGluX2lhNjRfZmx1c2hycyAoKTsgbWFya19tZW1vcnkgKF9fbGliY19pYTY0 X3JlZ2lzdGVyX2JhY2tpbmdfc3RvcmVfYmFzZSwgX19idWlsdGluX2lhNjRfYnNwICgpKTt9IHdo aWxlIChmYWxzZSldLAogICAgICAgIFtNYXJrIGEgc2Vjb25kYXJ5IHN0YWNrLCBsaWtlIHRoZSBy ZWdpc3RlciBzdGFjayBvbiB0aGUgaWE2NC5dKSwgW10pCiAgICA7OwoKICBocHV4KikKICAgIEFD X0RFRklORShSVU5fVElNRV9SRU1BUCwgMSwgW0RlZmluZSBpZiBlbWFjcy5jIG5lZWRzIHRvIGNh bGwKICAgICAgcnVuX3RpbWVfcmVtYXA7IGZvciBIUFVYLl0pCiAgICA7Owplc2FjCgoKZG5sIFRo aXMgd29uJ3QgYmUgdXNlZCBhdXRvbWF0aWNhbGx5IHlldC4gIFdlIGFsc28gbmVlZCB0byBrbm93 LCBhdCBsZWFzdCwKZG5sIHRoYXQgdGhlIHN0YWNrIGlzIGNvbnRpbnVvdXMuCkFIX1RFTVBMQVRF KEdDX1NFVEpNUF9XT1JLUywgW0RlZmluZSBpZiBzZXRqbXAgaXMga25vd24gdG8gc2F2ZSBhbGwK ICByZWdpc3RlcnMgcmVsZXZhbnQgZm9yIGNvbnNlcnZhdGl2ZSBnYXJiYWdlIGNvbGxlY3Rpb24g aW4gdGhlIGptcF9idWYuXSkKCgpjYXNlICRvcHN5cyBpbgogIGRubCBOb3QgYWxsIHRoZSBhcmNo aXRlY3R1cmVzIGFyZSB0ZXN0ZWQsIGJ1dCB0aGVyZSBhcmUgRGViaWFuIHBhY2thZ2VzCiAgZG5s IGZvciBTQ00gYW5kL29yIEd1aWxlIG9uIHRoZW0sIHNvIHRoZSB0ZWNobmlxdWUgbXVzdCB3b3Jr LiAgU2VlIGFsc28KICBkbmwgY29tbWVudHMgaW4gYWxsb2MuYyBjb25jZXJuaW5nIHNldGptcCBh bmQgZ2NjLgogIGRubCBGaXhtZTogaXQncyBwcm9iYWJseSBzYWZlIHRvIGp1c3QgdXNlIHRoZSBH Q0MgY29uZGl0aW9uYWwgYmVsb3cuCiAgZ251LWxpbnV4IHwgZ251LWtmcmVlYnNkICkKICAgIEFD X1BSRVBST0NfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKI2lmIGRlZmluZWQgX19pMzg2X18g fHwgZGVmaW5lZCBfX3NwYXJjX18gfHwgZGVmaW5lZCBfX21jNjgwMDBfXyBcCiAgfHwgZGVmaW5l ZCBfX2FscGhhX18gfHwgZGVmaW5lZCBfX21pcHNfXyB8fCBkZWZpbmVkIF9fczM5MF9fIFwKICB8 fCBkZWZpbmVkIF9fYXJtX18gfHwgZGVmaW5lZCBfX3Bvd2VycGNfXyB8fCBkZWZpbmVkIF9fYW1k NjRfXyBcCiAgfHwgZGVmaW5lZCBfX2lhNjRfXyB8fCBkZWZpbmVkIF9fc2hfXwovKiBvayAqLwoj ZWxzZQojIGVycm9yICJzZXRqbXAgbm90IGtub3duIHRvIHdvcmsgb24gdGhpcyBhcmNoIgojZW5k aWYKICAgIF1dLCBbW11dKV0sIEFDX0RFRklORShHQ19TRVRKTVBfV09SS1MsIDEpKQogICAgOzsK ZXNhYwoKCmlmIHRlc3QgeCRHQ0MgPSB4eWVzOyB0aGVuCiAgIGRubCBHQ19TRVRKTVBfV09SS1Mg aXMgbmVhcmx5IGFsd2F5cyBhcHByb3ByaWF0ZSBmb3IgR0NDLgogICBBQ19ERUZJTkUoR0NfU0VU Sk1QX1dPUktTLCAxKQplbHNlCiAgY2FzZSAkb3BzeXMgaW4KICAgIGRubCBpcml4OiBUZXN0ZWQg b24gSXJpeCA2LjUuICBTQ00gd29ya2VkIG9uIGVhcmxpZXIgdmVyc2lvbnMuCiAgICBhaXgqIHwg ZHJhZ29uZmx5IHwgZnJlZWJzZCB8IG5ldGJzZCB8IG9wZW5ic2QgfCBpcml4Ni01IHwgc29sMiog KQogICAgICBBQ19ERUZJTkUoR0NfU0VUSk1QX1dPUktTLCAxKQogICAgICA7OwogIGVzYWMKZmkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgR0NDPwoKZG5sIEluIGEgd2VpcmQgcXVp cmssIE1TIHJ1bnRpbWUgdXNlcyBfc2V0am1wIGFuZCBsb25nam1wLgpBQ19DQUNIRV9DSEVDSyhb Zm9yIF9zZXRqbXBdLCBbZW1hY3NfY3ZfZnVuY19fc2V0am1wXSwKICBbQUNfTElOS19JRkVMU0Uo CiAgICAgW0FDX0xBTkdfUFJPR1JBTSgKICAgICAgIFtbI2luY2x1ZGUgPHNldGptcC5oPgogICAg ICAgICAjaWZkZWYgX19NSU5HVzMyX18KICAgICAgICAgIyBkZWZpbmUgX2xvbmdqbXAgbG9uZ2pt cAogICAgICAgICAjZW5kaWYKICAgICAgIF1dLAogICAgICAgW1tqbXBfYnVmIGo7CgkgaWYgKCEg X3NldGptcCAoaikpCgkgICBfbG9uZ2ptcCAoaiwgMSk7XV0pXSwKICAgICBbZW1hY3NfY3ZfZnVu Y19fc2V0am1wPXllc10sCiAgICAgW2VtYWNzX2N2X2Z1bmNfX3NldGptcD1ub10pXSkKaWYgdGVz dCAkZW1hY3NfY3ZfZnVuY19fc2V0am1wID0geWVzOyB0aGVuCiAgQUNfREVGSU5FKFtIQVZFX19T RVRKTVBdLCAxLCBbRGVmaW5lIHRvIDEgaWYgX3NldGptcCBhbmQgX2xvbmdqbXAgd29yay5dKQpl bHNlCiAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzaWdzZXRqbXBdLCBbZW1hY3NfY3ZfZnVuY19zaWdz ZXRqbXBdLAogICAgW0FDX0xJTktfSUZFTFNFKAogICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKCSBb WyNpbmNsdWRlIDxzZXRqbXAuaD4KCSBdXSwKCSBbW3NpZ2ptcF9idWYgajsKCSAgIGlmICghIHNp Z3NldGptcCAoaiwgMSkpCgkgICAgIHNpZ2xvbmdqbXAgKGosIDEpO11dKV0sCiAgICAgICBbZW1h Y3NfY3ZfZnVuY19zaWdzZXRqbXA9eWVzXSwKICAgICAgIFtlbWFjc19jdl9mdW5jX3NpZ3NldGpt cD1ub10pXSkKICBpZiB0ZXN0ICRlbWFjc19jdl9mdW5jX3NpZ3NldGptcCA9IHllczsgdGhlbgog ICAgQUNfREVGSU5FKFtIQVZFX1NJR1NFVEpNUF0sIDEsCiAgICAgIFtEZWZpbmUgdG8gMSBpZiBz aWdzZXRqbXAgYW5kIHNpZ2xvbmdqbXAgd29yay4KICAgICAgIFRoZSB2YWx1ZSBvZiB0aGlzIHN5 bWJvbCBpcyBpcnJlbGV2YW50IGlmIEhBVkVfX1NFVEpNUCBpcyBkZWZpbmVkLl0pCiAgZmkKZmkK CmNhc2UgJG9wc3lzIGluCiAgc29sMiogfCB1bml4d2FyZSApCiAgICBkbmwgVElPQ0dQR1JQIGlz IGJyb2tlbiBpbiBTeXNWcjQsIHNvIHdlIGNhbid0IHNlbmQgc2lnbmFscyB0byBQVFkKICAgIGRu bCBzdWJwcm9jZXNzZXMgdGhlIHVzdWFsIHdheS4gIEJ1dCBUSU9DU0lHTkFMIGRvZXMgd29yayBm b3IgUFRZcywKICAgIGRubCBhbmQgdGhpcyBpcyBhbGwgd2UgbmVlZC4KICAgIEFDX0RFRklORShU SU9DU0lHU0VORCwgVElPQ1NJR05BTCwgW1NvbWUgcGxhdGZvcm1zIHJlZGVmaW5lIHRoaXMuXSkK ICAgIDs7CmVzYWMKCgpjYXNlICRvcHN5cyBpbgogIGhwdXgqIHwgc29sMiogKQogICAgZG5sIFVz ZWQgaW4geGZhY2VzLmMuCiAgICBBQ19ERUZJTkUoWE9TX05FRURTX1RJTUVfSCwgMSwgW0NvbXBl bnNhdGUgZm9yIGEgYnVnIGluIFhvcy5oIG9uCiAgICAgIHNvbWUgc3lzdGVtcywgd2hlcmUgaXQg cmVxdWlyZXMgdGltZS5oLl0pCiAgICA7Owplc2FjCgoKZG5sIERlZmluZSBzeW1ib2xzIHRvIGlk ZW50aWZ5IHRoZSB2ZXJzaW9uIG9mIFVuaXggdGhpcyBpcy4KZG5sIERlZmluZSBhbGwgdGhlIHN5 bWJvbHMgdGhhdCBhcHBseSBjb3JyZWN0bHkuCkFIX1RFTVBMQVRFKERPU19OVCwgW0RlZmluZSBp ZiB0aGUgc3lzdGVtIGlzIE1TIERPUyBvciBNUyBXaW5kb3dzLl0pCkFIX1RFTVBMQVRFKE1TRE9T LCBbRGVmaW5lIGlmIHRoZSBzeXN0ZW0gaXMgTVMgRE9TLl0pCkFIX1RFTVBMQVRFKFVTRywgW0Rl ZmluZSBpZiB0aGUgc3lzdGVtIGlzIGNvbXBhdGlibGUgd2l0aCBTeXN0ZW0gSUlJLl0pCkFIX1RF TVBMQVRFKFVTRzVfNCwgW0RlZmluZSBpZiB0aGUgc3lzdGVtIGlzIGNvbXBhdGlibGUgd2l0aCBT eXN0ZW0gViBSZWxlYXNlIDQuXSkKCmNhc2UgJG9wc3lzIGluCiAgYWl4NC0yKQogICAgQUNfREVG SU5FKFVTRywgW10pCiAgICBkbmwgVGhpcyBzeW1ib2wgc2hvdWxkIGJlIGRlZmluZWQgb24gQUlY IFZlcnNpb24gMyAgPz8/Pz8/PwogICAgQUNfUFJFUFJPQ19JRkVMU0UoW0FDX0xBTkdfUFJPR1JB TShbWwojaWZuZGVmIF9BSVgKIyBlcnJvciAiX0FJWCBub3QgZGVmaW5lZCIKI2VuZGlmCiAgICBd XSwgW1tdXSldLCBbXSwgQUNfREVGSU5FKF9BSVgsIFtdLCBbRGVmaW5lIGlmIHRoZSBzeXN0ZW0g aXMgQUlYLl0pKQogICAgOzsKCiAgY3lnd2luKQogICAgQUNfREVGSU5FKENZR1dJTiwgMSwgW0Rl ZmluZSBpZiB0aGUgc3lzdGVtIGlzIEN5Z3dpbi5dKQogICAgOzsKCiAgZGFyd2luKQogICAgZG5s IE5vdCBfX0FQUExFX18sIGFzIHRoaXMgbWF5IG5vdCBiZSBkZWZpbmVkIG9uIG5vbi1PU1ggRGFy d2luLgogICAgZG5sIE5vdCBEQVJXSU4sIGJlY2F1c2UgUGFudGhlciBhbmQgbG93ZXIgQ29yZUZv dW5kYXRpb24uaCB1c2UgREFSV0lOIHRvCiAgICBkbmwgZGlzdGluZ3Vpc2ggT1MgWCBmcm9tIHB1 cmUgRGFyd2luLgogICAgQUNfREVGSU5FKERBUldJTl9PUywgW10sIFtEZWZpbmUgaWYgdGhlIHN5 c3RlbSBpcyBEYXJ3aW4uXSkKICAgIDs7CgogIGdudS1saW51eCB8IGdudS1rZnJlZWJzZCApCiAg ICBBQ19ERUZJTkUoVVNHLCBbXSkKICAgIEFDX0RFRklORShHTlVfTElOVVgsIFtdLCBbRGVmaW5l IGlmIHRocyBzeXN0ZW0gaXMgY29tcGF0aWJsZSB3aXRoIEdOVS9MaW51eC5dKQogICAgOzsKCiAg aHB1eCopCiAgICBBQ19ERUZJTkUoVVNHLCBbXSkKICAgIEFDX0RFRklORShIUFVYLCBbXSwgW0Rl ZmluZSBpZiB0aGUgc3lzdGVtIGlzIEhQVVguXSkKICAgIDs7CgogIGlyaXg2LTUpCiAgICBBQ19E RUZJTkUoVVNHLCBbXSkKICAgIEFDX0RFRklORShVU0c1XzQsIFtdKQogICAgQUNfREVGSU5FKElS SVg2XzUsIFtdLCBbRGVmaW5lIGlmIHRoZSBzeXN0ZW0gaXMgSVJJWC5dKQogICAgOzsKCiAgbWlu Z3cpCiAgICBBQ19ERUZJTkUoRE9TX05ULCBbXSkKICAgIEFDX0RFRklORShXSU5ET1dTTlQsIDEs IFtEZWZpbmUgaWYgY29tcGlsaW5nIGZvciBuYXRpdmUgTVMgV2luZG93cy5dKQogICAgaWYgdGVz dCAieCRhY19lbmFibGVfY2hlY2tpbmciICE9ICJ4IiA7IHRoZW4KICAgICAgQUNfREVGSU5FKEVN QUNTREVCVUcsIDEsIFtEZWZpbmUgdG8gMSB0byBlbmFibGUgdzMyIGRlYnVnIGZhY2lsaXRpZXMu XSkKICAgIGZpCiAgICA7OwoKICBzb2wyKikKICAgIEFDX0RFRklORShVU0csIFtdKQogICAgQUNf REVGSU5FKFVTRzVfNCwgW10pCiAgICBBQ19ERUZJTkUoU09MQVJJUzIsIFtdLCBbRGVmaW5lIGlm IHRoZSBzeXN0ZW0gaXMgU29sYXJpcy5dKQogICAgOzsKCiAgdW5peHdhcmUpCiAgICBBQ19ERUZJ TkUoVVNHLCBbXSkKICAgIEFDX0RFRklORShVU0c1XzQsIFtdKQogICAgOzsKZXNhYwoKQUNfQ0FD SEVfQ0hFQ0soW2ZvciB1c2FibGUgRklPTlJFQURdLCBbZW1hY3NfY3ZfdXNhYmxlX0ZJT05SRUFE XSwKICBbY2FzZSAkb3BzeXMgaW4KICAgICBhaXg0LTIpCiAgICAgICBkbmwgQlVJTEQgOTAwOCAt IEZJT05SRUFEIHByb2JsZW0gc3RpbGwgZXhpc3RzIGluIFgtV2luZG93cy4KICAgICAgIGVtYWNz X2N2X3VzYWJsZV9GSU9OUkVBRD1ubwogICAgICAgOzsKCiAgICAgbWluZ3cpCiAgICAgICBlbWFj c19jdl91c2FibGVfRklPTlJFQUQ9eWVzCiAgICAgICA7OwoKICAgICAqKQogICAgICAgQUNfQ09N UElMRV9JRkVMU0UoCgkgW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K CQkJICAgICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KCQkJICAgICNpZmRlZiBVU0c1XzQKCQkJICAg ICMgaW5jbHVkZSA8c3lzL2ZpbGlvLmg+CgkJCSAgICAjZW5kaWYKCQkJICBdXSwKCQkJICBbW2lu dCBmb28gPSBpb2N0bCAoMCwgRklPTlJFQUQsICZmb28pO11dKV0sCgkgW2VtYWNzX2N2X3VzYWJs ZV9GSU9OUkVBRD15ZXNdLAoJIFtlbWFjc19jdl91c2FibGVfRklPTlJFQUQ9bm9dKQogICAgICAg OzsKICAgZXNhY10pCmlmIHRlc3QgJGVtYWNzX2N2X3VzYWJsZV9GSU9OUkVBRCA9IHllczsgdGhl bgogIEFDX0RFRklORShbVVNBQkxFX0ZJT05SRUFEXSwgWzFdLCBbRGVmaW5lIHRvIDEgaWYgRklP TlJFQUQgaXMgdXNhYmxlLl0pCgogIGlmIHRlc3QgJGVtYWNzX2Jyb2tlbl9TSUdJTyA9IG5vOyB0 aGVuCiAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVzYWJsZSBTSUdJT10sIFtlbWFjc19jdl91c2Fi bGVfU0lHSU9dLAogICAgICBbQUNfQ09NUElMRV9JRkVMU0UoCgkgW0FDX0xBTkdfUFJPR1JBTShb WyNpbmNsdWRlIDxmY250bC5oPgoJCQkgICAgI2luY2x1ZGUgPHNpZ25hbC5oPgoJCQkgIF1dLAoJ CQkgIFtbaW50IGZvbyA9IFNJR0lPIHwgRl9TRVRGTCB8IEZBU1lOQztdXSldLAoJIFtlbWFjc19j dl91c2FibGVfU0lHSU89eWVzXSwKCSBbZW1hY3NfY3ZfdXNhYmxlX1NJR0lPPW5vXSldLAogICAg ICBbZW1hY3NfY3ZfdXNhYmxlX1NJR0lPPXllc10sCiAgICAgIFtlbWFjc19jdl91c2FibGVfU0lH SU89bm9dKQogICAgaWYgdGVzdCAkZW1hY3NfY3ZfdXNhYmxlX1NJR0lPID0geWVzOyB0aGVuCiAg ICAgIEFDX0RFRklORShbVVNBQkxFX1NJR0lPXSwgWzFdLCBbRGVmaW5lIHRvIDEgaWYgU0lHSU8g aXMgdXNhYmxlLl0pCiAgICBmaQogIGZpCmZpCgoKY2FzZSAkb3BzeXMgaW4KICBkbmwgRW1hY3Mg c3VwcGxpZXMgaXRzIG93biBtYWxsb2MsIGJ1dCBnbGliIGNhbGxzIHBvc2l4X21lbWFsaWduLAog IGRubCBhbmQgb24gQ3lnd2luIHByaW9yIHRvIHZlcnNpb24gMS43LjI0IHRoYXQgYmVjb21lcyB0 aGUKICBkbmwgQ3lnd2luLXN1cHBsaWVkIHBvc2l4X21lbWFsaWduLiAgQXMgbWFsbG9jIGlzIG5v dCB0aGUgQ3lnd2luCiAgZG5sIG1hbGxvYywgdGhlIEN5Z3dpbiBwb3NpeF9tZW1hbGlnbiBhbHdh eXMgcmV0dXJucyBFTk9TWVMuICBBCiAgZG5sIHdvcmthcm91bmQgaXMgdG8gc2V0IEdfU0xJQ0U9 YWx3YXlzLW1hbGxvYy4gIFRoaXMgaXMgbm8gbG9uZ2VyCiAgZG5sIG5lZWRlZCBzdGFydGluZyB3 aXRoIGN5Z3dpbi0xLjcuMjQsIGFuZCBpdCBpcyBubyBsb25nZXIKICBkbmwgZWZmZWN0aXZlIHN0 YXJ0aW5nIHdpdGggZ2xpYi0yLjM2LiAqLwogIGN5Z3dpbikKICAgIEFDX0RFRklORShHX1NMSUNF X0FMV0FZU19NQUxMT0MsIDEsIFtEZWZpbmUgdG8gc2V0IHRoZQogICAgICBHX1NMSUNFIGVudmly b25tZW50IHZhcmlhYmxlIHRvICJhbHdheXMtbWFsbG9jIiBhdCBzdGFydHVwLl0pCiAgICA7OwoK ICBocHV4MTEpCiAgICBkbmwgSXQgd29ya3MgdG8gb3BlbiB0aGUgcHR5J3MgdHR5IGluIHRoZSBw YXJlbnQgKEVtYWNzKSwgdGhlbgogICAgZG5sIGNsb3NlIGFuZCByZW9wZW4gaXQgaW4gdGhlIGNo aWxkLgogICAgQUNfREVGSU5FKFVTR19TVUJUVFlfV09SS1MsIDEsIFtEZWZpbmUgZm9yIFVTRyBz eXN0ZW1zIHdoZXJlIGl0CiAgICAgIHdvcmtzIHRvIG9wZW4gYSBwdHkncyB0dHkgaW4gdGhlIHBh cmVudCBwcm9jZXNzLCB0aGVuIGNsb3NlIGFuZAogICAgICByZW9wZW4gaXQgaW4gdGhlIGNoaWxk Ll0pCiAgICA7OwoKICBpcml4Ni01KQogICAgQUNfREVGSU5FKFBSRUZFUl9WU1VTUCwgMSwgW0Rl ZmluZSBpZiBwcm9jZXNzX3NlbmRfc2lnbmFsIHNob3VsZAogICAgICB1c2UgVlNVU1AgaW5zdGVh ZCBvZiBWU1dUQ0guXSkKICAgIDs7CgogIHNvbDItMTApCiAgICBBQ19ERUZJTkUoX1NUUlVDVFVS RURfUFJPQywgMSwgW05lZWRlZCBmb3Igc3lzdGVtX3Byb2Nlc3NfYXR0cmlidXRlcwogICAgICBv biBTb2xhcmlzLl0pCiAgICA7Owplc2FjCgojIFNldCB1cCB0aGUgQ0ZMQUdTIGZvciByZWFsIGNv bXBpbGF0aW9uLCBzbyB3ZSBjYW4gc3Vic3RpdHV0ZSBpdC4KQ0ZMQUdTPSIkUkVBTF9DRkxBR1Mi CkNQUEZMQUdTPSIkUkVBTF9DUFBGTEFHUyIKTElCUz0iJFJFQUxfTElCUyIKCiMjIEhhY2sgdG8g ZGV0ZWN0IGEgYnVnZ3kgR0NDIHZlcnNpb24uCmlmIHRlc3QgIngkR0NDIiA9IHh5ZXMgXAogICAm JiB0ZXN0IHgiYCRDQyAtLXZlcnNpb24gMj4gL2Rldi9udWxsIHwgZ3JlcCAnZ2NjLiogNC41LjAn YCIgIT0geCBcCiAgICYmIHRlc3QgeCJgZWNobyAkQ0ZMQUdTIHwgZ3JlcCAnXC1PQDw6QDIzQDo+ QCdgIiAhPSB4IFwKICAgJiYgdGVzdCB4ImBlY2hvICRDRkxBR1MgfCBncmVwICdcLWZuby1vcHRp bWl6ZS1zaWJsaW5nLWNhbGxzJ2AiID0geDsgdGhlbgogICBBQ19NU0dfRVJST1IoW0dDQyA0LjUu MCBoYXMgcHJvYmxlbXMgY29tcGlsaW5nIEVtYWNzOyBzZWUgZXRjL1BST0JMRU1TJy5dKQpmaQoK dmVyc2lvbj0kUEFDS0FHRV9WRVJTSU9OCgpjb3B5cmlnaHQ9IkNvcHlyaWdodCAoQykgMjAxNCBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4iCkFDX0RFRklORV9VTlFVT1RFRChDT1BZUklH SFQsIFsiJGNvcHlyaWdodCJdLAogIFtTaG9ydCBjb3B5cmlnaHQgc3RyaW5nIGZvciB0aGlzIHZl cnNpb24gb2YgRW1hY3MuXSkKQUNfU1VCU1QoY29weXJpZ2h0KQoKIyMjIFNwZWNpZnkgd2hhdCBz b3J0IG9mIHRoaW5ncyB3ZSdsbCBiZSBlZGl0aW5nIGludG8gTWFrZWZpbGUgYW5kIGNvbmZpZy5o LgojIyMgVXNlIGNvbmZpZ3VyYXRpb24gaGVyZSB1bmNhbm9uaWNhbGl6ZWQgdG8gYXZvaWQgZXhj ZWVkaW5nIHNpemUgbGltaXRzLgpBQ19TVUJTVCh2ZXJzaW9uKQpBQ19TVUJTVChjb25maWd1cmF0 aW9uKQojIyBVbnVzZWQ/CkFDX1NVQlNUKGNhbm9uaWNhbCkKQUNfU1VCU1Qoc3JjZGlyKQpBQ19T VUJTVChwcmVmaXgpCkFDX1NVQlNUKGV4ZWNfcHJlZml4KQpBQ19TVUJTVChiaW5kaXIpCkFDX1NV QlNUKGRhdGFkaXIpCkFDX1NVQlNUKHNoYXJlZHN0YXRlZGlyKQpBQ19TVUJTVChsaWJleGVjZGly KQpBQ19TVUJTVChtYW5kaXIpCkFDX1NVQlNUKGluZm9kaXIpCkFDX1NVQlNUKGxpc3BkaXIpCkFD X1NVQlNUKHN0YW5kYXJkbGlzcHBhdGgpCkFDX1NVQlNUKGxvY2FsbGlzcHBhdGgpCkFDX1NVQlNU KGxpc3BwYXRoKQpBQ19TVUJTVCh4X2RlZmF1bHRfc2VhcmNoX3BhdGgpCkFDX1NVQlNUKGV0Y2Rp cikKQUNfU1VCU1QoYXJjaGxpYmRpcikKQUNfU1VCU1QoZXRjZG9jZGlyKQpBQ19TVUJTVChiaXRt YXBkaXIpCkFDX1NVQlNUKGdhbWVkaXIpCkFDX1NVQlNUKGdhbWV1c2VyKQojIyBGSVhNRT8gTm90 aGluZyB1c2VzIEBMRF9TV0lUQ0hfWF9TSVRFQC4KIyMgc3JjL01ha2VmaWxlLmluIGRpZCBhZGQg TERfU1dJVENIX1hfU0lURSAoYXMgYSBjcHAgZGVmaW5lKSB0byB0aGUKIyMgZW5kIG9mIExJQlhf QkFTRSwgYnV0IG5vdGhpbmcgZXZlciBzZXQgaXQuCkFDX1NVQlNUKExEX1NXSVRDSF9YX1NJVEUp CkFDX1NVQlNUKENfU1dJVENIX1hfU0lURSkKQUNfU1VCU1QoR05VU1RFUF9DRkxBR1MpCkFDX1NV QlNUKENGTEFHUykKIyMgVXNlZCBpbiBsd2xpYi9NYWtlZmlsZS5pbi4KQUNfU1VCU1QoWF9UT09M S0lUX1RZUEUpCkFDX1NVQlNUKG5zX2FwcGRpcikKQUNfU1VCU1QobnNfYXBwYmluZGlyKQpBQ19T VUJTVChuc19hcHByZXNkaXIpCkFDX1NVQlNUKG5zX2FwcHNyYykKQUNfU1VCU1QoR05VX09CSkNf Q0ZMQUdTKQpBQ19TVUJTVChPVEhFUl9GSUxFUykKCmlmIHRlc3QgLW4gIiR7dGVybV9oZWFkZXJ9 IjsgdGhlbgogICAgQUNfREVGSU5FX1VOUVVPVEVEKFRFUk1fSEVBREVSLCAiJHt0ZXJtX2hlYWRl cn0iLAogICAgICAgIFtEZWZpbmUgdG8gdGhlIGhlYWRlciBmb3IgdGhlIGJ1aWx0LWluIHdpbmRv dyBzeXN0ZW0uXSkKZmkKCkFDX0RFRklORV9VTlFVT1RFRChFTUFDU19DT05GSUdVUkFUSU9OLCAg IiR7Y2Fub25pY2FsfSIsCgkJICAgW0RlZmluZSB0byB0aGUgY2Fub25pY2FsIEVtYWNzIGNvbmZp Z3VyYXRpb24gbmFtZS5dKQpBQ19ERUZJTkVfVU5RVU9URUQoRU1BQ1NfQ09ORklHX09QVElPTlMs ICIke2VtYWNzX2NvbmZpZ19vcHRpb25zfSIsCgkJICAgW0RlZmluZSB0byB0aGUgb3B0aW9ucyBw YXNzZWQgdG8gY29uZmlndXJlLl0pCkFIX1RFTVBMQVRFKGNvbmZpZ19vcHN5c2ZpbGUsIFtTb21l IHBsYXRmb3JtcyB0aGF0IGRvIG5vdCB1c2UgY29uZmlndXJlCiAgZGVmaW5lIHRoaXMgdG8gaW5j bHVkZSBleHRyYSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLl0pCgpjYXNlICRvcHN5cyBpbgog IG1pbmd3KQogICAgQUNfREVGSU5FKGNvbmZpZ19vcHN5c2ZpbGUsIDxtcy13MzIuaD4sIFtdKQog ICAgOzsKZXNhYwoKWE1FTlVfT0JKPQpYT0JKPQpGT05UX09CSj0KaWYgdGVzdCAiJHtIQVZFX1hf V0lORE9XU30iID0gInllcyIgOyB0aGVuCiAgQUNfREVGSU5FKEhBVkVfWF9XSU5ET1dTLCAxLAoJ ICAgIFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFggd2luZG93IHN5c3RlbS5d KQogIFhNRU5VX09CSj14bWVudS5vCiAgWE9CSj0ieHRlcm0ubyB4Zm5zLm8geHNlbGVjdC5vIHhy ZGIubyB4c21mbnMubyB4c2V0dGluZ3MubyIKICBGT05UX09CSj14Zm9udC5vCiAgaWYgdGVzdCAi JEhBVkVfWEZUIiA9ICJ5ZXMiOyB0aGVuCiAgICBGT05UX09CSj0iJEZPTlRfT0JKIGZ0Zm9udC5v IHhmdGZvbnQubyBmdHhmb250Lm8iCiAgZWxpZiB0ZXN0ICIkSEFWRV9GUkVFVFlQRSIgPSAieWVz IjsgdGhlbgogICAgRk9OVF9PQko9IiRGT05UX09CSiBmdGZvbnQubyBmdHhmb250Lm8iCiAgZmkK ICBBQ19TVUJTVChGT05UX09CSikKZmkKQUNfU1VCU1QoWE1FTlVfT0JKKQpBQ19TVUJTVChYT0JK KQpBQ19TVUJTVChGT05UX09CSikKCldJREdFVF9PQko9Ck1PVElGX0xJQlc9CmlmIHRlc3QgIiR7 VVNFX1hfVE9PTEtJVH0iICE9ICJub25lIiA7IHRoZW4KICBXSURHRVRfT0JKPXdpZGdldC5vCiAg QUNfREVGSU5FKFVTRV9YX1RPT0xLSVQsIDEsIFtEZWZpbmUgdG8gMSBpZiB1c2luZyBhbiBYIHRv b2xraXQuXSkKICBpZiB0ZXN0ICIke1VTRV9YX1RPT0xLSVR9IiA9ICJMVUNJRCI7IHRoZW4KICAg IEFDX0RFRklORShVU0VfTFVDSUQsIDEsIFtEZWZpbmUgdG8gMSBpZiB1c2luZyB0aGUgTHVjaWQg WCB0b29sa2l0Ll0pCiAgZWxpZiB0ZXN0ICIke1VTRV9YX1RPT0xLSVR9IiA9ICJNT1RJRiI7IHRo ZW4KICAgIEFDX0RFRklORShVU0VfTU9USUYsIDEsIFtEZWZpbmUgdG8gMSBpZiB1c2luZyB0aGUg TW90aWYgWCB0b29sa2l0Ll0pCiAgICBNT1RJRl9MSUJXPS1sWG0KICAgIGNhc2UgIiRvcHN5cyIg aW4KICAgICAgZ251LWxpbnV4KQogICAgICAgICMjIFBhdWwgQWJyYWhhbXMgPGFicmFoYW1zIGF0 IGVxdWlub3guc2hheXNuZXQuY29tPiBzYXlzIHRoaXMgaXMgbmVlZGVkLgogICAgICAgIE1PVElG X0xJQlc9IiRNT1RJRl9MSUJXIC1sWHBtIgogICAgICAgIDs7CgogICAgICB1bml4d2FyZSkKICAg ICAgICAjIyBSaWNoYXJkIEFudGhvbnkgUnlhbiA8cnlhbnIgYXQgZWxsaW5ndG4uZnRjLm5yY3Mu dXNkYS5nb3Y+CiAgICAgICAgIyMgc2F5cyAtbFhpbXAgaXMgbmVlZGVkIGluIFVOSVhfU1YgLi4u IDQuMiAxLjEuMi4KICAgICAgICBNT1RJRl9MSUJXPSJNT1RJRl9MSUJXIC1sWGltcCIKICAgICAg ICA7OwoKICAgICAgYWl4NC0yKQogICAgICAgICMjIG9sc29uQG1jcy5hbmwuZ292IHNheXMgLWxp MThuIGlzIG5lZWRlZCBieSAtbFhtLgogICAgICAgIE1PVElGX0xJQlc9IiRNT1RJRl9MSUJXIC1s aTE4biIKICAgICAgICA7OwogICAgZXNhYwogICAgTU9USUZfTElCVz0iJE1PVElGX0xJQlcgJExJ QlhQIgogIGZpCmZpCkFDX1NVQlNUKFdJREdFVF9PQkopCgpUT09MS0lUX0xJQlc9CmNhc2UgIiRV U0VfWF9UT09MS0lUIiBpbgogIE1PVElGKSBUT09MS0lUX0xJQlc9IiRNT1RJRl9MSUJXIiA7Owog IExVQ0lEKSBUT09MS0lUX0xJQlc9IiRMVUNJRF9MSUJXIiA7OwogIG5vbmUpIHRlc3QgIngkSEFW RV9HVEsiID0gInh5ZXMiICYmIFRPT0xLSVRfTElCVz0iJEdUS19MSUJTIiA7Owplc2FjCkFDX1NV QlNUKFRPT0xLSVRfTElCVykKCmlmIHRlc3QgIiR7b3BzeXN9IiAhPSAibWluZ3ciOyB0aGVuCiAg aWYgdGVzdCAiJFVTRV9YX1RPT0xLSVQiID0gIm5vbmUiOyB0aGVuCiAgICBMSUJYVF9PVEhFUj0i XCQoTElCWFNNKSIKICBlbHNlCiAgICBMSUJYVF9PVEhFUj0iXCQoTElCWE1VKSAtbFh0IFwkKExJ QlhUUjYpIC1sWGV4dCIKICBmaQpmaQpBQ19TVUJTVChMSUJYVF9PVEhFUikKCmlmIHRlc3QgIiR7 SEFWRV9YMTF9IiA9ICJ5ZXMiIDsgdGhlbgogIEFDX0RFRklORShIQVZFX1gxMSwgMSwKCSAgICBb RGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gdXNlIHZlcnNpb24gMTEgb2YgWCB3aW5kb3dzLl0p CiAgTElCWF9PVEhFUj0iXCQoTElCWFQpIFwkKExJQlhfRVhUUkEpIgplbHNlCiAgTElCWF9PVEhF Uj0KZmkKQUNfU1VCU1QoTElCWF9PVEhFUikKCmlmIHRlc3QgIiRIQVZFX0dUSyIgPSB5ZXMgfHwg dGVzdCAiJEhBVkVfWDExIiAhPSB5ZXM7IHRoZW4KICBMSUJYTUVOVT0KZWxpZiB0ZXN0ICIkVVNF X1hfVE9PTEtJVCIgPSBub25lOyB0aGVuCiAgTElCWE1FTlU9JyQob2xkWE1lbnVkaXIpL2xpYlhN ZW51MTEuYScKZWxzZQogIExJQlhNRU5VPSckKGx3bGliZGlyKS9saWJsdy5hJwpmaQpBQ19TVUJT VChMSUJYTUVOVSkKCmlmIHRlc3QgIiR7R05VX01BTExPQ30iID0gInllcyIgOyB0aGVuCiAgQUNf REVGSU5FKEdOVV9NQUxMT0MsIDEsCgkgICAgW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIHVz ZSB0aGUgR05VIG1lbW9yeSBhbGxvY2F0b3IuXSkKZmkKClJBTExPQ19PQko9CmlmIHRlc3QgIiR7 UkVMX0FMTE9DfSIgPSAieWVzIiA7IHRoZW4KICBBQ19ERUZJTkUoUkVMX0FMTE9DLCAxLAoJICAg IFtEZWZpbmUgUkVMX0FMTE9DIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgcmVsb2NhdGluZyBhbGxv Y2F0b3IgZm9yCgkgICAgIGJ1ZmZlciBzcGFjZS5dKQoKICB0ZXN0ICIkc3lzdGVtX21hbGxvYyIg IT0gInllcyIgJiYgUkFMTE9DX09CSj1yYWxsb2MubwpmaQpBQ19TVUJTVChSQUxMT0NfT0JKKQoK aWYgdGVzdCAiJG9wc3lzIiA9ICJjeWd3aW4iOyB0aGVuCiAgQ1lHV0lOX09CSj0ic2hlYXAubyBj eWd3MzIubyIKICAjIyBDeWd3aW4gZGlmZmVycyBiZWNhdXNlIG9mIGl0cyB1bmV4ZWMoKS4KICBQ UkVfQUxMT0NfT0JKPQogIFBPU1RfQUxMT0NfT0JKPWxhc3RmaWxlLm8KZWxpZiB0ZXN0ICIkb3Bz eXMiID0gIm1pbmd3IjsgdGhlbgogIENZR1dJTl9PQko9CiAgUFJFX0FMTE9DX09CSj0KICBQT1NU X0FMTE9DX09CSj1sYXN0ZmlsZS5vCmVsc2UKICBDWUdXSU5fT0JKPQogIFBSRV9BTExPQ19PQko9 bGFzdGZpbGUubwogIFBPU1RfQUxMT0NfT0JKPQpmaQpBQ19TVUJTVChDWUdXSU5fT0JKKQpBQ19T VUJTVChQUkVfQUxMT0NfT0JKKQpBQ19TVUJTVChQT1NUX0FMTE9DX09CSikKCmRubCBDYWxsIHRo aXMgJ0ZPUlRJRllfU09VUicgc28gdGhhdCBpdCBzb3J0cyBiZWZvcmUgdGhlICdGT1JUSUZZX1NP VVJDRScKZG5sIHZlcmJhdGltIGRlZmluZWQgYWJvdmUuICBUaGUgdHJpY2t5IG5hbWUgaXMgYXBy b3BvcywgYXMgdGhpcyBoYWNrCmRubCBtYWtlcyBGb3J0aWZ5IGdvIHNvdXIhCkFIX1ZFUkJBVElN KFtGT1JUSUZZX1NPVVJdLApbLyogV2l0aG91dCB0aGUgZm9sbG93aW5nIHdvcmthcm91bmQsIEVt YWNzIHJ1bnMgc2xvd2x5IG9uIE9TIFggMTAuOC4KICAgVGhlIHdvcmthcm91bmQgZGlzYWJsZXMg c29tZSB1c2VmdWwgcnVuLXRpbWUgY2hlY2tpbmcsIHNvIGl0CiAgIHNob3VsZCBiZSBjb25kaXRp b25hbCB0byB0aGUgcGxhdGZvcm1zIHdpdGggdGhlIHBlcmZvcm1hbmNlIGJ1Zy4KICAgUGVyaGFw cyBBcHBsZSB3aWxsIGZpeCB0aGlzIHNvbWUgZGF5OyBhbHNvIHNlZSBtNC9leHRlcm4taW5saW5l Lm00LiAgKi8KI2lmIGRlZmluZWQgX19BUFBMRV9fICYmIGRlZmluZWQgX19HTlVDX18KIyBpZm5k ZWYgX0RPTlRfVVNFX0NUWVBFX0lOTElORV8KIyAgZGVmaW5lIF9ET05UX1VTRV9DVFlQRV9JTkxJ TkVfCiMgZW5kaWYKIyBpZm5kZWYgX0ZPUlRJRllfU09VUkNFCiMgIGRlZmluZSBfRk9SVElGWV9T T1VSQ0UgMAojIGVuZGlmCiNlbmRpZgpdKQoKIyBJZiB1c2VyIGFza3MgdG8gb21pdCBmZWF0dXJl cywgZGlzYWJsZSBvcHRpb25hbCBmZWF0dXJlcyB0aGF0IGdudWxpYgojIG1pZ2h0IG90aGVyd2lz ZSBlbmFibGUuCmlmIHRlc3QgIiR3aXRoX2ZlYXR1cmVzIiA9IG5vICYmIHRlc3QgIiRlbmFibGVf YWNsIiAhPSB5ZXM7IHRoZW4KICBlbmFibGVfYWNsPW5vCmZpCgojIENvbmZpZ3VyZSBnbnVsaWIu ICBBbHRob3VnaCB0aGlzIGRvZXMgbm90IGFmZmVjdCBDRkxBR1Mgb3IgTElCUyBwZXJtYW5lbnRs eS4KIyBpdCB0ZW1wb3JhcmlseSByZXZlcnRzIHRoZW0gdG8gdGhlaXIgcHJlLXBrZy1jb25maWcg dmFsdWVzLAojIGJlY2F1c2UgZ251bGliIG5lZWRzIHRvIHdvcmsgd2l0aCBib3RoIHNyYyAod2hp Y2ggdXNlcyB0aGUKIyBwa2ctY29uZmlnIHN0dWZmKSBhbmQgbGliLXNyYyAod2hpY2ggZG9lcyBu b3QpLiAgRm9yIGV4YW1wbGUsIGdudWxpYgojIG1heSBuZWVkIHRvIGRldGVybWluZSB3aGV0aGVy IExJQl9DTE9DS19HRVRUSU1FIHNob3VsZCBjb250YWluIC1scnQsCiMgYW5kIGl0IHRoZXJlZm9y ZSBuZWVkcyB0byBydW4gaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgTElCUyBkb2VzIG5vdAojIGFs cmVhZHkgY29udGFpbiAtbHJ0IG1lcmVseSBiZWNhdXNlICdwa2ctY29uZmlnIC0tbGlicycgcHJp bnRlZCAnLWxydCcKIyBmb3Igc29tZSBwYWNrYWdlIHVucmVsYXRlZCB0byBsaWItc3JjLgpTQVZF X0NGTEFHUz0kQ0ZMQUdTClNBVkVfTElCUz0kTElCUwpDRkxBR1M9JHByZV9QS0dfQ09ORklHX0NG TEFHUwpMSUJTPSIkTElCX1BUSFJFQUQgJHByZV9QS0dfQ09ORklHX0xJQlMiCmdsX0FTU0VSVF9O T19HTlVMSUJfUE9TSVhDSEVDSwpnbF9BU1NFUlRfTk9fR05VTElCX1RFU1RTCmdsX0lOSVQKQ0ZM QUdTPSRTQVZFX0NGTEFHUwpMSUJTPSRTQVZFX0xJQlMKCmlmIHRlc3QgIiR7b3BzeXN9IiA9ICJt aW5ndyI7IHRoZW4KICBDUFBGTEFHUz0iJENQUEZMQUdTIC1EVVNFX0NSVF9ETEw9MSAtSSBcJHth YnNfdG9wX3NyY2Rpcn0vbnQvaW5jIgogICMgUmVtb3ZlIHVubmVlZGVkIHN3aXRjaGVzIGZyb20g dGhlIHZhbHVlIG9mIENDIHRoYXQgZ29lcyB0byBNYWtlZmlsZXMKICBDQz1gZWNobyAkQ0MgfCBz ZWQgLWUgInMsJEdDQ19URVNUX09QVElPTlMsLCJgCmZpCgpjYXNlICIkb3BzeXMiIGluCiAgYWl4 NC0yKSBMRF9TV0lUQ0hfU1lTVEVNX1RFTUFDUz0iLVdsLC1ibm9kZWxjc2VjdCIgOzsKCiAgZGFy d2luKQogICAjIyBUaGUgLWhlYWRlcnBhZCBvcHRpb24gdGVsbHMgbGQgKHNlZSBtYW4gcGFnZSkg dG8gbGVhdmUgcm9vbSBhdCB0aGUKICAgIyMgZW5kIG9mIHRoZSBoZWFkZXIgZm9yIGFkZGluZyBs b2FkIGNvbW1hbmRzLiAgTmVlZGVkIGZvciBkdW1waW5nLgogICAjIyAweDY5MCBpcyB0aGUgdG90 YWwgc2l6ZSBvZiAzMCBzZWdtZW50IGxvYWQgY29tbWFuZHMgKGF0IDU2CiAgICMjIGVhY2gpOyB1 bmRlciBDb2NvYSAzMSBjb21tYW5kcyBhcmUgcmVxdWlyZWQuCiAgIGlmIHRlc3QgIiRIQVZFX05T IiA9ICJ5ZXMiOyB0aGVuCiAgICAgbGlic19uc2d1aT0iLWZyYW1ld29yayBBcHBLaXQiCiAgICAg aWYgdGVzdCAiJE5TX0lNUExfQ09DT0EiID0gInllcyI7IHRoZW4KICAgICAgICBsaWJzX25zZ3Vp PSIkbGlic19uc2d1aSAtZnJhbWV3b3JrIElPS2l0IgogICAgIGZpCiAgICAgaGVhZGVycGFkX2V4 dHJhPTZDOAogICBlbHNlCiAgICAgbGlic19uc2d1aT0KICAgICBoZWFkZXJwYWRfZXh0cmE9Njkw CiAgIGZpCiAgIExEX1NXSVRDSF9TWVNURU1fVEVNQUNTPSItZm5vLXBpZSAtcHJlYmluZCAkbGli c19uc2d1aSAtWGxpbmtlciAtaGVhZGVycGFkIC1YbGlua2VyICRoZWFkZXJwYWRfZXh0cmEiCgog ICAjIyBUaGlzIGlzIGhlcmUgYmVjYXVzZSBzcmMvTWFrZWZpbGUuaW4gZGlkIHNvbWUgZXh0cmEg ZmlkZGxpbmcgYXJvdW5kCiAgICMjIHdpdGggTERfU1dJVENIX1NZU1RFTS4gIEl0IHNlZW1zIGNs ZWFuZXIgdG8gcHV0IHRoaXMgaW4KICAgIyMgTERfU1dJVENIX1NZU1RFTV9URU1BQ1MgaW5zdGVh ZCwKICAgdGVzdCAieCRMRF9TV0lUQ0hfU1lTVEVNIiA9ICJ4IiAmJiB0ZXN0ICJ4JEdDQyIgIT0g Inh5ZXMiICYmIFwKICAgICBMRF9TV0lUQ0hfU1lTVEVNX1RFTUFDUz0iLVggJExEX1NXSVRDSF9T WVNURU1fVEVNQUNTIgogICA7OwoKICAjIyBMRF9TV0lUQ0hfWF9TSVRFX1JQQVRIIGlzIGEgLXJw YXRoIG9wdGlvbiBzYXlpbmcgd2hlcmUgdG8KICAjIyBmaW5kIFggYXQgcnVuLXRpbWUuCiAgIyMg V2hlbiBoYW5kbGVkIGJ5IGNwcCwgdGhpcyB3YXMgaW4gTERfU1dJVENIX1NZU1RFTS4gIEhvd2V2 ZXIsIGF0IHRoZQogICMjIHBvaW50IHdoZXJlIGNvbmZpZ3VyZSBzb3VyY2VkIHRoZSBzLyouaCBm aWxlLCBMRF9TV0lUQ0hfWF9TSVRFX1JQQVRICiAgIyMgaGFkIG5vdCB5ZXQgYmVlbiBkZWZpbmVk IGFuZCB3YXMgZXhwYW5kZWQgdG8gbnVsbC4gIEhlbmNlIExEX1NXSVRDSF9TWVNURU0KICAjIyBo YWQgZGlmZmVyZW50IHZhbHVlcyBpbiBjb25maWd1cmUgKGluIGFjX2xpbmspIGFuZCBzcmMvTWFr ZWZpbGUuaW4uCiAgIyMgSXQgc2VlbXMgY2xlYXJlciB0aGVyZWZvcmUgdG8gcHV0IHRoaXMgcGll Y2UgaW4gTERfU1dJVENIX1NZU1RFTV9URU1BQ1MuCiAgZ251KikgTERfU1dJVENIX1NZU1RFTV9U RU1BQ1M9IlwkKExEX1NXSVRDSF9YX1NJVEVfUlBBVEgpIiA7OwoKICBtaW5ndykKICAgIyMgSXMg aXQgYW55IGJldHRlciB1bmRlciBNaW5HVzY0IHRvIHJlbG9jYXRlIGVtYWNzIGludG8gaGlnaGVy IGFkZHJlc3Nlcz8KICAgY2FzZSAiJGNhbm9uaWNhbCIgaW4KICAgICB4ODZfNjQtKi0qKSBMRF9T V0lUQ0hfU1lTVEVNX1RFTUFDUz0iLVdsLC1zdGFjaywweDAwODAwMDAwIC1XbCwtaGVhcCwweDAw MTAwMDAwIC1XbCwtaW1hZ2UtYmFzZSwweDQwMDAwMDAwMCAtV2wsLWVudHJ5LF9fc3RhcnQgLVds LC1NYXAsLi90ZW1hY3MubWFwIiA7OwogICAgICopIExEX1NXSVRDSF9TWVNURU1fVEVNQUNTPSIt V2wsLXN0YWNrLDB4MDA4MDAwMDAgLVdsLC1oZWFwLDB4MDAxMDAwMDAgLVdsLC1pbWFnZS1iYXNl LDB4MDEwMDAwMDAgLVdsLC1lbnRyeSxfX3N0YXJ0IC1XbCwtTWFwLC4vdGVtYWNzLm1hcCIgOzsK ICAgZXNhYwogICA7OwoKICBvcGVuYnNkKSBMRF9TV0lUQ0hfU1lTVEVNX1RFTUFDUz0nLW5vcGll JyA7OwoKICAqKSBMRF9TV0lUQ0hfU1lTVEVNX1RFTUFDUz0gOzsKZXNhYwoKaWYgdGVzdCB4JGFj X2VuYWJsZV9wcm9maWxpbmcgIT0geCA7IHRoZW4KICBjYXNlICRvcHN5cyBpbgogICAgKmZyZWVi c2QgfCBnbnUtbGludXgpIDs7CiAgICAqKSBMRF9TV0lUQ0hfU1lTVEVNX1RFTUFDUz0iJExEX1NX SVRDSF9TWVNURU1fVEVNQUNTIC1wZyIgOzsKICBlc2FjCmZpCgpMRF9TV0lUQ0hfU1lTVEVNX1RF TUFDUz0iJExERkxBR1NfTk9DT01CUkVMT0MgJExEX1NXSVRDSF9TWVNURU1fVEVNQUNTIgoKQUNf U1VCU1QoTERfU1dJVENIX1NZU1RFTV9URU1BQ1MpCgojIyBDb21tb24gZm9yIGFsbCB3aW5kb3cg c3lzdGVtcwppZiB0ZXN0ICIkd2luZG93X3N5c3RlbSIgIT0gIm5vbmUiOyB0aGVuCiAgQUNfREVG SU5FKEhBVkVfV0lORE9XX1NZU1RFTSwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSBhIHdpbmRvdyBz eXN0ZW0uXSkKICBBQ19ERUZJTkUoUE9MTF9GT1JfSU5QVVQsIDEsIFtEZWZpbmUgaWYgeW91IHBv bGwgcGVyaW9kaWNhbGx5IHRvIGRldGVjdCBDLWcuXSkKICBXSU5ET1dfU1lTVEVNX09CSj0iZm9u dHNldC5vIGZyaW5nZS5vIGltYWdlLm8iCmZpCgpBQ19TVUJTVChXSU5ET1dfU1lTVEVNX09CSikK CkFIX1RPUChbLyogR05VIEVtYWNzIHNpdGUgY29uZmlndXJhdGlvbiB0ZW1wbGF0ZSBmaWxlLgoK Q29weXJpZ2h0IChDKSAxOTg4LCAxOTkzLTE5OTQsIDE5OTktMjAwMiwgMjAwNC0yMDE0CiAgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCgpUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgRW1h Y3MuCgpHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgoKR05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggR05VIEVtYWNzLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KCgovKiBObyBjb2RlIGlu IEVtYWNzICNpbmNsdWRlcyBjb25maWcuaCB0d2ljZSwgYnV0IHNvbWUgYml0cyBvZiBjb2RlCiAg IGludGVuZGVkIHRvIHdvcmsgd2l0aCBvdGhlciBwYWNrYWdlcyBhcyB3ZWxsIChsaWtlIGdtYWxs b2MuYykKICAgdGhpbmsgdGhleSBjYW4gaW5jbHVkZSBpdCBhcyBtYW55IHRpbWVzIGFzIHRoZXkg bGlrZS4gICovCiNpZm5kZWYgRU1BQ1NfQ09ORklHX0gKI2RlZmluZSBFTUFDU19DT05GSUdfSApd KWRubAoKQUhfQk9UVE9NKFsjaW5jbHVkZSA8Y29uZl9wb3N0Lmg+CgojZW5kaWYgLyogRU1BQ1Nf Q09ORklHX0ggKi8KCi8qCkxvY2FsIFZhcmlhYmxlczoKbW9kZTogYwpFbmQ6CiovCl0pZG5sCgoj IyMjIFJlcG9ydCBvbiB3aGF0IHdlIGRlY2lkZWQgdG8gZG8uCiMjIyMgUmVwb3J0IEdUSyBhcyBh IHRvb2xraXQsIGV2ZW4gaWYgaXQgZG9lc24ndCB1c2UgWHQuCiMjIyMgSXQgbWFrZXMgcHJpbnRp bmcgcmVzdWx0IG1vcmUgdW5kZXJzdGFuZGFibGUgYXMgdXNpbmcgR1RLIHNldHMKIyMjIyB0b29s a2l0X3Njcm9sbF9iYXJzIHRvIHllcyBieSBkZWZhdWx0LgppZiB0ZXN0ICIke0hBVkVfR1RLfSIg PSAieWVzIjsgdGhlbgogIFVTRV9YX1RPT0xLSVQ9IiRVU0VfR1RLX1RPT0xLSVQiCmZpCgppZiB0 ZXN0ICRVU0VfQUNMIC1uZSAwOyB0aGVuCiAgQUNMX1NVTU1BUlk9InllcyAkTElCX0FDTCIKZWxz ZQogIEFDTF9TVU1NQVJZPW5vCmZpCgplY2hvICIKQ29uZmlndXJlZCBmb3IgXGAke2Nhbm9uaWNh bH0nLgoKICBXaGVyZSBzaG91bGQgdGhlIGJ1aWxkIHByb2Nlc3MgZmluZCB0aGUgc291cmNlIGNv ZGU/ICAgICR7c3JjZGlyfQogIFdoYXQgY29tcGlsZXIgc2hvdWxkIGVtYWNzIGJlIGJ1aWx0IHdp dGg/ICAgICAgICAgICAgICAgJHtDQ30gJHtDRkxBR1N9CiAgU2hvdWxkIEVtYWNzIHVzZSB0aGUg R05VIHZlcnNpb24gb2YgbWFsbG9jPyAgICAgICAgICAgICAke0dOVV9NQUxMT0N9JHtHTlVfTUFM TE9DX3JlYXNvbn0KICBTaG91bGQgRW1hY3MgdXNlIGEgcmVsb2NhdGluZyBhbGxvY2F0b3IgZm9y IGJ1ZmZlcnM/ICAgICR7UkVMX0FMTE9DfQogIFNob3VsZCBFbWFjcyB1c2UgbW1hcCgyKSBmb3Ig YnVmZmVyIGFsbG9jYXRpb24/ICAgICAgICAgJHVzZV9tbWFwX2Zvcl9idWZmZXJzCiAgV2hhdCB3 aW5kb3cgc3lzdGVtIHNob3VsZCBFbWFjcyB1c2U/ICAgICAgICAgICAgICAgICAgICAke3dpbmRv d19zeXN0ZW19CiAgV2hhdCB0b29sa2l0IHNob3VsZCBFbWFjcyB1c2U/ICAgICAgICAgICAgICAg ICAgICAgICAgICAke1VTRV9YX1RPT0xLSVR9IgoKaWYgdGVzdCAtbiAiJHt4X2luY2x1ZGVzfSI7 IHRoZW4KZWNobyAiICBXaGVyZSBkbyB3ZSBmaW5kIFggV2luZG93cyBoZWFkZXIgZmlsZXM/ICAg ICAgICAgICAgICAgICR7eF9pbmNsdWRlc30iCmVsc2UKZWNobyAiICBXaGVyZSBkbyB3ZSBmaW5k IFggV2luZG93cyBoZWFkZXIgZmlsZXM/ICAgICAgICAgICAgICAgIFN0YW5kYXJkIGRpcnMiCmZp CmlmIHRlc3QgLW4gIiR7eF9saWJyYXJpZXN9IjsgdGhlbgplY2hvICIgIFdoZXJlIGRvIHdlIGZp bmQgWCBXaW5kb3dzIGxpYnJhcmllcz8gICAgICAgICAgICAgICAgICAgJHt4X2xpYnJhcmllc30i CmVsc2UKZWNobyAiICBXaGVyZSBkbyB3ZSBmaW5kIFggV2luZG93cyBsaWJyYXJpZXM/ICAgICAg ICAgICAgICAgICAgIFN0YW5kYXJkIGRpcnMiCmZpCgpvcHRzZXA9CmVtYWNzX2NvbmZpZ19mZWF0 dXJlcz0KZm9yIG9wdCBpbiBYQVczRCBYUE0gSlBFRyBUSUZGIEdJRiBQTkcgUlNWRyBJTUFHRU1B R0lDSyBTT1VORCBHUE0gREJVUyBcCiAgR0NPTkYgR1NFVFRJTkdTIE5PVElGWSBBQ0wgTElCU0VM SU5VWCBHTlVUTFMgTElCWE1MMiBGUkVFVFlQRSBNMTdOX0ZMVCBcCiAgTElCT1RGIFhGVCBaTElC OyBkbwoKICAgIGNhc2UgJG9wdCBpbgogICAgICBOT1RJRll8QUNMKSBldmFsIHZhbD1cJHske29w dH1fU1VNTUFSWX0gOzsKICAgICAgKikgZXZhbCB2YWw9XCR7SEFWRV8kb3B0fSA7OwogICAgZXNh YwogICAgdGVzdCB4IiR2YWwiID0geG5vICYmIGNvbnRpbnVlCiAgICBBU19WQVJfQVBQRU5EKFtl bWFjc19jb25maWdfZmVhdHVyZXNdLCBbIiRvcHRzZXAkb3B0Il0pCiAgICBvcHRzZXA9JyAnCmRv bmUKQUNfREVGSU5FX1VOUVVPVEVEKEVNQUNTX0NPTkZJR19GRUFUVVJFUywgIiR7ZW1hY3NfY29u ZmlnX2ZlYXR1cmVzfSIsCiAgW1N1bW1hcnkgb2Ygc29tZSBvZiB0aGUgbWFpbiBmZWF0dXJlcyBl bmFibGVkIGJ5IGNvbmZpZ3VyZS5dKQoKZWNobyAiICBEb2VzIEVtYWNzIHVzZSAtbFhhdzNkPyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9YQVczRH0iCmVjaG8gIiAgRG9l cyBFbWFjcyB1c2UgLWxYcG0/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0hB VkVfWFBNfSIKZWNobyAiICBEb2VzIEVtYWNzIHVzZSAtbGpwZWc/ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICR7SEFWRV9KUEVHfSIKZWNobyAiICBEb2VzIEVtYWNzIHVzZSAtbHRp ZmY/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9USUZGfSIKZWNobyAi ICBEb2VzIEVtYWNzIHVzZSBhIGdpZiBsaWJyYXJ5PyAgICAgICAgICAgICAgICAgICAgICAgICAg ICR7SEFWRV9HSUZ9ICRMSUJHSUYiCmVjaG8gIiAgRG9lcyBFbWFjcyB1c2UgYSBwbmcgbGlicmFy eT8gICAgICAgICAgICAgICAgICAgICAgICAgICAke0hBVkVfUE5HfSAkTElCUE5HIgplY2hvICIg IERvZXMgRW1hY3MgdXNlIC1scnN2Zy0yPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JHtIQVZFX1JTVkd9IgplY2hvICIgIERvZXMgRW1hY3MgdXNlIGltYWdlbWFnaWNrPyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX0lNQUdFTUFHSUNLfSIKCmVjaG8gIiAgRG9lcyBF bWFjcyBzdXBwb3J0IHNvdW5kPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0hBVkVf U09VTkR9IgoKZWNobyAiICBEb2VzIEVtYWNzIHVzZSAtbGdwbT8gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICR7SEFWRV9HUE19IgplY2hvICIgIERvZXMgRW1hY3MgdXNlIC1sZGJ1 cz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX0RCVVN9IgplY2hvICIg IERvZXMgRW1hY3MgdXNlIC1sZ2NvbmY/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JHtIQVZFX0dDT05GfSIKZWNobyAiICBEb2VzIEVtYWNzIHVzZSBHU2V0dGluZ3M/ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9HU0VUVElOR1N9IgplY2hvICIgIERvZXMgRW1h Y3MgdXNlIGEgZmlsZSBub3RpZmljYXRpb24gbGlicmFyeT8gICAgICAgICAgICAgJHtOT1RJRllf U1VNTUFSWX0iCmVjaG8gIiAgRG9lcyBFbWFjcyB1c2UgYWNjZXNzIGNvbnRyb2wgbGlzdHM/ICAg ICAgICAgICAgICAgICAgICAke0FDTF9TVU1NQVJZfSIKZWNobyAiICBEb2VzIEVtYWNzIHVzZSAt bHNlbGludXg/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9MSUJTRUxJTlVY fSIKZWNobyAiICBEb2VzIEVtYWNzIHVzZSAtbGdudXRscz8gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICR7SEFWRV9HTlVUTFN9IgplY2hvICIgIERvZXMgRW1hY3MgdXNlIC1seG1sMj8g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX0xJQlhNTDJ9IgoKZWNobyAi ICBEb2VzIEVtYWNzIHVzZSAtbGZyZWV0eXBlPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICR7SEFWRV9GUkVFVFlQRX0iCmVjaG8gIiAgRG9lcyBFbWFjcyB1c2UgLWxtMTduLWZsdD8gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAke0hBVkVfTTE3Tl9GTFR9IgplY2hvICIgIERvZXMg RW1hY3MgdXNlIC1sb3RmPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZF X0xJQk9URn0iCmVjaG8gIiAgRG9lcyBFbWFjcyB1c2UgLWx4ZnQ/ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAke0hBVkVfWEZUfSIKZWNobyAiICBEb2VzIEVtYWNzIGRpcmVjdGx5 IHVzZSB6bGliPyAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9aTElCfSIKCmVjaG8g IiAgRG9lcyBFbWFjcyB1c2UgdG9vbGtpdCBzY3JvbGwgYmFycz8gICAgICAgICAgICAgICAgICAg ICAke1VTRV9UT09MS0lUX1NDUk9MTF9CQVJTfSIKZWNobwoKaWYgdGVzdCAtbiAiJHtFTUFDU0RB VEF9IjsgdGhlbgogICBlY2hvICIgIEVudmlyb25tZW50IHZhcmlhYmxlIEVNQUNTREFUQSBzZXQg dG86ICAgICAgICAgICAgICAgICAgJEVNQUNTREFUQSIKZmkKaWYgdGVzdCAtbiAiJHtFTUFDU0RP Q30iOyB0aGVuCiAgIGVjaG8gIiAgRW52aXJvbm1lbnQgdmFyaWFibGUgRU1BQ1NET0Mgc2V0IHRv OiAgICAgICAgICAgICAgICAgICAkRU1BQ1NET0MiCmZpCgplY2hvCgppZiB0ZXN0ICIkSEFWRV9O UyIgPSAieWVzIjsgdGhlbgogICBlY2hvCiAgIGVjaG8gIllvdSBtdXN0IHJ1biBcIiR7TUFLRS1t YWtlfSBpbnN0YWxsXCIgaW4gb3JkZXIgdG8gdGVzdCB0aGUgYnVpbHQgYXBwbGljYXRpb24uClRo ZSBpbnN0YWxsZWQgYXBwbGljYXRpb24gd2lsbCBnbyB0byBuZXh0c3RlcC9FbWFjcy5hcHAgYW5k IGNhbiBiZQpydW4gb3IgbW92ZWQgZnJvbSB0aGVyZS4iCiAgIGlmIHRlc3QgIiRFTl9OU19TRUxG X0NPTlRBSU5FRCIgPSAieWVzIjsgdGhlbgogICAgICBlY2hvICJUaGUgYXBwbGljYXRpb24gd2ls bCBiZSBmdWxseSBzZWxmLWNvbnRhaW5lZC4iCiAgICBlbHNlCiAgICAgIGVjaG8gIlRoZSBsaXNw IHJlc291cmNlcyBmb3IgdGhlIGFwcGxpY2F0aW9uIHdpbGwgYmUgaW5zdGFsbGVkIHVuZGVyICR7 cHJlZml4fS4KWW91IG1heSBuZWVkIHRvIHJ1biBcIiR7TUFLRS1tYWtlfSBpbnN0YWxsXCIgd2l0 aCBzdWRvLiAgVGhlIGFwcGxpY2F0aW9uIHdpbGwgZmFpbAp0byBydW4gaWYgdGhlc2UgcmVzb3Vy Y2VzIGFyZSBub3QgaW5zdGFsbGVkLiIKICAgZmkKICAgZWNobwpmaQoKaWYgdGVzdCAiJHtvcHN5 c30iID0gImN5Z3dpbiI7IHRoZW4KICBjYXNlIGB1bmFtZSAtcmAgaW4KICAgIDEuNS4qKSBBQ19N U0dfV0FSTihbW2J1aWxkaW5nIEVtYWNzIG9uIEN5Z3dpbiAxLjUgaXMgbm90IHN1cHBvcnRlZC5d XSkKICAgICAgICAgICBlY2hvCgkgICA7OwogIGVzYWMKZmkKCiMgUmVtb3ZlIGFueSB0cmFpbGlu ZyBzbGFzaGVzIGluIHRoZXNlIHZhcmlhYmxlcy4KW3Rlc3QgIiR7cHJlZml4fSIgIT0gTk9ORSAm JgogIHByZWZpeD1gZWNobyAiJHtwcmVmaXh9IiB8IHNlZCAncyxcKFteL11cKS8qJCxcMSwnYAp0 ZXN0ICIke2V4ZWNfcHJlZml4fSIgIT0gTk9ORSAmJgogIGV4ZWNfcHJlZml4PWBlY2hvICIke2V4 ZWNfcHJlZml4fSIgfCBzZWQgJ3MsXChbXi9dXCkvKiQsXDEsJ2BdCgppZiB0ZXN0ICIkSEFWRV9O UyIgPSAieWVzIjsgdGhlbgogIGlmIHRlc3QgIiROU19JTVBMX0dOVVNURVAiID0geWVzOyB0aGVu CiAgICBBQ19DT05GSUdfRklMRVMoW25leHRzdGVwL0dOVXN0ZXAvRW1hY3MuYmFzZS9SZXNvdXJj ZXMvSW5mby1nbnVzdGVwLnBsaXN0Om5leHRzdGVwL3RlbXBsYXRlcy9JbmZvLWdudXN0ZXAucGxp c3QuaW4gXAogICAgICBuZXh0c3RlcC9HTlVzdGVwL0VtYWNzLmJhc2UvUmVzb3VyY2VzL0VtYWNz LmRlc2t0b3A6bmV4dHN0ZXAvdGVtcGxhdGVzL0VtYWNzLmRlc2t0b3AuaW5dKQogICAgbnNfY2hl Y2tfZmlsZT1SZXNvdXJjZXMvSW5mby1nbnVzdGVwLnBsaXN0CiAgZWxzZQogICAgQUNfQ09ORklH X0ZJTEVTKFtuZXh0c3RlcC9Db2NvYS9FbWFjcy5iYXNlL0NvbnRlbnRzL0luZm8ucGxpc3Q6bmV4 dHN0ZXAvdGVtcGxhdGVzL0luZm8ucGxpc3QuaW4gXAogICAgICBuZXh0c3RlcC9Db2NvYS9FbWFj cy5iYXNlL0NvbnRlbnRzL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0luZm9QbGlzdC5zdHJpbmdz Om5leHRzdGVwL3RlbXBsYXRlcy9JbmZvUGxpc3Quc3RyaW5ncy5pbl0pCiAgICBuc19jaGVja19m aWxlPUNvbnRlbnRzL0luZm8ucGxpc3QKICBmaQogIEFDX1NVQlNUKG5zX2NoZWNrX2ZpbGUpCmZp CgpkbmwgT2J2aW91c2x5IHRoZXJlIGlzIGR1cGxpY2F0aW9uIGhlcmUgd3J0ICRTVUJESVJfTUFL RUZJTEVTLgpkbmwgWW91IF9jYW5fIHVzZSB0aGF0IHZhcmlhYmxlIGluIEFDX0NPTkZJR19GSUxF Uywgc28gbG9uZyBhcyBhbnkgZGlyZWN0b3J5CmRubCB1c2luZyBhdXRvbWFrZSAoaWUgbGliLykg aXMgZXhwbGljaXRseSBsaXN0ZWQgYW5kIG5vdCAiaGlkZGVuIiBpbiBhIHZhcmlhYmxlCmRubCAo ZWxzZSB5b3UgZ2V0ICJubyBgTWFrZWZpbGUuYW0nIGZvdW5kIGZvciBhbnkgY29uZmlndXJlIG91 dHB1dCIpLgpkbmwgVGhpcyB3aWxsIHdvcmssIGJ1dCB5b3UgZ2V0IGEgY29uZmlnLnN0YXR1cyB0 aGF0IGlzIG5vdCBxdWl0ZSByaWdodApkbmwgKHNlZSBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNo aXZlL2h0bWwvYnVnLWF1dG9jb25mLzIwMDgtMDgvbXNnMDAwMjguaHRtbCkuCmRubCBUaGF0IGRv ZXNuJ3QgaGF2ZSBhbnkgb2J2aW91cyBjb25zZXF1ZW5jZXMgZm9yIEVtYWNzLCBidXQgb24gdGhl IHdob2xlCmRubCBpdCBzZWVtcyBiZXR0ZXIgdG8ganVzdCBsaXZlIHdpdGggdGhlIGR1cGxpY2F0 aW9uLgpTVUJESVJfTUFLRUZJTEVTPSJsaWIvTWFrZWZpbGUgbGliLXNyYy9NYWtlZmlsZSBvbGRY TWVudS9NYWtlZmlsZSBkb2MvZW1hY3MvTWFrZWZpbGUgZG9jL21pc2MvTWFrZWZpbGUgZG9jL2xp c3BpbnRyby9NYWtlZmlsZSBkb2MvbGlzcHJlZi9NYWtlZmlsZSBzcmMvTWFrZWZpbGUgbHdsaWIv TWFrZWZpbGUgbGlzcC9NYWtlZmlsZSBsZWltL01ha2VmaWxlIG5leHRzdGVwL01ha2VmaWxlIG50 L01ha2VmaWxlIgoKQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZSBsaWIvTWFrZWZpbGUgbGliLXNy Yy9NYWtlZmlsZSBvbGRYTWVudS9NYWtlZmlsZSBcCiAgICAgICBkb2MvZW1hY3MvTWFrZWZpbGUg ZG9jL21pc2MvTWFrZWZpbGUgZG9jL2xpc3BpbnRyby9NYWtlZmlsZSBcCiAgICAgICBkb2MvbGlz cHJlZi9NYWtlZmlsZSBzcmMvTWFrZWZpbGUgbHdsaWIvTWFrZWZpbGUgbGlzcC9NYWtlZmlsZSBc CiAgICAgICBsZWltL01ha2VmaWxlIG5leHRzdGVwL01ha2VmaWxlIG50L01ha2VmaWxlXSkKCmRu bCB0ZXN0LyBpcyBub3QgcHJlc2VudCBpbiByZWxlYXNlIHRhcmZpbGVzLgpvcHRfbWFrZWZpbGU9 dGVzdC9hdXRvbWF0ZWQvTWFrZWZpbGUKCmlmIHRlc3QgLWYgIiRzcmNkaXIvJG9wdF9tYWtlZmls ZS5pbiI7IHRoZW4KICBTVUJESVJfTUFLRUZJTEVTPSIkU1VCRElSX01BS0VGSUxFUyAkb3B0X21h a2VmaWxlIgogIGRubCBBZ2FpbiwgaXQncyBiZXN0IG5vdCB0byB1c2UgYSB2YXJpYWJsZS4gIFRo b3VnaCB5b3UgY2FuIGFkZAogIGRubCAiLCBbXSwgW29wdF9tYWtlZmlsZT0nJG9wdF9tYWtlZmls ZSddIiBhbmQgaXQgc2hvdWxkIHdvcmsuCiAgQUNfQ09ORklHX0ZJTEVTKFt0ZXN0L2F1dG9tYXRl ZC9NYWtlZmlsZV0pCmZpCgoKZG5sIFRoZSBhZG1pbi8gZGlyZWN0b3J5IHVzZWQgdG8gYmUgZXhj bHVkZWQgZnJvbSB0YXJmaWxlcy4KaWYgdGVzdCAtZCAkc3JjZGlyL2FkbWluOyB0aGVuCiAgU1VC RElSX01BS0VGSUxFUz0iJFNVQkRJUl9NQUtFRklMRVMgYWRtaW4vdW5pZGF0YS9NYWtlZmlsZSBh ZG1pbi9ncmFtbWFycy9NYWtlZmlsZSIKICBBQ19DT05GSUdfRklMRVMoW2FkbWluL3VuaWRhdGEv TWFrZWZpbGVdKQogIEFDX0NPTkZJR19GSUxFUyhbYWRtaW4vZ3JhbW1hcnMvTWFrZWZpbGVdKQpm aSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRubCAtZCBhZG1pbgoKClNVQkRJUl9NQUtF RklMRVNfSU49YGVjaG8gIiAke1NVQkRJUl9NQUtFRklMRVN9IiB8IHNlZCAtZSAnc3wgfCAkKHNy Y2RpcikvfGcnIC1lICdzfE1ha2VmaWxlfE1ha2VmaWxlLmlufGcnYAoKQUNfU1VCU1QoU1VCRElS X01BS0VGSUxFU19JTikKCmRubCBZb3UgbWlnaHQgd29uZGVyIChJIGRpZCkgd2h5IGVwYXRocy5o IGlzIGdlbmVyYXRlZCBieSBydW5uaW5nIG1ha2UsCmRubCByYXRoZXIgdGhhbiBqdXN0IGxldHRp bmcgY29uZmlndXJlIGdlbmVyYXRlIGl0IGZyb20gZXBhdGhzLmluLgpkbmwgT25lIHJlYXNvbiBp cyB0aGF0IHRoZSB2YXJpb3VzIHBhdGhzIGFyZSBub3QgZnVsbHkgZXhwYW5kZWQgKHNlZSBhYm92 ZSk7CmRubCBlZyBnYW1lZGlyPSR7cHJlZml4fS92YXIvZ2FtZXMvZW1hY3MuCmRubCBTZWNvbmRs eSwgdGhlIEdOVSBDb2Rpbmcgc3RhbmRhcmRzIHJlcXVpcmUgdGhhdCBvbmUgc2hvdWxkIGJlIGFi bGUKZG5sIHRvIHJ1biBgbWFrZSBwcmVmaXg9L3NvbWUvd2hlcmUvZWxzZScgYW5kIG92ZXJyaWRl IHRoZSB2YWx1ZXMgc2V0CmRubCBieSBjb25maWd1cmUuICBUaGlzIGFsc28gZXhwbGFpbnMgdGhl IGBtb3ZlLWlmLWNoYW5nZScgdGVzdCBhbmQKZG5sIHRoZSB1c2Ugb2YgZm9yY2UgaW4gdGhlIGBl cGF0aHMtZm9yY2UnIHJ1bGUgaW4gTWFrZWZpbGUuaW4uCkFDX0NPTkZJR19DT01NQU5EUyhbc3Jj L2VwYXRocy5oXSwgWwppZiB0ZXN0ICIke29wc3lzfSIgPSAibWluZ3ciOyB0aGVuCiAgJHtNQUtF LW1ha2V9IE1BS0VGSUxFX05BTUU9ZG8tbm90LW1ha2UtTWFrZWZpbGUgZXBhdGhzLWZvcmNlLXcz MgplbHNlCiAgJHtNQUtFLW1ha2V9IE1BS0VGSUxFX05BTUU9ZG8tbm90LW1ha2UtTWFrZWZpbGUg ZXBhdGhzLWZvcmNlCmZpIHx8IEFDX01TR19FUlJPUihbJ3NyYy9lcGF0aHMuaCcgY291bGQgbm90 IGJlIG1hZGUuXSkKXSwgW0dDQz0iJEdDQyIgQ1BQRkxBR1M9IiRDUFBGTEFHUyIgb3BzeXM9IiRv cHN5cyJdKQoKZG5sIE5CIHdlIGhhdmUgdG8gY2hlYXQgYW5kIHVzZSB0aGUgYWNfLi4uIHZlcnNp b24gYmVjYXVzZSBhYnNfdG9wX3NyY2RpcgpkbmwgaXMgbm90IHlldCBzZXQsIHNpZ2guICBPciB3 ZSBjb3VsZCB1c2UgLi4vJHNyY2Rpci9zcmMvLmdkYmluaXQsCmRubCBvciBhIHN5bWxpbms/CkFD X0NPTkZJR19DT01NQU5EUyhbc3JjLy5nZGJpbml0XSwgWwppZiB0ZXN0ICEgLWYgc3JjLy5nZGJp bml0ICYmIHRlc3QgLWYgIiRzcmNkaXIvc3JjLy5nZGJpbml0IjsgdGhlbgogIGVjaG8gInNvdXJj ZSAkYWNfYWJzX3RvcF9zcmNkaXIvc3JjLy5nZGJpbml0IiA+IHNyYy8uZ2RiaW5pdApmaQpdKQoK QUNfT1VUUFVUCgp0ZXN0ICIkTUFLRSIgPSBtYWtlIHx8IEFDX01TR19OT1RJQ0UoW05vdyB5b3Ug Y2FuIHJ1biAnJE1BS0UnLl0pCg== --001a11c359a08282d605010c98b1 Content-Type: application/octet-stream; name="Makefile.in" Content-Disposition: attachment; filename="Makefile.in" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hz2hhe1x1 IyMjIEBjb25maWd1cmVfaW5wdXRACgojIENvcHlyaWdodCAoQykgMTk4NSwgMTk4Ny0xOTg4LCAx OTkzLTE5OTUsIDE5OTktMjAxNAojICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCgoj IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBFbWFjcy4KCiMgR05VIEVtYWNzIGlzIGZyZWUgc29m dHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KCiMgR05V IEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIEdOVSBFbWFjcy4gIElmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KCgojIE5vdGUgdGhhdCB0aGlzIGZpbGUgaXMg ZWRpdGVkIGJ5IG1zZG9zL3NlZDF2Mi5pbnAgZm9yIE1TRE9TLiAgVGhhdAojIHNjcmlwdCBtYXkg bmVlZCBtb2RpZnlpbmcgaW4gc3luYyB3aXRoIGNoYW5nZXMgbWFkZSBoZXJlLiAgVHJ5IHRvCiMg YXZvaWQgc2hlbGwtaXNtIGJlY2F1c2UgdGhlIERPUyBidWlsZCBoYXMgdG8gdXNlIHRoZSBET1Mg c2hlbGwuCgpTSEVMTCA9IEBTSEVMTEAKCiMgSGVyZSBhcmUgdGhlIHRoaW5ncyB0aGF0IHdlIGV4 cGVjdCAuLi9jb25maWd1cmUgdG8gZWRpdC4KIyBXZSB1c2UgJChzcmNkaXIpIGV4cGxpY2l0bHkg aW4gZGVwZW5kZW5jaWVzIHNvIGFzIG5vdCB0byBkZXBlbmQgb24gVlBBVEguCnNyY2RpciA9IEBz cmNkaXJACnRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKIyBNaW5HVyBDUFBGTEFHUyBtYXkgdXNl IHRoaXMuCmFic190b3Bfc3JjZGlyPUBhYnNfdG9wX3NyY2RpckAKbnRzb3VyY2UgPSAkKHRvcF9z cmNkaXIpL250ClZQQVRIID0gJChzcmNkaXIpCkNDID0gQENDQApXSU5EUkVTID0gQFdJTkRSRVNA CkNGTEFHUyA9IEBDRkxBR1NACkNQUEZMQUdTID0gQENQUEZMQUdTQApMREZMQUdTID0gQExERkxB R1NACkVYRUVYVCA9IEBFWEVFWFRACnZlcnNpb24gPSBAdmVyc2lvbkAKIyBTdWJzdGl0dXRlIGFu IGFzc2lnbm1lbnQgZm9yIHRoZSBNQUtFIHZhcmlhYmxlLCBiZWNhdXNlCiMgQlNEIGRvZXNuJ3Qg aGF2ZSBpdCBhcyBhIGRlZmF1bHQuCkBTRVRfTUFLRUAKTUtESVJfUCA9IEBNS0RJUl9QQAojIERv bid0IHVzZSBMSUJTLiAgY29uZmlndXJlIHB1dHMgc3R1ZmYgaW4gaXQgdGhhdCBlaXRoZXIgc2hv dWxkbid0IGJlCiMgbGlua2VkIHdpdGggRW1hY3Mgb3IgaXMgZHVwbGljYXRlZCBieSB0aGUgb3Ro ZXIgc3R1ZmYgYmVsb3cuCiMgTElCUyA9IEBMSUJTQApMSUJPQkpTID0gQExJQk9CSlNACgpsaXNw c291cmNlID0gJCh0b3Bfc3JjZGlyKS9saXNwCmxpYiA9IC4uL2xpYgpsaWJzcmMgPSAuLi9saWIt c3JjCmV0YyA9IC4uL2V0YwpsZWltZGlyID0gJHtsaXNwc291cmNlfS9sZWltCm9sZFhNZW51ZGly ID0gLi4vb2xkWE1lbnUKbHdsaWJkaXIgPSAuLi9sd2xpYgoKIyBDb25maWd1cmF0aW9uIGZpbGVz IGZvciAubyBmaWxlcyB0byBkZXBlbmQgb24uCmNvbmZpZ19oID0gY29uZmlnLmggJChzcmNkaXIp L2NvbmZfcG9zdC5oCgpib290c3RyYXBfZXhlID0gLi4vc3JjL2Jvb3RzdHJhcC1lbWFjcyQoRVhF RVhUKQoKIyMgbnMtYXBwIGlmIEhBVkVfTlMsIGVsc2UgZW1wdHkuCk9USEVSX0ZJTEVTID0gQE9U SEVSX0ZJTEVTQAoKIyMgRmxhZ3MgdG8gcGFzcyBmb3IgcHJvZmlsaW5nIGJ1aWxkcwpQUk9GSUxJ TkdfQ0ZMQUdTID0gQFBST0ZJTElOR19DRkxBR1NACgojIyBGbGFncyB0byBwYXNzIHRvIHRoZSBj b21waWxlciB0byBlbmFibGUgYnVpbGQgd2FybmluZ3MKV0FSTl9DRkxBR1MgPSBAV0FSTl9DRkxB R1NACldFUlJPUl9DRkxBR1MgPSBAV0VSUk9SX0NGTEFHU0AKCiMjIE1hY2hpbmUtc3BlY2lmaWMg Q0ZMQUdTLgpDX1NXSVRDSF9NQUNISU5FPUBDX1NXSVRDSF9NQUNISU5FQAojIyBTeXN0ZW0tc3Bl Y2lmaWMgQ0ZMQUdTLgpDX1NXSVRDSF9TWVNURU09QENfU1dJVENIX1NZU1RFTUAKCkdOVVNURVBf Q0ZMQUdTPUBHTlVTVEVQX0NGTEFHU0AKUE5HX0NGTEFHUz1AUE5HX0NGTEFHU0AKCiMjIERlZmlu ZSBDX1NXSVRDSF9YX1NJVEUgdG8gY29udGFpbiBhbnkgc3BlY2lhbCBmbGFncyB5b3VyIGNvbXBp bGVyCiMjIG1heSBuZWVkIHRvIGRlYWwgd2l0aCBYIFdpbmRvd3MuICBGb3IgaW5zdGFuY2UsIGlm IHlvdSd2ZSBkZWZpbmVkCiMjIEhBVkVfWF9XSU5ET1dTIGFuZCB5b3VyIFggaW5jbHVkZSBmaWxl cyBhcmVuJ3QgaW4gYSBwbGFjZSB0aGF0IHlvdXIKIyMgY29tcGlsZXIgY2FuIGZpbmQgb24gaXRz IG93biwgeW91IG1pZ2h0IHdhbnQgdG8gYWRkICItSS8uLi4iIG9yCiMjIHNvbWV0aGluZyBzaW1p bGFyLiAgVGhpcyBpcyBub3JtYWxseSBzZXQgYnkgY29uZmlndXJlLgpDX1NXSVRDSF9YX1NJVEU9 QENfU1dJVENIX1hfU0lURUAKCiMjIERlZmluZSBMRF9TV0lUQ0hfWF9TSVRFIHRvIGNvbnRhaW4g YW55IHNwZWNpYWwgZmxhZ3MgeW91ciBsb2FkZXIKIyMgbWF5IG5lZWQgdG8gZGVhbCB3aXRoIFgg V2luZG93cy4gIEZvciBpbnN0YW5jZSwgaWYgeW91ciBYIGxpYnJhcmllcwojIyBhcmVuJ3QgaW4g YSBwbGFjZSB0aGF0IHlvdXIgbG9hZGVyIGNhbiBmaW5kIG9uIGl0cyBvd24sIHlvdSBtaWdodAoj IyB3YW50IHRvIGFkZCAiLUwvLi4uIiBvciBzb21ldGhpbmcgc2ltaWxhci4gIE9ubHkgdXNlZCBp ZgojIyBIQVZFX1hfV0lORE9XUy4KIyMgRklYTUU/IGNvbmZpZ3VyZSBzZXRzIGEgdmFsdWUgZm9y IHRoaXMsIGJ1dCBpdCBoYXMgbmV2ZXIgYmVlbgojIyBzdWJzdGl0dXRlZCBpbiB0aGlzIG9yIGFu eSBvdGhlciBNYWtlZmlsZS4gQ2YgQ19TV0lUQ0hfWF9TSVRFLgpMRF9TV0lUQ0hfWF9TSVRFPQoK IyMgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIExEX1NXSVRDSF9TWVNURU0uCiMjIElmIG5lZWRlZCwg YSAtcnBhdGggb3B0aW9uIHRoYXQgc2F5cyB3aGVyZSB0byBmaW5kIFggd2luZG93cyBhdCBydW4g dGltZS4KTERfU1dJVENIX1hfU0lURV9SUEFUSD1ATERfU1dJVENIX1hfU0lURV9SUEFUSEAKCiMj IFN5c3RlbS1zcGVjaWZpYyBMREZMQUdTLgpMRF9TV0lUQ0hfU1lTVEVNPUBMRF9TV0lUQ0hfU1lT VEVNQAoKIyMgVGhpcyBob2xkcyBhbnkgc3BlY2lhbCBvcHRpb25zIGZvciBsaW5raW5nIHRlbWFj cyBvbmx5IChpLmUuLCBub3QKIyMgdXNlZCBieSBjb25maWd1cmUpLgpMRF9TV0lUQ0hfU1lTVEVN X1RFTUFDUz1ATERfU1dJVENIX1NZU1RFTV9URU1BQ1NACgojIyBGbGFncyB0byBwYXNzIHRvIGxk IG9ubHkgZm9yIHRlbWFjcy4KVEVNQUNTX0xERkxBR1MgPSAkKExEX1NXSVRDSF9TWVNURU0pICQo TERfU1dJVENIX1NZU1RFTV9URU1BQ1MpCgojIyBJZiBhdmFpbGFibGUsIHRoZSBuYW1lcyBvZiB0 aGUgcGF4Y3RsIGFuZCBzZXRmYXR0ciBwcm9ncmFtcy4KIyMgT24gZ3JzZWN1cml0eS9QYVggc3lz dGVtcywgdW5leGVjIHdpbGwgZmFpbCBkdWUgdG8gYSBnYXAgYmV0d2VlbgojIyB0aGUgYnNzIHNl Y3Rpb24gYW5kIHRoZSBoZWFwLiAgT2xkZXIgdmVyc2lvbnMgbmVlZCBwYXhjdGwgdG8gd29yawoj IyBhcm91bmQgdGhpcywgbmV3ZXIgb25lcyBzZXRmYXR0ci4gIFNlZSBCdWcjMTEzOTggYW5kIEJ1 ZyMxNjM0My4KUEFYQ1RMID0gQFBBWENUTEAKU0VURkFUVFIgPSBAU0VURkFUVFJACgojIyBTb21l IHN5c3RlbXMgZGVmaW5lIHRoaXMgdG8gcmVxdWVzdCBzcGVjaWFsIGxpYnJhcmllcy4KTElCU19T WVNURU09QExJQlNfU1lTVEVNQAoKIyMgLWxtLCBvciBlbXB0eS4KTElCX01BVEg9QExJQl9NQVRI QAoKIyMgLWxwdGhyZWFkLCBvciBlbXB0eS4KTElCX1BUSFJFQUQ9QExJQl9QVEhSRUFEQAoKTElC SU1BR0U9QExJQlRJRkZAIEBMSUJKUEVHQCBATElCUE5HQCBATElCR0lGQCBATElCWFBNQAoKWEZU X0xJQlM9QFhGVF9MSUJTQApMSUJYX0VYVFJBPS1sWDExICQoWEZUX0xJQlMpCgpGT05UQ09ORklH X0NGTEFHUyA9IEBGT05UQ09ORklHX0NGTEFHU0AKRk9OVENPTkZJR19MSUJTID0gQEZPTlRDT05G SUdfTElCU0AKRlJFRVRZUEVfQ0ZMQUdTID0gQEZSRUVUWVBFX0NGTEFHU0AKRlJFRVRZUEVfTElC UyA9IEBGUkVFVFlQRV9MSUJTQApMSUJPVEZfQ0ZMQUdTID0gQExJQk9URl9DRkxBR1NACkxJQk9U Rl9MSUJTID0gQExJQk9URl9MSUJTQApNMTdOX0ZMVF9DRkxBR1MgPSBATTE3Tl9GTFRfQ0ZMQUdT QApNMTdOX0ZMVF9MSUJTID0gQE0xN05fRkxUX0xJQlNACgpMSUJfQUNMPUBMSUJfQUNMQApMSUJf Q0xPQ0tfR0VUVElNRT1ATElCX0NMT0NLX0dFVFRJTUVACkxJQl9FQUNDRVNTPUBMSUJfRUFDQ0VT U0AKTElCX0ZEQVRBU1lOQz1ATElCX0ZEQVRBU1lOQ0AKTElCX1RJTUVSX1RJTUU9QExJQl9USU1F Ul9USU1FQAoKREJVU19DRkxBR1MgPSBAREJVU19DRkxBR1NACkRCVVNfTElCUyA9IEBEQlVTX0xJ QlNACiMjIGRidXNiaW5kLm8gaWYgSEFWRV9EQlVTLCBlbHNlIGVtcHR5LgpEQlVTX09CSiA9IEBE QlVTX09CSkAKCkxJQl9FWEVDSU5GTz1ATElCX0VYRUNJTkZPQAoKU0VUVElOR1NfQ0ZMQUdTID0g QFNFVFRJTkdTX0NGTEFHU0AKU0VUVElOR1NfTElCUyA9IEBTRVRUSU5HU19MSUJTQAoKIyMgZ3Rr dXRpbC5vIGlmIFVTRV9HVEssIGVsc2UgZW1wdHkuCkdUS19PQko9QEdUS19PQkpACgojIyBnZmls ZW5vdGlmeS5vIGlmIEhBVkVfR0ZJTEVOT1RJRlkuCiMjIGlub3RpZnkubyBpZiBIQVZFX0lOT1RJ RlkuCiMjIHczMm5vdGlmeS5vIGlmIEhBVkVfVzMyTk9USUZZLgpOT1RJRllfT0JKID0gQE5PVElG WV9PQkpACkdGSUxFTk9USUZZX0NGTEFHUyA9IEBHRklMRU5PVElGWV9DRkxBR1NACkdGSUxFTk9U SUZZX0xJQlMgPSBAR0ZJTEVOT1RJRllfTElCU0AKCiMjIC1sdGVybWNhcCwgb3IgLWxuY3Vyc2Vz LCBvciAtbGN1cnNlcywgb3IgIiIuCkxJQlNfVEVSTUNBUD1ATElCU19URVJNQ0FQQAojIyB0ZXJt aW5mby5vIGlmIFRFUk1JTkZPLCBlbHNlIHRwYXJhbS5vLgpURVJNQ0FQX09CSj1AVEVSTUNBUF9P QkpACgpMSUJYTVU9QExJQlhNVUAKCkxJQlhTTT1ATElCWFNNQAoKTElCWFRSNj1ATElCWFRSNkAK CiMjICQoTElCWE1VKSAtbFh0ICQoTElCWFRSNikgLWxYZXh0IGlmIFVTRV9YX1RPT0xLSVQsIGVs c2UgJChMSUJYU00pLgojIyBPbmx5IHVzZWQgaWYgSEFWRV9YX1dJTkRPV1MuCkxJQlhUX09USEVS PUBMSUJYVF9PVEhFUkAKCiMjIElmICFIQVZFX1gxMSB8fCBVU0VfR1RLLCBlbXB0eS4KIyMgRWxz ZSBpZiBVU0VfWF9UT09MS0lULCAkKGx3bGliZGlyKS9saWJsdy5hLgojIyBFbHNlICQob2xkWE1l bnVkaXIpL2xpYlhNZW51MTEuYS4KTElCWE1FTlU9QExJQlhNRU5VQAoKIyMgeG1lbnUubyBpZiBI QVZFX1hfV0lORE9XUywgZWxzZSBlbXB0eS4KWE1FTlVfT0JKPUBYTUVOVV9PQkpACiMjIHh0ZXJt Lm8geGZucy5vIHhzZWxlY3QubyB4cmRiLm8geHNtZm5zLm8geHNldHRpbmdzLm8gaWYKIyMgSEFW RV9YX1dJTkRPV1MsIGVsc2UgZW1wdHkuClhPQko9QFhPQkpACgojIHhnc2VsZWN0Lm8gaWYgbGlu a2luZyB3aXRoIEdMaWIsIGVsc2UgZW1wdHkKWEdTRUxPQko9QFhHU0VMT0JKQAoKVE9PTEtJVF9M SUJXPUBUT09MS0lUX0xJQldACgojIyBPbmx5IHVzZWQgaWYgSEFWRV9YMTEsIGluIExJQlhfT1RI RVIuCkxJQlhUPSQoVE9PTEtJVF9MSUJXKSAkKExJQlhUX09USEVSKQoKIyMgSWYgSEFWRV9YMTEs ICQoTElCWFQpICQoTElCWF9FWFRSQSksIGVsc2UgZW1wdHkuCkxJQlhfT1RIRVI9QExJQlhfT1RI RVJACgojIyBMSUJYTUVOVSBpcyBlbXB0eSBpZiAhSEFWRV9YX1dJTkRPV1MuCiMjIExEX1NXSVRD SF9YX1NJVEUgc2hvdWxkIG5vdCBiZSB1c2VkIGlmIG5vdCB1c2luZyBYLCBidXQgbm90aGluZwoj IyBzZXRzIGl0IGF0IHByZXNlbnQsIGFuZCBpZiBzb21ldGhpbmcgZXZlciBkb2VzLCBpdCBzaG91 bGQgYmUKIyMgY29uZmlndXJlLCB3aGljaCBzaG91bGQgc2V0IGl0IHRvIG5pbCBpbiBub24tWCBi dWlsZHMuCkxJQlhfQkFTRT0kKExJQlhNRU5VKSAkKExEX1NXSVRDSF9YX1NJVEUpCgojIyBPbmx5 IHVzZWQgZm9yIEdOVXN0ZXAKTElCU19HTlVTVEVQPUBMSUJTX0dOVVNURVBACgpMSUJTT1VORD0g QExJQlNPVU5EQApDRkxBR1NfU09VTkQ9IEBDRkxBR1NfU09VTkRACgpSU1ZHX0xJQlM9IEBSU1ZH X0xJQlNAClJTVkdfQ0ZMQUdTPSBAUlNWR19DRkxBR1NACgpJTUFHRU1BR0lDS19MSUJTPSBASU1B R0VNQUdJQ0tfTElCU0AKSU1BR0VNQUdJQ0tfQ0ZMQUdTPSBASU1BR0VNQUdJQ0tfQ0ZMQUdTQAoK TElCWE1MMl9MSUJTID0gQExJQlhNTDJfTElCU0AKTElCWE1MMl9DRkxBR1MgPSBATElCWE1MMl9D RkxBR1NACgpMSUJaID0gQExJQlpACgpYUkFORFJfTElCUyA9IEBYUkFORFJfTElCU0AKWFJBTkRS X0NGTEFHUyA9IEBYUkFORFJfQ0ZMQUdTQAoKWElORVJBTUFfTElCUyA9IEBYSU5FUkFNQV9MSUJT QApYSU5FUkFNQV9DRkxBR1MgPSBAWElORVJBTUFfQ0ZMQUdTQAoKWEZJWEVTX0xJQlMgPSBAWEZJ WEVTX0xJQlNAClhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKCiMjIHdpZGdldC5vIGlm IFVTRV9YX1RPT0xLSVQsIG90aGVyd2lzZSBlbXB0eS4KV0lER0VUX09CSj1AV0lER0VUX09CSkAK CiMjIHNoZWFwLm8gaWYgQ1lHV0lOLCBvdGhlcndpc2UgZW1wdHkuCkNZR1dJTl9PQko9QENZR1dJ Tl9PQkpACgojIyBmb250c2V0Lm8gZnJpbmdlLm8gaW1hZ2UubyBpZiB3ZSBoYXZlIGFueSB3aW5k b3cgc3lzdGVtCldJTkRPV19TWVNURU1fT0JKPUBXSU5ET1dfU1lTVEVNX09CSkAKCiMjIGRvc2Zu cy5vIG1zZG9zLm8gdzE2c2VsZWN0Lm8gaWYgTVNET1MuCk1TRE9TX09CSiA9CiMjIHcxNnNlbGVj dC5vIHRlcm1jYXAubyBpZiBNU0RPUyAmJiBIQVZFX1hfV0lORE9XUy4KTVNET1NfWF9PQkogPQoK TlNfT0JKPUBOU19PQkpACiMjIG5zdGVybS5vIG5zZm5zLm8gbnNtZW51Lm8gbnNzZWxlY3QubyBu c2ltYWdlLm8gbnNmb250Lm8gbWFjZm9udC5vIGlmIEhBVkVfTlMuCk5TX09CSkNfT0JKPUBOU19P QkpDX09CSkAKIyMgT25seSBzZXQgaWYgTlNfSU1QTF9HTlVTVEVQLgpHTlVfT0JKQ19DRkxBR1M9 QEdOVV9PQkpDX0NGTEFHU0AKIyMgdzMyZm5zLm8gdzMybWVudS5jIHczMnJlZy5vIGZyaW5nZS5v IGZvbnRzZXQubyB3MzJmb250Lm8gdzMydGVybS5vCiMjIHczMnhmbnMubyB3MzJzZWxlY3QubyBp bWFnZS5vIHczMnVuaXNjcmliZS5vIGlmIEhBVkVfVzMyLCBlbHNlCiMjIGVtcHR5LgpXMzJfT0JK PUBXMzJfT0JKQAojIyAtbGtlcm5lbDMyIC1sdXNlcjMyIC1sZ2RpMzIgLWxvbGUzMiAtbGNvbWRs ZzMyIGx1c3AxMCAtbGNvbWN0bDMyCiMjIC0tbHdpbnNwb29sIGlmIEhBVkVfVzMyLCBlbHNlIGVt cHR5LgpXMzJfTElCUz1AVzMyX0xJQlNACgojIyBlbWFjcy5yZXMgaWYgSEFWRV9XMzIKRU1BQ1NS RVMgPSBARU1BQ1NSRVNACiMjIGVtYWNzLSoubWFuaWZlc3QgaWYgSEFWRV9XMzIKRU1BQ1NfTUFO SUZFU1QgPSBARU1BQ1NfTUFOSUZFU1RACiMjIElmIEhBVkVfVzMyLCBjb21waWxlciBhcmd1bWVu dHMgZm9yIGluY2x1ZGluZwojIyB0aGUgcmVzb3VyY2UgZmlsZSBpbiB0aGUgYmluYXJ5LgojIyBD eWd3aW46IC1XbCxlbWFjcy5yZXMKIyMgTWluR1c6IGVtYWNzLnJlcwpXMzJfUkVTX0xJTks9QFcz Ml9SRVNfTElOS0AKCiMjIEVtcHR5IGlmICFIQVZFX1hfV0lORE9XUwojIyB4Zm9udC5vIGZ0Zm9u dC5vIHhmdGZvbnQubyBmdHhmb250Lm8gaWYgSEFWRV9YRlQKIyMgeGZvbnQubyBmdGZvbnQubyBm dHhmb250Lm8gaWYgSEFWRV9GUkVFVFlQRQojIyBlbHNlIHhmb250Lm8KRk9OVF9PQko9QEZPTlRf T0JKQAoKIyMgRW1wdHkgZm9yIE1pbkdXLCBjbS5vIGZvciB0aGUgcmVzdC4KQ01fT0JKPUBDTV9P QkpACgpMSUJHUE0gPSBATElCR1BNQAoKIyMgLWxyZXNvbHYsIG9yIGVtcHR5LgpMSUJSRVNPTFYg PSBATElCUkVTT0xWQAoKTElCU0VMSU5VWF9MSUJTID0gQExJQlNFTElOVVhfTElCU0AKCkxJQkdO VVRMU19MSUJTID0gQExJQkdOVVRMU19MSUJTQApMSUJHTlVUTFNfQ0ZMQUdTID0gQExJQkdOVVRM U19DRkxBR1NACgpJTlRFUlZBTFNfSCA9IGRpc3BleHRlcm4uaCBpbnRlcnZhbHMuaCBjb21wb3Np dGUuaAoKR0VUTE9BREFWR19MSUJTID0gQEdFVExPQURBVkdfTElCU0AKClJVTl9URU1BQ1MgPSAu L3RlbWFjcwoKIyMgU3RhdGljIGhlYXAgc2l6ZSBmb3IgdGVtYWNzIG9uIE1pbkdXLgpFTUFDU19I RUFQU0laRSA9IEBFTUFDU19IRUFQU0laRUAKClVORVhFQ19PQkogPSBAVU5FWEVDX09CSkAKCkNB Tk5PVF9EVU1QPUBDQU5OT1RfRFVNUEAKCkRFUERJUj1kZXBzCiMjIC1NTUQgLU1GICQoREVQRElS KS8kKi5kIGlmIEFVVE9fREVQRU5EOyBlbHNlIGVtcHR5LgpERVBGTEFHUz1AREVQRkxBR1NACiMj ICR7TUtESVJfUH0gJHtERVBESVJ9IChpZiBBVVRPX0RFUEVORCk7IGVsc2UgJzonLgpNS0RFUERJ Uj1ATUtERVBESVJACgojIyBETyBOT1QgdXNlIC1SLiAgVGhlcmUgaXMgYSBzcGVjaWFsIGhhY2sg ZGVzY3JpYmVkIGluIGxhc3RmaWxlLmMKIyMgd2hpY2ggaXMgdXNlZCBpbnN0ZWFkLiAgU29tZSBp bml0aWFsaXplZCBkYXRhIGFyZWFzIGFyZSBtb2RpZmllZAojIyBhdCBpbml0aWFsIHN0YXJ0dXAs IHRoZW4gbGFiZWxlZCBhcyBwYXJ0IG9mIHRoZSB0ZXh0IGFyZWEgd2hlbgojIyBFbWFjcyBpcyBk dW1wZWQgZm9yIHRoZSBmaXJzdCB0aW1lLCBhbmQgbmV2ZXIgY2hhbmdlZCBhZ2Fpbi4KIyMKIyMg LURlbWFjcyBpcyBuZWVkZWQgdG8gbWFrZSBzb21lIGZpbGVzIHByb2R1Y2UgdGhlIGNvcnJlY3Qg dmVyc2lvbgojIyBmb3IgdXNlIGluIEVtYWNzLgojIwojIyBGSVhNRT8gTVlDUFBGTEFHUyBvbmx5 IHJlZmVyZW5jZWQgaW4gZXRjL0RFQlVHLgpBTExfQ0ZMQUdTPS1EZW1hY3MgJChNWUNQUEZMQUdT KSAtSS4gLUkkKHNyY2RpcikgXAogIC1JJChsaWIpIC1JJCh0b3Bfc3JjZGlyKS9saWIgXAogICQo Q19TV0lUQ0hfTUFDSElORSkgJChDX1NXSVRDSF9TWVNURU0pICQoQ19TV0lUQ0hfWF9TSVRFKSBc CiAgJChHTlVTVEVQX0NGTEFHUykgJChDRkxBR1NfU09VTkQpICQoUlNWR19DRkxBR1MpICQoSU1B R0VNQUdJQ0tfQ0ZMQUdTKSBcCiAgJChQTkdfQ0ZMQUdTKSAkKExJQlhNTDJfQ0ZMQUdTKSAkKERC VVNfQ0ZMQUdTKSBcCiAgJChYUkFORFJfQ0ZMQUdTKSAkKFhJTkVSQU1BX0NGTEFHUykgJChYRklY RVNfQ0ZMQUdTKSBcCiAgJChTRVRUSU5HU19DRkxBR1MpICQoRlJFRVRZUEVfQ0ZMQUdTKSAkKEZP TlRDT05GSUdfQ0ZMQUdTKSBcCiAgJChMSUJPVEZfQ0ZMQUdTKSAkKE0xN05fRkxUX0NGTEFHUykg JChERVBGTEFHUykgXAogICQoTElCR05VVExTX0NGTEFHUykgJChHRklMRU5PVElGWV9DRkxBR1Mp IFwKICAkKFdBUk5fQ0ZMQUdTKSAkKFdFUlJPUl9DRkxBR1MpICQoQ0ZMQUdTKQpBTExfT0JKQ19D RkxBR1M9JChBTExfQ0ZMQUdTKSAkKEdOVV9PQkpDX0NGTEFHUykKCi5TVUZGSVhFUzogLm0KLmMu bzoKCUAkKE1LREVQRElSKQoJJChDQykgLWMgJChDUFBGTEFHUykgJChBTExfQ0ZMQUdTKSAkKFBS T0ZJTElOR19DRkxBR1MpICQ8Ci5tLm86CglAJChNS0RFUERJUikKCSQoQ0MpIC1jICQoQ1BQRkxB R1MpICQoQUxMX09CSkNfQ0ZMQUdTKSAkKFBST0ZJTElOR19DRkxBR1MpICQ8CgojIyBsYXN0Zmls ZSBtdXN0IGZvbGxvdyBhbGwgZmlsZXMgd2hvc2UgaW5pdGlhbGl6ZWQgZGF0YSBhcmVhcyBzaG91 bGQKIyMgYmUgZHVtcGVkIGFzIHB1cmUgYnkgZHVtcC1lbWFjcy4KYmFzZV9vYmogPSBkaXNwbmV3 Lm8gZnJhbWUubyBzY3JvbGwubyB4ZGlzcC5vIG1lbnUubyAkKFhNRU5VX09CSikgd2luZG93Lm8g XAoJY2hhcnNldC5vIGNvZGluZy5vIGNhdGVnb3J5Lm8gY2NsLm8gY2hhcmFjdGVyLm8gY2hhcnRh Yi5vIGJpZGkubyBcCgkkKENNX09CSikgdGVybS5vIHRlcm1pbmFsLm8geGZhY2VzLm8gJChYT0JK KSAkKEdUS19PQkopICQoREJVU19PQkopIFwKCWVtYWNzLm8ga2V5Ym9hcmQubyBtYWNyb3MubyBr ZXltYXAubyBzeXNkZXAubyBcCglidWZmZXIubyBmaWxlbG9jay5vIGluc2RlbC5vIG1hcmtlci5v IFwKCW1pbmlidWYubyBmaWxlaW8ubyBkaXJlZC5vIFwKCWNtZHMubyBjYXNldGFiLm8gY2FzZWZp ZGRsZS5vIGluZGVudC5vIHNlYXJjaC5vIHJlZ2V4Lm8gdW5kby5vIFwKCWFsbG9jLm8gZGF0YS5v IGRvYy5vIGVkaXRmbnMubyBjYWxsaW50Lm8gXAoJZXZhbC5vIGZsb2F0Zm5zLm8gZm5zLm8gZm9u dC5vIHByaW50Lm8gbHJlYWQubyBcCglzeW50YXgubyAkKFVORVhFQ19PQkopIGJ5dGVjb2RlLm8g XAoJcHJvY2Vzcy5vIGdudXRscy5vIGNhbGxwcm9jLm8gXAoJcmVnaW9uLWNhY2hlLm8gc291bmQu byBhdGltZXIubyBcCglkb3BybnQubyBpbnRlcnZhbHMubyB0ZXh0cHJvcC5vIGNvbXBvc2l0ZS5v IHhtbC5vICQoTk9USUZZX09CSikgXAoJcHJvZmlsZXIubyBkZWNvbXByZXNzLm8gXAoJJChNU0RP U19PQkopICQoTVNET1NfWF9PQkopICQoTlNfT0JKKSAkKENZR1dJTl9PQkopICQoRk9OVF9PQkop IFwKCSQoVzMyX09CSikgJChXSU5ET1dfU1lTVEVNX09CSikgJChYR1NFTE9CSikKb2JqID0gJChi YXNlX29iaikgJChOU19PQkpDX09CSikKCiMjIE9iamVjdCBmaWxlcyB1c2VkIG9uIHNvbWUgbWFj aGluZSBvciBvdGhlci4KIyMgVGhlc2UgZ28gaW4gdGhlIERPQyBmaWxlIG9uIGFsbCBtYWNoaW5l cyBpbiBjYXNlIHRoZXkgYXJlIG5lZWRlZC4KIyMgU29tZSBvZiB0aGVtIGhhdmUgbm8gRE9DIGVu dHJpZXMsIGJ1dCBpdCBkb2VzIG5vIGhhcm0gdG8gaGF2ZSB0aGVtCiMjIGluIHRoZSBsaXN0LCBp biBjYXNlIHRoZXkgZXZlciBhZGQgYW55IHN1Y2ggZW50cmllcy4KU09NRV9NQUNISU5FX09CSkVD VFMgPSBkb3NmbnMubyBtc2Rvcy5vIFwKICB4dGVybS5vIHhmbnMubyB4bWVudS5vIHhzZWxlY3Qu byB4cmRiLm8geHNtZm5zLm8gZnJpbmdlLm8gaW1hZ2UubyBcCiAgZm9udHNldC5vIGRidXNiaW5k Lm8gY3lndzMyLm8gXAogIG5zdGVybS5vIG5zZm5zLm8gbnNtZW51Lm8gbnNzZWxlY3QubyBuc2lt YWdlLm8gbnNmb250Lm8gbWFjZm9udC5vIFwKICB3MzIubyB3MzJjb25zb2xlLm8gdzMyZm5zLm8g dzMyaGVhcC5vIHczMmluZXZ0Lm8gdzMybm90aWZ5Lm8gXAogIHczMm1lbnUubyB3MzJwcm9jLm8g dzMycmVnLm8gdzMyc2VsZWN0Lm8gdzMydGVybS5vIHczMnhmbnMubyBcCiAgdzE2c2VsZWN0Lm8g d2lkZ2V0Lm8geGZvbnQubyBmdGZvbnQubyB4ZnRmb250Lm8gZnR4Zm9udC5vIGd0a3V0aWwubyBc CiAgeHNldHRpbmdzLm8geGdzZWxlY3QubyB0ZXJtY2FwLm8KCiMjIGdtYWxsb2MubyBpZiAhU1lT VEVNX01BTExPQyAmJiAhRE9VR19MRUFfTUFMTE9DLCBlbHNlIGVtcHR5LgpHTUFMTE9DX09CSj1A R01BTExPQ19PQkpACgojIyB2bS1saW1pdC5vIGlmICFTWVNURU1fTUFMTE9DLCBlbHNlIGVtcHR5 LgpWTUxJTUlUX09CSj1AVk1MSU1JVF9PQkpACgojIyByYWxsb2MubyBpZiAhU1lTVEVNX01BTExP QyAmJiBSRUxfQUxMT0MsIGVsc2UgZW1wdHkuClJBTExPQ19PQko9QFJBTExPQ19PQkpACgojIyBF bXB0eSBvbiBDeWd3aW4gYW5kIE1pbkdXLCBsYXN0ZmlsZS5vIGVsc2V3aGVyZS4KUFJFX0FMTE9D X09CSj1AUFJFX0FMTE9DX09CSkAKIyMgbGFzdGZpbGUubyBvbiBDeWd3aW4gYW5kIE1pbkdXLCBl bXB0eSBlbHNld2hlcmUuClBPU1RfQUxMT0NfT0JKPUBQT1NUX0FMTE9DX09CSkAKCiMjIExpc3Qg b2Ygb2JqZWN0IGZpbGVzIHRoYXQgbWFrZS1kb2NmaWxlIHNob3VsZCBub3QgYmUgdG9sZCBhYm91 dC4Kb3RoZXJvYmo9ICQoVEVSTUNBUF9PQkopICQoUFJFX0FMTE9DX09CSikgJChHTUFMTE9DX09C SikgJChSQUxMT0NfT0JKKSBcCiAgJChQT1NUX0FMTE9DX09CSikgJChXSURHRVRfT0JKKSAkKExJ Qk9CSlMpCgojIyBBbGwgb2JqZWN0IGZpbGVzIGxpbmtlZCBpbnRvIHRlbWFjcy4gICQoVk1MSU1J VF9PQkopIHNob3VsZCBiZSBmaXJzdC4KIyMgKE9uIE1pbkdXLCBmaXJzdGZpbGUubyBzaG91bGQg YmUgYmVmb3JlIHZtLWxpbWl0Lm8uKQpGSVJTVEZJTEVfT0JKPUBGSVJTVEZJTEVfT0JKQApBTExP QkpTID0gJChGSVJTVEZJTEVfT0JKKSAkKFZNTElNSVRfT0JKKSAkKG9iaikgJChvdGhlcm9iaikK CiMjIENvbmZpZ3VyZSBpbnNlcnRzIHRoZSBmaWxlIGxpc3AubWsgYXQgdGhpcyBwb2ludCwgZGVm aW5pbmcgJGxpc3AuCkBsaXNwX2ZyYWdACgoKIyMgQ29uc3RydWN0IGZ1bGwgc2V0IG9mIGxpYnJh cmllcyB0byBiZSBsaW5rZWQuCkxJQkVTID0gJChMSUJTKSAkKFczMl9MSUJTKSAkKExJQlNfR05V U1RFUCkgJChMSUJYX0JBU0UpICQoTElCSU1BR0UpIFwKICAgJChMSUJYX09USEVSKSAkKExJQlNP VU5EKSBcCiAgICQoUlNWR19MSUJTKSAkKElNQUdFTUFHSUNLX0xJQlMpICQoTElCX0FDTCkgJChM SUJfQ0xPQ0tfR0VUVElNRSkgXAogICAkKExJQl9FQUNDRVNTKSAkKExJQl9GREFUQVNZTkMpICQo TElCX1RJTUVSX1RJTUUpICQoREJVU19MSUJTKSBcCiAgICQoTElCX0VYRUNJTkZPKSAkKFhSQU5E Ul9MSUJTKSAkKFhJTkVSQU1BX0xJQlMpICQoWEZJWEVTX0xJQlMpIFwKICAgJChMSUJYTUwyX0xJ QlMpICQoTElCR1BNKSAkKExJQlJFU09MVikgJChMSUJTX1NZU1RFTSkgXAogICAkKExJQlNfVEVS TUNBUCkgJChHRVRMT0FEQVZHX0xJQlMpICQoU0VUVElOR1NfTElCUykgJChMSUJTRUxJTlVYX0xJ QlMpIFwKICAgJChGUkVFVFlQRV9MSUJTKSAkKEZPTlRDT05GSUdfTElCUykgJChMSUJPVEZfTElC UykgJChNMTdOX0ZMVF9MSUJTKSBcCiAgICQoTElCR05VVExTX0xJQlMpICQoTElCX1BUSFJFQUQp IFwKICAgJChHRklMRU5PVElGWV9MSUJTKSAkKExJQl9NQVRIKSAkKExJQlopCgphbGw6IGVtYWNz JChFWEVFWFQpICQoT1RIRVJfRklMRVMpCi5QSE9OWTogYWxsCgokKGxlaW1kaXIpL2xlaW0tbGlz dC5lbDogYm9vdHN0cmFwLWVtYWNzJChFWEVFWFQpCgkkKE1BS0UpIC1DIC4uL2xlaW0gbGVpbS1s aXN0LmVsIEVNQUNTPSIkKGJvb3RzdHJhcF9leGUpIgoKJChzcmNkaXIpL21hY3V2cy5oICQobGlz cHNvdXJjZSkvaW50ZXJuYXRpb25hbC9jaGFycHJvcC5lbDogXAogIGJvb3RzdHJhcC1lbWFjcyQo RVhFRVhUKQoJJChNQUtFKSAtQyAuLi9hZG1pbi91bmlkYXRhIGFsbCBFTUFDUz0iLi4vJChib290 c3RyYXBfZXhlKSIKCiMjIFRoZSBkdW1wZWQgRW1hY3MgaXMgYXMgZnVuY3Rpb25hbCBhbmQgbW9y ZSBlZmZpY2llbnQgdGhhbgojIyBib290c3RyYXAtZW1hY3MsIHNvIHdlIHJlcGxhY2UgdGhlIGxh dHRlciB3aXRoIHRoZSBmb3JtZXIuCiMjIFN0cmljdGx5IHNwZWFraW5nLCBlbWFjcyBkb2VzIG5v dCBkZXBlbmQgZGlyZWN0bHkgb24gYWxsIG9mICRsaXNwLAojIyBzaW5jZSBub3QgYWxsIHBpZWNl cyBhcmUgdXNlZCBvbiBhbGwgcGxhdGZvcm1zLiAgQnV0IERPQyBkZXBlbmRzCiMjIG9uIGFsbCBv ZiAkbGlzcCwgYW5kIGVtYWNzIGRlcGVuZHMgb24gRE9DLCBzbyBpdCBpcyBvayB0byB1c2UgJGxp c3AgaGVyZS4KZW1hY3MkKEVYRUVYVCk6IHRlbWFjcyQoRVhFRVhUKSBcCiAgICAgICAgICAgICAg ICAkKGV0YykvRE9DICQobGlzcCkgJChsZWltZGlyKS9sZWltLWxpc3QuZWwgXAogICAgICAgICAg ICAgICAgJChsaXNwc291cmNlKS9pbnRlcm5hdGlvbmFsL2NoYXJwcm9wLmVsCglpZiB0ZXN0ICIk KENBTk5PVF9EVU1QKSIgPSAieWVzIjsgdGhlbiBcCgkgIHJtIC1mIGVtYWNzJChFWEVFWFQpOyBc CgkgIGxuIHRlbWFjcyQoRVhFRVhUKSBlbWFjcyQoRVhFRVhUKTsgXAoJZWxzZSBcCgkgIExDX0FM TD1DICQoUlVOX1RFTUFDUykgLWJhdGNoIC1sIGxvYWR1cCBkdW1wIHx8IGV4aXQgMTsgXAoJICB0 ZXN0ICJYJChQQVhDVEwpIiA9IFggfHwgJChQQVhDVEwpIC16ZXggZW1hY3MkKEVYRUVYVCk7IFwK CSAgbG4gLXZmIGVtYWNzJChFWEVFWFQpIGJvb3RzdHJhcC1lbWFjcyQoRVhFRVhUKTsgXAoJZmkK CiMjIFdlIHJ1biBtYWtlLWRvY2ZpbGUgdHdpY2UgYmVjYXVzZSB0aGUgY29tbWFuZCBsaW5lIG1h eSBnZXQgdG9vIGxvbmcKIyMgb24gc29tZSBzeXN0ZW1zLiAgVGhlIHNlZCBjb21tYW5kIG9wZXJh dGluZyBvbiBsaXNwLm1rIGFsc28gcmVkdWNlcwojIyB0aGUgbGVuZ3RoIG9mIHRoZSBjb21tYW5k IGxpbmUuICBVbmZvcnR1bmF0ZWx5LCBuby1vbmUgaGFzIGFueSBpZGVhCiMjIGV4YWN0bHkgaG93 IGxvbmcgdGhlIG1heGltdW0gc2FmZSBjb21tYW5kIGxpbmUgbGVuZ3RoIGlzIG9uIGFsbCB0aGUK IyMgdmFyaW91cyBzeXN0ZW1zIHRoYXQgRW1hY3Mgc3VwcG9ydHMuICBPYnZpb3VzbHksIHRoZSBs ZW5ndGggZGVwZW5kcwojIyBvbiB3aGF0IHlvdXIgdmFsdWUgb2YgJHNyY2RpciBpcy4gIElmIHRo ZSBsZW5ndGggcmVzdHJpY3Rpb24gZ29lcwojIyBhd2F5LCBsaXNwLm1rIGNhbiBiZSBtZXJnZWQg YmFjayBpbnRvIHRoaXMgZmlsZS4KIyMKIyMgJChTT01FX01BQ0hJTkVfT0JKRUNUUykgY29tZXMg YmVmb3JlICQob2JqKSBiZWNhdXNlIHNvbWUgZmlsZXMgbWF5CiMjIG9yIG1heSBub3QgYmUgaW5j bHVkZWQgaW4gJChvYmopLCBidXQgdGhleSBhcmUgYWx3YXlzIGluY2x1ZGVkIGluCiMjICQoU09N RV9NQUNISU5FX09CSkVDVFMpLiAgU2luY2UgYSBmaWxlIGlzIHByb2Nlc3NlZCB3aGVuIGl0IGlz IG1lbnRpb25lZAojIyBmb3IgdGhlIGZpcnN0IHRpbWUsIHRoaXMgcHJldmVudHMgYW55IHZhcmlh dGlvbiBiZXR3ZWVuIGNvbmZpZ3VyYXRpb25zCiMjIGluIHRoZSBjb250ZW50cyBvZiB0aGUgRE9D IGZpbGUuCiMjCiQoZXRjKS9ET0M6ICQobGlic3JjKS9tYWtlLWRvY2ZpbGUkKEVYRUVYVCkgJChv YmopICQobGlzcCkKCSQoTUtESVJfUCkgJChldGMpCgktcm0gLWYgJChldGMpL0RPQwoJJChsaWJz cmMpL21ha2UtZG9jZmlsZSAtZCAkKHNyY2RpcikgJChTT01FX01BQ0hJTkVfT0JKRUNUUykgJChv YmopID4gJChldGMpL0RPQwoJJChsaWJzcmMpL21ha2UtZG9jZmlsZSAtYSAkKGV0YykvRE9DIC1k ICQobGlzcHNvdXJjZSkgYHNlZCAtbiAtZSAnc3wgXFxcXHx8JyAtZSAnc3xeWyAJXSokJChsaXNw c291cmNlKS98fHAnICQoc3JjZGlyKS9saXNwLm1rYAoKJChsaWJzcmMpL21ha2UtZG9jZmlsZSQo RVhFRVhUKToKCSQoTUFLRSkgLUMgJChsaWJzcmMpIG1ha2UtZG9jZmlsZSQoRVhFRVhUKQoKYnVp bGRvYmouaDogTWFrZWZpbGUKCWZvciBpIGluICQoQUxMT0JKUyk7IGRvIFwKCSAgZWNobyAiJCRp IiB8IHNlZCAncywuKi8sLDsgcy9cLm9iaiQkL1wuby87IHMvXi8iLzsgcy8kJC8iLC8nIFwKCSAg ICB8fCBleGl0OyBcCglkb25lID4kQC50bXAKCW12ICRALnRtcCAkQAoKZ2xvYmFscy5oOiBnbC1z dGFtcDsgQHRydWUKCkdMT0JBTF9TT1VSQ0VTID0gJChiYXNlX29iajoubz0uYykgJChOU19PQkpD X09CSjoubz0ubSkKCmdsLXN0YW1wOiAkKGxpYnNyYykvbWFrZS1kb2NmaWxlJChFWEVFWFQpICQo R0xPQkFMX1NPVVJDRVMpCgkkKGxpYnNyYykvbWFrZS1kb2NmaWxlIC1kICQoc3JjZGlyKSAtZyAk KG9iaikgPiBnbC50bXAKCSQodG9wX3NyY2RpcikvYnVpbGQtYXV4L21vdmUtaWYtY2hhbmdlIGds LnRtcCBnbG9iYWxzLmgKCWVjaG8gdGltZXN0YW1wID4gJEAKCiQoQUxMT0JKUyk6IGdsb2JhbHMu aAoKJChsaWIpL2xpYmdudS5hOiAkKGNvbmZpZ19oKQoJJChNQUtFKSAtQyAkKGxpYikgbGliZ251 LmEKCiMjIFdlIGhhdmUgdG8gY3JlYXRlICQoZXRjKSBoZXJlIGJlY2F1c2UgaW5pdF9jbWRhcmdz IHRlc3RzIGl0cwojIyBleGlzdGVuY2Ugd2hlbiBzZXR0aW5nIFZpbnN0YWxsYXRpb25fZGlyZWN0 b3J5IChGSVhNRT8pLgojIyBUaGlzIGdvZXMgb24gdG8gYWZmZWN0IHZhcmlvdXMgdGhpbmdzLCBh bmQgdGhlIGVtYWNzIGJpbmFyeSBmYWlscwojIyB0byBzdGFydCBpZiBWaW5zdGFsbGF0aW9uX2Rp cmVjdG9yeSBoYXMgdGhlIHdyb25nIHZhbHVlLgp0ZW1hY3MkKEVYRUVYVCk6ICQoTElCWE1FTlUp ICQoQUxMT0JKUykgXAoJICAgICAgICAgJChsaWIpL2xpYmdudS5hICQoRU1BQ1NSRVMpCgkkKEND KSAkKEFMTF9DRkxBR1MpICQoVEVNQUNTX0xERkxBR1MpICQoTERGTEFHUykgXAoJICAtbyB0ZW1h Y3MgJChBTExPQkpTKSAkKGxpYikvbGliZ251LmEgJChXMzJfUkVTX0xJTkspICQoTElCRVMpCgkk KE1LRElSX1ApICQoZXRjKQoJdGVzdCAiJChDQU5OT1RfRFVNUCkiID0gInllcyIgfHwgXAoJICB0 ZXN0ICJYJChQQVhDVEwpIiA9IFggfHwgJChQQVhDVEwpIC1yIHRlbWFjcyQoRVhFRVhUKQoJdGVz dCAiJChDQU5OT1RfRFVNUCkiID0gInllcyIgfHwgdGVzdCAteiAiJChTRVRGQVRUUikiIHx8IFwK CSAgJChTRVRGQVRUUikgLW4gdXNlci5wYXguZmxhZ3MgLXYgciAkQAoKIyMgVGhlIGZvbGxvd2lu ZyBvbGR4bWVudS1yZWxhdGVkIHJ1bGVzIGFyZSBvbmx5IChwb3NzaWJseSkgdXNlZCBpZgojIyBI QVZFX1gxMSAmJiAhVVNFX0dUSywgYnV0IHRoZXJlIGlzIG5vIGhhcm0gaW4gYWx3YXlzIGRlZmlu aW5nIHRoZW0uCiQobHdsaWJkaXIpL2xpYmx3LmE6ICQoY29uZmlnX2gpIGdsb2JhbHMuaCBsaXNw LmggRk9SQ0UKCSQoTUFLRSkgLUMgJChsd2xpYmRpcikgbGlibHcuYQokKG9sZFhNZW51ZGlyKS9s aWJYTWVudTExLmE6IEZPUkNFCgkkKE1BS0UpIC1DICQob2xkWE1lbnVkaXIpIGxpYlhNZW51MTEu YQpGT1JDRToKLlBIT05ZOiBGT1JDRQoKQUNMT0NBTF9JTlBVVFMgPSAkKHRvcF9zcmNkaXIpL2Nv bmZpZ3VyZS5hYyAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvbTQvKi5tNCkKQVVUT0NPTkZfSU5Q VVRTID0gJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMgJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00 CiQodG9wX3NyY2RpcikvYWNsb2NhbC5tNDogJChBQ0xPQ0FMX0lOUFVUUykKJCh0b3Bfc3JjZGly KS9jb25maWd1cmUgY29uZmlnLmluOiAkKEFVVE9DT05GX0lOUFVUUykKLlBSRUNJT1VTOiAuLi9j b25maWcuc3RhdHVzIE1ha2VmaWxlCi4uL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29u ZmlndXJlICQodG9wX3NyY2RpcikvbGlzcC92ZXJzaW9uLmVsCk1ha2VmaWxlOiAuLi9jb25maWcu c3RhdHVzICQoc3JjZGlyKS9NYWtlZmlsZS5pbgokKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQgJCh0 b3Bfc3JjZGlyKS9jb25maWd1cmUgY29uZmlnLmluIC4uL2NvbmZpZy5zdGF0dXMgXAogIE1ha2Vm aWxlOgoJJChNQUtFKSAtQyAuLiBhbS0tcmVmcmVzaAoKZG9jLm86IGJ1aWxkb2JqLmgKCmVtYWNz LnJlczogJChudHNvdXJjZSkvZW1hY3MucmMgXAoJICAgJChudHNvdXJjZSkvaWNvbnMvZW1hY3Mu aWNvIFwKCSAgICQobnRzb3VyY2UpLyQoRU1BQ1NfTUFOSUZFU1QpCgkkKFdJTkRSRVMpIC1PIENP RkYgLS1pbmNsdWRlLWRpcj0kKHRvcF9zcmNkaXIpL250IFwKCSAgLW8gJEAgJChudHNvdXJjZSkv ZW1hY3MucmMKCi5QSE9OWTogbnMtYXBwCm5zLWFwcDogZW1hY3MkKEVYRUVYVCkKCSQoTUFLRSkg LUMgLi4vbmV4dHN0ZXAgYWxsCgouUEhPTlk6IG1vc3RseWNsZWFuIGNsZWFuIGJvb3RzdHJhcC1j bGVhbiBkaXN0Y2xlYW4gbWFpbnRhaW5lci1jbGVhbgouUEhPTlk6IHZlcnNpb25jbGVhbiBleHRy YWNsZWFuCgptb3N0bHljbGVhbjoKCXJtIC1mIHRlbWFjcyQoRVhFRVhUKSBjb3JlICouY29yZSBc IyogKi5vCglybSAtZiAuLi9ldGMvRE9DCglybSAtZiBib290c3RyYXAtZW1hY3MkKEVYRUVYVCkg ZW1hY3MtJCh2ZXJzaW9uKSQoRVhFRVhUKQoJcm0gLWYgYnVpbGRvYmouaAoJcm0gLWYgZ2xvYmFs cy5oIGdsLXN0YW1wCglybSAtZiAqLnJlcyAqLnRtcApjbGVhbjogbW9zdGx5Y2xlYW4KCXJtIC1m IGVtYWNzLSouKi4qJChFWEVFWFQpIGVtYWNzJChFWEVFWFQpCgktcm0gLXJmICQoREVQRElSKQoK IyMgYm9vdHN0cmFwLWNsZWFuIGlzIHVzZWQgdG8gY2xlYW4gdXAganVzdCBiZWZvcmUgYSBib290 c3RyYXAuCiMjIEl0IHNob3VsZCByZW1vdmUgYWxsIGZpbGVzIGdlbmVyYXRlZCBkdXJpbmcgYSBj b21waWxhdGlvbi9ib290c3RyYXAsCiMjIGJ1dCBub3QgdGhpbmdzIGxpa2UgY29uZmlnLnN0YXR1 cyBvciBUQUdTLgpib290c3RyYXAtY2xlYW46IGNsZWFuCglybSAtZiBlcGF0aHMuaCBjb25maWcu aCBjb25maWcuc3RhbXAgc3RhbXAtaDEKCWlmIHRlc3QgLWYgLi8uZ2RiaW5pdDsgdGhlbiBcCgkg IG12IC4vLmdkYmluaXQgLi8uZ2RiaW5pdC5zYXZlOyBcCgkgIGlmIHRlc3QgLWYgIiQoc3JjZGly KS8uZ2RiaW5pdCI7IHRoZW4gcm0gLWYgLi8uZ2RiaW5pdC5zYXZlOyBcCgkgIGVsc2UgbXYgLi8u Z2RiaW5pdC5zYXZlIC4vLmdkYmluaXQ7IGZpOyBcCglmaQoKZGlzdGNsZWFuOiBib290c3RyYXAt Y2xlYW4KCXJtIC1mIE1ha2VmaWxlCgptYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KCXJtIC1m IFRBR1MKdmVyc2lvbmNsZWFuOgoJLXJtIC1mIGVtYWNzJChFWEVFWFQpIGVtYWNzLSouKi4qJChF WEVFWFQpIC4uL2V0Yy9ET0MqCmV4dHJhY2xlYW46IGRpc3RjbGVhbgoJLXJtIC1mICp+IFwjKgoK CkVUQUdTID0gLi4vbGliLXNyYy9ldGFncwoKY3RhZ3NmaWxlczEgPSBbeHl6WFlaXSouW2hjXQpj dGFnc2ZpbGVzMiA9IFthLXdBLVddKi5baGNdCmN0YWdzZmlsZXMzID0gW2EtekEtWl0qLm0KCiMj IEZJWE1FPyBJbiBvdXQtb2YtdHJlZSBidWlsZHMsIHNob3VsZCBUQUdTIGJlIGdlbmVyYXRlZCBp biBzcmNkaXI/CgojIyBUaGlzIGRvZXMgbm90IG5lZWQgdG8gZGVwZW5kIG9uIC4uL2xpc3AgYW5k IC4uL2x3bGliIFRBR1MgZmlsZXMsCiMjIGJlY2F1c2UgZXRhZ3MgIi0taW5jbHVkZSIgb25seSBp bmNsdWRlcyBhIHBvaW50ZXIgdG8gdGhlIGZpbGUsCiMjIHJhdGhlciB0aGFuIHRoZSBmaWxlIGNv bnRlbnRzLgpUQUdTOiAkKHNyY2RpcikvJChjdGFnc2ZpbGVzMSkgJChzcmNkaXIpLyQoY3RhZ3Nm aWxlczIpICQoc3JjZGlyKS8kKGN0YWdzZmlsZXMzKQoJIiQoRVRBR1MpIiAtLWluY2x1ZGU9Li4v bGlzcC9UQUdTIC0taW5jbHVkZT0kKGx3bGliZGlyKS9UQUdTIFwKCSAgLS1yZWdleD0ne2N9L1sg CV0qREVGVkFSX1tBLVpfIAkoXSsiXChbXiJdK1wpIi8nIFwKCSAgJChzcmNkaXIpLyQoY3RhZ3Nm aWxlczEpICQoc3JjZGlyKS8kKGN0YWdzZmlsZXMyKSBcCgkgIC0tcmVnZXg9J3tvYmpjfS9bIAld KkRFRlZBUl9bQS1aXyAJKF0rIlwoW14iXStcKSIvJyBcCgkgICQoc3JjZGlyKS8kKGN0YWdzZmls ZXMzKQoKIyMgQXJyYW5nZSB0byBtYWtlIHRhZ3MgdGFibGVzIGZvciAuLi9saXNwIGFuZCAuLi9s d2xpYiwKIyMgd2hpY2ggdGhlIGFib3ZlIFRBR1MgZmlsZSBmb3IgdGhlIEMgZmlsZXMgaW5jbHVk ZXMgYnkgcmVmZXJlbmNlLgouLi9saXNwL1RBR1M6CgkkKE1BS0UpIC1DIC4uL2xpc3AgVEFHUyBF VEFHUz0iJChFVEFHUykiCgokKGx3bGliZGlyKS9UQUdTOgoJJChNQUtFKSAtQyAkKGx3bGliZGly KSBUQUdTIEVUQUdTPSIkKEVUQUdTKSIKCnRhZ3M6IFRBR1MgLi4vbGlzcC9UQUdTICQobHdsaWJk aXIpL1RBR1MKLlBIT05ZOiB0YWdzCgoKIyMjIEJvb3RzdHJhcHBpbmcuCgojIyBCb290c3RyYXBw aW5nIHJpZ2h0IGlzIGRpZmZpY3VsdCBiZWNhdXNlIG9mIHRoZSBjaXJjdWxhciBkZXBlbmRlbmNp ZXMuCiMjIEZ1cnRoZXJtb3JlLCB3ZSBoYXZlIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IG1h bnkgY29tcGlsYXRpb24gdGFyZ2V0cwojIyBzdWNoIGFzIGxvYWRkZWZzLmVsIG9yICouZWxjIGNh biB0eXBpY2FsbHkgYmUgcHJvZHVjZWQgYnkgYW55IG9sZAojIyBFbWFjcyBleGVjdXRhYmxlLCBz byB3ZSB3b3VsZCBsaWtlIHRvIGF2b2lkIHJlYnVpbGRpbmcgdGhlbSB3aGVuZXZlcgojIyB3ZSBi dWlsZCBhIG5ldyBFbWFjcyBleGVjdXRhYmxlLgojIwojIyAoSW4gb3RoZXIgd29yZHMsIGNoYW5n aW5nIGEgc2luZ2xlIGZpbGUgc3JjL2Zvby5jIHdvdWxkIGZvcmNlCiMjIGR1bXBpbmcgYSBuZXcg Ym9vdHN0cmFwLWVtYWNzLCB0aGVuIHJlLWJ5dGUtY29tcGlsaW5nIGFsbCBwcmVsb2FkZWQKIyMg ZWxpc3AgZmlsZXMsIGFuZCBvbmx5IHRoZW4gZHVtcCB0aGUgYWN0dWFsIHNyYy9lbWFjcywgd2hp Y2ggaXMgbm90CiMjIHdyb25nLCBidXQgaXMgb3ZlcmtpbGwgaW4gOTkuOTklIG9mIHRoZSBjYXNl cy4pCiMjCiMjIFRvIHNvbHZlIHRoZSBjaXJjdWxhcml0eSwgd2UgdXNlIDIgZGlmZmVyZW50IEVt YWNzIGV4ZWN1dGFibGVzLAojIyAiZW1hY3MiIGlzIHRoZSBtYWluIHRhcmdldCBhbmQgImJvb3Rz dHJhcC1lbWFjcyIgaXMgdGhlIG9uZSB1c2VkCiMjIHRvIGJ1aWxkIHRoZSAqLmVsYyBhbmQgbG9h ZGRlZnMuZWwgZmlsZXMuCiMjIFRvIHNvbHZlIHRoZSBmcmVzaG5lc3MgaXNzdWUsIGluIHRoZSBw YXN0IHdlIHRyaWVkIHZhcmlvdXMgY2xldmVyIHRyaWNrcywKIyMgYnV0IG5vdyB0aGF0IHdlIHJl cXVpcmUgR05VIG1ha2UsIHdlIGNhbiBzaW1wbHkgc3BlY2lmeQojIyBib290c3RyYXAtZW1hY3Mk KEVYRUVYVCkgYXMgYW4gb3JkZXItb25seSBwcmVyZXF1aXNpdGUuCgolLmVsYzogJS5lbCB8IGJv b3RzdHJhcC1lbWFjcyQoRVhFRVhUKQoJQCQoTUFLRSkgLUMgLi4vbGlzcCBjb21waWxlLW9uZWZp bGUgVEhFRklMRT0kPCBFTUFDUz0iJChib290c3RyYXBfZXhlKSIKCiMjIFZDU1dJVE5FU1MgcG9p bnRzIHRvIHRoZSBmaWxlIHRoYXQgaG9sZHMgaW5mbyBhYm91dCB0aGUgY3VycmVudCBjaGVja291 dC4KIyMgV2UgdXNlIGl0IGFzIGEgaGV1cmlzdGljIHRvIGRlY2lkZSB3aGVuIHRvIHJlYnVpbGQg bG9hZGRlZnMuZWwuCiMjIElmIGVtcHR5IGl0IGlzIGlnbm9yZWQ7IHRoZSBwYXJlbnQgbWFrZWZp bGUgY2FuIHNldCBpdCB0byBzb21lIG90aGVyIHZhbHVlLgpWQ1NXSVRORVNTID0KCiQobGlzcHNv dXJjZSkvbG9hZGRlZnMuZWw6ICQoVkNTV0lUTkVTUykgfCBib290c3RyYXAtZW1hY3MkKEVYRUVY VCkKCSQoTUFLRSkgLUMgLi4vbGlzcCBhdXRvbG9hZHMgRU1BQ1M9IiQoYm9vdHN0cmFwX2V4ZSki CgojIyBEdW1wIGFuIEVtYWNzIGV4ZWN1dGFibGUgbmFtZWQgYm9vdHN0cmFwLWVtYWNzIGNvbnRh aW5pbmcgdGhlCiMjIGZpbGVzIGZyb20gbG9hZHVwLmVsIGluIHNvdXJjZSBmb3JtLgpib290c3Ry YXAtZW1hY3MkKEVYRUVYVCk6IHRlbWFjcyQoRVhFRVhUKQoJJChNQUtFKSAtQyAuLi9saXNwIHVw ZGF0ZS1zdWJkaXJzCglpZiB0ZXN0ICIkKENBTk5PVF9EVU1QKSIgPSAieWVzIjsgdGhlbiBcCgkg IHJtIC1mIGJvb3RzdHJhcC1lbWFjcyQoRVhFRVhUKTsgXAoJICBsbiB0ZW1hY3MkKEVYRUVYVCkg Ym9vdHN0cmFwLWVtYWNzJChFWEVFWFQpOyBcCgllbHNlIFwKCSAgJChSVU5fVEVNQUNTKSAtLWJh dGNoIC0tbG9hZCBsb2FkdXAgYm9vdHN0cmFwIHx8IGV4aXQgMTsgXAoJICB0ZXN0ICJYJChQQVhD VEwpIiA9IFggfHwgJChQQVhDVEwpIC16ZXggZW1hY3MkKEVYRUVYVCk7IFwKCSAgbXYgLWYgZW1h Y3MkKEVYRUVYVCkgYm9vdHN0cmFwLWVtYWNzJChFWEVFWFQpOyBcCglmaQoJQDogQ29tcGlsZSBz b21lIGZpbGVzIGVhcmxpZXIgdG8gc3BlZWQgdXAgZnVydGhlciBjb21waWxhdGlvbi4KCSQoTUFL RSkgLUMgLi4vbGlzcCBjb21waWxlLWZpcnN0IEVNQUNTPSIkKGJvb3RzdHJhcF9leGUpIgoKIyMg SW5zZXJ0IGVpdGhlciBhdXRvZGVwcy5tayAoaWYgQVVUT19ERVBFTkQpLCBlbHNlIGRlcHMubWsu CkBkZXBzX2ZyYWdACgoKIyMjIE1ha2VmaWxlLmluIGVuZHMgaGVyZQo= --001a11c359a08282d605010c98b1-- From debbugs-submit-bounces@debbugs.gnu.org Wed Aug 20 12:26:32 2014 Received: (at 18302) by debbugs.gnu.org; 20 Aug 2014 16:26:32 +0000 Received: from localhost ([127.0.0.1]:48349 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XK8iV-000189-Lv for submit@debbugs.gnu.org; Wed, 20 Aug 2014 12:26:32 -0400 Received: from mtaout24.012.net.il ([80.179.55.180]:39974) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XK8iR-00017o-F9 for 18302@debbugs.gnu.org; Wed, 20 Aug 2014 12:26:29 -0400 Received: from conversion-daemon.mtaout24.012.net.il by mtaout24.012.net.il (HyperSendmail v2007.08) id <0NAM00K0058YAM00@mtaout24.012.net.il> for 18302@debbugs.gnu.org; Wed, 20 Aug 2014 19:21:48 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by mtaout24.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NAM00A465GBL5A0@mtaout24.012.net.il>; Wed, 20 Aug 2014 19:21:48 +0300 (IDT) Date: Wed, 20 Aug 2014 19:26:16 +0300 From: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues In-reply-to: X-012-Sender: halo1@inter.net.il To: Karol Ostrovsky Message-id: <83zjezb00n.fsf@gnu.org> References: X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 18302 Cc: chriszheng99@gmail.com, 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Wed, 20 Aug 2014 11:54:53 +0200 > From: Karol Ostrovsky > Cc: Chris Zheng > > thanks to the work of Chris Zheng and Eli Zaretskii we can build Emacs > on MSYS2 with MinGW-w64. However, the process is not completely > painless: xpm support needs manual tweaking of CFLAGS, configure > script must be run with special flags, and make sometimes crashes for > the "emacs$(EXEEXT)" target. What do you mean by "make crashes"? Can you show some messages or other evidence of these crashes? > I am submitting my proposed fixes for these three issues (based on the > latest trunk version of Emacs). With this fix I can successfully > compile 64-bit Emacs using MSYS2 and MinGW-w64 with automatic xpm > support, and the process follows the same easy steps as described in > nt/INSTALL (just running ./autogen.sh, ./configure --prefix=..., and > make). I intend to submit some additional MSYS2+MinGW-w64 > documentation (file nt/INSTALL) should this patch be accepted. Thanks. First, I don't see your name on file with the FSF copyright assignments. Without that, we will be unable to accept substantial contributions such as this one. Would you be willing to sign the necessary legal papers (assuming you are the sole author of these changes)? I have a few questions/comments about your suggested changes. (In the future, please always send diffs obtained by "bzr diff" or "diff -u", not entire files.) > - *-mingw32 ) > - opsys=mingw32 > + *-mingw* ) > + opsys=mingw This change from "mingw32" to "mingw" causes a lot of changes all over. is it really necessary? Is there a problem to call the system "mingw32"? It's just a value of a variable, with no other meaning. Without changing "mingw32" to "mingw", the changes are small enough to not require legal papers (but you might need them anyway further down the road, if you intend to submit more patches). > -if test "$opsys" = "mingw32"; then > - case "$canonical" in > - x86_64-*-mingw32) C_SWITCH_SYSTEM="-mtune=generic" ;; > - *) C_SWITCH_SYSTEM="-mtune=pentium4" ;; > - esac > +if test "$opsys" = "mingw"; then > + C_SWITCH_SYSTEM="-mtune=generic" Why do you want to change the -mtune switch for the 32-bit build? It is by default configured to Pentium 4 so that the resulting binary could run on Windows 9X, which we still support. Users that want to produce binaries tuned to more modern CPUs for their own consumption can always do that by asking for custom CFLAGS. > ### slightly different requirements wrt image libraries (it doesn't > ### use -lXpm because it loads the xpm shared library dynamically at > ### run time). > -if test "${opsys}" = "mingw32"; then > +if test "${opsys}" = "mingw"; then > if test "${with_xpm}" != "no"; then > + CPPFLAGS="$CPPFLAGS -I/mingw64/include/noX" > AC_CHECK_HEADER(X11/xpm.h, HAVE_XPM=yes, HAVE_XPM=no, [ Why do you need to add this switch to CPPFLAGS? Why cannot the XPM header files be installed in the default include tree? > @@ -435,8 +435,7 @@ > else \ > LC_ALL=C $(RUN_TEMACS) -batch -l loadup dump || exit 1; \ > test "X$(PAXCTL)" = X || $(PAXCTL) -zex emacs$(EXEEXT); \ > - rm -f bootstrap-emacs$(EXEEXT); \ > - ln emacs$(EXEEXT) bootstrap-emacs$(EXEEXT); \ > + ln -vf emacs$(EXEEXT) bootstrap-emacs$(EXEEXT); \ > fi This is a general (not MinGW-specific) part of src/Makefile.in, so I'm not sure we should be changing it. In particular, I'm not sure non-GNU 'ln' supports these 2 switches (and why do you need -v anyway?). Also, I don't understand why this solves anything. If "rm -f" fails, presumably because bootstrap-emacs.exe is still running, so will, or might, "ln -f". And the failure is not fatal: just type "make" again, and it runs to completion. Thanks again for working on this. From debbugs-submit-bounces@debbugs.gnu.org Wed Aug 20 13:04:49 2014 Received: (at 18302) by debbugs.gnu.org; 20 Aug 2014 17:04:49 +0000 Received: from localhost ([127.0.0.1]:48356 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XK9JY-00028o-HY for submit@debbugs.gnu.org; Wed, 20 Aug 2014 13:04:48 -0400 Received: from fencepost.gnu.org ([208.118.235.10]:40393 ident=Debian-exim) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XK9JW-00028g-5D for 18302@debbugs.gnu.org; Wed, 20 Aug 2014 13:04:47 -0400 Received: from rgm by fencepost.gnu.org with local (Exim 4.71) (envelope-from ) id 1XK9JU-0001uL-Ts; Wed, 20 Aug 2014 13:04:44 -0400 From: Glenn Morris To: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues References: <83zjezb00n.fsf@gnu.org> X-Spook: terrorism ASDIC Compsec Noriega Panama Hugo Chavez NSA X-Ran: z~,*"n6^sOiI=(6[uuBlovhJ X-Hue: magenta X-Debbugs-No-Ack: yes X-Attribution: GM Date: Wed, 20 Aug 2014 13:04:44 -0400 In-Reply-To: <83zjezb00n.fsf@gnu.org> (Eli Zaretskii's message of "Wed, 20 Aug 2014 19:26:16 +0300") Message-ID: User-Agent: Gnus (www.gnus.org), GNU Emacs (www.gnu.org/software/emacs/) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Spam-Score: -5.7 (-----) X-Debbugs-Envelope-To: 18302 Cc: Karol Ostrovsky , chriszheng99@gmail.com, 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -5.7 (-----) Eli Zaretskii wrote: > not sure we should be changing it. In particular, I'm not sure > non-GNU 'ln' supports these 2 switches (and why do you need -v > anyway?). http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Limitations-of-Usual-Tools.html "Don't rely on ln having a -f option." This and other changes that you commented on give the strong impression that this patch contains a bunch of things that are just personal preferences. From debbugs-submit-bounces@debbugs.gnu.org Wed Aug 20 13:20:23 2014 Received: (at 18302) by debbugs.gnu.org; 20 Aug 2014 17:20:23 +0000 Received: from localhost ([127.0.0.1]:48364 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XK9Yc-0002XR-7z for submit@debbugs.gnu.org; Wed, 20 Aug 2014 13:20:22 -0400 Received: from mtaout20.012.net.il ([80.179.55.166]:45088) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XK9YY-0002X7-Mf for 18302@debbugs.gnu.org; Wed, 20 Aug 2014 13:20:20 -0400 Received: from conversion-daemon.a-mtaout20.012.net.il by a-mtaout20.012.net.il (HyperSendmail v2007.08) id <0NAM00M0084F6W00@a-mtaout20.012.net.il> for 18302@debbugs.gnu.org; Wed, 20 Aug 2014 20:20:11 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by a-mtaout20.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NAM00LR985NZH40@a-mtaout20.012.net.il>; Wed, 20 Aug 2014 20:20:11 +0300 (IDT) Date: Wed, 20 Aug 2014 20:20:08 +0300 From: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues In-reply-to: X-012-Sender: halo1@inter.net.il To: Glenn Morris Message-id: <83y4ujaxiv.fsf@gnu.org> References: <83zjezb00n.fsf@gnu.org> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 18302 Cc: karol.ostrovsky@gmail.com, chriszheng99@gmail.com, 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > From: Glenn Morris > Cc: Karol Ostrovsky , chriszheng99@gmail.com, 18302@debbugs.gnu.org > Date: Wed, 20 Aug 2014 13:04:44 -0400 > > Eli Zaretskii wrote: > > > not sure we should be changing it. In particular, I'm not sure > > non-GNU 'ln' supports these 2 switches (and why do you need -v > > anyway?). > > http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Limitations-of-Usual-Tools.html > > "Don't rely on ln having a -f option." Thanks, that's what I remembered. > This and other changes that you commented on give the strong impression > that this patch contains a bunch of things that are just personal > preferences. The only real issue AFAICT is the value that MSYS2's 'uname' returns, that issue does need a (trivial) solution. From debbugs-submit-bounces@debbugs.gnu.org Thu Aug 21 06:08:17 2014 Received: (at 18302) by debbugs.gnu.org; 21 Aug 2014 10:08:17 +0000 Received: from localhost ([127.0.0.1]:48763 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKPI0-0004VO-HD for submit@debbugs.gnu.org; Thu, 21 Aug 2014 06:08:16 -0400 Received: from mail-vc0-f173.google.com ([209.85.220.173]:57916) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKPHy-0004VB-5z for 18302@debbugs.gnu.org; Thu, 21 Aug 2014 06:08:14 -0400 Received: by mail-vc0-f173.google.com with SMTP id hy10so10492198vcb.32 for <18302@debbugs.gnu.org>; Thu, 21 Aug 2014 03:08:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=p8utUvW+43zPnGqD4royv7cgv8wXirSaem40J/Blp1I=; b=LyD2RltpeiQOKbZ+xUCjgUAJ6oA6JWC8PM12/ixr8FL3CsRL8I0MDHmrvF3vUnxFBw fWMzLPf4w3BT6UWJtF3mT6CxLk2g8fw/VtcGtQIZYvQ3iKWC5omQU4SJPwtFeBr4oDoX pyzNMNoNakTg1HcVu99dB50CFudxWSYTSIHW5ybNDFOqm2utgtRe7obiqIrZ5MkZ49lm ATKiT2AkoED3OjvnW55ozV4gsqwolECajO6YIiDCb6nK6/+sKh1Z8+PCC0r/+Tg6qOWD Qs32qlFtJLUTVu8RF1mmWP3o/S6kOLPGIeeeh57UYyiLDngUlJJCsJGIsZXcWH1vznI1 wViA== MIME-Version: 1.0 X-Received: by 10.220.251.200 with SMTP id mt8mr1612716vcb.24.1408615688440; Thu, 21 Aug 2014 03:08:08 -0700 (PDT) Received: by 10.221.48.196 with HTTP; Thu, 21 Aug 2014 03:08:08 -0700 (PDT) In-Reply-To: <83y4ujaxiv.fsf@gnu.org> References: <83zjezb00n.fsf@gnu.org> <83y4ujaxiv.fsf@gnu.org> Date: Thu, 21 Aug 2014 12:08:08 +0200 Message-ID: Subject: Re: bug#18302: MSYS2 build issues From: Karol Ostrovsky To: Eli Zaretskii Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 18302 Cc: Glenn Morris , Chris Zheng , 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.7 (/) Hello all, thank you for the very quick response. First, I am sorry for some of the mess, like submitting whole files. Now to the technical stuff: 1. I am the sole author of these changes. I have no issue with signing the required legal papers. Please, let me know how to proceed with this. 2. MSYS2 'uname' is indeed the main source of the problem. My solution fixes that, and also renames opsys=3Dmingw32 to opsys=3Dmingw. This renaming is not strictly necessary, but I believe it is a good practice to name things as clearly as possible. In this case, the name mingw32 seems too related to a 32-bit system, which it is not any more after my changes. 3. "-mtune" change: I don't see how Pentium4 optimisations are related to running Windows9X. I know people still running Windows95 on Pentium III. Shouldn't the official Emacs build be as generic as possible? Perhaps one should even take away the whole -mtune part for MinGW. 4. CPPFLAGS for XPM change follows the same pattern as cygwin. Both cygwin and MSYS2 install the XPM library in an unusual place. Since adding an include path for cygwin was already accepted, I did not see any issue with adding a similar solution for MSYS2. 5. I am sorry I was not aware of the ln flag issues. The -v was only to see the result and it is completely unnecessary, while the -f was needed just as it was used for "rm -f" in the original. The crash is quite random, and currently I am unable to reproduce it. Yesterday it was relatively easy to reproduce, but today it is not happening. However, I remember that make stopped with something like: unable to build emacs.exe on line 603 of src/Makefile with reason "rm: cannot remove =E2=80=98bootstrap-emacs.exe=E2=80=99: Device or resource busy". Th= e crash happened even when running make without a j flag, that is non-parallel build. The easy manual workaround is to just start make again, but then it is hard to add emacs to any automated build system (for example as an MSYS2 package). Given how random this crash is it is hard to justify any change to the Makefile.in until I or someone else can find the root cause. Best regards, Karol On 20 August 2014 19:20, Eli Zaretskii wrote: >> From: Glenn Morris >> Cc: Karol Ostrovsky , chriszheng99@gmail.com= , 18302@debbugs.gnu.org >> Date: Wed, 20 Aug 2014 13:04:44 -0400 >> >> Eli Zaretskii wrote: >> >> > not sure we should be changing it. In particular, I'm not sure >> > non-GNU 'ln' supports these 2 switches (and why do you need -v >> > anyway?). >> >> http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/= html_node/Limitations-of-Usual-Tools.html >> >> "Don't rely on ln having a -f option." > > Thanks, that's what I remembered. > >> This and other changes that you commented on give the strong impression >> that this patch contains a bunch of things that are just personal >> preferences. > > The only real issue AFAICT is the value that MSYS2's 'uname' returns, > that issue does need a (trivial) solution. From debbugs-submit-bounces@debbugs.gnu.org Thu Aug 21 10:31:14 2014 Received: (at 18302) by debbugs.gnu.org; 21 Aug 2014 14:31:14 +0000 Received: from localhost ([127.0.0.1]:49039 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKTOQ-0003vP-EY for submit@debbugs.gnu.org; Thu, 21 Aug 2014 10:31:14 -0400 Received: from mtaout24.012.net.il ([80.179.55.180]:38120) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKTON-0003uu-2r for 18302@debbugs.gnu.org; Thu, 21 Aug 2014 10:31:08 -0400 Received: from conversion-daemon.mtaout24.012.net.il by mtaout24.012.net.il (HyperSendmail v2007.08) id <0NAN00P00UQTA700@mtaout24.012.net.il> for 18302@debbugs.gnu.org; Thu, 21 Aug 2014 17:26:27 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by mtaout24.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NAN00G7DUS31790@mtaout24.012.net.il>; Thu, 21 Aug 2014 17:26:27 +0300 (IDT) Date: Thu, 21 Aug 2014 17:30:59 +0300 From: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues In-reply-to: X-012-Sender: halo1@inter.net.il To: Karol Ostrovsky Message-id: <83tx55c3to.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-transfer-encoding: 8BIT References: <83zjezb00n.fsf@gnu.org> <83y4ujaxiv.fsf@gnu.org> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 18302 Cc: rgm@gnu.org, chriszheng99@gmail.com, 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Thu, 21 Aug 2014 12:08:08 +0200 > From: Karol Ostrovsky > Cc: Glenn Morris , Chris Zheng , 18302@debbugs.gnu.org > > 1. I am the sole author of these changes. I have no issue with > signing the required legal papers. Please, let me know how to proceed > with this. Glenn, could you please send him the papers? > 2. MSYS2 'uname' is indeed the main source of the problem. My > solution fixes that, and also renames opsys=mingw32 to opsys=mingw. > This renaming is not strictly necessary, but I believe it is a good > practice to name things as clearly as possible. In this case, the > name mingw32 seems too related to a 32-bit system, which it is not any > more after my changes. I see no reason to change "mingw32" into something else. It's just a string, and doesn't imply anything about the bit-ness of the build. In fact, users who build Emacs will never see this string. Besides, MinGW64 tools can also be used to build a 32-bit Emacs. So let's leave that part alone. > 3. "-mtune" change: I don't see how Pentium4 optimisations are related > to running Windows9X. I know people still running Windows95 on > Pentium III. "-mtune=pentium4" does not mean that Pentium III is not supported. It just means the code is tuned better for Pentium 4. Without this switch, newer versions of GCC will use -mtune=native, which is certainly bad news for users of much older CPUs. > Shouldn't the official Emacs build be as generic as possible? Hard to answer that without knowing what you mean by "generic" in this context. Again, users who want to build Emacs only for themselves can always specify -mtune=native at configure time. > Perhaps one should even take away the whole -mtune part for MinGW. See above: it is there for a reason. Note that the 64-build already uses -mtune=generic, because it is free from the need to support Windows 9X. > 4. CPPFLAGS for XPM change follows the same pattern as cygwin. Both > cygwin and MSYS2 install the XPM library in an unusual place. Since > adding an include path for cygwin was already accepted, I did not see > any issue with adding a similar solution for MSYS2. IMO, it is a mistake in the Cygwin case as well. These issues should be resolved in the compiler installation, not in packages. If the user installs xpm (or any other library) she should either install its headers and library files in the standard places, or configure the compiler to look in the non-standard places (e.g., by setting C_INCLUDE_PATH in the environment). Otherwise, your build environment is not really 100% functional. I'd urge the Cygwin Emacs maintainers to revert that special case, but that's their call. For native Windows builds, I certainly object to introducing this deviation. > 5. I am sorry I was not aware of the ln flag issues. The -v was only > to see the result and it is completely unnecessary, while the -f was > needed just as it was used for "rm -f" in the original. The crash is > quite random, and currently I am unable to reproduce it. Yesterday it > was relatively easy to reproduce, but today it is not happening. > However, I remember that make stopped with something like: unable to > build emacs.exe on line 603 of src/Makefile with reason "rm: cannot > remove ‘bootstrap-emacs.exe’: Device or resource busy". The crash > happened even when running make without a j flag, that is non-parallel > build. > > The easy manual workaround is to just start make again, but then it is > hard to add emacs to any automated build system (for example as an > MSYS2 package). > > Given how random this crash is it is hard to justify any change to the > Makefile.in until I or someone else can find the root cause. I think the root cause is obvious: Windows won't let you delete the executable file of a running program. So small timing issues can open a small window of opportunity for this failure. How about adding a loop there that attempts to delete the file up to 5 times, say, each time sleeping for 1 second after a failure? If that works, it will always succeed on the 1st attempt on Posix hosts, so it is harmless there. From debbugs-submit-bounces@debbugs.gnu.org Thu Aug 21 12:00:12 2014 Received: (at 18302) by debbugs.gnu.org; 21 Aug 2014 16:00:12 +0000 Received: from localhost ([127.0.0.1]:49074 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKUma-0006G9-6g for submit@debbugs.gnu.org; Thu, 21 Aug 2014 12:00:12 -0400 Received: from fencepost.gnu.org ([208.118.235.10]:33423 ident=Debian-exim) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKUmX-0006G1-QT for 18302@debbugs.gnu.org; Thu, 21 Aug 2014 12:00:10 -0400 Received: from rgm by fencepost.gnu.org with local (Exim 4.71) (envelope-from ) id 1XKUmV-0005g6-7F; Thu, 21 Aug 2014 12:00:07 -0400 From: Glenn Morris To: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues References: <83zjezb00n.fsf@gnu.org> <83y4ujaxiv.fsf@gnu.org> <83tx55c3to.fsf@gnu.org> X-Spook: IDEA Cohiba AVIP Audiotel Commecen smuggle Rubin Bellcore X-Ran: hM=Iylkqgj5yFNOTiZWE8`d!) (Eli Zaretskii's message of "Thu, 21 Aug 2014 17:30:59 +0300") Message-ID: User-Agent: Gnus (www.gnus.org), GNU Emacs (www.gnu.org/software/emacs/) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Spam-Score: -5.7 (-----) X-Debbugs-Envelope-To: 18302 Cc: Karol Ostrovsky , chriszheng99@gmail.com, 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -5.7 (-----) Eli Zaretskii wrote: > Glenn, could you please send him the papers? OK, sent off-list, but you (or anyone else) can do that just as easily as I can. Just send the file /gd/gnuorg/Copyright/request-assign.future from fencepost. As explained at https://www.gnu.org/prep/maintain/html_node/Copyright-Papers.html the files are also available in gnulib. From debbugs-submit-bounces@debbugs.gnu.org Thu Aug 21 14:38:27 2014 Received: (at 18302) by debbugs.gnu.org; 21 Aug 2014 18:38:27 +0000 Received: from localhost ([127.0.0.1]:49130 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKXFi-00038L-Sn for submit@debbugs.gnu.org; Thu, 21 Aug 2014 14:38:27 -0400 Received: from limerock03.mail.cornell.edu ([128.84.13.243]:57839) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKXFd-000380-AK for 18302@debbugs.gnu.org; Thu, 21 Aug 2014 14:38:22 -0400 X-CornellRouted: This message has been Routed already. Received: from authusersmtp.mail.cornell.edu (granite3.serverfarm.cornell.edu [10.16.197.8]) by limerock03.mail.cornell.edu (8.14.4/8.14.4_cu) with ESMTP id s7LIcEqp006888; Thu, 21 Aug 2014 14:38:14 -0400 Received: from [10.32.12.196] (erdhcp-10-32-12-196.eduroam.cornell.edu [10.32.12.196]) (authenticated bits=0) by authusersmtp.mail.cornell.edu (8.14.4/8.12.10) with ESMTP id s7LIcDJ4017064 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Thu, 21 Aug 2014 14:38:13 -0400 Message-ID: <53F63C95.6030303@cornell.edu> Date: Thu, 21 Aug 2014 14:38:13 -0400 From: Ken Brown User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: Eli Zaretskii , Karol Ostrovsky Subject: Re: bug#18302: MSYS2 build issues References: <83zjezb00n.fsf@gnu.org> <83y4ujaxiv.fsf@gnu.org> <83tx55c3to.fsf@gnu.org> In-Reply-To: <83tx55c3to.fsf@gnu.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -3.0 (---) X-Debbugs-Envelope-To: 18302 Cc: chriszheng99@gmail.com, 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.0 (---) On 8/21/2014 10:30 AM, Eli Zaretskii wrote: >> 4. CPPFLAGS for XPM change follows the same pattern as cygwin. Both >> cygwin and MSYS2 install the XPM library in an unusual place. Since >> adding an include path for cygwin was already accepted, I did not see >> any issue with adding a similar solution for MSYS2. > > IMO, it is a mistake in the Cygwin case as well. These issues should > be resolved in the compiler installation, not in packages. If the > user installs xpm (or any other library) she should either install its > headers and library files in the standard places, or configure the > compiler to look in the non-standard places (e.g., by setting > C_INCLUDE_PATH in the environment). Otherwise, your build environment > is not really 100% functional. > > I'd urge the Cygwin Emacs maintainers to revert that special case, but > that's their call. For native Windows builds, I certainly object to > introducing this deviation. The Cygwin situation is not comparable. The headers are installed in the standard places. But Cygwin provides two versions of xpm.h, one in /usr/include/X11 and one in /usr/include/noX. The Cygwin w32 build needs to add -I/usr/include/noX to CPPFLAGS (and -L/usr/lib/noX to LDFLAGS) in order to pick up the correct version. Ken From debbugs-submit-bounces@debbugs.gnu.org Thu Aug 21 15:22:45 2014 Received: (at 18302) by debbugs.gnu.org; 21 Aug 2014 19:22:46 +0000 Received: from localhost ([127.0.0.1]:49157 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKXwb-0004I6-FO for submit@debbugs.gnu.org; Thu, 21 Aug 2014 15:22:45 -0400 Received: from mtaout23.012.net.il ([80.179.55.175]:65086) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKXwZ-0004Hs-6c for 18302@debbugs.gnu.org; Thu, 21 Aug 2014 15:22:44 -0400 Received: from conversion-daemon.a-mtaout23.012.net.il by a-mtaout23.012.net.il (HyperSendmail v2007.08) id <0NAO003007RENI00@a-mtaout23.012.net.il> for 18302@debbugs.gnu.org; Thu, 21 Aug 2014 22:22:37 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by a-mtaout23.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NAO003V98HOJX70@a-mtaout23.012.net.il>; Thu, 21 Aug 2014 22:22:37 +0300 (IDT) Date: Thu, 21 Aug 2014 22:22:36 +0300 From: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues In-reply-to: <53F63C95.6030303@cornell.edu> X-012-Sender: halo1@inter.net.il To: Ken Brown Message-id: <83iollbqbn.fsf@gnu.org> References: <83zjezb00n.fsf@gnu.org> <83y4ujaxiv.fsf@gnu.org> <83tx55c3to.fsf@gnu.org> <53F63C95.6030303@cornell.edu> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 18302 Cc: karol.ostrovsky@gmail.com, chriszheng99@gmail.com, 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Thu, 21 Aug 2014 14:38:13 -0400 > From: Ken Brown > CC: chriszheng99@gmail.com, 18302@debbugs.gnu.org > > > I'd urge the Cygwin Emacs maintainers to revert that special case, but > > that's their call. For native Windows builds, I certainly object to > > introducing this deviation. > > The Cygwin situation is not comparable. The headers are installed in > the standard places. But Cygwin provides two versions of xpm.h, one in > /usr/include/X11 and one in /usr/include/noX. The Cygwin w32 build > needs to add -I/usr/include/noX to CPPFLAGS (and -L/usr/lib/noX to > LDFLAGS) in order to pick up the correct version. No, the solution is to use #if defined __CYGWIN__ && !defined HAVE_X_WINDOWS #include #else #include #endif The way we work around the problem now will break if someone installs the standard header files in a place other than /usr/include. And if you disagree, then at least please put the above explanation in configure.ac, so that we won't need to have this discussion a year from now. From debbugs-submit-bounces@debbugs.gnu.org Thu Aug 21 15:33:20 2014 Received: (at 18302) by debbugs.gnu.org; 21 Aug 2014 19:33:20 +0000 Received: from localhost ([127.0.0.1]:49167 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKY6p-0005nV-KF for submit@debbugs.gnu.org; Thu, 21 Aug 2014 15:33:19 -0400 Received: from mtaout20.012.net.il ([80.179.55.166]:59791) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKY6m-0005nB-7I for 18302@debbugs.gnu.org; Thu, 21 Aug 2014 15:33:17 -0400 Received: from conversion-daemon.a-mtaout20.012.net.il by a-mtaout20.012.net.il (HyperSendmail v2007.08) id <0NAO00D008O03B00@a-mtaout20.012.net.il> for 18302@debbugs.gnu.org; Thu, 21 Aug 2014 22:33:09 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by a-mtaout20.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NAO00CF38Z9ZS20@a-mtaout20.012.net.il>; Thu, 21 Aug 2014 22:33:09 +0300 (IDT) Date: Thu, 21 Aug 2014 22:33:08 +0300 From: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues In-reply-to: <83iollbqbn.fsf@gnu.org> X-012-Sender: halo1@inter.net.il To: kbrown@cornell.edu Message-id: <83ha15bpu3.fsf@gnu.org> References: <83zjezb00n.fsf@gnu.org> <83y4ujaxiv.fsf@gnu.org> <83tx55c3to.fsf@gnu.org> <53F63C95.6030303@cornell.edu> <83iollbqbn.fsf@gnu.org> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 18302 Cc: karol.ostrovsky@gmail.com, chriszheng99@gmail.com, 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Thu, 21 Aug 2014 22:22:36 +0300 > From: Eli Zaretskii > Cc: karol.ostrovsky@gmail.com, chriszheng99@gmail.com, 18302@debbugs.gnu.org > > #if defined __CYGWIN__ && !defined HAVE_X_WINDOWS > #include > #else > #include > #endif Sorry, I meant #if defined __CYGWIN__ && !defined HAVE_X_WINDOWS #include #else #include #endif From debbugs-submit-bounces@debbugs.gnu.org Thu Aug 21 17:30:04 2014 Received: (at 18302) by debbugs.gnu.org; 21 Aug 2014 21:30:05 +0000 Received: from localhost ([127.0.0.1]:49181 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKZvl-0000Q1-Pn for submit@debbugs.gnu.org; Thu, 21 Aug 2014 17:30:04 -0400 Received: from limerock02.mail.cornell.edu ([128.84.13.242]:52694) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKZvi-0000Pm-5Q for 18302@debbugs.gnu.org; Thu, 21 Aug 2014 17:29:59 -0400 X-CornellRouted: This message has been Routed already. Received: from authusersmtp.mail.cornell.edu (granite4.serverfarm.cornell.edu [10.16.197.9]) by limerock02.mail.cornell.edu (8.14.4/8.14.4_cu) with ESMTP id s7LLTpVN012593; Thu, 21 Aug 2014 17:29:52 -0400 Received: from [192.168.1.8] (cpe-67-249-176-226.twcny.res.rr.com [67.249.176.226]) (authenticated bits=0) by authusersmtp.mail.cornell.edu (8.14.4/8.12.10) with ESMTP id s7LLTob4000725 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Thu, 21 Aug 2014 17:29:51 -0400 Message-ID: <53F664CF.1060705@cornell.edu> Date: Thu, 21 Aug 2014 17:29:51 -0400 From: Ken Brown User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues References: <83zjezb00n.fsf@gnu.org> <83y4ujaxiv.fsf@gnu.org> <83tx55c3to.fsf@gnu.org> <53F63C95.6030303@cornell.edu> <83iollbqbn.fsf@gnu.org> In-Reply-To: <83iollbqbn.fsf@gnu.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -3.0 (---) X-Debbugs-Envelope-To: 18302 Cc: karol.ostrovsky@gmail.com, chriszheng99@gmail.com, 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.0 (---) On 8/21/2014 3:22 PM, Eli Zaretskii wrote: >> Date: Thu, 21 Aug 2014 14:38:13 -0400 >> From: Ken Brown >> CC: chriszheng99@gmail.com, 18302@debbugs.gnu.org >> >>> I'd urge the Cygwin Emacs maintainers to revert that special case, but >>> that's their call. For native Windows builds, I certainly object to >>> introducing this deviation. >> >> The Cygwin situation is not comparable. The headers are installed in >> the standard places. But Cygwin provides two versions of xpm.h, one in >> /usr/include/X11 and one in /usr/include/noX. The Cygwin w32 build >> needs to add -I/usr/include/noX to CPPFLAGS (and -L/usr/lib/noX to >> LDFLAGS) in order to pick up the correct version. > > No, the solution is to use > > #if defined __CYGWIN__ && !defined HAVE_X_WINDOWS > #include > #else > #include > #endif I neglected to say that xpm.h in /usr/include/noX is actually a symlink to /usr/include/noX/X11/xpm.h. The code that includes xpm.h (in image.c) is '#include "X11/xpm.h"' on all platforms. For the native Windows build and the Cygwin w32 build, this is done conditionally on NTGUI, after first defining some macros. In order for "X11/xpm.h" to produce the correct file, the include path has to be set up correctly. I really don't want to rewrite all this for no good reason. > The way we work around the problem now will break if someone installs > the standard header files in a place other than /usr/include. In the Cygwin case, I'm not sure what you mean by "someone". The headers are provided by Cygwin packages, and package maintainers are supposed to know where to put header files. In this case the package is libXpm-noX-devel. I can't think of any reason why a future maintainer would change the location of the headers; but if that happens, then emacs will have to adapt. > And if you disagree, then at least please put the above explanation in > configure.ac, so that we won't need to have this discussion a year > from now. I don't necessarily disagree; it's just that I don't feel like fixing something that isn't broken. If the relevant code in image.c has to be rewritten at some point anyway, we could rethink how to best handle xpm.h, but for now I prefer to leave it alone. I'll add a comment to configure.ac on the trunk. Ken From debbugs-submit-bounces@debbugs.gnu.org Thu Aug 21 18:33:31 2014 Received: (at submit) by debbugs.gnu.org; 21 Aug 2014 22:33:31 +0000 Received: from localhost ([127.0.0.1]:49208 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKavC-00021O-N9 for submit@debbugs.gnu.org; Thu, 21 Aug 2014 18:33:31 -0400 Received: from eggs.gnu.org ([208.118.235.92]:44326) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKavA-000216-LI for submit@debbugs.gnu.org; Thu, 21 Aug 2014 18:33:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XKaux-0005gf-7p for submit@debbugs.gnu.org; Thu, 21 Aug 2014 18:33:23 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:41047) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XKaux-0005ga-50 for submit@debbugs.gnu.org; Thu, 21 Aug 2014 18:33:15 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46029) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XKauq-0002dl-Dq for bug-gnu-emacs@gnu.org; Thu, 21 Aug 2014 18:33:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XKauj-0005d6-Nb for bug-gnu-emacs@gnu.org; Thu, 21 Aug 2014 18:33:08 -0400 Received: from smtp204.alice.it ([82.57.200.100]:54599) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XKauj-0005cA-DI for bug-gnu-emacs@gnu.org; Thu, 21 Aug 2014 18:33:01 -0400 Received: from [192.168.1.100] (82.61.91.145) by smtp204.alice.it (8.6.060.28) (authenticated as angelo.graziosi@alice.it) id 52E53D4F23C0AD2B for bug-gnu-emacs@gnu.org; Fri, 22 Aug 2014 00:32:59 +0200 Message-ID: <53F67389.8020501@alice.it> Date: Fri, 22 Aug 2014 00:32:41 +0200 From: Angelo Graziosi User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: bug-gnu-emacs@gnu.org Subject: Re: bug#18302: MSYS2 build issues Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -5.0 (-----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -5.0 (-----) Just a few comments.. I do MSYS2-MinGW64 Emacs trunk builds with the simple steps: ./autogen.sh ./configure --prefix=/Emacs.app --with-wide-int --build=x86_64-w64-mingw32 --without-imagemagick 'CFLAGS=-I/mingw64/include/noX -Ofast -g0 -pipe' LDFLAGS=-pipe make... The build needs the CFLAGS=-I/mingw64/include/noX definition because of the manner how MSYS2 work. It puts all the stuffs depending on msys2*dll (the equivalent of cygwin1.dll) under /usr. Instead the MinGW34 and MinGW64 applications are under /mingw32 and /mingw64 respectively. Usually, to work with MinGW64 applications, one needs to start the shell-console with mingw64_shell.bat batch file (msys2_shell.bat or mingw32_shell.bat to work with MSYS2 or MinGW32 apps). So, it is in the "nature" of MSYS2 that it puts things in non-standard directory for MinGW32/64 apps. Probably one can change Emacs configure to avoid these issue but I wonder, given the simple workaround shown above, if this is worth the effort. Instead, it would interesting, to understand why removing the configure option, "--without-imagemagick", with the MinGW64 ImageMagick package installed, configure enables imagemagick support but the build fails with a linker error.. but this is matter for another thread.. I think. Ken Brown wrote: > it's just that I don't feel like fixing something that isn't broken. I concord. Emacs has other kind of problems on Cygwin [*] (see recent threads on the Cygwin list). Breaking what is working would compromise an already fragile situation. Ciao, Angelo. --- [*] On Cygwin, usually I use as configure: ./configure --prefix=/usr/local/Emacs.app --with-w32 --build=x86_64-pc-cygwin --with-wide-int 'CFLAGS=-Ofast -g0 -pipe' LDFLAGS=-pipe CC=clang which is very similar to that I use on MSYS2.. From debbugs-submit-bounces@debbugs.gnu.org Fri Aug 22 02:11:05 2014 Received: (at 18302) by debbugs.gnu.org; 22 Aug 2014 06:11:05 +0000 Received: from localhost ([127.0.0.1]:49255 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKi40-0005g3-MR for submit@debbugs.gnu.org; Fri, 22 Aug 2014 02:11:05 -0400 Received: from mtaout27.012.net.il ([80.179.55.183]:46929) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKi3w-0005fS-S7 for 18302@debbugs.gnu.org; Fri, 22 Aug 2014 02:11:02 -0400 Received: from conversion-daemon.mtaout27.012.net.il by mtaout27.012.net.il (HyperSendmail v2007.08) id <0NAP00N001VUZA00@mtaout27.012.net.il> for 18302@debbugs.gnu.org; Fri, 22 Aug 2014 09:05:40 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by mtaout27.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NAP00J9S29GSE50@mtaout27.012.net.il>; Fri, 22 Aug 2014 09:05:40 +0300 (IDT) Date: Fri, 22 Aug 2014 09:10:55 +0300 From: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues In-reply-to: <53F664CF.1060705@cornell.edu> X-012-Sender: halo1@inter.net.il To: Ken Brown Message-id: <83fvgpawb4.fsf@gnu.org> References: <83zjezb00n.fsf@gnu.org> <83y4ujaxiv.fsf@gnu.org> <83tx55c3to.fsf@gnu.org> <53F63C95.6030303@cornell.edu> <83iollbqbn.fsf@gnu.org> <53F664CF.1060705@cornell.edu> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 18302 Cc: karol.ostrovsky@gmail.com, chriszheng99@gmail.com, 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Thu, 21 Aug 2014 17:29:51 -0400 > From: Ken Brown > CC: karol.ostrovsky@gmail.com, chriszheng99@gmail.com, 18302@debbugs.gnu.org > > > #if defined __CYGWIN__ && !defined HAVE_X_WINDOWS > > #include > > #else > > #include > > #endif > > I neglected to say that xpm.h in /usr/include/noX is actually a symlink > to /usr/include/noX/X11/xpm.h. I don't see how this changes anything. You could use #include or you could remain with , they both will work. > The code that includes xpm.h (in > image.c) is '#include "X11/xpm.h"' on all platforms. For the native > Windows build and the Cygwin w32 build, this is done conditionally on > NTGUI, after first defining some macros. In order for "X11/xpm.h" to > produce the correct file, the include path has to be set up correctly. That just means we need to re-arrange the #ifdef's a bit differently. Clearly, not rocket science. > I really don't want to rewrite all this for no good reason. As I said, this is your call. My point is that adding system-dependent -I switches in configure is not the only way, and IMO not the best one. > > The way we work around the problem now will break if someone installs > > the standard header files in a place other than /usr/include. > > In the Cygwin case, I'm not sure what you mean by "someone". The end-user, of course. Posix platforms don't limit end-users in where they install their header files, and GCC supports that. > I'll add a comment to configure.ac on the trunk. Thanks, but why not on the release branch? A comment cannot possibly do any harm. From debbugs-submit-bounces@debbugs.gnu.org Fri Aug 22 02:30:32 2014 Received: (at 18302) by debbugs.gnu.org; 22 Aug 2014 06:30:32 +0000 Received: from localhost ([127.0.0.1]:49259 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKiMp-00069c-0G for submit@debbugs.gnu.org; Fri, 22 Aug 2014 02:30:31 -0400 Received: from mtaout27.012.net.il ([80.179.55.183]:60012) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKiMj-00069L-OW for 18302@debbugs.gnu.org; Fri, 22 Aug 2014 02:30:28 -0400 Received: from conversion-daemon.mtaout27.012.net.il by mtaout27.012.net.il (HyperSendmail v2007.08) id <0NAP0040032NCD00@mtaout27.012.net.il> for 18302@debbugs.gnu.org; Fri, 22 Aug 2014 09:25:05 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by mtaout27.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NAP00J2N35TSE90@mtaout27.012.net.il>; Fri, 22 Aug 2014 09:25:05 +0300 (IDT) Date: Fri, 22 Aug 2014 09:30:19 +0300 From: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues In-reply-to: <53F67389.8020501@alice.it> X-012-Sender: halo1@inter.net.il To: Angelo Graziosi Message-id: <83egw9aves.fsf@gnu.org> References: <53F67389.8020501@alice.it> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 18302 Cc: 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Fri, 22 Aug 2014 00:32:41 +0200 > From: Angelo Graziosi > > I do MSYS2-MinGW64 Emacs trunk builds with the simple steps: > > ./autogen.sh > > ./configure --prefix=/Emacs.app --with-wide-int > --build=x86_64-w64-mingw32 --without-imagemagick > 'CFLAGS=-I/mingw64/include/noX -Ofast -g0 -pipe' LDFLAGS=-pipe > > make... > > > The build needs the > > CFLAGS=-I/mingw64/include/noX > > definition because of the manner how MSYS2 work. It puts all the stuffs > depending on msys2*dll (the equivalent of cygwin1.dll) under /usr. > Instead the MinGW34 and MinGW64 applications are under /mingw32 and > /mingw64 respectively. Usually, to work with MinGW64 applications, one > needs to start the shell-console with mingw64_shell.bat batch file > (msys2_shell.bat or mingw32_shell.bat to work with MSYS2 or MinGW32 apps). Sorry, I don't understand what does this have to do with the issue at hand. You are talking about how MSYS2 maps the Posix-like /mingw32 and /mingw64 trees into Windows filesystems. Fine; but why does this matter in the context of this discussion? ISTM that if you want to be able to produce both MinGW32 and MinGW64 programs on the same machine, you need 2 separate hierarchies anyway, one for the 32-bit and the other for 64-bit programs. IOW, just copy the /usr/include tree into each of the mingwXX parents, and each respective compiler will find them automatically, because it always searches for ../include relative to its binary (you can see that with "gcc -v"). If that doesn't work, then set C_INCLUDE_PATH in the environment to point to the right include directory in each case. Without having this set up correctly, your development environment is subtly broken. And if MSYS2 somehow makes this hard or impossible, then it's an MSYS2 bug that should be fixed ASAP. > So, it is in the "nature" of MSYS2 that it puts things in non-standard > directory for MinGW32/64 apps. Probably one can change Emacs configure > to avoid these issue but I wonder, given the simple workaround shown > above, if this is worth the effort. As I explained in this discussion, this has nothing to do with Emacs. No, this is a basic compiler configuration issue: the headers should be in a place where the compiler can find them, period. No additional "-I" switches should be needed to allow the compiler to find the headers (and the library files) of an installed library/package. > Instead, it would interesting, to understand why removing the configure > option, "--without-imagemagick", with the MinGW64 ImageMagick package > installed, configure enables imagemagick support but the build fails > with a linker error.. but this is matter for another thread.. I think. The Windows build currently doesn't support ImageMagick. That's why you see those failures. Patches are welcome to add ImageMagick support in the same way we support other image libraries on Windows: i.e. via dynamic load at run time if the library exists and when it is first used. See image.c for the details. From debbugs-submit-bounces@debbugs.gnu.org Fri Aug 22 06:56:21 2014 Received: (at 18302) by debbugs.gnu.org; 22 Aug 2014 10:56:21 +0000 Received: from localhost ([127.0.0.1]:49328 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKmW4-00045r-Sk for submit@debbugs.gnu.org; Fri, 22 Aug 2014 06:56:21 -0400 Received: from smtp203.alice.it ([82.57.200.99]:38046) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKmW2-00045a-Db for 18302@debbugs.gnu.org; Fri, 22 Aug 2014 06:56:19 -0400 Received: from [192.168.1.100] (82.61.91.145) by smtp203.alice.it (8.6.060.28) (authenticated as angelo.graziosi@alice.it) id 539B7F430F60D71C; Fri, 22 Aug 2014 12:56:09 +0200 Message-ID: <53F721B9.5010806@alice.it> Date: Fri, 22 Aug 2014 12:55:53 +0200 From: Angelo Graziosi User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues References: <53F67389.8020501@alice.it> <83egw9aves.fsf@gnu.org> In-Reply-To: <83egw9aves.fsf@gnu.org> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 18302 Cc: 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.7 (/) Il 22/08/2014 08:30, Eli Zaretskii ha scritto: > Sorry, I don't understand what does this have to do with the issue at > hand. Sorry for the noise then.. I have tried to explain (unsuccessfully) why MSYS2 doesn't put XPM things in standard directory.. probably I misinterpreted the thread.. Angelo From debbugs-submit-bounces@debbugs.gnu.org Fri Aug 22 09:05:04 2014 Received: (at 18302) by debbugs.gnu.org; 22 Aug 2014 13:05:04 +0000 Received: from localhost ([127.0.0.1]:49358 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKoWe-0008Q8-36 for submit@debbugs.gnu.org; Fri, 22 Aug 2014 09:05:04 -0400 Received: from limerock03.mail.cornell.edu ([128.84.13.243]:53816) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKoWb-0008Pa-AL for 18302@debbugs.gnu.org; Fri, 22 Aug 2014 09:05:02 -0400 X-CornellRouted: This message has been Routed already. Received: from authusersmtp.mail.cornell.edu (granite3.serverfarm.cornell.edu [10.16.197.8]) by limerock03.mail.cornell.edu (8.14.4/8.14.4_cu) with ESMTP id s7MD4tC7010934; Fri, 22 Aug 2014 09:04:55 -0400 Received: from [192.168.1.4] (cpe-67-249-176-226.twcny.res.rr.com [67.249.176.226]) (authenticated bits=0) by authusersmtp.mail.cornell.edu (8.14.4/8.12.10) with ESMTP id s7MD4rR8028669 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Fri, 22 Aug 2014 09:04:54 -0400 Message-ID: <53F73FE3.4030507@cornell.edu> Date: Fri, 22 Aug 2014 09:04:35 -0400 From: Ken Brown User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues References: <83zjezb00n.fsf@gnu.org> <83y4ujaxiv.fsf@gnu.org> <83tx55c3to.fsf@gnu.org> <53F63C95.6030303@cornell.edu> <83iollbqbn.fsf@gnu.org> <53F664CF.1060705@cornell.edu> <83fvgpawb4.fsf@gnu.org> In-Reply-To: <83fvgpawb4.fsf@gnu.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -3.0 (---) X-Debbugs-Envelope-To: 18302 Cc: karol.ostrovsky@gmail.com, chriszheng99@gmail.com, 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.0 (---) On 8/22/2014 2:10 AM, Eli Zaretskii wrote: > Thanks, but why not on the release branch? A comment cannot possibly > do any harm. Done, as revision 117454. From debbugs-submit-bounces@debbugs.gnu.org Fri Aug 22 09:25:14 2014 Received: (at 18302) by debbugs.gnu.org; 22 Aug 2014 13:25:14 +0000 Received: from localhost ([127.0.0.1]:49364 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKoqA-0000SW-2h for submit@debbugs.gnu.org; Fri, 22 Aug 2014 09:25:14 -0400 Received: from mtaout20.012.net.il ([80.179.55.166]:63570) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKoq7-0000SI-Dm for 18302@debbugs.gnu.org; Fri, 22 Aug 2014 09:25:12 -0400 Received: from conversion-daemon.a-mtaout20.012.net.il by a-mtaout20.012.net.il (HyperSendmail v2007.08) id <0NAP00L00MIJT200@a-mtaout20.012.net.il> for 18302@debbugs.gnu.org; Fri, 22 Aug 2014 16:25:04 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by a-mtaout20.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NAP00LDLMLQN230@a-mtaout20.012.net.il>; Fri, 22 Aug 2014 16:25:04 +0300 (IDT) Date: Fri, 22 Aug 2014 16:25:02 +0300 From: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues In-reply-to: <53F721B9.5010806@alice.it> X-012-Sender: halo1@inter.net.il To: Angelo Graziosi Message-id: <83tx54mzbl.fsf@gnu.org> References: <53F67389.8020501@alice.it> <83egw9aves.fsf@gnu.org> <53F721B9.5010806@alice.it> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 18302 Cc: 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Fri, 22 Aug 2014 12:55:53 +0200 > From: Angelo Graziosi > CC: 18302@debbugs.gnu.org > > > Sorry, I don't understand what does this have to do with the issue at > > hand. > > Sorry for the noise then.. I have tried to explain (unsuccessfully) why > MSYS2 doesn't put XPM things in standard directory.. MSYS2 cannot put anything anywhere, it can only map some /foo directories to certain Windows directories. But those MSYS2 mappings do not and cannot change the places where the compiler looks for its headers. The user who installs XPM is the one who decides where its headers will be. MSYS2 cannot possibly change that. From debbugs-submit-bounces@debbugs.gnu.org Fri Aug 22 09:33:26 2014 Received: (at 18302) by debbugs.gnu.org; 22 Aug 2014 13:33:26 +0000 Received: from localhost ([127.0.0.1]:49372 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKoy5-0000e7-GI for submit@debbugs.gnu.org; Fri, 22 Aug 2014 09:33:25 -0400 Received: from mtaout23.012.net.il ([80.179.55.175]:38180) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKoy2-0000ds-Db for 18302@debbugs.gnu.org; Fri, 22 Aug 2014 09:33:23 -0400 Received: from conversion-daemon.a-mtaout23.012.net.il by a-mtaout23.012.net.il (HyperSendmail v2007.08) id <0NAP00600MWG8E00@a-mtaout23.012.net.il> for 18302@debbugs.gnu.org; Fri, 22 Aug 2014 16:33:16 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by a-mtaout23.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NAP006TOMZF3790@a-mtaout23.012.net.il>; Fri, 22 Aug 2014 16:33:16 +0300 (IDT) Date: Fri, 22 Aug 2014 16:33:16 +0300 From: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues In-reply-to: <53F73FE3.4030507@cornell.edu> X-012-Sender: halo1@inter.net.il To: Ken Brown Message-id: <83r408myxv.fsf@gnu.org> References: <83zjezb00n.fsf@gnu.org> <83y4ujaxiv.fsf@gnu.org> <83tx55c3to.fsf@gnu.org> <53F63C95.6030303@cornell.edu> <83iollbqbn.fsf@gnu.org> <53F664CF.1060705@cornell.edu> <83fvgpawb4.fsf@gnu.org> <53F73FE3.4030507@cornell.edu> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 18302 Cc: karol.ostrovsky@gmail.com, chriszheng99@gmail.com, 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Fri, 22 Aug 2014 09:04:35 -0400 > From: Ken Brown > CC: karol.ostrovsky@gmail.com, chriszheng99@gmail.com, 18302@debbugs.gnu.org > > On 8/22/2014 2:10 AM, Eli Zaretskii wrote: > > Thanks, but why not on the release branch? A comment cannot possibly > > do any harm. > > Done, as revision 117454. Thank you. From debbugs-submit-bounces@debbugs.gnu.org Fri Aug 22 10:18:20 2014 Received: (at 18302) by debbugs.gnu.org; 22 Aug 2014 14:18:20 +0000 Received: from localhost ([127.0.0.1]:49653 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKpfY-0002zD-1Y for submit@debbugs.gnu.org; Fri, 22 Aug 2014 10:18:20 -0400 Received: from mail-vc0-f181.google.com ([209.85.220.181]:64185) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XKpfV-0002yr-6E for 18302@debbugs.gnu.org; Fri, 22 Aug 2014 10:18:18 -0400 Received: by mail-vc0-f181.google.com with SMTP id lf12so12248875vcb.40 for <18302@debbugs.gnu.org>; Fri, 22 Aug 2014 07:18:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=AjwlophfSKZ+kna6TrquCtf8fjwH8GgmCpr9T1MsFcw=; b=yErHmKCCNRJDEzwd2MZpuAKcPoCAedN5L8nbHRL3TK9GSNmqyO5NZKhdhAAbEVCtFy jfW32xImLKlsG0kzwWyDs6TRC6Mnh2vXoSm37jq1dK+bSepqXAc7hlNvsjrzgtei1kdX PVgq/sV6DcvYI7FfZDieOhb/Xzw3hRnaPbUkqVTy1b5VT8RmfPLi9jOvebqKquGAq4SX Rxt9QZbCM8XjAhaK5N2kCJ7ZFWwOpJqN+Lek4eHIncdWAfSWHcqUxLxPMZrc6gWYwG+m hn6FXvZmvvgTRsnH8hSqWm6ZojL52vNZOYxO/h3sD+dUuT462BVBL5UaIhL3cpS9klLL 9IZw== MIME-Version: 1.0 X-Received: by 10.220.166.207 with SMTP id n15mr48202vcy.75.1408717091713; Fri, 22 Aug 2014 07:18:11 -0700 (PDT) Received: by 10.221.48.196 with HTTP; Fri, 22 Aug 2014 07:18:11 -0700 (PDT) In-Reply-To: <83r408myxv.fsf@gnu.org> References: <83zjezb00n.fsf@gnu.org> <83y4ujaxiv.fsf@gnu.org> <83tx55c3to.fsf@gnu.org> <53F63C95.6030303@cornell.edu> <83iollbqbn.fsf@gnu.org> <53F664CF.1060705@cornell.edu> <83fvgpawb4.fsf@gnu.org> <53F73FE3.4030507@cornell.edu> <83r408myxv.fsf@gnu.org> Date: Fri, 22 Aug 2014 16:18:11 +0200 Message-ID: Subject: Re: bug#18302: MSYS2 build issues From: Karol Ostrovsky To: Eli Zaretskii Content-Type: multipart/mixed; boundary=047d7b3439aad77afd0501388112 X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 18302 Cc: Chris Zheng , Ken Brown , 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.7 (/) --047d7b3439aad77afd0501388112 Content-Type: text/plain; charset=UTF-8 Hello all, I will try to summarise the situation, and I am attaching my updated solution proposal for this particular bug: 1. MSYS2 uname must be handled properly, and that is fixed in the new proposed patch. I disagree with not renaming opsys from mingw32 to mingw, since mingw32 string is used in other places in the same file and it means something else there, which I find possibly confusing. But this change is not in my new patch. 2. -mtune is back to what it was with a minimal change required for MSYS2+MinGW-w64 uname handling. 3. Include path for xpm in MSYS2+MinGW-w64 is handled in the same way as in Cygwin. Perhaps, the same type of comment as was added for Cygwin should be added for MSYS2+MinGW-w64. 4. A loop is added in the recipe for emacs.exe to handle bootstrap-emacs.exe busy problem. Best regards, Karol On 22 August 2014 15:33, Eli Zaretskii wrote: >> Date: Fri, 22 Aug 2014 09:04:35 -0400 >> From: Ken Brown >> CC: karol.ostrovsky@gmail.com, chriszheng99@gmail.com, 18302@debbugs.gnu.org >> >> On 8/22/2014 2:10 AM, Eli Zaretskii wrote: >> > Thanks, but why not on the release branch? A comment cannot possibly >> > do any harm. >> >> Done, as revision 117454. > > Thank you. --047d7b3439aad77afd0501388112 Content-Type: text/plain; charset=US-ASCII; name="configure.ac.diff" Content-Disposition: attachment; filename="configure.ac.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hz5lri820 ZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCAzZTQ5NTI3Li5j MzUwNjczIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC02 NTAsNyArNjUwLDcgQEAgY2FzZSAiJHtjYW5vbmljYWx9IiBpbgogICBpWzM0NTZdODYtKi0qICkK ICAgICBjYXNlICIke2Nhbm9uaWNhbH0iIGluCiAgICAgICAqLWRhcndpbiogKSAgICAgICAgICAg ICAgIG9wc3lzPWRhcndpbiA7OwotICAgICAgKi1taW5ndzMyICkKKyAgICAgICotbWluZ3cqICkK IAkJb3BzeXM9bWluZ3czMgogCQkjIE1pbkdXIG92ZXJyaWRlcyBhbmQgYWRkcyBzb21lIHN5c3Rl bSBoZWFkZXJzIGluIG50L2luYy4KIAkJR0NDX1RFU1RfT1BUSU9OUz0iLUkgJHNyY2Rpci9udC9p bmMiCkBAIC02NjUsNyArNjY1LDcgQEAgY2FzZSAiJHtjYW5vbmljYWx9IiBpbgogICAjIE1pbkdX NjQKICAgeDg2XzY0LSotKiApCiAgICAgY2FzZSAiJHtjYW5vbmljYWx9IiBpbgotICAgICAgKi1t aW5ndzMyICkKKyAgICAgICotbWluZ3cqICkKIAkJb3BzeXM9bWluZ3czMgogCQkjIE1pbkdXIG92 ZXJyaWRlcyBhbmQgYWRkcyBzb21lIHN5c3RlbSBoZWFkZXJzIGluIG50L2luYy4KIAkJR0NDX1RF U1RfT1BUSU9OUz0iLUkgJHNyY2Rpci9udC9pbmMiCkBAIC0xMzIzLDcgKzEzMjMsNyBAQCB0ZXN0 ICIkb3BzeXMiID0gImFpeDQuMiIgJiYgdGVzdCAieCRHQ0MiICE9ICJ4eWVzIiAmJiBcCiAgIENf U1dJVENIX1NZU1RFTT0iLW1hIC1xbWF4bWVtPTQwMDAiCiBpZiB0ZXN0ICIkb3BzeXMiID0gIm1p bmd3MzIiOyB0aGVuCiAgIGNhc2UgIiRjYW5vbmljYWwiIGluCi0gICAgeDg2XzY0LSotbWluZ3cz MikgQ19TV0lUQ0hfU1lTVEVNPSItbXR1bmU9Z2VuZXJpYyIgOzsKKyAgICB4ODZfNjQtKi1taW5n dyopIENfU1dJVENIX1NZU1RFTT0iLW10dW5lPWdlbmVyaWMiIDs7CiAgICAgKikgQ19TV0lUQ0hf U1lTVEVNPSItbXR1bmU9cGVudGl1bTQiIDs7CiAgIGVzYWMKIGZpCkBAIC0zMDY2LDExICszMDY2 LDEzIEBAIGZpCiAjIyMgcnVuIHRpbWUpLgogaWYgdGVzdCAiJHtvcHN5c30iID0gIm1pbmd3MzIi OyB0aGVuCiAgIGlmIHRlc3QgIiR7d2l0aF94cG19IiAhPSAibm8iOyB0aGVuCisgICAgQ1BQRkxB R1M9IiRDUFBGTEFHUyAtSS9taW5ndzY0L2luY2x1ZGUvbm9YIgogICAgIEFDX0NIRUNLX0hFQURF UihYMTEveHBtLmgsIEhBVkVfWFBNPXllcywgSEFWRV9YUE09bm8sIFsKICNkZWZpbmUgRk9SX01T VyAxXSkKICAgZmkKIAogICBpZiB0ZXN0ICIke0hBVkVfWFBNfSIgPSAieWVzIjsgdGhlbgorICAg IFJFQUxfQ1BQRkxBR1M9IiRSRUFMX0NQUEZMQUdTIC1JL21pbmd3NjQvaW5jbHVkZS9ub1giCiAg ICAgQUNfREVGSU5FKEhBVkVfWFBNLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIFhw bSBsaWJyYXJ5ICgtbFhwbSkuXSkKICAgZmkKIGZpCg== --047d7b3439aad77afd0501388112 Content-Type: text/plain; charset=US-ASCII; name="Makefile.in.diff" Content-Disposition: attachment; filename="Makefile.in.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hz5lrquq1 ZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5pbiBiL3NyYy9NYWtlZmlsZS5pbgppbmRleCAwZGM0 ODg2Li4zZjExOTJmIDEwMDY0NAotLS0gYS9zcmMvTWFrZWZpbGUuaW4KKysrIGIvc3JjL01ha2Vm aWxlLmluCkBAIC00MzUsNiArNDM1LDggQEAgZW1hY3MkKEVYRUVYVCk6IHRlbWFjcyQoRVhFRVhU KSBcCiAJZWxzZSBcCiAJICBMQ19BTEw9QyAkKFJVTl9URU1BQ1MpIC1iYXRjaCAtbCBsb2FkdXAg ZHVtcCB8fCBleGl0IDE7IFwKIAkgIHRlc3QgIlgkKFBBWENUTCkiID0gWCB8fCAkKFBBWENUTCkg LXpleCBlbWFjcyQoRVhFRVhUKTsgXAotCSAgcm0gLWYgYm9vdHN0cmFwLWVtYWNzJChFWEVFWFQp OyBcCisJICB3aGlsZSB0ZXN0IC1mIGJvb3RzdHJhcC1lbWFjcyQoRVhFRVhUKTsgZG8gXAorCSAg ICBybSAtZiBib290c3RyYXAtZW1hY3MkKEVYRUVYVCk7IFwKKwkgIGRvbmU7IFwKIAkgIGxuIGVt YWNzJChFWEVFWFQpIGJvb3RzdHJhcC1lbWFjcyQoRVhFRVhUKTsgXAogCWZpCg== --047d7b3439aad77afd0501388112-- From debbugs-submit-bounces@debbugs.gnu.org Sat Aug 23 04:57:30 2014 Received: (at 18302) by debbugs.gnu.org; 23 Aug 2014 08:57:31 +0000 Received: from localhost ([127.0.0.1]:49936 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XL78c-0006Pd-2X for submit@debbugs.gnu.org; Sat, 23 Aug 2014 04:57:30 -0400 Received: from mtaout29.012.net.il ([80.179.55.185]:38388) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XL78Y-0006PL-6i for 18302@debbugs.gnu.org; Sat, 23 Aug 2014 04:57:27 -0400 Received: from conversion-daemon.mtaout29.012.net.il by mtaout29.012.net.il (HyperSendmail v2007.08) id <0NAR004004APVZ00@mtaout29.012.net.il> for 18302@debbugs.gnu.org; Sat, 23 Aug 2014 11:57:12 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by mtaout29.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NAR004U94VCJY20@mtaout29.012.net.il>; Sat, 23 Aug 2014 11:57:12 +0300 (IDT) Date: Sat, 23 Aug 2014 11:57:20 +0300 From: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues In-reply-to: X-012-Sender: halo1@inter.net.il To: Karol Ostrovsky Message-id: <83bnrbmvm7.fsf@gnu.org> References: <83zjezb00n.fsf@gnu.org> <83y4ujaxiv.fsf@gnu.org> <83tx55c3to.fsf@gnu.org> <53F63C95.6030303@cornell.edu> <83iollbqbn.fsf@gnu.org> <53F664CF.1060705@cornell.edu> <83fvgpawb4.fsf@gnu.org> <53F73FE3.4030507@cornell.edu> <83r408myxv.fsf@gnu.org> X-Spam-Score: 3.7 (+++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: > Date: Fri, 22 Aug 2014 16:18:11 +0200 > From: Karol Ostrovsky > Cc: Ken Brown , Chris Zheng , 18302@debbugs.gnu.org > > I will try to summarise the situation, and I am attaching my updated > solution proposal for this particular bug: > > 1. MSYS2 uname must be handled properly, and that is fixed in the new > proposed patch. I disagree with not renaming opsys from mingw32 to > mingw, since mingw32 string is used in other places in the same file > and it means something else there, which I find possibly confusing. > But this change is not in my new patch. > > 2. -mtune is back to what it was with a minimal change required for > MSYS2+MinGW-w64 uname handling. > > 3. Include path for xpm in MSYS2+MinGW-w64 is handled in the same way > as in Cygwin. Perhaps, the same type of comment as was added for > Cygwin should be added for MSYS2+MinGW-w64. > > 4. A loop is added in the recipe for emacs.exe to handle > bootstrap-emacs.exe busy problem. [...] Content analysis details: (3.7 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 2.7 RCVD_IN_PSBL RBL: Received via a relay in PSBL [80.179.55.185 listed in psbl.surriel.com] 1.0 SPF_SOFTFAIL SPF: sender does not match SPF record (softfail) X-Debbugs-Envelope-To: 18302 Cc: chriszheng99@gmail.com, kbrown@cornell.edu, 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 3.7 (+++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: > Date: Fri, 22 Aug 2014 16:18:11 +0200 > From: Karol Ostrovsky > Cc: Ken Brown , Chris Zheng , 18302@debbugs.gnu.org > > I will try to summarise the situation, and I am attaching my updated > solution proposal for this particular bug: > > 1. MSYS2 uname must be handled properly, and that is fixed in the new > proposed patch. I disagree with not renaming opsys from mingw32 to > mingw, since mingw32 string is used in other places in the same file > and it means something else there, which I find possibly confusing. > But this change is not in my new patch. > > 2. -mtune is back to what it was with a minimal change required for > MSYS2+MinGW-w64 uname handling. > > 3. Include path for xpm in MSYS2+MinGW-w64 is handled in the same way > as in Cygwin. Perhaps, the same type of comment as was added for > Cygwin should be added for MSYS2+MinGW-w64. > > 4. A loop is added in the recipe for emacs.exe to handle > bootstrap-emacs.exe busy problem. [...] Content analysis details: (3.7 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 2.7 RCVD_IN_PSBL RBL: Received via a relay in PSBL [80.179.55.185 listed in psbl.surriel.com] 1.0 SPF_SOFTFAIL SPF: sender does not match SPF record (softfail) > Date: Fri, 22 Aug 2014 16:18:11 +0200 > From: Karol Ostrovsky > Cc: Ken Brown , Chris Zheng , 18302@debbugs.gnu.org > > I will try to summarise the situation, and I am attaching my updated > solution proposal for this particular bug: > > 1. MSYS2 uname must be handled properly, and that is fixed in the new > proposed patch. I disagree with not renaming opsys from mingw32 to > mingw, since mingw32 string is used in other places in the same file > and it means something else there, which I find possibly confusing. > But this change is not in my new patch. > > 2. -mtune is back to what it was with a minimal change required for > MSYS2+MinGW-w64 uname handling. > > 3. Include path for xpm in MSYS2+MinGW-w64 is handled in the same way > as in Cygwin. Perhaps, the same type of comment as was added for > Cygwin should be added for MSYS2+MinGW-w64. > > 4. A loop is added in the recipe for emacs.exe to handle > bootstrap-emacs.exe busy problem. Thanks. I installed items 1, 2, and 4, but not item 3. If you think we should do something about the xpm.h header, then please try this alternative solution: copy the xpm.h header file into the X11 subdirectory of your GCC 'include' directory (the one where you have all the standard C header files), then try configuring and building Emacs without adding the "-I/mingw64/include/noX" switch to CPPFLAGS. If that doesn't work, please show the error messages you get from the compiler, and let's take it from there. If, for some reason, you think that copying xpm.h to include/X11/xpm.h is not appropriate, please explain why you think so. From debbugs-submit-bounces@debbugs.gnu.org Mon Aug 25 04:18:30 2014 Received: (at 18302) by debbugs.gnu.org; 25 Aug 2014 08:18:30 +0000 Received: from localhost ([127.0.0.1]:51344 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XLpTx-00050g-P1 for submit@debbugs.gnu.org; Mon, 25 Aug 2014 04:18:30 -0400 Received: from mail-vc0-f169.google.com ([209.85.220.169]:32965) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XLpTu-00050R-Sk for 18302@debbugs.gnu.org; Mon, 25 Aug 2014 04:18:28 -0400 Received: by mail-vc0-f169.google.com with SMTP id le20so15087550vcb.0 for <18302@debbugs.gnu.org>; Mon, 25 Aug 2014 01:18:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=Q7PWGO41ne4dZNMvYs1Ardh3UiS/mxzDvhrOAIHRxZQ=; b=iG2/W8TvZCRvsvGme50YUxlpAxq+LKmiaqOb7vUB3K8TV+eTn/5RDaCYGBmy1JtXqx h0kGD45BQJ7+IgtGhy1SJC/ALNH0gmZ9vwids18yhWG/3vLpcxi31K3yQKKJiQx+BQw/ GzP0/0UttZWsFpnR8mVjMX3Ovv5rE/6rA19bJQMtMX0Ve/SccxT9Giks9Mh5iFW3aBtQ cqQU6uNzzZx7YsbzdZdbbJILOK+IVZypY5lTrtQYzIkB2EBIuIiUsh1HPQ52/bnuTwFk fZmk/M2N+XQAU2qp+m7SHrXjNS0Uo3BKS0YEYkOs+s3MMZHR9WPH6P3yHONg4VEjA6K+ 9ZdA== MIME-Version: 1.0 X-Received: by 10.52.136.196 with SMTP id qc4mr4592608vdb.22.1408954700949; Mon, 25 Aug 2014 01:18:20 -0700 (PDT) Received: by 10.221.48.196 with HTTP; Mon, 25 Aug 2014 01:18:20 -0700 (PDT) In-Reply-To: <83bnrbmvm7.fsf@gnu.org> References: <83zjezb00n.fsf@gnu.org> <83y4ujaxiv.fsf@gnu.org> <83tx55c3to.fsf@gnu.org> <53F63C95.6030303@cornell.edu> <83iollbqbn.fsf@gnu.org> <53F664CF.1060705@cornell.edu> <83fvgpawb4.fsf@gnu.org> <53F73FE3.4030507@cornell.edu> <83r408myxv.fsf@gnu.org> <83bnrbmvm7.fsf@gnu.org> Date: Mon, 25 Aug 2014 10:18:20 +0200 Message-ID: Subject: Re: bug#18302: MSYS2 build issues From: Karol Ostrovsky To: Eli Zaretskii Content-Type: text/plain; charset=UTF-8 X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 18302 Cc: Chris Zheng , Ken Brown , 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.7 (/) Hello Eli, thank you for the help. As for the item 3: as far as I understand the situation with xpm in MinGW-w64 is the same as in Cygwin. There are two packages providing xpm, and it is the package that is installed in the non-standard place that must be used for Emacs native Windows build. Thus, I don't see why the same solution that was approved for Cygwin cannot be used for MinGW-w64. Best regards, Karol On 23 August 2014 10:57, Eli Zaretskii wrote: >> Date: Fri, 22 Aug 2014 16:18:11 +0200 >> From: Karol Ostrovsky >> Cc: Ken Brown , Chris Zheng , 18302@debbugs.gnu.org >> >> I will try to summarise the situation, and I am attaching my updated >> solution proposal for this particular bug: >> >> 1. MSYS2 uname must be handled properly, and that is fixed in the new >> proposed patch. I disagree with not renaming opsys from mingw32 to >> mingw, since mingw32 string is used in other places in the same file >> and it means something else there, which I find possibly confusing. >> But this change is not in my new patch. >> >> 2. -mtune is back to what it was with a minimal change required for >> MSYS2+MinGW-w64 uname handling. >> >> 3. Include path for xpm in MSYS2+MinGW-w64 is handled in the same way >> as in Cygwin. Perhaps, the same type of comment as was added for >> Cygwin should be added for MSYS2+MinGW-w64. >> >> 4. A loop is added in the recipe for emacs.exe to handle >> bootstrap-emacs.exe busy problem. > > Thanks. I installed items 1, 2, and 4, but not item 3. > > If you think we should do something about the xpm.h header, then > please try this alternative solution: copy the xpm.h header file into > the X11 subdirectory of your GCC 'include' directory (the one where > you have all the standard C header files), then try configuring and > building Emacs without adding the "-I/mingw64/include/noX" switch to > CPPFLAGS. If that doesn't work, please show the error messages you > get from the compiler, and let's take it from there. > > If, for some reason, you think that copying xpm.h to include/X11/xpm.h > is not appropriate, please explain why you think so. From debbugs-submit-bounces@debbugs.gnu.org Mon Aug 25 10:56:48 2014 Received: (at 18302) by debbugs.gnu.org; 25 Aug 2014 14:56:48 +0000 Received: from localhost ([127.0.0.1]:51775 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XLvhL-0007pG-Fu for submit@debbugs.gnu.org; Mon, 25 Aug 2014 10:56:47 -0400 Received: from mtaout26.012.net.il ([80.179.55.182]:48523) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XLvhJ-0007p2-2L for 18302@debbugs.gnu.org; Mon, 25 Aug 2014 10:56:42 -0400 Received: from conversion-daemon.mtaout26.012.net.il by mtaout26.012.net.il (HyperSendmail v2007.08) id <0NAV00F00AG1TZ00@mtaout26.012.net.il> for 18302@debbugs.gnu.org; Mon, 25 Aug 2014 17:54:52 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by mtaout26.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NAV00GDCARG2L10@mtaout26.012.net.il>; Mon, 25 Aug 2014 17:54:52 +0300 (IDT) Date: Mon, 25 Aug 2014 17:56:42 +0300 From: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues In-reply-to: X-012-Sender: halo1@inter.net.il To: Karol Ostrovsky Message-id: <83oav8lis5.fsf@gnu.org> References: <83zjezb00n.fsf@gnu.org> <83y4ujaxiv.fsf@gnu.org> <83tx55c3to.fsf@gnu.org> <53F63C95.6030303@cornell.edu> <83iollbqbn.fsf@gnu.org> <53F664CF.1060705@cornell.edu> <83fvgpawb4.fsf@gnu.org> <53F73FE3.4030507@cornell.edu> <83r408myxv.fsf@gnu.org> <83bnrbmvm7.fsf@gnu.org> X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 18302 Cc: chriszheng99@gmail.com, kbrown@cornell.edu, 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Eli Zaretskii List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) > Date: Mon, 25 Aug 2014 10:18:20 +0200 > From: Karol Ostrovsky > Cc: Ken Brown , Chris Zheng , 18302@debbugs.gnu.org > > As for the item 3: as far as I understand the > situation with xpm in MinGW-w64 is the same as in Cygwin. There are > two packages providing xpm, and it is the package that is installed in > the non-standard place that must be used for Emacs native Windows > build. Thus, I don't see why the same solution that was approved for > Cygwin cannot be used for MinGW-w64. I already said that IMO Cygwin should not add any switches, either. In any case, the situation with MinGW-w64 is not the same as with Cygwin: Cygwin has a version of xpm.h that is used with the X GUI and another one that is used with the w32 GUI. By contrast, MinGW-w64 doesn't support X, so it doesn't need to have 2 different headers by the same name in the same include tree. Did you try the alternative solution I suggested? If not, please do: I'm quite sure that it will work, and free you from the need to add custom -I switches. From debbugs-submit-bounces@debbugs.gnu.org Tue Nov 28 20:46:45 2017 Received: (at 18302) by debbugs.gnu.org; 29 Nov 2017 01:46:45 +0000 Received: from localhost ([127.0.0.1]:35373 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eJrSW-0003Ej-RO for submit@debbugs.gnu.org; Tue, 28 Nov 2017 20:46:45 -0500 Received: from mail-it0-f45.google.com ([209.85.214.45]:39923) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eJrSU-0003EN-QG; Tue, 28 Nov 2017 20:46:43 -0500 Received: by mail-it0-f45.google.com with SMTP id 68so2208967ite.4; Tue, 28 Nov 2017 17:46:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=Ly6s3QyOiFTvC1XzR4YXVteDYC58RX9kEIzYrl2nMjw=; b=qk4ar861g3xsT2n5ZbaD+FF9D6S9XFwXgKsYoF80ckUYsQRrvdVw2Mo9X/V5NWSE4L aMPgTuImbibKKTcT+0R79ICF3MDcD/0skfc1HlBQqfy2q5XTeAp0kgJhbTQpIoBJkZ8B LQ5izshyu81jxk+Sq3jIIuEG5axX1Dk4kzFip5MTYUhYwExFtnVQZrOab3jaBRZ4JTzL sV10TGC5RuwNE8HrbD4xI070tY46XSb3TJT390bIPZCcMJPvEJ5ISvIpUpn39RJhEVsR UDJ4qtF1JPTUZhPkzcP/jNDzO2UaaT5VhwbG7ABrKVvD3Ci8jFnmo3hylsFk4PnnAES7 Tdtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:references:date :in-reply-to:message-id:user-agent:mime-version; bh=Ly6s3QyOiFTvC1XzR4YXVteDYC58RX9kEIzYrl2nMjw=; b=rXcHieXIYnw8aBvqHIVVlur1X/xXsvhHIWPhrOW4o8vmIOK0RWRbUvJamG1BWmgtPE wGoqYM+DsT7auLnoZW3QCcFCIt+u6xcLKyZldPI0mAmylSZyzHJDQ/GidFqayjEQZqTW U7BvMYLGuXdefvJCvLCCfixxkBkmdqR7FcrOa7WLqC+D03OFu+7SnTrAo8YAjdCsCyLy h8c2K/nmtKKdMTa+KunE3GsCobFZbTQR08sNxUA0cU4wWcDD1C1O0NB5P4ULvge61Qj7 ViYVDbSZAhBAaQuMgdmrRKgKyuLzLTQ1bPtwbU6OBAJg08n7ra3UYXillId91A+BZA8a f2ZQ== X-Gm-Message-State: AJaThX40NYzy433UoS5svCNQEEGQRxZUpSJpiM4ERsqz2lgAsu8Mln8m tyCQ+KWGp2HcvRffSgS6ribjOw== X-Google-Smtp-Source: AGs4zMZekXB9DJ2KTa4tXnM7F8pFNSSmeLooxkGx6a65VyZW1fFE9OZMNVRfcGC2HO153irexVSmBg== X-Received: by 10.36.17.15 with SMTP id 15mr5354631itf.53.1511919996656; Tue, 28 Nov 2017 17:46:36 -0800 (PST) Received: from zebian ([45.2.119.34]) by smtp.googlemail.com with ESMTPSA id e68sm12658682ite.0.2017.11.28.17.46.35 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 28 Nov 2017 17:46:35 -0800 (PST) From: Noam Postavsky To: Eli Zaretskii Subject: Re: bug#18302: MSYS2 build issues References: <83zjezb00n.fsf@gnu.org> <83y4ujaxiv.fsf@gnu.org> <83tx55c3to.fsf@gnu.org> <53F63C95.6030303@cornell.edu> <83iollbqbn.fsf@gnu.org> <53F664CF.1060705@cornell.edu> <83fvgpawb4.fsf@gnu.org> <53F73FE3.4030507@cornell.edu> <83r408myxv.fsf@gnu.org> <83bnrbmvm7.fsf@gnu.org> Date: Tue, 28 Nov 2017 20:46:34 -0500 In-Reply-To: <83bnrbmvm7.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 23 Aug 2014 11:57:20 +0300") Message-ID: <87a7z5n9fp.fsf@users.sourceforge.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.0.90 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 18302 Cc: Karol Ostrovsky , chriszheng99@gmail.com, kbrown@cornell.edu, 18302@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) close 18302 quit Eli Zaretskii writes: >> Date: Fri, 22 Aug 2014 16:18:11 +0200 >> From: Karol Ostrovsky >> Cc: Ken Brown , Chris Zheng , 18302@debbugs.gnu.org >> >> I will try to summarise the situation, and I am attaching my updated >> solution proposal for this particular bug: >> >> 1. MSYS2 uname must be handled properly, and that is fixed in the new >> proposed patch. I disagree with not renaming opsys from mingw32 to >> mingw, since mingw32 string is used in other places in the same file >> and it means something else there, which I find possibly confusing. >> But this change is not in my new patch. >> >> 2. -mtune is back to what it was with a minimal change required for >> MSYS2+MinGW-w64 uname handling. >> >> 3. Include path for xpm in MSYS2+MinGW-w64 is handled in the same way >> as in Cygwin. Perhaps, the same type of comment as was added for >> Cygwin should be added for MSYS2+MinGW-w64. >> >> 4. A loop is added in the recipe for emacs.exe to handle >> bootstrap-emacs.exe busy problem. > > Thanks. I installed items 1, 2, and 4, but not item 3. As far as I can tell, there is nothing more to do here. From unknown Fri Aug 15 12:54:17 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Wed, 27 Dec 2017 12:24:03 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator