ZGlmZiAtLWdpdCBhL2JvYXJkL3hhZW5pYXgvbG93bGV2ZWxfaW5pdC5TIGIvYm9hcmQveGFlbmlheC9sb3dsZXZlbF9pbml0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUzZTcxMgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3hhZW5pYXgvbG93bGV2ZWxfaW5pdC5TCkBAIC0wLDAgKzEsNDI0IEBACisgLyoKKyAqIE1vc3Qgb2YgdGhpcyB0YWtlbiBmcm9tIFJlZGJvb3QgaGFsX3BsYXRmb3JtX3NldHVwLmggd2l0aCBjbGVhbnVwCisgKgorICogTk9URTogSSBoYXZlbid0IGNsZWFuIHRoaXMgdXAgY29uc2lkZXJhYmx5LCBqdXN0IGVub3VnaCB0byBnZXQgaXQKKyAqIHJ1bm5pbmcuIFNlZSBoYWxfcGxhdGZvcm1fc2V0dXAuaCBmb3IgdGhlIHNvdXJjZS4gU2VlCisgKiBib2FyZC9jcmFkbGUvbG93bGV2ZWxfaW5pdC5TIGZvciBhbm90aGVyIFBYQTI1MCBzZXR1cCB0aGF0IGlzCisgKiBtdWNoIGNsZWFuZXIuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHZlcnNpb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorCitEUkFNX1NJWkU6ICAubG9uZyAgIENGR19EUkFNX1NJWkUKKworLyogd2FpdCBmb3IgY29wcm9jZXNzb3Igd3JpdGUgY29tcGxldGUgKi8KKwkubWFjcm8gQ1BXQUlUIHJlZworCW1yYyAgcDE1LDAsXHJlZyxjMixjMCwwCisJbW92ICBccmVnLFxyZWcKKwlzdWIgIHBjLHBjLCM0CisJLmVuZG0KKworCisuZ2xvYmwgbG93bGV2ZWxfaW5pdAorbG93bGV2ZWxfaW5pdDoKKworCW1vdgkgcjEwLCBscgorCisJLyogU2V0IHVwIEdQSU8gcGlucyBmaXJzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJbGRyCXIwLD1HUFNSMAorCWxkcglyMSw9Q0ZHX0dQU1IwX1ZBTAorCXN0cglyMSxbcjBdCisKKwlsZHIJcjAsPUdQU1IxCisJbGRyCXIxLD1DRkdfR1BTUjFfVkFMCisJc3RyCXIxLFtyMF0KKworCWxkcglyMCw9R1BTUjIKKwlsZHIJcjEsPUNGR19HUFNSMl9WQUwKKwlzdHIJcjEsW3IwXQorCisJbGRyCXIwLD1HUENSMAorCWxkcglyMSw9Q0ZHX0dQQ1IwX1ZBTAorCXN0cglyMSxbcjBdCisKKwlsZHIJcjAsPUdQQ1IxCisJbGRyCXIxLD1DRkdfR1BDUjFfVkFMCisJc3RyCXIxLFtyMF0KKworCWxkcglyMCw9R1BDUjIKKwlsZHIJcjEsPUNGR19HUENSMl9WQUwKKwlzdHIJcjEsW3IwXQorCisJbGRyCXIwLD1HUERSMAorCWxkcglyMSw9Q0ZHX0dQRFIwX1ZBTAorCXN0cglyMSxbcjBdCisKKwlsZHIJcjAsPUdQRFIxCisJbGRyCXIxLD1DRkdfR1BEUjFfVkFMCisJc3RyCXIxLFtyMF0KKworCWxkcglyMCw9R1BEUjIKKwlsZHIJcjEsPUNGR19HUERSMl9WQUwKKwlzdHIJcjEsW3IwXQorCisJbGRyCXIwLD1HQUZSMF9MCisJbGRyCXIxLD1DRkdfR0FGUjBfTF9WQUwKKwlzdHIJcjEsW3IwXQorCisJbGRyCXIwLD1HQUZSMF9VCisJbGRyCXIxLD1DRkdfR0FGUjBfVV9WQUwKKwlzdHIJcjEsW3IwXQorCisJbGRyCXIwLD1HQUZSMV9MCisJbGRyCXIxLD1DRkdfR0FGUjFfTF9WQUwKKwlzdHIJcjEsW3IwXQorCisJbGRyCXIwLD1HQUZSMV9VCisJbGRyCXIxLD1DRkdfR0FGUjFfVV9WQUwKKwlzdHIJcjEsW3IwXQorCisJbGRyCXIwLD1HQUZSMl9MCisJbGRyCXIxLD1DRkdfR0FGUjJfTF9WQUwKKwlzdHIJcjEsW3IwXQorCisJbGRyCXIwLD1HQUZSMl9VCisJbGRyCXIxLD1DRkdfR0FGUjJfVV9WQUwKKwlzdHIJcjEsW3IwXQorCisJbGRyCXIwLD1QU1NSCQkvKiBlbmFibGUgR1BJTyBwaW5zICovCisJbGRyCXIxLD1DRkdfUFNTUl9WQUwKKwlzdHIJcjEsW3IwXQorCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIEVuYWJsZSBtZW1vcnkgaW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogVGhlIHNlcXVlbmNlIGJlbG93IGlzIGJhc2VkIG9uIHRoZSByZWNvbW1lbmRlZCBpbml0IHN0ZXBzICAgICAgICAqLworCS8qIGRldGFpbGVkIGluIHRoZSBJbnRlbCBQWEEyNTAgT3BlcmF0aW5nIFN5c3RlbXMgRGV2ZWxvcGVycyBHdWlkZSwgKi8KKwkvKiBDaGFwdGVyIDEwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIFN0ZXAgMTogV2FpdCBmb3IgYXQgbGVhc3QgMjAwIG1pY3Jvc2Vkb25kcyB0byBhbGxvdyBpbnRlcm5hbCAgICAgKi8KKwkvKiAgICAgICAgIGNsb2NrcyB0byBzZXR0bGUuIE9ubHkgbmVjZXNzYXJ5IGFmdGVyIGhhcmQgcmVzZXQuLi4gICAgICovCisJLyogICAgICAgICBGSVhNRTogY2FuIGJlIG9wdGltaXplZCBsYXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCWxkcglyMywgPU9TQ1IJCS8qIHJlc2V0IHRoZSBPUyBUaW1lciBDb3VudCB0byB6ZXJvICovCisJbW92CXIyLCAjMAorCXN0cglyMiwgW3IzXQorCWxkcglyNCwgPTB4MzAwCQkvKiByZWFsbHkgMHgyRTEgaXMgYWJvdXQgMjAwdXNlYywgICAqLworCQkJCQkvKiBzbyAweDMwMCBzaG91bGQgYmUgcGxlbnR5ICAgICAgICAqLworMToKKwlsZHIJcjIsIFtyM10KKwljbXAJcjQsIHIyCisJYmd0CTFiCisKK21lbV9pbml0OgorCisJbGRyCXIxLD1NRU1DX0JBU0UJCS8qIGdldCBtZW1vcnkgY29udHJvbGxlciBiYXNlIGFkZHIuICovCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU3RlcCAyYTogSW5pdGlhbGl6ZSBBc3luY2hyb25vdXMgc3RhdGljIG1lbW9yeSBjb250cm9sbGVyICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8qIE1TQyByZWdpc3RlcnM6IHRpbWluZywgYnVzIHdpZHRoLCBtZW0gdHlwZSAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCS8qIE1TQzA6IG5DUygwLDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIgICAgIHIyLD1DRkdfTVNDMF9WQUwKKwlzdHIgICAgIHIyLFtyMSwgI01TQzBfT0ZGU0VUXQorCWxkciAgICAgcjIsW3IxLCAjTVNDMF9PRkZTRVRdCS8qIHJlYWQgYmFjayB0byBlbnN1cmUgZGF0YSBsYXRjaGVzICovCisKKwkvKiBNU0MxOiBuQ1MoMiwzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJbGRyICAgICByMiw9Q0ZHX01TQzFfVkFMCisJc3RyICAgICByMixbcjEsICNNU0MxX09GRlNFVF0KKwlsZHIgICAgIHIyLFtyMSwgI01TQzFfT0ZGU0VUXQorCisJLyogTVNDMjogbkNTKDQsNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWxkciAgICAgcjIsPUNGR19NU0MyX1ZBTAorCXN0ciAgICAgcjIsW3IxLCAjTVNDMl9PRkZTRVRdCisJbGRyICAgICByMixbcjEsICNNU0MyX09GRlNFVF0KKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBTdGVwIDJiOiBJbml0aWFsaXplIENhcmQgSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLyogTUVDUjogTWVtb3J5IEV4cGFuc2lvbiBDYXJkIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWxkciAgICAgcjIsPUNGR19NRUNSX1ZBTAorCXN0ciAgICAgcjIsW3IxLCAjTUVDUl9PRkZTRVRdCisJbGRyCXIyLFtyMSwgI01FQ1JfT0ZGU0VUXQorCisJLyogTUNNRU0wOiBDYXJkIEludGVyZmFjZSBzbG90IDAgdGltaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWxkciAgICAgcjIsPUNGR19NQ01FTTBfVkFMCisJc3RyICAgICByMixbcjEsICNNQ01FTTBfT0ZGU0VUXQorCWxkcglyMixbcjEsICNNQ01FTTBfT0ZGU0VUXQorCisJLyogTUNNRU0xOiBDYXJkIEludGVyZmFjZSBzbG90IDEgdGltaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWxkciAgICAgcjIsPUNGR19NQ01FTTFfVkFMCisJc3RyICAgICByMixbcjEsICNNQ01FTTFfT0ZGU0VUXQorCWxkcglyMixbcjEsICNNQ01FTTFfT0ZGU0VUXQorCisJLyogTUNBVFQwOiBDYXJkIEludGVyZmFjZSBBdHRyaWJ1dGUgU3BhY2UgVGltaW5nLCBzbG90IDAgICAgICAgICAgICAqLworCWxkciAgICAgcjIsPUNGR19NQ0FUVDBfVkFMCisJc3RyICAgICByMixbcjEsICNNQ0FUVDBfT0ZGU0VUXQorCWxkcglyMixbcjEsICNNQ0FUVDBfT0ZGU0VUXQorCisJLyogTUNBVFQxOiBDYXJkIEludGVyZmFjZSBBdHRyaWJ1dGUgU3BhY2UgVGltaW5nLCBzbG90IDEgICAgICAgICAgICAqLworCWxkciAgICAgcjIsPUNGR19NQ0FUVDFfVkFMCisJc3RyICAgICByMixbcjEsICNNQ0FUVDFfT0ZGU0VUXQorCWxkcglyMixbcjEsICNNQ0FUVDFfT0ZGU0VUXQorCisJLyogTUNJTzA6IENhcmQgSW50ZXJmYWNlIEkvTyBTcGFjZSBUaW1pbmcsIHNsb3QgMCAgICAgICAgICAgICAgICAgICAqLworCWxkciAgICAgcjIsPUNGR19NQ0lPMF9WQUwKKwlzdHIgICAgIHIyLFtyMSwgI01DSU8wX09GRlNFVF0KKwlsZHIJcjIsW3IxLCAjTUNJTzBfT0ZGU0VUXQorCisJLyogTUNJTzE6IENhcmQgSW50ZXJmYWNlIEkvTyBTcGFjZSBUaW1pbmcsIHNsb3QgMSAgICAgICAgICAgICAgICAgICAqLworCWxkciAgICAgcjIsPUNGR19NQ0lPMV9WQUwKKwlzdHIgICAgIHIyLFtyMSwgI01DSU8xX09GRlNFVF0KKwlsZHIJcjIsW3IxLCAjTUNJTzFfT0ZGU0VUXQorCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIFN0ZXAgMmM6IFdyaXRlIEZMWUNORkcgIEZJWE1FOiB3aGF0J3MgdGhhdD8/PyAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU3RlcCAyZDogSW5pdGlhbGl6ZSBUaW1pbmcgZm9yIFN5bmMgTWVtb3J5IChTRENMSzApICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCUAgZ2V0IHRoZSBtZHJlZnIgc2V0dGluZ3MKKwlsZHIgICAgIHI0LD1DRkdfTURSRUZSX1ZBTAorCisJQCB3cml0ZSBiYWNrIG1kcmVmcgorCXN0ciAgICAgcjQsW3IxLCAjTURSRUZSX09GRlNFVF0KKwlsZHIgICAgIHI0LFtyMSwgI01EUkVGUl9PRkZTRVRdCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU3RlcCAzOiBJbml0aWFsaXplIFN5bmNocm9ub3VzIFN0YXRpYyBNZW1vcnkgKEZsYXNoL1BlcmlwaGVyYWxzKSAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8qIEluaXRpYWxpemUgU1hDTkZHIHJlZ2lzdGVyLiBBc3NlcnQgdGhlIGVuYWJsZSBiaXRzICAgICAgICAgICAgICAgKi8KKworCS8qIFdyaXRlIFNYTVJTIHRvIGNhdXNlIGFuIE1SUyBjb21tYW5kIHRvIGFsbCBlbmFibGVkIGJhbmtzIG9mICAgICAgKi8KKwkvKiBzeW5jaHJvbm91cyBzdGF0aWMgbWVtb3J5LiBOb3RlIHRoYXQgU1hMQ1IgbmVlZCBub3QgYmUgd3JpdHRlbiAgICovCisJLyogYXQgdGhpcyB0aW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJLyogRklYTUU6IHdlIHVzZSBhc3luYyBtb2RlIGZvciBub3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIFN0ZXAgNDogSW5pdGlhbGl6ZSBTRFJBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKwlAIHNldCBLMVJVTiBmb3IgYmFuayAwCisJQAorCW9yciAgIHI0LCAgcjQsICAjTURSRUZSX0sxUlVOCisKKwlAIHdyaXRlIGJhY2sgbWRyZWZyCisJQAorCXN0ciAgICAgcjQsICBbcjEsICNNRFJFRlJfT0ZGU0VUXQorCWxkciAgICAgcjQsICBbcjEsICNNRFJFRlJfT0ZGU0VUXQorCisJQCBkZWFzc2VydCBTTEZSU0gKKwlACisJYmljICAgICByNCwgIHI0LCAgI01EUkVGUl9TTEZSU0gKKworCUAgd3JpdGUgYmFjayBtZHJlZnIKKwlACisJc3RyICAgICByNCwgIFtyMSwgI01EUkVGUl9PRkZTRVRdCisJbGRyICAgICByNCwgIFtyMSwgI01EUkVGUl9PRkZTRVRdCisKKwlAIGFzc2VydCBFMVBJTgorCUAgaWYgRTBQSU4gaXMgYWxzbyB1c2VkOgkgIyhNRFJFRlJfRTFQSU58TURSRUZSX0UwUElOKQorCW9yciAgICAgcjQsICByNCwgIyhNRFJFRlJfRTFQSU4pCisKKwlAIHdyaXRlIGJhY2sgbWRyZWZyCisJQAorCXN0ciAgICAgcjQsICBbcjEsICNNRFJFRlJfT0ZGU0VUXQorCWxkciAgICAgcjQsICBbcjEsICNNRFJFRlJfT0ZGU0VUXQorCW5vcAorCW5vcAorCisJLyogU3RlcCA0ZDoJCQkJCQkJKi8KKwkvKiBmZXRjaCBwbGF0Zm9ybSB2YWx1ZSBvZiBtZGNuZmcJCQkJKi8KKwlACisJbGRyICAgICByMiwgID1DRkdfTURDTkZHX1ZBTAorCisJQCBkaXNhYmxlIGFsbCBzZHJhbSBiYW5rcworCUAKKwliaWMgICAgIHIyLCAgcjIsICAjKE1EQ05GR19ERTAgfCBNRENORkdfREUxKQorCWJpYyAgICAgcjIsICByMiwgICMoTURDTkZHX0RFMiB8IE1EQ05GR19ERTMpCisKKwlAIHByb2dyYW0gYmFua3MgMC8xIGZvciBidXMgd2lkdGgKKwlACisJYmljICAgcjIsICByMiwgICNNRENORkdfRFdJRDAgICAgICBAMD0zMi1iaXQKKworCUAgd3JpdGUgaW5pdGlhbCB2YWx1ZSBvZiBtZGNuZmcsIHcvbyBlbmFibGluZyBzZHJhbSBiYW5rcworCUAKKwlzdHIgICAgIHIyLCAgW3IxLCAjTURDTkZHX09GRlNFVF0KKworCS8qIFN0ZXAgNGU6IFdhaXQgZm9yIHRoZSBjbG9jayB0byB0aGUgU0RSQU1zIHRvIHN0YWJpbGl6ZSwgICAgICAgICAgKi8KKwkvKiAgICAgICAgICAxMDAuLjIwMCC1c2VjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwlsZHIJcjMsID1PU0NSCQkvKiByZXNldCB0aGUgT1MgVGltZXIgQ291bnQgdG8gemVybyAqLworCW1vdglyMiwgIzAKKwlzdHIJcjIsIFtyM10KKwlsZHIJcjQsID0weDMwMAkJLyogcmVhbGx5IDB4MkUxIGlzIGFib3V0IDIwMHVzZWMsICAgKi8KKwkJCQkJLyogc28gMHgzMDAgc2hvdWxkIGJlIHBsZW50eSAgICAgICAgKi8KKzE6CisJbGRyCXIyLCBbcjNdCisJY21wCXI0LCByMgorCWJndAkxYgorCisKKwkvKiBTdGVwIDRmOiBUcmlnZ2VyIGEgbnVtYmVyICh1c3VhbGx5IDgpIHJlZnJlc2ggY3ljbGVzIGJ5ICAgICAgICAgICovCisJLyogICAgICAgICAgYXR0ZW1wdGluZyBub24tYnVyc3QgcmVhZCBvciB3cml0ZSBhY2Nlc3NlcyB0byBkaXNhYmxlZCAqLworCS8qICAgICAgICAgIFNEUkFNLCBhcyBjb21tb25seSBzcGVjaWZpZWQgaW4gdGhlIHBvd2VyIHVwIHNlcXVlbmNlICAgKi8KKwkvKiAgICAgICAgICBkb2N1bWVudGVkIGluIFNEUkFNIGRhdGEgc2hlZXRzLiBUaGUgYWRkcmVzcyhlcykgdXNlZCAgICovCisJLyogICAgICAgICAgZm9yIHRoaXMgcHVycG9zZSBtdXN0IG5vdCBiZSBjYWNoZWFibGUuICAgICAgICAgICAgICAgICAqLworCisJbGRyCXIzLAk9Q0ZHX0RSQU1fQkFTRQorCXN0cglyMiwJW3IzXQorCXN0cglyMiwJW3IzXQorCXN0cglyMiwJW3IzXQorCXN0cglyMiwJW3IzXQorCXN0cglyMiwJW3IzXQorCXN0cglyMiwJW3IzXQorCXN0cglyMiwJW3IzXQorCXN0cglyMiwJW3IzXQorCXN0cglyMiwJW3IzXQorCisKKwkvKiBTdGVwIDRnOiBXcml0ZSBNRENORkcgd2l0aCBlbmFibGUgYml0cyBhc3NlcnRlZCAgICAgICAgICAgICAgICAgICovCisJLyogZ2V0IG1lbW9yeSBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWxkciAgICAgcjEsICA9TUVNQ19CQVNFCisKKwlAZmV0Y2ggY3VycmVudCBtZGNuZmcgdmFsdWUKKwlACisJbGRyICAgICByMywgIFtyMSwgI01EQ05GR19PRkZTRVRdCisKKwlAZW5hYmxlIHNkcmFtIGJhbmsgMCBpZiBpbnN0YWxsZWQgKG11c3QgZG8gZm9yIGFueSBwb3B1bGF0ZWQgYmFuaykKKwlACisJb3JyICAgICByMywgIHIzLCAgI01EQ05GR19ERTAKKworCUB3cml0ZSBiYWNrIG1kY25mZywgZW5hYmxpbmcgdGhlIHNkcmFtIGJhbmsocykKKwlACisJc3RyICAgICByMywgIFtyMSwgI01EQ05GR19PRkZTRVRdCisKKwkvKiBTdGVwIDRoOiBXcml0ZSBNRE1SUy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwlsZHIgICAgIHIyLAk9Q0ZHX01ETVJTX1ZBTAorCXN0ciAgICAgcjIsCVtyMSwgI01ETVJTX09GRlNFVF0KKworCisJLyogV2UgYXJlIGZpbmlzaGVkIHdpdGggSW50ZWwncyBtZW1vcnkgY29udHJvbGxlciBpbml0aWFsaXNhdGlvbiAgICAqLworCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogRGlzYWJsZSAobWFzaykgYWxsIGludGVycnVwdHMgYXQgaW50ZXJydXB0IGNvbnRyb2xsZXIgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworaW5pdGlycXM6CisJbW92ICAgICByMSwgIzAJCS8qIGNsZWFyIGludC4gbGV2ZWwgcmVnaXN0ZXIgKElSUSwgbm90IEZJUSkgKi8KKwlsZHIgICAgIHIyLCAgPUlDTFIKKwlzdHIgICAgIHIxLCAgW3IyXQorCisJbGRyICAgICByMSwgID1DRkdfSUNNUl9WQUwgLyogbWFzayBhbGwgaW50ZXJydXB0cyBhdCB0aGUgY29udHJvbGxlciAqLworCWxkciAgICAgcjIsICA9SUNNUgorCXN0ciAgICAgcjEsICBbcjJdCisKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBDbG9jayBpbml0aWFsaXNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitpbml0Y2xrczoKKworCS8qIERpc2FibGUgdGhlIHBlcmlwaGVyYWwgY2xvY2tzLCBhbmQgc2V0IHRoZSBjb3JlIGNsb2NrIGZyZXF1ZW5jeSAgKi8KKwkvKiAoaGFyZC1jb2RpbmcgYXQgMzk4LjEyTUh6IGZvciBub3cpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogVHVybiBPZmYgQUxMIG9uLWNoaXAgcGVyaXBoZXJhbCBjbG9ja3MgZm9yIHJlLWNvbmZpZ3VyYXRpb24gICAgICAqLworCS8qIE5vdGU6IFNlZSBsYWJlbCAnRU5BQkxFQ0xLUycgZm9yIHRoZSByZS1lbmFibGluZyAgICAgICAgICAgICAgICAgKi8KKwlsZHIgICAgIHIxLCAgPUNLRU4KKwltb3YgICAgIHIyLCAgIzAKKwlzdHIgICAgIHIyLCAgW3IxXQorCisKKwkvKiBkZWZhdWx0IHZhbHVlCQkJCQkJICAgICovCisJbGRyICAgICByMiwgPShDQ0NSX0wyN3xDQ0NSX00yfENDQ1JfTjEwKSAgLyogREVGQVVMVDogezIwMC8yMDAvMTAwfSAqLworCisJLyogLi4uIGFuZCB3cml0ZSB0aGUgY29yZSBjbG9jayBjb25maWcgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLworCWxkciAgICAgcjEsICA9Q0NDUgorCXN0ciAgICAgcjIsICBbcjFdCisKKyNpZmRlZiBSVEMKKwkvKiBlbmFibGUgdGhlIDMyS2h6IG9zY2lsbGF0b3IgZm9yIFJUQyBhbmQgUG93ZXJNYW5hZ2VyICAgICAgICAgICAgICovCisKKwlsZHIgICAgIHIxLCAgPU9TQ0MKKwltb3YgICAgIHIyLCAgI09TQ0NfT09OCisJc3RyICAgICByMiwgIFtyMV0KKworCS8qIE5PVEU6ICBzcGluIGhlcmUgdW50aWwgT1NDQy5PT0sgZ2V0IHNldCwgbWVhbmluZyB0aGUgUExMICAgICAgICAgKi8KKwkvKiBoYXMgc2V0dGxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCis2MDoKKwlsZHIgICAgIHIyLCBbcjFdCisJYW5kcyAgICByMiwgcjIsICMxCisJYmVxICAgICA2MGIKKyNlbmRpZgorCisJQCBUdXJuIG9uIG5lZWRlZCBjbG9ja3MKKwlACit0ZXN0OgorCWxkciAgICAgcjEsICA9Q0tFTgorCWxkciAgICAgcjIsICA9Q0ZHX0NLRU5fVkFMCisJc3RyICAgICByMiwgIFtyMV0KKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLyogU2F2ZSBTRFJBTSBzaXplID8qLworCWxkcglyMSwgPURSQU1fU0laRQorCXN0cglyOCwgW3IxXQorCisJLyogRklYTUUgKi8KKworI2RlZmluZSBOT0RFQlVHCisjaWZkZWYgTk9ERUJVRworCS8qRGlzYWJsZSBzb2Z0d2FyZSBhbmQgZGF0YSBicmVha3BvaW50cyAqLworCW1vdglyMCwjMAorCW1jcglwMTUsMCxyMCxjMTQsYzgsMCAgLyogaWJjcjAgKi8KKwltY3IJcDE1LDAscjAsYzE0LGM5LDAgIC8qIGliY3IxICovCisJbWNyCXAxNSwwLHIwLGMxNCxjNCwwICAvKiBkYmNvbiAqLworCisJLypFbmFibGUgYWxsIGRlYnVnIGZ1bmN0aW9uYWxpdHkgKi8KKwltb3YJcjAsIzB4ODAwMDAwMDAKKwltY3IJcDE0LDAscjAsYzEwLGMwLDAgIC8qIGRjc3IgKi8KKworI2VuZGlmCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogRW5kIGxvd2xldmVsX2luaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitlbmRsb3dsZXZlbF9pbml0OgorCisJbW92ICAgICBwYywgbHIK