From sources-request at octave dot org Tue Nov 22 19:54:45 2005 Subject: Octave gateway to NetLibs rkf45.f From: "John Weatherwax" To: octave-sources at octave dot org Date: Tue, 22 Nov 2005 19:28:16 -0600 This is a multi-part message in MIME format. ------=_NextPart_000_41f3_6a1_7092 Content-Type: text/plain; format=flowed Hello, As practice writting gateway routines in C++ to existing FORTRAN code I have written routines that call the Netlib ordinary differential equations solver code: rkf45.f. The user can pass in a simple octave function to be integrated and let the existing FORTRAN code to the actual integration. Please let me know of any comments about code/style etc anyone may have. I know that octave has a very good existing ODE solver but for practice I worked on these... Thanks, John Weatherwax _________________________________________________________________ On the road to retirement? Check out MSN Life Events for advice on how to get there! http://lifeevents.msn.com/category.aspx?cid=Retirement ------=_NextPart_000_41f3_6a1_7092 Content-Type: application/octet-stream; name="F.m" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="F.m" ZnVuY3Rpb24gWyByZXMgXSA9IEYodCx4KQogIAolcmVzID0gMTsgCiVyZXMg PSBzaW4odCk7IAolcmVzID0gc2luKHgpOyAKcmVzID0gWyB4KDEpKnNpbih4 KDIpKnQpOyB4KDIpKmNvcyh0KSBdOyAKCg== ------=_NextPart_000_41f3_6a1_7092 Content-Type: application/octet-stream; name="mkRKF45" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="mkRKF45" IyEvYmluL3NoCgpta29jdGZpbGUgcmtmNDVnLmNjIHJrZjQ1LmYKCgo= ------=_NextPart_000_41f3_6a1_7092 Content-Type: application/octet-stream; name="orbit.m" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="orbit.m" ZnVuY3Rpb24gWyByZXMgXSA9IG9yYml0KHQseCkKJSAKJSBBIHRlc3QgYW5k IHZlcmlmaWNhdGlvbiBvZiB0aGUgcm91dGluZSBya2Y0NSBmcm9tIHRoZSBi b29rIAolIAolIENvbXB1dGVyIE1ldGhvZHMgZm9yIE1hdGhlbWF0aWNhbCBD b21wdXRhdGlvbnMKJSBieSBHZW9yZ2UgRS4gRm9yc3l0aGUsIE1pY2hhZWwg QS4gTWFsY29sbSwgYW5kIENsZXZlIEIuIE1vbGVyLgolIAolIG9uIHBhZ2Ug MTMzCiUgCiUgV3JpdHRlbiBieToKJSAtLSAKJSBKb2huIEwuIFdlYXRoZXJ3 YXggICAgICAgICAgICAgICAgMjAwNS0xMC0yOQolIAolIGVtYWlsOiB3YXhA YWx1bS5taXQuZWR1CiUgCiUgUGxlYXNlIHNlbmQgY29tbWVudHMgYW5kIGVz cGVjaWFsbHkgYnVnIHJlcG9ydHMgdG8gdGhlCiUgYWJvdmUgZW1haWwgYWRk cmVzcy4KJSAKJS0tLS0tCgphbHBoYSA9IHBpLzQ7IAphbHBoYXNxID0gYWxw aGFeMjsgClIgPSB4KDEpKngoMSkgKyB4KDIpKngoMik7ClIgPSBSKnNxcnQo UikvYWxwaGFzcTsKCnJlcyA9IFsgeCgzKTsgeCg0KTsgLXgoMSkvUjsgLXgo MikvUiBdOyAK ------=_NextPart_000_41f3_6a1_7092 Content-Type: application/octet-stream; name="rkf45.f" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="rkf45.f" ICAgICAgc3Vicm91dGluZSBya2Y0NShmLG5lcW4seSx0LHRvdXQscmVsZXJy LGFic2VycixpZmxhZyx3b3JrLGl3b3JrKQpjCmMgICAgIGZlaGxiZXJnIGZv dXJ0aC1maWZ0aCBvcmRlciBydW5nZS1rdXR0YSBtZXRob2QKYwpjICAgICB3 cml0dGVuIGJ5IGguYS53YXR0cyBhbmQgbC5mLnNoYW1waW5lCmMgICAgICAg ICAgICAgICAgICAgc2FuZGlhIGxhYm9yYXRvcmllcwpjICAgICAgICAgICAg ICAgICAgYWxidXF1ZXJxdWUsbmV3IG1leGljbwpjCmMgICAgcmtmNDUgaXMg cHJpbWFyaWx5IGRlc2lnbmVkIHRvIHNvbHZlIG5vbi1zdGlmZiBhbmQgbWls ZGx5IHN0aWZmCmMgICAgZGlmZmVyZW50aWFsIGVxdWF0aW9ucyB3aGVuIGRl cml2YXRpdmUgZXZhbHVhdGlvbnMgYXJlIGluZXhwZW5zaXZlLgpjICAgIHJr ZjQ1IHNob3VsZCBnZW5lcmFsbHkgbm90IGJlIHVzZWQgd2hlbiB0aGUgdXNl ciBpcyBkZW1hbmRpbmcKYyAgICBoaWdoIGFjY3VyYWN5LgpjCmMgYWJzdHJh Y3QKYwpjICAgIHN1YnJvdXRpbmUgIHJrZjQ1ICBpbnRlZ3JhdGVzIGEgc3lz dGVtIG9mIG5lcW4gZmlyc3Qgb3JkZXIKYyAgICBvcmRpbmFyeSBkaWZmZXJl bnRpYWwgZXF1YXRpb25zIG9mIHRoZSBmb3JtCmMgICAgICAgICAgICAgZHko aSkvZHQgPSBmKHQseSgxKSx5KDIpLC4uLix5KG5lcW4pKQpjICAgICAgICAg ICAgICB3aGVyZSB0aGUgeShpKSBhcmUgZ2l2ZW4gYXQgdCAuCmMgICAgdHlw aWNhbGx5IHRoZSBzdWJyb3V0aW5lIGlzIHVzZWQgdG8gaW50ZWdyYXRlIGZy b20gdCB0byB0b3V0IGJ1dCBpdApjICAgIGNhbiBiZSB1c2VkIGFzIGEgb25l LXN0ZXAgaW50ZWdyYXRvciB0byBhZHZhbmNlIHRoZSBzb2x1dGlvbiBhCmMg ICAgc2luZ2xlIHN0ZXAgaW4gdGhlIGRpcmVjdGlvbiBvZiB0b3V0LiAgb24g cmV0dXJuIHRoZSBwYXJhbWV0ZXJzIGluCmMgICAgdGhlIGNhbGwgbGlzdCBh cmUgc2V0IGZvciBjb250aW51aW5nIHRoZSBpbnRlZ3JhdGlvbi4gdGhlIHVz ZXIgaGFzCmMgICAgb25seSB0byBjYWxsIHJrZjQ1IGFnYWluIChhbmQgcGVy aGFwcyBkZWZpbmUgYSBuZXcgdmFsdWUgZm9yIHRvdXQpLgpjICAgIGFjdHVh bGx5LCBya2Y0NSBpcyBhbiBpbnRlcmZhY2luZyByb3V0aW5lIHdoaWNoIGNh bGxzIHN1YnJvdXRpbmUKYyAgICBya2ZzIGZvciB0aGUgc29sdXRpb24uICBy a2ZzIGluIHR1cm4gY2FsbHMgc3Vicm91dGluZSAgZmVobCB3aGljaApjICAg IGNvbXB1dGVzIGFuIGFwcHJveGltYXRlIHNvbHV0aW9uIG92ZXIgb25lIHN0 ZXAuCmMKYyAgICBya2Y0NSAgdXNlcyB0aGUgcnVuZ2Uta3V0dGEtZmVobGJl cmcgKDQsNSkgIG1ldGhvZCBkZXNjcmliZWQKYyAgICBpbiB0aGUgcmVmZXJl bmNlCmMgICAgZS5mZWhsYmVyZyAsIGxvdy1vcmRlciBjbGFzc2ljYWwgcnVu Z2Uta3V0dGEgZm9ybXVsYXMgd2l0aCBzdGVwc2l6ZQpjICAgICAgICAgICAg ICAgICBjb250cm9sICwgbmFzYSB0ciByLTMxNQpjCmMgICAgdGhlIHBlcmZv cm1hbmNlIG9mIHJrZjQ1IGlzIGlsbHVzdHJhdGVkIGluIHRoZSByZWZlcmVu Y2UKYyAgICBsLmYuc2hhbXBpbmUsaC5hLndhdHRzLHMuZGF2ZW5wb3J0LCBz b2x2aW5nIG5vbi1zdGlmZiBvcmRpbmFyeQpjICAgICAgICAgICAgICAgICBk aWZmZXJlbnRpYWwgZXF1YXRpb25zLXRoZSBzdGF0ZSBvZiB0aGUgYXJ0ICwK YyAgICAgICAgICAgICAgICAgc2FuZGlhIGxhYm9yYXRvcmllcyByZXBvcnQg c2FuZDc1LTAxODIgLApjICAgICAgICAgICAgICAgICB0byBhcHBlYXIgaW4g c2lhbSByZXZpZXcuCmMKYwpjICAgIHRoZSBwYXJhbWV0ZXJzIHJlcHJlc2Vu dC0KYyAgICAgIGYgLS0gc3Vicm91dGluZSBmKHQseSx5cCkgdG8gZXZhbHVh dGUgZGVyaXZhdGl2ZXMgeXAoaSk9ZHkoaSkvZHQKYyAgICAgIG5lcW4gLS0g bnVtYmVyIG9mIGVxdWF0aW9ucyB0byBiZSBpbnRlZ3JhdGVkCmMgICAgICB5 KCopIC0tIHNvbHV0aW9uIHZlY3RvciBhdCB0CmMgICAgICB0IC0tIGluZGVw ZW5kZW50IHZhcmlhYmxlCmMgICAgICB0b3V0IC0tIG91dHB1dCBwb2ludCBh dCB3aGljaCBzb2x1dGlvbiBpcyBkZXNpcmVkCmMgICAgICByZWxlcnIsYWJz ZXJyIC0tIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBlcnJvciB0b2xlcmFuY2Vz IGZvciBsb2NhbApjICAgICAgICAgICAgZXJyb3IgdGVzdC4gYXQgZWFjaCBz dGVwIHRoZSBjb2RlIHJlcXVpcmVzIHRoYXQKYyAgICAgICAgICAgICAgICAg YWJzKGxvY2FsIGVycm9yKSAubGUuIHJlbGVyciphYnMoeSkgKyBhYnNlcnIK YyAgICAgICAgICAgIGZvciBlYWNoIGNvbXBvbmVudCBvZiB0aGUgbG9jYWwg ZXJyb3IgYW5kIHNvbHV0aW9uIHZlY3RvcnMKYyAgICAgIGlmbGFnIC0tIGlu ZGljYXRvciBmb3Igc3RhdHVzIG9mIGludGVncmF0aW9uCmMgICAgICB3b3Jr KCopIC0tIGFycmF5IHRvIGhvbGQgaW5mb3JtYXRpb24gaW50ZXJuYWwgdG8g cmtmNDUgd2hpY2ggaXMKYyAgICAgICAgICAgIG5lY2Vzc2FyeSBmb3Igc3Vi c2VxdWVudCBjYWxscy4gbXVzdCBiZSBkaW1lbnNpb25lZApjICAgICAgICAg ICAgYXQgbGVhc3QgIDMrNipuZXFuCmMgICAgICBpd29yaygqKSAtLSBpbnRl Z2VyIGFycmF5IHVzZWQgdG8gaG9sZCBpbmZvcm1hdGlvbiBpbnRlcm5hbCB0 bwpjICAgICAgICAgICAgcmtmNDUgd2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBz dWJzZXF1ZW50IGNhbGxzLiBtdXN0IGJlCmMgICAgICAgICAgICBkaW1lbnNp b25lZCBhdCBsZWFzdCAgNQpjCmMKYyAgZmlyc3QgY2FsbCB0byBya2Y0NQpj CmMgICAgdGhlIHVzZXIgbXVzdCBwcm92aWRlIHN0b3JhZ2UgaW4gaGlzIGNh bGxpbmcgcHJvZ3JhbSBmb3IgdGhlIGFycmF5cwpjICAgIGluIHRoZSBjYWxs IGxpc3QgIC0gICAgICB5KG5lcW4pICwgd29yaygzKzYqbmVxbikgLCBpd29y ayg1KSAgLApjICAgIGRlY2xhcmUgZiBpbiBhbiBleHRlcm5hbCBzdGF0ZW1l bnQsIHN1cHBseSBzdWJyb3V0aW5lIGYodCx5LHlwKSBhbmQKYyAgICBpbml0 aWFsaXplIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycy0KYwpjICAgICAgbmVx biAtLSBudW1iZXIgb2YgZXF1YXRpb25zIHRvIGJlIGludGVncmF0ZWQuICAo bmVxbiAuZ2UuIDEpCmMgICAgICB5KCopIC0tIHZlY3RvciBvZiBpbml0aWFs IGNvbmRpdGlvbnMKYyAgICAgIHQgLS0gc3RhcnRpbmcgcG9pbnQgb2YgaW50 ZWdyYXRpb24gLCBtdXN0IGJlIGEgdmFyaWFibGUKYyAgICAgIHRvdXQgLS0g b3V0cHV0IHBvaW50IGF0IHdoaWNoIHNvbHV0aW9uIGlzIGRlc2lyZWQuCmMg ICAgICAgICAgICB0PXRvdXQgaXMgYWxsb3dlZCBvbiB0aGUgZmlyc3QgY2Fs bCBvbmx5LCBpbiB3aGljaCBjYXNlCmMgICAgICAgICAgICBya2Y0NSByZXR1 cm5zIHdpdGggaWZsYWc9MiBpZiBjb250aW51YXRpb24gaXMgcG9zc2libGUu CmMgICAgICByZWxlcnIsYWJzZXJyIC0tIHJlbGF0aXZlIGFuZCBhYnNvbHV0 ZSBsb2NhbCBlcnJvciB0b2xlcmFuY2VzCmMgICAgICAgICAgICB3aGljaCBt dXN0IGJlIG5vbi1uZWdhdGl2ZS4gcmVsZXJyIG11c3QgYmUgYSB2YXJpYWJs ZSB3aGlsZQpjICAgICAgICAgICAgYWJzZXJyIG1heSBiZSBhIGNvbnN0YW50 LiB0aGUgY29kZSBzaG91bGQgbm9ybWFsbHkgbm90IGJlCmMgICAgICAgICAg ICB1c2VkIHdpdGggcmVsYXRpdmUgZXJyb3IgY29udHJvbCBzbWFsbGVyIHRo YW4gYWJvdXQgMS5lLTggLgpjICAgICAgICAgICAgdG8gYXZvaWQgbGltaXRp bmcgcHJlY2lzaW9uIGRpZmZpY3VsdGllcyB0aGUgY29kZSByZXF1aXJlcwpj ICAgICAgICAgICAgcmVsZXJyIHRvIGJlIGxhcmdlciB0aGFuIGFuIGludGVy bmFsbHkgY29tcHV0ZWQgcmVsYXRpdmUKYyAgICAgICAgICAgIGVycm9yIHBh cmFtZXRlciB3aGljaCBpcyBtYWNoaW5lIGRlcGVuZGVudC4gaW4gcGFydGlj dWxhciwKYyAgICAgICAgICAgIHB1cmUgYWJzb2x1dGUgZXJyb3IgaXMgbm90 IHBlcm1pdHRlZC4gaWYgYSBzbWFsbGVyIHRoYW4KYyAgICAgICAgICAgIGFs bG93YWJsZSB2YWx1ZSBvZiByZWxlcnIgaXMgYXR0ZW1wdGVkLCBya2Y0NSBp bmNyZWFzZXMKYyAgICAgICAgICAgIHJlbGVyciBhcHByb3ByaWF0ZWx5IGFu ZCByZXR1cm5zIGNvbnRyb2wgdG8gdGhlIHVzZXIgYmVmb3JlCmMgICAgICAg ICAgICBjb250aW51aW5nIHRoZSBpbnRlZ3JhdGlvbi4KYyAgICAgIGlmbGFn IC0tICsxLC0xICBpbmRpY2F0b3IgdG8gaW5pdGlhbGl6ZSB0aGUgY29kZSBm b3IgZWFjaCBuZXcKYyAgICAgICAgICAgIHByb2JsZW0uIG5vcm1hbCBpbnB1 dCBpcyArMS4gdGhlIHVzZXIgc2hvdWxkIHNldCBpZmxhZz0tMQpjICAgICAg ICAgICAgb25seSB3aGVuIG9uZS1zdGVwIGludGVncmF0b3IgY29udHJvbCBp cyBlc3NlbnRpYWwuIGluIHRoaXMKYyAgICAgICAgICAgIGNhc2UsIHJrZjQ1 IGF0dGVtcHRzIHRvIGFkdmFuY2UgdGhlIHNvbHV0aW9uIGEgc2luZ2xlIHN0 ZXAKYyAgICAgICAgICAgIGluIHRoZSBkaXJlY3Rpb24gb2YgdG91dCBlYWNo IHRpbWUgaXQgaXMgY2FsbGVkLiBzaW5jZSB0aGlzCmMgICAgICAgICAgICBt b2RlIG9mIG9wZXJhdGlvbiByZXN1bHRzIGluIGV4dHJhIGNvbXB1dGluZyBv dmVyaGVhZCwgaXQKYyAgICAgICAgICAgIHNob3VsZCBiZSBhdm9pZGVkIHVu bGVzcyBuZWVkZWQuCmMKYwpjICBvdXRwdXQgZnJvbSBya2Y0NQpjCmMgICAg ICB5KCopIC0tIHNvbHV0aW9uIGF0IHQKYyAgICAgIHQgLS0gbGFzdCBwb2lu dCByZWFjaGVkIGluIGludGVncmF0aW9uLgpjICAgICAgaWZsYWcgPSAyIC0t IGludGVncmF0aW9uIHJlYWNoZWQgdG91dC4gaW5kaWNhdGVzIHN1Y2Nlc3Nm dWwgcmV0dXIKYyAgICAgICAgICAgICAgICAgICBhbmQgaXMgdGhlIG5vcm1h bCBtb2RlIGZvciBjb250aW51aW5nIGludGVncmF0aW9uLgpjICAgICAgICAg ICAgPS0yIC0tIGEgc2luZ2xlIHN1Y2Nlc3NmdWwgc3RlcCBpbiB0aGUgZGly ZWN0aW9uIG9mIHRvdXQKYyAgICAgICAgICAgICAgICAgICBoYXMgYmVlbiB0 YWtlbi4gbm9ybWFsIG1vZGUgZm9yIGNvbnRpbnVpbmcKYyAgICAgICAgICAg ICAgICAgICBpbnRlZ3JhdGlvbiBvbmUgc3RlcCBhdCBhIHRpbWUuCmMgICAg ICAgICAgICA9IDMgLS0gaW50ZWdyYXRpb24gd2FzIG5vdCBjb21wbGV0ZWQg YmVjYXVzZSByZWxhdGl2ZSBlcnJvcgpjICAgICAgICAgICAgICAgICAgIHRv bGVyYW5jZSB3YXMgdG9vIHNtYWxsLiByZWxlcnIgaGFzIGJlZW4gaW5jcmVh c2VkCmMgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVseSBmb3IgY29u dGludWluZy4KYyAgICAgICAgICAgID0gNCAtLSBpbnRlZ3JhdGlvbiB3YXMg bm90IGNvbXBsZXRlZCBiZWNhdXNlIG1vcmUgdGhhbgpjICAgICAgICAgICAg ICAgICAgIDMwMDAgZGVyaXZhdGl2ZSBldmFsdWF0aW9ucyB3ZXJlIG5lZWRl ZC4gdGhpcwpjICAgICAgICAgICAgICAgICAgIGlzIGFwcHJveGltYXRlbHkg NTAwIHN0ZXBzLgpjICAgICAgICAgICAgPSA1IC0tIGludGVncmF0aW9uIHdh cyBub3QgY29tcGxldGVkIGJlY2F1c2Ugc29sdXRpb24KYyAgICAgICAgICAg ICAgICAgICB2YW5pc2hlZCBtYWtpbmcgYSBwdXJlIHJlbGF0aXZlIGVycm9y IHRlc3QKYyAgICAgICAgICAgICAgICAgICBpbXBvc3NpYmxlLiBtdXN0IHVz ZSBub24temVybyBhYnNlcnIgdG8gY29udGludWUuCmMgICAgICAgICAgICAg ICAgICAgdXNpbmcgdGhlIG9uZS1zdGVwIGludGVncmF0aW9uIG1vZGUgZm9y IG9uZSBzdGVwCmMgICAgICAgICAgICAgICAgICAgaXMgYSBnb29kIHdheSB0 byBwcm9jZWVkLgpjICAgICAgICAgICAgPSA2IC0tIGludGVncmF0aW9uIHdh cyBub3QgY29tcGxldGVkIGJlY2F1c2UgcmVxdWVzdGVkCmMgICAgICAgICAg ICAgICAgICAgYWNjdXJhY3kgY291bGQgbm90IGJlIGFjaGlldmVkIHVzaW5n IHNtYWxsZXN0CmMgICAgICAgICAgICAgICAgICAgYWxsb3dhYmxlIHN0ZXBz aXplLiB1c2VyIG11c3QgaW5jcmVhc2UgdGhlIGVycm9yCmMgICAgICAgICAg ICAgICAgICAgdG9sZXJhbmNlIGJlZm9yZSBjb250aW51ZWQgaW50ZWdyYXRp b24gY2FuIGJlCmMgICAgICAgICAgICAgICAgICAgYXR0ZW1wdGVkLgpjICAg ICAgICAgICAgPSA3IC0tIGl0IGlzIGxpa2VseSB0aGF0IHJrZjQ1IGlzIGlu ZWZmaWNpZW50IGZvciBzb2x2aW5nCmMgICAgICAgICAgICAgICAgICAgdGhp cyBwcm9ibGVtLiB0b28gbXVjaCBvdXRwdXQgaXMgcmVzdHJpY3RpbmcgdGhl CmMgICAgICAgICAgICAgICAgICAgbmF0dXJhbCBzdGVwc2l6ZSBjaG9pY2Uu IHVzZSB0aGUgb25lLXN0ZXAgaW50ZWdyYXRvcgpjICAgICAgICAgICAgICAg ICAgIG1vZGUuCmMgICAgICAgICAgICA9IDggLS0gaW52YWxpZCBpbnB1dCBw YXJhbWV0ZXJzCmMgICAgICAgICAgICAgICAgICAgdGhpcyBpbmRpY2F0b3Ig b2NjdXJzIGlmIGFueSBvZiB0aGUgZm9sbG93aW5nIGlzCmMgICAgICAgICAg ICAgICAgICAgc2F0aXNmaWVkIC0gICBuZXFuIC5sZS4gMApjICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdD10b3V0ICBhbmQgIGlmbGFnIC5u ZS4gKzEgb3IgLTEKYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlbGVyciBvciBhYnNlcnIgLmx0LiAwLgpjICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWZsYWcgLmVxLiAwICBvciAgLmx0LiAtMiAgb3Ig IC5ndC4gOApjICAgICAgd29yaygqKSxpd29yaygqKSAtLSBpbmZvcm1hdGlv biB3aGljaCBpcyB1c3VhbGx5IG9mIG5vIGludGVyZXN0CmMgICAgICAgICAg ICAgICAgICAgdG8gdGhlIHVzZXIgYnV0IG5lY2Vzc2FyeSBmb3Igc3Vic2Vx dWVudCBjYWxscy4KYyAgICAgICAgICAgICAgICAgICB3b3JrKDEpLC4uLix3 b3JrKG5lcW4pIGNvbnRhaW4gdGhlIGZpcnN0IGRlcml2YXRpdmVzCmMgICAg ICAgICAgICAgICAgICAgb2YgdGhlIHNvbHV0aW9uIHZlY3RvciB5IGF0IHQu IHdvcmsobmVxbisxKSBjb250YWlucwpjICAgICAgICAgICAgICAgICAgIHRo ZSBzdGVwc2l6ZSBoIHRvIGJlIGF0dGVtcHRlZCBvbiB0aGUgbmV4dCBzdGVw LgpjICAgICAgICAgICAgICAgICAgIGl3b3JrKDEpIGNvbnRhaW5zIHRoZSBk ZXJpdmF0aXZlIGV2YWx1YXRpb24gY291bnRlci4KYwpjCmMgIHN1YnNlcXVl bnQgY2FsbHMgdG8gcmtmNDUKYwpjICAgIHN1YnJvdXRpbmUgcmtmNDUgcmV0 dXJucyB3aXRoIGFsbCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29udGludWUK YyAgICB0aGUgaW50ZWdyYXRpb24uIGlmIHRoZSBpbnRlZ3JhdGlvbiByZWFj aGVkIHRvdXQsIHRoZSB1c2VyIG5lZWQgb25sCmMgICAgZGVmaW5lIGEgbmV3 IHRvdXQgYW5kIGNhbGwgcmtmNDUgYWdhaW4uIGluIHRoZSBvbmUtc3RlcCBp bnRlZ3JhdG9yCmMgICAgbW9kZSAoaWZsYWc9LTIpIHRoZSB1c2VyIG11c3Qg a2VlcCBpbiBtaW5kIHRoYXQgZWFjaCBzdGVwIHRha2VuIGlzCmMgICAgaW4g dGhlIGRpcmVjdGlvbiBvZiB0aGUgY3VycmVudCB0b3V0LiB1cG9uIHJlYWNo aW5nIHRvdXQgKGluZGljYXRlZApjICAgIGJ5IGNoYW5naW5nIGlmbGFnIHRv IDIpLHRoZSB1c2VyIG11c3QgdGhlbiBkZWZpbmUgYSBuZXcgdG91dCBhbmQK YyAgICByZXNldCBpZmxhZyB0byAtMiB0byBjb250aW51ZSBpbiB0aGUgb25l LXN0ZXAgaW50ZWdyYXRvciBtb2RlLgpjCmMgICAgaWYgdGhlIGludGVncmF0 aW9uIHdhcyBub3QgY29tcGxldGVkIGJ1dCB0aGUgdXNlciBzdGlsbCB3YW50 cyB0bwpjICAgIGNvbnRpbnVlIChpZmxhZz0zLDQgY2FzZXMpLCBoZSBqdXN0 IGNhbGxzIHJrZjQ1IGFnYWluLiB3aXRoIGlmbGFnPTMKYyAgICB0aGUgcmVs ZXJyIHBhcmFtZXRlciBoYXMgYmVlbiBhZGp1c3RlZCBhcHByb3ByaWF0ZWx5 IGZvciBjb250aW51aW5nCmMgICAgdGhlIGludGVncmF0aW9uLiBpbiB0aGUg Y2FzZSBvZiBpZmxhZz00IHRoZSBmdW5jdGlvbiBjb3VudGVyIHdpbGwKYyAg ICBiZSByZXNldCB0byAwIGFuZCBhbm90aGVyIDMwMDAgZnVuY3Rpb24gZXZh bHVhdGlvbnMgYXJlIGFsbG93ZWQuCmMKYyAgICBob3dldmVyLGluIHRoZSBj YXNlIGlmbGFnPTUsIHRoZSB1c2VyIG11c3QgZmlyc3QgYWx0ZXIgdGhlIGVy cm9yCmMgICAgY3JpdGVyaW9uIHRvIHVzZSBhIHBvc2l0aXZlIHZhbHVlIG9m IGFic2VyciBiZWZvcmUgaW50ZWdyYXRpb24gY2FuCmMgICAgcHJvY2VlZC4g aWYgaGUgZG9lcyBub3QsZXhlY3V0aW9uIGlzIHRlcm1pbmF0ZWQuCmMKYyAg ICBhbHNvLGluIHRoZSBjYXNlIGlmbGFnPTYsIGl0IGlzIG5lY2Vzc2FyeSBm b3IgdGhlIHVzZXIgdG8gcmVzZXQKYyAgICBpZmxhZyB0byAyIChvciAtMiB3 aGVuIHRoZSBvbmUtc3RlcCBpbnRlZ3JhdGlvbiBtb2RlIGlzIGJlaW5nIHVz ZWQpCmMgICAgYXMgd2VsbCBhcyBpbmNyZWFzaW5nIGVpdGhlciBhYnNlcnIs cmVsZXJyIG9yIGJvdGggYmVmb3JlIHRoZQpjICAgIGludGVncmF0aW9uIGNh biBiZSBjb250aW51ZWQuIGlmIHRoaXMgaXMgbm90IGRvbmUsIGV4ZWN1dGlv biB3aWxsCmMgICAgYmUgdGVybWluYXRlZC4gdGhlIG9jY3VycmVuY2Ugb2Yg aWZsYWc9NiBpbmRpY2F0ZXMgYSB0cm91YmxlIHNwb3QKYyAgICAoc29sdXRp b24gaXMgY2hhbmdpbmcgcmFwaWRseSxzaW5ndWxhcml0eSBtYXkgYmUgcHJl c2VudCkgYW5kIGl0CmMgICAgb2Z0ZW4gaXMgaW5hZHZpc2FibGUgdG8gY29u dGludWUuCmMKYyAgICBpZiBpZmxhZz03IGlzIGVuY291bnRlcmVkLCB0aGUg dXNlciBzaG91bGQgdXNlIHRoZSBvbmUtc3RlcApjICAgIGludGVncmF0aW9u IG1vZGUgd2l0aCB0aGUgc3RlcHNpemUgZGV0ZXJtaW5lZCBieSB0aGUgY29k ZSBvcgpjICAgIGNvbnNpZGVyIHN3aXRjaGluZyB0byB0aGUgYWRhbXMgY29k ZXMgZGUvc3RlcCxpbnRycC4gaWYgdGhlIHVzZXIKYyAgICBpbnNpc3RzIHVw b24gY29udGludWluZyB0aGUgaW50ZWdyYXRpb24gd2l0aCBya2Y0NSwgaGUg bXVzdCByZXNldApjICAgIGlmbGFnIHRvIDIgYmVmb3JlIGNhbGxpbmcgcmtm NDUgYWdhaW4uIG90aGVyd2lzZSxleGVjdXRpb24gd2lsbCBiZQpjICAgIHRl cm1pbmF0ZWQuCmMKYyAgICBpZiBpZmxhZz04IGlzIG9idGFpbmVkLCBpbnRl Z3JhdGlvbiBjYW4gbm90IGJlIGNvbnRpbnVlZCB1bmxlc3MKYyAgICB0aGUg aW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBjb3JyZWN0ZWQuCmMKYyAg ICBpdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGUgYXJyYXlzIHdvcmssaXdv cmsgY29udGFpbiBpbmZvcm1hdGlvbgpjICAgIHJlcXVpcmVkIGZvciBzdWJz ZXF1ZW50IGludGVncmF0aW9uLiBhY2NvcmRpbmdseSwgd29yayBhbmQgaXdv cmsKYyAgICBzaG91bGQgbm90IGJlIGFsdGVyZWQuCmMKYwogICAgICBpbnRl Z2VyIG5lcW4saWZsYWcsaXdvcmsoNSkKICAgICAgZG91YmxlIHByZWNpc2lv biB5KG5lcW4pLHQsdG91dCxyZWxlcnIsYWJzZXJyLHdvcmsoMSkKYwogICAg ICBleHRlcm5hbCBmCmMKICAgICAgaW50ZWdlciBrMSxrMixrMyxrNCxrNSxr NixrMW0KYwpjCmMgICAgIGNvbXB1dGUgaW5kaWNlcyBmb3IgdGhlIHNwbGl0 dGluZyBvZiB0aGUgd29yayBhcnJheQpjCiAgICAgIGsxbT1uZXFuKzEKICAg ICAgazE9azFtKzEKICAgICAgazI9azErbmVxbgogICAgICBrMz1rMituZXFu CiAgICAgIGs0PWszK25lcW4KICAgICAgazU9azQrbmVxbgogICAgICBrNj1r NStuZXFuCmMKYyAgICAgdGhpcyBpbnRlcmZhY2luZyByb3V0aW5lIG1lcmVs eSByZWxpZXZlcyB0aGUgdXNlciBvZiBhIGxvbmcKYyAgICAgY2FsbGluZyBs aXN0IHZpYSB0aGUgc3BsaXR0aW5nIGFwYXJ0IG9mIHR3byB3b3JraW5nIHN0 b3JhZ2UKYyAgICAgYXJyYXlzLiBpZiB0aGlzIGlzIG5vdCBjb21wYXRpYmxl IHdpdGggdGhlIHVzZXJzIGNvbXBpbGVyLApjICAgICBoZSBtdXN0IHVzZSBy a2ZzIGRpcmVjdGx5LgpjCiAgICAgIGNhbGwgcmtmcyhmLG5lcW4seSx0LHRv dXQscmVsZXJyLGFic2VycixpZmxhZyx3b3JrKDEpLHdvcmsoazFtKSwKICAg ICAxICAgICAgICAgIHdvcmsoazEpLHdvcmsoazIpLHdvcmsoazMpLHdvcmso azQpLHdvcmsoazUpLHdvcmsoazYpLAogICAgIDIgICAgICAgICAgd29yayhr NisxKSxpd29yaygxKSxpd29yaygyKSxpd29yaygzKSxpd29yayg0KSxpd29y ayg1KSkKYwogICAgICByZXR1cm4KICAgICAgZW5kCiAgICAgIHN1YnJvdXRp bmUgcmtmcyhmLG5lcW4seSx0LHRvdXQscmVsZXJyLGFic2VycixpZmxhZyx5 cCxoLGYxLGYyLGYzLAogICAgIDEgICAgICAgICAgICAgICAgZjQsZjUsc2F2 cmUsc2F2YWUsbmZlLGtvcCxpbml0LGpmbGFnLGtmbGFnKQpjCmMgICAgIGZl aGxiZXJnIGZvdXJ0aC1maWZ0aCBvcmRlciBydW5nZS1rdXR0YSBtZXRob2QK YwpjCmMgICAgIHJrZnMgaW50ZWdyYXRlcyBhIHN5c3RlbSBvZiBmaXJzdCBv cmRlciBvcmRpbmFyeSBkaWZmZXJlbnRpYWwKYyAgICAgZXF1YXRpb25zIGFz IGRlc2NyaWJlZCBpbiB0aGUgY29tbWVudHMgZm9yIHJrZjQ1IC4KYyAgICAg dGhlIGFycmF5cyB5cCxmMSxmMixmMyxmNCxhbmQgZjUgKG9mIGRpbWVuc2lv biBhdCBsZWFzdCBuZXFuKSBhbmQKYyAgICAgdGhlIHZhcmlhYmxlcyBoLHNh dnJlLHNhdmFlLG5mZSxrb3AsaW5pdCxqZmxhZyxhbmQga2ZsYWcgYXJlIHVz ZWQKYyAgICAgaW50ZXJuYWxseSBieSB0aGUgY29kZSBhbmQgYXBwZWFyIGlu IHRoZSBjYWxsIGxpc3QgdG8gZWxpbWluYXRlCmMgICAgIGxvY2FsIHJldGVu dGlvbiBvZiB2YXJpYWJsZXMgYmV0d2VlbiBjYWxscy4gYWNjb3JkaW5nbHks IHRoZXkKYyAgICAgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLiBpdGVtcyBvZiBw b3NzaWJsZSBpbnRlcmVzdCBhcmUKYyAgICAgICAgIHlwIC0gZGVyaXZhdGl2 ZSBvZiBzb2x1dGlvbiB2ZWN0b3IgYXQgdApjICAgICAgICAgaCAgLSBhbiBh cHByb3ByaWF0ZSBzdGVwc2l6ZSB0byBiZSB1c2VkIGZvciB0aGUgbmV4dCBz dGVwCmMgICAgICAgICBuZmUtIGNvdW50ZXIgb24gdGhlIG51bWJlciBvZiBk ZXJpdmF0aXZlIGZ1bmN0aW9uIGV2YWx1YXRpb25zCmMKYwogICAgICBsb2dp Y2FsIGhmYWlsZCxvdXRwdXQKYwogICAgICBpbnRlZ2VyICBuZXFuLGlmbGFn LG5mZSxrb3AsaW5pdCxqZmxhZyxrZmxhZwogICAgICBkb3VibGUgcHJlY2lz aW9uICB5KG5lcW4pLHQsdG91dCxyZWxlcnIsYWJzZXJyLGgseXAobmVxbiks CiAgICAgMSAgZjEobmVxbiksZjIobmVxbiksZjMobmVxbiksZjQobmVxbiks ZjUobmVxbiksc2F2cmUsCiAgICAgMiAgc2F2YWUKYwogICAgICBleHRlcm5h bCBmCmMKICAgICAgZG91YmxlIHByZWNpc2lvbiAgYSxhZSxkdCxlZSxlZW9l dCxlc3R0b2wsZXQsaG1pbixyZW1pbixyZXIscywKICAgICAxICBzY2FsZSx0 b2wsdG9sbix0d29lcHMsdTI2LHlwawpjCiAgICAgIGludGVnZXIgIGssbWF4 bmZlLG1mbGFnCmMKICAgICAgZG91YmxlIHByZWNpc2lvbiAgZGFicyxkbWF4 MSxkbWluMSxkc2lnbixkMW1hY2gKYwpjICByZW1pbiBpcyB0aGUgbWluaW11 bSBhY2NlcHRhYmxlIHZhbHVlIG9mIHJlbGVyci4gIGF0dGVtcHRzCmMgIHRv IG9idGFpbiBoaWdoZXIgYWNjdXJhY3kgd2l0aCB0aGlzIHN1YnJvdXRpbmUg YXJlIHVzdWFsbHkKYyAgdmVyeSBleHBlbnNpdmUgYW5kIG9mdGVuIHVuc3Vj Y2Vzc2Z1bC4KYwogICAgICBkYXRhIHJlbWluLzEuZC0xMi8KYwpjCmMgICAg IHRoZSBleHBlbnNlIGlzIGNvbnRyb2xsZWQgYnkgcmVzdHJpY3RpbmcgdGhl IG51bWJlcgpjICAgICBvZiBmdW5jdGlvbiBldmFsdWF0aW9ucyB0byBiZSBh cHByb3hpbWF0ZWx5IG1heG5mZS4KYyAgICAgYXMgc2V0LCB0aGlzIGNvcnJl c3BvbmRzIHRvIGFib3V0IDUwMCBzdGVwcy4KYwogICAgICBkYXRhIG1heG5m ZS8zMDAwLwpjCmMgICBoZXJlIHR3byBjb25zdGFudHMgZW1ib2RpbmcgdGhl IG1hY2hpbmUgZXBzaWxvbiBpcyBwcmVzZW50CmMgICB0d29lc3AgaXMgc2V0 IHRvIHR3aWNlIHRoZSBtYWNoaW5lIGVwc2lsb24gd2hpbGUgdTI2IGlzIHNl dApjICAgdG8gMjYgdGltZXMgdGhlIG1hY2hpbmUgZXBzaWxvbgpjCmMgICAg IGRhdGEgdHdvZXBzLCB1MjYvNC40ZC0xNiwgNS43MmQtMTUvICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICoqKgogICAgICB0d29lcHMgPSAyLipk MW1hY2goNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqKioKICAgICAgdTI2ID0gMTMuKnR3b2VwcyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCmMK YwpjICAgICBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzCmMKYwogICAgICBpZiAo bmVxbiAubHQuIDEpIGdvIHRvIDEwCiAgICAgIGlmICgocmVsZXJyIC5sdC4g MC4wZDApICAub3IuICAoYWJzZXJyIC5sdC4gMC4wZDApKSBnbyB0byAxMAog ICAgICBtZmxhZz1pYWJzKGlmbGFnKQogICAgICBpZiAoKG1mbGFnIC5nZS4g MSkgIC5hbmQuICAobWZsYWcgLmxlLiA4KSkgZ28gdG8gMjAKYwpjICAgICBp bnZhbGlkIGlucHV0CiAgIDEwIGlmbGFnPTgKICAgICAgcmV0dXJuCmMKYyAg ICAgaXMgdGhpcyB0aGUgZmlyc3QgY2FsbAogICAyMCBpZiAobWZsYWcgLmVx LiAxKSBnbyB0byA1MApjCmMgICAgIGNoZWNrIGNvbnRpbnVhdGlvbiBwb3Nz aWJpbGl0aWVzCmMKICAgICAgaWYgKCh0IC5lcS4gdG91dCkgLmFuZC4gKGtm bGFnIC5uZS4gMykpIGdvIHRvIDEwCiAgICAgIGlmIChtZmxhZyAubmUuIDIp IGdvIHRvIDI1CmMKYyAgICAgaWZsYWcgPSArMiBvciAtMgogICAgICBpZiAo a2ZsYWcgLmVxLiAzKSBnbyB0byA0NQogICAgICBpZiAoaW5pdCAuZXEuIDAp IGdvIHRvIDQ1CiAgICAgIGlmIChrZmxhZyAuZXEuIDQpIGdvIHRvIDQwCiAg ICAgIGlmICgoa2ZsYWcgLmVxLiA1KSAgLmFuZC4gIChhYnNlcnIgLmVxLiAw LjBkMCkpIGdvIHRvIDMwCiAgICAgIGlmICgoa2ZsYWcgLmVxLiA2KSAgLmFu ZC4gIChyZWxlcnIgLmxlLiBzYXZyZSkgIC5hbmQuCiAgICAgMSAgICAoYWJz ZXJyIC5sZS4gc2F2YWUpKSBnbyB0byAzMAogICAgICBnbyB0byA1MApjCmMg ICAgIGlmbGFnID0gMyw0LDUsNiw3IG9yIDgKICAgMjUgaWYgKGlmbGFnIC5l cS4gMykgZ28gdG8gNDUKICAgICAgaWYgKGlmbGFnIC5lcS4gNCkgZ28gdG8g NDAKICAgICAgaWYgKChpZmxhZyAuZXEuIDUpIC5hbmQuIChhYnNlcnIgLmd0 LiAwLjBkMCkpIGdvIHRvIDQ1CmMKYyAgICAgaW50ZWdyYXRpb24gY2Fubm90 IGJlIGNvbnRpbnVlZCBzaW5jZSB1c2VyIGRpZCBub3QgcmVzcG9uZCB0bwpj ICAgICB0aGUgaW5zdHJ1Y3Rpb25zIHBlcnRhaW5pbmcgdG8gaWZsYWc9NSw2 LDcgb3IgOAogICAzMCBzdG9wCmMKYyAgICAgcmVzZXQgZnVuY3Rpb24gZXZh bHVhdGlvbiBjb3VudGVyCiAgIDQwIG5mZT0wCiAgICAgIGlmIChtZmxhZyAu ZXEuIDIpIGdvIHRvIDUwCmMKYyAgICAgcmVzZXQgZmxhZyB2YWx1ZSBmcm9t IHByZXZpb3VzIGNhbGwKICAgNDUgaWZsYWc9amZsYWcKICAgICAgaWYgKGtm bGFnIC5lcS4gMykgbWZsYWc9aWFicyhpZmxhZykKYwpjICAgICBzYXZlIGlu cHV0IGlmbGFnIGFuZCBzZXQgY29udGludWF0aW9uIGZsYWcgdmFsdWUgZm9y IHN1YnNlcXVlbnQKYyAgICAgaW5wdXQgY2hlY2tpbmcKICAgNTAgamZsYWc9 aWZsYWcKICAgICAga2ZsYWc9MApjCmMgICAgIHNhdmUgcmVsZXJyIGFuZCBh YnNlcnIgZm9yIGNoZWNraW5nIGlucHV0IG9uIHN1YnNlcXVlbnQgY2FsbHMK ICAgICAgc2F2cmU9cmVsZXJyCiAgICAgIHNhdmFlPWFic2VycgpjCmMgICAg IHJlc3RyaWN0IHJlbGF0aXZlIGVycm9yIHRvbGVyYW5jZSB0byBiZSBhdCBs ZWFzdCBhcyBsYXJnZSBhcwpjICAgICAyKmVwcytyZW1pbiB0byBhdm9pZCBs aW1pdGluZyBwcmVjaXNpb24gZGlmZmljdWx0aWVzIGFyaXNpbmcKYyAgICAg ZnJvbSBpbXBvc3NpYmxlIGFjY3VyYWN5IHJlcXVlc3RzCmMKICAgICAgcmVy PXR3b2VwcytyZW1pbgogICAgICBpZiAocmVsZXJyIC5nZS4gcmVyKSBnbyB0 byA1NQpjCmMgICAgIHJlbGF0aXZlIGVycm9yIHRvbGVyYW5jZSB0b28gc21h bGwKICAgICAgcmVsZXJyPXJlcgogICAgICBpZmxhZz0zCiAgICAgIGtmbGFn PTMKICAgICAgcmV0dXJuCmMKICAgNTUgZHQ9dG91dC10CmMKICAgICAgaWYg KG1mbGFnIC5lcS4gMSkgZ28gdG8gNjAKICAgICAgaWYgKGluaXQgLmVxLiAw KSBnbyB0byA2NQogICAgICBnbyB0byA4MApjCmMgICAgIGluaXRpYWxpemF0 aW9uIC0tCmMgICAgICAgICAgICAgICAgICAgICAgIHNldCBpbml0aWFsaXph dGlvbiBjb21wbGV0aW9uIGluZGljYXRvcixpbml0CmMgICAgICAgICAgICAg ICAgICAgICAgIHNldCBpbmRpY2F0b3IgZm9yIHRvbyBtYW55IG91dHB1dCBw b2ludHMsa29wCmMgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlIGlu aXRpYWwgZGVyaXZhdGl2ZXMKYyAgICAgICAgICAgICAgICAgICAgICAgc2V0 IGNvdW50ZXIgZm9yIGZ1bmN0aW9uIGV2YWx1YXRpb25zLG5mZQpjICAgICAg ICAgICAgICAgICAgICAgICBldmFsdWF0ZSBpbml0aWFsIGRlcml2YXRpdmVz CmMgICAgICAgICAgICAgICAgICAgICAgIHNldCBjb3VudGVyIGZvciBmdW5j dGlvbiBldmFsdWF0aW9ucyxuZmUKYyAgICAgICAgICAgICAgICAgICAgICAg ZXN0aW1hdGUgc3RhcnRpbmcgc3RlcHNpemUKYwogICA2MCBpbml0PTAKICAg ICAga29wPTAKYwogICAgICBhPXQKICAgICAgY2FsbCBmKGEseSx5cCkKICAg ICAgbmZlPTEKICAgICAgaWYgKHQgLm5lLiB0b3V0KSBnbyB0byA2NQogICAg ICBpZmxhZz0yCiAgICAgIHJldHVybgpjCmMKICAgNjUgaW5pdD0xCiAgICAg IGg9ZGFicyhkdCkKICAgICAgdG9sbj0wLgogICAgICBkbyA3MCBrPTEsbmVx bgogICAgICAgIHRvbD1yZWxlcnIqZGFicyh5KGspKSthYnNlcnIKICAgICAg ICBpZiAodG9sIC5sZS4gMC4pIGdvIHRvIDcwCiAgICAgICAgdG9sbj10b2wK ICAgICAgICB5cGs9ZGFicyh5cChrKSkKICAgICAgICBpZiAoeXBrKmgqKjUg Lmd0LiB0b2wpIGg9KHRvbC95cGspKiowLjJkMAogICA3MCBjb250aW51ZQog ICAgICBpZiAodG9sbiAubGUuIDAuMGQwKSBoPTAuMGQwCiAgICAgIGg9ZG1h eDEoaCx1MjYqZG1heDEoZGFicyh0KSxkYWJzKGR0KSkpCiAgICAgIGpmbGFn PWlzaWduKDIsaWZsYWcpCmMKYwpjICAgICBzZXQgc3RlcHNpemUgZm9yIGlu dGVncmF0aW9uIGluIHRoZSBkaXJlY3Rpb24gZnJvbSB0IHRvIHRvdXQKYwog ICA4MCBoPWRzaWduKGgsZHQpCmMKYyAgICAgdGVzdCB0byBzZWUgaWYgcmtm NDUgaXMgYmVpbmcgc2V2ZXJlbHkgaW1wYWN0ZWQgYnkgdG9vIG1hbnkKYyAg ICAgb3V0cHV0IHBvaW50cwpjCiAgICAgIGlmIChkYWJzKGgpIC5nZS4gMi4w ZDAqZGFicyhkdCkpIGtvcD1rb3ArMQogICAgICBpZiAoa29wIC5uZS4gMTAw KSBnbyB0byA4NQpjCmMgICAgIHVubmVjZXNzYXJ5IGZyZXF1ZW5jeSBvZiBv dXRwdXQKICAgICAga29wPTAKICAgICAgaWZsYWc9NwogICAgICByZXR1cm4K YwogICA4NSBpZiAoZGFicyhkdCkgLmd0LiB1MjYqZGFicyh0KSkgZ28gdG8g OTUKYwpjICAgICBpZiB0b28gY2xvc2UgdG8gb3V0cHV0IHBvaW50LGV4dHJh cG9sYXRlIGFuZCByZXR1cm4KYwogICAgICBkbyA5MCBrPTEsbmVxbgogICA5 MCAgIHkoayk9eShrKStkdCp5cChrKQogICAgICBhPXRvdXQKICAgICAgY2Fs bCBmKGEseSx5cCkKICAgICAgbmZlPW5mZSsxCiAgICAgIGdvIHRvIDMwMApj CmMKYyAgICAgaW5pdGlhbGl6ZSBvdXRwdXQgcG9pbnQgaW5kaWNhdG9yCmMK ICAgOTUgb3V0cHV0PSAuZmFsc2UuCmMKYyAgICAgdG8gYXZvaWQgcHJlbWF0 dXJlIHVuZGVyZmxvdyBpbiB0aGUgZXJyb3IgdG9sZXJhbmNlIGZ1bmN0aW9u LApjICAgICBzY2FsZSB0aGUgZXJyb3IgdG9sZXJhbmNlcwpjCiAgICAgIHNj YWxlPTIuMGQwL3JlbGVycgogICAgICBhZT1zY2FsZSphYnNlcnIKYwpjCmMg ICAgIHN0ZXAgYnkgc3RlcCBpbnRlZ3JhdGlvbgpjCiAgMTAwIGhmYWlsZD0g LmZhbHNlLgpjCmMgICAgIHNldCBzbWFsbGVzdCBhbGxvd2FibGUgc3RlcHNp emUKYwogICAgICBobWluPXUyNipkYWJzKHQpCmMKYyAgICAgYWRqdXN0IHN0 ZXBzaXplIGlmIG5lY2Vzc2FyeSB0byBoaXQgdGhlIG91dHB1dCBwb2ludC4K YyAgICAgbG9vayBhaGVhZCB0d28gc3RlcHMgdG8gYXZvaWQgZHJhc3RpYyBj aGFuZ2VzIGluIHRoZSBzdGVwc2l6ZSBhbmQKYyAgICAgdGh1cyBsZXNzZW4g dGhlIGltcGFjdCBvZiBvdXRwdXQgcG9pbnRzIG9uIHRoZSBjb2RlLgpjCiAg ICAgIGR0PXRvdXQtdAogICAgICBpZiAoZGFicyhkdCkgLmdlLiAyLjBkMCpk YWJzKGgpKSBnbyB0byAyMDAKICAgICAgaWYgKGRhYnMoZHQpIC5ndC4gZGFi cyhoKSkgZ28gdG8gMTUwCmMKYyAgICAgdGhlIG5leHQgc3VjY2Vzc2Z1bCBz dGVwIHdpbGwgY29tcGxldGUgdGhlIGludGVncmF0aW9uIHRvIHRoZQpjICAg ICBvdXRwdXQgcG9pbnQKYwogICAgICBvdXRwdXQ9IC50cnVlLgogICAgICBo PWR0CiAgICAgIGdvIHRvIDIwMApjCiAgMTUwIGg9MC41ZDAqZHQKYwpjCmMK YyAgICAgY29yZSBpbnRlZ3JhdG9yIGZvciB0YWtpbmcgYSBzaW5nbGUgc3Rl cApjCmMgICAgIHRoZSB0b2xlcmFuY2VzIGhhdmUgYmVlbiBzY2FsZWQgdG8g YXZvaWQgcHJlbWF0dXJlIHVuZGVyZmxvdyBpbgpjICAgICBjb21wdXRpbmcg dGhlIGVycm9yIHRvbGVyYW5jZSBmdW5jdGlvbiBldC4KYyAgICAgdG8gYXZv aWQgcHJvYmxlbXMgd2l0aCB6ZXJvIGNyb3NzaW5ncyxyZWxhdGl2ZSBlcnJv ciBpcyBtZWFzdXJlZApjICAgICB1c2luZyB0aGUgYXZlcmFnZSBvZiB0aGUg bWFnbml0dWRlcyBvZiB0aGUgc29sdXRpb24gYXQgdGhlCmMgICAgIGJlZ2lu bmluZyBhbmQgZW5kIG9mIGEgc3RlcC4KYyAgICAgdGhlIGVycm9yIGVzdGlt YXRlIGZvcm11bGEgaGFzIGJlZW4gZ3JvdXBlZCB0byBjb250cm9sIGxvc3Mg b2YKYyAgICAgc2lnbmlmaWNhbmNlLgpjICAgICB0byBkaXN0aW5ndWlzaCB0 aGUgdmFyaW91cyBhcmd1bWVudHMsIGggaXMgbm90IHBlcm1pdHRlZApjICAg ICB0byBiZWNvbWUgc21hbGxlciB0aGFuIDI2IHVuaXRzIG9mIHJvdW5kb2Zm IGluIHQuCmMgICAgIHByYWN0aWNhbCBsaW1pdHMgb24gdGhlIGNoYW5nZSBp biB0aGUgc3RlcHNpemUgYXJlIGVuZm9yY2VkIHRvCmMgICAgIHNtb290aCB0 aGUgc3RlcHNpemUgc2VsZWN0aW9uIHByb2Nlc3MgYW5kIHRvIGF2b2lkIGV4 Y2Vzc2l2ZQpjICAgICBjaGF0dGVyaW5nIG9uIHByb2JsZW1zIGhhdmluZyBk aXNjb250aW51aXRpZXMuCmMgICAgIHRvIHByZXZlbnQgdW5uZWNlc3Nhcnkg ZmFpbHVyZXMsIHRoZSBjb2RlIHVzZXMgOS8xMCB0aGUgc3RlcHNpemUKYyAg ICAgaXQgZXN0aW1hdGVzIHdpbGwgc3VjY2VlZC4KYyAgICAgYWZ0ZXIgYSBz dGVwIGZhaWx1cmUsIHRoZSBzdGVwc2l6ZSBpcyBub3QgYWxsb3dlZCB0byBp bmNyZWFzZSBmb3IKYyAgICAgdGhlIG5leHQgYXR0ZW1wdGVkIHN0ZXAuIHRo aXMgbWFrZXMgdGhlIGNvZGUgbW9yZSBlZmZpY2llbnQgb24KYyAgICAgcHJv YmxlbXMgaGF2aW5nIGRpc2NvbnRpbnVpdGllcyBhbmQgbW9yZSBlZmZlY3Rp dmUgaW4gZ2VuZXJhbApjICAgICBzaW5jZSBsb2NhbCBleHRyYXBvbGF0aW9u IGlzIGJlaW5nIHVzZWQgYW5kIGV4dHJhIGNhdXRpb24gc2VlbXMKYyAgICAg d2FycmFudGVkLgpjCmMKYyAgICAgdGVzdCBudW1iZXIgb2YgZGVyaXZhdGl2 ZSBmdW5jdGlvbiBldmFsdWF0aW9ucy4KYyAgICAgaWYgb2theSx0cnkgdG8g YWR2YW5jZSB0aGUgaW50ZWdyYXRpb24gZnJvbSB0IHRvIHQraApjCiAgMjAw IGlmIChuZmUgLmxlLiBtYXhuZmUpIGdvIHRvIDIyMApjCmMgICAgIHRvbyBt dWNoIHdvcmsKICAgICAgaWZsYWc9NAogICAgICBrZmxhZz00CiAgICAgIHJl dHVybgpjCmMgICAgIGFkdmFuY2UgYW4gYXBwcm94aW1hdGUgc29sdXRpb24g b3ZlciBvbmUgc3RlcCBvZiBsZW5ndGggaApjCiAgMjIwIGNhbGwgZmVobChm LG5lcW4seSx0LGgseXAsZjEsZjIsZjMsZjQsZjUsZjEpCiAgICAgIG5mZT1u ZmUrNQpjCmMgICAgIGNvbXB1dGUgYW5kIHRlc3QgYWxsb3dhYmxlIHRvbGVy YW5jZXMgdmVyc3VzIGxvY2FsIGVycm9yIGVzdGltYXRlcwpjICAgICBhbmQg cmVtb3ZlIHNjYWxpbmcgb2YgdG9sZXJhbmNlcy4gbm90ZSB0aGF0IHJlbGF0 aXZlIGVycm9yIGlzCmMgICAgIG1lYXN1cmVkIHdpdGggcmVzcGVjdCB0byB0 aGUgYXZlcmFnZSBvZiB0aGUgbWFnbml0dWRlcyBvZiB0aGUKYyAgICAgc29s dXRpb24gYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBzdGVwLgpj CiAgICAgIGVlb2V0PTAuMGQwCiAgICAgIGRvIDI1MCBrPTEsbmVxbgogICAg ICAgIGV0PWRhYnMoeShrKSkrZGFicyhmMShrKSkrYWUKICAgICAgICBpZiAo ZXQgLmd0LiAwLjBkMCkgZ28gdG8gMjQwCmMKYyAgICAgICBpbmFwcHJvcHJp YXRlIGVycm9yIHRvbGVyYW5jZQogICAgICAgIGlmbGFnPTUKICAgICAgICBy ZXR1cm4KYwogIDI0MCAgIGVlPWRhYnMoKC0yMDkwLjBkMCp5cChrKSsoMjE5 NzAuMGQwKmYzKGspLTE1MDQ4LjBkMCpmNChrKSkpKwogICAgIDEgICAgICAg ICAgICAgICAgICAgICAgICAoMjI1MjguMGQwKmYyKGspLTI3MzYwLjBkMCpm NShrKSkpCiAgMjUwICAgZWVvZXQ9ZG1heDEoZWVvZXQsZWUvZXQpCmMKICAg ICAgZXN0dG9sPWRhYnMoaCkqZWVvZXQqc2NhbGUvNzUyNDAwLjBkMApjCiAg ICAgIGlmIChlc3R0b2wgLmxlLiAxLjBkMCkgZ28gdG8gMjYwCmMKYwpjICAg ICB1bnN1Y2Nlc3NmdWwgc3RlcApjICAgICAgICAgICAgICAgICAgICAgICBy ZWR1Y2UgdGhlIHN0ZXBzaXplICwgdHJ5IGFnYWluCmMgICAgICAgICAgICAg ICAgICAgICAgIHRoZSBkZWNyZWFzZSBpcyBsaW1pdGVkIHRvIGEgZmFjdG9y IG9mIDEvMTAKYwogICAgICBoZmFpbGQ9IC50cnVlLgogICAgICBvdXRwdXQ9 IC5mYWxzZS4KICAgICAgcz0wLjFkMAogICAgICBpZiAoZXN0dG9sIC5sdC4g NTkwNDkuMGQwKSBzPTAuOWQwL2VzdHRvbCoqMC4yZDAKICAgICAgaD1zKmgK ICAgICAgaWYgKGRhYnMoaCkgLmd0LiBobWluKSBnbyB0byAyMDAKYwpjICAg ICByZXF1ZXN0ZWQgZXJyb3IgdW5hdHRhaW5hYmxlIGF0IHNtYWxsZXN0IGFs bG93YWJsZSBzdGVwc2l6ZQogICAgICBpZmxhZz02CiAgICAgIGtmbGFnPTYK ICAgICAgcmV0dXJuCmMKYwpjICAgICBzdWNjZXNzZnVsIHN0ZXAKYyAgICAg ICAgICAgICAgICAgICAgICAgIHN0b3JlIHNvbHV0aW9uIGF0IHQraApjICAg ICAgICAgICAgICAgICAgICAgICAgYW5kIGV2YWx1YXRlIGRlcml2YXRpdmVz IHRoZXJlCmMKICAyNjAgdD10K2gKICAgICAgZG8gMjcwIGs9MSxuZXFuCiAg MjcwICAgeShrKT1mMShrKQogICAgICBhPXQKICAgICAgY2FsbCBmKGEseSx5 cCkKICAgICAgbmZlPW5mZSsxCmMKYwpjICAgICAgICAgICAgICAgICAgICAg ICBjaG9vc2UgbmV4dCBzdGVwc2l6ZQpjICAgICAgICAgICAgICAgICAgICAg ICB0aGUgaW5jcmVhc2UgaXMgbGltaXRlZCB0byBhIGZhY3RvciBvZiA1CmMg ICAgICAgICAgICAgICAgICAgICAgIGlmIHN0ZXAgZmFpbHVyZSBoYXMganVz dCBvY2N1cnJlZCwgbmV4dApjICAgICAgICAgICAgICAgICAgICAgICAgICBz dGVwc2l6ZSBpcyBub3QgYWxsb3dlZCB0byBpbmNyZWFzZQpjCiAgICAgIHM9 NS4wZDAKICAgICAgaWYgKGVzdHRvbCAuZ3QuIDEuODg5NTY4ZC00KSBzPTAu OWQwL2VzdHRvbCoqMC4yZDAKICAgICAgaWYgKGhmYWlsZCkgcz1kbWluMShz LDEuMGQwKQogICAgICBoPWRzaWduKGRtYXgxKHMqZGFicyhoKSxobWluKSxo KQpjCmMgICAgIGVuZCBvZiBjb3JlIGludGVncmF0b3IKYwpjCmMgICAgIHNo b3VsZCB3ZSB0YWtlIGFub3RoZXIgc3RlcApjCiAgICAgIGlmIChvdXRwdXQp IGdvIHRvIDMwMAogICAgICBpZiAoaWZsYWcgLmd0LiAwKSBnbyB0byAxMDAK YwpjCmMgICAgIGludGVncmF0aW9uIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQK YwpjICAgICBvbmUtc3RlcCBtb2RlCiAgICAgIGlmbGFnPS0yCiAgICAgIHJl dHVybgpjCmMgICAgIGludGVydmFsIG1vZGUKICAzMDAgdD10b3V0CiAgICAg IGlmbGFnPTIKICAgICAgcmV0dXJuCmMKICAgICAgZW5kCiAgICAgIHN1YnJv dXRpbmUgZmVobChmLG5lcW4seSx0LGgseXAsZjEsZjIsZjMsZjQsZjUscykK YwpjICAgICBmZWhsYmVyZyBmb3VydGgtZmlmdGggb3JkZXIgcnVuZ2Uta3V0 dGEgbWV0aG9kCmMKYyAgICBmZWhsIGludGVncmF0ZXMgYSBzeXN0ZW0gb2Yg bmVxbiBmaXJzdCBvcmRlcgpjICAgIG9yZGluYXJ5IGRpZmZlcmVudGlhbCBl cXVhdGlvbnMgb2YgdGhlIGZvcm0KYyAgICAgICAgICAgICBkeShpKS9kdD1m KHQseSgxKSwtLS0seShuZXFuKSkKYyAgICB3aGVyZSB0aGUgaW5pdGlhbCB2 YWx1ZXMgeShpKSBhbmQgdGhlIGluaXRpYWwgZGVyaXZhdGl2ZXMKYyAgICB5 cChpKSBhcmUgc3BlY2lmaWVkIGF0IHRoZSBzdGFydGluZyBwb2ludCB0LiBm ZWhsIGFkdmFuY2VzCmMgICAgdGhlIHNvbHV0aW9uIG92ZXIgdGhlIGZpeGVk IHN0ZXAgaCBhbmQgcmV0dXJucwpjICAgIHRoZSBmaWZ0aCBvcmRlciAoc2l4 dGggb3JkZXIgYWNjdXJhdGUgbG9jYWxseSkgc29sdXRpb24KYyAgICBhcHBy b3hpbWF0aW9uIGF0IHQraCBpbiBhcnJheSBzKGkpLgpjICAgIGYxLC0tLSxm NSBhcmUgYXJyYXlzIG9mIGRpbWVuc2lvbiBuZXFuIHdoaWNoIGFyZSBuZWVk ZWQKYyAgICBmb3IgaW50ZXJuYWwgc3RvcmFnZS4KYyAgICB0aGUgZm9ybXVs YXMgaGF2ZSBiZWVuIGdyb3VwZWQgdG8gY29udHJvbCBsb3NzIG9mIHNpZ25p ZmljYW5jZS4KYyAgICBmZWhsIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBhbiBo IG5vdCBzbWFsbGVyIHRoYW4gMTMgdW5pdHMgb2YKYyAgICByb3VuZG9mZiBp biB0IHNvIHRoYXQgdGhlIHZhcmlvdXMgaW5kZXBlbmRlbnQgYXJndW1lbnRz IGNhbiBiZQpjICAgIGRpc3Rpbmd1aXNoZWQuCmMKYwogICAgICBpbnRlZ2Vy ICBuZXFuCiAgICAgIGRvdWJsZSBwcmVjaXNpb24gIHkobmVxbiksdCxoLHlw KG5lcW4pLGYxKG5lcW4pLGYyKG5lcW4pLAogICAgIDEgIGYzKG5lcW4pLGY0 KG5lcW4pLGY1KG5lcW4pLHMobmVxbikKYwogICAgICBkb3VibGUgcHJlY2lz aW9uICBjaAogICAgICBpbnRlZ2VyICBrCmMKICAgICAgY2g9aC80LjBkMAog ICAgICBkbyAyMjEgaz0xLG5lcW4KICAyMjEgICBmNShrKT15KGspK2NoKnlw KGspCiAgICAgIGNhbGwgZih0K2NoLGY1LGYxKQpjCiAgICAgIGNoPTMuMGQw KmgvMzIuMGQwCiAgICAgIGRvIDIyMiBrPTEsbmVxbgogIDIyMiAgIGY1KGsp PXkoaykrY2gqKHlwKGspKzMuMGQwKmYxKGspKQogICAgICBjYWxsIGYodCsz LjBkMCpoLzguMGQwLGY1LGYyKQpjCiAgICAgIGNoPWgvMjE5Ny4wZDAKICAg ICAgZG8gMjIzIGs9MSxuZXFuCiAgMjIzICAgZjUoayk9eShrKStjaCooMTkz Mi4wZDAqeXAoaykrKDcyOTYuMGQwKmYyKGspLTcyMDAuMGQwKmYxKGspKSkK ICAgICAgY2FsbCBmKHQrMTIuMGQwKmgvMTMuMGQwLGY1LGYzKQpjCiAgICAg IGNoPWgvNDEwNC4wZDAKICAgICAgZG8gMjI0IGs9MSxuZXFuCiAgMjI0ICAg ZjUoayk9eShrKStjaCooKDgzNDEuMGQwKnlwKGspLTg0NS4wZDAqZjMoaykp KwogICAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDI5NDQwLjBk MCpmMihrKS0zMjgzMi4wZDAqZjEoaykpKQogICAgICBjYWxsIGYodCtoLGY1 LGY0KQpjCiAgICAgIGNoPWgvMjA1MjAuMGQwCiAgICAgIGRvIDIyNSBrPTEs bmVxbgogIDIyNSAgIGYxKGspPXkoaykrY2gqKCgtNjA4MC4wZDAqeXAoaykr KDkyOTUuMGQwKmYzKGspLQogICAgIDEgICAgICAgICA1NjQzLjBkMCpmNChr KSkpKyg0MTA0MC4wZDAqZjEoayktMjgzNTIuMGQwKmYyKGspKSkKICAgICAg Y2FsbCBmKHQraC8yLjBkMCxmMSxmNSkKYwpjICAgICBjb21wdXRlIGFwcHJv eGltYXRlIHNvbHV0aW9uIGF0IHQraApjCiAgICAgIGNoPWgvNzYxODA1MC4w ZDAKICAgICAgZG8gMjMwIGs9MSxuZXFuCiAgMjMwICAgcyhrKT15KGspK2No KigoOTAyODgwLjBkMCp5cChrKSsoMzg1NTczNS4wZDAqZjMoayktCiAgICAg MSAgICAgICAgMTM3MTI0OS4wZDAqZjQoaykpKSsoMzk1MzY2NC4wZDAqZjIo aykrCiAgICAgMiAgICAgICAgMjc3MDIwLjBkMCpmNShrKSkpCmMKICAgICAg cmV0dXJuCiAgICAgIGVuZAo= ------=_NextPart_000_41f3_6a1_7092 Content-Type: application/octet-stream; name="rkf45g.cc" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="rkf45g.cc" I2luY2x1ZGUgPG9jdGF2ZS9vY3QuaD4KI2luY2x1ZGUgPG9jdGF2ZS9wYXJz ZS5oPgojaW5jbHVkZSA8b2N0YXZlL2Y3Ny1mY24uaD4KCi8qIAoKQW4gb2N0 YXZlIGdhdGV3YXkgcm91dGluZSB0byB0aGUgRk9SVFJBTiBjb2RlIHJrZjQ1 LmYgZXhwbGFpbmVkIGluCmRldGFpbCBpbgoKQ29tcHV0ZXIgTWV0aG9kcyBm b3IgTWF0aGVtYXRpY2FsIENvbXB1dGF0aW9ucwpieSBHZW9yZ2UgRS4gRm9y c3l0aGUsIE1pY2hhZWwgQS4gTWFsY29sbSwgYW5kIENsZXZlIEIuIE1vbGVy LgpvbiBwYWdlcyAxMjktLTE0NwoKQW5kIGZvdW5kIGF0CgpodHRwOi8vY20u YmVsbC1sYWJzLmNvbS9uZXRsaWIvb2RlLwoKV3JpdHRlbiBieToKLS0gCkpv aG4gTC4gV2VhdGhlcndheCAgICAgICAgICAgICAgICAyMDA1LTEwLTI5Cgpl bWFpbDogd2F4QGFsdW0ubWl0LmVkdQoKUGxlYXNlIHNlbmQgY29tbWVudHMg YW5kIGVzcGVjaWFsbHkgYnVnIHJlcG9ydHMgdG8gdGhlCmFib3ZlIGVtYWls IGFkZHJlc3MuCgotLS0tLQoqLyAKCnR5cGVkZWYgRjc3X1JFVF9UICgqZm9y dF9mY25fcHRyX2RlYykgKGNvbnN0IGRvdWJsZSYsZG91YmxlKiwgZG91Ymxl Kik7CgpleHRlcm4gIkMiCnsKICBGNzdfUkVUX1QgRjc3X0ZVTkMocmtmNDUs UktGNDUpKGZvcnRfZmNuX3B0cl9kZWMsIGNvbnN0IGludCYsIGRvdWJsZSos IAoJCQkJICBkb3VibGUmLCBkb3VibGUmLCAKCQkJCSAgY29uc3QgZG91Ymxl JiwgY29uc3QgZG91YmxlJiwgCgkJCQkgIGludCYsIGRvdWJsZSosIGludCog KTsKfQoKc3RhdGljIG9jdGF2ZV9mdW5jdGlvbiAqcmtmNDVnX29jdF9mY247 CnN0YXRpYyBpbnQgTkVRTjsgCgpzdGF0aWMgRjc3X1JFVF9UCnJrZjQ1Z19m X2Zjbihjb25zdCBkb3VibGUmIHQsIGRvdWJsZSogeCwgZG91YmxlKiB4cCkK ewogIFJvd1ZlY3RvciBydl94KE5FUU4pOyAKICBmb3IoIGludCBpaT0wOyBp aSA8IE5FUU47IGlpKysgKSBydl94KGlpKT14W2lpXTsKCiAgb2N0YXZlX3Zh bHVlX2xpc3QgYXJnczsKICBhcmdzKDApID0gdDsgYXJncygxKSA9IHJ2X3g7 IAogIGludCBuYXJnb3V0ID0gMTsKCiAgb2N0YXZlX3ZhbHVlX2xpc3QgcmV0 dmFsID0gZmV2YWwocmtmNDVnX29jdF9mY24sIGFyZ3MsIG5hcmdvdXQpOwoK ICBpZiAoISBlcnJvcl9zdGF0ZSAmJiByZXR2YWwubGVuZ3RoICgpID09IDEp CiAgICB7CiAgICAgIE1hdHJpeCBtX3hwID0gcmV0dmFsKDApLm1hdHJpeF92 YWx1ZSgpOwogICAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgTkVRTjsgaWkr Kyl7Cgl4cFtpaV0gPSBtX3hwKGlpKTsKICAgICAgfQoKICAgICAgaWYgKGVy cm9yX3N0YXRlKQoJZXJyb3IgKCJmYWlsdXJlIGV2YWx1YXRpbmcgdXNlci1z dXBwbGllZCBmdW5jdGlvbiIpOwogICAgfQogIGVsc2UKICAgIGVycm9yICgi ZmFpbHVyZSBldmFsdWF0aW5nIHVzZXItc3VwcGxpZWQgZnVuY3Rpb24iKTsK CiAgRjc3X1JFVFVSTigwKTsKfQoKLy8gQysrIG9jdGF2ZSBBUEkgY2FsbHMg b2YgdGhlIHVzZXIncyBpbnB1dCBmdW5jdGlvbjoKLy8KQ29sdW1uVmVjdG9y CnJrZjQ1X2ZfZnVuY3Rpb24oZG91YmxlIHQsIGNvbnN0IENvbHVtblZlY3Rv ciYgeCkKewogIENvbHVtblZlY3RvciByZXR2YWw7CgogIG9jdGF2ZV92YWx1 ZV9saXN0IGFyZ3M7CiAgYXJncygwKSA9IHQ7IGFyZ3MoMSkgPSB4OwoKICBp ZiAocmtmNDVnX29jdF9mY24pCiAgICB7CiAgICAgIG9jdGF2ZV92YWx1ZV9s aXN0IHRtcCA9IHJrZjQ1Z19vY3RfZmNuLT5kb19tdWx0aV9pbmRleF9vcCAo MSwgYXJncyk7CgogICAgICBpZiAoZXJyb3Jfc3RhdGUpCgl7CgkgIGdyaXBl X3VzZXJfc3VwcGxpZWRfZXZhbCAoInJrZjQ1Z19vY3RfZmNuIik7CgkgIHJl dHVybiByZXR2YWw7Cgl9CgogICAgICBpZiAodG1wLmxlbmd0aCAoKSA+IDAg JiYgdG1wKDApLmlzX2RlZmluZWQgKCkpCgl7CgkgIHJldHZhbCA9IENvbHVt blZlY3RvciAodG1wKDApLnZlY3Rvcl92YWx1ZSAoKSk7CgoJICBpZiAoZXJy b3Jfc3RhdGUgfHwgcmV0dmFsLmxlbmd0aCAoKSA9PSAwKQoJICAgIGdyaXBl X3VzZXJfc3VwcGxpZWRfZXZhbCAoInJrZjQ1Z19vY3RfZmNuIik7Cgl9CiAg ICAgIGVsc2UKCWdyaXBlX3VzZXJfc3VwcGxpZWRfZXZhbCAoInJrZjQ1Z19v Y3RfZmNuIik7CiAgICB9CgogIHJldHVybiByZXR2YWw7Cn0KCgpERUZVTl9E TEQgKHJrZjQ1ZywgYXJncywgbmFyZ291dCwKICAieF90ID0gcmtmNDVnKGZj biwgeF8wLCB0KTogSW50ZWdyYXRlcyBkeC9kdCA9IGZjbiBmcm9tIDAgdG8g dCIpCnsKICBvY3RhdmVfdmFsdWVfbGlzdCByZXR2YWw7CgogIGlmKCBhcmdz Lmxlbmd0aCgpICE9IDMgKXsgcHJpbnRfdXNhZ2UoInJrZjQ1ZyIpOyByZXR1 cm4gcmV0dmFsOyB9CiAgaWYoIG5hcmdvdXQgPiAxICkgeyBwcmludF91c2Fn ZSgicmtmNDVnIik7IHJldHVybiByZXR2YWw7IH0KCiAgLy8gRXh0cmFjdCB0 aGUgdXNlciBpbnB1dDoKICAvLwogIHJrZjQ1Z19vY3RfZmNuID0gZXh0cmFj dF9mdW5jdGlvbihhcmdzKDApLCAicmtmNDVnIiwgIl9fcmtmNDVnX29jdF9m Y25fXyIsCgkgICAgICJmdW5jdGlvbiBGID0gX19ya2Y0NWdfb2N0X2Zjbl9f ICh0LCB4KSAiLCAiOyBlbmRmdW5jdGlvbiIpOwogIGlmKGVycm9yX3N0YXRl KXsKICAgIGVycm9yKCAicmtmNDVnOiBleHBlY3RpbmcgYSBmdW5jdGlvbiBm b3IgdGhlIGZpcnN0IGFyZ3VtZW50IiApOyAKICB9CiAgQ29sdW1uVmVjdG9y IHhfMCggYXJncygxKS52ZWN0b3JfdmFsdWUoKSApOwogIGlmKGVycm9yX3N0 YXRlKXsKICAgIGVycm9yKCJya2Y0NWc6IGV4cGVjdGluZyBhIHZlY3RvciBm b3IgdGhlIHNlY29uZCBhcmd1bWVudCIgKTsgCiAgfQogIE5FUU4gPSB4XzAu bGVuZ3RoKCk7IAogIGRvdWJsZSBURklOQUwgPSBhcmdzKDIpLmRvdWJsZV92 YWx1ZSgpOwogIGlmKGVycm9yX3N0YXRlKXsKICAgIGVycm9yKCJya2Y0NWc6 IGV4cGVjdGluZyBhIHNjYWxhciBmb3IgdGhlIHRoaXJkIGFyZ3VtZW50IiAp OyAKICB9CgogIC8vIEZPUlRSQU4gdmFyaWFibGVzOgogIGRvdWJsZSBUPTAu MDsgCiAgZG91YmxlIFJFTEVSUiA9IDEuZS05OwogIGRvdWJsZSBBQlNFUlIg PSAwLjA7CiAgLy8gIGRvdWJsZSBURklOQUwgPSAxMC4wOyAKICBkb3VibGUg VFBSSU5UID0gMC41OwogIGludCBJRkxBRyA9ICsxOyAKCiAgLy8gQ3JlYXRl IHRoZSB3b3JrL2l3b3JrIHZlY3RvcnM6IAogIGludCBOV09SSyA9IDMrNipO RVFOOwogIE9DVEFWRV9MT0NBTF9CVUZGRVIoIGRvdWJsZSwgV09SS1AsIE5X T1JLICk7IAogIGludCBOSVdPUksgPSA1OwogIE9DVEFWRV9MT0NBTF9CVUZG RVIoIGludCwgSVdPUktQLCBOSVdPUksgKTsKICBPQ1RBVkVfTE9DQUxfQlVG RkVSKCBkb3VibGUsIFhQLCBORVFOICk7IAogIGZvciggaW50IGlpPTA7IGlp IDwgTkVRTjsgaWkrKyApIFhQW2lpXT14XzAoaWkpOwoKICAvLyBDcmVhdGUg b2N0YXZlIG91dHB1dCBtYXRyaXg6IAogIGludCBub3V0cyA9IDEgKyAoIChp bnQpICggKFRGSU5BTC1UKS9UUFJJTlQgKSArIDEgKTsKICBNYXRyaXggeV9v dXQoTkVRTixub3V0cyk7CiAgZm9yKCBpbnQgaWk9MDsgaWkgPCBORVFOOyBp aSsrICkgeV9vdXQoaWksMCk9eF8wKGlpKTsKCiAgLy8gSW5pdGlhbGl6YXRp b24gY2FsbCB0byBSS0Y0NToKICBkb3VibGUgVE9VVD1UOwogIEY3N19GVU5D KHJrZjQ1LFJLRjQ1KShya2Y0NWdfZl9mY24sTkVRTixYUCxULFRPVVQsXAoJ CQlSRUxFUlIsQUJTRVJSLElGTEFHLFdPUktQLElXT1JLUCk7CgogIGZvcigg aW50IGlpdD0xOyBpaXQgPCBub3V0czsgaWl0KysgKXsgLy8gUGVyZm9ybSBl YWNoIGludGVncmF0aW9uIHN0ZXA6CiAgICBUT1VUID0gKCAoVCtUUFJJTlQp PD1URklOQUwgPyAoVCtUUFJJTlQpIDogVEZJTkFMICk7CiAgICBGNzdfRlVO Qyhya2Y0NSxSS0Y0NSkocmtmNDVnX2ZfZmNuLE5FUU4sWFAsVCxUT1VULFwK CQkJICBSRUxFUlIsQUJTRVJSLElGTEFHLFdPUktQLElXT1JLUCk7CgogICAg Q29sdW1uVmVjdG9yIHhfb3V0KE5FUU4pOyAKICAgIGZvciggaW50IGlpPTA7 IGlpIDwgTkVRTjsgaWkrKyApewogICAgICB5X291dChpaSxpaXQpID0gWFBb aWldOwogICAgfQogIH0KCiAgcmV0dmFsLmFwcGVuZCh5X291dCk7IAogIHJl dHVybiByZXR2YWw7Cn0K ------=_NextPart_000_41f3_6a1_7092 Content-Type: application/octet-stream; name="test_rkf45g.m" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="test_rkf45g.m" JSAKJSBBIHRlc3QgYW5kIHZlcmlmaWNhdGlvbiBvZiB0aGUgcm91dGluZSBy a2Y0NSBmcm9tIHRoZSBib29rIAolIAolIENvbXB1dGVyIE1ldGhvZHMgZm9y IE1hdGhlbWF0aWNhbCBDb21wdXRhdGlvbnMKJSBieSBHZW9yZ2UgRS4gRm9y c3l0aGUsIE1pY2hhZWwgQS4gTWFsY29sbSwgYW5kIENsZXZlIEIuIE1vbGVy LgolIAolIG9uIHBhZ2UgMTMzCiUgCiUgV3JpdHRlbiBieToKJSAtLSAKJSBK b2huIEwuIFdlYXRoZXJ3YXggICAgICAgICAgICAgICAgMjAwNS0xMC0yOQol IAolIGVtYWlsOiB3YXhAYWx1bS5taXQuZWR1CiUgCiUgUGxlYXNlIHNlbmQg Y29tbWVudHMgYW5kIGVzcGVjaWFsbHkgYnVnIHJlcG9ydHMgdG8gdGhlCiUg YWJvdmUgZW1haWwgYWRkcmVzcy4KJSAKJS0tLS0tCgphbHBoYSA9IHBpLzQ7 IAplY2MgPSAwLjI1OyAKeF8wID0gWyAxLWVjYzsgMDsgMDsgYWxwaGEqc3Fy dCggKDErZWNjKS8oMS1lY2MpICkgXTsgCgp5b3V0ID0gcmtmNDVnKCAib3Ji aXQiLCB4XzAsIDEyLjAgKTsgCmZvcm1hdCBsb25nOyAKeW91dCgxOjIsOiku Jwpmb3JtYXQgc2hvcnQ7IAoK ------=_NextPart_000_41f3_6a1_7092--