Received: from u1.abs.net (root@u1.abs.net [207.114.0.131]) by hub.org (8.8.8/8.8.8) with ESMTP id MAA04233 for ; Mon, 19 Oct 1998 12:01:11 -0400 (EDT) (envelope-from byronn@insightdist.com) Received: from insightdist.com (nobody@localhost) by u1.abs.net (8.9.0/8.9.0) with UUCP id LAA10388 for pgsql-interfaces@postgreSQL.org; Mon, 19 Oct 1998 11:33:32 -0400 (EDT) X-Authentication-Warning: u1.abs.net: nobody set sender to insightdist.com!byronn using -f Received: from ceodev by insightdist.com (AIX 3.2/UCB 5.64/4.03) id AA32853; Mon, 19 Oct 1998 11:21:14 -0400 Received: from byronn by ceodev (AIX 4.1/UCB 5.64/4.03) id AA80032; Mon, 19 Oct 1998 11:21:13 -0400 Message-Id: <362B5A27.F620F64B@insightdist.com> Date: Mon, 19 Oct 1998 11:26:31 -0400 From: Byron Nikolaidis X-Mailer: Mozilla 4.05 [en] (Win95; I) Mime-Version: 1.0 To: "pgsql-interfaces@postgreSQL.org" Subject: [Fwd: errors in psqlodbc] Content-Type: multipart/mixed; boundary="------------DE7FDB3A7EF8FE92EA1C7FE3" This is a multi-part message in MIME format. --------------DE7FDB3A7EF8FE92EA1C7FE3 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit --------------DE7FDB3A7EF8FE92EA1C7FE3 Content-Type: message/rfc822 Content-Transfer-Encoding: 7bit Content-Disposition: inline Received: by ceodev (AIX 4.1/UCB 5.64/4.03) id AA05058; Mon, 19 Oct 1998 10:59:16 -0400 Received: by insightdist.com (AIX 3.2/UCB 5.64/4.03) id AA27683; Mon, 19 Oct 1998 10:59:10 -0400 Received: from mail.cfipro.com (mail.cfipro.com [206.251.71.5]) by u1.abs.net (8.9.0/8.9.0) with SMTP id LAA07898 for ; Mon, 19 Oct 1998 11:02:27 -0400 (EDT) Date: Sun, 18 Oct 1998 22:01 -0800 From: "John Sharp" To: "byronn@insightdist.com" Subject: errors in psqlodbc Message-Id: <19981019075409968-7b5ec9c9@cfipro.com> X-Attachments: testpro.c, profile.c, profile.h, misc.dif, conntion.dif Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=_sb1998/10/19-14-54-09-968=_sb" --=_sb1998/10/19-14-54-09-968=_sb Content-Type: text/plain; charset=us-ascii I'm not sure you are the person to recieve these. If not, could you pass them along. These problems were found when installing postodbc on sun solaris 2.5.1. It could be that some of these would not be errors on some other OS. connection.c. A seg fault occurs when writing to one of the log files. The problem is a null pointer. misc.c. If log files are written by one user, then the next user cannot reopen or replace the files since they are owned by the first. There the fopen returns a null pointer and causes a segmentation error. gpps.c. There were several errors in the implementation of GetPrivateProfileString and WritePrivateProfileString. The principle problem was that iodbc and psqlodbc ended up pointing to different ini files. I used this code in another application and implemented all the features of the Window's APIs. I think the code to read the ini files should be in iodbc not each client. I have received three different iodbc's from postgres, mysql, and openlink distributions. All three slightly different. And most of the differences are in the handling of ini files. I am sending my implementation of GetPrivateProfileString and WriteProfileString in files: profile.h, profile.c, and a test application testpro.c. One problem with the distribution of psqlodbc is that the linker switch -B symbolic causes 4 linker errors to be listed. I did not know this was really OK, that the linker errors would be resolved by the dynamic loading. Therefore, I wasted a lot of time trying to solve this problem that wasn't really a problem. Perhaps, there should be some warning in the install documentation to expect these linker errors. John Sharp jsharp@cfipro.com sharp@cs.pdx.edu --=_sb1998/10/19-14-54-09-968=_sb Content-Type: application/octet-stream; name="testpro.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="testpro.c" QXV0aG9yOiAgcG9zdGdyZTJAY3MucGR4LmVkdSAoUG9zdGdyZXMgQWNjb3VudCkgYXQgSW50ZXJu ZXQNCkRhdGU6ICAgIDEwLzE2Lzk4ICAzOjA5IFBNDQpQcmlvcml0eTogTm9ybWFsDQpUTzogSm9o biBTaGFycCBhdCBDQ1BPMg0KU3ViamVjdDogdGVzdHByby5jDQotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tIE1lc3NhZ2UgQ29udGVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVk ZSA8c3RyaW5nLmg+DQojaW5jbHVkZSAicHJvZmlsZS5oIg0KICAgICANCmludCBtYWluKGludCBh cmdjLCBjaGFyKiogYXJndikNCnsNCiAgICAgaW50IGksIGosIGssbGVuOw0KICAgICBjaGFyIGlu aUZpbGVbODBdLGJ1Zls1MDBdLGNoOw0KICAgICBjaGFyICpzZWN0TmFtZSwqa2V5TmFtZSwqZGVm bHQsKnZhbHVlOyANCiAgICAgY2hhciB2YWxCdWZbNTAwXTsNCiAgICAgcHJpbnRmKCJuYW1lIG9m IGluaSBmaWxlPyAiKTsNCiAgICAgc2NhbmYoIiVzIixpbmlGaWxlKTsNCiAgICAgcHJpbnRmKA0K ICAgICAgICAgICJVc2FnZTpcbiINCiAgICAgICAgICAiPkdzZWN0TmFtZSxrZXlOYW1lWyxkZWZh dWx0XVxuIg0KICAgICAgICAgICI+R3NlY3ROYW1lICAgICAgICAgIGdldHMgYWxsIGtleW5hbWVz XG4iIA0KICAgICAgICAgICI+RyAgICAgICAgICAgICAgIGdldHMgYWxsIHNlY3RuYW1lc1xuIiAN CiAgICAgICAgICAiPldzZWN0TmFtZSxrZXlOYW1lLHZhbHVlXG4iDQogICAgICAgICAgIj5Xc2Vj dE5hbWUsa2V5TmFtZSAgICAgZGVsZXRlcyBrZXlcbiIgDQogICAgICAgICAgIj5Xc2VjdE5hbWUg ICAgICAgICAgZGVsZXRlcyBzZWN0aW9uXG4iIA0KICAgICAgICAgICI+USAgICAgICAgICAgICAg IHF1aXRcbiINCiAgICAgICAgICApOw0KICAgICBmb3IgKDs7KQ0KICAgICB7DQogICAgICAgICAg cHJpbnRmKCI+Iik7DQogICAgICAgICAgc2NhbmYoIiVzIixidWYpOw0KICAgICAgICAgIGNoPXRv bG93ZXIoKmJ1Zik7DQogICAgICAgICAgaWYgKGNoPT0ncScpDQogICAgICAgICAgICAgICBicmVh azsNCiAgICAgICAgICBzZWN0TmFtZT1zdHJ0b2soYnVmKzEsIiwiKTsNCiAgICAgICAgICBrZXlO YW1lPXN0cnRvayhOVUxMLCIsIik7DQogICAgICAgICAgZGVmbHQ9c3RydG9rKE5VTEwsIiwiKTsN CiAgICAgICAgICBwcmludGYoIlBhcmFtZXRlcnMgYXJlICVzICVzICVzXG4iLA0KICAgICAgICAg ICAgICAgc2VjdE5hbWU/IHNlY3ROYW1lOiAiKG51bGwpIiwNCiAgICAgICAgICAgICAgIGtleU5h bWU/IGtleU5hbWU6ICIobnVsbCkiLA0KICAgICAgICAgICAgICAgZGVmbHQ/IGRlZmx0OiAiKG51 bGwpIik7DQogICAgICAgICAgaWYgKGNoPT0nZycpDQogICAgICAgICAgew0KICAgICAgICAgICAg ICAgaWYgKGtleU5hbWUhPU5VTEwgJiYgZGVmbHQ9PU5VTEwpDQogICAgICAgICAgICAgICAgICAg IGRlZmx0PSIiOw0KICAgICAgICAgICAgICAgbGVuPUdldFByaXZhdGVQcm9maWxlU3RyaW5nKA0K ICAgICAgICAgICAgICAgICAgICBzZWN0TmFtZSxrZXlOYW1lLGRlZmx0LHZhbEJ1ZixzaXplb2Yo dmFsQnVmKSwgDQogICAgICAgICAgICAgICAgICAgIGluaUZpbGUpOw0KICAgICAgICAgICAgICAg aWYgKGxlbj09MCkNCiAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJOb3RoaW5nIGZvdW5kXG4i KTsNCiAgICAgICAgICAgICAgIGVsc2UgaWYgKGtleU5hbWUhPU5VTEwpDQogICAgICAgICAgICAg ICAgICAgIHByaW50ZigidmFsdWU9JXNcbiIsdmFsQnVmKTsNCiAgICAgICAgICAgICAgIGVsc2Ug ew0KICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdE5hbWU9PU5VTEwpDQogICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCJzZWN0aW9uczpcbiIpOw0KICAgICAgICAgICAgICAgICAgICBl bHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJrZXlzOlxuIik7DQogICAgICAg ICAgICAgICAgICAgIHZhbHVlPXZhbEJ1ZjsNCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxl bj4wKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCIlc1xuIix2YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgaj1zdHJsZW4odmFs dWUpKzE7DQogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUrPWo7DQogICAgICAgICAgICAg ICAgICAgICAgICAgbGVuLT1qOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg ICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UgaWYgKGNoPT0ndycpDQogICAgICAgICAg ew0KICAgICAgICAgICAgICAgaWYgKFdyaXRlUHJpdmF0ZVByb2ZpbGVTdHJpbmcoDQogICAgICAg ICAgICAgICAgICAgIHNlY3ROYW1lLGtleU5hbWUsZGVmbHQsaW5pRmlsZSkpDQogICAgICAgICAg ICAgICAgICAgIHByaW50ZigiTWFkZSBjaGFuZ2VzIHRvICVzXG4iLGluaUZpbGUpOw0KICAgICAg ICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICBwcmludGYoIk5vIGNoYW5nZXMgdG8g JXNcbiIsaW5pRmlsZSk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAg ICAgIHByaW50ZigiY29tbWFuZCBub3QgcmVjb2duaXplZFxuIik7DQogICAgIH0NCn0NCi== --=_sb1998/10/19-14-54-09-968=_sb Content-Type: application/octet-stream; name="profile.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="profile.c" Ly8gR2V0UHJpdmF0ZVByb2ZpbGVTdHJpbmcoKSAtLSBjbG9zZSBpbXBsZW1lbnRhdGlvbiBvZg0K Ly8gV2luZG93cyBOVCBTeXN0ZW0gU2VydmljZXMgdmVyc2lvbiBvZiBHZXRQcml2YXRlUHJvZmls ZVN0cmluZygpDQovLyBkb2Vzbid0IHByb3ZpZGUgTWljcm9zb2Z0IGJhY2t3YXJkcyBjb21wYXRh YmlsaXR5DQovLyB3cnQgVEFCIGNoYXJhY3RlcnMgaW4gdGhlIHZhbHVlIHN0cmluZyAtLSBNaWNy b3NvZnQgdGVybWluYXRlcyB2YWx1ZSANCi8vIGF0IHRoZSBmaXJzdCBUQUIsIGJ1dCBJIGNvdWxk bid0IGRpc2NvdmVyIHdoYXQgdGhlIGJlaGF2aW9yIHNob3VsZCANCi8vIGJlIHJlZ2FyZGluZyBU QUJTIGluIHF1b3RlZCBzdHJpbmdzIHNvLCBJIHRyZWF0IHRhYnMgbGlrZSBhbnkgb3RoZXIgDQov LyBjaGFyYWN0ZXJzIC0tIE5PIGNvbW1lbnRzIGZvbGxvd2luZyB2YWx1ZSBzdHJpbmcgc2VwYXJh dGVkIGJ5IGEgVEFCIA0KLy8gYXJlIGFsbG93ZWQgKHRoYXQgaXMgYW4gYW5hY2hyb25pc20gYW55 d2F5KQ0KLy8gQWRkZWQgY29kZSB0byBzZWFyY2ggZm9yIE9EQkNfSU5JIGZpbGUgaW4gdXNlcnMg aG9tZSBkaXJlY3Rvcnkgb24gDQovLyBVbml4DQoNCi8vIG1vZGlmaWVkIGJ5IEpvaG4gU2hhcnAN Ci8vIDEwLzE1Lzk4DQovLyBmdWxsIGNvbXBhdGFiaWxpdHkgd2l0aCBXaW5kb3cncyBBUEkgZnVu Y3Rpb25zIGV4Y2VwdCBmb3IgdGFiIGNoYXIgdXNhZ2UNCi8vIG1lbnRpb25lZCBhYm92ZQ0KLy8g YW5kIHRoYXQgaXQgcmVjb2duaXplcyBib3RoIHVuaXggb3Igd2luZG93J3MgY29tbWVudHM6ICNj b21tZW50LCA7Y29tbWVudCAgICAgDQogICAgIA0KLy8gZm9yIHBvcnRhYmlsaXR5DQojZGVmaW5l IFVOSVggICAgIDENCiNkZWZpbmUgc3RyaWNtcChzMSxzMikgc3RyY2FzZWNtcChzMSxzMikgDQp0 eXBlZGVmIGludCBCT09MOw0KICAgICANCiNpbmNsdWRlIDxzdGRpby5oPg0KICAgICANCiNpbmNs dWRlIDxwd2QuaD4NCiAgICAgDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8c3Ry aW5nLmg+DQojaW5jbHVkZSAicHJvZmlsZS5oIg0KICAgICANCiNkZWZpbmUgTUFYUEFUSExFTiAg ICAgMjU1DQogICAgIA0KLy8gaWYgMXN0IGNoYXIgb2YgZmlsZW5hbWUgaXMgbm90ICIvIiwgYXNz dW1lcyBmaWxlIGlzIGluIGxvZ2luIGRpcmVjdG9yeQ0Kdm9pZCBHZXRGdWxsUGF0aFRvRmlsZShj b25zdCBjaGFyKiB0aGVJbmlGaWxlTmFtZSxjaGFyIGluaUZ1bGxQYXRoW01BWFBBVEhMRU4rMV0N CikNCnsNCiAgICAgaW50IGosazsNCiAgICAgY2hhciogcHRyPTA7DQogICAgIHN0cnVjdCBwYXNz d2QgKnB3ZDsNCi8vIHNpbmNlIHRoaXMgaXMgVU5JWCAtIGFic29sdXRlIHBhdGhzIGJlZ2luIHdp dGggIi8iDQogICAgIHN0cm5jcHkoaW5pRnVsbFBhdGgsdGhlSW5pRmlsZU5hbWUsTUFYUEFUSExF Tik7IA0KICAgICBpbmlGdWxsUGF0aFtNQVhQQVRITEVOXT0wOw0KICAgICBpZiAoKnRoZUluaUZp bGVOYW1lPT0nLycpDQogICAgICAgICAgcmV0dXJuOw0KLy8gYXNzdW1lIGZpbGUgaXMgaW4gbG9n aW4gaG9tZSBkaXJlY3RvcnkNCiAgICAgaiA9IHN0cmxlbih0aGVJbmlGaWxlTmFtZSkgKyAxOw0K ICAgICBwd2QgPSBnZXRwd3VpZChnZXR1aWQoKSk7DQogICAgIGlmIChwd2QgIT0gTlVMTCkNCiAg ICAgICAgICBwdHIgPSBwd2QtPnB3X2RpcjsNCi8vIGlmIG5vIGxvZ2luIGRpcmVjdG9yeSwgYXNz dW1lIC9ob21lDQogICAgIGlmKCBwdHIgPT0gTlVMTCB8fCAqcHRyID09ICdcMCcgKQ0KICAgICAg ICAgIHB0ciA9ICIvaG9tZSI7DQogICAgIGs9c3RybGVuKHB0cik7DQogICAgIGlmIChqK2srMT5N QVhQQVRITEVOKQ0KICAgICAgICAgICppbmlGdWxsUGF0aD0wOw0KICAgICBlbHNlDQogICAgICAg ICAgc3ByaW50ZiggaW5pRnVsbFBhdGgsICIlcy8lcyIscHRyLHRoZUluaUZpbGVOYW1lICk7DQog ICAgIHJldHVybjsNCn0NCiAgICAgDQovLyBnZXQgUHJpdmF0ZVByb2ZpbGVTdHJpbmcNCi8vIG5v cm1hbCB1c2FnZToNCi8vICAgKHNlY3ROYW1lLGtleU5hbWUsZGVmYXVsdCxidWZmZXIsbGVuLGZp bGVOYW1lKQ0KLy8gICByZXR1cm5zIGxlbmd0aCBvZiB2YWx1ZSBvciBsZW5ndGggb2YgZGVmYXVs dA0KLy8gICAwIGlmIG5vIHZhbHVlIGZvdW5kIG9yIGRlZmF1bHQ9PSIiIG9yIE5VTEwNCi8vIE90 aGVydXNhZ2UgcmV0dXJucyBhIG11bHRpc3RyaW5nIGxpa2U6DQovLyAgIGtleTFuYW1lXDBrZXky bmFtZVwwa2V5M25hbWVcMCAuLi4uIGtleW5uYW1lXDBcMA0KLy8gZ2V0a2V5bmFtZXMgdXNhZ2UN Ci8vICAgKHNlY05hbWUsTlVMTCxOVUxMLGJ1ZmZlcixsZW4sZmlsZW5hbWUpDQovLyAgIHJldHVy bnMgdG90YWwgbGVuZ3RoIG9mIGFsbCBrZXluYW1lcyBmb3VuZCBpbiB0aGF0IHNlY3Rpb24NCi8v ICAgemVybyBpZiBzZWN0aW9uIG5vdCBmb3VuZCBvciBoYXMgbm8ga2V5cw0KLy8gZ2V0c2VjdGlv biBuYW1lcyB1c2FnZQ0KLy8gICAoTlVMTCxOVUxMLE5VTEwsYnVmZmVyLGxlbixmaWxlbmFtZSkN Ci8vICAgcmV0dXJucyB0b3RhbCBsZW5ndGggb2YgYWxsIHNlY3Rpb24gbmFtZXMgaW4gdGhlIGZp bGUNCmNvbnN0IGNoYXIgcXVvdGVzW109eydcJycsJ1wiJ307DQppbnQNCkdldFByaXZhdGVQcm9m aWxlU3RyaW5nKGNoYXIgKnRoZVNlY3Rpb24sICAgICAvLyBzZWN0aW9uIG5hbWUNCiAgICAgY2hh ciAqdGhlS2V5LCAgICAgICAgICAvLyBzZWFyY2gga2V5IG5hbWUNCiAgICAgY2hhciAqdGhlRGVm YXVsdCwgICAgIC8vIGRlZmF1bHQgdmFsdWUgaWYgbm90IGZvdW5kIA0KICAgICBjaGFyICp0aGVS ZXR1cm5CdWZmZXIsICAgICAvLyByZXR1cm4gdmFsdWUgc3RvcmVkIGhlcmUNCiAgICAgc2l6ZV90 IHRoZVJldHVybkJ1ZmZlckxlbmd0aCwgICAgIC8vIGJ5dGUgbGVuZ3RoIG9mIHJldHVybiBidWZm ZXIgDQogICAgIGNoYXIgKnRoZUluaUZpbGVOYW1lKSAgICAgICAgICAvLyBwYXRobmFtZSBvZiBp bmkgZmlsZSB0byBzZWFyY2gNCnsNCiAgICAgY2hhciBidWZbTUFYUEFUSExFTisxXTsNCiAgICAg RklMRSogYUZpbGUgPSAwOw0KICAgICBzaXplX3QgYUxlbmd0aDsNCiAgICAgY2hhciBhTGluZVsy MDQ4XTsNCiAgICAgY2hhciAqYVZhbHVlOw0KICAgICBjaGFyICphU3RyaW5nOw0KICAgICBzaXpl X3QgYUxpbmVMZW5ndGg7DQogICAgIHNpemVfdCBhUmV0dXJuTGVuZ3RoID0gMDsNCiAgICAgDQog ICAgIEJPT0wgYVNlY3Rpb25Gb3VuZCA9IDA7DQogICAgIEJPT0wgYUtleUZvdW5kID0gMDsNCiAg ICAgQk9PTCBtYWtlTXVsdGlTdHJpbmc7DQogICAgIGludCBqID0gMDsNCi8vIGlmIG5vIGJ1ZmZl ciB0byByZXR1cm4gdmFsdWUNCiAgICAgaWYodGhlUmV0dXJuQnVmZmVyTGVuZ3RoID09IDAgfHwg dGhlUmV0dXJuQnVmZmVyID09IE5VTEwpDQogICAgICAgICAgcmV0dXJuIDA7DQoJICp0aGVSZXR1 cm5CdWZmZXI9J1wwJzsNCi8vIGlzIHRoZSByZXR1cm4gYSBtdWx0aXN0cmluZyBsaWtlIGtleTFc MGtleTJcMC4uLmtleW5cMFwwID8gDQovLyBpZiBzbywgdGhlIHJldHVybiBidWZmZXIgbXVzdCBh Y2NvbW1vZGF0ZSBhbiBleHRyYSBudWxsIGNoYXINCiAgICAgaWYgKG1ha2VNdWx0aVN0cmluZz0o dGhlS2V5PT1OVUxMKSB8fCAodGhlU2VjdGlvbj09TlVMTCkpDQogICAgICAgICAgdGhlUmV0dXJu QnVmZmVyTGVuZ3RoLS07DQogICAgIA0KICAgICBHZXRGdWxsUGF0aFRvRmlsZSh0aGVJbmlGaWxl TmFtZSxidWYpOyANCiAgICAgYUZpbGUgPSBmb3BlbihidWYsICJyIik7DQogICAgIA0KLy8gbm90 ZTogaWYgbm8gZmlsZSBjb3VsZCBiZSBvcGVuZWQgLi4uDQovLyBza2lwIHBhc3QgZmlsZSBwcm9j ZXNzaW5nIGFuZCByZXR1cm4gZGVmYXVsdA0KICAgICBpZiAoYUZpbGUgIT0gTlVMTCkgd2hpbGUo ZmdldHMoYUxpbmUsIHNpemVvZihhTGluZSksIGFGaWxlKSAhPSBOVUxMKSANCiAgICAgew0KICAg ICAgICAgIGFMaW5lTGVuZ3RoID0gc3RybGVuKGFMaW5lKTsNCiAgICAgICAgICAvLyBzdHJpcCBm aW5hbCAnXG4nDQogICAgICAgICAgaWYoYUxpbmVMZW5ndGggPiAwICYmIGFMaW5lW2FMaW5lTGVu Z3RoIC0gMV0gPT0gJ1xuJykgDQogICAgICAgICAgew0KICAgICAgICAgICAgICAgYUxpbmVbYUxp bmVMZW5ndGggLSAxXSA9ICdcMCc7DQogICAgICAgICAgfQ0KICAgICAgICAgIHN3aXRjaCgqYUxp bmUpDQogICAgICAgICAgew0KICAgICAgICAgICAgICAgY2FzZSAnICc6IC8vIGJsYW5rIGxpbmUN CiAgICAgICAgICAgICAgIGNhc2UgJzsnOiAvLyBjb21tZW50IGxpbmUNCiAgICAgICAgICAgICAg IGNhc2UgJyMnOiAvLyB1bml4IGNvbW1lbnQNCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7 DQogICAgICAgICAgICAgICBicmVhazsNCiAgICAgDQogICAgICAgICAgICAgICBjYXNlICdbJzog ICAgIC8vIHNlY3Rpb24gbWFya2VyDQogICAgIA0KICAgICAgICAgICAgICAgICAgICBpZiggYVN0 cmluZyA9IHN0cmNocihhTGluZSwgJ10nKSApDQogICAgICAgICAgICAgICAgICAgICAgICAgKmFT dHJpbmcgPSAnXDAnOw0KICAgICAgICAgICAgICAgIC8vIGlzIHRoaXMgdGhlIHNlY3Rpb24/DQog ICAgICAgICAgICAgICAgICAgIGFTZWN0aW9uRm91bmQ9dGhlU2VjdGlvbiAmJiBhU3RyaW5nICYm ICFzdHJpY21wKGFMaW5lICsgMSwgdGhlU2VjdGlvbik7DQogICAgICAgICAgICAgICAgLy8gaWYg c2F2aW5nIGFsbCBzZWN0aW9uIG5hbWVzDQoJCQkJICAgIGlmICh0aGVTZWN0aW9uPT1OVUxMICYm IGFTdHJpbmcpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAg ICBhTGVuZ3RoPXN0cmxlbihhTGluZSsxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICBqPXRo ZVJldHVybkJ1ZmZlckxlbmd0aC1hUmV0dXJuTGVuZ3RoOyANCiAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoYUxlbmd0aDw9aikNCiAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkodGhlUmV0dXJuQnVmZmVyK2FSZXR1cm5MZW5n dGgsYUxpbmUrMSk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVJldHVybkxlbmd0 aCs9YUxlbmd0aCsxOw0KICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg ICAgICAgfQ0KCQkJCQlicmVhazsNCiAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAg ICAgICAgICAgIC8vIHRyeSB0byBtYXRjaCB2YWx1ZSBrZXlzIGlmIGluIHByb3BlciBzZWN0aW9u DQogICAgICAgICAgICAgICAgICAgIGlmKGFTZWN0aW9uRm91bmQpDQogICAgICAgICAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnkgdG8gbWF0Y2ggcmVxdWVzdGVk IGtleQ0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBhVmFsdWUgPSBzdHJjaHIoYUxpbmUs ICc9JykgKQ0KICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFTdHJpbmc9YVZhbHVlLTE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqYVZhbHVlID0gJ1wwJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrYVZhbHVl Ow0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cmlwIGxlYWRpbmcgYmxhbmtzIGluIHZh bHVlIGZpZWxkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSgqYVZhbHVlID09 ICcgJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKmFWYWx1ZSsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg ICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAvLyBzdHJpcCB0cmFpbGluZyBibGFua3MgZnJvbSBrZXkNCiAgICAgICAg ICAgICAgICAgICAgICAgICB3aGlsZShhU3RyaW5nID49IGFMaW5lICYmICphU3RyaW5nID09ICcg JykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphU3RyaW5nLS0gPSAnXDAnOw0KICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBpZiBrZXkgaXMgbWF0Y2hlZA0KICAgICAgICAg ICAgICAgICAgICAgICAgIGlmKHRoZUtleSA9PSBOVUxMIHx8ICFzdHJpY21wKHRoZUtleSwgYUxp bmUpKSANCiAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyBtYXRjaGVkIC0tIGZpcnN0LCB0ZXJtaW5hdGUgdmFsdWUgcGFydA0KICAgICAN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFLZXlGb3VuZCA9IDE7DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhTGVuZ3RoID0gc3RybGVuKGFWYWx1ZSk7DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAvLyB1bnF1b3RlIHZhbHVlIGlmIHF1b3RlZCwgYnV0IG9ubHkgdGhl IG91dGVyIHF1b3Rlcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqPTA7ajwy O2orKykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmKGFMZW5ndGggPj0gMiAmJiBhVmFsdWVbMF0gPT0gcXVvdGVzW2pd ICYmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVthTGVuZ3RoLTFd ID09IHF1b3Rlc1tqXSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlW2FMZW5ndGgtMV0gPSAwOw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2FWYWx1ZTsNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYUxlbmd0aCAtPSAyOw0KCQkJCQkJCQkgICBicmVhazsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHJldHVybmluZyB0aGUg a2V5DQoJCQkJCQkgICAvLyBub3RlOiB0aGUgZ290byBjYW4gYmUgcmVtb3ZlZCBhbmQgaXQgd2ls bCBzdGlsbCB3b3JrDQoJCQkJCQkgICAgICBpZiAodGhlS2V5IT1OVUxMKQ0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhTGluZUxlbmd0aD1hTGVuZ3RoPHRoZVJldHVybkJ1ZmZlckxlbmd0aD8NCgkJCQkJCQkJCQkJ YUxlbmd0aDogdGhlUmV0dXJuQnVmZmVyTGVuZ3RoOw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJuY3B5KHRoZVJldHVybkJ1ZmZlcixhVmFsdWUsYUxpbmVMZW5ndGgpOyAN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVJldHVybkxlbmd0aD1hTGluZUxl bmd0aDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBza2lwX3Jlc3Rf b2ZfZmlsZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gaWYgcmV0dXJuaW5nIGFsbCBrZXluYW1lcw0KCQkJCQkJICAvLyBvbmx5 IHNhdmUgaWYgdGhlcmUgaXMgcm9vbSBsZWZ0IGluIHRoZSBidWZmZXINCgkJCQkJCSAgICAgIGVs c2UgIA0KCQkJCQkJCSAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaj10aGVS ZXR1cm5CdWZmZXJMZW5ndGgtYVJldHVybkxlbmd0aDsgDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhTGVuZ3RoPXN0cmxlbihhTGluZSk7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoYUxlbmd0aDw9aikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHRoZVJldHVy bkJ1ZmZlcithUmV0dXJuTGVuZ3RoLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFMaW5lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVJldHVy bkxlbmd0aCArPSBhTGVuZ3RoKzE7CS8vIG9uZSBleHRyYSBmb3IgbnVsbA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAN CiAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgIH0NCiAgICAgfQ0KICAgICANCnNraXBf cmVzdF9vZl9maWxlOg0KICAgICBpZihhRmlsZSkNCiAgICAgICAgICBmY2xvc2UoYUZpbGUpOw0K Ly8gaWYgbm8ga2V5IHdhcyBmb3VuZCwgcmV0dXJuIHRoZSBkZWZhdWx0IHN0cmluZw0KICAgICBp ZighKG1ha2VNdWx0aVN0cmluZyB8fCBhS2V5Rm91bmQpKSANCgkgeyANCiAgICAgICAgICBpZiAo dGhlRGVmYXVsdD09TlVMTCkNCiAgICAgICAgICAgICAgIHRoZURlZmF1bHQ9IiI7DQogICAgICAg ICAgaj1zdHJsZW4odGhlRGVmYXVsdCk7DQogICAgICAgICAgYVJldHVybkxlbmd0aCA9IHRoZVJl dHVybkJ1ZmZlckxlbmd0aCA8IGogPw0KICAgICAgICAgICAgICAgdGhlUmV0dXJuQnVmZmVyTGVu Z3RoIDogajsNCiAgICAgICAgICBzdHJuY3B5KHRoZVJldHVybkJ1ZmZlciwgdGhlRGVmYXVsdCwg YVJldHVybkxlbmd0aCk7DQogICAgIH0NCi8vIGFwcGVuZCBhIHRyYWlsaW5nIHplcm8gYnl0ZSBv biB0aGUgcmV0dXJuIGJ1ZmZlcg0KICAgICB0aGVSZXR1cm5CdWZmZXJbYVJldHVybkxlbmd0aF09 J1wwJzsgDQogICAgIHJldHVybiBhUmV0dXJuTGVuZ3RoOw0KfQ0KICAgICANCiAgICAgDQovLyBy ZXR1cm5zIDAgaWYgbm8gY2hhbmdlIG1hZGUgdG8gZmlsZSwgMSBpZiBhbnkgY2hhbmdlDQovLyBy ZXF1aXJlcyBzZWN0aW9ubmFtZQ0KLy8gaWYga2V5bmFtZT1OVUxMLCByZW1vdmVzIGVudGlyZSBz ZWN0aW9uDQovLyBpZiB2YWx1ZW5hbWU9TlVMTCwgcmVtb3ZlcyB0aGUga2V5DQppbnQNCldyaXRl UHJpdmF0ZVByb2ZpbGVTdHJpbmcoY2hhciAqdGhlU2VjdGlvbiwgICAgIC8vIHNlY3Rpb24gbmFt ZQ0KICAgICBjaGFyICp0aGVLZXksICAgICAgICAgIC8vIHdyaXRlIGtleSBuYW1lIA0KICAgICBj aGFyICp0aGVWYWx1ZSwgICAgIC8vIGlucHV0IGJ1ZmZlcg0KICAgICBjaGFyICp0aGVJbmlGaWxl TmFtZSkgICAgIC8vIHBhdGhuYW1lIG9mIGluaSBmaWxlIHRvIHdyaXRlDQp7DQogICAgIGNoYXIg YnVmW01BWFBBVEhMRU4rMV07DQogICAgIEZJTEUqIGFGaWxlID0gMCwgKnRGaWxlOw0KICAgICBj aGFyIGFMaW5lWzIwNDhdOw0KICAgICBjaGFyICphVmFsdWU7DQogICAgIGNoYXIgKmFTdHJpbmc7 DQogICAgIHNpemVfdCBhTGluZUxlbmd0aDsNCiAgICAgc2l6ZV90IGFSZXR1cm5MZW5ndGggPSAw Ow0KICAgICBsb25nIHBiZWdsPTAsIHBlbmRsPTAsIGJyZXBsLCBlcmVwbD0wOyANCiAgICAgQk9P TCByZXR2YWw9MDsNCiAgICAgDQogICAgIEJPT0wgYVNlY3Rpb25Gb3VuZCA9IDAsIGtleUZvdW5k PTAsIHNlY3RGb3VuZD0wOyANCiAgICAgaW50IGogPSAwOw0KICAgICANCiAgICAgaWYodGhlU2Vj dGlvbj09TlVMTCB8fCB0aGVJbmlGaWxlTmFtZSA9PSBOVUxMKQ0KICAgICAgICAgIHJldHVybiAw Ow0KICAgICANCiAgICAgR2V0RnVsbFBhdGhUb0ZpbGUodGhlSW5pRmlsZU5hbWUsYnVmKTsNCiAg ICAgDQogICAgIGFGaWxlID0gZm9wZW4oYnVmLCAiciIpOw0KLy8gaWYgbm8gZmlsZSwgd2UgbWln aHQgY3JlYXRlIG9uZQ0KICAgICBpZighYUZpbGUpDQogICAgIHsNCiAgICAgICAgICBpZiAodGhl S2V5PT1OVUxMIHx8IHRoZVZhbHVlPT1OVUxMKQ0KICAgICAgICAgICAgICAgcmV0dXJuIDA7DQog ICAgIH0NCi8vIHVzZSBhIHRlbXBvcmFyeSBmaWxlIHRvIGNvcHkgdGhlIG9yaWdpbmFsDQogICAg IHRGaWxlPXRtcGZpbGUoKTsNCiAgICAgaWYgKGFGaWxlKQ0KICAgICB7DQogICAgICAgd2hpbGUo ZmdldHMoYUxpbmUsIHNpemVvZihhTGluZSksIGFGaWxlKSAhPSBOVUxMKSANCiAgICAgICB7DQog ICAgIC8vIGNvcHkgb2xkIGZpbGUgdG8gdGVtcG9yYXJ5IGFuZCBrZWVwIHRyYWNrIG9mIHdoZXJl IG1vZGlmaWNhdGlvbnMNCgkgLy8gbWlnaHQgYmUgbWFkZQ0KCSAgICAgIGZwdXRzKGFMaW5lLHRG aWxlKTsNCiAgICAgICAgICBwYmVnbD1wZW5kbDsJCQkJCS8vIGJlZ2lubmluZyBvZiBsaW5lDQog ICAgICAgICAgcGVuZGw9ZnRlbGwodEZpbGUpOwkJCS8vIGJlZ2lubmluZyBvZiBuZXh0IGxpbmUN CiAgICAgICAgICBhTGluZUxlbmd0aCA9IHN0cmxlbihhTGluZSk7DQogICAgICAgICAgLy8gc3Ry aXAgZmluYWwgJ1xuJw0KICAgICAgICAgIGlmKGFMaW5lTGVuZ3RoID4gMCAmJiBhTGluZVthTGlu ZUxlbmd0aCAtIDFdID09ICdcbicpIA0KICAgICAgICAgIHsNCiAgICAgICAgICAgICAgIGFMaW5l W2FMaW5lTGVuZ3RoIC0gMV0gPSAnXDAnOw0KICAgICAgICAgIH0NCiAgICAgICAgICBzd2l0Y2go KmFMaW5lKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICAgIGNhc2UgJyAnOiAvLyBibGFuayBs aW5lDQogICAgICAgICAgICAgICBjYXNlICc7JzogLy8gY29tbWVudCBsaW5lDQogICAgICAgICAg ICAgICBjYXNlICcjJzogLy8gdW5peCBjb21tZW50DQoJCQkJCQlicmVhazsNCiAgICAgDQogICAg ICAgICAgICAgICBjYXNlICdbJzogICAgIC8vIHNlY3Rpb24gbWFya2VyDQogICAgIA0KICAgICAg ICAgICAgICAgICAgICBpZiAoYVN0cmluZyA9IHN0cmNocihhTGluZSwgJ10nKSkNCiAgICAgICAg ICAgICAgICAgICAgICAgICAqYVN0cmluZyA9ICdcMCc7DQogICAgICAgICAgICAgICAvLyBhY2Nl cHQgYXMgbWF0Y2hlZCBpZiBrZXkgZXhhY3QgbWF0Y2gNCiAgICAgICAgICAgICAgICAgICAgYVNl Y3Rpb25Gb3VuZD1hU3RyaW5nICYmIHN0cmljbXAoYUxpbmUgKyAxLCB0aGVTZWN0aW9uKT09MDsg DQogICAgICAgICAgICAgICAgICAgIGlmIChhU2VjdGlvbkZvdW5kKQ0KICAgICAgICAgICAgICAg ICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgc2VjdEZvdW5kPTE7DQogICAgICAgICAg ICAgICAgICAgLy8gaWYgZGVsZXRpbmcgdGhlIGtleSwgcmVtZW1iZXIgc3RhcnQgb2YgZGVsZXRl IHJhbmdlDQoJCQkJICAgICAgICAgaWYgKHRoZUtleT09TlVMTCkNCiAgICAgICAgICAgICAgICAg ICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVwbD1wYmVnbDsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyZXBsPXBlbmRsOw0KICAgICAgICAgICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgYnJlYWs7 DQogICAgIA0KICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgLy8g dHJ5IHRvIG1hdGNoIHZhbHVlIGtleXMgaWYgaW4gcHJvcGVyIHNlY3Rpb24NCiAgICAgICAgICAg ICAgICAgICAgaWYoYVNlY3Rpb25Gb3VuZCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBtYXRjaCByZXF1ZXN0ZWQga2V5DQogICAgIA0K ICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFTdHJpbmcgPSBzdHJjaHIoYUxpbmUsICc9Jykp DQogICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgIC8v IHN0cmlwIHRyYWlsaW5nIGJsYW5rcyBmcm9tIGtleQ0KICAgICANCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICphU3RyaW5nLS09MDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdoaWxlKGFTdHJpbmc+YUxpbmUgJiYgKmFTdHJpbmcgPT0gJyAnKQ0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqYVN0cmluZy0tPTA7DQogICAgIA0KICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIHNlZSBpZiBrZXkgaXMgbWF0Y2hlZA0KICAgICAgICAgICAgICAgICAgICAg ICAgIC8vIGlmIGRlbGV0aW5nIGVudGlyZSBzZWN0aW9uLCB1cGRhdGUgZW5kIG9mIGRlbGV0ZSBy YW5nZQ0KCQkJCQkJICAgICAgaWYgKHRoZUtleT09TlVMTCkNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZXJlcGw9cGVuZGw7DQogICAgICAgICAgICAgICAgICAgICAgICAgLy8g aWYgdGhpcyBpcyB0aGUga2V5LCByZW1lbWJlciB3aGVyZSB0aGUgbGluZSBpcw0KCQkJCQkJICAg ICAgZWxzZSBpZiAoc3RyaWNtcCh0aGVLZXksIGFMaW5lKT09MCkNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlcGw9 cGJlZ2w7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyZXBsPXBlbmRsOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlGb3VuZD0xOw0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIG5v IG1hdGNoIGZvdW5kIHlldCBpbiB0aGlzIHNlY3Rpb24NCgkJCQkJCSAgICAgIGVsc2UgaWYgKCFr ZXlGb3VuZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlcGw9cGVuZGw7 DQogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAg ICAgICAgICAgICBicmVhazsNCiAgICAgICAgICB9DQogICAgICAgfQ0KICAgICB9DQovLyBuZWNl c3NhcnkgaWYgbm90aGluZyBpbiBmaWxlLCBzbyB3ZSByZWFkIGJhY2sgYXQgbGVhc3Qgb25lIGxp bmUNCiAgICAgaWYgKCFmdGVsbCh0RmlsZSkpDQogICAgICAgZnB1dHMoIlxuIix0RmlsZSk7DQov LyBjbG9zZSB0aGUgaW5wdXQgZmlsZSAgICAgDQogICAgIGZjbG9zZShhRmlsZSk7DQovLyBubyBj aGFuZ2VzIGlmOg0KLy8gIGRlbGV0aW5nIGEgc2VjdGlvbiBhbmQgc2VjdGlvbiBub3QgZm91bmQg DQovLyAgZGVsZXRpbmcgYSBrZXkgYW5kIGtleSBub3QgZm91bmQNCiAgICAgaWYgKA0KICAgICAg ICAgICh0aGVLZXk9PU5VTEwgJiYgIXNlY3RGb3VuZCkNCiAgICAgICAgICB8fCAodGhlS2V5ICYm IHRoZVZhbHVlPT1OVUxMICYmICFrZXlGb3VuZCkNCiAgICAgICAgKQ0KICAgICAgICBnb3RvIG5v X2NoYW5nZXM7DQovLyBubyBjaGFuZ2VzIGlmIGNhbid0IG9wZW4gaW5pIGZpbGUgZm9yIG91dHB1 dA0KICAgICBhRmlsZT1mb3BlbihidWYsInciKTsNCiAgICAgaWYgKGFGaWxlPT1OVUxMKQ0KICAg ICAgICBnb3RvIG5vX2NoYW5nZXM7DQovLyByZWFkIGJhY2sgdGhlIHRlbXAgZmlsZSBhbmQgdXBk YXRlIHRoZSBpbmkgZmlsZQ0KICAgICByZXR2YWw9MTsNCiAgICAgcmV3aW5kKHRGaWxlKTsNCiAg ICAgcGVuZGw9MDsNCiAgICAgd2hpbGUgKGZnZXRzKGFMaW5lLHNpemVvZihhTGluZSksdEZpbGUp KSANCiAgICAgew0KICAgICAgICAgIHBiZWdsPXBlbmRsOw0KICAgICAgICAgIHBlbmRsPWZ0ZWxs KHRGaWxlKTsNCiAgICAgLy8gaWYgZGVsZXRpbmcgYSBzZWN0aW9uDQogICAgICAgICAgaWYgKHRo ZUtleT09TlVMTCAmJiBwYmVnbD49YnJlcGwgJiYgcGVuZGw8PWVyZXBsKQ0KICAgICAgICAgICAg ICAgY29udGludWU7DQogICAgIC8vIGZvdW5kIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBrZXkNCiAg ICAgICAgICBpZiAodGhlS2V5IT1OVUxMICYmIHBiZWdsPT1icmVwbCkNCiAgICAgICAgICB7DQog ICAgICAgICAgLy8gaWYgdXBkYXRpbmcgd2l0aCBhIG5ldyB2YWx1ZQ0KICAgICAgICAgICAgICAg aWYgKHRoZVZhbHVlIT1OVUxMKQ0KICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAg ICBpZiAoa2V5Rm91bmQpDQogICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihhTGluZSwi JXMgPSAlc1xuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZUtleSx0aGVWYWx1 ZSk7DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICBz cHJpbnRmKGFMaW5lLCJbJXNdXG4lcz0gJXNcbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0aGVTZWN0aW9uLHRoZUtleSx0aGVWYWx1ZSk7DQogICAgICAgICAgICAgICB9DQogICAg ICAvLyBpZiBkZWxldGluZyB0aGUga2V5DQogICAgICAgICAgICAgICBlbHNlIGlmIChrZXlGb3Vu ZCkNCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgfQ0KICAgICAgLy8g aWYgY29weWluZyB0aGlzIGxpbmUgb2YgdGhlIHRlbXBmaWxlDQoJICAgICAgZnB1dHMoYUxpbmUs YUZpbGUpOw0KICAgICB9DQovLyBjbG9zZSBvdXRwdXQgZmlsZSBpZiBhbnkNCiAgICAgZmNsb3Nl KGFGaWxlKTsNCm5vX2NoYW5nZXM6DQovLyBhbmQgY2xvc2UgdGVtcGZpbGUNCiAgICAgZmNsb3Nl KHRGaWxlKTsNCiAgICAgcmV0dXJuIHJldHZhbDsNCn0NCm== --=_sb1998/10/19-14-54-09-968=_sb Content-Type: application/octet-stream; name="profile.h" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="profile.h" QXV0aG9yOiAgc2hhcnBAY3MucGR4LmVkdSAoSm9obiBTaGFycCkgYXQgSW50ZXJuZXQNCkRhdGU6 ICAgIDEwLzE2Lzk4ICA4OjQ4IEFNDQpQcmlvcml0eTogTm9ybWFsDQpUTzogSm9obiBTaGFycCBh dCBDQ1BPMg0KU3ViamVjdDogcHJvZmlsZS5oDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tIE1lc3NhZ2UgQ29udGVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8g R2V0UHJpdmF0ZVByb2ZpbGVTdHJpbmcNCi8vIGZvciBVTklYIHVzZQ0KI2lmbmRlZiBwcm9maWxl X2gNCiNkZWZpbmUgcHJvZmlsZV9oDQogICAgIA0KI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KICAg ICANCiNpZmRlZiBfX2NwbHVzcGx1cw0KZXh0ZXJuICJDIiB7DQojZW5kaWYNCiAgICAgDQppbnQN CkdldFByaXZhdGVQcm9maWxlU3RyaW5nKGNoYXIgKnRoZVNlY3Rpb24sICAgLy8gc2VjdGlvbiBu YW1lDQogICAgY2hhciAqdGhlS2V5LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlYXJj aCBrZXkgbmFtZQ0KICAgIGNoYXIgKnRoZURlZmF1bHQsICAgICAgICAgICAgICAgICAgICAgICAv LyBkZWZhdWx0IHZhbHVlIGlmIG5vdCBmb3VuZCANCiAgICBjaGFyICp0aGVSZXR1cm5CdWZmZXIs ICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHZhbHVzZSBzdG9yZWQgaGVyZSANCiAgICBzaXpl X3QgdGhlQnVmZmVyTGVuZ3RoLCAgICAgICAgICAgICAgICAgLy8gYnl0ZSBsZW5ndGggb2YgcmV0 dXJuIGJ1ZmZlciANCiAgICBjaGFyICp0aGVJbmlGaWxlTmFtZSk7ICAgICAgICAgICAgICAgICAg Ly8gcGF0aG5hbWUgb2YgaW5pIGZpbGUgdG8gc2VhcmNoDQogICAgIA0KaW50DQpXcml0ZVByaXZh dGVQcm9maWxlU3RyaW5nKGNoYXIgKnRoZVNlY3Rpb24sICAgICAvLyBzZWN0aW9uIG5hbWUNCiAg ICAgY2hhciAqdGhlS2V5LCAgICAgICAgICAvLyB3cml0ZSBrZXkgbmFtZSANCiAgICAgY2hhciAq dGhlQnVmZmVyLCAgICAgLy8gaW5wdXQgYnVmZmVyDQogICAgIGNoYXIgKnRoZUluaUZpbGVOYW1l KTsgICAgIC8vIHBhdGhuYW1lIG9mIGluaSBmaWxlIHRvIHdyaXRlDQogICAgIA0KI2lmZGVmIF9f Y3BsdXNwbHVzDQp9DQojZW5kaWYNCiAgICAgDQojZW5kaWYNCn== --=_sb1998/10/19-14-54-09-968=_sb Content-Type: application/octet-stream; name="misc.dif" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="misc.dif" QXV0aG9yOiAgc2hhcnBAY3MucGR4LmVkdSAoSm9obiBTaGFycCkgYXQgSW50ZXJuZXQNCkRhdGU6 ICAgIDEwLzE2Lzk4ICA4OjM1IEFNDQpQcmlvcml0eTogTm9ybWFsDQpUTzogSm9obiBTaGFycCBh dCBDQ1BPMg0KU3ViamVjdDogbWlzYy5kaWYNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gTWVzc2FnZSBDb250ZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqKiog bWlzYy5jICAgICBUaHUgT2N0IDE1IDIxOjI4OjQ1IDE5OTgNCi0tLSBiYWNrdXAvbWlzYy5jICAg ICBGcmkgU2VwICA0IDE5OjQ2OjUxIDE5OTggDQoqKioqKioqKioqKioqKioNCioqKiAzMCw0OSAq KioqDQogIGNoYXIgKmZtdDsNCiAgY2hhciAqYXJnczsNCiAgICAgDQohIHN0YXRpYyBCT09MIGZp cnN0PTE7DQohIEZJTEUgKkxPR0ZQID0gMDsNCiAgICAgDQogICAgICAgaWYgKCBnbG9iYWxzLmRl YnVnKSB7DQogICAgICAgICAgICB2YV9zdGFydChhcmdzKTsNCiAgICAgICAgICAgIGZtdCA9IHZh X2FyZyhhcmdzLCBjaGFyICopOw0KICAgICANCiEgICAgICAgICAgIExPR0ZQID0gZm9wZW4oTVlM T0dGSUxFLCBmaXJzdD8gInciOiAiYSIpOyANCiEgICAgICAgICAgIGZpcnN0PTA7DQogICAgICAg ICAgICBpZiAoTE9HRlApDQotICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIHZmcHJpbnRm KExPR0ZQLCBmbXQsIGFyZ3MpOw0KISAgICAgICAgICAgICAgICBmY2xvc2UoTE9HRlApOw0KISAg ICAgICAgICAgfQ0KICAgICAgICAgICAgdmFfZW5kKGFyZ3MpOw0KICAgICAgIH0NCiAgfQ0KLS0t IDMwLDQ5IC0tLS0NCiAgY2hhciAqZm10Ow0KICBjaGFyICphcmdzOw0KICAgICANCiEgc3RhdGlj IEZJTEUgKkxPR0ZQID0gMDsNCiAgICAgDQogICAgICAgaWYgKCBnbG9iYWxzLmRlYnVnKSB7DQog ICAgICAgICAgICB2YV9zdGFydChhcmdzKTsNCiAgICAgICAgICAgIGZtdCA9IHZhX2FyZyhhcmdz LCBjaGFyICopOw0KICAgICANCiEgICAgICAgICAgIGlmICghIExPR0ZQKSB7DQohICAgICAgICAg ICAgICAgIExPR0ZQID0gZm9wZW4oTVlMT0dGSUxFLCAidyIpOyANCiEgICAgICAgICAgICAgICAg c2V0YnVmKExPR0ZQLCBOVUxMKTsNCiEgICAgICAgICAgIH0NCiENCiAgICAgICAgICAgIGlmIChM T0dGUCkNCiAgICAgICAgICAgICAgICAgdmZwcmludGYoTE9HRlAsIGZtdCwgYXJncyk7DQohDQog ICAgICAgICAgICB2YV9lbmQoYXJncyk7DQogICAgICAgfQ0KICB9DQoqKioqKioqKioqKioqKioN CioqKiA1Nyw3NiAqKioqDQogIHsNCiAgY2hhciAqZm10Ow0KICBjaGFyICphcmdzOw0KISBGSUxF ICpMT0dGUDsNCiEgc3RhdGljIEJPT0wgZmlyc3Q9MTsNCiAgICAgDQogICAgICAgaWYgKCBnbG9i YWxzLmNvbW1sb2cpIHsNCiAgICAgICAgICAgIHZhX3N0YXJ0KGFyZ3MpOw0KICAgICAgICAgICAg Zm10ID0gdmFfYXJnKGFyZ3MsIGNoYXIgKik7DQogICAgIA0KISAgICAgICAgICAgTE9HRlAgPSBm b3BlbihRTE9HRklMRSwgZmlyc3Q/ICJ3IjogImEiKTsgDQohICAgICAgICAgICBmaXJzdD0wOw0K ICAgICAgICAgICAgaWYgKExPR0ZQKQ0KLSAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICB2 ZnByaW50ZihMT0dGUCwgZm10LCBhcmdzKTsNCiEgICAgICAgICAgICAgICAgZmNsb3NlKExPR0ZQ KTsNCiEgICAgICAgICAgIH0NCiAgICAgICAgICAgIHZhX2VuZChhcmdzKTsNCiAgICAgICB9DQog IH0NCi0tLSA1Nyw3NiAtLS0tDQogIHsNCiAgY2hhciAqZm10Ow0KICBjaGFyICphcmdzOw0KISBz dGF0aWMgRklMRSAqTE9HRlAgPSAwOw0KICAgICANCiAgICAgICBpZiAoIGdsb2JhbHMuY29tbWxv Zykgew0KICAgICAgICAgICAgdmFfc3RhcnQoYXJncyk7DQogICAgICAgICAgICBmbXQgPSB2YV9h cmcoYXJncywgY2hhciAqKTsNCiAgICAgDQohICAgICAgICAgICBpZiAoISBMT0dGUCkgew0KISAg ICAgICAgICAgICAgICBMT0dGUCA9IGZvcGVuKFFMT0dGSUxFLCAidyIpOyANCiEgICAgICAgICAg ICAgICAgc2V0YnVmKExPR0ZQLCBOVUxMKTsNCiEgICAgICAgICAgIH0NCiENCiAgICAgICAgICAg IGlmIChMT0dGUCkNCiAgICAgICAgICAgICAgICAgdmZwcmludGYoTE9HRlAsIGZtdCwgYXJncyk7 DQohDQogICAgICAgICAgICB2YV9lbmQoYXJncyk7DQogICAgICAgfQ0KICB9DQp= --=_sb1998/10/19-14-54-09-968=_sb Content-Type: application/octet-stream; name="conntion.dif" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="conntion.dif" QXV0aG9yOiAgc2hhcnBAY3MucGR4LmVkdSAoSm9obiBTaGFycCkgYXQgSW50ZXJuZXQNCkRhdGU6 ICAgIDEwLzE2Lzk4ICA4OjM2IEFNDQpQcmlvcml0eTogTm9ybWFsDQpUTzogSm9obiBTaGFycCBh dCBDQ1BPMg0KU3ViamVjdDogY29ubmVjdGlvbi5kaWYNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0gTWVzc2FnZSBDb250ZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQoqKiogY29ubmVjdGlvbi5jICAgICBTdW4gU2VwIDIwIDIxOjMyOjMxIDE5OTgNCi0tLSBiYWNr dXAvY29ubmVjdGlvbi5jICAgICBGcmkgU2VwICA0IDE5OjQ2OjUwIDE5OTggDQoqKioqKioqKioq KioqKioNCioqKiAxMjc2LDEyODQgKioqKg0KICAgICAgICAgICAgcWxvZygiICAgICAgICAgICAg LS0tLS0tLS0tLS0tLS0tLSBTb2NrZXQgSW5mbyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLS0t LS0tLS1cbiIpOw0KICAgICAgICAgICAgaWYgKHNlbGYtPnNvY2spIHsNCiAgICAgICAgICAgIFNv Y2tldENsYXNzICpzb2NrID0gc2VsZi0+c29jazsNCiEgICAgICAgICAgIHFsb2coIiAgICAgICAg ICAgIHNvY2tldD0lZCwgcmV2ZXJzZT0lZCwgZXJyb3JudW1iZXI9JWQsIGVycm9ybXNnPSclDQpz J1xuIiwNCiEgICAgICAgICAgICAgICAgc29jay0+c29ja2V0LCBzb2NrLT5yZXZlcnNlLCBzb2Nr LT5lcnJvcm51bWJlciwgDQohICAgICAgICAgICAgICAgIHNvY2stPmVycm9ybXNnPyBzb2NrLT5l cnJvcm1zZzogIiIpOw0KICAgICAgICAgICAgcWxvZygiICAgICAgICAgICAgYnVmZmVyX2luPSV1 LCBidWZmZXJfb3V0PSV1XG4iLCBzb2NrLT5idWZmZXJfaW4sIHMNCm9jay0+YnVmZmVyX291dCk7 DQogICAgICAgICAgICBxbG9nKCIgICAgICAgICAgICBidWZmZXJfZmlsbGVkX2luPSVkLCBidWZm ZXJfZmlsbGVkX291dD0lZCwgYnVmZmVyXw0KcmVhZF9pbj0lZFxuIiwgc29jay0+YnVmZmVyX2Zp bGxlZF9pbiwgc29jay0+YnVmZmVyX2ZpbGxlZF9vdXQsIHNvY2stPmJ1ZmZlcl9yZWENCmRfaW4p Ow0KICAgICAgICAgICAgfQ0KLS0tIDEyNzYsMTI4MiAtLS0tDQogICAgICAgICAgICBxbG9nKCIg ICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tIFNvY2tldCBJbmZvIC0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KLS0tLS0tLS0tLVxuIik7DQogICAgICAgICAgICBpZiAoc2VsZi0+c29jaykgew0KICAg ICAgICAgICAgU29ja2V0Q2xhc3MgKnNvY2sgPSBzZWxmLT5zb2NrOw0KISAgICAgICAgICAgcWxv ZygiICAgICAgICAgICAgc29ja2V0PSVkLCByZXZlcnNlPSVkLCBlcnJvcm51bWJlcj0lZCwgZXJy b3Jtc2c9JyUNCnMnXG4iLCBzb2NrLT5zb2NrZXQsIHNvY2stPnJldmVyc2UsIHNvY2stPmVycm9y bnVtYmVyLCBzb2NrLT5lcnJvcm1zZyk7DQogICAgICAgICAgICBxbG9nKCIgICAgICAgICAgICBi dWZmZXJfaW49JXUsIGJ1ZmZlcl9vdXQ9JXVcbiIsIHNvY2stPmJ1ZmZlcl9pbiwgcw0Kb2NrLT5i dWZmZXJfb3V0KTsNCiAgICAgICAgICAgIHFsb2coIiAgICAgICAgICAgIGJ1ZmZlcl9maWxsZWRf aW49JWQsIGJ1ZmZlcl9maWxsZWRfb3V0PSVkLCBidWZmZXJfDQpyZWFkX2luPSVkXG4iLCBzb2Nr LT5idWZmZXJfZmlsbGVkX2luLCBzb2NrLT5idWZmZXJfZmlsbGVkX291dCwgc29jay0+YnVmZmVy X3JlYQ0KZF9pbik7DQogICAgICAgICAgICB9DQp= --=_sb1998/10/19-14-54-09-968=_sb-- --------------DE7FDB3A7EF8FE92EA1C7FE3--