From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Karol Ostrovsky Newsgroups: gmane.emacs.bugs Subject: bug#18302: MSYS2 build issues Date: Wed, 20 Aug 2014 11:54:53 +0200 Message-ID: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a11c359a08282d605010c98b1 X-Trace: ger.gmane.org 1408549608 30499 80.91.229.3 (20 Aug 2014 15:46:48 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 20 Aug 2014 15:46:48 +0000 (UTC) Cc: Chris Zheng To: 18302@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed Aug 20 17:46:42 2014 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1XK85e-0003A0-Jt for geb-bug-gnu-emacs@m.gmane.org; Wed, 20 Aug 2014 17:46:23 +0200 Original-Received: from localhost ([::1]:56347 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XK85e-0007EH-7c for geb-bug-gnu-emacs@m.gmane.org; Wed, 20 Aug 2014 11:46:22 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:33636) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XK85Q-00076T-4z for bug-gnu-emacs@gnu.org; Wed, 20 Aug 2014 11:46:13 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XK85L-0006fJ-SN for bug-gnu-emacs@gnu.org; Wed, 20 Aug 2014 11:46:08 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:41388) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XK85L-0006fD-FC for bug-gnu-emacs@gnu.org; Wed, 20 Aug 2014 11:46:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1XK85K-00005B-Vv for bug-gnu-emacs@gnu.org; Wed, 20 Aug 2014 11:46:03 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Karol Ostrovsky Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 20 Aug 2014 15:46:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 18302 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.140854953632716 (code B ref -1); Wed, 20 Aug 2014 15:46:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 20 Aug 2014 15:45:36 +0000 Original-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 Original-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 Original-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 Original-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 Original-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 Original-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 Original-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 Original-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== X-Received: by 10.52.164.80 with SMTP id yo16mr5231439vdb.44.1408528493465; Wed, 20 Aug 2014 02:54:53 -0700 (PDT) Original-Received: by 10.221.48.196 with HTTP; Wed, 20 Aug 2014 02:54:53 -0700 (PDT) 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-Mailman-Approved-At: Wed, 20 Aug 2014 11:45:32 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:92541 Archived-At: --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--