From lipeng35@mail2.sysu.edu.cn Sun Jan 04 11:55:59 2015 Received: from relay1.zedat.fu-berlin.de ([130.133.4.67]) by list1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1Y7iqj-001Q4A-Tx>; Sun, 04 Jan 2015 11:55:58 +0100 Received: from smtpbg297.qq.com ([184.105.67.100] helo=smtpproxy21.qq.com) by relay1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtps (envelope-from ) id <1Y7iqj-000mJC-IB>; Sun, 04 Jan 2015 11:55:57 +0100 X-QQ-GoodBg: 2 X-QQ-SSF: 0040000000000050 X-QQ-BUSINESS-ORIGIN: 2 X-QQ-STYLE: X-QQ-mid: bizmail55t1420368945t9600846 From: "=?utf-8?B?5p2O6bmP?=" To: "=?utf-8?B?c2VxYW4tZGV2?=" Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_54A91C31_09A372E8_1CEE9DE6" Content-Transfer-Encoding: 8Bit Date: Sun, 4 Jan 2015 18:55:45 +0800 X-Priority: 3 Message-ID: X-QQ-MIME: TCMime 1.0 by Tencent X-Mailer: QQMail 2.x X-QQ-Mailer: QQMail 2.x References: In-Reply-To: X-QQ-SENDSIZE: 520 X-QQ-Bgrelay: 1 X-Originating-IP: 184.105.67.100 X-ZEDAT-Hint: A X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1420368958-0000127A-6FFC6E7F/0/0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.493768, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=-0.0 required=5.0 tests=HTML_MESSAGE, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL X-Spam-Checker-Version: SpamAssassin 3.4.0 on Kiribati.ZEDAT.FU-Berlin.DE X-Spam-Level: Subject: [Seqan-dev] Index Finder StringSet Compile Error X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 04 Jan 2015 10:55:59 -0000 This is a multi-part message in MIME format. ------=_NextPart_54A91C31_09A372E8_1CEE9DE6 Content-Type: multipart/alternative; boundary="----=_NextPart_54A91C31_09A372E8_614F32D1"; ------=_NextPart_54A91C31_09A372E8_614F32D1 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RGVhciBQcm9mZXNzb3IsDQogICAgSSdtIGEgZ3JhZHVhdGUgc3R1ZGVudCBhdCBTdW4gWWF0 LXNlbiBVbml2ZXJzaXR5LiBJIGFtIHZlcnkgaW50ZXJlc3RlZCBpbiBTZXFBbiBsaWJyYXJ5 LCBpdCdzIHZlcnkgdXNlZnVsIGZvciBnZW5vbWljIHJlc2VhcmNoLiBXaGVuIEkgbGVhcm5p bmcgdGhlIHR1dG9yaWFsLCB0aGVyZSBpcyBzb21lIHByb2JsZW0gd2l0aCBTdHJpbmdTZXQg ZGF0YSBzdHJ1Y3R1cmUuIFRoZSBhdHRhY2hlZCAicGF0dGVybl9tYXRjaF9zdHJpbmdfc2V0 LmNwcCAiZmlsZSBoYXZlIHNvbWUgZXJyb3Igd2hlbiBjb21waWxlLiBUaGUgZysrIHZlcnNp b24gaXMgIDQuOS4yLiBDYW4geW91IGhlbHAgbWUgZmlndXJlIG91dCB3aGF0J3Mgd3Jvbmc/ DQpUaGFua3MhDQpZb3VycyBTaW5jZXJlbHksDQpQZW5nIExpLA0KMjAxNS8xLzQ= ------=_NextPart_54A91C31_09A372E8_614F32D1 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGRpdj48c3BhbiBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNTsiPkRlYXIgUHJvZmVzc29yLDwv c3Bhbj48L2Rpdj48ZGl2PjxpbmNsdWRldGFpbD48ZGl2IHN0eWxlPSJmb250OlZlcmRhbmEg bm9ybWFsIDE0cHg7Y29sb3I6IzAwMDsiPjxkaXY+Jm5ic3A7ICZuYnNwOyBJJ20gYSBncmFk dWF0ZSBzdHVkZW50IGF0IFN1biBZYXQtc2VuIFVuaXZlcnNpdHkuIEkgYW0gdmVyeSBpbnRl cmVzdGVkIGluIFNlcUFuIGxpYnJhcnksIGl0J3MgdmVyeSB1c2VmdWwgZm9yIGdlbm9taWMg cmVzZWFyY2guIFdoZW4gSSBsZWFybmluZyB0aGUgdHV0b3JpYWwsIHRoZXJlIGlzIHNvbWUg cHJvYmxlbSB3aXRoIFN0cmluZ1NldCBkYXRhIHN0cnVjdHVyZS4gVGhlIGF0dGFjaGVkICI8 c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFRhaG9tYTsgZm9udC1zaXplOiAxMnB4OyBsaW5l LWhlaWdodDogbm9ybWFsOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjMwLCAyMzAsIDIzMCk7 Ij5wYXR0ZXJuX21hdGM8L3NwYW4+PHdiciBzdHlsZT0iZm9udC1mYW1pbHk6IFRhaG9tYTsg Zm9udC1zaXplOiAxMnB4OyBsaW5lLWhlaWdodDogbm9ybWFsOyBiYWNrZ3JvdW5kLWNvbG9y OiByZ2IoMjMwLCAyMzAsIDIzMCk7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFRhaG9t YTsgZm9udC1zaXplOiAxMnB4OyBsaW5lLWhlaWdodDogbm9ybWFsOyBiYWNrZ3JvdW5kLWNv bG9yOiByZ2IoMjMwLCAyMzAsIDIzMCk7Ij5oX3N0cmluZ19zZXQ8L3NwYW4+PHdiciBzdHls ZT0iZm9udC1mYW1pbHk6IFRhaG9tYTsgZm9udC1zaXplOiAxMnB4OyBsaW5lLWhlaWdodDog bm9ybWFsOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjMwLCAyMzAsIDIzMCk7Ij48c3BhbiBz dHlsZT0iZm9udC1mYW1pbHk6IFRhaG9tYTsgZm9udC1zaXplOiAxMnB4OyBsaW5lLWhlaWdo dDogbm9ybWFsOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjMwLCAyMzAsIDIzMCk7Ij4uY3Bw ICI8L3NwYW4+PHNwYW4gc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjU7Ij5maWxlIGhhdmUgc29t ZSBlcnJvciB3aGVuIGNvbXBpbGUuIFRoZSBnKysgdmVyc2lvbiBpcyZuYnNwOyA0LjkuMi4g Q2FuIHlvdSBoZWxwIG1lIGZpZ3VyZSBvdXQgd2hhdCdzIHdyb25nPzwvc3Bhbj48L2Rpdj48 ZGl2PjxzcGFuIHN0eWxlPSJsaW5lLWhlaWdodDogMS41OyI+VGhhbmtzITwvc3Bhbj48L2Rp dj48ZGl2PjxzcGFuIHN0eWxlPSJsaW5lLWhlaWdodDogMS41OyI+WW91cnMgU2luY2VyZWx5 LDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJsaW5lLWhlaWdodDogMS41OyI+UGVu ZyBMaSw8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNTsi PjIwMTUvMS80PC9zcGFuPjwvZGl2PjxkaXY+PC9kaXY+PC9kaXY+PCEtLTwhW2VuZGlmXS0t PjwvaW5jbHVkZXRhaWw+PC9kaXY+ ------=_NextPart_54A91C31_09A372E8_614F32D1-- ------=_NextPart_54A91C31_09A372E8_1CEE9DE6 Content-Type: application/octet-stream; charset="utf-8"; name="pattern_match_string_set.cpp" Content-Disposition: attachment; filename="pattern_match_string_set.cpp" Content-Transfer-Encoding: base64 I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c2VxYW4vaW5kZXguaD4KCnVzaW5nIG5h bWVzcGFjZSBzZXFhbjsKCmludCBtYWluICgpCnsKCVN0cmluZ1NldDwgU3RyaW5nPGNoYXI+ ID4gbXlTZXQ7IAoJcmVzaXplKG15U2V0LCAzKTsgCglteVNldFswXSA9ICJ0b2Jlb3Jub3R0 b2JlIjsgCglteVNldFsxXSA9ICJ0aGViZWVvbnRoZWNvbWIiOyAKCW15U2V0WzJdID0gImJl aW5nam9obm1hbGtvdmljaCI7IAoKCUluZGV4PCBTdHJpbmdTZXQ8U3RyaW5nPGNoYXI+ID4g PiBteUluZGV4KG15U2V0KTsgCglGaW5kZXI8IEluZGV4PFN0cmluZ1NldDxTdHJpbmc8Y2hh cj4gPiA+ID4gbXlGaW5kZXIobXlJbmRleCk7CgoJc3RkOjpjb3V0IDw8ICJoaXQgYXQgIjsK CXdoaWxlIChmaW5kKG15RmluZGVyLCAiYmUiKSkgCgkJc3RkOjpjb3V0IDw8IHBvc2l0aW9u KG15RmluZGVyKSA8PCAiICAiOwoJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCQoJcmV0dXJu IDA7Cn0K ------=_NextPart_54A91C31_09A372E8_1CEE9DE6-- From rene.maerker@fu-berlin.de Fri Jan 09 09:51:33 2015 Received: from outpost9.zedat.fu-berlin.de ([130.133.4.95]) by list1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1Y9VI3-0013tl-JG>; Fri, 09 Jan 2015 09:51:31 +0100 Received: from relay2.zedat.fu-berlin.de ([130.133.4.80]) by outpost.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1Y9VI3-002Wek-Ht>; Fri, 09 Jan 2015 09:51:31 +0100 Received: from cas2.campus.fu-berlin.de ([130.133.170.202]) by relay2.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtps (envelope-from ) id <1Y9VI3-000fG5-7p>; Fri, 09 Jan 2015 09:51:31 +0100 Received: from EX03B.campus.fu-berlin.de ([130.133.170.135]) by CAS2.campus.fu-berlin.de ([130.133.170.202]) with mapi id 14.03.0210.002; Fri, 9 Jan 2015 09:51:30 +0100 From: =?utf-8?B?UmFobiwgUmVuw6k=?= To: SeqAn Development Thread-Topic: [Seqan-dev] Two Alignment Questions Thread-Index: AQHQJG9fLYow1WKOsk2uddMhZuuJZJy3eUiA Message-ID: References: In-Reply-To: Accept-Language: de-DE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: Content-Type: multipart/alternative; boundary="_000_C69ECAB4867F49C7B6D91E36EBB1B8A2zedatfuberlinde_" MIME-Version: 1.0 Date: Fri, 09 Jan 2015 09:51:29 +0100 X-Original-Date: Fri, 9 Jan 2015 08:51:29 +0000 X-Originating-IP: 130.133.170.202 X-ZEDAT-Hint: XA X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1420793491-0000127A-5A4EE718/0/0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000037, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=-50.0 required=5.0 tests=ALL_TRUSTED,HTML_MESSAGE X-Spam-Checker-Version: SpamAssassin 3.4.0 on Palau.ZEDAT.FU-Berlin.DE X-Spam-Level: Subject: Re: [Seqan-dev] Two Alignment Questions X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Jan 2015 08:51:33 -0000 --_000_C69ECAB4867F49C7B6D91E36EBB1B8A2zedatfuberlinde_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGV5IEJyZXR0LA0KDQoNCk9uIDMwIERlYyAyMDE0LCBhdCAyMToyOSwgQnJldHQgQm93bWFuIDxi bmJvd21hbkBnbWFpbC5jb208bWFpbHRvOmJuYm93bWFuQGdtYWlsLmNvbT4+IHdyb3RlOg0KDQox KSAgSXMgdGhlcmUgYW4gZWFzeSB3YXkgdG8gZ2V0IHRoZSBhY2N1cmFjeSBvZiBhbiBBbGlnbm1l bnQgb2JqZWN0LCBvciBpcyB0aGF0IHNvbWV0aGluZyBJIG5lZWQgdG8gY2FsY3VsYXRlIG15c2Vs Zj8NCg0KV2hhdCBkbyB5b3UgbWVhbiBieSBhY2N1cmFjeT8gV2hhdCBkbyB5b3UgbmVlZCBleGFj dGx5Pw0KVGhlIEFsaWduIGRhdGEgc3RydWN0dXJlIHNpbXBseSByZXByZXNlbnRzIHRoZSBjb21w dXRlZCBhbGlnbm1lbnQuIFRoZSBzY29yZSBpcyByZXR1cm5lZCBieSB0aGUgZ2xvYmFsIGFsaWdu IGludGVyZmFjZS4NClRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gbWFuaXB1bGF0ZSB0aGUgYWxp Z25tZW50IG9mIGdhcHMgYW5kIHRvIGNvbXB1dGUgYWxsIGJlc3QgdHJhY2ViYWNrIHBhdGhzLiBI b3dldmVyLCB0aG9zZSBvcHRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHRoZSBoaWdoIGxldmVs IGludGVyZmFjZXMgYnV0IG9ubHkgaW4gdGhlIGNvcmUgb2YgdGhlIGFsaWdubWVudCBlbmdpbmUu DQpJZiB5b3UgdGVsbCBtZSB3aGF0IHlvdSBuZWVkIGV4YWN0bHkgd2UgY2FuIHRoaW5rIG9mIGEg d2F5IHRvIG1ha2UgdGhvc2UgaW50ZXJmYWNlcyBwdWJsaWMgd2hpY2ggaXMgcGxhbm5lZCBmb3Ig dGhlIGZ1dHVyZSBhbnl3YXkuDQpCdXQgdGhlcmUgaXMgbm8gbWV0aG9kIHRlbGxpbmcgeW91IHRo ZSBhY2N1cmFjeSBvZiB0aGUg4oCcY29tcHV0ZWQiIGFsaWdubWVudCBjb21wYXJlZCB0byBhbm90 aGVyIOKAnHJlYWzigJ0gYWxpZ25tZW50LiBQbGVhc2UsIGdpdmUgbWUgc29tZSBzcGVjaWZpY3Mg YW5kIHdlIHNlZSBpZiB3ZSBjYW4gaW5jb3Jwb3JhdGUgdGhpcy4NCi4uLg0KV2VsbCwgdGhlcmUg aXMgYSBtZXRob2QgaW4gdGhlIHRvb2wgc2VxYW4tdGNvZmZlZSwgd2hpY2ggY2hlY2tzIGlmIHRo ZSBjb21wdXRlZCBhbGlnbm1lbnQgaXMgY29ycmVjdCBnaXZlbiB0aGUgc2NvcmUgbW9kZWwgYW5k IHRoZSBhbGlnbm1lbnQsIGJ1dCBJIGJlbGlldmUgdGhpcyBpcyBub3Qgd2hhdCB5b3UgYXJlIGxv b2tpbmcgZm9yPw0KDQoNCjIpICBiYW5kZWRDaGFpbkFsaWdubWVudCBmYWlscyBtZXNzaWx5IHdo ZW4gZ2l2ZW4gYSBWZWN0b3Igb2YgU2VlZHMgaW5zdGVhZCBvZiBhIFN0cmluZywgd2hlcmUgYXMg b3RoZXIgZnVuY3Rpb25zIHdvcmsgZmluZSAoZS5nLiBjaGFpblNlZWRzR2xvYmFsbHkpLiAgV2h5 IGRvZXMgaXQgd29yayBmb3IgdGhlIG9uZSBhbmQgbm90IHRoZSBvdGhlcj8gIEV4Y2VycHQgZnJv bSBlcnJvciBtZXNzYWdlIGJlbG93Lg0KDQoiIiINCi91c3IvaW5jbHVkZS9zZXFhbi9zZWVkcy9i YW5kZWRfY2hhaW5fYWxpZ25tZW50X2ltcGwuaDoxMTk1OjU3OiBlcnJvcjogY2FsbCB0byAnZW5k JyBpcyBhbWJpZ3VvdXMNCiAgICBTRVFBTl9BU1NFUlQoaXRFbmQgIT0gc3RhdGljX2Nhc3Q8VFNl ZWRTZXRJdGVyYXRvcj4oZW5kKHNlZWRTZXQpKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fg0KL3Vzci9pbmNsdWRlL3NlcWFuL2Jh c2ljL2RlYnVnX3Rlc3Rfc3lzdGVtLmg6MjE0Njo0NDogbm90ZTogZXhwYW5kZWQgZnJvbSBtYWNy byAnU0VRQU5fQVNTRVJUJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKF9hcmcxKSwgIyBfYXJnMSkpIHsgICAgICAgICAgIFwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBeDQovdXNyL2luY2x1ZGUvc2VxYW4vc2VlZHMvYmFuZGVk X2NoYWluX2FsaWdubWVudF9wcm9maWxlLmg6MjU0OjE2OiBub3RlOiBpbiBpbnN0YW50aWF0aW9u IG9mIGZ1bmN0aW9uIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uDQoNCi4uLg0KDQovdXNyL2luY2x1 ZGUvc2VxYW4vc2VlZHMvYmFuZGVkX2NoYWluX2FsaWdubWVudC5oOjIwNzoxMjogbm90ZTogaW4g aW5zdGFudGlhdGlvbiBvZiBmdW5jdGlvbiB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbg0KICAgICAg J3NlcWFuOjpiYW5kZWRDaGFpbkFsaWdubWVudDxzZXFhbjo6U3RyaW5nPHNlcWFuOjpTaW1wbGVU eXBlPHVuc2lnbmVkIGNoYXIsIHNlcWFuOjpEbmE1Xz4sIHNlcWFuOjpBbGxvYzx2b2lkPiA+LCBz ZXFhbjo6VGFnPHNlcWFuOjpBcnJheUdhcHNfPiwNCiAgICAgIHN0ZDo6dmVjdG9yPHNlcWFuOjpT ZWVkPHNlcWFuOjpUYWc8c2VxYW46OlNpbXBsZV8+LCBzZXFhbjo6RGVmYXVsdFNlZWRDb25maWc+ LCBzdGQ6OmFsbG9jYXRvcjxzZXFhbjo6U2VlZDxzZXFhbjo6VGFnPHNlcWFuOjpTaW1wbGVfPiwg c2VxYW46OkRlZmF1bHRTZWVkQ29uZmlnPiA+ID4sIGxvbmcsDQogICAgICBzZXFhbjo6VGFnPHNl cWFuOjpTaW1wbGVfPiwgc2VxYW46OlRhZzxzZXFhbjo6U2ltcGxlXz4sIGZhbHNlLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBzZXFhbjo6VGFnPHNlcWFuOjpEZWZhdWx0Xz4gPicgcmVxdWVzdGVkIGhl cmUNCiAgICByZXR1cm4gYmFuZGVkQ2hhaW5BbGlnbm1lbnQoYWxpZ24sIHNlZWRTZXQsIHNjb3Jl U2NoZW1lLCBzY29yZVNjaGVtZSwgYWxpZ25Db25maWcsIGJhbmRFeHRlbnNpb24pOw0KICAgICAg ICAgICBeDQovaG9tZS9iYm93bWFuL2dpdC9TUlNMSS9zcmMvQysrL1NwYXJzZUFsaWdubWVudDIu Y3BwOjcyOjI1OiBub3RlOiBpbiBpbnN0YW50aWF0aW9uIG9mIGZ1bmN0aW9uIHRlbXBsYXRlIHNw ZWNpYWxpemF0aW9uDQogICAgICAnc2VxYW46OmJhbmRlZENoYWluQWxpZ25tZW50PHNlcWFuOjpT dHJpbmc8c2VxYW46OlNpbXBsZVR5cGU8dW5zaWduZWQgY2hhciwgc2VxYW46OkRuYTVfPiwgc2Vx YW46OkFsbG9jPHZvaWQ+ID4sIHNlcWFuOjpUYWc8c2VxYW46OkFycmF5R2Fwc18+LA0KICAgICAg c3RkOjp2ZWN0b3I8c2VxYW46OlNlZWQ8c2VxYW46OlRhZzxzZXFhbjo6U2ltcGxlXz4sIHNlcWFu OjpEZWZhdWx0U2VlZENvbmZpZz4sIHN0ZDo6YWxsb2NhdG9yPHNlcWFuOjpTZWVkPHNlcWFuOjpU YWc8c2VxYW46OlNpbXBsZV8+LCBzZXFhbjo6RGVmYXVsdFNlZWRDb25maWc+ID4gPiwgbG9uZywN CiAgICAgIHNlcWFuOjpUYWc8c2VxYW46OlNpbXBsZV8+LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgc2VxYW46OlRhZzxzZXFhbjo6RGVmYXVsdF8+ID4nIHJlcXVlc3RlZCBoZXJlDQogICAg ICAgIGxvbmcgYWxuU2NvcmUgPSBiYW5kZWRDaGFpbkFsaWdubWVudChhbGlnbm1lbnQsICpzZWVk Q2hhaW4sIHNjb3JpbmcsIGdsb2JhbENvbmZpZyk7DQogICAgICAgICAgICAgICAgICAgICAgICBe DQovaG9tZS9iYm93bWFuL2dpdC9TUlNMSS9zcmMvQysrL21haW4uY3BwOjk1OjI3OiBub3RlOiBp biBpbnN0YW50aWF0aW9uIG9mIGZ1bmN0aW9uIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uICdSZWZD aGFpbnNUb0FsaWdubWVudHM8c2VxYW46OkFsaWduQ29uZmlnPGZhbHNlLCB0cnVlLCB0cnVlLCBm YWxzZSwNCiAgICAgIHNlcWFuOjpUYWc8c2VxYW46OkRlZmF1bHRfPiA+ICgpPicgcmVxdWVzdGVk IGhlcmUNCiAgICAgICAgYXV0byBhbGlnbm1lbnRzID0gUmVmQ2hhaW5zVG9BbGlnbm1lbnRzKHJl Y29yZC0+U2VxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBeDQovdXNyL2luY2x1ZGUvc2Vx YW4vc2VlZHMvYmFuZGVkX2NoYWluX2FsaWdubWVudF9pbXBsLmg6NTgzOjE6IG5vdGU6IGNhbmRp ZGF0ZSB0ZW1wbGF0ZSBpZ25vcmVkOiBzdWJzdGl0dXRpb24gZmFpbHVyZSBbd2l0aCBUU2VlZFNl dCA9IHN0ZDo6dmVjdG9yPHNlcWFuOjpTZWVkPHNlcWFuOjpUYWc8c2VxYW46OlNpbXBsZV8+LA0K ICAgICAgc2VxYW46OkRlZmF1bHRTZWVkQ29uZmlnPiwgc3RkOjphbGxvY2F0b3I8c2VxYW46OlNl ZWQ8c2VxYW46OlRhZzxzZXFhbjo6U2ltcGxlXz4sIHNlcWFuOjpEZWZhdWx0U2VlZENvbmZpZz4g PiA+XQ0KX2ZpbmRGaXJzdEFuY2hvcihUU2VlZFNldCBjb25zdCAmIHNlZWRTZXQsIGludCBiYW5k RXh0ZW5zaW9uKQ0KIuKAnSINCg0KT2ssIHRoaXMgc2VlbXMgdG8gYmUgYSBidWcgdG8gbWUuDQpJ 4oCZbGwgaGF2ZSBhIGxvb2sgaW50byBpdC4NCg0KDQpTaW5jZXJlbHksDQotQnJldHQNCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQpzZXFhbi1kZXYgbWFp bGluZyBsaXN0DQpzZXFhbi1kZXZAbGlzdHMuZnUtYmVybGluLmRlPG1haWx0bzpzZXFhbi1kZXZA bGlzdHMuZnUtYmVybGluLmRlPg0KaHR0cHM6Ly9saXN0cy5mdS1iZXJsaW4uZGUvbGlzdGluZm8v c2VxYW4tZGV2DQoNCkJlc3RzLA0KDQpSZW7DqQ0KDQotLS0NCg0KUmVuw6kgUmFobg0KUGguRC4g U3R1ZGVudA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClRlbDogICgrNDkpIDMw IDgzOCA3NTI3Nw0KTWFpbDogcmVuZS5yYWhuQGZ1LWJlcmxpbi5kZTxtYWlsdG86cmVuZS5yYWhu QGZ1LWJlcmxpbi5kZT4NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpJbnN0aXR1 dGUgb2YgQ29tcHV0ZXIgU2NpZW5jZQ0KQWxnb3JpdGhtaWMgQmlvaW5mb3JtYXRpY3MgKEFCSSkN Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpGcmVpZSBVbml2ZXJzaXTDpHQgQmVy bGluDQpUYWt1c3RyYcOfZSA5DQoxNDE5NSBCZXJsaW4NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQoNCg== --_000_C69ECAB4867F49C7B6D91E36EBB1B8A2zedatfuberlinde_ Content-Type: text/html; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5IHN0eWxlPSJ3b3JkLXdy YXA6IGJyZWFrLXdvcmQ7IC13ZWJraXQtbmJzcC1tb2RlOiBzcGFjZTsgLXdlYmtpdC1saW5lLWJy ZWFrOiBhZnRlci13aGl0ZS1zcGFjZTsiIGNsYXNzPSIiPg0KSGV5IEJyZXR0LCZuYnNwOw0KPGRp diBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+PGJyIGNsYXNz PSIiPg0KPGRpdj4NCjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiIGNsYXNzPSIiPg0KPGRpdiBjbGFz cz0iIj5PbiAzMCBEZWMgMjAxNCwgYXQgMjE6MjksIEJyZXR0IEJvd21hbiAmbHQ7PGEgaHJlZj0i bWFpbHRvOmJuYm93bWFuQGdtYWlsLmNvbSIgY2xhc3M9IiI+Ym5ib3dtYW5AZ21haWwuY29tPC9h PiZndDsgd3JvdGU6PC9kaXY+DQo8YnIgY2xhc3M9IkFwcGxlLWludGVyY2hhbmdlLW5ld2xpbmUi Pg0KPGRpdiBjbGFzcz0iIj4NCjxkaXYgZGlyPSJsdHIiIGNsYXNzPSIiPg0KPGRpdiBjbGFzcz0i Ij4xKSAmbmJzcDtJcyB0aGVyZSBhbiBlYXN5IHdheSB0byBnZXQgdGhlIGFjY3VyYWN5IG9mIGFu IEFsaWdubWVudCBvYmplY3QsIG9yIGlzIHRoYXQgc29tZXRoaW5nIEkgbmVlZCB0byBjYWxjdWxh dGUgbXlzZWxmPzwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvYmxvY2txdW90ZT4NCjxkaXY+PGJy IGNsYXNzPSIiPg0KPC9kaXY+DQo8ZGl2PldoYXQgZG8geW91IG1lYW4gYnkgYWNjdXJhY3k/IFdo YXQgZG8geW91IG5lZWQgZXhhY3RseT8mbmJzcDs8L2Rpdj4NCjxkaXY+VGhlIEFsaWduIGRhdGEg c3RydWN0dXJlIHNpbXBseSByZXByZXNlbnRzIHRoZSBjb21wdXRlZCBhbGlnbm1lbnQuIFRoZSBz Y29yZSBpcyByZXR1cm5lZCBieSB0aGUgZ2xvYmFsIGFsaWduIGludGVyZmFjZS4mbmJzcDs8L2Rp dj4NCjxkaXY+VGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBtYW5pcHVsYXRlIHRoZSBhbGlnbm1l bnQgb2YgZ2FwcyBhbmQgdG8gY29tcHV0ZSBhbGwgYmVzdCB0cmFjZWJhY2sgcGF0aHMuIEhvd2V2 ZXIsIHRob3NlIG9wdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdGhlIGhpZ2ggbGV2ZWwgaW50 ZXJmYWNlcyBidXQgb25seSBpbiB0aGUgY29yZSBvZiB0aGUgYWxpZ25tZW50IGVuZ2luZS4mbmJz cDs8L2Rpdj4NCjxkaXY+SWYgeW91IHRlbGwgbWUgd2hhdCB5b3UgbmVlZCBleGFjdGx5IHdlIGNh biB0aGluayBvZiBhIHdheSB0byBtYWtlIHRob3NlIGludGVyZmFjZXMgcHVibGljIHdoaWNoIGlz IHBsYW5uZWQgZm9yIHRoZSBmdXR1cmUgYW55d2F5LjwvZGl2Pg0KPGRpdj5CdXQgdGhlcmUgaXMg bm8gbWV0aG9kIHRlbGxpbmcgeW91IHRoZSBhY2N1cmFjeSBvZiB0aGUg4oCcY29tcHV0ZWQmcXVv dDsgYWxpZ25tZW50IGNvbXBhcmVkIHRvIGFub3RoZXIg4oCccmVhbOKAnSBhbGlnbm1lbnQuIFBs ZWFzZSwgZ2l2ZSBtZSBzb21lIHNwZWNpZmljcyBhbmQgd2Ugc2VlIGlmIHdlIGNhbiBpbmNvcnBv cmF0ZSB0aGlzLjwvZGl2Pg0KPGRpdj4uLi48L2Rpdj4NCjxkaXY+V2VsbCwgdGhlcmUgaXMgYSBt ZXRob2QgaW4gdGhlIHRvb2wgc2VxYW4tdGNvZmZlZSwgd2hpY2ggY2hlY2tzIGlmIHRoZSBjb21w dXRlZCBhbGlnbm1lbnQgaXMgY29ycmVjdCBnaXZlbiB0aGUgc2NvcmUgbW9kZWwgYW5kIHRoZSBh bGlnbm1lbnQsIGJ1dCBJIGJlbGlldmUgdGhpcyBpcyBub3Qgd2hhdCB5b3UgYXJlIGxvb2tpbmcg Zm9yPzwvZGl2Pg0KPGJyIGNsYXNzPSIiPg0KPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2xhc3M9 IiI+DQo8ZGl2IGNsYXNzPSIiPg0KPGRpdiBkaXI9Imx0ciIgY2xhc3M9IiI+DQo8ZGl2IGNsYXNz PSIiPjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4yKSAmbmJzcDtiYW5kZWRD aGFpbkFsaWdubWVudCBmYWlscyBtZXNzaWx5IHdoZW4gZ2l2ZW4gYSBWZWN0b3Igb2YgU2VlZHMg aW5zdGVhZCBvZiBhIFN0cmluZywgd2hlcmUgYXMgb3RoZXIgZnVuY3Rpb25zIHdvcmsgZmluZSAo ZS5nLiBjaGFpblNlZWRzR2xvYmFsbHkpLiZuYnNwOyBXaHkgZG9lcyBpdCB3b3JrIGZvciB0aGUg b25lIGFuZCBub3QgdGhlIG90aGVyPyZuYnNwOyBFeGNlcnB0IGZyb20gZXJyb3IgbWVzc2FnZSBi ZWxvdy48L2Rpdj4NCjxkaXYgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8ZGl2IGNs YXNzPSIiPiZxdW90OyZxdW90OyZxdW90OzwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4NCjxkaXYgY2xh c3M9IiI+L3Vzci9pbmNsdWRlL3NlcWFuL3NlZWRzL2JhbmRlZF9jaGFpbl9hbGlnbm1lbnRfaW1w bC5oOjExOTU6NTc6IGVycm9yOiBjYWxsIHRvICdlbmQnIGlzIGFtYmlndW91czwvZGl2Pg0KPGRp diBjbGFzcz0iIj4mbmJzcDsgJm5ic3A7IFNFUUFOX0FTU0VSVChpdEVuZCAhPSBzdGF0aWNfY2Fz dCZsdDtUU2VlZFNldEl0ZXJhdG9yJmd0OyhlbmQoc2VlZFNldCkpKTs8L2Rpdj4NCjxkaXYgY2xh c3M9IiI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IF5+fjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4v dXNyL2luY2x1ZGUvc2VxYW4vYmFzaWMvZGVidWdfdGVzdF9zeXN0ZW0uaDoyMTQ2OjQ0OiBub3Rl OiBleHBhbmRlZCBmcm9tIG1hY3JvICdTRVFBTl9BU1NFUlQnPC9kaXY+DQo8ZGl2IGNsYXNzPSIi PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IChfYXJnMSksICMgX2FyZzEpKSB7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgXDwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4m bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtePC9kaXY+DQo8ZGl2IGNsYXNz PSIiPi91c3IvaW5jbHVkZS9zZXFhbi9zZWVkcy9iYW5kZWRfY2hhaW5fYWxpZ25tZW50X3Byb2Zp bGUuaDoyNTQ6MTY6IG5vdGU6IGluIGluc3RhbnRpYXRpb24gb2YgZnVuY3Rpb24gdGVtcGxhdGUg c3BlY2lhbGl6YXRpb248L2Rpdj4NCjxkaXYgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPg0KPC9kaXY+ DQo8ZGl2IGNsYXNzPSIiPi4uLjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8 L2Rpdj4NCjxkaXYgY2xhc3M9IiI+L3Vzci9pbmNsdWRlL3NlcWFuL3NlZWRzL2JhbmRlZF9jaGFp bl9hbGlnbm1lbnQuaDoyMDc6MTI6IG5vdGU6IGluIGluc3RhbnRpYXRpb24gb2YgZnVuY3Rpb24g dGVtcGxhdGUgc3BlY2lhbGl6YXRpb248L2Rpdj4NCjxkaXYgY2xhc3M9IiI+Jm5ic3A7ICZuYnNw OyAmbmJzcDsgJ3NlcWFuOjpiYW5kZWRDaGFpbkFsaWdubWVudCZsdDtzZXFhbjo6U3RyaW5nJmx0 O3NlcWFuOjpTaW1wbGVUeXBlJmx0O3Vuc2lnbmVkIGNoYXIsIHNlcWFuOjpEbmE1XyZndDssIHNl cWFuOjpBbGxvYyZsdDt2b2lkJmd0OyAmZ3Q7LCBzZXFhbjo6VGFnJmx0O3NlcWFuOjpBcnJheUdh cHNfJmd0Oyw8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgc3RkOjp2 ZWN0b3ImbHQ7c2VxYW46OlNlZWQmbHQ7c2VxYW46OlRhZyZsdDtzZXFhbjo6U2ltcGxlXyZndDss IHNlcWFuOjpEZWZhdWx0U2VlZENvbmZpZyZndDssIHN0ZDo6YWxsb2NhdG9yJmx0O3NlcWFuOjpT ZWVkJmx0O3NlcWFuOjpUYWcmbHQ7c2VxYW46OlNpbXBsZV8mZ3Q7LCBzZXFhbjo6RGVmYXVsdFNl ZWRDb25maWcmZ3Q7ICZndDsgJmd0OywgbG9uZyw8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+Jm5ic3A7 ICZuYnNwOyAmbmJzcDsgc2VxYW46OlRhZyZsdDtzZXFhbjo6U2ltcGxlXyZndDssIHNlcWFuOjpU YWcmbHQ7c2VxYW46OlNpbXBsZV8mZ3Q7LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgc2Vx YW46OlRhZyZsdDtzZXFhbjo6RGVmYXVsdF8mZ3Q7ICZndDsnIHJlcXVlc3RlZCBoZXJlPC9kaXY+ DQo8ZGl2IGNsYXNzPSIiPiZuYnNwOyAmbmJzcDsgcmV0dXJuIGJhbmRlZENoYWluQWxpZ25tZW50 KGFsaWduLCBzZWVkU2V0LCBzY29yZVNjaGVtZSwgc2NvcmVTY2hlbWUsIGFsaWduQ29uZmlnLCBi YW5kRXh0ZW5zaW9uKTs8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDtePC9kaXY+DQo8ZGl2IGNsYXNzPSIiPi9ob21lL2Jib3dtYW4v Z2l0L1NSU0xJL3NyYy9DJiM0MzsmIzQzOy9TcGFyc2VBbGlnbm1lbnQyLmNwcDo3MjoyNTogbm90 ZTogaW4gaW5zdGFudGlhdGlvbiBvZiBmdW5jdGlvbiB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbjwv ZGl2Pg0KPGRpdiBjbGFzcz0iIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAnc2VxYW46OmJhbmRlZENo YWluQWxpZ25tZW50Jmx0O3NlcWFuOjpTdHJpbmcmbHQ7c2VxYW46OlNpbXBsZVR5cGUmbHQ7dW5z aWduZWQgY2hhciwgc2VxYW46OkRuYTVfJmd0Oywgc2VxYW46OkFsbG9jJmx0O3ZvaWQmZ3Q7ICZn dDssIHNlcWFuOjpUYWcmbHQ7c2VxYW46OkFycmF5R2Fwc18mZ3Q7LDwvZGl2Pg0KPGRpdiBjbGFz cz0iIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyBzdGQ6OnZlY3RvciZsdDtzZXFhbjo6U2VlZCZsdDtz ZXFhbjo6VGFnJmx0O3NlcWFuOjpTaW1wbGVfJmd0Oywgc2VxYW46OkRlZmF1bHRTZWVkQ29uZmln Jmd0Oywgc3RkOjphbGxvY2F0b3ImbHQ7c2VxYW46OlNlZWQmbHQ7c2VxYW46OlRhZyZsdDtzZXFh bjo6U2ltcGxlXyZndDssIHNlcWFuOjpEZWZhdWx0U2VlZENvbmZpZyZndDsgJmd0OyAmZ3Q7LCBs b25nLDwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyBzZXFhbjo6VGFn Jmx0O3NlcWFuOjpTaW1wbGVfJmd0OywgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHNlcWFu OjpUYWcmbHQ7c2VxYW46OkRlZmF1bHRfJmd0OyAmZ3Q7JyByZXF1ZXN0ZWQgaGVyZTwvZGl2Pg0K PGRpdiBjbGFzcz0iIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgbG9uZyBhbG5TY29yZSA9 IGJhbmRlZENoYWluQWxpZ25tZW50KGFsaWdubWVudCwgKnNlZWRDaGFpbiwgc2NvcmluZywgZ2xv YmFsQ29uZmlnKTs8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgXjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4vaG9tZS9iYm93bWFuL2dpdC9TUlNMSS9zcmMvQyYj NDM7JiM0MzsvbWFpbi5jcHA6OTU6Mjc6IG5vdGU6IGluIGluc3RhbnRpYXRpb24gb2YgZnVuY3Rp b24gdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gJ1JlZkNoYWluc1RvQWxpZ25tZW50cyZsdDtzZXFh bjo6QWxpZ25Db25maWcmbHQ7ZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLDwvZGl2Pg0KPGRpdiBj bGFzcz0iIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyBzZXFhbjo6VGFnJmx0O3NlcWFuOjpEZWZhdWx0 XyZndDsgJmd0OyAoKSZndDsnIHJlcXVlc3RlZCBoZXJlPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPiZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBhdXRvIGFsaWdubWVudHMgPSBSZWZDaGFpbnNUb0Fs aWdubWVudHMocmVjb3JkLSZndDtTZXEsPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPiZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBePC9kaXY+DQo8ZGl2IGNsYXNzPSIiPi91c3IvaW5jbHVk ZS9zZXFhbi9zZWVkcy9iYW5kZWRfY2hhaW5fYWxpZ25tZW50X2ltcGwuaDo1ODM6MTogbm90ZTog Y2FuZGlkYXRlIHRlbXBsYXRlIGlnbm9yZWQ6IHN1YnN0aXR1dGlvbiBmYWlsdXJlIFt3aXRoIFRT ZWVkU2V0ID0gc3RkOjp2ZWN0b3ImbHQ7c2VxYW46OlNlZWQmbHQ7c2VxYW46OlRhZyZsdDtzZXFh bjo6U2ltcGxlXyZndDssPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPiZuYnNwOyAmbmJzcDsgJm5ic3A7 IHNlcWFuOjpEZWZhdWx0U2VlZENvbmZpZyZndDssIHN0ZDo6YWxsb2NhdG9yJmx0O3NlcWFuOjpT ZWVkJmx0O3NlcWFuOjpUYWcmbHQ7c2VxYW46OlNpbXBsZV8mZ3Q7LCBzZXFhbjo6RGVmYXVsdFNl ZWRDb25maWcmZ3Q7ICZndDsgJmd0O108L2Rpdj4NCjxkaXYgY2xhc3M9IiI+X2ZpbmRGaXJzdEFu Y2hvcihUU2VlZFNldCBjb25zdCAmYW1wOyBzZWVkU2V0LCBpbnQgYmFuZEV4dGVuc2lvbik8L2Rp dj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4mcXVvdDvigJ0mcXVvdDsmbmJzcDs8L2Rpdj4NCjwv ZGl2Pg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+DQo8ZGl2PjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0K T2ssIHRoaXMgc2VlbXMgdG8gYmUgYSBidWcgdG8gbWUuPC9kaXY+DQo8ZGl2PknigJlsbCBoYXZl IGEgbG9vayBpbnRvIGl0LjwvZGl2Pg0KPGRpdj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXY+ DQo8YmxvY2txdW90ZSB0eXBlPSJjaXRlIiBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9IiI+DQo8ZGl2 IGRpcj0ibHRyIiBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPg0KPC9kaXY+ DQo8ZGl2IGNsYXNzPSIiPlNpbmNlcmVseSw8L2Rpdj4NCi1CcmV0dDxpbWcgc3JjPSJodHRwOi8v dC5zaWduYWxlZHVlLmNvbS9lMXQvby81L2YxOGRRaGIwUzdrczhkRE1QYlcybjB4NmwyQjlnWHJO N3NLajZ2NGZoamxWUnp2Ylk4cVNRR0NWUnpIMmIxcGN0R0ZXNGJYbHMzMWsxSDZIMD9zaT00NzM4 OTgwNzE3Nzg5MTg0JmFtcDtwaT1mOTdhYTViYS1jOGQ0LTRjZmQtZDliZi03Mzk2YTE2OTEwYmYi IHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHN0eWxlPSJkaXNwbGF5Om5vbmUiIGNsYXNzPSIiPjwvZGl2 Pg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnIgY2xh c3M9IiI+DQpzZXFhbi1kZXYgbWFpbGluZyBsaXN0PGJyIGNsYXNzPSIiPg0KPGEgaHJlZj0ibWFp bHRvOnNlcWFuLWRldkBsaXN0cy5mdS1iZXJsaW4uZGUiIGNsYXNzPSIiPnNlcWFuLWRldkBsaXN0 cy5mdS1iZXJsaW4uZGU8L2E+PGJyIGNsYXNzPSIiPg0KaHR0cHM6Ly9saXN0cy5mdS1iZXJsaW4u ZGUvbGlzdGluZm8vc2VxYW4tZGV2PGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+ DQo8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8ZGl2IGNsYXNz PSIiPg0KPGRpdj5CZXN0cywmbmJzcDs8L2Rpdj4NCjxkaXY+PGJyIGNsYXNzPSIiPg0KPC9kaXY+ DQo8ZGl2PlJlbsOpJm5ic3A7PC9kaXY+DQo8L2Rpdj4NCjxiciBjbGFzcz0iIj4NCjxkaXYgY2xh c3M9IiI+DQo8ZGl2IGNsYXNzPSIiPg0KPGRpdiBzdHlsZT0ib3JwaGFuczogMjsgd2lkb3dzOiAy OyIgY2xhc3M9IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNsYXNzPSIiPi0tLTwvZm9udD48 L2Rpdj4NCjxkaXYgc3R5bGU9Im9ycGhhbnM6IDI7IHdpZG93czogMjsiIGNsYXNzPSIiPjxmb250 IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8L2ZvbnQ+PC9kaXY+ DQo8ZGl2IHN0eWxlPSJvcnBoYW5zOiAyOyB3aWRvd3M6IDI7IiBjbGFzcz0iIj48Zm9udCBmYWNl PSJDb3VyaWVyIE5ldyIgY2xhc3M9IiI+UmVuw6kgUmFobjwvZm9udD48L2Rpdj4NCjxkaXYgc3R5 bGU9Im9ycGhhbnM6IDI7IHdpZG93czogMjsiIGNsYXNzPSIiPjxmb250IGZhY2U9IkNvdXJpZXIg TmV3IiBjbGFzcz0iIj5QaC5ELiBTdHVkZW50PC9mb250PjwvZGl2Pg0KPGRpdiBzdHlsZT0ib3Jw aGFuczogMjsgd2lkb3dzOiAyOyIgY2xhc3M9IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNs YXNzPSIiPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9mb250PjwvZGl2Pg0KPGRp diBzdHlsZT0ib3JwaGFuczogMjsgd2lkb3dzOiAyOyIgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIi Pjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj5UZWw6ICZuYnNwOygmIzQzOzQ5KSAz MCA4MzggNzUyNzc8L2ZvbnQ+PC9kaXY+DQo8ZGl2IGNsYXNzPSIiPjxmb250IGZhY2U9IkNvdXJp ZXIgTmV3IiBjbGFzcz0iIj5NYWlsOiZuYnNwOzxhIGhyZWY9Im1haWx0bzpyZW5lLnJhaG5AZnUt YmVybGluLmRlIiBjbGFzcz0iIj5yZW5lLnJhaG5AZnUtYmVybGluLmRlPC9hPjwvZm9udD48L2Rp dj4NCjxkaXYgY2xhc3M9IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNsYXNzPSIiPi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9mb250PjwvZGl2Pg0KPC9kaXY+DQo8ZGl2IHN0 eWxlPSJvcnBoYW5zOiAyOyB3aWRvd3M6IDI7IiBjbGFzcz0iIj48Zm9udCBmYWNlPSJDb3VyaWVy IE5ldyIgY2xhc3M9IiI+SW5zdGl0dXRlIG9mIENvbXB1dGVyIFNjaWVuY2U8L2ZvbnQ+PC9kaXY+ DQo8ZGl2IHN0eWxlPSJvcnBoYW5zOiAyOyB3aWRvd3M6IDI7IiBjbGFzcz0iIj48Zm9udCBmYWNl PSJDb3VyaWVyIE5ldyIgY2xhc3M9IiI+QWxnb3JpdGhtaWMgQmlvaW5mb3JtYXRpY3MgKEFCSSk8 L2ZvbnQ+PC9kaXY+DQo8ZGl2IHN0eWxlPSJvcnBoYW5zOiAyOyB3aWRvd3M6IDI7IiBjbGFzcz0i Ij48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgY2xhc3M9IiI+LS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS08L2ZvbnQ+PC9kaXY+DQo8ZGl2IHN0eWxlPSJvcnBoYW5zOiAyOyB3aWRvd3M6 IDI7IiBjbGFzcz0iIj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgY2xhc3M9IiI+RnJlaWUgVW5p dmVyc2l0w6R0IEJlcmxpbjwvZm9udD48L2Rpdj4NCjxkaXYgc3R5bGU9Im9ycGhhbnM6IDI7IHdp ZG93czogMjsiIGNsYXNzPSIiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj5UYWt1 c3RyYcOfZSA5PC9mb250PjwvZGl2Pg0KPGRpdiBzdHlsZT0ib3JwaGFuczogMjsgd2lkb3dzOiAy OyIgY2xhc3M9IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNsYXNzPSIiPjE0MTk1IEJlcmxp bjwvZm9udD48L2Rpdj4NCjxkaXYgc3R5bGU9Im9ycGhhbnM6IDI7IHdpZG93czogMjsiIGNsYXNz PSIiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj4tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLTwvZm9udD48L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8YnIgY2xhc3M9IiI+ DQo8L2Rpdj4NCjwvYm9keT4NCjwvaHRtbD4NCg== --_000_C69ECAB4867F49C7B6D91E36EBB1B8A2zedatfuberlinde_-- From jwillis0720@gmail.com Fri Jan 09 10:51:58 2015 Received: from relay1.zedat.fu-berlin.de ([130.133.4.67]) by list1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1Y9WEW-0018HB-VZ>; Fri, 09 Jan 2015 10:51:57 +0100 Received: from mail-pa0-f41.google.com ([209.85.220.41]) by relay1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtps (envelope-from ) id <1Y9WEW-000BXy-Oo>; Fri, 09 Jan 2015 10:51:56 +0100 Received: by mail-pa0-f41.google.com with SMTP id rd3so17611616pab.0 for ; Fri, 09 Jan 2015 01:51:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:content-type:content-transfer-encoding:subject:message-id:date :to:mime-version; bh=IauBhEg2CpkTrFuFn+WyUTxDOshYKBA1V69lNq9v7Ps=; b=0bPJjBIiOyWVgB9hCbxYfuNceEUOWfBui6fur7G3eEXi31T6c7td9suaHCUUlQdnW3 V8qtpWwl95NOil5/PPFGqScuP8pAT1+dok+Oedz7a0k//0idO9BaKo/hGcVN7NKylfO2 bCFIDHYloU4iFJE08p4l4OgTseJSgI/sDE8QFlCTgjqSc/6PK1eBQxuiPfld+7oFlFl4 +vU4Y9eJJQUkfLxeLFi875ZEi9L98JWQhO86hmWvG/uEkr9J2thDOPLYKEVT7yCzA8Yi batet99oiO0kuDoBkfYMd1C/WZ+IufjMop6+0TtmDVYeYkiwPyrczWG6qxdr/juEcNfd WDcQ== X-Received: by 10.66.55.4 with SMTP id n4mr22153265pap.79.1420797113681; Fri, 09 Jan 2015 01:51:53 -0800 (PST) Received: from [192.168.0.13] (cpe-76-167-196-136.san.res.rr.com. [76.167.196.136]) by mx.google.com with ESMTPSA id se3sm6579348pbc.24.2015.01.09.01.51.51 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 09 Jan 2015 01:51:52 -0800 (PST) From: Jordan Willis Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Message-Id: Date: Fri, 9 Jan 2015 02:00:09 -0800 To: seqan-dev@lists.fu-berlin.de Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\)) X-Mailer: Apple Mail (2.1878.6) X-Originating-IP: 209.85.220.41 X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1420797116-0000127A-EFE4F3FC/0/0 X-Bogosity: Unsure, tests=bogofilter, spamicity=0.500122, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=0.8 required=5.0 tests=FREEMAIL_FROM, FU_BOGO_UNSURE, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID X-Spam-Checker-Version: SpamAssassin 3.4.0 on Niue.ZEDAT.FU-Berlin.DE X-Spam-Level: Subject: [Seqan-dev] Container type for storing sequences in memory X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Jan 2015 09:51:58 -0000 Hi, I was wondering if there is a builtin container in Seqan for storing a = small database of sequence ids and sequences that can be stored in = memory. The sequences will be continually iterated through and local = alignments will be performed. Does anyone have any recommendations for = this or perhaps point me to one of the builtin apps that does this? Thanks so much, j= From bnbowman@gmail.com Sat Jan 10 03:16:26 2015 Received: from relay1.zedat.fu-berlin.de ([130.133.4.67]) by list1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1Y9lbE-002H3Q-Bj>; Sat, 10 Jan 2015 03:16:24 +0100 Received: from mail-yh0-f53.google.com ([209.85.213.53]) by relay1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtps (envelope-from ) id <1Y9lbE-002vl9-1x>; Sat, 10 Jan 2015 03:16:24 +0100 Received: by mail-yh0-f53.google.com with SMTP id i57so5693715yha.12 for ; Fri, 09 Jan 2015 18:16:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=3mdRAxaikOa0t59iAiqYsD1rJsQ53bee2TA7QRTv4gs=; b=sQzGwS3nD40lMllV88jQmkk8tRhNRQcHWlRfN6vTjzCLQRouwlf6R5EYUMe0JsN8Uf uJkfnqt0YWgBdx6iLwT29ITqZudCoh4NX8PvZRWhsXVqZONYzzs39XPWNc8MLkwCTmCK +GxDGxPcPwoPlxxl4xu23rL5voHHDlyOl4adNTt6vSklDvnCdnjTTVwksvoyX+pU8iU8 P0MIqCOFWbN6GHBL8cPCP9UY7PNtrCEVl7zDptJODs915lW7q2c5NZidzq0EgoXu2CP0 81VzUKRYYyAVeReID6DMi24+879Fl06uPJg2JJeasjGCJ8DMC/JbgD2zpDtlZwuu9wT3 Tz3Q== MIME-Version: 1.0 X-Received: by 10.236.63.6 with SMTP id z6mr13870377yhc.65.1420856181135; Fri, 09 Jan 2015 18:16:21 -0800 (PST) Received: by 10.170.86.86 with HTTP; Fri, 9 Jan 2015 18:16:21 -0800 (PST) In-Reply-To: References: Date: Fri, 9 Jan 2015 18:16:21 -0800 Message-ID: From: Brett Bowman To: SeqAn Development Content-Type: multipart/alternative; boundary=089e01294ff0f42150050c42dbdc X-Originating-IP: 209.85.213.53 X-ZEDAT-Hint: A X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1420856184-0000127A-54E28B28/0/0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.038353, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=-0.7 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,T_DKIM_INVALID X-Spam-Checker-Version: SpamAssassin 3.4.0 on Tuvalu.ZEDAT.FU-Berlin.DE X-Spam-Level: Subject: Re: [Seqan-dev] Two Alignment Questions X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 10 Jan 2015 02:16:26 -0000 --089e01294ff0f42150050c42dbdc Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Thanks Rene, >What do you mean by accuracy? What do you need exactly? What I am trying to do is write a tool to align single-molecule sequencing data (PacBio, Oxford Nanopore) to reference genomes. For which the alignment accuracy and the break-down of the types of errors is very useful, as the per-read quality on both platforms varies substantially. What I'd like are member methods or functions-on-alignment-objects to give the following: -The number of base-pair matches in the alignment -The number of mismatches in the alignment -The number of insertions in the alignment -The number of deletions in the alignment -The alignment string as represented by the Align object's toString() metho= d The first four I need to summarize the similarity of an alignment (i.e. indels are likely sequencing error, where as mismatches are likely not), while the latter is helpful in creating alternate representations for alignments Does that help? -B On Fri, Jan 9, 2015 at 12:51 AM, Rahn, Ren=C3=A9 wrote: > Hey Brett, > > > On 30 Dec 2014, at 21:29, Brett Bowman wrote: > > 1) Is there an easy way to get the accuracy of an Alignment object, or > is that something I need to calculate myself? > > > What do you mean by accuracy? What do you need exactly? > The Align data structure simply represents the computed alignment. The > score is returned by the global align interface. > There are several ways to manipulate the alignment of gaps and to compute > all best traceback paths. However, those options are not supported on the > high level interfaces but only in the core of the alignment engine. > If you tell me what you need exactly we can think of a way to make those > interfaces public which is planned for the future anyway. > But there is no method telling you the accuracy of the =E2=80=9Ccomputed" > alignment compared to another =E2=80=9Creal=E2=80=9D alignment. Please, g= ive me some > specifics and we see if we can incorporate this. > ... > Well, there is a method in the tool seqan-tcoffee, which checks if the > computed alignment is correct given the score model and the alignment, bu= t > I believe this is not what you are looking for? > > > 2) bandedChainAlignment fails messily when given a Vector of Seeds > instead of a String, where as other functions work fine (e.g. > chainSeedsGlobally). Why does it work for the one and not the other? > Excerpt from error message below. > > """ > /usr/include/seqan/seeds/banded_chain_alignment_impl.h:1195:57: error: > call to 'end' is ambiguous > SEQAN_ASSERT(itEnd !=3D static_cast(end(seedSet))); > ^~~ > /usr/include/seqan/basic/debug_test_system.h:2146:44: note: expanded from > macro 'SEQAN_ASSERT' > (_arg1), # _arg1)) { = \ > ^ > /usr/include/seqan/seeds/banded_chain_alignment_profile.h:254:16: note: i= n > instantiation of function template specialization > > ... > > /usr/include/seqan/seeds/banded_chain_alignment.h:207:12: note: in > instantiation of function template specialization > > 'seqan::bandedChainAlignment seqan::Dna5_>, seqan::Alloc >, seqan::Tag, > std::vector, > seqan::DefaultSeedConfig>, > std::allocator, > seqan::DefaultSeedConfig> > >, long, > seqan::Tag, seqan::Tag, false, > false, false, false, seqan::Tag >' requested here > return bandedChainAlignment(align, seedSet, scoreScheme, scoreScheme, > alignConfig, bandExtension); > ^ > /home/bbowman/git/SRSLI/src/C++/SparseAlignment2.cpp:72:25: note: in > instantiation of function template specialization > > 'seqan::bandedChainAlignment seqan::Dna5_>, seqan::Alloc >, seqan::Tag, > std::vector, > seqan::DefaultSeedConfig>, > std::allocator, > seqan::DefaultSeedConfig> > >, long, > seqan::Tag, false, false, false, false, > seqan::Tag >' requested here > long alnScore =3D bandedChainAlignment(alignment, *seedChain, > scoring, globalConfig); > ^ > /home/bbowman/git/SRSLI/src/C++/main.cpp:95:27: note: in instantiation of > function template specialization > 'RefChainsToAlignments seqan::Tag > ()>' requested here > auto alignments =3D RefChainsToAlignments(record->Seq, > ^ > /usr/include/seqan/seeds/banded_chain_alignment_impl.h:583:1: note: > candidate template ignored: substitution failure [with TSeedSet =3D > std::vector, > seqan::DefaultSeedConfig>, > std::allocator, > seqan::DefaultSeedConfig> > >] > _findFirstAnchor(TSeedSet const & seedSet, int bandExtension) > "=E2=80=9D" > > > Ok, this seems to be a bug to me. > I=E2=80=99ll have a look into it. > > > Sincerely, > -Brett > _______________________________________________ > seqan-dev mailing list > seqan-dev@lists.fu-berlin.de > https://lists.fu-berlin.de/listinfo/seqan-dev > > > Bests, > > Ren=C3=A9 > > --- > > Ren=C3=A9 Rahn > Ph.D. Student > -------------------------------- > Tel: (+49) 30 838 75277 > Mail: rene.rahn@fu-berlin.de > -------------------------------- > Institute of Computer Science > Algorithmic Bioinformatics (ABI) > -------------------------------- > Freie Universit=C3=A4t Berlin > Takustra=C3=9Fe 9 > 14195 Berlin > -------------------------------- > > > _______________________________________________ > seqan-dev mailing list > seqan-dev@lists.fu-berlin.de > https://lists.fu-berlin.de/listinfo/seqan-dev > > --089e01294ff0f42150050c42dbdc Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Thanks Rene,

>What do you= mean by accuracy? What do you need exactly?=C2=A0

What I am trying to do i= s write a tool to align single-molecule sequencing data (PacBio, Oxford Nan= opore) to reference genomes.=C2=A0 For which the alignment accuracy and the= break-down of the types of errors is very useful, as the per-read quality = on both platforms varies substantially.
=
What I'd like are member method= s or functions-on-alignment-objects to give the following:
-The number of base-pair matches in the alignment
=
-The number of mismatches in the alignment
-The number of insertions in the alignment=
-The number of deletions in the alignme= nt
-The alignment string as represented = by the Align object's toString() method

The first four I need to summar= ize the similarity of an alignment (i.e. indels are likely sequencing error= , where as mismatches are likely not), while the latter is helpful in creat= ing alternate representations for alignments

Does that help?

-B

On Fri, Jan 9, 2015 at 12:51 AM, Rahn, Ren=C3=A9 <<= a href=3D"mailto:rene.maerker@fu-berlin.de" target=3D"_blank">rene.maerker@= fu-berlin.de> wrote:
Hey Brett,=C2=A0


On 30 Dec 2014, at 21:29, Brett Bowman <bnbowman@gmail.com> wrote:

1) =C2=A0Is there an easy way to get the accuracy of an Alignment obje= ct, or is that something I need to calculate myself?

What do you mean by accuracy? What do you need exactly?=C2=A0
The Align data structure simply represents the computed alignment. The= score is returned by the global align interface.=C2=A0
There are several ways to manipulate the alignment of gaps and to comp= ute all best traceback paths. However, those options are not supported on t= he high level interfaces but only in the core of the alignment engine.=C2= =A0
If you tell me what you need exactly we can think of a way to make tho= se interfaces public which is planned for the future anyway.
But there is no method telling you the accuracy of the =E2=80=9Ccomput= ed" alignment compared to another =E2=80=9Creal=E2=80=9D alignment. Pl= ease, give me some specifics and we see if we can incorporate this.
...
Well, there is a method in the tool seqan-tcoffee, which checks if the= computed alignment is correct given the score model and the alignment, but= I believe this is not what you are looking for?


2) =C2=A0bandedChainAlignment fails messily when given a Vector of See= ds instead of a String, where as other functions work fine (e.g. chainSeeds= Globally).=C2=A0 Why does it work for the one and not the other?=C2=A0 Exce= rpt from error message below.

"""
/usr/include/seqan/seeds/banded_chain_alignment_impl.h:1195:57: error:= call to 'end' is ambiguous
=C2=A0 =C2=A0 SEQAN_ASSERT(itEnd !=3D static_cast<TSeedSetIterator&= gt;(end(seedSet)));
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ^~~
/usr/include/seqan/basic/debug_test_system.h:2146:44: note: expanded f= rom macro 'SEQAN_ASSERT'
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 (_arg1), # _arg1)) { =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0^
/usr/include/seqan/seeds/banded_chain_alignment_profile.h:254:16: note= : in instantiation of function template specialization

...

/usr/include/seqan/seeds/banded_chain_alignment.h:207:12: note: in ins= tantiation of function template specialization
=C2=A0 =C2=A0 =C2=A0 'seqan::bandedChainAlignment<seqan::String= <seqan::SimpleType<unsigned char, seqan::Dna5_>, seqan::Alloc<v= oid> >, seqan::Tag<seqan::ArrayGaps_>,
=C2=A0 =C2=A0 =C2=A0 std::vector<seqan::Seed<seqan::Tag<seqan= ::Simple_>, seqan::DefaultSeedConfig>, std::allocator<seqan::Seed&= lt;seqan::Tag<seqan::Simple_>, seqan::DefaultSeedConfig> > >= , long,
=C2=A0 =C2=A0 =C2=A0 seqan::Tag<seqan::Simple_>, seqan::Tag<s= eqan::Simple_>, false, false, false, false, seqan::Tag<seqan::Default= _> >' requested here
=C2=A0 =C2=A0 return bandedChainAlignment(align, seedSet, scoreScheme,= scoreScheme, alignConfig, bandExtension);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0^
/home/bbowman/git/SRSLI/src/C++/SparseAlignment2.cpp:72:25: note: in i= nstantiation of function template specialization
=C2=A0 =C2=A0 =C2=A0 'seqan::bandedChainAlignment<seqan::String= <seqan::SimpleType<unsigned char, seqan::Dna5_>, seqan::Alloc<v= oid> >, seqan::Tag<seqan::ArrayGaps_>,
=C2=A0 =C2=A0 =C2=A0 std::vector<seqan::Seed<seqan::Tag<seqan= ::Simple_>, seqan::DefaultSeedConfig>, std::allocator<seqan::Seed&= lt;seqan::Tag<seqan::Simple_>, seqan::DefaultSeedConfig> > >= , long,
=C2=A0 =C2=A0 =C2=A0 seqan::Tag<seqan::Simple_>, false, false, f= alse, false, seqan::Tag<seqan::Default_> >' requested here
=C2=A0 =C2=A0 =C2=A0 =C2=A0 long alnScore =3D bandedChainAlignment(ali= gnment, *seedChain, scoring, globalConfig);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 ^
/home/bbowman/git/SRSLI/src/C++/main.cpp:95:27: note: in instantiation= of function template specialization 'RefChainsToAlignments<seqan::A= lignConfig<false, true, true, false,
=C2=A0 =C2=A0 =C2=A0 seqan::Tag<seqan::Default_> > ()>'= ; requested here
=C2=A0 =C2=A0 =C2=A0 =C2=A0 auto alignments =3D RefChainsToAlignments(= record->Seq,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 ^
/usr/include/seqan/seeds/banded_chain_alignment_impl.h:583:1: note: ca= ndidate template ignored: substitution failure [with TSeedSet =3D std::vect= or<seqan::Seed<seqan::Tag<seqan::Simple_>,
=C2=A0 =C2=A0 =C2=A0 seqan::DefaultSeedConfig>, std::allocator<s= eqan::Seed<seqan::Tag<seqan::Simple_>, seqan::DefaultSeedConfig>= ; > >]
_findFirstAnchor(TSeedSet const & seedSet, int bandExtension)
"=E2=80=9D"=C2=A0

Ok, this seems to be a bug to me.
I=E2=80=99ll have a look into it.


Sincerely,
-Brett
_______________________________________________
seqan-dev mailing list
seqan-dev= @lists.fu-berlin.de
https://lists.fu-berlin.de/listinfo/seqan-dev

Bests,=C2=A0

Ren=C3=A9=C2=A0

---

Ren=C3=A9 Rahn
Ph.D. Student
--------------------------------
--------------------------------
Institute of Computer Science
Algorithmic Bioinformatics (ABI)
--------------------------------
Freie Universit=C3=A4t Berlin
Takustra=C3=9Fe 9
14195 Berlin
--------------------------------


_______________________________________________
seqan-dev mailing list
seqan-dev@lists.fu-berlin.d= e
https://lists.fu-berlin.de/listinfo/seqan-dev


--089e01294ff0f42150050c42dbdc-- From manuel.holtgrewe@fu-berlin.de Sat Jan 10 11:21:15 2015 Received: from outpost9.zedat.fu-berlin.de ([130.133.4.95]) by list1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1Y9tAO-002yMp-VP>; Sat, 10 Jan 2015 11:21:13 +0100 Received: from relay2.zedat.fu-berlin.de ([130.133.4.80]) by outpost.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1Y9tAO-0009C3-Tt>; Sat, 10 Jan 2015 11:21:12 +0100 Received: from cas1.campus.fu-berlin.de ([130.133.170.201]) by relay2.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtps (envelope-from ) id <1Y9tAO-0039Vr-K6>; Sat, 10 Jan 2015 11:21:12 +0100 Received: from EX02A.campus.fu-berlin.de ([130.133.170.132]) by CAS1.campus.fu-berlin.de ([130.133.170.201]) with mapi id 14.03.0210.002; Sat, 10 Jan 2015 11:21:11 +0100 From: "Holtgrewe, Manuel" To: SeqAn Development Thread-Topic: [Seqan-dev] Two Alignment Questions Thread-Index: AQHQJG9gO46vv1/ke0ClYCoJhXa1OJy3eUiAgAEj74CAAJgwyw== Message-ID: References: , In-Reply-To: Accept-Language: en-US, de-DE Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: Content-Type: multipart/alternative; boundary="_000_FCCAB9D80C3DAB47B5601C5B0E62872B962864F0ex02acampusfube_" MIME-Version: 1.0 Date: Sat, 10 Jan 2015 11:21:10 +0100 X-Original-Date: Sat, 10 Jan 2015 10:21:10 +0000 X-Originating-IP: 130.133.170.201 X-ZEDAT-Hint: XA X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1420885272-0000127A-7FD87333/0/0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=-50.0 required=5.0 tests=ALL_TRUSTED,HTML_MESSAGE X-Spam-Checker-Version: SpamAssassin 3.4.0 on Palau.ZEDAT.FU-Berlin.DE X-Spam-Level: Subject: Re: [Seqan-dev] Two Alignment Questions X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 10 Jan 2015 10:21:15 -0000 --_000_FCCAB9D80C3DAB47B5601C5B0E62872B962864F0ex02acampusfube_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Does this help? http://docs.seqan.de/seqan/develop/?p=3DcomputeAlignmentStatshttp://docs.se= qan.de/seqan/develop/?p=3DcomputeAlignmentStats *m ________________________________ From: Brett Bowman [bnbowman@gmail.com] Sent: Saturday, January 10, 2015 3:16 AM To: SeqAn Development Subject: Re: [Seqan-dev] Two Alignment Questions Thanks Rene, >What do you mean by accuracy? What do you need exactly? What I am trying to do is write a tool to align single-molecule sequencing = data (PacBio, Oxford Nanopore) to reference genomes. For which the alignme= nt accuracy and the break-down of the types of errors is very useful, as th= e per-read quality on both platforms varies substantially. What I'd like are member methods or functions-on-alignment-objects to give = the following: -The number of base-pair matches in the alignment -The number of mismatches in the alignment -The number of insertions in the alignment -The number of deletions in the alignment -The alignment string as represented by the Align object's toString() metho= d The first four I need to summarize the similarity of an alignment (i.e. ind= els are likely sequencing error, where as mismatches are likely not), while= the latter is helpful in creating alternate representations for alignments Does that help? -B On Fri, Jan 9, 2015 at 12:51 AM, Rahn, Ren=E9 > wrote: Hey Brett, On 30 Dec 2014, at 21:29, Brett Bowman > wrote: 1) Is there an easy way to get the accuracy of an Alignment object, or is = that something I need to calculate myself? What do you mean by accuracy? What do you need exactly? The Align data structure simply represents the computed alignment. The scor= e is returned by the global align interface. There are several ways to manipulate the alignment of gaps and to compute a= ll best traceback paths. However, those options are not supported on the hi= gh level interfaces but only in the core of the alignment engine. If you tell me what you need exactly we can think of a way to make those in= terfaces public which is planned for the future anyway. But there is no method telling you the accuracy of the =93computed" alignme= nt compared to another =93real=94 alignment. Please, give me some specifics= and we see if we can incorporate this. ... Well, there is a method in the tool seqan-tcoffee, which checks if the comp= uted alignment is correct given the score model and the alignment, but I be= lieve this is not what you are looking for? 2) bandedChainAlignment fails messily when given a Vector of Seeds instead= of a String, where as other functions work fine (e.g. chainSeedsGlobally).= Why does it work for the one and not the other? Excerpt from error messa= ge below. """ /usr/include/seqan/seeds/banded_chain_alignment_impl.h:1195:57: error: call= to 'end' is ambiguous SEQAN_ASSERT(itEnd !=3D static_cast(end(seedSet))); ^~~ /usr/include/seqan/basic/debug_test_system.h:2146:44: note: expanded from m= acro 'SEQAN_ASSERT' (_arg1), # _arg1)) { \ ^ /usr/include/seqan/seeds/banded_chain_alignment_profile.h:254:16: note: in = instantiation of function template specialization ... /usr/include/seqan/seeds/banded_chain_alignment.h:207:12: note: in instanti= ation of function template specialization 'seqan::bandedChainAlignment, seqan::Alloc >, seqan::Tag, std::vector, seqan::DefaultSee= dConfig>, std::allocator, seqan::Def= aultSeedConfig> > >, long, seqan::Tag, seqan::Tag, false, false,= false, false, seqan::Tag >' requested here return bandedChainAlignment(align, seedSet, scoreScheme, scoreScheme, a= lignConfig, bandExtension); ^ /home/bbowman/git/SRSLI/src/C++/SparseAlignment2.cpp:72:25: note: in instan= tiation of function template specialization 'seqan::bandedChainAlignment, seqan::Alloc >, seqan::Tag, std::vector, seqan::DefaultSee= dConfig>, std::allocator, seqan::Def= aultSeedConfig> > >, long, seqan::Tag, false, false, false, false, seqan::Tag >' requested here long alnScore =3D bandedChainAlignment(alignment, *seedChain, scori= ng, globalConfig); ^ /home/bbowman/git/SRSLI/src/C++/main.cpp:95:27: note: in instantiation of f= unction template specialization 'RefChainsToAlignments > ()>' requested here auto alignments =3D RefChainsToAlignments(record->Seq, ^ /usr/include/seqan/seeds/banded_chain_alignment_impl.h:583:1: note: candida= te template ignored: substitution failure [with TSeedSet =3D std::vector, seqan::DefaultSeedConfig>, std::allocator, seqan::DefaultSeedConfig> > >] _findFirstAnchor(TSeedSet const & seedSet, int bandExtension) "=94" Ok, this seems to be a bug to me. I=92ll have a look into it. Sincerely, -Brett _______________________________________________ seqan-dev mailing list seqan-dev@lists.fu-berlin.de https://lists.fu-berlin.de/listinfo/seqan-dev Bests, Ren=E9 --- Ren=E9 Rahn Ph.D. Student -------------------------------- Tel: (+49) 30 838 75277 Mail: rene.rahn@fu-berlin.de -------------------------------- Institute of Computer Science Algorithmic Bioinformatics (ABI) -------------------------------- Freie Universit=E4t Berlin Takustra=DFe 9 14195 Berlin -------------------------------- _______________________________________________ seqan-dev mailing list seqan-dev@lists.fu-berlin.de https://lists.fu-berlin.de/listinfo/seqan-dev --_000_FCCAB9D80C3DAB47B5601C5B0E62872B962864F0ex02acampusfube_ Content-Type: text/html; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable
Does this help?

http://docs.seqan.de/seqan/develop/?p=3DcomputeAlignmentStatshttp://docs.seqan.de/seqan/develop/?p=3DcomputeAlignmentStats

*m

From: Brett Bowman [bnbowman@gmail.com] Sent: Saturday, January 10, 2015 3:16 AM
To: SeqAn Development
Subject: Re: [Seqan-dev] Two Alignment Questions

Thanks Rene,

>What do you mean by accuracy? What do you= need exactly? 

What I am trying to do is write a tool to ali= gn single-molecule sequencing data (PacBio, Oxford Nanopore) to reference g= enomes.  For which the alignment accuracy and the break-down of the ty= pes of errors is very useful, as the per-read quality on both platforms varies substantially.

What I'd like are member methods or functions= -on-alignment-objects to give the following:
-The number of base-pair matches in the align= ment
-The number of mismatches in the alignment
-The number of insertions in the alignment
-The number of deletions in the alignment
-The alignment string as represented by the A= lign object's toString() method

The first four I need to summarize the simila= rity of an alignment (i.e. indels are likely sequencing error, where as mis= matches are likely not), while the latter is helpful in creating alternate = representations for alignments

Does that help?

-B

On Fri, Jan 9, 2015 at 12:51 AM, Rahn, Ren=E9 <rene.mae= rker@fu-berlin.de> wrote:
Hey Brett, 



1)  Is there an easy way to get the accuracy of an Alignment obje= ct, or is that something I need to calculate myself?

What do you mean by accuracy? What do you need exactly? 
The Align data structure simply represents the computed alignment. The= score is returned by the global align interface. 
There are several ways to manipulate the alignment of gaps and to comp= ute all best traceback paths. However, those options are not supported on t= he high level interfaces but only in the core of the alignment engine. = ;
If you tell me what you need exactly we can think of a way to make tho= se interfaces public which is planned for the future anyway.
But there is no method telling you the accuracy of the =93computed&quo= t; alignment compared to another =93real=94 alignment. Please, give me some= specifics and we see if we can incorporate this.
...
Well, there is a method in the tool seqan-tcoffee, which checks if the= computed alignment is correct given the score model and the alignment, but= I believe this is not what you are looking for?


2)  bandedChainAlignment fails messily when given a Vector of See= ds instead of a String, where as other functions work fine (e.g. chainSeeds= Globally).  Why does it work for the one and not the other?  Exce= rpt from error message below.

"""
/usr/include/seqan/seeds/banded_chain_alignment_impl.h:1195:57: error:= call to 'end' is ambiguous
    SEQAN_ASSERT(itEnd !=3D static_cast<TSeedSetIterator&= gt;(end(seedSet)));
                    =                      = ;               ^~~
/usr/include/seqan/basic/debug_test_system.h:2146:44: note: expanded f= rom macro 'SEQAN_ASSERT'
                    =                      = ; (_arg1), # _arg1)) {           \
                    =                      = ;  ^
/usr/include/seqan/seeds/banded_chain_alignment_profile.h:254:16: note= : in instantiation of function template specialization

...

/usr/include/seqan/seeds/banded_chain_alignment.h:207:12: note: in ins= tantiation of function template specialization
      'seqan::bandedChainAlignment<seqan::String<= seqan::SimpleType<unsigned char, seqan::Dna5_>, seqan::Alloc<void&= gt; >, seqan::Tag<seqan::ArrayGaps_>,
      std::vector<seqan::Seed<seqan::Tag<seqan= ::Simple_>, seqan::DefaultSeedConfig>, std::allocator<seqan::Seed&= lt;seqan::Tag<seqan::Simple_>, seqan::DefaultSeedConfig> > >= , long,
      seqan::Tag<seqan::Simple_>, seqan::Tag<s= eqan::Simple_>, false, false, false, false, seqan::Tag<seqan::Default= _> >' requested here
    return bandedChainAlignment(align, seedSet, scoreScheme,= scoreScheme, alignConfig, bandExtension);
           ^
/home/bbowman/git/SRSLI/src/C++/SparseAlignment2.cpp:72:25: no= te: in instantiation of function template specialization
      'seqan::bandedChainAlignment<seqan::String<= seqan::SimpleType<unsigned char, seqan::Dna5_>, seqan::Alloc<void&= gt; >, seqan::Tag<seqan::ArrayGaps_>,
      std::vector<seqan::Seed<seqan::Tag<seqan= ::Simple_>, seqan::DefaultSeedConfig>, std::allocator<seqan::Seed&= lt;seqan::Tag<seqan::Simple_>, seqan::DefaultSeedConfig> > >= , long,
      seqan::Tag<seqan::Simple_>, false, false, f= alse, false, seqan::Tag<seqan::Default_> >' requested here
        long alnScore =3D bandedChainAlignment(ali= gnment, *seedChain, scoring, globalConfig);
                    =     ^
/home/bbowman/git/SRSLI/src/C++/main.cpp:95:27: note: in insta= ntiation of function template specialization 'RefChainsToAlignments<seqa= n::AlignConfig<false, true, true, false,
      seqan::Tag<seqan::Default_> > ()>' re= quested here
        auto alignments =3D RefChainsToAlignments(= record->Seq,
                    =       ^
/usr/include/seqan/seeds/banded_chain_alignment_impl.h:583:1: note: ca= ndidate template ignored: substitution failure [with TSeedSet =3D std::vect= or<seqan::Seed<seqan::Tag<seqan::Simple_>,
      seqan::DefaultSeedConfig>, std::allocator<s= eqan::Seed<seqan::Tag<seqan::Simple_>, seqan::DefaultSeedConfig>= ; > >]
_findFirstAnchor(TSeedSet const & seedSet, int bandExtension)
"=94" 

Ok, this seems to be a bug to me.
I=92ll have a look into it.


Sincerely,
-Brett
_______________________________________________
seqan-dev mailing list
seqan-dev= @lists.fu-berlin.de
https://lists.fu-berlin.de/listinfo/seqan-dev

Bests, 

Ren=E9 

---

Ren=E9 Rahn
Ph.D. Student
--------------------------------
--------------------------------
Institute of Computer Science
Algorithmic Bioinformatics (ABI)
--------------------------------
Freie Universit=E4t Berlin
Takustra=DFe 9
14195 Berlin
--------------------------------


_______________________________________________
seqan-dev mailing list
seqan-dev= @lists.fu-berlin.de
https://lists.fu-berlin.de/listinfo/seqan-dev


--_000_FCCAB9D80C3DAB47B5601C5B0E62872B962864F0ex02acampusfube_-- From bnbowman@gmail.com Sun Jan 11 18:47:57 2015 Received: from relay1.zedat.fu-berlin.de ([130.133.4.67]) by list1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1YAMcE-000vVU-Uc>; Sun, 11 Jan 2015 18:47:55 +0100 Received: from mail-yk0-f175.google.com ([209.85.160.175]) by relay1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtps (envelope-from ) id <1YAMcE-002qNN-Ka>; Sun, 11 Jan 2015 18:47:54 +0100 Received: by mail-yk0-f175.google.com with SMTP id 200so7692931ykr.6 for ; Sun, 11 Jan 2015 09:47:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=zOoXSQmhXt0kocrNiUZ++TiflYQUiOcjyj3p8WKjR38=; b=aNFL9mL+q7ZTa5xJS/hQQGi7/VnWRa4d2Sp9Biix9snWdyecoWiq7xU0rTGmJKo0zL cuaJJkmFESrUxHAKYIB2Rx/BaWVN846vJIn1R4YO1GnHWFWaJ6pFARuhsLRzgRbffBY2 R4Jvs7SE165NaUwOHByTS8+AtSrtsnNkC36RHjzCK1v0rU8dytaO564RwaIhgs/I4u/Y E8GWGDNolqNrx8QmzW/oG4hgHLsdnLwDnfTC8A8pjh9iiJ1MouJug32M6XpnUwZH0VhX rDVcCQ7L5rYpFCvk3cDXhs6etNn7K9D/d236DQttmpnoCA7uYoRZDHkIXmktyMG4VjLS zlDg== MIME-Version: 1.0 X-Received: by 10.170.147.130 with SMTP id o124mr22103629ykc.101.1420998472034; Sun, 11 Jan 2015 09:47:52 -0800 (PST) Received: by 10.170.86.86 with HTTP; Sun, 11 Jan 2015 09:47:51 -0800 (PST) In-Reply-To: References: Date: Sun, 11 Jan 2015 09:47:51 -0800 Message-ID: From: Brett Bowman To: SeqAn Development Content-Type: multipart/alternative; boundary=001a1139239a26f194050c63fd77 X-Originating-IP: 209.85.160.175 X-ZEDAT-Hint: A X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1420998474-0000127A-F4B88FCD/0/0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.084309, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=-0.7 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H2,T_DKIM_INVALID X-Spam-Checker-Version: SpamAssassin 3.4.0 on Tuvalu.ZEDAT.FU-Berlin.DE X-Spam-Level: Subject: Re: [Seqan-dev] Two Alignment Questions X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Jan 2015 17:47:57 -0000 --001a1139239a26f194050c63fd77 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Manuel, I saw the AlignmentStats class when I was digging around in the API for what I need, but I'm afraid it doesn't quite fit: -It doesn't differentiate between Insertions and Deletions (the ratio of which is important for diagnosing some sequencing problems and bad alignments) -It doesn't appear to provide access to the alignment string, meaning I still need to traverse the whole alignment to generate alternate representations. -B On Sat, Jan 10, 2015 at 2:21 AM, Holtgrewe, Manuel < manuel.holtgrewe@fu-berlin.de> wrote: > Does this help? > > http://docs.seqan.de/seqan/develop/?p=3DcomputeAlignmentStats > http://docs.seqan.de/seqan/develop/?p=3DcomputeAlignmentStats > > *m > > ------------------------------ > *From:* Brett Bowman [bnbowman@gmail.com] > *Sent:* Saturday, January 10, 2015 3:16 AM > *To:* SeqAn Development > *Subject:* Re: [Seqan-dev] Two Alignment Questions > > Thanks Rene, > > >What do you mean by accuracy? What do you need exactly? > > What I am trying to do is write a tool to align single-molecule > sequencing data (PacBio, Oxford Nanopore) to reference genomes. For whic= h > the alignment accuracy and the break-down of the types of errors is very > useful, as the per-read quality on both platforms varies substantially. > > What I'd like are member methods or functions-on-alignment-objects to > give the following: > -The number of base-pair matches in the alignment > -The number of mismatches in the alignment > -The number of insertions in the alignment > -The number of deletions in the alignment > -The alignment string as represented by the Align object's toString() > method > > The first four I need to summarize the similarity of an alignment (i.e. > indels are likely sequencing error, where as mismatches are likely not), > while the latter is helpful in creating alternate representations for > alignments > > Does that help? > > -B > > On Fri, Jan 9, 2015 at 12:51 AM, Rahn, Ren=C3=A9 > wrote: > >> Hey Brett, >> >> >> On 30 Dec 2014, at 21:29, Brett Bowman wrote: >> >> 1) Is there an easy way to get the accuracy of an Alignment object, or >> is that something I need to calculate myself? >> >> >> What do you mean by accuracy? What do you need exactly? >> The Align data structure simply represents the computed alignment. The >> score is returned by the global align interface. >> There are several ways to manipulate the alignment of gaps and to comput= e >> all best traceback paths. However, those options are not supported on th= e >> high level interfaces but only in the core of the alignment engine. >> If you tell me what you need exactly we can think of a way to make those >> interfaces public which is planned for the future anyway. >> But there is no method telling you the accuracy of the =E2=80=9Ccomputed= " >> alignment compared to another =E2=80=9Creal=E2=80=9D alignment. Please, = give me some >> specifics and we see if we can incorporate this. >> ... >> Well, there is a method in the tool seqan-tcoffee, which checks if the >> computed alignment is correct given the score model and the alignment, b= ut >> I believe this is not what you are looking for? >> >> >> 2) bandedChainAlignment fails messily when given a Vector of Seeds >> instead of a String, where as other functions work fine (e.g. >> chainSeedsGlobally). Why does it work for the one and not the other? >> Excerpt from error message below. >> >> """ >> /usr/include/seqan/seeds/banded_chain_alignment_impl.h:1195:57: error: >> call to 'end' is ambiguous >> SEQAN_ASSERT(itEnd !=3D static_cast(end(seedSet)))= ; >> ^~~ >> /usr/include/seqan/basic/debug_test_system.h:2146:44: note: expanded fro= m >> macro 'SEQAN_ASSERT' >> (_arg1), # _arg1)) { = \ >> ^ >> /usr/include/seqan/seeds/banded_chain_alignment_profile.h:254:16: note: >> in instantiation of function template specialization >> >> ... >> >> /usr/include/seqan/seeds/banded_chain_alignment.h:207:12: note: in >> instantiation of function template specialization >> >> 'seqan::bandedChainAlignment> seqan::Dna5_>, seqan::Alloc >, seqan::Tag, >> std::vector, >> seqan::DefaultSeedConfig>, >> std::allocator, >> seqan::DefaultSeedConfig> > >, long, >> seqan::Tag, seqan::Tag, false, >> false, false, false, seqan::Tag >' requested here >> return bandedChainAlignment(align, seedSet, scoreScheme, scoreScheme= , >> alignConfig, bandExtension); >> ^ >> /home/bbowman/git/SRSLI/src/C++/SparseAlignment2.cpp:72:25: note: in >> instantiation of function template specialization >> >> 'seqan::bandedChainAlignment> seqan::Dna5_>, seqan::Alloc >, seqan::Tag, >> std::vector, >> seqan::DefaultSeedConfig>, >> std::allocator, >> seqan::DefaultSeedConfig> > >, long, >> seqan::Tag, false, false, false, false, >> seqan::Tag >' requested here >> long alnScore =3D bandedChainAlignment(alignment, *seedChain, >> scoring, globalConfig); >> ^ >> /home/bbowman/git/SRSLI/src/C++/main.cpp:95:27: note: in instantiation o= f >> function template specialization >> 'RefChainsToAlignments> seqan::Tag > ()>' requested here >> auto alignments =3D RefChainsToAlignments(record->Seq, >> ^ >> /usr/include/seqan/seeds/banded_chain_alignment_impl.h:583:1: note: >> candidate template ignored: substitution failure [with TSeedSet =3D >> std::vector, >> seqan::DefaultSeedConfig>, >> std::allocator, >> seqan::DefaultSeedConfig> > >] >> _findFirstAnchor(TSeedSet const & seedSet, int bandExtension) >> "=E2=80=9D" >> >> >> Ok, this seems to be a bug to me. >> I=E2=80=99ll have a look into it. >> >> >> Sincerely, >> -Brett >> _______________________________________________ >> seqan-dev mailing list >> seqan-dev@lists.fu-berlin.de >> https://lists.fu-berlin.de/listinfo/seqan-dev >> >> >> Bests, >> >> Ren=C3=A9 >> >> --- >> >> Ren=C3=A9 Rahn >> Ph.D. Student >> -------------------------------- >> Tel: (+49) 30 838 75277 >> Mail: rene.rahn@fu-berlin.de >> -------------------------------- >> Institute of Computer Science >> Algorithmic Bioinformatics (ABI) >> -------------------------------- >> Freie Universit=C3=A4t Berlin >> Takustra=C3=9Fe 9 >> 14195 Berlin >> -------------------------------- >> >> >> _______________________________________________ >> seqan-dev mailing list >> seqan-dev@lists.fu-berlin.de >> https://lists.fu-berlin.de/listinfo/seqan-dev >> >> > > _______________________________________________ > seqan-dev mailing list > seqan-dev@lists.fu-berlin.de > https://lists.fu-berlin.de/listinfo/seqan-dev > > --001a1139239a26f194050c63fd77 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Manuel,

I saw the AlignmentStats class = when I was digging around in the API for what I need, but I'm afraid it= doesn't quite fit:
-It doesn't differentiate between Ins= ertions and Deletions (the ratio of which is important for diagnosing some = sequencing problems and bad alignments)
-It doesn't appear to= provide access to the alignment string, meaning I still need to traverse t= he whole alignment to generate alternate representations.

-B

On Sat, Jan 10, 2015 at 2:21 AM, Holtgrewe, Manuel &= lt;manue= l.holtgrewe@fu-berlin.de> wrote:
Does this help?


*m


Fro= m: Brett Bowman [bnbowman@gmail.com]
Sent: Saturday, January 10, 2015 3:16 AM
To: SeqAn Development
Subject: Re: [Seqan-dev] Two Alignment Questions

Thanks Rene,

>What do you mean by accuracy? What do you= need exactly?=C2=A0

What I am trying to do is write a tool to ali= gn single-molecule sequencing data (PacBio, Oxford Nanopore) to reference g= enomes.=C2=A0 For which the alignment accuracy and the break-down of the ty= pes of errors is very useful, as the per-read quality on both platforms varies substantially.

What I'd like are member methods or funct= ions-on-alignment-objects to give the following:
-The number of base-pair matches in the align= ment
-The number of mismatches in the alignment
-The number of insertions in the alignment
-The number of deletions in the alignment
-The alignment string as represented by the A= lign object's toString() method

The first four I need to summarize the simila= rity of an alignment (i.e. indels are likely sequencing error, where as mis= matches are likely not), while the latter is helpful in creating alternate = representations for alignments

Does that help?

-B

On Fri, Jan 9, 2015 at 12:51 AM, Rahn, Ren=C3=A9= <rene.mae= rker@fu-berlin.de> wrote:
Hey Brett,=C2=A0


On 30 Dec 2014, at 21:29, Brett Bowman <bnbowman@gmail.com> wrote:

1) =C2=A0Is there an easy way to get the accuracy of an Alignment obje= ct, or is that something I need to calculate myself?

What do you mean by accuracy? What do you need exactly?=C2=A0
The Align data structure simply represents the computed alignment. The= score is returned by the global align interface.=C2=A0
There are several ways to manipulate the alignment of gaps and to comp= ute all best traceback paths. However, those options are not supported on t= he high level interfaces but only in the core of the alignment engine.=C2= =A0
If you tell me what you need exactly we can think of a way to make tho= se interfaces public which is planned for the future anyway.
But there is no method telling you the accuracy of the =E2=80=9Ccomput= ed" alignment compared to another =E2=80=9Creal=E2=80=9D alignment. Pl= ease, give me some specifics and we see if we can incorporate this.
...
Well, there is a method in the tool seqan-tcoffee, which checks if the= computed alignment is correct given the score model and the alignment, but= I believe this is not what you are looking for?


2) =C2=A0bandedChainAlignment fails messily when given a Vector of See= ds instead of a String, where as other functions work fine (e.g. chainSeeds= Globally).=C2=A0 Why does it work for the one and not the other?=C2=A0 Exce= rpt from error message below.

"""
/usr/include/seqan/seeds/banded_chain_alignment_impl.h:1195:57: error:= call to 'end' is ambiguous
=C2=A0 =C2=A0 SEQAN_ASSERT(itEnd !=3D static_cast<TSeedSetIterator&= gt;(end(seedSet)));
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ^~~
/usr/include/seqan/basic/debug_test_system.h:2146:44: note: expanded f= rom macro 'SEQAN_ASSERT'
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 (_arg1), # _arg1)) { =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0^
/usr/include/seqan/seeds/banded_chain_alignment_profile.h:254:16: note= : in instantiation of function template specialization

...

/usr/include/seqan/seeds/banded_chain_alignment.h:207:12: note: in ins= tantiation of function template specialization
=C2=A0 =C2=A0 =C2=A0 'seqan::bandedChainAlignment<seqan::String= <seqan::SimpleType<unsigned char, seqan::Dna5_>, seqan::Alloc<v= oid> >, seqan::Tag<seqan::ArrayGaps_>,
=C2=A0 =C2=A0 =C2=A0 std::vector<seqan::Seed<seqan::Tag<seqan= ::Simple_>, seqan::DefaultSeedConfig>, std::allocator<seqan::Seed&= lt;seqan::Tag<seqan::Simple_>, seqan::DefaultSeedConfig> > >= , long,
=C2=A0 =C2=A0 =C2=A0 seqan::Tag<seqan::Simple_>, seqan::Tag<s= eqan::Simple_>, false, false, false, false, seqan::Tag<seqan::Default= _> >' requested here
=C2=A0 =C2=A0 return bandedChainAlignment(align, seedSet, scoreScheme,= scoreScheme, alignConfig, bandExtension);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0^
/home/bbowman/git/SRSLI/src/C++/SparseAlignment2.cpp:72:25: note: in i= nstantiation of function template specialization
=C2=A0 =C2=A0 =C2=A0 'seqan::bandedChainAlignment<seqan::String= <seqan::SimpleType<unsigned char, seqan::Dna5_>, seqan::Alloc<v= oid> >, seqan::Tag<seqan::ArrayGaps_>,
=C2=A0 =C2=A0 =C2=A0 std::vector<seqan::Seed<seqan::Tag<seqan= ::Simple_>, seqan::DefaultSeedConfig>, std::allocator<seqan::Seed&= lt;seqan::Tag<seqan::Simple_>, seqan::DefaultSeedConfig> > >= , long,
=C2=A0 =C2=A0 =C2=A0 seqan::Tag<seqan::Simple_>, false, false, f= alse, false, seqan::Tag<seqan::Default_> >' requested here
=C2=A0 =C2=A0 =C2=A0 =C2=A0 long alnScore =3D bandedChainAlignment(ali= gnment, *seedChain, scoring, globalConfig);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 ^
/home/bbowman/git/SRSLI/src/C++/main.cpp:95:27: note: in instantiation= of function template specialization 'RefChainsToAlignments<seqan::A= lignConfig<false, true, true, false,
=C2=A0 =C2=A0 =C2=A0 seqan::Tag<seqan::Default_> > ()>'= ; requested here
=C2=A0 =C2=A0 =C2=A0 =C2=A0 auto alignments =3D RefChainsToAlignments(= record->Seq,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 ^
/usr/include/seqan/seeds/banded_chain_alignment_impl.h:583:1: note: ca= ndidate template ignored: substitution failure [with TSeedSet =3D std::vect= or<seqan::Seed<seqan::Tag<seqan::Simple_>,
=C2=A0 =C2=A0 =C2=A0 seqan::DefaultSeedConfig>, std::allocator<s= eqan::Seed<seqan::Tag<seqan::Simple_>, seqan::DefaultSeedConfig>= ; > >]
_findFirstAnchor(TSeedSet const & seedSet, int bandExtension)
"=E2=80=9D"=C2=A0

Ok, this seems to be a bug to me.
I=E2=80=99ll have a look into it.


Sincerely,
-Brett
_______________________________________________
seqan-dev mailing list
seqan-dev= @lists.fu-berlin.de
https://lists.fu-berlin.de/listinfo/seqan-dev

Bests,=C2=A0

Ren=C3=A9=C2=A0

---

Ren=C3=A9 Rahn
Ph.D. Student
--------------------------------
--------------------------------
Institute of Computer Science
Algorithmic Bioinformatics (ABI)
--------------------------------
Freie Universit=C3=A4t Berlin
Takustra=C3=9Fe 9
14195 Berlin
--------------------------------


_______________________________________________
seqan-dev mailing list
seqan-dev= @lists.fu-berlin.de
https://lists.fu-berlin.de/listinfo/seqan-dev



_______________________________________________
seqan-dev mailing list
seqan-dev@lists.fu-berlin.d= e
https://lists.fu-berlin.de/listinfo/seqan-dev


--001a1139239a26f194050c63fd77-- From manuel.holtgrewe@fu-berlin.de Mon Jan 12 10:11:29 2015 Received: from outpost9.zedat.fu-berlin.de ([130.133.4.95]) by list1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1YAb1z-001p0M-5b>; Mon, 12 Jan 2015 10:11:27 +0100 Received: from relay2.zedat.fu-berlin.de ([130.133.4.80]) by outpost.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1YAb1z-002KDq-43>; Mon, 12 Jan 2015 10:11:27 +0100 Received: from cas3.campus.fu-berlin.de ([130.133.170.203]) by relay2.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtps (envelope-from ) id <1YAb1y-002X8F-QQ>; Mon, 12 Jan 2015 10:11:27 +0100 Received: from EX02A.campus.fu-berlin.de ([130.133.170.132]) by CAS3.campus.fu-berlin.de ([130.133.170.203]) with mapi id 14.03.0210.002; Mon, 12 Jan 2015 10:11:25 +0100 From: "Holtgrewe, Manuel" To: SeqAn Development Thread-Topic: [Seqan-dev] Two Alignment Questions Thread-Index: AQHQJG9gO46vv1/ke0ClYCoJhXa1OJy3eUiAgAEj74CAAJgwy4AB/meAgAESi04= Message-ID: References: , In-Reply-To: Accept-Language: en-US, de-DE Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: Content-Type: multipart/alternative; boundary="_000_FCCAB9D80C3DAB47B5601C5B0E62872B962867DBex02acampusfube_" MIME-Version: 1.0 Date: Mon, 12 Jan 2015 10:11:24 +0100 X-Original-Date: Mon, 12 Jan 2015 09:11:24 +0000 X-Originating-IP: 130.133.170.203 X-ZEDAT-Hint: XA X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1421053887-0000127A-A2F7348A/0/0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000024, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=-50.0 required=5.0 tests=ALL_TRUSTED,HTML_MESSAGE X-Spam-Checker-Version: SpamAssassin 3.4.0 on Kiribati.ZEDAT.FU-Berlin.DE X-Spam-Level: Subject: Re: [Seqan-dev] Two Alignment Questions X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Jan 2015 09:11:29 -0000 --_000_FCCAB9D80C3DAB47B5601C5B0E62872B962867DBex02acampusfube_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Hi Brett, would you be willing to perform this extension yourself? You could send a p= atch or a Github pull request with the results. Cheers, Manuel ________________________________ From: Brett Bowman [bnbowman@gmail.com] Sent: Sunday, January 11, 2015 6:47 PM To: SeqAn Development Subject: Re: [Seqan-dev] Two Alignment Questions Manuel, I saw the AlignmentStats class when I was digging around in the API for wha= t I need, but I'm afraid it doesn't quite fit: -It doesn't differentiate between Insertions and Deletions (the ratio of wh= ich is important for diagnosing some sequencing problems and bad alignments= ) -It doesn't appear to provide access to the alignment string, meaning I sti= ll need to traverse the whole alignment to generate alternate representatio= ns. -B On Sat, Jan 10, 2015 at 2:21 AM, Holtgrewe, Manuel > wrote: Does this help? http://docs.seqan.de/seqan/develop/?p=3DcomputeAlignmentStatshttp://docs.se= qan.de/seqan/develop/?p=3DcomputeAlignmentStats *m ________________________________ From: Brett Bowman [bnbowman@gmail.com] Sent: Saturday, January 10, 2015 3:16 AM To: SeqAn Development Subject: Re: [Seqan-dev] Two Alignment Questions Thanks Rene, >What do you mean by accuracy? What do you need exactly? What I am trying to do is write a tool to align single-molecule sequencing = data (PacBio, Oxford Nanopore) to reference genomes. For which the alignme= nt accuracy and the break-down of the types of errors is very useful, as th= e per-read quality on both platforms varies substantially. What I'd like are member methods or functions-on-alignment-objects to give = the following: -The number of base-pair matches in the alignment -The number of mismatches in the alignment -The number of insertions in the alignment -The number of deletions in the alignment -The alignment string as represented by the Align object's toString() metho= d The first four I need to summarize the similarity of an alignment (i.e. ind= els are likely sequencing error, where as mismatches are likely not), while= the latter is helpful in creating alternate representations for alignments Does that help? -B On Fri, Jan 9, 2015 at 12:51 AM, Rahn, Ren=E9 > wrote: Hey Brett, On 30 Dec 2014, at 21:29, Brett Bowman > wrote: 1) Is there an easy way to get the accuracy of an Alignment object, or is = that something I need to calculate myself? What do you mean by accuracy? What do you need exactly? The Align data structure simply represents the computed alignment. The scor= e is returned by the global align interface. There are several ways to manipulate the alignment of gaps and to compute a= ll best traceback paths. However, those options are not supported on the hi= gh level interfaces but only in the core of the alignment engine. If you tell me what you need exactly we can think of a way to make those in= terfaces public which is planned for the future anyway. But there is no method telling you the accuracy of the =93computed" alignme= nt compared to another =93real=94 alignment. Please, give me some specifics= and we see if we can incorporate this. ... Well, there is a method in the tool seqan-tcoffee, which checks if the comp= uted alignment is correct given the score model and the alignment, but I be= lieve this is not what you are looking for? 2) bandedChainAlignment fails messily when given a Vector of Seeds instead= of a String, where as other functions work fine (e.g. chainSeedsGlobally).= Why does it work for the one and not the other? Excerpt from error messa= ge below. """ /usr/include/seqan/seeds/banded_chain_alignment_impl.h:1195:57: error: call= to 'end' is ambiguous SEQAN_ASSERT(itEnd !=3D static_cast(end(seedSet))); ^~~ /usr/include/seqan/basic/debug_test_system.h:2146:44: note: expanded from m= acro 'SEQAN_ASSERT' (_arg1), # _arg1)) { \ ^ /usr/include/seqan/seeds/banded_chain_alignment_profile.h:254:16: note: in = instantiation of function template specialization ... /usr/include/seqan/seeds/banded_chain_alignment.h:207:12: note: in instanti= ation of function template specialization 'seqan::bandedChainAlignment, seqan::Alloc >, seqan::Tag, std::vector, seqan::DefaultSee= dConfig>, std::allocator, seqan::Def= aultSeedConfig> > >, long, seqan::Tag, seqan::Tag, false, false,= false, false, seqan::Tag >' requested here return bandedChainAlignment(align, seedSet, scoreScheme, scoreScheme, a= lignConfig, bandExtension); ^ /home/bbowman/git/SRSLI/src/C++/SparseAlignment2.cpp:72:25: note: in instan= tiation of function template specialization 'seqan::bandedChainAlignment, seqan::Alloc >, seqan::Tag, std::vector, seqan::DefaultSee= dConfig>, std::allocator, seqan::Def= aultSeedConfig> > >, long, seqan::Tag, false, false, false, false, seqan::Tag >' requested here long alnScore =3D bandedChainAlignment(alignment, *seedChain, scori= ng, globalConfig); ^ /home/bbowman/git/SRSLI/src/C++/main.cpp:95:27: note: in instantiation of f= unction template specialization 'RefChainsToAlignments > ()>' requested here auto alignments =3D RefChainsToAlignments(record->Seq, ^ /usr/include/seqan/seeds/banded_chain_alignment_impl.h:583:1: note: candida= te template ignored: substitution failure [with TSeedSet =3D std::vector, seqan::DefaultSeedConfig>, std::allocator, seqan::DefaultSeedConfig> > >] _findFirstAnchor(TSeedSet const & seedSet, int bandExtension) "=94" Ok, this seems to be a bug to me. I=92ll have a look into it. Sincerely, -Brett _______________________________________________ seqan-dev mailing list seqan-dev@lists.fu-berlin.de https://lists.fu-berlin.de/listinfo/seqan-dev Bests, Ren=E9 --- Ren=E9 Rahn Ph.D. Student -------------------------------- Tel: (+49) 30 838 75277 Mail: rene.rahn@fu-berlin.de -------------------------------- Institute of Computer Science Algorithmic Bioinformatics (ABI) -------------------------------- Freie Universit=E4t Berlin Takustra=DFe 9 14195 Berlin -------------------------------- _______________________________________________ seqan-dev mailing list seqan-dev@lists.fu-berlin.de https://lists.fu-berlin.de/listinfo/seqan-dev _______________________________________________ seqan-dev mailing list seqan-dev@lists.fu-berlin.de https://lists.fu-berlin.de/listinfo/seqan-dev --_000_FCCAB9D80C3DAB47B5601C5B0E62872B962867DBex02acampusfube_ Content-Type: text/html; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable
Hi Brett,

would you be willing to perform this extension yourself? You could sen= d a patch or a Github pull request with the results.

Cheers,
Manuel

From: Brett Bowman [bnbowman@gmail.com] Sent: Sunday, January 11, 2015 6:47 PM
To: SeqAn Development
Subject: Re: [Seqan-dev] Two Alignment Questions

Manuel,

I saw the AlignmentStats class when I was digging around in the API fo= r what I need, but I'm afraid it doesn't quite fit:
-It doesn't differentiate between Insertions and Deletions (the ratio = of which is important for diagnosing some sequencing problems and bad align= ments)
-It doesn't appear to provide access to the alignment string, meaning = I still need to traverse the whole alignment to generate alternate represen= tations.

-B

On Sat, Jan 10, 2015 at 2:21 AM, Holtgrewe, Manu= el <manu= el.holtgrewe@fu-berlin.de> wrote:
Does this help?


*m


Fro= m: Brett Bowman [bnbowman@gmail.com]
Sent: Saturday, January 10, 2015 3:16 AM
To: SeqAn Development
Subject: Re: [Seqan-dev] Two Alignment Questions

Thanks Rene,

>What do you mean by accuracy? What do you= need exactly? 

What I am trying to do is write a tool to ali= gn single-molecule sequencing data (PacBio, Oxford Nanopore) to reference g= enomes.  For which the alignment accuracy and the break-down of the ty= pes of errors is very useful, as the per-read quality on both platforms varies substantially.

What I'd like are member methods or functions= -on-alignment-objects to give the following:
-The number of base-pair matches in the align= ment
-The number of mismatches in the alignment
-The number of insertions in the alignment
-The number of deletions in the alignment
-The alignment string as represented by the A= lign object's toString() method

The first four I need to summarize the simila= rity of an alignment (i.e. indels are likely sequencing error, where as mis= matches are likely not), while the latter is helpful in creating alternate = representations for alignments

Does that help?

-B

On Fri, Jan 9, 2015 at 12:51 AM, Rahn, Ren=E9 <rene.mae= rker@fu-berlin.de> wrote:
Hey Brett, 


On 30 Dec 2014, at 21:29, Brett Bowman <bnbowman@gmail.com> wrote:

1)  Is there an easy way to get the accuracy of an Alignment obje= ct, or is that something I need to calculate myself?

What do you mean by accuracy? What do you need exactly? 
The Align data structure simply represents the computed alignment. The= score is returned by the global align interface. 
There are several ways to manipulate the alignment of gaps and to comp= ute all best traceback paths. However, those options are not supported on t= he high level interfaces but only in the core of the alignment engine. = ;
If you tell me what you need exactly we can think of a way to make tho= se interfaces public which is planned for the future anyway.
But there is no method telling you the accuracy of the =93computed&quo= t; alignment compared to another =93real=94 alignment. Please, give me some= specifics and we see if we can incorporate this.
...
Well, there is a method in the tool seqan-tcoffee, which checks if the= computed alignment is correct given the score model and the alignment, but= I believe this is not what you are looking for?


2)  bandedChainAlignment fails messily when given a Vector of See= ds instead of a String, where as other functions work fine (e.g. chainSeeds= Globally).  Why does it work for the one and not the other?  Exce= rpt from error message below.

"""
/usr/include/seqan/seeds/banded_chain_alignment_impl.h:1195:57: error:= call to 'end' is ambiguous
    SEQAN_ASSERT(itEnd !=3D static_cast<TSeedSetIterator&= gt;(end(seedSet)));
                    =                      = ;               ^~~
/usr/include/seqan/basic/debug_test_system.h:2146:44: note: expanded f= rom macro 'SEQAN_ASSERT'
                    =                      = ; (_arg1), # _arg1)) {           \
                    =                      = ;  ^
/usr/include/seqan/seeds/banded_chain_alignment_profile.h:254:16: note= : in instantiation of function template specialization

...

/usr/include/seqan/seeds/banded_chain_alignment.h:207:12: note: in ins= tantiation of function template specialization
      'seqan::bandedChainAlignment<seqan::String<= seqan::SimpleType<unsigned char, seqan::Dna5_>, seqan::Alloc<void&= gt; >, seqan::Tag<seqan::ArrayGaps_>,
      std::vector<seqan::Seed<seqan::Tag<seqan= ::Simple_>, seqan::DefaultSeedConfig>, std::allocator<seqan::Seed&= lt;seqan::Tag<seqan::Simple_>, seqan::DefaultSeedConfig> > >= , long,
      seqan::Tag<seqan::Simple_>, seqan::Tag<s= eqan::Simple_>, false, false, false, false, seqan::Tag<seqan::Default= _> >' requested here
    return bandedChainAlignment(align, seedSet, scoreScheme,= scoreScheme, alignConfig, bandExtension);
           ^
/home/bbowman/git/SRSLI/src/C++/SparseAlignment2.cpp:72:25: no= te: in instantiation of function template specialization
      'seqan::bandedChainAlignment<seqan::String<= seqan::SimpleType<unsigned char, seqan::Dna5_>, seqan::Alloc<void&= gt; >, seqan::Tag<seqan::ArrayGaps_>,
      std::vector<seqan::Seed<seqan::Tag<seqan= ::Simple_>, seqan::DefaultSeedConfig>, std::allocator<seqan::Seed&= lt;seqan::Tag<seqan::Simple_>, seqan::DefaultSeedConfig> > >= , long,
      seqan::Tag<seqan::Simple_>, false, false, f= alse, false, seqan::Tag<seqan::Default_> >' requested here
        long alnScore =3D bandedChainAlignment(ali= gnment, *seedChain, scoring, globalConfig);
                    =     ^
/home/bbowman/git/SRSLI/src/C++/main.cpp:95:27: note: in insta= ntiation of function template specialization 'RefChainsToAlignments<seqa= n::AlignConfig<false, true, true, false,
      seqan::Tag<seqan::Default_> > ()>' re= quested here
        auto alignments =3D RefChainsToAlignments(= record->Seq,
                    =       ^
/usr/include/seqan/seeds/banded_chain_alignment_impl.h:583:1: note: ca= ndidate template ignored: substitution failure [with TSeedSet =3D std::vect= or<seqan::Seed<seqan::Tag<seqan::Simple_>,
      seqan::DefaultSeedConfig>, std::allocator<s= eqan::Seed<seqan::Tag<seqan::Simple_>, seqan::DefaultSeedConfig>= ; > >]
_findFirstAnchor(TSeedSet const & seedSet, int bandExtension)
"=94" 

Ok, this seems to be a bug to me.
I=92ll have a look into it.


Sincerely,
-Brett
_______________________________________________
seqan-dev mailing list
seqan-dev= @lists.fu-berlin.de
https://lists.fu-berlin.de/listinfo/seqan-dev

Bests, 

Ren=E9 

---

Ren=E9 Rahn
Ph.D. Student
--------------------------------
--------------------------------
Institute of Computer Science
Algorithmic Bioinformatics (ABI)
--------------------------------
Freie Universit=E4t Berlin
Takustra=DFe 9
14195 Berlin
--------------------------------


_______________________________________________
seqan-dev mailing list
seqan-dev= @lists.fu-berlin.de
https://lists.fu-berlin.de/listinfo/seqan-dev



_______________________________________________
seqan-dev mailing list
seqan-dev= @lists.fu-berlin.de
https://lists.fu-berlin.de/listinfo/seqan-dev


--_000_FCCAB9D80C3DAB47B5601C5B0E62872B962867DBex02acampusfube_-- From rene.maerker@fu-berlin.de Mon Jan 12 16:54:56 2015 Received: from outpost9.zedat.fu-berlin.de ([130.133.4.95]) by list1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1YAhKR-002KSU-6Q>; Mon, 12 Jan 2015 16:54:55 +0100 Received: from relay2.zedat.fu-berlin.de ([130.133.4.80]) by outpost.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1YAhKR-003CpQ-5A>; Mon, 12 Jan 2015 16:54:55 +0100 Received: from cas3.campus.fu-berlin.de ([130.133.170.203]) by relay2.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtps (envelope-from ) id <1YAhKQ-000D6F-QG>; Mon, 12 Jan 2015 16:54:55 +0100 Received: from EX03B.campus.fu-berlin.de ([130.133.170.135]) by CAS3.campus.fu-berlin.de ([130.133.170.203]) with mapi id 14.03.0210.002; Mon, 12 Jan 2015 16:54:53 +0100 From: =?utf-8?B?UmFobiwgUmVuw6k=?= To: SeqAn Development Thread-Topic: [Seqan-dev] Container type for storing sequences in memory Thread-Index: AQHQK/HtaO1/5/oOQEKBePJxkrh/UJy8l42A Message-ID: <30ED6A71-8436-45E2-BC38-79179B9DCEA0@zedat.fu-berlin.de> References: In-Reply-To: Accept-Language: de-DE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: Content-Type: multipart/alternative; boundary="_000_30ED6A71843645E2BC3879179B9DCEA0zedatfuberlinde_" MIME-Version: 1.0 Date: Mon, 12 Jan 2015 16:54:52 +0100 X-Original-Date: Mon, 12 Jan 2015 15:54:52 +0000 X-Originating-IP: 130.133.170.203 X-ZEDAT-Hint: XA X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1421078095-0000127A-312947E8/0/0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.005091, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=-50.0 required=5.0 tests=ALL_TRUSTED,HTML_MESSAGE X-Spam-Checker-Version: SpamAssassin 3.4.0 on Tokelau.ZEDAT.FU-Berlin.DE X-Spam-Level: Subject: Re: [Seqan-dev] Container type for storing sequences in memory X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Jan 2015 15:54:57 -0000 --_000_30ED6A71843645E2BC3879179B9DCEA0zedatfuberlinde_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGV5LA0KDQp5b3UgYXJlIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgU3RyaW5nU2V0Lg0KVGhpcyBk YXRhIHN0cnVjdHVyZSBzaW1wbHkgc3RvcmVzIGEgc2V0IG9mIHN0cmluZ3MuIFlvdeKAmWxsIG5l ZWQgdHdvIG9mIHRoZW0gZm9yIHRoZSBpZHMgYW5kIHRoZSBzZXF1ZW5jZXMuDQpUaGVyZSBpcyBh bHJlYWR5IGZ1bmN0aW9uYWxpdHkgdGhhdCBkaXJlY3RseSByZWFkcyBhIGZhc3RhIGZpbGUgYW5k IHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIFN0cmluZ1NldHMuDQoNCllvdSBjYW4gcmVh ZCB0aGlzIHR1dG9yaWFsIHRvIGxvb2sgaW50byBsb2FkaW5nIHNlcXVlbmNlIGZpbGVzIHVzaW5n IFN0cmluZ1NldHMuDQpodHRwOi8vc2VxYW4ucmVhZHRoZWRvY3Mub3JnL2VuL2RldmVsb3AvVHV0 b3JpYWwvU2VxdWVuY2VJTy5odG1sI3R1dG9yaWFsLXNlcXVlbmNlLWlvDQoNClRoZXJlIHlvdeKA mWxsIGFsc28gZmluZCBsaW5rcyB0byB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgU3RyaW5nU2V0 Lg0KTm90ZSB0aGF0IHRoaXMgaXMgdGhlIGN1cnJlbnQgZGV2ZWxvcCB2ZXJzaW9uLg0KQXMgd2Ug d2lsbCBoYXZlIGEgcmVsZWFzZSBjb21pbmcgdmVyeSBzb29uIHRoaXMgbWlnaHQgYmUgdGhlIHRo aW5nIHRvIGxvb2sgYXQuDQoNCmNoZWVycywNCg0KUmVuw6kNCg0KT24gMDkgSmFuIDIwMTUsIGF0 IDExOjAwLCBKb3JkYW4gV2lsbGlzIDxqd2lsbGlzMDcyMEBnbWFpbC5jb208bWFpbHRvOmp3aWxs aXMwNzIwQGdtYWlsLmNvbT4+IHdyb3RlOg0KDQpIaSwNCg0KSSB3YXMgd29uZGVyaW5nIGlmIHRo ZXJlIGlzIGEgYnVpbHRpbiBjb250YWluZXIgaW4gU2VxYW4gZm9yIHN0b3JpbmcgYSBzbWFsbCBk YXRhYmFzZSBvZiBzZXF1ZW5jZSBpZHMgYW5kIHNlcXVlbmNlcyB0aGF0IGNhbiBiZSBzdG9yZWQg aW4gbWVtb3J5LiBUaGUgc2VxdWVuY2VzIHdpbGwgYmUgY29udGludWFsbHkgaXRlcmF0ZWQgdGhy b3VnaCBhbmQgbG9jYWwgYWxpZ25tZW50cyB3aWxsIGJlIHBlcmZvcm1lZC4gRG9lcyBhbnlvbmUg aGF2ZSBhbnkgcmVjb21tZW5kYXRpb25zIGZvciB0aGlzIG9yIHBlcmhhcHMgcG9pbnQgbWUgdG8g b25lIG9mIHRoZSBidWlsdGluIGFwcHMgdGhhdCBkb2VzIHRoaXM/DQoNClRoYW5rcyBzbyBtdWNo LA0Kag0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCnNl cWFuLWRldiBtYWlsaW5nIGxpc3QNCnNlcWFuLWRldkBsaXN0cy5mdS1iZXJsaW4uZGU8bWFpbHRv OnNlcWFuLWRldkBsaXN0cy5mdS1iZXJsaW4uZGU+DQpodHRwczovL2xpc3RzLmZ1LWJlcmxpbi5k ZS9saXN0aW5mby9zZXFhbi1kZXYNCg0KLS0tDQoNClJlbsOpIFJhaG4NClBoLkQuIFN0dWRlbnQN Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpUZWw6ICAoKzQ5KSAzMCA4MzggNzUy NzcNCk1haWw6IHJlbmUucmFobkBmdS1iZXJsaW4uZGU8bWFpbHRvOnJlbmUucmFobkBmdS1iZXJs aW4uZGU+DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KSW5zdGl0dXRlIG9mIENv bXB1dGVyIFNjaWVuY2UNCkFsZ29yaXRobWljIEJpb2luZm9ybWF0aWNzIChBQkkpDQotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRnJlaWUgVW5pdmVyc2l0w6R0IEJlcmxpbg0KVGFr dXN0cmHDn2UgOQ0KMTQxOTUgQmVybGluDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KDQo= --_000_30ED6A71843645E2BC3879179B9DCEA0zedatfuberlinde_ Content-Type: text/html; charset="utf-8" Content-ID: <4D8EC20C51DEED47A21AAB0051BD6B09@campus.fu-berlin.de> Content-Transfer-Encoding: base64 PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5IHN0eWxlPSJ3b3JkLXdy YXA6IGJyZWFrLXdvcmQ7IC13ZWJraXQtbmJzcC1tb2RlOiBzcGFjZTsgLXdlYmtpdC1saW5lLWJy ZWFrOiBhZnRlci13aGl0ZS1zcGFjZTsiIGNsYXNzPSIiPg0KSGV5LCZuYnNwOw0KPGRpdiBjbGFz cz0iIj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+eW91IGFyZSBwcm9iYWJs eSBsb29raW5nIGZvciBhIFN0cmluZ1NldC4mbmJzcDs8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+VGhp cyBkYXRhIHN0cnVjdHVyZSBzaW1wbHkgc3RvcmVzIGEgc2V0IG9mIHN0cmluZ3MuIFlvdeKAmWxs IG5lZWQgdHdvIG9mIHRoZW0gZm9yIHRoZSBpZHMgYW5kIHRoZSBzZXF1ZW5jZXMuPC9kaXY+DQo8 ZGl2IGNsYXNzPSIiPlRoZXJlIGlzIGFscmVhZHkgZnVuY3Rpb25hbGl0eSB0aGF0IGRpcmVjdGx5 IHJlYWRzIGEgZmFzdGEgZmlsZSBhbmQgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgU3Ry aW5nU2V0cy48L2Rpdj4NCjxkaXYgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8ZGl2 IGNsYXNzPSIiPllvdSBjYW4gcmVhZCB0aGlzIHR1dG9yaWFsIHRvIGxvb2sgaW50byBsb2FkaW5n IHNlcXVlbmNlIGZpbGVzIHVzaW5nIFN0cmluZ1NldHMuPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPjxh IGhyZWY9Imh0dHA6Ly9zZXFhbi5yZWFkdGhlZG9jcy5vcmcvZW4vZGV2ZWxvcC9UdXRvcmlhbC9T ZXF1ZW5jZUlPLmh0bWwjdHV0b3JpYWwtc2VxdWVuY2UtaW8iIGNsYXNzPSIiPmh0dHA6Ly9zZXFh bi5yZWFkdGhlZG9jcy5vcmcvZW4vZGV2ZWxvcC9UdXRvcmlhbC9TZXF1ZW5jZUlPLmh0bWwjdHV0 b3JpYWwtc2VxdWVuY2UtaW88L2E+PC9kaXY+DQo8ZGl2IGNsYXNzPSIiPjxiciBjbGFzcz0iIj4N CjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj5UaGVyZSB5b3XigJlsbCBhbHNvIGZpbmQgbGlua3MgdG8g dGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIFN0cmluZ1NldC48L2Rpdj4NCjxkaXYgY2xhc3M9IiI+ Tm90ZSB0aGF0IHRoaXMgaXMgdGhlIGN1cnJlbnQgZGV2ZWxvcCB2ZXJzaW9uLiZuYnNwOzwvZGl2 Pg0KPGRpdiBjbGFzcz0iIj5BcyB3ZSB3aWxsIGhhdmUgYSByZWxlYXNlIGNvbWluZyB2ZXJ5IHNv b24gdGhpcyBtaWdodCBiZSB0aGUgdGhpbmcgdG8gbG9vayBhdC4mbmJzcDs8L2Rpdj4NCjxkaXYg Y2xhc3M9IiI+PGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPmNoZWVycyw8L2Rp dj4NCjxkaXYgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPlJl bsOpPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPjxiciBjbGFzcz0iIj4NCjxkaXY+DQo8YmxvY2txdW90 ZSB0eXBlPSJjaXRlIiBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9IiI+T24gMDkgSmFuIDIwMTUsIGF0 IDExOjAwLCBKb3JkYW4gV2lsbGlzICZsdDs8YSBocmVmPSJtYWlsdG86andpbGxpczA3MjBAZ21h aWwuY29tIiBjbGFzcz0iIj5qd2lsbGlzMDcyMEBnbWFpbC5jb208L2E+Jmd0OyB3cm90ZTo8L2Rp dj4NCjxiciBjbGFzcz0iQXBwbGUtaW50ZXJjaGFuZ2UtbmV3bGluZSI+DQo8ZGl2IGNsYXNzPSIi PkhpLDxiciBjbGFzcz0iIj4NCjxiciBjbGFzcz0iIj4NCkkgd2FzIHdvbmRlcmluZyBpZiB0aGVy ZSBpcyBhIGJ1aWx0aW4gY29udGFpbmVyIGluIFNlcWFuIGZvciBzdG9yaW5nIGEgc21hbGwgZGF0 YWJhc2Ugb2Ygc2VxdWVuY2UgaWRzIGFuZCBzZXF1ZW5jZXMgdGhhdCBjYW4gYmUgc3RvcmVkIGlu IG1lbW9yeS4gVGhlIHNlcXVlbmNlcyB3aWxsIGJlIGNvbnRpbnVhbGx5IGl0ZXJhdGVkIHRocm91 Z2ggYW5kIGxvY2FsIGFsaWdubWVudHMgd2lsbCBiZSBwZXJmb3JtZWQuIERvZXMgYW55b25lIGhh dmUgYW55DQogcmVjb21tZW5kYXRpb25zIGZvciB0aGlzIG9yIHBlcmhhcHMgcG9pbnQgbWUgdG8g b25lIG9mIHRoZSBidWlsdGluIGFwcHMgdGhhdCBkb2VzIHRoaXM/PGJyIGNsYXNzPSIiPg0KPGJy IGNsYXNzPSIiPg0KVGhhbmtzIHNvIG11Y2gsPGJyIGNsYXNzPSIiPg0KajxiciBjbGFzcz0iIj4N Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyIGNsYXNz PSIiPg0Kc2VxYW4tZGV2IG1haWxpbmcgbGlzdDxiciBjbGFzcz0iIj4NCjxhIGhyZWY9Im1haWx0 bzpzZXFhbi1kZXZAbGlzdHMuZnUtYmVybGluLmRlIiBjbGFzcz0iIj5zZXFhbi1kZXZAbGlzdHMu ZnUtYmVybGluLmRlPC9hPjxiciBjbGFzcz0iIj4NCmh0dHBzOi8vbGlzdHMuZnUtYmVybGluLmRl L2xpc3RpbmZvL3NlcWFuLWRldjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0KPC9ibG9ja3F1b3RlPg0K PC9kaXY+DQo8YnIgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPg0KPGRpdiBjbGFzcz0iIj4NCjxk aXYgc3R5bGU9Im9ycGhhbnM6IDI7IHdpZG93czogMjsiIGNsYXNzPSIiPjxmb250IGZhY2U9IkNv dXJpZXIgTmV3IiBjbGFzcz0iIj4tLS08L2ZvbnQ+PC9kaXY+DQo8ZGl2IHN0eWxlPSJvcnBoYW5z OiAyOyB3aWRvd3M6IDI7IiBjbGFzcz0iIj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgY2xhc3M9 IiI+PGJyIGNsYXNzPSIiPg0KPC9mb250PjwvZGl2Pg0KPGRpdiBzdHlsZT0ib3JwaGFuczogMjsg d2lkb3dzOiAyOyIgY2xhc3M9IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNsYXNzPSIiPlJl bsOpIFJhaG48L2ZvbnQ+PC9kaXY+DQo8ZGl2IHN0eWxlPSJvcnBoYW5zOiAyOyB3aWRvd3M6IDI7 IiBjbGFzcz0iIj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgY2xhc3M9IiI+UGguRC4gU3R1ZGVu dDwvZm9udD48L2Rpdj4NCjxkaXYgc3R5bGU9Im9ycGhhbnM6IDI7IHdpZG93czogMjsiIGNsYXNz PSIiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj4tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLTwvZm9udD48L2Rpdj4NCjxkaXYgc3R5bGU9Im9ycGhhbnM6IDI7IHdpZG93 czogMjsiIGNsYXNzPSIiPg0KPGRpdiBjbGFzcz0iIj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIg Y2xhc3M9IiI+VGVsOiAmbmJzcDsoJiM0Mzs0OSkgMzAgODM4IDc1Mjc3PC9mb250PjwvZGl2Pg0K PGRpdiBjbGFzcz0iIj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgY2xhc3M9IiI+TWFpbDombmJz cDs8YSBocmVmPSJtYWlsdG86cmVuZS5yYWhuQGZ1LWJlcmxpbi5kZSIgY2xhc3M9IiI+cmVuZS5y YWhuQGZ1LWJlcmxpbi5kZTwvYT48L2ZvbnQ+PC9kaXY+DQo8ZGl2IGNsYXNzPSIiPjxmb250IGZh Y2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LTwvZm9udD48L2Rpdj4NCjwvZGl2Pg0KPGRpdiBzdHlsZT0ib3JwaGFuczogMjsgd2lkb3dzOiAy OyIgY2xhc3M9IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNsYXNzPSIiPkluc3RpdHV0ZSBv ZiBDb21wdXRlciBTY2llbmNlPC9mb250PjwvZGl2Pg0KPGRpdiBzdHlsZT0ib3JwaGFuczogMjsg d2lkb3dzOiAyOyIgY2xhc3M9IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNsYXNzPSIiPkFs Z29yaXRobWljIEJpb2luZm9ybWF0aWNzIChBQkkpPC9mb250PjwvZGl2Pg0KPGRpdiBzdHlsZT0i b3JwaGFuczogMjsgd2lkb3dzOiAyOyIgY2xhc3M9IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXci IGNsYXNzPSIiPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9mb250PjwvZGl2Pg0K PGRpdiBzdHlsZT0ib3JwaGFuczogMjsgd2lkb3dzOiAyOyIgY2xhc3M9IiI+PGZvbnQgZmFjZT0i Q291cmllciBOZXciIGNsYXNzPSIiPkZyZWllIFVuaXZlcnNpdMOkdCBCZXJsaW48L2ZvbnQ+PC9k aXY+DQo8ZGl2IHN0eWxlPSJvcnBoYW5zOiAyOyB3aWRvd3M6IDI7IiBjbGFzcz0iIj48Zm9udCBm YWNlPSJDb3VyaWVyIE5ldyIgY2xhc3M9IiI+VGFrdXN0cmHDn2UgOTwvZm9udD48L2Rpdj4NCjxk aXYgc3R5bGU9Im9ycGhhbnM6IDI7IHdpZG93czogMjsiIGNsYXNzPSIiPjxmb250IGZhY2U9IkNv dXJpZXIgTmV3IiBjbGFzcz0iIj4xNDE5NSBCZXJsaW48L2ZvbnQ+PC9kaXY+DQo8ZGl2IHN0eWxl PSJvcnBoYW5zOiAyOyB3aWRvd3M6IDI7IiBjbGFzcz0iIj48Zm9udCBmYWNlPSJDb3VyaWVyIE5l dyIgY2xhc3M9IiI+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L2ZvbnQ+PC9kaXY+ DQo8L2Rpdj4NCjwvZGl2Pg0KPGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+ DQo= --_000_30ED6A71843645E2BC3879179B9DCEA0zedatfuberlinde_-- From jwillis0720@gmail.com Thu Jan 15 05:09:45 2015 Received: from relay1.zedat.fu-berlin.de ([130.133.4.67]) by list1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1YBbkd-002ja6-KJ>; Thu, 15 Jan 2015 05:09:43 +0100 Received: from mail-pd0-f172.google.com ([209.85.192.172]) by relay1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtps (envelope-from ) id <1YBbkd-001qYz-Dq>; Thu, 15 Jan 2015 05:09:43 +0100 Received: by mail-pd0-f172.google.com with SMTP id y13so13856582pdi.3 for ; Wed, 14 Jan 2015 20:09:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:content-type:content-transfer-encoding:subject:message-id:date :to:mime-version; bh=fz7x1drb2WpgJlTYir6fJV+0NyaJEJ2pa2i1PkewKEc=; b=nBeu1yXVmbZcZ7vS9l12sw5j12EKhWDQ/a06Ab/DxLmp49XgUnNtxdm5SMVCaPZqSW cyo9pms0X5Hm0FuIFixpk7ouM2cJ5oJHqcFiWgjyYbbRzKKBmy6fityWY8EQSlsi65n6 OtZTbvwFDHH6F+7PzR7YHbwtrKN2NGaFDcyee7o6mj8pCsNrgjVtJiDWDLncmHbDfIFu O7i0MopO64LVcd3DSvH84fFhIojgFws24FAWUoQCHSh3C1PE0xr7vLS/hwYg87ozwwWQ ba3GQrXQmiAIYfXFkl7/khY8reK1CcX6pgEEKaFWbdTcsNvaPfRVEGh+pO+d/+nl1BPq eHBA== X-Received: by 10.69.20.10 with SMTP id gy10mr843211pbd.76.1421294980510; Wed, 14 Jan 2015 20:09:40 -0800 (PST) Received: from dhcp-231-56.scripps.edu (dhcp-231-56.scripps.edu. [137.131.231.56]) by mx.google.com with ESMTPSA id wm1sm275834pac.11.2015.01.14.20.09.38 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 14 Jan 2015 20:09:39 -0800 (PST) From: Jordan Willis Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Message-Id: <78FDEA2C-1A45-4E14-886D-155F219FF2E2@gmail.com> Date: Wed, 14 Jan 2015 20:18:24 -0800 To: seqan-dev@lists.fu-berlin.de Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\)) X-Mailer: Apple Mail (2.1878.6) X-Originating-IP: 209.85.192.172 X-ZEDAT-Hint: T X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1421294983-000E8592-8B666371/0/0 X-Bogosity: Unsure, tests=bogofilter, spamicity=0.530195, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=0.8 required=5.0 tests=FREEMAIL_FROM, FU_BOGO_UNSURE, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H2,T_DKIM_INVALID X-Spam-Checker-Version: SpamAssassin 3.4.0 on Niue.ZEDAT.FU-Berlin.DE X-Spam-Level: Subject: [Seqan-dev] Translate X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Jan 2015 04:09:45 -0000 Hi Everyone, I was looking through the documentation and couldn=92t find a built-in = translate DNA to amino acid sequence function. Have I not looked hard = enough? J From hannes.hauswedell@fu-berlin.de Thu Jan 15 12:22:37 2015 Received: from outpost1.zedat.fu-berlin.de ([130.133.4.66]) by list1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1YBiVX-003Cio-H3>; Thu, 15 Jan 2015 12:22:35 +0100 Received: from inpost2.zedat.fu-berlin.de ([130.133.4.69]) by outpost.zedat.fu-berlin.de (Exim 4.82) with esmtp (envelope-from ) id <1YBiVX-000Ns2-Fs>; Thu, 15 Jan 2015 12:22:35 +0100 Received: from celegans.imp.fu-berlin.de ([160.45.111.134]) by inpost2.zedat.fu-berlin.de (Exim 4.82) with esmtpsa (envelope-from ) id <1YBiVX-001XCy-Er>; Thu, 15 Jan 2015 12:22:35 +0100 From: Hannes Hauswedell To: Jordan Willis Date: Thu, 15 Jan 2015 12:23:16 +0100 Message-ID: <1588924.uOM97ti4K4@celegans.imp.fu-berlin.de> Organization: MPI MolGen / FU-Berlin In-Reply-To: <78FDEA2C-1A45-4E14-886D-155F219FF2E2@gmail.com> References: <78FDEA2C-1A45-4E14-886D-155F219FF2E2@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-Originating-IP: 160.45.111.134 X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1421320955-000E8592-BA660693/0/0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000031, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=-50.0 required=5.0 tests=ALL_TRUSTED, T_FILL_THIS_FORM_SHORT X-Spam-Checker-Version: SpamAssassin 3.4.0 on Tokelau.ZEDAT.FU-Berlin.DE X-Spam-Level: Cc: SeqAn Development Subject: Re: [Seqan-dev] Translate X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Jan 2015 11:22:37 -0000 Am Mittwoch, 14. Januar 2015, 20:18:24 schrieb Jordan Willis: > Hi Everyone, >=20 > I was looking through the documentation and couldn=E2=80=99t find a b= uilt-in > translate DNA to amino acid sequence function. Have I not looked hard= > enough? Dear Jordan, it was not in the last release, but has been in the master and developm= ent=20 branches for quite some time: http://docs.seqan.de/seqan/develop/ -> translate function We will release a new version of SeqAn very soon which will also includ= e the=20 translation module among many other new features. If you need it now, y= ou can=20 checkout either master or develop from github and use that (the version= on=20 develop has a few more features as well as parallelization). Best regards, --=20 Hannes Hauswedell PhD student Max Planck Institute for Molecular Genetics / Freie Universit=C3=A4t Be= rlin address Institut f=C3=BCr Informatik Takustra=C3=9Fe 9 Room 019 14195 Berlin telephone +49 (0)30 838-75241 fax +49 (0)30 838-75218 e-mail hannes.hauswedell@[molgen.mpg.de|fu-berlin.de] From bnbowman@gmail.com Thu Jan 22 08:47:30 2015 Received: from relay1.zedat.fu-berlin.de ([130.133.4.67]) by list1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1YECUB-000bv9-T1>; Thu, 22 Jan 2015 08:47:28 +0100 Received: from mail-ie0-f172.google.com ([209.85.223.172]) by relay1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtps (envelope-from ) id <1YECUB-003fkE-HX>; Thu, 22 Jan 2015 08:47:27 +0100 Received: by mail-ie0-f172.google.com with SMTP id rd18so106941iec.3 for ; Wed, 21 Jan 2015 23:47:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=P7qHIXwDRZDQ//3P3m+rfoVYtFa5kqHIPi4n86rVkOY=; b=ru+DeI5vdI22betp/BgQThse697k5X3fQtb4/MF2dK/9d1Apjc1RqkcKg3BuZdnJNv QAl8OFYti735XZSQZTEiKZEpcYYsOmH0YianPBHvVArZBQHkweKmJ9juTqqMwX1erRfL NqDucvUBhrAjQ5azNEz5A1Xr0jGuCnaiOb4z8AJWJtBlE7sgoEQRqEJuv99RgUjP2Dd1 aqvVcjNmRFqqMzpQ/Ic2WsCmXP8CTQbADU+tZFkvHtlPGl6NcAJpYGovESWza/9dZ1ma gvJ2ERV0pUsxBNCqRssAfyeBtLVZh6QSuM7pNKB8YEUwrxvMrUg9ixv/gKzmbTKFpDKy lPLA== MIME-Version: 1.0 X-Received: by 10.42.213.7 with SMTP id gu7mr1237047icb.47.1421912844622; Wed, 21 Jan 2015 23:47:24 -0800 (PST) Received: by 10.36.87.85 with HTTP; Wed, 21 Jan 2015 23:47:24 -0800 (PST) In-Reply-To: References: Date: Wed, 21 Jan 2015 23:47:24 -0800 Message-ID: From: Brett Bowman To: SeqAn Development Content-Type: multipart/alternative; boundary=001a11c3ab64016351050d38e265 X-Originating-IP: 209.85.223.172 X-ZEDAT-Hint: A X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1421912847-00000D35-F305E914/0/0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.266682, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=-0.7 required=5.0 tests=FREEMAIL_FROM,HTML_MESSAGE, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H2,T_DKIM_INVALID X-Spam-Checker-Version: SpamAssassin 3.4.0 on Vanuatu.ZEDAT.FU-Berlin.DE X-Spam-Level: Subject: Re: [Seqan-dev] Two Alignment Questions X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 Jan 2015 07:47:30 -0000 --001a11c3ab64016351050d38e265 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Given an Alignment, how do I get the "TGapSpec" of the underlying rows? I've submitted a pull request with the first half of the features I'd like, now I'm trying to get match strings to work in a generalized way. I'm trying to implement a functions called "alignmentIdentityString", which takes either an Align object, or just two Gaps objects representing rows, and generations a match string with specified characters for matches / mismatches / gaps. It works just fine when I work directly from a supplied Alignment or pair of Rows, but I can't translate an Alignment object down into its component Rows so I can avoid duplicating code. Source gets me the alphabet, and I assume there is a Metafunction to get the Spec of a Gaps/Row object, but the documentation isn't clear and neither Value<> nor GetValue<> appear to give me what I need. """ template String alignmentIdentityString(Align const & align, char const matchChar, char const mismatchChar, char const gapChar) { // Check that the supplied alignment is pairwise SEQAN_ASSERT_EQ_MSG(length(rows(align)), 2u, "Only works with pairwise alignments."); typedef Align const TAlign; typedef typename Row::Type TGaps; typedef typename Value::Type TGapSpec; // Try #1 //TGaps queryRow =3D row(align, 0); //TGaps referenceRow =3D row(align, 1); // Try #2 Gaps queryRow =3D row(align, 0); Gaps referenceRow =3D row(align, 1); return alignmentSimilarityString(queryRow, referenceRow, scoringScheme, matchChar, mismatchChar, gapChar); } """ What am I missing? -Brett On Mon, Jan 12, 2015 at 1:11 AM, Holtgrewe, Manuel < manuel.holtgrewe@fu-berlin.de> wrote: > Hi Brett, > > would you be willing to perform this extension yourself? You could send > a patch or a Github pull request with the results. > > Cheers, > Manuel > > ------------------------------ > *From:* Brett Bowman [bnbowman@gmail.com] > *Sent:* Sunday, January 11, 2015 6:47 PM > > *To:* SeqAn Development > *Subject:* Re: [Seqan-dev] Two Alignment Questions > > Manuel, > > I saw the AlignmentStats class when I was digging around in the API for > what I need, but I'm afraid it doesn't quite fit: > -It doesn't differentiate between Insertions and Deletions (the ratio of > which is important for diagnosing some sequencing problems and bad > alignments) > -It doesn't appear to provide access to the alignment string, meaning I > still need to traverse the whole alignment to generate alternate > representations. > > -B > > On Sat, Jan 10, 2015 at 2:21 AM, Holtgrewe, Manuel < > manuel.holtgrewe@fu-berlin.de> wrote: > >> Does this help? >> >> http://docs.seqan.de/seqan/develop/?p=3DcomputeAlignmentStats >> http://docs.seqan.de/seqan/develop/?p=3DcomputeAlignmentStats >> >> *m >> >> ------------------------------ >> *From:* Brett Bowman [bnbowman@gmail.com] >> *Sent:* Saturday, January 10, 2015 3:16 AM >> *To:* SeqAn Development >> *Subject:* Re: [Seqan-dev] Two Alignment Questions >> >> Thanks Rene, >> >> >What do you mean by accuracy? What do you need exactly? >> >> What I am trying to do is write a tool to align single-molecule >> sequencing data (PacBio, Oxford Nanopore) to reference genomes. For whi= ch >> the alignment accuracy and the break-down of the types of errors is very >> useful, as the per-read quality on both platforms varies substantially. >> >> What I'd like are member methods or functions-on-alignment-objects to >> give the following: >> -The number of base-pair matches in the alignment >> -The number of mismatches in the alignment >> -The number of insertions in the alignment >> -The number of deletions in the alignment >> -The alignment string as represented by the Align object's toString() >> method >> >> The first four I need to summarize the similarity of an alignment (i.e. >> indels are likely sequencing error, where as mismatches are likely not), >> while the latter is helpful in creating alternate representations for >> alignments >> >> Does that help? >> >> -B >> >> On Fri, Jan 9, 2015 at 12:51 AM, Rahn, Ren=C3=A9 >> wrote: >> >>> Hey Brett, >>> >>> >>> On 30 Dec 2014, at 21:29, Brett Bowman wrote: >>> >>> 1) Is there an easy way to get the accuracy of an Alignment object, >>> or is that something I need to calculate myself? >>> >>> >>> What do you mean by accuracy? What do you need exactly? >>> The Align data structure simply represents the computed alignment. The >>> score is returned by the global align interface. >>> There are several ways to manipulate the alignment of gaps and to >>> compute all best traceback paths. However, those options are not suppor= ted >>> on the high level interfaces but only in the core of the alignment engi= ne. >>> If you tell me what you need exactly we can think of a way to make thos= e >>> interfaces public which is planned for the future anyway. >>> But there is no method telling you the accuracy of the =E2=80=9Ccompute= d" >>> alignment compared to another =E2=80=9Creal=E2=80=9D alignment. Please,= give me some >>> specifics and we see if we can incorporate this. >>> ... >>> Well, there is a method in the tool seqan-tcoffee, which checks if the >>> computed alignment is correct given the score model and the alignment, = but >>> I believe this is not what you are looking for? >>> >>> >>> 2) bandedChainAlignment fails messily when given a Vector of Seeds >>> instead of a String, where as other functions work fine (e.g. >>> chainSeedsGlobally). Why does it work for the one and not the other? >>> Excerpt from error message below. >>> >>> """ >>> /usr/include/seqan/seeds/banded_chain_alignment_impl.h:1195:57: error: >>> call to 'end' is ambiguous >>> SEQAN_ASSERT(itEnd !=3D static_cast(end(seedSet))= ); >>> ^~~ >>> /usr/include/seqan/basic/debug_test_system.h:2146:44: note: expanded >>> from macro 'SEQAN_ASSERT' >>> (_arg1), # _arg1)) { >>> \ >>> ^ >>> /usr/include/seqan/seeds/banded_chain_alignment_profile.h:254:16: note: >>> in instantiation of function template specialization >>> >>> ... >>> >>> /usr/include/seqan/seeds/banded_chain_alignment.h:207:12: note: in >>> instantiation of function template specialization >>> >>> 'seqan::bandedChainAlignment>> seqan::Dna5_>, seqan::Alloc >, seqan::Tag, >>> std::vector, >>> seqan::DefaultSeedConfig>, >>> std::allocator, >>> seqan::DefaultSeedConfig> > >, long, >>> seqan::Tag, seqan::Tag, false, >>> false, false, false, seqan::Tag >' requested here >>> return bandedChainAlignment(align, seedSet, scoreScheme, >>> scoreScheme, alignConfig, bandExtension); >>> ^ >>> /home/bbowman/git/SRSLI/src/C++/SparseAlignment2.cpp:72:25: note: in >>> instantiation of function template specialization >>> >>> 'seqan::bandedChainAlignment>> seqan::Dna5_>, seqan::Alloc >, seqan::Tag, >>> std::vector, >>> seqan::DefaultSeedConfig>, >>> std::allocator, >>> seqan::DefaultSeedConfig> > >, long, >>> seqan::Tag, false, false, false, false, >>> seqan::Tag >' requested here >>> long alnScore =3D bandedChainAlignment(alignment, *seedChain, >>> scoring, globalConfig); >>> ^ >>> /home/bbowman/git/SRSLI/src/C++/main.cpp:95:27: note: in instantiation >>> of function template specialization >>> 'RefChainsToAlignments>> seqan::Tag > ()>' requested here >>> auto alignments =3D RefChainsToAlignments(record->Seq, >>> ^ >>> /usr/include/seqan/seeds/banded_chain_alignment_impl.h:583:1: note: >>> candidate template ignored: substitution failure [with TSeedSet =3D >>> std::vector, >>> seqan::DefaultSeedConfig>, >>> std::allocator, >>> seqan::DefaultSeedConfig> > >] >>> _findFirstAnchor(TSeedSet const & seedSet, int bandExtension) >>> "=E2=80=9D" >>> >>> >>> Ok, this seems to be a bug to me. >>> I=E2=80=99ll have a look into it. >>> >>> >>> Sincerely, >>> -Brett >>> _______________________________________________ >>> seqan-dev mailing list >>> seqan-dev@lists.fu-berlin.de >>> https://lists.fu-berlin.de/listinfo/seqan-dev >>> >>> >>> Bests, >>> >>> Ren=C3=A9 >>> >>> --- >>> >>> Ren=C3=A9 Rahn >>> Ph.D. Student >>> -------------------------------- >>> Tel: (+49) 30 838 75277 >>> Mail: rene.rahn@fu-berlin.de >>> -------------------------------- >>> Institute of Computer Science >>> Algorithmic Bioinformatics (ABI) >>> -------------------------------- >>> Freie Universit=C3=A4t Berlin >>> Takustra=C3=9Fe 9 >>> 14195 Berlin >>> -------------------------------- >>> >>> >>> _______________________________________________ >>> seqan-dev mailing list >>> seqan-dev@lists.fu-berlin.de >>> https://lists.fu-berlin.de/listinfo/seqan-dev >>> >>> >> >> _______________________________________________ >> seqan-dev mailing list >> seqan-dev@lists.fu-berlin.de >> https://lists.fu-berlin.de/listinfo/seqan-dev >> >> > > _______________________________________________ > seqan-dev mailing list > seqan-dev@lists.fu-berlin.de > https://lists.fu-berlin.de/listinfo/seqan-dev > > --001a11c3ab64016351050d38e265 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Given an Alignment, how do I get the "TGapSpec&q= uot; of the underlying rows?

I've submitted a pull = request with the first half of the features I'd like, now I'm tryin= g to get match strings to work in a generalized way.

I&#= 39;m trying to implement a functions called "alignmentIdentityString&q= uot;, which takes either an Align object, or just two Gaps objects represen= ting rows, and generations a match string with specified characters for mat= ches / mismatches / gaps.=C2=A0 It works just fine when I work directly fro= m a supplied Alignment or pair of Rows, but I can't translate an Alignm= ent object down into its component Rows so I can avoid duplicating code.

Source<TGaps> gets me the alphabet, and I assu= me there is a Metafunction to get the Spec of a Gaps/Row object, but the do= cumentation isn't clear and neither Value<> nor GetValue<> = appear to give me what I need.=C2=A0

"&quo= t;"
template <typename TAlphabet, typename TAlignSpe= c>
String<char> alignmentIdentityString(Align<TAlphab= et, TAlignSpec> const & align,
=C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0char const matchChar,
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0char cons= t mismatchChar,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0char const gapChar)
{
=C2=A0 =C2=A0= // Check that the supplied alignment is pairwise
=C2=A0 =C2=A0 S= EQAN_ASSERT_EQ_MSG(length(rows(align)), 2u, "Only works with pairwise = alignments.");

=C2=A0 =C2=A0 typedef Align<= ;TAlphabet, TAlignSpec> const TAlign;
=C2=A0 =C2=A0 typedef ty= pename Row<TAlign>::Type TGaps;
=C2=A0 =C2=A0 typedef typen= ame Value<TGaps>::Type TGapSpec;

=C2=A0 =C2= =A0 // Try #1
=C2=A0 =C2=A0 //TGaps queryRow =3D row(al= ign, 0);
=C2=A0 =C2=A0 //TGaps referenceRow =3D row(align, 1);

=C2=A0 =C2=A0 // Try #2
= =C2=A0 =C2=A0 Gaps<TAlphabet, TGapSpec> queryRow =3D row(align, 0);
=C2=A0 =C2=A0 Gaps<TAlphabet, TGapSpec> referenceRow =3D row= (align, 1);

=C2=A0 =C2=A0 return alignmentSi= milarityString(queryRow, referenceRow, scoringScheme,
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0matchChar, mismatchChar, ga= pChar);
}
"""

What am I missing?

-Brett

On Mon, Jan 12, 2015 at 1:11 AM, Holtgrewe, Manuel <man= uel.holtgrewe@fu-berlin.de> wrote:
Hi Brett,

would you be willing to perform this extension yourself? You could sen= d a patch or a Github pull request with the results.

Cheers,
Manuel


Fro= m: Brett Bowman [bnbowman@gmail.com]
Sent: Sunday, January 11, 2015 6:47 PM

To: SeqAn Development
Subject: Re: [Seqan-dev] Two Alignment Questions

Manuel,

I saw the AlignmentStats class when I was digging around in the API fo= r what I need, but I'm afraid it doesn't quite fit:
-It doesn't differentiate between Insertions and Deletions (the ra= tio of which is important for diagnosing some sequencing problems and bad a= lignments)
-It doesn't appear to provide access to the alignment string, mean= ing I still need to traverse the whole alignment to generate alternate repr= esentations.

-B

On Sat, Jan 10, 2015 at 2:21 AM, Holtgrewe, Manu= el <manu= el.holtgrewe@fu-berlin.de> wrote:
Does this help?


*m


Fro= m: Brett Bowman [bnbowman@gmail.com]
Sent: Saturday, January 10, 2015 3:16 AM
To: SeqAn Development
Subject: Re: [Seqan-dev] Two Alignment Questions

Thanks Rene,

>What do you mean by accuracy? What do you= need exactly?=C2=A0

What I am trying to do is write a tool to ali= gn single-molecule sequencing data (PacBio, Oxford Nanopore) to reference g= enomes.=C2=A0 For which the alignment accuracy and the break-down of the ty= pes of errors is very useful, as the per-read quality on both platforms varies substantially.

What I'd like are member methods or funct= ions-on-alignment-objects to give the following:
-The number of base-pair matches in the align= ment
-The number of mismatches in the alignment
-The number of insertions in the alignment
-The number of deletions in the alignment
-The alignment string as represented by the A= lign object's toString() method

The first four I need to summarize the simila= rity of an alignment (i.e. indels are likely sequencing error, where as mis= matches are likely not), while the latter is helpful in creating alternate = representations for alignments

Does that help?

-B

On Fri, Jan 9, 2015 at 12:51 AM, Rahn, Ren=C3=A9= <rene.mae= rker@fu-berlin.de> wrote:
Hey Brett,=C2=A0


On 30 Dec 2014, at 21:29, Brett Bowman <bnbowman@gmail.com> wrote:

1) =C2=A0Is there an easy way to get the accuracy of an Alignment obje= ct, or is that something I need to calculate myself?

What do you mean by accuracy? What do you need exactly?=C2=A0
The Align data structure simply represents the computed alignment. The= score is returned by the global align interface.=C2=A0
There are several ways to manipulate the alignment of gaps and to comp= ute all best traceback paths. However, those options are not supported on t= he high level interfaces but only in the core of the alignment engine.=C2= =A0
If you tell me what you need exactly we can think of a way to make tho= se interfaces public which is planned for the future anyway.
But there is no method telling you the accuracy of the =E2=80=9Ccomput= ed" alignment compared to another =E2=80=9Creal=E2=80=9D alignment. Pl= ease, give me some specifics and we see if we can incorporate this.
...
Well, there is a method in the tool seqan-tcoffee, which checks if the= computed alignment is correct given the score model and the alignment, but= I believe this is not what you are looking for?


2) =C2=A0bandedChainAlignment fails messily when given a Vector of See= ds instead of a String, where as other functions work fine (e.g. chainSeeds= Globally).=C2=A0 Why does it work for the one and not the other?=C2=A0 Exce= rpt from error message below.

"""
/usr/include/seqan/seeds/banded_chain_alignment_impl.h:1195:57: error:= call to 'end' is ambiguous
=C2=A0 =C2=A0 SEQAN_ASSERT(itEnd !=3D static_cast<TSeedSetIterator&= gt;(end(seedSet)));
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ^~~
/usr/include/seqan/basic/debug_test_system.h:2146:44: note: expanded f= rom macro 'SEQAN_ASSERT'
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 (_arg1), # _arg1)) { =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0^
/usr/include/seqan/seeds/banded_chain_alignment_profile.h:254:16: note= : in instantiation of function template specialization

...

/usr/include/seqan/seeds/banded_chain_alignment.h:207:12: note: in ins= tantiation of function template specialization
=C2=A0 =C2=A0 =C2=A0 'seqan::bandedChainAlignment<seqan::String= <seqan::SimpleType<unsigned char, seqan::Dna5_>, seqan::Alloc<v= oid> >, seqan::Tag<seqan::ArrayGaps_>,
=C2=A0 =C2=A0 =C2=A0 std::vector<seqan::Seed<seqan::Tag<seqan= ::Simple_>, seqan::DefaultSeedConfig>, std::allocator<seqan::Seed&= lt;seqan::Tag<seqan::Simple_>, seqan::DefaultSeedConfig> > >= , long,
=C2=A0 =C2=A0 =C2=A0 seqan::Tag<seqan::Simple_>, seqan::Tag<s= eqan::Simple_>, false, false, false, false, seqan::Tag<seqan::Default= _> >' requested here
=C2=A0 =C2=A0 return bandedChainAlignment(align, seedSet, scoreScheme,= scoreScheme, alignConfig, bandExtension);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0^
/home/bbowman/git/SRSLI/src/C++/SparseAlignment2.cpp:72:25: note: in i= nstantiation of function template specialization
=C2=A0 =C2=A0 =C2=A0 'seqan::bandedChainAlignment<seqan::String= <seqan::SimpleType<unsigned char, seqan::Dna5_>, seqan::Alloc<v= oid> >, seqan::Tag<seqan::ArrayGaps_>,
=C2=A0 =C2=A0 =C2=A0 std::vector<seqan::Seed<seqan::Tag<seqan= ::Simple_>, seqan::DefaultSeedConfig>, std::allocator<seqan::Seed&= lt;seqan::Tag<seqan::Simple_>, seqan::DefaultSeedConfig> > >= , long,
=C2=A0 =C2=A0 =C2=A0 seqan::Tag<seqan::Simple_>, false, false, f= alse, false, seqan::Tag<seqan::Default_> >' requested here
=C2=A0 =C2=A0 =C2=A0 =C2=A0 long alnScore =3D bandedChainAlignment(ali= gnment, *seedChain, scoring, globalConfig);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 ^
/home/bbowman/git/SRSLI/src/C++/main.cpp:95:27: note: in instantiation= of function template specialization 'RefChainsToAlignments<seqan::A= lignConfig<false, true, true, false,
=C2=A0 =C2=A0 =C2=A0 seqan::Tag<seqan::Default_> > ()>'= ; requested here
=C2=A0 =C2=A0 =C2=A0 =C2=A0 auto alignments =3D RefChainsToAlignments(= record->Seq,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 ^
/usr/include/seqan/seeds/banded_chain_alignment_impl.h:583:1: note: ca= ndidate template ignored: substitution failure [with TSeedSet =3D std::vect= or<seqan::Seed<seqan::Tag<seqan::Simple_>,
=C2=A0 =C2=A0 =C2=A0 seqan::DefaultSeedConfig>, std::allocator<s= eqan::Seed<seqan::Tag<seqan::Simple_>, seqan::DefaultSeedConfig>= ; > >]
_findFirstAnchor(TSeedSet const & seedSet, int bandExtension)
"=E2=80=9D"=C2=A0

Ok, this seems to be a bug to me.
I=E2=80=99ll have a look into it.


Sincerely,
-Brett
_______________________________________________
seqan-dev mailing list
seqan-dev= @lists.fu-berlin.de
https://lists.fu-berlin.de/listinfo/seqan-dev

Bests,=C2=A0

Ren=C3=A9=C2=A0

---

Ren=C3=A9 Rahn
Ph.D. Student
--------------------------------
--------------------------------
Institute of Computer Science
Algorithmic Bioinformatics (ABI)
--------------------------------
Freie Universit=C3=A4t Berlin
Takustra=C3=9Fe 9
14195 Berlin
--------------------------------


_______________________________________________
seqan-dev mailing list
seqan-dev= @lists.fu-berlin.de
https://lists.fu-berlin.de/listinfo/seqan-dev



_______________________________________________
seqan-dev mailing list
seqan-dev= @lists.fu-berlin.de
https://lists.fu-berlin.de/listinfo/seqan-dev



_______________________________________________
seqan-dev mailing list
seqan-dev@lists.fu-berlin.d= e
https://lists.fu-berlin.de/listinfo/seqan-dev


--001a11c3ab64016351050d38e265-- From rene.maerker@fu-berlin.de Thu Jan 22 11:44:15 2015 Received: from outpost9.zedat.fu-berlin.de ([130.133.4.95]) by list1.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1YEFFE-0010sY-GW>; Thu, 22 Jan 2015 11:44:12 +0100 Received: from relay2.zedat.fu-berlin.de ([130.133.4.80]) by outpost.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtp (envelope-from ) id <1YEFFE-000gUI-El>; Thu, 22 Jan 2015 11:44:12 +0100 Received: from cas1.campus.fu-berlin.de ([130.133.170.201]) by relay2.zedat.fu-berlin.de (Exim 4.82) for seqan-dev@lists.fu-berlin.de with esmtps (envelope-from ) id <1YEFFE-001JYw-32>; Thu, 22 Jan 2015 11:44:12 +0100 Received: from EX03B.campus.fu-berlin.de ([130.133.170.135]) by CAS1.campus.fu-berlin.de ([130.133.170.201]) with mapi id 14.03.0210.002; Thu, 22 Jan 2015 11:44:10 +0100 From: =?utf-8?B?UmFobiwgUmVuw6k=?= To: SeqAn Development Thread-Topic: [Seqan-dev] Two Alignment Questions Thread-Index: AQHQJG9fLYow1WKOsk2uddMhZuuJZJy3eUiAgAEj74CAAId0AIACDyOAgAECCQCAD5/YAIAAMWEA Message-ID: References: In-Reply-To: Accept-Language: de-DE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: Content-Type: multipart/alternative; boundary="_000_CDC44F9C54E24DB2A01B625924E13601fritzbox_" MIME-Version: 1.0 Date: Thu, 22 Jan 2015 11:44:09 +0100 X-Original-Date: Thu, 22 Jan 2015 10:44:09 +0000 X-Originating-IP: 130.133.170.201 X-ZEDAT-Hint: XA X-purgate: clean X-purgate-type: clean X-purgate-ID: 151147::1421923452-00000D35-5623C8F0/0/0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000087, version=1.2.4 X-Spam-Flag: NO X-Spam-Status: No, score=-50.0 required=5.0 tests=ALL_TRUSTED,HTML_MESSAGE X-Spam-Checker-Version: SpamAssassin 3.4.0 on Tokelau.ZEDAT.FU-Berlin.DE X-Spam-Level: Subject: Re: [Seqan-dev] Two Alignment Questions X-BeenThere: seqan-dev@lists.fu-berlin.de X-Mailman-Version: 2.1.16 Precedence: list Reply-To: SeqAn Development List-Id: SeqAn Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 Jan 2015 10:44:15 -0000 --_000_CDC44F9C54E24DB2A01B625924E13601fritzbox_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgQnJldHQsDQoNCk9uIDIyIEphbiAyMDE1LCBhdCAwODo0NywgQnJldHQgQm93bWFuIDxibmJv d21hbkBnbWFpbC5jb208bWFpbHRvOmJuYm93bWFuQGdtYWlsLmNvbT4+IHdyb3RlOg0KDQpHaXZl biBhbiBBbGlnbm1lbnQsIGhvdyBkbyBJIGdldCB0aGUgIlRHYXBTcGVjIiBvZiB0aGUgdW5kZXJs eWluZyByb3dzPw0KDQpJJ3ZlIHN1Ym1pdHRlZCBhIHB1bGwgcmVxdWVzdCB3aXRoIHRoZSBmaXJz dCBoYWxmIG9mIHRoZSBmZWF0dXJlcyBJJ2QgbGlrZSwgbm93IEknbSB0cnlpbmcgdG8gZ2V0IG1h dGNoIHN0cmluZ3MgdG8gd29yayBpbiBhIGdlbmVyYWxpemVkIHdheS4NCg0KVGhhbmsgeW91IGZv ciB0aGUgUFIuIEkgd2lsbCBtZXJnZSBpdCBpbnRvIGRldmVsb3AgdG9kYXksIGFzIHdlIHBsYW4g dG8gcmVsZWFzZSB2ZXJ5IHNvb24gdGhpcyBub3QgZ29pbmcgaW50byB0aGUgY3VycmVudCBtYXN0 ZXIuDQoNCg0KSSdtIHRyeWluZyB0byBpbXBsZW1lbnQgYSBmdW5jdGlvbnMgY2FsbGVkICJhbGln bm1lbnRJZGVudGl0eVN0cmluZyIsIHdoaWNoIHRha2VzIGVpdGhlciBhbiBBbGlnbiBvYmplY3Qs IG9yIGp1c3QgdHdvIEdhcHMgb2JqZWN0cyByZXByZXNlbnRpbmcgcm93cywgYW5kIGdlbmVyYXRp b25zIGEgbWF0Y2ggc3RyaW5nIHdpdGggc3BlY2lmaWVkIGNoYXJhY3RlcnMgZm9yIG1hdGNoZXMg LyBtaXNtYXRjaGVzIC8gZ2Fwcy4gIEl0IHdvcmtzIGp1c3QgZmluZSB3aGVuIEkgd29yayBkaXJl Y3RseSBmcm9tIGEgc3VwcGxpZWQgQWxpZ25tZW50IG9yIHBhaXIgb2YgUm93cywgYnV0IEkgY2Fu J3QgdHJhbnNsYXRlIGFuIEFsaWdubWVudCBvYmplY3QgZG93biBpbnRvIGl0cyBjb21wb25lbnQg Um93cyBzbyBJIGNhbiBhdm9pZCBkdXBsaWNhdGluZyBjb2RlLg0KDQpUaGUgc2Vjb25kIHRlbXBs YXRlIGFyZ3VtZW50IG9mIEFsaWduIHNwZWNpZmllcyB0aGUgdW5kZXJseWluZyBHYXBzIHN0cnVj dHVyZS4NClNvIHR5cGVuYW1lIFJvdzxBbGlnbjxEbmFTdHJpbmcsIFRHYXBzU3BlYz4gPjo6VHlw ZSA9PSBHYXBzPERuYVN0cmluZywgVEdhcHNTcGVjPi4NCg0KU291cmNlPFRHYXBzPiBnZXRzIG1l IHRoZSBhbHBoYWJldCwgYW5kIEkgYXNzdW1lIHRoZXJlIGlzIGEgTWV0YWZ1bmN0aW9uIHRvIGdl dCB0aGUgU3BlYyBvZiBhIEdhcHMvUm93IG9iamVjdCwgYnV0IHRoZSBkb2N1bWVudGF0aW9uIGlz bid0IGNsZWFyIGFuZCBuZWl0aGVyIFZhbHVlPD4gbm9yIEdldFZhbHVlPD4gYXBwZWFyIHRvIGdp dmUgbWUgd2hhdCBJIG5lZWQuDQoNClNvdXJjZTxUR2Fwcz4gaG9wZWZ1bGx5IGdpdmVzIHlvdSB0 aGUgdHlwZSBvZiB0aGUgc291cmNlLCBvdGhlcndpc2UgcGxlYXNlIHJhaXNlIGFuIGlzc3VlIG9u IGdpdGh1Yi5jb20vc2VxYW4vc2VxYW4vaXNzdWVzPGh0dHA6Ly9naXRodWIuY29tL3NlcWFuL3Nl cWFuL2lzc3Vlcz4uIDopDQpBcHBhcmVudGx5IHRoZXJlIGlzIG5vIE1ldGFmdW5jdGlvbiB0byBy ZWNlaXZlIHRoZSBTcGVjIHR5cGUgb2YgdGhlIEdhcHMgbm9yIHRoZSBBbGlnbiBzdHJ1Y3R1cmUu DQoNCiIiIg0KdGVtcGxhdGUgPHR5cGVuYW1lIFRBbHBoYWJldCwgdHlwZW5hbWUgVEFsaWduU3Bl Yz4NClN0cmluZzxjaGFyPiBhbGlnbm1lbnRJZGVudGl0eVN0cmluZyhBbGlnbjxUQWxwaGFiZXQs IFRBbGlnblNwZWM+IGNvbnN0ICYgYWxpZ24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyIGNvbnN0IG1hdGNoQ2hhciwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgbWlzbWF0Y2hDaGFyLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCBnYXBDaGFyKQ0Kew0KICAgIC8vIENo ZWNrIHRoYXQgdGhlIHN1cHBsaWVkIGFsaWdubWVudCBpcyBwYWlyd2lzZQ0KICAgIFNFUUFOX0FT U0VSVF9FUV9NU0cobGVuZ3RoKHJvd3MoYWxpZ24pKSwgMnUsICJPbmx5IHdvcmtzIHdpdGggcGFp cndpc2UgYWxpZ25tZW50cy4iKTsNCg0KICAgIHR5cGVkZWYgQWxpZ248VEFscGhhYmV0LCBUQWxp Z25TcGVjPiBjb25zdCBUQWxpZ247DQogICAgdHlwZWRlZiB0eXBlbmFtZSBSb3c8VEFsaWduPjo6 VHlwZSBUR2FwczsNCiAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlPFRHYXBzPjo6VHlwZSBUR2Fw U3BlYzsNClJlbW92ZSB0aGUgb25lIGxpbmUgYWJvdmUuDQoNCiAgICAvLyBUcnkgIzENCiAgICAv L1RHYXBzIHF1ZXJ5Um93ID0gcm93KGFsaWduLCAwKTsNCiAgICAvL1RHYXBzIHJlZmVyZW5jZVJv dyA9IHJvdyhhbGlnbiwgMSk7DQpUaGlzIG9uZSB3b3VsZCBiZSBjb3JyZWN0Lg0KDQogICAgLy8g VHJ5ICMyDQogICAgR2FwczxUQWxwaGFiZXQsIFRHYXBTcGVjPiBxdWVyeVJvdyA9IHJvdyhhbGln biwgMCk7DQogICAgR2FwczxUQWxwaGFiZXQsIFRHYXBTcGVjPiByZWZlcmVuY2VSb3cgPSByb3co YWxpZ24sIDEpOw0KVmFsdWUgb2YgVEdhcHMgd291bGQgZ2l2ZSB5b3UgdGhlIFZhbHVlIG9mIHRo ZSBTb3VyY2Ugb2YgR2FwcyB3aGljaCBpcyB0aGUgYWxwaGFiZXQgdHlwZSB1c2VkIGZvciB0aGUg c291cmNlLg0KDQogICAgcmV0dXJuIGFsaWdubWVudFNpbWlsYXJpdHlTdHJpbmcocXVlcnlSb3cs IHJlZmVyZW5jZVJvdywgc2NvcmluZ1NjaGVtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYXRjaENoYXIsIG1pc21hdGNoQ2hhciwgZ2FwQ2hhcik7DQp9DQoiIiINCg0K V2hhdCBhbSBJIG1pc3Npbmc/DQpGcm9tIHRoZSBjb2RlIGFib3ZlIEkgZG9u4oCZdCBzZWUsIHdo eSBleGFjdGx5IHlvdSBuZWVkIHRoZSBHYXBzIHR5cGUuDQpXb3VsZG7igJl0IHRoaXMgaGVyZSBi ZSBzdWZmaWNpZW50Pw0KQlRXIGl0IHNob3VsZCByZWFkIEFsaWduPFRTb3VyY2UsIFRHYXBzU3Bl Yz4uIFRoZSBmaXJzdCB0ZW1wbGF0ZSBhcmd1bWVudCBvZiBBbGlnbiBpcyB0aGUgdHlwZSBvZiB0 aGUgc291cmNlLg0KDQpgYGANCnRlbXBsYXRlIDx0eXBlbmFtZSBUU291cmNlLCB0eXBlbmFtZSBU R2Fwc1NwZWM+DQpTdHJpbmc8Y2hhcj4gYWxpZ25tZW50SWRlbnRpdHlTdHJpbmcoQWxpZ248VFNv dXJjZSwgVEdhcHNTcGVjPiBjb25zdCAmIGFsaWduLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgY29uc3QgbWF0Y2hDaGFyLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgbWlzbWF0Y2hDaGFyLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgZ2FwQ2hhcikNCnsNCiAgICAvLyBDaGVj ayB0aGF0IHRoZSBzdXBwbGllZCBhbGlnbm1lbnQgaXMgcGFpcndpc2UNCiAgICBTRVFBTl9BU1NF UlRfRVFfTVNHKGxlbmd0aChyb3dzKGFsaWduKSksIDJ1LCAiT25seSB3b3JrcyB3aXRoIHBhaXJ3 aXNlIGFsaWdubWVudHMu4oCdKTsNCg0KICByZXR1cm4gYWxpZ25tZW50U2ltaWxhcml0eVN0cmlu Zyhyb3coYWxpZ24sMCksIHJvdyhhbGlnbiwxKSwgc2NvcmluZ1NjaGVtZSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hDaGFyLCBtaXNtYXRjaENoYXIsIGdhcENoYXIp Ow0KYGBgDQoNCmNoZWVycywNCg0KUmVuw6kNCg0KDQoNCi1CcmV0dA0KDQoNCk9uIE1vbiwgSmFu IDEyLCAyMDE1IGF0IDE6MTEgQU0sIEhvbHRncmV3ZSwgTWFudWVsIDxtYW51ZWwuaG9sdGdyZXdl QGZ1LWJlcmxpbi5kZTxtYWlsdG86bWFudWVsLmhvbHRncmV3ZUBmdS1iZXJsaW4uZGU+PiB3cm90 ZToNCkhpIEJyZXR0LA0KDQp3b3VsZCB5b3UgYmUgd2lsbGluZyB0byBwZXJmb3JtIHRoaXMgZXh0 ZW5zaW9uIHlvdXJzZWxmPyBZb3UgY291bGQgc2VuZCBhIHBhdGNoIG9yIGEgR2l0aHViIHB1bGwg cmVxdWVzdCB3aXRoIHRoZSByZXN1bHRzLg0KDQpDaGVlcnMsDQpNYW51ZWwNCg0KX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18NCkZyb206IEJyZXR0IEJvd21hbiBbYm5ib3dtYW5AZ21h aWwuY29tPG1haWx0bzpibmJvd21hbkBnbWFpbC5jb20+XQ0KU2VudDogU3VuZGF5LCBKYW51YXJ5 IDExLCAyMDE1IDY6NDcgUE0NCg0KVG86IFNlcUFuIERldmVsb3BtZW50DQpTdWJqZWN0OiBSZTog W1NlcWFuLWRldl0gVHdvIEFsaWdubWVudCBRdWVzdGlvbnMNCg0KTWFudWVsLA0KDQpJIHNhdyB0 aGUgQWxpZ25tZW50U3RhdHMgY2xhc3Mgd2hlbiBJIHdhcyBkaWdnaW5nIGFyb3VuZCBpbiB0aGUg QVBJIGZvciB3aGF0IEkgbmVlZCwgYnV0IEknbSBhZnJhaWQgaXQgZG9lc24ndCBxdWl0ZSBmaXQ6 DQotSXQgZG9lc24ndCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gSW5zZXJ0aW9ucyBhbmQgRGVsZXRp b25zICh0aGUgcmF0aW8gb2Ygd2hpY2ggaXMgaW1wb3J0YW50IGZvciBkaWFnbm9zaW5nIHNvbWUg c2VxdWVuY2luZyBwcm9ibGVtcyBhbmQgYmFkIGFsaWdubWVudHMpDQotSXQgZG9lc24ndCBhcHBl YXIgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGFsaWdubWVudCBzdHJpbmcsIG1lYW5pbmcgSSBz dGlsbCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBhbGlnbm1lbnQgdG8gZ2VuZXJhdGUgYWx0 ZXJuYXRlIHJlcHJlc2VudGF0aW9ucy4NCg0KLUINCg0KT24gU2F0LCBKYW4gMTAsIDIwMTUgYXQg MjoyMSBBTSwgSG9sdGdyZXdlLCBNYW51ZWwgPG1hbnVlbC5ob2x0Z3Jld2VAZnUtYmVybGluLmRl PG1haWx0bzptYW51ZWwuaG9sdGdyZXdlQGZ1LWJlcmxpbi5kZT4+IHdyb3RlOg0KRG9lcyB0aGlz IGhlbHA/DQoNCmh0dHA6Ly9kb2NzLnNlcWFuLmRlL3NlcWFuL2RldmVsb3AvP3A9Y29tcHV0ZUFs aWdubWVudFN0YXRzaHR0cDovL2RvY3Muc2VxYW4uZGUvc2VxYW4vZGV2ZWxvcC8/cD1jb21wdXRl QWxpZ25tZW50U3RhdHMNCg0KKm0NCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18N CkZyb206IEJyZXR0IEJvd21hbiBbYm5ib3dtYW5AZ21haWwuY29tPG1haWx0bzpibmJvd21hbkBn bWFpbC5jb20+XQ0KU2VudDogU2F0dXJkYXksIEphbnVhcnkgMTAsIDIwMTUgMzoxNiBBTQ0KVG86 IFNlcUFuIERldmVsb3BtZW50DQpTdWJqZWN0OiBSZTogW1NlcWFuLWRldl0gVHdvIEFsaWdubWVu dCBRdWVzdGlvbnMNCg0KVGhhbmtzIFJlbmUsDQoNCj5XaGF0IGRvIHlvdSBtZWFuIGJ5IGFjY3Vy YWN5PyBXaGF0IGRvIHlvdSBuZWVkIGV4YWN0bHk/DQoNCldoYXQgSSBhbSB0cnlpbmcgdG8gZG8g aXMgd3JpdGUgYSB0b29sIHRvIGFsaWduIHNpbmdsZS1tb2xlY3VsZSBzZXF1ZW5jaW5nIGRhdGEg KFBhY0JpbywgT3hmb3JkIE5hbm9wb3JlKSB0byByZWZlcmVuY2UgZ2Vub21lcy4gIEZvciB3aGlj aCB0aGUgYWxpZ25tZW50IGFjY3VyYWN5IGFuZCB0aGUgYnJlYWstZG93biBvZiB0aGUgdHlwZXMg b2YgZXJyb3JzIGlzIHZlcnkgdXNlZnVsLCBhcyB0aGUgcGVyLXJlYWQgcXVhbGl0eSBvbiBib3Ro IHBsYXRmb3JtcyB2YXJpZXMgc3Vic3RhbnRpYWxseS4NCg0KV2hhdCBJJ2QgbGlrZSBhcmUgbWVt YmVyIG1ldGhvZHMgb3IgZnVuY3Rpb25zLW9uLWFsaWdubWVudC1vYmplY3RzIHRvIGdpdmUgdGhl IGZvbGxvd2luZzoNCi1UaGUgbnVtYmVyIG9mIGJhc2UtcGFpciBtYXRjaGVzIGluIHRoZSBhbGln bm1lbnQNCi1UaGUgbnVtYmVyIG9mIG1pc21hdGNoZXMgaW4gdGhlIGFsaWdubWVudA0KLVRoZSBu dW1iZXIgb2YgaW5zZXJ0aW9ucyBpbiB0aGUgYWxpZ25tZW50DQotVGhlIG51bWJlciBvZiBkZWxl dGlvbnMgaW4gdGhlIGFsaWdubWVudA0KLVRoZSBhbGlnbm1lbnQgc3RyaW5nIGFzIHJlcHJlc2Vu dGVkIGJ5IHRoZSBBbGlnbiBvYmplY3QncyB0b1N0cmluZygpIG1ldGhvZA0KDQpUaGUgZmlyc3Qg Zm91ciBJIG5lZWQgdG8gc3VtbWFyaXplIHRoZSBzaW1pbGFyaXR5IG9mIGFuIGFsaWdubWVudCAo aS5lLiBpbmRlbHMgYXJlIGxpa2VseSBzZXF1ZW5jaW5nIGVycm9yLCB3aGVyZSBhcyBtaXNtYXRj aGVzIGFyZSBsaWtlbHkgbm90KSwgd2hpbGUgdGhlIGxhdHRlciBpcyBoZWxwZnVsIGluIGNyZWF0 aW5nIGFsdGVybmF0ZSByZXByZXNlbnRhdGlvbnMgZm9yIGFsaWdubWVudHMNCg0KRG9lcyB0aGF0 IGhlbHA/DQoNCi1CDQoNCk9uIEZyaSwgSmFuIDksIDIwMTUgYXQgMTI6NTEgQU0sIFJhaG4sIFJl bsOpIDxyZW5lLm1hZXJrZXJAZnUtYmVybGluLmRlPG1haWx0bzpyZW5lLm1hZXJrZXJAZnUtYmVy bGluLmRlPj4gd3JvdGU6DQpIZXkgQnJldHQsDQoNCg0KT24gMzAgRGVjIDIwMTQsIGF0IDIxOjI5 LCBCcmV0dCBCb3dtYW4gPGJuYm93bWFuQGdtYWlsLmNvbTxtYWlsdG86Ym5ib3dtYW5AZ21haWwu Y29tPj4gd3JvdGU6DQoNCjEpICBJcyB0aGVyZSBhbiBlYXN5IHdheSB0byBnZXQgdGhlIGFjY3Vy YWN5IG9mIGFuIEFsaWdubWVudCBvYmplY3QsIG9yIGlzIHRoYXQgc29tZXRoaW5nIEkgbmVlZCB0 byBjYWxjdWxhdGUgbXlzZWxmPw0KDQpXaGF0IGRvIHlvdSBtZWFuIGJ5IGFjY3VyYWN5PyBXaGF0 IGRvIHlvdSBuZWVkIGV4YWN0bHk/DQpUaGUgQWxpZ24gZGF0YSBzdHJ1Y3R1cmUgc2ltcGx5IHJl cHJlc2VudHMgdGhlIGNvbXB1dGVkIGFsaWdubWVudC4gVGhlIHNjb3JlIGlzIHJldHVybmVkIGJ5 IHRoZSBnbG9iYWwgYWxpZ24gaW50ZXJmYWNlLg0KVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBt YW5pcHVsYXRlIHRoZSBhbGlnbm1lbnQgb2YgZ2FwcyBhbmQgdG8gY29tcHV0ZSBhbGwgYmVzdCB0 cmFjZWJhY2sgcGF0aHMuIEhvd2V2ZXIsIHRob3NlIG9wdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQg b24gdGhlIGhpZ2ggbGV2ZWwgaW50ZXJmYWNlcyBidXQgb25seSBpbiB0aGUgY29yZSBvZiB0aGUg YWxpZ25tZW50IGVuZ2luZS4NCklmIHlvdSB0ZWxsIG1lIHdoYXQgeW91IG5lZWQgZXhhY3RseSB3 ZSBjYW4gdGhpbmsgb2YgYSB3YXkgdG8gbWFrZSB0aG9zZSBpbnRlcmZhY2VzIHB1YmxpYyB3aGlj aCBpcyBwbGFubmVkIGZvciB0aGUgZnV0dXJlIGFueXdheS4NCkJ1dCB0aGVyZSBpcyBubyBtZXRo b2QgdGVsbGluZyB5b3UgdGhlIGFjY3VyYWN5IG9mIHRoZSDigJxjb21wdXRlZCIgYWxpZ25tZW50 IGNvbXBhcmVkIHRvIGFub3RoZXIg4oCccmVhbOKAnSBhbGlnbm1lbnQuIFBsZWFzZSwgZ2l2ZSBt ZSBzb21lIHNwZWNpZmljcyBhbmQgd2Ugc2VlIGlmIHdlIGNhbiBpbmNvcnBvcmF0ZSB0aGlzLg0K Li4uDQpXZWxsLCB0aGVyZSBpcyBhIG1ldGhvZCBpbiB0aGUgdG9vbCBzZXFhbi10Y29mZmVlLCB3 aGljaCBjaGVja3MgaWYgdGhlIGNvbXB1dGVkIGFsaWdubWVudCBpcyBjb3JyZWN0IGdpdmVuIHRo ZSBzY29yZSBtb2RlbCBhbmQgdGhlIGFsaWdubWVudCwgYnV0IEkgYmVsaWV2ZSB0aGlzIGlzIG5v dCB3aGF0IHlvdSBhcmUgbG9va2luZyBmb3I/DQoNCg0KMikgIGJhbmRlZENoYWluQWxpZ25tZW50 IGZhaWxzIG1lc3NpbHkgd2hlbiBnaXZlbiBhIFZlY3RvciBvZiBTZWVkcyBpbnN0ZWFkIG9mIGEg U3RyaW5nLCB3aGVyZSBhcyBvdGhlciBmdW5jdGlvbnMgd29yayBmaW5lIChlLmcuIGNoYWluU2Vl ZHNHbG9iYWxseSkuICBXaHkgZG9lcyBpdCB3b3JrIGZvciB0aGUgb25lIGFuZCBub3QgdGhlIG90 aGVyPyAgRXhjZXJwdCBmcm9tIGVycm9yIG1lc3NhZ2UgYmVsb3cuDQoNCiIiIg0KL3Vzci9pbmNs dWRlL3NlcWFuL3NlZWRzL2JhbmRlZF9jaGFpbl9hbGlnbm1lbnRfaW1wbC5oOjExOTU6NTc6IGVy cm9yOiBjYWxsIHRvICdlbmQnIGlzIGFtYmlndW91cw0KICAgIFNFUUFOX0FTU0VSVChpdEVuZCAh PSBzdGF0aWNfY2FzdDxUU2VlZFNldEl0ZXJhdG9yPihlbmQoc2VlZFNldCkpKTsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+DQovdXNy L2luY2x1ZGUvc2VxYW4vYmFzaWMvZGVidWdfdGVzdF9zeXN0ZW0uaDoyMTQ2OjQ0OiBub3RlOiBl eHBhbmRlZCBmcm9tIG1hY3JvICdTRVFBTl9BU1NFUlQnDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoX2FyZzEpLCAjIF9hcmcxKSkgeyAgICAgICAgICAgXA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4NCi91c3IvaW5jbHVkZS9z ZXFhbi9zZWVkcy9iYW5kZWRfY2hhaW5fYWxpZ25tZW50X3Byb2ZpbGUuaDoyNTQ6MTY6IG5vdGU6 IGluIGluc3RhbnRpYXRpb24gb2YgZnVuY3Rpb24gdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24NCg0K Li4uDQoNCi91c3IvaW5jbHVkZS9zZXFhbi9zZWVkcy9iYW5kZWRfY2hhaW5fYWxpZ25tZW50Lmg6 MjA3OjEyOiBub3RlOiBpbiBpbnN0YW50aWF0aW9uIG9mIGZ1bmN0aW9uIHRlbXBsYXRlIHNwZWNp YWxpemF0aW9uDQogICAgICAnc2VxYW46OmJhbmRlZENoYWluQWxpZ25tZW50PHNlcWFuOjpTdHJp bmc8c2VxYW46OlNpbXBsZVR5cGU8dW5zaWduZWQgY2hhciwgc2VxYW46OkRuYTVfPiwgc2VxYW46 OkFsbG9jPHZvaWQ+ID4sIHNlcWFuOjpUYWc8c2VxYW46OkFycmF5R2Fwc18+LA0KICAgICAgc3Rk Ojp2ZWN0b3I8c2VxYW46OlNlZWQ8c2VxYW46OlRhZzxzZXFhbjo6U2ltcGxlXz4sIHNlcWFuOjpE ZWZhdWx0U2VlZENvbmZpZz4sIHN0ZDo6YWxsb2NhdG9yPHNlcWFuOjpTZWVkPHNlcWFuOjpUYWc8 c2VxYW46OlNpbXBsZV8+LCBzZXFhbjo6RGVmYXVsdFNlZWRDb25maWc+ID4gPiwgbG9uZywNCiAg ICAgIHNlcWFuOjpUYWc8c2VxYW46OlNpbXBsZV8+LCBzZXFhbjo6VGFnPHNlcWFuOjpTaW1wbGVf PiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHNlcWFuOjpUYWc8c2VxYW46OkRlZmF1bHRf PiA+JyByZXF1ZXN0ZWQgaGVyZQ0KICAgIHJldHVybiBiYW5kZWRDaGFpbkFsaWdubWVudChhbGln biwgc2VlZFNldCwgc2NvcmVTY2hlbWUsIHNjb3JlU2NoZW1lLCBhbGlnbkNvbmZpZywgYmFuZEV4 dGVuc2lvbik7DQogICAgICAgICAgIF4NCi9ob21lL2Jib3dtYW4vZ2l0L1NSU0xJL3NyYy9DKysv U3BhcnNlQWxpZ25tZW50Mi5jcHA6NzI6MjU6IG5vdGU6IGluIGluc3RhbnRpYXRpb24gb2YgZnVu Y3Rpb24gdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24NCiAgICAgICdzZXFhbjo6YmFuZGVkQ2hhaW5B bGlnbm1lbnQ8c2VxYW46OlN0cmluZzxzZXFhbjo6U2ltcGxlVHlwZTx1bnNpZ25lZCBjaGFyLCBz ZXFhbjo6RG5hNV8+LCBzZXFhbjo6QWxsb2M8dm9pZD4gPiwgc2VxYW46OlRhZzxzZXFhbjo6QXJy YXlHYXBzXz4sDQogICAgICBzdGQ6OnZlY3RvcjxzZXFhbjo6U2VlZDxzZXFhbjo6VGFnPHNlcWFu OjpTaW1wbGVfPiwgc2VxYW46OkRlZmF1bHRTZWVkQ29uZmlnPiwgc3RkOjphbGxvY2F0b3I8c2Vx YW46OlNlZWQ8c2VxYW46OlRhZzxzZXFhbjo6U2ltcGxlXz4sIHNlcWFuOjpEZWZhdWx0U2VlZENv bmZpZz4gPiA+LCBsb25nLA0KICAgICAgc2VxYW46OlRhZzxzZXFhbjo6U2ltcGxlXz4sIGZhbHNl LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBzZXFhbjo6VGFnPHNlcWFuOjpEZWZhdWx0Xz4gPicgcmVx dWVzdGVkIGhlcmUNCiAgICAgICAgbG9uZyBhbG5TY29yZSA9IGJhbmRlZENoYWluQWxpZ25tZW50 KGFsaWdubWVudCwgKnNlZWRDaGFpbiwgc2NvcmluZywgZ2xvYmFsQ29uZmlnKTsNCiAgICAgICAg ICAgICAgICAgICAgICAgIF4NCi9ob21lL2Jib3dtYW4vZ2l0L1NSU0xJL3NyYy9DKysvbWFpbi5j cHA6OTU6Mjc6IG5vdGU6IGluIGluc3RhbnRpYXRpb24gb2YgZnVuY3Rpb24gdGVtcGxhdGUgc3Bl Y2lhbGl6YXRpb24gJ1JlZkNoYWluc1RvQWxpZ25tZW50czxzZXFhbjo6QWxpZ25Db25maWc8ZmFs c2UsIHRydWUsIHRydWUsIGZhbHNlLA0KICAgICAgc2VxYW46OlRhZzxzZXFhbjo6RGVmYXVsdF8+ ID4gKCk+JyByZXF1ZXN0ZWQgaGVyZQ0KICAgICAgICBhdXRvIGFsaWdubWVudHMgPSBSZWZDaGFp bnNUb0FsaWdubWVudHMocmVjb3JkLT5TZXEsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF4N Ci91c3IvaW5jbHVkZS9zZXFhbi9zZWVkcy9iYW5kZWRfY2hhaW5fYWxpZ25tZW50X2ltcGwuaDo1 ODM6MTogbm90ZTogY2FuZGlkYXRlIHRlbXBsYXRlIGlnbm9yZWQ6IHN1YnN0aXR1dGlvbiBmYWls dXJlIFt3aXRoIFRTZWVkU2V0ID0gc3RkOjp2ZWN0b3I8c2VxYW46OlNlZWQ8c2VxYW46OlRhZzxz ZXFhbjo6U2ltcGxlXz4sDQogICAgICBzZXFhbjo6RGVmYXVsdFNlZWRDb25maWc+LCBzdGQ6OmFs bG9jYXRvcjxzZXFhbjo6U2VlZDxzZXFhbjo6VGFnPHNlcWFuOjpTaW1wbGVfPiwgc2VxYW46OkRl ZmF1bHRTZWVkQ29uZmlnPiA+ID5dDQpfZmluZEZpcnN0QW5jaG9yKFRTZWVkU2V0IGNvbnN0ICYg c2VlZFNldCwgaW50IGJhbmRFeHRlbnNpb24pDQoi4oCdIg0KDQpPaywgdGhpcyBzZWVtcyB0byBi ZSBhIGJ1ZyB0byBtZS4NCknigJlsbCBoYXZlIGEgbG9vayBpbnRvIGl0Lg0KDQoNClNpbmNlcmVs eSwNCi1CcmV0dA0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18NCnNlcWFuLWRldiBtYWlsaW5nIGxpc3QNCnNlcWFuLWRldkBsaXN0cy5mdS1iZXJsaW4uZGU8 bWFpbHRvOnNlcWFuLWRldkBsaXN0cy5mdS1iZXJsaW4uZGU+DQpodHRwczovL2xpc3RzLmZ1LWJl cmxpbi5kZS9saXN0aW5mby9zZXFhbi1kZXYNCg0KQmVzdHMsDQoNClJlbsOpDQoNCi0tLQ0KDQpS ZW7DqSBSYWhuDQpQaC5ELiBTdHVkZW50DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KVGVsOiAgKCs0OSkgMzAgODM4IDc1Mjc3PHRlbDolMjglMkI0OSUyOSUyMDMwJTIwODM4JTIw NzUyNzc+DQpNYWlsOiByZW5lLnJhaG5AZnUtYmVybGluLmRlPG1haWx0bzpyZW5lLnJhaG5AZnUt YmVybGluLmRlPg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkluc3RpdHV0ZSBv ZiBDb21wdXRlciBTY2llbmNlDQpBbGdvcml0aG1pYyBCaW9pbmZvcm1hdGljcyAoQUJJKQ0KLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZyZWllIFVuaXZlcnNpdMOkdCBCZXJsaW4N ClRha3VzdHJhw59lIDkNCjE0MTk1IEJlcmxpbg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCg0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xw0Kc2VxYW4tZGV2IG1haWxpbmcgbGlzdA0Kc2VxYW4tZGV2QGxpc3RzLmZ1LWJlcmxpbi5kZTxt YWlsdG86c2VxYW4tZGV2QGxpc3RzLmZ1LWJlcmxpbi5kZT4NCmh0dHBzOi8vbGlzdHMuZnUtYmVy bGluLmRlL2xpc3RpbmZvL3NlcWFuLWRldg0KDQoNCg0KX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18NCnNlcWFuLWRldiBtYWlsaW5nIGxpc3QNCnNlcWFuLWRl dkBsaXN0cy5mdS1iZXJsaW4uZGU8bWFpbHRvOnNlcWFuLWRldkBsaXN0cy5mdS1iZXJsaW4uZGU+ DQpodHRwczovL2xpc3RzLmZ1LWJlcmxpbi5kZS9saXN0aW5mby9zZXFhbi1kZXYNCg0KDQoNCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQpzZXFhbi1kZXYg bWFpbGluZyBsaXN0DQpzZXFhbi1kZXZAbGlzdHMuZnUtYmVybGluLmRlPG1haWx0bzpzZXFhbi1k ZXZAbGlzdHMuZnUtYmVybGluLmRlPg0KaHR0cHM6Ly9saXN0cy5mdS1iZXJsaW4uZGUvbGlzdGlu Zm8vc2VxYW4tZGV2DQoNCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18NCnNlcWFuLWRldiBtYWlsaW5nIGxpc3QNCnNlcWFuLWRldkBsaXN0cy5mdS1iZXJs aW4uZGU8bWFpbHRvOnNlcWFuLWRldkBsaXN0cy5mdS1iZXJsaW4uZGU+DQpodHRwczovL2xpc3Rz LmZ1LWJlcmxpbi5kZS9saXN0aW5mby9zZXFhbi1kZXYNCg0KLS0tDQoNClJlbsOpIFJhaG4NClBo LkQuIFN0dWRlbnQNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpUZWw6ICAoKzQ5 KSAzMCA4MzggNzUyNzcNCk1haWw6IHJlbmUucmFobkBmdS1iZXJsaW4uZGU8bWFpbHRvOnJlbmUu cmFobkBmdS1iZXJsaW4uZGU+DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KSW5z dGl0dXRlIG9mIENvbXB1dGVyIFNjaWVuY2UNCkFsZ29yaXRobWljIEJpb2luZm9ybWF0aWNzIChB QkkpDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRnJlaWUgVW5pdmVyc2l0w6R0 IEJlcmxpbg0KVGFrdXN0cmHDn2UgOQ0KMTQxOTUgQmVybGluDQotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KDQo= --_000_CDC44F9C54E24DB2A01B625924E13601fritzbox_ Content-Type: text/html; charset="utf-8" Content-ID: <6A4FCB29F80C7E4DA51F0944BC45528E@campus.fu-berlin.de> Content-Transfer-Encoding: base64 PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5IHN0eWxlPSJ3b3JkLXdy YXA6IGJyZWFrLXdvcmQ7IC13ZWJraXQtbmJzcC1tb2RlOiBzcGFjZTsgLXdlYmtpdC1saW5lLWJy ZWFrOiBhZnRlci13aGl0ZS1zcGFjZTsiIGNsYXNzPSIiPg0KSGkgQnJldHQsDQo8ZGl2IGNsYXNz PSIiPjxiciBjbGFzcz0iIj4NCjxkaXY+DQo8YmxvY2txdW90ZSB0eXBlPSJjaXRlIiBjbGFzcz0i Ij4NCjxkaXYgY2xhc3M9IiI+T24gMjIgSmFuIDIwMTUsIGF0IDA4OjQ3LCBCcmV0dCBCb3dtYW4g Jmx0OzxhIGhyZWY9Im1haWx0bzpibmJvd21hbkBnbWFpbC5jb20iIGNsYXNzPSIiPmJuYm93bWFu QGdtYWlsLmNvbTwvYT4mZ3Q7IHdyb3RlOjwvZGl2Pg0KPGJyIGNsYXNzPSJBcHBsZS1pbnRlcmNo YW5nZS1uZXdsaW5lIj4NCjxkaXYgY2xhc3M9IiI+DQo8ZGl2IGRpcj0ibHRyIiBjbGFzcz0iIj4N CjxkaXYgY2xhc3M9IiI+R2l2ZW4gYW4gQWxpZ25tZW50LCBob3cgZG8gSSBnZXQgdGhlICZxdW90 O1RHYXBTcGVjJnF1b3Q7IG9mIHRoZSB1bmRlcmx5aW5nIHJvd3M/PC9kaXY+DQo8ZGl2IGNsYXNz PSIiPjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0KSSd2ZSBzdWJtaXR0ZWQgYSBwdWxsIHJlcXVlc3Qg d2l0aCB0aGUgZmlyc3QgaGFsZiBvZiB0aGUgZmVhdHVyZXMgSSdkIGxpa2UsIG5vdyBJJ20gdHJ5 aW5nIHRvIGdldCBtYXRjaCBzdHJpbmdzIHRvIHdvcmsgaW4gYSBnZW5lcmFsaXplZCB3YXkuPC9k aXY+DQo8L2Rpdj4NCjwvYmxvY2txdW90ZT4NCjxkaXY+PGJyIGNsYXNzPSIiPg0KPC9kaXY+DQpU aGFuayB5b3UgZm9yIHRoZSBQUi4gSSB3aWxsIG1lcmdlIGl0IGludG8gZGV2ZWxvcCB0b2RheSwg YXMgd2UgcGxhbiB0byByZWxlYXNlIHZlcnkgc29vbiB0aGlzIG5vdCBnb2luZyBpbnRvIHRoZSBj dXJyZW50IG1hc3Rlci48L2Rpdj4NCjxkaXY+PGJyIGNsYXNzPSIiPg0KPGJsb2NrcXVvdGUgdHlw ZT0iY2l0ZSIgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPg0KPGRpdiBkaXI9Imx0ciIgY2xhc3M9 IiI+DQo8ZGl2IGNsYXNzPSIiPjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj5J J20gdHJ5aW5nIHRvIGltcGxlbWVudCBhIGZ1bmN0aW9ucyBjYWxsZWQgJnF1b3Q7YWxpZ25tZW50 SWRlbnRpdHlTdHJpbmcmcXVvdDssIHdoaWNoIHRha2VzIGVpdGhlciBhbiBBbGlnbiBvYmplY3Qs IG9yIGp1c3QgdHdvIEdhcHMgb2JqZWN0cyByZXByZXNlbnRpbmcgcm93cywgYW5kIGdlbmVyYXRp b25zIGEgbWF0Y2ggc3RyaW5nIHdpdGggc3BlY2lmaWVkIGNoYXJhY3RlcnMgZm9yIG1hdGNoZXMg LyBtaXNtYXRjaGVzIC8gZ2Fwcy4mbmJzcDsgSXQNCiB3b3JrcyBqdXN0IGZpbmUgd2hlbiBJIHdv cmsgZGlyZWN0bHkgZnJvbSBhIHN1cHBsaWVkIEFsaWdubWVudCBvciBwYWlyIG9mIFJvd3MsIGJ1 dCBJIGNhbid0IHRyYW5zbGF0ZSBhbiBBbGlnbm1lbnQgb2JqZWN0IGRvd24gaW50byBpdHMgY29t cG9uZW50IFJvd3Mgc28gSSBjYW4gYXZvaWQgZHVwbGljYXRpbmcgY29kZS48L2Rpdj4NCjwvZGl2 Pg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+DQo8ZGl2PjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0KVGhl IHNlY29uZCB0ZW1wbGF0ZSBhcmd1bWVudCBvZiBBbGlnbiBzcGVjaWZpZXMgdGhlIHVuZGVybHlp bmcgR2FwcyBzdHJ1Y3R1cmUuJm5ic3A7PC9kaXY+DQo8ZGl2PlNvIHR5cGVuYW1lIFJvdyZsdDtB bGlnbiZsdDtEbmFTdHJpbmcsIFRHYXBzU3BlYyZndDsgJmd0Ozo6VHlwZSA9PSBHYXBzJmx0O0Ru YVN0cmluZywmbmJzcDtUR2Fwc1NwZWMmZ3Q7LiZuYnNwOzxiciBjbGFzcz0iIj4NCjxibG9ja3F1 b3RlIHR5cGU9ImNpdGUiIGNsYXNzPSIiPg0KPGRpdiBjbGFzcz0iIj4NCjxkaXYgZGlyPSJsdHIi IGNsYXNzPSIiPg0KPGRpdiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXYgY2xh c3M9IiI+U291cmNlJmx0O1RHYXBzJmd0OyBnZXRzIG1lIHRoZSBhbHBoYWJldCwgYW5kIEkgYXNz dW1lIHRoZXJlIGlzIGEgTWV0YWZ1bmN0aW9uIHRvIGdldCB0aGUgU3BlYyBvZiBhIEdhcHMvUm93 IG9iamVjdCwgYnV0IHRoZSBkb2N1bWVudGF0aW9uIGlzbid0IGNsZWFyIGFuZCBuZWl0aGVyIFZh bHVlJmx0OyZndDsgbm9yIEdldFZhbHVlJmx0OyZndDsgYXBwZWFyIHRvIGdpdmUgbWUgd2hhdCBJ IG5lZWQuJm5ic3A7PC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9ibG9ja3F1b3RlPg0KPGRpdj48 YnIgY2xhc3M9IiI+DQo8L2Rpdj4NClNvdXJjZSZsdDtUR2FwcyZndDsgaG9wZWZ1bGx5IGdpdmVz IHlvdSB0aGUgdHlwZSBvZiB0aGUgc291cmNlLCBvdGhlcndpc2UgcGxlYXNlIHJhaXNlIGFuIGlz c3VlIG9uDQo8YSBocmVmPSJodHRwOi8vZ2l0aHViLmNvbS9zZXFhbi9zZXFhbi9pc3N1ZXMiIGNs YXNzPSIiPmdpdGh1Yi5jb20vc2VxYW4vc2VxYW4vaXNzdWVzPC9hPi4gOik8L2Rpdj4NCjxkaXY+ QXBwYXJlbnRseSB0aGVyZSBpcyBubyBNZXRhZnVuY3Rpb24gdG8gcmVjZWl2ZSB0aGUgU3BlYyB0 eXBlIG9mIHRoZSBHYXBzIG5vciB0aGUgQWxpZ24gc3RydWN0dXJlLjwvZGl2Pg0KPGRpdj48YnIg Y2xhc3M9IiI+DQo8YmxvY2txdW90ZSB0eXBlPSJjaXRlIiBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9 IiI+DQo8ZGl2IGRpcj0ibHRyIiBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9IiI+DQo8ZGl2IGNsYXNz PSIiPg0KPGRpdiBjbGFzcz0iIj4mcXVvdDsmcXVvdDsmcXVvdDs8L2Rpdj4NCjxkaXYgY2xhc3M9 IiI+DQo8ZGl2IGNsYXNzPSIiPnRlbXBsYXRlICZsdDt0eXBlbmFtZSBUQWxwaGFiZXQsIHR5cGVu YW1lIFRBbGlnblNwZWMmZ3Q7PC9kaXY+DQo8ZGl2IGNsYXNzPSIiPlN0cmluZyZsdDtjaGFyJmd0 OyBhbGlnbm1lbnRJZGVudGl0eVN0cmluZyhBbGlnbiZsdDtUQWxwaGFiZXQsIFRBbGlnblNwZWMm Z3Q7IGNvbnN0ICZhbXA7IGFsaWduLDwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4mbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7Y2hhciBjb25zdCBtYXRjaENoYXIsPGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8 ZGl2IGNsYXNzPSIiPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtjaGFyIGNvbnN0IG1pc21hdGNo Q2hhciw8YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwO2NoYXIgY29uc3QgZ2FwQ2hhcik8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+ezwvZGl2 Pg0KPGRpdiBjbGFzcz0iIj4mbmJzcDsgJm5ic3A7IC8vIENoZWNrIHRoYXQgdGhlIHN1cHBsaWVk IGFsaWdubWVudCBpcyBwYWlyd2lzZTwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4mbmJzcDsgJm5ic3A7 IFNFUUFOX0FTU0VSVF9FUV9NU0cobGVuZ3RoKHJvd3MoYWxpZ24pKSwgMnUsICZxdW90O09ubHkg d29ya3Mgd2l0aCBwYWlyd2lzZSBhbGlnbm1lbnRzLiZxdW90Oyk7PC9kaXY+DQo8ZGl2IGNsYXNz PSIiPjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4mbmJzcDsgJm5ic3A7IHR5 cGVkZWYgQWxpZ24mbHQ7VEFscGhhYmV0LCBUQWxpZ25TcGVjJmd0OyBjb25zdCBUQWxpZ247PC9k aXY+DQo8ZGl2IGNsYXNzPSIiPiZuYnNwOyAmbmJzcDsgdHlwZWRlZiB0eXBlbmFtZSBSb3cmbHQ7 VEFsaWduJmd0Ozo6VHlwZSBUR2Fwczs8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+Jm5ic3A7ICZuYnNw OyB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlJmx0O1RHYXBzJmd0Ozo6VHlwZSBUR2FwU3BlYzs8L2Rp dj4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+ DQpSZW1vdmUgdGhlIG9uZSBsaW5lIGFib3ZlLjxiciBjbGFzcz0iIj4NCjxibG9ja3F1b3RlIHR5 cGU9ImNpdGUiIGNsYXNzPSIiPg0KPGRpdiBjbGFzcz0iIj4NCjxkaXYgZGlyPSJsdHIiIGNsYXNz PSIiPg0KPGRpdiBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPg0KPGRp diBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+Jm5ic3A7ICZu YnNwOyAvLyBUcnkgIzEmbmJzcDs8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIi Pg0KPGRpdiBjbGFzcz0iIj4mbmJzcDsgJm5ic3A7IC8vVEdhcHMgcXVlcnlSb3cgPSByb3coYWxp Z24sIDApOzwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4mbmJzcDsgJm5ic3A7IC8vVEdhcHMgcmVmZXJl bmNlUm93ID0gcm93KGFsaWduLCAxKTs8L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwv ZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9ibG9ja3F1b3RlPg0KVGhpcyBvbmUgd291 bGQgYmUgY29ycmVjdC4NCjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiIGNsYXNzPSIiPg0KPGRpdiBj bGFzcz0iIj4NCjxkaXYgZGlyPSJsdHIiIGNsYXNzPSIiPg0KPGRpdiBjbGFzcz0iIj4NCjxkaXYg Y2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPg0KPGRpdiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8 L2Rpdj4NCjxkaXYgY2xhc3M9IiI+Jm5ic3A7ICZuYnNwOyAvLyBUcnkgIzI8L2Rpdj4NCjxkaXYg Y2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPiZuYnNwOyAmbmJzcDsgR2FwcyZsdDtUQWxwaGFiZXQs IFRHYXBTcGVjJmd0OyBxdWVyeVJvdyA9IHJvdyhhbGlnbiwgMCk7PC9kaXY+DQo8ZGl2IGNsYXNz PSIiPiZuYnNwOyAmbmJzcDsgR2FwcyZsdDtUQWxwaGFiZXQsIFRHYXBTcGVjJmd0OyByZWZlcmVu Y2VSb3cgPSByb3coYWxpZ24sIDEpOzwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9k aXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9ibG9ja3F1b3RlPg0KVmFsdWUgb2YgVEdhcHMgd291bGQg Z2l2ZSB5b3UgdGhlIFZhbHVlIG9mIHRoZSBTb3VyY2Ugb2YgR2FwcyB3aGljaCBpcyB0aGUgYWxw aGFiZXQgdHlwZSB1c2VkIGZvciB0aGUgc291cmNlLjxiciBjbGFzcz0iIj4NCjxibG9ja3F1b3Rl IHR5cGU9ImNpdGUiIGNsYXNzPSIiPg0KPGRpdiBjbGFzcz0iIj4NCjxkaXYgZGlyPSJsdHIiIGNs YXNzPSIiPg0KPGRpdiBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPg0K PGRpdiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+Jm5ic3A7 ICZuYnNwOyByZXR1cm4gYWxpZ25tZW50U2ltaWxhcml0eVN0cmluZyhxdWVyeVJvdywgcmVmZXJl bmNlUm93LCBzY29yaW5nU2NoZW1lLDwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4mbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDttYXRjaENoYXIsIG1pc21hdGNoQ2hhciwgZ2FwQ2hhcik7PC9kaXY+DQo8ZGl2IGNsYXNz PSIiPn08L2Rpdj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4mcXVvdDsmcXVvdDsmcXVvdDs8L2Rp dj4NCjwvZGl2Pg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0K PGRpdiBjbGFzcz0iIj5XaGF0IGFtIEkgbWlzc2luZz88L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8 L2Jsb2NrcXVvdGU+DQo8ZGl2PkZyb20gdGhlIGNvZGUgYWJvdmUgSSBkb27igJl0IHNlZSwgd2h5 IGV4YWN0bHkgeW91IG5lZWQgdGhlIEdhcHMgdHlwZS48L2Rpdj4NCjxkaXY+V291bGRu4oCZdCB0 aGlzIGhlcmUgYmUgc3VmZmljaWVudD88L2Rpdj4NCjxkaXY+QlRXIGl0IHNob3VsZCByZWFkIEFs aWduJmx0O1RTb3VyY2UsIFRHYXBzU3BlYyZndDsuIFRoZSBmaXJzdCB0ZW1wbGF0ZSBhcmd1bWVu dCBvZiBBbGlnbiBpcyB0aGUgdHlwZSBvZiB0aGUgc291cmNlLjwvZGl2Pg0KPGRpdj48YnIgY2xh c3M9IiI+DQo8L2Rpdj4NCjxkaXY+PGZvbnQgZmFjZT0iQ291cmllciIgY2xhc3M9IiI+YGBgPC9m b250PjwvZGl2Pg0KPC9kaXY+DQo8ZGl2Pjxmb250IGZhY2U9IkNvdXJpZXIiIGNsYXNzPSIiPnRl bXBsYXRlICZsdDt0eXBlbmFtZSBUU291cmNlLCB0eXBlbmFtZSBUR2Fwc1NwZWMmZ3Q7PC9mb250 PjwvZGl2Pg0KPGRpdj48Zm9udCBmYWNlPSJDb3VyaWVyIiBjbGFzcz0iIj5TdHJpbmcmbHQ7Y2hh ciZndDsgYWxpZ25tZW50SWRlbnRpdHlTdHJpbmcoQWxpZ24mbHQ7PC9mb250PjxzcGFuIHN0eWxl PSJmb250LWZhbWlseTogQ291cmllcjsiIGNsYXNzPSIiPlRTb3VyY2U8L3NwYW4+PGZvbnQgZmFj ZT0iQ291cmllciIgY2xhc3M9IiI+LCZuYnNwOzwvZm9udD48c3BhbiBzdHlsZT0iZm9udC1mYW1p bHk6IENvdXJpZXI7IiBjbGFzcz0iIj5UR2Fwc1NwZWM8L3NwYW4+PGZvbnQgZmFjZT0iQ291cmll ciIgY2xhc3M9IiI+Jmd0Ow0KIGNvbnN0ICZhbXA7IGFsaWduLDwvZm9udD48L2Rpdj4NCjxkaXY+ PGZvbnQgZmFjZT0iQ291cmllciIgY2xhc3M9IiI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Y2hhciBjb25z dCBtYXRjaENoYXIsPC9mb250PjwvZGl2Pg0KPGRpdj48Zm9udCBmYWNlPSJDb3VyaWVyIiBjbGFz cz0iIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtjaGFyIGNvbnN0IG1pc21hdGNoQ2hhciw8L2ZvbnQ+PC9k aXY+DQo8ZGl2Pjxmb250IGZhY2U9IkNvdXJpZXIiIGNsYXNzPSIiPiZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw O2NoYXIgY29uc3QgZ2FwQ2hhcik8L2ZvbnQ+PC9kaXY+DQo8ZGl2Pjxmb250IGZhY2U9IkNvdXJp ZXIiIGNsYXNzPSIiPns8L2ZvbnQ+PC9kaXY+DQo8ZGl2Pjxmb250IGZhY2U9IkNvdXJpZXIiIGNs YXNzPSIiPiZuYnNwOyZuYnNwOyAmbmJzcDsvLyBDaGVjayB0aGF0IHRoZSBzdXBwbGllZCBhbGln bm1lbnQgaXMgcGFpcndpc2U8L2ZvbnQ+PC9kaXY+DQo8ZGl2Pjxmb250IGZhY2U9IkNvdXJpZXIi IGNsYXNzPSIiPiZuYnNwOyZuYnNwOyAmbmJzcDtTRVFBTl9BU1NFUlRfRVFfTVNHKGxlbmd0aChy b3dzKGFsaWduKSksIDJ1LCAmcXVvdDtPbmx5IHdvcmtzIHdpdGggcGFpcndpc2UgYWxpZ25tZW50 cy7igJ0pOzwvZm9udD48L2Rpdj4NCjxkaXY+PGZvbnQgZmFjZT0iQ291cmllciIgY2xhc3M9IiI+ Jm5ic3A7Jm5ic3A7PC9mb250PjwvZGl2Pg0KPGRpdj48Zm9udCBmYWNlPSJDb3VyaWVyIiBjbGFz cz0iIj4mbmJzcDsmbmJzcDtyZXR1cm4gYWxpZ25tZW50U2ltaWxhcml0eVN0cmluZyhyb3coYWxp Z24sMCksIHJvdyhhbGlnbiwxKSwgc2NvcmluZ1NjaGVtZSw8L2ZvbnQ+PC9kaXY+DQo8ZGl2Pjxm b250IGZhY2U9IkNvdXJpZXIiIGNsYXNzPSIiPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7bWF0Y2hDaGFyLCBtaXNtYXRj aENoYXIsIGdhcENoYXIpOzwvZm9udD48L2Rpdj4NCjxkaXY+PGZvbnQgZmFjZT0iQ291cmllciIg Y2xhc3M9IiI+YGBgPC9mb250PjwvZGl2Pg0KPGRpdj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxk aXY+Y2hlZXJzLDwvZGl2Pg0KPGRpdj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXY+UmVuw6k8 YnIgY2xhc3M9IiI+DQo8ZGl2PjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0KPGJyIGNsYXNzPSIiPg0K PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPg0KPGRpdiBk aXI9Imx0ciIgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0K PGRpdiBjbGFzcz0iIj4tQnJldHQ8L2Rpdj4NCjxpbWcgc3JjPSJodHRwOi8vdC5zaWduYWxlZHVl LmNvbS9lMXQvby81L2YxOGRRaGIwUzdrczhkRE1QYlcybjB4NmwyQjlnWHJON3NLajZ2NGZoamxW Unp2Ylk4cVNRR0NWUnpIMmIxcGN0R0ZXNGJYbHMzMWsxSDZIMD9zaT00NzM4OTgwNzE3Nzg5MTg0 JmFtcDtwaT0wNThhY2M5Zi1hYmZiLTQ2OGQtZTRlMi1lZmNhNmRiZjJiYmUiIHdpZHRoPSIxIiBo ZWlnaHQ9IjEiIHN0eWxlPSJkaXNwbGF5Om5vbmUiIGNsYXNzPSIiPjwvZGl2Pg0KPGRpdiBjbGFz cz0iZ21haWxfZXh0cmEiPjxiciBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj5P biBNb24sIEphbiAxMiwgMjAxNSBhdCAxOjExIEFNLCBIb2x0Z3Jld2UsIE1hbnVlbCA8c3BhbiBk aXI9Imx0ciIgY2xhc3M9IiI+DQombHQ7PGEgaHJlZj0ibWFpbHRvOm1hbnVlbC5ob2x0Z3Jld2VA ZnUtYmVybGluLmRlIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9IiI+bWFudWVsLmhvbHRncmV3ZUBm dS1iZXJsaW4uZGU8L2E+Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJyIGNsYXNzPSIiPg0KPGJsb2NrcXVv dGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxl ZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+DQo8ZGl2IGNsYXNzPSIiPg0KPGRp diBzdHlsZT0iZGlyZWN0aW9uOiBsdHI7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGZvbnQtc2l6ZTog MTBwdDsiIGNsYXNzPSIiPkhpIEJyZXR0LA0KPGRpdiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8 L2Rpdj4NCjxkaXYgY2xhc3M9IiI+d291bGQgeW91IGJlIHdpbGxpbmcgdG8gcGVyZm9ybSB0aGlz IGV4dGVuc2lvbiB5b3Vyc2VsZj8gWW91IGNvdWxkIHNlbmQgYSBwYXRjaCBvciBhIEdpdGh1YiBw dWxsIHJlcXVlc3Qgd2l0aCB0aGUgcmVzdWx0cy48L2Rpdj4NCjxkaXYgY2xhc3M9IiI+PGJyIGNs YXNzPSIiPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPkNoZWVycyw8L2Rpdj4NCjxkaXYgY2xhc3M9 IiI+TWFudWVsPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPjxiciBjbGFzcz0iIj4NCjxkaXYgc3R5bGU9 ImZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJzsgZm9udC1zaXplOiAxNnB4OyIgY2xhc3M9 IiI+DQo8aHIgY2xhc3M9IiI+DQo8ZGl2IHN0eWxlPSJkaXJlY3Rpb246bHRyIiBjbGFzcz0iIj48 Zm9udCBmYWNlPSJUYWhvbWEiIGNsYXNzPSIiPjxiIGNsYXNzPSIiPkZyb206PC9iPiBCcmV0dCBC b3dtYW4gWzxhIGhyZWY9Im1haWx0bzpibmJvd21hbkBnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5r IiBjbGFzcz0iIj5ibmJvd21hbkBnbWFpbC5jb208L2E+XTxiciBjbGFzcz0iIj4NCjxiIGNsYXNz PSIiPlNlbnQ6PC9iPiBTdW5kYXksIEphbnVhcnkgMTEsIDIwMTUgNjo0NyBQTQ0KPGRpdiBjbGFz cz0iIj4NCjxkaXYgY2xhc3M9Img1Ij48YnIgY2xhc3M9IiI+DQo8YiBjbGFzcz0iIj5Ubzo8L2I+ IFNlcUFuIERldmVsb3BtZW50PGJyIGNsYXNzPSIiPg0KPGIgY2xhc3M9IiI+U3ViamVjdDo8L2I+ IFJlOiBbU2VxYW4tZGV2XSBUd28gQWxpZ25tZW50IFF1ZXN0aW9uczxiciBjbGFzcz0iIj4NCjwv ZGl2Pg0KPC9kaXY+DQo8L2ZvbnQ+PGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSIi Pg0KPGRpdiBjbGFzcz0iaDUiPg0KPGRpdiBjbGFzcz0iIj48L2Rpdj4NCjxkaXYgY2xhc3M9IiI+ DQo8ZGl2IGRpcj0ibHRyIiBjbGFzcz0iIj5NYW51ZWwsDQo8ZGl2IGNsYXNzPSIiPjxiciBjbGFz cz0iIj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj5JIHNhdyB0aGUgQWxpZ25tZW50U3RhdHMgY2xh c3Mgd2hlbiBJIHdhcyBkaWdnaW5nIGFyb3VuZCBpbiB0aGUgQVBJIGZvciB3aGF0IEkgbmVlZCwg YnV0IEknbSBhZnJhaWQgaXQgZG9lc24ndCBxdWl0ZSBmaXQ6PC9kaXY+DQo8ZGl2IGNsYXNzPSIi Pi1JdCBkb2Vzbid0IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBJbnNlcnRpb25zIGFuZCBEZWxldGlv bnMgKHRoZSByYXRpbyBvZiB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIGRpYWdub3Npbmcgc29tZSBz ZXF1ZW5jaW5nIHByb2JsZW1zIGFuZCBiYWQgYWxpZ25tZW50cyk8L2Rpdj4NCjxkaXYgY2xhc3M9 IiI+LUl0IGRvZXNuJ3QgYXBwZWFyIHRvIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBhbGlnbm1lbnQg c3RyaW5nLCBtZWFuaW5nIEkgc3RpbGwgbmVlZCB0byB0cmF2ZXJzZSB0aGUgd2hvbGUgYWxpZ25t ZW50IHRvIGdlbmVyYXRlIGFsdGVybmF0ZSByZXByZXNlbnRhdGlvbnMuPC9kaXY+DQo8ZGl2IGNs YXNzPSIiPjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4tQjwvZGl2Pg0KPC9k aXY+DQo8ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyIGNsYXNzPSIiPg0KPGRpdiBjbGFzcz0i Z21haWxfcXVvdGUiPk9uIFNhdCwgSmFuIDEwLCAyMDE1IGF0IDI6MjEgQU0sIEhvbHRncmV3ZSwg TWFudWVsIDxzcGFuIGRpcj0ibHRyIiBjbGFzcz0iIj4NCiZsdDs8YSBocmVmPSJtYWlsdG86bWFu dWVsLmhvbHRncmV3ZUBmdS1iZXJsaW4uZGUiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iIj5tYW51 ZWwuaG9sdGdyZXdlQGZ1LWJlcmxpbi5kZTwvYT4mZ3Q7PC9zcGFuPiB3cm90ZTo8YnIgY2xhc3M9 IiI+DQo8YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MCAwIDAg LjhleDtib3JkZXItbGVmdDoxcHggI2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij4NCjxkaXYg Y2xhc3M9IiI+DQo8ZGl2IHN0eWxlPSJkaXJlY3Rpb246IGx0cjsgZm9udC1mYW1pbHk6IFRhaG9t YTsgZm9udC1zaXplOiAxMHB0OyIgY2xhc3M9IiI+RG9lcyB0aGlzIGhlbHA/DQo8ZGl2IGNsYXNz PSIiPjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj48YSBocmVmPSJodHRwOi8v ZG9jcy5zZXFhbi5kZS9zZXFhbi9kZXZlbG9wLz9wPWNvbXB1dGVBbGlnbm1lbnRTdGF0cyIgdGFy Z2V0PSJfYmxhbmsiIGNsYXNzPSIiPmh0dHA6Ly9kb2NzLnNlcWFuLmRlL3NlcWFuL2RldmVsb3Av P3A9Y29tcHV0ZUFsaWdubWVudFN0YXRzPC9hPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnNlcWFuLmRl L3NlcWFuL2RldmVsb3AvP3A9Y29tcHV0ZUFsaWdubWVudFN0YXRzIiB0YXJnZXQ9Il9ibGFuayIg Y2xhc3M9IiI+aHR0cDovL2RvY3Muc2VxYW4uZGUvc2VxYW4vZGV2ZWxvcC8/cD1jb21wdXRlQWxp Z25tZW50U3RhdHM8L2E+PC9kaXY+DQo8ZGl2IGNsYXNzPSIiPjxiciBjbGFzcz0iIj4NCjwvZGl2 Pg0KPGRpdiBjbGFzcz0iIj4qbTwvZGl2Pg0KPGRpdiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8 ZGl2IHN0eWxlPSJmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbic7IGZvbnQtc2l6ZTogMTZw eDsiIGNsYXNzPSIiPg0KPGhyIGNsYXNzPSIiPg0KPGRpdiBzdHlsZT0iZGlyZWN0aW9uOmx0ciIg Y2xhc3M9IiI+PGZvbnQgZmFjZT0iVGFob21hIiBjbGFzcz0iIj48YiBjbGFzcz0iIj5Gcm9tOjwv Yj4gQnJldHQgQm93bWFuIFs8YSBocmVmPSJtYWlsdG86Ym5ib3dtYW5AZ21haWwuY29tIiB0YXJn ZXQ9Il9ibGFuayIgY2xhc3M9IiI+Ym5ib3dtYW5AZ21haWwuY29tPC9hPl08YnIgY2xhc3M9IiI+ DQo8YiBjbGFzcz0iIj5TZW50OjwvYj4gU2F0dXJkYXksIEphbnVhcnkgMTAsIDIwMTUgMzoxNiBB TTxiciBjbGFzcz0iIj4NCjxiIGNsYXNzPSIiPlRvOjwvYj4gU2VxQW4gRGV2ZWxvcG1lbnQ8YnIg Y2xhc3M9IiI+DQo8YiBjbGFzcz0iIj5TdWJqZWN0OjwvYj4gUmU6IFtTZXFhbi1kZXZdIFR3byBB bGlnbm1lbnQgUXVlc3Rpb25zPGJyIGNsYXNzPSIiPg0KPC9mb250PjxiciBjbGFzcz0iIj4NCjwv ZGl2Pg0KPGRpdiBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPjwvZGl2 Pg0KPGRpdiBjbGFzcz0iIj4NCjxkaXYgZGlyPSJsdHIiIGNsYXNzPSIiPg0KPGRpdiBzdHlsZT0i Zm9udC1zaXplOjEzcHgiIGNsYXNzPSIiPlRoYW5rcyBSZW5lLDwvZGl2Pg0KPGRpdiBzdHlsZT0i Zm9udC1zaXplOjEzcHgiIGNsYXNzPSIiPjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0KPGRpdiBzdHls ZT0iZm9udC1zaXplOjEzcHgiIGNsYXNzPSIiPiZndDtXaGF0IGRvIHlvdSBtZWFuIGJ5IGFjY3Vy YWN5PyBXaGF0IGRvIHlvdSBuZWVkIGV4YWN0bHk/Jm5ic3A7PC9kaXY+DQo8ZGl2IHN0eWxlPSJm b250LXNpemU6MTNweCIgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8ZGl2IHN0eWxl PSJmb250LXNpemU6MTNweCIgY2xhc3M9IiI+V2hhdCBJIGFtIHRyeWluZyB0byBkbyBpcyB3cml0 ZSBhIHRvb2wgdG8gYWxpZ24gc2luZ2xlLW1vbGVjdWxlIHNlcXVlbmNpbmcgZGF0YSAoUGFjQmlv LCBPeGZvcmQgTmFub3BvcmUpIHRvIHJlZmVyZW5jZSBnZW5vbWVzLiZuYnNwOyBGb3Igd2hpY2gg dGhlIGFsaWdubWVudCBhY2N1cmFjeSBhbmQgdGhlIGJyZWFrLWRvd24gb2YgdGhlIHR5cGVzIG9m IGVycm9ycyBpcyB2ZXJ5IHVzZWZ1bCwNCiBhcyB0aGUgcGVyLXJlYWQgcXVhbGl0eSBvbiBib3Ro IHBsYXRmb3JtcyB2YXJpZXMgc3Vic3RhbnRpYWxseS48L2Rpdj4NCjxkaXYgc3R5bGU9ImZvbnQt c2l6ZToxM3B4IiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXYgc3R5bGU9ImZv bnQtc2l6ZToxM3B4IiBjbGFzcz0iIj5XaGF0IEknZCBsaWtlIGFyZSBtZW1iZXIgbWV0aG9kcyBv ciBmdW5jdGlvbnMtb24tYWxpZ25tZW50LW9iamVjdHMgdG8gZ2l2ZSB0aGUgZm9sbG93aW5nOjwv ZGl2Pg0KPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHgiIGNsYXNzPSIiPi1UaGUgbnVtYmVyIG9m IGJhc2UtcGFpciBtYXRjaGVzIGluIHRoZSBhbGlnbm1lbnQ8L2Rpdj4NCjxkaXYgc3R5bGU9ImZv bnQtc2l6ZToxM3B4IiBjbGFzcz0iIj4tVGhlIG51bWJlciBvZiBtaXNtYXRjaGVzIGluIHRoZSBh bGlnbm1lbnQ8L2Rpdj4NCjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4IiBjbGFzcz0iIj4tVGhl IG51bWJlciBvZiBpbnNlcnRpb25zIGluIHRoZSBhbGlnbm1lbnQ8L2Rpdj4NCjxkaXYgc3R5bGU9 ImZvbnQtc2l6ZToxM3B4IiBjbGFzcz0iIj4tVGhlIG51bWJlciBvZiBkZWxldGlvbnMgaW4gdGhl IGFsaWdubWVudDwvZGl2Pg0KPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHgiIGNsYXNzPSIiPi1U aGUgYWxpZ25tZW50IHN0cmluZyBhcyByZXByZXNlbnRlZCBieSB0aGUgQWxpZ24gb2JqZWN0J3Mg dG9TdHJpbmcoKSBtZXRob2Q8L2Rpdj4NCjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4IiBjbGFz cz0iIj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4IiBj bGFzcz0iIj5UaGUgZmlyc3QgZm91ciBJIG5lZWQgdG8gc3VtbWFyaXplIHRoZSBzaW1pbGFyaXR5 IG9mIGFuIGFsaWdubWVudCAoaS5lLiBpbmRlbHMgYXJlIGxpa2VseSBzZXF1ZW5jaW5nIGVycm9y LCB3aGVyZSBhcyBtaXNtYXRjaGVzIGFyZSBsaWtlbHkgbm90KSwgd2hpbGUgdGhlIGxhdHRlciBp cyBoZWxwZnVsIGluIGNyZWF0aW5nIGFsdGVybmF0ZSByZXByZXNlbnRhdGlvbnMgZm9yIGFsaWdu bWVudHM8L2Rpdj4NCjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4IiBjbGFzcz0iIj48YnIgY2xh c3M9IiI+DQo8L2Rpdj4NCjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4IiBjbGFzcz0iIj5Eb2Vz IHRoYXQgaGVscD88L2Rpdj4NCjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4IiBjbGFzcz0iIj48 YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4IiBjbGFzcz0i Ij4tQjwvZGl2Pg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyIGNsYXNzPSIi Pg0KPGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPk9uIEZyaSwgSmFuIDksIDIwMTUgYXQgMTI6NTEg QU0sIFJhaG4sIFJlbsOpIDxzcGFuIGRpcj0ibHRyIiBjbGFzcz0iIj4NCiZsdDs8YSBocmVmPSJt YWlsdG86cmVuZS5tYWVya2VyQGZ1LWJlcmxpbi5kZSIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSIi PnJlbmUubWFlcmtlckBmdS1iZXJsaW4uZGU8L2E+Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJyIGNsYXNz PSIiPg0KPGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAw IC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+DQo8ZGl2 IHN0eWxlPSJ3b3JkLXdyYXA6YnJlYWstd29yZCIgY2xhc3M9IiI+SGV5IEJyZXR0LCZuYnNwOw0K PGRpdiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+PGJyIGNs YXNzPSIiPg0KPGRpdiBjbGFzcz0iIj48c3BhbiBjbGFzcz0iIj4NCjxibG9ja3F1b3RlIHR5cGU9 ImNpdGUiIGNsYXNzPSIiPg0KPGRpdiBjbGFzcz0iIj5PbiAzMCBEZWMgMjAxNCwgYXQgMjE6Mjks IEJyZXR0IEJvd21hbiAmbHQ7PGEgaHJlZj0ibWFpbHRvOmJuYm93bWFuQGdtYWlsLmNvbSIgdGFy Z2V0PSJfYmxhbmsiIGNsYXNzPSIiPmJuYm93bWFuQGdtYWlsLmNvbTwvYT4mZ3Q7IHdyb3RlOjwv ZGl2Pg0KPGJyIGNsYXNzPSIiPg0KPGRpdiBjbGFzcz0iIj4NCjxkaXYgZGlyPSJsdHIiIGNsYXNz PSIiPg0KPGRpdiBjbGFzcz0iIj4xKSAmbmJzcDtJcyB0aGVyZSBhbiBlYXN5IHdheSB0byBnZXQg dGhlIGFjY3VyYWN5IG9mIGFuIEFsaWdubWVudCBvYmplY3QsIG9yIGlzIHRoYXQgc29tZXRoaW5n IEkgbmVlZCB0byBjYWxjdWxhdGUgbXlzZWxmPzwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvYmxv Y2txdW90ZT4NCjxkaXYgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8L3NwYW4+DQo8 ZGl2IGNsYXNzPSIiPldoYXQgZG8geW91IG1lYW4gYnkgYWNjdXJhY3k/IFdoYXQgZG8geW91IG5l ZWQgZXhhY3RseT8mbmJzcDs8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+VGhlIEFsaWduIGRhdGEgc3Ry dWN0dXJlIHNpbXBseSByZXByZXNlbnRzIHRoZSBjb21wdXRlZCBhbGlnbm1lbnQuIFRoZSBzY29y ZSBpcyByZXR1cm5lZCBieSB0aGUgZ2xvYmFsIGFsaWduIGludGVyZmFjZS4mbmJzcDs8L2Rpdj4N CjxkaXYgY2xhc3M9IiI+VGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBtYW5pcHVsYXRlIHRoZSBh bGlnbm1lbnQgb2YgZ2FwcyBhbmQgdG8gY29tcHV0ZSBhbGwgYmVzdCB0cmFjZWJhY2sgcGF0aHMu IEhvd2V2ZXIsIHRob3NlIG9wdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdGhlIGhpZ2ggbGV2 ZWwgaW50ZXJmYWNlcyBidXQgb25seSBpbiB0aGUgY29yZSBvZiB0aGUgYWxpZ25tZW50IGVuZ2lu ZS4mbmJzcDs8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+SWYgeW91IHRlbGwgbWUgd2hhdCB5b3UgbmVl ZCBleGFjdGx5IHdlIGNhbiB0aGluayBvZiBhIHdheSB0byBtYWtlIHRob3NlIGludGVyZmFjZXMg cHVibGljIHdoaWNoIGlzIHBsYW5uZWQgZm9yIHRoZSBmdXR1cmUgYW55d2F5LjwvZGl2Pg0KPGRp diBjbGFzcz0iIj5CdXQgdGhlcmUgaXMgbm8gbWV0aG9kIHRlbGxpbmcgeW91IHRoZSBhY2N1cmFj eSBvZiB0aGUg4oCcY29tcHV0ZWQmcXVvdDsgYWxpZ25tZW50IGNvbXBhcmVkIHRvIGFub3RoZXIg 4oCccmVhbOKAnSBhbGlnbm1lbnQuIFBsZWFzZSwgZ2l2ZSBtZSBzb21lIHNwZWNpZmljcyBhbmQg d2Ugc2VlIGlmIHdlIGNhbiBpbmNvcnBvcmF0ZSB0aGlzLjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4u Li48L2Rpdj4NCjxkaXYgY2xhc3M9IiI+V2VsbCwgdGhlcmUgaXMgYSBtZXRob2QgaW4gdGhlIHRv b2wgc2VxYW4tdGNvZmZlZSwgd2hpY2ggY2hlY2tzIGlmIHRoZSBjb21wdXRlZCBhbGlnbm1lbnQg aXMgY29ycmVjdCBnaXZlbiB0aGUgc2NvcmUgbW9kZWwgYW5kIHRoZSBhbGlnbm1lbnQsIGJ1dCBJ IGJlbGlldmUgdGhpcyBpcyBub3Qgd2hhdCB5b3UgYXJlIGxvb2tpbmcgZm9yPzwvZGl2Pg0KPGJy IGNsYXNzPSIiPg0KPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2xhc3M9IiI+DQo8ZGl2IGNsYXNz PSIiPg0KPGRpdiBkaXI9Imx0ciIgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPg0KPGRpdiBjbGFz cz0iIj4NCjxkaXYgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSIi PjIpICZuYnNwO2JhbmRlZENoYWluQWxpZ25tZW50IGZhaWxzIG1lc3NpbHkgd2hlbiBnaXZlbiBh IFZlY3RvciBvZiBTZWVkcyBpbnN0ZWFkIG9mIGEgU3RyaW5nLCB3aGVyZSBhcyBvdGhlciBmdW5j dGlvbnMgd29yayBmaW5lIChlLmcuIGNoYWluU2VlZHNHbG9iYWxseSkuJm5ic3A7IFdoeSBkb2Vz IGl0IHdvcmsgZm9yIHRoZSBvbmUgYW5kIG5vdCB0aGUgb3RoZXI/Jm5ic3A7IEV4Y2VycHQgZnJv bSBlcnJvciBtZXNzYWdlIGJlbG93LjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+ DQo8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+JnF1b3Q7JnF1b3Q7JnF1b3Q7PC9kaXY+DQo8ZGl2IGNs YXNzPSIiPg0KPGRpdiBjbGFzcz0iIj4vdXNyL2luY2x1ZGUvc2VxYW4vc2VlZHMvYmFuZGVkX2No YWluX2FsaWdubWVudF9pbXBsLmg6MTE5NTo1NzogZXJyb3I6IGNhbGwgdG8gJ2VuZCcgaXMgYW1i aWd1b3VzPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPiZuYnNwOyAmbmJzcDsgU0VRQU5fQVNTRVJUKGl0 RW5kICE9IHN0YXRpY19jYXN0Jmx0O1RTZWVkU2V0SXRlcmF0b3ImZ3Q7KGVuZChzZWVkU2V0KSkp OzwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgXn5+PC9kaXY+ DQo8ZGl2IGNsYXNzPSIiPi91c3IvaW5jbHVkZS9zZXFhbi9iYXNpYy9kZWJ1Z190ZXN0X3N5c3Rl bS5oOjIxNDY6NDQ6IG5vdGU6IGV4cGFuZGVkIGZyb20gbWFjcm8gJ1NFUUFOX0FTU0VSVCc8L2Rp dj4NCjxkaXYgY2xhc3M9IiI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgKF9hcmcx KSwgIyBfYXJnMSkpIHsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBcPC9kaXY+ DQo8ZGl2IGNsYXNzPSIiPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO148 L2Rpdj4NCjxkaXYgY2xhc3M9IiI+L3Vzci9pbmNsdWRlL3NlcWFuL3NlZWRzL2JhbmRlZF9jaGFp bl9hbGlnbm1lbnRfcHJvZmlsZS5oOjI1NDoxNjogbm90ZTogaW4gaW5zdGFudGlhdGlvbiBvZiBm dW5jdGlvbiB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj48YnIg Y2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+Li4uPC9kaXY+DQo8ZGl2IGNsYXNzPSIi PjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4vdXNyL2luY2x1ZGUvc2VxYW4v c2VlZHMvYmFuZGVkX2NoYWluX2FsaWdubWVudC5oOjIwNzoxMjogbm90ZTogaW4gaW5zdGFudGlh dGlvbiBvZiBmdW5jdGlvbiB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbjwvZGl2Pg0KPGRpdiBjbGFz cz0iIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAnc2VxYW46OmJhbmRlZENoYWluQWxpZ25tZW50Jmx0 O3NlcWFuOjpTdHJpbmcmbHQ7c2VxYW46OlNpbXBsZVR5cGUmbHQ7dW5zaWduZWQgY2hhciwgc2Vx YW46OkRuYTVfJmd0Oywgc2VxYW46OkFsbG9jJmx0O3ZvaWQmZ3Q7ICZndDssIHNlcWFuOjpUYWcm bHQ7c2VxYW46OkFycmF5R2Fwc18mZ3Q7LDwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4mbmJzcDsgJm5i c3A7ICZuYnNwOyBzdGQ6OnZlY3RvciZsdDtzZXFhbjo6U2VlZCZsdDtzZXFhbjo6VGFnJmx0O3Nl cWFuOjpTaW1wbGVfJmd0Oywgc2VxYW46OkRlZmF1bHRTZWVkQ29uZmlnJmd0Oywgc3RkOjphbGxv Y2F0b3ImbHQ7c2VxYW46OlNlZWQmbHQ7c2VxYW46OlRhZyZsdDtzZXFhbjo6U2ltcGxlXyZndDss IHNlcWFuOjpEZWZhdWx0U2VlZENvbmZpZyZndDsgJmd0OyAmZ3Q7LCBsb25nLDwvZGl2Pg0KPGRp diBjbGFzcz0iIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyBzZXFhbjo6VGFnJmx0O3NlcWFuOjpTaW1w bGVfJmd0Oywgc2VxYW46OlRhZyZsdDtzZXFhbjo6U2ltcGxlXyZndDssIGZhbHNlLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBzZXFhbjo6VGFnJmx0O3NlcWFuOjpEZWZhdWx0XyZndDsgJmd0OycgcmVx dWVzdGVkIGhlcmU8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+Jm5ic3A7ICZuYnNwOyByZXR1cm4gYmFu ZGVkQ2hhaW5BbGlnbm1lbnQoYWxpZ24sIHNlZWRTZXQsIHNjb3JlU2NoZW1lLCBzY29yZVNjaGVt ZSwgYWxpZ25Db25maWcsIGJhbmRFeHRlbnNpb24pOzwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4mbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO148L2Rpdj4NCjxkaXYgY2xhc3M9 IiI+L2hvbWUvYmJvd21hbi9naXQvU1JTTEkvc3JjL0MmIzQzOyYjNDM7L1NwYXJzZUFsaWdubWVu dDIuY3BwOjcyOjI1OiBub3RlOiBpbiBpbnN0YW50aWF0aW9uIG9mIGZ1bmN0aW9uIHRlbXBsYXRl IHNwZWNpYWxpemF0aW9uPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPiZuYnNwOyAmbmJzcDsgJm5ic3A7 ICdzZXFhbjo6YmFuZGVkQ2hhaW5BbGlnbm1lbnQmbHQ7c2VxYW46OlN0cmluZyZsdDtzZXFhbjo6 U2ltcGxlVHlwZSZsdDt1bnNpZ25lZCBjaGFyLCBzZXFhbjo6RG5hNV8mZ3Q7LCBzZXFhbjo6QWxs b2MmbHQ7dm9pZCZndDsgJmd0Oywgc2VxYW46OlRhZyZsdDtzZXFhbjo6QXJyYXlHYXBzXyZndDss PC9kaXY+DQo8ZGl2IGNsYXNzPSIiPiZuYnNwOyAmbmJzcDsgJm5ic3A7IHN0ZDo6dmVjdG9yJmx0 O3NlcWFuOjpTZWVkJmx0O3NlcWFuOjpUYWcmbHQ7c2VxYW46OlNpbXBsZV8mZ3Q7LCBzZXFhbjo6 RGVmYXVsdFNlZWRDb25maWcmZ3Q7LCBzdGQ6OmFsbG9jYXRvciZsdDtzZXFhbjo6U2VlZCZsdDtz ZXFhbjo6VGFnJmx0O3NlcWFuOjpTaW1wbGVfJmd0Oywgc2VxYW46OkRlZmF1bHRTZWVkQ29uZmln Jmd0OyAmZ3Q7ICZndDssIGxvbmcsPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPiZuYnNwOyAmbmJzcDsg Jm5ic3A7IHNlcWFuOjpUYWcmbHQ7c2VxYW46OlNpbXBsZV8mZ3Q7LCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgc2VxYW46OlRhZyZsdDtzZXFhbjo6RGVmYXVsdF8mZ3Q7ICZndDsnIHJlcXVl c3RlZCBoZXJlPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyBsb25nIGFsblNjb3JlID0gYmFuZGVkQ2hhaW5BbGlnbm1lbnQoYWxpZ25tZW50LCAqc2VlZENo YWluLCBzY29yaW5nLCBnbG9iYWxDb25maWcpOzwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4mbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyBePC9kaXY+DQo8ZGl2IGNsYXNzPSIiPi9ob21lL2Jib3dtYW4v Z2l0L1NSU0xJL3NyYy9DJiM0MzsmIzQzOy9tYWluLmNwcDo5NToyNzogbm90ZTogaW4gaW5zdGFu dGlhdGlvbiBvZiBmdW5jdGlvbiB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiAnUmVmQ2hhaW5zVG9B bGlnbm1lbnRzJmx0O3NlcWFuOjpBbGlnbkNvbmZpZyZsdDtmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFs c2UsPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPiZuYnNwOyAmbmJzcDsgJm5ic3A7IHNlcWFuOjpUYWcm bHQ7c2VxYW46OkRlZmF1bHRfJmd0OyAmZ3Q7ICgpJmd0OycgcmVxdWVzdGVkIGhlcmU8L2Rpdj4N CjxkaXYgY2xhc3M9IiI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGF1dG8gYWxpZ25tZW50 cyA9IFJlZkNoYWluc1RvQWxpZ25tZW50cyhyZWNvcmQtJmd0O1NlcSw8L2Rpdj4NCjxkaXYgY2xh c3M9IiI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IF48L2Rpdj4NCjxkaXYgY2xh c3M9IiI+L3Vzci9pbmNsdWRlL3NlcWFuL3NlZWRzL2JhbmRlZF9jaGFpbl9hbGlnbm1lbnRfaW1w bC5oOjU4MzoxOiBub3RlOiBjYW5kaWRhdGUgdGVtcGxhdGUgaWdub3JlZDogc3Vic3RpdHV0aW9u IGZhaWx1cmUgW3dpdGggVFNlZWRTZXQgPSBzdGQ6OnZlY3RvciZsdDtzZXFhbjo6U2VlZCZsdDtz ZXFhbjo6VGFnJmx0O3NlcWFuOjpTaW1wbGVfJmd0Oyw8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+Jm5i c3A7ICZuYnNwOyAmbmJzcDsgc2VxYW46OkRlZmF1bHRTZWVkQ29uZmlnJmd0Oywgc3RkOjphbGxv Y2F0b3ImbHQ7c2VxYW46OlNlZWQmbHQ7c2VxYW46OlRhZyZsdDtzZXFhbjo6U2ltcGxlXyZndDss IHNlcWFuOjpEZWZhdWx0U2VlZENvbmZpZyZndDsgJmd0OyAmZ3Q7XTwvZGl2Pg0KPGRpdiBjbGFz cz0iIj5fZmluZEZpcnN0QW5jaG9yKFRTZWVkU2V0IGNvbnN0ICZhbXA7IHNlZWRTZXQsIGludCBi YW5kRXh0ZW5zaW9uKTwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0i Ij4mcXVvdDvigJ0mcXVvdDsmbmJzcDs8L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Jsb2NrcXVv dGU+DQo8ZGl2IGNsYXNzPSIiPjxiciBjbGFzcz0iIj4NCjwvZGl2Pg0KT2ssIHRoaXMgc2VlbXMg dG8gYmUgYSBidWcgdG8gbWUuPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPknigJlsbCBoYXZlIGEgbG9v ayBpbnRvIGl0LjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxk aXYgY2xhc3M9IiI+DQo8YmxvY2txdW90ZSB0eXBlPSJjaXRlIiBjbGFzcz0iIj4NCjxkaXYgY2xh c3M9IiI+DQo8ZGl2IGRpcj0ibHRyIiBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9IiI+PGJyIGNsYXNz PSIiPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSIiPlNpbmNlcmVseSw8L2Rpdj4NCi1CcmV0dDwvZGl2 Pg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnIgY2xh c3M9IiI+DQpzZXFhbi1kZXYgbWFpbGluZyBsaXN0PGJyIGNsYXNzPSIiPg0KPGEgaHJlZj0ibWFp bHRvOnNlcWFuLWRldkBsaXN0cy5mdS1iZXJsaW4uZGUiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0i Ij5zZXFhbi1kZXZAbGlzdHMuZnUtYmVybGluLmRlPC9hPjxiciBjbGFzcz0iIj4NCjxhIGhyZWY9 Imh0dHBzOi8vbGlzdHMuZnUtYmVybGluLmRlL2xpc3RpbmZvL3NlcWFuLWRldiIgdGFyZ2V0PSJf YmxhbmsiIGNsYXNzPSIiPmh0dHBzOi8vbGlzdHMuZnUtYmVybGluLmRlL2xpc3RpbmZvL3NlcWFu LWRldjwvYT48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjwvYmxvY2txdW90ZT4NCjwvZGl2Pg0KPGRp diBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9IiI+DQo8ZGl2IGNs YXNzPSIiPkJlc3RzLCZuYnNwOzwvZGl2Pg0KPGRpdiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8 L2Rpdj4NCjxkaXYgY2xhc3M9IiI+UmVuw6kmbmJzcDs8L2Rpdj4NCjwvZGl2Pg0KPGJyIGNsYXNz PSIiPg0KPGRpdiBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPjxmb250 IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj4tLS08L2ZvbnQ+PC9kaXY+DQo8ZGl2IGNsYXNz PSIiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8L2Zv bnQ+PC9kaXY+DQo8ZGl2IGNsYXNzPSIiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0i Ij5SZW7DqSBSYWhuPC9mb250PjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj48Zm9udCBmYWNlPSJDb3Vy aWVyIE5ldyIgY2xhc3M9IiI+UGguRC4gU3R1ZGVudDwvZm9udD48L2Rpdj4NCjxkaXYgY2xhc3M9 IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNsYXNzPSIiPi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tPC9mb250PjwvZGl2Pg0KPGRpdiBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9IiI+ PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNsYXNzPSIiPlRlbDogJm5ic3A7PGEgaHJlZj0idGVs OiUyOCUyQjQ5JTI5JTIwMzAlMjA4MzglMjA3NTI3NyIgdmFsdWU9IiYjNDM7NDkzMDgzODc1Mjc3 IiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9IiI+KCYjNDM7NDkpIDMwIDgzOCA3NTI3NzwvYT48L2Zv bnQ+PC9kaXY+DQo8ZGl2IGNsYXNzPSIiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0i Ij5NYWlsOiZuYnNwOzxhIGhyZWY9Im1haWx0bzpyZW5lLnJhaG5AZnUtYmVybGluLmRlIiB0YXJn ZXQ9Il9ibGFuayIgY2xhc3M9IiI+cmVuZS5yYWhuQGZ1LWJlcmxpbi5kZTwvYT48L2ZvbnQ+PC9k aXY+DQo8ZGl2IGNsYXNzPSIiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj4tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvZm9udD48L2Rpdj4NCjwvZGl2Pg0KPGRpdiBj bGFzcz0iIj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgY2xhc3M9IiI+SW5zdGl0dXRlIG9mIENv bXB1dGVyIFNjaWVuY2U8L2ZvbnQ+PC9kaXY+DQo8ZGl2IGNsYXNzPSIiPjxmb250IGZhY2U9IkNv dXJpZXIgTmV3IiBjbGFzcz0iIj5BbGdvcml0aG1pYyBCaW9pbmZvcm1hdGljcyAoQUJJKTwvZm9u dD48L2Rpdj4NCjxkaXYgY2xhc3M9IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNsYXNzPSIi Pi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9mb250PjwvZGl2Pg0KPGRpdiBjbGFz cz0iIj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgY2xhc3M9IiI+RnJlaWUgVW5pdmVyc2l0w6R0 IEJlcmxpbjwvZm9udD48L2Rpdj4NCjxkaXYgY2xhc3M9IiI+PGZvbnQgZmFjZT0iQ291cmllciBO ZXciIGNsYXNzPSIiPlRha3VzdHJhw59lIDk8L2ZvbnQ+PC9kaXY+DQo8ZGl2IGNsYXNzPSIiPjxm b250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj4xNDE5NSBCZXJsaW48L2ZvbnQ+PC9kaXY+ DQo8ZGl2IGNsYXNzPSIiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj4tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvZm9udD48L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8 YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjwvZGl2Pg0KPGJyIGNsYXNzPSIiPg0KX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnIgY2xhc3M9IiI+DQpzZXFhbi1k ZXYgbWFpbGluZyBsaXN0PGJyIGNsYXNzPSIiPg0KPGEgaHJlZj0ibWFpbHRvOnNlcWFuLWRldkBs aXN0cy5mdS1iZXJsaW4uZGUiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iIj5zZXFhbi1kZXZAbGlz dHMuZnUtYmVybGluLmRlPC9hPjxiciBjbGFzcz0iIj4NCjxhIGhyZWY9Imh0dHBzOi8vbGlzdHMu ZnUtYmVybGluLmRlL2xpc3RpbmZvL3NlcWFuLWRldiIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSIi Pmh0dHBzOi8vbGlzdHMuZnUtYmVybGluLmRlL2xpc3RpbmZvL3NlcWFuLWRldjwvYT48YnIgY2xh c3M9IiI+DQo8YnIgY2xhc3M9IiI+DQo8L2Jsb2NrcXVvdGU+DQo8L2Rpdj4NCjxiciBjbGFzcz0i Ij4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2 Pg0KPC9kaXY+DQo8YnIgY2xhc3M9IiI+DQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXzxiciBjbGFzcz0iIj4NCnNlcWFuLWRldiBtYWlsaW5nIGxpc3Q8YnIg Y2xhc3M9IiI+DQo8YSBocmVmPSJtYWlsdG86c2VxYW4tZGV2QGxpc3RzLmZ1LWJlcmxpbi5kZSIg dGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSIiPnNlcWFuLWRldkBsaXN0cy5mdS1iZXJsaW4uZGU8L2E+ PGJyIGNsYXNzPSIiPg0KPGEgaHJlZj0iaHR0cHM6Ly9saXN0cy5mdS1iZXJsaW4uZGUvbGlzdGlu Zm8vc2VxYW4tZGV2IiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9IiI+aHR0cHM6Ly9saXN0cy5mdS1i ZXJsaW4uZGUvbGlzdGluZm8vc2VxYW4tZGV2PC9hPjxiciBjbGFzcz0iIj4NCjxiciBjbGFzcz0i Ij4NCjwvYmxvY2txdW90ZT4NCjwvZGl2Pg0KPGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8L2Rpdj4N CjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjxiciBjbGFz cz0iIj4NCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJy IGNsYXNzPSIiPg0Kc2VxYW4tZGV2IG1haWxpbmcgbGlzdDxiciBjbGFzcz0iIj4NCjxhIGhyZWY9 Im1haWx0bzpzZXFhbi1kZXZAbGlzdHMuZnUtYmVybGluLmRlIiBjbGFzcz0iIj5zZXFhbi1kZXZA bGlzdHMuZnUtYmVybGluLmRlPC9hPjxiciBjbGFzcz0iIj4NCjxhIGhyZWY9Imh0dHBzOi8vbGlz dHMuZnUtYmVybGluLmRlL2xpc3RpbmZvL3NlcWFuLWRldiIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNz PSIiPmh0dHBzOi8vbGlzdHMuZnUtYmVybGluLmRlL2xpc3RpbmZvL3NlcWFuLWRldjwvYT48YnIg Y2xhc3M9IiI+DQo8YnIgY2xhc3M9IiI+DQo8L2Jsb2NrcXVvdGU+DQo8L2Rpdj4NCjxiciBjbGFz cz0iIj4NCjwvZGl2Pg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX188YnIgY2xhc3M9IiI+DQpzZXFhbi1kZXYgbWFpbGluZyBsaXN0PGJyIGNsYXNzPSIiPg0K PGEgaHJlZj0ibWFpbHRvOnNlcWFuLWRldkBsaXN0cy5mdS1iZXJsaW4uZGUiIGNsYXNzPSIiPnNl cWFuLWRldkBsaXN0cy5mdS1iZXJsaW4uZGU8L2E+PGJyIGNsYXNzPSIiPg0KaHR0cHM6Ly9saXN0 cy5mdS1iZXJsaW4uZGUvbGlzdGluZm8vc2VxYW4tZGV2PGJyIGNsYXNzPSIiPg0KPC9kaXY+DQo8 L2Jsb2NrcXVvdGU+DQo8L2Rpdj4NCjxiciBjbGFzcz0iIj4NCjxkaXYgY2xhc3M9IiI+DQo8ZGl2 IGNsYXNzPSIiPg0KPGRpdiBzdHlsZT0ib3JwaGFuczogMjsgd2lkb3dzOiAyOyIgY2xhc3M9IiI+ PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNsYXNzPSIiPi0tLTwvZm9udD48L2Rpdj4NCjxkaXYg c3R5bGU9Im9ycGhhbnM6IDI7IHdpZG93czogMjsiIGNsYXNzPSIiPjxmb250IGZhY2U9IkNvdXJp ZXIgTmV3IiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+DQo8L2ZvbnQ+PC9kaXY+DQo8ZGl2IHN0eWxl PSJvcnBoYW5zOiAyOyB3aWRvd3M6IDI7IiBjbGFzcz0iIj48Zm9udCBmYWNlPSJDb3VyaWVyIE5l dyIgY2xhc3M9IiI+UmVuw6kgUmFobjwvZm9udD48L2Rpdj4NCjxkaXYgc3R5bGU9Im9ycGhhbnM6 IDI7IHdpZG93czogMjsiIGNsYXNzPSIiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0i Ij5QaC5ELiBTdHVkZW50PC9mb250PjwvZGl2Pg0KPGRpdiBzdHlsZT0ib3JwaGFuczogMjsgd2lk b3dzOiAyOyIgY2xhc3M9IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNsYXNzPSIiPi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9mb250PjwvZGl2Pg0KPGRpdiBzdHlsZT0ib3Jw aGFuczogMjsgd2lkb3dzOiAyOyIgY2xhc3M9IiI+DQo8ZGl2IGNsYXNzPSIiPjxmb250IGZhY2U9 IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj5UZWw6ICZuYnNwOygmIzQzOzQ5KSAzMCA4MzggNzUyNzc8 L2ZvbnQ+PC9kaXY+DQo8ZGl2IGNsYXNzPSIiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFz cz0iIj5NYWlsOiZuYnNwOzxhIGhyZWY9Im1haWx0bzpyZW5lLnJhaG5AZnUtYmVybGluLmRlIiBj bGFzcz0iIj5yZW5lLnJhaG5AZnUtYmVybGluLmRlPC9hPjwvZm9udD48L2Rpdj4NCjxkaXYgY2xh c3M9IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNsYXNzPSIiPi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tPC9mb250PjwvZGl2Pg0KPC9kaXY+DQo8ZGl2IHN0eWxlPSJvcnBoYW5z OiAyOyB3aWRvd3M6IDI7IiBjbGFzcz0iIj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgY2xhc3M9 IiI+SW5zdGl0dXRlIG9mIENvbXB1dGVyIFNjaWVuY2U8L2ZvbnQ+PC9kaXY+DQo8ZGl2IHN0eWxl PSJvcnBoYW5zOiAyOyB3aWRvd3M6IDI7IiBjbGFzcz0iIj48Zm9udCBmYWNlPSJDb3VyaWVyIE5l dyIgY2xhc3M9IiI+QWxnb3JpdGhtaWMgQmlvaW5mb3JtYXRpY3MgKEFCSSk8L2ZvbnQ+PC9kaXY+ DQo8ZGl2IHN0eWxlPSJvcnBoYW5zOiAyOyB3aWRvd3M6IDI7IiBjbGFzcz0iIj48Zm9udCBmYWNl PSJDb3VyaWVyIE5ldyIgY2xhc3M9IiI+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08 L2ZvbnQ+PC9kaXY+DQo8ZGl2IHN0eWxlPSJvcnBoYW5zOiAyOyB3aWRvd3M6IDI7IiBjbGFzcz0i Ij48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgY2xhc3M9IiI+RnJlaWUgVW5pdmVyc2l0w6R0IEJl cmxpbjwvZm9udD48L2Rpdj4NCjxkaXYgc3R5bGU9Im9ycGhhbnM6IDI7IHdpZG93czogMjsiIGNs YXNzPSIiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj5UYWt1c3RyYcOfZSA5PC9m b250PjwvZGl2Pg0KPGRpdiBzdHlsZT0ib3JwaGFuczogMjsgd2lkb3dzOiAyOyIgY2xhc3M9IiI+ PGZvbnQgZmFjZT0iQ291cmllciBOZXciIGNsYXNzPSIiPjE0MTk1IEJlcmxpbjwvZm9udD48L2Rp dj4NCjxkaXYgc3R5bGU9Im9ycGhhbnM6IDI7IHdpZG93czogMjsiIGNsYXNzPSIiPjxmb250IGZh Y2U9IkNvdXJpZXIgTmV3IiBjbGFzcz0iIj4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LTwvZm9udD48L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8YnIgY2xhc3M9IiI+DQo8L2Rpdj4NCjwv Ym9keT4NCjwvaHRtbD4NCg== --_000_CDC44F9C54E24DB2A01B625924E13601fritzbox_--