From mboxrd@z Thu Jan 1 00:00:00 1970 MIME-Version: 1.0 Date: Tue, 4 Jan 2011 00:11:27 +0800 Message-ID: From: Fernan Bolando To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net> Content-Type: multipart/mixed; boundary=001485f19a0e8223710498f367c8 Subject: [9fans] pcc/8c dies compiling simh code Topicbox-Message-UUID: 904d05de-ead6-11e9-9d60-3106f5b1d025 --001485f19a0e8223710498f367c8 Content-Type: text/plain; charset=ISO-8859-1 hi all can anyone else confirm that the attached file effectively kills 8c? it dies on 9vx and virtualbox, will test it on real hardware tomorrow. cpp -D__STDC__=1 -N -I. -D_PLAN9 -D_POSIX_SOURCE -D_BSD_EXTENSION -D_C99_SNPRINTF_EXTENSION -DVM_PDP10 -IPDP10 -IPDP11 -I/386/include/ape -I/sys/include/ape PDP10/pdp10_ksio.c | 8c -o pdp10_ksio.8 --001485f19a0e8223710498f367c8 Content-Type: text/x-csrc; charset=US-ASCII; name="pdp10_ksio.c" Content-Disposition: attachment; filename="pdp10_ksio.c" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gihkgx1v0 LyogcGRwMTBfa3Npby5jOiBQRFAtMTAgS1MxMCBJL08gc3Vic3lzdGVtIHNpbXVsYXRvcg0KDQog ICBDb3B5cmlnaHQgKGMpIDE5OTMtMjAwOCwgUm9iZXJ0IE0gU3VwbmlrDQoNCiAgIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhDQogICBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLA0KICAgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbg0KICAgdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsDQogICBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUNCiAgIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQoNCiAgIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl IGluY2x1ZGVkIGluDQogICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZSBTb2Z0d2FyZS4NCg0KICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCiAgIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0K ICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMDQogICBST0JFUlQgTSBTVVBOSUsgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSDQogICBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBP UiBJTg0KICAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS IERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCg0KICAgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0 aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgUm9iZXJ0IE0gU3VwbmlrIHNoYWxsIG5vdCBiZQ0KICAg dXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNl IG9yIG90aGVyIGRlYWxpbmdzDQogICBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbiBhdXRob3JpemF0aW9uIGZyb20gUm9iZXJ0IE0gU3VwbmlrLg0KDQogICB1YmEgICAgICAg ICAgVW5pYnVzIGFkYXB0ZXJzDQoNCiAgIDIyLVNlcC0wNSAgICBSTVMgICAgIEZpeGVkIGRlY2xh cmF0aW9ucyAoZnJvbSBTdGVybGluZyBHYXJ3b29kKQ0KICAgMjUtSmFuLTA0ICAgIFJNUyAgICAg QWRkZWQgc3R1YiBmbG9hdGluZyBhZGRyZXNzIHJvdXRpbmUNCiAgIDEyLU1hci0wMyAgICBSTVMg ICAgIEFkZGVkIGxvZ2ljYWwgbmFtZSBzdXBwb3J0DQogICAxMC1PY3QtMDIgICAgUk1TICAgICBS ZXZpc2VkIGZvciBkeW5hbWljIHRhYmxlIGdlbmVyYXRpb24NCiAgICAgICAgICAgICAgICAgICAg ICAgIEFkZGVkIFNIT1cgSU9TUEFDRSByb3V0aW5lDQogICAyOS1TZXAtMDIgICAgUk1TICAgICBB ZGRlZCB2YXJpYWJsZSB2ZWN0b3IsIGNlbnRyYWwgbWFwIHN1cHBvcnQNCiAgIDI1LUphbi0wMiAg ICBSTVMgICAgIFJldmlzZWQgZm9yIG11bHRpcGxlIERaMTEncw0KICAgMDYtSmFuLTAyICAgIFJN UyAgICAgUmV2aXNlZCBlbmFibGUvZGlzYWJsZSBzdXBwb3J0DQogICAyMy1TZXAtMDEgICAgUk1T ICAgICBOZXcgSU8gcGFnZSBhZGRyZXNzIGNvbnN0YW50cw0KICAgMDctU2VwLTAxICAgIFJNUyAg ICAgUmV2aXNlZCBkZXZpY2UgZGlzYWJsZSBtZWNoYW5pc20NCiAgIDI1LUF1Zy0wMSAgICBSTVMg ICAgIEVuYWJsZWQgRFoxMQ0KICAgMjEtQXVnLTAxICAgIFJNUyAgICAgVXBkYXRlZCBEWjExIGRp c2FibGUNCiAgIDAxLUp1bi0wMSAgICBSTVMgICAgIFVwZGF0ZWQgRFoxMSB2ZWN0b3JzDQogICAx Mi1NYXktMDEgICAgUk1TICAgICBGaXhlZCB0eXBvDQoNCiAgIFRoZSBLUzEwIHVzZXMgdGhlIFBE UC0xMSBVbmlidXMgZm9yIGl0cyBJL08sIHZpYSBhZGFwdGVycy4gIFdoaWxlDQogICBub21pbmFs bHkgZm91ciBhZGFwdGVycyBhcmUgc3VwcG9ydGVkLCBpbiBwcmFjdGljZSBvbmx5IDEgYW5kIDMN CiAgIGFyZSBpbXBsZW1lbnRlZC4gIFRoZSBkaXNrcyBhcmUgcGxhY2VkIG9uIGFkYXB0ZXIgMSwg dGhlIHJlc3Qgb2YNCiAgIHRoZSBJL08gZGV2aWNlcyBvbiBhZGFwdGVyIDMuDQoNCiAgIEluIHRo ZW9yeSwgd2Ugc2hvdWxkIG1haW50YWluIGNvbXBsZXRlbHkgc2VwYXJhdGUgVW5pYnVzZXMsIHdp dGgNCiAgIGRpc3RpbmN0IFBJIHN5c3RlbXMuICBJbiBwcmFjdGljZSwgdGhpcyBzaW11bGF0b3Ig aGFzIHNvIGZldyBkZXZpY2VzDQogICB0aGF0IHdlIGNhbiBnZXQgYXdheSB3aXRoIGEgc2luZ2xl IFBJIHN5c3RlbSwgbWFza2luZyBmb3Igd2hpY2gNCiAgIGRldmljZXMgYXJlIG9uIGFkYXB0ZXIg MSwgYW5kIHdoaWNoIG9uIGFkYXB0ZXIgMy4gIFRoZSBVbmlidXMNCiAgIGltcGxlbWVudGF0aW9u IGlzIG1vZGVsZWQgb24gdGhlIFFidXMgaW4gdGhlIFBEUC0xMSBzaW11bGF0b3IgYW5kDQogICBp cyBkZXNjcmliZWQgdGhlcmUuDQoNCiAgIFRoZSBJL08gc3Vic3lzdGVtIGlzIHByb2dyYW1tZWQg YnkgSS9PIGluc3RydWN0aW9ucyB3aGljaCBjcmVhdGUNCiAgIFVuaWJ1cyBvcGVyYXRpb25zIChy ZWFkLCByZWFkIHBhdXNlLCB3cml0ZSwgd3JpdGUgYnl0ZSkuICBETUEgaXMNCiAgIHRoZSByZXNw b25zaWJpbGl0eSBvZiB0aGUgSS9PIGRldmljZSBzaW11bGF0b3JzLCB3aGljaCBhbHNvIGltcGxl bWVudA0KICAgVW5pYnVzIHRvIHBoeXNpY2FsIG1lbW9yeSBtYXBwaW5nLg0KDQogICBUaGUgcHJp b3JpdHkgaW50ZXJydXB0IHN1YnN5c3RlbSAoYW5kIG90aGVyIHByaXZpbGVnZWQgZnVuY3Rpb25z KQ0KICAgaXMgcHJvZ3JhbW1lZCBieSBJL08gaW5zdHJ1Y3Rpb25zIHdpdGggaW50ZXJuYWwgZGV2 aWNlcyBjb2Rlcw0KICAgKG9wY29kZXMgNzAwLTcwMikuICBUaGVzZSBhcmUgZGlzcGF0Y2hlZCBo ZXJlLCBhbHRob3VnaCBtYW55IGFyZQ0KICAgaGFuZGxlZCBpbiB0aGUgbWVtb3J5IG1hbmFnZW1l bnQgdW5pdCBvciBlbHNld2hlcmUuDQoNCiAgIFRoZSBJVFMgaW5zdHJ1Y3Rpb25zIGFyZSBzaWdu aWZpY2FudGx5IGRpZmZlcmVudCBmcm9tIHRoZSBUT1BTLTEwLzIwDQogICBpbnN0cnVjdGlvbnMu ICBUaGV5IGRvIG5vdCB1c2UgdGhlIGV4dGVuZGVkIGFkZHJlc3MgY2FsY3VsYXRpb24gYnV0DQog ICBpbnN0ZWFkIHByb3ZpZGUgaW5zdHJ1Y3Rpb24gdmFyaWFudHMgKFEgZm9yIFVuaWJ1cyBhZGFw dGVyIDEsIEkgZm9yDQogICBVbmlidXMgYWRhcHRlciAzKSB3aGljaCBpbnNlcnQgdGhlIFVuaWJ1 cyBhZGFwdGVyIG51bWJlciBpbnRvIHRoZQ0KICAgZWZmZWN0aXZlIGFkZHJlc3MuDQoqLw0KDQoj aW5jbHVkZSAicGRwMTBfZGVmcy5oIg0KI2luY2x1ZGUgPHNldGptcC5oPg0KI2luY2x1ZGUgInNp bV9zb2NrLmgiDQojaW5jbHVkZSAic2ltX3RteHIuaCINCg0KI2RlZmluZSBYQkFfTUJaICAgICAg ICAgMDQwMDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiYSBtYnogKi8NCiNkZWZpbmUg ZWFSQiAgICAgICAgICAgIChlYSAmIH4xKQ0KI2RlZmluZSBHRVRCWVRFKGVhLHgpICAgKCgoKGVh KSAmIDEpPyAoeCkgPj4gODogKHgpKSAmIDAzNzcpDQojZGVmaW5lIFVCTlhNX0ZBSUwocGEsb3Ap IFwNCiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBpb2NtYXBbR0VUX0lPVUJBIChwYSldOyBc DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA+PSAwKSBcDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWJjc1tuXSA9IHViY3Nbbl0gfCBVQkNTX1RNTyB8IFVCQ1NfTlhEOyBcDQog ICAgICAgICAgICAgICAgICAgICAgICBwYWdlcl93b3JkID0gUEZfSEFSRCB8IFBGX1ZJUlQgfCBQ Rl9JTyB8IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG9wID09IFdSSVRFQik/IFBG X0JZVEU6IDApIHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUU1RGIChGX1VTUik/ IFBGX1VTRVI6IDApIHwgKHBhKTsgXA0KICAgICAgICAgICAgICAgICAgICAgICAgQUJPUlQgKFBB R0VfRkFJTCkNCg0KLyogVW5pYnVzIGFkYXB0ZXIgZGF0YSAqLw0KDQppbnQzMiB1YmNzW1VCQU5V TV0gPSB7IDAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXR1cyByZWdpc3Rl cnMgKi8NCmludDMyIHVibWFwW1VCQU5VTV1bVU1BUF9NRU1TSVpFXSA9IHsgMCB9OyAgICAgICAg ICAgICAgLyogVW5pYnVzIG1hcHMgKi8NCmludDMyIGludF9yZXEgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJydXB0IHJlcXVlc3RzICovDQoNCi8qIE1h cCBJTyBjb250cm9sbGVyIG51bWJlcnMgdG8gVW5pYnVzIGFkYXB0ZXJzOiAtMSA9IG5vbi1leGlz dGVudCAqLw0KDQpzdGF0aWMgaW50IGlvY21hcFtJT19OX1VCQV0gPSB7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIG1hcCBJL08gZXh0IHRvIFVCQSAjICovDQogLTEsIDAsIC0xLCAxLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xDQogfTsgDQoNCnN0YXRp YyBjb25zdCBpbnQzMiB1YmFicjc2W1VCQU5VTV0gPSB7DQogICAgSU5UX1VCMSAmIChJTlRfSVBM NyB8IElOVF9JUEw2KSwgSU5UX1VCMyAmIChJTlRfSVBMNyB8IElOVF9JUEw2KQ0KICAgIH07DQpz dGF0aWMgY29uc3QgaW50MzIgdWJhYnI1NFtVQkFOVU1dID0gew0KICAgIElOVF9VQjEgJiAoSU5U X0lQTDUgfCBJTlRfSVBMNCksIElOVF9VQjMgJiAoSU5UX0lQTDUgfCBJTlRfSVBMNCkNCiAgICB9 Ow0Kc3RhdGljIGNvbnN0IGludDMyIHViYXNoZls0XSA9IHsgMTgsIDI2LCAwLCA4IH07DQoNCmV4 dGVybiBkMTAgKk07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog bWFpbiBtZW1vcnkgKi8NCmV4dGVybiBkMTAgKmFjX2N1cjsNCmV4dGVybiBkMTAgcGFnZXJfd29y ZDsNCmV4dGVybiBpbnQzMiBmbGFnczsNCmV4dGVybiBjb25zdCBpbnQzMiBwaV9sMmJpdFs4XTsN CmV4dGVybiBVTklUIGNwdV91bml0Ow0KZXh0ZXJuIEZJTEUgKnNpbV9sb2c7DQpleHRlcm4gam1w X2J1ZiBzYXZlX2VudjsNCmV4dGVybiBERVZJQ0UgKnNpbV9kZXZpY2VzW107DQoNCmV4dGVybiBp bnQzMiBwaV9ldmFsICh2b2lkKTsNCmV4dGVybiBpbnQzMiBycF9pbnRhICh2b2lkKTsNCmV4dGVy biBpbnQzMiB0dV9pbnRhICh2b2lkKTsNCmV4dGVybiBpbnQzMiBscDIwX2ludGEgKHZvaWQpOw0K ZXh0ZXJuIGludDMyIGR6X3J4aW50YSAodm9pZCk7DQpleHRlcm4gaW50MzIgZHpfdHhpbnRhICh2 b2lkKTsNCg0KdF9zdGF0IHVibWFwX3JkIChpbnQzMiAqZGF0YSwgaW50MzIgYWRkciwgaW50MzIg YWNjZXNzKTsNCnRfc3RhdCB1Ym1hcF93ciAoaW50MzIgZGF0YSwgaW50MzIgYWRkciwgaW50MzIg YWNjZXNzKTsNCnRfc3RhdCB1YnNfcmQgKGludDMyICpkYXRhLCBpbnQzMiBhZGRyLCBpbnQzMiBh Y2Nlc3MpOw0KdF9zdGF0IHVic193ciAoaW50MzIgZGF0YSwgaW50MzIgYWRkciwgaW50MzIgYWNj ZXNzKTsNCnRfc3RhdCByZF96cm8gKGludDMyICpkYXRhLCBpbnQzMiBhZGRyLCBpbnQzMiBhY2Nl c3MpOw0KdF9zdGF0IHdyX25vcCAoaW50MzIgZGF0YSwgaW50MzIgYWRkciwgaW50MzIgYWNjZXNz KTsNCnRfc3RhdCB1YmFfZXggKHRfdmFsdWUgKnZwdHIsIHRfYWRkciBhZGRyLCBVTklUICp1cHRy LCBpbnQzMiBzdyk7DQp0X3N0YXQgdWJhX2RlcCAodF92YWx1ZSB2YWwsIHRfYWRkciBhZGRyLCBV TklUICp1cHRyLCBpbnQzMiBzdyk7DQp0X3N0YXQgdWJhX3Jlc2V0IChERVZJQ0UgKmRwdHIpOw0K ZDEwIFJlYWRJTyAoYTEwIGVhKTsNCnZvaWQgV3JpdGVJTyAoYTEwIGVhLCBkMTAgdmFsLCBpbnQz MiBtb2RlKTsNCg0KLyogVW5pYnVzIGFkYXB0ZXIgZGF0YSBzdHJ1Y3R1cmVzDQoNCiAgIHViYV9k ZXYgICAgICBVQkEgZGV2aWNlIGRlc2NyaXB0b3INCiAgIHViYV91bml0ICAgICBVQkEgdW5pdHMN CiAgIHViYV9yZWcgICAgICBVQkEgcmVnaXN0ZXIgbGlzdA0KKi8NCg0KRElCIHVibXAxX2RpYiA9 IHsgSU9CQV9VQk1BUDEsIElPTE5fVUJNQVAxLCAmdWJtYXBfcmQsICZ1Ym1hcF93ciwgMCB9Ow0K RElCIHVibXAzX2RpYiA9IHsgSU9CQV9VQk1BUDMsIElPTE5fVUJNQVAzLCAmdWJtYXBfcmQsICZ1 Ym1hcF93ciwgMCB9Ow0KRElCIHViY3MxX2RpYiA9IHsgSU9CQV9VQkNTMSwgSU9MTl9VQkNTMSwg JnVic19yZCwgJnVic193ciwgMCB9Ow0KRElCIHViY3MzX2RpYiA9IHsgSU9CQV9VQkNTMywgSU9M Tl9VQkNTMywgJnVic19yZCwgJnVic193ciwgMCB9Ow0KRElCIHVibW4xX2RpYiA9IHsgSU9CQV9V Qk1OVDEsIElPTE5fVUJNTlQxLCAmcmRfenJvLCAmd3Jfbm9wLCAwIH07DQpESUIgdWJtbjNfZGli ID0geyBJT0JBX1VCTU5UMywgSU9MTl9VQk1OVDMsICZyZF96cm8sICZ3cl9ub3AsIDAgfTsNCkRJ QiBtc3lzX2RpYiA9IHsgMDAxMDAwMDAsIDEsICZyZF96cm8sICZ3cl9ub3AsIDAgfTsNCg0KVU5J VCB1YmFfdW5pdFtdID0gew0KICAgIHsgVURBVEEgKE5VTEwsIFVOSVRfRklYLCBVTUFQX01FTVNJ WkUpIH0sDQogICAgeyBVREFUQSAoTlVMTCwgVU5JVF9GSVgsIFVNQVBfTUVNU0laRSkgfQ0KICAg IH07DQoNClJFRyB1YmFfcmVnW10gPSB7DQogICAgeyBPUkRBVEEgKElOVFJFUSwgaW50X3JlcSwg MzIpLCBSRUdfUk8gfSwNCiAgICB7IE9SREFUQSAoVUIxQ1MsIHViY3NbMF0sIDE4KSB9LA0KICAg IHsgT1JEQVRBIChVQjNDUywgdWJjc1sxXSwgMTgpIH0sDQogICAgeyBOVUxMIH0NCiAgICB9Ow0K DQpERVZJQ0UgdWJhX2RldiA9IHsNCiAgICAiVUJBIiwgdWJhX3VuaXQsIHViYV9yZWcsIE5VTEws DQogICAgVUJBTlVNLCA4LCBVTUFQX0FTSVpFLCAxLCA4LCAzMiwNCiAgICAmdWJhX2V4LCAmdWJh X2RlcCwgJnViYV9yZXNldCwNCiAgICBOVUxMLCBOVUxMLCBOVUxMLA0KICAgIE5VTEwsIDANCiAg ICB9Ow0KDQovKiBQRFAtMTEgSS9PIHN0cnVjdHVyZXMgKi8NCg0KRElCICpkaWJfdGFiW0RJQl9N QVhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBydW4tdGltZSBESUJzICov DQoNCmludDMyICgqaW50X2Fja1szMl0pKHZvaWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogaW50IGFjayByb3V0aW5lcyAqLw0KDQppbnQzMiBpbnRfdmVjWzMyXTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGludCB2ZWN0b3JzICovDQoNCkRJQiAqc3Rk X2RpYltdID0geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RhbmRh cmQgRElCcyAqLw0KICAgICZ1Ym1wMV9kaWIsDQogICAgJnVibXAzX2RpYiwNCiAgICAmdWJjczFf ZGliLA0KICAgICZ1YmNzM19kaWIsDQogICAgJnVibW4xX2RpYiwNCiAgICAmdWJtbjNfZGliLA0K ICAgICZtc3lzX2RpYiwNCiAgICBOVUxMDQogICAgfTsNCg0KLyogSU8gNzEwICAgICAgIChERUMp IFRJT0UgLSB0ZXN0IEkvTyB3b3JkLCBza2lwIGlmIHplcm8NCiAgICAgICAgICAgICAgICAoSVRT KSBJT1JESSAtIHJlYWQgd29yZCBmcm9tIFVuaWJ1cyAzDQogICAgICAgICAgICAgICAgcmV0dXJu cyBUUlVFIGlmIHNraXAsIEZBTFNFIG90aGVyd2lzZQ0KKi8NCg0KdF9ib29sIGlvNzEwIChpbnQz MiBhYywgYTEwIGVhKQ0Kew0KZDEwIHZhbDsNCg0KaWYgKFFfSVRTKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJT1JESSAqLw0KICAgIEFDKGFjKSA9IFJl YWRJTyAoSU9fVUJBMyB8IGVhKTsNCmVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVElPRSAqLw0KICAgIHZhbCA9IFJlYWRJTyAoZWEpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkIHdvcmQgKi8NCiAgICBpZiAo KEFDKGFjKSAmIHZhbCkgPT0gMCkNCiAgICAgICAgcmV0dXJuIFRSVUU7DQogICAgfQ0KcmV0dXJu IEZBTFNFOw0KfQ0KDQovKiBJTyA3MTEgICAgICAgKERFQykgVElPTiAtIHRlc3QgSS9PIHdvcmQs IHNraXAgaWYgbm9uLXplcm8NCiAgICAgICAgICAgICAgICAoSVRTKSBJT1JEUSAtIHJlYWQgd29y ZCBmcm9tIFVuaWJ1cyAxDQogICAgICAgICAgICAgICAgcmV0dXJucyBUUlVFIGlmIHNraXAsIEZB TFNFIG90aGVyd2lzZQ0KKi8NCg0KdF9ib29sIGlvNzExIChpbnQzMiBhYywgYTEwIGVhKQ0Kew0K ZDEwIHZhbDsNCg0KaWYgKFFfSVRTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBJT1JEUSAqLw0KICAgIEFDKGFjKSA9IFJlYWRJTyAoSU9fVUJBMSB8IGVh KTsNCmVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogVElPTiAqLw0KICAgIHZhbCA9IFJlYWRJTyAoZWEpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiByZWFkIHdvcmQgKi8NCiAgICBpZiAoKEFDKGFjKSAmIHZhbCkgIT0g MCkNCiAgICAgICAgcmV0dXJuIFRSVUU7DQogICAgfQ0KcmV0dXJuIEZBTFNFOw0KfQ0KDQovKiBJ TyA3MTIgICAgICAgKERFQykgUkRJTyAtIHJlYWQgSS9PIHdvcmQsIGFkZHIgaW4gZWENCiAgICAg ICAgICAgICAgICAoSVRTKSBJT1JEIC0gcmVhZCBJL08gd29yZCwgYWRkciBpbiBNW2VhXQ0KKi8N Cg0KZDEwIGlvNzEyIChhMTAgZWEpDQp7DQpyZXR1cm4gUmVhZElPIChlYSk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJESU8sIElPUkQgKi8NCn0NCg0KLyogSU8gNzEz ICAgICAgIChERUMpIFdSSU8gLSB3cml0ZSBJL08gd29yZCwgYWRkciBpbiBlYQ0KICAgICAgICAg ICAgICAgIChJVFMpIElPV1IgLSB3cml0ZSBJL08gd29yZCwgYWRkciBpbiBNW2VhXQ0KKi8NCg0K dm9pZCBpbzcxMyAoZDEwIHZhbCwgYTEwIGVhKQ0Kew0KV3JpdGVJTyAoZWEsIHZhbCAmIDAxNzc3 NzcsIFdSSVRFKTsgICAgICAgICAgICAgICAgICAgICAvKiBXUklPLCBJT1dSICovDQpyZXR1cm47 DQp9DQoNCi8qIElPIDcxNCAgICAgICAoREVDKSBCU0lPIC0gc2V0IGJpdCBpbiBJL08gYWRkcmVz cw0KICAgICAgICAgICAgICAgIChJVFMpIElPV1JJIC0gd3JpdGUgd29yZCB0byBVbmlidXMgMw0K Ki8NCg0Kdm9pZCBpbzcxNCAoZDEwIHZhbCwgYTEwIGVhKQ0Kew0KZDEwIHRlbXA7DQoNCnZhbCA9 IHZhbCAmIDAxNzc3Nzc7DQppZiAoUV9JVFMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIElPV1JJICovDQogICAgV3JpdGVJTyAoSU9fVUJBMyB8IGVhLCB2 YWwsIFdSSVRFKTsNCmVsc2Ugew0KICAgIHRlbXAgPSBSZWFkSU8gKGVhKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBCU0lPICovDQogICAgdGVtcCA9IHRlbXAgfCB2YWw7DQog ICAgV3JpdGVJTyAoZWEsIHRlbXAsIFdSSVRFKTsNCiAgICB9DQpyZXR1cm47DQp9DQoNCi8qIElP IDcxNSAgICAgICAoREVDKSBCQ0lPIC0gY2xlYXIgYml0IGluIEkvTyBhZGRyZXNzDQogICAgICAg ICAgICAgICAgKElUUykgSU9XUlEgLSB3cml0ZSB3b3JkIHRvIFVuaWJ1cyAxDQoqLw0KDQp2b2lk IGlvNzE1IChkMTAgdmFsLCBhMTAgZWEpDQp7DQpkMTAgdGVtcDsNCg0KdmFsID0gdmFsICYgMDE3 Nzc3NzsNCmlmIChRX0lUUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogSU9XUlEgKi8NCiAgICBXcml0ZUlPIChJT19VQkExIHwgZWEsIHZhbCwgV1JJVEUp Ow0KZWxzZSB7DQogICAgdGVtcCA9IFJlYWRJTyAoZWEpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEJDSU8gKi8NCiAgICB0ZW1wID0gdGVtcCAmIH52YWw7DQogICAgV3JpdGVJ TyAoZWEsIHRlbXAsIFdSSVRFKTsNCiAgICB9DQpyZXR1cm47DQp9DQoNCi8qIElPIDcyMCAgICAg ICAoREVDKSBUSU9FQiAtIHRlc3QgSS9PIGJ5dGUsIHNraXAgaWYgemVybw0KICAgICAgICAgICAg ICAgIChJVFMpIElPUkRCSSAtIHJlYWQgYnl0ZSBmcm9tIFVuaWJ1cyAzDQogICAgICAgICAgICAg ICAgcmV0dXJucyBUUlVFIGlmIHNraXAsIEZBTFNFIG90aGVyd2lzZQ0KKi8NCg0KdF9ib29sIGlv NzIwIChpbnQzMiBhYywgYTEwIGVhKQ0Kew0KZDEwIHZhbDsNCg0KaWYgKFFfSVRTKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJT1JEQkkgKi8NCiAgICB2 YWwgPSBSZWFkSU8gKElPX1VCQTMgfCBlYVJCKTsNCiAgICBBQyhhYykgPSBHRVRCWVRFIChlYSwg dmFsKTsNCiAgICB9DQplbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFRJT0VCICovDQogICAgdmFsID0gUmVhZElPIChlYVJCKTsNCiAgICB2 YWwgPSBHRVRCWVRFIChlYSwgdmFsKTsNCiAgICBpZiAoKEFDKGFjKSAmIHZhbCkgPT0gMCkNCiAg ICAgICAgcmV0dXJuIFRSVUU7DQogICAgfQ0KcmV0dXJuIEZBTFNFOw0KfQ0KDQovKiBJTyA3MjEg ICAgICAgKERFQykgVElPTkIgLSB0ZXN0IEkvTyB3b3JkLCBza2lwIGlmIG5vbi16ZXJvDQogICAg ICAgICAgICAgICAgKElUUykgSU9SREJRIC0gcmVhZCB3b3JkIGZyb20gVW5pYnVzIDENCiAgICAg ICAgICAgICAgICByZXR1cm5zIFRSVUUgaWYgc2tpcCwgRkFMU0Ugb3RoZXJ3aXNlDQoqLw0KDQp0 X2Jvb2wgaW83MjEgKGludDMyIGFjLCBhMTAgZWEpDQp7DQpkMTAgdmFsOw0KDQppZiAoUV9JVFMp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElPUkRCUSAq Lw0KICAgIHZhbCA9IFJlYWRJTyAoSU9fVUJBMSB8IGVhUkIpOw0KICAgIEFDKGFjKSA9IEdFVEJZ VEUgKGVhLCB2YWwpOw0KICAgIH0NCmVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVElPTkIgKi8NCiAgICB2YWwgPSBSZWFkSU8gKGVhUkIp Ow0KICAgIHZhbCA9IEdFVEJZVEUgKGVhLCB2YWwpOw0KICAgIGlmICgoQUMoYWMpICYgdmFsKSAh PSAwKQ0KICAgICAgICByZXR1cm4gVFJVRTsNCiAgICB9DQpyZXR1cm4gRkFMU0U7DQp9DQoNCi8q IElPIDcyMiAgICAgICAoREVDKSBSRElPQiAtIHJlYWQgSS9PIGJ5dGUsIGFkZHIgaW4gZWENCiAg ICAgICAgICAgICAgICAoSVRTKSBJT1JEQiAtIHJlYWQgSS9PIGJ5dGUsIGFkZHIgaW4gTVtlYV0N CiovDQoNCmQxMCBpbzcyMiAoYTEwIGVhKQ0Kew0KZDEwIHZhbDsNCg0KdmFsID0gUmVhZElPIChl YVJCKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRElPQiwgSU9SREIg Ki8NCnJldHVybiBHRVRCWVRFIChlYSwgdmFsKTsNCn0NCg0KLyogSU8gNzIzICAgICAgIChERUMp IFdSSU9CIC0gd3JpdGUgSS9PIGJ5dGUsIGFkZHIgaW4gZWENCiAgICAgICAgICAgICAgICAoSVRT KSBJT1dSQiAtIHdyaXRlIEkvTyBieXRlLCBhZGRyIGluIE1bZWFdDQoqLw0KDQp2b2lkIGlvNzIz IChkMTAgdmFsLCBhMTAgZWEpDQp7DQpXcml0ZUlPIChlYSwgdmFsICYgMDM3NywgV1JJVEVCKTsg ICAgICAgICAgICAgICAgICAgICAgIC8qIFdSSU9CLCBJT1dSQiAqLw0KcmV0dXJuOw0KfQ0KDQov KiBJTyA3MjQgICAgICAgKERFQykgQlNJT0IgLSBzZXQgYml0IGluIEkvTyBieXRlIGFkZHJlc3MN CiAgICAgICAgICAgICAgICAoSVRTKSBJT1dSQkkgLSB3cml0ZSBieXRlIHRvIFVuaWJ1cyAzDQoq Lw0KDQp2b2lkIGlvNzI0IChkMTAgdmFsLCBhMTAgZWEpDQp7DQpkMTAgdGVtcDsNCg0KdmFsID0g dmFsICYgMDM3NzsNCmlmIChRX0lUUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogSU9XUkJJICovDQogICAgV3JpdGVJTyAoSU9fVUJBMyB8IGVhLCB2YWws IFdSSVRFQik7DQplbHNlIHsNCiAgICB0ZW1wID0gUmVhZElPIChlYVJCKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQlNJT0IgKi8NCiAgICB0ZW1wID0gR0VUQllURSAoZWEsIHRl bXApOw0KICAgIHRlbXAgPSB0ZW1wIHwgdmFsOw0KICAgIFdyaXRlSU8gKGVhLCB0ZW1wLCBXUklU RUIpOw0KICAgIH0NCnJldHVybjsNCn0NCg0KLyogSU8gNzI1ICAgICAgIChERUMpIEJDSU9CIC0g Y2xlYXIgYml0IGluIEkvTyBieXRlIGFkZHJlc3MNCiAgICAgICAgICAgICAgICAoSVRTKSBJT1dS QlEgLSB3cml0ZSBieXRlIHRvIFVuaWJ1cyAxDQoqLw0KDQp2b2lkIGlvNzI1IChkMTAgdmFsLCBh MTAgZWEpDQp7DQpkMTAgdGVtcDsNCg0KdmFsID0gdmFsICYgMDM3NzsNCmlmIChRX0lUUykgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSU9XUkJRICovDQog ICAgV3JpdGVJTyAoSU9fVUJBMSB8IGVhLCB2YWwsIFdSSVRFQik7DQplbHNlIHsNCiAgICB0ZW1w ID0gUmVhZElPIChlYVJCKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQkNJT0Ig Ki8NCiAgICB0ZW1wID0gR0VUQllURSAoZWEsIHRlbXApOw0KICAgIHRlbXAgPSB0ZW1wICYgfnZh bDsNCiAgICBXcml0ZUlPIChlYSwgdGVtcCwgV1JJVEVCKTsNCiAgICB9DQpyZXR1cm47DQp9DQoN Ci8qIFJlYWQgYW5kIHdyaXRlIEkvTyBkZXZpY2VzLg0KICAgVGhlc2Ugcm91dGluZXMgYXJlIHRo ZSBsaW5rYWdlIGJldHdlZW4gdGhlIDY0YiB3b3JsZCBvZiB0aGUgbWFpbg0KICAgc2ltdWxhdG9y IGFuZCB0aGUgMzJiIHdvcmxkIG9mIHRoZSBkZXZpY2Ugc2ltdWxhdG9ycy4NCiovDQoNCmQxMCBS ZWFkSU8gKGExMCBlYSkNCnsNCnVpbnQzMiBwYSA9ICh1aW50MzIpIGVhOw0KaW50MzIgaSwgbiwg dmFsOw0KRElCICpkaWJwOw0KDQpmb3IgKGkgPSAwOyBkaWJwID0gZGliX3RhYltpXTsgaSsrICkg ew0KICAgIGlmICgocGEgPj0gZGlicC0+YmEpICYmDQogICAgICAgKHBhIDwgKGRpYnAtPmJhICsg ZGlicC0+bG50KSkpIHsNCiAgICAgICAgZGlicC0+cmQgKCZ2YWwsIHBhLCBSRUFEKTsNCiAgICAg ICAgcGlfZXZhbCAoKTsNCiAgICAgICAgcmV0dXJuICgoZDEwKSB2YWwpOw0KICAgICAgICB9DQog ICAgfQ0KVUJOWE1fRkFJTCAocGEsIFJFQUQpOw0KfQ0KDQp2b2lkIFdyaXRlSU8gKGExMCBlYSwg ZDEwIHZhbCwgaW50MzIgbW9kZSkNCnsNCnVpbnQzMiBwYSA9ICh1aW50MzIpIGVhOw0KaW50MzIg aSwgbjsNCkRJQiAqZGlicDsNCg0KZm9yIChpID0gMDsgZGlicCA9IGRpYl90YWJbaV07IGkrKyAp IHsNCiAgICBpZiAoKHBhID49IGRpYnAtPmJhKSAmJg0KICAgICAgIChwYSA8IChkaWJwLT5iYSAr IGRpYnAtPmxudCkpKSB7DQogICAgICAgIGRpYnAtPndyICgoaW50MzIpIHZhbCwgcGEsIG1vZGUp Ow0KICAgICAgICBwaV9ldmFsICgpOw0KICAgICAgICByZXR1cm47DQogICAgICAgIH0gDQogICAg fQ0KVUJOWE1fRkFJTCAocGEsIG1vZGUpOw0KfQ0KDQovKiBNYXBwZWQgcmVhZCBhbmQgd3JpdGUg cm91dGluZXMgLSB1c2VkIGJ5IHN0YW5kYXJkIFVuaWJ1cyBkZXZpY2VzIG9uIFVuaWJ1cyAxICov DQoNCmExMCBNYXBfQWRkcjEwIChhMTAgYmEsIGludDMyIHViKQ0Kew0KYTEwIHBhMTA7DQppbnQz MiB2cG4gPSBQQUdfR0VUVlBOIChiYSA+PiAyKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGdl dCBQRFAtMTAgcGFnZSBudW1iZXIgKi8NCiAgICANCmlmICgodnBuID49IFVNQVBfTUVNU0laRSkg fHwgKGJhICYgWEJBX01CWikgfHwgICAgICAgICAgLyogaW52YWxpZCBtYXA/ICovDQogICAgKCh1 Ym1hcFt1Yl1bdnBuXSAmIFVNQVBfVkxEKSA9PSAwKSkNCiAgICByZXR1cm4gLTE7DQpwYTEwID0g KHVibWFwW3ViXVt2cG5dICsgUEFHX0dFVE9GRiAoYmEgPj4gMikpICYgUEFNQVNLOw0KcmV0dXJu IHBhMTA7DQp9DQoNCmludDMyIE1hcF9SZWFkQiAodWludDMyIGJhLCBpbnQzMiBiYywgdWludDgg KmJ1ZikNCnsNCnVpbnQzMiBsaW07DQphMTAgcGExMDsNCg0KbGltID0gYmEgKyBiYzsNCmZvciAo IDsgYmEgPCBsaW07IGJhKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYnkg Ynl0ZXMgKi8NCiAgICBwYTEwID0gTWFwX0FkZHIxMCAoYmEsIDEpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogbWFwIGFkZHIgKi8NCiAgICBpZiAoKHBhMTAgPCAwKSB8fCBNRU1fQUREUl9O WE0gKHBhMTApKSB7ICAgICAgICAgICAgLyogaW52IG1hcCBvciBOWE0/ICovDQogICAgICAgIHVi Y3NbMV0gPSB1YmNzWzFdIHwgVUJDU19UTU87ICAgICAgICAgICAgICAgICAgIC8qIFVCQSB0aW1l cyBvdXQgKi8NCiAgICAgICAgcmV0dXJuIChsaW0gLSBiYSk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogcmV0dXJuIGJjICovDQogICAgICAgIH0NCiAgICAqYnVmKysgPSAodWludDgp ICgoTVtwYTEwXSA+PiB1YmFzaGZbYmEgJiAzXSkgJiAwMzc3KTsNCiAgICB9DQpyZXR1cm4gMDsN Cn0NCg0KaW50MzIgTWFwX1JlYWRXICh1aW50MzIgYmEsIGludDMyIGJjLCB1aW50MTYgKmJ1ZikN CnsNCnVpbnQzMiBsaW07DQphMTAgcGExMDsNCg0KYmEgPSBiYSAmIH4wMTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbGlnbiBzdGFydCAqLw0KbGltID0gYmEg KyAoYmMgJiB+MDEpOw0KZm9yICggOyBiYSA8IGxpbTsgYmEgPSBiYSArIDIpIHsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBieSB3b3JkcyAqLw0KICAgIHBhMTAgPSBNYXBfQWRkcjEwIChiYSwg MSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXAgYWRkciAqLw0KICAgIGlmICgocGEx MCA8IDApIHx8IE1FTV9BRERSX05YTSAocGExMCkpIHsgICAgICAgICAgICAvKiBpbnYgbWFwIG9y IE5YTT8gKi8NCiAgICAgICAgdWJjc1sxXSA9IHViY3NbMV0gfCBVQkNTX1RNTzsgICAgICAgICAg ICAgICAgICAgLyogVUJBIHRpbWVzIG91dCAqLw0KICAgICAgICByZXR1cm4gKGxpbSAtIGJhKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gYmMgKi8NCiAgICAgICAgfQ0K ICAgICpidWYrKyA9ICh1aW50MTYpICgoTVtwYTEwXSA+PiAoKGJhICYgMik/IDA6IDE4KSkgJiAw MTc3Nzc3KTsNCiAgICB9DQpyZXR1cm4gMDsNCn0NCg0KaW50MzIgTWFwX1dyaXRlQiAodWludDMy IGJhLCBpbnQzMiBiYywgdWludDggKmJ1ZikNCnsNCnVpbnQzMiBsaW07DQphMTAgcGExMDsNCmQx MCBtYXNrOw0KDQpsaW0gPSBiYSArIGJjOw0KZm9yICggOyBiYSA8IGxpbTsgYmErKykgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBieSBieXRlcyAqLw0KICAgIHBhMTAgPSBNYXBf QWRkcjEwIChiYSwgMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXAgYWRkciAqLw0K ICAgIGlmICgocGExMCA8IDApIHx8IE1FTV9BRERSX05YTSAocGExMCkpIHsgICAgICAgICAgICAv KiBpbnYgbWFwIG9yIE5YTT8gKi8NCiAgICAgICAgdWJjc1sxXSA9IHViY3NbMV0gfCBVQkNTX1RN TzsgICAgICAgICAgICAgICAgICAgLyogVUJBIHRpbWVzIG91dCAqLw0KICAgICAgICByZXR1cm4g KGxpbSAtIGJhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gYmMgKi8N CiAgICAgICAgfQ0KICAgIG1hc2sgPSAwMzc3Ow0KICAgIE1bcGExMF0gPSAoTVtwYTEwXSAmIH4o bWFzayA8PCB1YmFzaGZbYmEgJiAzXSkpIHwNCiAgICAgICAgKCgoZDEwKSAqYnVmKyspIDw8IHVi YXNoZltiYSAmIDNdKTsNCiAgICB9DQpyZXR1cm4gMDsNCn0NCg0KaW50MzIgTWFwX1dyaXRlVyAo dWludDMyIGJhLCBpbnQzMiBiYywgdWludDE2ICpidWYpDQp7DQp1aW50MzIgbGltOw0KYTEwIHBh MTA7DQpkMTAgdmFsOw0KDQpiYSA9IGJhICYgfjAxOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGFsaWduIHN0YXJ0ICovDQpsaW0gPSBiYSArIChiYyAmIH4wMSk7 DQpmb3IgKCA7IGJhIDwgbGltOyBiYSsrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGJ5IGJ5dGVzICovDQogICAgcGExMCA9IE1hcF9BZGRyMTAgKGJhLCAxKTsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIG1hcCBhZGRyICovDQogICAgaWYgKChwYTEwIDwgMCkgfHwgTUVN X0FERFJfTlhNIChwYTEwKSkgeyAgICAgICAgICAgIC8qIGludiBtYXAgb3IgTlhNPyAqLw0KICAg ICAgICB1YmNzWzFdID0gdWJjc1sxXSB8IFVCQ1NfVE1POyAgICAgICAgICAgICAgICAgICAvKiBV QkEgdGltZXMgb3V0ICovDQogICAgICAgIHJldHVybiAobGltIC0gYmEpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHJldHVybiBiYyAqLw0KICAgICAgICB9DQogICAgdmFsID0gKmJ1 ZisrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdldCBkYXRhICov DQogICAgaWYgKGJhICYgMikNCiAgICAgICAgTVtwYTEwXSA9IChNW3BhMTBdICYgMDc3Nzc3NzYw MDAwMCkgfCB2YWw7DQogICAgZWxzZSBNW3BhMTBdID0gKE1bcGExMF0gJiAwNjAwMDAwNzc3Nzc3 KSB8ICh2YWwgPDwgMTgpOw0KICAgIH0NCnJldHVybiAwOw0KfQ0KDQovKiBFdmFsdWF0ZSBVbmli dXMgcHJpb3JpdHkgaW50ZXJydXB0cyAqLw0KDQppbnQzMiBwaV91Yl9ldmFsICgpDQp7DQppbnQz MiBpLCBsdmw7DQoNCmZvciAoaSA9IGx2bCA9IDA7IGkgPCBVQkFOVU07IGkrKykgew0KICAgIGlm IChpbnRfcmVxICYgdWJhYnI3NltpXSkNCiAgICAgICAgbHZsID0gbHZsIHwgcGlfbDJiaXRbVUJD U19HRVRfSEkgKHViY3NbaV0pXTsNCiAgICBpZiAoaW50X3JlcSAmIHViYWJyNTRbaV0pDQogICAg ICAgIGx2bCA9IGx2bCB8IHBpX2wyYml0W1VCQ1NfR0VUX0xPICh1YmNzW2ldKV07DQogICAgfQ0K cmV0dXJuIGx2bDsNCn0NCg0KLyogUmV0dXJuIFVuaWJ1cyBkZXZpY2UgdmVjdG9yDQoNCiAgIFRh a2VzIGFzIGlucHV0IHRoZSByZXF1ZXN0IGxldmVsIGNhbGN1bGF0ZWQgYnkgcGlfZXZhbA0KICAg SWYgdGhlcmUgaXMgYW4gaW50ZXJydXB0aW5nIFVuaWJ1cyBkZXZpY2UgYXQgdGhhdCBsZXZlbCwg cmV0dXJuIGl0cyB2ZWN0b3IsDQogICAgICAgIG90aGVyd2lzZSwgcmV0dXJucyAwDQoqLw0KDQpp bnQzMiBwaV91Yl92ZWMgKGludDMyIHJsdmwsIGludDMyICp1YmEpDQp7DQppbnQzMiBpLCBtYXNr ZWRfaXJxOw0KDQpmb3IgKGkgPSBtYXNrZWRfaXJxID0gMDsgaSA8IFVCQU5VTTsgaSsrKSB7DQog ICAgaWYgKChybHZsID09IFVCQ1NfR0VUX0hJICh1YmNzW2ldKSkgJiYgICAgICAgICAgICAgIC8q IHJlcSBvbiBoaSBsZXZlbD8gKi8NCiAgICAgICAgKG1hc2tlZF9pcnEgPSBpbnRfcmVxICYgdWJh YnI3NltpXSkpDQogICAgICAgIGJyZWFrOw0KICAgIGlmICgocmx2bCA9PSBVQkNTX0dFVF9MTyAo dWJjc1tpXSkpICYmICAgICAgICAgICAgICAvKiByZXEgb24gbG8gbGV2ZWw/ICovDQogICAgICAg IChtYXNrZWRfaXJxID0gaW50X3JlcSAmIHViYWJyNTRbaV0pKQ0KICAgICAgICBicmVhazsNCiAg ICB9DQoqdWJhID0gKGkgPDwgMSkgKyAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHN0b3JlIHViYSAjICovDQpmb3IgKGkgPSAwOyAoaSA8IDMyKSAmJiBtYXNrZWRfaXJx OyBpKyspIHsgICAgICAgICAgICAgIC8qIGZpbmQgaGkgcHJpIHJlcSAqLw0KICAgIGlmICgobWFz a2VkX2lycSA+PiBpKSAmIDEpIHsNCiAgICAgICAgaW50X3JlcSA9IGludF9yZXEgJiB+KDF1IDw8 IGkpOyAgICAgICAgICAgICAgICAgLyogY2xlYXIgcmVxICovDQogICAgICAgIGlmIChpbnRfYWNr W2ldKQ0KICAgICAgICAgICAgcmV0dXJuIGludF9hY2tbaV0oKTsNCiAgICAgICAgcmV0dXJuIGlu dF92ZWNbaV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIHZlY3RvciAq Lw0KICAgICAgICB9DQogICAgfQ0KcmV0dXJuIDA7DQp9DQoNCi8qIFVuaWJ1cyBhZGFwdGVyIG1h cCByb3V0aW5lcyAqLw0KDQp0X3N0YXQgdWJtYXBfcmQgKGludDMyICp2YWwsIGludDMyIHBhLCBp bnQzMiBtb2RlKQ0Kew0KaW50MzIgbiA9IGlvY21hcFtHRVRfSU9VQkEgKHBhKV07DQoNCmlmIChu IDwgMCkNCiAgICBBQk9SVCAoU1RPUF9JTExJT0MpOw0KKnZhbCA9IHVibWFwW25dW3BhICYgVU1B UF9BTUFTS107DQpyZXR1cm4gU0NQRV9PSzsNCn0NCg0KdF9zdGF0IHVibWFwX3dyIChpbnQzMiB2 YWwsIGludDMyIHBhLCBpbnQzMiBtb2RlKQ0Kew0KaW50MzIgbiA9IGlvY21hcFtHRVRfSU9VQkEg KHBhKV07DQoNCmlmIChuIDwgMCkNCiAgICBBQk9SVCAoU1RPUF9JTExJT0MpOw0KdWJtYXBbbl1b cGEgJiBVTUFQX0FNQVNLXSA9IFVNQVBfUE9TRkwgKHZhbCkgfCBVTUFQX1BPU1BOICh2YWwpOw0K cmV0dXJuIFNDUEVfT0s7DQp9DQoNCi8qIFVuaWJ1cyBhZGFwdGVyIGNvbnRyb2wvc3RhdHVzIHJv dXRpbmVzICovDQoNCnRfc3RhdCB1YnNfcmQgKGludDMyICp2YWwsIGludDMyIHBhLCBpbnQzMiBt b2RlKQ0Kew0KaW50MzIgbiA9IGlvY21hcFtHRVRfSU9VQkEgKHBhKV07DQoNCmlmIChuIDwgMCkN CiAgICBBQk9SVCAoU1RPUF9JTExJT0MpOw0KaWYgKGludF9yZXEgJiB1YmFicjc2W25dKQ0KICAg IHViY3Nbbl0gPSB1YmNzW25dIHwgVUJDU19ISTsNCmlmIChpbnRfcmVxICYgdWJhYnI1NFtuXSkN CiAgICB1YmNzW25dID0gdWJjc1tuXSB8IFVCQ1NfTE87DQoqdmFsID0gdWJjc1tuXSA9IHViY3Nb bl0gJiB+VUJDU19SRFo7DQpyZXR1cm4gU0NQRV9PSzsNCn0NCg0KdF9zdGF0IHVic193ciAoaW50 MzIgdmFsLCBpbnQzMiBwYSwgaW50MzIgbW9kZSkNCnsNCmludDMyIG4gPSBpb2NtYXBbR0VUX0lP VUJBIChwYSldOw0KDQppZiAobiA8IDApDQogICAgQUJPUlQgKFNUT1BfSUxMSU9DKTsNCmlmICh2 YWwgJiBVQkNTX0lOSSkgew0KICAgIHJlc2V0X2FsbCAoNSk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBzdGFydCBhZnRlciBVQkEgKi8NCiAgICB1YmNzW25dID0gdmFs ICYgVUJDU19EWEY7DQogICAgfQ0KZWxzZSB1YmNzW25dID0gdmFsICYgVUJDU19SRFc7DQppZiAo aW50X3JlcSAmIHViYWJyNzZbbl0pDQogICAgdWJjc1tuXSA9IHViY3Nbbl0gfCBVQkNTX0hJOw0K aWYgKGludF9yZXEgJiB1YmFicjU0W25dKQ0KICAgIHViY3Nbbl0gPSB1YmNzW25dIHwgVUJDU19M TzsNCnJldHVybiBTQ1BFX09LOw0KfQ0KDQovKiBVbmlidXMgYWRhcHRlciByZWFkIHplcm8vd3Jp dGUgaWdub3JlIHJvdXRpbmVzICovDQoNCnRfc3RhdCByZF96cm8gKGludDMyICp2YWwsIGludDMy IHBhLCBpbnQzMiBtb2RlKQ0Kew0KKnZhbCA9IDA7DQpyZXR1cm4gU0NQRV9PSzsNCn0NCg0KdF9z dGF0IHdyX25vcCAoaW50MzIgdmFsLCBpbnQzMiBwYSwgaW50MzIgbW9kZSkNCnsNCnJldHVybiBT Q1BFX09LOw0KfQ0KDQovKiBTaW11bGF0b3IgaW50ZXJmYWNlIHJvdXRpbmVzICovDQoNCnRfc3Rh dCB1YmFfZXggKHRfdmFsdWUgKnZwdHIsIHRfYWRkciBhZGRyLCBVTklUICp1cHRyLCBpbnQzMiBz dykNCnsNCmludDMyIHViYSA9IHVwdHIgLSB1YmFfdW5pdDsNCg0KaWYgKGFkZHIgPj0gVU1BUF9N RU1TSVpFKQ0KICAgIHJldHVybiBTQ1BFX05YTTsNCip2cHRyID0gdWJtYXBbdWJhXVthZGRyXTsN CnJldHVybiBTQ1BFX09LOw0KfQ0KDQp0X3N0YXQgdWJhX2RlcCAodF92YWx1ZSB2YWwsIHRfYWRk ciBhZGRyLCBVTklUICp1cHRyLCBpbnQzMiBzdykNCnsNCmludDMyIHViYSA9IHVwdHIgLSB1YmFf dW5pdDsNCg0KaWYgKGFkZHIgPj0gVU1BUF9NRU1TSVpFKQ0KICAgIHJldHVybiBTQ1BFX05YTTsN CnVibWFwW3ViYV1bYWRkcl0gPSAoaW50MzIpIHZhbCAmIFVNQVBfTUFTSzsNCnJldHVybiBTQ1BF X09LOw0KfQ0KDQp0X3N0YXQgdWJhX3Jlc2V0IChERVZJQ0UgKmRwdHIpDQp7DQppbnQzMiBpLCB1 YmE7DQoNCmludF9yZXEgPSAwOw0KZm9yICh1YmEgPSAwOyB1YmEgPCBVQkFOVU07IHViYSsrKSB7 DQogICAgdWJjc1t1YmFdID0gMDsNCiAgICBmb3IgKGkgPSAwOyBpIDwgVU1BUF9NRU1TSVpFOyBp KyspDQogICAgICAgIHVibWFwW3ViYV1baV0gPSAwOw0KICAgIH0NCnBpX2V2YWwgKCk7DQpyZXR1 cm4gU0NQRV9PSzsNCn0NCg0KLyogQ2hhbmdlIGRldmljZSBhZGRyZXNzICovDQoNCnRfc3RhdCBz ZXRfYWRkciAoVU5JVCAqdXB0ciwgaW50MzIgdmFsLCBjaGFyICpjcHRyLCB2b2lkICpkZXNjKQ0K ew0KREVWSUNFICpkcHRyOw0KRElCICpkaWJwOw0KdWludDMyIG5ld2JhOw0KdF9zdGF0IHI7DQoN CmlmIChjcHRyID09IE5VTEwpDQogICAgcmV0dXJuIFNDUEVfQVJHOw0KaWYgKCh2YWwgPT0gMCkg fHwgKHVwdHIgPT0gTlVMTCkpDQogICAgcmV0dXJuIFNDUEVfSUVSUjsNCmRwdHIgPSBmaW5kX2Rl dl9mcm9tX3VuaXQgKHVwdHIpOw0KaWYgKGRwdHIgPT0gTlVMTCkNCiAgICByZXR1cm4gU0NQRV9J RVJSOw0KZGlicCA9IChESUIgKikgZHB0ci0+Y3R4dDsNCmlmIChkaWJwID09IE5VTEwpDQogICAg cmV0dXJuIFNDUEVfSUVSUjsNCm5ld2JhID0gKHVpbnQzMikgZ2V0X3VpbnQgKGNwdHIsIDgsIFBB TUFTSywgJnIpOyAgICAgICAgLyogZ2V0IG5ldyAqLw0KaWYgKChyICE9IFNDUEVfT0spIHx8IChu ZXdiYSA9PSBkaWJwLT5iYSkpDQogICAgcmV0dXJuIHI7DQppZiAoR0VUX0lPVUJBIChuZXdiYSkg IT0gR0VUX0lPVUJBIChkaWJwLT5iYSkpDQogICAgcmV0dXJuIFNDUEVfQVJHOw0KaWYgKG5ld2Jh ICUgKCh1aW50MzIpIHZhbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVjayBt b2R1bHVzICovDQogICAgcmV0dXJuIFNDUEVfQVJHOw0KZGlicC0+YmEgPSBuZXdiYTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdG9yZSAqLw0KcmV0dXJuIFNDUEVf T0s7DQp9DQoNCi8qIFNob3cgZGV2aWNlIGFkZHJlc3MgKi8NCg0KdF9zdGF0IHNob3dfYWRkciAo RklMRSAqc3QsIFVOSVQgKnVwdHIsIGludDMyIHZhbCwgdm9pZCAqZGVzYykNCnsNCkRFVklDRSAq ZHB0cjsNCkRJQiAqZGlicDsNCg0KaWYgKHVwdHIgPT0gTlVMTCkNCiAgICByZXR1cm4gU0NQRV9J RVJSOw0KZHB0ciA9IGZpbmRfZGV2X2Zyb21fdW5pdCAodXB0cik7DQppZiAoZHB0ciA9PSBOVUxM KQ0KICAgIHJldHVybiBTQ1BFX0lFUlI7DQpkaWJwID0gKERJQiAqKSBkcHRyLT5jdHh0Ow0KaWYg KChkaWJwID09IE5VTEwpIHx8IChkaWJwLT5iYSA8PSBJT1BBR0VCQVNFKSkNCiAgICByZXR1cm4g U0NQRV9JRVJSOw0KZnByaW50ZiAoc3QsICJhZGRyZXNzPSUwN28iLCBkaWJwLT5iYSk7DQppZiAo ZGlicC0+bG50ID4gMSkNCiAgICBmcHJpbnRmIChzdCwgIi0lMDdvIiwgZGlicC0+YmEgKyBkaWJw LT5sbnQgLSAxKTsNCnJldHVybiBTQ1BFX09LOw0KfQ0KDQovKiBDaGFuZ2UgZGV2aWNlIHZlY3Rv ciAqLw0KDQp0X3N0YXQgc2V0X3ZlYyAoVU5JVCAqdXB0ciwgaW50MzIgYXJnLCBjaGFyICpjcHRy LCB2b2lkICpkZXNjKQ0Kew0KREVWSUNFICpkcHRyOw0KRElCICpkaWJwOw0KdWludDMyIG5ld3Zl YzsNCnRfc3RhdCByOw0KDQppZiAoY3B0ciA9PSBOVUxMKQ0KICAgIHJldHVybiBTQ1BFX0FSRzsN CmlmICh1cHRyID09IE5VTEwpDQogICAgcmV0dXJuIFNDUEVfSUVSUjsNCmRwdHIgPSBmaW5kX2Rl dl9mcm9tX3VuaXQgKHVwdHIpOw0KaWYgKGRwdHIgPT0gTlVMTCkNCiAgICByZXR1cm4gU0NQRV9J RVJSOw0KZGlicCA9IChESUIgKikgZHB0ci0+Y3R4dDsNCmlmIChkaWJwID09IE5VTEwpDQogICAg cmV0dXJuIFNDUEVfSUVSUjsNCm5ld3ZlYyA9ICh1aW50MzIpIGdldF91aW50IChjcHRyLCA4LCBW RUNfUSArIDAxMDAwLCAmcik7DQppZiAoKHIgIT0gU0NQRV9PSykgfHwgKG5ld3ZlYyA9PSBWRUNf USkgfHwNCiAgICAoKG5ld3ZlYyArIChkaWJwLT52bnVtICogNCkpID49IChWRUNfUSArIDAxMDAw KSkgfHwNCiAgICAobmV3dmVjICYgKChkaWJwLT52bnVtID4gMSk/IDA3OiAwMykpKQ0KICAgIHJl dHVybiBTQ1BFX0FSRzsNCmRpYnAtPnZlYyA9IG5ld3ZlYzsNCnJldHVybiBTQ1BFX09LOw0KfQ0K DQovKiBTaG93IGRldmljZSB2ZWN0b3IgKi8NCg0KdF9zdGF0IHNob3dfdmVjIChGSUxFICpzdCwg VU5JVCAqdXB0ciwgaW50MzIgYXJnLCB2b2lkICpkZXNjKQ0Kew0KREVWSUNFICpkcHRyOw0KRElC ICpkaWJwOw0KdWludDMyIHZlYywgbnVtdmVjOw0KDQppZiAodXB0ciA9PSBOVUxMKQ0KICAgIHJl dHVybiBTQ1BFX0lFUlI7DQpkcHRyID0gZmluZF9kZXZfZnJvbV91bml0ICh1cHRyKTsNCmlmIChk cHRyID09IE5VTEwpDQogICAgcmV0dXJuIFNDUEVfSUVSUjsNCmRpYnAgPSAoRElCICopIGRwdHIt PmN0eHQ7DQppZiAoZGlicCA9PSBOVUxMKQ0KICAgIHJldHVybiBTQ1BFX0lFUlI7DQp2ZWMgPSBk aWJwLT52ZWM7DQppZiAoYXJnKQ0KICAgIG51bXZlYyA9IGFyZzsNCmVsc2UgbnVtdmVjID0gZGli cC0+dm51bTsNCmlmICh2ZWMgPT0gMCkNCiAgICBmcHJpbnRmIChzdCwgIm5vIHZlY3RvciIpOw0K ZWxzZSB7DQogICAgZnByaW50ZiAoc3QsICJ2ZWN0b3I9JW8iLCB2ZWMpOw0KICAgIGlmIChudW12 ZWMgPiAxKQ0KICAgICAgICBmcHJpbnRmIChzdCwgIi0lbyIsIHZlYyArICg0ICogKG51bXZlYyAt IDEpKSk7DQogICAgfQ0KcmV0dXJuIFNDUEVfT0s7DQp9DQoNCi8qIFNob3cgdmVjdG9yIGZvciB0 ZXJtaW5hbCBtdWx0aXBsZXhvciAqLw0KDQp0X3N0YXQgc2hvd192ZWNfbXV4IChGSUxFICpzdCwg VU5JVCAqdXB0ciwgaW50MzIgYXJnLCB2b2lkICpkZXNjKQ0Kew0KVE1YUiAqbXAgPSAoVE1YUiAq KSBkZXNjOw0KDQppZiAoKG1wID09IE5VTEwpIHx8IChhcmcgPT0gMCkpDQogICAgcmV0dXJuIFND UEVfSUVSUjsNCnJldHVybiBzaG93X3ZlYyAoc3QsIHVwdHIsICgobXAtPmxpbmVzICogMikgLyBh cmcpLCBkZXNjKTsNCn0NCg0KLyogVGVzdCBmb3IgY29uZmxpY3QgaW4gZGV2aWNlIGFkZHJlc3Nl cyAqLw0KDQp0X2Jvb2wgZGV2X2NvbmZsaWN0IChESUIgKmN1cnIpDQp7DQp1aW50MzIgaSwgZW5k Ow0KREVWSUNFICpkcHRyOw0KRElCICpkaWJwOw0KDQplbmQgPSBjdXJyLT5iYSArIGN1cnItPmxu dCAtIDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdldCBlbmQgKi8NCmZvciAoaSA9IDA7 IChkcHRyID0gc2ltX2RldmljZXNbaV0pICE9IE5VTEw7IGkrKykgeyAgICAgLyogbG9vcCB0aHJ1 IGRldiAqLw0KICAgIGRpYnAgPSAoRElCICopIGRwdHItPmN0eHQ7ICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBnZXQgRElCICovDQogICAgaWYgKChkaWJwID09IE5VTEwpIHx8IChkaWJwID09 IGN1cnIpIHx8DQogICAgICAgIChkcHRyLT5mbGFncyAmIERFVl9ESVMpKQ0KICAgICAgICBjb250 aW51ZTsNCiAgICBpZiAoKChjdXJyLT5iYSA+PSBkaWJwLT5iYSkgJiYgICAgICAgICAgICAgICAg ICAgICAgLyogb3ZlcmxhcCBzdGFydD8gKi8NCiAgICAgICAgKGN1cnItPmJhIDwgKGRpYnAtPmJh ICsgZGlicC0+bG50KSkpIHx8DQogICAgICAgICgoZW5kID49IGRpYnAtPmJhKSAmJiAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIG92ZXJsYXAgZW5kPyAqLw0KICAgICAgICAoZW5kIDwgKGRp YnAtPmJhICsgZGlicC0+bG50KSkpKSB7DQogICAgICAgIHByaW50ZiAoIkRldmljZSAlcyBhZGRy ZXNzIGNvbmZsaWN0IGF0ICUwOG9cbiIsDQogICAgICAgICAgICBzaW1fZG5hbWUgKGRwdHIpLCBk aWJwLT5iYSk7DQogICAgICAgIGlmIChzaW1fbG9nKQ0KICAgICAgICAgICAgZnByaW50ZiAoc2lt X2xvZywgIkRldmljZSAlcyBhZGRyZXNzIGNvbmZsaWN0IGF0ICUwOG9cbiIsDQogICAgICAgICAg ICAgICAgICAgICBzaW1fZG5hbWUgKGRwdHIpLCBkaWJwLT5iYSk7DQogICAgICAgIHJldHVybiBU UlVFOw0KICAgICAgICB9DQogICAgfQ0KcmV0dXJuIEZBTFNFOw0KfQ0KDQovKiBCdWlsZCBpbnRl cnJ1cHQgdGFibGVzICovDQoNCnZvaWQgYnVpbGRfaW50X3ZlYyAoaW50MzIgdmxvYywgaW50MzIg aXZlYywgaW50MzIgKCppYWNrKSh2b2lkKSApDQp7DQppZiAoaWFjayAhPSBOVUxMKQ0KICAgIGlu dF9hY2tbdmxvY10gPSBpYWNrOw0KZWxzZSBpbnRfdmVjW3Zsb2NdID0gaXZlYzsNCnJldHVybjsN Cn0NCg0KLyogQnVpbGQgZGliX3RhYiBmcm9tIGRldmljZSBsaXN0ICovDQoNCnRfYm9vbCBidWls ZF9kaWJfdGFiICh2b2lkKQ0Kew0KaW50MzIgaSwgaiwgazsNCkRFVklDRSAqZHB0cjsNCkRJQiAq ZGlicDsNCg0KZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBjbGVhciBpbnRyIHRhYmxlcyAqLw0KICAgIGludF92ZWNbaV0gPSAwOw0KICAg IGludF9hY2tbaV0gPSBOVUxMOw0KCX0NCmZvciAoaSA9IGogPSAwOyAoZHB0ciA9IHNpbV9kZXZp Y2VzW2ldKSAhPSBOVUxMOyBpKyspIHsgLyogbG9vcCB0aHJ1IGRldiAqLw0KICAgIGRpYnAgPSAo RElCICopIGRwdHItPmN0eHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnZXQgRElCICov DQogICAgaWYgKGRpYnAgJiYgIShkcHRyLT5mbGFncyAmIERFVl9ESVMpKSB7ICAgICAgICAgICAg IC8qIGRlZmluZWQsIGVuYWJsZWQ/ICovDQogICAgICAgIGlmIChkaWJwLT52bnVtID4gVkVDX0RF Vk1BWCkNCiAgICAgICAgICAgIHJldHVybiBTQ1BFX0lFUlI7DQogICAgICAgIGZvciAoayA9IDA7 IGsgPCBkaWJwLT52bnVtOyBrKyspICAgICAgICAgICAgICAgIC8qIGxvb3AgdGhydSB2ZWMgKi8N CiAgICAgICAgICAgIGJ1aWxkX2ludF92ZWMgKGRpYnAtPnZsb2MgKyBrLCAgICAgICAgICAgICAg LyogYWRkIHZlY3RvciAqLw0KICAgICAgICAgICAgICAgIGRpYnAtPnZlYyArIChrICogNCksIGRp YnAtPmFja1trXSk7DQogICAgICAgIGlmIChkaWJwLT5sbnQgIT0gMCkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEkvTyBhZGRyZXNzZXM/ICovDQogICAgICAgICAgICBkaWJfdGFiW2or K10gPSBkaWJwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZCBESUIgdG8gZGliX3RhYiAq Lw0KICAgICAgICAgICAgaWYgKGogPj0gRElCX01BWCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0b28gbWFueT8gKi8NCiAgICAgICAgICAgICAgICByZXR1cm4gU0NQRV9JRVJSOw0KICAg ICAgICAgICAgfSAgIA0KICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBlbmQgaWYgZW5hYmxlZCAqLw0KICAgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgZm9yICovDQpmb3IgKGkg PSAwOyAoZGlicCA9IHN0ZF9kaWJbaV0pICE9IE5VTEw7IGkrKykgeyAgICAgICAgIC8qIGxvb3Ag dGhydSBzdGQgKi8NCiAgICBkaWJfdGFiW2orK10gPSBkaWJwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogYWRkIHRvIGRpYl90YWIgKi8NCiAgICBpZiAoaiA+PSBESUJfTUFYKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdG9vIG1hbnk/ICovDQogICAgICAg IHJldHVybiBTQ1BFX0lFUlI7DQogICAgfQ0KZGliX3RhYltqXSA9IE5VTEw7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgd2l0aCBOVUxMICovDQpmb3IgKGkgPSAw OyAoZGlicCA9IGRpYl90YWJbaV0pICE9IE5VTEw7IGkrKykgeyAgICAgICAgIC8qIHRlc3QgYnVp bHQgZGliX3RhYiAqLw0KICAgIGlmIChkZXZfY29uZmxpY3QgKGRpYnApKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBmb3IgY29uZmxpY3RzICovDQogICAgICAgIHJldHVybiBTQ1BFX1NU T1A7DQogICAgfQ0KcmV0dXJuIFNDUEVfT0s7DQp9DQoNCi8qIFNob3cgZGliX3RhYiAqLw0KDQp0 X3N0YXQgc2hvd19pb3NwYWNlIChGSUxFICpzdCwgVU5JVCAqdXB0ciwgaW50MzIgdmFsLCB2b2lk ICpkZXNjKQ0Kew0KaW50MzIgaSwgaiwgZG9uZSA9IDA7DQpERVZJQ0UgKmRwdHI7DQpESUIgKmRp YnQ7DQoNCmJ1aWxkX2RpYl90YWIgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogYnVpbGQgdGFibGUgKi8NCndoaWxlIChkb25lID09IDApIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogc29ydCBhc2NlbmRpbmcgKi8NCiAgICBkb25lID0g MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXNzdW1lIGRv bmUgKi8NCiAgICBmb3IgKGkgPSAwOyBkaWJfdGFiW2kgKyAxXSAhPSBOVUxMOyBpKyspIHsgICAg ICAgICAgLyogY2hlY2sgdGFibGUgKi8NCiAgICAgICAgaWYgKGRpYl90YWJbaV0tPmJhID4gZGli X3RhYltpICsgMV0tPmJhKSB7ICAgICAgLyogb3V0IG9mIG9yZGVyPyAqLw0KICAgICAgICAgICAg ZGlidCA9IGRpYl90YWJbaV07ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnRlcmNoYW5n ZSAqLw0KICAgICAgICAgICAgZGliX3RhYltpXSA9IGRpYl90YWJbaSArIDFdOw0KICAgICAgICAg ICAgZGliX3RhYltpICsgMV0gPSBkaWJ0Ow0KICAgICAgICAgICAgZG9uZSA9IDA7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBub3QgZG9uZSAqLw0KICAgICAgICAgICAgfQ0K ICAgICAgICB9DQogICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGVuZCB3aGlsZSAqLw0KZm9yIChpID0gMDsgZGliX3RhYltpXSAhPSBOVUxM OyBpKyspIHsgICAgICAgICAgICAgICAgICAvKiBwcmludCB0YWJsZSAqLw0KICAgIGZvciAoaiA9 IDAsIGRwdHIgPSBOVUxMOyBzaW1fZGV2aWNlc1tqXSAhPSBOVUxMOyBqKyspIHsNCiAgICAgICAg aWYgKCgoRElCKikgc2ltX2RldmljZXNbal0tPmN0eHQpID09IGRpYl90YWJbaV0pIHsNCiAgICAg ICAgICAgIGRwdHIgPSBzaW1fZGV2aWNlc1tqXTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAg ICAgICAgfQ0KICAgICAgICB9DQogICAgZnByaW50ZiAoc3QsICIlMDdvIC0gJTA3b1x0JXNcbiIs IGRpYl90YWJbaV0tPmJhLA0KICAgICAgICAgICAgZGliX3RhYltpXS0+YmEgKyBkaWJfdGFiW2ld LT5sbnQgLSAxLA0KICAgICAgICAgICAgZHB0cj8gc2ltX2RuYW1lIChkcHRyKTogIkNQVSIpOw0K ICAgIH0NCnJldHVybiBTQ1BFX09LOw0KfQ0KDQovKiBTdHViIGF1dG8tY29uZmlndXJlICovDQoN CnRfc3RhdCBhdXRvX2NvbmZpZyAoY2hhciAqbmFtZSwgaW50MzIgbnVtKQ0Kew0KcmV0dXJuIFND UEVfT0s7DQp9DQoNCi8qIFN0dWIgZmxvYXRpbmcgYWRkcmVzcyAqLw0KDQp0X3N0YXQgc2V0X2Fk ZHJfZmx0IChVTklUICp1cHRyLCBpbnQzMiB2YWwsIGNoYXIgKmNwdHIsIHZvaWQgKmRlc2MpDQp7 DQpyZXR1cm4gU0NQRV9PSzsNCn0NCg== --001485f19a0e8223710498f367c8--