From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Amirouche Boubekki Newsgroups: gmane.lisp.guile.user Subject: Lessons learned building a small blog engine Date: Mon, 09 Oct 2017 13:36:08 +0200 Message-ID: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=_b680aaf48d9dbc7193cd815d8f9e104d" X-Trace: blaine.gmane.org 1507549014 18598 195.159.176.226 (9 Oct 2017 11:36:54 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Mon, 9 Oct 2017 11:36:54 +0000 (UTC) User-Agent: Roundcube Webmail/1.1.2 To: Guile User Original-X-From: guile-user-bounces+guile-user=m.gmane.org@gnu.org Mon Oct 09 13:36:48 2017 Return-path: Envelope-to: guile-user@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e1WMT-0003EF-Rg for guile-user@m.gmane.org; Mon, 09 Oct 2017 13:36:42 +0200 Original-Received: from localhost ([::1]:57260 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e1WMZ-0002SH-GT for guile-user@m.gmane.org; Mon, 09 Oct 2017 07:36:47 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:59975) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e1WM5-0002SB-Jt for guile-user@gnu.org; Mon, 09 Oct 2017 07:36:21 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e1WLz-0005Li-Co for guile-user@gnu.org; Mon, 09 Oct 2017 07:36:17 -0400 Original-Received: from relay6-d.mail.gandi.net ([2001:4b98:c:538::198]:53950) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1e1WLy-0005Ks-UJ for guile-user@gnu.org; Mon, 09 Oct 2017 07:36:11 -0400 Original-Received: from webmail.gandi.net (webmail6-d.mgt.gandi.net [10.58.1.146]) (Authenticated sender: amirouche@hypermove.net) by relay6-d.mail.gandi.net (Postfix) with ESMTPA id 01498FB8C4 for ; Mon, 9 Oct 2017 13:36:08 +0200 (CEST) X-Sender: amirouche@hypermove.net X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2001:4b98:c:538::198 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane.org@gnu.org Original-Sender: "guile-user" Xref: news.gmane.org gmane.lisp.guile.user:14198 Archived-At: --=_b680aaf48d9dbc7193cd815d8f9e104d Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Héllo all, Last week end I tried to build a blog engine. git clone https://github.com/a-guile-mind/presence In the backend I used GNU Guile and the following: - wiredtiger with feature-space database which rely on microkanren for querying. I learned nothing new in this regard, except that now I know well enough the API (which is rather simple anyway). Here is an example query to fetch comments associated with object having UID as unique identifier: (run* (uid? username? website? body? published-at?) (fresh () (fs:queryo uid? 'comment/uid uid) (fs:queryo uid? 'comment/username username?) (fs:queryo uid? 'comment/website website?) (fs:queryo uid? 'comment/body body?) (fs:queryo uid? 'comment/published-at published-at?))) This is somewhat equivalent to: SELECT comment/username comment/website comment/body comment/published-at WHERE comment/uid = uid; feature space is not typed and can be called schemaless like document databases like mongodb except it doesn't have a concept of collection and transaction can span several documents. - I created small bindings for argon2i [0] which is cryptographic library that is useful for hashing password. [0] https://github.com/P-H-C/phc-winner-argon2 The public API is missing the use of a pepper which is a secret not stored in the database. - I also use industria sha-2 for signing "cookies". Here is the interesting code if you plan on using industria it can be helpful: (define (make-hash string) (let ((hash (make-sha-512))) (sha-512-update! hash (string->utf8 string)) (sha-512-update! hash (string->utf8 secret)) (sha-512-finish! hash) (sha-512->string hash))) (define (string-sign string) (let ((hash (make-hash string))) (string-append string "$" hash))) (define (string-verify string) (match (string-split string #\$) ((value signature) (if (string=? signature (make-hash value)) value #f)) (_ #f))) secret is a global variable. Frontend side I used BiwaScheme using my frontend framework that takes inspiration from ReactJS. This is where there is a bug I don't know how to fix, yet. It's linked to autocomplete feature of firefox which is documented that it can be disabled but actually it can not... This work is based on https://github.com/a-guile-mind/guile-web Happy hacking! -- Amirouche ~ amz3 ~ http://www.hyperdev.fr --=_b680aaf48d9dbc7193cd815d8f9e104d Content-Transfer-Encoding: base64 Content-Type: text/plain; name=argon2.scm Content-Disposition: attachment; filename=argon2.scm; size=5070 Ozs7IENvcHlyaWdodCDCqSAyMDE3ICBBbWlyb3VjaGUgQm91YmVra2kgPGFtaXJvdWNoZUBoeXBl cm1vdmUubmV0Pgo7Owo7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgo7 OyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKOzsgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Cjs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K Cjs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCjs7IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgo7Owo7OyBDb21tZW50Ogo7Owo7OyAgaHR0cHM6 Ly9tYXJ0aW5mb3dsZXIuY29tL2FydGljbGVzL3dlYi1zZWN1cml0eS1iYXNpY3MuaHRtbAo7Owoo ZGVmaW5lLW1vZHVsZSAoYXJnb24yKSkKCih1c2UtbW9kdWxlcyAoaWNlLTkgYmluYXJ5LXBvcnRz KSkKKHVzZS1tb2R1bGVzIChpY2UtOSBpY29udikpCih1c2UtbW9kdWxlcyAocm5ycyBieXRldmVj dG9ycykpCih1c2UtbW9kdWxlcyAoc3lzdGVtIGZvcmVpZ24pKQoKCihkZWZpbmUgKHVyYW5kb20g bGVuZ3RoKQogICJSZXR1cm4gYSBieXRldmVjdG9yIG9mIGxlbmd0aCBMRU5HVEggZ2VuZXJhdGVk IGJ5IC9kZXYvdXJhbmRvbSIKICAobGV0ICgoYnYgKG1ha2UtYnl0ZXZlY3RvciBsZW5ndGgpKSkK ICAgIChjYWxsLXdpdGgtaW5wdXQtZmlsZSAiL2Rldi91cmFuZG9tIgogICAgICAobGFtYmRhIChw b3J0KQogICAgICAgIChsZXQgbG9vcCAoKGluZGV4IDApKQogICAgICAgICAgKHVubGVzcyAoZXE/ IGluZGV4IGxlbmd0aCkKICAgICAgICAgICAgKGxldCAoKGJ5dGUgKGdldC11OCBwb3J0KSkpCiAg ICAgICAgICAgICAgKGJ5dGV2ZWN0b3ItdTgtc2V0ISBidiBpbmRleCBieXRlKQogICAgICAgICAg ICAgIChsb29wICgrIGluZGV4IDEpKSkpKSkKICAgICAgIzpiaW5hcnkgI3RydWUpCiAgICBidikp CgooZGVmaW5lKiAoZHluYW1pYy1saW5rKiAjOm9wdGlvbmFsIGxpYnJhcnktbmFtZSkKICAobGV0 ICgoc2hhcmVkLW9iamVjdCAoaWYgbGlicmFyeS1uYW1lCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIChkeW5hbWljLWxpbmsgbGlicmFyeS1uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAoZHluYW1pYy1saW5rKSkpKQogICAgKGxhbWJkYSAocmV0dXJuLXZhbHVlIGZ1bmN0aW9uLW5h bWUgLiBhcmd1bWVudHMpCiAgICAgIChsZXQgKChmdW5jdGlvbiAoZHluYW1pYy1mdW5jIGZ1bmN0 aW9uLW5hbWUgc2hhcmVkLW9iamVjdCkpKQogICAgICAgIChwb2ludGVyLT5wcm9jZWR1cmUgcmV0 dXJuLXZhbHVlIGZ1bmN0aW9uIGFyZ3VtZW50cykpKSkpCgooZGVmaW5lIGFyZ29uMiAoZHluYW1p Yy1saW5rKiAiL3Vzci9saWIveDg2XzY0LWxpbnV4LWdudS9saWJhcmdvbjIuc28iKSkKCihkZWZp bmUgZXJyb3ItbWVzc2FnZQogIChsZXQgKChmdW5jIChhcmdvbjIgJyoKICAgICAgICAgICAgICAg ICAgICAgICAiYXJnb24yX2Vycm9yX21lc3NhZ2UiCiAgICAgICAgICAgICAgICAgICAgICAgaW50 KSkpCiAgICAobGFtYmRhIChlcnJvci1jb2RlKQogICAgICAocG9pbnRlci0+c3RyaW5nIChmdW5j IGVycm9yLWNvZGUpKSkpKQoKKGRlZmluZSBlbmNvZGVkLWxlbmd0aAogIChsZXQgKChmdW5jIChh cmdvbjIgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAiYXJnb24yX2VuY29kZWRsZW4iCiAg ICAgICAgICAgICAgICAgICAgICB1aW50MzIKICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMgog ICAgICAgICAgICAgICAgICAgICAgdWludDMyCiAgICAgICAgICAgICAgICAgICAgICB1aW50MzIK ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMikpKQogICAgKGxhbWJkYSAodGltZS1jb3N0IG1l bW9yeS1jb3N0IHBhcmFsbGVsaXNtIHNhbHQtbGVuZ3RoIGhhc2gtbGVuZ3RoKQogICAgICAoZnVu YyB0aW1lLWNvc3QgbWVtb3J5LWNvc3QgcGFyYWxsZWxpc20gc2FsdC1sZW5ndGggaGFzaC1sZW5n dGgpKSkpCgooZGVmaW5lIGFyZ29uMmktaGFzaC1lbmNvZGUKICAobGV0ICgoZnVuYyAoYXJnb24y IGludAogICAgICAgICAgICAgICAgICAgICAgImFyZ29uMmlfaGFzaF9lbmNvZGVkIgogICAgICAg ICAgICAgICAgICAgICAgdWludDMyICAgIDs7IHRfY29zdCBudW1iZXIgb2YgaXRlcmF0aW9ucwog ICAgICAgICAgICAgICAgICAgICAgdWludDMyICAgIDs7IG1fY29zdCBtZW1vcnkgdXNhZ2UgCiAg ICAgICAgICAgICAgICAgICAgICB1aW50MzIgICAgOzsgcGFyYWxsZWxpc20gbnVtYmVyCiAgICAg ICAgICAgICAgICAgICAgICAnKiAgICAgICAgOzsgcGFzc3dvcmQKICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCAgICA7OyBwYXNzd29yZCBsZW5ndGgKICAgICAgICAgICAgICAgICAgICAgICcq ICAgICAgICA7OyBzYWx0IAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgIDs7IHNhbHQg bGVuZ3RoCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgOzsgZGVzaXJlZCBsZW5ndGgg b2YgdGhlIGhhc2ggaW4gYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgICcqICAgICAgICA7OyBi dWZmZXIKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCkpKSA7OyBidWZmZXIgbGVuZ3RoCiAg ICAobGFtYmRhICh0aW1lLWNvc3QgbWVtb3J5LWNvc3QgcGFyYWxsZWxpc20gcGFzc3dvcmQgc2Fs dCBoYXNoLWxlbmd0aCBsZW5ndGgpCiAgICAgIChsZXQgKChoYXNoIChtYWtlLWJ5dGV2ZWN0b3Ig bGVuZ3RoKSkpCiAgICAgICAgKGxldCAoKG91dCAoZnVuYyB0aW1lLWNvc3QKICAgICAgICAgICAg ICAgICAgICAgICAgIG1lbW9yeS1jb3N0CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbGxl bGlzbQogICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGV2ZWN0b3ItPnBvaW50ZXIgcGFzc3dv cmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZXZlY3Rvci1sZW5ndGggcGFzc3dvcmQp CiAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgc2FsdCAoYnl0ZXZlY3Rvci0+cG9pbnRlciBz YWx0KSAlbnVsbC1wb2ludGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHNhbHQgKGJ5 dGV2ZWN0b3ItbGVuZ3RoIHNhbHQpIDApCiAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLWxl bmd0aAogICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGV2ZWN0b3ItPnBvaW50ZXIgaGFzaCkK ICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCkpKQogICAgICAgICAgKGlmICh6ZXJvPyBv dXQpCiAgICAgICAgICAgIGhhc2gKICAgICAgICAgICAgKHRocm93ICdhcmdvbjIgKGVycm9yLW1l c3NhZ2Ugb3V0KSkpKSkpKSkKCihkZWZpbmUtcHVibGljIChoYXNoLXNlY3JldCBwYXNzd29yZCkK ICAobGV0ICgodGltZS1jb3N0IDIpICA7OyBkZWZhdWx0IHZhbHVlcyBmcm9tIGFyZ29uMl9jZmZp CiAgICAgICAgKG1lbW9yeS1jb3N0IDUxMikKICAgICAgICAocGFyYWxsZWxpc20gMikKICAgICAg ICAobGVuZ3RoIDE2KQogICAgICAgIChzYWx0ICh1cmFuZG9tIDE2KSkpCiAgICAobGV0ICgodG90 YWwgKGVuY29kZWQtbGVuZ3RoIHRpbWUtY29zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtZW1vcnktY29zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbGxl bGlzbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKSkpCiAgICAgICh1dGY4LT5zdHJpbmcgKGFyZ29u MmktaGFzaC1lbmNvZGUgdGltZS1jb3N0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWVtb3J5LWNvc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwYXJhbGxlbGlzbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChzdHJpbmctPnV0ZjggcGFzc3dvcmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2FsdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl bmd0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsKSkpKSkK CihkZWZpbmUgYXJnb24yaS12ZXJpZnkgKGFyZ29uMiBpbnQKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJhcmdvbjJpX3ZlcmlmeSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICcqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90KSkKCihkZWZpbmUtcHVibGljICh2ZXJpZnkgZW5jb2RlZCBwYXNz d29yZCkKICAobGV0ICgocGFzc3dvcmQqIChzdHJpbmctPnV0ZjggcGFzc3dvcmQpKSkKICAgIChs ZXQgKChvdXQgKGFyZ29uMmktdmVyaWZ5IChieXRldmVjdG9yLT5wb2ludGVyIChzdHJpbmctPnV0 ZjggZW5jb2RlZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZXZlY3Rvci0+ cG9pbnRlciBwYXNzd29yZCopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZXZl Y3Rvci1sZW5ndGggcGFzc3dvcmQqKSkpKQogICAgICAoaWYgKHplcm8/IG91dCkKICAgICAgICAg ICN0CiAgICAgICAgICAodGhyb3cgJ2FyZ29uMiAoZXJyb3ItbWVzc2FnZSBvdXQpKSkpKSkK --=_b680aaf48d9dbc7193cd815d8f9e104d Content-Transfer-Encoding: base64 Content-Type: text/plain; name=hmac.scm Content-Disposition: attachment; filename=hmac.scm; size=2565 OzsgLSotIG1vZGU6IHNjaGVtZTsgY29kaW5nOiB1dGYtOCAtKi0KOzsgQ29weXJpZ2h0IMKpIDIw MDksIDIwMTIgR8O2cmFuIFdlaW5ob2x0IDxnb3JhbkB3ZWluaG9sdC5zZT4KCjs7IFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCjs7IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCjs7IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KOzsgdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsCjs7IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo7OyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKOzsgVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVk ZWQgaW4KOzsgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdh cmUuCgo7OyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo7OyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKOzsgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQg U0hBTEwKOzsgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKOzsgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKOzsgRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF Ugo7OyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiMhcjZycwoKOzsgUkZDIDIxMDQsIEZJUFMt MTk4LTEuCgoobGlicmFyeSAoaG1hYykKICAoZXhwb3J0IG1ha2UtaG1hYykKICAoaW1wb3J0IChy bnJzKSkKCiAgOzsgUmV0dXJucyBhIHByb2NlZHVyZSB0aGF0IGNhbGN1bGF0ZXMgdGhlIEhNQUMg Z2l2ZW4gYSBzZWNyZXQgYW5kCiAgOzsgZGF0YSAoYm90aCBvZiB3aGljaCBhcmUgYnl0ZXZlY3Rv cnMpLgogIChkZWZpbmUgKG1ha2UtaG1hYyBibG9jay1sZW5ndGggaGFzaCAtPmJ5dGV2ZWN0b3Ig bWFrZS1oYXNoIHVwZGF0ZSEgZmluaXNoISBjbGVhciEpCiAgICAobGFtYmRhIChzZWNyZXQgLiBk YXRhKQogICAgICAobGV0IGxwICgoc2VjcmV0IHNlY3JldCkpCiAgICAgICAgKGlmICg+IChieXRl dmVjdG9yLWxlbmd0aCBzZWNyZXQpIGJsb2NrLWxlbmd0aCkKICAgICAgICAgICAgKGxwICgtPmJ5 dGV2ZWN0b3IgKGhhc2ggc2VjcmV0KSkpCiAgICAgICAgICAgIChsZXQgKChrLWlwYWQgKG1ha2Ut Ynl0ZXZlY3RvciBibG9jay1sZW5ndGggMCkpCiAgICAgICAgICAgICAgICAgIChrLW9wYWQgKG1h a2UtYnl0ZXZlY3RvciBibG9jay1sZW5ndGggMCkpKQogICAgICAgICAgICAgIChieXRldmVjdG9y LWNvcHkhIHNlY3JldCAwIGstaXBhZCAwIChieXRldmVjdG9yLWxlbmd0aCBzZWNyZXQpKQogICAg ICAgICAgICAgIChieXRldmVjdG9yLWNvcHkhIHNlY3JldCAwIGstb3BhZCAwIChieXRldmVjdG9y LWxlbmd0aCBzZWNyZXQpKQogICAgICAgICAgICAgIChkbyAoKGkgMCAoZngrIGkgMSkpKQogICAg ICAgICAgICAgICAgICAoKGZ4PT8gaSBibG9jay1sZW5ndGgpKQogICAgICAgICAgICAgICAgKGJ5 dGV2ZWN0b3ItdTgtc2V0ISBrLWlwYWQgaSAoZnh4b3IgI3gzNiAoYnl0ZXZlY3Rvci11OC1yZWYg ay1pcGFkIGkpKSkKICAgICAgICAgICAgICAgIChieXRldmVjdG9yLXU4LXNldCEgay1vcGFkIGkg KGZ4eG9yICN4NWMgKGJ5dGV2ZWN0b3ItdTgtcmVmIGstb3BhZCBpKSkpKQogICAgICAgICAgICAg IChsZXQgKChzdGF0ZSAobWFrZS1oYXNoKSkpCiAgICAgICAgICAgICAgICAodXBkYXRlISBzdGF0 ZSBrLWlwYWQpCiAgICAgICAgICAgICAgICAoZm9yLWVhY2ggKGxhbWJkYSAoZCkgKHVwZGF0ZSEg c3RhdGUgZCkpIGRhdGEpCiAgICAgICAgICAgICAgICAoZmluaXNoISBzdGF0ZSkKICAgICAgICAg ICAgICAgIChsZXQgKChkaWdlc3QgKC0+Ynl0ZXZlY3RvciBzdGF0ZSkpKQogICAgICAgICAgICAg ICAgICAoY2xlYXIhIHN0YXRlKQogICAgICAgICAgICAgICAgICAodXBkYXRlISBzdGF0ZSBrLW9w YWQpCiAgICAgICAgICAgICAgICAgICh1cGRhdGUhIHN0YXRlIGRpZ2VzdCkKICAgICAgICAgICAg ICAgICAgKGZpbmlzaCEgc3RhdGUpCiAgICAgICAgICAgICAgICAgIHN0YXRlKSkpKSkpKQogICkK --=_b680aaf48d9dbc7193cd815d8f9e104d Content-Transfer-Encoding: base64 Content-Type: text/plain; name=sha-2.scm Content-Disposition: attachment; filename=sha-2.scm; size=24648 OzsgLSotIG1vZGU6IHNjaGVtZTsgY29kaW5nOiB1dGYtOCAtKi0KOzsgQ29weXJpZ2h0IMKpIDIw MDksIDIwMTAsIDIwMTIgR8O2cmFuIFdlaW5ob2x0IDxnb3JhbkB3ZWluaG9sdC5zZT4KCjs7IFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCjs7IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCjs7IHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KOzsg dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCjs7IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo7OyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKOzsgVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUg aW5jbHVkZWQgaW4KOzsgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUg U29mdHdhcmUuCgo7OyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo7OyBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKOzsgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8g RVZFTlQgU0hBTEwKOzsgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKOzsgTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKOzsgRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUgo7OyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiMhcjZycwoKOzsgQnl0ZS1vcmll bnRlZCBTSEEtMjI0LzI1NiBhbmQgU0hBLTM4NC81MTIgZnJvbSBGSVBTIDE4MC0zCgo7OyBSRkMz ODc0IFNIQS0yMjQKCjs7IFRPRE86IGdpdmUgYW4gZXJyb3IgaWYgbW9yZSB0aGFuIDJeNjQgLyAy XjEyOCBiaXRzIGFyZSBwcm9jZXNzZWQ/Cjs7IFRPRE86IE9wdGltaXplLiBTaG91bGQgYmUgc2lt cGxlIGVub3VnaCB3aXRoIHRoZSBoZWxwIG9mIGEgcHJvZmlsZXIuCgoobGlicmFyeSAoc2hhLTIp CiAgKGV4cG9ydCBtYWtlLXNoYS0yMjQgc2hhLTIyNC11cGRhdGUhIHNoYS0yMjQtZmluaXNoISBz aGEtMjI0LWNsZWFyIQogICAgICAgICAgc2hhLTIyNCBzaGEtMjI0LWNvcHkgc2hhLTIyNC1maW5p c2ggc2hhLTIyNC1sZW5ndGgKICAgICAgICAgIHNoYS0yMjQtY29weS1oYXNoISBzaGEtMjI0LTEy OC1jb3B5LWhhc2ghCiAgICAgICAgICBzaGEtMjI0LT5ieXRldmVjdG9yIHNoYS0yMjQtPnN0cmlu ZwogICAgICAgICAgc2hhLTIyNC1oYXNoPT8gc2hhLTIyNC0xMjgtaGFzaD0/CiAgICAgICAgICBo bWFjLXNoYS0yMjQKCiAgICAgICAgICBtYWtlLXNoYS0yNTYgc2hhLTI1Ni11cGRhdGUhIHNoYS0y NTYtZmluaXNoISBzaGEtMjU2LWNsZWFyIQogICAgICAgICAgc2hhLTI1NiBzaGEtMjU2LWNvcHkg c2hhLTI1Ni1maW5pc2ggc2hhLTI1Ni1sZW5ndGgKICAgICAgICAgIHNoYS0yNTYtY29weS1oYXNo ISBzaGEtMjU2LTEyOC1jb3B5LWhhc2ghCiAgICAgICAgICBzaGEtMjU2LT5ieXRldmVjdG9yIHNo YS0yNTYtPnN0cmluZwogICAgICAgICAgc2hhLTI1Ni1oYXNoPT8gc2hhLTI1Ni0xMjgtaGFzaD0/ CiAgICAgICAgICBobWFjLXNoYS0yNTYKCiAgICAgICAgICBtYWtlLXNoYS0zODQgc2hhLTM4NC11 cGRhdGUhIHNoYS0zODQtZmluaXNoISBzaGEtMzg0LWNsZWFyIQogICAgICAgICAgc2hhLTM4NCBz aGEtMzg0LWNvcHkgc2hhLTM4NC1maW5pc2ggc2hhLTM4NC1sZW5ndGgKICAgICAgICAgIHNoYS0z ODQtY29weS1oYXNoISBzaGEtMzg0LTEyOC1jb3B5LWhhc2ghCiAgICAgICAgICBzaGEtMzg0LT5i eXRldmVjdG9yIHNoYS0zODQtPnN0cmluZwogICAgICAgICAgc2hhLTM4NC1oYXNoPT8gc2hhLTM4 NC0xMjgtaGFzaD0/CiAgICAgICAgICBobWFjLXNoYS0zODQKCiAgICAgICAgICBtYWtlLXNoYS01 MTIgc2hhLTUxMi11cGRhdGUhIHNoYS01MTItZmluaXNoISBzaGEtNTEyLWNsZWFyIQogICAgICAg ICAgc2hhLTUxMiBzaGEtNTEyLWNvcHkgc2hhLTUxMi1maW5pc2ggc2hhLTUxMi1sZW5ndGgKICAg ICAgICAgIHNoYS01MTItY29weS1oYXNoISBzaGEtNTEyLTEyOC1jb3B5LWhhc2ghCiAgICAgICAg ICBzaGEtNTEyLT5ieXRldmVjdG9yIHNoYS01MTItPnN0cmluZwogICAgICAgICAgc2hhLTUxMi1o YXNoPT8gc2hhLTUxMi0xMjgtaGFzaD0/CiAgICAgICAgICBobWFjLXNoYS01MTIpCiAgKGltcG9y dCAocm5ycykKICAgICAgICAgIChobWFjKSkKCiAgKGRlZmluZSAoc2hhLTIyNC1sZW5ndGgpIDIy NC84KQogIChkZWZpbmUgKHNoYS0yNTYtbGVuZ3RoKSAyNTYvOCkKICAoZGVmaW5lIChzaGEtMzg0 LWxlbmd0aCkgMzg0LzgpCiAgKGRlZmluZSAoc2hhLTUxMi1sZW5ndGgpIDUxMi84KQogIAogIChk ZWZpbmUgKHZlY3Rvci1jb3B5IHgpICh2ZWN0b3ItbWFwIChsYW1iZGEgKGkpIGkpIHgpKQoKICAo ZGVmaW5lIChyb3IzMiBuIGNvdW50KQogICAgKGxldCAoKGZpZWxkMSAoYml0d2lzZS1hbmQgI3hm ZmZmZmZmZiAoYml0d2lzZS1hcml0aG1ldGljLXNoaWZ0LWxlZnQgbiAoLSAzMiBjb3VudCkpKSkK ICAgICAgICAgIChmaWVsZDIgKGJpdHdpc2UtYXJpdGhtZXRpYy1zaGlmdC1yaWdodCBuIGNvdW50 KSkpCiAgICAgIChiaXR3aXNlLWlvciBmaWVsZDEgZmllbGQyKSkpCgogIChkZWZpbmUgKHJvcjY0 IG4gY291bnQpCiAgICAobGV0ICgoZmllbGQxIChiaXR3aXNlLWFuZCAjeGZmZmZmZmZmZmZmZmZm ZmYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiaXR3aXNlLWFyaXRobWV0aWMtc2hp ZnQtbGVmdCBuICgtIDY0IGNvdW50KSkpKQogICAgICAgICAgKGZpZWxkMiAoYml0d2lzZS1hcml0 aG1ldGljLXNoaWZ0LXJpZ2h0IG4gY291bnQpKSkKICAgICAgKGJpdHdpc2UtaW9yIGZpZWxkMSBm aWVsZDIpKSkKCgogIChkZWZpbmUtcmVjb3JkLXR5cGUgc2hhLXN0YXRlCiAgICAoZmllbGRzIChp bW11dGFibGUgSCkgICAgICAgICAgICAgICA7SGFzaAogICAgICAgICAgICAoaW1tdXRhYmxlIGlu aXQpICAgICAgICAgICAgO2luaXRpYWwgaGFzaAogICAgICAgICAgICAoaW1tdXRhYmxlIFcpICAg ICAgICAgICAgICAgO3RlbXBvcmFyeSBkYXRhCiAgICAgICAgICAgIChpbW11dGFibGUgbSkgICAg ICAgICAgICAgICA7dW5wcm9jZXNzZWQgZGF0YQogICAgICAgICAgICAobXV0YWJsZSBwZW5kaW5n KSAgICAgICAgICAgO2xlbmd0aCBvZiB1bnByb2Nlc3NlZCBkYXRhCiAgICAgICAgICAgIChtdXRh YmxlIHByb2Nlc3NlZCkpKSAgICAgICA7bGVuZ3RoIG9mIHByb2Nlc3NlZCBkYXRhCgogIChkZWZp bmUgKG1ha2Utc2hhLTIgaW5pdGlhbC1oYXNoKQogICAgKGxldCAoKFcgKG1ha2UtdmVjdG9yIDgw ICNmKSkKICAgICAgICAgIChtIChtYWtlLWJ5dGV2ZWN0b3IgKCogNCAzMikpKSkKICAgICAgKG1h a2Utc2hhLXN0YXRlIChsaXN0LT52ZWN0b3IgaW5pdGlhbC1oYXNoKQogICAgICAgICAgICAgICAg ICAgICAgaW5pdGlhbC1oYXNoCiAgICAgICAgICAgICAgICAgICAgICBXIG0gMCAwKSkpCgogIChk ZWZpbmUgKG1ha2Utc2hhLTIyNCkgKG1ha2Utc2hhLTIgaW5pdGlhbC1oYXNoMjI0KSkKICAoZGVm aW5lIChtYWtlLXNoYS0yNTYpIChtYWtlLXNoYS0yIGluaXRpYWwtaGFzaDI1NikpCiAgKGRlZmlu ZSAobWFrZS1zaGEtMzg0KSAobWFrZS1zaGEtMiBpbml0aWFsLWhhc2gzODQpKQogIChkZWZpbmUg KG1ha2Utc2hhLTUxMikgKG1ha2Utc2hhLTIgaW5pdGlhbC1oYXNoNTEyKSkKCiAgKGRlZmluZSAo c2hhLTItY29weSBzdGF0ZSkKICAgIChsZXQgKChIICh2ZWN0b3ItY29weSAoc2hhLXN0YXRlLUgg c3RhdGUpKSkKICAgICAgICAgIChXIChtYWtlLXZlY3RvciA4MCAjZikpCiAgICAgICAgICAobSAo Ynl0ZXZlY3Rvci1jb3B5IChzaGEtc3RhdGUtbSBzdGF0ZSkpKSkKICAgICAgKG1ha2Utc2hhLXN0 YXRlIEgKICAgICAgICAgICAgICAgICAgICAgIChzaGEtc3RhdGUtaW5pdCBzdGF0ZSkKICAgICAg ICAgICAgICAgICAgICAgIFcgbQogICAgICAgICAgICAgICAgICAgICAgKHNoYS1zdGF0ZS1wZW5k aW5nIHN0YXRlKQogICAgICAgICAgICAgICAgICAgICAgKHNoYS1zdGF0ZS1wcm9jZXNzZWQgc3Rh dGUpKSkpCgogIChkZWZpbmUgKHNoYS0yMjQtY29weSB4KSAoc2hhLTItY29weSB4KSkKICAoZGVm aW5lIChzaGEtMjU2LWNvcHkgeCkgKHNoYS0yLWNvcHkgeCkpCiAgKGRlZmluZSAoc2hhLTM4NC1j b3B5IHgpIChzaGEtMi1jb3B5IHgpKQogIChkZWZpbmUgKHNoYS01MTItY29weSB4KSAoc2hhLTIt Y29weSB4KSkKCiAgKGRlZmluZSAoc2hhLTItY2xlYXIhIHN0YXRlKQogICAgKGRvICgoaW5pdCAo c2hhLXN0YXRlLWluaXQgc3RhdGUpIChjZHIgaW5pdCkpCiAgICAgICAgIChpIDAgKCsgaSAxKSkp CiAgICAgICAgKChudWxsPyBpbml0KSkKICAgICAgKHZlY3Rvci1zZXQhIChzaGEtc3RhdGUtSCBz dGF0ZSkgaSAoY2FyIGluaXQpKSkKICAgICh2ZWN0b3ItZmlsbCEgKHNoYS1zdGF0ZS1XIHN0YXRl KSAjZikKICAgIChieXRldmVjdG9yLWZpbGwhIChzaGEtc3RhdGUtbSBzdGF0ZSkgMCkKICAgIChz aGEtc3RhdGUtcGVuZGluZy1zZXQhIHN0YXRlIDApCiAgICAoc2hhLXN0YXRlLXByb2Nlc3NlZC1z ZXQhIHN0YXRlIDApKQoKICAoZGVmaW5lIChzaGEtMjI0LWNsZWFyISBzdGF0ZSkgKHNoYS0yLWNs ZWFyISBzdGF0ZSkpCiAgKGRlZmluZSAoc2hhLTI1Ni1jbGVhciEgc3RhdGUpIChzaGEtMi1jbGVh ciEgc3RhdGUpKQogIChkZWZpbmUgKHNoYS0zODQtY2xlYXIhIHN0YXRlKSAoc2hhLTItY2xlYXIh IHN0YXRlKSkKICAoZGVmaW5lIChzaGEtNTEyLWNsZWFyISBzdGF0ZSkgKHNoYS0yLWNsZWFyISBz dGF0ZSkpCgoKICAoZGVmaW5lIGluaXRpYWwtaGFzaDIyNCAnKCN4YzEwNTllZDggI3gzNjdjZDUw NyAjeDMwNzBkZDE3ICN4ZjcwZTU5MzkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICN4ZmZj MDBiMzEgI3g2ODU4MTUxMSAjeDY0Zjk4ZmE3ICN4YmVmYTRmYTQpKQoKICAoZGVmaW5lIGluaXRp YWwtaGFzaDI1NiAnKCN4NmEwOWU2NjcgI3hiYjY3YWU4NSAjeDNjNmVmMzcyICN4YTU0ZmY1M2EK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICN4NTEwZTUyN2YgI3g5YjA1Njg4YyAjeDFmODNk OWFiICN4NWJlMGNkMTkpKQoKICAoZGVmaW5lIGluaXRpYWwtaGFzaDM4NCAnKCN4Y2JiYjlkNWRj MTA1OWVkOCAjeDYyOWEyOTJhMzY3Y2Q1MDcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICN4 OTE1OTAxNWEzMDcwZGQxNyAjeDE1MmZlY2Q4ZjcwZTU5MzkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICN4NjczMzI2NjdmZmMwMGIzMSAjeDhlYjQ0YTg3Njg1ODE1MTEKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICN4ZGIwYzJlMGQ2NGY5OGZhNyAjeDQ3YjU0ODFkYmVmYTRmYTQpKQoK ICAoZGVmaW5lIGluaXRpYWwtaGFzaDUxMiAnKCN4NmEwOWU2NjdmM2JjYzkwOCAjeGJiNjdhZTg1 ODRjYWE3M2IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICN4M2M2ZWYzNzJmZTk0ZjgyYiAj eGE1NGZmNTNhNWYxZDM2ZjEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICN4NTEwZTUyN2Zh ZGU2ODJkMSAjeDliMDU2ODhjMmIzZTZjMWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICN4 MWY4M2Q5YWJmYjQxYmQ2YiAjeDViZTBjZDE5MTM3ZTIxNzkpKQoKCiAgKGRlZmluZSAoQ2ggeCB5 IHopCiAgICAoYml0d2lzZS14b3IgKGJpdHdpc2UtYW5kIHggeSkKICAgICAgICAgICAgICAgICAo Yml0d2lzZS1hbmQgKGJpdHdpc2Utbm90IHgpIHopKSkKCiAgKGRlZmluZSBQYXJpdHkgYml0d2lz ZS14b3IpCgogIChkZWZpbmUgKE1haiB4IHkgeikKICAgIChiaXR3aXNlLXhvciAoYml0d2lzZS1h bmQgeCB5KQogICAgICAgICAgICAgICAgIChiaXR3aXNlLWFuZCB4IHopCiAgICAgICAgICAgICAg ICAgKGJpdHdpc2UtYW5kIHkgeikpKQoKCgogIChkZWZpbmUgKFNpZ21hMC0yNTYgeCkKICAgIChi aXR3aXNlLXhvciAocm9yMzIgeCAyKQogICAgICAgICAgICAgICAgIChyb3IzMiB4IDEzKQogICAg ICAgICAgICAgICAgIChyb3IzMiB4IDIyKSkpCgogIChkZWZpbmUgKFNpZ21hMS0yNTYgeCkKICAg IChiaXR3aXNlLXhvciAocm9yMzIgeCA2KQogICAgICAgICAgICAgICAgIChyb3IzMiB4IDExKQog ICAgICAgICAgICAgICAgIChyb3IzMiB4IDI1KSkpCgogIChkZWZpbmUgKHNpZ21hMC0yNTYgeCkK ICAgIChiaXR3aXNlLXhvciAocm9yMzIgeCA3KQogICAgICAgICAgICAgICAgIChyb3IzMiB4IDE4 KQogICAgICAgICAgICAgICAgIChiaXR3aXNlLWFyaXRobWV0aWMtc2hpZnQtcmlnaHQgeCAzKSkp CgogIChkZWZpbmUgKHNpZ21hMS0yNTYgeCkKICAgIChiaXR3aXNlLXhvciAocm9yMzIgeCAxNykK ICAgICAgICAgICAgICAgICAocm9yMzIgeCAxOSkKICAgICAgICAgICAgICAgICAoYml0d2lzZS1h cml0aG1ldGljLXNoaWZ0LXJpZ2h0IHggMTApKSkKCgogIChkZWZpbmUgKFNpZ21hMC01MTIgeCkK ICAgIChiaXR3aXNlLXhvciAocm9yNjQgeCAyOCkKICAgICAgICAgICAgICAgICAocm9yNjQgeCAz NCkKICAgICAgICAgICAgICAgICAocm9yNjQgeCAzOSkpKQoKICAoZGVmaW5lIChTaWdtYTEtNTEy IHgpCiAgICAoYml0d2lzZS14b3IgKHJvcjY0IHggMTQpCiAgICAgICAgICAgICAgICAgKHJvcjY0 IHggMTgpCiAgICAgICAgICAgICAgICAgKHJvcjY0IHggNDEpKSkKCiAgKGRlZmluZSAoc2lnbWEw LTUxMiB4KQogICAgKGJpdHdpc2UteG9yIChyb3I2NCB4IDEpCiAgICAgICAgICAgICAgICAgKHJv cjY0IHggOCkKICAgICAgICAgICAgICAgICAoYml0d2lzZS1hcml0aG1ldGljLXNoaWZ0LXJpZ2h0 IHggNykpKQoKICAoZGVmaW5lIChzaWdtYTEtNTEyIHgpCiAgICAoYml0d2lzZS14b3IgKHJvcjY0 IHggMTkpCiAgICAgICAgICAgICAgICAgKHJvcjY0IHggNjEpCiAgICAgICAgICAgICAgICAgKGJp dHdpc2UtYXJpdGhtZXRpYy1zaGlmdC1yaWdodCB4IDYpKSkKCiAgKGRlZmluZSBrLTI1NgogICAg JyMoI3g0MjhhMmY5OCAjeDcxMzc0NDkxICN4YjVjMGZiY2YgI3hlOWI1ZGJhNQogICAgICAgI3gz OTU2YzI1YiAjeDU5ZjExMWYxICN4OTIzZjgyYTQgI3hhYjFjNWVkNQogICAgICAgI3hkODA3YWE5 OCAjeDEyODM1YjAxICN4MjQzMTg1YmUgI3g1NTBjN2RjMwogICAgICAgI3g3MmJlNWQ3NCAjeDgw ZGViMWZlICN4OWJkYzA2YTcgI3hjMTliZjE3NAogICAgICAgI3hlNDliNjljMSAjeGVmYmU0Nzg2 ICN4MGZjMTlkYzYgI3gyNDBjYTFjYwogICAgICAgI3gyZGU5MmM2ZiAjeDRhNzQ4NGFhICN4NWNi MGE5ZGMgI3g3NmY5ODhkYQogICAgICAgI3g5ODNlNTE1MiAjeGE4MzFjNjZkICN4YjAwMzI3Yzgg I3hiZjU5N2ZjNwogICAgICAgI3hjNmUwMGJmMyAjeGQ1YTc5MTQ3ICN4MDZjYTYzNTEgI3gxNDI5 Mjk2NwogICAgICAgI3gyN2I3MGE4NSAjeDJlMWIyMTM4ICN4NGQyYzZkZmMgI3g1MzM4MGQxMwog ICAgICAgI3g2NTBhNzM1NCAjeDc2NmEwYWJiICN4ODFjMmM5MmUgI3g5MjcyMmM4NQogICAgICAg I3hhMmJmZThhMSAjeGE4MWE2NjRiICN4YzI0YjhiNzAgI3hjNzZjNTFhMwogICAgICAgI3hkMTky ZTgxOSAjeGQ2OTkwNjI0ICN4ZjQwZTM1ODUgI3gxMDZhYTA3MAogICAgICAgI3gxOWE0YzExNiAj eDFlMzc2YzA4ICN4Mjc0ODc3NGMgI3gzNGIwYmNiNQogICAgICAgI3gzOTFjMGNiMyAjeDRlZDhh YTRhICN4NWI5Y2NhNGYgI3g2ODJlNmZmMwogICAgICAgI3g3NDhmODJlZSAjeDc4YTU2MzZmICN4 ODRjODc4MTQgI3g4Y2M3MDIwOAogICAgICAgI3g5MGJlZmZmYSAjeGE0NTA2Y2ViICN4YmVmOWEz ZjcgI3hjNjcxNzhmMikpCgogIChkZWZpbmUgay01MTIKICAgICcjKCN4NDI4YTJmOThkNzI4YWUy MiAjeDcxMzc0NDkxMjNlZjY1Y2QgI3hiNWMwZmJjZmVjNGQzYjJmICN4ZTliNWRiYTU4MTg5ZGJi YwogICAgICAgI3gzOTU2YzI1YmYzNDhiNTM4ICN4NTlmMTExZjFiNjA1ZDAxOSAjeDkyM2Y4MmE0 YWYxOTRmOWIgI3hhYjFjNWVkNWRhNmQ4MTE4CiAgICAgICAjeGQ4MDdhYTk4YTMwMzAyNDIgI3gx MjgzNWIwMTQ1NzA2ZmJlICN4MjQzMTg1YmU0ZWU0YjI4YyAjeDU1MGM3ZGMzZDVmZmI0ZTIKICAg ICAgICN4NzJiZTVkNzRmMjdiODk2ZiAjeDgwZGViMWZlM2IxNjk2YjEgI3g5YmRjMDZhNzI1Yzcx MjM1ICN4YzE5YmYxNzRjZjY5MjY5NAogICAgICAgI3hlNDliNjljMTllZjE0YWQyICN4ZWZiZTQ3 ODYzODRmMjVlMyAjeDBmYzE5ZGM2OGI4Y2Q1YjUgI3gyNDBjYTFjYzc3YWM5YzY1CiAgICAgICAj eDJkZTkyYzZmNTkyYjAyNzUgI3g0YTc0ODRhYTZlYTZlNDgzICN4NWNiMGE5ZGNiZDQxZmJkNCAj eDc2Zjk4OGRhODMxMTUzYjUKICAgICAgICN4OTgzZTUxNTJlZTY2ZGZhYiAjeGE4MzFjNjZkMmRi NDMyMTAgI3hiMDAzMjdjODk4ZmIyMTNmICN4YmY1OTdmYzdiZWVmMGVlNAogICAgICAgI3hjNmUw MGJmMzNkYTg4ZmMyICN4ZDVhNzkxNDc5MzBhYTcyNSAjeDA2Y2E2MzUxZTAwMzgyNmYgI3gxNDI5 Mjk2NzBhMGU2ZTcwCiAgICAgICAjeDI3YjcwYTg1NDZkMjJmZmMgI3gyZTFiMjEzODVjMjZjOTI2 ICN4NGQyYzZkZmM1YWM0MmFlZCAjeDUzMzgwZDEzOWQ5NWIzZGYKICAgICAgICN4NjUwYTczNTQ4 YmFmNjNkZSAjeDc2NmEwYWJiM2M3N2IyYTggI3g4MWMyYzkyZTQ3ZWRhZWU2ICN4OTI3MjJjODUx NDgyMzUzYgogICAgICAgI3hhMmJmZThhMTRjZjEwMzY0ICN4YTgxYTY2NGJiYzQyMzAwMSAjeGMy NGI4YjcwZDBmODk3OTEgI3hjNzZjNTFhMzA2NTRiZTMwCiAgICAgICAjeGQxOTJlODE5ZDZlZjUy MTggI3hkNjk5MDYyNDU1NjVhOTEwICN4ZjQwZTM1ODU1NzcxMjAyYSAjeDEwNmFhMDcwMzJiYmQx YjgKICAgICAgICN4MTlhNGMxMTZiOGQyZDBjOCAjeDFlMzc2YzA4NTE0MWFiNTMgI3gyNzQ4Nzc0 Y2RmOGVlYjk5ICN4MzRiMGJjYjVlMTliNDhhOAogICAgICAgI3gzOTFjMGNiM2M1Yzk1YTYzICN4 NGVkOGFhNGFlMzQxOGFjYiAjeDViOWNjYTRmNzc2M2UzNzMgI3g2ODJlNmZmM2Q2YjJiOGEzCiAg ICAgICAjeDc0OGY4MmVlNWRlZmIyZmMgI3g3OGE1NjM2ZjQzMTcyZjYwICN4ODRjODc4MTRhMWYw YWI3MiAjeDhjYzcwMjA4MWE2NDM5ZWMKICAgICAgICN4OTBiZWZmZmEyMzYzMWUyOCAjeGE0NTA2 Y2ViZGU4MmJkZTkgI3hiZWY5YTNmN2IyYzY3OTE1ICN4YzY3MTc4ZjJlMzcyNTMyYgogICAgICAg I3hjYTI3M2VjZWVhMjY2MTljICN4ZDE4NmI4YzcyMWMwYzIwNyAjeGVhZGE3ZGQ2Y2RlMGViMWUg I3hmNTdkNGY3ZmVlNmVkMTc4CiAgICAgICAjeDA2ZjA2N2FhNzIxNzZmYmEgI3gwYTYzN2RjNWEy Yzg5OGE2ICN4MTEzZjk4MDRiZWY5MGRhZSAjeDFiNzEwYjM1MTMxYzQ3MWIKICAgICAgICN4Mjhk Yjc3ZjUyMzA0N2Q4NCAjeDMyY2FhYjdiNDBjNzI0OTMgI3gzYzllYmUwYTE1YzliZWJjICN4NDMx ZDY3YzQ5YzEwMGQ0YwogICAgICAgI3g0Y2M1ZDRiZWNiM2U0MmI2ICN4NTk3ZjI5OWNmYzY1N2Uy YSAjeDVmY2I2ZmFiM2FkNmZhZWMgI3g2YzQ0MTk4YzRhNDc1ODE3KSkKCiAgOzsgVGhpcyBmdW5j dGlvbiB0cmFuc2Zvcm1zIGEgd2hvbGUgNTEyIGJpdCBibG9jay4KICAoZGVmaW5lIChzaGEtMjU2 LXRyYW5zZm9ybSEgSCogVyBtIG9mZnNldCkKICAgIDs7IENvcHkgdGhlIG1lc3NhZ2UgYmxvY2sK ICAgIChkbyAoKHQgMCAoKyB0IDEpKSkKICAgICAgICAoKD0gdCAxNikpCiAgICAgICh2ZWN0b3It c2V0ISBXIHQgKGJ5dGV2ZWN0b3ItdTMyLXJlZiBtICgrICgqIHQgNCkgb2Zmc2V0KSAoZW5kaWFu bmVzcyBiaWcpKSkpCiAgICA7OyBJbml0aWFsaXplIFdbMTYuLjYzXQogICAgKGRvICgodCAxNiAo KyB0IDEpKSkKICAgICAgICAoKD0gdCA2NCkpCiAgICAgICh2ZWN0b3Itc2V0ISBXIHQgKGJpdHdp c2UtYW5kICgrIChzaWdtYTEtMjU2ICh2ZWN0b3ItcmVmIFcgKC0gdCAyKSkpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3ItcmVmIFcgKC0gdCA3KSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpZ21hMC0yNTYgKHZlY3Rvci1yZWYg VyAoLSB0IDE1KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0 b3ItcmVmIFcgKC0gdCAxNikpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj eGZmZmZmZmZmKSkpCiAgICA7OyBEbyB0aGUgaG9rZXkgcG9rZXkKICAgIChsZXQgbHAgKChBICh2 ZWN0b3ItcmVmIEgqIDApKQogICAgICAgICAgICAgKEIgKHZlY3Rvci1yZWYgSCogMSkpCiAgICAg ICAgICAgICAoQyAodmVjdG9yLXJlZiBIKiAyKSkKICAgICAgICAgICAgIChEICh2ZWN0b3ItcmVm IEgqIDMpKQogICAgICAgICAgICAgKEUgKHZlY3Rvci1yZWYgSCogNCkpCiAgICAgICAgICAgICAo RiAodmVjdG9yLXJlZiBIKiA1KSkKICAgICAgICAgICAgIChHICh2ZWN0b3ItcmVmIEgqIDYpKQog ICAgICAgICAgICAgKEggKHZlY3Rvci1yZWYgSCogNykpCiAgICAgICAgICAgICAodCAwKSkKICAg ICAgKGNvbmQgKCg9IHQgNjQpCiAgICAgICAgICAgICAodmVjdG9yLXNldCEgSCogMCAoYml0d2lz ZS1hbmQgI3hmZmZmZmZmZiAoKyBBICh2ZWN0b3ItcmVmIEgqIDApKSkpCiAgICAgICAgICAgICAo dmVjdG9yLXNldCEgSCogMSAoYml0d2lzZS1hbmQgI3hmZmZmZmZmZiAoKyBCICh2ZWN0b3ItcmVm IEgqIDEpKSkpCiAgICAgICAgICAgICAodmVjdG9yLXNldCEgSCogMiAoYml0d2lzZS1hbmQgI3hm ZmZmZmZmZiAoKyBDICh2ZWN0b3ItcmVmIEgqIDIpKSkpCiAgICAgICAgICAgICAodmVjdG9yLXNl dCEgSCogMyAoYml0d2lzZS1hbmQgI3hmZmZmZmZmZiAoKyBEICh2ZWN0b3ItcmVmIEgqIDMpKSkp CiAgICAgICAgICAgICAodmVjdG9yLXNldCEgSCogNCAoYml0d2lzZS1hbmQgI3hmZmZmZmZmZiAo KyBFICh2ZWN0b3ItcmVmIEgqIDQpKSkpCiAgICAgICAgICAgICAodmVjdG9yLXNldCEgSCogNSAo Yml0d2lzZS1hbmQgI3hmZmZmZmZmZiAoKyBGICh2ZWN0b3ItcmVmIEgqIDUpKSkpCiAgICAgICAg ICAgICAodmVjdG9yLXNldCEgSCogNiAoYml0d2lzZS1hbmQgI3hmZmZmZmZmZiAoKyBHICh2ZWN0 b3ItcmVmIEgqIDYpKSkpCiAgICAgICAgICAgICAodmVjdG9yLXNldCEgSCogNyAoYml0d2lzZS1h bmQgI3hmZmZmZmZmZiAoKyBIICh2ZWN0b3ItcmVmIEgqIDcpKSkpKQogICAgICAgICAgICAoZWxz ZQogICAgICAgICAgICAgKGxldCAoKFQxICgrIEggKFNpZ21hMS0yNTYgRSkgKENoIEUgRiBHKQog ICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3ItcmVmIGstMjU2IHQpICh2ZWN0b3ItcmVm IFcgdCkpKQogICAgICAgICAgICAgICAgICAgKFQyICgrIChTaWdtYTAtMjU2IEEpIChNYWogQSBC IEMpKSkpCiAgICAgICAgICAgICAgIChscCAoYml0d2lzZS1hbmQgI3hmZmZmZmZmZiAoKyBUMSBU MikpCiAgICAgICAgICAgICAgICAgICBBIEIgQwogICAgICAgICAgICAgICAgICAgKGJpdHdpc2Ut YW5kICN4ZmZmZmZmZmYgKCsgRCBUMSkpCiAgICAgICAgICAgICAgICAgICBFIEYgRwogICAgICAg ICAgICAgICAgICAgKCsgdCAxKSkpKSkpKQoKICA7OyBUaGlzIGZ1bmN0aW9uIHRyYW5zZm9ybXMg YSB3aG9sZSAxMDI0IGJpdCBibG9jay4KICAoZGVmaW5lIChzaGEtNTEyLXRyYW5zZm9ybSEgSCog VyBtIG9mZnNldCkKICAgIDs7IENvcHkgdGhlIG1lc3NhZ2UgYmxvY2sKICAgIChkbyAoKHQgMCAo KyB0IDEpKSkKICAgICAgICAoKD0gdCAxNikpCiAgICAgICh2ZWN0b3Itc2V0ISBXIHQgKGJ5dGV2 ZWN0b3ItdTY0LXJlZiBtICgrICgqIHQgOCkgb2Zmc2V0KSAoZW5kaWFubmVzcyBiaWcpKSkpCiAg ICA7OyBJbml0aWFsaXplIFdbMTYuLjYzXQogICAgKGRvICgodCAxNiAoKyB0IDEpKSkKICAgICAg ICAoKD0gdCA4MCkpCiAgICAgICh2ZWN0b3Itc2V0ISBXIHQgKGJpdHdpc2UtYW5kICgrIChzaWdt YTEtNTEyICh2ZWN0b3ItcmVmIFcgKC0gdCAyKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh2ZWN0b3ItcmVmIFcgKC0gdCA3KSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHNpZ21hMC01MTIgKHZlY3Rvci1yZWYgVyAoLSB0IDE1KSkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3ItcmVmIFcgKC0gdCAx NikpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjeGZmZmZmZmZmZmZmZmZm ZmYpKSkKICAgIDs7IERvIHRoZSBob2tleSBwb2tleQogICAgKGxldCBscCAoKEEgKHZlY3Rvci1y ZWYgSCogMCkpCiAgICAgICAgICAgICAoQiAodmVjdG9yLXJlZiBIKiAxKSkKICAgICAgICAgICAg IChDICh2ZWN0b3ItcmVmIEgqIDIpKQogICAgICAgICAgICAgKEQgKHZlY3Rvci1yZWYgSCogMykp CiAgICAgICAgICAgICAoRSAodmVjdG9yLXJlZiBIKiA0KSkKICAgICAgICAgICAgIChGICh2ZWN0 b3ItcmVmIEgqIDUpKQogICAgICAgICAgICAgKEcgKHZlY3Rvci1yZWYgSCogNikpCiAgICAgICAg ICAgICAoSCAodmVjdG9yLXJlZiBIKiA3KSkKICAgICAgICAgICAgICh0IDApKQogICAgICAoY29u ZCAoKD0gdCA4MCkKICAgICAgICAgICAgICh2ZWN0b3Itc2V0ISBIKiAwIChiaXR3aXNlLWFuZCAj eGZmZmZmZmZmZmZmZmZmZmYgKCsgQSAodmVjdG9yLXJlZiBIKiAwKSkpKQogICAgICAgICAgICAg KHZlY3Rvci1zZXQhIEgqIDEgKGJpdHdpc2UtYW5kICN4ZmZmZmZmZmZmZmZmZmZmZiAoKyBCICh2 ZWN0b3ItcmVmIEgqIDEpKSkpCiAgICAgICAgICAgICAodmVjdG9yLXNldCEgSCogMiAoYml0d2lz ZS1hbmQgI3hmZmZmZmZmZmZmZmZmZmZmICgrIEMgKHZlY3Rvci1yZWYgSCogMikpKSkKICAgICAg ICAgICAgICh2ZWN0b3Itc2V0ISBIKiAzIChiaXR3aXNlLWFuZCAjeGZmZmZmZmZmZmZmZmZmZmYg KCsgRCAodmVjdG9yLXJlZiBIKiAzKSkpKQogICAgICAgICAgICAgKHZlY3Rvci1zZXQhIEgqIDQg KGJpdHdpc2UtYW5kICN4ZmZmZmZmZmZmZmZmZmZmZiAoKyBFICh2ZWN0b3ItcmVmIEgqIDQpKSkp CiAgICAgICAgICAgICAodmVjdG9yLXNldCEgSCogNSAoYml0d2lzZS1hbmQgI3hmZmZmZmZmZmZm ZmZmZmZmICgrIEYgKHZlY3Rvci1yZWYgSCogNSkpKSkKICAgICAgICAgICAgICh2ZWN0b3Itc2V0 ISBIKiA2IChiaXR3aXNlLWFuZCAjeGZmZmZmZmZmZmZmZmZmZmYgKCsgRyAodmVjdG9yLXJlZiBI KiA2KSkpKQogICAgICAgICAgICAgKHZlY3Rvci1zZXQhIEgqIDcgKGJpdHdpc2UtYW5kICN4ZmZm ZmZmZmZmZmZmZmZmZiAoKyBIICh2ZWN0b3ItcmVmIEgqIDcpKSkpKQogICAgICAgICAgICAoZWxz ZQogICAgICAgICAgICAgKGxldCAoKFQxICgrIEggKFNpZ21hMS01MTIgRSkgKENoIEUgRiBHKQog ICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3ItcmVmIGstNTEyIHQpICh2ZWN0b3ItcmVm IFcgdCkpKQogICAgICAgICAgICAgICAgICAgKFQyICgrIChTaWdtYTAtNTEyIEEpIChNYWogQSBC IEMpKSkpCiAgICAgICAgICAgICAgIChscCAoYml0d2lzZS1hbmQgI3hmZmZmZmZmZmZmZmZmZmZm ICgrIFQxIFQyKSkKICAgICAgICAgICAgICAgICAgIEEgQiBDCiAgICAgICAgICAgICAgICAgICAo Yml0d2lzZS1hbmQgI3hmZmZmZmZmZmZmZmZmZmZmICgrIEQgVDEpKQogICAgICAgICAgICAgICAg ICAgRSBGIEcKICAgICAgICAgICAgICAgICAgICgrIHQgMSkpKSkpKSkKCiAgKGRlZmluZSAoc2hh LTIyNC11cGRhdGUhIC4geCkgKGFwcGx5IHNoYS0yNTYtdXBkYXRlISB4KSkKCiAgOzsgQWRkIGEg Ynl0ZXZlY3RvciB0byB0aGUgc3RhdGUuIEFsaWduIHlvdXIgZGF0YSB0byB3aG9sZSBibG9ja3Mg aWYKICA7OyB5b3Ugd2FudCB0aGlzIHRvIGdvIGEgbGl0dGxlIGZhc3Rlci4KICAoZGVmaW5lIHNo YS0yNTYtdXBkYXRlIQogICAgKGNhc2UtbGFtYmRhCiAgICAgICgoc3RhdGUgZGF0YSBzdGFydCBl bmQpCiAgICAgICAobGV0ICgobSAoc2hhLXN0YXRlLW0gc3RhdGUpKSAgICA7dW5wcm9jZXNzZWQg ZGF0YQogICAgICAgICAgICAgKEggKHNoYS1zdGF0ZS1IIHN0YXRlKSkKICAgICAgICAgICAgIChX IChzaGEtc3RhdGUtVyBzdGF0ZSkpKQogICAgICAgICAobGV0IGxwICgob2Zmc2V0IHN0YXJ0KSkK ICAgICAgICAgICAoY29uZCAoKD0gKHNoYS1zdGF0ZS1wZW5kaW5nIHN0YXRlKSA2NCkKICAgICAg ICAgICAgICAgICAgOzsgQSB3aG9sZSBibG9jayBpcyBwZW5kaW5nCiAgICAgICAgICAgICAgICAg IChzaGEtMjU2LXRyYW5zZm9ybSEgSCBXIG0gMCkKICAgICAgICAgICAgICAgICAgKHNoYS1zdGF0 ZS1wZW5kaW5nLXNldCEgc3RhdGUgMCkKICAgICAgICAgICAgICAgICAgKHNoYS1zdGF0ZS1wcm9j ZXNzZWQtc2V0ISBzdGF0ZSAoKyA2NCAoc2hhLXN0YXRlLXByb2Nlc3NlZCBzdGF0ZSkpKQogICAg ICAgICAgICAgICAgICAobHAgb2Zmc2V0KSkKICAgICAgICAgICAgICAgICAoKD0gb2Zmc2V0IGVu ZCkKICAgICAgICAgICAgICAgICAgKHZhbHVlcykpCiAgICAgICAgICAgICAgICAgKChvciAoPiAo c2hhLXN0YXRlLXBlbmRpbmcgc3RhdGUpIDApCiAgICAgICAgICAgICAgICAgICAgICAoPiAoKyBv ZmZzZXQgNjQpIGVuZCkpCiAgICAgICAgICAgICAgICAgIDs7IFBlbmRpbmcgZGF0YSBleGlzdHMg b3IgbGVzcyB0aGFuIGEgYmxvY2sgcmVtYWlucy4KICAgICAgICAgICAgICAgICAgOzsgQWRkIG1v cmUgcGVuZGluZyBkYXRhLgogICAgICAgICAgICAgICAgICAobGV0ICgoYWRkZWQgKG1pbiAoLSA2 NCAoc2hhLXN0YXRlLXBlbmRpbmcgc3RhdGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoLSBlbmQgb2Zmc2V0KSkpKQogICAgICAgICAgICAgICAgICAgIChieXRldmVjdG9y LWNvcHkhIGRhdGEgb2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bSAoc2hhLXN0YXRlLXBlbmRpbmcgc3RhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYWRkZWQpCiAgICAgICAgICAgICAgICAgICAgKHNoYS1zdGF0ZS1wZW5kaW5nLXNl dCEgc3RhdGUgKCsgYWRkZWQgKHNoYS1zdGF0ZS1wZW5kaW5nIHN0YXRlKSkpCiAgICAgICAgICAg ICAgICAgICAgKGxwICgrIG9mZnNldCBhZGRlZCkpKSkKICAgICAgICAgICAgICAgICAoZWxzZQog ICAgICAgICAgICAgICAgICA7OyBDb25zdW1lIGEgd2hvbGUgYmxvY2sKICAgICAgICAgICAgICAg ICAgKHNoYS0yNTYtdHJhbnNmb3JtISBIIFcgZGF0YSBvZmZzZXQpCiAgICAgICAgICAgICAgICAg IChzaGEtc3RhdGUtcHJvY2Vzc2VkLXNldCEgc3RhdGUgKCsgNjQgKHNoYS1zdGF0ZS1wcm9jZXNz ZWQgc3RhdGUpKSkKICAgICAgICAgICAgICAgICAgKGxwICgrIG9mZnNldCA2NCkpKSkpKSkKICAg ICAgKChzdGF0ZSBkYXRhKQogICAgICAgKHNoYS0yNTYtdXBkYXRlISBzdGF0ZSBkYXRhIDAgKGJ5 dGV2ZWN0b3ItbGVuZ3RoIGRhdGEpKSkpKQoKICAoZGVmaW5lIChzaGEtMzg0LXVwZGF0ZSEgLiB4 KSAoYXBwbHkgc2hhLTUxMi11cGRhdGUhIHgpKQoKICAoZGVmaW5lIHNoYS01MTItdXBkYXRlIQog ICAgKGNhc2UtbGFtYmRhCiAgICAgICgoc3RhdGUgZGF0YSBzdGFydCBlbmQpCiAgICAgICAobGV0 ICgobSAoc2hhLXN0YXRlLW0gc3RhdGUpKSAgICA7dW5wcm9jZXNzZWQgZGF0YQogICAgICAgICAg ICAgKEggKHNoYS1zdGF0ZS1IIHN0YXRlKSkKICAgICAgICAgICAgIChXIChzaGEtc3RhdGUtVyBz dGF0ZSkpKQogICAgICAgICAobGV0IGxwICgob2Zmc2V0IHN0YXJ0KSkKICAgICAgICAgICAoY29u ZCAoKD0gKHNoYS1zdGF0ZS1wZW5kaW5nIHN0YXRlKSAxMjgpCiAgICAgICAgICAgICAgICAgIDs7 IEEgd2hvbGUgYmxvY2sgaXMgcGVuZGluZwogICAgICAgICAgICAgICAgICAoc2hhLTUxMi10cmFu c2Zvcm0hIEggVyBtIDApCiAgICAgICAgICAgICAgICAgIChzaGEtc3RhdGUtcGVuZGluZy1zZXQh IHN0YXRlIDApCiAgICAgICAgICAgICAgICAgIChzaGEtc3RhdGUtcHJvY2Vzc2VkLXNldCEgc3Rh dGUgKCsgMTI4IChzaGEtc3RhdGUtcHJvY2Vzc2VkIHN0YXRlKSkpCiAgICAgICAgICAgICAgICAg IChscCBvZmZzZXQpKQogICAgICAgICAgICAgICAgICgoPSBvZmZzZXQgZW5kKQogICAgICAgICAg ICAgICAgICAodmFsdWVzKSkKICAgICAgICAgICAgICAgICAoKG9yICg+IChzaGEtc3RhdGUtcGVu ZGluZyBzdGF0ZSkgMCkKICAgICAgICAgICAgICAgICAgICAgICg+ICgrIG9mZnNldCAxMjgpIGVu ZCkpCiAgICAgICAgICAgICAgICAgIDs7IFBlbmRpbmcgZGF0YSBleGlzdHMgb3IgbGVzcyB0aGFu IGEgYmxvY2sgcmVtYWlucy4KICAgICAgICAgICAgICAgICAgOzsgQWRkIG1vcmUgcGVuZGluZyBk YXRhLgogICAgICAgICAgICAgICAgICAobGV0ICgoYWRkZWQgKG1pbiAoLSAxMjggKHNoYS1zdGF0 ZS1wZW5kaW5nIHN0YXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0g ZW5kIG9mZnNldCkpKSkKICAgICAgICAgICAgICAgICAgICAoYnl0ZXZlY3Rvci1jb3B5ISBkYXRh IG9mZnNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gKHNoYS1zdGF0 ZS1wZW5kaW5nIHN0YXRlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFk ZGVkKQogICAgICAgICAgICAgICAgICAgIChzaGEtc3RhdGUtcGVuZGluZy1zZXQhIHN0YXRlICgr IGFkZGVkIChzaGEtc3RhdGUtcGVuZGluZyBzdGF0ZSkpKQogICAgICAgICAgICAgICAgICAgIChs cCAoKyBvZmZzZXQgYWRkZWQpKSkpCiAgICAgICAgICAgICAgICAgKGVsc2UKICAgICAgICAgICAg ICAgICAgOzsgQ29uc3VtZSBhIHdob2xlIGJsb2NrCiAgICAgICAgICAgICAgICAgIChzaGEtNTEy LXRyYW5zZm9ybSEgSCBXIGRhdGEgb2Zmc2V0KQogICAgICAgICAgICAgICAgICAoc2hhLXN0YXRl LXByb2Nlc3NlZC1zZXQhIHN0YXRlICgrIDEyOCAoc2hhLXN0YXRlLXByb2Nlc3NlZCBzdGF0ZSkp KQogICAgICAgICAgICAgICAgICAobHAgKCsgb2Zmc2V0IDEyOCkpKSkpKSkKICAgICAgKChzdGF0 ZSBkYXRhKQogICAgICAgKHNoYS01MTItdXBkYXRlISBzdGF0ZSBkYXRhIDAgKGJ5dGV2ZWN0b3It bGVuZ3RoIGRhdGEpKSkpKQoKCiAgKGRlZmluZSB6ZXJvLWJsb2NrIChtYWtlLWJ5dGV2ZWN0b3Ig MTI4IDApKQoKICAoZGVmaW5lIChzaGEtMjI0LWZpbmlzaCEgc3RhdGUpIChzaGEtMjU2LWZpbmlz aCEgc3RhdGUpKQoKICA7OyBGaW5pc2ggdGhlIHN0YXRlIGJ5IGFkZGluZyBhIDEsIHplcm9zIGFu ZCB0aGUgY291bnRlci4KICAoZGVmaW5lIChzaGEtMjU2LWZpbmlzaCEgc3RhdGUpCiAgICAobGV0 ICgobSAoc2hhLXN0YXRlLW0gc3RhdGUpKQogICAgICAgICAgKHBlbmRpbmcgKCsgKHNoYS1zdGF0 ZS1wZW5kaW5nIHN0YXRlKSAxKSkpCiAgICAgIChieXRldmVjdG9yLXU4LXNldCEgbSAoc2hhLXN0 YXRlLXBlbmRpbmcgc3RhdGUpICN4ODApCiAgICAgIChjb25kICgoPiBwZW5kaW5nIDU2KQogICAg ICAgICAgICAgKGJ5dGV2ZWN0b3ItY29weSEgemVyby1ibG9jayAwCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtIHBlbmRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgt IDY0IHBlbmRpbmcpKQogICAgICAgICAgICAgKHNoYS0yNTYtdHJhbnNmb3JtISAoc2hhLXN0YXRl LUggc3RhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaGEtc3RhdGUtVyBz dGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwKQogICAgICAgICAgICAgKGJ5dGV2ZWN0b3ItZmlsbCEgbSAwKSkK ICAgICAgICAgICAgKGVsc2UKICAgICAgICAgICAgIChieXRldmVjdG9yLWNvcHkhIHplcm8tYmxv Y2sgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSBwZW5kaW5nCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoLSA2NCBwZW5kaW5nKSkpKQogICAgICA7OyBOdW1iZXIgb2Yg Yml0cyBpbiB0aGUgZGF0YQogICAgICAoYnl0ZXZlY3Rvci11NjQtc2V0ISBtIDU2CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICgqICgrIChzaGEtc3RhdGUtcHJvY2Vzc2VkIHN0YXRlKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLSBwZW5kaW5nIDEpKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAoZW5kaWFubmVz cyBiaWcpKQogICAgICAoc2hhLTI1Ni10cmFuc2Zvcm0hIChzaGEtc3RhdGUtSCBzdGF0ZSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAoc2hhLXN0YXRlLVcgc3RhdGUpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgbQogICAgICAgICAgICAgICAgICAgICAgICAgIDApKSkKCiAgKGRlZmluZSAo c2hhLTM4NC1maW5pc2ghIHN0YXRlKSAoc2hhLTUxMi1maW5pc2ghIHN0YXRlKSkKCiAgKGRlZmlu ZSAoc2hhLTUxMi1maW5pc2ghIHN0YXRlKQogICAgKGxldCAoKG0gKHNoYS1zdGF0ZS1tIHN0YXRl KSkKICAgICAgICAgIChwZW5kaW5nICgrIChzaGEtc3RhdGUtcGVuZGluZyBzdGF0ZSkgMSkpKQog ICAgICAoYnl0ZXZlY3Rvci11OC1zZXQhIG0gKHNoYS1zdGF0ZS1wZW5kaW5nIHN0YXRlKSAjeDgw KQogICAgICAoY29uZCAoKD4gcGVuZGluZyAxMTIpCiAgICAgICAgICAgICAoYnl0ZXZlY3Rvci1j b3B5ISB6ZXJvLWJsb2NrIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gcGVuZGlu ZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0gMTI4IHBlbmRpbmcpKQogICAgICAg ICAgICAgKHNoYS01MTItdHJhbnNmb3JtISAoc2hhLXN0YXRlLUggc3RhdGUpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChzaGEtc3RhdGUtVyBzdGF0ZSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKQog ICAgICAgICAgICAgKGJ5dGV2ZWN0b3ItZmlsbCEgbSAwKSkKICAgICAgICAgICAgKGVsc2UKICAg ICAgICAgICAgIChieXRldmVjdG9yLWNvcHkhIHplcm8tYmxvY2sgMAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbSBwZW5kaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo LSAxMjggcGVuZGluZykpKSkKICAgICAgOzsgTnVtYmVyIG9mIGJpdHMgaW4gdGhlIGRhdGEKICAg ICAgKGJ5dGV2ZWN0b3ItdWludC1zZXQhIG0gMTEyCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoKiAoKyAoc2hhLXN0YXRlLXByb2Nlc3NlZCBzdGF0ZSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgtIHBlbmRpbmcgMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZGlhbm5lc3MgYmlnKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTYpCiAgICAgIChzaGEtNTEyLXRyYW5zZm9ybSEgKHNoYS1z dGF0ZS1IIHN0YXRlKQogICAgICAgICAgICAgICAgICAgICAgICAgIChzaGEtc3RhdGUtVyBzdGF0 ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICBtCiAgICAgICAgICAgICAgICAgICAgICAgICAg MCkpKQoKICAoZGVmaW5lIChzaGEtMi1maW5pc2ggY29weSBmaW5pc2ghKQogICAgKGxhbWJkYSAo c3RhdGUpCiAgICAgIChsZXQgKChjb3B5IChjb3B5IHN0YXRlKSkpCiAgICAgICAgKGZpbmlzaCEg Y29weSkKICAgICAgICBjb3B5KSkpCgogIChkZWZpbmUgc2hhLTIyNC1maW5pc2ggKHNoYS0yLWZp bmlzaCBzaGEtMjI0LWNvcHkgc2hhLTIyNC1maW5pc2ghKSkKICAoZGVmaW5lIHNoYS0yNTYtZmlu aXNoIChzaGEtMi1maW5pc2ggc2hhLTI1Ni1jb3B5IHNoYS0yNTYtZmluaXNoISkpCiAgKGRlZmlu ZSBzaGEtMzg0LWZpbmlzaCAoc2hhLTItZmluaXNoIHNoYS0zODQtY29weSBzaGEtMzg0LWZpbmlz aCEpKQogIChkZWZpbmUgc2hhLTUxMi1maW5pc2ggKHNoYS0yLWZpbmlzaCBzaGEtNTEyLWNvcHkg c2hhLTUxMi1maW5pc2ghKSkKCiAgOzsgRmluZCB0aGUgbWVzc2FnZSBkaWdlc3Qgb2YgdGhlIGNv bmNhdGVuYXRpb24gb2YgdGhlIGdpdmVuIGJ5dGV2ZWN0b3JzLgogIChkZWZpbmUgKHNoYS0yIG1h a2UgdXBkYXRlISBmaW5pc2ghKQogICAgKGxhbWJkYSBkYXRhCiAgICAgIChsZXQgKChzdGF0ZSAo bWFrZSkpKQogICAgICAgIChmb3ItZWFjaCAobGFtYmRhIChkKSAodXBkYXRlISBzdGF0ZSBkKSkK ICAgICAgICAgICAgICAgICAgZGF0YSkKICAgICAgICAoZmluaXNoISBzdGF0ZSkKICAgICAgICBz dGF0ZSkpKQoKICAoZGVmaW5lIHNoYS0yMjQgKHNoYS0yIG1ha2Utc2hhLTIyNCBzaGEtMjI0LXVw ZGF0ZSEgc2hhLTIyNC1maW5pc2ghKSkKICAoZGVmaW5lIHNoYS0yNTYgKHNoYS0yIG1ha2Utc2hh LTI1NiBzaGEtMjU2LXVwZGF0ZSEgc2hhLTI1Ni1maW5pc2ghKSkKICAoZGVmaW5lIHNoYS0zODQg KHNoYS0yIG1ha2Utc2hhLTM4NCBzaGEtMzg0LXVwZGF0ZSEgc2hhLTM4NC1maW5pc2ghKSkKICAo ZGVmaW5lIHNoYS01MTIgKHNoYS0yIG1ha2Utc2hhLTUxMiBzaGEtNTEyLXVwZGF0ZSEgc2hhLTUx Mi1maW5pc2ghKSkKCiAgKGRlZmluZSAoc2hhLTIvMzItY29weS1oYXNoISBsZW4pCiAgICAobGFt YmRhIChzdGF0ZSBidiBvZmYpCiAgICAgIChkbyAoKGkgMCAoKyBpIDEpKSkKICAgICAgICAgICgo PSBpIGxlbikpCiAgICAgICAgKGJ5dGV2ZWN0b3ItdTMyLXNldCEgYnYgKCsgb2ZmICgqIDQgaSkp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3Rvci1yZWYgKHNoYS1zdGF0ZS1IIHN0 YXRlKSBpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmRpYW5uZXNzIGJpZykpKSkp CgogIChkZWZpbmUgc2hhLTIyNC1jb3B5LWhhc2ghIChzaGEtMi8zMi1jb3B5LWhhc2ghIDIyNC8z MikpCiAgKGRlZmluZSBzaGEtMjU2LWNvcHktaGFzaCEgKHNoYS0yLzMyLWNvcHktaGFzaCEgMjU2 LzMyKSkKICAoZGVmaW5lIHNoYS0yMjQtMTI4LWNvcHktaGFzaCEgKHNoYS0yLzMyLWNvcHktaGFz aCEgMTI4LzMyKSkKICAoZGVmaW5lIHNoYS0yNTYtMTI4LWNvcHktaGFzaCEgKHNoYS0yLzMyLWNv cHktaGFzaCEgMTI4LzMyKSkKCiAgKGRlZmluZSAoc2hhLTIvNjQtY29weS1oYXNoISBsZW4pCiAg ICAobGFtYmRhIChzdGF0ZSBidiBvZmYpCiAgICAgIChkbyAoKGkgMCAoKyBpIDEpKSkKICAgICAg ICAgICgoPSBpIGxlbikpCiAgICAgICAgKGJ5dGV2ZWN0b3ItdTY0LXNldCEgYnYgKCsgb2ZmICgq IDggaSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3Rvci1yZWYgKHNoYS1zdGF0 ZS1IIHN0YXRlKSBpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmRpYW5uZXNzIGJp ZykpKSkpCgogIChkZWZpbmUgc2hhLTM4NC1jb3B5LWhhc2ghIChzaGEtMi82NC1jb3B5LWhhc2gh IDM4NC82NCkpCiAgKGRlZmluZSBzaGEtNTEyLWNvcHktaGFzaCEgKHNoYS0yLzY0LWNvcHktaGFz aCEgNTEyLzY0KSkKICAoZGVmaW5lIHNoYS0zODQtMTI4LWNvcHktaGFzaCEgKHNoYS0yLzY0LWNv cHktaGFzaCEgMTI4LzY0KSkKICAoZGVmaW5lIHNoYS01MTItMTI4LWNvcHktaGFzaCEgKHNoYS0y LzY0LWNvcHktaGFzaCEgMTI4LzY0KSkKCiAgKGRlZmluZSAoc2hhLTItPmJ5dGV2ZWN0b3IgY29w eSEgbGVuKQogICAgKGxhbWJkYSAoc3RhdGUpCiAgICAgIChsZXQgKChyZXQgKG1ha2UtYnl0ZXZl Y3RvciAoKiA0IGxlbikpKSkKICAgICAgICAoY29weSEgc3RhdGUgcmV0IDApCiAgICAgICAgcmV0 KSkpCgogIChkZWZpbmUgc2hhLTIyNC0+Ynl0ZXZlY3RvciAoc2hhLTItPmJ5dGV2ZWN0b3Igc2hh LTIyNC1jb3B5LWhhc2ghIDIyNC8zMikpCiAgKGRlZmluZSBzaGEtMjU2LT5ieXRldmVjdG9yIChz aGEtMi0+Ynl0ZXZlY3RvciBzaGEtMjU2LWNvcHktaGFzaCEgMjU2LzMyKSkKICAoZGVmaW5lIHNo YS0zODQtPmJ5dGV2ZWN0b3IgKHNoYS0yLT5ieXRldmVjdG9yIHNoYS0zODQtY29weS1oYXNoISAz ODQvMzIpKQogIChkZWZpbmUgc2hhLTUxMi0+Ynl0ZXZlY3RvciAoc2hhLTItPmJ5dGV2ZWN0b3Ig c2hhLTUxMi1jb3B5LWhhc2ghIDUxMi8zMikpCgogIChkZWZpbmUgKHNoYS0yLT5zdHJpbmcgLT5i eXRldmVjdG9yKQogICAgKGxhbWJkYSAoc3RhdGUpCiAgICAgIChhcHBseSBzdHJpbmctYXBwZW5k CiAgICAgICAgICAgICAobWFwIChsYW1iZGEgKHgpCiAgICAgICAgICAgICAgICAgICAgKGlmICg8 IHggI3gxMCkKICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgIjAiIChudW1i ZXItPnN0cmluZyB4IDE2KSkKICAgICAgICAgICAgICAgICAgICAgICAgKG51bWJlci0+c3RyaW5n IHggMTYpKSkKICAgICAgICAgICAgICAgICAgKGJ5dGV2ZWN0b3ItPnU4LWxpc3QgKC0+Ynl0ZXZl Y3RvciBzdGF0ZSkpKSkpKQoKICAoZGVmaW5lIHNoYS0yMjQtPnN0cmluZyAoc2hhLTItPnN0cmlu ZyBzaGEtMjI0LT5ieXRldmVjdG9yKSkKICAoZGVmaW5lIHNoYS0yNTYtPnN0cmluZyAoc2hhLTIt PnN0cmluZyBzaGEtMjU2LT5ieXRldmVjdG9yKSkKICAoZGVmaW5lIHNoYS0zODQtPnN0cmluZyAo c2hhLTItPnN0cmluZyBzaGEtMzg0LT5ieXRldmVjdG9yKSkKICAoZGVmaW5lIHNoYS01MTItPnN0 cmluZyAoc2hhLTItPnN0cmluZyBzaGEtNTEyLT5ieXRldmVjdG9yKSkKCiAgKGRlZmluZSAoY21w LzMyIHN0YXRlIGJ2IGxlbikKICAgIChkbyAoKGkgMCAoZngrIGkgMSkpCiAgICAgICAgIChkaWZm IDAgKCsgZGlmZgogICAgICAgICAgICAgICAgICAgIChiaXR3aXNlLXhvcgogICAgICAgICAgICAg ICAgICAgICAoYnl0ZXZlY3Rvci11MzItcmVmIGJ2ICgqIDQgaSkgKGVuZGlhbm5lc3MgYmlnKSkK ICAgICAgICAgICAgICAgICAgICAgKHZlY3Rvci1yZWYgKHNoYS1zdGF0ZS1IIHN0YXRlKSBpKSkp KSkKICAgICAgICAoKGZ4PT8gaSBsZW4pCiAgICAgICAgICh6ZXJvPyBkaWZmKSkpKQoKICAoZGVm aW5lIChzaGEtMjI0LWhhc2g9PyBzdGF0ZSBidikgKGNtcC8zMiBzdGF0ZSBidiAyMjQvMzIpKQog IChkZWZpbmUgKHNoYS0yNTYtaGFzaD0/IHN0YXRlIGJ2KSAoY21wLzMyIHN0YXRlIGJ2IDI1Ni8z MikpCiAgKGRlZmluZSAoc2hhLTM4NC1oYXNoPT8gc3RhdGUgYnYpIChjbXAvNjQgc3RhdGUgYnYg Mzg0LzY0KSkKICAoZGVmaW5lIChzaGEtNTEyLWhhc2g9PyBzdGF0ZSBidikgKGNtcC82NCBzdGF0 ZSBidiA1MTIvNjQpKQoKICAoZGVmaW5lIChjbXAvNjQgc3RhdGUgYnYgbGVuKQogICAgKGRvICgo aSAwIChmeCsgaSAxKSkKICAgICAgICAgKGRpZmYgMCAoKyBkaWZmCiAgICAgICAgICAgICAgICAg ICAgKGJpdHdpc2UteG9yCiAgICAgICAgICAgICAgICAgICAgIChieXRldmVjdG9yLXU2NC1yZWYg YnYgKCogOCBpKSAoZW5kaWFubmVzcyBiaWcpKQogICAgICAgICAgICAgICAgICAgICAodmVjdG9y LXJlZiAoc2hhLXN0YXRlLUggc3RhdGUpIGkpKSkpKQogICAgICAgICgoZng9PyBpIGxlbikKICAg ICAgICAgKHplcm8/IGRpZmYpKSkpCgogIChkZWZpbmUgKHNoYS0yMjQtMTI4LWhhc2g9PyBzdGF0 ZSBidikgKGNtcC8zMiBzdGF0ZSBidiAxMjgvMzIpKQogIChkZWZpbmUgKHNoYS0yNTYtMTI4LWhh c2g9PyBzdGF0ZSBidikgKGNtcC8zMiBzdGF0ZSBidiAxMjgvMzIpKQogIChkZWZpbmUgKHNoYS0z ODQtMTI4LWhhc2g9PyBzdGF0ZSBidikgKGNtcC82NCBzdGF0ZSBidiAxMjgvNjQpKQogIChkZWZp bmUgKHNoYS01MTItMTI4LWhhc2g9PyBzdGF0ZSBidikgKGNtcC82NCBzdGF0ZSBidiAxMjgvNjQp KQoKICAoZGVmaW5lIGhtYWMtc2hhLTIyNAogICAgKG1ha2UtaG1hYyA2NCBzaGEtMjI0IHNoYS0y MjQtPmJ5dGV2ZWN0b3IgbWFrZS1zaGEtMjI0IHNoYS0yMjQtdXBkYXRlISBzaGEtMjI0LWZpbmlz aCEgc2hhLTIyNC1jbGVhciEpKQoKICAoZGVmaW5lIGhtYWMtc2hhLTI1NgogICAgKG1ha2UtaG1h YyA2NCBzaGEtMjU2IHNoYS0yNTYtPmJ5dGV2ZWN0b3IgbWFrZS1zaGEtMjU2IHNoYS0yNTYtdXBk YXRlISBzaGEtMjU2LWZpbmlzaCEgc2hhLTI1Ni1jbGVhciEpKQoKICAoZGVmaW5lIGhtYWMtc2hh LTM4NAogICAgKG1ha2UtaG1hYyAxMjggc2hhLTM4NCBzaGEtMzg0LT5ieXRldmVjdG9yIG1ha2Ut c2hhLTM4NCBzaGEtMzg0LXVwZGF0ZSEgc2hhLTM4NC1maW5pc2ghIHNoYS0zODQtY2xlYXIhKSkK CiAgKGRlZmluZSBobWFjLXNoYS01MTIKICAgIChtYWtlLWhtYWMgMTI4IHNoYS01MTIgc2hhLTUx Mi0+Ynl0ZXZlY3RvciBtYWtlLXNoYS01MTIgc2hhLTUxMi11cGRhdGUhIHNoYS01MTItZmluaXNo ISBzaGEtNTEyLWNsZWFyISkpCgogICkK --=_b680aaf48d9dbc7193cd815d8f9e104d--