Path: chuka.playstation.co.uk!news From: Jake Turner Newsgroups: scee.yaroze.programming.libraries Subject: Re: FntPrint Date: Tue, 20 Oct 1998 20:03:48 +0100 Organization: PlayStation Net Yaroze (SCEE) Lines: 338 Message-ID: <362CDE94.299978C9@revolution.co.uk> References: <362650B4.9CD3810E@revolution.co.uk> <7078mr$nec16@chuka.playstation.co.uk> <3629A76C.1E6B01A6@revolution.co.uk> <70cjbi$s3k7@chuka.playstation.co.uk> NNTP-Posting-Host: 62.172.81.107 Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------84A61181AC8182760092C67F" X-Mailer: Mozilla 4.05 [en] (Win95; I) This is a multi-part message in MIME format. --------------84A61181AC8182760092C67F Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Nick Slaven wrote: > Jake Turner wrote in message <3629A76C.1E6B01A6@revolution.co.uk>... > >P.S. I am using C++ and latest versions of CodeWarrior (v2 + patch from > >their web-site), oh I am on a PC not Mac. > > Got exactly the same version here. > Post up your code? Here we go, I've attached the source file to my debug options class which tries to use FntPrint to get a nice lined up text output. The main loop is just using plain old gs stuff and here is the FntLoad bit: if ( reloadFont ) { // Font stuff FntLoad( 512, 256 ); FntOpen( -SCREEN_W/2, -SCREEN_H/2, SCREEN_W, SCREEN_H, 0, 1024 ); reloadFont = 0; } Its got me as to why it doesn't work. P.S. When you say restructure code, what do you mean ? Where I call FntPrint compared to where I do DrawSync(0) and FntFlush(-1) ? -- Jake Turner : Token Rocket Scientist ========================================= Practive VI it may save your life one day --------------84A61181AC8182760092C67F Content-Type: application/x-unknown-content-type-cppFile; name="psx_options.cpp" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="psx_options.cpp" LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqDQoqKiAgDQoqKiAgIG1vZHVsZSBuYW1lOiAgJFdvcmtmaWxlOiBw c3hfb3B0aW9ucy5jcHAgJA0KKiogICBhcmNoaXZlOiAgICAgICRBcmNoaXZlOiAvcHgvcHN4 TGlicmFyeS9wc3hfb3B0aW9ucy5jcHAgJA0KKiogICBBdXRob3I6ICAgICAgICRBdXRob3I6 IEpha2V0ICQgICAkRGF0ZTogMTYvMTAvOTggMTE6NDUgJA0KKiogICBWZXJzaW9uIE5vOiAg ICRSZXZpc2lvbjogMyAkDQoqKiAgIFN5bm9wc2lzOg0KKioNCioqICBSZXZvbHV0aW9uIFNv ZnR3YXJlIEx0ZC4sDQoqKiAgS2luZ3MgSG91c2UsDQoqKiAgMTIgS2luZ3MgU3QsIA0KKiog IFlvcmssIFlvcmtzaGlyZSwgRW5nbGFuZCwgWU8xIDFTUC4NCioqDQoqKiAgQW1lbmRtZW50 IEhpc3Rvcnk6DQoqKiAgICRMb2c6IC9weC9wc3hMaWJyYXJ5L3BzeF9vcHRpb25zLmNwcCAk DQogKiANCiAqIDMgICAgIDE2LzEwLzk4IDExOjQ1IEpha2V0DQogKiBmaW5hbCB0ZXN0IGZv ciBuZXd2ZXIuYmF0DQoqKg0KKiogIENvbnRlbnRzOiAgc3RydWN0cw0KKiogICAgICAgICAg ICAgY2xhc3Nlcw0KKiogIE5vdGVzOg0KKioNCioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKioNCioqIFNp bXBsZSBvcHRpb25zIGJhc2VkIGNsYXNzIGZvciBoYW5kbGluZyBhIGRlYnVnIG9wdGlvbnMN CioqIHNjcmVlbiBvbiB0aGUgcGxheXN0YXRpb24NCioqDQoqKiBFYWNoIG9wdGlvbiBoYXMg YSB2YWx1ZSwgbWluLCBtYXgsIHRleHQgc3RyaW5nDQoqKg0KKiogSXQgaXMgYmFzZWQgb24g aW50J3Mgd2l0aCBzaW1wbGUgaW50ZWdlciBrZXlpbmcgdmlhIHVzZXIgZGVmaW5lZCBlbnVt J3MNCioqIGludGVybmFsbHkgdXNlIGEgZml4ZWQgbGVuZ3RoIGFycmF5Lg0KKioNCioqIFRo ZSBpbnRlZ2VycyBzdXBwb3J0IHNpbXBsZSBtaW4gJiBtYXggcmFuZ2VzDQoqKg0KKiogQ291 bGQgYmUgbWFkZSB0byBzdXBwb3J0IGFueSB0eXBlIHZpYSBhIHRlbXBsYXRlIHByb2Nlc3Ms IGJ1dCANCioqIHdvdWxkIHRoYXQgYmUgd29ydGggdGhlIHRyb3VibGUgb2YgZ2V0dGluZyB0 ZW1wbGF0ZXMgdG8gd29yaw0KKioNCioqIEFkZGl0aW9uYWxseSwgaGFzIHNvbWUgc2ltcGxl IGRyYXdpbmcgYW5kIGhhbmRsaW5nIG9mIHRoZSBjb250cm9sIHBhZA0KKiogDQoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8NCg0KI2luY2x1ZGUgInBzeExpYnJhcnlccHN4X29wdGlvbnMuaCINCiNkZWZp bmUgVlNZTkNfV0FJVFMgNQ0KDQojZGVmaW5lIE9QVF9YIC1TQ1JFRU5fVy8yKzUwDQojZGVm aW5lIE9QVF9ZIC1TQ1JFRU5fSC8yKzYwDQojZGVmaW5lIE9QVF9XIDQxNQ0KI2RlZmluZSBP UFRfSCAxNzANCg0KDQovLyBDbHVkZ2UgdG8gY2FsbCBhIGZ1bmN0aW9uIGluc2lkZSBhIGNs YXNzDQppbnQgZ2xvYmFsTWFrZU1zZ0JveCggaW50IHZhbHVlLCB2b2lkKiB1c3IgKQ0Kew0K ICAgKChPcHRpb25zKil1c3IpLT5NYWtlTWVzc2FnZUJveCgpOw0KICAgcmV0dXJuIDA7DQp9 DQoNCnZvaWQgT3B0aW9uczo6Q29uc3RydWN0KCB2b2lkICkNCnsNCiAgIGludCBpOw0KICAg Zm9yICggaSA9IDA7IGkgPCBNQVhfTlVNX0VOVFJJRVM7IGkrKyApDQogICB7DQogICAgICBl bnRyaWVzW2ldLm5hbWUgPSBOVUxMOw0KICAgICAgZW50cmllc1tpXS5rZXkgPSAwOw0KICAg ICAgZW50cmllc1tpXS5wdmFsdWUgPSBOVUxMOw0KICAgICAgLy8gcG9pbnRlciB0byB2b2lk IGZ1bmN0aW9uKCBpbnQgKQ0KICAgICAgZW50cmllc1tpXS5mdW5jID0gTlVMTDsNCiAgICAg IGVudHJpZXNbaV0udXNyID0gTlVMTDsNCiAgICAgIGVudHJpZXNbaV0ubWluID0gMDsNCiAg ICAgIGVudHJpZXNbaV0ubWF4ID0gMDsNCiAgICAgIGVudHJpZXNbaV0udGV4dCA9IE5VTEw7 DQogICB9DQoNCiAgIGZvciAoIGkgPSAwOyBpIDwgTUFYX05VTV9TRVRTOyBpKysgKQ0KICAg ew0KICAgICAgc2V0c1tpXS5uYW1lID0gTlVMTDsNCiAgICAgIHNldHNbaV0ua2V5ID0gMDsN CiAgICAgIHNldHNbaV0ubkVudHJpZXMgPSAwOw0KICAgICAgc2V0c1tpXS50ZXh0ID0gTlVM TDsNCiAgIH0NCg0KICAgblNldHMgPSAwOw0KICAgbkVudHJpZXMgPSAwOw0KICAgc2VsU2V0 SW5kZXggPSAwOw0KICAgc2VsU2V0S2V5ID0gMDsNCiAgIHNlbEtleSA9IDA7DQogICBzZWxF bnRyeUluZGV4ID0gMDsNCiAgIA0KICAgLy8gTWVzc2FnZSBib3ggc2V0dGluZ3MNCiAgIG94 ID0gT1BUX1g7DQogICBveSA9IE9QVF9ZOw0KICAgdyA9IE9QVF9XOw0KICAgaCA9IE9QVF9I Ow0KICAgDQogICByID0gODsNCiAgIGcgPSA4Ow0KICAgYiA9IDg7DQogICBhYnIgPSAyOw0K DQogICBBZGRTZXQoIChpbnQpTXNnQm94U2V0LCAiT3B0SW50IiwgIk9wdGlvbnMgU2NyZWVu IEludGVybmFsIFNldHRpbmdzIiApOw0KDQogICBBZGRFbnRyeSggKGludClNc2dCb3hTZXQs IChpbnQpTXNnQm94WHBvcywgDQogICAgICAgICAgICAgIk1CWCIsICJPcHRpb25zIEJveCB4 IHBvc2l0aW9uIiwgDQogICAgICAgICAgICAgJm94LCAtU0NSRUVOX1csIFNDUkVFTl9XLCAm Z2xvYmFsTWFrZU1zZ0JveCwgdGhpcyApOw0KDQogICBBZGRFbnRyeSggKGludClNc2dCb3hT ZXQsIChpbnQpTXNnQm94WXBvcywgDQogICAgICAgICAgICAgIk1CWSIsICJPcHRpb25zIEJv eCB5IHBvc2l0aW9uIiwgDQogICAgICAgICAgICAgJm95LCAtU0NSRUVOX0gsIFNDUkVFTl9I LCAmZ2xvYmFsTWFrZU1zZ0JveCwgdGhpcyApOw0KDQogICBBZGRFbnRyeSggKGludClNc2dC b3hTZXQsIChpbnQpTXNnQm94V2lkdGgsIA0KICAgICAgICAgICAgICJNQlciLCAiT3B0aW9u cyBCb3ggd2lkdGgiLCANCiAgICAgICAgICAgICAmdywgMCwgU0NSRUVOX1csICZnbG9iYWxN YWtlTXNnQm94LCB0aGlzICk7DQoNCiAgIEFkZEVudHJ5KCAoaW50KU1zZ0JveFNldCwgKGlu dClNc2dCb3hIZWlnaHQsIA0KICAgICAgICAgICAgICJNQkgiLCAiT3B0aW9ucyBCb3ggaGVp Z2h0IiwgDQogICAgICAgICAgICAgJmgsIDAsIFNDUkVFTl9ILCAmZ2xvYmFsTWFrZU1zZ0Jv eCwgdGhpcyApOw0KDQogICBBZGRFbnRyeSggKGludClNc2dCb3hTZXQsIChpbnQpTXNnQm94 UmVkLCANCiAgICAgICAgICAgICAiTUJSIiwgIk9wdGlvbnMgQm94IHJlZCIsIA0KICAgICAg ICAgICAgICZyLCAwLCAzMSwgJmdsb2JhbE1ha2VNc2dCb3gsIHRoaXMgKTsNCg0KICAgQWRk RW50cnkoIChpbnQpTXNnQm94U2V0LCAoaW50KU1zZ0JveEdyZWVuLCANCiAgICAgICAgICAg ICAiTUJHIiwgIk9wdGlvbnMgQm94IGdyZWVuIiwgDQogICAgICAgICAgICAgJmcsIDAsIDMx LCAmZ2xvYmFsTWFrZU1zZ0JveCwgdGhpcyApOw0KDQogICBBZGRFbnRyeSggKGludClNc2dC b3hTZXQsIChpbnQpTXNnQm94Qmx1ZSwgDQogICAgICAgICAgICAgIk1CQiIsICJPcHRpb25z IEJveCBibHVlIiwgDQogICAgICAgICAgICAgJmIsIDAsIDMxLCAmZ2xvYmFsTWFrZU1zZ0Jv eCwgdGhpcyApOw0KDQogICBBZGRFbnRyeSggKGludClNc2dCb3hTZXQsIChpbnQpTXNnQm94 QWJyLCANCiAgICAgICAgICAgICAiTUJNb2RlIiwgIk9wdGlvbnMgYWJyIG1vZGUiLCANCiAg ICAgICAgICAgICAmYWJyLCAwLCAzLCAmZ2xvYmFsTWFrZU1zZ0JveCwgdGhpcyApOw0KICAg DQogICBzZXRUUG9seUY0KCAmbXNnQm94ICk7DQogICBzZXRUU2VtaVRyYW5zKCAmbXNnQm94 LCAxICk7DQogICBtb2RlID0gU2V0TW9kZTsNCn0NCg0KT3B0aW9uczo6fk9wdGlvbnMoIHZv aWQgKQ0Kew0KfQ0KDQpPcHRpb25zOjpPcHRpb25zKCBjb25zdCBPcHRpb25zJiBzcmMgKQ0K ew0KICAgaW50IGk7DQogICBmb3IgKCBpID0gMDsgaSA8IE1BWF9OVU1fRU5UUklFUzsgaSsr ICkNCiAgIHsNCiAgICAgIGVudHJpZXNbaV0ubmFtZSA9IHNyYy5lbnRyaWVzW2ldLm5hbWU7 DQogICAgICBlbnRyaWVzW2ldLmtleSA9IHNyYy5lbnRyaWVzW2ldLmtleTsNCiAgICAgIGVu dHJpZXNbaV0ucHZhbHVlID0gc3JjLmVudHJpZXNbaV0ucHZhbHVlOw0KICAgICAgZW50cmll c1tpXS5mdW5jID0gc3JjLmVudHJpZXNbaV0uZnVuYzsNCiAgICAgIGVudHJpZXNbaV0udXNy ID0gc3JjLmVudHJpZXNbaV0udXNyOw0KICAgICAgZW50cmllc1tpXS5taW4gPSBzcmMuZW50 cmllc1tpXS5taW47DQogICAgICBlbnRyaWVzW2ldLm1heCA9IHNyYy5lbnRyaWVzW2ldLm1h eDsNCiAgICAgIGVudHJpZXNbaV0udGV4dCA9IHNyYy5lbnRyaWVzW2ldLnRleHQ7DQogICB9 DQoNCiAgIGZvciAoIGkgPSAwOyBpIDwgTUFYX05VTV9TRVRTOyBpKysgKQ0KICAgew0KICAg ICAgc2V0c1tpXS5uYW1lID0gc3JjLnNldHNbaV0ubmFtZTsNCiAgICAgIHNldHNbaV0ua2V5 ID0gc3JjLnNldHNbaV0ua2V5Ow0KICAgICAgc2V0c1tpXS5uRW50cmllcyA9IHNyYy5zZXRz W2ldLm5FbnRyaWVzOw0KICAgICAgc2V0c1tpXS50ZXh0ID0gc3JjLnNldHNbaV0udGV4dDsN CiAgIH0NCg0KICAgblNldHMgPSBzcmMublNldHM7DQogICBuRW50cmllcyA9IHNyYy5uRW50 cmllczsNCiAgIHNlbFNldEluZGV4ID0gc3JjLnNlbFNldEluZGV4IDsNCiAgIHNlbFNldEtl eSA9IHNyYy5zZWxTZXRLZXk7DQogICBzZWxLZXkgPSBzcmMuc2VsS2V5Ow0KICAgc2VsRW50 cnlJbmRleCA9IHNyYy5zZWxFbnRyeUluZGV4Ow0KICAgbW9kZSA9IHNyYy5TZXRNb2RlOw0K DQogICAvLyBNZXNzYWdlIGJveCBzZXR0aW5ncw0KICAgb3ggPSBzcmMub3g7DQogICBveSA9 IHNyYy5veTsNCiAgIHcgPSBzcmMudzsNCiAgIGggPSBzcmMuaDsNCiAgIA0KICAgciA9IHNy Yy5yOw0KICAgZyA9IHNyYy5nOw0KICAgYiA9IHNyYy5iOw0KICAgYWJyID0gc3JjLmFicjsN Cn0NCg0KDQpPcHRpb25zJiBPcHRpb25zOjpvcGVyYXRvciA9ICggY29uc3QgT3B0aW9ucyYg c3JjICkNCnsNCiAgIGludCBpOw0KICAgZm9yICggaSA9IDA7IGkgPCBNQVhfTlVNX0VOVFJJ RVM7IGkrKyApDQogICB7DQogICAgICBlbnRyaWVzW2ldLm5hbWUgPSBzcmMuZW50cmllc1tp XS5uYW1lOw0KICAgICAgZW50cmllc1tpXS5rZXkgPSBzcmMuZW50cmllc1tpXS5rZXk7DQog ICAgICBlbnRyaWVzW2ldLnB2YWx1ZSA9IHNyYy5lbnRyaWVzW2ldLnB2YWx1ZTsNCiAgICAg IGVudHJpZXNbaV0uZnVuYyA9IHNyYy5lbnRyaWVzW2ldLmZ1bmM7DQogICAgICBlbnRyaWVz W2ldLnVzciA9IHNyYy5lbnRyaWVzW2ldLnVzcjsNCiAgICAgIGVudHJpZXNbaV0ubWluID0g c3JjLmVudHJpZXNbaV0ubWluOw0KICAgICAgZW50cmllc1tpXS5tYXggPSBzcmMuZW50cmll c1tpXS5tYXg7DQogICAgICBlbnRyaWVzW2ldLnRleHQgPSBzcmMuZW50cmllc1tpXS50ZXh0 Ow0KICAgfQ0KDQogICBmb3IgKCBpID0gMDsgaSA8IE1BWF9OVU1fU0VUUzsgaSsrICkNCiAg IHsNCiAgICAgIHNldHNbaV0ubmFtZSA9IHNyYy5zZXRzW2ldLm5hbWU7DQogICAgICBzZXRz W2ldLmtleSA9IHNyYy5zZXRzW2ldLmtleTsNCiAgICAgIHNldHNbaV0ubkVudHJpZXMgPSBz cmMuc2V0c1tpXS5uRW50cmllczsNCiAgICAgIHNldHNbaV0udGV4dCA9IHNyYy5zZXRzW2ld LnRleHQ7DQogICB9DQoNCiAgIG5TZXRzID0gc3JjLm5TZXRzOw0KICAgbkVudHJpZXMgPSBz cmMubkVudHJpZXM7DQogICBzZWxTZXRJbmRleCA9IHNyYy5zZWxTZXRJbmRleCA7DQogICBz ZWxTZXRLZXkgPSBzcmMuc2VsU2V0S2V5Ow0KICAgc2VsS2V5ID0gc3JjLnNlbEtleTsNCiAg IHNlbEVudHJ5SW5kZXggPSBzcmMuc2VsRW50cnlJbmRleDsNCiAgIG1vZGUgPSBzcmMuU2V0 TW9kZTsNCg0KICAgLy8gTWVzc2FnZSBib3ggc2V0dGluZ3MNCiAgIG94ID0gc3JjLm94Ow0K ICAgb3kgPSBzcmMub3k7DQogICB3ID0gc3JjLnc7DQogICBoID0gc3JjLmg7DQogICANCiAg IHIgPSBzcmMucjsNCiAgIGcgPSBzcmMuZzsNCiAgIGIgPSBzcmMuYjsNCiAgIGFiciA9IHNy Yy5hYnI7DQoNCiAgIHJldHVybiAqdGhpczsNCn0NCg0KLy8gQWRkIGFuIG9wdGlvbiBzZXQg dG8gdGhlIGNvbGxlY3Rpb24NCmludCBPcHRpb25zOjpBZGRTZXQoIGNvbnN0IGludCBzZXRr ZXksIGNoYXIqIG5hbWUsIGNoYXIqIHRleHQgKQ0Kew0KICAgaW50IHNldGluZCA9IEZpbmRT ZXRJbmRleCggc2V0a2V5ICk7DQoNCiAgIC8vIGZvdW5kIHRoZSBzZXQsIHNvIG92ZXJ3cml0 ZQ0KICAgaWYgKCBzZXRpbmQgPj0gMCApDQogICB7DQogICAgICBwcmludGYoICJXYXJuaW5n IHNldCBrZXkgJWQgJXMgYWxyZWFkeSBleGlzdHMgb3ZlcndyaXRpbmdcbiIsIA0KICAgICAg ICAgICAgICBzZXRrZXksIG5hbWUgKTsNCiAgICAgIG5TZXRzLS07DQogICB9DQogICBlbHNl DQogICAgICBzZXRpbmQgPSBuU2V0czsNCg0KICAgc2V0c1tzZXRpbmRdLm5hbWUgPSBuYW1l Ow0KICAgc2V0c1tzZXRpbmRdLmtleSA9IHNldGtleTsNCiAgIHNldHNbc2V0aW5kXS5uRW50 cmllcyA9IDA7DQogICBzZXRzW3NldGluZF0udGV4dCA9IHRleHQ7DQogICBuU2V0cysrOw0K DQogICByZXR1cm4gMTsNCn0NCg0KaW50IE9wdGlvbnM6OkFkZEVudHJ5KCBjb25zdCBpbnQg c2V0a2V5LCBjb25zdCBpbnQgZW50cnlrZXksIA0KICAgICAgICAgICAgICAgICAgICAgIGNo YXIqIG5hbWUsIGNoYXIqIHRleHQsDQogICAgICAgICAgICAgICAgICAgICAgaW50KiBwdmFs LCBjb25zdCBpbnQgbWluaW11bSwgY29uc3QgaW50IG1heGltdW0sDQogICAgICAgICAgICAg ICAgICAgICAgT3B0aW9uc0VudHJ5RnVuY3Rpb24gZiwgdm9pZCogdXNyICkNCnsNCiAgIGlu dCBzZXRpbmQgPSBGaW5kU2V0SW5kZXgoIHNldGtleSApOw0KDQogICAvLyBmYWlsZWQgdG8g ZmluZCBzZXQsIHNvIGJpZyBlcnJvciANCiAgIGlmICggc2V0aW5kIDwgMCApDQogICB7DQog ICAgICBwcmludGYoICJFUlJPUiBzZXQga2V5ICVkIGZvciBlbnRyeSBrZXkgJWQgJXMgZG9u J3QgZXhpc3RcbiIsIA0KICAgICAgICAgICAgICBzZXRrZXksIGVudHJ5a2V5LCBuYW1lICk7 DQogICAgICByZXR1cm4gMDsNCiAgIH0NCiAgIA0KICAgaW50IGluZGV4ID0gRmluZEVudHJ5 SW5kZXgoIHNldGtleSwgZW50cnlrZXkgKTsNCg0KICAgLy8gdGVzdCBmb3Igc3VjY2Vzcw0K ICAgaWYgKCBpbmRleCA+PSAwICkNCiAgIHsNCiAgICAgIC8vIHN1Y2Nlc3MgcHJpbnQgd2Fy bmluZyBtZXNzYWdlIGFuZCBvdmVyd3JpdGUgb2xkIGVudHJ5DQogICAgICBwcmludGYoICJX YXJuaW5nIGVudHJ5IGtleSAlZCAlcyBhbHJlYWR5IGV4aXN0cyBpbiBzZXQgJWQgJXNcbiIs IA0KICAgICAgICAgICAgICBlbnRyeWtleSwgbmFtZSwgc2V0a2V5LCBzZXRzW3NldGluZF0u bmFtZSApOw0KDQogICAgICAvLyBBIGNsdWRnZSBJIGtub3cgYnV0IHRoaXMgc2hvdWxkbid0 IGJlIGNhbGxlZCA6IHNob3VsZCBiZSBhbiBlcnJvcg0KICAgICAgc2V0c1tzZXRpbmRdLm5F bnRyaWVzLS07DQogICAgICBuRW50cmllcy0tOw0KICAgfQ0KICAgZWxzZQ0KICAgICAgaW5k ZXggPSBuRW50cmllczsNCg0KICAgT3B0aW9uRW50cnkqIHBFbnRyeSA9IGVudHJpZXMraW5k ZXg7DQoNCiAgIHBFbnRyeS0+bmFtZSA9IG5hbWU7DQogICBwRW50cnktPnRleHQgPSB0ZXh0 Ow0KICAgcEVudHJ5LT5rZXkgPSBNYWtlS2V5KCBzZXRrZXksIGVudHJ5a2V5ICk7DQogICBp ZiAoIHB2YWwgPT0gTlVMTCApDQogICAgICBwRW50cnktPnB2YWx1ZSA9IG5ldyBpbnQ7DQog ICBlbHNlDQogICAgICBwRW50cnktPnB2YWx1ZSA9IChpbnQqKXB2YWw7DQoNCiAgIGlmICgg bWluaW11bSA8IG1heGltdW0gKQ0KICAgew0KICAgICAgcEVudHJ5LT5taW4gPSBtaW5pbXVt Ow0KICAgICAgcEVudHJ5LT5tYXggPSBtYXhpbXVtOw0KICAgfQ0KICAgZWxzZQ0KICAgew0K ICAgICAgcEVudHJ5LT5taW4gPSBtYXhpbXVtOw0KICAgICAgcEVudHJ5LT5tYXggPSBtaW5p bXVtOw0KICAgfQ0KICAgDQogICBwRW50cnktPmZ1bmMgPSBmOw0KICAgcEVudHJ5LT51c3Ig PSB1c3I7DQoNCiAgIC8vIEFuIGV4dHJhIGVudHJ5DQogICBzZXRzW3NldGluZF0ubkVudHJp ZXMrKzsNCiAgIG5FbnRyaWVzKys7DQogICByZXR1cm4gMTsNCn0NCg0Kdm9pZCBPcHRpb25z OjpJbmNyZW1lbnQoIGNvbnN0IGludCBpbmRleCApDQp7DQogICBBU1NFUlQyKCAoICggaW5k ZXggPj0gMCApICYmICggaW5kZXggPCBNQVhfTlVNX0VOVFJJRVMgKSApLCANCiAgICAgICAg ICAgICJpbGxlZ2FsIGluZGV4ICVkIE1BWCAlZFxuIiwgaW5kZXgsIE1BWF9OVU1fRU5UUklF UyApOw0KICAgDQogICBpbnQgdiA9ICplbnRyaWVzW2luZGV4XS5wdmFsdWUgKyAxOw0KICAg aWYgKCB2ID4gZW50cmllc1tpbmRleF0ubWF4ICkgdiA9IGVudHJpZXNbaW5kZXhdLm1pbjsN CiAgIC8vIElmIGZ1bmN0aW9uIHNldCB0aGVuIGNhbGwgdGhhdCBpZiBpdCByZXR1cm5zIDEg dGhlbiBjYXJyeSBvbg0KICAgaWYgKCBlbnRyaWVzW2luZGV4XS5mdW5jICkgDQogICAgICBp ZiAoIGVudHJpZXNbaW5kZXhdLmZ1bmMoIHYsIGVudHJpZXNbaW5kZXhdLnVzciApID09IDEg KSByZXR1cm47DQoNCiAgICooZW50cmllc1tpbmRleF0ucHZhbHVlKSA9IHY7DQp9DQoNCnZv aWQgT3B0aW9uczo6RGVjcmVtZW50KCBjb25zdCBpbnQgaW5kZXggKQ0Kew0KICAgQVNTRVJU MiggKCAoIGluZGV4ID49IDAgKSAmJiAoIGluZGV4IDwgTUFYX05VTV9FTlRSSUVTICkgKSwg DQogICAgICAgICAgICAiaWxsZWdhbCBpbmRleCAlZCBNQVggJWRcbiIsIGluZGV4LCBNQVhf TlVNX0VOVFJJRVMgKTsNCiAgIA0KICAgaW50IHYgPSAqZW50cmllc1tpbmRleF0ucHZhbHVl IC0gMTsNCiAgIGlmICggdiA8IGVudHJpZXNbaW5kZXhdLm1pbiApIHYgPSBlbnRyaWVzW2lu ZGV4XS5tYXg7DQogICAvLyBJZiBmdW5jdGlvbiBzZXQgbGV0IHRoYXQgdXBkYXRlIHRoZSB2 YWx1ZQ0KICAgaWYgKCBlbnRyaWVzW2luZGV4XS5mdW5jICkgDQogICAgICBpZiAoIGVudHJp ZXNbaW5kZXhdLmZ1bmMoIHYsIGVudHJpZXNbaW5kZXhdLnVzciApID09IDEgKSByZXR1cm47 DQoNCiAgICooZW50cmllc1tpbmRleF0ucHZhbHVlKSA9IHY7DQp9DQoNCg0KLy8gQWxsIHN0 dWZmIGZvciBkaXNwbGF5IHNldHRpbmdzIGFuZCBjaGFuZ2luZyB0aGVtIHVuZGVyIHVzZXIg Y29udHJvbA0KLy8gTm90ZSwgdGhlIGxvd2VyLWxldmVsIGZ1bmN0aW9ucyBoZXJlIGFyZSBz byBhIHRvcC1sZXZlbCBwcm9ncmFtDQovLyBjYW4gZG8gb3RoZXIgZHJhd2luZyBvciBzb3Vu ZCA/IHdoaWxzdCBoYXZpbmcgYW4gb3B0aW9uIHNjcmVlbg0KICAgDQovLyBEcmF3IHRoZSBv cHRpb25zIGFuZCB2YWx1ZXMgb24gc2NyZWVuIChzZWxlY3RlZCBvcHRpb24gaXMgaW4gcmVk KQ0Kdm9pZCBPcHRpb25zOjpEaXNwbGF5U2V0dGluZ3MoIHZvaWQgKQ0Kew0KICAgaW50IGk7 DQogICBPcHRpb25TZXQqIHBzZXQ7DQogICBpZiAoIG1vZGUgPT0gU2V0TW9kZSApDQogICB7 DQogICAgICBwc2V0ID0gc2V0czsNCiAgICAgIC8vIFByaW50IGEgdGl0bGUNCiAgICAgIEZu dFByaW50KCJ+YzA5MCAgICBTZWxlY3QgYW4gb3B0aW9uIHNldCBuU2V0czolZCBuRW50cmll czolZFxuXG4iLCANCiAgICAgICAgICAgICAgICBuU2V0cywgbkVudHJpZXMgKTsNCiAgICAg IGZvciAoIGkgPSAwOyBpIDwgblNldHM7IGkrKywgcHNldCsrICkNCiAgICAgIHsNCiAgICAg ICAgIC8vIERvIGN1cnJlbnQgc2VsZWN0aW9uIGluIHJlZCBkbyBvdGhlcnMgaW4gd2hpdGUN CiAgICAgICAgIGlmICggaSA9PSBzZWxTZXRJbmRleCApDQogICAgICAgICAgICBGbnRQcmlu dCgifmM5MDAlcyAlcyBuRW50cmllczolZFxuIiwNCiAgICAgICAgICAgICAgICBwc2V0LT5u YW1lLCBwc2V0LT50ZXh0LCBwc2V0LT5uRW50cmllcyApOw0KICAgICAgICAgZWxzZQ0KICAg ICAgICAgICAgRm50UHJpbnQoIn5jOTk5JXMgJXMgbkVudHJpZXM6JWRcbiIsDQogICAgICAg ICAgICAgICAgcHNldC0+bmFtZSwgcHNldC0+dGV4dCwgcHNldC0+bkVudHJpZXMgKTsNCiAg ICAgIH0NCiAgIH0NCiAgIGVsc2UNCiAgIHsNCiAgICAgIE9wdGlvbkVudHJ5KiBwZW50cnkg PSBlbnRyaWVzOw0KICAgICAgcHNldCA9IHNldHMgKyBzZWxTZXRJbmRleDsNCiAgICAgIC8v IFByaW50IGEgdGl0bGUNCiAgICAgIEZudFByaW50KCJ+YzA5MCVzICVzIG5FbnRyaWVzOiVk XG5cbiIsIA0KICAgICAgICAgICAgICAgIHBzZXQtPm5hbWUsIHBzZXQtPnRleHQsIHBzZXQt Pm5FbnRyaWVzICk7DQogICAgICBmb3IgKCBpID0gMDsgaSA8IG5FbnRyaWVzOyBpKyssIHBl bnRyeSsrICkNCiAgICAgIHsNCiAgICAgICAgIGlmICggc2VsU2V0S2V5ICE9IEdldFNldEtl eSggcGVudHJ5LT5rZXkgKSApIGNvbnRpbnVlOw0KICAgICAgICAgLy8gRG8gY3VycmVudCBz ZWxlY3Rpb24gaW4gcmVkIGRvIG90aGVycyBpbiB3aGl0ZQ0KICAgICAgICAgaWYgKCBpID09 IHNlbEVudHJ5SW5kZXggKQ0KICAgICAgICAgICAgRm50UHJpbnQoIn5jOTAwJXMgJXMgVmFs dWU6JWQgTWluOiVkIE1heDolZFxuIiwNCiAgICAgICAgICAgICAgICBwZW50cnktPm5hbWUs IHBlbnRyeS0+dGV4dCwgKihwZW50cnktPnB2YWx1ZSksIA0KICAgICAgICAgICAgICAgIHBl bnRyeS0+bWluLCBwZW50cnktPm1heCApOw0KICAgICAgICAgZWxzZQ0KICAgICAgICAgICAg Rm50UHJpbnQoIn5jOTk5JXMgJXMgVmFsdWU6JWQgTWluOiVkIE1heDolZFxuIiwNCiAgICAg ICAgICAgICAgICBwZW50cnktPm5hbWUsIHBlbnRyeS0+dGV4dCwgKihwZW50cnktPnB2YWx1 ZSksIA0KICAgICAgICAgICAgICAgIHBlbnRyeS0+bWluLCBwZW50cnktPm1heCApOw0KICAg ICAgfQ0KICAgfQ0KfQ0KICAgDQovLyBHZXQgdXNlciBpbnB1dCBhbmQgdXBkYXRlIHRoZSBp bnRlcm5hbCB2YWx1ZXMNCi8vIHJldHVybnMgDQovLyAgICAwOiBub3RoaW5nIGNoYW5nZWQN Ci8vICAgIDE6IHNldHRpbmcgY2hhbmdlZCAoc28gbmVlZCB0byB1cGRhdGUgdGhlIGRpc3Bs YXkpDQovLyAgIC0xOiB1c2VyIHdhbnRzIHRvIHF1aXQgb3B0aW9ucyBzY3JlZW4NCmludCBP cHRpb25zOjpIYW5kbGVVc2VySW5wdXQoIHZvaWQgKQ0Kew0KICAgaW50IHBhZGQgPSBQYWRS ZWFkKDEpOw0KICAgDQogICAvLyB0ZXN0IGZvciBxdWl0dGluZyAoU2VsZWN0IGJ1dHRvbikN CiAgIGlmICggKCBwYWRkICYgUEFEc2VsZWN0ICkgPiAwICkgeyByZXR1cm4gLTE7IH0NCiAg IA0KICAgLy8gQXJlIHdlIGRpc3BsYXlpbmcgdGhlIHNldHMgbGlzdCA/DQogICBpZiAoIG1v ZGUgPT0gU2V0TW9kZSApDQogICB7DQogICAgICAvLyBtb3ZlIHNlbGVjdGlvbiB1cCBvciBk b3duIChwYWQgMSA6IGxlZnQgdXAvZG93bikNCiAgICAgIGlmICggKCBwYWRkICYgUEFETHVw ICkgPiAwICkgeyBQcmV2U2V0KCk7IHJldHVybiAxOyB9DQogICAgICBpZiAoICggcGFkZCAm IFBBRExkb3duICkgPiAwICkgeyBOZXh0U2V0KCk7IHJldHVybiAxOyB9DQoNCiAgICAgIC8v IHNlbGVjdCBhbiBvcHRpb24gc2V0IHRvIHZpZXcgKFggYnV0dG9uKQ0KICAgICAgaWYgKCAo IHBhZGQgJiBQQURSZG93biApID4gMCApIHsgU3dpdGNoTW9kZSggRW50cmllc01vZGUgKTsg cmV0dXJuIDE7IH0NCiAgIH0NCiAgIGVsc2UNCiAgIHsNCiAgICAgIC8vIGdvIHVwIGEgbWVu dSBsZXZlbCBlLmcuIGJhY2sgdG8gc2V0cyBkaXNwbGF5IChwYWQgMTogW10gYnV0dG9uKQ0K ICAgICAgaWYgKCAoIHBhZGQgJiBQQURSbGVmdCApID4gMCApIHsgU3dpdGNoTW9kZSggU2V0 TW9kZSApOyByZXR1cm4gMTsgfQ0KDQogICAgICAvLyBtb3ZlIHNlbGVjdGlvbiB1cCBvciBk b3duIChwYWQgMSA6IGxlZnQgdXAvZG93bikNCiAgICAgIGlmICggKCBwYWRkICYgUEFETHVw ICkgPiAwICkgeyBQcmV2RW50cnkoKTsgcmV0dXJuIDE7IH0NCiAgICAgIGlmICggKCBwYWRk ICYgUEFETGRvd24gKSA+IDAgKSB7IE5leHRFbnRyeSgpOyByZXR1cm4gMTsgfQ0KICAgDQog ICAgICAvLyBkZWNyZW1lbnQvaW5jcmVtZW50IHZhbHVlICh0cmlhbmdsZSAvIFggYnV0dG9u KQ0KICAgICAgaWYgKCAoIHBhZGQgJiBQQURSdXAgKSA+IDAgKSB7IERlY3JlbWVudChzZWxF bnRyeUluZGV4KTsgcmV0dXJuIDE7IH0NCiAgICAgIGlmICggKCBwYWRkICYgUEFEUmRvd24g KSA+IDAgKSB7IEluY3JlbWVudChzZWxFbnRyeUluZGV4KTsgcmV0dXJuIDE7IH0NCiAgIA0K ICAgICAgLy8gZGVjcmVtZW50L2luY3JlbWVudCB2YWx1ZSAocGFkICA6IHJpZ2h0IGxlZnQv cmlnaHQgYnV0dG9uKQ0KICAgICAgaWYgKCAoIHBhZGQgJiBQQURMbGVmdCApID4gMCApIHsg RGVjcmVtZW50KHNlbEVudHJ5SW5kZXgpOyByZXR1cm4gMTsgfQ0KICAgICAgaWYgKCAoIHBh ZGQgJiBQQURMcmlnaHQgKSA+IDAgKSB7IEluY3JlbWVudChzZWxFbnRyeUluZGV4KTsgcmV0 dXJuIDE7IH0NCiAgIH0NCiAgIHJldHVybiAwOw0KfQ0KICAgDQogIA0KLy8gVGhpcyBpcyB0 aGUgaGlnaC1sZXZlbCBmdW5jdGlvbiBhbmQgdXNlcyB0aGUgYWJvdmUgbG93LWxldmVsIGZ1 bmN0aW9ucw0KLy8gdG8gZ2V0IHRoZSBqb2IgZG9uZQ0KICANCi8vIERpc3BsYXkgbG90cyBv ZiB0ZXh0IG9uIHNjcmVlbiBhbmQgaGFuZGxlIGpveXBhZCB0byBjaGFuZ2Ugc2V0dGluZ3MN CnZvaWQgT3B0aW9uczo6UnVuT3B0aW9uc1NjcmVlbiggdV9sb25nKiBvdCApDQp7DQogICBp bnQgZmxhZyA9IDE7DQogICBpbnQgaTsNCiAgIA0KICAgcHJpbnRmKCJSdW5PcHRpb25zU2Ny ZWVuXG4iKTsNCg0KICAgLy8gQ2xlYXIgdGhlIGJhY2tncm91bmQgdG8gcmVtb3ZlIGZudHBy aW50IHN0YWlucyAhDQogICBSRUNUIHNyY1syXTsNCg0KICAgLy8gZHJhdyBidWZmZXIgMCAN CiAgIHNldFJFQ1QoIHNyYywgMCwgMCwgIFNDUkVFTl9XLCBTQ1JFRU5fSCApOw0KICAgLy8g ZHJhdyBidWZmZXIgMSANCiAgIHNldFJFQ1QoIHNyYysxLCBTQ1JFRU5fVywgMCwgIFNDUkVF Tl9XLCBTQ1JFRU5fSCApOw0KICAgQ2xlYXJJbWFnZSggc3JjLCAwLCAwLCAwICk7DQogICAN CiAgIGlmICggc2VsU2V0SW5kZXggPCAwICkgc2VsU2V0SW5kZXggPSAwOw0KICAgaWYgKCBz ZWxTZXRJbmRleCA+PSBuU2V0cyApIHNlbFNldEluZGV4ID0gblNldHMtMTsNCiAgIA0KICAg Ly8gU2V0dXAgdGhlIGVudHJpZXMgcHJvcGVybHkgYnkgZ29pbmcgZm9yd2FyZCAmIGJhY2t3 YXJkIGFuIG9wdGlvbnMgc2V0DQogICBOZXh0U2V0KCk7DQogICBQcmV2U2V0KCk7DQoNCiAg IHByaW50ZigiUnVuT3B0aW9ucyBuU2V0czolZCBuRW50cmllczolZCBzZWxTZXRJbmRleDol ZFxuIiwgDQogICAgICAgICAgblNldHMsIG5FbnRyaWVzLCBzZWxTZXRJbmRleCApOw0KICAg ICAgICAgIA0KICAgTWFrZU1lc3NhZ2VCb3goKTsNCg0KICAgLy8gV2FpdCBhIGJpdCBzbyBw YWQgaW5mb3JtYXRpb24gY2FuIGJlIGNsZWFyZWQNCiAgIGZvciAoIGkgPSAwOyBpIDwgVlNZ TkNfV0FJVFMqNDsgaSsrICkgVlN5bmMoMCk7DQogICANCiAgIGRvDQogICB7DQogICAgICAv LyBXYWl0IGEgYml0IHNvIHBhZCBpbmZvcm1hdGlvbiBjYW4gYmUgY2xlYXJlZA0KICAgICAg Zm9yICggaSA9IDA7IGkgPCBWU1lOQ19XQUlUUzsgaSsrICkgVlN5bmMoMCk7DQogICAgICAN CiAgICAgIC8vIFN3aXRjaCB0aGUgZHJhd2luZyBidWZmZXINCiAgICAgIFN3YXBEb3VibGVC dWZmZXIoKTsNCg0KICAgICAgLy8gU3dhcCBkcmF3ICYgZGlzcGxheSBidWZmZXJzDQogICAg ICBTd2FwQnVmZmVySW5kZXgoKTsNCg0KICAgICAgLy8gQ2xlYXIgdGhlIHNjcmVlbg0KICAg ICAgQ2xlYXJJbWFnZSggc3JjK2RyYXdCdWYsIDAsIDAsIDAgKTsNCiAgICAgIERyYXdPVGFn KCBvdCApOw0KICAgICAgRHJhd1N5bmMoMCk7DQogICAgICBEcmF3UHJpbSggJm1zZ0JveCAp Ow0KICAgDQogICAgICBmbGFnID0gSGFuZGxlVXNlcklucHV0KCk7DQogICAgICBEaXNwbGF5 U2V0dGluZ3MoKTsNCiAgICAgIEZudEZsdXNoKC0xKTsNCiAgICAgIERyYXdTeW5jKDApOw0K ICAgICAgcG9sbGhvc3QoKTsNCiAgIH0NCiAgIHdoaWxlICggZmxhZyAhPSAtMSApOyAvLyAt MSBtZWFucyB1c2VyIHByZXNzZWQgcXVpdCBvcHRpb25zIHNjcmVlbg0KICAgDQogICAvLyBX YWl0IGEgYml0IHNvIHBhZCBpbmZvcm1hdGlvbiBjYW4gYmUgY2xlYXJlZA0KICAgZm9yICgg aSA9IDA7IGkgPCBWU1lOQ19XQUlUUyo0OyBpKysgKSBWU3luYygwKTsNCiAgIA0KICAgcHJp bnRmKCJFbmQgb2YgUnVuT3B0aW9uc1NjcmVlblxuIik7DQogICByZXR1cm47DQp9DQoNCiAg DQp2b2lkIE9wdGlvbnM6Ok1ha2VNZXNzYWdlQm94KCkNCnsNCiAgIC8vIEZvbnQgc3R1ZmYN CiAgIEZudExvYWQoIDUxMiwgMjU2ICk7DQogICBGbnRPcGVuKCBveCwgb3ksIHcsIGgsIDAs IDUxMiApOw0KICAgDQogICAvLyBNYWtlIGEgc2VtaS10cmFucyBGNCBzbyB3ZSBjYW4gZmFk ZSB0aGUgYmFja2dyb3VuZCBkb3duIGEgYml0DQogICAvLyB0byBhZGQgYSBuaWNlIGVmZmVj dCBhcm91bmQgdGhlIG1lc3NhZ2UgYm94IHRleHQNCiAgIC8vIE5vdGUsIEY0IGRyYXdpbmcg b3JkZXIgaXMgOiAwIC0gMSAtIDMgLSAyIA0KICAgLy8gbWFrZXMgc2Vuc2UgaWYgeW91IGxv b2sgYXQgaXQgdHJ5aW5nIHRvIGRyYXcgdHdvIHRyaWFuZ2xlcw0KICAgc2V0UkdCMCggJm1z Z0JveCwgciA8PCAzLCBnIDw8IDMsIGIgPDwgMyk7DQogICBzZXRYWTQoICZtc2dCb3gsIG94 LCBveSwgb3grdywgb3ksIG94LCBveStoLCAgb3grdywgb3kraCApOw0KDQogICAvLyBzZXQg dGhlIGFiciBtb2RlIGZvciBkcmF3aW5nIGZvciBkcmF3aW5nIG1lc3NhZ2UgYm94DQogICBz ZXRUQUJSTW9kZSggJm1zZ0JveCwgYWJyICk7DQp9DQoNCi8vIFVzZWZ1bCBmdW5jdGlvbiB0 byBjb252ZXJ0IGEgc2V0IGtleSBhbmQgYW4gZW50cnkga2V5IGludG8gYW4gaW5kZXgNCmlu dCBPcHRpb25zOjpGaW5kRW50cnlJbmRleCggY29uc3QgaW50IHNldGtleSwgY29uc3QgaW50 IGVudHJ5a2V5ICkNCnsNCiAgIE9wdGlvbkVudHJ5KiBwZW50cnkgPSBlbnRyaWVzOw0KICAg aW50IGtleSA9IE1ha2VLZXkoIHNldGtleSwgZW50cnlrZXkgKTsNCiAgIGZvciAoIGludCBp ID0gMDsgaSA8IG5FbnRyaWVzOyBpKysgKQ0KICAgew0KICAgICAgaWYgKCBwZW50cnktPmtl eSA9PSBrZXkgKSByZXR1cm4gaTsNCiAgIH0NCiAgIHJldHVybiAtMTsNCn0NCg0KDQovLyBV c2VmdWwgZnVuY3Rpb24gdG8gY29udmVydCBhIHNldCBrZXkgaW50byBhbiBzZXQgaW5kZXgN CmludCBPcHRpb25zOjpGaW5kU2V0SW5kZXgoIGNvbnN0IGludCBzZXRrZXkgKQ0Kew0KICAg T3B0aW9uU2V0KiBwc2V0ID0gc2V0czsNCiAgIGZvciAoIGludCBpID0gMDsgaSA8IG5TZXRz OyBpKyssIHBzZXQrKyApDQogICB7DQogICAgICBpZiAoIHBzZXQtPmtleSA9PSBzZXRrZXkg KSByZXR1cm4gaTsNCiAgIH0NCiAgIHJldHVybiAtMTsNCn0NCg0Kdm9pZCBPcHRpb25zOjpT d2l0Y2hNb2RlKCBPcHRpb25zOjpEaXNwbGF5TW9kZUVudW0gbmV3TW9kZSApDQp7DQogICAv LyBXYWl0IGFyb3VuZCBhIGxpdHRsZSB3aGlsZSBzbyBwYWQgaW5mb3JtYXRpb24gY2FuIGJl IGNsZWFyZWQNCiAgIGZvciAoIGludCBpID0gMDsgaSA8IFZTWU5DX1dBSVRTKjQ7IGkrKyAp IFZTeW5jKDApOw0KICAgbW9kZSA9IG5ld01vZGU7DQp9DQoNCg== --------------84A61181AC8182760092C67F--