delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1998/01/30/22:04:04

Date: Fri, 30 Jan 1998 18:17:48 -0600 (CST)
From: Andrew Deren <aderen AT eecs DOT uic DOT edu>
To: Jamie Love <jamie DOT love AT clear DOT net DOT nz>
cc: DJGPP mailing list <djgpp AT delorie DOT com>
Subject: Re: encryption
In-Reply-To: <199801302349.MAA13757@fep2-orange.clear.net.nz>
Message-ID: <Pine.GSO.3.96.980130181435.25371A-200000@bert.eecs.uic.edu>
MIME-Version: 1.0

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime AT docserver DOT cac DOT washington DOT edu for more info.

---559023410-851401618-886205868=:25371
Content-Type: TEXT/PLAIN; charset=US-ASCII

Here is a little encryption program I've done a while ago as my class
assignment. I don't know if it's usefull (it's pretty simple).


                        ,,,
                       (0 0)
   +-------------oOO----(_)-------------------+
   |                Andrew Deren              |  
   |             aderen AT eecs DOT uic DOT edu          |
   | www.eecs.uic.edu/~aderen/ader/main.html  |
   +-------------------------oOO--------------+
                       || ||
                      ooO Ooo
 


On Sun, 1 Feb 1998, Jamie Love wrote:

> Hi, I wish to make a encryption program using djgpp and allegro. What I
> wish to know is if djgpp has an encrypytion library yet.
> 
> I'm looking for >64 bit encryption. (bit, if i can't get this, I'll settle
> for 32bit)
> 
> Barring a library, is there some source I could get?
> 
> As a last resort, is there some docs around explaining the implementation
> of an encryption system?
> 
> One point to remember is that this system will need to be reasonable fast.
> 
> Jamie Love
> Part of the Silicon Wanderers
> (http://www.geocities.com/SiliconValley/Horizon/4532)
> e-mail me at jamie DOT love AT clear DOT net DOT nz
> ICQ: 7493228
> 

---559023410-851401618-886205868=:25371
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="encode14.cpp"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine DOT GSO DOT 3 DOT 96 DOT 980130181748 DOT 25371B AT bert DOT eecs DOT uic DOT edu>
Content-Description: 

LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqDQogKiBUaGlzIGVuY29kZXMgb3IgZGVjb2RlcyBh
IGZpbGUgdXNpbmcgTGV3aXMgQ2Fycm9sbCdzIHN5c3RlbQ0KICogZm9yIGRl
Y29kaW5nIGFuZCBlbmNvZGluZy4NCiAqDQogKiBBdXRob3I6IEFuZHJldyBE
ZXJlbg0KICogU3lzdGVtOiBDIG9uIFVJQyBuZXR3b3JrIGFuZCBCb3JsYW5k
IEMrKyA1LjAgZm9yIERvcw0KICogRGF0ZSAgOiAxMC8yMC85Ng0KICogSW5w
dXQgOiBJbnB1dCBGaWxlIC0gd2hlbiBlbmNvZGluZyB0aGlzIGlzIHRoZSB0
ZXh0IGZpbGUNCiAJCQkJCQkJCWFuZCB3aGVuIGRlY29pbmcgdGhpcyBpcyB0
aGUgZW5jb2RlZCBmaWxlDQogIAkJCSAgT3V0cHV0IEZpbGUgLSBmaWxlIHdo
ZXJlIHRoZSBlbmNvZGVkIG9yIGRlY29kZWQgdGV4dCBpcw0KICAgICAgICAg
ICAJCQkJCW91dHB1dC4NCiAgICAgICAgICAgRGVjb2RpbmcvRW5jb2Rpbmcg
c3RyaW5nIC0gdGhpcyBpcyBhIHN0cmluZyB0aGF0IGlzIHVzZWQNCiAgICAg
ICAgICAgCQkJCQl0byBlbmNvZGUgb3IgZGVjb2RlIGEgZmlsZS4NCiAqIE91
dHB1dDogVGhlIHJlc3VsdCBvZiBlbmNvZGluZyBvciBkZWNvZGluZyBpcyBv
dXRwdXQgdG8gdGhlIG91dHB1dA0KIAkJICAgICBmaWxlLg0KICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovDQoNCi8vIEluY2x1ZGUgdGhlIHByZWRlZmluZWQgaGVhZGVy
IGZpbGVzDQojaW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNsdWRlIDxzdHJpbmcu
aD4NCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxjdHlwZS5oPg0K
DQovLyBNYWNybyB0byBwcmludCBhbiBlcnJvciBtZXNzYWdlIHdoZW4gZXJy
b3IgcmVhZGluZyBzdHJpbmcgZW5jb3V0ZXJlZA0KI2RlZmluZSBTVFJJTkdf
SU5QVVRfRVJST1IgcHJpbnRmKCJFcnJvciBlbnRlcmluZyBzdHJpbmcuXG4i
KQ0KDQovLyBjb25zdGFudCB0byBtYWtlIGxvb3AgZ28gZm9yZXZlcg0KI2Rl
ZmluZSBJTkZJTklUWSAxDQoNCi8vIFRoaXMgZnVuY3Rpb24gZGVjb2RlcyBh
IGxldHRlciB1c2luZyBkZWNvZGVfY2hhcg0KLy8gVXNlcyB0aGUgZm9ybXVs
YSBsZXR0ZXItZGVjb2RlX2NoYXIgKyAzMiBpZiBpdCBpcyBncmVhdGVyIHRo
YW4gMzENCi8vIG9yIGxldHRlciAtIGRlY29kZV9jaGFyICsgMTI3IGlmIG5v
dCBncmVhdGVyIHRoYW4gMzENCi8vIHRoZSBjaGFyYWN0ZXJzIGFyZSBzaGlm
dGVyIGJ5IG9uZSBmb3IgZWFjaCBkZWNvZGUgY2hhciAtIDMyDQovLyBhbmQg
dGhlbiByb3RhdGVkIGlmIGxlc3MgdGhhbiAzMg0KaW50IGRlY29kZV9jaGFy
KGludCBsZXR0ZXIsIGludCBkZWNvZGVfY2hhcikNCnsNCgkvLyBpZiBsZXR0
ZXIgPCAzMiBpdCBpcyBjb250cm9sIGNoYXJhY3Rlciwgc28gcmV0dXJuIGl0
IHVuY2hhbmdlZC4NCiAgIGlmIChsZXR0ZXIgPCAzMikgcmV0dXJuIGxldHRl
cjsNCiAgIC8vIGlmIGxldHRlciAtIGRlY29kZSArIDMyIGlzIGdyZWF0ZXIg
dGhhbiAzMSByZXR1cm4NCiAgIC8vIGxldHRlciAtIGRlY29kZSArIDMyDQog
ICBlbHNlIGlmIChsZXR0ZXIgLSBkZWNvZGVfY2hhciArIDMyID49IDMyKSBy
ZXR1cm4gKGxldHRlciAtIGRlY29kZV9jaGFyICsgMzIpOw0KICAgLy8gaWYg
bm90IHJldHVybiBsZXR0ZXIgLSBkZWNvZGUgKyAxMjcNCiAgIGVsc2UgcmV0
dXJuIChsZXR0ZXIgLSBkZWNvZGVfY2hhciArIDEyNyk7DQp9DQoNCi8vIFRo
aXMgZnVuY3Rpb24gZW5jb2RlcyBhIGxldHRlciB1c2luZyBlbmNvZGVfc3Ry
aW5nDQovLyBVc2VzIHRoZSBmb3JtdWxhIGxldHRlciArIGVuY29kZV9jaGFy
IC0gMzIgaWYgaXQgaXMgbGVzcyB0aGFuIDEyNw0KLy8gYW5kIGxldHRlciAr
IGVuY29kZV9jaGFyIC0gMTI3IGlmIGl0IGlzIG5vdC4NCmludCBlbmNvZGVf
Y2hhcihpbnQgbGV0dGVyLCBpbnQgZW5jb2RlX2NoYXIpDQp7DQoJLy8gaWYg
bGV0dGVyIDwgMzIgaXQgaXMgY29udHJvbCBjaGFyYWN0ZXIsIHNvIHJldHVy
biBpdCB1bmNoYW5nZWQNCiAgIGlmIChsZXR0ZXIgPCAzMikgcmV0dXJuIGxl
dHRlcjsNCiAgIGVsc2UgaWYgKGxldHRlciArIGVuY29kZV9jaGFyIC0gMzIg
PD0gMTI2KSByZXR1cm4gKGxldHRlciArIGVuY29kZV9jaGFyIC0zMik7DQog
ICBlbHNlIHJldHVybiBsZXR0ZXIgKyBlbmNvZGVfY2hhciAtIDEyNzsNCn0N
Cg0KLy8gR2V0cyB0aGUgaW5wdXQgZmlsZS4gSXQgYXNrcyBmb3IgdGhlIGZp
bGUgbmFtZSBhbmQgaWYgY2FuIG9wZW4NCi8vIHRoZSBmaWxlIGl0IHJldHVy
bnMgcG9pbnRlciB0byB0aGF0IGZpbGUgaWYgbm90IHByb2dyYW0gaXMgYWJv
cnRlZA0KRklMRSogZ2V0X2lucHV0X2ZpbGUodm9pZCkNCnsNCgljaGFyIGZp
bGVfbmFtZVs4MF07CQkJCQkgLy8gRmlsZSBuYW1lDQogICBGSUxFKiBpbnB1
dDsgICAgICAgIAkJCQkJIC8vIHBvaW50ZXIgdG8gdGhlIGZpbGUNCiAgIHBy
aW50ZigiRW50ZXIgdGhlIGlucHV0IGZpbGU6ICAiKTsgLy8gYXNrIGZvciB0
aGUgZmlsZSBuYW1lDQogICBpZiAoZ2V0cyhmaWxlX25hbWUpID09IE5VTEwp
IHsgICAgLy8gZ2V0IGZpbGUgbmFtZQ0KICAgICAgU1RSSU5HX0lOUFVUX0VS
Uk9SOyAgICAgICAgICAgIC8vIGlmIGNhbid0IHJlYWQgZmlsZSBuYW1lIHBy
aW50IGVycm9yDQogICAgICBleGl0KDEpOyAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYW5kIGV4aXQgcHJvZ3JhbQ0KCX0NCiAgIC8vIG9wZW4gZmlsZSBp
biB0ZXh0IHJlYWQgbW9kZSBhbmQgcG9pbnQgdG8gaW5wdXQNCiAgIGlmICgo
aW5wdXQgPSBmb3BlbihmaWxlX25hbWUsICJydCIpKSA9PSBOVUxMKSB7DQog
ICAJLy8gaWYgZXJyb3Igb3BlbmluZyBmaWxlIHByaW50IGVycm9yIG1lc3Nh
Z2UNCiAgIAlwcmludGYoIkVycm9yIE9wZW5pbmcgSW5wdXQgZmlsZS4gUHJv
Z3JhbSBhYm9ydGVkLlxuIik7DQoJICAJZXhpdCgxKTsJCQkJCQkJCSAvLyBh
bmQgZXhpdCBwcm9ncmFtDQoJfQ0KICAgcmV0dXJuIGlucHV0OyAgICAgICAg
ICAJCQkJIC8vIHJldHVybiBwb2ludGVyIHRvIGZpbGUNCn0NCg0KLy8gR2V0
cyB0aGUgb3V0cHV0IGZpbGUuIEl0IGFza3MgZm9yIHRoZSBmaWxlIG5hbWUg
YW5kIGlmIGNhbiBvcGVuDQovLyB0aGUgZmlsZSBpdCByZXR1cm5zIHBvaW50
ZXIgdG8gdGhhdCBmaWxlIGlmIG5vdCBwcm9ncmFtIGlzIGFib3J0ZWQNCkZJ
TEUqIGdldF9vdXRwdXRfZmlsZSh2b2lkKQ0Kew0KCWNoYXIgZmlsZV9uYW1l
WzgwXTsgICAgICAgICAgICAgICAvLyBGaWxlIG5hbWUNCiAgIEZJTEUqIG91
dHB1dDsgICAgICAgICAgICAgICAgICAgICAvLyBwb2ludGVyIHRvIHRoZSBm
aWxlDQogICBwcmludGYoIkVudGVyIHRoZSBvdXRwdXQgZmlsZTogIik7Ly8g
YXNrIGZvciB0aGUgZmlsZSBuYW1lDQogICBpZiAoZ2V0cyhmaWxlX25hbWUp
ID09IE5VTEwpIHsgICAgLy8gZ2V0IGZpbGUgbmFtZQ0KICAgCVNUUklOR19J
TlBVVF9FUlJPUjsgICAgICAgICAgICAvLyBpZiBjYW4ndCByZWFkIGZpbGUg
bmFtZSBwcmludCBlcnJvcg0KICAgCWV4aXQoMSk7ICAgICAgICAgICAgICAg
ICAgICAgICAvLyBhbmQgZXhpdCBwcm9ncmFtDQogICB9DQogICAvLyBvcGVu
IGZpbGUgaW4gdGV4dCB3cml0ZSBtb2RlIGFuZCBwb2ludCB0byBvdXRwdXQN
CiAgIGlmICgob3V0cHV0ID0gZm9wZW4oZmlsZV9uYW1lLCAid3QiKSkgPT0g
TlVMTCkgew0KICAgCS8vIGlmIGVycm9yIG9wZW5pbmcgZmlsZSBwcmludCBl
cnJvciBtZXNzYWdlDQogICAJcHJpbnRmKCJFcnJvciBPcGVuaW5nIG91dHB1
dCBmaWxlLiBQcm9ncmFtIGFib3J0ZWQuXG4iKTsNCiAgICAgIGV4aXQoMSk7
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGV4aXQgcHJvZ3JhbQ0K
CX0NCiAgIHJldHVybiBvdXRwdXQ7ICAgICAgICAgICAgICAgICAgICAgLy8g
cmV0dXJuIHBvaW50ZXIgdG8gZmlsZQ0KfQ0KDQp2b2lkIG9wZXJhdGluZ19z
eXN0ZW0odm9pZCkNCi8vIGxldHMgdXNlciB1c2Ugb3BlcmF0aW5nIHN5c3Rl
bSBjb21tYW5kcywgc28gdG8gdmlldyB0aGUgZGlyZWN0b3J5IGxpc3QgDQov
LyB0byBmaW5kIHRoZSBmaWxlLCB1c2VyIGRvZXMgbm90IGhhdmUgdG8gZXhp
dCBwcm9ncmFtDQp7DQoJY2hhciBpbnB1dFsyNTZdOwkJLy8ga2VlcHMgdGhl
IGlucHV0IGZyb20ga2V5Ym9hcmQNCglwcmludGYoIlR5cGUgeW91ciBjb21t
YW5kOiBcbiIpOwkvLyBwcm9tcHQgZm9yIGlucHV0DQoJaWYgKGdldHMoaW5w
dXQpID09IE5VTEwpIHsgICAgLy8gZ2V0IGZpbGUgbmFtZQ0KICAgCVNUUklO
R19JTlBVVF9FUlJPUjsgICAgICAgICAgICAvLyBpZiBjYW4ndCByZWFkIGZp
bGUgbmFtZSBwcmludCBlcnJvcg0KICAgCWV4aXQoMSk7ICAgICAgICAgICAg
ICAgICAgICAgICAvLyBhbmQgZXhpdCBwcm9ncmFtDQogICB9DQoJc3lzdGVt
KGlucHV0KTsJCQkJCQkJLy8gZXhlY3V0ZSB0aGUgY29tbWFuZA0KfQ0KDQoN
CnZvaWQgdmlld19maWxlKHZvaWQpDQovLyBhbGxvd3MgdXNlciB0byB2aWV3
IHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIGZyb20NCi8vIGluc2lkZSB0aGUg
cHJvZ3JhbQ0Kew0KCWNoYXIgZmlsZV9uYW1lWzgwXTsJLy8gbmFtZSBvZiB0
aGUgZmlsZQ0KCWNoYXIgY2hhcmFjdGVyOwkJLy8gc3RvcmVzIGEgY2hhcmFj
dGVyIHJlYWQgZnJvbSBmaWxlDQoJRklMRSogZmlsZTsJCQkJLy8gcG9pbnRl
ciB0byBmaWxlDQoJdW5zaWduZWQgbG9uZyBudW1fY2hhcnMgPSAwOy8vbnVt
YmVyIG9mIGNoYXJhY3RlcnMgaW4gZmlsZQ0KCQ0KCXByaW50ZigiUGxlYXNl
IGVudGVyIHRoZSBmaWxlIHRvIHZpZXc6ICIpOwkvLyBwcm9tcHQgZm9yIGZp
bGUgbmFtZQ0KCWlmIChnZXRzKGZpbGVfbmFtZSkgPT0gTlVMTCkgewkJCQkv
LyBzdG9yZSBpdCBpbnRvIGZpbGVfbmFtZQ0KCQlTVFJJTkdfSU5QVVRfRVJS
T1I7CQkJLy8gaWYgZXJyb3IgZW50ZXJpbmcgZmlsZSBuYW1lDQoJCWV4aXQo
MSk7CQkJCQkJCS8vIHByaW50IG1lc3NhZ2UgYW5kIGV4aXQNCgl9DQoJaWYg
KChmaWxlID0gZm9wZW4oZmlsZV9uYW1lLCAicnQiKSkgPT0gTlVMTCkgewkv
LyBvcGVuIHRoZSBmaWxlIGluIHJlYWQgbW9kZQ0KCQlwcmludGYoIkVycm9y
IG9wZW5pbmcgZmlsZS5cbiIpOwkJCQkvLyBpZiBub3QgYWJsZSB0byBvcGVu
IHByaW50IGVycm9yDQoJfQ0KCWVsc2Ugew0KCQlzeXN0ZW0oImNsZWFyIik7
CQkvLyBjbGVhciB0aGUgc2NyZWVuDQoJCS8vc3lzdGVtKCJjbHMiKTsJCS8v
IHVzZWQgZm9yIE1TLURPUw0KCQlwcmludGYoIkNvbnRlbnQgb2YgdGhlIGZp
bGU6IFxuIik7CQ0KCQl3aGlsZSAoKGNoYXJhY3RlciA9IGdldGMoZmlsZSkp
ICE9IEVPRikgey8vIHJlYWQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgZmlsZQ0K
CQkJCQkJCQkJCQkJCQkJLy8gaW50byBjaGFyYWN0ZXINCgkJCW51bV9jaGFy
cysrOyAvLyBpbmNyZW1lbnQgbnVtYmVyIG9mIGNoYXJhY3RlcnMNCgkJCQ0K
CQkJY2hhcmFjdGVyID0gcHV0YyhjaGFyYWN0ZXIsIHN0ZG91dCk7Ly8gYW5k
IHByaW50IGl0IHRvIHNjcmVlbg0KCQl9DQoJCWZjbG9zZShmaWxlKTsJCS8v
IGNsb3NlIHRoZSBmaWxlDQoJCXByaW50ZigiXG5cbiIpOwkvLyBnZXQgc29t
ZSBzcGFjZXMNCgkJcHJpbnRmKCJOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBm
aWxlOiAlbGRcblxuIiwgbnVtX2NoYXJzKTsNCgl9DQp9DQoNCi8vIGdldCB0
aGUgY2hvaWNlLg0KLy8gcmV0dXJucyAxIGlmIGZpbGUgaXMgdG8gYmUgZW5j
b2RlZA0KLy8gYW5kIDIgaWYgZmlsZSBpcyB0byBiZSBkZWNvZGVkDQovLyBp
ZiBhbnl0aGluZyBlbHNlIGVudGVyZWQgcHJvZ3JhbSBpcyBhYm9ydGVkDQpp
bnQgZ2V0X2Nob2ljZSh2b2lkKQ0Kew0KCWNoYXIgY2hvaWNlWzI1XTsgICAg
ICAgICAgICAgICAgICAgLy8ga2VlcHMgY2hvaWNlIGZyb20gdGhlIHVzZXIN
CglkbyB7DQogICAJcHJpbnRmKCJcbiAqICogKiBFbnRlciBZb3VyIENob2lj
ZSAqICogKlxuIik7IC8vIHByaW50IHRoZSBtZW51DQogICAJcHJpbnRmKCIg
IDEuIFRvIEVuY29kZSBGaWxlLiBcbiIpOw0KICAgCXByaW50ZigiICAyLiBU
byBEZWNvZGUgRmlsZS4gXG4iKTsNCiAgIAlwcmludGYoIiAgMy4gVG8gdXNl
IG9wZXJhdGluZyBzeXN0ZW0gY29tbWFuZC5cbiIpOw0KICAgCXByaW50Zigi
ICA0LiBUbyBWaWV3IGZpbGUuXG4iKTsNCiAgIAlwcmludGYoIiAgUS4gVG8g
ZXhpdDogIik7DQogICAJaWYgKGdldHMoY2hvaWNlKSA9PSBOVUxMKSB7ICAg
ICAgICAgLy8gcmVhZCB0aGUgc3RyaW5nDQogICAJCVNUUklOR19JTlBVVF9F
UlJPUjsgICAgICAgICAgICAgIC8vIGlmIGVycm9yIHJlYWRpbmcgc3RyaW5n
IHByaW50IG1lc3NhZ2UNCiAgIAkJZXhpdCgxKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYW5kIGV4aXQgcHJvZ3JhbQ0KICAgCX0NCiAgIAlwcmlu
dGYoIlxuIik7IAkJCQkJCQkJLy8gbWFrZSBzb21lIHNwYWNlDQogICAJDQog
ICAJLy8gaWYgJzEnIGVudGVyZWQgcmV0dXJuIDENCiAgIAlpZiAoKGNob2lj
ZVswXSA9PSAnMScpICYmIChjaG9pY2VbMV0gPT0gJ1wwJykpIHsNCiAgIAkJ
cHJpbnRmKCJSZWFkeSB0byBFbmNvZGUgZmlsZS5cbiIpOw0KICAgCQlyZXR1
cm4gMTsNCiAgIAl9DQoJCS8vIGlmICcyJyBlbnRlcmVkIHJldHVybiAyDQog
ICAJZWxzZSBpZiAoKGNob2ljZVswXSA9PSAnMicpICYmIChjaG9pY2VbMV0g
PT0gJ1wwJykpIHsNCiAgIAkJcHJpbnRmKCJSZWFkeSB0byBEZWNvZGUgRmls
ZS5cbiIpOw0KICAgCQlyZXR1cm4gMjsNCiAgIAl9DQogICAJDQogICAJLy8g
YWxsb3cgdXNlciB0byB1c2Ugb3BlcmF0aW5nIHN5c3RlbSBjb21tYW5kcyBp
ZiBjaG9pY2UgPSAzDQogICAJZWxzZSBpZiAoKGNob2ljZVswXSA9PSAnMycp
ICYmIChjaG9pY2VbMV0gPT0gJ1wwJykpIG9wZXJhdGluZ19zeXN0ZW0oKTsN
CiAgIAkNCiAgIAkvLyBwcmludCB0aGUgY29udGVudCBvZiB0aGUgc3BlY2lm
aWVkIGZpbGUgdG8gc2NyZWVuIGlmIGNob2ljZSA9IDQNCiAgIAllbHNlIGlm
ICgoY2hvaWNlWzBdID09ICc0JykgJiYgKGNob2ljZVsxXSA9PSAnXDAnKSkg
dmlld19maWxlKCk7DQogICAJDQogICAJLy8gaWYgY2hvaWNlID0gcSBvciBR
IGV4aXQgcHJvZ3JhbQ0KICAgCWVsc2UgaWYgKCh0b3VwcGVyKGNob2ljZVsw
XSkgPT0gJ1EnKSAmJiAoY2hvaWNlWzFdID09ICdcMCcpKSB7DQogICAJCXBy
aW50ZigiRXhpdGluZyBQcm9ncmFtLlxuIik7DQogICAgICAJZXhpdCgwKTsJ
CQkvLyBhbmQgZXhpdC4NCiAgIAl9DQogICAJDQogICAJLy8gaWYgbm9uZSBv
ZiB0aG9zZSBhYm92ZSBwcmludCBlcnJvcg0KICAgCWVsc2Ugew0KICAgCQlw
cmludGYoIkVycm9yIGluIGlucHV0IHBsZWFzZSBzZWxlY3QgdGhlIG9wdGlv
biBhZ2Fpbi5cbiIpOw0KICAgCX0NCiAgIAkNCiAgIC8vIHJlcGVhdCBmb3Jl
dmVyIG9yIHVudGlsIG9uZSBvZiB0aGUgdmFsaWQgcmV0dXJuIHN0YXRlbWVu
dHMgDQogICAvLyBpcyBleGVjdXRlZA0KICAgfSB3aGlsZSAoSU5GSU5JVFkp
OyANCn0NCg0KLy8gIGdldHMgdGhlIGRlY29kZSAvIGVuY29kZSBzdHJpbmcN
CmNoYXIgKmdldF9kZWNvZGVfc3RyaW5nKCkNCnsNCgljaGFyIHN0cmluZ1s4
MF07ICAgLy8ga2VlcHMgdGhlIHN0cmluZw0KICAgcHJpbnRmKCJcbkVudGVy
IHRoZSBlbmNvZGUvZGVjb2RlIHN0cmluZzogIik7IC8vIHByb21wdCB0byBl
bnRlciB0aGUgc3RyaW5nDQogICBpZiAoZ2V0cyhzdHJpbmcpID09IE5VTEwp
IHsgIC8vIGlmIGNhbid0IHJlYWQgc3RyaW5nDQogICAJU1RSSU5HX0lOUFVU
X0VSUk9SOwkJICAvLyBwcmludCBlcnJvciBtZXNzYWdlDQogICAJZXhpdCgx
KTsgICAgICAgICAgICAgICAgICAvLyBhbmQgZXhpdCBwcm9ncmFtDQogICB9
DQogICByZXR1cm4gc3RyaW5nOyAgICAgICAgICAgICAgIC8vIHJldHVybiBz
dHJpbmcNCn0NCg0KbWFpbigpDQp7DQogICBGSUxFKiBpbnB1dDsgICAgICAg
ICAgICAgICAgIC8vIGlucHV0IGZpbGUNCiAgIEZJTEUqIG91dHB1dDsgICAg
ICAgICAgICAgICAgLy8gb3V0cHV0IGZpbGUNCiAgIGludCAgIGNob2ljZTsg
ICAgICAgICAgICAgICAgLy8gY2hvaWNlIHdoZXRoZXIgZGVjb2Rpbmcgb3Ig
ZW5jb2RpbmcNCgljaGFyICBwYXNzd29yZFs4MF07ICAgICAgICAgIC8vIGRl
Y29kaW5nL2VuY29kaW5nIHN0cmluZw0KICAgY2hhciAgY2hhcmFjdGVyOyAg
ICAgICAgICAgICAvLyBjaGFyYWN0ZXIgcmVhZCBmcm9tIHRoZSBmaWxlDQog
ICBpbnQgICBpbmRleCA9IDA7CQkJCSAgLy8ga2VlcHMgd2hpY2ggY2hhcmFj
dGVyIGlzIGJlaW5nIHVzZWQgaW4NCiAgIAkJCQkJCQkJCSAgLy8gZW5jb2Rp
bmcvZGVjb2Rpbmcgc3RyaW5nDQoJdW5zaWduZWQgbG9uZyAgbnVtX2NoYXJz
ID0gMDsvLyBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBhIGZpbGUNCg0KCXdo
aWxlIChJTkZJTklUWSkgeyAvLyByZXBlYXQgbG9vcCBmb3JldmVyIG9yIHVu
dGlsIHF1aXQgY29tbWFuZCBpcyBleGVjdXRlZA0KCQkvLyBjYWxsIGdldF9j
aG9pY2UoKSBmdW5jdGlvbiBhbmQgc3RvcmUgb3V0cHV0IGludG8gY2hvaWNl
DQoJCWNob2ljZSA9IGdldF9jaG9pY2UoKTsNCg0KICAgCS8vIGdldCBpbnB1
dCBmaWxlDQogICAJaW5wdXQgPSBnZXRfaW5wdXRfZmlsZSgpOw0KDQogICAJ
Ly8gZ2V0IG91dHB1dCBmaWxlDQogICAJb3V0cHV0ID0gZ2V0X291dHB1dF9m
aWxlKCk7DQoNCiAgIAkvLyBnZXQgZGVjb2RlL2VuY29kZSBzdHJpbmcgYW5k
IGNvcHkgaXQgdG8gcGFzc3dvcmQNCiAgIAlzdHJjcHkocGFzc3dvcmQsIGdl
dF9kZWNvZGVfc3RyaW5nKCkpOw0KCQkNCgkJaW5kZXggPSAwOw0KCQludW1f
Y2hhcnMgPSAwOw0KCQkNCiAgIAkvLyByZWFkIGEgY2hhcmFjdGVyIGZyb20g
dGhlIGZpbGUgdW50aWwgZW5kIG9mIGZpbGUgYXByb2FjaGVkDQogICAJd2hp
bGUgKChjaGFyYWN0ZXIgPSBnZXRjKGlucHV0KSkgIT0gRU9GKSB7DQogICAJ
CS8vIGluY3JlbWVudCBudW1iZXIgb2YgY2hhcmFjdGVycw0KICAgCQludW1f
Y2hhcnMrKzsNCiAgIAkJLy8gaWYgY2hvaWNlIGlzIDEgZW5jb2RlIGNoYXJh
Y3Rlcg0KICAgICAgCWlmIChjaG9pY2UgPT0gMSkgY2hhcmFjdGVyID0gZW5j
b2RlX2NoYXIoY2hhcmFjdGVyLCBwYXNzd29yZFtpbmRleF0pOw0KICAgICAg
CS8vIGVsc2UgZGVjb2RlIGNoYXJhY3Rlcg0KICAgICAgCWVsc2UgY2hhcmFj
dGVyID0gZGVjb2RlX2NoYXIoY2hhcmFjdGVyLCBwYXNzd29yZFtpbmRleF0p
Ow0KICAgICAgCS8vIGluY3JlbWVudCBpbmRleA0KCQkJaW5kZXgrKzsNCiAg
ICAgIAkvLyBpZiBsYXN0IGxldHRlciBvZiBwYXNzd29yZCBhcHJvYWNoZWQg
Z28gdG8gZmlyc3QgbGV0dGVyDQogICAgICAJaWYgKHBhc3N3b3JkW2luZGV4
XSA9PSAnXDAnKSBpbmRleCA9IDA7DQoNCgkJCS8vIHB1dCB0aGUgY2hhbmdl
ZCBjaGFyYWN0ZXIgaW50byBvdXRwdXQgZmlsZQ0KICAgICAgCWlmICgoY2hh
cmFjdGVyID0gcHV0YyhjaGFyYWN0ZXIsIG91dHB1dCkpID09IEVPRikgew0K
ICAgICAgCQkvLyBpZiBjYW4ndCBwdXQgdG8gdGhlIGZpbGUgcHJpbnQgZXJy
b3IgbWVzc2FnZQ0KICAgICAgCQlwcmludGYoIkVycm9yIHdyaXRpbmcgdG8g
b3V0cHV0IGZpbGUuXG4iKTsNCiAgICAgICAgIAkvLyBhbmQgZXhpdCBwcm9n
cmFtDQogICAgICAJCWV4aXQoMSk7DQogICAgICAJfQ0KICAgCX0gDQogICAJ
cHJpbnRmKCJFeGVjdXRpb24gc3VjY2VzZnVsbC5cbiIpOwkvLyBwcmludCBm
aW5hbCBtZXNzYWdlDQogICAJcHJpbnRmKCIlbHUgY2hhcmFjdGVycyBzdG9y
ZWQgaW4gZmlsZS5cbiIsIG51bV9jaGFycyk7DQoNCiAgIAkvLyBjbG9zZSBm
aWxlcw0KICAgCWZjbG9zZShpbnB1dCk7DQogICAJZmNsb3NlKG91dHB1dCk7
DQogICB9DQp9DQoNCg0KDQo=
---559023410-851401618-886205868=:25371--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019