|
From: Roland L. <rol...@go...> - 2008-01-02 10:24:27
Attachments:
ratehelpers.cpp
|
LyogLSotIG1vZGU6IGMrKzsgdGFiLXdpZHRoOiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMt YmFzaWMtb2Zmc2V0OiA0IC0qLSAqLwoKLyoKIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAw NyBTdGF0UHJvIEl0YWxpYSBzcmwKCiBUaGlzIGZpbGUgaXMgcGFydCBvZiBRdWFudExpYiwgYSBm cmVlLXNvZnR3YXJlL29wZW4tc291cmNlIGxpYnJhcnkKIGZvciBmaW5hbmNpYWwgcXVhbnRpdGF0 aXZlIGFuYWx5c3RzIGFuZCBkZXZlbG9wZXJzIC0gaHR0cDovL3F1YW50bGliLm9yZy8KCiBRdWFu dExpYiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5IGl0CiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFF1YW50TGliIGxpY2Vuc2UuICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYQogY29weSBvZiB0aGUgbGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbTsgaWYgbm90LCBwbGVhc2UgZW1haWwKIDxxdWFudGxpYi1kZXZAbGlzdHMuc2YubmV0 Pi4gVGhlIGxpY2Vuc2UgaXMgYWxzbyBhdmFpbGFibGUgb25saW5lIGF0CiA8aHR0cDovL3F1YW50 bGliLm9yZy9saWNlbnNlLnNodG1sPi4KCiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTCiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIGxpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKi8KCi8vIFJMIAojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxx bC91dGlsaXRpZXMvZGF0YXBhcnNlcnMuaHBwPgojaW5jbHVkZSA8cWwvdGltZS9jYWxlbmRhcnMv am9pbnRjYWxlbmRhci5ocHA+Ci8vLyBSTAoKI2luY2x1ZGUgInBpZWNld2lzZXlpZWxkY3VydmUu aHBwIgojaW5jbHVkZSAidXRpbGl0aWVzLmhwcCIKI2luY2x1ZGUgPHFsL3Rlcm1zdHJ1Y3R1cmVz L3lpZWxkL3BpZWNld2lzZXlpZWxkY3VydmUuaHBwPgojaW5jbHVkZSA8cWwvdGVybXN0cnVjdHVy ZXMveWllbGQvcmF0ZWhlbHBlcnMuaHBwPgojaW5jbHVkZSA8cWwvdGVybXN0cnVjdHVyZXMveWll bGQvYm9uZGhlbHBlcnMuaHBwPgojaW5jbHVkZSA8cWwvdGVybXN0cnVjdHVyZXMveWllbGQvZmxh dGZvcndhcmQuaHBwPgojaW5jbHVkZSA8cWwvdGltZS9jYWxlbmRhcnMvdGFyZ2V0LmhwcD4KI2lu Y2x1ZGUgPHFsL3RpbWUvZGF5Y291bnRlcnMvYWN0dWFsMzYwLmhwcD4KI2luY2x1ZGUgPHFsL3Rp bWUvZGF5Y291bnRlcnMvYWN0dWFsYWN0dWFsLmhwcD4KI2luY2x1ZGUgPHFsL3RpbWUvZGF5Y291 bnRlcnMvdGhpcnR5MzYwLmhwcD4KI2luY2x1ZGUgPHFsL2luZGV4ZXMvaWJvci9ldXJpYm9yLmhw cD4KI2luY2x1ZGUgPHFsL2luZGV4ZXMvaWJvci91c2RsaWJvci5ocHA+CiNpbmNsdWRlIDxxbC9p bmRleGVzL2JtYWluZGV4LmhwcD4KI2luY2x1ZGUgPHFsL2luZGV4ZXMvaW5kZXhtYW5hZ2VyLmhw cD4KI2luY2x1ZGUgPHFsL2luc3RydW1lbnRzL2ZvcndhcmRyYXRlYWdyZWVtZW50LmhwcD4KI2lu Y2x1ZGUgPHFsL2luc3RydW1lbnRzL21ha2V2YW5pbGxhc3dhcC5ocHA+CiNpbmNsdWRlIDxxbC9t YXRoL2ludGVycG9sYXRpb25zL2xpbmVhcmludGVycG9sYXRpb24uaHBwPgojaW5jbHVkZSA8cWwv bWF0aC9pbnRlcnBvbGF0aW9ucy9sb2dpbnRlcnBvbGF0aW9uLmhwcD4KI2luY2x1ZGUgPHFsL21h dGgvaW50ZXJwb2xhdGlvbnMvYmFja3dhcmRmbGF0aW50ZXJwb2xhdGlvbi5ocHA+CiNpbmNsdWRl IDxxbC9tYXRoL2ludGVycG9sYXRpb25zL2N1Ymljc3BsaW5lLmhwcD4KI2luY2x1ZGUgPHFsL3F1 b3Rlcy9zaW1wbGVxdW90ZS5ocHA+CiNpbmNsdWRlIDxxbC91dGlsaXRpZXMvZGF0YWZvcm1hdHRl cnMuaHBwPgojaW5jbHVkZSA8cWwvcHJpY2luZ2VuZ2luZXMvYm9uZC9kaXNjb3VudGluZ2JvbmRl bmdpbmUuaHBwPgojaW5jbHVkZSA8cWwvcHJpY2luZ2VuZ2luZXMvc3dhcC9kaXNjb3VudGluZ3N3 YXBlbmdpbmUuaHBwPgoKdXNpbmcgbmFtZXNwYWNlIFF1YW50TGliOwp1c2luZyBuYW1lc3BhY2Ug Ym9vc3Q6OnVuaXRfdGVzdF9mcmFtZXdvcms7CgpRTF9CRUdJTl9URVNUX0xPQ0FMUyhQaWVjZXdp c2VZaWVsZEN1cnZlVGVzdCkKCnN0cnVjdCBEYXR1bSB7CiAgICBJbnRlZ2VyIG47CiAgICBUaW1l VW5pdCB1bml0czsKICAgIFJhdGUgcmF0ZTsKfTsKCnN0cnVjdCBCb25kRGF0dW0gewogICAgSW50 ZWdlciBuOwogICAgVGltZVVuaXQgdW5pdHM7CiAgICBJbnRlZ2VyIGxlbmd0aDsKICAgIEZyZXF1 ZW5jeSBmcmVxdWVuY3k7CiAgICBSYXRlIGNvdXBvbjsKICAgIFJlYWwgcHJpY2U7Cn07CgpEYXR1 bSBkZXBvc2l0RGF0YVtdID0gewogICAgeyAxLCBXZWVrcywgIDQuNTU5IH0sCiAgICB7IDEsIE1v bnRocywgNC41ODEgfSwKICAgIHsgMiwgTW9udGhzLCA0LjU3MyB9LAogICAgeyAzLCBNb250aHMs IDQuNTU3IH0sCiAgICB7IDYsIE1vbnRocywgNC40OTYgfSwKICAgIHsgOSwgTW9udGhzLCA0LjQ5 MCB9Cn07CgpEYXR1bSBmcmFEYXRhW10gPSB7CiAgICB7IDEsIE1vbnRocywgNC41ODEgfSwKICAg IHsgMiwgTW9udGhzLCA0LjU3MyB9LAogICAgeyAzLCBNb250aHMsIDQuNTU3IH0sCiAgICB7IDYs IE1vbnRocywgNC40OTYgfSwKICAgIHsgOSwgTW9udGhzLCA0LjQ5MCB9Cn07CgpEYXR1bSBzd2Fw RGF0YVtdID0gewogICAgeyAgMSwgWWVhcnMsIDQuNTQgfSwKICAgIHsgIDIsIFllYXJzLCA0LjYz IH0sCiAgICB7ICAzLCBZZWFycywgNC43NSB9LAogICAgeyAgNCwgWWVhcnMsIDQuODYgfSwKICAg IHsgIDUsIFllYXJzLCA0Ljk5IH0sCiAgICB7ICA2LCBZZWFycywgNS4xMSB9LAogICAgeyAgNywg WWVhcnMsIDUuMjMgfSwKICAgIHsgIDgsIFllYXJzLCA1LjMzIH0sCiAgICB7ICA5LCBZZWFycywg NS40MSB9LAogICAgeyAxMCwgWWVhcnMsIDUuNDcgfSwKICAgIHsgMTIsIFllYXJzLCA1LjYwIH0s CiAgICB7IDE1LCBZZWFycywgNS43NSB9LAogICAgeyAyMCwgWWVhcnMsIDUuODkgfSwKICAgIHsg MjUsIFllYXJzLCA1Ljk1IH0sCiAgICB7IDMwLCBZZWFycywgNS45NiB9Cn07CgpCb25kRGF0dW0g Ym9uZERhdGFbXSA9IHsKICAgIHsgIDYsIE1vbnRocywgNSwgU2VtaWFubnVhbCwgNC43NSwgMTAx LjMyMCB9LAogICAgeyAgMSwgWWVhcnMsICAzLCBTZW1pYW5udWFsLCAyLjc1LCAxMDAuNTkwIH0s CiAgICB7ICAyLCBZZWFycywgIDUsIFNlbWlhbm51YWwsIDUuMDAsIDEwNS42NTAgfSwKICAgIHsg IDUsIFllYXJzLCAxMSwgU2VtaWFubnVhbCwgNS41MCwgMTEzLjYxMCB9LAogICAgeyAxMCwgWWVh cnMsIDExLCBTZW1pYW5udWFsLCAzLjc1LCAxMDQuMDcwIH0KfTsKCkRhdHVtIGJtYURhdGFbXSA9 IHsKICAgIHsgIDEsIFllYXJzLCA2Ny41NiB9LAogICAgeyAgMiwgWWVhcnMsIDY4LjAwIH0sCiAg ICB7ICAzLCBZZWFycywgNjguMjUgfSwKICAgIHsgIDQsIFllYXJzLCA2OC41MCB9LAogICAgeyAg NSwgWWVhcnMsIDY4LjgxIH0sCiAgICB7ICA3LCBZZWFycywgNjkuNTAgfSwKICAgIHsgMTAsIFll YXJzLCA3MC40NCB9LAogICAgeyAxNSwgWWVhcnMsIDcxLjY5IH0sCiAgICB7IDIwLCBZZWFycywg NzIuNjkgfSwKICAgIHsgMzAsIFllYXJzLCA3My44MSB9Cn07CgoKLy8gdGVzdC1nbG9iYWwgdmFy aWFibGVzCgpDYWxlbmRhciBjYWxlbmRhcjsKTmF0dXJhbCBzZXR0bGVtZW50RGF5czsKRGF0ZSB0 b2RheSwgc2V0dGxlbWVudDsKQnVzaW5lc3NEYXlDb252ZW50aW9uIGZpeGVkTGVnQ29udmVudGlv bjsKRnJlcXVlbmN5IGZpeGVkTGVnRnJlcXVlbmN5OwpEYXlDb3VudGVyIGZpeGVkTGVnRGF5Q291 bnRlcjsKTmF0dXJhbCBib25kU2V0dGxlbWVudERheXM7CkRheUNvdW50ZXIgYm9uZERheUNvdW50 ZXI7CkJ1c2luZXNzRGF5Q29udmVudGlvbiBib25kQ29udmVudGlvbjsKUmVhbCBib25kUmVkZW1w dGlvbjsKRnJlcXVlbmN5IGJtYUZyZXF1ZW5jeTsKQnVzaW5lc3NEYXlDb252ZW50aW9uIGJtYUNv bnZlbnRpb247CkRheUNvdW50ZXIgYm1hRGF5Q291bnRlcjsKClNpemUgZGVwb3NpdHMsIGZyYXMs IHN3YXBzLCBib25kcywgYm1hczsKc3RkOjp2ZWN0b3I8Ym9vc3Q6OnNoYXJlZF9wdHI8U2ltcGxl UXVvdGU+ID4gcmF0ZXMsIGZyYVJhdGVzLCBwcmljZXMsIGZyYWN0aW9uczsKc3RkOjp2ZWN0b3I8 Ym9vc3Q6OnNoYXJlZF9wdHI8UmF0ZUhlbHBlcj4gPiBpbnN0cnVtZW50cywgZnJhSGVscGVycywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib25kSGVscGVycywg Ym1hSGVscGVyczsKc3RkOjp2ZWN0b3I8U2NoZWR1bGU+IHNjaGVkdWxlczsKYm9vc3Q6OnNoYXJl ZF9wdHI8WWllbGRUZXJtU3RydWN0dXJlPiB0ZXJtU3RydWN0dXJlOwoKdm9pZCBzZXR1cCgpIHsK CiAgICAvLyBkYXRhCiAgICBjYWxlbmRhciA9IFRBUkdFVCgpOwogICAgc2V0dGxlbWVudERheXMg PSAyOwoKICAgIC8vIFJMCiAgICAvL3RvZGF5ID0gY2FsZW5kYXIuYWRqdXN0KERhdGU6OnRvZGF5 c0RhdGUoKSk7CiAgICBpZiAoZ2V0ZW52KCJUT0RBWSIpKQogICAgICAgIHRvZGF5ID0gY2FsZW5k YXIuYWRqdXN0KERhdGVQYXJzZXI6OnBhcnNlSVNPKGdldGVudigiVE9EQVkiKSkpOwogICAgZWxz ZQogICAgICAgIHRvZGF5ID0gY2FsZW5kYXIuYWRqdXN0KERhdGU6OnRvZGF5c0RhdGUoKSk7CiAg ICAvLy8gUkwKCiAgICBTZXR0aW5nczo6aW5zdGFuY2UoKS5ldmFsdWF0aW9uRGF0ZSgpID0gdG9k YXk7CiAgICBzZXR0bGVtZW50ID0gY2FsZW5kYXIuYWR2YW5jZSh0b2RheSxzZXR0bGVtZW50RGF5 cyxEYXlzKTsKICAgIGZpeGVkTGVnQ29udmVudGlvbiA9IFVuYWRqdXN0ZWQ7CiAgICBmaXhlZExl Z0ZyZXF1ZW5jeSA9IEFubnVhbDsKICAgIGZpeGVkTGVnRGF5Q291bnRlciA9IFRoaXJ0eTM2MCgp OwogICAgYm9uZFNldHRsZW1lbnREYXlzID0gMzsKICAgIGJvbmREYXlDb3VudGVyID0gQWN0dWFs QWN0dWFsKCk7CiAgICBib25kQ29udmVudGlvbiA9IEZvbGxvd2luZzsKICAgIGJvbmRSZWRlbXB0 aW9uID0gMTAwLjA7CiAgICBibWFGcmVxdWVuY3kgPSBRdWFydGVybHk7CiAgICBibWFDb252ZW50 aW9uID0gRm9sbG93aW5nOwogICAgYm1hRGF5Q291bnRlciA9IEFjdHVhbEFjdHVhbCgpOwoKICAg IGRlcG9zaXRzID0gTEVOR1RIKGRlcG9zaXREYXRhKTsKICAgIGZyYXMgPSBMRU5HVEgoZnJhRGF0 YSk7CiAgICBzd2FwcyA9IExFTkdUSChzd2FwRGF0YSk7CiAgICBib25kcyA9IExFTkdUSChib25k RGF0YSk7CiAgICBibWFzID0gTEVOR1RIKGJtYURhdGEpOwoKICAgIC8vIG1hcmtldCBlbGVtZW50 cwogICAgcmF0ZXMgPSBzdGQ6OnZlY3Rvcjxib29zdDo6c2hhcmVkX3B0cjxTaW1wbGVRdW90ZT4g PihkZXBvc2l0cytzd2Fwcyk7CiAgICBmcmFSYXRlcyA9IHN0ZDo6dmVjdG9yPGJvb3N0OjpzaGFy ZWRfcHRyPFNpbXBsZVF1b3RlPiA+KGZyYXMpOwogICAgcHJpY2VzID0gc3RkOjp2ZWN0b3I8Ym9v c3Q6OnNoYXJlZF9wdHI8U2ltcGxlUXVvdGU+ID4oYm9uZHMpOwogICAgZnJhY3Rpb25zID0gc3Rk Ojp2ZWN0b3I8Ym9vc3Q6OnNoYXJlZF9wdHI8U2ltcGxlUXVvdGU+ID4oYm1hcyk7CiAgICBmb3Ig KFNpemUgaT0wOyBpPGRlcG9zaXRzOyBpKyspIHsKICAgICAgICByYXRlc1tpXSA9IGJvb3N0Ojpz aGFyZWRfcHRyPFNpbXBsZVF1b3RlPigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbmV3IFNpbXBsZVF1b3RlKGRlcG9zaXREYXRhW2ldLnJhdGUvMTAwKSk7CiAgICB9CiAgICBm b3IgKFNpemUgaT0wOyBpPHN3YXBzOyBpKyspIHsKICAgICAgICByYXRlc1tpK2RlcG9zaXRzXSA9 IGJvb3N0OjpzaGFyZWRfcHRyPFNpbXBsZVF1b3RlPigKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbmV3IFNpbXBsZVF1b3RlKHN3YXBEYXRhW2ldLnJhdGUvMTAwKSk7CiAg ICB9CiAgICBmb3IgKFNpemUgaT0wOyBpPGZyYXM7IGkrKykgewogICAgICAgIGZyYVJhdGVzW2ld ID0gYm9vc3Q6OnNoYXJlZF9wdHI8U2ltcGxlUXVvdGU+KAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVF1b3RlKGZyYURhdGFbaV0ucmF0ZS8xMDApKTsK ICAgIH0KICAgIGZvciAoU2l6ZSBpPTA7IGk8Ym9uZHM7IGkrKykgewogICAgICAgIHByaWNlc1tp XSA9IGJvb3N0OjpzaGFyZWRfcHRyPFNpbXBsZVF1b3RlPigKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVF1b3RlKGJvbmREYXRhW2ldLnByaWNlKSk7 CiAgICB9CiAgICBmb3IgKFNpemUgaT0wOyBpPGJtYXM7IGkrKykgewogICAgICAgIGZyYWN0aW9u c1tpXSA9IGJvb3N0OjpzaGFyZWRfcHRyPFNpbXBsZVF1b3RlPigKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVRdW90ZShibWFEYXRhW2ldLnJhdGUvMTAw KSk7CiAgICB9CgogICAgLy8gcmF0ZSBoZWxwZXJzCiAgICBpbnN0cnVtZW50cyA9IHN0ZDo6dmVj dG9yPGJvb3N0OjpzaGFyZWRfcHRyPFJhdGVIZWxwZXI+ID4oZGVwb3NpdHMrc3dhcHMpOwogICAg ZnJhSGVscGVycyA9IHN0ZDo6dmVjdG9yPGJvb3N0OjpzaGFyZWRfcHRyPFJhdGVIZWxwZXI+ID4o ZnJhcyk7CiAgICBib25kSGVscGVycyA9IHN0ZDo6dmVjdG9yPGJvb3N0OjpzaGFyZWRfcHRyPFJh dGVIZWxwZXI+ID4oYm9uZHMpOwogICAgc2NoZWR1bGVzID0gc3RkOjp2ZWN0b3I8U2NoZWR1bGU+ KGJvbmRzKTsKICAgIGJtYUhlbHBlcnMgPSBzdGQ6OnZlY3Rvcjxib29zdDo6c2hhcmVkX3B0cjxS YXRlSGVscGVyPiA+KGJtYXMpOwoKICAgIGJvb3N0OjpzaGFyZWRfcHRyPElib3JJbmRleD4gZXVy aWJvcjZtKG5ldyBFdXJpYm9yNk0pOwogICAgZm9yIChTaXplIGk9MDsgaTxkZXBvc2l0czsgaSsr KSB7CiAgICAgICAgSGFuZGxlPFF1b3RlPiByKHJhdGVzW2ldKTsKICAgICAgICBpbnN0cnVtZW50 c1tpXSA9IGJvb3N0OjpzaGFyZWRfcHRyPFJhdGVIZWxwZXI+KAogICAgICAgICAgICAgIG5ldyBE ZXBvc2l0UmF0ZUhlbHBlcihyLCBkZXBvc2l0RGF0YVtpXS5uKmRlcG9zaXREYXRhW2ldLnVuaXRz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0bGVtZW50RGF5cywgY2Fs ZW5kYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1cmlib3I2bS0+YnVz aW5lc3NEYXlDb252ZW50aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGV1cmlib3I2bS0+ZW5kT2ZNb250aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBldXJpYm9yNm0tPmZpeGluZ0RheXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZXVyaWJvcjZtLT5kYXlDb3VudGVyKCkpKTsKICAgIH0KICAgIGZvciAoU2l6ZSBp PTA7IGk8c3dhcHM7IGkrKykgewogICAgICAgIEhhbmRsZTxRdW90ZT4gcihyYXRlc1tpK2RlcG9z aXRzXSk7CiAgICAgICAgaW5zdHJ1bWVudHNbaStkZXBvc2l0c10gPSBib29zdDo6c2hhcmVkX3B0 cjxSYXRlSGVscGVyPihuZXcKICAgICAgICAgICAgU3dhcFJhdGVIZWxwZXIociwgc3dhcERhdGFb aV0ubipzd2FwRGF0YVtpXS51bml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5k YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkTGVnRnJlcXVlbmN5LCBmaXhlZExl Z0NvbnZlbnRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkTGVnRGF5Q291bnRl ciwgZXVyaWJvcjZtKSk7CiAgICB9CgogICAgRXVyaWJvcjNNIGV1cmlib3IzbTsKICAgIGZvciAo U2l6ZSBpPTA7IGk8ZnJhczsgaSsrKSB7CiAgICAgICAgSGFuZGxlPFF1b3RlPiByKGZyYVJhdGVz W2ldKTsKICAgICAgICBmcmFIZWxwZXJzW2ldID0gYm9vc3Q6OnNoYXJlZF9wdHI8UmF0ZUhlbHBl cj4obmV3CiAgICAgICAgICAgIEZyYVJhdGVIZWxwZXIociwgZnJhRGF0YVtpXS5uLCBmcmFEYXRh W2ldLm4gKyAzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1cmlib3IzbS5maXhp bmdEYXlzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVyaWJvcjNtLmZpeGlu Z0NhbGVuZGFyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVyaWJvcjNtLmJ1 c2luZXNzRGF5Q29udmVudGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1 cmlib3IzbS5lbmRPZk1vbnRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVy aWJvcjNtLmZpeGluZ0RheXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldXJp Ym9yM20uZGF5Q291bnRlcigpKSk7CiAgICB9CgogICAgZm9yIChTaXplIGk9MDsgaTxib25kczsg aSsrKSB7CiAgICAgICAgSGFuZGxlPFF1b3RlPiBwKHByaWNlc1tpXSk7CiAgICAgICAgRGF0ZSBt YXR1cml0eSA9CiAgICAgICAgICAgIGNhbGVuZGFyLmFkdmFuY2UodG9kYXksIGJvbmREYXRhW2ld Lm4sIGJvbmREYXRhW2ldLnVuaXRzKTsKICAgICAgICBEYXRlIGlzc3VlID0gY2FsZW5kYXIuYWR2 YW5jZShtYXR1cml0eSwgLWJvbmREYXRhW2ldLmxlbmd0aCwgWWVhcnMpOwogICAgICAgIHN0ZDo6 dmVjdG9yPFJhdGU+IGNvdXBvbnMoMSwgYm9uZERhdGFbaV0uY291cG9uLzEwMC4wKTsKICAgICAg ICBzY2hlZHVsZXNbaV0gPSBTY2hlZHVsZShpc3N1ZSwgbWF0dXJpdHksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUGVyaW9kKGJvbmREYXRhW2ldLmZyZXF1ZW5jeSksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYm9uZENvbnZlbnRpb24sIGJvbmRDb252ZW50aW9uLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERhdGVHZW5lcmF0aW9uOjpCYWNrd2FyZCwgZmFsc2UpOwogICAgICAg IGJvbmRIZWxwZXJzW2ldID0gYm9vc3Q6OnNoYXJlZF9wdHI8UmF0ZUhlbHBlcj4obmV3CiAgICAg ICAgICAgIEZpeGVkUmF0ZUJvbmRIZWxwZXIocCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJvbmRTZXR0bGVtZW50RGF5cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNjaGVkdWxlc1tpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXBv bnMsIGJvbmREYXlDb3VudGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9u ZENvbnZlbnRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib25kUmVkZW1w dGlvbiwgaXNzdWUpKTsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEk+CnZvaWQg dGVzdEN1cnZlQ29uc2lzdGVuY3koY29uc3QgVCYsIGNvbnN0IEkmIGludGVycG9sYXRvcikgewoK ICAgIHRlcm1TdHJ1Y3R1cmUgPSBib29zdDo6c2hhcmVkX3B0cjxZaWVsZFRlcm1TdHJ1Y3R1cmU+ KAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQaWVjZXdpc2VZaWVsZEN1cnZlPFQsST4o c2V0dGxlbWVudCxpbnN0cnVtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFjdHVhbDM2MCgpLCAxLjBlLTEyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdG9yKSk7 CgogICAgUmVsaW5rYWJsZUhhbmRsZTxZaWVsZFRlcm1TdHJ1Y3R1cmU+IGN1cnZlSGFuZGxlOwog ICAgY3VydmVIYW5kbGUubGlua1RvKHRlcm1TdHJ1Y3R1cmUpOwoKICAgIC8vIGNoZWNrIGRlcG9z aXRzCiAgICBmb3IgKFNpemUgaT0wOyBpPGRlcG9zaXRzOyBpKyspIHsKICAgICAgICBFdXJpYm9y IGluZGV4KGRlcG9zaXREYXRhW2ldLm4qZGVwb3NpdERhdGFbaV0udW5pdHMsY3VydmVIYW5kbGUp OwogICAgICAgIFJhdGUgZXhwZWN0ZWRSYXRlICA9IGRlcG9zaXREYXRhW2ldLnJhdGUvMTAwLAog ICAgICAgICAgICAgZXN0aW1hdGVkUmF0ZSA9IGluZGV4LmZpeGluZyh0b2RheSk7CiAgICAgICAg aWYgKHN0ZDo6ZmFicyhleHBlY3RlZFJhdGUtZXN0aW1hdGVkUmF0ZSkgPiAxLjBlLTkpIHsKICAg ICAgICAgICAgQk9PU1RfRVJST1IoCiAgICAgICAgICAgICAgICAgICAgZGVwb3NpdERhdGFbaV0u biA8PCAiICIKICAgICAgICAgICAgICAgICAgICA8PCAoZGVwb3NpdERhdGFbaV0udW5pdHMgPT0g V2Vla3MgPyAid2VlayhzKSIgOiAibW9udGgocykiKQogICAgICAgICAgICAgICAgICAgIDw8ICIg ZGVwb3NpdDoiCiAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjpzZXRwcmVjaXNpb24oOCkKICAg ICAgICAgICAgICAgICAgICA8PCAiXG4gICAgZXN0aW1hdGVkIHJhdGU6ICIgPDwgaW86OnJhdGUo ZXN0aW1hdGVkUmF0ZSkKICAgICAgICAgICAgICAgICAgICA8PCAiXG4gICAgZXhwZWN0ZWQgcmF0 ZTogICIgPDwgaW86OnJhdGUoZXhwZWN0ZWRSYXRlKSk7CiAgICAgICAgfQogICAgfQoKICAgIC8v IGNoZWNrIHN3YXBzCiAgICBib29zdDo6c2hhcmVkX3B0cjxJYm9ySW5kZXg+IGV1cmlib3I2bShu ZXcgRXVyaWJvcjZNKGN1cnZlSGFuZGxlKSk7CiAgICBmb3IgKFNpemUgaT0wOyBpPHN3YXBzOyBp KyspIHsKICAgICAgICBQZXJpb2QgdGVub3IgPSBzd2FwRGF0YVtpXS5uKnN3YXBEYXRhW2ldLnVu aXRzOwoKICAgICAgICBWYW5pbGxhU3dhcCBzd2FwID0gTWFrZVZhbmlsbGFTd2FwKHRlbm9yLCBl dXJpYm9yNm0sIDAuMCkKICAgICAgICAgICAgLndpdGhFZmZlY3RpdmVEYXRlKHNldHRsZW1lbnQp CiAgICAgICAgICAgIC53aXRoRml4ZWRMZWdEYXlDb3VudChmaXhlZExlZ0RheUNvdW50ZXIpCiAg ICAgICAgICAgIC53aXRoRml4ZWRMZWdUZW5vcihQZXJpb2QoZml4ZWRMZWdGcmVxdWVuY3kpKQog ICAgICAgICAgICAud2l0aEZpeGVkTGVnQ29udmVudGlvbihmaXhlZExlZ0NvbnZlbnRpb24pCiAg ICAgICAgICAgIC53aXRoRml4ZWRMZWdUZXJtaW5hdGlvbkRhdGVDb252ZW50aW9uKGZpeGVkTGVn Q29udmVudGlvbik7CgogICAgICAgIFJhdGUgZXhwZWN0ZWRSYXRlID0gc3dhcERhdGFbaV0ucmF0 ZS8xMDAsCiAgICAgICAgICAgICBlc3RpbWF0ZWRSYXRlID0gc3dhcC5mYWlyUmF0ZSgpOwogICAg ICAgIFJlYWwgdG9sZXJhbmNlID0gMS4wZS05OwogICAgICAgIFNwcmVhZCBlcnJvciA9IHN0ZDo6 ZmFicyhleHBlY3RlZFJhdGUtZXN0aW1hdGVkUmF0ZSk7CiAgICAgICAgaWYgKGVycm9yID4gdG9s ZXJhbmNlKSB7CiAgICAgICAgICAgIEJPT1NUX0VSUk9SKHN3YXBEYXRhW2ldLm4gPDwgIiB5ZWFy KHMpIHN3YXA6XG4iCiAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjpzZXRwcmVjaXNpb24oOCkK ICAgICAgICAgICAgICAgICAgICA8PCAiXG4gZXN0aW1hdGVkIHJhdGU6ICIgPDwgaW86OnJhdGUo ZXN0aW1hdGVkUmF0ZSkKICAgICAgICAgICAgICAgICAgICA8PCAiXG4gZXhwZWN0ZWQgcmF0ZTog ICIgPDwgaW86OnJhdGUoZXhwZWN0ZWRSYXRlKQogICAgICAgICAgICAgICAgICAgIDw8ICJcbiBl cnJvcjogICAgICAgICAgIiA8PCBpbzo6cmF0ZShlcnJvcikKICAgICAgICAgICAgICAgICAgICA8 PCAiXG4gdG9sZXJhbmNlOiAgICAgICIgPDwgaW86OnJhdGUodG9sZXJhbmNlKSk7CiAgICAgICAg fQogICAgfQoKICAgIC8vIGNoZWNrIGJvbmRzCiAgICB0ZXJtU3RydWN0dXJlID0gYm9vc3Q6OnNo YXJlZF9wdHI8WWllbGRUZXJtU3RydWN0dXJlPigKICAgICAgICAgICAgICAgICAgICAgICAgICBu ZXcgUGllY2V3aXNlWWllbGRDdXJ2ZTxULEk+KHNldHRsZW1lbnQsYm9uZEhlbHBlcnMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3R1YWwz NjAoKSwgMS4wZS0xMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludGVycG9sYXRvcikpOwogICAgY3VydmVIYW5kbGUubGlua1RvKHRlcm1T dHJ1Y3R1cmUpOwoKICAgIGZvciAoU2l6ZSBpPTA7IGk8Ym9uZHM7IGkrKykgewogICAgICAgIERh dGUgbWF0dXJpdHkgPQogICAgICAgICAgICBjYWxlbmRhci5hZHZhbmNlKHRvZGF5LCBib25kRGF0 YVtpXS5uLCBib25kRGF0YVtpXS51bml0cyk7CiAgICAgICAgRGF0ZSBpc3N1ZSA9IGNhbGVuZGFy LmFkdmFuY2UobWF0dXJpdHksIC1ib25kRGF0YVtpXS5sZW5ndGgsIFllYXJzKTsKICAgICAgICBz dGQ6OnZlY3RvcjxSYXRlPiBjb3Vwb25zKDEsIGJvbmREYXRhW2ldLmNvdXBvbi8xMDAuMCk7Cgog ICAgICAgIEZpeGVkUmF0ZUJvbmQgYm9uZChib25kU2V0dGxlbWVudERheXMsIDEwMC4wLCBzY2hl ZHVsZXNbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXBvbnMsIGJvbmREYXlDb3Vu dGVyLCBib25kQ29udmVudGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9uZFJlZGVt cHRpb24sIGlzc3VlKTsKCiAgICAgICAgYm9vc3Q6OnNoYXJlZF9wdHI8UHJpY2luZ0VuZ2luZT4g Ym9uZEVuZ2luZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGlz Y291bnRpbmdCb25kRW5naW5lKGN1cnZlSGFuZGxlKSk7CiAgICAgICAgYm9uZC5zZXRQcmljaW5n RW5naW5lKGJvbmRFbmdpbmUpOwoKICAgICAgICBSZWFsIGV4cGVjdGVkUHJpY2UgPSBib25kRGF0 YVtpXS5wcmljZSwKICAgICAgICAgICAgIGVzdGltYXRlZFByaWNlID0gYm9uZC5jbGVhblByaWNl KCk7CiAgICAgICAgUmVhbCB0b2xlcmFuY2UgPSAxLjBlLTk7CiAgICAgICAgaWYgKHN0ZDo6ZmFi cyhleHBlY3RlZFByaWNlLWVzdGltYXRlZFByaWNlKSA+IHRvbGVyYW5jZSkgewogICAgICAgICAg ICBCT09TVF9FUlJPUihpbzo6b3JkaW5hbChpKSA8PCAiIGJvbmQ6XG4iCiAgICAgICAgICAgICAg ICAgICAgICAgPDwgc3RkOjpzZXRwcmVjaXNpb24oOCkKICAgICAgICAgICAgICAgICAgICAgICA8 PCAiICAgIGVzdGltYXRlZCBwcmljZTogIgogICAgICAgICAgICAgICAgICAgICAgIDw8IGVzdGlt YXRlZFByaWNlIDw8ICJcbiIKICAgICAgICAgICAgICAgICAgICAgICA8PCAiICAgIGV4cGVjdGVk IHByaWNlOiAgIgogICAgICAgICAgICAgICAgICAgICAgIDw8IGV4cGVjdGVkUHJpY2UpOwogICAg ICAgIH0KICAgIH0KCiAgICAvLyBjaGVjayBGUkEKICAgIHRlcm1TdHJ1Y3R1cmUgPSBib29zdDo6 c2hhcmVkX3B0cjxZaWVsZFRlcm1TdHJ1Y3R1cmU+KAogICAgICAgICAgICAgICAgICAgICAgICAg IG5ldyBQaWVjZXdpc2VZaWVsZEN1cnZlPFQsST4oc2V0dGxlbWVudCxmcmFIZWxwZXJzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0dWFs MzYwKCksIDEuMGUtMTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnRlcnBvbGF0b3IpKTsKICAgIGN1cnZlSGFuZGxlLmxpbmtUbyh0ZXJt U3RydWN0dXJlKTsKCiAgICBib29zdDo6c2hhcmVkX3B0cjxJYm9ySW5kZXg+IGV1cmlib3IzbShu ZXcgRXVyaWJvcjNNKGN1cnZlSGFuZGxlKSk7CiAgICBmb3IgKFNpemUgaT0wOyBpPGZyYXM7IGkr KykgewogICAgICAgIERhdGUgc3RhcnQgPSBjYWxlbmRhci5hZHZhbmNlKHNldHRsZW1lbnQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhRGF0YVtpXS5uLCBmcmFEYXRh W2ldLnVuaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1cmlib3Iz bS0+YnVzaW5lc3NEYXlDb252ZW50aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZXVyaWJvcjNtLT5lbmRPZk1vbnRoKCkpOwogICAgICAgIERhdGUgZW5kID0gY2Fs ZW5kYXIuYWR2YW5jZShzdGFydCwgMywgTW9udGhzLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBldXJpYm9yM20tPmJ1c2luZXNzRGF5Q29udmVudGlvbigpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBldXJpYm9yM20tPmVuZE9mTW9udGgoKSk7CgogICAg ICAgIEZvcndhcmRSYXRlQWdyZWVtZW50IGZyYShzdGFydCwgZW5kLCBQb3NpdGlvbjo6TG9uZywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhRGF0YVtpXS5yYXRlLzEwMCwgMTAw LjAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1cmlib3IzbSwgY3VydmVIYW5k bGUpOwogICAgICAgIFJhdGUgZXhwZWN0ZWRSYXRlID0gZnJhRGF0YVtpXS5yYXRlLzEwMCwKICAg ICAgICAgICAgIGVzdGltYXRlZFJhdGUgPSBmcmEuZm9yd2FyZFJhdGUoKTsKICAgICAgICBSZWFs IHRvbGVyYW5jZSA9IDEuMGUtOTsKICAgICAgICBpZiAoc3RkOjpmYWJzKGV4cGVjdGVkUmF0ZS1l c3RpbWF0ZWRSYXRlKSA+IHRvbGVyYW5jZSkgewogICAgICAgICAgICBCT09TVF9FUlJPUihpbzo6 b3JkaW5hbChpKSA8PCAiIEZSQTpcbiIKICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OnNl dHByZWNpc2lvbig4KQogICAgICAgICAgICAgICAgICAgICAgIDw8ICIgICAgZXN0aW1hdGVkIHJh dGU6ICIKICAgICAgICAgICAgICAgICAgICAgICA8PCBpbzo6cmF0ZShlc3RpbWF0ZWRSYXRlKSA8 PCAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgPDwgIiAgICBleHBlY3RlZCByYXRlOiAgIgog ICAgICAgICAgICAgICAgICAgICAgIDw8IGlvOjpyYXRlKGV4cGVjdGVkUmF0ZSkpOwogICAgICAg IH0KICAgIH0KfQoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBJPgp2b2lkIHRlc3RCTUFDdXJ2 ZUNvbnNpc3RlbmN5KGNvbnN0IFQmLCBjb25zdCBJJiBpbnRlcnBvbGF0b3IpIHsKCiAgICBEYXRl IHRvZGF5QmFja3VwID0gU2V0dGluZ3M6Omluc3RhbmNlKCkuZXZhbHVhdGlvbkRhdGUoKTsKCiAg ICAvKgogICAgICBDYWxlbmRhciBmb3Igc2V0dGxlbWVudCBkYXRlIGNhbGN1bGF0aW9uOgogICAg ICBJZiB0b2RheSA9IDI0LzEyLzA3IGFuZCBzZXR0bGVtZW50IGlzIGNvbXB1dGVkIHVzaW5nIHRo ZSBibWEgaW5kZXggCiAgICAgIGZpeGluZyBjYWxlbmRhciwgc2V0dGxlbWVudCBpcyAyNy8xMi8w NyAoaG9saWRheSAyNS8xMiBvbmx5KS4KICAgICAgVVNEIExpYm9yIHRoZW4gcmVxdWlyZXMgYSBm aXhpbmcgb24gMjEvMTIsIHR3byBidXNpbmVzcyBkYXlzIGJlZm9yZSAKICAgICAgc2V0dGxlbWVu dCBhY2NvcmRpbmcgdG8gVEFSR0VUL0xvbmRvbiBjYWxlbmRhciAoaG9saWRheXMgMjUvMTIgYW5k IDI2LzEyKS4KICAgICAgVG8gYXZvaWQgcGFzdCBmaXhpbmdzLCBJIGFtIHVzaW5nIHRoZSBqb2lu dCBjYWxlbmRhciBoZXJlLiBVc2luZyB0aGUKICAgICAgc2V0dGxlbWVudCBkYXRlIChiYXNlZCBv biBUQVJHRVQpIGFzIGdpdmVuIGluIHNldHVwKCkgaGFzIHRoZSBzYW1lIGVmZmVjdC4KICAgICAg CiAgICAgIEhvd2V2ZXIsIHRoaXMgY2F1c2VzIHRoZSBmdW5ueSBwcm9ibGVtIGJlbG93IChjYXNl IDQpLgogICAgKi8KICAgIENhbGVuZGFyIGNhbCA9IEpvaW50Q2FsZW5kYXIoQk1BSW5kZXgoKS5m aXhpbmdDYWxlbmRhcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0RMaWJv cigzKk1vbnRocykuZml4aW5nQ2FsZW5kYXIoKSk7CgogICAgLyoKICAgICAgR2V0IHRvZGF5J3Mg ZGF0ZSBmcm9tIGVudmlyb25tZW50IHRvIHRlc3QgdmFyaW91cyBkYXRlcwogICAgICovCiAgICBp ZiAoZ2V0ZW52KCJUT0RBWSIpKQogICAgICAgIHRvZGF5ID0gY2FsLmFkanVzdChEYXRlUGFyc2Vy OjpwYXJzZUlTTyhnZXRlbnYoIlRPREFZIikpKTsKICAgIGVsc2UKICAgICAgICB0b2RheSA9IGNh bC5hZGp1c3QoRGF0ZTo6dG9kYXlzRGF0ZSgpKTsKCiAgICBTZXR0aW5nczo6aW5zdGFuY2UoKS5l dmFsdWF0aW9uRGF0ZSgpID0gdG9kYXk7CgogICAgLy8gQk1BIFN3YXAgc2V0dGxlbWVudCBkYXRl CiAgICBEYXRlIGJtYVNldHRsZW1lbnQgPSBjYWwuYWR2YW5jZSh0b2RheSxzZXR0bGVtZW50RGF5 cyxEYXlzKTsKICAgIAogICAgc3RkOjpjb3V0IDw8ICJ0b2RheTogICIgPDwgaW86Omlzb19kYXRl KHRvZGF5KSAKICAgICAgICAgICAgICA8PCAiICgiIDw8IHRvZGF5LndlZWtkYXkoKSA8PCAiKSIg PDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICJzZXR0bGU6ICIgPDwgaW86Omlzb19kYXRl KGJtYVNldHRsZW1lbnQpIAogICAgICAgICAgICAgIDw8ICIgKCIgPDwgYm1hU2V0dGxlbWVudC53 ZWVrZGF5KCkgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKCiAgICBIYW5kbGU8WWllbGRUZXJtU3RydWN0 dXJlPiByaXNrRnJlZUN1cnZlKAogICAgICAgIGJvb3N0OjpzaGFyZWRfcHRyPFlpZWxkVGVybVN0 cnVjdHVyZT4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGbGF0Rm9yd2FyZChibWFT ZXR0bGVtZW50LCAwLjA0LCBBY3R1YWwzNjAoKSkpKTsKCiAgICBib29zdDo6c2hhcmVkX3B0cjxC TUFJbmRleD4gYm1hSW5kZXgobmV3IEJNQUluZGV4KTsKICAgIGJvb3N0OjpzaGFyZWRfcHRyPEli b3JJbmRleD4gbGlib3JJbmRleCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5ldyBVU0RMaWJvcigzKk1vbnRocyxyaXNrRnJlZUN1cnZlKSk7CgogICAgZm9yIChTaXpl IGk9MDsgaTxibWFzOyArK2kpIHsKICAgICAgICBIYW5kbGU8UXVvdGU+IGYoZnJhY3Rpb25zW2ld KTsKICAgICAgICBibWFIZWxwZXJzW2ldID0gYm9vc3Q6OnNoYXJlZF9wdHI8UmF0ZUhlbHBlcj4o CiAgICAgICAgICAgIG5ldyBCTUFTd2FwUmF0ZUhlbHBlcihmLCBibWFEYXRhW2ldLm4qYm1hRGF0 YVtpXS51bml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRsZW1lbnRE YXlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsLCAvLyBzZXR0bGVtZW50 IGRhdGUgY2FsY3VsYXRpb24gb25seQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UGVyaW9kKGJtYUZyZXF1ZW5jeSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi bWFDb252ZW50aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm1hRGF5Q291 bnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJtYUluZGV4LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlib3JJbmRleCkpOwogICAgfQoKICAgIFdlZWtk YXkgdyA9IHRvZGF5LndlZWtkYXkoKTsKICAgIERhdGUgbGFzdFdlZG5lc2RheSA9ICh3ID49IDQp ID8gdG9kYXkgLSAodyAtIDQpIDogdG9kYXkgKyAoNCAtIHcgLSA3KTsKICAgIERhdGUgbGFzdEZp eGluZyA9IGJtYUluZGV4LT5maXhpbmdDYWxlbmRhcigpLmFkanVzdChsYXN0V2VkbmVzZGF5KTsK ICAgIGJtYUluZGV4LT5hZGRGaXhpbmcobGFzdEZpeGluZywgMC4wMyk7CgogICAgLyoKICAgICAg VXNpbmcgc2V0dGxlbWVudCBhcyB0ZXJtc3RydWN0dXJlIHJlZmVyZW5jZSBkYXRlIGZhaWxzIG9u IDI0LzEyLzA3IAogICAgICAoZXJyb3I6IG5lZ2F0aXZlIHRpbWUgZ2l2ZW4sIGVxdWl2YWxlbnQg dG8gb25lIGRheSkKICAgIAogICAgICBQcm9ibGVtOiBTZWUgY2FzZSA0KSBiZWxvdy4KICAgIAog ICAgICBTb2x1dGlvbjogCiAgICAgIFJlZmVyZW5jZSBkYXRlIGNhbm5vdCBhbHdheXMgYmUgc2V0 IHRvIHRoZSBzZXR0bGVtZW50IGRhdGUgKGJ1dCBtb3N0IG9mCiAgICAgIHRoZSB0aW1lIGFzIGNh c2UgNCBpcyBhIHJhcmUgZXhjZXB0aW9uKS4KICAgICAgVGhlIGZvbGxvd2luZyBzaG91bGQgd29y ayBnZW5lcmFsbHk6CiAgICAgICAgIGEpIHJlZmVyZW5jZSBkYXRlID0gbWF4ICh0b2RheSwgZml4 aW5nIHZhbHVlIGRhdGUpLCBvcgogICAgICAgICBiKSByZWZlcmVuY2UgZGF0ZSA9IHRvZGF5CiAg ICAgIE15IHByZWZlcmVuY2UgaXMgYikgdG8ga2VlcCBpdCBzaW1wbGUuCgogICAgICBDYXNlczog ICAKICAgICAgMSkgZml4aW5nIGRhdGUgPCBmaXhpbmcgdmFsdWUgZGF0ZSA8PSB0b2RheSA8IHNl dHRsZW1lbnQgZGF0ZQogICAgICAgICBsb2FkIGxhc3QgcmVsZXZhbnQgZml4aW5nCiAgICAgICAg IHJlZmVyZW5jZSBtYXkgYmUgc2V0dGxlbWVudCBkYXRlIG9yIHRvZGF5CgogICAgICAyKSBmaXhp bmcgZGF0ZSA8IHRvZGF5IDwgZml4aW5nIHZhbHVlIGRhdGUgPD0gc2V0dGxlbWVudCBkYXRlCiAg ICAgICAgIGxvYWQgbGFzdCByZWxldmFudCBmaXhpbmcKICAgICAgICAgcmVmZXJlbmNlIG1heSBi ZSBzZXR0bGVtZW50IGRhdGUgb3IgZml4aW5nIHZhbHVlIGRhdGUgb3IgdG9kYXkKICAgICAgCiAg ICAgIDMpIGZpeGluZyBkYXRlID0gdG9kYXkgPCBmaXhpbmcgdmFsdWUgZGF0ZSA8IHNldHRsZW1l bnQgZGF0ZQogICAgICAgICBhKSBsb2FkIHRvZGF5J3MgZml4aW5nIAogICAgICAgICAgICByZWZl cmVuY2UgPSBzZXR0bGVtZW50IGRhdGUgb3IgZml4aW5nIHZhbHVlIGRhdGUgb3IgdG9kYXkgCiAg ICAgICAgIGIpIGRvIG5vdCBsb2FkIGZpeGluZ3MKICAgICAgICAgICAgcmVmZXJlbmNlID0gZml4 aW5nIHZhbHVlIGRhdGUgb3IgdG9kYXkKCiAgICAgIDQpIHRvZGF5IDwgZml4aW5nIGRhdGUgPCBm aXhpbmcgdmFsdWUgZGF0ZSA8IHNldHRsZW1lbnQgZGF0ZQogICAgICAgICBubyBmaXhpbmcgZGF0 YSBuZWVkZWQKICAgICAgICAgcmVmZXJlbmNlID0gZml4aW5nIHZhbHVlIGRhdGUgb3IgdG9kYXkK CiAgICAgICAgIEV4YW1wbGUsIGNhc2UgNDoKICAgICAgICAgMjQgKE1vbikgdG9kYXkKICAgICAg ICAgMjUgKFR1ZSkgaG9saWRheSAoVVMgY2FsZW5kYXIpCiAgICAgICAgIDI2IChXZWQpIGZpcnN0 IHJlbGV2YW50IEJNQSBmaXhpbmcgZGF0ZQogICAgICAgICAyNyAoVGh1KSBCTUEgZml4aW5nIHZh bHVlIGRhdGUKICAgICAgICAgMjggKEZyaSkgc2V0dGxlbWVudCBkYXRlIChjb21wdXRlZCB1c2lu ZyBqb2ludCBjYWxlbmRhciwgMiBkYXlzKQoKICAgICAqLyAKLy8gICAgIHRlcm1TdHJ1Y3R1cmUg PSBib29zdDo6c2hhcmVkX3B0cjxZaWVsZFRlcm1TdHJ1Y3R1cmU+KAovLyAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5ldyBQaWVjZXdpc2VZaWVsZEN1cnZlPFQsST4oYm1hU2V0dGxlbWVudCwK Ly8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJtYUhlbHBlcnMsCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBY3R1YWwzNjAoKSwgMS4wZS0xMiwKLy8gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRvcikpOwogICAg dGVybVN0cnVjdHVyZSA9IGJvb3N0OjpzaGFyZWRfcHRyPFlpZWxkVGVybVN0cnVjdHVyZT4oCiAg ICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFBpZWNld2lzZVlpZWxkQ3VydmU8VCxJPih0b2Rh eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJtYUhlbHBlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBY3R1YWwzNjAoKSwgMS4wZS0xMiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRvcikpOwoKICAgIFJlbGlu a2FibGVIYW5kbGU8WWllbGRUZXJtU3RydWN0dXJlPiBjdXJ2ZUhhbmRsZTsKICAgIGN1cnZlSGFu ZGxlLmxpbmtUbyh0ZXJtU3RydWN0dXJlKTsKCi8vICAgICBzdGQ6OmNvdXQgPDwgImxpYm9yIGNh bDogIiA8PCBsaWJvckluZGV4LT5maXhpbmdDYWxlbmRhcigpIDw8IHN0ZDo6ZW5kbDsKLy8gICAg IHN0ZDo6Y291dCA8PCAiYm1hIGNhbDogIiA8PCBibWFJbmRleC0+Zml4aW5nQ2FsZW5kYXIoKSA8 PCBzdGQ6OmVuZGw7CiAgICAKICAgIC8vIGNoZWNrIEJNQSBzd2FwcwogICAgRGF0ZSBtaW5TdGFy dExpYm9yID0gRGF0ZTo6bWF4RGF0ZSgpOwogICAgRGF0ZSBtaW5TdGFydEJtYSA9IERhdGU6Om1h eERhdGUoKTsKICAgIGJvb3N0OjpzaGFyZWRfcHRyPEJNQUluZGV4PiBibWEobmV3IEJNQUluZGV4 KGN1cnZlSGFuZGxlKSk7CiAgICBib29zdDo6c2hhcmVkX3B0cjxJYm9ySW5kZXg+IGxpYm9yM20o bmV3IFVTRExpYm9yKDMqTW9udGhzLHJpc2tGcmVlQ3VydmUpKTsKICAgIGZvciAoU2l6ZSBpPTA7 IGk8Ym1hczsgaSsrKSB7CiAgICAgICAgUGVyaW9kIHRlbm9yID0gYm1hRGF0YVtpXS5uKmJtYURh dGFbaV0udW5pdHM7CgogICAgICAgIFNjaGVkdWxlIGJtYVNjaGVkdWxlID0gTWFrZVNjaGVkdWxl KGJtYVNldHRsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYm1hU2V0dGxlbWVudCt0ZW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQZXJpb2QoYm1hRnJlcXVlbmN5KSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBibWEtPmZpeGluZ0NhbGVuZGFyKCksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm1hQ29udmVudGlvbikuYmFja3dhcmRzKCk7 CgogICAgICAgIFNjaGVkdWxlIGxpYm9yU2NoZWR1bGUgPSBNYWtlU2NoZWR1bGUoYm1hU2V0dGxl bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJtYVNl dHRsZW1lbnQrdGVub3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJvcjNtLT50ZW5vcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlib3IzbS0+Zml4aW5nQ2FsZW5kYXIoKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYm9yM20tPmJ1c2luZXNzRGF5Q29udmVudGlv bigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZW5kT2ZNb250aChsaWJvcjNt LT5lbmRPZk1vbnRoKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5iYWNrd2Fy ZHMoKTsKCiAgICAgICAgbWluU3RhcnRMaWJvciA9IHN0ZDo6bWluKG1pblN0YXJ0TGlib3IsIGxp Ym9yU2NoZWR1bGUuZGF0ZXMoKS5mcm9udCgpKTsKICAgICAgICBtaW5TdGFydEJtYSA9IHN0ZDo6 bWluKG1pblN0YXJ0Qm1hLCBibWFTY2hlZHVsZS5kYXRlcygpLmZyb250KCkpOwoKICAgICAgICBC TUFTd2FwIHN3YXAoQk1BU3dhcDo6UGF5ZXIsIDEwMC4wLAogICAgICAgICAgICAgICAgICAgICBs aWJvclNjaGVkdWxlLCAwLjc1LCAwLjAsIGxpYm9yM20sIGxpYm9yM20tPmRheUNvdW50ZXIoKSwK ICAgICAgICAgICAgICAgICAgICAgYm1hU2NoZWR1bGUsIGJtYSwgYm1hRGF5Q291bnRlcik7CiAg ICAgICAgc3dhcC5zZXRQcmljaW5nRW5naW5lKGJvb3N0OjpzaGFyZWRfcHRyPFByaWNpbmdFbmdp bmU+KAogICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGlzY291bnRpbmdTd2FwRW5naW5lKGxp Ym9yM20tPnRlcm1TdHJ1Y3R1cmUoKSkpKTsKCiAgICAgICAgUmVhbCBleHBlY3RlZEZyYWN0aW9u ID0gYm1hRGF0YVtpXS5yYXRlLzEwMCwKICAgICAgICAgICAgIGVzdGltYXRlZEZyYWN0aW9uID0g c3dhcC5mYWlyTGlib3JGcmFjdGlvbigpOwogICAgICAgIFJlYWwgdG9sZXJhbmNlID0gMS4wZS05 OwogICAgICAgIFJlYWwgZXJyb3IgPSBzdGQ6OmZhYnMoZXhwZWN0ZWRGcmFjdGlvbi1lc3RpbWF0 ZWRGcmFjdGlvbik7CiAgICAgICAgaWYgKGVycm9yID4gdG9sZXJhbmNlKSB7CiAgICAgICAgICAg IEJPT1NUX0VSUk9SKGJtYURhdGFbaV0ubiA8PCAiIHllYXIocykgQk1BIHN3YXA6XG4iCiAgICAg ICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6c2V0cHJlY2lzaW9uKDgpCiAgICAgICAgICAgICAg ICAgICAgICAgIDw8ICJcbiBlc3RpbWF0ZWQgbGlib3IgZnJhY3Rpb246ICIgPDwgZXN0aW1hdGVk RnJhY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgPDwgIlxuIGV4cGVjdGVkIGxpYm9yIGZy YWN0aW9uOiAgIiA8PCBleHBlY3RlZEZyYWN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIDw8 ICJcbiBlcnJvcjogICAgICAgICAgIiA8PCBlcnJvcgogICAgICAgICAgICAgICAgICAgICAgICA8 PCAiXG4gdG9sZXJhbmNlOiAgICAgICIgPDwgdG9sZXJhbmNlKTsKICAgICAgICB9CiAgICB9Cgov LyAgICAgc3RkOjpjb3V0IDw8ICJzdGFydEw6ICIgPDwgaW86Omlzb19kYXRlIChtaW5TdGFydExp Ym9yKSA8PCBzdGQ6OmVuZGw7Ci8vICAgICBzdGQ6OmNvdXQgPDwgInN0YXJ0QjogIiA8PCBpbzo6 aXNvX2RhdGUgKG1pblN0YXJ0Qm1hKSA8PCBzdGQ6OmVuZGw7CgogICAgdG9kYXkgPSB0b2RheUJh Y2t1cDsKICAgIFNldHRpbmdzOjppbnN0YW5jZSgpLmV2YWx1YXRpb25EYXRlKCkgPSB0b2RheTsK fQoKUUxfRU5EX1RFU1RfTE9DQUxTKFBpZWNld2lzZVlpZWxkQ3VydmVUZXN0KQoKCnZvaWQgUGll Y2V3aXNlWWllbGRDdXJ2ZV... [truncated message content] |
|
From: Luigi B. <lui...@gm...> - 2008-05-13 15:24:41
|
On Wed, 2008-01-02 at 10:24 +0000, Roland Lichters wrote: > I have also attached a small patch for ratehelpers.cpp to fix another > problem that just appeared on 21/12 (a small discrepancy in the BMA > consistency check). Applied, thanks. Luigi -- Skinner's Constant (or Flannagan's Finagling Factor): That quantity which, when multiplied by, divided by, added to, or subtracted from the answer you got, gives you the answer you should have gotten. |