How does notmuch track mails?
[notmuch-archives.git] / 0d / 3c0743ca80c89a76540b46f0fef7d7c7f0b8a1
1 Return-Path: <jani@nikula.org>\r
2 X-Original-To: notmuch@notmuchmail.org\r
3 Delivered-To: notmuch@notmuchmail.org\r
4 Received: from localhost (localhost [127.0.0.1])\r
5         by olra.theworths.org (Postfix) with ESMTP id 21C82431FBC\r
6         for <notmuch@notmuchmail.org>; Sat, 10 Mar 2012 16:01:44 -0800 (PST)\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
8 X-Spam-Flag: NO\r
9 X-Spam-Score: -0.69\r
10 X-Spam-Level: \r
11 X-Spam-Status: No, score=-0.69 tagged_above=-999 required=5\r
12         tests=[RCVD_IN_DNSWL_LOW=-0.7, T_MIME_NO_TEXT=0.01] autolearn=disabled\r
13 Received: from olra.theworths.org ([127.0.0.1])\r
14         by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
15         with ESMTP id DUvvKmH6+jNZ for <notmuch@notmuchmail.org>;\r
16         Sat, 10 Mar 2012 16:01:41 -0800 (PST)\r
17 Received: from mail-lb0-f181.google.com (mail-lb0-f181.google.com\r
18         [209.85.217.181]) (using TLSv1 with cipher RC4-SHA (128/128 bits))\r
19         (No client certificate requested)\r
20         by olra.theworths.org (Postfix) with ESMTPS id 7A7C1431FAE\r
21         for <notmuch@notmuchmail.org>; Sat, 10 Mar 2012 16:01:41 -0800 (PST)\r
22 Received: by lbok6 with SMTP id k6so897268lbo.26\r
23         for <notmuch@notmuchmail.org>; Sat, 10 Mar 2012 16:01:39 -0800 (PST)\r
24 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;\r
25         d=google.com; s=20120113;\r
26         h=from:to:subject:user-agent:date:message-id:mime-version\r
27         :content-type:x-gm-message-state;\r
28         bh=lV5I7y15GbGVscgaCQFk4KxInlQcQOlA2Ne9bzgF5s8=;\r
29         b=CxTMnEoH5/gEQYflCRKwxMBxPU7vRUbDyh03EQdohVikf17aTFMQdzT9rgIxGNCMVl\r
30         nBqP7HWyHoYbS8+LEnDaKLzsnQdckH/xkHJZoDl8FM4RNgzEHkwc/NLLsQcNSCuJXVUl\r
31         410zh11+u3Mp6CdU00yly7vSYzTxQ6i+sMC44Il/Kx2MKjWqkXYoFYRwPkMI2uvmSbOI\r
32         ZM4v8DFBiJw7rqOaziLOP6uNFHQ7t+Ro5pIsST1UUg4a4nR6ndg7pnETb5vv1PEGdYzb\r
33         C3IRGoZ/8PRiejWHCB/CYP7ATViD38YQ0ANrmq865KKhGSfwYmwD27EV7Qi+3MS+1Qe0\r
34         XGZQ==\r
35 Received: by 10.112.25.225 with SMTP id f1mr2748196lbg.6.1331424099729;\r
36         Sat, 10 Mar 2012 16:01:39 -0800 (PST)\r
37 Received: from localhost (dsl-hkibrasgw4-fe50f800-253.dhcp.inet.fi.\r
38         [84.248.80.253])\r
39         by mx.google.com with ESMTPS id a8sm12166918lba.15.2012.03.10.16.01.36\r
40         (version=SSLv3 cipher=OTHER); Sat, 10 Mar 2012 16:01:38 -0800 (PST)\r
41 From: Jani Nikula <jani@nikula.org>\r
42 To: notmuch@notmuchmail.org\r
43 Subject: nmfirehose - a crude nmbug companion tool\r
44 User-Agent: Notmuch/0.11.1+295~g780f284 (http://notmuchmail.org) Emacs/23.3.1\r
45         (i686-pc-linux-gnu)\r
46 Date: Sun, 11 Mar 2012 02:01:34 +0200\r
47 Message-ID: <87wr6sypi9.fsf@nikula.org>\r
48 MIME-Version: 1.0\r
49 Content-Type: multipart/mixed; boundary="=-=-="\r
50 X-Gm-Message-State:\r
51  ALoCoQlWcDYFbpG5jaIztI1pStEoi+7DFO5gz/podaDGRB39XSjzFze9b3Y4ij0t7qvxV+UjSNKH\r
52 X-BeenThere: notmuch@notmuchmail.org\r
53 X-Mailman-Version: 2.1.13\r
54 Precedence: list\r
55 List-Id: "Use and development of the notmuch mail system."\r
56         <notmuch.notmuchmail.org>\r
57 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
58         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
59 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
60 List-Post: <mailto:notmuch@notmuchmail.org>\r
61 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
62 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
63         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
64 X-List-Received-Date: Sun, 11 Mar 2012 00:01:44 -0000\r
65 \r
66 --=-=-=\r
67 \r
68 \r
69 Hi all -\r
70 \r
71 There was some talk on IRC about maintaining a development branch\r
72 containing the "maybe ready" patches [1] to better expose them to\r
73 real-life use before merging to master.\r
74 \r
75 I set out to automate this a little, and ended up with nmfirehose. It's\r
76 a shell script that can be used to grab a bunch of patches from the\r
77 notmuch mail store based on queries, and apply them to a repository. In\r
78 particular, it can grab the "maybe ready" patches and apply them against\r
79 notmuch master.\r
80 \r
81 Inevitable conflicts are handled by applying patches in oldest first\r
82 order, and dropping any conflicting series. An email thread approximates\r
83 a patch series; more than one patch series in a thread are folded into\r
84 one series.\r
85 \r
86 Patches are applied incrementally, on top of each other by default, but\r
87 there's also support for non-incremental per-series apply against master\r
88 to see if there are conflicts. This is useful for the "review"\r
89 query. Conflicting patches can be automatically tagged if so desired\r
90 (but I don't recommend pushing these to nmbug without human review).\r
91 \r
92 How well any of this works very much depends on how accurately the patch\r
93 messages are tagged.\r
94 \r
95 Some examples (run within a notmuch git repo, with up-to-date nmbug tags\r
96 in the database):\r
97 \r
98 # take nmbug maybe-ready patches and apply them against origin/master\r
99 $ nmfirehose\r
100 \r
101 # use local branch firehose and force use it even if existing\r
102 $ nmfirehose -l firehose -F\r
103 \r
104 # keep going after conflicts without reverting whole series\r
105 $ nmfirehose -k\r
106 \r
107 # check each series in review queue against master, and tag conflicting\r
108 $ nmfirehose -q review -n -t\r
109 \r
110 # help\r
111 $ nmfirehose -h\r
112 \r
113 I originally planned on putting this to cron and pushing the result\r
114 (supported out-of-the-box) to some public repo, but in the end I think\r
115 people can use this locally just as well, at the pace they want.\r
116 \r
117 The script tries not to screw up anything in your notmuch repo, but be\r
118 careful nonetheless.\r
119 \r
120 Script attached; comments welcome. Is this worth adding to contrib?\r
121 \r
122 \r
123 BR,\r
124 Jani.\r
125 \r
126 [1] http://nmbug.tethera.net/status/\r
127 \r
128 --=-=-=\r
129 Content-Type: application/octet-stream\r
130 Content-Disposition: attachment; filename=nmfirehose\r
131 Content-Transfer-Encoding: base64\r
132 Content-Description: nmfirehose\r
133 \r
134 IyEvYmluL3NoCiMgQ29weXJpZ2h0IChjKSAyMDEyIEphbmkgTmlrdWxhCiMgTGljZW5zZTogc2Ft\r
135 ZSBhcyBub3RtdWNoCgojIFByZWRlZmluZWQgcXVlcmllcy4gU2VlIGh0dHA6Ly9ubWJ1Zy50ZXRo\r
136 ZXJhLm5ldC9zdGF0dXMvClFVRVJZX01BWUJFX1JFQURZPSJ0YWc6bm90bXVjaDo6cGF0Y2ggYW5k\r
137 IG5vdCB0YWc6bm90bXVjaDo6cHVzaGVkIGFuZCBub3QgdGFnOm5vdG11Y2g6Om9ic29sZXRlIGFu\r
138 ZCBub3QgdGFnOm5vdG11Y2g6OndpcCBhbmQgbm90IHRhZzpub3RtdWNoOjpzdGFsZSBhbmQgbm90\r
139 IHRhZzpub3RtdWNoOjpjb250cmliIGFuZCBub3QgdGFnOm5vdG11Y2g6Om1vcmVpbmZvIGFuZCBu\r
140 b3QgdGFnOm5vdG11Y2g6OnB5dGhvbiBhbmQgbm90IHRhZzpub3RtdWNoOjp2aW0gYW5kIG5vdCB0\r
141 YWc6bm90bXVjaDo6d29udGZpeCBhbmQgbm90IHRhZzpub3RtdWNoOjpuZWVkcy1yZXZpZXciCgpR\r
142 VUVSWV9SRVZJRVc9InRhZzpub3RtdWNoOjpwYXRjaCBhbmQgbm90IHRhZzpub3RtdWNoOjpwdXNo\r
143 ZWQgYW5kIG5vdCB0YWc6bm90bXVjaDo6b2Jzb2xldGUgYW5kIG5vdCB0YWc6bm90bXVjaDo6c3Rh\r
144 bGUgYW5kIG5vdCB0YWc6bm90bXVjaDo6d29udGZpeCBhbmQgKHRhZzpub3RtdWNoOjptb3JlaW5m\r
145 byBvciB0YWc6bm90bXVjaDo6bmVlZHMtcmV2aWV3KSIKCiMgRGVmYXVsdHMgZm9yIGNvbW1hbmQg\r
146 bGluZSBvcHRpb25zCiMgbG9jYWwKTE9DQUxfQlJBTkNIPSJmaXJlaG9zZS1gZGF0ZSArJUYuJUgl\r
147 TSVTYCIKRk9SQ0VfTE9DQUw9CkdJVF9DSEVDS09VVF9NT0RFPSItYiIKUVVFUlk9IiRRVUVSWV9N\r
148 QVlCRV9SRUFEWSIKIyB1cHN0cmVhbQpET19GRVRDSD0KVVBTVFJFQU1fTkFNRT0ib3JpZ2luIgpV\r
149 UFNUUkVBTV9CUkFOQ0g9Im1hc3RlciIKIyBwdXNoaW5nCkRPX1BVU0g9CkdJVF9QVVNIX0ZPUkNF\r
150 PQpSRU1PVEVfQlJBTkNIPSJmaXJlaG9zZSIKUkVNT1RFX05BTUU9ImZpcmVob3NlIgojIGNvbmZs\r
151 aWN0IG1hbmFnZW1lbnQKRE9fTk9OX0lOQ1JFTUVOVEFMPQpET19LRUVQX0dPSU5HPQpET19UQUc9\r
152 CkNPTkZMSUNUX1RBRz0ibWF5YmUtc3RhbGUiCgp1c2FnZSgpCnsKICAgIGNhdCA8PEVPRgpubWZp\r
153 cmVob3NlIFtvcHRpb25zIC4uLl0KCkFwcGx5IHBhdGNoZXMgb24gdG9wIG9mIGFuIHVwc3RyZWFt\r
154 IHJlcG9zaXRvcnkgZnJvbSBhIG5vdG11Y2ggbWFpbCBzdG9yZSBiYXNlZApvbiBub3RtdWNoIHF1\r
155 ZXJpZXMuCgpSdW4gaW4gYSBnaXQgdHJlZSB3aXRoIHN1aXRhYmxlIHJlbW90ZShzKSBzZXQgKCRV\r
156 UFNUUkVBTV9OQU1FIGlzIHRoZSBkZWZhdWx0CnVwc3RyZWFtIHJlbW90ZSkuCgpBbiBlbWFpbCB0\r
157 aHJlYWQgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBleGFjdGx5IG9uZSBwYXRjaCBzZXJpZXMuIE11\r
158 bHRpcGxlIHNlcmllcwppbiBhIHRocmVhZCBhcmUgY29uc2lkZXJlZCBvbmUgc2VyaWVzLiBUaGUg\r
159 cGF0Y2ggb3JkZXIgaW4gYSBzZXJpZXMgaXMgYmFzZWQgb24Kbm90bXVjaCBzZWFyY2ggLS1zb3J0\r
160 PW9sZGVzdC1maXJzdC4KCkxvY2FsOgogIC1sIExPQ0FMX0JSQU5DSCAgICAgbG9jYWwgYnJhbmNo\r
161 IHRvIHVzZSAoZGVmYXVsdDogJExPQ0FMX0JSQU5DSCkKICAtRiAgICAgICAgICAgICAgICAgIGZv\r
162 cmNlIHVzZSBsb2NhbCBicmFuY2ggZXZlbiBpZiBleGlzdGluZwogIC1xIFFVRVJZX05BTUUgICAg\r
163 ICAgcHJlZGVmaW5lZCBxdWVyeSB0byB1c2UsIHNlZSBiZWxvdyAoZGVmYXVsdDogbWF5YmUtcmVh\r
164 ZHkpCiAgLVEgUVVFUlkgICAgICAgICAgICBxdWVyeSB0byB1c2UgKGRlZmF1bHQ6IHNhbWUgYXMg\r
165 LXEgbWF5YmUtcmVhZHkpCgpVcHN0cmVhbSBiYXNlbGluZSB0byBhcHBseSBwYXRjaGVzIG9uOgog\r
166 IC1mICAgICAgICAgICAgICAgICAgZmV0Y2ggdXBzdHJlYW0gZmlyc3QKICAtdSBVUFNUUkVBTV9C\r
167 UkFOQ0ggIHVwc3RyZWFtIGJyYW5jaCAoZGVmYXVsdDogJFVQU1RSRUFNX0JSQU5DSCkKICAtVSBV\r
168 UFNUUkVBTV9OQU1FICAgIHVwc3RyZWFtIHJlbW90ZSBuYW1lIChkZWZhdWx0OiAkVVBTVFJFQU1f\r
169 TkFNRSkKClB1c2hpbmcgdGhlIHJlc3VsdDoKICAtcCAgICAgICAgICAgICAgICAgIHB1c2ggdGhl\r
170 IHJlc3VsdCBhZnRlcndhcmRzCiAgLVAgICAgICAgICAgICAgICAgICBmb3JjZSBwdXNoIHRoZSBy\r
171 ZXN1bHQgYWZ0ZXJ3YXJkcwogIC1yIFJFTU9URV9CUkFOQ0ggICAgcmVtb3RlIGJyYW5jaCB0byBw\r
172 dXNoIHRvIChkZWZhdWx0OiAkUkVNT1RFX0JSQU5DSCkKICAtUiBSRU1PVEVfTkFNRSAgICAgIHJl\r
173 bW90ZSBuYW1lIHRvIHB1c2ggdG8gKGRlZmF1bHQ6ICRSRU1PVEVfTkFNRSkKCkNvbmZsaWN0IG1h\r
174 bmFnZW1lbnQ6CiAgLW4gICAgICAgICAgICAgICAgICBub24taW5jcmVtZW50YWwsIGFwcGx5IGVh\r
175 Y2ggc2VyaWVzIG9uIHVwc3RyZWFtCiAgLWsgICAgICAgICAgICAgICAgICBrZWVwIGdvaW5nIGFm\r
176 dGVyIGNvbmZsaWN0cyB3aXRob3V0IHJldmVydGluZyBzZXJpZXMKICAtdCAgICAgICAgICAgICAg\r
177 ICAgIHRhZyBjb25mbGljdGluZyBwYXRjaGVzCiAgLVQgVEFHICAgICAgICAgICAgICB0YWcgZm9y\r
178 IGNvbmZsaWN0aW5nIHBhdGNoZXMgKGRlZmF1bHQ6ICRDT05GTElDVF9UQUcpCgpQcmVkZWZpbmVk\r
179 IHF1ZXJpZXM6CgptYXliZS1yZWFkeSA9ICRRVUVSWV9NQVlCRV9SRUFEWQoKcmV2aWV3ID0gJFFV\r
180 RVJZX1JFVklFVwpFT0YKICAgIGV4aXQgMAp9CgplcnJvcigpCnsKICAgIGVjaG8gIm5tZmlyZWhv\r
181 c2U6ICQqIiA+JjIKICAgIGV4aXQgMQp9CgpzZXQgLWV1Cgp3aGlsZSBnZXRvcHRzIGw6RnE6UTpm\r
182 dTpVOnBQcjpSOm5rdFQ6aCBvcHQ7IGRvCiAgICBjYXNlICIkb3B0IiBpbgoJIyBsb2NhbAoJbCkg\r
183 TE9DQUxfQlJBTkNIPSIkT1BUQVJHIjs7CglGKSBGT1JDRV9MT0NBTD0xOyBHSVRfQ0hFQ0tPVVRf\r
184 TU9ERT0iLUIiOzsKCXEpCgkgICAgaWYgWyAiJE9QVEFSRyIgPSAibWF5YmUtcmVhZHkiIF07IHRo\r
185 ZW4KCQlRVUVSWT0iJFFVRVJZX01BWUJFX1JFQURZIgoJICAgIGVsaWYgWyAiJE9QVEFSRyIgPSAi\r
186 cmV2aWV3IiBdOyB0aGVuCgkJUVVFUlk9IiRRVUVSWV9SRVZJRVciCgkgICAgZWxzZQoJCWVycm9y\r
187 ICJ1bmtub3duIHByZWRlZmluZWQgcXVlcnkgJyRPUFRBUkcnIgoJICAgIGZpCgkgICAgOzsKCVEp\r
188 IFFVRVJZPSIkT1BUQVJHIjs7CgkjIHVwc3RyZWFtCglmKSBET19GRVRDSD0xOzsKCXUpIFVQU1RS\r
189 RUFNX0JSQU5DSD0iJE9QVEFSRyI7OwoJVSkgVVBTVFJFQU1fTkFNRT0iJE9QVEFSRyI7OwoJIyBw\r
190 dXNoaW5nCglwKSBET19QVVNIPTE7OwoJUCkgRE9fUFVTSD0xOyBHSVRfUFVTSF9GT1JDRT0iLS1m\r
191 b3JjZSI7OwoJcikgUkVNT1RFX0JSQU5DSD0iJE9QVEFSRyI7OwoJUikgUkVNT1RFX05BTUU9IiRP\r
192 UFRBUkciOzsKCSMgY29uZmxpY3QgbWFuYWdlbWVudAoJbikgRE9fTk9OX0lOQ1JFTUVOVEFMPTE7\r
193 OwoJaykgRE9fS0VFUF9HT0lORz0xOzsKCXQpIERPX1RBRz0xOzsKCVQpIENPTkZMSUNUX1RBRz0i\r
194 JE9QVEFSRyI7OwoJIyBoZWxwCgloKSB1c2FnZTs7CglcPykgZXJyb3IgInRyeSAtaCBmb3IgdXNh\r
195 Z2UiOzsKICAgIGVzYWMKZG9uZQpzaGlmdCBgZXhwciAkT1BUSU5EIC0gMWAKCmlmIFsgIiQjIiAh\r
196 PSAiMCIgXTsgdGhlbgogICAgZXJyb3IgInVuc3VwcG9ydGVkIHBvc2l0aW9uYWwgYXJndW1lbnQo\r
197 cykgJyQqJzsgdHJ5IC1oIGZvciB1c2FnZSIKZmkKCmlmIFsgLW4gIiRET19QVVNIIiAtYSAtbiAi\r
198 JERPX05PTl9JTkNSRU1FTlRBTCIgXTsgdGhlbgogICAgZXJyb3IgIm5vbi1pbmNyZW1lbnRhbCBw\r
199 dXNoIGlzIG5vdCBzdXBwb3J0ZWQiCmZpCgojIE5PVEU6IFRoaXMgZG9lcyBub3QgY2F0Y2ggYWxs\r
200 IHRoZSB3YXlzIHVzZXJzIGNhbiBzaG9vdCB0aGVtc2VsdmVzIGluIHRoZSBmZWV0LgppZiAhIGdp\r
201 dCBkaWZmIC0tcXVpZXQgfHwgISBnaXQgZGlmZiAtLWNhY2hlZCAtLXF1aWV0OyB0aGVuCiAgICBl\r
202 cnJvciAidW5jb21taXR0ZWQgbG9jYWwgY2hhbmdlcyIKZmkKCiMgRklYTUU6IENoZWNrIHRoYXQg\r
203 d2UncmUgaW4gYSBnaXQtZGlyIGFuZCB3b3JrLWRpciBhbmQgbm90IGJhcmUuIGdpdCByZXYtcGFy\r
204 c2UuCgppZiBbIC1uICIkRE9fRkVUQ0giIF07IHRoZW4KICAgIGdpdCBmZXRjaCAkVVBTVFJFQU1f\r
205 TkFNRQpmaQoKUkVTRVRfSEVBRD0kVVBTVFJFQU1fTkFNRS8kVVBTVFJFQU1fQlJBTkNICgojIE5P\r
206 VEU6IFRoaXMgZG9lcyBub3QgY2F0Y2ggYWxsIHRoZSB3YXlzIHVzZXJzIGNhbiBzaG9vdCB0aGVt\r
207 c2VsdmVzIGluIHRoZSBmZWV0LgppZiBbICJgZ2l0IG5hbWUtcmV2IC0tbmFtZS1vbmx5IEhFQURg\r
208 IiA9ICIkTE9DQUxfQlJBTkNIIiBdOyB0aGVuCiAgICBpZiBbIC1uICIkRk9SQ0VfTE9DQUwiIF07\r
209 IHRoZW4KCWdpdCByZXNldCAtLWhhcmQgJFJFU0VUX0hFQUQKICAgIGVsc2UKCWVycm9yICJhbHJl\r
210 YWR5IG9uIGJyYW5jaCAkTE9DQUxfQlJBTkNILCB0cnkgLUYgdG8gZm9yY2UiCiAgICBmaQplbHNl\r
211 CiAgICBnaXQgY2hlY2tvdXQgJEdJVF9DSEVDS09VVF9NT0RFICRMT0NBTF9CUkFOQ0ggJFVQU1RS\r
212 RUFNX05BTUUvJFVQU1RSRUFNX0JSQU5DSApmaQoKY2xlYW51cCgpCnsKICAgIHJ2PSQ/CiAgICAj\r
213 IEZJWE1FOiBjb3VsZCBkbyBtb3JlIGNsZXZlciB0aGluZ3MgaGVyZQogICAgZ2l0IGFtIC0tYWJv\r
214 cnQgPi9kZXYvbnVsbCAyPiYxCiAgICBleGl0ICRydgp9CnRyYXAgY2xlYW51cCAxIDIgMyA2IDE1\r
215 CgpUSFJFQURTPWBub3RtdWNoIHNlYXJjaCAtLW91dHB1dD10aHJlYWRzIC0tc29ydD1vbGRlc3Qt\r
216 Zmlyc3QgJFFVRVJZYAoKZm9yIHRocmVhZCBpbiAkVEhSRUFEUzsgZG8KICAgIE1FU1NBR0VTPWBu\r
217 b3RtdWNoIHNlYXJjaCAtLW91dHB1dD1tZXNzYWdlcyAtLXNvcnQ9b2xkZXN0LWZpcnN0ICRRVUVS\r
218 WSBBTkQgJHRocmVhZGAKICAgIHN1YmplY3Q9CgogICAgZm9yIG1lc3NhZ2UgaW4gJE1FU1NBR0VT\r
219 OyBkbwoJaWYgWyAteiAiJHN1YmplY3QiIF07IHRoZW4KCSAgICBzdWJqZWN0PWBub3RtdWNoIHNo\r
220 b3cgLS1mb3JtYXQ9cmF3ICRtZXNzYWdlIHwgZ3JlcCAtbSAxICJeU3ViamVjdDogIiB8IHNlZCAn\r
221 cy9eU3ViamVjdDogLy8nYAoJICAgIGVjaG8gIiR0aHJlYWQ6IFwiJHN1YmplY3RcIjoiCglmaQoK\r
222 CWlmIG5vdG11Y2ggc2hvdyAtLWZvcm1hdD1tYm94ICRtZXNzYWdlIHwgZ2l0IGFtIC0gPi9kZXYv\r
223 bnVsbCAyPiYxOyB0aGVuCgkgICAgZWNobyAiKyAkbWVzc2FnZSBhcHBsaWVkLiIKCWVsc2UKCSAg\r
224 ICBnaXQgYW0gLS1hYm9ydAoKCSAgICBpZiBbIC1uICIkRE9fVEFHIiAtYSAtbiAiJENPTkZMSUNU\r
225 X1RBRyIgXTsgdGhlbgoJCW5vdG11Y2ggdGFnICskQ09ORkxJQ1RfVEFHIC0tICRtZXNzYWdlCgkg\r
226 ICAgZmkKCgkgICAgaWYgWyAtbiAiJERPX0tFRVBfR09JTkciIF07IHRoZW4KCQllY2hvICIkbWVz\r
227 c2FnZSBjb25mbGljdHMsIHNraXBwaW5nLiIKCSAgICBlbHNlCgkJaWYgWyAtbiAiJERPX05PTl9J\r
228 TkNSRU1FTlRBTCIgXTsgdGhlbgoJCSAgICBlY2hvICItICRtZXNzYWdlIGNvbmZsaWN0cy4iCgkJ\r
229 ICAgICMgYnJhbmNoIHdpbGwgYmUgcmVzZXQgYW55d2F5CgkJZWxzZQoJCSAgICBlY2hvICItICRt\r
230 ZXNzYWdlIGNvbmZsaWN0cywgcmV2ZXJ0aW5nIHRocmVhZC4iCgkJICAgIGdpdCByZXNldCAtLWhh\r
231 cmQgJFJFU0VUX0hFQUQKCQlmaQoJCWJyZWFrCgkgICAgZmkKCWZpCiAgICBkb25lCgogICAgaWYg\r
232 WyAtbiAiJERPX05PTl9JTkNSRU1FTlRBTCIgXTsgdGhlbgoJZWNobyAibm9uLWluY3JlbWVudGFs\r
233 IG1vZGUsIHJldmVydGluZyB0byAkUkVTRVRfSEVBRC4iCglnaXQgcmVzZXQgLS1oYXJkICRSRVNF\r
234 VF9IRUFECiAgICBlbHNlCglSRVNFVF9IRUFEPWBnaXQgcmV2LXBhcnNlIEhFQURgCiAgICBmaQpk\r
235 b25lCgppZiBbIC1uICIkRE9fUFVTSCIgXTsgdGhlbgogICAgZ2l0IHB1c2ggJEdJVF9QVVNIX0ZP\r
236 UkNFICRSRU1PVEVfTkFNRSAkTE9DQUxfQlJBTkNIOiRSRU1PVEVfQlJBTkNICmZpCg==\r
237 --=-=-=--\r