ZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvRGNsSF9rYmQuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvRGNsSF9rYmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODJkZmUyCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9EY2xIX2tiZC5oCkBAIC0wLDAgKzEsMjg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDEKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBkY2xfa2JkLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIEhlYWRlciBmaWxlIG9mIERDTCAoRHJpdmVyIENvbW1vbiBMYXllcikgZm9yIEtCRC4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIERDTF9ERUZJTklUSU9OX1NUUlVDVAorCisjaWZuZGVmIF9fRENMSF9LQkRfSF9TVFJVQ1RfXworI2RlZmluZSBfX0RDTEhfS0JEX0hfU1RSVUNUX18KKworCisjZGVmaW5lIERDTF9IS0JEX01BR0lDX05VTSAgMHg0MDAwMDAwMAorCisKKyNpZmRlZiBfX0JVSUxEX0RPTV9fCisvKmtleXBhZCBodyBldmVudCAqLwordHlwZWRlZiBlbnVtCit7CisJRENMX0VWRU5UX0hLQkRfU1RBVFVTX0NIQU5HRSA9IDB4MDEsIC8qa2V5cGFkIGh3IHN0YXR1cyBjaGFuZ2UgIGZvciB0aGUgbm9ybWFsIGtleXBhZCBodyBtYXRyaXgqLworCURDTF9FVkVOVF9IS0JEX0VYX1NUQVRVU19DSEFOR0UgPSAwWDAyLC8qa2V5cGFkIGV4dGVuc2lvbiBkaXJlY3Rpb24ga2V5IHN0YXR1cyBjaGFuZ2UgZXg6IGpvZ2JhbGwqLworCURDTF9FVkVOVF9IS0JEX01BWCA9IDBYRkYsLyp0aGUgbWF4IGtleXBhZCBodyBldmVudCBpZCovCisKK31LQkRIX0VWRU5UUzsKKyNlbHNlCisjZGVmaW5lIEtCREhfRVZFTlRTICAgIFwKKyAgIERDTF9FVkVOVF9IS0JEX1NUQVRVU19DSEFOR0UgPSAweDAxLCBcCisgICBEQ0xfRVZFTlRfSEtCRF9FWF9TVEFUVVNfQ0hBTkdFID0gMFgwMixcCisgICBEQ0xfRVZFTlRfSEtCRF9NQVggPSAwWEZGLFwKKworI2VuZGlmCisKKworI2lmZGVmIF9fQlVJTERfRE9NX18KKy8qa2V5cGFkIGh3IGNvbnRyb2wgY29tbWFuZHMqLwordHlwZWRlZiBlbnVtCit7CisJSEtCRF9DTURfR0VUX0tFWV9OVU1CRVIsIC8qdGhlIGNvbW1hbmQgdG8gZ2V0IHRoZSB0b3RhbCBrZXkgbnVtYmVyKi8KKwlIS0JEX0NNRF9HRVRfS0VZX1NUQV9NQVAsLypnZXQgdGhlIGtleXBhZCBodyBzdGF0dXMgcmVnaXN0ZXIgdGFibGUqLworCUhLQkRfQ01EX0dFVF9LRVlfU1RBVFVTLCAvKlF1ZXJ5IHRoZSBrZXkgaXMgcHJlc3NlZCBvciByZWxlYXNlZCBzdGF0dXMqLworCUhLQkRfQ01EX0dFVF9QT1dFUl9LRVlfU1RBVFVTLC8qUXVlcnkgdGhlIHBvd2VyIGtleSBzdGF0dXMqLworCit9S0JESF9DTURTOworI2Vsc2UKKyNkZWZpbmUgS0JESF9DTURTICAgIFwKKyAgIEhLQkRfQ01EX0dFVF9LRVlfTlVNQkVSLCBcCisgICBIS0JEX0NNRF9HRVRfS0VZX1NUQV9NQVAsXAorICAgSEtCRF9DTURfR0VUX0tFWV9TVEFUVVMsXAorICAgSEtCRF9DTURfR0VUX1BPV0VSX0tFWV9TVEFUVVMsCisjZW5kaWYKKworCisjaWZkZWYgX19CVUlMRF9ET01fXworLypkZWZpbmUgdGhlIGRhdGEgc3RydWN0dXJlIHR5cGUgZm9yIGV2ZXJ5IGNvbW1hbmQqLwordHlwZWRlZiB1bmlvbgoreworCUhLQkRfQ1RSTF9LTlVNX1QgICAgICAgICAgICAgCQlyS0JEQ3RybEtOVU07IC8qa2V5cGFkIG51bWJlciBzdHJ1Y3R1cmUqLworCUhLQkRfQ1RSTF9TVEFfTUFQX1QgICAgICAgCQkJcktCREN0cmxTdGFNYXA7IC8qa2V5cGFkIHN0YXV0cyByZWdpc3RlciBzdHJ1Y3R1cmUqLworCUhLQkRfQ1RSTF9LRVlfU1RBX1QgICAgICAgICAgICAJCXJLQkRDdHJsS2V5U3RhOyAvKmtleSBzdGF0dXMgc3RydWN0dXJlKi8KKwlIS0JEX0NUUkxfUE9XS0VZX1QgICAgICAgICAgICAgICAgIAlyS0JEQ3RybFBvd2VyS2V5U3RhOy8qcG93ZXIga2V5IHN0YXR1cyBzdHJ1Y3R1cmUqLworfUtCREhfQ1RSTFM7CisKKyNlbHNlCisjZGVmaW5lIEtCREhfQ1RSTFMgXAorICAgSEtCRF9DVFJMX0tOVU1fVCAgICAgICAgICAgICAJCXJLQkRDdHJsS05VTTsgXAorICAgSEtCRF9DVFJMX1NUQV9NQVBfVCAgICAgICAJCQlyS0JEQ3RybFN0YU1hcDtcCisgICBIS0JEX0NUUkxfS0VZX1NUQV9UICAgICAgICAgICAgCQlyS0JEQ3RybEtleVN0YTtcCisgICBIS0JEX0NUUkxfUE9XS0VZX1QgICAgICAgICAgICAgICAgIAlyS0JEQ3RybFBvd2VyS2V5U3RhOworI2VuZGlmCisKKworLy9IS0JEX0NNRF9HRVRfS0VZX05VTUJFUgorLyp0aGUgY29udHJvbCBjb21tYW5kIGRhdGEgZm9yIGNvbW1hbmQ6SEtCRF9DTURfR0VUX0tFWV9OVU1CRVIqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9VSU5UMTYgICB1MktleU51bTsvKmtleSBudW1iZXIqLworfSBIS0JEX0NUUkxfS05VTV9UOworCisvL0hLQkRfQ01EX0dFVF9LRVlfU1RBX01BUAorLyp0aGUgY29udHJvbCBjb21tYW5kIGRhdGEgZm9yIGNvbW1hbmQ6SEtCRF9DTURfR0VUX0tFWV9TVEFfTUFQKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDMyIGtiZG1hcF9yZWc7Lyp0aGUgbG93ZXN0IDMyYml0IHJlZ2lzdGVyIHZhbHVlLCBldmVyeSBiaXQgaW5kaWNhdGVzIG9uZSBrZXkgc3RhdHVzKi8KKyAgIERDTF9VSU5UMzIga2JkbWFwX3JlZzE7Lyp0aGUgbWlkZGxlIDMyYml0IHJlZ2lzdGVyIHZhbHVlLCBldmVyeSBiaXQgaW5kaWNhdGVzIG9uZSBrZXkgc3RhdHVzKi8KKyAgIERDTF9VSU5UMzIga2JkbWFwX3JlZzI7Lyp0aGUgaGlnaGVzdCAzMmJpdCByZWdpc3RlciB2YWx1ZSwgZXZlcnkgYml0IGluZGljYXRlcyBvbmUga2V5IHN0YXR1cyovCit9IEhLQkRfQ1RSTF9TVEFfTUFQX1Q7CisKKy8qdGhlIGNvbnRyb2wgY29tbWFuZCBkYXRhIGZvciBjb21tYW5kOkhLQkRfQ01EX0dFVF9LRVlfU1RBVFVTKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wgc3RhOy8qa2V5IHN0YXV0czpLQUxfVFVSRSBpbmRpY2F0ZXMgdGhlIGtleSBpcyBwcmVzc2VkLCBLQUxfRkFMU0UgaW5kaWNhdGVzIHRoZSBrZXkgaXMgcmVsZWFzZWQqLworCURDTF9VSU5UOCBrZXk7LyprZXkgaW5kZXggbnVtYmVyLCB3aGljaCBpcyBkZWZpbmVkIGluIHRoZSBrYmRfdGFibGUuaCAqLworfUhLQkRfQ1RSTF9LRVlfU1RBX1Q7CisKKy8qdGhlIGNvbnRyb2wgY29tbWFuZCBkYXRhIGZvciBjb21tYW5kOkhLQkRfQ01EX0dFVF9QT1dFUl9LRVlfU1RBVFVTKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfQk9PTCAgICAgZmdQS1A7LypLQUxfVFVSRSBpbmRpY2F0ZXMgdGhlIGtleSBpcyBwcmVzc2VkLCBLQUxfRkFMU0UgaW5kaWNhdGVzIHRoZSBrZXkgaXMgcmVsZWFzZWQqLworfSBIS0JEX0NUUkxfUE9XS0VZX1Q7CisKKyNlbmRpZgorI2VuZGlmCisKKworI2lmZGVmIERDTF9ERUZJTklUSU9OX1BST1RPVFlQRQorI2lmbmRlZiBfX0RDTF9IS0JEX0hfUFJPVE9UWVBFX18KKyNkZWZpbmUgX19EQ0xfSEtCRF9IX1BST1RPVFlQRV9fCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyo8R1JPVVAgQ2FsbEJhY2tGdW5jdGlvbnM+CisqIEZVTkNUSU9OCisqICBLQkRIX0VWRU5UX0ZVTkMKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgaHcgc3RhdHVzIGNoYW5nZS4KKyoKKyogUEFSQU1FVEVSUworKiAgZXZlbnQ6IHRoZSBrZXlwYWQgaHcgZXZlbnQsIGl0IGNhbiBiZSB0aGUgZW51bSB2YWx1ZSBLQkRIX0VWRU5UUy4KKyogIHBhcmFtOiB0aGUgb3B0aW9uYWwgcGFyYW1ldGVyLgorKgorKiBSRVRVUk5TCisqICBOT05FCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiB2b2lkICgqS0JESF9FVkVOVF9GVU5DKShEQ0xfRVZFTlQgZXZlbnQsIHZvaWQqIHBhcmFtKSA7IAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsSEtCRF9Jbml0aWFsaXplCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGluaXRpYWxpemUga2V5cGFkIGhhcmR3YXJlIG1vZHVsZSwgSXQgaXMgY2FsbGVkIGR1cmluZyB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIGFuZCB0aGUgdXNlciBpcyBub3QgbmVlZGVkIHRvIGNhbGwgaXQuCisqCisqIFBBUkFNRVRFUlMKKyogIE5vbmUKKyoKKyogUkVUVVJOUworKiAgU1RBVFVTX09LCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsSEtCRF9Jbml0aWFsaXplKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiBEY2xIS0JEX09wZW4KKyoKKyogREVTQ1JJUFRJT04KKyogVGhpcyBmdW5jdGlvbiBpcyB0byBvcGVuIHRoZSBrZXlwYWQgaHcgbW9kdWxlIGFuZCByZXR1cm4gYSBoYW5kbGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGRldjprZXlwYWQgZGV2aWNlIElELiBpdCBzaG91bGQgYmUgRENMX0tCRC4KKyogIGZsYWdzOlVzZXIgb2Yga2V5cGFkIGRyaXZlci4gSXQgc2hvdWxkIGJlIHRoZSB1c2VyIG1vZHVsZSBpZCwgaWYgdGhlIHVzZXIgZG9lcyBub3QgbW9kdWxlIGlkLCBpdCBjYW4gYmUgc2V0IDAuCisqCisqIFJFVFVSTlMKKyogIERDTF9IQU5ETEVfSU5WQUxJRDogSW5jb3JyZWN0IGRldmljZSBJRC4KKyogIE90aGVyIHZhbHVlOiBBIHZhbGlkIGhhbmRsZQorKgorKiBFWEFNUExFCisqICA8Y29kZT4KKyogIERDTF9IQU5ETEUga2JkX2hhbmRsZTsKKyogIGtiZF9oYW5kbGUgPSBEY2xIS0JEX09wZW4oRENMX0tCRCwgTU9EX0RSVktCRCk7CisqICA8L2NvZGU+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9IQU5ETEUgRGNsSEtCRF9PcGVuKERDTF9ERVYgZGV2LCBEQ0xfRkxBR1MgZmxhZ3MpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsSEtCRF9Db250cm9sCisqCisqIERFU0NSSVBUSU9OCisqIFRoaXMgZnVuY3Rpb24gaXMgdG8gY29udHJvbCB0aGUga2V5cGFkIGRyaXZlciwgdGhlIHVzZXIgY2FuIGNhbGwgdGhlIGludGVyZmFjZSB0byBnZXQgdGhlIGtleXBhZCBkcml2ZXIgc2VydmljZXMgdGhyb3VnaCB0aGUgZGlmZmVyZW50IGNvbW1hbmRzLgorKgorKiBQQVJBTUVURVJTCisqICBoYW5kbGU6IHRoZSB1c2VyIGhhbmRsZXIgb2YgdGhlIGtleXBhZCwgd2hpY2ggaXMgcmV0dXJuZWQgYnkgdGhlIERjbEhLQkRfT3BlbiBmdW5jdGlvbi4KKyogIGNtZDogdGhlIGtleXBhZCBkcml2ZXIgY29udHJvbCBjb21tYW5kcywgdGhlIHZhbHVlcyBjYW4gYmUgZ2V0IGZyb20gdGhlIGVudW0gS0JESF9DTURTLgorKiAgZGF0YTogdGhlIGRhdGEgd2hpY2ggaXMgY29ycmVzcG9uZWQgdG8gdGhlIGNvbW1hbmRzLCB0aGUgZGF0YSB0eXBlIGNhbiBiZW9uZSBvZiAgdGhlIGVudW0gS0JESF9DVFJMUy4KKyoKKyogUkVUVVJOUworKiAgRENMX0hBTkRMRV9JTlZBTElEOiBJbmNvcnJlY3QgZGV2aWNlIElELgorKiAgU1RBVFVTX09LOiByZXR1cm4gc3VjY2Vzc2Z1bGx5LgorKgorKiBFWEFNUExFCisqICA8Y29kZT4KKyogIERDTF9IQU5ETEUga2JkaGFuZGxlOworKiAgRENMX0NUUkxfREFUQV9UIHJlZzsKKyogIGtiZGhhbmRsZSA9IERjbEhLQkRfT3BlbihEQ0xfS0JELCBNT0RfRFJWS0JEKTsKKyogIERjbEhLQkRfQ29udHJvbChrYmRoYW5kbGUsIEhLQkRfQ01EX0dFVF9LRVlfU1RBX01BUCwgKERDTF9DVFJMX0RBVEFfVCopJnJlZyk7CSAKKyogIHBrZXlwYWRfc3RhdHVzLT5rYmRtYXBfcmVnID0gcmVnLnJLQkRDdHJsU3RhTWFwLmtiZG1hcF9yZWc7CisqICBwa2V5cGFkX3N0YXR1cy0+a2JkbWFwX3JlZzE9IHJlZy5yS0JEQ3RybFN0YU1hcC5rYmRtYXBfcmVnMTsKKyogIHBrZXlwYWRfc3RhdHVzLT5rYmRtYXBfcmVnMj0gcmVnLnJLQkRDdHJsU3RhTWFwLmtiZG1hcF9yZWcyOworKiAgPC9jb2RlPgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbEhLQkRfQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsSEtCRF9DbG9zZQorKgorKiBERVNDUklQVElPTgorKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIGNsb3NlIHRoZSBrZXlwYWQgZHJpdmVyLgorKgorKiBQQVJBTUVURVJTCisqICBoYW5kbGU6IHRoZSB1c2VyIGhhbmRsZXIgb2YgdGhlIGtleXBhZCwgd2hpY2ggaXMgcmV0dXJuZWQgYnkgdGhlIERjbEhLQkRfT3BlbiBmdW5jdGlvbi4KKyoKKyogUkVUVVJOUworKiAgU1RBVFVTX09LOiByZXR1cm4gc3VjY2Vzc2Z1bGx5LgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbEhLQkRfQ2xvc2UoRENMX0hBTkRMRSBoYW5kbGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsSEtCRF9SZWdpc3RlckNhbGxiYWNrCisqCisqIERFU0NSSVBUSU9OCisqIFRoaXMgZnVuY3Rpb24gaXMgdG8gcmVnaXN0ZXIgdGhlIGhhcmR3YXJlIGV2ZW50IGNhbGxiYWNrIGZ1bmN0aW9uLgorKgorKiBQQVJBTUVURVJTCisqICBoYW5kbGU6IHRoZSB1c2VyIGhhbmRsZXIgb2YgdGhlIGtleXBhZCwgd2hpY2ggaXMgcmV0dXJuZWQgYnkgdGhlIERjbEhLQkRfT3BlbiBmdW5jdGlvbi4KKyogIGV2ZW50OiB0aGUga2V5cGFkIGhhcmR3YXJlIGV2ZW50Lkl0IGNhbiBiZSBvbmUgb2YgdGhlIHZhbHVlIGluIHRoZSBlbnVtIEtCREhfRVZFTlRTLgorKiAgY2FsbGJhY2s6IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyLiAgICAgICAgICAgCisqCisqIFJFVFVSTlMKKyogIERDTF9IQU5ETEVfSU5WQUxJRDogSW5jb3JyZWN0IGRldmljZSBJRC4KKyogIFNUQVRVU19JTlZBTElEX0VWRU5UOiB0aGUgZXZlbnQgcGFyYW1ldGVyIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGtleXBhZC4KKyogIFNUQVRVU19PSzogcmV0dXJuIHN1Y2Nlc3NmdWxseS4KKyoKKyogRVhBTVBMRQorKiAgPGNvZGU+CisqIERDTF9IQU5ETEUgaGFuZGxlIDsKKyogaGFuZGxlID0gRGNsSEtCRF9PcGVuKERDTF9LQkQsIDApOworKiBEY2xIS0JEX1JlZ2lzdGVyQ2FsbGJhY2soaGFuZGxlLCBEQ0xfRVZFTlRfSEtCRF9TVEFUVVNfQ0hBTkdFLCAmS2JkX2h3X2V2ZW50X0NhbGxiYWNrKTsKKyogIDwvY29kZT4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xIS0JEX1JlZ2lzdGVyQ2FsbGJhY2soRENMX0hBTkRMRSBoYW5kbGUsIERDTF9FVkVOVCBldmVudCwgS0JESF9FVkVOVF9GVU5DIGNhbGxiYWNrKTsKKworI2VuZGlmCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9EY2xTX2tiZC5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9EY2xTX2tiZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMGM1ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL0RjbFNfa2JkLmgKQEAgLTAsMCArMSwzMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGRjbF9rYmQuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgSGVhZGVyIGZpbGUgb2YgRENMIChEcml2ZXIgQ29tbW9uIExheWVyKSBmb3IgS0JELgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIERDTF9ERUZJTklUSU9OX1NUUlVDVAorCisgI2lmbmRlZiBfX0RDTFNfS0JEX0hfU1RSVUNUX18KKyNkZWZpbmUgX19EQ0xTX0tCRF9IX1NUUlVDVF9fCisKKyNpZmRlZiBfX0JVSUxEX0RPTV9fCisvKmtleXBhZCBkcml2ZXIgY29udHJvbCBjb21tYW5kcyB3aGljaCBpcyByZWxhdGVkIHdpdGggc29mdHdhcmUgbGF5ZXIqLwordHlwZWRlZiBlbnVtCit7CisJS0JEX0NNRF9TRVRfTE9OR19QUkVTU19USU1FLCAvKlNldCB0aGUgIGxvbmcgcHJlc3Mga2V5IHRpbWUqLworCUtCRF9DTURfU0VUX1JFUEVBVF9QUkVTU19USU1FLCAvKlNldCB0aGUgIHJlcGVhdCBwcmVzcyBrZXkgdGltZSovCisJS0JEX0NNRF9TRVRfREVURUNUSU9OX01PREUsIC8qU2V0IHRoZSAga2V5IGRldGVjdGlvbiBtb2RlKi8KKwlLQkRfQ01EX0dFVF9LRVlfREFUQSwgLypnZXQgdGhlIHByZXNzIGtleSBkYXRhKi8KKwlLQkRfQ01EX1BFRUtfS0VZX0RBVEEsLypwZWVrIHRoZSBwcmVzcyBrZXkgZGF0YSovCisJS0JEX0NNRF9HRVRfREVURUNUSU9OX01PREUsLypnZXQgdGhlIGN1cnJlbnQga2V5IGRldGVjdGlvbiBtb2RlKi8KKwlLQkRfQ01EX0NUUkxfS0VZX1NVUFBPUlQsLypxdWVyeSB0aGUga2V5IGlzIHN1cHBvcnQgb3Igbm90ICovCisJS0JEX0NNRF9DVFJMX0tFWV9NVUxUSVBMRSwvKnF1ZXJ5IHRoZSBrZXkgaXMgbXVsdGlwbGUga2V5IG9yIG5vdCovCisJS0JEX0NNRF9HRVRfS0VZX0VWRU5UX0NOVCwvKmdldCB0aGUga2V5IGV2ZW50IGluIHRoZSBidWZmZXIqLworCUtCRF9DTURfUFVUX0tFWV9EQVRBLC8qcHV0IHRoZSBrZXkgcHJlc3MgZGF0YSB0byB0aGUgdXBwZXIgbGF5ZXIqLworCit9S0JEX0NNRFM7CisKKyNlbHNlCisjZGVmaW5lIEtCRF9DTURTICAgIFwKKyAgIEtCRF9DTURfU0VUX0xPTkdfUFJFU1NfVElNRSwgXAorICAgS0JEX0NNRF9TRVRfUkVQRUFUX1BSRVNTX1RJTUUsIFwKKyAgICBLQkRfQ01EX1NFVF9ERVRFQ1RJT05fTU9ERSwgXAorICAgIEtCRF9DTURfR0VUX0tFWV9EQVRBLCBcCisgICAgS0JEX0NNRF9QRUVLX0tFWV9EQVRBLFwKKyAgICBLQkRfQ01EX0dFVF9ERVRFQ1RJT05fTU9ERSxcCisgICAgS0JEX0NNRF9DVFJMX0tFWV9TVVBQT1JULFwKKyAgICBLQkRfQ01EX0NUUkxfS0VZX01VTFRJUExFLFwKKyAgICBLQkRfQ01EX0dFVF9LRVlfRVZFTlRfQ05ULFwKKyAgICBLQkRfQ01EX1BVVF9LRVlfREFUQSxcCisgICAgS0JEX0NNRF9GSU5EX1RXT19TVEVQLAorCisjZW5kaWYKKworLyprZXlwYWQgZXZlbnRzIHRvIHRoZSB1cHBlciBsYXllciovCit0eXBlZGVmIGVudW0geworICAgICAgRENMX2tiZF9vbmVrZXlfcHJlc3M9MCwvKm9uZSBrZXkgcHJlc3MgZXZlbnQqLworICAgICAgRENMX2tiZF9vbmVrZXlfcmVsZWFzZSwvKm9uZSBrZXkgcmVsZWFzZSBldmVudCovCisjaWZkZWYgVFdPX0tFWV9FTkFCTEUKKyAgICAgIERDTF9rYmRfdHdva2V5X3ByZXNzLCAvKnR3byBrZXkgcHJlc3MgZXZlbnQsIHdoaWNoIGhhcyBiZWVuIHBoYXNlIG91dCBub3cgKi8KKyAgICAgIERDTF9rYmRfdHdva2V5X3JlbGVhc2UsLyp0d28ga2V5IHJlbGVhc2UgZXZlbnQsIHdoaWNoIGhhcyBiZWVuIHBoYXNlIG91dCBub3cqLworI2VuZGlmICAgLypUV09fS0VZX0VOQUJMRSovCisgICAgICBEQ0xfa2JkX29uZWtleV9sb25ncHJlc3MsLypvbmUgbG9uZyBwcmVzcyBrZXkgZXZlbnQqLworICAgICAgRENMX2tiZF9vbmVrZXlfcmVwZWF0ZWQsLypvbmUgcmVwZWF0ZWQgcHJlc3Mga2V5IGV2ZW50Ki8KKyAgICAgIERDTF9rYmRfb25la2V5X2Z1bGxwcmVzcywvKnR3byBzdGVwIGtleSBmdW5jdGlvbjogb25lIGtleSBmdWxsIHByZXNzIGV2ZW50Ki8KKyAgICAgIERDTF9rYmRfdHdva2V5X2RldGVjdGlvbl9lbmFibGUsLyplbmFibGUgdHdvIGtleSBkZXRlY3Rpb24gbW9kZSovCisgICAgICBEQ0xfa2JkX3RocmVla2V5X2RldGVjdGlvbl9lbmFibGUsLyplbmFibGUgdGhyZWUga2V5IGRldGVjdGlvbiBtb2RlKi8KKyAgICAgIERDTF9rYmRfbXVsdGlrZXlfZGV0ZWN0aW9uX2Rpc2FibGUvKm11bHRpcGxlIGtleSBkZXRlY3Rpb24gbW9kZSBpcyBkaXNhYmxlLCBkZWZhdWx0IGlzIG9uZSBrZXkgZGV0ZWN0aW9uIG1vZGUqLworfSBEQ0xfS0JEX0VWRU5UOworCisvKmtleSBkZXRlY3Rpb24gbW9kZSovCit0eXBlZGVmIGVudW0geworICAgRENMX2tiZF8xX2tleV9kZXRfbW9kZSA9IDAsIC8qb25lIGtleSBkZXRlY3Rpb24gbW9kZSovCisgICBEQ0xfa2JkXzJfa2V5c19kZXRfbW9kZSwvKnR3byBrZXkgZGV0ZWN0aW9uIG1vZGUgKi8KKyAgIERDTF9rYmRfM19rZXlzX2RldF9tb2RlIC8qdGhyZWUga2V5IGRldGVjdGlvbiBtb2RlKi8KK31EQ0xfa2JkX2tleV9kZXRfbW9kZTsKKworLyp0aGUgY29udHJvbCBjb21tYW5kIGRhdGEgZm9yIGNvbW1hbmQ6S0JEX0NNRF9TRVRfREVURUNUSU9OX01PREUgYW5kIEtCRF9DTURfR0VUX0RFVEVDVElPTl9NT0RFICovCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX0JPT0wgICAgIGJGbGFnOy8qdGhlIHJldHVybiBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgc3dpdGNoIG1vZGUgc3VjY2Vzc2Z1bGx5Ki8KKyAgIERDTF9VSU5UOCAgICBEZXRfTW9kZTsvKnRoZSBkZXRlY3Rpb24gbW9kZSB2YWx1ZSovCit9IFNLQkRfQ1RSTF9NT0RFX1Q7CisKKy8qdGhlIGNvbnRyb2wgY29tbWFuZCBkYXRhIGZvciBjb21tYW5kOktCRF9DTURfR0VUX0tFWV9FVkVOVF9DTlQqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfVUlOVDgga2V5Y250Oy8qdGhlIGtleSBldmVudCBjb3VudCBpbiB0aGUgYnVmZmVyKi8KK31TS0JEX0NUUkxfS0VZX0NOVF9UOworCisvKnRoZSBjb250cm9sIGNvbW1hbmQgZGF0YSBmb3IgY29tbWFuZDpLQkRfQ01EX0dFVF9LRVlfREFUQSovCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX0tCRF9FVkVOVCAgIEtleWV2ZW50Oy8qdGhlIGtleSBldmVudCovCisjaWZkZWYgVFdPX0tFWV9FTkFCTEUKKyAgIERDTF9VSU5UOCAgIEtleWRhdGFbMl07Lyp0aGUga2V5IGRhdGEqLworI2Vsc2UgLyohVFdPX0tFWV9FTkFCTEUqLworICAgRENMX1VJTlQ4ICAgS2V5ZGF0YVsxXTsvKnRoZSBrZXkgZGF0YSovCisjZW5kaWYgICAvKlRXT19LRVlfRU5BQkxFKi8KKyNpZiBkZWZpbmVkKF9fVEMwMV9fKQorICAgRENMX1VJTlQzMiAga2V5dGltZXN0YW1wOy8qdGhlIGtleSB0aW1lIHN0YW1wKi8KKyNlbmRpZgorCit9IFNLQkRfQ1RSTF9LRVlEQVRBX1Q7CisKKy8qdGhlIGNvbnRyb2wgY29tbWFuZCBkYXRhIGZvciBjb21tYW5kOktCRF9DTURfUEVFS19LRVlfREFUQSovCit0eXBlZGVmIHN0cnVjdAoreworIFNLQkRfQ1RSTF9LRVlEQVRBX1QqIGtleWRhdGE7Lyp0aGUga2V5IGRhdGEgKi8KKyBEQ0xfQk9PTCBzcGVjaWZ5X3JlYWQ7IC8qc3BlY2lmeSB3aGV0aGVyIHRvIHJlYWQgdGhlIGRhdGEgaW4gdGhlIHBvc2l0aW9uIG9mIHJlYWRfcG9pbnRlcmw7IEtBTF9UVVJFOnNwZWNpZnkgdG8gcGVlayB0aGUgZGF0YQorIAkJCQkJCQlpbiB0aGUgcG9zaXRpb246cmVhZF9wb2ludGVyO0tBTF9GQUxTRTogcmV0dXJuIHRoZSBjdXJyZW50IHJlYWQgcG9pbnRlciBkYXRhIHRvIHRoZSB1cHBlciBsYXllciovCisgRENMX1VJTlQzMiByZWFkX3BvaW50ZXI7Lyp0aGUgcmVhZCBwb3NpdGlvbiBpbiB0aGUgYnVmZmVyLCB0aGUgbWF4IHZhbHVlIGlzIGJ1ZmZfc2l6ZTsqLworIERDTF9VSU5UMzIqIGN1cnJlbnRfcmVhZF9wb2ludGVyOy8qcmV0dXJuIHRoZSBkYXRhIGluIHRoZSBzdHJ1Y3R1cmUgcG9zaXRpb24qLworCit9U0tCRF9DVFJMX1BFRUtEQVRBX1Q7CisKKworLyp0aGUgY29udHJvbCBjb21tYW5kIGRhdGEgZm9yIGNvbW1hbmQ6S0JEX0NNRF9DVFJMX0tFWV9NVUxUSVBMRSovCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX0JPT0wgICAgIGZnSU1LOy8qdGhlIHJldHVybiB2YWx1ZSB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSB1a2V5IGlzIGEgbXVsdGlwbGUga2V5Ki8KKyAgIERDTF9VSU5UOCAgICB1S2V5OyAvKnRoZSBpbnB1dCBwYXJhbWV0ZXIgdG8gaW5kaWNhdGUgdGhlIGtleSBpbmRleCovCit9IFNLQkRfQ1RSTF9NVUxUSUtFWV9UOworCisKKy8qdGhlIGNvbnRyb2wgY29tbWFuZCBkYXRhIGZvciBjb21tYW5kOktCRF9DTURfQ1RSTF9LRVlfU1VQUE9SVCovCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQ4ICAgIHVLZXk7Lyp0aGUgaW5wdXQgcGFyYW1ldGVyIHRvIGluZGljYXRlIHRoZSBrZXkgaW5kZXgqLworICAgRENMX0JPT0wgZmdJS0JTOy8qdGhlIHJldHVybiBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHVrZXkgKmlzIHN1cHBvcnRlZCovCit9IFNLQkRfQ1RSTF9LRVlTVVBQT1JUX1Q7CisKKy8qdGhlIGNvbnRyb2wgY29tbWFuZCBkYXRhIGZvciBjb21tYW5kOktCRF9DTURfU0VUX0xPTkdfUFJFU1NfVElNRSBhbmQgS0JEX0NNRF9TRVRfUkVQRUFUX1BSRVNTX1RJTUUqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9VSU5UMzIgICB1NFRpY2s7Lyp0aGUgdGltZSB1bml0IGlzIG1zLiovCit9IFNLQkRfQ1RSTF9USU1FX1Q7CisKKy8qdGhlIGNvbnRyb2wgY29tbWFuZCBkYXRhIGZvciBjb21tYW5kOktCRF9DTURfUFVUX0tFWV9EQVRBICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UOCBrZXlkYXRhOy8qdGhlIGtleSBpbmRleCBudW1iZXIqLworfVNLQkRfQ1RSTF9QVVRLRVlfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgRENMX1VJTlQzMiAqbnVtYmVyOworICBEQ0xfVUlOVDggKnR3b19zdGVwOworfVNLQkRfQ1RSTF9GSU5EX1RXT19TVEVQX1Q7CisKKworI2lmZGVmIF9fQlVJTERfRE9NX18KKy8qZGVmaW5lIHRoZSBkYXRhIHN0cnVjdHVyZSB0eXBlIGZvciBldmVyeSBjb21tYW5kKi8qLwordHlwZWRlZiB1bmlvbgoreworCVNLQkRfQ1RSTF9USU1FX1QJCSAgIAlyS0JEQ3RyVGltZTsgLyp0aGUgbG9uZyBwcmVzcyBhbmQgcmVwZWF0IHByZXNzIHRpbWUgKi8KKwlTS0JEX0NUUkxfS0VZU1VQUE9SVF9UICAgCXJLQkRDdHJsS2V5U3VwcG9ydDsgLyp0aGUga2V5IHN1cHBvcnQgc3RydWN0dXJlKi8KKwlTS0JEX0NUUkxfTVVMVElLRVlfVAkJcktCREN0cmxNdWx0aXBsZTsgIC8qdGhlIG11bHRpcGx5IGtleSBzdHJ1Y3R1cmUqLworCVNLQkRfQ1RSTF9QRUVLREFUQV9UCQlyS0JEQ3RyUGVla0RhdGE7ICAvKnBlZWsga2V5IGRhdGEgY29tbWFuZCBjb250cm9sIGRhdGEgc3RydWN0dXJlKi8KKwlTS0JEX0NUUkxfS0VZREFUQV9UCQkJcktCREN0ckdldERhdGE7IC8qZ2V0IGtleSBkYXRhIGNvbW1hbmQgY29udHJvbCBkYXRhIHN0cnVjdHVyZSovCisJU0tCRF9DVFJMX01PREVfVAkJCXJLQkRDdHJNb2RlOyAgLypkZXRlY3Rpb24gY29tbWFuZCBjb250cm9sIGRhdGEgc3RydWN0dXJlKi8KKwlTS0JEX0NUUkxfS0VZX0NOVF9UCQkgICAJcktCREN0cmtleUNudDsvKmdldCBrZXkgZXZlbnQgY291bnQgY29tbWFuZCBjb250cm9sIGRhdGEgc3RydWN0dXJlKi8KKwlTS0JEX0NUUkxfUFVUS0VZX1QJCSAgIAlyS0JEQ3RyUHV0S2V5Oy8qcHV0IGtleSBkYXRhIGNvbW1hbmQgY29udHJvbCBkYXRhIHN0cnVjdHVyZSovCisJU0tCRF9DVFJMX0ZJTkRfVFdPX1NURVBfVAlyS0JEQ3RybEZpbmRUd29TdGVwS2V5OworCit9S0JEU19DVFJMUzsKKworI2Vsc2UKKyNkZWZpbmUgS0JEU19DVFJMUyBcCisgICBTS0JEX0NUUkxfVElNRV9UICAJCQlyS0JEQ3RyVGltZTsgXAorICAgU0tCRF9DVFJMX0tFWVNVUFBPUlRfVCAgCXJLQkRDdHJsS2V5U3VwcG9ydDsgXAorICAgU0tCRF9DVFJMX01VTFRJS0VZX1QgIAkJIHJLQkRDdHJsTXVsdGlwbGU7IFwKKyAgIFNLQkRfQ1RSTF9QRUVLREFUQV9UICAgICAgICAgICAgICAgICAgIHJLQkRDdHJQZWVrRGF0YTsgXAorICAgU0tCRF9DVFJMX0tFWURBVEFfVCAgICAgICAgICAgICAgICAgICAgICByS0JEQ3RyR2V0RGF0YTsgXAorICAgU0tCRF9DVFJMX01PREVfVCAgCQkJcktCREN0ck1vZGU7XAorICAgU0tCRF9DVFJMX0tFWV9DTlRfVAkJCXJLQkRDdHJrZXlDbnQ7XAorICAgU0tCRF9DVFJMX1BVVEtFWV9UCQkJcktCREN0clB1dEtleTtcCisgICAgICBTS0JEX0NUUkxfRklORF9UV09fU1RFUF9UICAgcktCREN0cmxGaW5kVHdvU3RlcEtleTsKKyNlbmRpZgorCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisjaWZuZGVmIF9fRENMX1NLQkRfSF9QUk9UT1RZUEVfXworI2RlZmluZSBfX0RDTF9TS0JEX0hfUFJPVE9UWVBFX18KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFNLQkRfSW5pdGlhbGl6ZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBpbml0aWFsaXplIGtleXBhZCBoYXJkd2FyZSBtb2R1bGUsIEl0IGlzIGNhbGxlZCBkdXJpbmcgdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbi4KKyoKKyogUEFSQU1FVEVSUworKiAgTm9uZQorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTS0JEX0luaXRpYWxpemUodm9pZCk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiBEY2xTS0JEX09wZW4KKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gb3BlbiB0aGUga2V5cGFkIGh3IG1vZHVsZSBhbmQgcmV0dXJuIGEgaGFuZGxlLgorKgorKiBQQVJBTUVURVJTCisqICBkZXY6IGtleXBhZCBkZXZpY2UgSUQuIGl0IHNob3VsZCBiZSBEQ0xfS0JELgorKiAgZmxhZ3M6IFVzZXIgb2Yga2V5cGFkIGRyaXZlci4gSXQgc2hvdWxkIGJlIHRoZSB1c2VyIG1vZHVsZSBpZCwgaWYgdGhlIHVzZXIgZG9lcyBub3QgbW9kdWxlIGlkLCBpdCBjYW4gYmUgc2V0IDAuCisqCisqIFJFVFVSTlMKKyogIERDTF9IQU5ETEVfSU5WQUxJRDogSW5jb3JyZWN0IGRldmljZSBJRC4KKyogIE90aGVyIHZhbHVlOiBBIHZhbGlkIGhhbmRsZQorKgorKiBFWEFNUExFCisqICA8Y29kZT4KKyogIERDTF9IQU5ETEUga2JkX2hhbmRsZTsKKyogIGtiZF9oYW5kbGUgPSBEY2xTS0JEX09wZW4oRENMX0tCRCwgTU9EX0RSVktCRCk7CisqICA8L2NvZGU+CisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9IQU5ETEUgRGNsU0tCRF9PcGVuKERDTF9ERVYgZGV2LCBEQ0xfRkxBR1MgZmxhZ3MpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsU0tCRF9DbG9zZQorKgorKiBERVNDUklQVElPTgorKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIGNsb3NlIHRoZSBrZXlwYWQgZHJpdmVyLgorKgorKiBQQVJBTUVURVJTCisqICBoYW5kbGU6IHRoZSB1c2VyIGhhbmRsZXIgb2YgdGhlIGtleXBhZCwgd2hpY2ggaXMgcmV0dXJuZWQgYnkgdGhlIERjbFNLQkRfQ2xvc2UgZnVuY3Rpb24uCisqCisqIFJFVFVSTlMKKyogIFNUQVRVU19PSzogcmV0dXJuIHN1Y2Nlc3NmdWxseS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTS0JEX0Nsb3NlKERDTF9IQU5ETEUgaGFuZGxlKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xTS0JEX0NvbnRyb2wKKyoKKyogREVTQ1JJUFRJT04KKyogVGhpcyBmdW5jdGlvbiBpcyB0byBjb250cm9sIHRoZSBrZXlwYWQgZHJpdmVyLCB0aGUgdXNlciBjYW4gY2FsbCB0aGUgaW50ZXJmYWNlIHRvIGdldCB0aGUga2V5cGFkIGRyaXZlciBzZXJ2aWNlcyB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgY29tbWFuZHMuCisqIHRoZSBjb250cm9sIHNlcnZpY2VzIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgc29mdHdhcmUgcmVsYXRlZCBzZXJ2aWNlcywgdGhlIGtleXBhZCBoYXJkd2FyZSByZWxhdGVkIHNlcnZpY2VzIGNhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBEQ0xIKiogaW50ZXJmYWNlLiAgCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogdGhlIHVzZXIgaGFuZGxlciBvZiB0aGUga2V5cGFkLCB3aGljaCBpcyByZXR1cm5lZCBieSB0aGUgRGNsU0tCRF9PcGVuIGZ1bmN0aW9uLgorKiAgY21kOiB0aGUga2V5cGFkIGRyaXZlciBjb250cm9sIGNvbW1hbmRzLCB0aGUgdmFsdWVzIGNhbiBiZSBnZXQgZnJvbSB0aGUgZW51bSBLQkRfQ01EUy4KKyogIGRhdGE6IHRoZSBkYXRhIHdoaWNoIGlzIGNvcnJlc3BvbmVkIHRvIHRoZSBjb21tYW5kcywgdGhlIGRhdGEgdHlwZSBjYW4gYmVvbmUgb2YgIHRoZSBlbnVtIEtCRFNfQ1RSTFMuCisqCisqIFJFVFVSTlMKKyogIERDTF9IQU5ETEVfSU5WQUxJRDogSW5jb3JyZWN0IGRldmljZSBJRC4KKypTVEFUVVNfQlVGRkVSX0VNUFRZOmluZGljYXRlIHRoZSBidWZmZXIgaXMgZW1wdHksIHdoZW4gdGhlIGNvbW1hbmQgS0JEX0NNRF9HRVRfS0VZX0RBVEEgb3IgS0JEX0NNRF9QRUVLX0tFWV9EQVRBIGlzIHVzZWQuCisqICBTVEFUVVNfT0s6IHJldHVybiBzdWNjZXNzZnVsbHkuCisqCisqIEVYQU1QTEUKKyogIDxjb2RlPgorKiBEQ0xfQ1RSTF9EQVRBX1Qgc3RhOworKiBEQ0xfSEFORExFIGhhbmRsZTE7CisqIGhhbmRsZTEgPSBEY2xTS0JEX09wZW4oRENMX0tCRCwgTU9EX01NSSk7CisqIERjbFNLQkRfQ29udHJvbChoYW5kbGUxLEtCRF9DTURfR0VUX0tFWV9FVkVOVF9DTlQgLCAoRENMX0NUUkxfREFUQV9UKikmc3RhKTsKKypyZXR1cm4gc3RhLnJLQkRDdHJrZXlDbnQua2V5Y250OworKiAgPC9jb2RlPgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNLQkRfQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFNLQkRfUmVnaXN0ZXJDYWxsYmFjaworKgorKiBERVNDUklQVElPTgorKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIHJlZ2lzdGVyIHRoZSBoYXJkd2FyZSBldmVudCBjYWxsYmFjayBmdW5jdGlvbi4KKyoKKyogUEFSQU1FVEVSUworKiAgaGFuZGxlOiB0aGUgdXNlciBoYW5kbGVyIG9mIHRoZSBrZXlwYWQsIHdoaWNoIGlzIHJldHVybmVkIGJ5IHRoZSBEY2xIS0JEX09wZW4gZnVuY3Rpb24uCisqICBldmVudDogIFJlc2VydmVkLgorKiAgY2FsbGJhY2s6IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyLiAgICAgICAgICAgCisqCisqIFJFVFVSTlMKKyogIERDTF9IQU5ETEVfSU5WQUxJRDogSW5jb3JyZWN0IGRldmljZSBJRC4KKyogIFNUQVRVU19JTlZBTElEX0VWRU5UOiB0aGUgZXZlbnQgcGFyYW1ldGVyIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGtleXBhZC4KKyogIFNUQVRVU19PSzogcmV0dXJuIHN1Y2Nlc3NmdWxseS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTS0JEX1JlZ2lzdGVyQ2FsbGJhY2soRENMX0hBTkRMRSBoYW5kbGUsIERDTF9FVkVOVCBldmVudCxQRk5fRENMX0NBTExCQUNLIGNhbGxiYWNrKTsKKyNlbmRpZgorI2VuZGlmCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvYWNjZXNzb3J5X3N3LmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2FjY2Vzc29yeV9zdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZGIzMGYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2FjY2Vzc29yeV9zdy5oCkBAIC0wLDAgKzEsMTMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgIGFjY2Vzc29yeV9zdy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1hdWlfU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgaXMgaW50ZW5kcyBmb3IgYWNjZXNzb3J5IGRldGVjdG9yIGRyaXZlciBhbmQgYWRhcHRpb24uCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIEFDQ0VTU1NPUllfU1dfSAorI2RlZmluZSBBQ0NFU1NTT1JZX1NXX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAvLyBUaGlzIEFQSSBpcyBmb3IgYXV4IHRhc2sgdG8gcmVnaXN0ZXIgSElTUiBoYW5kbGVyIGZvciBlYXJwaG9uZQorICAgLy8gUFdJQyB3aWxsIHVzZSBkZXRfZWFycGhvbmVfcHJlc2VudCgpIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIGluL291dAorICAgdm9pZCAoKnJlZ19lYXJwaG9uZV9oaXNyKSh2b2lkIChlYXJwaG9uZV9oaXNyX2NhbGxiYWNrKSh2b2lkKSk7CisKKyAgIC8vIFRoaXMgQVBJIGlzIGZvciBhdXggdGFzayB0byByZWdpc3RlciBISVNSIGhhbmRsZXIgZm9yIHR2b3V0CisgICAvLyBQV0lDIHdpbGwgdXNlIGRldF9lYXJwaG9uZV9wcmVzZW50KCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaXMgaW4vb3V0CisgICB2b2lkICgqcmVnX3R2b3V0X2hpc3IpKHZvaWQgKHR2b3V0X2hpc3JfY2FsbGJhY2spKHZvaWQpKTsKKworICAgLy8gVGhpcyBBUEkgaXMgZm9yIGF1eCB0YXNrIHRvIHJlZ2lzdGVyIEhJU1IgaGFuZGxlciBmb3IgZWFycGhvbmUga2V5CisgICAvLyBQV0lDIHdpbGwgdXNlIGRldF9lYXJwaG9uZV9wcmVzZW50KCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaXMgaW4vb3V0CisgICB2b2lkICgqcmVnX2tleV9oaXNyKSh2b2lkIChrZXlfaGlzcl9jYWxsYmFjaykodm9pZCkpOworCisgICAvLyBUaGlzIEFQSSBpcyB0byBzZXQgUy9XIGRlYm91bmNlIHRpbWUgZm9yIGVhcnBob25lIGNhYmxlCisgICAvLyBUaGUgdWludCBvZiBkZWJfdGltZSBpcyBpbiAxMG1zIChHUFQgdGljaykKKyAgIHZvaWQgKCpzZXRfZWFycGhvbmVfaW5fZGViX3RpbWUpKGthbF91aW50MzIgZGViX3RpbWUpOworIAorICAgLy8gVGhpcyBBUEkgaXMgdG8gc2V0IFMvVyBkZWJvdW5jZSB0aW1lIGZvciBlYXJwaG9uZSBjYWJsZQorICAgLy8gVGhlIHVpbnQgb2YgZGViX3RpbWUgaXMgaW4gMTBtcyAoR1BUIHRpY2spCisgICB2b2lkICgqc2V0X2VhcnBob25lX291dF9kZWJfdGltZSkoa2FsX3VpbnQzMiBkZWJfdGltZSk7CisgICAKKyAgIC8vIFRoaXMgQVBJIGlzIHRvIHNldCBTL1cgZGVib3VuY2UgdGltZSBmb3IgdHZvdXQgY2FibGUKKyAgIC8vIFRoZSB1aW50IG9mIGRlYl90aW1lIGlzIGluIDEwbXMgKEdQVCB0aWNrKQorICAgdm9pZCAoKnNldF90dm91dF9pbl9kZWJfdGltZSkoa2FsX3VpbnQzMiBkZWJfdGltZSk7CisgCisgICAvLyBUaGlzIEFQSSBpcyB0byBzZXQgUy9XIGRlYm91bmNlIHRpbWUgZm9yIHR2b3V0IGNhYmxlCisgICAvLyBUaGUgdWludCBvZiBkZWJfdGltZSBpcyBpbiAxMG1zIChHUFQgdGljaykKKyAgIHZvaWQgKCpzZXRfdHZvdXRfb3V0X2RlYl90aW1lKShrYWxfdWludDMyIGRlYl90aW1lKTsKKyAKKyAgIC8vIFRoaXMgQVBJIGlzIHRvIHNldCBTL1cgZGVib3VuY2UgdGltZSBmb3Iga2V5IHByZXNzCisgICAvLyBUaGUgdWludCBvZiBkZWJfdGltZSBpcyBpbiAxMG1zIChHUFQgdGljaykKKyAgIHZvaWQgKCpzZXRfa2V5X3ByZXNzX2RlYl90aW1lKShrYWxfdWludDMyIGRlYl90aW1lKTsKKyAKKyAgIC8vIFRoaXMgQVBJIGlzIHRvIHNldCBTL1cgZGVib3VuY2UgdGltZSBmb3Iga2V5IHJlbGVhc2UKKyAgIC8vIFRoZSB1aW50IG9mIGRlYl90aW1lIGlzIGluIDEwbXMgKEdQVCB0aWNrKQorICAgdm9pZCAoKnNldF9rZXlfcmVsZWFzZV9kZWJfdGltZSkoa2FsX3VpbnQzMiBkZWJfdGltZSk7CisgCisgICAvLyBJbml0IHRoZSBleHRlcm5hbCBhY2Nlc3NvcnkgZGV0ZWN0aW9uIG1lY2hhbmlzbQorICAgLy8gVGhlIEFQSSBpcyBjYWxsZWQgYXQgYm9vdCBwaGFzZQorICAgdm9pZCAoKmRydl9pbml0KSh2b2lkKTsKKyAKKyAgIC8vIFRoZSBBUEkgaXMgY2FsbGVkIGF0IGRyaXZlciBpbml0IHBoYXNlCisgICB2b2lkICgqZW5hYmxlX2ludHIpKHZvaWQpOworICAKK31hdXhfZXh0X2FjY2Vzc29yeV9kZXQ7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJdm9pZCAoKmF1eF9wbHVnX2luKSh2b2lkKTsKKwl2b2lkICgqYXV4X3BsdWdfb3V0KSh2b2lkKTsKKwl2b2lkICgqYXV4X3VhcnRfZnVuYykoa2FsX2Jvb2wgZW5hYmxlKTsKKwl2b2lkICgqYXV4X0hTVFZfZnVuYykoa2FsX2Jvb2wgZW5hYmxlKTsKK31hdXhfZnVuY19zdHJ1Y3Q7CisKKworCisjaWYgZGVmaW5lZChfX0RSVl9FWFRfQUNDRVNTT1JZX0RFVEVDVElPTl9fICkKK2V4dGVybiBhdXhfZXh0X2FjY2Vzc29yeV9kZXQgKmF1eF9leHRfYWNjX2RldDsKK2V4dGVybiBhdXhfZXh0X2FjY2Vzc29yeV9kZXQgKmF1eF9jdXN0b21fZ2V0X2V4dF9hY2Nlc3NvcnlfZGV0KHZvaWQpOworI2VuZGlmIC8vICNpZiBkZWZpbmVkKF9fRFJWX0VYVF9BQ0NFU1NPUllfREVURUNUSU9OX18gKQorCisKKworI2VuZGlmLy8jZGVmaW5lIEFDQ0VTU1NPUllfU1dfSApkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9hZGMuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvYWRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgwMDIxNQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvYWRjLmgKQEAgLTAsMCArMSw1MDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgYWRjLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aV9Tb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBpcyBpbnRlbmRzIGZvciBHUFQgZHJpdmVyLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQURDX0gKKyNkZWZpbmUgX0FEQ19IIAorCisvLyNpbmNsdWRlICJhZGNfaHcuaCIKKy8vI2luY2x1ZGUgImFkY19zdy5oIgorLy8jaW5jbHVkZSAiYWRjX2NoYW5uZWwuaCIgLy9yZW1vdmUgdGhpcyB3aGVuIGNoZWNrIGluIE1BVUkuIHJlbWluZCBVRU0gbm90IHVzZSBBRENfVkJBVAorCisvLyNpbmNsdWRlICJkcnZfZmVhdHVyZXMuaCIKKy8vI2luY2x1ZGUgImFkY19jaGFubmVsLmgiCisvLworLy90eXBlZGVmIGVudW0geworLy8gICB2YmF0X2FkY19jaGFubmVsPTAsCisvLyAgIHZpc2Vuc2VfYWRjX2NoYW5uZWwsCisvLyAgIHZiYXR0bXBfYWRjX2NoYW5uZWwsCisvLyAgIGJhdHR5cGVfYWRjX2NoYW5uZWwsCisvLyAgIHZjaGFyZ2VyX2FkY19jaGFubmVsLAorLy8gICBwY2J0bXBfYWRjX2NoYW5uZWwsCisvLyAgIGF1eF9hZGNfY2hhbm5lbCwKKy8vICAgY2hyX3VzYl9hZGNfY2hhbm5lbCwKKy8vICAgb3RnX3ZidXNfYWRjX2NoYW5uZWwsCisvLyAgIHJmdG1wX2FkY19jaGFubmVsCisvL30gYWRjX2NoYW5uZWxfdHlwZTsKKy8vCisvLy8qCisvLzEuIENoZWNrIGJpdCBvZiBBREMgKDFiKSwgKigweDgwMDAwMDIwKVsxOF09WzIxMF0KKy8vMi4gQURDX0IgKDZiKSwgKigweDgwMDAwMDIwKVsxNzoxMl09WzIwOToyMDRdCisvLzMuIEFEQ19BICg3YiksICooMHg4MDAwMDAyMClbMTE6NV09WzIwMzoxOTddCisvLyovCisvLyNkZWZpbmUgRUZVU0VfQURDX0JBU0UgMHg4MDAwMDAyMAorLy8jZGVmaW5lIEVGVVNFX0FEQ19BIDB4ODAwMDAwMjAKKy8vI2RlZmluZSBFRlVTRV9BRENfQiAweDgwMDAwMDIwCisvLyNkZWZpbmUgRUZVU0VfQURDX0VOQUJMRSAweDQwMDAwCisvLyNkZWZpbmUgRUZVU0VfQURDX0FfTUFTSyAweEZFMAorLy8jZGVmaW5lIEVGVVNFX0FEQ19CX01BU0sgMHgzRjAwMAorLy8jZGVmaW5lIEVGVVNFX0FEQ19BX1NISUZUIDUKKy8vI2RlZmluZSBFRlVTRV9BRENfQl9TSElGVCAxMgorLy8KKy8vCisvLyNpZiBkZWZpbmVkKERSVl9BRENfTElNSVRfUkVHKSB8fCBkZWZpbmVkKEZQR0EpCisvLyNpZiAhZGVmaW5lZChEUlZfQURDX09GRikKKy8vICAgLyoqKioqKioqKioqKioqKioqKioKKy8vICAgICogR1BBREMgUmVnaXN0ZXJzICoKKy8vICAgICoqKioqKioqKioqKioqKioqKiovCisvLyAgICNkZWZpbmUgQVVYQURDX0RBVEEgIChBVVhBRENfYmFzZSsweDAwMDApCS8qIFNhbXBsZWQgZGF0YSAgICAgICAgICAgICAqLworLy8gICAjZGVmaW5lIEFVWEFEQ19DVFJMICAoQVVYQURDX2Jhc2UrMHgwMDA0KQkvKiBDb250cm9sIG9mIEEvRCBDb252ZXJ0ZXIgKi8KKy8vICAgI2RlZmluZSBBVVhBRENfU1RBVCAgKEFVWEFEQ19iYXNlKzB4MDAwOCkJLyogQS9EIFN0YXR1cy4ucmVnPTAsaWYgd3JpdGUgQVVYQURDX0NUUkwgcmVnKi8KKy8vICAgI2RlZmluZSBBVVhBRENfQ1RSTDIgKEFVWEFEQ19iYXNlKzB4MDAwYykJLyogU3BlY2lhbCBDb250cm9sIG9mIEEvRCBDb252ZXJ0ZXIgKi8KKy8vICAgCisvLyAgICNkZWZpbmUgQVVYQURDX1NUQVRfUkRZICAgICAgICAgICAgIDB4MDAwMSAgICAgIC8qQURDIHJlYWR5Ki8KKy8vICAgCisvLyAgICNkZWZpbmUgQVVYQURDX0NUUkwyX0NBTEkgICAgICAgICAgIDB4MDAwMSAgICAgIC8qQURDIENhbGlicmF0aW9uKi8KKy8vICAgI2RlZmluZSBBVVhBRENfQ1RSTDJfTU9OICAgICAgICAgICAgMHgwMDIwICAgICAgLypEQUNNT04qLworLy8gICAjZGVmaW5lIEFVWEFEQ19DVFJMMl9CWVAgICAgICAgICAgICAweDAwNDAgICAgICAvKkRBQ0JZUCovCisvLyNlbmRpZiAvLyAjaWYgIWRlZmluZWQoRFJWX0FEQ19PRkYpCisvLyAgIAorLy8gICAvKkFEQyBwaW4gc2VsZWN0aW9uLCBBREMgcGh5LiBjaGFubmVsKi8KKy8vICAKKy8vICAgI2RlZmluZSBBRENfTUFYX0NIQU5ORUwgIDUKKy8vICAgI2RlZmluZSBBRENfRVJSX0NIQU5ORUxfTk8gICAgICAgNTAKKy8vI2VuZGlmICAgLyooRFJWX0FEQ19MSU1JVF9SRUcsRlBHQSkqLworLy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vI2lmIGRlZmluZWQoRFJWX0FEQ19CQVNJQ19SRUcpCisvLyNpZiAhZGVmaW5lZChEUlZfQURDX09GRikKKy8vICAgI2RlZmluZSBBVVhBRENfU1lOQyAgICAgICAgICAgICAgICAgICAgKEFVWEFEQ19iYXNlKzB4MDAwMCkKKy8vICAgI2RlZmluZSBBVVhBRENfSU1NICAgICAgICAgICAgICAgICAgICAgKEFVWEFEQ19iYXNlKzB4MDAwNCkKKy8vICAgI2RlZmluZSBBVVhBRENfU1lOICAgICAgICAgICAgICAgICAgICAgKEFVWEFEQ19iYXNlKzB4MDAwOCkKKy8vICAgI2RlZmluZSBBVVhBRENfQ09OICAgICAgICAgICAgICAgICAgICAgKEFVWEFEQ19iYXNlKzB4MDAwYykKKy8vICAgI2RlZmluZSBBVVhBRENfREFUKF9saW5lKSAgICAgICAgICAgICAgKEFVWEFEQ19iYXNlKzB4MDAxMCsoNCpfbGluZSkpCisvLworLy8gICAvKkFVWEFEQ19TWU5DKi8KKy8vICAgI2RlZmluZSBBVVhBRENfU1lOQ19DSEFOKF9saW5lKSAgICAgICAgKDB4MDAwMTw8X2xpbmUpICAgLypUaW1lIGV2ZW50IDEqLworLy8gICAKKy8vICAgLypBVVhBRENfSU1NKi8KKy8vICAgI2RlZmluZSBBVVhBRENfSU1NX0NIQU4oX2xpbmUpICAgICAgICAgKDB4MDAwMTw8X2xpbmUpCisvLyAgIAorLy8gICAvKkFVWEFEQ19TWU4qLworLy8gICAjZGVmaW5lIEFVWEFEQ19TWU5fQklUICAgICAgICAgICAgICAgICAoMHgwMDAxKSAgICAgICAgICAvKlRpbWUgZXZlbnQgMCovCisvLyAgIAorLy8gICAvKkFVWEFEQ19DT04qLworLy8gICAjZGVmaW5lIEFVWEFEQ19DT05fUlVOICAgICAgICAgICAgICAgICAoMHgwMDAxKQorLy8jaWZuZGVmIERSVl9BRENfTk9fVEVTVF9EQUNNT04KKy8vICAgI2RlZmluZSBBVVhBRENfQ09OX0NBTElfTUFTSyAgICAgICAgICAgKDB4MDA3YykKKy8vICAgI2RlZmluZSBBVVhBRENfQ09OX1RFU1REQUNNT04gICAgICAgICAgKDB4MDA4MCkKKy8vI2VuZGlmIC8vICNpZm5kZWYgRFJWX0FEQ19OT19URVNUX0RBQ01PTgorLy8jaWYgZGVmaW5lZChEUlZfQURDX1NXX1JFU0VUKQorLy8gICAjZGVmaW5lIEFVWEFEQ19DT05fU1dfUkVTRVQgICAgICAgICAgICAoMHgwMDgwKQorLy8jZW5kaWYgLy8gI2lmIGRlZmluZWQoRFJWX0FEQ19TV19SRVNFVCkKKy8vICAgI2RlZmluZSBBVVhBRENfQ09OX0FVVE9DTFIwICAgICAgICAgICAgKDB4MDEwMCkKKy8vICAgI2RlZmluZSBBVVhBRENfQ09OX0FVVE9DTFIxICAgICAgICAgICAgKDB4MDIwMCkKKy8vICAgI2RlZmluZSBBVVhBRENfQ09OX1BVV0FJVF9FTiAgICAgICAgICAgKDB4MDgwMCkKKy8vICAgI2RlZmluZSBBVVhBRENfQ09OX0FVVE9TRVQgICAgICAgICAgICAgKDB4ODAwMCkKKy8vI2VuZGlmIC8vICNpZiAhZGVmaW5lZChEUlZfQURDX09GRikKKy8vCisvLworLy8KKy8vICAgI2lmIGRlZmluZWQoRFJWX0FEQ19NQVhfQ0hfNSkKKy8vICAgICAgI2RlZmluZSBBRENfTUFYX0NIQU5ORUwgIDUKKy8vICAgI2VuZGlmICAgLypEUlZfQURDX01BWF9DSF81Ki8KKy8vICAgCisvLyAgICNpZiBkZWZpbmVkKERSVl9BRENfTUFYX0NIXzYpCisvLyAgICAgICNkZWZpbmUgQURDX01BWF9DSEFOTkVMICA2CisvLyAgICNlbmRpZiAgIC8qRFJWX0FEQ19NQVhfQ0hfNiovCisvLworLy8gICAjaWYgZGVmaW5lZChEUlZfQURDX01BWF9DSF83KQorLy8gICAgICAjZGVmaW5lIEFEQ19NQVhfQ0hBTk5FTCAgNworLy8gICAjZW5kaWYgICAvKkRSVl9BRENfTUFYX0NIXzcqLworLy8gICAKKy8vICAgI2lmIGRlZmluZWQoRFJWX0FEQ19NQVhfQ0hfOCkKKy8vICAgICAgI2RlZmluZSBBRENfTUFYX0NIQU5ORUwgIDgKKy8vICAgI2VuZGlmICAgLypEUlZfQURDX01BWF9DSF84Ki8KKy8vICAgCisvLyAgICNpZiBkZWZpbmVkKERSVl9BRENfTUFYX0NIXzkpCisvLyAgICAgICNkZWZpbmUgQURDX01BWF9DSEFOTkVMICA5CisvLyAgICNlbmRpZiAgIC8qRFJWX0FEQ19NQVhfQ0hfOSovCisvLyAgIAorLy8gICAjaWYgZGVmaW5lZChEUlZfQURDX01BWF9DSF8xMCkKKy8vICAgICAgI2RlZmluZSBBRENfTUFYX0NIQU5ORUwgIDEwCisvLyAgICNlbmRpZiAgIC8qRFJWX0FEQ19NQVhfQ0hfMTAqLworLy8gICAKKy8vICAgI2lmIGRlZmluZWQoRFJWX0FEQ19NQVhfQ0hfMTMpCisvLyAgICAgICNkZWZpbmUgQURDX01BWF9DSEFOTkVMICAxMworLy8gICAjZW5kaWYgICAvKkRSVl9BRENfTUFYX0NIXzEwKi8KKy8vCisvLyAgICNkZWZpbmUgQURDX0VSUl9DSEFOTkVMX05PICAgICAgIDUwCisvLyNlbmRpZiAgIC8qKE1UNjIwNUIsTVQ2MjE4KSovCisvLworLy8jaWYgKCBkZWZpbmVkKERSVl9BRENfQkFTSUNfUkVHKSB8fCBkZWZpbmVkKERSVl9BRENfVERNQV9USU1FKSApCisvLyNpZiAhZGVmaW5lZChEUlZfQURDX09GRikKKy8vICAgI2lmIGRlZmluZWQoRFJWX0FEQ19URE1BX0VWRU5UX1JFR19QT1MxKQorLy8gICAjZGVmaW5lIEFVWEFEQ19URE1BX0VWRU5UMCAgICAgICAgICAgICAoVERNQV9iYXNlKzB4MWMwKQorLy8gICAjZGVmaW5lIEFVWEFEQ19URE1BX0VWRU5UMSAgICAgICAgICAgICAoVERNQV9iYXNlKzB4MWM0KSAgIAorLy8gICAjZWxpZiBkZWZpbmVkKERSVl9BRENfVERNQV9FVkVOVF9SRUdfUE9TMikKKy8vICAgI2RlZmluZSBBVVhBRENfVERNQV9FVkVOVDAgICAgICAgICAgICAgKFRETUFfYmFzZSsweDQwMCkKKy8vICAgCisvLyAgICNpZiBkZWZpbmVkKE1UNjIyOV9TMDApCisvLyAgICNkZWZpbmUgQVVYQURDX1RETUFfRVZFTlQxICAgICAgICAgICAgIChURE1BX2Jhc2UrMHg0MDApLypIVyBidWcqLworLy8gICAjZWxzZQorLy8gICAjZGVmaW5lIEFVWEFEQ19URE1BX0VWRU5UMSAgICAgICAgICAgICAoVERNQV9iYXNlKzB4NDA0KS8qKi8gICAKKy8vICAgI2VuZGlmCisvLyAgIAorLy8gICAjZWxzZQorLy8gICAjZGVmaW5lIEFVWEFEQ19URE1BX0VWRU5UMCAgICAgICAgICAgICAoVERNQV9iYXNlKzB4MWIwKQorLy8gICAjZGVmaW5lIEFVWEFEQ19URE1BX0VWRU5UMSAgICAgICAgICAgICAoVERNQV9iYXNlKzB4MWI0KQorLy8gICAjZW5kaWYKKy8vICAgCisvLyAgICNpZiBkZWZpbmVkKERSVl9BRENfVERNQV9FTl9SRUdfUE9TMSkKKy8vICAgI2RlZmluZSBBVVhBRENfVERNQV9FTiAgICAgICAgICAgICAgICAgKFRETUFfYmFzZSsweDE2QykKKy8vICAgI2Vsc2UKKy8vICAgI2RlZmluZSBBVVhBRENfVERNQV9FTiAgICAgICAgICAgICAgICAgKFRETUFfYmFzZSsweDE2NCkKKy8vICAgI2VuZGlmCisvLyAgIC8qQVVYQURDX1RETUFfRU4qLworLy8gICAjZGVmaW5lIEFVWEFEQ19URE1BX0VOX0VWVDAgICAgICAgICAgICAoMHgwMDAxKQorLy8gICAjZGVmaW5lIEFVWEFEQ19URE1BX0VOX0VWVDEgICAgICAgICAgICAoMHgwMDAyKQorLy8jZW5kaWYgLy8gI2lmICFkZWZpbmVkKERSVl9BRENfT0ZGKQorLy8jZW5kaWYgLy8gI2lmICggZGVmaW5lZChEUlZfQURDX0JBU0lDX1JFRykgfHwgZGVmaW5lZChEUlZfQURDX1RETUFfVElNRSkgKQorLy8KKy8vCisvLyNpZiBkZWZpbmVkKERSVl9BRENfTk9UX0VYSVNUKQorLy8gICAjZGVmaW5lIEFEQ19NQVhfQ0hBTk5FTCAgMQorLy8gICAjZGVmaW5lIEFEQ19FUlJfQ0hBTk5FTF9OTyAgICAgICA1MAorLy8jZW5kaWYgLy8gI2lmIGRlZmluZWQoRFJWX0FEQ19OT1RfRVhJU1QpCisvLworLy8jaWYgIWRlZmluZWQoRFJWX0FEQ19PRkYpCisvLyNpZiAhZGVmaW5lZChBRENfTUFYX0NIQU5ORUwpCisvLyAgICNkZWZpbmUgQURDX01BWF9DSEFOTkVMICAxCisvLyAgICNkZWZpbmUgQURDX0VSUl9DSEFOTkVMX05PICAgICAgIDUwCisvLyNlbmRpZiAvLyAjaWYgZGVmaW5lZChEUlZfQURDX05PVF9FWElTVCkKKy8vI2VuZGlmIC8vICNpZiAhZGVmaW5lZChEUlZfQURDX09GRikKKy8vCisvLyNpZiAxCisvLyAgIHR5cGVkZWYgc3RydWN0CisvLyAgIHsKKy8vICAgICAga2FsX2ludDMyIEFEQ1Nsb3BlW0FEQ19NQVhfQ0hBTk5FTF07CisvLyAgICAgIGthbF9pbnQzMiBBRENPZmZzZXRbQURDX01BWF9DSEFOTkVMXTsKKy8vICAgfUFEQ19DQUxJREFUQTsKKy8vI2Vsc2UKKy8vICAgdHlwZWRlZiBzdHJ1Y3QKKy8vICAgeworLy8gICAgICBrYWxfaW50MzIgQURDU2xvcGVbQURDX01BWF9DSEFOTkVMXTsKKy8vICAgICAga2FsX2ludDMyIEFEQ09mZnNldFtBRENfTUFYX0NIQU5ORUxdOworLy8gICB9QURDX0NBTElEQVRBOworLy8jZW5kaWYKKy8vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyNpZiBkZWZpbmVkKERSVl9NSVNDX0FEQ19NRUFTVVJFX1JFTU9WRV9JUlFNQVNLKQorLy8vLyBEZWZpbmUgdG8gcGVyZm9ybSBBREMgcmFjZSBjb25kaXRpb24gY2hlY2sgd2hlbiBwcm9jZXNzaW5nIGNyaXRpY2FsIGRhdGEgcHJvY2VzcworLy8jZGVmaW5lIEFEQ19SQUNFX0NPTkRJVElPTl9DSEVDSworLy8vLyBEZWZpbmUgdG8gcmVtb3ZlIElSUSBtYXNrL3Jlc3RvcmUgZm9yIEFEQyBtZWFzdXJlbWVudAorLy8jZGVmaW5lIEFEQ19SRU1PVkVfSVJRTUFTSworLy8jZW5kaWYgLy8gI2lmIGRlZmluZWQoRFJWX01JU0NfQURDX01FQVNVUkVfUkVNT1ZFX0lSUU1BU0spCisvLworLy8jaWYgZGVmaW5lZChBRENfUkFDRV9DT05ESVRJT05fQ0hFQ0spCisvL2V4dGVybiBrYWxfYm9vbCBnQURDX1JDX0NoZWNrOworLy8vLyBNb0RJUyBwYXJzZXIgc2tpcCBzdGFydAorLy8vLyBUaGUgZm9sbG93aW5nIHR3byBBUElzIGFyZSBwcml2YXRlIEFQSXMsIE5PVCBleHBvcnRlZCBhcyBwdWJsaWMgQVBJcworLy9leHRlcm4gdm9pZCBBRENSQ0NoZWNrQW5kTG9jayh2b2lkKTsKKy8vZXh0ZXJuIHZvaWQgQURDUkNSZWxlYXNlKHZvaWQpOworLy8vLyBNb0RJUyBwYXJzZXIgc2tpcCBlbmQKKy8vI2VuZGlmIC8vICNpZiBkZWZpbmVkKEFEQ19SQUNFX0NPTkRJVElPTl9DSEVDSykKKy8vCisvLyNpZiBkZWZpbmVkKEFEQ19SRU1PVkVfSVJRTUFTSykKKy8vI2RlZmluZSBBRENTQVZFQU5EU0VUSVJRTUFTSyhtYXNrKQl7fQorLy8jZGVmaW5lIEFEQ1JFU1RPUkVJUlFNQVNLKG1hc2spCQl7fQorLy8jZWxzZSAvLyAjaWYgZGVmaW5lZChBRENfUkVNT1ZFX0lSUU1BU0spCisvLyNkZWZpbmUgQURDU0FWRUFORFNFVElSUU1BU0sobWFzaykJe21hc2sgPSBTYXZlQW5kU2V0SVJRTWFzaygpO30KKy8vI2RlZmluZSBBRENSRVNUT1JFSVJRTUFTSyhtYXNrKQkJUmVzdG9yZUlSUU1hc2sobWFzaykKKy8vI2VuZGlmIC8vICNpZiBkZWZpbmVkKEFEQ19SRU1PVkVfSVJRTUFTSykKKy8vCisvLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vLy8gTW9ESVMgcGFyc2VyIHNraXAgc3RhcnQKKy8vLy8gVGhlIGZvbGxvd2luZyBBUElzIGFyZSBwcml2YXRlIEFQSXMKKy8vZXh0ZXJuIGthbF91aW50MTYgQURDX0dldERhdGEoa2FsX3VpbnQ4IHNlbCk7CisvLy8vIGFkYy5jCisvL2V4dGVybiBrYWxfdWludDE2IEFEQ19JTU1fRGF0YShrYWxfdWludDE2IGNoYW5uZWwpOworLy9leHRlcm4ga2FsX3VpbnQxNiBBRENfU1lOQ19EYXRhKGthbF91aW50MTYgY2hhbm5lbCk7CisvL2V4dGVybiB2b2lkIEFEQ19Jbml0KHZvaWQpOworLy8KKy8vLy8gTW9ESVMgcGFyc2VyIHNraXAgZW5kCisvLworLy8jaWYgIWRlZmluZWQoRFJWX0FEQ19PRkYpCisvLyNpZiBkZWZpbmVkKF9fRFJWX0NPTU1fUkVHX0RCR19fKSAmJiBkZWZpbmVkKF9fRFJWX0FEQ19SRUdfREJHX18pCisvLyNkZWZpbmUgRFJWX0FEQ19Xcml0ZVJlZyhhZGRyLGRhdGEpICAgICAgICAgICAgICBEUlZfREJHX1dyaXRlUmVnKGFkZHIsZGF0YSkKKy8vI2RlZmluZSBEUlZfQURDX1JlZyhhZGRyKSAgICAgICAgICAgICAgICAgICAgICAgIERSVl9EQkdfUmVnKGFkZHIpICAgICAgICAgICAgICAgICAgICAgIAorLy8jZGVmaW5lIERSVl9BRENfV3JpdGVSZWczMihhZGRyLGRhdGEpICAgICAgICAgICAgRFJWX0RCR19Xcml0ZVJlZzMyKGFkZHIsZGF0YSkgICAgICAgICAgCisvLyNkZWZpbmUgRFJWX0FEQ19SZWczMihhZGRyKSAgICAgICAgICAgICAgICAgICAgICBEUlZfREJHX1JlZzMyKGFkZHIpICAgICAgICAgICAgICAgICAgICAKKy8vI2RlZmluZSBEUlZfQURDX1dyaXRlUmVnOChhZGRyLGRhdGEpICAgICAgICAgICAgIERSVl9EQkdfV3JpdGVSZWc4KGFkZHIsZGF0YSkgICAgICAgICAgIAorLy8jZGVmaW5lIERSVl9BRENfUmVnOChhZGRyKSAgICAgICAgICAgICAgICAgICAgICAgRFJWX0RCR19SZWc4KGFkZHIpICAgICAgICAgICAgICAgICAgICAgCisvLyNkZWZpbmUgRFJWX0FEQ19DbGVhckJpdHMoYWRkcixkYXRhKSAgICAgICAgICAgICBEUlZfREJHX0NsZWFyQml0cyhhZGRyLGRhdGEpICAgICAgICAgICAKKy8vI2RlZmluZSBEUlZfQURDX1NldEJpdHMoYWRkcixkYXRhKSAgICAgICAgICAgICAgIERSVl9EQkdfU2V0Qml0cyhhZGRyLGRhdGEpICAgICAgICAgICAgIAorLy8jZGVmaW5lIERSVl9BRENfU2V0RGF0YShhZGRyLCBiaXRtYXNrLCB2YWx1ZSkgICAgRFJWX0RCR19TZXREYXRhKGFkZHIsIGJpdG1hc2ssIHZhbHVlKSAgCisvLyNkZWZpbmUgRFJWX0FEQ19DbGVhckJpdHMzMihhZGRyLGRhdGEpICAgICAgICAgICBEUlZfREJHX0NsZWFyQml0czMyKGFkZHIsZGF0YSkgICAgICAgICAKKy8vI2RlZmluZSBEUlZfQURDX1NldEJpdHMzMihhZGRyLGRhdGEpICAgICAgICAgICAgIERSVl9EQkdfU2V0Qml0czMyKGFkZHIsZGF0YSkgICAgICAgICAgIAorLy8jZGVmaW5lIERSVl9BRENfU2V0RGF0YTMyKGFkZHIsIGJpdG1hc2ssIHZhbHVlKSAgRFJWX0RCR19TZXREYXRhMzIoYWRkciwgYml0bWFzaywgdmFsdWUpCisvLyNkZWZpbmUgRFJWX0FEQ19DbGVhckJpdHM4KGFkZHIsZGF0YSkgICAgICAgICAgICBEUlZfREJHX0NsZWFyQml0czgoYWRkcixkYXRhKSAgICAgICAgICAKKy8vI2RlZmluZSBEUlZfQURDX1NldEJpdHM4KGFkZHIsZGF0YSkgICAgICAgICAgICAgIERSVl9EQkdfU2V0Qml0czgoYWRkcixkYXRhKSAgICAgICAgICAgIAorLy8jZGVmaW5lIERSVl9BRENfU2V0RGF0YTgoYWRkciwgYml0bWFzaywgdmFsdWUpICAgRFJWX0RCR19TZXREYXRhOChhZGRyLCBiaXRtYXNrLCB2YWx1ZSkgCisvLyNlbHNlCisvLyNkZWZpbmUgRFJWX0FEQ19Xcml0ZVJlZyhhZGRyLGRhdGEpICAgICAgICAgICAgICBEUlZfV3JpdGVSZWcoYWRkcixkYXRhKQorLy8jZGVmaW5lIERSVl9BRENfUmVnKGFkZHIpICAgICAgICAgICAgICAgICAgICAgICAgRFJWX1JlZyhhZGRyKSAgICAgICAgICAgICAgICAgICAgICAKKy8vI2RlZmluZSBEUlZfQURDX1dyaXRlUmVnMzIoYWRkcixkYXRhKSAgICAgICAgICAgIERSVl9Xcml0ZVJlZzMyKGFkZHIsZGF0YSkgICAgICAgICAgCisvLyNkZWZpbmUgRFJWX0FEQ19SZWczMihhZGRyKSAgICAgICAgICAgICAgICAgICAgICBEUlZfUmVnMzIoYWRkcikgICAgICAgICAgICAgICAgICAgIAorLy8jZGVmaW5lIERSVl9BRENfV3JpdGVSZWc4KGFkZHIsZGF0YSkgICAgICAgICAgICAgRFJWX1dyaXRlUmVnOChhZGRyLGRhdGEpICAgICAgICAgICAKKy8vI2RlZmluZSBEUlZfQURDX1JlZzgoYWRkcikgICAgICAgICAgICAgICAgICAgICAgIERSVl9SZWc4KGFkZHIpICAgICAgICAgICAgICAgICAgICAgCisvLyNkZWZpbmUgRFJWX0FEQ19DbGVhckJpdHMoYWRkcixkYXRhKSAgICAgICAgICAgICBEUlZfQ2xlYXJCaXRzKGFkZHIsZGF0YSkgICAgICAgICAgIAorLy8jZGVmaW5lIERSVl9BRENfU2V0Qml0cyhhZGRyLGRhdGEpICAgICAgICAgICAgICAgRFJWX1NldEJpdHMoYWRkcixkYXRhKSAgICAgICAgICAgICAKKy8vI2RlZmluZSBEUlZfQURDX1NldERhdGEoYWRkciwgYml0bWFzaywgdmFsdWUpICAgIERSVl9TZXREYXRhKGFkZHIsIGJpdG1hc2ssIHZhbHVlKSAgCisvLyNkZWZpbmUgRFJWX0FEQ19DbGVhckJpdHMzMihhZGRyLGRhdGEpICAgICAgICAgICBEUlZfQ2xlYXJCaXRzMzIoYWRkcixkYXRhKSAgICAgICAgIAorLy8jZGVmaW5lIERSVl9BRENfU2V0Qml0czMyKGFkZHIsZGF0YSkgICAgICAgICAgICAgRFJWX1NldEJpdHMzMihhZGRyLGRhdGEpICAgICAgICAgICAKKy8vI2RlZmluZSBEUlZfQURDX1NldERhdGEzMihhZGRyLCBiaXRtYXNrLCB2YWx1ZSkgIERSVl9TZXREYXRhMzIoYWRkciwgYml0bWFzaywgdmFsdWUpCisvLyNkZWZpbmUgRFJWX0FEQ19DbGVhckJpdHM4KGFkZHIsZGF0YSkgICAgICAgICAgICBEUlZfQ2xlYXJCaXRzOChhZGRyLGRhdGEpICAgICAgICAgIAorLy8jZGVmaW5lIERSVl9BRENfU2V0Qml0czgoYWRkcixkYXRhKSAgICAgICAgICAgICAgRFJWX1NldEJpdHM4KGFkZHIsZGF0YSkgICAgICAgICAgICAKKy8vI2RlZmluZSBEUlZfQURDX1NldERhdGE4KGFkZHIsIGJpdG1hc2ssIHZhbHVlKSAgIERSVl9TZXREYXRhOChhZGRyLCBiaXRtYXNrLCB2YWx1ZSkgCisvLyNlbmRpZiAvLyNpZiBkZWZpbmVkKF9fRFJWX0NPTU1fUkVHX0RCR19fKSAmJiBkZWZpbmVkKF9fRFJWX0FEQ19SRUdfREJHX18pCisvLworLy8jZWxzZSAvLyFkZWZpbmVkKERSVl9BRENfT0ZGKQorLy8KKy8vI2RlZmluZSBEUlZfQURDX1dyaXRlUmVnKGFkZHIsZGF0YSkgICAgICAgICAgICAgIAorLy8jZGVmaW5lIERSVl9BRENfUmVnKGFkZHIpICAgICAgICAgICAgICAgICAgICAgICAgZHJ2X2R1bW15X3JldHVybigpCisvLyNkZWZpbmUgRFJWX0FEQ19Xcml0ZVJlZzMyKGFkZHIsZGF0YSkgICAgICAgICAgICAKKy8vI2RlZmluZSBEUlZfQURDX1JlZzMyKGFkZHIpICAgICAgICAgICAgICAgICAgICAgIGRydl9kdW1teV9yZXR1cm4oKQorLy8jZGVmaW5lIERSVl9BRENfV3JpdGVSZWc4KGFkZHIsZGF0YSkgICAgICAgICAgICAgCisvLyNkZWZpbmUgRFJWX0FEQ19SZWc4KGFkZHIpICAgICAgICAgICAgICAgICAgICAgICBkcnZfZHVtbXlfcmV0dXJuKCkKKy8vI2RlZmluZSBEUlZfQURDX0NsZWFyQml0cyhhZGRyLGRhdGEpICAgICAgICAgICAgIAorLy8jZGVmaW5lIERSVl9BRENfU2V0Qml0cyhhZGRyLGRhdGEpICAgICAgICAgICAgICAgCisvLyNkZWZpbmUgRFJWX0FEQ19TZXREYXRhKGFkZHIsIGJpdG1hc2ssIHZhbHVlKSAgICAKKy8vI2RlZmluZSBEUlZfQURDX0NsZWFyQml0czMyKGFkZHIsZGF0YSkgICAgICAgICAgIAorLy8jZGVmaW5lIERSVl9BRENfU2V0Qml0czMyKGFkZHIsZGF0YSkgICAgICAgICAgICAgCisvLyNkZWZpbmUgRFJWX0FEQ19TZXREYXRhMzIoYWRkciwgYml0bWFzaywgdmFsdWUpICAKKy8vI2RlZmluZSBEUlZfQURDX0NsZWFyQml0czgoYWRkcixkYXRhKSAgICAgICAgICAgIAorLy8jZGVmaW5lIERSVl9BRENfU2V0Qml0czgoYWRkcixkYXRhKSAgICAgICAgICAgICAgCisvLyNkZWZpbmUgRFJWX0FEQ19TZXREYXRhOChhZGRyLCBiaXRtYXNrLCB2YWx1ZSkgICAKKy8vCisvLyNlbmRpZiAvLyFkZWZpbmVkKERSVl9BRENfT0ZGKQorCisjZW5kaWYgICAvKl9BRENfSCovCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvYWRjX2NhbGkuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvYWRjX2NhbGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjM3OTcxCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9hZGNfY2FsaS5oCkBAIC0wLDAgKzEsODkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgYWRjX2NhbGkuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpX1NvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGludGVuZHMgZm9yIGFkYyBjYWxpYnJhdGlvbiBzdHJ1Y3R1cmUuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQURDX0NBTElfSAorI2RlZmluZSBfQURDX0NBTElfSCAKKworI2luY2x1ZGUgImRydl9mZWF0dXJlc19hZGMuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKy8vQmVjYXVzZSBvZiBBbmRyb2lkIG1heSB1cGRhdGUgbW9kZW0gdmVyc2lvbiBvbiB1c2VyIHNpZGUuCisvL0RvIG5vdCBjaGFuZ2UgdGhpcyBzdHJ1Y3R1cmUgISEKKyAgIGthbF9pbnQzMiBBRENTbG9wZVtBRENfTUFYX0NIQU5ORUxdOworICAga2FsX2ludDMyIEFEQ09mZnNldFtBRENfTUFYX0NIQU5ORUxdOworfUFEQ19DQUxJREFUQTsKKworI2VuZGlmICAgLypfQURDX0NBTElfSCovCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvYWxlcnRlcl9zdy5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9hbGVydGVyX3N3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk2M2I2MgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvYWxlcnRlcl9zdy5oCkBAIC0wLDAgKzEsMjM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgIGFsZXJ0ZXJfc3cuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpX1NvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGludGVuZGVkIGZvciBhbGVydGVyIGRyaXZlciBhbmQgbWVsb2R5IGFkYXB0aW9uLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgQUxFUlRFUl9TV19ICisjZGVmaW5lIEFMRVJURVJfU1dfSAorI2luY2x1ZGUgImRjbC5oIgorLyoKKyogVGhlIG91dHB1dCBvZiBBbGVydGVyIGhhcyB0byBzb3VyY2VzOgorKiBvbmUgaXMgdGhlIGVuaGFuY2VkIHB3bSBvdXRwdXQgc2lnbmFsLHdoaWNoIGlzIGltcGxlbWVudGVkIGVtYmVkZGVkIGluIEFsZXJ0ZXIgbW9kdWxlOworKiB0aGUgb3RoZXIgaXMgUERNIHNpZ25hbCBmcm9tIERTUCBkb21haW4gZGlyZWN0bHkuCisqLworI2RlZmluZSBwd20gCTAKKyNkZWZpbmUgcGRtIAkxCisKKy8qU2VsZWN0IFBXTSBXYXZlZm9ybSBjbG9jayovCit0eXBlZGVmIGVudW0gCit7CisgICBjMTNfMU1IWiwgLyoxM00gSHoqLworICAgYzEzXzJNSFosIC8qMTMvMk0gSHoqLworICAgYzEzXzRNSFosIC8qMTMvNE0gSHoqLworICAgYzEzXzhNSFogIC8qMTMvOE0gSHoqLworfUFMQ2xvY2s7CisvKgorKiBzZWxlY3QgQWxlcnRlciBtb2RlCisqIEluIG1vZGUgMSwgdGhlIHBvbGFyaXR5IG9mIGFsZXJ0ZXIgb3V0cHV0IHNpZ25hbCBhY2NvcmRpbmcgdG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGludGVybmFsIGNvdW50ZXIxIGFuZCB0aGUgcHJvZ3JhbW1lZCB0aHJlc2hvbGQgd2lsbCBiZSBpbnZlcnRlZCBlYWNoIHRpbWUgaW50ZXJuYWwKKyogY291bnRlcjIgcmVhY2hlcyB6ZXJvLiAKKyoKKyogSW4gbW9kZTIsIGVhY2ggdGltZSB0aGUgaW50ZXJuYWwgY291bnRlcjIgY291bnQgYmFja3dhcmRzIHRvIHplcm8gdGhlIGFsZXJ0ZXIgb3V0cHV0IHNpZ25hbCBpcyBub3JtYWwKKyogcHdtIHNpZ25hbCAoaS5lLiBzaWduYWwgaXMgbG93IGFzIGxvbmcgYXMgdGhlIGludGVybmFsIGNvdW50ZXIxIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbHMgdG8gQUxFUlRFUl9USFJFUywgYW5kIGl0CisqIGlzIGhpZ2ggd2hlbiB0aGUgaW50ZXJuYWwgY291bnRlcjEgaXMgbGVzcyB0aGFuIEFMRVJURVJfVEhSRVMpIG9yIGxvdyBzdGF0ZSBieSB0dXJucy4gCisKKyogSW4gbW9kZTMsIHRoZSB2YWx1ZSBvZiBpbnRlcm5hbCBjb3VudGVyMiBoYXMgbm8gZWZmZWN0IG9uIG91dHB1dCBzaWduYWwsIGkuZS4gdGhlIGFsZXJ0ZXIgb3V0cHV0IHNpZ25hbCBpcyBsb3cgYXMgbG9uZyBhcyB0aGUgaW50ZXJuYWwgY291bnRlcjEgdmFsdWUgaXMgYWJvdmUKKyogdGhlIHByb2dyYW1tZWQgdGhyZXNob2xkIGFuZCBpcyBoaWdoIHRoZSBpbnRlcm5hbCBjb3VudGVyMSBpcyBsZXNzIHRoYW4gQUxFUlRFUl9USFJFUyB3aGVuIG5vIG1hdHRlciB3aGF0IHZhbHVlIHRoZQorKiBpbnRlcm5hbCBjb3VudGVyMiBpcy4KKyovCit0eXBlZGVmIGVudW0gCit7CisgICBtMSwgLypNb2RlIDEgc2VsZWN0Ki8KKyAgIG0yLCAvKk1vZGUgMiBzZWxlY3QqLworICAgbTMgIC8qTW9kZSAzIHNlbGVjdCovCit9QUxNb2RlOworCit0eXBlZGVmIHZvaWQgKCpEQ0xfQUxFUlRFUl9DT05GSUdVUkUpKGthbF91aW50MzIgZnJlcSwga2FsX3VpbnQ4IGR1dHkpOwordHlwZWRlZiB2b2lkICgqRENMX0FMRVJURVJfU1RBUlQpKHZvaWQpOwordHlwZWRlZiB2b2lkICgqRENMX0FMRVJURVJfU1RPUCkodm9pZCk7Cit0eXBlZGVmIHZvaWQgKCpEQ0xfQUxFUlRFUl9QV1JPUEVOKShrYWxfYm9vbCBFTkFCTEUpOwordHlwZWRlZiB2b2lkICgqRENMX0FMRVJURVJfT1VUUFVUKShrYWxfdWludDggb3V0dHlwZSk7Cit0eXBlZGVmIHZvaWQgKCpEQ0xfQUxFUlRFUl9QTEFZQUxURVJOT1RFUykoa2FsX2Jvb2wgKCpHZXROb3RlY2FsbGJhYykoQnV6Tm90ZVN0cnVjdCAqQnV6KSwgdm9pZCAoKmVuZG9mQWx0ZXIpKHZvaWQpKTsKK3R5cGVkZWYgdm9pZCAoKkRDTF9BTEVSVEVSX1NUT1BBTEVSVEVSTk9URVMpKHZvaWQpOwordHlwZWRlZiB2b2lkICgqRENMX0FMRVJURVJfU0VUQlVaVk9MVU1FKShrYWxfdWludDggdm9sdW1uKTsKK3R5cGVkZWYgdm9pZCAoKkRDTF9BTEVSVEVSX0NPTkZJRykoQUxNb2RlIG1vZGUsIEFMQ2xvY2sgQ2xvY2spOwordHlwZWRlZiB2b2lkICgqRENMX0FMRVJURVJfR0VUQ1VSUkVOVF9MRVZFTCkodm9pZCk7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfQUxFUlRFUl9DT05GSUdVUkUgICAgICAgICBjb25maWd1cmU7CisgICBEQ0xfQUxFUlRFUl9TVEFSVCAgICAgICAgICAgICBzdGFydDsKKyAgIERDTF9BTEVSVEVSX1NUT1AgICAgICAgICAgICAgIHN0b3A7CisgICBEQ0xfQUxFUlRFUl9QV1JPUEVOICAgICAgICAgICBwd3JvcGVuOworICAgRENMX0FMRVJURVJfT1VUUFVUICAgICAgICAgICAgb3V0cHV0OworICAgRENMX0FMRVJURVJfUExBWUFMVEVSTk9URVMgICAgcGxheW5vdGVzOworICAgRENMX0FMRVJURVJfU1RPUEFMRVJURVJOT1RFUyAgc3RvcG5vdGVzOworICAgRENMX0FMRVJURVJfU0VUQlVaVk9MVU1FICAgICAgc2V0YnV6dm9sdW1lOworICAgRENMX0FMRVJURVJfR0VUQ1VSUkVOVF9MRVZFTCAgZ2V0bGV2ZWw7Cit9QWxlcnRlckRyaXZlcl90OworCitleHRlcm4gdm9pZCBBTEVSVEVSX091dHB1dChrYWxfdWludDggb3V0dHlwZSk7CitleHRlcm4gdm9pZCBQbGF5QWx0ZXJOb3RlcyhrYWxfYm9vbCAoKkdldE5vdGVjYWxsYmFjKShCdXpOb3RlU3RydWN0ICpCdXopLCB2b2lkICgqZW5kb2ZBbHRlcikodm9pZCkpOworZXh0ZXJuIHZvaWQgU3RvcEFsdGVyTm90ZXModm9pZCk7CitleHRlcm4gdm9pZCBTZXRCdXpWb2x1bWUoa2FsX3VpbnQ4IHZvbHVtbik7CitleHRlcm4gdm9pZCBBTEVSVEVSX0NvbmZpZyhBTE1vZGUgbW9kZSwgQUxDbG9jayBDbG9jayk7CisKKworLy8gTW9ESVMgcGFyc2VyIHNraXAgc3RhcnQKKy8vIFRoZSBmb2xsb3dpbmcgQVBJcyBhcmUgaW1wbGVtZW50ZWQgaW4gb3RoZXIgZHVtbXkgQVBJIGZpbGVzCitleHRlcm4gdm9pZCBBbHRlcl9Db25maWd1cmUoa2FsX3VpbnQzMiBmcmVxLCBrYWxfdWludDggZHV0eSk7CitleHRlcm4gdm9pZCBBbHRlcl9TdGFydCh2b2lkKTsKK2V4dGVybiB2b2lkIEFsdGVyX1N0b3Aodm9pZCk7CitleHRlcm4gdm9pZCBBTEVSVEVSX1BXUk9QRU4oa2FsX2Jvb2wgRU5BQkxFKTsKKy8vIE1vRElTIHBhcnNlciBza2lwIGVuZAorCisjaWYgZGVmaW5lZChfX0RSVl9DT01NX1JFR19EQkdfXykgJiYgZGVmaW5lZChfX0RSVl9BTEVSVEVSX1JFR19EQkdfXykKKyNkZWZpbmUgRFJWX0FMRVJURVJfV3JpdGVSZWcoYWRkcixkYXRhKSAgICAgICAgICAgICAgRFJWX0RCR19Xcml0ZVJlZyhhZGRyLGRhdGEpCisjZGVmaW5lIERSVl9BTEVSVEVSX1JlZyhhZGRyKSAgICAgICAgICAgICAgICAgICAgICAgIERSVl9EQkdfUmVnKGFkZHIpICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBEUlZfQUxFUlRFUl9Xcml0ZVJlZzMyKGFkZHIsZGF0YSkgICAgICAgICAgICBEUlZfREJHX1dyaXRlUmVnMzIoYWRkcixkYXRhKSAgICAgICAgICAKKyNkZWZpbmUgRFJWX0FMRVJURVJfUmVnMzIoYWRkcikgICAgICAgICAgICAgICAgICAgICAgRFJWX0RCR19SZWczMihhZGRyKSAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIERSVl9BTEVSVEVSX1dyaXRlUmVnOChhZGRyLGRhdGEpICAgICAgICAgICAgIERSVl9EQkdfV3JpdGVSZWc4KGFkZHIsZGF0YSkgICAgICAgICAgIAorI2RlZmluZSBEUlZfQUxFUlRFUl9SZWc4KGFkZHIpICAgICAgICAgICAgICAgICAgICAgICBEUlZfREJHX1JlZzgoYWRkcikgICAgICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgRFJWX0FMRVJURVJfQ2xlYXJCaXRzKGFkZHIsZGF0YSkgICAgICAgICAgICAgRFJWX0RCR19DbGVhckJpdHMoYWRkcixkYXRhKSAgICAgICAgICAgCisjZGVmaW5lIERSVl9BTEVSVEVSX1NldEJpdHMoYWRkcixkYXRhKSAgICAgICAgICAgICAgIERSVl9EQkdfU2V0Qml0cyhhZGRyLGRhdGEpICAgICAgICAgICAgIAorI2RlZmluZSBEUlZfQUxFUlRFUl9TZXREYXRhKGFkZHIsIGJpdG1hc2ssIHZhbHVlKSAgICBEUlZfREJHX1NldERhdGEoYWRkciwgYml0bWFzaywgdmFsdWUpICAKKyNkZWZpbmUgRFJWX0FMRVJURVJfQ2xlYXJCaXRzMzIoYWRkcixkYXRhKSAgICAgICAgICAgRFJWX0RCR19DbGVhckJpdHMzMihhZGRyLGRhdGEpICAgICAgICAgCisjZGVmaW5lIERSVl9BTEVSVEVSX1NldEJpdHMzMihhZGRyLGRhdGEpICAgICAgICAgICAgIERSVl9EQkdfU2V0Qml0czMyKGFkZHIsZGF0YSkgICAgICAgICAgIAorI2RlZmluZSBEUlZfQUxFUlRFUl9TZXREYXRhMzIoYWRkciwgYml0bWFzaywgdmFsdWUpICBEUlZfREJHX1NldERhdGEzMihhZGRyLCBiaXRtYXNrLCB2YWx1ZSkKKyNkZWZpbmUgRFJWX0FMRVJURVJfQ2xlYXJCaXRzOChhZGRyLGRhdGEpICAgICAgICAgICAgRFJWX0RCR19DbGVhckJpdHM4KGFkZHIsZGF0YSkgICAgICAgICAgCisjZGVmaW5lIERSVl9BTEVSVEVSX1NldEJpdHM4KGFkZHIsZGF0YSkgICAgICAgICAgICAgIERSVl9EQkdfU2V0Qml0czgoYWRkcixkYXRhKSAgICAgICAgICAgIAorI2RlZmluZSBEUlZfQUxFUlRFUl9TZXREYXRhOChhZGRyLCBiaXRtYXNrLCB2YWx1ZSkgICBEUlZfREJHX1NldERhdGE4KGFkZHIsIGJpdG1hc2ssIHZhbHVlKSAKKyNlbHNlCisjZGVmaW5lIERSVl9BTEVSVEVSX1dyaXRlUmVnKGFkZHIsZGF0YSkgICAgICAgICAgICAgIERSVl9Xcml0ZVJlZyhhZGRyLGRhdGEpCisjZGVmaW5lIERSVl9BTEVSVEVSX1JlZyhhZGRyKSAgICAgICAgICAgICAgICAgICAgICAgIERSVl9SZWcoYWRkcikgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIERSVl9BTEVSVEVSX1dyaXRlUmVnMzIoYWRkcixkYXRhKSAgICAgICAgICAgIERSVl9Xcml0ZVJlZzMyKGFkZHIsZGF0YSkgICAgICAgICAgCisjZGVmaW5lIERSVl9BTEVSVEVSX1JlZzMyKGFkZHIpICAgICAgICAgICAgICAgICAgICAgIERSVl9SZWczMihhZGRyKSAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIERSVl9BTEVSVEVSX1dyaXRlUmVnOChhZGRyLGRhdGEpICAgICAgICAgICAgIERSVl9Xcml0ZVJlZzgoYWRkcixkYXRhKSAgICAgICAgICAgCisjZGVmaW5lIERSVl9BTEVSVEVSX1JlZzgoYWRkcikgICAgICAgICAgICAgICAgICAgICAgIERSVl9SZWc4KGFkZHIpICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIERSVl9BTEVSVEVSX0NsZWFyQml0cyhhZGRyLGRhdGEpICAgICAgICAgICAgIERSVl9DbGVhckJpdHMoYWRkcixkYXRhKSAgICAgICAgICAgCisjZGVmaW5lIERSVl9BTEVSVEVSX1NldEJpdHMoYWRkcixkYXRhKSAgICAgICAgICAgICAgIERSVl9TZXRCaXRzKGFkZHIsZGF0YSkgICAgICAgICAgICAgCisjZGVmaW5lIERSVl9BTEVSVEVSX1NldERhdGEoYWRkciwgYml0bWFzaywgdmFsdWUpICAgIERSVl9TZXREYXRhKGFkZHIsIGJpdG1hc2ssIHZhbHVlKSAgCisjZGVmaW5lIERSVl9BTEVSVEVSX0NsZWFyQml0czMyKGFkZHIsZGF0YSkgICAgICAgICAgIERSVl9DbGVhckJpdHMzMihhZGRyLGRhdGEpICAgICAgICAgCisjZGVmaW5lIERSVl9BTEVSVEVSX1NldEJpdHMzMihhZGRyLGRhdGEpICAgICAgICAgICAgIERSVl9TZXRCaXRzMzIoYWRkcixkYXRhKSAgICAgICAgICAgCisjZGVmaW5lIERSVl9BTEVSVEVSX1NldERhdGEzMihhZGRyLCBiaXRtYXNrLCB2YWx1ZSkgIERSVl9TZXREYXRhMzIoYWRkciwgYml0bWFzaywgdmFsdWUpCisjZGVmaW5lIERSVl9BTEVSVEVSX0NsZWFyQml0czgoYWRkcixkYXRhKSAgICAgICAgICAgIERSVl9DbGVhckJpdHM4KGFkZHIsZGF0YSkgICAgICAgICAgCisjZGVmaW5lIERSVl9BTEVSVEVSX1NldEJpdHM4KGFkZHIsZGF0YSkgICAgICAgICAgICAgIERSVl9TZXRCaXRzOChhZGRyLGRhdGEpICAgICAgICAgICAgCisjZGVmaW5lIERSVl9BTEVSVEVSX1NldERhdGE4KGFkZHIsIGJpdG1hc2ssIHZhbHVlKSAgIERSVl9TZXREYXRhOChhZGRyLCBiaXRtYXNrLCB2YWx1ZSkgCisjZW5kaWYgLy8jaWYgZGVmaW5lZChfX0RSVl9DT01NX1JFR19EQkdfXykgJiYgZGVmaW5lZChfX0RSVl9BTEVSVEVSX1JFR19EQkdfXykKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2JtZC5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9ibWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTcyNTMyCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9ibWQuaApAQCAtMCwwICsxLDM1NiBAQAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgYm1kLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aV9Tb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBpcyBpbnRlbmRzIGZvciByaW5nLWJ1ZmZlciBBUEkuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBCTURfSAorI2RlZmluZSBCTURfSAorCisjaW5jbHVkZSAiZHJ2X2NvbW0uaCIKKwordHlwZWRlZiBzdHJ1Y3QgX19CVUZGRVJfSU5GTworeworCXZvbGF0aWxlIGthbF91aW50MTYJUmVhZDsJCS8qIEBmaWVsZCBDdXJyZW50IFJlYWQgaW5kZXguICovCisJdm9sYXRpbGUga2FsX3VpbnQxNglXcml0ZTsJCS8qIEBmaWVsZCBDdXJyZW50IFdyaXRlIGluZGV4LiAqLworCXZvbGF0aWxlIGthbF91aW50MTYJTGVuZ3RoOwkJLyogQGZpZWxkIExlbmd0aCBvZiBidWZmZXIgKi8KKwl2b2xhdGlsZSBrYWxfdWludDgJKkNoYXJCdWZmZXI7CQkvKiBAZmllbGQgU3RhcnQgb2YgYnVmZmVyICovCit9QlVGRkVSX0lORk87CisKKyNkZWZpbmUgUmVzZXRGaWZvKEJ1ZmZlcikgICAJCShCdWZmZXIuV3JpdGUgPSBCdWZmZXIuUmVhZCA9IDApCisjZGVmaW5lIEJXcml0ZShCdWZmZXIpCSAgIAkJKEJ1ZmZlci0+V3JpdGUpCisjZGVmaW5lIEJSZWFkKEJ1ZmZlcikJCSAgIAkoQnVmZmVyLT5SZWFkKQorI2RlZmluZSBCTGVuZ3RoKEJ1ZmZlcikJICAgCQkoQnVmZmVyLT5MZW5ndGgpCisjZGVmaW5lIEJTdGFydEFkZHIoQnVmZmVyKSAgICAgKEJ1ZmZlci0+Q2hhckJ1ZmZlcikKKyNkZWZpbmUgQnVmZldyaXRlKEJ1ZmZlcikgICAJCShCdWZmZXItPkNoYXJCdWZmZXIrQnVmZmVyLT5Xcml0ZSkKKyNkZWZpbmUgQnVmZlJlYWQoQnVmZmVyKQkgICAJKEJ1ZmZlci0+Q2hhckJ1ZmZlcitCdWZmZXItPlJlYWQpCisKKyNkZWZpbmUgQldyaXRlX2FkZHIoQnVmZmVyKQkgICAoQnVmZmVyLldyaXRlKQorI2RlZmluZSBCUmVhZF9hZGRyKEJ1ZmZlcikJCSAgIChCdWZmZXIuUmVhZCkKKyNkZWZpbmUgQkxlbmd0aF9hZGRyKEJ1ZmZlcikJICAgKEJ1ZmZlci5MZW5ndGgpCisjZGVmaW5lIEJ1ZmZXcml0ZV9hZGRyKEJ1ZmZlcikgICAoQnVmZmVyLkNoYXJCdWZmZXIrQnVmZmVyLldyaXRlKQorI2RlZmluZSBCdWZmUmVhZF9hZGRyKEJ1ZmZlcikJICAgKEJ1ZmZlci5DaGFyQnVmZmVyK0J1ZmZlci5SZWFkKQorI2RlZmluZSBCdWZmX0VuZEFkZHIoQnVmZmVyKSAgICAgKEJ1ZmZlci5DaGFyQnVmZmVyK0J1ZmZlci5MZW5ndGgtMSkKKyNkZWZpbmUgQnVmZl9TdGFydEFkZHIoQnVmZmVyKSAgICAgKEJ1ZmZlci5DaGFyQnVmZmVyKQorCisjZGVmaW5lIEJ1ZmZfaXNFbXB0eQkxCisjZGVmaW5lIEJ1ZmZfbm90RW1wdHkJMAorI2RlZmluZSBCdWZmX2lzRnVsbAkxCisjZGVmaW5lIEJ1ZmZfbm90RnVsbAkwCisjZGVmaW5lIEJ1ZmZfUHVzaE9LCTAKKyNkZWZpbmUgQnVmZl9QdXNoRXJyCTEKKyNkZWZpbmUgQnVmZl9Qb3BPSwkwCisjZGVmaW5lIEJ1ZmZfUG9wRXJyCTEKKworI2RlZmluZSBCdWZfaW5pdChfQnVmZmVyLF9CdWZmYWRkcixfdVRvdGFsU2l6ZSkgXAore1wKKyAgIEJVRkZFUl9JTkZPICpfQnVmPV9CdWZmZXI7XAorICAgX0J1Zi0+UmVhZCA9IDA7XAorCV9CdWYtPldyaXRlID0gMDtcCisJX0J1Zi0+TGVuZ3RoID0gX3VUb3RhbFNpemU7XAorCV9CdWYtPkNoYXJCdWZmZXIgPSBfQnVmZmFkZHI7XAorfVwKKworI2RlZmluZSBCdWZfSXNGdWxsKF9CdWZmZXIsX3Jlc3VsdCkgICBcCit7XAorICAgQlVGRkVSX0lORk8gKl9CdWY9X0J1ZmZlcjtcCisJa2FsX3VpbnQxNiBfdG1wID0gQlJlYWQoX0J1Zik7XAorCWlmIChfdG1wID09IDApXAorCQlfdG1wID0gQkxlbmd0aChfQnVmKTtcCisJaWYgKCAoX3RtcC1CV3JpdGUoX0J1ZikpID09IDEpXAorCXtcCisJCV9yZXN1bHQgPSBCdWZmX2lzRnVsbDtcCisJfVwKKwllbHNlXAorCXtcCisJCV9yZXN1bHQgPSBCdWZmX25vdEZ1bGw7XAorCX1cCit9XAorCisjZGVmaW5lIEJ1Zl9HZXRSb29tTGVmdChfQnVmZmVyLF9Sb29tTGVmdCkgICBcCit7XAorICAgQlVGRkVSX0lORk8gKl9CdWY9X0J1ZmZlcjtcCisgICBpZiAoIEJSZWFkKF9CdWYpIDw9IEJXcml0ZShfQnVmKSApIFwKKwl7XAorICAgICAgX1Jvb21MZWZ0ID0gQkxlbmd0aChfQnVmKSAtIEJXcml0ZShfQnVmKSArIEJSZWFkKF9CdWYpIC0gMTtcCisJfVwKKwllbHNlXAorCXtcCisJCV9Sb29tTGVmdCA9IEJSZWFkKF9CdWYpIC0gQldyaXRlKF9CdWYpIC0gMTtcCisJfVwKK31cCisKKyNkZWZpbmUgQnVmX1B1c2hfTXVsdGkoX0J1ZmZlcixfcHVzaERhdGFQb2ludGVyLF9tdWx0aSxvZmZzZXQpIFwKK3tcCisgICBCVUZGRVJfSU5GTyAqX0J1Zj1fQnVmZmVyO1wKKyAgIGlmKCAoQldyaXRlKF9CdWYpICsgX211bHRpKSA+PSBCTGVuZ3RoKF9CdWYpICl7XAorICAgICAga2FsX21lbV9jcHkoQnVmZldyaXRlKF9CdWYpLCBfcHVzaERhdGFQb2ludGVyICsgb2Zmc2V0LCAoQkxlbmd0aChfQnVmKSAtIEJXcml0ZShfQnVmKSkqc2l6ZW9mKGthbF91aW50OCkpO1wKKyAgICAgIGthbF9tZW1fY3B5KEJTdGFydEFkZHIoX0J1ZikgLCBfcHVzaERhdGFQb2ludGVyICsgb2Zmc2V0ICsgKEJMZW5ndGgoX0J1ZikgLSBCV3JpdGUoX0J1ZikpLCAoX211bHRpLSAoQkxlbmd0aChfQnVmKSAtIEJXcml0ZShfQnVmKSkpKnNpemVvZihrYWxfdWludDgpKTtcCisgICAgICBCV3JpdGUoX0J1ZikgPSAoQldyaXRlKF9CdWYpICsgX211bHRpKSAtIEJMZW5ndGgoX0J1Zik7XAorICAgfVwKKyAgIGVsc2V7XAorICAga2FsX21lbV9jcHkoQnVmZldyaXRlKF9CdWYpLCBfcHVzaERhdGFQb2ludGVyICsgb2Zmc2V0LCBfbXVsdGkqc2l6ZW9mKGthbF91aW50OCkpO1wKKyAgICAgICAgIEJXcml0ZShfQnVmKSArPSBfbXVsdGk7XAorfVwKK31cCisKKyNkZWZpbmUgQnVmX1B1c2goX0J1ZmZlcixfcHVzaERhdGEpIFwKK3tcCisgICBCVUZGRVJfSU5GTyAqX0J1Zj1fQnVmZmVyO1wKKyAgICpCdWZmV3JpdGUoX0J1ZikgPSBfcHVzaERhdGE7XAorICAgaWYoQldyaXRlKF9CdWYpID49IChCTGVuZ3RoKF9CdWYpIC0gMSkpXAorICAge1wKKyAgIAlCV3JpdGUoX0J1ZikgPSAwO1wKKyAgIH1cCisgICBlbHNlXAorICAge1wKKwlCV3JpdGUoX0J1ZikrKztcCisgICB9XAorfVwKKworI2RlZmluZSBCdWZfR2V0Qnl0ZXNBdmFpbChfQnVmZmVyLF9CeXRlc0F2YWlsKSBcCit7XAorICAgQlVGRkVSX0lORk8gKl9CdWYgPSBfQnVmZmVyO1wKKwlfQnl0ZXNBdmFpbCA9IDA7XAorCWlmIChCV3JpdGUoX0J1ZikgPj0gQlJlYWQoX0J1ZikpXAorCQlfQnl0ZXNBdmFpbCA9IEJXcml0ZShfQnVmKSAtIEJSZWFkKF9CdWYpO1wKKwllbHNlXAorCQlfQnl0ZXNBdmFpbCA9IEJMZW5ndGgoX0J1ZikgLSBCUmVhZChfQnVmKSArIEJXcml0ZShfQnVmKTsJXAorfVwKKworI2RlZmluZSBCdWZfR2V0Qnl0ZXNBdmFpbF9ETUEoX0J1ZmZlcixfQnl0ZXNBdmFpbCkgXAore1wKKyAgIEJVRkZFUl9JTkZPICpfQnVmID0gX0J1ZmZlcjtcCisJX0J5dGVzQXZhaWwgPSAwO1wKKwlpZiAoQldyaXRlKF9CdWYpID49IEJSZWFkKF9CdWYpKVwKKwkJX0J5dGVzQXZhaWwgPSBCV3JpdGUoX0J1ZikgLSBCUmVhZChfQnVmKTtcCisJZWxzZVwKKwkJX0J5dGVzQXZhaWwgPSBCTGVuZ3RoKF9CdWYpIC0gQlJlYWQoX0J1Zik7CVwKK31cCisKKyNkZWZpbmUgQnVmX1BvcF9NdWx0aShfQnVmZmVyLF9wb3BEYXRhUG9pbnRlcixfbXVsdGksb2Zmc2V0KSBcCit7XAorICAgQlVGRkVSX0lORk8gKl9CdWY9X0J1ZmZlcjtcCisgICBpZiggKEJSZWFkKF9CdWYpICsgX211bHRpKSA+PSBCTGVuZ3RoKF9CdWYpICl7XAorICAgCWthbF9tZW1fY3B5KF9wb3BEYXRhUG9pbnRlciArIG9mZnNldCwgQnVmZlJlYWQoX0J1ZiksIChCTGVuZ3RoKF9CdWYpIC0gQlJlYWQoX0J1ZikpKnNpemVvZihrYWxfdWludDgpKTtcCisgICAJa2FsX21lbV9jcHkoX3BvcERhdGFQb2ludGVyICsgb2Zmc2V0ICsgKEJMZW5ndGgoX0J1ZikgLSBCUmVhZChfQnVmKSksIEJTdGFydEFkZHIoX0J1ZiksIChfbXVsdGktIChCTGVuZ3RoKF9CdWYpIC0gQlJlYWQoX0J1ZikpKSpzaXplb2Yoa2FsX3VpbnQ4KSk7XAorICAgICAgICAgQlJlYWQoX0J1ZikgPSBCUmVhZChfQnVmKSArIF9tdWx0aSAtIEJMZW5ndGgoX0J1ZikgOylcCisgICBlbHNle1wKKyAgIAkga2FsX21lbV9jcHkoX3BvcERhdGFQb2ludGVyICsgb2Zmc2V0LCBCdWZmUmVhZChfQnVmKSwgX211bHRpKTtcCisgICAgICAgICBCUmVhZChfQnVmKSArPSBfbXVsdGk7fVwKK31cCisKKyNkZWZpbmUgQnVmX1BvcChfQnVmZmVyLF9wb3BEYXRhKSAgIFwKK3tcCisgICBCVUZGRVJfSU5GTyAqX0J1ZiA9IF9CdWZmZXI7XAorCV9wb3BEYXRhPSAqQnVmZlJlYWQoX0J1Zik7XAorCUJSZWFkKF9CdWYpKys7XAorCWlmIChCUmVhZChfQnVmKSA+PSBCTGVuZ3RoKF9CdWYpKVwKKwl7XAorCQlCUmVhZChfQnVmKSAtPSBCTGVuZ3RoKF9CdWYpO1wKKwl9XAorfVwKKworLyogc2hvdWxkIGJlIGRlbGV0ZWQgKi8KKyNkZWZpbmUgQnVmX0lzRW1wdHkoX0J1ZmZlcixfcmVzdWx0KSAgIFwKK3tcCisgICBCVUZGRVJfSU5GTyAqX0J1ZiA9IF9CdWZmZXI7XAorCWlmICggQlJlYWQoX0J1ZikgPT0gQldyaXRlKF9CdWYpICkgXAorCXtcCisJCV9yZXN1bHQgPSBCdWZmX2lzRW1wdHk7XAorCX1cCisJZWxzZVwKKwl7XAorCQlfcmVzdWx0ID0gQnVmZl9ub3RFbXB0eTtcCisJfVwKK31cCisKKy8qIHZvaWQgR2V0MzJGcm9tQnVmZihCVUZGRVJfSU5GTyAqQnVmLGthbF91aW50MzIgREFUQSkgKi8KKyNkZWZpbmUgR2V0MzJGcm9tQnVmKF9CdWZmZXIsX0RBVEEpICAgIFwKK3tcCisgICBCVUZGRVJfSU5GTyAqX0J1ZiA9IF9CdWZmZXI7XAorCWthbF91aW50OAlfdG1wLF9pbmRleDtcCisJa2FsX3VpbnQzMiAJX3RtcDMyO1wKKwlfREFUQSA9MDtcCisJZm9yIChfaW5kZXggPTA7X2luZGV4IDwgNDtfaW5kZXgrKylcCisJe1wKKwkJQnVmZl9Qb3AoX0J1ZiwmX3RtcCk7XAorCQlfdG1wMzIgPSAoa2FsX3VpbnQzMilfdG1wO1wKKwkJKF9EQVRBKSB8PSAoX3RtcDMyIDw8ICg4Kl9pbmRleCkpO1wKKwl9XAorfVwKKworLyp2b2lkIFB1dDMydG9CdWZmKEJVRkZFUl9JTkZPICpCdWYsa2FsX3VpbnQzMiAqREFUQSkqLworI2RlZmluZSBQdXQzMnRvQnVmKF9CdWZmZXIsX0RBVEEpICAgIFwKK3tcCisgICBCVUZGRVJfSU5GTyAqX0J1ZiA9IF9CdWZmZXI7XAorCWthbF91aW50OAlfdG1wLF9pbmRleDtcCisJa2FsX3VpbnQzMiAJX3RtcDMyO1wKKwlmb3IgKF9pbmRleCA9MDtfaW5kZXggPCA0O19pbmRleCsrKVwKKwl7XAorCQlfdG1wMzIgPSAoKCpfREFUQSkgPj4gKDgqX2luZGV4KSk7XAorCQlfdG1wID0gKGthbF91aW50OClfdG1wMzI7XAorCQlCdWZmX1B1c2goX0J1ZiwmX3RtcCk7XAorCX1cCit9XAorCisjZGVmaW5lIEJ1Zl9GbHVzaChfQnVmZmVyKSBcCit7XAorICAgQlVGRkVSX0lORk8gKl9CdWYgPSBfQnVmZmVyO1wKKwlfQnVmLT5Xcml0ZSA9IF9CdWYtPlJlYWQgPSAwO1wKK30KKworI2RlZmluZSBCdWZfbG9vayhfQnVmZmVyLF9wb3BEYXRhLF9udW0pICAgXAore1wKKyAgIEJVRkZFUl9JTkZPICpfQnVmID0gX0J1ZmZlcjtcCisgICBrYWxfdWludDggX2luZGV4O1wKKyAgIGthbF91aW50MTYgX3RtcDtcCisgICBfdG1wID0gQlJlYWQoQnVmKTtcCisgICBmb3IoX2luZGV4PTA7X2luZGV4PF9udW07X2luZGV4KyspXAorICAge1wKKwkgICAqX3BvcERhdGE9ICooQnVmLT5DaGFyQnVmZmVyK190bXApO1wKKwkgICBfdG1wKys7XAorCSAgIGlmIChfdG1wID49IEJMZW5ndGgoQnVmKSlcCisJICAge1wKKwkJICAgX3RtcCAtPSBCTGVuZ3RoKEJ1Zik7XAorCSAgIH1cCisJfVwKK30KKworLy8gTW9ESVMgcGFyc2VyIHNraXAgc3RhcnQKKyNpZiAxCitleHRlcm4gdm9pZCBCdWZmX2luaXQoQlVGRkVSX0lORk8gKkJ1ZixrYWxfdWludDggKkJ1ZmZhZGRyLCBrYWxfdWludDE2IHVUb3RhbFNpemUpOworZXh0ZXJuIHZvaWQgQnVmZl9QdXNoKEJVRkZFUl9JTkZPICpCdWYsa2FsX3VpbnQ4ICpwdXNoRGF0YSk7CitleHRlcm4gdm9pZCBCdWZmX1BvcChCVUZGRVJfSU5GTyAqQnVmLGthbF91aW50OCAqcG9wRGF0YSk7CitleHRlcm4ga2FsX3VpbnQ4IEJ1ZmZfSXNFbXB0eShCVUZGRVJfSU5GTyAqQnVmKTsKK2V4dGVybiBrYWxfdWludDggQnVmZl9Jc0Z1bGwgKEJVRkZFUl9JTkZPICpCdWYpOworZXh0ZXJuIGthbF91aW50MTYgQnVmZl9HZXRSb29tTGVmdCAoQlVGRkVSX0lORk8gKkJ1Zik7CitleHRlcm4ga2FsX3VpbnQxNiBCdWZmX0dldEJ5dGVzQXZhaWwgKEJVRkZFUl9JTkZPICpCdWYpOworZXh0ZXJuIGthbF91aW50MTYgQnVmZl9HZXRMZW5ndGgoQlVGRkVSX0lORk8gKkJ1Zik7CitleHRlcm4gdm9pZCBCdWZmX0ZsdXNoIChCVUZGRVJfSU5GTyAqQnVmKTsKK2V4dGVybiB2b2lkIEJ1ZmZfbG9vayhCVUZGRVJfSU5GTyAqQnVmLGthbF91aW50OCAqcG9wRGF0YSxrYWxfdWludDggbnVtKTsKK2V4dGVybiB2b2lkIEdldDMyRnJvbUJ1ZmYoQlVGRkVSX0lORk8gKkJ1ZixrYWxfdWludDMyICpEQVRBKTsKK2V4dGVybiB2b2lkIFB1dDMydG9CdWZmKEJVRkZFUl9JTkZPICpCdWYsa2FsX3VpbnQzMiAqREFUQSk7CitleHRlcm4gdm9pZCBNZW1DUFkoa2FsX3VpbnQ4ICpkc3Qsa2FsX3VpbnQ4ICpzcmMsa2FsX3VpbnQzMiBsZW4pOworZXh0ZXJuIHZvaWQgTWVtU0VUKGthbF91aW50OCAqZHN0LGthbF91aW50OCBkYXRhLGthbF91aW50MzIgbGVuKTsKKyNlbmRpZgorLy8gTW9ESVMgcGFyc2VyIHNraXAgZW5kCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2JtdC5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9ibXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjM0YTNmCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9ibXQuaApAQCAtMCwwICsxLDg1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICBibXQuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpX1NvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGludGVuZHMgZm9yIEJhdHRlcnkgTWFuYWdlbWVudCBUYXNrLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9CTVRfSAorI2RlZmluZSBfQk1UX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAiZGNsLmgiCisjaW5jbHVkZSAiYWRjX2NhbGkuaCIKKworI2RlZmluZSBBRENfQk1UX1ZCQVQgICAgICAgICAgICAwCisjZGVmaW5lIEFEQ19CTVRfVklTRU5TRSAgICAgICAgIDEKKyNkZWZpbmUgQURDX0JNVF9WQkFUVE1QICAgICAgICAgMgorI2RlZmluZSBBRENfQk1UX1ZDSEFSR0VSCSAgICAzCisjZGVmaW5lIEFEQ19CTVRfTUFYX0NIQU5ORUxfVE9UQUwgICA0CisvLyNkZWZpbmUgQk1UX01BWF9DSEFOTkVMX1RPVEFMICAgICAgIEFEQ19CTVRfTUFYX0NIQU5ORUxfVE9UQUwgIC8vIGJhY2t3YXJkIGNvbXBhdGlibGUKKworLyoKKyNpZmRlZiBfX0JNVF9DSEVDS19DSEFSR0VSX18KKyNkZWZpbmUgQk1UX01BWF9DSEFOTkVMICAgIDQKKyNlbHNlCisjZGVmaW5lIEJNVF9NQVhfQ0hBTk5FTCAgICAzCisjZW5kaWYKKyovCisjZGVmaW5lIEJNVF9BRENfVkJBVCAgICAgICAgICAgIDAKKyNkZWZpbmUgQk1UX0FEQ19WSVNFTlNFICAgICAgICAgMQorI2RlZmluZSBCTVRfQURDX1ZCQVRUTVAgICAgICAgICAyCisjZGVmaW5lIEJNVF9BRENfVkNIQVJHRVIJICAgIDMKKyNkZWZpbmUgQk1UX0FEQ19NQVhfQ0hBTk5FTF9UT1RBTCAgIDQKKworLypwcmVjaGFyZ2UgdGhyZXNob2xkKi8KKyNkZWZpbmUgQk1UX1BSRUNIQVJHRV9USFJFU0hPTEQgIDMzMDAwMDAKKworI2lmIGRlZmluZWQoX19UQzAxX18pCisjZGVmaW5lIERSVl9CTVRfTk9ORV9VU0JfUE9XRVJfT04gLyogdXNlIGNoYXJnaW5nIHBvd2VyIG9uIGluc3RlYWQgb2YgVVNCIHBvd2VyIG9uKi8KKyNkZWZpbmUgX19EUlZfQk1UX1BSRUNIQVJHRV9UT19GVUxMX0RJUkVDVExZX18KKyNlbmRpZiAvLyAjaWYgZGVmaW5lZChfX1RDMDFfXykKKworLypCYXRUeXBlKi8KKyNkZWZpbmUgIExJQkFUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgIE5JQkFUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLypleHRlcm4gY2hhcmdlciBzdGF0ZSovCisjZGVmaW5lICBERVRFQ1RDSFJJTiAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgIERFVEVDVENIUk9VVCAgICAgICAgICAgICAgICAgICAgICFERVRFQ1RDSFJJTgorCisvKkJNVCBNaW5vciBTVEFURS4gV2hlbiBDaGFyZ2VyIGlzIHBsdWdnZWQgaW4sIGNoYXJnZSBpcyBlbmFibGUgb3Igbm90PyovCisjZGVmaW5lICBQTUlDX0NIQVJHRU9GRiAgICAgICAgICAgICAgICAgICAwICAgLypwbWljdHJsX3N0YXRlKi8KKyNkZWZpbmUgIFBNSUNfQ0hBUkdFT04gICAgICAgICAgICAgICAgICAgIDEgICAKKworLypNUyBNb2RlKi8KKyNkZWZpbmUgaWRsZV9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgdGFsa19tb2RlICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgc3dvZmZfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgIDIKKworCisjZGVmaW5lIEJNVF9ISUdIX1ZDSEdfVEhSRVNIT0xEIDEwMDAwMAorCisjaWYgZGVmaW5lZChEUlZfQk1UX0hJR0hfVkNIR19BREFQVElWRV9DSEFSR0VfQ1VSUkVOVF9TVVBQT1JUKQorI2RlZmluZSBWQ0hHX1ZPTF9MRVZFTCAgICAgIDcKKyNkZWZpbmUgVkNIR19QQVJBTVRFUl9DT1VOVCAzCisKK3R5cGVkZWYgc3RydWN0eworICAgIGthbF91aW50MzIgVkNIR19IVl9WVEg7CisgICAga2FsX2ludDMyIEhJR0hfVkNIR19UQUJMRVtWQ0hHX1ZPTF9MRVZFTF1bVkNIR19QQVJBTVRFUl9DT1VOVF07Cit9Ym10X2N1c3RvbWl6ZWRfaGlnaF92Y2hnX3N0cnVjdDsKKworZXh0ZXJuIGthbF9ib29sIEhpZ2hfVmNoZ19TYWZldHlfVGltZXJfU2V0OworZXh0ZXJuIGJtdF9jdXN0b21pemVkX2hpZ2hfdmNoZ19zdHJ1Y3QgKmJtdF9oaWdoX3ZjaGdfcGFyYTsKK2V4dGVybiBrYWxfdWludDMyIGJtdF90b3RhbF9jaGFyZ2VfdGltZTsKK2V4dGVybiBrYWxfYm9vbCBibXRfc2FmZXR5X3RpbWVyX2NvbmZpZzsKK2V4dGVybiBrYWxfaW50MzIgUHJlX1ZDaGFyZ2VfQVZHOworZXh0ZXJuIGthbF9pbnQzMiBDdXJfVkNoYXJnZV9NQVg7CitleHRlcm4gYm10X2N1c3RvbWl6ZWRfaGlnaF92Y2hnX3N0cnVjdCAqYm10X2dldF9jdXN0b21pemVkX2hpZ2hfdmNoZ19wYXJhKHZvaWQpOworCisjZW5kaWYgLy8gRW5kIG9mICNpZiBkZWZpbmVkKERSVl9CTVRfSElHSF9WQ0hHX0FEQVBUSVZFX0NIQVJHRV9DVVJSRU5UX1NVUFBPUlQpCisKK3R5cGVkZWYgZW51bXsKKwlDSEFSR0VSX1BSRVNFTlQsCisvLyNpZiBkZWZpbmVkKF9fQ0hJTkFfQ0hBUkdFUl9TVEFOREFSRF9fKQorCUNIQVJHRVJfUFJFU0VOVF9OT04sCisvLyNlbmRpZgorCVVTQl9QUkVTRU5ULAorCU5PX1BSRVNFTlQKK31jaGFyZ2VyX3VzYl9wcmVzZW50X2VudW07CisKK3R5cGVkZWYgZW51bXsKKwlCTVRfQUNfQ0hSLAorCUJNVF9VU0JfQ0hSCit9Ym10X2NoYXJnZXJfdHlwZTsKKwordHlwZWRlZiBlbnVtIHsKKwlibXRfY2hyX2luPTAsCisgICBibXRfY2hyX291dCwKKyAgIGJtdF9jaHJfdW5pbml0ID0gMHhmZgorfUNoYXJnZXJfU3RhdHVzOworCit0eXBlZGVmIGVudW0geworCVZCQVRfVUVNX0NIUl9PVVQ9MCwKKwlWQkFUX1VFTV9DSFJfT1VUX0ZJUlNUPTEsCisJVkJBVF9VRU1fQ0hSX0lOPTIsCisJVkJBVF9VRU1fQ0hSX0lOX0ZJU1JUPTMKK31WQkFUX1VFTV9DSFJfRU5VTTsKKwordHlwZWRlZiBlbnVtIAoreworICAgQ0hSX0NVUlJFTlRfNTA9MCwKKyAgIENIUl9DVVJSRU5UXzkwLAorICAgQ0hSX0NVUlJFTlRfMTUwLAorICAgQ0hSX0NVUlJFTlRfMjI1LAorICAgQ0hSX0NVUlJFTlRfMzAwLAorICAgQ0hSX0NVUlJFTlRfNDUwLAorICAgQ0hSX0NVUlJFTlRfNjUwLAorICAgQ0hSX0NVUlJFTlRfODAwCit9cG1pY19jaGFyZ2luZ19jdXJyZW50OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBrYWxfdWludDggICAgICAgICAgICAgICBiYXRfc3RhdGU7CisgICBrYWxfdWludDggICAgICAgICAgICAgICBwbWljdHJsX3N0YXRlOyAgIC8qcG1pYyBjb250cm9sIG9uLG9mZiovCisgICBrYWxfdWludDggICAgICAgICAgICAgICBjYWxsX3N0YXRlOyAgIC8qbW9iaWxlIHN0YXRlKi8KKyAgLy8ga2FsX3VpbnQ4ICAgICAgICAgICAgICAgUFdSb247CisgICBrYWxfdWludDggICAgICAgICAgICAgICBCYXRUeXBlOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgRUlOVDJTVEFURTsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgIGhpZ2hmdWxsOworICAgVkJBVF9VRU1fQ0hSX0VOVU0JCSAgICAgVkJBVF9VRU07IC8vIHN0YXRlIG9mIFVFTSBWQkFUIG1lYXN1cmVtZW50IAorICAga2FsX2hpc3JpZCAgICAgICAgICAgICAgaGlzcjsKK30gQk1UU3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBrYWxfaW50MzIgVkJBVDsKKyAgIGthbF9pbnQzMiBJQ0hBUkdFOworICAga2FsX2ludDMyIEJBVFRNUDsKKyAgIGthbF9pbnQzMiBWQ0hBUkdFUjsKKyAgIGthbF9pbnQzMiBJU2Vuc2VfT2Zmc2V0OworICAgLy9rYWxfdWludDggQkFUVFlQRTsKK30gQkFUUEhZU3RydWN0OworCisKKy8vIEZvciBleHRlcm5hbCBjaGFyZ2VyIG1lY2hhbmlzbSBpbnRlZ3JhdGlvbgorCisvLyBUaGUgZW51bSBpcyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBjaGFyZ2luZyBmYWN0b3IgaXMgbWVhc3VyZWQgYnkgSE9TVCBvciBDaGFyZ2VyIGRldmljZQordHlwZWRlZiBlbnVtCit7CisgIENIUl9GQUNUT1JfTUVBU1VSRV9OT05FID0gICAgICAgICAgICAgMHgwMDAwMDAwMCwgICAvLyBCb3RoIE5PVCBzdXBwb3J0LCBUQkQKKyAgQ0hSX0ZBQ1RPUl9NRUFTVVJFX0JZX0hPU1QgPSAgICAgICAgICAweDAwMDAwMDAxLCAgIC8vIEJJVDAwLCBIT1NUIG1lYXN1cmUgdGhlIHNwZWNpZmljIGNoYXJnaW5nIGZhY3RvcgorICBDSFJfRkFDVE9SX01FQVNVUkVfQllfQ0hBUkdFUl9ERVYgPSAgIDB4MDAwMDAwMDIgICAgLy8gQklUMDEsIENoYXJnZXIgZGV2aWNlIG1lYXN1cmUgdGhlIHNwZWNpZmljIGNoYXJnaW5nIGZhY3RvcgorCit9Ym10X2Nocl9mYWNfbWVhc3VyZV9zdXBwb3J0X2VudW07CisKKy8vIFRoZSBlbnVtIGlzIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGNoYXJnaW5nIGZhY3RvciBlcnJvciBjaGVjayBpcyBkb25lIGJ5IEhPU1Qgb3IgY2hhcmdlciBkZXZpY2UKK3R5cGVkZWYgZW51bQoreworICBCTVRfQ0hSX0ZBQ1RPUl9DSEVDS19OT05FID0gICAgICAgICAgIDB4MDAwMDAwMDAsICAgLy8gQm90aCBOT1Qgc3VwcG9ydCwgVEJECisgIEJNVF9DSFJfRkFDVE9SX0NIRUNLX0JZX0hPU1QgPSAgICAgICAgMHgwMDAwMDAwMSwgICAvLyBCSVQwMCwgSE9TVCBwZXJmb3JtIGNoYXJnaW5nIGZhY3RvciBlcnJvciBjaGVjaworICBCTVRfQ0hSX0ZBQ1RPUl9DSEVDS19CWV9DSEFSR0VSX0RFViA9IDB4MDAwMDAwMDIgICAgLy8gQklUMDEsIENoYXJnZXIgZGV2aWNlIHBlcmZvcm0gY2hhcmdpbmcgZmFjb3RyIGVycm9yIGNoZWNrCisKK31ibXRfY2hyX2ZhY19jaGVja19zdXBwb3J0X2VudW07CisKKy8vIFRoZSBlbnVtIGRlZmluZXMgdGhlIGNoYXJnaW5nIGZhY3RvcnMgdGhhdCBjaGFyZ2luZyBwcm9jZXNzIG5lZWQgdG8gY2hlY2sKK3R5cGVkZWYgZW51bQoreworICBCTVRfQ0hSX0ZBQ1RPUl9WQkFULCAgICAgICAgICAgICAgIC8vIENoYXJnaW5nIGZhY3RvcjogVkJBVAorICBCTVRfQ0hSX0ZBQ1RPUl9JU0VOU0UsICAgICAgICAgICAgIC8vIENoYXJnaW5nIGZhY3RvcjogVklTRU5TRQorICBCTVRfQ0hSX0ZBQ1RPUl9CQVRUTVAsICAgICAgICAgICAgIC8vIENoYXJnaW5nIGZhY3RvcjogVkJBVCB0ZW1wZXJhdHVyZQorICBCTVRfQ0hSX0ZBQ1RPUl9WQ0hBUkdFUiwgICAgICAgICAgIC8vIENoYXJnaW5nIGZhY3RvcjogVkNIQVJHRVIKKyAgQk1UX0NIUl9GQUNUT1JfQ0hBUkdFUl9PVlAsICAgICAgICAvLyBDaGFyZ2luZyBmYWN0b3I6IENoYXJnZXIgT1ZQCisgIEJNVF9DSFJfRkFDVE9SX0NIQVJHRV9GVUxMLCAgICAgICAgLy8gQ2hhcmdpbmcgZmFjdG9yOiBDaGFyZ2UgZnVsbAorICBCTVRfQ0hSX0ZBQ1RPUl9VTkRFUl9FWFRSRU1FVE1QLCAgICAgICAgLy8gQ2hhcmdpbmcgZmFjdG9yOiBFeHRyZW1lIHRlbXBlcmF0dXJlCisgIEJNVF9DSFJfRkFDVE9SX0NIQVJHRV9FWFRSRU1FVE1QX0ZVTEwsICAgICAgICAvLyBDaGFyZ2luZyBmYWN0b3I6IENoYXJnZSBmdWxsIHVuZGVyIGV4dHJlbWUgdGVtcGVyYXR1cmUKKyAgQk1UX0NIUl9GQUNUT1JfQ0hBUkdFX0VYVFJFTUVUTVBfUkVDSEFSR0UsICAgICAgICAvLyBDaGFyZ2luZyBmYWN0b3I6IFNob3VsZCByZWNoYXJnZSB1bmRlciBleHRyZW1lIHRlbXBlcmF0dXJlCisgIEJNVF9DSFJfRkFDVE9SX0hPTEQsICAgICAgICAgICAgICAgLy8gQ2hhcmdpbmcgZmFjdG9yOiBDaGFyZ2luZyBob2xkCisgIEJNVF9DSFJfRkFDVE9SX0NIUl9CQVRUX1NUQVRFLCAgICAgLy8gQ2hhcmdpbmcgZmFjdG9yOiBjaGFyZ2luZyBzdGF0ZTogUFJFLCBGQVNUKENDKSwgVE9QT0ZGKENWKSwgRlVMTCAuLi4KKworICBCTVRfQ0hSX0ZBQ1RPUl9NQVgKK31ibXRfY2hyX2ZhY19lbnVtOworCit0eXBlZGVmIHN0cnVjdAoreworCisgIC8vIERyaXZlciBpbml0CisgIC8vIENhbGxlZCBhdCBkcnYgaW5pdCBwaGFzZQorICB2b2lkICgqZHJ2X2luaXQpKHZvaWQpOworCisgIC8vIENhbGxlZCBhdCBwbWljIGFkcHQgbGF5ZXIgaW5pdCBwaGFzZQorICAvLyBUaGUgcGhhc2Ugd2hhdCBzY2hlZHVsZXIgaXMgcnVubmluZyhCTVQgdGFzayBpcyBjcmVhdGVkKQorICB2b2lkICgqZW5hYmxlX2ludHIpKHZvaWQpOworCisgIC8vIENvbnRyb2wgY2hhcmdlIGVuYWJsZS9kaXNhYmxlCisgIC8vIENhbGxlZCBhdCBhbnkgdGltZSwgYW55IGNvbnRleHQKKyAga2FsX2Jvb2wgKCpjaGFyZ2VfZW5hYmxlKShrYWxfYm9vbCBlbmFibGUpOworCisgIC8vIFRoZSB1bml0IGlzIGluIG1BID09PiAxMDAwIG1lYW5zIDFBCisgIC8vIENhbGxlZCBhdCBhbnkgdGltZSwgYW55IGNvbnRleHQKKyAgLy8gYSBtb3N0IGNsb3NlLCBidXQgbm90IGV4Y2VlZGVkIGNoYXJnZSBjdXJyZW50IHdpbGwgYmUgc2VsZWN0ZWQKKyAgLy8gNTAwbUEgbWVhbnMgY2FuIE5PVCBsYXJnZSB0aGFuIDUwMG1BLCBidXQgbW9zdCBjbG9zZSB0byA1MDBtQQorICBrYWxfYm9vbCAoKnNldF9jaGFyZ2VfY3VycmVudCkoa2FsX2ludDMyIGNoYXJnZV9jdXJyZW50KTsKKworICAvLyBXaGV0aGVyIHRoZSBleHRlcm5hbCBjaGFyZ2VyIGNhbiBtZWFzdXJlIHRoZSBwYXNzZWQtaW4gY2hhcmdpbmcgZmFjdG9yCisgIGJtdF9jaHJfZmFjX21lYXN1cmVfc3VwcG9ydF9lbnVtICgqZ2V0X2Nocl9mYWNfbWVhc3VyZV9zdXBwb3J0KShibXRfY2hyX2ZhY19lbnVtIGNocl9mYWMpOworCisgIC8vIFdoZXRoZXIgdGhlIGV4dGVybmFsIGNoYXJnZXIgY2FuIGNoZWNrIHRoZSBwYXNzZWQtaW4gY2hhcmdpbmcgZmFjdG9yCisgIGJtdF9jaHJfZmFjX2NoZWNrX3N1cHBvcnRfZW51bSAoKmdldF9jaHJfZmFjX2NoZWNrX3N1cHBvcnQpKGJtdF9jaHJfZmFjX2VudW0gY2hyX2ZhYyk7CisKKyAgLy8gUGFzcyBpbmZvcm1hdGlvbiB0byBjaGFyZ2VyIGRldmljZQorICAvLyBDaGFyZ2VyIGRldmljZSBjYW4gY2FsY3VsYXRlIHRoZSBjaGFyZ2VyIHN0YXR1cyB0aHJvdWdoIHRoZSBwYXNzZWQtaW4gaW5mbworICB2b2lkICgqY2hlY2tfY2hyX3N0YXR1cykoQkFUUEhZU3RydWN0ICpwQmF0UGh5c1N0YXQpOworCisgIC8vIENoYXJnZXIgcmV0dXJuIGNhbGN1bGF0ZWQgY2hhcmdlciBzdGF0dXMKKyAgLy8gVXN1YWxseSwgY2hhcmdlciBkZXZpY2Ugc2hvdWxkIGtlZXAgdGhlIGNociBzdGF0dXMgYmVmb3JlIHJlc2V0X2Nocl9zdGF0dXMoKSBpcyBjYWxsZWQKKyAgLy8gVGhlIHJldHVybiBrYWxfdWludDMyIGlzIHVuaW9uIG9mIGFsbCBjaGFyZ2luZyBmYWN0b3JzIHN0YXR1cworICBrYWxfdWludDMyICgqZ2V0X2Nocl9zdGF0dXMpKHZvaWQpOworCisgIC8vIFRoZSByZXR1cm4gdW5pdCBpcyB1ViA9PT4gMTAwMDAwMCBtZWFucyAxLjBWCisgIC8vIFRoZSBwYXNzZWQtaW4gcGFyYW1ldGVyIGlzIHRoZSBpbmZvcm1hdGlvbiBtZWFzdXJlZCBieSBIT1NULAorICAvLyBleHQgY2hhcmdlciBkcml2ZXIgbmVlZCB0aGlzIGluZm8gdG8gY2FsY3VsYXRlCisgIGthbF9pbnQzMiAoKmdldF92YmF0KShCQVRQSFlTdHJ1Y3QgKnBCYXRQaHlzU3RhdCk7CisKKyAgLy8gVGhlIHJldHVybiB1bml0IGlzIHVBID09PiAxMDAwMDAwIG1lYW5zIDFBCisgIC8vIFRoZSBwYXNzZWQtaW4gcGFyYW1ldGVyIGlzIHRoZSBpbmZvcm1hdGlvbiBtZWFzdXJlZCBieSBIT1NULAorICAvLyBleHQgY2hhcmdlciBkcml2ZXIgbmVlZCB0aGlzIGluZm8gdG8gY2FsY3VsYXRlCisgIGthbF9pbnQzMiAoKmdldF9pc2Vuc2UpKEJBVFBIWVN0cnVjdCAqcEJhdFBoeXNTdGF0KTsKKworICAvLyBUaGUgcmV0dXJuIHVuaXQgaXMgdVYgPT0+IDEwMDAwMDAgbWVhbnMgMS4wVgorICAvLyBUaGUgcGFzc2VkLWluIHBhcmFtZXRlciBpcyB0aGUgaW5mb3JtYXRpb24gbWVhc3VyZWQgYnkgSE9TVCwKKyAgLy8gZXh0IGNoYXJnZXIgZHJpdmVyIG5lZWQgdGhpcyBpbmZvIHRvIGNhbGN1bGF0ZQorICBrYWxfaW50MzIgKCpnZXRfdmNoYXJnZXIpKEJBVFBIWVN0cnVjdCAqcEJhdFBoeXNTdGF0KTsKKworICAvLyBSZXR1cm4gdGhlIGNhbGN1bGF0ZWQgTlRDIHZhbHVlIG9mIGJhdHRlcnkgdGVtcGVyYXR1cmUKKyAgLy8gVGhlIHBhc3NlZC1pbiBwYXJhbWV0ZXIgaXMgdGhlIGluZm9ybWF0aW9uIG1lYXN1cmVkIGJ5IEhPU1QsCisgIC8vIGV4dCBjaGFyZ2VyIGRyaXZlciBuZWVkIHRoaXMgaW5mbyB0byBjYWxjdWxhdGUKKyAga2FsX2ludDMyICgqZ2V0X2JhdF90ZW1wKShCQVRQSFlTdHJ1Y3QgKnBCYXRQaHlzU3RhdCk7CisKKyAgLy8gUmV0dXJuIGlmIGNoYXJnZSBmdWxsCisgIC8vIFRoZSB1bml0IGlzIHZiYXQgaXMgdVYgPT0+IDEwMDAwMDAgbWVhbnMgMS4wVgorICAvLyBSZXR1cm4gS0FMX1RSVUU6IENoYXJnZSBmdWxsCisgIC8vIFJldHVybiBLQUxfRkFMU0U6IE5vdCBjaGFyZ2UgZnVsbAorICBrYWxfYm9vbCAoKmdldF9jaGFyZ2VfZnVsbCkoa2FsX2ludDMyIHZiYXQpOworCisgIC8vIFJldHVybiBpZiBpdCdzIHVuZGVyIGV4dHJlbWUgdGVtcGVyYXR1cmUKKyAgLy8gUmV0dXJuIEtBTF9UUlVFOiBJdCdzIHVuZGVyIGV4dHJlbWUgdGVtcGVyYXR1cmUKKyAgLy8gUmV0dXJuIEtBTF9GQUxTRTogSXQncyBOT1QgdW5kZXIgZXh0cmVtZSB0ZW1wZXJhdHVyZQorICBrYWxfYm9vbCAoKmdldF9jaGFyZ2VfdW5kZXJfZXh0cmVtZXRtcCkoa2FsX2ludDMyIGJhdHRtcCk7CisKKyAgLy8gUmV0dXJuIGlmIGNoYXJnZSBmdWxsIHdoZW4gdW5kZXIgZXh0cmVtZSB0ZW1wZXJhdHVyZQorICAvLyBUaGUgdW5pdCBpcyB2YmF0IGlzIHVWID09PiAxMDAwMDAwIG1lYW5zIDEuMFYKKyAgLy8gUmV0dXJuIEtBTF9UUlVFOiBDaGFyZ2UgZnVsbAorICAvLyBSZXR1cm4gS0FMX0ZBTFNFOiBOb3QgY2hhcmdlIGZ1bGwKKyAga2FsX2Jvb2wgKCpnZXRfY2hhcmdlX2V4dHJlbWV0bXBfZnVsbCkoa2FsX2ludDMyIHZiYXQpOworCisgIC8vIFJldHVybiBpZiBjaGFyZ2Ugc2hvdWxkIHJlY2hhcmdlIHdoZW4gdW5kZXIgZXh0cmVtZSB0ZW1wZXJhdHVyZQorICAvLyBUaGUgdW5pdCBpcyB2YmF0IGlzIHVWID09PiAxMDAwMDAwIG1lYW5zIDEuMFYKKyAgLy8gUmV0dXJuIEtBTF9UUlVFOiBTaG91bGQgcmVjaGFyZ2UKKyAgLy8gUmV0dXJuIEtBTF9GQUxTRTogU2hvdWxkIE5UIHJlY2hhcmdlCisgIGthbF9ib29sICgqZ2V0X2NoYXJnZV9leHRyZW1ldG1wX3JlY2hhcmdlKShrYWxfaW50MzIgdmJhdCk7CisKKyAgLy8gUmV0dXJuIEtBTF9UUlVFOiBOZWVkIHRvIGhvbGQgY2hhcmdpbmcKKyAgLy8gUmV0dXJuIEtBTF9GQUxTRTogRG8gTk9UIG5lZWQgdG8gaG9sZCBjaGFyZ2luZworICAvLyBUaGUgY29uZGl0aW9uIHRvIGhvbGQgY2hhcmdpbmc6IFRhbGtpbmcgbW9kZSAuLi4KKyAga2FsX2Jvb2wgKCpnZXRfY2hhcmdlX2hvbGQpKEJBVFBIWVN0cnVjdCAqcEJhdFBoeXNTdGF0KTsKKworICAvLyBXaGV0aGVyIHRoZSBleHRlcm5hbCBjaGFyZ2VyIGNhbiBoYW5kbGUgdGhlIHNwZWNpZmljIGNoYXJnaW5nIGJhdHRlcnkgc3RhdGUKKyAgYm10X2Nocl9mYWNfY2hlY2tfc3VwcG9ydF9lbnVtKCpnZXRfY2hyX2JhdHRfc3RhdGVfdHJhbnNpdF9zdXBwb3J0KShrYWxfdWludDMyIGN1cnJfY2hyX2JhdHRfc3RhdGUpOworCisgIC8vIFBlcmZvcm0gY2hhcmdpbmcgYmF0dGVyeSBzdGF0ZSB0cmFuc2l0CisgIC8vIGN1cnJfY2hyX2JhdHRfc3RhdGU6IEN1cnJlbnQgc3RhdGUKKyAgLy8gY2hyX29uOiBDdXJyZW50IENIUl9FTiBzdGF0ZQorICB2b2lkICgqY2hyX2JhdHRfc3RhdGVfdHJhbnNpdCkoa2FsX3VpbnQzMiBjdXJyX2Nocl9iYXR0X3N0YXRlLCBrYWxfYm9vbCBjaHJfZW4pOworCisgIC8vIEdldCBjdXJyZW50IGNoYXJnaW5nIGJhdHRlcnkgc3RhdGUgUFJFLCBGQVNUKENDKSwgVE9QT0ZGKENWKSwgRlVMTCwgLi4uCisgIGthbF91aW50MzIgKCpnZXRfY3Vycl9jaHJfYmF0dF9zdGF0ZSkoQkFUUEhZU3RydWN0ICpwQmF0UGh5c1N0YXQpOworCisgIC8vIEdldCBjdXN0b20gY2hhcmdlIGN1cnJlbnQgYWNjb3JkaW5nIHRvIHNwZWNpZmljIGNoYXJnZXIKKyAga2FsX3VpbnQzMiAoKmdldF9zcGVjaWZpY19jaHJfY3VycmVudCkoYm10X2NoYXJnZXJfdHlwZSBjaGFyZ2VyKTsKKworICAvLyBXaGV0aGVyIHRoZSB2YmF0IGlzIGhpZ2hlciB0aGFuIHNwZWNpZmljIGZ1bGwgY2hlY2sgdmF1bGUgb3Igbm90CisgIC8vIFJldHVybiBLQUxfVFJVRTogaGlnaGVyIHRoYW4gc3BlY2lmaWMgZnVsbCB2b2x0YWdlCisgIC8vIFJldHVybiBLQUxfRkFMU0U6IGxvd2VyIHRoYW4gc3BlY2lmaWMgZnVsbCB2b2x0YWdlCisgIGthbF9ib29sICgqZ2V0X3ZiYXRfc3BlY2lmaWNfZnVsbF92b2x0YWdlX3N0YXRlKShrYWxfaW50MzIgdmJhdCk7IC8vX19EUlZfQk1UX0NIQVJHSU5HX0NPTVBMRVRFX01TR19fCisKK31ibXRfZXh0X2NoYXJnZXI7CisKKy8vIEV4dGVybmFsIGNoYXJnZXIgY3VzdG9tIHRhYmxlIFYxLjAKK3R5cGVkZWYgc3RydWN0eworICAvLyBDb250cm9sIGVuYWJsZS9kaXNhYmxlIGNoYXJnZXIKKyAgdm9pZCAoKmNoYXJnZV9lbmFibGUpKGthbF9ib29sIGVuYWJsZSk7CisKKyAgLy8gU2V0IGNoYXJnZSBjdXJyZW50CisgIC8vIFRoZSB1bml0IGlzIG1BID09PiAxMDAwIG1lYW5zIDFBCisgIHZvaWQgKCpjaGFyZ2VfY3VycmVudCkoa2FsX2ludDMyIGN1cnJlbnQpOworCisgIC8vIFJldHVybiBLQUxfVFJVRTogQ2hhcmdlciB0aGluayBiYXR0ZXJ5IGlzIGZ1bGwKKyAgLy8gUmV0dXJuIEtBTF9GQUxTRTogQ2hhcmdlciB0aGluayBiYXR0ZXJ5IGlzIE5PVCBmdWxsCisgIGthbF9ib29sICgqY2hhcmdlX2Z1bGxfaW5kKShrYWxfaW50MzIgdmJhdCk7CisKKyAgLy8gUmV0dXJuIEtBTF9UUlVFOiBDaGFyZ2VyIHRoaW5nIGl0J3MgdW5kZXIgZXh0cmVtZSB0ZW1wZXJhdHVyZQorICAvLyBSZXR1cm4gS0FMX0ZBTFNFOiBDaGFyZ2VyIHRoaW5nIGl0J3MgTk9UIHVuZGVyIGV4dHJlbWUgdGVtcGVyYXR1cmUKKyAga2FsX2Jvb2wgKCpjaGFyZ2VfdW5kZXJfZXh0cmVtZXRtcF9pbmQpKGthbF9pbnQzMiBiYXR0bXApOworCisgIC8vIFJldHVybiBLQUxfVFJVRTogQ2hhcmdlciB0aGluayBiYXR0ZXJ5IGlzIGZ1bGwgaWYgaXQncyB1bmRlciBleHRyZW1lIHRlbXBlcmF0dXJlCisgIC8vIFJldHVybiBLQUxfRkFMU0U6IENoYXJnZXIgdGhpbmsgYmF0dGVyeSBpcyBOT1QgaWYgaXQncyBmdWxsIHVuZGVyIGV4dHJlbWUgdGVtcGVyYXR1cmUKKyAga2FsX2Jvb2wgKCpjaGFyZ2VfZXh0cmVtZXRtcF9mdWxsX2luZCkoa2FsX2ludDMyIHZiYXQpOworCisgIC8vIFJldHVybiBLQUxfVFJVRTogQ2hhcmdlciB0aGluayBiYXR0ZXJ5IHNob3VsZCBiZSByZWNoYXJnZWQgaWYgaXQncyB1bmRlciBleHRyZW1lIHRlbXBlcmF0dXJlCisgIC8vIFJldHVybiBLQUxfRkFMU0U6IENoYXJnZXIgdGhpbmsgYmF0dGVyeSBzaG91bGQgTk9UIGJlIHJlY2hhcmdlZCBpZiBpdCdzIHVuZGVyIGV4dHJlbWUgdGVtcGVyYXR1cmUKKyAga2FsX2Jvb2wgKCpjaGFyZ2VfZXh0cmVtZXRtcF9yZWNoYXJnZV9pbmQpKGthbF9pbnQzMiB2YmF0KTsKKworICAvLyBOdW1iZXIgb2YgY2hhcmdlIGN1cnJlbnQgbGV2ZWwgKEV4OiAxMDBtQSwgMTUwbUEsIDUwMG1BIC4uLikKKyAga2FsX3VpbnQzMiBjaGFyZ2VfY3VycmVudF9udW07CisKKyAgLy8gVGhlIGN1cnJlbnQgbXVzdCBiZSBsaXN0ZWQgZnJvbSBsYXJnZXN0IHRvIHNtYWxsZXN0CisgIC8vIEV4OiAwOiA1MDBtQTsgMTogMjUwbUE7IDI6IDEwMG1BIC4uLgorICBrYWxfdWludDMyICpjaGFyZ2VfY3VycmVudF90YWJsZTsKKworICAvLyBSZXR1cm4gdGhlIGN1c3RvbSBjaGFyZ2UgY3VycmVudCBmb3Igc3BlY2lmaWMgY2hhcmdlciB0eXBlLCB0aGUgdW5pdCBpcyBtQQorICBrYWxfdWludDMyICgqZ2V0X2N1c3RvbV9jaGFyZ2VfY3VycmVudCkoYm10X2NoYXJnZXJfdHlwZSBjaGFyZ2VyKTsKKworICAvLyBXaGV0aGVyIHRoZSBjaGFyZ2Ugc291cmNlIGlzIGdvb2QKKyAgLy8gUmV0dXJuIEtBTF9UUlVFOiBDaGFyZ2Ugc291cmNlIGlzIGdvb2QKKyAgLy8gUmV0dXJuIEtBTF9GQUxTRTogQ2hhcmdlIHNvdXJjZSBpcyBOT1QgZ29vZAorICBrYWxfYm9vbCAoKmNoYXJnZV9zb3VyY2VfZ29vZCkodm9pZCk7CisKKyAgLy8gV2hldGhlciB0aGUgdmJhdCBpcyBoaWdoZXIgdGhhbiBzcGVjaWZpYyBmdWxsIGNoZWNrIHZhdWxlIG9yIG5vdAorICAvLyBSZXR1cm4gS0FMX1RSVUU6IGhpZ2hlciB0aGFuIHNwZWNpZmljIGZ1bGwgdm9sdGFnZQorICAvLyBSZXR1cm4gS0FMX0ZBTFNFOiBsb3dlciB0aGFuIHNwZWNpZmljIGZ1bGwgdm9sdGFnZQorICBrYWxfYm9vbCAoKnZiYXRfc3BlY2lmaWNfZnVsbF9jaGVja192b2x0YWdlKShrYWxfaW50MzIgdmJhdCk7IC8vX19EUlZfQk1UX0NIQVJHSU5HX0NPTVBMRVRFX01TR19fCisKK31ibXRfZXh0X2NoYXJnZXJfY3VzdG9tX2NvbmZpZzsKKworCisvLyBGb3IgZXh0ZXJuYWwgY2hhcmdlciBtZWNoYW5pc20gaW50ZWdyYXRpb24KKworCisvLyBGb3IgZXh0ZXJuYWwgY2hhcmdlciBkZXRlY3Rpb24gaW50ZWdyYXRpb24KK3R5cGVkZWYgc3RydWN0Cit7CisgIC8vIFRoaXMgQVBJIHJlcG9ydCBjaGFyZ2VyIGluL291dCBhbmQgQUMgb3IgVVNCIHR5cGUgdG9nZXRoZXIKKyAgLy8gVGhpcyBBUEkgbWF5IGJlIGNhbGxlZCBhdCBhbnl0aW1lCisgIC8vIEV4OiBCZWZvcmUgc2NoZWR1bGVyIGlzIHJ1bm5pbmcgKEJvb3QgaW5pdCBwaGFzZSkKKyAgLy8gICAgIENhbGxlZCBhdCBib290IHRpbWUgKE5vIHNjaGVkdWxlciBpcyBydW5uaW5nKQorICAvLyAgICAgQ2FsbGVkIGluIEhJU1IgKERydl9ISVNSIGFuZCBzeXN0ZW0gSElTUikKKyAgLy8gICAgIENhbGxlZCBpbiBUYXNrCisgIGNoYXJnZXJfdXNiX3ByZXNlbnRfZW51bSAoKmRldF9jaGFyZ2VyX3ByZXNlbnQpKHZvaWQpOworCisgIC8vIFRoaXMgQVBJIGlzIGZvciBQV0lDIHRvIHJlZ2lzdGVyIEhJU1IgaGFuZGxlciBmb3IgY2hhcmdlcgorICAvLyBQV0lDIHdpbGwgdXNlIGRldF9jaGFyZ2VyX3ByZXNlbnQoKSB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBpcyBpbi9vdXQKKyAgdm9pZCAoKnJlZ19jaHJfaGlzcikodm9pZCAoY2hyX2hpc3JfY2FsbGJhY2spKHZvaWQpKTsKKworICAvLyBUaGlzIEFQSSBpcyBmb3IgUFdJQyB0byByZWdpc3RlciBISVNSIGhhbmRsZXIgZm9yIHVzYgorICAvLyBQV0lDIHdpbGwgdXNlIGRldF9jaGFyZ2VyX3ByZXNlbnQoKSB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBpcyBpbi9vdXQKKyAgdm9pZCAoKnJlZ191c2JfaGlzcikodm9pZCAodXNiX2hpc3JfY2FsbGJhY2spKHZvaWQpKTsKKworICAvLyBUaGlzIEFQSSBpcyB0byBzZXQgUy9XIGRlYm91bmNlIHRpbWUgZm9yIGNoYXJnZXIgY2FibGUKKyAgLy8gVGhlIHVpbnQgb2YgZGViX3RpbWUgaXMgaW4gMTBtcyAoR1BUIHRpY2spCisgIHZvaWQgKCpzZXRfY2hyX2RlYl90aW1lKShrYWxfdWludDMyIGRlYl90aW1lKTsKKworICAvLyBUaGlzIEFQSSBpcyB0byBzZXQgUy9XIGRlYm91bmNlIHRpbWUgZm9yIHVzYiBjYWJsZQorICAvLyBUaGUgdWludCBvZiBkZWJfdGltZSBpcyBpbiAxMG1zIChHUFQgdGljaykKKyAgdm9pZCAoKnNldF91c2JfZGViX3RpbWUpKGthbF91aW50MzIgZGViX3RpbWUpOworCisgIC8vIFRoaXMgQVBJIGlzIHRvIHJlcG9ydCB3aGV0aGVyIFVTQiBkZXRlY3Rpb24gaXMgc3VwcG9ydGVkIG9yIE5PVAorICBrYWxfYm9vbCAoKnN1cHBvcnRfdXNiX2RldCkodm9pZCk7CisKKyAgLy8gSW5pdCB0aGUgZXh0ZXJuYWwgY2hhcmdlciBkZXRlY3Rpb24gbWVjaGFuaXNtCisgIC8vIFRoZSBBUEkgaXMgY2FsbGVkIGF0IGJvb3QgcGhhc2UKKyAgLy8gQWZ0ZXIgdGhpcyBjYWxsLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBjYWxsIGRldF9jaGFyZ2VyX3ByZXNlbnQoKQorICAvLyBQcm92aWRlciBuZWVkIHRvIGd1YXJhbnRlZSB0aGlzCisgIHZvaWQgKCpkcnZfaW5pdCkodm9pZCk7CisKKyAgLy8gVGhlIEFQSSBpcyBjYWxsZWQgYXQgcG1pYyBhZHB0IGxheWVyIGluaXQgcGhhc2UKKyAgdm9pZCAoKmVuYWJsZV9pbnRyKSh2b2lkKTsKKworfWJtdF9leHRfY2hhcmdlcl9kZXQ7CisKK3R5cGVkZWYgZW51bQoreworICBFWFRfQ0FCTEVfUEFUSF9DSEFSR0VSLAorICBFWFRfQ0FCTEVfUEFUSF9TVERfVVNCLAorICBFWFRfQ0FCTEVfUEFUSF9ISUdIX0NVUlJFTlRfVVNCLAorICBFWFRfQ0FCTEVfUEFUSF9VQVJULAorICBFWFRfQ0FCTEVfUEFUSF9FQVJQSE9ORSwKKyAgRVhUX0NBQkxFX1BBVEhfVFZfT1VULAorICBFWFRfQ0FCTEVfUEFUSF9VU0JfT1RHLAorICBFWFRfQ0FCTEVfUEFUSF9GQUNfVUFSVCwKKyAgRVhUX0NBQkxFX1BBVEhfRkFDX1VTQiwKKyAgRVhUX0NBQkxFX1BBVEhfQ1NfQ0hBUkdFUiwgIC8vIEN1c3RvbWVyIHNwZWNpZmljIGNoYXJnZXIKKyAgRVhUX0NBQkxFX1BBVEhfTUFYCit9ZXh0X2NhYmxlX3BhdGhfZW51bTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgLy8gRmFjdG9yeSBtb2RlIEFQSQorICAvLyBGb3JjZSBzd2l0Y2ggZXh0ZXJuYWwgY2FibGUgdG8gc3BlY2lmaWMgcGF0aCBmb3IgdGVzdAorICB2b2lkICgqc2V0X3BhdGgpKGV4dF9jYWJsZV9wYXRoX2VudW0gcGF0aCk7CisKKyAgLy8gRmFjdG9yeSBtb2RlIEFQSQorICAvLyBSZXR1cm4gY3VycmVudCBleHRlcm5hbCBjYWJsZSBwYXRoCisgIGV4dF9jYWJsZV9wYXRoX2VudW0gKCpnZXRfY3Vycl9wYXRoKSh2b2lkKTsKKworICAvLyBBU1NFUlQgbW9kZSBBUEkKKyAgLy8gQ2FsbGVkIHdoZW4gc3lzdGVtIGVudGVyIEFTU0VSVCwgCisgIC8vIHRoZSBleHQgY2FibGUgbWVjaGFuaXNtIHNob3VsZCBzd2l0Y2ggY2FibGUgcGF0aCBmb3IgbWVtb3J5IGR1bXAKKyAgdm9pZCAoKmV4dF9jYWJsZV9mb3JjZV9zZXRfcGF0aCkoZXh0X2NhYmxlX3BhdGhfZW51bSBwYXRoKTsKKworICAvLyBBUEkgZm9yIHNwZWNpZmljIHdvcmthcm91bmQ6IFR1cm4gb24vb2ZmIGV4dCBjYWJsZSBwYXRoCisgIHZvaWQgKCpleHRfY2FibGVfV0Ffc2V0X3BhdGgpKGV4dF9jYWJsZV9wYXRoX2VudW0gcGF0aCwga2FsX2Jvb2wgb24pOworCit9ZXh0X2NhYmxlX2RldF9mYWNfaWY7CisKKworLy8gRm9yIGV4dGVybmFsIGNoYXJnZXIgZGV0ZWN0aW9uIGludGVncmF0aW9uCisKK2V4dGVybiBrYWxfdWludDggIGJtdF9ibXRpZF9hZGNfaGFuZGxlW0JNVF9BRENfTUFYX0NIQU5ORUxfVE9UQUxdOworZXh0ZXJuIGthbF91aW50OCAgYm10X2FkY19oYW5kbGU7CisKKy8vIE1vRElTIHBhcnNlciBza2lwIHN0YXJ0CisvLyBUaGUgZm9sbG93aW5nIEFQSXMgYXJlIGltcG1lbWVudGVkIGluIGN1c3RvbSBmb2xkZXIsIHdoaWNoIHdpbGwgYmUgaW5jbHVjZGVkIGluIE1vRElTCisvKnVzYiBjaGFyZ2UqLworZXh0ZXJuIGthbF9ib29sIGJtdF9zdXBwb3J0X3VzYl9jaGFyZ2Uodm9pZCk7CitleHRlcm4ga2FsX2ludDMyIGJtdF9nZXRfY2hyX3VzYl9kZXRlY3Rfdm9sdCh2b2lkKTsKKy8vIE1vRElTIHBhcnNlciBza2lwIGVuZAorCisvLyBNb0RJUyBwYXJzZXIgc2tpcCBzdGFydAorLypjaGFyaW5nIHBhcmFtZXRlcnMqLworLy8gTW9ESVMgcGFyc2VyIHNraXAgZW5kCisKKyNpZiBkZWZpbmVkKF9fR0VORVJBTF9FWFRFUk5BTF9DSEFSR0VSX18pCitleHRlcm4gYm10X2V4dF9jaGFyZ2VyICpleHRfY2hhcmdlcjsgLy8gVmFyaWFibGUgaW4gcHdpYy5jCitleHRlcm4gYm10X2V4dF9jaGFyZ2VyICpibXRfZ2V0X2V4dF9jaGFyZ2VyKHZvaWQpOworZXh0ZXJuIGJtdF9leHRfY2hhcmdlcl9jdXN0b21fY29uZmlnICpibXRfZXh0X2NoYXJnZXJfZ2V0X2N1c3RvbV9jb25maWcodm9pZCk7CisjZW5kaWYgLy8gI2lmIGRlZmluZWQoX19HRU5FUkFMX0VYVEVSTkFMX0NIQVJHRVJfXykKKworZXh0ZXJuIGV4dF9jYWJsZV9kZXRfZmFjX2lmICpjdXN0b21fZ2V0X2V4dF9jYWJsZV9mYWModm9pZCk7CisKKyNpZiBkZWZpbmVkKF9fRFJWX0VYVF9DSEFSR0VSX0RFVEVDVElPTl9fKQorZXh0ZXJuIGJtdF9leHRfY2hhcmdlcl9kZXQgKmV4dF9jaGFyZ2VyX2RldDsKK2V4dGVybiBibXRfZXh0X2NoYXJnZXJfZGV0ICpibXRfY3VzdG9tX2dldF9leHRfY2hhcmdlcl9kZXQodm9pZCk7CisjZW5kaWYgLy8gI2lmIGRlZmluZWQoX19EUlZfRVhUX0NIQVJHRVJfREVURUNUSU9OX18pCisKK2V4dGVybiBrYWxfdWludDggQk1UX01BWF9DSEFOTkVMOyAgICAgIC8vIFRoZSBBREMgY2hhbm5lbCBudW1iZXIgaW4gQk1UIChVc2VkIGZvciBjaGFyZ2luZyBmYWN0b3IgbW9uaXRvcmluZykKK2V4dGVybiBCTVRTdHJ1Y3QgQk1UOworCisjaWYgZGVmaW5lZChEUlZfQURDX0NBTElCUkFUSU9OX0VGVVNFKQorZXh0ZXJuIGthbF9ib29sIGJtdF9yZWFkX2NhbGlicmF0aW9uX2RhdGEoQURDX0NBTElEQVRBICphZGNfY2FsaSk7CisjZW5kaWYgLy8jaWYgZGVmaW5lZChEUlZfQURDX0NBTElCUkFUSU9OX0VGVVNFKQorCitleHRlcm4gdm9pZCBCTVRfVmJhdEluSElTUih2b2lkKTsKK2V4dGVybiBrYWxfYm9vbCBibXRfaXNfYmF0X29uKHZvaWQpOworCitleHRlcm4ga2FsX2Jvb2wgQk1UX09idGFpbkJNVFBIWVNUQVQoQkFUUEhZU3RydWN0ICpCQVRQSFlTKTsKK2V4dGVybiB2b2lkIGJtdF9jaHJfZm9yY2VfZW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4ga2FsX2Jvb2wgYm10X2lzX2Nocl92YWxpZCh2b2lkKTsKK2V4dGVybiBrYWxfYm9vbCBibXRfZ2V0X2Nocl9jdl9kZXQodm9pZCk7CisjZW5kaWYgLy8gRW5kIG9mICNpZm5kZWYgX0JNVF9ICisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsLmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYzhkZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbC5oCkBAIC0wLDAgKzEsMTM5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDAxCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgZGNsLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIEhlYWRlciBmaWxlIG9mIERDTCAoRHJpdmVyIENvbW1vbiBMYXllcikuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19EQ0xfSF9fCisjZGVmaW5lIF9fRENMX0hfXworCisKKyNpZiAhZGVmaW5lZChHRU5fRk9SX1BDKSAmJiAhZGVmaW5lZChOVlJBTV9BVVRPX0dFTikKKyNpZmRlZiBfX0NBVEVHT1JZX01PREVNX18KKy8vI2Vycm9yIGRydl9mZWF0dXJlcy5oIGluY2x1ZGUgYnkgbW9kZW0gZGV0ZWN0aW9uCisjZW5kaWYgCisjZW5kaWYgLy8hZGVmaW5lZChHRU5fRk9SX1BDKSAmJiAhZGVmaW5lZChOVlJBTV9BVVRPX0dFTikKKworCisKKworLyogIEZvciBzb2x2ZSBidWlsZCBlcnJvciBhZnRlciBkZWZpbmVkIF9fQ0FURUdPUllfTU9ERU1fXyAqLworLyoKKyNpZmRlZiBfX0NBVEVHT1JZX01PREVNX18gIC8vIGRvZXNuJ3QgbmVlZCB0byBpbmNsdWRlIHRoZXNlIG1vZHVsZQorLy8jZGVmaW5lIE5PTkVfTU9ERU1fQk1UIAorLy8jZGVmaW5lIE5PTkVfTU9ERU1fUlRDIAorI2RlZmluZSBOT05FX01PREVNX0kyQworI2RlZmluZSBOT05FX01PREVNX0FVWAorLy8jZGVmaW5lIE5PTkVfTU9ERU1fS0JESCAKKy8vI2RlZmluZSBOT05FX01PREVNX0tCRCAKKyNkZWZpbmUgTk9ORV9NT0RFTV9QV00KKyNkZWZpbmUgTk9ORV9NT0RFTV9BTEVSVEVSCisjZGVmaW5lIE5PTkVfTU9ERU1fVFMKKyNkZWZpbmUgTk9ORV9NT0RFTV9TRAorI2RlZmluZSBOT05FX01PREVNX1VTQkQKKyNkZWZpbmUgTk9ORV9NT0RFTV9PVEcKKyNkZWZpbmUgTk9ORV9NT0RFTV9JUkRBCisvLyNkZWZpbmUgTk9ORV9NT0RFTV9QVyAKKyNkZWZpbmUgTk9ORV9NT0RFTV9QWFMKKyNlbmRpZgorKi8KKworLy8jZGVmaW5lIE5PTkVfTU9ERU1fSURDCisKKy8vWlRFNzMKKy8vI2lmZGVmIF9fTU9ERU1fQ09NUE9ORU5UX18gIC8vIGRvZXNuJ3QgbmVlZCB0byBpbmNsdWRlIHRoZXNlIG1vZHVsZSBpbiBtb2RlbSBpcAorLy8jZGVmaW5lIE5PTkVfTU9ERU1fQk1UIAkJCQkvLwlsNG1pc2MKKy8vI2RlZmluZSBOT05FX01PREVNX1JUQyAJCQkJLy8gCWw0bWlzYworLy8jZGVmaW5lIE5PTkVfTU9ERU1fS0JESCAJCQkvLwlsNF9jbGFzc2IKKy8vI2RlZmluZSBOT05FX01PREVNX0tCRCAJCQkJLy8JbDRfY2xhc3NiCisvLyNkZWZpbmUgTk9ORV9NT0RFTV9QVyAgCQkJCS8vCWw0X2NsYXNzYgorLy8jZW5kaWYKKworLy9OQU1JNzYKKy8vI2lmZGVmIF9fTU9ERU1fUFJPRFVDVF9fIC8vIGRvZXNuJ3QgbmVlZCB0byBpbmNsdWRlIHRoZXNlIG1vZHVsZSBpbiBtb2RlbSBwcm9kdWN0CisvLyNkZWZpbmUgTk9ORV9NT0RFTV9CTVQgIAkvLyBsNG1pc2MKKy8vI2RlZmluZSBOT05FX01PREVNX1JUQyAgCS8vIGw0bWlzYworLy8jZGVmaW5lIE5PTkVfTU9ERU1fS0JESCAgCS8vIGw0bWlzYyBsNF9jYWxzc2IKKy8vI2RlZmluZSBOT05FX01PREVNX0tCRCAJCS8vIGw0bWlzYyBsNF9jbGFzc2IKKy8vI2RlZmluZSBOT05FX01PREVNX1BXIAkJLy8gbDRtaXNjIHBlcmlwaGVyYWwgbDRfY2xhc3NiCisvLyNlbmRpZgorCisKKwordHlwZWRlZiBjaGFyICAgICAgICAgICAgICBEQ0xfQ0hBUjsKK3R5cGVkZWYgc2lnbmVkIGNoYXIgICAgICAgRENMX0lOVDg7Cit0eXBlZGVmIHNpZ25lZCBzaG9ydCAgICAgIERDTF9JTlQxNjsKK3R5cGVkZWYgc2lnbmVkIGxvbmcgICAgICAgRENMX0lOVDMyOworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICBEQ0xfVUNIQVI7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICBEQ0xfVUlOVDg7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICBEQ0xfVUlOVDE2OwordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgRENMX1VJTlQzMjsKKworI2lmICFkZWZpbmVkKEdFTl9GT1JfUEMpICYmIGRlZmluZWQoX01TQ19WRVIpCisgICB0eXBlZGVmIHNpZ25lZCBfX2ludDY0ICAgIERDTF9JTlQ2NDsKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCAgIERDTF9VSU5UNjQ7CisjZWxzZQorICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgICBEQ0xfVUlOVDY0OworICAgdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nICAgICBEQ0xfSU5UNjQ7CisjZW5kaWYKKwordHlwZWRlZiBkb3VibGUgICAgICAgICAgICAgRENMX0RPVUJMRTsKK3R5cGVkZWYgaW50CQlEQ0xfSU5UOworCisvL3R5cGVkZWYgaW50IERDTF9CT09MOwordHlwZWRlZiBlbnVtCit7CisgICBEQ0xfRkFMU0UgPSAwLAorICAgRENMX1RSVUUKK31EQ0xfQk9PTEVBTjsKKworI2RlZmluZSBEQ0xfQk9PTCAgRENMX0JPT0xFQU4KKworI2RlZmluZQlEQ0xfREVGSU5JVElPTl9TVFJVQ1QKKworI2lmbmRlZiBOT05FX01PREVNX0dQVAorI2luY2x1ZGUgImRjbF9ncHQuaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX0dQSU8KKyNpbmNsdWRlICJkY2xfZ3Bpby5oIgorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fVUFSVAorI2luY2x1ZGUgImRjbF91YXJ0LmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9XRFQKKyNpbmNsdWRlICJkY2xfd2R0LmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9BREMKKyNpbmNsdWRlICJkY2xfYWRjLmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9CTVQKKyNpbmNsdWRlICJkY2xfYm10LmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9QRkMKKyNpbmNsdWRlICJkY2xfcGZjLmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9SVEMKKyNpbmNsdWRlICJkY2xfcnRjLmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9JMkMKKyNpbmNsdWRlICJkY2xfaTJjLmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9BVVgKKyNpbmNsdWRlICJkY2xfYXV4LmgiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChOT05FX01PREVNX1BXTSkgJiYgIWRlZmluZWQoTk9ORV9NT0RFTV9BTEVSVEVSKQorI2luY2x1ZGUgImRjbF9wd20uaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX0tCREgKKyNpbmNsdWRlICJEY2xIX2tiZC5oIgorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fS0JECisjaW5jbHVkZSAiRGNsU19rYmQuaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX1NUUworI2luY2x1ZGUgImRjbF9zdHMuaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX01TREMKKyNpbmNsdWRlICJkY2xfbXNkYy5oIgorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fVVNCCisjaW5jbHVkZSAiZGNsX3VzYl9kcnYuaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX1VTQkQKKyNpbmNsdWRlICJkY2xfdXNiX2hjZC5oIgorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fT1RHCisjaW5jbHVkZSAiZGNsX290Z19kcnYuaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX0lSREEKKyNpbmNsdWRlICJkY2xfaXJkYS5oIgorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fU0lNCisjaW5jbHVkZSAiZGNsX3NpbS5oIgorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fUE1VCisjaW5jbHVkZSAiZGNsX3BtdS5oIgorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fUFcKKyNpbmNsdWRlICJkY2xfcHcuaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX0NIUl9VU0JfREVUCisjaW5jbHVkZSAiZGNsX2Nocl9kZXQuaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX1NQTUkKKyNpbmNsdWRlICJkY2xfc3BtaS5oIgorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fUFhTCisjaW5jbHVkZSAiZGNsX3B4cy5oIgorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fU0lNX0dQSU8KKyNpbmNsdWRlICJkY2xfc2ltX2dwaW8uaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX0YzMktfQ0xLCisjaW5jbHVkZSAiZGNsX2YzMmtfY2xrLmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9JREMKKyNpbmNsdWRlICJkY2xfaWRjLmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NVEFECisjaW5jbHVkZSAiZGNsX210YWQuaCIKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfU1RBVFVTIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChTVEFUVVNfT0spCisjdW5kZWYgU1RBVFVTX09LCisjZW5kaWYKKworI2lmIGRlZmluZWQoU1RBVFVTX0ZBSUwpCisjdW5kZWYgU1RBVFVTX0ZBSUwgIAorI2VuZGlmICAKKwordHlwZWRlZiBEQ0xfSU5UMzIgRENMX1NUQVRVUzsKK3R5cGVkZWYgZW51bQoreworICAgU1RBVFVTX09LID0gMCwKKyAgIFNUQVRVU19GQUlMID0gLTEsCisgICBTVEFUVVNfSU5WQUxJRF9DTUQgPSAtMiwKKyAgIFNUQVRVU19VTlNVUFBPUlRFRCA9IC0zLAorICAgU1RBVFVTX05PVF9PUEVORUQgPSAtNCwKKyAgIFNUQVRVU19JTlZBTElEX0VWRU5UID0gLTUsCisgICBTVEFUVVNfSU5WQUxJRF9EQ0xfSEFORExFID0gLTYsCisgICBTVEFUVVNfSU5WQUxJRF9DVFJMX0RBVEEgPSAtNywKKyAgIFNUQVRVU19JTlZBTElEX0NPTkZJR1VSQVRJT04gPSAtOCwKKyAgIFNUQVRVU19JTlZBTElEX0FSR1VNRU5UID0gLTksCisgICBTVEFUVVNfRVJST1JfVElNRU9VVCA9IC0xMCwKKyAgIFNUQVRVU19FUlJPUl9DUkNFUlJPUiA9IC0xMSwKKyAgIFNUQVRVU19FUlJPUl9SRUFET05MWSA9IC0xMiwKKyAgIFNUQVRVU19FUlJPUl9XUk9OR19TVEFURSA9IC0xMywKKyAgIFNUQVRVU19JTlZBTElEX0RFVklDRSA9IC0xNCwKKyAgIFNUQVRVU19BTFJFQURZX09QRU5FRCA9IC0xNSwKKyAgIFNUQVRVU19TRVRfVkZJRk9fRkFJTCA9IC0xNiwKKyAgIFNUQVRVU19JTlZBTElEX09QRVJBVElPTiA9IC0xNywKKyAgIFNUQVRVU19ERVZJQ0VfTk9UX0VYSVNUID0gLTE4LAorCisgICAvLyovIEkyQyBEQ0wgYWRkZWQgLyovLworICAgU1RBVFVTX0RFVklDRV9OT1RfU1VQUE9SVF9ETUEgPSAtMTksCisgICBTVEFUVVNfREVWSUNFX0lTX0JVU1kgPSAtMjAsCisgICBTVEFUVVNfQUNLRVJSID0gLTIxLCAKKyAgIFNUQVRVU19IU19OQUNLRVJSID0gLTIyLAorCisgICBTVEFUVVNfQlVGRkVSX0VNUFRZID0gMQorfSBEQ0xfU1RBVFVTX1Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfREVWCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgRENMX1VJTlQxNiBEQ0xfREVWOwordHlwZWRlZiBlbnVtCit7CisjaWZuZGVmIE5PTkVfTU9ERU1fVUFSVAkKKyAgIERDTF9VQVJUX0dST1VQX1NUQVJUID0gMCwKKyAgIERDTF9VQVJUX0RFViAvLyBNYXJjbyBkZWZpbmVkIGluIGRjbF91YXJ0LmgKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX0dQSU8gICAKKyAgIERDTF9HUElPX0dST1VQX1NUQVJUID0gMHgxMDAsCisgICBEQ0xfR1BJTywKKyAgIERDTF9HUE8sCisgICBEQ0xfR1BJT19DTEssCisjZW5kaWYgICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9HUFQgICAKKyAgIERDTF9HUFRfR1JPVVBfU1RBUlQgPSAweDIwMCwKKyAgIERDTF9HUFRfQ0IsCisgICBEQ0xfR1BUX0NCMiwKKyAgIERDTF9HUFRfQnVzeVdhaXQsCisgICBEQ0xfR1BUX0ZyZWVSVU4zLAorICAgRENMX0dQVF9GcmVlUlVONCwKKyAgIERDTF9HUFRfREVCVUcsCisgICBEQ0xfWEdQVCwKKyAgIERDTF9HUFRfQ0JfTVMsIC8qIGRvbmdtaW5nIGFkZCBmb3IgMW1zIEdQVCAqLworICAgRENMX0xJVEVHUFRfQ0JfRVRNUiwgLyogd2F5IGFkZCBmb3IgRVRNUiAqLworICAgRENMX0dQVF9DQl9MT0dHSU5HLCAvKiB3YXkgYWRkIGZvciBMT0dHSU5HIDFtcyBHUFQgKi8KKyAgIERDTF9HUFRfQzJLX09TLCAvKiB3YXkgYWRkIGZvciBDMksgMXVzIE9uZVNob3QgdGltZXIgKi8KKyAgIERDTF9HUFRfQzJLX0FSLCAvKiB3YXkgYWRkIGZvciBDMksgMXVzIEF1dG8gUmVwZWF0IHRpbWVyICovCisgICBEQ0xfR1BUX0RTUCwgLyogd2F5IGFkZCBmb3IgRFNQIDF1cyBPbmVTaG90IHRpbWVyICovCisgICBEQ0xfR1BUX0RTQ0NfMCwgLyogQWx2YSBhZGQgZm9yIERTQ0MgMXVzIE9uZVNob3QgdGltZXIgKi8KKyAgIERDTF9HUFRfRFNDQ18xLCAvKiBBbHZhIGFkZCBmb3IgRFNDQyAxdXMgT25lU2hvdCB0aW1lciAqLworICAgRENMX0dQVF9EUENPUFJPLAorI2VuZGlmICAgCisjaWZuZGVmIE5PTkVfTU9ERU1fUFdNICAKKyAgIERDTF9QV01fR1JPVVBfU1RBUlQgPSAweDMwMCwKKyAgIERDTF9QV00xLAorICAgRENMX1BXTTIsCisgICBEQ0xfUFdNMywKKyAgIERDTF9QV000LAorICAgRENMX1BXTTUsCisgICBEQ0xfUFdNNiwKKyNlbmRpZiAgIAorICAgRENMX1BXTV9HUk9VUF9FTkQgPSAweDQwMCwKKyAgIERDTF9SRVNUX0dST1VQX1NUQVJUID0gRENMX1BXTV9HUk9VUF9FTkQsCisjaWZuZGVmIE5PTkVfTU9ERU1fQk1UICAgCisgICBEQ0xfQk1UX0dST1VQX1NUQVJUID0gMHg1MDAsICAgIAorICAgRENMX0JNVCwKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX1BGQyAgCisgICBEQ0xfUEZDX0dST1VQX1NUQVJUID0gMHg2MDAsICAKKyAgIERDTF9QRkMsCisjZW5kaWYgICAgIAorI2lmbmRlZiBOT05FX01PREVNX1JUQyAKKyAgIERDTF9SVENfR1JPVVBfU1RBUlQgPSAweDcwMCwgICAgCisgICBEQ0xfUlRDLAorI2VuZGlmICAgICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9BREMgCisgICBEQ0xfQURDX0dST1VQX1NUQVJUID0gMHg4MDAsICAgICAgCisgICBEQ0xfQURDLAorI2VuZGlmICAgIAorI2lmbmRlZiBOT05FX01PREVNX1BNVQorICAgRENMX1BNVV9HUk9VUF9TVEFSVCA9IDB4OTAwLCAgICAgIAorICAgRENMX1BNVSwKKyNlbmRpZiAgICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9QVyAKKyAgIERDTF9QV19HUk9VUF9TVEFSVCA9IDB4QTAwLCAgICAKKyAgIERDTF9QVywKKyNlbmRpZiAgICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9DSFJfVVNCX0RFVAorICAgRENMX0NIUl9VU0JfREVUX0dST1VQX1NUQVJUID0gMHhCMDAsICAgCisgICBEQ0xfQ0hSX1VTQl9ERVQsCisjZW5kaWYgICAgCisjaWZuZGVmIE5PTkVfTU9ERU1fQUxFUlRFUiAgIAorICAgRENMX0FMRVJURVJfR1JPVVBfU1RBUlQgPSAweEMwMCwKKyAgIERDTF9BTEVSVEVSLAorI2VuZGlmIAorI2lmbmRlZiBOT05FX01PREVNX0tCRCAKKyAgIERDTF9LQkRfR1JPVVBfU1RBUlQgPSAweEQwMCwgIAorICAgRENMX0tCRCwKKyNlbmRpZiAgICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9UUyAKKyAgIERDTF9UU19HUk9VUF9TVEFSVCA9IDB4RTAwLCAgICAgCisgICBEQ0xfVFMsCisjZW5kaWYgICAgCisjaWZuZGVmIE5PTkVfTU9ERU1fSTJDICAKKyAgIERDTF9JMkNfR1JPVVBfU1RBUlQgPSAweEYwMCwgIAorICAgRENMX0kyQywKKyNlbmRpZgorLyogTW9seSBoYXZlIG5vIEFDQ0RFVCovICAgIAorI2lmIDAKKyNpZm5kZWYgTk9ORV9NT0RFTV9BVVggIAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmIAorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fV0RUIAorICAgRENMX1dEVF9HUk9VUF9TVEFSVCA9IDB4MTEwMCwgIAorICAgRENMX1dEVCwKKyNlbmRpZiAgIAorI2lmbmRlZiBOT05FX01PREVNX0lSREEKKyAgIERDTF9JUkRBX0dST1VQX1NUQVJUID0gMHgxMjAwLCAgCisgICBEQ0xfSVJEQSwKKyNlbmRpZiAKKyNpZm5kZWYgTk9ORV9NT0RFTV9VU0IKKyAgIERDTF9VU0JfR1JPVVBfU1RBUlQgPSAweDEzMDAsICAgCisgICBEQ0xfVVNCLAorI2VuZGlmICAgIAorI2lmbmRlZiBOT05FX01PREVNX1NJTSAKKyAgIERDTF9TSU1fR1JPVVBfU1RBUlQgPSAweDE0MDAsICAgCisgICBEQ0xfU0lNLAorI2VuZGlmICAgICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9TRAorICAgRENMX1NEX0dST1VQX1NUQVJUID0gMHgxNTAwLCAgIAorICAgRENMX1NELAorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fTVMgCisgICBEQ0xfTVNfR1JPVVBfU1RBUlQgPSAweDE2MDAsICAgCisgICBEQ0xfTVMsCisjZW5kaWYgICAgCisjaWZuZGVmIE5PTkVfTU9ERU1fU0RJTyAKKyAgIERDTF9TRElPX0dST1VQX1NUQVJUID0gMHgxNzAwLCAgIAorICAgRENMX1NESU8sCisjZW5kaWYgICAgCisjaWZuZGVmIE5PTkVfTU9ERU1fT05FVyAKKyAgIERDTF9PTkVXX0dST1VQX1NUQVJUID0gMHgxODAwLCAgIAorICAgRENMX09ORVcsIC8vMS13aXJlCisjZW5kaWYgICAgCisjaWZuZGVmIE5PTkVfTU9ERU1fSERRCisgICBEQ0xfSERRX0dST1VQX1NUQVJUID0gMHgxOTAwLCAgICAKKyAgIERDTF9IRFEsCisjZW5kaWYgICAgCisjaWZuZGVmIE5PTkVfTU9ERU1fUFhTCisgICBEQ0xfUFhTX0dST1VQX1NUQVJUID0gMHgxQTAwLCAgIAorICAgRENMX1BYUywKKyNlbmRpZiAKKyNpZm5kZWYgTk9ORV9NT0RFTV9TSU1fR1BJTyAgCisgICBEQ0xfU0lNX0dQSU9fR1JPVVBfU1RBUlQgPSAweDFCMDAsIAorICAgRENMX1NJTV9HUElPLAorI2VuZGlmICAgIAorI2lmbmRlZiBOT05FX01PREVNX1NJTV9HUEkKKyAgIERDTF9TSU1fR1BJX0dST1VQX1NUQVJUID0gMHgxQzAwLCAgICAKKyAgIERDTF9TSU1fR1BJLAorI2VuZGlmICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9GMzJLX0NMSworICAgRENMX0YzMktfQ0xLX0dST1VQX1NUQVJUID0gMHgxRDAwLAorICAgRENMX0YzMktfQ0xLLAorI2VuZGlmICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9JREMKKyAgIERDTF9JRENfR1JPVVBfU1RBUlQgPSAweDFFMDAsICAKKyAgIERDTF9JREMsCisjZW5kaWYgICAgIAorI2lmbmRlZiBOT05FX01UQUQKKyAgIERDTF9NVEFEX0dST1VQX1NUQVJUID0gMHgxRjAwLCAgCisgICBEQ0xfTVRBRCwKKyNlbmRpZiAgICAgCisjaWZuZGVmIE5PTkVfTU9ERU1fU1BNSQorICAgRENMX1NQTUlfR1JPVVBfU1RBUlQgPSAweDIwMDAsICAgICAgCisgICBEQ0xfU1BNSQorI2VuZGlmICAgIAorCit9IERDTF9ERVZfVDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9GTEFHUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIERDTF9VSU5UMzIgRENMX0ZMQUdTOwordHlwZWRlZiBlbnVtCit7CisgICBGTEFHU19OT05FID0gMCwKKyNpZm5kZWYgTk9ORV9NT0RFTV9QTVUKKyAgIC8qIEJlbG93IGlzIHRoZSBjb21tYW5kIGZvciBQTVUgKi8KKyAgIFBNVV9GTEFHU19TVEFSVCA9IDB4MTAwLAorICAgUE1VX0ZMQUdTIC8vUGxlYXNlIHNlZSBkY2xfcG11LmgKKyNlbmRpZgorICAgRkxBR1NfRU5ECit9IERDTF9GTEFHU19UOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfT1BUSU9OUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIERDTF9VSU5UMzIgRENMX09QVElPTlM7Cit0eXBlZGVmIGVudW0KK3sKKyAgIE9QVElPTlNfTk9ORSA9IDAsCisjaWZuZGVmIE5PTkVfTU9ERU1fR1BUICAgCisgICBHUFRfT1BUSU9OU19TVEFSVCA9IE9QVElPTlNfTk9ORSwKKyAgIEdQVF9PUFRJT05TIC8vUGxlYXNlIHNlZSBkY2xfZ3B0LmgKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fR1BJTyAgIAorICAgR1BJT19PUFRJT05TX1NUQVJUID0gMHgxMDAsCisgICBHUElPX09QVElPTlMgLy9QbGVhc2Ugc2VlIGRjbF9ncGlvLmgKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fQURDICAgCisgICBBRENfT1BUSU9OU19TVEFSVCA9IDB4MjAwLAorICAgQURDX09QVElPTlMgLy9QbGVhc2Ugc2VlIGRjbF9hZGMuaAorI2VuZGlmICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9XRFQgICAKKyAgIFdEVF9PUFRJT05TX1NUQVJUID0gMHgzMDAsCisgICBXRFRfT1BUSU9OUyAvL1BsZWFzZSBzZWUgZGNsX3dkdC5oCisjZW5kaWYgIAorI2lmbmRlZiBOT05FX01PREVNX0JNVCAgICAgICAKKyAgIEJNVF9PUFRJT05TX1NUQVJUID0gMHg0MDAsCisgICBCTVRfT1BUSU9OUyAvLyBQbGVhc2Ugc2VlIGRjbF9ibXQuaCAgIAorI2VuZGlmICAgCisjaWZuZGVmIE5PTkVfTU9ERU1fUEZDCisgICBQRkNfT1BUSU9OU19TVEFSVCA9IDB4NTAwLAorICAgUEZDX09QVElPTlMgLy8gUGxlYXNlIHNlZSBkY2xfcGZjLmggICAKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fUlRDICAgCisgICBSVENfT1BUSU9OU19TVEFSVCA9IDB4NjAwLAorICAgUlRDX09QVElPTlMgLy8gUGxlYXNlIHNlZSBkY2xfcnRjLmgKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fSTJDICAKKyAgIEkyQ19PUFRJT05TX1NUQVJUID0gMHg3MDAsCisgICBJMkNfT1BUSU9OUyAvL1BsZWFzZSBzZWUgZGNsX2kyYy5oCisjZW5kaWYgIAorI2lmIDAKKyNpZm5kZWYgTk9ORV9NT0RFTV9BVVgKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZiAgCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9UUworICAgVFNfT1BUSU9OU19TVEFSVCA9IDB4OTAwLAorICAgVFNfT1BUSU9OUy8vUGxlYXNlIHNlZSBkY2xfdHMuaAorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fVVNCICAgCisgICBVU0JfRFJWX09QVElPTlNfU1RBUlQgPSAweEEwMCwKKyAgIFVTQl9EUlZfT1BUSU9OUy8vUGxlYXNlIHNlZSBkY2xfdXNiX2Rydi5oCisjZW5kaWYgIAorI2lmbmRlZiBOT05FX01PREVNX1VTQkQgIAorICAgVVNCX0hDRF9PUFRJT05TX1NUQVJUID0gMHhCMDAsCisgICBVU0JfSENEX09QVElPTlMvL1BsZWFzZSBzZWUgZGNsX3VzYl9oY2QuaAorI2VuZGlmICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9PVEcKKyAgIE9UR19EUlZfT1BUSU9OU19TVEFSVCA9IDB4QzAwLAorICAgT1RHX0RSVl9PUFRJT05TLy9QbGVhc2Ugc2VlIGRjbF9vdGdfZHJ2LmgKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fSVJEQQorICAgSVJEQV9PUFRJT05TX1NUQVJUID0gMHhEMDAsCisgICBJUkRBX09QVElPTlMvL1BsZWFzZSBzZWUgZGNsX2lyZGEuaAorI2VuZGlmICAgCisjaWZuZGVmIE5PTkVfTU9ERU1fUE1VCisgICBQTVVfT1BUSU9OU19TVEFSVCA9IDB4RTAwLAorICAgUE1VX09QVElPTlMgLy8gUGxlYXNlIHNlZSBkY2xfcG11LmgKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fUFcKKyAgIFBXX09QVElPTlNfU1RBUlQgPSAweEYwMCwKKyAgIFBXX09QVElPTlMgLy8gUGxlYXNlIHNlZSBkY2xfcHcuaAorI2VuZGlmICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9DSFJfVVNCX0RFVAorICAgQ0hSX0RFVF9PUFRJT05TX1NUQVJUID0gMHgxMDAwLAorICAgQ0hSX0RFVF9PUFRJT05TIC8vIFBsZWFzZSBzZWUgZGNsX2Nocl91c2JfZGV0LmgKKyNlbmRpZiAgICAgCisjaWZuZGVmIE5PTkVfTU9ERU1fU1BNSQorICAgU1BNSV9PUFRJT05TX1NUQVJUID0gMHgxMTAwLAorICAgU1BNSV9PUFRJT05TIC8vIFBsZWFzZSBzZWUgZGNsX3NwbWkuaAorI2VuZGlmICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9QWFMKKyAgIFBYU19PUFRJT05TX1NUQVJUID0gMHgyMDAwLAorICAgUFhTX09QVElPTlMgLy8gUGxlYXNlIHNlZSBkY2xfcHhzLmgKKyNlbmRpZiAgIAorI2lmbmRlZiBOT05FX01PREVNX0YzMktfQ0xLCisgICBGMzJLX0NMS19PUFRJT05TX1NUQVJUID0gMHg0MDAwLAorICAgRjMyS19DTEtfT1BUSU9OUyAvLyBQbGVhc2Ugc2VlIGRjbF9mMzJrX2Nsay5oCisjZW5kaWYgIAorI2lmbmRlZiBOT05FX01PREVNX0lEQworICAgSURDX09QVElPTlNfU1RBUlQgPSAweDUwMDAsCisgICBJRENfT1BUSU9OUyAvLyBQbGVhc2Ugc2VlIGRjbF9pZGMuaAorI2VuZGlmICAKKyAgIE9QVElPTlNfTUFYCit9IERDTF9PUFRJT05TX1Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfSEFORExFCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgRENMX0lOVDMyIERDTF9IQU5ETEU7CisjZGVmaW5lIERDTF9IQU5ETEVfTk9ORSAgICAoMCkKKyNkZWZpbmUgRENMX0hBTkRMRV9JTlZBTElEICAgICgtMSkKKyNkZWZpbmUgRENMX0hBTkRMRV9PQ0NVUElFRCAgICAoLTIpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQlVGRgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIERDTF9VSU5UOCAgRENMX0JVRkY7Cit0eXBlZGVmIERDTF9VSU5UMzIgIERDTF9CVUZGX0xFTjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DT05GSUdVUkVfVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHVuaW9uCit7CisjaWZuZGVmIE5PTkVfTU9ERU1fUFdNCisgICBQV01fQ09ORklHUy8vUGxlYXNlIHNlZSBkY2xfUFdNLmgKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fQURDIAorICAgLy8gRm9yIEFEQywgcGxlYXNlIHNlZSBkY2xfYWRjLmgKKyAgIEFEQ19DT05GSUdTCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9CTVQgICAgCisgICAvLyBGb3IgQk1ULCBwbGVhc2Ugc2VlIGRjbF9ibXQuaAorICAgQk1UX0NPTkZJR1MgICAKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fUEZDIAorICAgLy8gRm9yIFBGQywgcGxlYXNlIHNlZSBkY2xfcGZjLmgKKyAgIFBGQ19DT05GSUdTICAgCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9SVEMKKyAgIC8vIEZvciBSVEMsIHBsZWFzZSBzZWUgZGNsX3J0Yy5oCisgICBSVENfQ09ORklHUworI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fV0RUICAgIAorICAgLy8gRm9yIFdEVCwgcGxlYXNlIHNlZSBkY2xfd2R0LmgKKyAgIFdEVF9DT05GSUdTCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9JMkMgICAKKyAgIC8vIEZvciBJMkMsIHBsZWFzZSBzZWUgZGNsX2kyYy5oCisgICBJMkNfQ09ORklHUworI2VuZGlmCisjaWYgMAorI2lmbmRlZiBOT05FX01PREVNX0FVWCAgICAgIAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmICAgCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9VU0IKKyAgIC8vIEZvciBVU0JfRFJWLCBwbGVhc2Ugc2VlIGRjbF91c2JfZHJ2LmgKKyAgIFVTQl9EUlZfQ09ORklHUworI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fVVNCRAorICAgLy8gRm9yIFVTQl9IQ0QsIHBsZWFzZSBzZWUgZGNsX3VzYl9oY2QuaAorICAgVVNCX0hDRF9DT05GSUdTCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9PVEcgICAKKyAgIC8vIEZvciBPVEdfRFJWLCBwbGVhc2Ugc2VlIGRjbF9vdGdfZHJ2LmgKKyAgIE9UR19EUlZfQ09ORklHUworI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fSVJEQQorICAgLy8gRm9yIElSREEsIHBsZWFzZSBzZWUgZGNsX2lyZGEuaAorICAgSVJEQV9DT05GSUdTCisjZW5kaWYgICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9QTVUKKyAgIC8vIEZvciBQTVUsIHBsZWFzZSBzZWUgZGNsX3BtdS5oCisgICBQTVVfQ09ORklHUworI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fUFcKKyAgIC8vIEZvciBQVywgcGxlYXNlIHNlZSBkY2xfcHcuaAorICAgUFdfQ09ORklHUyAgIAorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fQ0hSX1VTQl9ERVQKKyAgIC8vIEZvciBDSFImVVNCIGRldGVjdGlvbiAsIHBsZWFzZSBzZWUgZGNsX2Nocl91c2JfZGV0LmgKKyAgIENIUl9ERVRfQ09ORklHUworI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fU1BNSQorICAgLy8gRm9yIFNQTUksIHBsZWFzZSBzZWUgZGNsX3NwbWkuaAorICAgU1BNSV9DT05GSUdTCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9TSU0KKyAgIC8vIEZvciBTSU0sIHBsZWFzZSBzZWUgZGNsX3NpbS5oCisgICBTSU1fQ09ORklHUworI2VuZGlmICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9UUworICAgLy9mb3IgVFMsIHBsZWFzZSBzZWUgZGNsX3RzLmgKKyAgIFRTX0NPTkZJR1MKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX1BYUworICAgLy8gRm9yIFBYUywgcGxlYXNlIHNlZSBkY2xfcHhzLmgKKyAgIFBYU19DT05GSUdTCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9GMzJLX0NMSworICAgLy8gRm9yIEYzMktfQ0xLLCBwbGVhc2Ugc2VlIGRjbF9mMzJrX2Nsay5oCisgICBGMzJLX0NMS19DT05GSUdTCisjZW5kaWYgIAorI2lmbmRlZiBOT05FX01PREVNX0lEQworICAgLy8gRm9yIElEQywgcGxlYXNlIHNlZSBkY2xfaWRjLmgKKyAgIElEQ19DT05GSUdTICAgCisjZW5kaWYKK30gRENMX0NPTkZJR1VSRV9UOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfRVZFTlQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBEQ0xfVUlOVDMyICBEQ0xfRVZFTlQ7Cit0eXBlZGVmIGVudW0KK3sKKyAgIEVWRU5UX05VTEwgPSAwLAorI2lmbmRlZiBOT05FX01PREVNX0dQVAorICAgLy8gRm9yIEhHUFQsIHBsZWFzZSBzZWUgZGNsX2dwdC5oCisgICBHUFRfRVZFTlRTX1NUQVJUID0gRVZFTlRfTlVMTCwKKyAgIEdQVF9FVkVOVFMKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fR1BJTworICAgLy9mb3IgR1BJTywgcGxlYXNlIHNlZSBkY2xfZ3Bpby5oCisgICBHUElPX0VWRU5UU19TVEFSVCA9IDB4MTAwLAorICAgR1BJT19FVkVOVFMKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fQk1UICAgICAKKyAgIC8vIEZvciBCTVQsIHBsZWFzZSBzZWUgZGNsX2JtdC5oCisgICBCTVRfRVZFTlRTX1NUQVJUID0gMHgyMDAsCisgICBCTVRfRVZFTlRTCisjZW5kaWYgICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9QRkMKKyAgIC8vIEZvciBQRkMsIHBsZWFzZSBzZWUgZGNsX3BmYy5oCisgICBQRkNfRVZFTlRTX1NUQVJUID0gMHgzMDAsCisgICBQRkNfRVZFTlRTCisjZW5kaWYgIAorI2lmbmRlZiBOT05FX01PREVNX1JUQworICAgLy8gRm9yIFJUQywgcGxlYXNlIHNlZSBkY2xfcnRjLmgKKyAgIFJUQ19FVkVOVFNfU1RBUlQgPSAweDQwMCwKKyAgIFJUQ19FVkVOVFMKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fV0RUCisgICAvLyBGb3IgV0RULCBwbGVhc2Ugc2VlIGRjbF93ZHQuaAorICAgV0RUX0VWRU5UU19TVEFSVCA9IDB4NTAwLAorICAgV0RUX0VWRU5UUworI2VuZGlmICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9BREMKKyAgIC8vIEZvciBBREMsIHBsZWFzZSBzZWUgZGNsX2FkYy5oCisgICBBRENfRVZFTlRTX1NUQVJUID0gMHg2MDAsCisgICBBRENfRVZFTlRTCisjZW5kaWYgIAorI2lmbmRlZiBOT05FX01PREVNX0kyQyAgCisgICAvLyBGb3IgSTJDLCBwbGVhc2Ugc2VlIGRjbF9pMmMuaAorICAgSTJDX0VWRU5UU19TVEFSVCA9IDB4NzAwLAorICAgSTJDX0VWRU5UUworI2VuZGlmICAKKyNpZiAwCisjaWZuZGVmIE5PTkVfTU9ERU1fQVVYCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYgICAgCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9LQkRICisgICAvL0ZvciBLZXlwYWQsIFBsZWFzZSBzZWUgZGNsX2tiZC5oCisgICBLQkRIX0VWRU5UU19TVEFSVCA9IDB4OTAwLAorICAgS0JESF9FVkVOVFMKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fVFMgICAgICAgCisgICAvL0ZvciBUUywgUGxlYXNlIHNlZSBkY2xfdHMuaAorICAgVFNfRVZFTlRTX1NUQVJUID0gMHhBMDAsCisgICBUU19FVkVOVFMKKyNlbmRpZiAgIAorI2lmbmRlZiBOT05FX01PREVNX1VTQgorICAgLy9Gb3IgVVNCX0RSViwgcGxlYXNlIHNlZSBkY2xfdXNiX2Rydi5oCisgICBVU0JfRFJWX0VWRU5UU19TVEFSVCA9IDB4QjAwLAorICAgVVNCX0RSVl9FVkVOVFMKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fVVNCRCAgCisgICAvL0ZvciBVU0JfSENELCBwbGVhc2Ugc2VlIGRjbF91c2JfaGNkLmgKKyAgIFVTQl9IQ0RfRVZFTlRTX1NUQVJUID0gMHhDMDAsCisgICBVU0JfSENEX0VWRU5UUworI2VuZGlmICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9PVEcgICAKKyAgIC8vRm9yIE9UR19EUlYsIHBsZWFzZSBzZWUgZGNsX290Z19kcnYuaAorICAgT1RHX0RSVl9FVkVOVFNfU1RBUlQgPSAweEQwMCwKKyAgIE9UR19EUlZfRVZFTlRTCisjZW5kaWYgIAorI2lmbmRlZiBOT05FX01PREVNX0lSREEKKyAgIC8vIEZvciBJckRBLCBwbGVhc2Ugc2VlIGRjbF9pcmRhLmgKKyAgIElSREFfRVZFTlRTX1NUQVJUID0gMHhFMDAsCisgICBJUkRBX0VWRU5UUworI2VuZGlmICAgCisjaWZuZGVmIE5PTkVfTU9ERU1fUE1VCisgICAvLyBGb3IgcG11LCBwbGVhc2Ugc2VlIGRjbF9wbXUuaAorICAgUE1VX0VWRU5UU19TVEFSVCA9IDB4RjAwLAorICAgUE1VX0VWRU5UUworI2VuZGlmICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9QVworICAgLy8gRm9yIHB3LCBwbGVhc2Ugc2VlIGRjbF9wdy5oCisgICBQV19FVkVOVFNfU1RBUlQgPSAweDEwMDAsCisgICBQV19FVkVOVFMKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fQ0hSX1VTQl9ERVQKKyAgIC8vIEZvciBDaHImVVNCIGRldGVjdGlvbiAsIHBsZWFzZSBzZWUgZGNsX2Nocl91c2JfZGV0LmgKKyAgIENIUl9ERVRfRVZFTlRTX1NUQVJUID0gMHgxMTAwLAorICAgQ0hSX0RFVF9FVkVOVFMKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fUFhTICAKKyAgIC8vIEZvciBQWFMsIHBsZWFzZSBzZWUgZGNsX3B4cy5oCisgICBQWFNfRVZFTlRTX1NUQVJUID0gMHgxMjAwLAorICAgUFhTX0VWRU5UUworI2VuZGlmICAgCisjaWZuZGVmIE5PTkVfTU9ERU1fRjMyS19DTEsKKyAgIC8vIEZvciBGMzJLX0NMSywgcGxlYXNlIHNlZSBkY2xfZjMya19jbGsuaAorICAgRjMyS19DTEtfRVZFTlRTX1NUQVJUID0gMHgxMzAwLAorICAgRjMyS19DTEtfRVZFTlRTICAKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fSURDCisgICAvLyBGb3IgSURDLCBwbGVhc2Ugc2VlIGRjbF9pZGMuaAorICAgSURDX0VWRU5UU19TVEFSVCA9IDB4MTQwMCwKKyAgIElEQ19FVkVOVFMKKyNlbmRpZiAgCisjaWZuZGVmIE5PTkVfTU9ERU1fU1BNSQorICAgLy8gRm9yIHNwbWksIHBsZWFzZSBzZWUgZGNsX3NwbWkuaAorICAgU1BNSV9FVkVOVFNfU1RBUlQgPSAweDE1MDAsCisgICBTUE1JX0VWRU5UUworI2VuZGlmICAKKyAgIEVWRU5UX0VORAorfSBEQ0xfRVZFTlRfVDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBGTl9EQ0xfQ0FMTEJBQ0sKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiB2b2lkICgqUEZOX0RDTF9DQUxMQkFDSykoRENMX0VWRU5UIGV2ZW50KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0NNRAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDTURfRU5EKQorI3VuZGVmIENNRF9FTkQgIAorI2VuZGlmIAordHlwZWRlZiBEQ0xfVUlOVDMyICBEQ0xfQ1RSTF9DTUQ7Cit0eXBlZGVmIGVudW0KK3sKKyAgIENNRFNfU1RBUlQgPSAwLAorICAgLyogQmVsb3cgaXMgdGhlIGNvbW1hbmQgZm9yIEdQSU8gKi8KKyNpZm5kZWYgTk9ORV9NT0RFTV9HUElPCisgICAvL3BsZWFzZSBtYWtlIHN1cmUgR1BJTyBDb21tYW5kIHN0YXJ0IGZyb20gemVybyEgW2Rydl90b29sIGdlbmVydGF0ZSBhIGNoYXIgdHlwZSB2YXJpYWJsZV0KKyAgIEdQSU9fQ01EU19TVEFSVCA9IENNRFNfU1RBUlQsIAorICAgR1BJT19DTURTIC8vcGxlYXNlIHNlZSBkY2xfZ3Bpby5oCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9VQVJUCisgICAvKiBCZWxvdyBpcyB0aGUgY29tbWFuZCBmb3IgVUFSVCAqLworICAgVUFSVF9DTURTX1NUQVJUID0gMHgxMDAsCisgICBVQVJUX0NNRFMgLy9wbGVhc2Ugc2VlIGRjbF91YXJ0LmgKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX0dQVAorICAgLyogQmVsb3cgaXMgdGhlIGNvbW1hbmQgZm9yIEdQVCAqLworICAgR1BUX0NNRFNfU1RBUlQgPSAweDIwMCwKKyAgIEdQVF9DTURTIC8vcGxlYXNlIHNlZSBkY2xfZ3B0LmgKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX0FEQworICAgLyogQmVsb3cgaXMgdGhlIGNvbW1hbmQgZm9yIEFEQyAqLworICAgICAvKiBFeHBvcnRlZCBhZGMgc2NoZWR1bGUgQVBJcyAqLworICAgQURDX0NNRFNfU1RBUlQgPSAweDMwMCwKKyAgIEFEQ19DTURTCisgICAgIC8qIEludGVyZmFjIGZvciBIYXJkd2FyZSBBREMgKi8KKyAgIEhBRENfQ01EU19TVEFSVCA9IDB4NDAwLAorICAgSEFEQ19DTURTCisjZW5kaWYgICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9XRFQKKyAgIC8qIEJlbG93IGlzIHRoZSBjb21tYW5kIGZvciBXRFQgKi8KKyAgIFdEVF9DTURTX1NUQVJUID0gMHg1MDAsCisgICBXRFRfQ01EUworI2VuZGlmICAgCisjaWZuZGVmIE5PTkVfTU9ERU1fQk1UICAKKyAgIC8qIEJlbG93IGlzIHRoZSBjb21tYW5kIGZvciBCTVQgKi8KKyAgIEJNVF9DTURTX1NUQVJUID0gMHg2MDAsCisgICBCTVRfQ01EUyAvLyBQbGVhc2Ugc2VlIGRjbF9ibXQuaAorI2VuZGlmICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9QRkMKKyAgIC8qIEJlbG93IGlzIHRoZSBjb21tYW5kIGZvciBQRkMgKi8KKyAgIFBGQ19DTURTX1NUQVJUID0gMHg3MDAsCisgICBQRkNfQ01EUyAvLyBQbGVhc2Ugc2VlIGRjbF9wZmMuaAorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fUlRDCisgICAvKiBCZWxvdyBpcyB0aGUgY29tbWFuZCBmb3IgUlRDICovCisgICBSVENfQ01EU19TVEFSVCA9IDB4ODAwLAorICAgUlRDX0NNRFMgLy8gUGxlYXNlIHNlZSBkY2xfcnRjLmgKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX0kyQyAgCisgICAvKiBCZWxvdyBpcyB0aGUgY29tbWFuZCBmb3IgSTJDICovCisgICBJMkNfQ01EU19TVEFSVCA9IDB4OTAwLAorICAgSTJDX0NNRFMKKyNlbmRpZgorI2lmIDAKKyNpZm5kZWYgTk9ORV9NT0RFTV9BVVgKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZiAgIAorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fS0JESAorICAgLyogQmVsb3cgaXMgdGhlIGNvbW1hbmQgZm9yIEtCRCAqLworICAgS0JESF9DTURTX1NUQVJUID0gMHhCMDAsCisgICBLQkRIX0NNRFMKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX0tCRAorICAgS0JEX0NNRFNfU1RBUlQgPSAweEMwMCwKKyAgIEtCRF9DTURTLy9QbGVhc2Ugc2VlIGRjbF9rYmQuaAorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fUFdNICAgCisgICAvKiBCZWxvdyBpcyB0aGUgY29tbWFuZCBmb3IgT1dNICovCisgICBQV01fQ01EU19TVEFSVCA9IDB4RDAwLAorICAgUFdNX0NNRFMvL1BsZWFzZSBzZWUgZGNsX1BXTS5oCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9BTEVSVEVSCisgICBBTEVSVEVSX0NNRFNfU1RBUlQgPSAweEUwMCwKKyAgIEFMRVJURVJfQ01EUyAvL3BsZWFzZSBzZWUgZGNsX3B3bS5oCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9UUworICAgLyogQmVsb3cgaXMgdGhlIGNvbW1hbmQgZm9yIFRTICovCisgICBUU19DTURTX1NUQVJUID0gMHhGMDAsCisgICBUU19DTURTLy9QbGVhc2Ugc2VlIGRjbF90cy5oCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9TRAorICAgLyogQmVsb3cgaXMgdGhlIGNvbW1hbmQgZm9yIFNEKi8KKyAgIFNEX0NNRFNfU1RBUlQgPSAweDEwMDAsCisgICBTRF9DTURTLy9QbGVhc2Ugc2VlIGRjbF9tc2RjLmgKKyNlbmRpZiAgIAorI2lmbmRlZiBOT05FX01PREVNX1NESU8KKyAgIC8qIEJlbG93IGlzIHRoZSBjb21tYW5kIGZvciBTRElPKi8KKyAgIFNESU9fQ01EU19TVEFSVCA9IDB4MTEwMCwKKyAgIFNESU9fQ01EUy8vUGxlYXNlIHNlZSBkY2xfbXNkYy5oCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9VU0IKKyAgIC8qIEJlbG93IGlzIHRoZSBjb21tYW5kcyBmb3IgVVNCX0RSViwgcGxlYXNlIHNlZSBkY2xfdXNiX2Rydi5oICovCisgICBVU0JfRFJWX0NNRFNfU1RBUlQgPSAweDEzMDAsCisgICBVU0JfRFJWX0NNRFMKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX1VTQkQgCisgICAvKiBCZWxvdyBpcyB0aGUgY29tbWFuZHMgZm9yIFVTQl9IQ0QsIHBsZWFzZSBzZWUgZGNsX3VzYl9oY2QuaCAqLworICAgVVNCX0hDRF9DTURTX1NUQVJUID0gMHgxNDAwLAorICAgVVNCX0hDRF9DTURTCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9PVEcKKyAgIC8qIEJlbG93IGlzIHRoZSBjb21tYW5kcyBmb3IgT1RHX0RSViwgcGxlYXNlIHNlZSBkY2xfb3RnX2Rydi5oICovCisgICBPVEdfRFJWX0NNRFNfU1RBUlQgPSAweDE1MDAsCisgICBPVEdfRFJWX0NNRFMKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX0lSREEKKyAgIC8qIEJlbG93IGlzIHRoZSBjb21tYW5kIGZvciBJUkRBKi8KKyAgIElSREFfQ01EU19TVEFSVCA9IDB4MTYwMCwKKyAgIElSREFfQ01EUy8vUGxlYXNlIHNlZSBkY2xfaXJkYS5oCisjZW5kaWYgICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9TSU0KKyAgIC8qIEJlbG93IGlzIHRoZSBjb21tYW5kIGZvciBTSU0qLworICAgU0lNX0NNRFNfU1RBUlQgPSAweDE3MDAsCisgICBTSU1fQ01EUy8vUGxlYXNlIHNlZSBkY2xfbXNkYy5oCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9QTVUKKyAgIC8qIEJlbG93IGlzIHRoZSBjb21tYW5kIGZvciBQTVUgKi8KKyAgIFBNVV9DTURTX1NUQVJUID0gMHgxODAwLAorICAgUE1VX0NNRFMgLy9QbGVhc2Ugc2VlIGRjbF9wbXUuaAorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fUFcKKyAgIC8qIEJlbG93IGlzIHRoZSBjb21tYW5kIGZvciBQVyAqLworICAgUFdfQ01EU19TVEFSVCA9IDB4MTkwMCwKKyAgIFBXX0NNRFMgLy9QbGVhc2Ugc2VlIGRjbF9wdy5oCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9DSFJfVVNCX0RFVAorICAgLyogQmVsb3cgaXMgdGhlIGNvbW1hbmQgZm9yIENIUiBVU0IgREVURUNUICovCisgICBDSFJfREVUX0NNRFNfU1RBUlQgPSAweDFBMDAsCisgICBDSFJfREVUX0NNRFMgLy9QbGVhc2Ugc2VlIGRjbF9jaHJfdXNiX2RldC5oCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9QWFMgICAKKyAgIC8qIEJlbG93IGlzIHRoZSBjb21tYW5kIGZvciBQWFMgKi8KKyAgIFBYU19DTURTX1NUQVJUID0gMHgxQjAwLAorICAgUFhTX0NNRFMgLy9QbGVhc2Ugc2VlIGRjbF9weHMuaAorI2VuZGlmICAgCisjaWZuZGVmIE5PTkVfTU9ERU1fU0lNX0dQSU8KKwkvKiBCZWxvdyBpcyB0aGUgY29tbWFuZCBmb3IgU0lNIEdQSU8gKi8KKyAgICBTSU1HUElPX0NNRFNfU1RBUlQgPSAweDFDMDAsCisJU0lNR1BJT19DTURTIC8vUGxlYXNlIHNlZSBkY2xfc2ltX2dwaW8uaAorI2VuZGlmIAorI2lmbmRlZiBOT05FX01PREVNX0YzMktfQ0xLCisgLyogQmVsb3cgaXMgdGhlIGNvbW1hbmQgZm9yIEYzMktfQ0xLICovCisgICBGMzJLX0NMS19DTURTX1NUQVJUID0gMHgxRDAwLAorICAgRjMyS19DTEtfQ01EUyAvL3BsZWFzZSBzZWUgZGNsX2YzMmtfY2xrLmgJCisjZW5kaWYgCisjaWZuZGVmIE5PTkVfTU9ERU1fSURDCisgICAvKiBCZWxvdyBpcyB0aGUgY29tbWFuZCBmb3IgSURDICovCisgICBJRENfQ01EU19TVEFSVCA9IDB4MUUwMCwKKyAgIElEQ19DTURTIC8vIFBsZWFzZSBzZWUgZGNsX2lkYy5oCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9TUE1JCisgICAvKiBCZWxvdyBpcyB0aGUgY29tbWFuZCBmb3IgU1BNSSAqLworICAgU1BNSV9DTURTX1NUQVJUID0gMHgxRjAwLAorICAgU1BNSV9DTURTIC8vUGxlYXNlIHNlZSBkY2xfc3BtaS5oCisjZW5kaWYKKyAgIENNRF9FTkQKK30gRENMX0NUUkxfQ01EX1Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ1RSTF9EQVRBX1Q6IERlZmluZSB0aGUgQ29udHJvbCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBtb2R1bGUncyBjb21tYW5kCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgdW5pb24KK3sKKyNpZm5kZWYgTk9ORV9NT0RFTV9HUFQKKyAgIC8qIEdQVCBjb250cm9sIGRhdGFzLCBwbGVhc2Ugc2VlIGRjbF9ncHQuaCAqLworICAgR1BUX0NUUkxTCisjZW5kaWYgCisjaWZuZGVmIE5PTkVfTU9ERU1fVUFSVAorICAgLyogVUFSVCBjb250cm9sIGRhdGFzLCBwbGVhc2Ugc2VlIGRjbF91YXJ0LmggKi8KKyAgIFVBUlRfQ1RSTFMKKyNlbmRpZiAKKyNpZm5kZWYgTk9ORV9NT0RFTV9HUElPCisgICAvKiBHUElPIGNvbnRyb2wgZGF0YXMsIHBsZWFzZSBzZWUgZGNsX2dwaW8uaCAqLworICAgR1BJT19DVFJMUworI2VuZGlmIAorI2lmbmRlZiBOT05FX01PREVNX0FEQworICAgLyogQURDIGNvbnRyb2wgZGF0YXMsIHBsZWFzZSBzZWUgZGNsX2FkYy5oICovCisgICBBRENfQ1RSTFMKKyNlbmRpZiAKKyNpZm5kZWYgTk9ORV9NT0RFTV9XRFQKKyAgIC8qIFdEVCBjb250cm9sIGRhdGFzLCBwbGVhc2Ugc2VlIGRjbF93ZHQuaCAqLworICAgV0RUX0NUUkxTCisjZW5kaWYgCisjaWZuZGVmIE5PTkVfTU9ERU1fQk1UCisgICAvKiBCZWxvdyBpcyB0aGUgY3RybCBzdHJ1Y3R1cmVzIGZvciBCTVQgKi8KKyAgIEJNVF9DVFJMUyAvL1BsZWFzZSBzZWUgZGNsX2JtdC5oCisjZW5kaWYgICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9QRkMKKyAgIC8qIEJlbG93IGlzIHRoZSBjdHJsIHN0cnVjdHVyZXMgZm9yIFBGQyAqLworICAgUEZDX0NUUkxTIC8vIFBsZWFzZSBzZWUgZGNsX3BmYy5oCisjZW5kaWYgCisjaWZuZGVmIE5PTkVfTU9ERU1fUlRDCisgICAvKiBSVEMgY29udHJvbCBkYXRhcywgcGxlYXNlIHNlZSBkY2xfcnRjLmggKi8KKyAgIFJUQ19DVFJMUyAvLyBQbGVhc2Ugc2VlIGRjbF9ydGMuaAorI2VuZGlmIAorI2lmbmRlZiBOT05FX01PREVNX0kyQyAgICAKKyAgIC8qIEkyQyBjb250cm9sIGRhdGFzLCBwbGVhc2Ugc2VlIGRjbF9pMmMuaCAqLworICAgSTJDX0NUUkxTCisjZW5kaWYgCisjaWYgMAorI2lmbmRlZiBOT05FX01PREVNX0FVWAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9LQkQKKyAgIC8qIEtCRCBjb250cm9sIGRhdGFzLCBwbGVhc2Ugc2VlIGRjbF9rYmQuaCAqLworICBLQkRTX0NUUkxTLy9QbGVhc2Ugc2VlIGRjbF9rYmQuaAorI2VuZGlmIAorI2lmbmRlZiBOT05FX01PREVNX0tCREgKKyAgIEtCREhfQ1RSTFMKKyNlbmRpZiAKKyNpZm5kZWYgTk9ORV9NT0RFTV9QV00gICAgIAorICAgLyogUFdNIGNvbnRyb2wgZGF0YXMsIHBsZWFzZSBzZWUgZGNsX1BXTS5oICovCisgICBQV01fQ1RSTFMvL1BsZWFzZSBzZWUgZGNsX1BXTS5oICAgCisjZW5kaWYgCisjaWZuZGVmIE5PTkVfTU9ERU1fQUxFUlRFUgorICAgQUxFUlRFUl9DVFJMUworI2VuZGlmIAorI2lmbmRlZiBOT05FX01PREVNX1RTCisgICAvKiBUUyBjb250cm9sIGRhdGFzLCBwbGVhc2Ugc2VlIGRjbF90cy5oICovCisgICBUU19DVFJMUy8vUGxlYXNlIHNlZSBkY2xfdHMuaAorI2VuZGlmIAorI2lmbmRlZiBOT05FX01PREVNX1NECisgICAvKiBCZWxvdyBpcyB0aGUgY3RybCBzdHJ1Y3R1cmVzIGZvciBTRCovCisgICBTRF9DVFJMUy8vUGxlYXNlIHNlZSBkY2xfbXNkYy5oCisjZW5kaWYgICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9TRElPCisgICAvKiBCZWxvdyBpcyB0aGUgY3RybCBzdHJ1Y3R1cmVzIGZvciBTRElPKi8KKyAgIFNESU9fQ1RSTFMvL1BsZWFzZSBzZWUgZGNsX21zZGMuaAorI2VuZGlmIAorI2lmbmRlZiBOT05FX01PREVNX1VTQgorICAgLyogQmVsb3cgaXMgdGhlIGNvbnRyb2wgZGF0YSBzdHJ1Y3R1cmVzIGZvciBVU0JfRFJWLCBwbGVhc2Ugc2VlIGRjbF91c2JfZHJ2LmggKi8KKyAgIFVTQl9EUlZfQ1RSTFMKKyNlbmRpZiAKKyNpZm5kZWYgTk9ORV9NT0RFTV9VU0JEICAKKyAgIC8qIEJlbG93IGlzIHRoZSBjb250cm9sIGRhdGEgc3RydWN0dXJlcyBmb3IgVVNCX0hDRCwgcGxlYXNlIHNlZSBkY2xfdXNiX2hjZC5oICovCisgICBVU0JfSENEX0NUUkxTCisjZW5kaWYgCisjaWZuZGVmIE5PTkVfTU9ERU1fT1RHCisgICAvKiBCZWxvdyBpcyB0aGUgY29udHJvbCBkYXRhIHN0cnVjdHVyZXMgZm9yIE9UR19EUlYsIHBsZWFzZSBzZWUgZGNsX290Z19kcnYuaCAqLworICAgT1RHX0RSVl9DVFJMUworI2VuZGlmIAorI2lmbmRlZiBOT05FX01PREVNX0lSREEKKyAgIC8qIEJlbG93IGlzIHRoZSBjdHJsIHN0cnVjdHVyZXMgZm9yIElSREEqLworICAgSVJEQV9DVFJMUy8vUGxlYXNlIHNlZSBkY2xfaXJkYS5oCisjZW5kaWYgICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9TSU0KKyAgIC8qIEJlbG93IGlzIHRoZSBjdHJsIHN0cnVjdHVyZXMgZm9yIFNJTSovCisgICBTSU1fQ1RSTFMvL1BsZWFzZSBzZWUgZGNsX3NpbS5oCisjZW5kaWYgCisjaWZuZGVmIE5PTkVfTU9ERU1fUE1VCisgICAvKiBCZWxvdyBpcyB0aGUgY3RybCBzdHJ1Y3R1cmVzIGZvciBQTVUgKi8KKyAgIFBNVV9DVFJMUy8vUGxlYXNlIHNlZSBkY2xfcG11LmgKKyNlbmRpZiAKKyNpZm5kZWYgTk9ORV9NT0RFTV9QVworICAgLyogQmVsb3cgaXMgdGhlIGN0cmwgc3RydWN0dXJlcyBmb3IgUG93ZXIgdXAgcmVhc29uICovCisgICBQV19DVFJMUy8vUGxlYXNlIHNlZSBkY2xfcFcuaAorI2VuZGlmIAorI2lmbmRlZiBOT05FX01PREVNX0NIUl9VU0JfREVUCisgICAvKiBCZWxvdyBpcyB0aGUgY3RybCBzdHJ1Y3R1cmVzIGZvciBDaHIgJiBVU0IgZGV0ZWN0aW9uICovCisgICBDSFJfREVUX0NUUkxTLy9QbGVhc2Ugc2VlIGRjbF9jaHJfdXNiX2RldC5oICAgCisjZW5kaWYgCisjaWZuZGVmIE5PTkVfTU9ERU1fU1BNSQorICAgLyogQmVsb3cgaXMgdGhlIGN0cmwgc3RydWN0dXJlcyBmb3IgU1BNSSAqLworICAgU1BNSV9DVFJMUy8vUGxlYXNlIHNlZSBkY2xfc3BtaS5oCisjZW5kaWYgCisjaWZuZGVmIE5PTkVfTU9ERU1fUFhTCisgICAvKiBCZWxvdyBpcyB0aGUgY3RybCBzdHJ1Y3R1cmVzIGZvciBQWFMgKi8KKyAgIFBYU19DVFJMUy8vUGxlYXNlIHNlZSBkY2xfcHhzLmgKKyNlbmRpZiAKKyNpZm5kZWYgTk9ORV9NT0RFTV9TSU1fR1BJTyAgCisgICAvKiBCZWxvdyBpcyB0aGUgY3RybCBzdHJ1Y3R1cmVzIGZvciBTSU1fR1BJTyAqLworICAgU0lNR1BJT19DVFJMUy8vUGxlYXNlIHNlZSBkY2xfc2ltX2dwaW8uaCAgICAgIAorI2VuZGlmICAgICAgIAorI2lmbmRlZiBOT05FX01PREVNX0YzMktfQ0xLCisgICAvKiBCZWxvdyBpcyB0aGUgY3RybCBzdHJ1Y3R1cmVzIGZvciBTSU1fR1BJTyAqLworICAgRjMyS19DTEtfQ1RSTFMvL3BsZWFzZSBzZWUgZGNsX2YzMmtfY2xrLmggICAJCisjZW5kaWYgICAKKyNpZm5kZWYgTk9ORV9NT0RFTV9JREMKKyAgIC8qIEJlbG93IGlzIHRoZSBjdHJsIHN0cnVjdHVyZXMgZm9yIElEQyAqLworICAgSURDX0NUUkxTLy9wbGVhc2Ugc2VlIGRjbF9pZGMuaAorI2VuZGlmIAorI2lmbmRlZiBOT05FX01UQUQKKyAgICAvKiBCZWxvdyBpcyB0aGUgY3RybCBzdHJ1Y3R1cmVzIGZvciBNVEFEICovCisgICAgTVRBRF9DVFJMUy8vcGxlYXNlIGNoZWNrIGRjbF9tdGFkLmgKKyNlbmRpZgorfSBEQ0xfQ1RSTF9EQVRBX1Q7CisKKworLypkZWZpbml0aW9ucyBvZiBzdHJ1Y3R1cmVzIGFyZSBmaW5pc2hlZCwgdW5kZWZpbmUgRENMX0RFRklOSVRJT05fU1RSVUNUKi8KKyN1bmRlZiBEQ0xfREVGSU5JVElPTl9TVFJVQ1QKKyNkZWZpbmUgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisKKyNpZm5kZWYgTk9ORV9NT0RFTV9HUFQKKyNpbmNsdWRlICJkY2xfZ3B0LmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9HUElPCisjaW5jbHVkZSAiZGNsX2dwaW8uaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX1VBUlQKKyNpbmNsdWRlICJkY2xfdWFydC5oIgorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fV0RUCisjaW5jbHVkZSAiZGNsX3dkdC5oIgorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fQURDCisjaW5jbHVkZSAiZGNsX2FkYy5oIgorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fQk1UCisjaW5jbHVkZSAiZGNsX2JtdC5oIgorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fUEZDCisjaW5jbHVkZSAiZGNsX3BmYy5oIgorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fUlRDCisjaW5jbHVkZSAiZGNsX3J0Yy5oIgorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fSTJDCisjaW5jbHVkZSAiZGNsX2kyYy5oIgorI2VuZGlmCisjaWZuZGVmIE5PTkVfTU9ERU1fQVVYCisjaW5jbHVkZSAiZGNsX2F1eC5oIgorI2VuZGlmCisjaWYgIWRlZmluZWQoTk9ORV9NT0RFTV9QV00pICYmICFkZWZpbmVkKE5PTkVfTU9ERU1fQUxFUlRFUikKKyNpbmNsdWRlICJkY2xfcHdtLmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9LQkRICisjaW5jbHVkZSAiRGNsSF9rYmQuaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX0tCRAorI2luY2x1ZGUgIkRjbFNfa2JkLmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9TVFMKKyNpbmNsdWRlICJkY2xfc3RzLmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9NU0RDCisjaW5jbHVkZSAiZGNsX21zZGMuaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX1VTQgorI2luY2x1ZGUgImRjbF91c2JfZHJ2LmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9VU0JECisjaW5jbHVkZSAiZGNsX3VzYl9oY2QuaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX09URworI2luY2x1ZGUgImRjbF9vdGdfZHJ2LmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9JUkRBCisjaW5jbHVkZSAiZGNsX2lyZGEuaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX1NJTQorI2luY2x1ZGUgImRjbF9zaW0uaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX1BNVQorI2luY2x1ZGUgImRjbF9wbXUuaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX1BXCisjaW5jbHVkZSAiZGNsX3B3LmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9DSFJfVVNCX0RFVAorI2luY2x1ZGUgImRjbF9jaHJfZGV0LmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9TUE1JCisjaW5jbHVkZSAiZGNsX3NwbWkuaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX1BYUworI2luY2x1ZGUgImRjbF9weHMuaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01PREVNX1NJTV9HUElPCisjaW5jbHVkZSAiZGNsX3NpbV9ncGlvLmgiCisjZW5kaWYKKyNpZm5kZWYgTk9ORV9NT0RFTV9GMzJLX0NMSworI2luY2x1ZGUgImRjbF9mMzJrX2Nsay5oIgkKKyNlbmRpZiAgIAorI2lmbmRlZiBOT05FX01PREVNX0lEQworI2luY2x1ZGUgImRjbF9pZGMuaCIKKyNlbmRpZgorI2lmbmRlZiBOT05FX01UQUQKKyNkZWZpbmUgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisjaW5jbHVkZSAiZGNsX210YWQuaCIKKyNlbmRpZgorCisjdW5kZWYgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisKKworI2VuZGlmICAvKiBfX0RDTF9IX18gKi8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsXzE1X3NlZ21lbnQuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsXzE1X3NlZ21lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDYyNTg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfMTVfc2VnbWVudC5oCkBAIC0wLDAgKzEsODMgQEAKKyNpZm5kZWYgX19EQ0xfMTVfU0VHTUVOVF9IX18KKyNkZWZpbmUgX19EQ0xfMTVfU0VHTUVOVF9IX18KKyNpbmNsdWRlICJkY2wuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgZW51bSB7CisJR1BJT19MRUQxLAorCUdQSU9fTEVEMgorfUxFRF9OVU07CisKK3R5cGVkZWYgZW51bXsKKwlMRURfQ01EX0ZMSUNLRVIsCisJTEVEX0NNRF9ESU1NSU5HLAorCUxFRF9DTURfQlJJR0hUSU5HCisJCit9TEVEX0NUUkxfQ01EOworCit0eXBlZGVmIHN0cnVjdAoreworCWthbF91aW50OCBDaGFyX0Q7CisJa2FsX3VpbnQ4IENoYXJfQzsKKwlrYWxfdWludDggQ2hhcl9COworCWthbF91aW50OCBDaGFyX0E7Cit9Y2hhcl90b19kaXNwbGF5OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIGdwaW9fbGVkX2luaXQodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBncGlvX2xlZF9jb250cm9sCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGNvbnRyb2wgbGVkIGRpc3BsYXkKKyoKKyogUEFSQU1FVEVSUworKgkKKyoKKyogUkVUVVJOIFZBTFVFUzoKKyoJU1RBVFVTX09LCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitleHRlcm4gRENMX1NUQVRVUyBncGlvX2xlZF9jb250cm9sKExFRF9OVU0gbGVkX251bSwgTEVEX0NUUkxfQ01EIGNtZCwga2FsX3VpbnQxNiBmcmVxKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIGdwaW9fMTVfc2VnbWVudF9sZWRfaW5pdAorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBpbml0IDE1LXNlZ21lbnQKKyoKKyogUEFSQU1FVEVSUworKgkKKyoKKyogUkVUVVJOIFZBTFVFUzoKKyoJU1RBVFVTX09LCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitleHRlcm4gRENMX1NUQVRVUyBncGlvXzE1X3NlZ21lbnRfbGVkX2luaXQodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBncGlvXzE1X3NlZ21lbnRfbGVkX2NvbnRyb2wKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gY29udHJvbCAxNS1zZWdtZW50CisqCisqIFBBUkFNRVRFUlMKKyoJCisqCisqIFJFVFVSTiBWQUxVRVM6CisqCVNUQVRVU19PSworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZXh0ZXJuIERDTF9TVEFUVVMgZ3Bpb18xNV9zZWdtZW50X2xlZF9jb250cm9sKGthbF91aW50OCB3b3JkMSwga2FsX3VpbnQ4IHdvcmQyKTsKKworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfYWRjLmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9hZGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDM1MDJkCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfYWRjLmgKQEAgLTAsMCArMSw2OTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGRjbF9hZGMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgSGVhZGVyIGZpbGUgb2YgRENMIChEcml2ZXIgQ29tbW9uIExheWVyKSBmb3IgQURDLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9TVFJVQ1QKKyNpZm5kZWYgX19EQ0xfQURDX0hfU1RSVUNUX18KKyNkZWZpbmUgX19EQ0xfQURDX0hfU1RSVUNUX18KKworI2RlZmluZSBEQ0xfQURDX0VSUl9DSEFOTkVMX05PICA1MAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9PUFRJT05TIGZvciBBREMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBBRENfT1BUSU9OUworCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DT05GSUdVUkVfVCBmb3IgQURDCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBRENfQ09ORklHUworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0VWRU5UIGZvciBBREMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBBRENfRVZFTlRTCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ1RSTF9DTUQgZm9yIEFEQworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEFEQ19DTURTIFwKKyAgIEFEQ19DTURfQ1JFQVRFX09CSkVDVCwgXAorICAgQURDX0NNRF9NT0RJRllfUEFSQU0sIFwKKyAgIEFEQ19DTURfU1RBUlRfTUVBU1VSRSwgXAorICAgQURDX0NNRF9TVE9QX01FQVNVUkUsIFwKKyAgIEFEQ19DTURfU0VUX1RJTUVSX1BBR0VfQUxJR04sIFwKKyAgIEFEQ19DTURfUkVHSVNURVJfTUVBU1VSRV9DQiwgXAorICAgQURDX0NNRF9SRUdJU1RFUl9DT01QTEVURV9DQiwgXAorICAgQURDX0NNRF9HRVRfQ0hBTk5FTCwgXAorICAgQURDX0NNRF9TQ0hFX0lEX0dFVF9IQU5ETEUsIFwKKyAgIEFEQ19DTURfVFJBTlNGT1JNX0lOVE9fVk9MVCwgXAorICAgQURDX0NNRF9UUkFOU0ZPUk1fSU5UT19URU1QLCBcCisgICBBRENfQ01EX1RSQU5TRk9STV9JTlRPX0NVUlIsIFwKKyAgIEFEQ19DTURfR0VUX1NDSEVEVUxFUl9QQVJBTUVURVIsIFwKKyAgIEFEQ19DTURfU0VUX0NBTElCUkFUSU9OX0RBVEEsIFwKKyAgIEFEQ19DTURfUkVBRF9DQUxJQlJBVElPTl9EQVRBLCBcCisgICBBRENfQ01EX1JFQURfQ0FMSUJSQVRJT05fSU5GT1JNX0lOX1VTQkJPT1QsCVwKKyAgIEFEQ19DTURfU0VUX01VTFRJX0NIQU5ORUxfUkVBRCwgICAKKworI2RlZmluZSBIQURDX0NNRFMgXAorICAgQURDX0NNRF9JTU1fTUVBU1VSRSwgXAorICAgQURDX0NNRF9TWU5DX01FQVNVUkUsIFwKKyAgIEFEQ19DTURfVERNQV9TWU5DX1NFVFVQLCBcCisgICBBRENfQ01EX1BPV0VSLCBcCisgICBBRENfQ01EX0dFVF9EQVRBXzJfTUVUQSwgXAorICAgQURDX0NNRF9HRVRfREFUQSwgXAorICAgQURDX0NNRF9HRVRfTUVUQV9EQVRBLCBcCisgICBBRENfQ01EX0dFVF9NQVhfUEhZU0lDQUxfQ0gsIFwKKyAgIEFEQ19DTURfR0VUX0lNTV9EQVRBX09OX0JPT1RJTkcsIFwKKyAgIEFEQ19DTURfR0VUX1RFTVAsIFwKKyAgIEFEQ19DTURfR0VUX1BIWVNJQ0FMX0NIQU5ORUwsCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ1RSTF9EQVRBX1Q6IERlZmluZSB0aGUgQ29udHJvbCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBtb2R1bGUncyBjb21tYW5kCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEZvciBBRENfQ01EX0NSRUFURV9PQkpFQ1QgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDMyIHU0UGVyaW9kOwkJCQkvLyBNZWFzdXJlbWVudCBwZXJpb2QgKFVpbnQgaXMgaW4gVGljaykKKyAgIERDTF9VSU5UMzIgdTRTYXBpZDsKKyAgIERDTF9VSU5UOCB1MU93bmVySWQ7CQkJCS8vIEluZGljYXRlIHRoZSBtb2R1bGUgdG8gZm9yIEFEQyBkcml2ZXIgdG8gbm90aWZ5IHRoZSByZXN1bHQKKyAgIERDTF9VSU5UOCB1MUFkY0NoYW5uZWw7CQkJLy8gVG8gYmUgbWVhc3VyZWQgcGh5c2ljYWwgQURDIGNoYW5uZWwKKyAgIERDTF9VSU5UOCB1MUV2YWx1YXRlQ291bnQ7CQkvLyBNZWFzdXJlbWVudCBjb3VudAorICAgRENMX0JPT0wgZmdTZW5kUHJpbWl0aXZlOwkJLy8gV2hldGhlciB0byBzZW5kIG1lc3NhZ2UgdG8gb3duZXIgbW9kdWxlIG9yIE5PVAorfSBBRENfQ1RSTF9DUkVBVEVfT0JKRUNUX1Q7CisKKy8qIEZvciBBRENfQ01EX01PRElGWV9QQVJBTSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9VSU5UMzIgdTRQZXJpb2Q7CQkJCS8vIE1lYXN1cmVtZW50IHBlcmlvZCAoVWludCBpcyBpbiBUaWNrKQorICAgRENMX1VJTlQ4IHUxRXZhbHVhdGVDb3VudDsJCS8vIE1lYXN1cmVtZW50IGNvdW50Cit9IEFEQ19DVFJMX01PRElGWV9QQVJBTV9UOworLyogRm9yIEFEQ19DTURfU1RBUlRfTUVBU1VSRSBjb21tYW5kLiAqLworLy8gQURDX0NNRF9TVEFSVF9NRUFTVVJFIGRvZXMgTk9UIG5lZWQgcGFyYW1ldGVycworLyogRm9yIEFEQ19DTURfU1RPUF9NRUFTVVJFIGNvbW1hbmQuICovCisvLyBBRENfQ01EX1NUT1BfTUVBU1VSRSBkb2VzIE5PVCBuZWVkIHBhcmFtZXRlcnMKKy8qIEZvciBBRENfQ01EX0lNTV9NRUFTVVJFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQxNiB1MkNoYW5uZWw7CQkJCS8vIFRoZSBjaGFubmVsIHRvIGJlIG1lYXN1cmVkCisgICBEQ0xfVUlOVDE2IHUyQURDVmFsdWU7CQkJLy8gTWVhc3VyZWQgQURDIHZhbHVlCit9IEFEQ19DVFJMX0lNTV9NRUFTVVJFX1Q7CisvKiBGb3IgQURDX0NNRF9TWU5DX01FQVNVUkUgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDE2IHUyQ2hhbm5lbDsJCQkJLy8gVGhlIGNoYW5uZWwgdG8gYmUgbWVhc3VyZWQKKyAgIERDTF9VSU5UMTYgdTJBRENWYWx1ZTsJCQkvLyBNZWFzdXJlZCBBREMgdmFsdWUKK30gQURDX0NUUkxfU1lOQ19NRUFTVVJFX1Q7CisvKiBGb3IgQURDX0NNRF9URE1BX1NZTkNfU0VUVVAgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDE2IHUyRXZlbnQwOwkJCQkvLyBFdmVudCAwCisgICBEQ0xfVUlOVDE2IHUyRXZlbnQxOwkJCQkvLyBFdmVudCAxCit9IEFEQ19DVFJMX1RETUFfU1lOQ19TRVRVUF9UOworLyogRm9yIEFEQ19DTURfUE9XRVIgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfQk9PTCBmZ0VuYWJsZTsJCS8vIFRSVUU6IFBvd2VyIG9uIEFEQyBtb2R1bGUsIEZBTFNFOiBQb3dlciBvZmYgQURDIG1vZHVsZQorfSBBRENfQ1RSTF9QT1dFUl9UOworCisvKiBGb3IgQURDX0NNRF9HRVRfREFUQV8yX01FVEEgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDggdTFDaGFubmVsOyAgLy9tZWFzdXJlIHBoeXNpY2FsIGNoYW5uZWwKKyAgIERDTF9VSU5UMTYgdTJNZWFDb3VudDsgLy90aGUgY291bnRzIG9mIG1lYXN1cmVtZW50CisgICBEQ0xfVUlOVDMyIHU0QURDRGF0YTsgIC8vcmV0dXJuIEFEQyB2YWx1ZQorfSBBRENfQ1RSTF9HRVRfREFUQV8yX01FVEFfVDsKKworLyogRm9yIEFEQ19DTURfR0VUX0RBVEEgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDggdTFDaGFubmVsOyAgLy9tZWFzdXJlIHBoeXNpY2FsIGNoYW5uZWwKKyAgIERDTF9VSU5UMzIgdTRBRENEYXRhOyAgLy9yZXR1cm4gQURDIHZhbHVlCit9IEFEQ19DVFJMX0dFVF9EQVRBX1Q7CisKKy8qIEZvciBBRENfQ01EX0dFVF9NRVRBX0RBVEEgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDggdTFDaGFubmVsOyAgLy9tZWFzdXJlIHBoeXNpY2FsIGNoYW5uZWwKKyAgIERDTF9VSU5UMTYgdTJNZWFDb3VudDsgLy90aGUgY291bnRzIG9mIG1lYXN1cmVtZW50CisgICBEQ0xfVUlOVDMyIHU0QURDRGF0YTsgIC8vcmV0dXJuIEFEQyB2YWx1ZQorfSBBRENfQ1RSTF9HRVRfTUVUQV9EQVRBX1Q7CisKKy8qIEZvciBBRENfQ01EX0dFVF9JTU1fREFUQV9PTl9CT09USU5HIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQzMiB1NENoYW5uZWw7IC8vIE1lYXN1cmUgcGh5c2ljYWwgY2hhbm5lbAorICAgRENMX1VJTlQzMiB1NE1lYUNvdW50OyAvLyBUaGUgY291bnRzIG9mIG1lYXN1cmVtZW50CisgICBEQ0xfVUlOVDE2ICp1MkFEQ0RhdGE7IC8vIFN0b3JlIEFEQyBWYWx1ZQorfSBBRENfQ1RSTF9HRVRfSU1NX0RBVEFfT05fQk9PVElOR19UOworCisvKiBGb3IgQURDX0NNRF9HRVRfVEVNUCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBEQ0xfVUlOVDE2IHUyQ2hhbm5lbDsKKyAgICBEQ0xfSU5UMTYgaTJUZW1wOyAgIC8qIFNpZ25lZCBpbnRlZ2VyIGZvciB0ZW1wZXJhdHVyZSBzaG93ICovCit9IEFEQ19DVFJMX0dFVF9URU1QX1Q7CisKKy8vQURDX0NNRF9TRVRfVElNRVJfUEFHRV9BTElHTgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9CT09MIGZnUGFnZUFsaWduOyAgLy8gVFJVRTogc2V0IHN0YWNrIHRpbWVyIHBhZ2UgYWxpZ25tZW50Cit9IEFEQ19DVFJMX1RJTUVSX0FMSUdOX1Q7CisKKy8vQURDX0NNRF9HRVRfQ0hBTk5FTAordHlwZWRlZiBlbnVtIHsKKyAgIERDTF9WQkFUX0FEQ19DSEFOTkVMID0gMCwKKyAgIERDTF9WSVNFTlNFX0FEQ19DSEFOTkVMLAorICAgRENMX1ZCQVRUTVBfQURDX0NIQU5ORUwsCisgICBEQ0xfQkFUVFlQRV9BRENfQ0hBTk5FTCwKKyAgIERDTF9WQ0hBUkdFUl9BRENfQ0hBTk5FTCwKKyAgIERDTF9QQ0JUTVBfQURDX0NIQU5ORUwsCisgICBEQ0xfQVVYX0FEQ19DSEFOTkVMLAorICAgRENMX0NIUl9VU0JfQURDX0NIQU5ORUwsCisgICBEQ0xfT1RHX1ZCVVNfQURDX0NIQU5ORUwsCisgICBEQ0xfUkZUTVBfQURDX0NIQU5ORUwsCisgICBEQ0xfTURUTVBfQURDX0NIQU5ORUwsCisgICBEQ0xfUE1JQ1RNUF9BRENfQ0hBTk5FTCwKKyAgIERDTF9NQVhfQURDX0NIQU5ORUwKK30gRENMX0FEQ19DSEFOTkVMX1RZUEVfRU5VTTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9VSU5UOCAgICB1MUFkY1BoeUNoOworICAgRENMX1VJTlQxNiAgIHUyQWRjTmFtZTsKK30gQURDX0NUUkxfR0VUX1BIWVNJQ0FMX0NIQU5ORUxfVDsKKworLy9BRENfQ01EX1RSQU5TRk9STV9JTlRPX1ZPTFQKK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfRE9VQkxFICAgZDhBZGNWYWx1ZTsKKyAgIERDTF9VSU5UMzIgICB1NFZvbHQ7CisgICBEQ0xfVUlOVDggICAgdTFBZGNQaHlDaDsKK30gQURDX0NUUkxfVFJBTlNGT1JNX0lOVE9fVk9MVF9UOworCisvL0FEQ19DTURfVFJBTlNGT1JNX0lOVE9fVEVNUAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9VSU5UMzIgICB1NFZvbHQ7CisgICBEQ0xfVUlOVDMyICAgdTRUZW1wOworfSBBRENfQ1RSTF9UUkFOU0ZPUk1fSU5UT19URU1QX1Q7CisKKy8vQURDX0NNRF9UUkFOU0ZPUk1fSU5UT19DVVJSCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQzMiAgIHU0Vm9sdDsKKyAgIERDTF9VSU5UMzIgICB1NEN1cnI7Cit9IEFEQ19DVFJMX1RSQU5TRk9STV9JTlRPX0NVUlJfVDsKKworLy90eXBlZGVmIHZvaWQgKCpQRk5fRENMU0FEQ19NRUFTVVJFX0NBTExCQUNLKShEQ0xfSU5UMzIgaGFuZGxlKTsKKy8vQURDX0NNRF9SRUdJU1RFUl9NRUFTVVJFX0NCCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3RpbWVyX2Z1bmNfcHRyIHBmTWVhc3VyZV9jYjsKK30gQURDX0NUUkxfUkVHSVNURVJfTUVBU1VSRV9DQl9UOworCit0eXBlZGVmIHZvaWQgKCpQRk5fRENMU0FEQ19DT01QTEVURV9DQUxMQkFDSykoRENMX0lOVDMyIGhhbmRsZSwgRENMX0lOVDMyIHZvbHRfcmVzdWx0LCBEQ0xfRE9VQkxFIGFkY19yZXN1bHQpOwordHlwZWRlZiB2b2lkICgqUEZOX0RDTFNBRENfQ09NUExFVEVfTVVMVElfQ0FMTEJBQ0spKERDTF9JTlQzMiBoYW5kbGUsIERDTF9JTlQzMiAqdm9sdF9hcnJheV9yZXN1bHQsIERDTF9ET1VCTEUgKmFkY19hcnJheV9yZXN1bHQpOworLy9BRENfQ01EX1JFR0lTVEVSX0NPTVBMRVRFX0NCOwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFBGTl9EQ0xTQURDX0NPTVBMRVRFX0NBTExCQUNLIHBmQ29tcGxldGVfY2I7Cit9IEFEQ19DVFJMX1JFR0lTVEVSX0NPTVBMRVRFX0NCX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBQRk5fRENMU0FEQ19DT01QTEVURV9NVUxUSV9DQUxMQkFDSyBwZkNvbXBsZXRlX2NiOworfSBBRENfQ1RSTF9SRUdJU1RFUl9DT01QTEVURV9NVUxUSV9DQl9UOworCisKKy8vQURDX0NNRF9HRVRfU0NIRURVTEVSX1BBUkFNRVRFUgordHlwZWRlZiBzdHJ1Y3R7CisgIERDTF9VSU5UMzIgICAgIHU0T3duZXJpZDsKKyAgRENMX1VJTlQzMiAgICAgdTRTYXBpZDsKKwlEQ0xfVUlOVDMyICAgICB1NFBlcmlvZDsKKwlEQ0xfVUlOVDggICAgICB1MUFkY19waHlfaWQ7CisJRENMX1VJTlQ4ICAgICAgdTFBZGNfbG9naWNfaWQ7CisJRENMX1VJTlQ4CQkgICB1MUV2YWx1YXRlX2NvdW50OwkvKmhvdyBtYW55IHRvIGF2ZXJhZ2UqLworCURDTF9CT09MICAgICAgIGJTZW5kX3ByaW1pdGl2ZTsKKwlEQ0xfQk9PTCAgICAgICBiQ29udGlfbWVhc3VyZTsKKwlEQ0xfVUlOVDMyICAgICB1NEFkY19zY2hlX2V2ZW50X2lkOworCXZvaWQgKCpjb21wbGV0ZSkoRENMX0lOVDMyIGFkY19oYW5kbGUsIERDTF9JTlQzMiB2b2x0X3Jlc3VsdCwgRENMX0RPVUJMRSBhZGNfcmVzdWx0KTsvKmNhbGxiYWNrIGZvciB1cHBlciBsYXllciovCit9RENMX0FEQ19TQ0hFRFVMRVJfUEFSQV9UOwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9VSU5UMzIgdTRIYW5kbGU7CisgICBEQ0xfQURDX1NDSEVEVUxFUl9QQVJBX1QgcFBhcmE7Cit9IEFEQ19DVFJMX0dFVF9TQ0hFRFVMRVJfUEFSQU1FVEVSX1Q7CisKKy8vQURDX0NNRF9HRVRfTUFYX1BIWVNJQ0FMX0NICit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMzIgICAgIHU0QWRjX21heF9jaDsKK30gQURDX0NUUkxfR0VUX01BWF9QSFlTSUNBTF9DSF9UOworCisvL0FEQ19DTURfU0VUX0NBTElCUkFUSU9OX0RBVEE6Cit0eXBlZGVmIHN0cnVjdAoreworCXZvaWQgICppbG1fcHRyOworfUFEQ19DVFJMX1NFVF9DQUxJQlJBVElPTl9EQVRBX1Q7CisKKy8vQURDX0NNRF9SRUFEX0NBTElCUkFUSU9OX0RBVEEKK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfSU5UMzIgaTRBRENTbG9wZVsxNl07IC8vd2UgZG8gbm90IHdhbnQgdG8gaW5jbHVkZSBhZGNfaHcuaCBoZXJlCisgICBEQ0xfSU5UMzIgaTRBRENPZmZzZXRbMTZdOyAvL3VzZSAxNiBpbnN0ZWFkIG9mIEFEQ19NQVhfQ0hBTk5FTAorfUFEQ19DVFJMX1JFQURfQ0FMSUJSQVRJT05fREFUQV9UOworCisvL0FEQ19DTURfU0NIRV9JRF9HRVRfSEFORExFCit0eXBlZGVmIHN0cnVjdHsKKyAgRENMX1VJTlQzMiAgICAgdTRIYW5kbGU7CisgICBEQ0xfVUlOVDMyICAgICB1NEFkY19zY2hlX2lkOworfURDTF9DVFJMX1NDSEVfSURfR0VUX0hBTkRMRV9UOworCit0eXBlZGVmIHN0cnVjdHsKKwlEQ0xfVUlOVDggICAgICBiRW5hYmxlOworCURDTF9VSU5UOCAgICAgKnU0QURDX2NoX251bWJlcjsJCisJRENMX1VJTlQ4ICAgICB1NEFkY19tYXhfY2hfbnVtYmVyOworCVBGTl9EQ0xTQURDX0NPTVBMRVRFX01VTFRJX0NBTExCQUNLIGNvbXBsZXRlX211bHRpX2NiOworfURDTF9NVUxUSV9DSEFOTkVMX1BBUkFfVDsKKworI2RlZmluZSBBRENfQ1RSTFMgXAorICAgQURDX0NUUkxfQ1JFQVRFX09CSkVDVF9UIHJBRENDcmVhdGVPYmo7IFwKKyAgIEFEQ19DVFJMX01PRElGWV9QQVJBTV9UIHJBRENNb2RpZnlQYXJhbTsgXAorICAgQURDX0NUUkxfSU1NX01FQVNVUkVfVCByQURDSW1tTWVhc3VyZTsgXAorICAgQURDX0NUUkxfU1lOQ19NRUFTVVJFX1QgckFEQ1N5bmNNZWFzdXJlOyBcCisgICBBRENfQ1RSTF9URE1BX1NZTkNfU0VUVVBfVCByQURDVERNQVN5bmNTZXR1cDsgXAorICAgQURDX0NUUkxfUE9XRVJfVCByQURDUG93ZXI7IFwKKyAgIEFEQ19DVFJMX1RJTUVSX0FMSUdOX1QgckFEQ1RpbWVyQWxpZ247IFwKKyAgIEFEQ19DVFJMX1JFR0lTVEVSX01FQVNVUkVfQ0JfVCByQURDUmVnaXN0ZXJNZWFzdXJlQ0I7IFwKKyAgIEFEQ19DVFJMX1JFR0lTVEVSX0NPTVBMRVRFX0NCX1QgckFEQ1JlZ2lzdGVyQ29tcGxldGVDQjsgXAorICAgQURDX0NUUkxfR0VUX1BIWVNJQ0FMX0NIQU5ORUxfVCByQURDR2V0UGh5Q2hhbm5lbDsgXAorICAgRENMX0NUUkxfU0NIRV9JRF9HRVRfSEFORExFX1QgckFEQ1NjaGVJZEdldEhhbmRsZTsgXAorICAgQURDX0NUUkxfVFJBTlNGT1JNX0lOVE9fVk9MVF9UIHJBRENUcmFuc2Zvcm1Wb2x0OyBcCisgICBBRENfQ1RSTF9UUkFOU0ZPUk1fSU5UT19URU1QX1QgckFEQ1RyYW5zZm9ybVRlbXA7IFwKKyAgIEFEQ19DVFJMX1RSQU5TRk9STV9JTlRPX0NVUlJfVCByQURDVHJhbnNmb3JtQ3VycjsgXAorICAgQURDX0NUUkxfR0VUX0RBVEFfMl9NRVRBX1QgckFEQ0dldERhdGEyTWV0YTsgXAorICAgQURDX0NUUkxfR0VUX0RBVEFfVCByQURDR2V0RGF0YTsgXAorICAgQURDX0NUUkxfR0VUX01FVEFfREFUQV9UIHJBRENHZXRNZXRhRGF0YTsgXAorICAgQURDX0NUUkxfR0VUX1NDSEVEVUxFUl9QQVJBTUVURVJfVCByR2V0U2NoZWR1bGVyUGFyYTsgXAorICAgQURDX0NUUkxfR0VUX01BWF9QSFlTSUNBTF9DSF9UIHJBRENHZXRNYXhQaHlDaDsgXAorICAgQURDX0NUUkxfU0VUX0NBTElCUkFUSU9OX0RBVEFfVCByU2V0Q2FsaWJyYXRpb25EYXRhOyBcCisgICBBRENfQ1RSTF9SRUFEX0NBTElCUkFUSU9OX0RBVEFfVCByUmVhZENhbGlicmF0aW9uRGF0YTsgXAorICAgQURDX0NUUkxfR0VUX0lNTV9EQVRBX09OX0JPT1RJTkdfVCByR2V0SW1tRGF0YU9uQm9vdGluZzsgXAorICAgQURDX0NUUkxfR0VUX1RFTVBfVCByR2V0VGVtcERhdGE7IFwKKyAgIERDTF9NVUxUSV9DSEFOTkVMX1BBUkFfVCByTXVsdGlDaGFubmVsUGFyYTsKKyNlbmRpZiAvLyAjaWZuZGVmIF9fRENMX0FEQ19IX1NUUlVDVF9fCisjZW5kaWYgLy8gI2lmZGVmIERDTF9ERUZJTklUSU9OX1NUUlVDVCAgIAorCisjaWZkZWYgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisjaWZuZGVmIF9fRENMX0FEQ19IX1BST1RPVFlQRV9fCisjZGVmaW5lIF9fRENMX0FEQ19IX1BST1RPVFlQRV9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xTQURDX0luaXRpYWxpemUKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gaW5pdGlhbGl6ZSBTVyBBREMgbW9kdWxlCisqCisqIFBBUkFNRVRFUlMKKyogIE5vbmUKKyoKKyogUkVUVVJOUworKiAgU1RBVFVTX09LCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU0FEQ19Jbml0aWFsaXplKHZvaWQpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFNBRENfT3BlbgorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBvcGVuIHRoZSBTVyBBREMgbW9kdWxlIGFuZCByZXR1cm4gYSBoYW5kbGUKKyoKKyogUEFSQU1FVEVSUworKiAgZGV2OiBvbmx5IHZhbGlkIGZvciBEQ0xfQURDCisqICBmbGFnczogbm8gc2VwY2lhbCBmbGFncyBpcyBuZWVkZWQuIFBsZWFzZSB1c2UgRkxBR1NfTk9ORQorKgorKiBSRVRVUk5TCisqICBEQ0xfSEFORExFX0lOVkFMSUQ6IE9wZW4gZmFpbGVkCisqICBPdGhlciB2YWx1ZTogQSB2YWxpZCBoYW5kbGUKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX0hBTkRMRSBEY2xTQURDX09wZW4oRENMX0RFViBkZXYsIERDTF9GTEFHUyBmbGFncyk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsU0FEQ19SZWFkRGF0YQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgQURDIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU0FEQ19SZWFkRGF0YShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0JVRkYgKmJ1ZmYsIERDTF9CVUZGX0xFTiBidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xTQURDX1dyaXRlRGF0YQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgQURDIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU0FEQ19Xcml0ZURhdGEoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9CVUZGICpidWZmLCBEQ0xfQlVGRl9MRU4gYnVmX2xlbiwgRENMX09QVElPTlMgb3B0aW9ucyk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsU0FEQ19Db25maWd1cmUKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlIEFEQyBtb2R1bGUgbm93LgorKgorKiBQQVJBTUVURVJTCisqCU4vQQorKgorKiBSRVRVUk5TCisqCVNUQVRVU19VTlNVUFBPUlRFRAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNBRENfQ29uZmlndXJlKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQ09ORklHVVJFX1QgKmNvbmZpZ3VyZSk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsU0FEQ19SZWdpc3RlckNhbGxiYWNrCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBBREMgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTQURDX1JlZ2lzdGVyQ2FsbGJhY2soRENMX0hBTkRMRSBoYW5kbGUsIERDTF9FVkVOVCBldmVudCwgUEZOX0RDTF9DQUxMQkFDSyBjYWxsYmFjayk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsU0FEQ19Db250cm9sCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIHNlbmQgY29tbWFuZCB0byBjb250cm9sIHRoZSBTVyBBREMgbW9kdWxlLgorKgorKiBQQVJBTUVURVJTCisqICBoYW5kbGU6IEEgdmFsaWQgaGFuZGxlIHJldHVybiBieSBEY2xTQURDX09wZW4oKQorKiAgY21kOiBBIGNvbnRyb2wgY29tbWFuZCBmb3IgQURDIG1vZHVsZQorKiAgICAgICAgICAxLiBBRENfQ01EX0NSRUFURV9PQkpFQ1Q6IHRvIGNyZWF0ZSBtZWFzdXJlbWVudCBvYmplY3QKKyogICAgICAgICAgMi4gQURDX0NNRF9NT0RJRllfUEFSQU06IHRvIGNoYW5nZSBtZWFzdXJlbWVudCBwYXJhbWV0ZXJzCisqICAgICAgICAgIDMuIEFEQ19DTURfU1RBUlRfTUVBU1VSRTogdG8gc3RhcnQgbWVhc3VyZW1lbnQgaXRlbQorKiAgICAgICAgICA0LiBBRENfQ01EX1NUT1BfTUVBU1VSRTogdG8gc3RvcCBtZWFzdXJlbWVudCBpdGVtCisqICBkYXRhOiBUaGUgZGF0YSBvZiB0aGUgY29udHJvbCBjb21tYW5kCisqICAgICAgICAgIDEuIEFEQ19DTURfQ1JFQVRFX09CSkVDVDogcG9pbnRlciB0byBhIEFEQ19DVFJMX0NSRUFURV9PQkpFQ1RfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgMi4gQURDX0NNRF9NT0RJRllfUEFSQU06IHBvaW50ZXIgdG8gYSBBRENfQ1RSTF9NT0RJRllfUEFSQU1fVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgMy4gQURDX0NNRF9TVEFSVF9NRUFTVVJFOiBhIG51bGwgcG9pbnRlcgorKiAgICAgICAgICA0LiBBRENfQ01EX1NUT1BfTUVBU1VSRTogYSBudWxsIHBvaW50ZXIKKyoKKyogUkVUVVJOUworKiAgU1RBVFVTX09LOiBjb21tYW5kIGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyogIFNUQVRVU19GQUlMOiBjb21tYW5kIGlzIGZhaWxlZC4KKyogIFNUQVRVU19JTlZBTElEX0NNRDogSXQncyBhIGludmFsaWQgY29tbWFuZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTQURDX0NvbnRyb2woRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DVFJMX0NNRCBjbWQsIERDTF9DVFJMX0RBVEFfVCAqZGF0YSk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsU0FEQ19DbG9zZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBjbG9zZSB0aGUgU1cgQURDIG1vZHVsZS4KKyoKKyogUEFSQU1FVEVSUworKiAgaGFuZGxlOiB0aGUgcmV0dXJuZWQgaGFuZGxlIHZhbHVlIG9mIERjbFNBRENfT3BlbgorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTQURDX0Nsb3NlKERDTF9IQU5ETEUgaGFuZGxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbEhBRENfSW5pdGlhbGl6ZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBpbml0aWFsaXplIEhhcmR3YXJlIEFEQyBtb2R1bGUKKyoKKyogUEFSQU1FVEVSUworKiAgTm9uZQorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xIQURDX0luaXRpYWxpemUodm9pZCk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsSEFEQ19PcGVuCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIG9wZW4gdGhlIEhhcmR3YXJlIEFEQyBtb2R1bGUgYW5kIHJldHVybiBhIGhhbmRsZQorKgorKiBQQVJBTUVURVJTCisqICBkZXY6IG9ubHkgdmFsaWQgZm9yIEhhcmR3YXJlIERDTF9BREMKKyogIGZsYWdzOiBubyBzZXBjaWFsIGZsYWdzIGlzIG5lZWRlZC4gUGxlYXNlIHVzZSBGTEFHU19OT05FCisqCisqIFJFVFVSTlMKKyogIERDTF9IQU5ETEVfSU5WQUxJRDogT3BlbiBmYWlsZWQKKyogIE90aGVyIHZhbHVlOiBBIHZhbGlkIGhhbmRsZQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfSEFORExFIERjbEhBRENfT3BlbihEQ0xfREVWIGRldiwgRENMX0ZMQUdTIGZsYWdzKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xIQURDX1JlYWREYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBBREMgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xIQURDX1JlYWREYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOIGJ1Zl9sZW4sIERDTF9PUFRJT05TIG9wdGlvbnMpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbEhBRENfV3JpdGVEYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBBREMgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xIQURDX1dyaXRlRGF0YShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0JVRkYgKmJ1ZmYsIERDTF9CVUZGX0xFTiBidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xIQURDX0NvbmZpZ3VyZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgQURDIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsSEFEQ19Db25maWd1cmUoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DT05GSUdVUkVfVCAqY29uZmlndXJlKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xIQURDX1JlZ2lzdGVyQ2FsbGJhY2sKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlIEFEQyBtb2R1bGUgbm93LgorKgorKiBQQVJBTUVURVJTCisqCU4vQQorKgorKiBSRVRVUk5TCisqCVNUQVRVU19VTlNVUFBPUlRFRAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbEhBRENfUmVnaXN0ZXJDYWxsYmFjayhEQ0xfSEFORExFIGhhbmRsZSwgRENMX0VWRU5UIGV2ZW50LCBQRk5fRENMX0NBTExCQUNLIGNhbGxiYWNrKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xIQURDX0NvbnRyb2wKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gc2VuZCBjb21tYW5kIHRvIGNvbnRyb2wgdGhlIEhhcmR3YXJlIEFEQyBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogQSB2YWxpZCBoYW5kbGUgcmV0dXJuIGJ5IERjbEhBRENfT3BlbigpCisqICBjbWQ6IEEgY29udHJvbCBjb21tYW5kIGZvciBBREMgbW9kdWxlCisqICAgICAgICAgIDEuIEFEQ19DTURfSU1NX01FQVNVUkU6IHRvIHBlcmZvcm0gYSBpbW1lZGlhdGUgbW9kZSBtZWFzdXJlbWVudCAoUmVnaXN0ZXIgY29udHJvbCBvbmx5LCBub3QgaW5jbHVkZSBwb3dlciBzZXR0aW5nKQorKiAgICAgICAgICAyLiBBRENfQ01EX1NZTkNfTUVBU1VSRTogdG8gcGVyZm9ybSBhIHN5bmMgbW9kZSBtZWFzdXJlbWVudCAoUmVnaXN0ZXIgY29udHJvbCBvbmx5LCBub3QgaW5jbHVkZSBwb3dlciBzZXR0aW5nKQorKiAgICAgICAgICAzLiBBRENfQ01EX1RETUFfU1lOQ19TRVRVUDogdG8gc2V0dXAgVERNQSBzeW5jIG1vZGUgcGFyYW1ldGVycworKiAgICAgICAgICA0LiBBRENfQ01EX1BPV0VSOiB0byB0dXJuIG9uL29mZiBBREMgbW9kdWxlIHBvd2VyCisqICBkYXRhOiBUaGUgZGF0YSBvZiB0aGUgY29udHJvbCBjb21tYW5kCisqICAgICAgICAgIDEuIEFEQ19DTURfSU1NX01FQVNVUkU6IHBvaW50ZXIgdG8gYSBBRENfQ1RSTF9JTU1fTUVBU1VSRV9UIHN0cnVjdHVyZQorKiAgICAgICAgICAyLiBBRENfQ01EX1NZTkNfTUVBU1VSRTogcG9pbnRlciB0byBhIEFEQ19DVFJMX1NZTkNfTUVBU1VSRV9UIHN0cnVjdHVyZQorKiAgICAgICAgICAzLiBBRENfQ01EX1RETUFfU1lOQ19TRVRVUDogcG9pbnRlciB0byBhIEFEQ19DVFJMX1RETUFfU1lOQ19TRVRVUF9UIHN0cnVjdHVyZQorKiAgICAgICAgICA0LiBBRENfQ01EX1BPV0VSOiBwb2ludGVyIHRvIGEgQURDX0NUUkxfUE9XRVJfVCBzdHJ1Y3R1cmUKKyoKKyogUkVUVVJOUworKiAgU1RBVFVTX09LOiBjb21tYW5kIGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyogIFNUQVRVU19GQUlMOiBjb21tYW5kIGlzIGZhaWxlZC4KKyogIFNUQVRVU19JTlZBTElEX0NNRDogSXQncyBhIGludmFsaWQgY29tbWFuZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xIQURDX0NvbnRyb2woRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DVFJMX0NNRCBjbWQsIERDTF9DVFJMX0RBVEFfVCAqZGF0YSk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsSEFEQ19DbG9zZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBjbG9zZSB0aGUgSGFyZHdhcmUgQURDIG1vZHVsZS4KKyoKKyogUEFSQU1FVEVSUworKiAgaGFuZGxlOiB0aGUgcmV0dXJuZWQgaGFuZGxlIHZhbHVlIG9mIEhEY2xBRENfT3BlbgorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xIQURDX0Nsb3NlKERDTF9IQU5ETEUgaGFuZGxlKTsKKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfQURDX0hfUFJPVE9UWVBFX18KKyNlbmRpZiAvLyAjaWZkZWYgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9hdXguaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX2F1eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9hdXguaApkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfYm10LmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9ibXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjY4NjExCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfYm10LmgKQEAgLTAsMCArMSw0NjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxMAorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBkY2xfYm10LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIEhlYWRlciBmaWxlIG9mIERDTCAoRHJpdmVyIENvbW1vbiBMYXllcikgZm9yIEJNVC4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUCisjaWZuZGVmIF9fRENMX0JNVF9IX1NUUlVDVF9fCisjZGVmaW5lIF9fRENMX0JNVF9IX1NUUlVDVF9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfT1BUSU9OUyBmb3IgQk1UCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQk1UX09QVElPTlMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DT05GSUdVUkVfVCBmb3IgQk1UCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQk1UX0NPTkZJR1MKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9FVkVOVCBmb3IgQk1UCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQk1UX0VWRU5UUworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NUUkxfQ01EIGZvciBCTVQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIF9fQlVJTERfRE9NX18KKy8qIFRoZSBCTVQgQ29tbWFuZCBWYWx1ZXMgaW4gRENMX0NUUkxfQ01EX1QgRW51bSBvZiBkY2wuaCAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBCTVRfQ01EX0NBTExTVEFURSwgLyogVG8gU2V0IEJNVCBDYWxsIFN0YXRlICovCisgICAgQk1UX0NNRF9DSEFSR0UsIC8qIFRvIEVuYWJsZS9EaXNhYmxlIENoYXJnZSAqLworICAgIEJNVF9DTURfR0VUX0NVU1RPTUlaRURfUEFSQSwgLyogVG8gR2V0IEN1c3RvbWl6ZWQgUGFyYW1ldGVycyAqLworICAgIEJNVF9DTURfU0VUX0VYVF9DSEFSR0VSLCAvKiBUbyBTZXQgRXh0ZXJuYWwgQ2hhcmdlciAqLworICAgIEJNVF9DTURfSU5JVElBTElaRSwgLyogVG8gSW5pdGlhbGl6ZSBCTVQgTW9kdWxlICovCisgICAgQk1UX0NNRF9JU19CQVRfT04sIC8qIFRvIENoZWNrIElmIEJhdHRlcnkgRXhpc3Qgb3IgTm90ICovCisgICAgQk1UX0NNRF9TRU5ETUVTMlVFTSwgLyogVG8gU2VuZCBNZXNzYWdlIHRvIFVFTSB2aWEgQk1UICovCisgICAgQk1UX0NNRF9TRVRfQ0hSX1NUQVRVUywgLyogVG8gU2V0IENoYXJnZXIgU3RhdHVzICovCisgICAgQk1UX0NNRF9WQkFUSU5ISVNSLCAvKiBUbyBTYXZlIFRoZSBCYXR0ZXJ5IFZvbHRhZ2UgaW4gSElTUiAqLworICAgIEJNVF9DTURfV0RUX0lOSVQsIC8KK30gRENMX0NUUkxfQ01EX1Q7CisjZWxzZSAvKiBfX0JVSUxEX0RPTV9fICovCisjZGVmaW5lIEJNVF9DTURTIFwKKyAgICBCTVRfQ01EX0NBTExTVEFURSwgXAorICAgIEJNVF9DTURfQ0hBUkdFLCBcCisgICAgQk1UX0NNRF9HRVRfQ1VTVE9NSVpFRF9QQVJBLCBcCisgICAgQk1UX0NNRF9TRVRfRVhUX0NIQVJHRVIsIFwKKyAgICBCTVRfQ01EX0lOSVRJQUxJWkUsIFwKKyAgICBCTVRfQ01EX0lTX0JBVF9PTiwgXAorICAgIEJNVF9DTURfU0VORE1FUzJVRU0sIFwKKyAgICBCTVRfQ01EX1NFVF9DSFJfU1RBVFVTLCBcCisgICAgQk1UX0NNRF9WQkFUSU5ISVNSLCBcCisgICAgQk1UX0NNRF9XRFRfSU5JVCwKKyNlbmRpZiAvKiBfX0JVSUxEX0RPTV9fICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ1RSTF9EQVRBX1Q6IERlZmluZSB0aGUgQ29udHJvbCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBtb2R1bGUncyBjb21tYW5kCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRm9yIEJNVF9DTURfQ0FMTFNUQVRFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIERDTF9VSU5UOCBjYWxsX3N0YXRlOyAvKiBJbnB1dCA6IFBob25lIFN0YXRlICovCit9Qk1UX0NUUkxfQ0FMTFNUQVRFX1Q7CisKKy8qIEZvciBCTVRfQ01EX0NIQVJHRSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBEQ0xfQk9PTEVBTiBiRW5hYmxlOyAvKiBJbnB1dCA6IEVuYWJsZS9EaXNhYmxlIENoYXJnZSAqLworfUJNVF9DVFJMX0NIQVJHRV9UOworCisvKiBFbnVtIGZvciBHZXQgQ29tbWFuZHMgb2YgQ2hhcmdlIFBhcmFtZXRlci4gKi8KK3R5cGVkZWYgZW51bQoreworICAgIERDTF9HRVRfQkFUVEVSWV9UWVBFLCAvKiBHZXQgQmV0dGVyeSBUeXBlICovCisJRENMX0dFVF9DSEVDS19CQVRURVJZLCAvKiBHZXQgQ2hlY2sgQmF0dGVyeSBDb25maWd1cmF0aW9uICovCisJRENMX0dFVF9DSEVDS19DSEFSR0VSX1ZPTFRBR0UsIC8qIEdldCBDaGVjayBDaGFyZ2VyIFZvbHRhZ2UgQ29uZmlndXJhdGlvbiAqLworCURDTF9HRVRfQ0hFQ0tfQkFUVF9URU1QLCAvKiBHZXQgQ2hlY2sgQmF0dGVyeSBUZW1wZXJhdHVyZSBDb25maWd1cmF0aW9uICovIAorCURDTF9HRVRfTUFYX1ZCQVRfTEkgLyogR2V0IE1heCBWb2x0YWdlIG9mIExpIEJhdHRlcnkgKi8KK31EQ0xfR0VUX0NVU1RPTV9DSFJfUEFSQTsKKworLyogRm9yIEJNVF9DTURfR0VUX0NVU1RPTUlaRURfUEFSQSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBEQ0xfVUlOVDMyIHU0Q2hhcmdpbmdQYXJhbWV0ZXI7IC8qIE91dHB1dCA6IFJlc3VsdCBvZiBDaGFyZ2UgUGFyYW1ldGVyICovCisgICAgRENMX0dFVF9DVVNUT01fQ0hSX1BBUkEgZUdldFBhcmFDbWQ7IC8qIElucHV0IDogR2V0IENvbW1hbmQgb2YgQ2hhcmdlIFBhcmFtZXRlciAqLworfUJNVF9DVFJMX0dFVF9DVVNUT01JWkVEX1BBUkFfVDsKKworLyogRW51bSBmb3IgQ29tbWFuZHMgb2YgRXh0ZXJuYWwgQ2hhcmdlci4gKi8KK3R5cGVkZWYgZW51bQoreworICAgIERDTF9CTVRfRVhUX0NIUl9EUlZfSU5JVCA9IDAsIC8qIENhbGxlZCBhdCBEcml2ZXIgSW5pdCBQaGFzZSAqLworICAgIERDTF9CTVRfRVhUX0NIUl9FTkFCTEVfSU5UUiwgLyogQ2FsbGVkIGF0IFBNSUMgQWRwdCBMYXllciBJbml0IFBoYXNlICovCisgICAgRENMX0JNVF9FWFRfQ0hSX0NIQVJHRV9FTkFCTEUsIC8qIENvbnRyb2wgQ2hhcmdlIEVuYWJsZS9EaXNhYmxlICovCisgICAgRENMX0JNVF9FWFRfQ0hSX1NFVF9DSEFSR0VfQ1VSUkVOVCwgLyogU2V0IENoYXJnZSBDdXJyZW50ICovCisgICAgRENMX0JNVF9FWFRfQ0hSX0dFVF9DSFJfRkFDX01FQVNVUkVfU1VQUE9SVCwgLyogV2hldGhlciB0aGUgRXh0ZXJuYWwgQ2hhcmdlciBDYW4gTWVhc3VyZSB0aGUgUGFzc2VkLWluIENoYXJnaW5nIEZhY3RvciAqLworICAgIERDTF9CTVRfRVhUX0NIUl9HRVRfQ0hSX0ZBQ19DSEVDS19TVVBQT1JULCAvKiBXaGV0aGVyIHRoZSBFeHRlcm5hbCBDaGFyZ2VyIENhbiBDaGVjayB0aGUgUGFzc2VkLWluIENoYXJnaW5nIEZhY3RvciAqLworICAgIERDTF9CTVRfRVhUX0NIUl9DSEVDS19DSFJfU1RBVFVTLCAvKiBDaGFyZ2VyIERldmljZSBDYW4gQ2FsY3VsYXRlIHRoZSBDaGFyZ2VyIFN0YXR1cyBUaHJvdWdoIHRoZSBQYXNzZWQtaW4gSW5mb3JtYXRpb24gKi8KKyAgICBEQ0xfQk1UX0VYVF9DSFJfR0VUX0NIUl9TVEFUVVMsIC8qIFJldHVybiBjYWxjdWxhdGVkIGNoYXJnZXIgc3RhdHVzICovCisgICAgRENMX0JNVF9FWFRfQ0hSX0dFVF9WQkFULCAvKiBHZXQgVkJBVCAqLworICAgIERDTF9CTVRfRVhUX0NIUl9HRVRfSVNFTlNFLCAvKiBHZXQgSVNFTlNFICovCisgICAgRENMX0JNVF9FWFRfQ0hSX0dFVF9WQ0hBUkdFUiwgLyogR2V0IFZDSEFSR0VSICovCisgICAgRENMX0JNVF9FWFRfQ0hSX0dFVF9CQVRfVEVNUCwgLyogR2V0IEJhdHRlcnkgVGVtcGVyYXR1cmUgKi8KKyAgICBEQ0xfQk1UX0VYVF9DSFJfR0VUX0NIQVJHRV9GVUxMLCAvKiBSZXR1cm4gSWYgQ2hhcmdlIEZ1bGwgKi8KKyAgICBEQ0xfQk1UX0VYVF9DSFJfR0VUX0NIQVJHRV9VTkRFUl9FWFRSRU1FVE1QLCAvKiBSZXR1cm4gSWYgSXQncyBVbmRlciBFeHRyZW1lIFRlbXBlcmF0dXJlICovCisgICAgRENMX0JNVF9FWFRfQ0hSX0dFVF9DSEFSR0VfRVhUUkVNRVRNUF9GVUxMLCAvKiBSZXR1cm4gSWYgQ2hhcmdlIEZ1bGwgV2hlbiBVbmRlciBFeHRyZW1lIFRlbXBlcmF0dXJlICovCisgICAgRENMX0JNVF9FWFRfQ0hSX0dFVF9DSEFSR0VfRVhUUkVNRVRNUF9SRUNIQVJHRSwgLyogUmV0dXJuIElmIENoYXJnZSBTaG91bGQgUmVjaGFyZ2UgV2hlbiBVbmRlciBFeHRyZW1lIFRlbXBlcmF0dXJlICovCisgICAgRENMX0JNVF9FWFRfQ0hSX0dFVF9DSEFSR0VfSE9MRCwgLyogUmV0dXJuIElmIEl0J3MgTmVlZCB0byBIb2xkIENoYXJnaW5nICovCisgICAgRENMX0JNVF9FWFRfQ0hSX0dFVF9DSFJfQkFUVF9TVEFURV9UUkFOU0lUX1NVUFBPUlQsIC8qIFdoZXRoZXIgdGhlIEV4dGVybmFsIENoYXJnZXIgQ2FuIEhhbmRsZSB0aGUgU3BlY2lmaWMgQ2hhcmdpbmcgQmF0dGVyeSBTdGF0ZSAqLworICAgIERDTF9CTVRfRVhUX0NIUl9DSFJfQkFUVF9TVEFURV9UUkFOU0lULCAvKiBQZXJmb3JtIENoYXJnaW5nIEJhdHRlcnkgU3RhdGUgVHJhbnNpdCAqLworICAgIERDTF9CTVRfRVhUX0NIUl9HRVRfQ1VSUl9DSFJfQkFUVF9TVEFURSwgLyogR2V0IEN1cnJlbnQgQ2hhcmdpbmcgQmF0dGVyeSBTdGF0ZSAqLworICAgIERDTF9CTVRfRVhUX0NIUl9HRVRfU1BFQ0lGSUNfQ0hSX0NVUlJFTlQsIC8qIEdldCBDdXN0b20gQ2hhcmdlIEN1cnJlbnQgQWNjb3JkaW5nIHRvIFNwZWNpZmljIENoYXJnZXIgKi8gICAKKyAgICBEQ0xfQk1UX0VYVF9DSFJfR0VUX1ZCQVRfU1BFQ0lGSUNfRlVMTF9WT0xUQUdFX1NUQVRFIC8qIFdoZXRoZXIgdGhlIFZCQVQgaXMgSGlnaGVyIFRoYW4gU3BlY2lmaWMgRnVsbCBDaGVjayBWYXVsZSBvciBOb3QgKi8KK31EQ0xfQk1UX0VYVF9DSFJfQ01EOworCisvKiBGb3IgQk1UX0NNRF9TRVRfRVhUX0NIQVJHRVIgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRENMX0JNVF9FWFRfQ0hSX0NNRCBlRXh0Q2hhcmdlckN0cmw7IC8qIElucHV0IDogQ29tbWFuZCBvZiBFeHRlcm5hbCBDaGFyZ2VyICovCit9Qk1UX0NUUkxfU0VUX0VYVF9DSEFSR0VSX1Q7CisKKy8qIEZvciBCTVRfQ01EX0lTX0JBVF9PTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBEQ0xfQk9PTEVBTiBmZ0JhdElzT247IC8qIE91dHB1dCA6IEJhdHRlcnkgRXhpc3Qgb3IgTm90ICovCit9Qk1UX0NUUkxfSVNfQkFUX09OX1Q7CisKKy8qIEVudW0gZm9yIEJNVCB0byBVRU0gTWVzc2FnZXMuICovCit0eXBlZGVmIGVudW0gCit7CisgICAgRENMX0JNVF9DSEFSR0VSX0lOID0gMCwgLyogQ2hhcmdlciBJbiAqLworICAgIERDTF9CTVRfQ0hBUkdFUl9PVVQsIC8qIENoYXJnZXIgT3V0ICovCisgICAgRENMX0JNVF9PVkVSVk9MUFJPVEVDVCwgLyogQmF0dGVyeSBPdmVyIFZvbHRhZ2UgUHJvdGVjdCAqLworICAgIERDTF9CTVRfT1ZFUkJBVFRFTVAsIC8qIEJhdHRlcnkgT3ZlciBUZW1wZXJhdHVyZSAqLworICAgIERDTF9CTVRfTE9XQkFUVEVNUCwgLyogQmF0dGVyeSBMb3cgVGVtcGVyYXR1cmUgKi8KKyAgICBEQ0xfQk1UX09WRVJDSEFSR0VDVVJSRU5ULCAvKiBPdmVyIENoYXJnZXIgQ3VycmVudCAqLworICAgIERDTF9CTVRfQ0hBUkdFX0NPTVBMRVRFLCAvKiBDaGFyZ2UgQ29tcGxldGUgKi8KKyAgICBEQ0xfQk1UX0lOVkFMSURfQkFULCAvKiBJbnZhbGlkIEJhdHRlcnkgKi8KKyAgICBEQ0xfQk1UX0lOVkFMSURfQ0hBUkdFUiwgLyogSW52YWxpZCBDaGFyZ2VyICovCisgICAgRENMX0JNVF9DSEFSR0VfVElNRU9VVCwgLyogQ2hhcmdlIFRpbWUgT3V0ICovCisgICAgRENMX0JNVF9MT1dDSEFSR0VDVVJSRU5ULCAvKiBMb3cgQ2hhcmdlciBDdXJyZW50ICovCisgICAgRENMX0JNVF9DSEFSR0VfQkFEX0NPTlRBQ1QsIC8qIENoYXJnZXIgQmF0IENvbnRhY3QgKi8KKyAgICBEQ0xfQk1UX0JBVFRFUllfQkFEX0NPTlRBQ1QsIC8qIEJhdHRlcnkgQmFkIENvbnRhY3QgKi8KKyAgICBEQ0xfQk1UX1VTQl9DSEFSR0VSX0lOLCAvKiBVU0IgQ2hhcmdlciBJbiAqLworICAgIERDTF9CTVRfVVNCX0NIQVJHRVJfT1VULCAvKiBVU0IgQ2hhcmdlciBPdXQgKi8KKyAgICBEQ0xfQk1UX1VTQl9OT19DSEFSR0lOR19JTiwgLyogVVNCIE5vIENoYXJnZXIgSW4gKi8KKyAgICBEQ0xfQk1UX1VTQl9OT19DSEFSR0lOR19PVVQsIC8qIFVTQiBObyBDaGFyZ2VyIE91dCAqLworICAgIERDTF9CTVRfQkFUVF9JTiwgLyogQmF0dGVyeSBJbiAqLworICAgIERDTF9CTVRfQkFUVF9PVVQgLyogQmF0dGVyeSBPdXQgKi8KK31EQ0xfQk1UX0NIUl9NU0c7CisKKy8qIEZvciBCTVRfQ01EX1NFTkRNRVMyVUVNIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIERDTF9CTVRfQ0hSX01TRyBDaGFyZ2VyTXNnOyAvKiBJbnB1dCA6IEJNVCB0byBVRU0gTWVzc2FnZSAqLworfUJNVF9DVFJMX1NFTkRNRVMyVUVNX1Q7CisKKy8qIEVudW0gZm9yIENoYXJnZXIgU3RhdHVzLiAqLwordHlwZWRlZiBlbnVtIHsKKwlEQ0xfQk1UX0NIUl9JTiA9IDAsIC8qIENoYXJnZXIgSW4gKi8KKwlEQ0xfQk1UX0NIUl9PVVQsIC8qIENoYXJnZXIgT3V0ICovCisJRENMX0JNVF9DSFJfVU5JTklUID0gMHhmZiAvKiBDaGFyZ2VyIFVuaW5pdGlhbGl6ZWQgKi8KK31EQ0xfQk1UX0NIUl9TVEFUOworCisvKiBGb3IgQk1UX0NNRF9TRVRfQ0hSX1NUQVRVUyBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBEQ0xfQk1UX0NIUl9TVEFUIENoYXJnZXJTdGF0OyAvKiBJbnB1dCA6IENoYXJnZXIgU3RhdGUgKi8KK31CTVRfQ1RSTF9TRVRfQ0hSX1NUQVRVU19UOworCisvKiBGb3IgQk1UX0NNRF9WQkFUSU5ISVNSIGNvbW1hbmQuICovCisvLyBCTVRfQ01EX1ZCQVRJTkhJU1IgZG9lcyBOT1QgbmVlZCBwYXJhbWV0ZXJzCisKKyNpZmRlZiBfX0JVSUxEX0RPTV9fCisvKiBUaGUgQk1UIENvbW1hbmQgUGFyYW1ldGVyIERhdGEgU3RydWN0dXJlIGZvciBFYWNoIENvbW1hbmQgaW4gRENMX0NUUkxfREFUQV9UIEVudW0gb2YgZGNsLmggKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgQk1UX0NUUkxfQ0FMTFNUQVRFX1QgckNhbGxTdGF0ZTsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIEJNVF9DTURfQ0FMTFNUQVRFICovCisgICAgQk1UX0NUUkxfQ0hBUkdFX1QgckNoYXJnZUNvbnRyb2w7IC8qIERhdGEgU3RydWN0dXJlIGZvciBCTVRfQ01EX0NIQVJHRSAqLworICAgIEJNVF9DVFJMX0dFVF9DVVNUT01JWkVEX1BBUkFfVCByR2V0Q3VzdG9taXplZFBhcmE7IC8qIERhdGEgU3RydWN0dXJlIGZvciBCTVRfQ01EX0dFVF9DVVNUT01JWkVEX1BBUkEgKi8KKyAgICBCTVRfQ1RSTF9TRVRfRVhUX0NIQVJHRVJfVCByU2V0RXh0Q2hyOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgQk1UX0NNRF9TRVRfRVhUX0NIQVJHRVIgKi8KKyAgICBCTVRfQ1RSTF9JU19CQVRfT05fVCBySXNCYXRPbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIEJNVF9DTURfSVNfQkFUX09OICovCisgICAgQk1UX0NUUkxfU0VORE1FUzJVRU1fVCByU2VuZE1lczJVZW07IC8qIERhdGEgU3RydWN0dXJlIGZvciBCTVRfQ01EX1NFTkRNRVMyVUVNICovCisgICAgQk1UX0NUUkxfU0VUX0NIUl9TVEFUVVNfVCByU2V0Q2hyU3RhdHVzOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgQk1UX0NNRF9TRVRfQ0hSX1NUQVRVUyAqLworfURDTF9DVFJMX0RBVEFfVDsKKyNlbHNlIC8qIF9fQlVJTERfRE9NX18gKi8KKyNkZWZpbmUgQk1UX0NUUkxTIFwKKyAgICBCTVRfQ1RSTF9DQUxMU1RBVEVfVCByQ2FsbFN0YXRlOyBcCisgICAgQk1UX0NUUkxfQ0hBUkdFX1QgckNoYXJnZUNvbnRyb2w7IFwKKyAgICBCTVRfQ1RSTF9HRVRfQ1VTVE9NSVpFRF9QQVJBX1QgckdldEN1c3RvbWl6ZWRQYXJhOyBcCisgICAgQk1UX0NUUkxfU0VUX0VYVF9DSEFSR0VSX1QgclNldEV4dENocjsgXAorICAgIEJNVF9DVFJMX0lTX0JBVF9PTl9UIHJJc0JhdE9uOyBcCisgICAgQk1UX0NUUkxfU0VORE1FUzJVRU1fVCByU2VuZE1lczJVZW07IFwKKyAgICBCTVRfQ1RSTF9TRVRfQ0hSX1NUQVRVU19UIHJTZXRDaHJTdGF0dXM7CisjZW5kaWYgLyogX19CVUlMRF9ET01fXyAqLworCisjZW5kaWYgLy8gI2lmbmRlZiBfX0RDTF9CTVRfSF9TVFJVQ1RfXworI2VuZGlmIC8vICNpZmRlZiBEQ0xfREVGSU5JVElPTl9TVFJVQ1QgICAKKworCisjaWZkZWYgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisjaWZuZGVmIF9fRENMX0JNVF9IX1BST1RPVFlQRV9fCisjZGVmaW5lIF9fRENMX0JNVF9IX1BST1RPVFlQRV9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xCTVRfSW5pdGlhbGl6ZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBpbml0aWFsaXplIEJNVCBtb2R1bGUKKyoKKyogUEFSQU1FVEVSUworKiAgTm9uZQorKgorKiBSRVRVUk5TCisqICBSZXR1cm4gdGhlIHN0YXR1cyBvZiBEY2xCTVRfSW5pdGlhbGl6ZQorKgorKiBSRVRVUk4gVkFMVUVTCisqICBTVEFUVVNfT0s6IEluaXRpYWxpemUgRmluaXNoZWQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xCTVRfSW5pdGlhbGl6ZSh2b2lkKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xCTVRfT3BlbgorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBvcGVuIHRoZSBCTVQgbW9kdWxlIGFuZCByZXR1cm4gYSBoYW5kbGUKKyoKKyogUEFSQU1FVEVSUworKiAgZGV2OiBbSU5dIE9ubHkgdmFsaWQgZm9yIERDTF9CTVQKKyogIGZsYWdzOiBbSU5dIE5vIHNlcGNpYWwgZmxhZ3MgaXMgbmVlZGVkLiBQbGVhc2UgdXNlIEZMQUdTX05PTkUKKyoKKyogUkVUVVJOUworKiAgUmV0dXJuIERDTF9IQU5ETEUgb2YgQk1UCisqCisqIFJFVFVSTiBWQUxVRVMKKyogIERDTF9IQU5ETEVfSU5WQUxJRCA6IE9wZW4gZmFpbGVkCisqICBPdGhlciB2YWx1ZSA6IEEgdmFsaWQgaGFuZGxlCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9IQU5ETEUgRGNsQk1UX09wZW4oRENMX0RFViBkZXYsIERDTF9GTEFHUyBmbGFncyk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsQk1UX1JlYWREYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBCTVQgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xCTVRfUmVhZERhdGEoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9CVUZGICpidWZmLCBEQ0xfQlVGRl9MRU4gKmJ1Zl9sZW4sIERDTF9PUFRJT05TIG9wdGlvbnMpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbEJNVF9Xcml0ZURhdGEKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlIEJNVCBtb2R1bGUgbm93LgorKgorKiBQQVJBTUVURVJTCisqCU4vQQorKgorKiBSRVRVUk5TCisqCVNUQVRVU19VTlNVUFBPUlRFRAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbEJNVF9Xcml0ZURhdGEoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9CVUZGICpidWZmLCBEQ0xfQlVGRl9MRU4gKmJ1Zl9sZW4sIERDTF9PUFRJT05TIG9wdGlvbnMpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbEJNVF9Db25maWd1cmUKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlIEJNVCBtb2R1bGUgbm93LgorKgorKiBQQVJBTUVURVJTCisqCU4vQQorKgorKiBSRVRVUk5TCisqCVNUQVRVU19VTlNVUFBPUlRFRAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbEJNVF9Db25maWd1cmUoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DT05GSUdVUkVfVCAqY29uZmlndXJlKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xCTVRfUmVnaXN0ZXJDYWxsYmFjaworKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgQk1UIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsQk1UX1JlZ2lzdGVyQ2FsbGJhY2soRENMX0hBTkRMRSBoYW5kbGUsIERDTF9FVkVOVCBldmVudCwgUEZOX0RDTF9DQUxMQkFDSyBjYWxsYmFjayk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsQk1UX0NvbnRyb2wKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gc2VuZCBjb21tYW5kIHRvIGNvbnRyb2wgdGhlIEJNVCBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogW0lOXSBUaGUgaGFuZGxlIHZhbHVlIHJldHVybmVkIGZyb20gRGNsQk1UX09wZW4KKyogIGNtZDogW0lOXSBBIGNvbnRyb2wgY29tbWFuZCBmb3IgQk1UIG1vZHVsZQorKiAgICAgICAgICAgMS4gQk1UX0NNRF9DQUxMU1RBVEU6IHRvIG5vZGlmeSB0YWxrL2lkbGUgc3RhdGUgdG8gQk1UIHRhc2sKKyogICAgICAgICAgIDIuIEJNVF9DTURfQ0hBUkdFOiB0byBlbmFibGUvZGlzYmxlIGNoYXJnZQorKiAgICAgICAgICAgMy4gQk1UX0NNRF9HRVRfQ1VTVE9NSVpFRF9QQVJBOiB0byBnZXQgY3VzdG9taXplZCBjaGFyZ2UgcGFyYW1ldGVycworKiAgICAgICAgICAgNC4gQk1UX0NNRF9TRVRfRVhUX0NIQVJHRVI6IHRvIGNvbnRyb2wgdGhlIGV4dGVybmFsIGNoYXJnZXIKKyogICAgICAgICAgIDUuIEJNVF9DTURfSU5JVElBTElaRTogdG8gaW5pdGlhbGl6ZSBCTVQgTW9kdWxlCisqICAgICAgICAgICA2LiBCTVRfQ01EX0lTX0JBVF9PTjogdG8gY2hlY2sgaXMgYmF0dGVyeSBleGlzdCBvciBub3QKKyogICAgICAgCTcuIEJNVF9DTURfU0VORE1FUzJVRU06IHRvIHNlbmQgbWVzc2FnZSBmcm9tIEJNVCB0byBVRU0KKyogICAgICAgICAgIDguIEJNVF9DTURfU0VUX0NIUl9TVEFUVVM6IHRvIHNldCBjaGFyZ2VyIHN0YXR1cworKiAgICAgICAgICAgOS4gQk1UX0NNRF9WQkFUSU5ISVNSOiB0byBzYXZlIHRoZSBCYXR0ZXJ5IHZvbHRhZ2UgaW4gSElTUgorKgorKiAgZGF0YTogW0lOXSBUaGUgZGF0YSBvZiB0aGUgY29udHJvbCBjb21tYW5kCisqICAgICAgICAgICAxLiBCTVRfQ01EX0NBTExTVEFURTogcG9pbnRlciB0byBhIEJNVF9DVFJMX0NBTExTVEFURV9UIHN0cnVjdHVyZQorKiAgICAgICAgICAgMi4gQk1UX0NNRF9DSEFSR0U6IHBvaW50ZXIgdG8gYSBCTVRfQ1RSTF9DSEFSR0VfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgIDMuIEJNVF9DTURfR0VUX0NVU1RPTUlaRURfUEFSQTogcG9pbnRlciB0byBhIEJNVF9DVFJMX0dFVF9DVVNUT01JWkVEX1BBUkFfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgIDQuIEJNVF9DTURfU0VUX0VYVF9DSEFSR0VSOiBwb2ludGVyIHRvIGEgQk1UX0NUUkxfU0VUX0VYVF9DSEFSR0VSX1Qgc3RydWN0dXJlCisqICAgICAgICAgICA1LiBCTVRfQ01EX0lOSVRJQUxJWkU6IEEgbnVsbCBwb2ludGVyCisqICAgICAgICAgICA2LiBCTVRfQ01EX0lTX0JBVF9PTjogcG9pbnRlciB0byBhIEJNVF9DVFJMX0lTX0JBVF9PTl9UIHN0cnVjdHVyZQorKiAgICAgICAgICAgNy4gQk1UX0NNRF9TRU5ETUVTMlVFTTogcG9pbnRlciB0byBhIEJNVF9DVFJMX1NFTkRNRVMyVUVNX1Qgc3RydWN0dXJlCisqICAgICAgICAgICA4LiBCTVRfQ01EX1NFVF9DSFJfU1RBVFVTOiBwb2ludGVyIHRvIGEgQk1UX0NUUkxfU0VUX0NIUl9TVEFUVVNfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgIDkuIEJNVF9DTURfVkJBVElOSElTUjogQSBudWxsIHBvaW50ZXIKKyoKKyogUkVUVVJOUworKiAgUmV0dXJuIHRoZSBzdGF0dXMgb2YgRGNsQk1UX0NvbnRyb2wKKyoKKyogUkVUVVJOIFZBTFVFUworKiAgU1RBVFVTX09LOiBDb21tYW5kIGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyogIFNUQVRVU19GQUlMOiBDb21tYW5kIGlzIGZhaWxlZC4KKyogIFNUQVRVU19JTlZBTElEX0NNRDogSXQncyBhIGludmFsaWQgY29tbWFuZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xCTVRfQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xCTVRfQ2xvc2UKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gY2xvc2UgdGhlIEJNVCBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogW0lOXSBUaGUgcmV0dXJuZWQgaGFuZGxlIHZhbHVlIG9mIERjbEJNVF9PcGVuCisqCisqIFJFVFVSTlMKKyogIFJldHVybiB0aGUgc3RhdHVzIG9mIERjbEJNVF9DbG9zZQorKgorKiBSRVRVUk4gVkFMVUVTCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xCTVRfQ2xvc2UoRENMX0hBTkRMRSBoYW5kbGUpOworCisKKyNlbmRpZiAvLyAjaWZuZGVmIF9fRENMX0JNVF9IX1BST1RPVFlQRV9fCisjZW5kaWYgLy8gI2lmZGVmIERDTF9ERUZJTklUSU9OX1BST1RPVFlQRQorCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9jaHJfZGV0LmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9jaHJfZGV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q1ZTY2YgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX2Nocl9kZXQuaApAQCAtMCwwICsxLDQxMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgZGNsX2Nocl9kZXQuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpX1NvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBNb2R1bGUgZGVmaW5lcyBmdW5jdGlvbnMgb2YgY2hhcmdlciBkZXRlY3Rpb24KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUCisKKyNpZm5kZWYgX19EQ0xfQ0hSX0RFVF9IX1NUUlVDVF9fCisjZGVmaW5lIF9fRENMX0NIUl9ERVRfSF9TVFJVQ1RfXworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfT1BUSU9OUyBmb3IgUE1VCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ0hSX0RFVF9PUFRJT05TCisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NPTkZJR1VSRV9UIGZvciBQTVUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIENIUl9ERVRfQ09ORklHUworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0VWRU5UIGZvciBQTVUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDSFJfREVUX0VWRU5UUworCisvKiBFbnVtIG9mIENoYXJnZXIgdHlwZSAqLwordHlwZWRlZiBlbnVtCit7CisgICBQV19BQ19DSFI9MCwJCQkvKiBBQyBDSEFSR0VSICovCisgICBQV19VU0JfQ0hSLAkJCS8qIFVTQiBDSEFSR0VSICovCisgICBQV19BQ19OT05fU1REX0NIUiwgLyogTk9OLVNUQU5EQVJEIEFDIENIQVJHRVIgKi8KKyAgIFBXX1VTQl9DSEFSR0lOR19IT1NUX0NIUiwgIC8qIFVTQiBDSEFSR0lORyBIT1NUICovCisgICBQV19OT19DSFIgICAgLy8gSW5kaWNhdGUgTk8gY2hhcmdlcgorfUNIUl9ERVRfVFlQRV9FTlVNOworCisvKiBGb3IgQ0hSX0RFVF9DTURfUVVFUllfQ0hSX1RZUEUgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJQ0hSX0RFVF9UWVBFX0VOVU0JQ2hyX2RldF90eXBlOwkvKiBPdXRwdXQgOiBWYWx1ZSBvZiBDaGFyZ2VyIHR5cGUgKi8KK31DSFJfREVUX0NUUkxfUVVFUllfSVNfQ0hSX0lOX0JZX1BXOworCisvKiBGb3IgUlRDX0NNRF9DT05GSUdfQUxfVEMgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJQ0hSX0RFVF9UWVBFX0VOVU0JQ2hyX2RldF90eXBlOwkvKiBPdXRwdXQgOiBWYWx1ZSBvZiBDaGFyZ2VyIHR5cGUgKi8KK31DSFJfREVUX0NUUkxfUVVFUllfQ0hSX1RZUEU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJdm9pZCAoKnVzYl9kZXRfaGlzcikodm9pZCk7IAorfUNIUl9ERVRfQ1RSTF9SRUdJU1RFUl9VU0JfSElTUjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0RBVEFfVDogRGVmaW5lIHRoZSBDb250cm9sIGRhdGEgc3RydWN0dXJlIGZvciBlYWNoIG1vZHVsZSdzIGNvbW1hbmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIF9fQlVJTERfRE9NX18KKy8qIFRoZSBDSFJfREVUIENvbW1hbmQgUGFyYW1ldGVyIERhdGEgU3RydWN0dXJlIGZvciBFYWNoIENvbW1hbmQgaW4gRENMX0NUUkxfREFUQV9UIEVudW0gb2YgZGNsLmggKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgQ0hSX0RFVF9DVFJMX1FVRVJZX0lTX0NIUl9JTl9CWV9QVwlyQ2hyRGV0UXVlcnlJc0NockluQnlQVzsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIENIUl9ERVRfQ01EX1FVRVJZX0lTX0NIUl9JTl9CWV9QVyAqLworICAgIENIUl9ERVRfQ1RSTF9RVUVSWV9DSFJfVFlQRQlyQ2hyRGV0UXVlcnlDaHJUeXBlOyAJCS8qIERhdGEgU3RydWN0dXJlIGZvciBDSFJfREVUX0NNRF9RVUVSWV9DSFJfVFlQRSAqLworCUNIUl9ERVRfQ1RSTF9SRUdJU1RFUl9VU0JfSElTUiByQ2hyRGV0VVNCSElTUjsgIC8qIERhdGEgU3RydWN0dXJlIGZvciBDSFJfREVUX0NUUkxfUkVHSVNURVJfVVNCX0hJU1IgKi8KK30gRENMX0NUUkxfQ0hSX0RFVF9EQVRBOworI2Vsc2UgLyogX19CVUlMRF9ET01fXyAqLworI2RlZmluZSBDSFJfREVUX0NUUkxTIFwKKwlDSFJfREVUX0NUUkxfUVVFUllfSVNfQ0hSX0lOX0JZX1BXCXJDaHJEZXRRdWVyeUlzQ2hySW5CeVBXOyBcCisJQ0hSX0RFVF9DVFJMX1FVRVJZX0NIUl9UWVBFCXJDaHJEZXRRdWVyeUNoclR5cGU7ICBcCisJQ0hSX0RFVF9DVFJMX1JFR0lTVEVSX1VTQl9ISVNSIHJDaHJEZXRVU0JISVNSOworI2VuZGlmIC8qIF9fQlVJTERfRE9NX18gKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NUUkxfQ01EIGZvciBQTVUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIF9fQlVJTERfRE9NX18KKy8qIFRoZSBDSFIgREVUIENvbW1hbmQgVmFsdWVzIGluIERDTF9DVFJMX0NNRF9UIEVudW0gb2YgZGNsLmggKi8KK3R5cGVkZWYgZW51bSAKK3sKKyAgICBDSFJfREVUX0NNRF9RVUVSWV9JU19DSFJfSU5fQllfUFcsCisgICAgQ0hSX0RFVF9DTURfUVVFUllfQ0hSX1RZUEUsCisgICAgQ0hSX0RFVF9DTURfUkVHSVNURVJfQ0hSX1VTQiwKKyAgICBDSFJfREVUX0NNRF9VTk1BU0tfRUlOVCwKKyAgICBDSFJfREVUX0NNRF9SRUdJU1RFUl9DSFJfVVNCX0VJTlQsCisgICAgQ0hSX0RFVF9DTURfUkVHSVNURVJfVVNCX0hJU1IsCit9IERDTF9DVFJMX0NIUl9ERVRfQ01EOworI2Vsc2UgLyogX19CVUlMRF9ET01fXyAqLworI2RlZmluZSBDSFJfREVUX0NNRFMgXAorCUNIUl9ERVRfQ01EX1FVRVJZX0lTX0NIUl9JTl9CWV9QVz0wLCBcCisJQ0hSX0RFVF9DTURfUVVFUllfQ0hSX1RZUEUsIFwKKwlDSFJfREVUX0NNRF9SRUdJU1RFUl9DSFJfVVNCLCBcCisJQ0hSX0RFVF9DTURfVU5NQVNLX0VJTlQsIFwKKwlDSFJfREVUX0NNRF9SRUdJU1RFUl9DSFJfVVNCX0VJTlQsXAorCUNIUl9ERVRfQ01EX1JFR0lTVEVSX1VTQl9ISVNSLAorI2VuZGlmIC8qIF9fQlVJTERfRE9NX18gKi8KKworCisvLyBDSFJfVVNCX0VJTlQgY29udHJvbCBvd25lciBsaXN0CisvLyBPbmx5IHRoZSB0YXNrcyBsaXN0ZWQgY2FuIGNvbnRyb2wgQ0hSX1VTQl9FSU5UIFVubWFzawordHlwZWRlZiBlbnVtCit7CisJQ0hSX0RFVF9FSU5UX09XTkVSX1VTQiA9IDB4MDEsCS8vIEJpdDAwCisJQ0hSX0RFVF9FSU5UX09XTkVSX0JNVCA9IDB4MDIsCS8vIEJpdDAxCisJVVNCX0RFVF9FSU5UX09XTkVSX0ZPUkNFX1VOTUFTSyA9IDB4ODAJLy8gQml0NyAvLyBJdCBtZWFucyB3ZSBzaG91bGQgc2tpcCBiaXQgbWF0Y2ggYW5kIGRpcmVjdGx5IHVubWFzayBFSU5UCit9Q0hSX0RFVF9FSU5UX09XTkVSOworCisKK3R5cGVkZWYgc3RydWN0Cit7CisJQ0hSX0RFVF9UWVBFX0VOVU0gKCpwd19pc19jaGFyZ2VyX3VzYl9kZXQpKHZvaWQpOworCXZvaWQgKCpwd19pc19jaGFyZ2VyX3VzYl9kZXRfZWludCkodm9pZCk7CisJdm9pZCAoKnVzYl9kZXRfaGlzcikodm9pZCk7IAorfUNIUl9VU0JfREVUX01HUl9UOworCisKKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfUE1VX0hfU1RSVUNUX18KKyNlbmRpZiAvLyAjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUCisKKworI2lmZGVmIERDTF9ERUZJTklUSU9OX1BST1RPVFlQRQorI2lmbmRlZiBfX0RDTF9DSFJfREVUX0hfUFJPVE9UWVBFX18KKyNkZWZpbmUgX19EQ0xfQ0hSX0RFVF9IX1BST1RPVFlQRV9fCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xfQ2hyX0RldF9Jbml0aWFsaXplCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGluaXRpYWxpemUgQ2hyX0RldCBtb2R1bGUKKyoKKyogUEFSQU1FVEVSUworKiAgTm9uZQorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xfQ2hyX0RldF9Jbml0aWFsaXplKHZvaWQpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbF9DaHJfRGV0X09wZW4KKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gb3BlbiB0aGUgQ2hyX0RldCBtb2R1bGUgYW5kIHJldHVybiBhIGhhbmRsZQorKgorKiBQQVJBTUVURVJTCisqICBkZXY6IG9ubHkgdmFsaWQgZm9yIERDTF9DSFJfVVNCX0RFVAorKiAgZmxhZ3M6IG5vIHNlcGNpYWwgZmxhZ3MgaXMgbmVlZGVkLiBQbGVhc2UgdXNlIEZMQUdTX05PTkUKKyoKKyogUkVUVVJOUworKiAgRENMX0hBTkRMRV9JTlZBTElEOiBPcGVuIGZhaWxlZC4KKyogIG90aGVyIHZhbHVlOiBhIHZhbGlkIGhhbmRsZQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfSEFORExFIERjbF9DaHJfRGV0X09wZW4oRENMX0RFViBkZXYsIERDTF9GTEFHUyBmbGFncyk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsX0Nocl9EZXRfUmVhZERhdGEKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlIENocl9EZXQgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKiAgU1RBVFVTX09LCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsX0Nocl9EZXRfUmVhZERhdGEoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9CVUZGICpidWZmLCBEQ0xfQlVGRl9MRU4gYnVmX2xlbiwgRENMX09QVElPTlMgb3B0aW9ucyk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsX0Nocl9EZXRfV3JpdGVEYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBDaHJfRGV0IG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyogIFNUQVRVU19PSworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbF9DaHJfRGV0X1dyaXRlRGF0YShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0JVRkYgKmJ1ZmYsIERDTF9CVUZGX0xFTiBidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xfQ2hyX0RldF9Db25maWd1cmUKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gY2xvc2UgdGhlIENocl9EZXQgbW9kdWxlLgorKgorKiBQQVJBTUVURVJTCisqCU4vQQorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xfQ2hyX0RldF9Db25maWd1cmUoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DT05GSUdVUkVfVCAqY29uZmlndXJlKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xfQ2hyX0RldF9SZWdpc3RlckNhbGxiYWNrCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBDaHJfRGV0IG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyogIFNUQVRVU19PSworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbF9DaHJfRGV0X1JlZ2lzdGVyQ2FsbGJhY2soRENMX0hBTkRMRSBoYW5kbGUsIERDTF9FVkVOVCBldmVudCwgUEZOX0RDTF9DQUxMQkFDSyBjYWxsYmFjayk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKglEY2xfQ2hyX0RldF9Db250cm9sCisqCisqIERFU0NSSVBUSU9OCisqICAgCVRoaXMgZnVuY3Rpb24gaXMgdG8gc2VuZCBjb21tYW5kIHRvIGNvbnRyb2wgdGhlIENocl9EZXQgbW9kdWxlLgorKglBbGwgY29tbWFuZCAKKyoKKyogQ0FMTFMgIAorKglJdCBpcyBjYWxsZWQgdG8gc2VuZCBjb21tYW5kIHRvIGNvbnRyb2wgdGhlIENocl9EZXQgbW9kdWxlLgorKgorKiBQQVJBTUVURVJTCisqICBoYW5kbGU6IFtJTl0gVGhlIGhhbmRsZSB2YWx1ZSByZXR1cm5lZCBmcm9tIERjbF9DaHJfRGV0X09wZW4oKQorKiAgY21kOiBbSU5dIEEgY29udHJvbCBjb21tYW5kIGZvciBDaHJfRGV0IG1vZHVsZQorKiAgICAgICAgICAxLiBQV19DTURfUE9XRVJPTjogY2FsbCBSVEMgbW9kdWxlIHRvIGxhdGNoIHBvd2VyIGFuZCBpbml0IHRpbWUgaWYgbmVjZXNzYXJ5CisqICAgICAgICAgIDIuIFBXX0NNRF9QT1dFUk9GRjogY2FsbCBSVEMgbW9kdWxlIHRvIHVubGF0Y2ggcG93ZXIKKyogICAgICAgICAgMy4gUFdfQ01EX1NFVF9QT1dFUk9OX1JFQVNPTjogc2V0IHBvd2VyIG9uIHJlYXNvbgorKiAgICAgICAgICA0LiBQV19DTURfR0VUX1BPV0VST05fUkVBU09OOiBnZXQgcG93ZXIgb24gcmVhc29uCisqICAgICAgICAgIDUuIFBXX0NNRF9TRVRfU1dJVENIX1RPX0lETEU6IHNldCBmbGFnIHdoaWNoIGZvcmNlIHBob25lIHRvIGVudGVyIGlkbGUgbW9kZQorKiAgICAgICAgICA2LiBQV19DTURfQ0xFQVJfU1dJVENIX1RPX0lETEU6IGNsZWFyIGZsYWcgd2hpY2ggZm9yY2UgcGhvbmUgdG8gZW50ZXIgaWRsZSBtb2RlCisqICAgICAgICAgIDcuIFBXX0NNRF9QT1dFUl9JTklUOiBjaGVjayBwb3dlciBvbiBmYWN0b3JzIHRvIGRlY2lkZSBwb3dlciBvbiByZWFzb24gYW5kIHNhdmUgaW4gUlRDIHJlZ2lzdGVyCisqCSAgICAgOC4gUFdfQ01EX1VQREFURV9GTEFHUzogdXBkYXRlIHBvd2VyIG9uIHJlYXNvbiB0byBydGMgcmVnaXN0ZXIKKyoJICAgICA5LiBQV19DTURfTkZCX1BPV0VST046IGNhbGwgUlRDIG1vZHVsZSB0byBsYXRjaCBwb3dlciBhbmQgaW5pdCB0aW1lIGlmIG5lY2Vzc2FyeSAob25seSBmb3IgTkFORCBGTEFTSCBCT09USU5HKQorKiAgICAgICAgICAxMC4gUFdfQ01EX0lTX1VTQl9CT09UOiBxdWVyeSBpcyBwb3dlciBvbiByZWFzb24gVVNCIHBsdWcgaW4KKyoKKyogIGRhdGE6IFRoZSBkYXRhIG9mIHRoZSBjb250cm9sIGNvbW1hbmQKKyogICAgICAgICAgMS4gUFdfQ01EX1BPV0VST046IEEgbnVsbCBwb2ludGVyCisqICAgICAgICAgIDIuIFBXX0NNRF9QT1dFUk9GRjogQSBudWxsIHBvaW50ZXIKKyogICAgICAgICAgMy4gUFdfQ01EX1NFVF9QT1dFUk9OX1JFQVNPTjogcG9pbnRlciB0byBhIFBXX0NUUkxfU0VUX1BPV0VST05fUkVBU09OIHN0cnVjdHVyZQorKiAgICAgICAgICA0LiBQV19DTURfR0VUX1BPV0VST05fUkVBU09OOiBwb2ludGVyIHRvIGEgUFdfQ1RSTF9HRVRfUE9XRVJPTl9SRUFTT04gc3RydWN0dXJlCisqICAgICAgICAgIDUuIFBXX0NNRF9TRVRfU1dJVENIX1RPX0lETEU6IEEgbnVsbCBwb2ludGVyCisqICAgICAgICAgIDYuIFBXX0NNRF9DTEVBUl9TV0lUQ0hfVE9fSURMRTogQSBudWxsIHBvaW50ZXIKKyogICAgICAgICAgNy4gUFdfQ01EX1BPV0VSX0lOSVQ6IEEgbnVsbCBwb2ludGVyCisqCSAgICAgOC4gUFdfQ01EX1VQREFURV9GTEFHUzogQSBudWxsIHBvaW50ZXIKKyoJICAgICA5LiBQV19DTURfTkZCX1BPV0VST046IEEgbnVsbCBwb2ludGVyCisqICAgICAgICAgIDEwLiBQV19DTURfSVNfVVNCX0JPT1Q6IHBvaW50ZXIgdG8gYSBQV19DVFJMX0lTX1VTQl9CT09UCisqCisqIFJFVFVSTlMKKyogIFNUQVRVU19PSzogY29tbWFuZCBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisqICBTVEFUVVNfRkFJTDogY29tbWFuZCBpcyBmYWlsZWQuCisqICBTVEFUVVNfSU5WQUxJRF9DTUQ6IEl0J3MgYSBpbnZhbGlkIGNvbW1hbmQuCisqICAgICBTVEFUVVNfVU5TVVBQT1JURUQ6IEl0J3MgYSB1bnN1cHBvcnRlZCBjb21tYW5kLgorKgorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgZXh0ZXJuYWxfZ2xvYmFsCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsX0Nocl9EZXRfQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xfQ2hyX0RldF9DbG9zZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBjbG9zZSB0aGUgQ2hyX0RldCBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogdGhlIHJldHVybmVkIGhhbmRsZSB2YWx1ZSBvZiBEY2xfQ2hyX0RldF9PcGVuCisqCisqIFJFVFVSTlMKKyogIFNUQVRVU19PSworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbF9DaHJfRGV0X0Nsb3NlKERDTF9IQU5ETEUgaGFuZGxlKTsKKworCisjZW5kaWYgLy8gI2lmbmRlZiBfX0RDTF9DSFJfREVUX0hfUFJPVE9UWVBFX18KKyNlbmRpZiAvLyNpZmRlZiBEQ0xfREVGSU5JVElPTl9QUk9UT1RZUEUKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfZjMya19jbGsuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX2YzMmtfY2xrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI1NDI0OAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX2YzMmtfY2xrLmgKQEAgLTAsMCArMSwyNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGRjbF9mMzJrX2Nsay5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1hdWlfc3cKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBEQ0wgY29tbW9uIGRlZmluaXRpb25zIGZvciBmMzJrX2NsayBkY2wgaW50ZXJmYWNlLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9TVFJVQ1QKKyNpZm5kZWYgX19EQ0xfRjMyS19DTEtfSF9TVFJVQ1RfXworI2RlZmluZSBfX0RDTF9GMzJLX0NMS19IX1NUUlVDVF9fCisKKyNpbmNsdWRlICJkY2wuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9PUFRJT05TIGZvciBGMzJLX0NMSworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEYzMktfQ0xLX09QVElPTlMKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ09ORklHVVJFX1QgZm9yIEYzMktfQ0xLCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRjMyS19DTEtfQ09ORklHUworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0VWRU5UIGZvciBGMzJLX0NMSworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEYzMktfQ0xLX0VWRU5UUyAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0RBVEFfVDogRGVmaW5lIHRoZSBDb250cm9sIGRhdGEgc3RydWN0dXJlIGZvciBlYWNoIG1vZHVsZSdzIGNvbW1hbmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdAoreworICAgIERDTF9CT09MRUFOIGYzMmtfaXNfeG9zYzMyOworfUYzMktfQ0xLX0NUUkxfRjMyS19JU19YT1NDMzJfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBEQ0xfVUlOVDE2ICBlb3NjMzJfY2FsaV92YWw7Cit9RjMyS19DTEtfQ1RSTF9FT1NDMzJfQ0FMSV9WQUxfVDsKKworI2lmZGVmIF9fQlVJTERfRE9NX18KKy8qIFRoZSBGMzJLX0NMSyBDb21tYW5kIFBhcmFtZXRlciBEYXRhIFN0cnVjdHVyZSBmb3IgRWFjaCBDb21tYW5kIGluIERDTF9DVFJMX0RBVEFfVCBFbnVtIG9mIGRjbC5oICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIEYzMktfQ0xLX0NUUkxfRjMyS19JU19YT1NDMzJfVCAgICByRjMya0lzWE9TQzMyOyAvKiBEYXRhIHN0cnVjdHVyZSBmb3IgRjMyS19DTEtfQ1RSTF9GMzJLX0lTX1hPU0MzMiAqLworICAgIEYzMktfQ0xLX0NUUkxfRU9TQzMyX0NBTElfVkFMX1QgICAgckVvc2MzMkNhbGlWYWw7Cit9RENMX0NUUkxfRjMyS19DTEtfREFUQV9UOworI2Vsc2UgLyogX19CVUlMRF9ET01fXyAqLworI2RlZmluZSBGMzJLX0NMS19DVFJMUyBcCisgICAgRjMyS19DTEtfQ1RSTF9GMzJLX0lTX1hPU0MzMl9UICAgIHJGMzJrSXNYT1NDMzI7IFwKKyAgICBGMzJLX0NMS19DVFJMX0VPU0MzMl9DQUxJX1ZBTF9UICAgIHJFb3NjMzJDYWxpVmFsOworI2VuZGlmIC8qIF9fQlVJTERfRE9NX18gKi8JCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ1RSTF9DTUQgZm9yIEYzMktfQ0xLCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBfX0JVSUxEX0RPTV9fCisvKiBUaGUgRjMyS19DTEsgQ29tbWFuZCBWYWx1ZXMgaW4gRENMX0NUUkxfQ01EX1QgRW51bSBvZiBkY2wuaCAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBGMzJLX0NMS19DTURfUVVFUllfSVNfWE9TQzMySywgICAgICAvKiBUbyBxdWVyeSBGMzJLIGlzIFhPU0MzMksgb3Igbm90ICovCisgICAgRjMyS19DTEtfQ01EX0VPU0MzMl9UUklNTUlORywgICAgICAgLyogVG8gdHJpbW1pbmcgRU9TQzMyIGFuZCBnZXQgaWRlYWwgY2FsaSB2YWx1ZSAqLworICAgIEYzMktfQ0xLX0NNRF9IV19JTklULCAgICAgICAgICAgICAgIC8qIFRvIGluaXQgMzJLIEhXIHNldHRpbmcgKi8KK30gRENMX0NUUkxfRjMyS19DTEtfQ01EX1Q7CisjZWxzZSAvKiBfX0JVSUxEX0RPTV9fICovCisjZGVmaW5lIEYzMktfQ0xLX0NNRFMgXAorICAgIEYzMktfQ0xLX0NNRF9RVUVSWV9JU19YT1NDMzJLLCBcCisgICAgRjMyS19DTEtfQ01EX0VPU0MzMl9UUklNTUlORywgXAorICAgIEYzMktfQ0xLX0NNRF9IV19JTklULAorI2VuZGlmIC8qIF9fQlVJTERfRE9NX18gKi8KKworCisjZW5kaWYgLy8gI2lmbmRlZiBfX0RDTF9GMzJLX0NMS19IX1NUUlVDVF9fCisjZW5kaWYgLy8gI2lmZGVmIERDTF9ERUZJTklUSU9OX1NUUlVDVAorCisjaWZkZWYgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisjaWZuZGVmIF9fRENMX0YzMktfQ0xLX0hfUFJPVE9UWVBFX18KKyNkZWZpbmUgX19EQ0xfRjMyS19DTEtfSF9QUk9UT1RZUEVfXworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbEYzMktfSW5pdGlhbGl6ZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBpbml0aWFsaXplIEYzMktfQ0xLIG1vZHVsZQorKgorKiBQQVJBTUVURVJTCisqICBOb25lCisqCisqIFJFVFVSTlMKKyogIFJldHVybiB0aGUgc3RhdHVzIG9mIERjbEYzMktfSW5pdGlhbGl6ZQorKgorKiBSRVRVUk4gVkFMVUVTCisqICBTVEFUVVNfT0s6IEluaXRpYWxpemUgRmluaXNoZWQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xGMzJLX0luaXRpYWxpemUodm9pZCk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsRjMyS19PcGVuCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIG9wZW4gdGhlIEYzMktfQ0xLIG1vZHVsZSBhbmQgcmV0dXJuIGEgaGFuZGxlCisqCisqIFBBUkFNRVRFUlMKKyogIGRldjogW0lOXSBPbmx5IHZhbGlkIGZvciBEQ0xfRjMyS19DTEsKKyogIGZsYWdzOiBbSU5dIE5vIHNlcGNpYWwgZmxhZ3MgaXMgbmVlZGVkLiBQbGVhc2UgdXNlIEZMQUdTX05PTkUKKyoKKyogUkVUVVJOUworKiAgUmV0dXJuIERDTF9IQU5ETEUgb2YgRjMyS19DTEsKKyoKKyogUkVUVVJOIFZBTFVFUworKiAgRENMX0hBTkRMRV9JTlZBTElEIDogT3BlbiBmYWlsZWQKKyogIE90aGVyIHZhbHVlIDogQSB2YWxpZCBoYW5kbGUKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX0hBTkRMRSBEY2xGMzJLX09wZW4oRENMX0RFViBkZXYsIERDTF9GTEFHUyBmbGFncyk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsRjMyS19Db250cm9sCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIHNlbmQgY29tbWFuZCB0byBjb250cm9sIHRoZSBGMzJLX0NMSyBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogW0lOXSBUaGUgaGFuZGxlIHZhbHVlIHJldHVybmVkIGZyb20gRGNsRjMyS19PcGVuCisqICBjbWQ6IFtJTl0gQSBjb250cm9sIGNvbW1hbmQgZm9yIFJUQyBtb2R1bGUKKyogICAgICAgICAgIDEuIEYzMktfQ0xLX0NNRF9RVUVSWV9JU19YT1NDMzJLOiBUbyBxdWVyeSBjbG9jayBzb3VyY2UgRjMySyBpcyBYT1NDMzJLIG9yIG5vdAorKgorKiAgZGF0YTogVGhlIGRhdGEgb2YgdGhlIGNvbnRyb2wgY29tbWFuZAorKiAgICAgICAgICAgMS4gRjMyS19DTEtfQ01EX1FVRVJZX0lTX1hPU0MzMks6IHBvaW50ZXIgdG8gYSBGMzJLX0NMS19DVFJMX0YzMktfSVNfWE9TQzMyX1Qgc3RydWN0dXJlCisqCisqIFJFVFVSTlMKKyogIFJldHVybiB0aGUgc3RhdHVzIG9mIERjbEYzMktfQ29udHJvbAorKgorKiBSRVRVUk4gVkFMVUVTCisqICBTVEFUVVNfT0s6IENvbW1hbmQgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorKiAgU1RBVFVTX0ZBSUw6IENvbW1hbmQgaXMgZmFpbGVkLgorKiAgU1RBVFVTX0lOVkFMSURfQ01EOiBJdCdzIGEgaW52YWxpZCBjb21tYW5kLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbEYzMktfQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xGMzJLX0Nsb3NlCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGNsb3NlIHRoZSBGMzJLX0NMSyBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogW0lOXSBUaGUgcmV0dXJuZWQgaGFuZGxlIHZhbHVlIG9mIERjbEYzMktfT3BlbgorKgorKiBSRVRVUk5TCisqICBSZXR1cm4gdGhlIHN0YXR1cyBvZiBEY2xGMzJLX0Nsb3NlCisqCisqIFJFVFVSTiBWQUxVRVMKKyogIFNUQVRVU19PSworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbEYzMktfQ2xvc2UoRENMX0hBTkRMRSBoYW5kbGUpOworCisjZW5kaWYgLy8gI2lmbmRlZiBfX0RDTF9GMzJLX0NMS19IX1BST1RPVFlQRV9fCisjZW5kaWYgLy8gI2lmZGVmIERDTF9ERUZJTklUSU9OX1BST1RPVFlQRQorIApkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfZ3Bpby5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZjMwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9ncGlvLmgKQEAgLTAsMCArMSw4MzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGRjbF9ncGlvLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIEhlYWRlciBmaWxlIG9mIERDTCAoRHJpdmVyIENvbW1vbiBMYXllcikgZm9yIEdQSU8uCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9TVFJVQ1QKKyNpZm5kZWYgX19EQ0xfR1BJT19IX1NUUlVDVF9fCisjZGVmaW5lIF9fRENMX0dQSU9fSF9TVFJVQ1RfXworLy8jaW5jbHVkZSAiZ3Bpb19zd18uaCIKKyNpbmNsdWRlICJkcnZfZmVhdHVyZXNfZ3Bpby5oIgorCisjZGVmaW5lIEdQSU9fRElSX0lOUFVUICAgMAorI2RlZmluZSBHUElPX0RJUl9PVVRQVVQgIDEKKyNkZWZpbmUgR1BJT19ESVJfQk9USCAgICAyCisKKyNkZWZpbmUgR1BJT19NQUdJQ19OVU0JCTB4ODAKKyNkZWZpbmUgR1BPX01BR0lDX05VTQkJICAweDcwCisKKworI2RlZmluZSBHUElPX0lOUFVUCQkJICAgICAgMAkJLyogSU8gaW4gaW5wdXQgKi8KKyNkZWZpbmUgR1BJT19BTExfSU5QVVQJCSAgICAgIDB4MDAwMCAKKyNkZWZpbmUgR1BJT19PVVRQVVQJCQkgICAgICAxCQkvKiBJTyBpbiBvdXRwdXQgKi8KKyNkZWZpbmUgR1BJT19BTExfT1VUUFVUCQkgICAweGZmZmYgCisKKyNkZWZpbmUgR1BJT19NQUdJQ19OVU1fSU5URVJOQUwJCTB4ODAKKyNkZWZpbmUgR1BPX01BR0lDX05VTV9JTlRFUk5BTAkJICAweDcwCisKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNpZiBkZWZpbmVkKERSVl9HUElPX1JFR19BU182MjIzKSB8fCBkZWZpbmVkKERSVl9HUElPX1JFR19BU182MjUzVCkgfHwgZGVmaW5lZChEUlZfR1BJT19SRUdfQVNfNjI1M0UpIHx8IGRlZmluZWQoRFJWX0dQSU9fUkVHX0FTXzYyNTNFXzEpCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisgICAjaWYgZGVmaW5lZChEUlZfR1BJT19SRUdfQVNfNjI1M1QpIHx8IGRlZmluZWQoRFJWX0dQSU9fUkVHX0FTXzYyNTNFKSB8fCBkZWZpbmVkKERSVl9HUElPX1JFR19BU182MjUzRV8xKQorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworICAgI2lmIGRlZmluZWQoRFJWX0dQSU9fUkVHX0FTXzYyNTNFXzEpCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisgICAjZW5kaWYgICAvKkRSVl9HUElPX1JFR19BU182MjUzRSovCisgICAjZW5kaWYgICAvKkRSVl9HUElPX1JFR19BU182MjUzVCovCisjZWxpZiBkZWZpbmVkKERSVl9HUElPX1JFR19BU182MjM4KSB8fCBkZWZpbmVkKERSVl9HUElPX1JFR19BU182MjM1KQorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2lmIGRlZmluZWQoRFJWX0dQSU9fUkVHX0FTXzYyMzUpCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKyNlbGlmIGRlZmluZWQoRFJWX0dQSU9fUkVHX0FTXzYyNjhBKSB8fCBkZWZpbmVkKERSVl9HUElPX1JFR19BU182MjY4KSB8fCBkZWZpbmVkKERSVl9HUElPX1JFR19BU182MjcwQSkKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyAgICNpZiAhZGVmaW5lZChEUlZfR1BJT19SRUdfQVNfNjI3MEEpCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisgICAjZW5kaWYvLyFkZWZpbmVkKERSVl9HUElPX1JFR19BU182MjcwQSkKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbGlmIGRlZmluZWQoRFJWX0dQSU9fUkVHX0FTXzYyMzYpCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZWxpZiBkZWZpbmVkKERSVl9HUElPX1JFR19BU182MjU1KQorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VsaWYgZGVmaW5lZChEUlZfR1BJT19SRUdfQVNfNjI3NikKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbGlmIGRlZmluZWQoRFJWX0dQSU9fUkVHX0FTXzYyNTEpCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCit0eXBlZGVmIGVudW0geworICAgbW9kZV9kZWZhdWx0ID0gMCwKKyAgIG1vZGVfZjMya19jayA9IDB4ODIsCisgICBtb2RlX21heF9udW0gCisgfSBncGlvX2Nsa19tb2RlOyAgCisvL3JlbW92ZSB0aGlzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYnVpbGQgZXJyb3IgLnRoaXMgc2hvdWxkIGJlIGRlbGV0ZS4gMTItMjIuCisjaWYgMCAgIAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2lmIGRlZmluZWQoRFJWX0dQSU9fUkVHX0FTXzYyNTUpCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZWxpZiBkZWZpbmVkKERSVl9HUElPX1JFR19BU182Mjc2KQorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmIC8vZGVmaW5lZChEUlZfR1BJT19SRUdfQVNfNjI1NSkKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZiAKKworCisKK3R5cGVkZWYgZW51bSB7CisgICBkaXZfbWF4X251bT0xNgorfSBncGlvX2Nsa19kaXY7CQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgICAgIHBpbl9udW07ICAvKjEsYWN0aXZhdGVkICwwOmRlLWFjdGl2YXRlZCovCisgICBrYWxfdWludDggICAgICBkaXI7IC8vIEdQSU9fRElSX09VVFBVVCBvciBHUElPX0RJUl9JTlBVVCBvciBHUElPX0RJUl9CT1RICit9IEdQSU9DaGVja1N0cnVjdDsgIAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX09QVElPTlMgZm9yIEdQSU8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBHUElPX09QVElPTlMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DT05GSUdVUkVfVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfRVZFTlQgZm9yIEdQSU8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBHUElPX0VWRU5UUworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NUUkxfQ01EIGZvciBHUElPCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBfX0JVSUxEX0RPTV9fCisvKlRoZSBHUElPIENvbW1hbmQgdmFsdWVzIGluIERDTF9DVFJMX0NNRF9UIEVudW0gb2YgZGNsLmgqLworLypEQ0xfQ1RSTF9EQVRBX1QgIERlZmluZSB0aGUgQ29udHJvbCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBtb2R1bGUncyBjb21tYW5kKi8KK3R5cGVkZWYgZW51bQoreworCSBHUElPX0NNRF9SRUFELCAJCQkgCQkgLypyZWFkIGRhdGEgZnJvbSBHUElPIFBpbiovCisgICBHUElPX0NNRF9XUklURV9MT1csICAgCQkgLyp3cml0ZSBsb3cgdG8gR1BJTyBwaW4qLworICAgR1BJT19DTURfV1JJVEVfSElHSCwJCQkgLyp3cml0ZSBoaWdoIHRvIEdQSU8gUGluKi8KKyAgIEdQSU9fQ01EX1NFVF9NT0RFXzAsIAkJIC8qc2V0IEdQSU8gbW9kZSBhcyBtb2RlIDAqLworICAgR1BJT19DTURfU0VUX01PREVfMSwJCQkgLypzZXQgR1BJTyBtb2RlIGFzIG1vZGUgMSovCisgICBHUElPX0NNRF9TRVRfTU9ERV8yLAkJCSAvKnNldCBHUElPIG1vZGUgYXMgbW9kZSAyKi8KKyAgIEdQSU9fQ01EX1NFVF9NT0RFXzMsCQkJIC8qc2V0IEdQSU8gbW9kZSBhcyBtb2RlIDMqLworICAgR1BJT19DTURfU0VUX01PREVfNCwJCQkgLypzZXQgR1BJTyBtb2RlIGFzIG1vZGUgNCAsb25seSBmb3IgY2hpcCBzdXBwb3J0IDQtYml0IG1vZGUqLworICAgR1BJT19DTURfU0VUX01PREVfNSwJCQkgLypzZXQgR1BJTyBtb2RlIGFzIG1vZGUgNSosb25seSBmb3IgY2hpcCBzdXBwb3J0IDQtYml0IG1vZGUqLworICAgR1BJT19DTURfU0VUX01PREVfNiwJCQkgLypzZXQgR1BJTyBtb2RlIGFzIG1vZGUgNiosb25seSBmb3IgY2hpcCBzdXBwb3J0IDQtYml0IG1vZGUqLworICAgR1BJT19DTURfU0VUX01PREVfNywJCQkgLypzZXQgR1BJTyBtb2RlIGFzIG1vZGUgNyosb25seSBmb3IgY2hpcCBzdXBwb3J0IDQtYml0IG1vZGUqLworICAgR1BJT19DTURfU0VUX01PREVfOCwJCQkgLypzZXQgR1BJTyBtb2RlIGFzIG1vZGUgOCosb25seSBmb3IgY2hpcCBzdXBwb3J0IDQtYml0IG1vZGUqLworICAgR1BJT19DTURfU0VUX0RJUl9PVVQsIAkJIC8qc2V0IEdQSU8gZGlyZWN0aW9uIGFzIG91dHB1dCovCisgICBHUElPX0NNRF9TRVRfRElSX0lOLAkgCQkgLypzZXQgR1BJTyBkaXJlY3Rpb24gYXMgaW5wdXQqLworICAgR1BJT19DTURfUkVUVVJOX01PREUsIAkJIC8qZ2V0IGN1cnJlbnQgR1BJTyBtb2RlKi8KKyAgIEdQSU9fQ01EX1JFVFVSTl9ESVIsICAJCSAvKmdldCBjdXJyZW50IEdQSU8gZGlyZWN0aW9uKi8KKyAgIEdQSU9fQ01EX1JFVFVSTl9PVVQsICAJCSAvKmdldCBjdXJyZW50IEdQSU8gb3V0cHV0IGxldmVsKi8KKyAgIEdQSU9fQ01EX0VOQUJMRV9QVUxMLCAJCSAvKmVuYWJsZSBHUElPIHB1bGwtdXAvcHVsbC1kb3duIHNldGluZyAqLworICAgR1BJT19DTURfRElTQUJMRV9QVUxMLAkJIC8qZGlzYWJsZSBHUElPIHB1bGwtdXAvcHVsbC1kb3duIHNldGluZyovCisgICBHUElPX0NNRF9TRVRfUFVMTF9ISUdILCAgICAgICAgICAgICAgIC8qc2V0IEdQSU8gYXMgcHVsbC11cCovCisgICBHUElPX0NNRF9TRVRfUFVMTF9MT1csICAgICAgICAgICAgICAgIC8qc2V0IEdQSU8gYXMgcHVsbC1kb3duKi8KKyAgIEdQSU9fQ01EX1NFVF9ESU5WLCAgCQkJIC8qZW5hYmxlIG9yIGRpc2FibGUgR1BJTyBkYXRhIGludmVyc2lvbiovCisgICBHUElPX0NNRF9TRVRfREVCVUcsICAJICAgICAgICAgLypjb25maWd1cmUgdGhlIEdQSU8gc2V0cyB0byBhdXhpbGlhcnkgZnVuY3Rpb24gbW9kZSBvciB0byBkZWJ1ZyBtb2RlKi8KKyAgIEdQSU9fQ01EX1NFVF9DTEtfT1VULCAgICAgICAgICAgICAgICAgLypzZWxlY3QgdGhlIGNsb2NrIG91dHB1dCBzb3VyY2Ugb2YgR1BJTyovCisgICBHUElPX0NNRF9TRVRfQ0xLX0RJViwKKyAgIEdQSU9fQ01EX1NFVF9PV05FUlNISVBfVE9fTUQsIC8qIHRvIHNldCBvd25lcnNoaXAgb2YgYSBHUElPIHBvcnQgdG8gTW9kZW0gc2lkZS4qLworICAgR1BJT19DTURfU0VUX09XTkVSU0hJUF9UT19BUCwgLyogdG8gc2V0IG93bmVyc2hpcCBvZiBhIEdQSU8gcG9ydCB0byBBUCBzaWRlLiovCisgICBHUElPX0NNRF9TRVRfRFJJVkUsIC8qIHRvIHNldCB0aGUgZHJpdmUgb2YgYSBHUElPIHBvcnQuKi8KKyAgIEdQSU9fQ01EX1JFVFVSTl9EUklWRSwgLyogdG8gcmV0dXJuIHRoZSBkcml2ZSBvZiB0aGUgR1BJTyBwb3J0LiovCisgICBHUElPX0NNRF9SRVRVUk5fT1dORVJTSElQLCAvKiB0byByZXR1cm4gdGhlIG93bmVyc2hpcCBvZiB0aGUgR1BJTyBwb3J0LiAqLyAKKyAgIEdQT19DTURfUkVUVVJOX01PREUsCSAgCSAgICAgICAgIC8qZ2V0IGN1cnJlbnQgR1BPIG1vZGUqLworICAgR1BPX0NNRF9SRVRVUk5fT1VULCAgICAJICAgICAgICAgLypnZXQgY3VycmVudCBHUE8gb3V0cHV0IGxldmVsKi8KKyAgIEdQT19DTURfV1JJVEVfSElHSCwgIAkJIC8qd3JpdGUgaGlnaCB0byBHUE8gUGluKi8KKyAgIEdQT19DTURfV1JJVEVfTE9XLCAgCQkJIC8qd3JpdGUgbG93IHRvIEdQTyBQaW4qLworICAgR1BPX0NNRF9NT0RFX1NFVF8wLCAJCQkgLypzZXQgR1BJTyBtb2RlIGFzIG1vZGUgMCovCisgICBHUE9fQ01EX01PREVfU0VUXzEsICAgICAgICAgICAgICAgICAgIC8qc2V0IEdQSU8gbW9kZSBhcyBtb2RlIDEqLworICAgR1BPX0NNRF9NT0RFX1NFVF8yLCAJCQkgLypzZXQgR1BJTyBtb2RlIGFzIG1vZGUgMiovCisgICBHUE9fQ01EX01PREVfU0VUXzMsICAgICAgICAgICAgICAgICAgIC8qc2V0IEdQSU8gbW9kZSBhcyBtb2RlIDMqLworICAgR1BJT19DTURfU0VUX0RJUl9PVVRfTk9fSVJRX01BU0ssICAgICAvKnNldCBHUElPIGRpcmVjdGlvbiBhcyBvdXRwdXQgd2l0aG91dCAgbWFzayBJUlEgcG9ydGVjdCovCisgICBHUElPX0NNRF9TRVRfRElSX0lOX05PX0lSUV9NQVNLLCAgICAgIC8qc2V0IEdQSU8gZGlyZWN0aW9uIGFzIGlucHV0IHdpdGhvdXQgIG1hc2sgSVJRIHBvcnRlY3QqLworICAgR1BJT19DTURfV1JJVEVfSElHSF9OT19JUlFfTUFTSywgICAgICAvKndyaXRlIGhpZ2ggdG8gR1BJTyBQaW4gd2l0aG91dCBtYXNrIElSUSBwcm90ZWN0Ki8KKyAgIEdQSU9fQ01EX1dSSVRFX0xPV19OT19JUlFfTUFTSywgICAgICAgLyp3cml0ZSBsb3cgdG8gR1BJTyBQaW4gd2l0aG91dCBtYXNrIElSUSBwcm90ZWN0Ki8KKyAgIEdQSU9fQ01EX1JFQURfTk9fSVJRX01BU0ssIAkJIC8qcmVhZCBkYXRhIGZyb20gR1BJTyBQaW4gd2l0aG91dCBJUlEgbWFzayovCisgICBHUElPX0NNRF9XUklURV9GT1JfU1BJLAkJIC8qdGhpcyBmdW5jdGlvbiBpcyB0byB3cml0ZSBkYXRhIHRvIG9uZSBHUElPIHBvcnQsIHRoYXQgZm9yIGZhc3RlciBhY2Nlc3Mgd2l0aG91dCBkZWJ1ZyBjaGVja2luZy4qLworICAgR1BJT19DTURfR0VUX0FQX1BJTiwKK31EQ0xfQ1RSTF9DTURfVDsKKyNlbHNlCisjZGVmaW5lIEdQSU9fQ01EUyAgICBcCisgICBHUElPX0NNRF9SRUFELCAgXAorICAgR1BJT19DTURfV1JJVEVfTE9XLCAgXAorICAgR1BJT19DTURfV1JJVEVfSElHSCwJXAorICAgR1BJT19DTURfU0VUX01PREVfMCwgXAorICAgR1BJT19DTURfU0VUX01PREVfMSwJXAorICAgR1BJT19DTURfU0VUX01PREVfMiwJXAorICAgR1BJT19DTURfU0VUX01PREVfMywJXAorICAgR1BJT19DTURfU0VUX01PREVfNCwJXAorICAgR1BJT19DTURfU0VUX01PREVfNSwJXAorICAgR1BJT19DTURfU0VUX01PREVfNiwJXAorICAgR1BJT19DTURfU0VUX01PREVfNywJXAorICAgR1BJT19DTURfU0VUX01PREVfOCwJXAorICAgR1BJT19DTURfU0VUX0RJUl9PVVQsXAorICAgR1BJT19DTURfU0VUX0RJUl9JTiwJXAorICAgR1BJT19DTURfUkVUVVJOX01PREUsIFwKKyAgIEdQSU9fQ01EX1JFVFVSTl9ESVIsICBcCisgICBHUElPX0NNRF9SRVRVUk5fT1VULCAgXAorICAgR1BJT19DTURfRU5BQkxFX1BVTEwsIFwKKyAgIEdQSU9fQ01EX0RJU0FCTEVfUFVMTCxcCisgICBHUElPX0NNRF9TRVRfUFVMTF9ISUdILCBcCisgICBHUElPX0NNRF9TRVRfUFVMTF9MT1csICBcCisgICBHUElPX0NNRF9TRVRfRElOViwgIFwKKyAgIEdQSU9fQ01EX1NFVF9ERUJVRywgIFwKKyAgIEdQSU9fQ01EX1NFVF9DTEtfT1VULCBcCisgICBHUElPX0NNRF9TRVRfQ0xLX0RJViwgXAorICAgR1BJT19DTURfU0VUX09XTkVSU0hJUF9UT19NRCwgXAorICAgR1BJT19DTURfU0VUX09XTkVSU0hJUF9UT19BUCwgXAorICAgR1BJT19DTURfU0VUX0RSSVZFLCBcCisgICBHUElPX0NNRF9SRVRVUk5fRFJJVkUsIFwKKyAgIEdQSU9fQ01EX1JFVFVSTl9PV05FUlNISVAsIFwKKyAgIEdQT19DTURfUkVUVVJOX01PREUsCVwKKyAgIEdQT19DTURfUkVUVVJOX09VVCwgXAorICAgR1BPX0NNRF9XUklURV9ISUdILCBcCisgICBHUE9fQ01EX1dSSVRFX0xPVywgXAorICAgR1BPX0NNRF9NT0RFX1NFVF8wLCBcCisgICBHUE9fQ01EX01PREVfU0VUXzEsIFwKKyAgIEdQT19DTURfTU9ERV9TRVRfMiwgXAorICAgR1BPX0NNRF9NT0RFX1NFVF8zLFwKKyAgIEdQSU9fQ01EX1NFVF9ESVJfT1VUX05PX0lSUV9NQVNLLCBcCisgICBHUElPX0NNRF9TRVRfRElSX0lOX05PX0lSUV9NQVNLLCBcCisgICBHUElPX0NNRF9XUklURV9ISUdIX05PX0lSUV9NQVNLLCBcCisgICBHUElPX0NNRF9XUklURV9MT1dfTk9fSVJRX01BU0ssIFwKKyAgIEdQSU9fQ01EX1JFQURfTk9fSVJRX01BU0ssIFwKKyAgIEdQSU9fQ01EX1dSSVRFX0ZPUl9TUEksXAorICAgR1BJT19DTURfR0VUX0FQX1BJTiwKKyNlbmRpZiAvKl9fQlVJTERfRE9NX18qLworI2RlZmluZSBHUElPX1BVTExfRU5BQkxFIAkJMQorI2RlZmluZSBHUElPX1BVTExfRElTQUJMRQkJMAorI2RlZmluZSBHUElPX1BVTExfSElHSAkJCTEKKyNkZWZpbmUgR1BJT19QVUxMX0xPVwkJCTAKKworLyogRk9SIEdQSU9fQ01EX1JFQUQgY29udHJvbCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyNkZWZpbmUgR1BJT19JT19ISUdIICAgIDEKKyNkZWZpbmUgR1BJT19JT19MT1cgICAgIDAKKyAgIERDTF9VSU5UOCAgIHUxSU9EYXRhOyAvLyBHUElPX0lPX0hJR0ggb3IgR1BJT19JT19MT1cKK30gR1BJT19DVFJMX1JFQURfVDsKKworLyogRk9SIEdQSU9fQ01EX1JFVFVSTl9NT0RFIGNvbnRyb2wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisjZGVmaW5lIEdQSU9fTU9ERV8wICAgIDAKKyNkZWZpbmUgR1BJT19NT0RFXzEgICAgMQorI2RlZmluZSBHUElPX01PREVfMiAgICAyCisjZGVmaW5lIEdQSU9fTU9ERV8zICAgIDMKKyNkZWZpbmUgR1BJT19NT0RFXzQgICAgNAorI2RlZmluZSBHUElPX01PREVfNSAgICA1CisjZGVmaW5lIEdQSU9fTU9ERV82ICAgIDYKKyNkZWZpbmUgR1BJT19NT0RFXzcgICAgNworI2RlZmluZSBHUElPX01PREVfOCAgICA4IAorICAgRENMX1VJTlQ4ICAgdTFSZXRNb2RlOy8vT3V0cHV0OiB0byByZXR1cm4gR1BJT19NT0RFMCwgR1BJT19NT0RFMSwgR1BJT19NT0RFMiwgb3IgR1BJT19NT0RFMworfSBHUElPX0NUUkxfUkVUVVJOX01PREVfVDsKKworLyogRk9SIEdQT19DTURfUkVUVVJOX01PREUgY29udHJvbCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyNkZWZpbmUgR1BPX01PREVfMCAgICAwCisjZGVmaW5lIEdQT19NT0RFXzEgICAgMQorI2RlZmluZSBHUE9fTU9ERV8yICAgIDIKKyNkZWZpbmUgR1BPX01PREVfMyAgICAzCisgICBEQ0xfVUlOVDggICB1MVJldE1vZGU7Ly9PdXRwdXQ6IHRvIHJldHVybiBHUE9fTU9ERTAsIEdQT19NT0RFMSwgR1BPX01PREUyLCBvciBHUE9fTU9ERTMKK30gR1BPX0NUUkxfUkVUVVJOX01PREVfVDsKKworLyogRk9SIEdQSU9fQ01EX1JFVFVSTl9ESVIgY29udHJvbCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyNkZWZpbmUgR1BJT19ESVJfSU4gIDAKKyNkZWZpbmUgR1BJT19ESVJfT1VUIDEgCisgICBEQ0xfVUlOVDggICB1MVJldERpckRhdGE7Ly9PdXRwdXQ6IHRvIHJldHVybiBHUElPX0RJUl9JTlBVVCwgb3IgR1BJT19ESVJfT1VUUFVUCit9IEdQSU9fQ1RSTF9SRVRVUk5fRElSX1Q7CisKKy8qIEZPUiBHUElPX0NNRF9SRVRVUk5fT1VUIGNvbnRyb2wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDggICB1MVJldE91dERhdGE7Ly9PdXRwdXQ6IHRvIHJldHVybiAgR1BJT19JT19ISUdIIG9yIEdQSU9fSU9fTE9XCit9IEdQSU9fQ1RSTF9SRVRVUk5fT1VUX1Q7CisKKy8qIEZPUiBHUElPX0NNRF9SRVRVUk5fQVAgY29udHJvbCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9VSU5UOCAgIHUxUmV0QXBEYXRhOy8vCit9IEdQSU9fQ1RSTF9SRVRVUk5fQVBfVDsKKworLyogRk9SIEdQT19DTURfUkVUVVJOX09VVCBjb250cm9sIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworI2RlZmluZSBHUE9fSU9fSElHSCAxCisjZGVmaW5lIEdQT19JT19MT1cJMAorICAgRENMX1VJTlQ4ICAgdTFSZXRPdXREYXRhOy8vT3V0cHV0OiB0byByZXR1cm4gIEdQT19JT19ISUdIIG9yIEdQT19JT19MT1cKK30gR1BPX0NUUkxfUkVUVVJOX09VVF9UOworCisvKiBGT1IgR1BJT19DTURfU0VUX0RJTlYgY29udHJvbCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9CT09MICAgIGZnU2V0RGludjsgLy9nZXQgbW9yZSBkZXRhaWwgaW4gc3BlYy4KK30gR1BJT19DVFJMX1NFVF9ESU5WX1Q7CisKKy8qIEZPUiBHUElPX0NNRF9TRVRfREVCVUcgY29udHJvbCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9CT09MICAgIGZnU2V0RGVidWc7Cit9IEdQSU9fQ1RSTF9TRVRfREVCVUdfVDsKKworLyogRk9SIEdQSU9fQ01EX1NFVF9DTEtfT1VUIGNvbnRyb2wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDE2ICB1MkNsa051bTsgLy9jbG9jayBudW1iZXIgaW4gc3BlYy4KKyAgIGdwaW9fY2xrX21vZGUgdTJNb2RlOworICAvLyBEQ0xfVUlOVDE2ICB1Mk1vZGU7CSAvL3RoZSBDTEtPVVQgdmFsdWUgaW4gc3BlYy4oYnkgY2hpcCkKK30gR1BJT19DVFJMX1NFVF9DTEtfT1VUX1Q7CisKKworLyogRk9SIEdQSU9fQ01EX1NFVF9DTEtfRElWIGNvbnRyb2wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRENMX1VJTlQxNiAgdTJDbGtOdW07IC8vY2xvY2sgbnVtYmVyIGluIHNwZWMuCisgICAgZ3Bpb19jbGtfZGl2ICAgdTJEaXY7CisgICAgLy9EQ0xfVUlOVDE2ICB1MkRpdjsJIC8vdGhlIENMS09VVCB2YWx1ZSBpbiBzcGVjLihieSBjaGlwKQorfUdQSU9fQ1RSTF9TRVRfQ0xLX0RJVl9UOworCisvKiBGT1IgR1BJT19DVFJMX1dSSVRFX0ZPUl9TUElfVCBjb250cm9sIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQ4ICAgZGF0YTsKKyAgIERDTF9VSU5UMTYgIG5vOworICAgRENMX1VJTlQxNiAgcmVtYWluZGVyX3NoaWZ0OworfSBHUElPX0NUUkxfV1JJVEVfRk9SX1NQSV9UOworCisvKiBGT1IgR1BJT19DTURfU0VUX0RSSVZFIGFuZCBHUElPX0NNRF9SRVRVUk5fRFJJVkUgY29udHJvbCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwkjZGVmaW5lIEdQSU9fRFJJVkVfTU9ERV8wIDAgICAvLyA0bUEKKwkjZGVmaW5lIEdQSU9fRFJJVkVfTU9ERV8xIDEgICAvLyA4bUEKKwkjZGVmaW5lIEdQSU9fRFJJVkVfTU9ERV8yIDIgICAvLyAxMm1BCisJI2RlZmluZSBHUElPX0RSSVZFX01PREVfMyAzICAgLy8gMTZtQQorCURDTF9VSU5UOCB1MURyaXZlTW9kZTsgIC8vR1BJTyBkcml2ZSBtb2RlIHZhbHVlIGluIHNwZWMKK31HUElPX0NUUkxfUkVUVVJOX0RSSVZFX1QsR1BJT19DVFJMX1NFVF9EUklWRV9UOworCisKKy8qIEZPUiBHUElPX0NNRF9SRVRVUk5fT1dORVJTSElQIGNvbnRyb2wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJI2RlZmluZSBHUElPX01EX09XTkVSU0hJUCAwICAgCisJI2RlZmluZSBHUElPX0FQX09XTkVSU0hJUCAxICAgCisJRENMX1VJTlQ4IHUxT3duZXJTaGlwOyAgLy9HUElPIG93bmVyc2hpcCB2YWx1ZSBpbiBzcGVjCit9R1BJT19DVFJMX1JFVFVSTl9PV05FUlNISVBfVDsKKworCisjaWZkZWYgX19CVUlMRF9ET01fXworLypUaGUgR1BJTyBjb21tYW5kIHByYXJtZXRlciBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBjb21tYW5kLiB0aGF0J3MgZW51bSBpbiBpbiBEQ0xfQ1RSTF9EQVRBX1QqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwkgR1BJT19DVFJMX1JFQURfVCAgICAgICAgICAgICAgclJlYWQ7ICAgICAgIC8qZGF0YSBzdHJ1Y3R1cmUgZm9yIEdQSU9fQ01EX1JFQUQgY29udHJvbCBjb21tYW5kICovCisgICBHUElPX0NUUkxfUkVUVVJOX01PREVfVCAgICAgICByUmV0dXJuTW9kZTsgLypkYXRhIHN0cnVjdHVyZSBmb3IgR1BJT19DTURfUkVUVVJOX01PREUgY29udHJvbCBjb21tYW5kKi8KKyAgIEdQSU9fQ1RSTF9SRVRVUk5fRElSX1QgICAgICAgIHJSZXR1cm5EaXI7ICAvKmRhdGEgc3RydWN0dXJlIGZvciBHUElPX0NNRF9SRVRVUk5fRElSIGNvbnRyb2wgY29tbWFuZCAqLworICAgR1BJT19DVFJMX1JFVFVSTl9PVVRfVCAgICAgICAgclJldHVybk91dDsgIC8qZGF0YSBzdHJ1Y3R1cmUgZm9yIEdQSU9fQ01EX1JFVFVSTl9PVVQgIGNvbnRyb2wgY29tbWFuZCAqLworICAgR1BJT19DVFJMX1JFVFVSTl9BUF9UICAgICAgICAgclJldHVybkFwOworICAgR1BJT19DVFJMX1NFVF9ESU5WX1QgICAgICAgICAgclNldERpbnY7ICAgIC8qZGF0YSBzdHJ1Y3R1cmUgZm9yIEdQSU9fQ01EX1NFVF9ESU5WIGNvbnRyb2wgY29tbWFuZCAqLworICAgR1BJT19DVFJMX1NFVF9ERUJVR19UICAgICAgICAgclNldERlYnVnOyAJLypkYXRhIHN0cnVjdHVyZSBmb3IgR1BJT19DTURfU0VUX0RFQlVHIGNvbnRyb2wgY29tbWFuZCAqLworICAgR1BJT19DVFJMX1NFVF9DTEtfT1VUX1QgICAgICAgclNldENsa091dDsgCS8qZGF0YSBzdHJ1Y3R1cmUgZm9yIEdQSU9fQ01EX1NFVF9DTEtfT1VUIGNvbnRyb2wgY29tbWFuZCAqLworICAgR1BJT19DVFJMX1NFVF9DTEtfRElWX1QJCSByU2V0Q2xrRGl2OworICAgR1BJT19DVFJMX1dSSVRFX0ZPUl9TUElfVCAgICAgcldyaXRlU3BpOwkgCS8qZGF0YSBzdHJ1Y3R1cmUgZm9yIEdQSU9fQ1RSTF9XUklURV9GT1JfU1BJIGNvbnRyb2wgY29tbWFuZCAqLworICAgR1BJT19DVFJMX1NFVF9EUklWRV9UICAgICAgICAgclNldERyaXZlOyAgICAgLypkYXRhIHN0cnVjdHVyZSBmb3IgR1BJT19DTURfU0VUX0RSSVZFIGNvbnRyb2wgY29tbWFuZCAqLworICAgR1BJT19DVFJMX1JFVFVSTl9EUklWRV9UICAgICAgclJldHVybkRyaXZlOyAgLypkYXRhIHN0cnVjdHVyZSBmb3IgR1BJT19DTURfUkVUVVJOX0RSSVZFIGNvbnRyb2wgY29tbWFuZCAqLworICAgR1BJT19DVFJMX1JFVFVSTl9PV05FUlNISVBfVCAgclJldHVybk93bmVyc2hpcDsgLypkYXRhIHN0cnVjdHVyZSBmb3IgR1BJT19DTURfUkVUVVJOX09XTkVSU0hJUCBjb250cm9sIGNvbW1hbmQgKi8KKyAgIEdQT19DVFJMX1JFVFVSTl9NT0RFX1QJCSAgICAgb1JldHVybk1vZGU7IC8qZGF0YSBzdHJ1Y3R1cmUgZm9yIEdQT19DTURfUkVUVVJOX09VVCBjb250cm9sIGNvbW1hbmQgKi8KKyAgIEdQT19DVFJMX1JFVFVSTl9PVVRfVAkJICAgICBvUmV0dXJuT3V0OwkvKmRhdGEgc3RydWN0dXJlIGZvciBHUE9fQ01EX1JFVFVSTl9NT0RFIGNvbnRyb2wgY29tbWFuZCAqLworfURDTF9DVFJMX0RBVEFfVDsKKyNlbHNlCisjZGVmaW5lIEdQSU9fQ1RSTFMgXAorICAgR1BJT19DVFJMX1JFQURfVCAgICAgICAgICAgICAgclJlYWQ7IFwKKyAgIEdQSU9fQ1RSTF9SRVRVUk5fTU9ERV9UICAgICAgIHJSZXR1cm5Nb2RlOyBcCisgICBHUElPX0NUUkxfUkVUVVJOX0RJUl9UICAgICAgICByUmV0dXJuRGlyOyBcCisgICBHUElPX0NUUkxfUkVUVVJOX09VVF9UICAgICAgICByUmV0dXJuT3V0OyBcCisgICBHUElPX0NUUkxfUkVUVVJOX0FQX1QgICAgICAgICByUmV0dXJuQXA7IFwKKyAgIEdQSU9fQ1RSTF9TRVRfRElOVl9UICAgICAgICAgIHJTZXREaW52OyBcCisgICBHUElPX0NUUkxfU0VUX0RFQlVHX1QgICAgICAgICByU2V0RGVidWc7IFwKKyAgIEdQSU9fQ1RSTF9TRVRfQ0xLX09VVF9UICAgICAgIHJTZXRDbGtPdXQ7IFwKKyAgIEdQSU9fQ1RSTF9TRVRfQ0xLX0RJVl9UCQkgclNldENsa0RpdjsgXAorICAgR1BJT19DVFJMX1dSSVRFX0ZPUl9TUElfVCAgICAgcldyaXRlU3BpOwkgXAorICAgR1BJT19DVFJMX1NFVF9EUklWRV9UICAgICAgICAgclNldERyaXZlOyAgXAorICAgR1BJT19DVFJMX1JFVFVSTl9EUklWRV9UICAgICAgclJldHVybkRyaXZlOyAgXAorICAgR1BJT19DVFJMX1JFVFVSTl9PV05FUlNISVBfVCAgclJldHVybk93bmVyc2hpcDsgXAorICAgR1BPX0NUUkxfUkVUVVJOX01PREVfVAkJIAkJIG9SZXR1cm5Nb2RlOyBcCisgICBHUE9fQ1RSTF9SRVRVUk5fT1VUX1QJCSAgICAgb1JldHVybk91dDsKKyNlbmRpZiAvL19fQlVJTERfRE9NX18KKyNlbmRpZiAvLyAjaWZuZGVmIF9fRENMX0dQSU9fSF9TVFJVQ1RfXworI2VuZGlmIC8vICNpZmRlZiBEQ0xfREVGSU5JVElPTl9TVFJVQ1QgICAKKworI2lmIGRlZmluZWQoRENMX0RFRklOSVRJT05fUFJPVE9UWVBFKQorI2lmbmRlZiBfX0RDTF9HUElPX0hfUFJPVE9UWVBFX18KKyNkZWZpbmUgX19EQ0xfR1BJT19IX1BST1RPVFlQRV9fCisKKy8vIE1vRElTIHBhcnNlciBza2lwIHN0YXJ0CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xHUElPX0luaXRpYWxpemUKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gaW5pdGlhbGl6ZSBHUElPIG1vZHVsZS4gTm90ZSB0aGF0IGFsbCB0aGUgR1BJTyBwaW4KKyogd2lsbCBiZSBzZXQgdG8gYSBwcmVkZWZpbmVkIHN0YXRlLgorKgorKiBQQVJBTUVURVJTCisqCW5vbmUKKyoKKyogUkVUVVJOIFZBTFVFUworKiAgbm9uZQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbEdQSU9fSW5pdGlhbGl6ZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbEdQSU9fT3BlbgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBvcGVuIHRoZSBHUElPIG1vZHVsZSBhbmQgZ2V0IGEgaGFuZGxlLiBOb3RlIHRoYXQgbXVsdGlwbGUgb3BlbnMgYXJlIGFsbG93ZWQuCisqCisqIFBBUkFNRVRFUlMKKyoJZURldjogLSBvbmx5IHZhbGlkIGZvciBEQ0xfR1BJTyxEQ0xfR1BPLERDTF9HUElPX0NMSy4KKyoJZmxhZ3M6IC0gbm8gc2VwY2lhbCBmbGFncyBpcyBuZWVkZWQuIFBsZWFzZSB1c2UgRkxBR1NfTk9ORQorKgorKiBSRVRVUk4gVkFMVUVTCisqCURDTF9IQU5ETEVfSU5WQUxJRDogLSBPcGVuIGZhaWxlZC4KKyogb3RoZXIgdmFsdWU6IC0gYSB2YWxpZCBoYW5kbGUKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX0hBTkRMRSBEY2xHUElPX09wZW4oRENMX0RFViBkZXYsIERDTF9GTEFHUyBmbGFncyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xHUElPX1JlYWREYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBHUElPIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTiBWQUxVRVMKKyoJU1RBVFVTX1VOU1VQUE9SVEVEOiAKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xHUElPX1JlYWREYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOICpidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbEdQSU9fV3JpdGVEYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBHUElPIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTiBWQUxVRVMKKyoJU1RBVFVTX1VOU1VQUE9SVEVEOiAKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xHUElPX1dyaXRlRGF0YShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0JVRkYgKmJ1ZmYsIERDTF9CVUZGX0xFTiAqYnVmX2xlbiwgRENMX09QVElPTlMgb3B0aW9ucyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xHUElPX0NvbmZpZ3VyZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgR1BJTyBtb2R1bGUgbm93LgorKgorKiBQQVJBTUVURVJTCisqCU4vQQorKgorKiBSRVRVUk4gVkFMVUVTIAorKglTVEFUVVNfVU5TVVBQT1JURUQ6CisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsR1BJT19Db25maWd1cmUoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DT05GSUdVUkVfVCAqY29uZmlndXJlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbEdQSU9fUmVnaXN0ZXJDYWxsYmFjaworKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgR1BJTyBtb2R1bGUgbm93LgorKgorKiBQQVJBTUVURVJTCisqCU4vQQorKgorKiBSRVRVUk4gVkFMVUVTCisqCVNUQVRVU19VTlNVUFBPUlRFRDogCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsR1BJT19SZWdpc3RlckNhbGxiYWNrKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfRVZFTlQgZXZlbnQsIFBGTl9EQ0xfQ0FMTEJBQ0sgY2FsbGJhY2spOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsR1BJT19Db250cm9sCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIHNlbmQgY29tbWFuZCB0byBjb250cm9sIHRoZSBHUElPIG1vZHVsZS4KKyoKKyogUEFSQU1FVEVSUworKiBoYW5kbGU6IC0gYSB2YWxpZCBoYW5kbGUgcmV0dXJuIGJ5IERjbEdQSU9fT3BlbigpCisqIGNtZDogCSAgLSBhIGNvbnRyb2wgY29tbWFuZCBmb3IgR1BJTyBtb2R1bGUKKyogICAgICAgICAgMS4gR1BJT19DTURfUkVBRDogdG8gcmVhZCB0aGUgaW5wdXQgdmFsdWUgZnJvbSB0aGUgR1BJTyBwb3J0IGNvbnRhaW4gaW4gaGFuZGxlLgorKiAgICAgICAgICAyLiBHUElPX0NNRF9XUklURV9MT1c6IHRvIHdyaXRlIGxvdyB0byB0aGUgb3V0cHV0IG9mIEdQSU8gcG9ydCBjb250YWluIGluIGhhbmRsZS4KKyogICAgICAgICAgMy4gR1BJT19DTURfV1JJVEVfSElHSDogdG8gd3JpdGUgaGlnaCB0byB0aGUgb3V0cHV0IG9mICBHUElPIHBvcnQgY29udGFpbiBpbiBoYW5kbGUuCisqICAgICAgICAgIDQuIEdQSU9fQ01EX1NFVF9NT0RFXzA6IHRvIHNldCB0aGUgbW9kZSBvZiB0aGUgR1BJTyBwb3J0IGNvbnRhaW4gaW4gaGFuZGxlIGFzIG1vZGUgMC4KKyogICAgICAgICAgNS4gR1BJT19DTURfU0VUX01PREVfMTogdG8gc2V0IHRoZSBtb2RlIG9mIHRoZSBHUElPIHBvcnQgY29udGFpbiBpbiBoYW5kbGUgYXMgbW9kZSAxLgorKiAgICAgICAgICA2LiBHUElPX0NNRF9TRVRfTU9ERV8yOiB0byBzZXQgdGhlIG1vZGUgb2YgdGhlIEdQSU8gcG9ydCBjb250YWluIGluIGhhbmRsZSBhcyBtb2RlIDIuCisqICAgICAgICAgIDcuIEdQSU9fQ01EX1NFVF9NT0RFXzM6IHRvIHNldCB0aGUgbW9kZSBvZiB0aGUgR1BJTyBwb3J0IGNvbnRhaW4gaW4gaGFuZGxlIGFzIG1vZGUgMy4KKyogICAgICAgICAgOC4gR1BJT19DTURfU0VUX0RJUl9PVVQ6IHRvIHNldCB0aGUgZGlyZWN0aW9uIG9mIHRoZSBHUElPIHBvcnQgYXMgb3V0cHV0LgorKiAgICAgICAgICA5LiBHUElPX0NNRF9TRVRfRElSX0lOOiB0byBzZXQgdGhlIGRpcmVjdGlvbiBvZiB0aGUgR1BJTyBwb3J0IGFzIGlucHV0LgorKiAgICAgICAgIDEwLiBHUElPX0NNRF9SRVRVUk5fTU9ERTogdG8gZ2V0IHRoZSBtb2RlIG9mIHRoZSBHUElPIHBvcnQKKyogICAgICAgICAxMS4gR1BJT19DTURfUkVUVVJOX0RJUjogdG8gZ2V0IHRoZSBkaXJlY3Rpb24gb2YgdGhlIEdQSU8gcG9ydAorKiAgICAgICAgIDEyLiBHUElPX0NNRF9SRVRVUk5fT1VUOiB0byByZXR1cm4gdGhlIG91dHB1dCB2YWx1ZSBvZiB0aGUgR1BJTyBwb3J0CisqICAgICAgICAgMTMuIEdQSU9fQ01EX0VOQUJMRV9QVUxMOiB0byBlbmFibGUgdGhlIHB1bGwgcmVzaXN0ZXIgZm9yIGEgR1BJTyBwb3J0CisqICAgICAgICAgMTQuIEdQSU9fQ01EX0RJU0FCTEVfUFVMTDogdG8gZGlzZW5hYmxlIHRoZSBwdWxsIHJlc2lzdGVyIGZvciBhIEdQSU8gcG9ydAorKiAgICAgICAgIDE1LiBHUElPX0NNRF9TRVRfUFVMTF9ISUdIOiB0byBzZWxlY3QgdGhlIHB1bGwgdXAgZm9yIGEgR1BJTyBwb3J0CisqICAgICAgICAgMTYuIEdQSU9fQ01EX1NFVF9QVUxMX0xPVzogdG8gc2VsZWN0IHRoZSBwdWxsIGRvd24gZm9yIGEgR1BJTyBwb3J0CisqICAgICAgICAgMTcuIEdQSU9fQ01EX1NFVF9ESU5WOiB0byBzZXQgdGhlIGludmVyc2lvbiBvZiBhIEdQSU8gcG9ydAorKiAgICAgICAgIDE4LiBHUElPX0NNRF9TRVRfREVCVUc6IHRvIGVuYWJsZSBvciBkaXNhYmxlIGRlYnVnIG1vZGUKKyogICAgICAgICAxOS4gR1BJT19DTURfU0VUX0NMS19PVVQ6IHRvIHNldCB0aGUgY2xvY2sgZnJlcXVlbmN5IGZvciBhIGNsb2NrIG91dHB1dAorKiAgICAgICAgIDIwLiBHUElPX0NNRF9TRVRfT1dORVJTSElQX1RPX01EOiB0byBzZXQgb3duZXJzaGlwIG9mIGEgR1BJTyBwb3J0IHRvIE1vZGVtIHNpZGUuCisqICAgICAgICAgMjEuIEdQSU9fQ01EX1NFVF9PV05FUlNISVBfVE9fQVA6IHRvIHNldCBvd25lcnNoaXAgb2YgYSBHUElPIHBvcnQgdG8gQVAgc2lkZS4KKyogICAgICAgICAyMi4gR1BJT19DTURfU0VUX0RSSVZFOiB0byBzZXQgdGhlIGRyaXZlIG9mIGEgR1BJTyBwb3J0LgorKiAgICAgICAgIDIzLiBHUElPX0NNRF9SRVRVUk5fRFJJVkU6IHRvIHJldHVybiB0aGUgZHJpdmUgb2YgdGhlIEdQSU8gcG9ydC4KKyogICAgICAgICAyNC4gR1BJT19DTURfUkVUVVJOX09XTkVSU0hJUDogdG8gcmV0dXJuIHRoZSBvd25lcnNoaXAgb2YgdGhlIEdQSU8gcG9ydC4KKyogICAgICAgICAyNS4gR1BPX0NNRF9SRVRVUk5fTU9ERTogdG8gZ2V0IHRoZSBtb2RlIG9mIHRoZSBHUE8gcG9ydAorKiAgICAgICAgIDI2LiBHUE9fQ01EX1JFVFVSTl9PVVQ6IHRvIHJldHVybiB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoZSBHUE8gcG9ydAorKiAgICAgICAgIDI3LiBHUE9fQ01EX1dSSVRFX0hJR0g6IHRvIHdyaXRlIGhpZ2ggdG8gdGhlIG91dHB1dCBvZiAgR1BPIHBvcnQgY29udGFpbiBpbiBoYW5kbGUuCisqICAgICAgICAgMjguIEdQT19DTURfV1JJVEVfTE9XOiB0byB3cml0ZSBsb3cgdG8gdGhlIG91dHB1dCBvZiBHUE8gcG9ydCBjb250YWluIGluIGhhbmRsZS4KKyogICAgICAgICAyOS4gR1BPX0NNRF9NT0RFX1NFVF8wOiB0byBzZXQgdGhlIG1vZGUgb2YgdGhlIEdQSU8gcG9ydCBjb250YWluIGluIGhhbmRsZSBhcyBtb2RlIDAuCisqICAgICAgICAgMzAuIEdQT19DTURfTU9ERV9TRVRfMTogdG8gc2V0IHRoZSBtb2RlIG9mIHRoZSBHUEkxIHBvcnQgY29udGFpbiBpbiBoYW5kbGUgYXMgbW9kZSAxLgorKiAgICAgICAgIDMxLiBHUE9fQ01EX01PREVfU0VUXzI6IHRvIHNldCB0aGUgbW9kZSBvZiB0aGUgR1BJMiBwb3J0IGNvbnRhaW4gaW4gaGFuZGxlIGFzIG1vZGUgMi4KKyogICAgICAgICAzMi4gR1BPX0NNRF9NT0RFX1NFVF8zOiB0byBzZXQgdGhlIG1vZGUgb2YgdGhlIEdQSTMgcG9ydCBjb250YWluIGluIGhhbmRsZSBhcyBtb2RlIDMuCisKKyogICAgICAgICAzMy4gR1BJT19DTURfU0VUX0RJUl9PVVRfTk9fSVJRX01BU0s6IHRvIHNldCB0aGUgZGlyZWN0aW9uIG9mIHRoZSBHUElPIHBvcnQgYXMgb3V0cHV0IHdpdGhvdXQgSVJRIHByb3RlY3QuCisqICAgICAgICAgMzQuIEdQSU9fQ01EX1NFVF9ESVJfSU5fTk9fSVJRX01BU0s6ICB0byBzZXQgdGhlIGRpcmVjdGlvbiBvZiB0aGUgR1BJTyBwb3J0IGFzIGlucHV0IHdpdGhvdXQgSVJRIHByb3RlY3QKKyogICAgICAgICAzNS4gR1BJT19DTURfV1JJVEVfSElHSF9OT19JUlFfTUFTSzogIHRvIHdyaXRlIGhpZ2ggdG8gdGhlIG91dHB1dCBvZiAgR1BJTyBwb3J0IGNvbnRhaW4gaW4gaGFuZGxlIHdpdGhvdXQgSVJRIHByb3RlY3QuCisqICAgICAgICAgMzYuIEdQSU9fQ01EX1dSSVRFX0xPV19OT19JUlFfTUFTSzoJICB0byB3cml0ZSBsb3cgdG8gdGhlIG91dHB1dCBvZiBHUElPIHBvcnQgY29udGFpbiBpbiBoYW5kbGUgd2l0aG91dCBJUlEgcHJvdGVjdC4KKyogICAgICAgICAzNy4gR1BJT19DTURfUkVBRF9OT19JUlFfTUFTSzoJCSAgdG8gcmVhZCB0aGUgaW5wdXQgdmFsdWUgZnJvbSB0aGUgR1BJTyBwb3J0IGNvbnRhaW4gaW4gaGFuZGxlIHdpdGhvdXQgSVJRIHByb3RlY3QuLgorCisqICAgICAgICAgMzguIEdQSU9fQ01EX1dSSVRFX0ZPUl9TUElfVDogCisqIGRhdGE6IC0gZGF0YSBmb3IgR1BJTyBjb250cm9sIGNvbW1hbmQuCisqICAgICAgICAgIDEuIEdQSU9fQ01EX1JFQUQ6IHBvaW50ZXIgdG8gYSBHUElPX0NUUkxTIHN0cnVjdHVyZQorKiAgICAgICAgICAyLiBHUElPX0NNRF9XUklURV9MT1c6CQlOVUxMLgorKiAgICAgICAgICAzLiBHUElPX0NNRF9XUklURV9ISUdIOgkJTlVMTC4KKyogICAgICAgICAgNC4gR1BJT19DTURfU0VUX01PREVfMDoJCU5VTEwuCisqICAgICAgICAgIDUuIEdQSU9fQ01EX1NFVF9NT0RFXzE6CQlOVUxMLgorKiAgICAgICAgICA2LiBHUElPX0NNRF9TRVRfTU9ERV8yOgkJTlVMTC4KKyogICAgICAgICAgNy4gR1BJT19DTURfU0VUX01PREVfMzoJCU5VTEwuCisqICAgICAgICAgIDguIEdQSU9fQ01EX1NFVF9ESVJfT1VUOgkJTlVMTC4KKyogICAgICAgICAgOS4gR1BJT19DTURfU0VUX0RJUl9JTjoJCU5VTEwuCisqICAgICAgICAgMTAuIEdQSU9fQ01EX1JFVFVSTl9NT0RFOiBwb2ludGVyIHRvIGEgR1BJT19DVFJMX1JFVFVSTl9NT0RFX1Qgc3RydWN0dXJlCisqICAgICAgICAgMTEuIEdQSU9fQ01EX1JFVFVSTl9ESVI6ICBwb2ludGVyIHRvIGEgR1BJT19DVFJMX1NFVF9ESVJfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAxMi4gR1BJT19DTURfUkVUVVJOX09VVDogIHBvaW50ZXIgdG8gYSBHUElPX0NUUkxfUkVUVVJOX09VVF9UIHN0cnVjdHVyZQorKiAgICAgICAgIDEzLiBHUElPX0NNRF9FTkFCTEVfUFVMTDoJCU5VTEwuCisqICAgICAgICAgMTQuIEdQSU9fQ01EX0RJU0FCTEVfUFVMTDoJTlVMTC4KKyogICAgICAgICAxNS4gR1BJT19DTURfU0VUX1BVTExfSElHSDoJTlVMTC4JCisqICAgICAgICAgMTYuIEdQSU9fQ01EX1NFVF9QVUxMX0xPVzoJTlVMTC4KKyogICAgICAgICAxNy4gR1BJT19DTURfU0VUX0RJTlY6ICBwb2ludGVyIHRvIGEgR1BJT19DVFJMX1NFVF9ESU5WX1Qgc3RydWN0dXJlCisqICAgICAgICAgMTguIEdQSU9fQ01EX1NFVF9ERUJVRzogcG9pbnRlciB0byBhIEdQSU9fQ1RSTF9TRVRfREVCVUdfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAxOS4gR1BJT19DTURfU0VUX0NMS19PVVQ6IHBvaW50ZXIgdG8gYSBHUElPX0NUUkxfU0VUX0NMS19PVVRfVCBzdHJ1Y3R1cmUKKyoJCSAgMjAuIEdQSU9fQ01EX1NFVF9PV05FUlNISVBfVE9fTUQ6IE5VTEwuCisqICAgICAgICAgMjEuIEdQSU9fQ01EX1NFVF9PV05FUlNISVBfVE9fQVA6IE5VTEwuCisqICAgICAgICAgMjIuIEdQSU9fQ01EX1NFVF9EUklWRTogcG9pbnRlciB0byBhIEdQSU9fQ1RSTF9TRVRfRFJJVkVfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAyMy4gR1BJT19DTURfUkVUVVJOX0RSSVZFOiBwb2ludGVyIHRvIGEgR1BJT19DVFJMX1JFVFVSTl9EUklWRV9UIHN0cnVjdHVyZQorKiAgICAgICAgIDI0LiBHUElPX0NNRF9SRVRVUk5fT1dORVJTSElQOiBwb2ludGVyIHRvIGEgR1BJT19DVFJMX1JFVFVSTl9PV05FUlNISVBfVCBzdHJ1Y3R1cmUKKyoKKyogICAgICAgICAyNS4gR1BPX0NNRF9SRVRVUk5fTU9ERTogcG9pbnRlciB0byBhIEdQT19DVFJMX1JFVFVSTl9NT0RFX1Qgc3RydWN0dXJlCisqICAgICAgICAgMjYuIEdQT19DTURfUkVUVVJOX09VVDogIHBvaW50ZXIgdG8gYSBHUE9fQ1RSTF9SRVRVUk5fT1VUX1Qgc3RydWN0dXJlCisqICAgICAgICAgMjcuIEdQT19DTURfV1JJVEVfSElHSDogTlVMTC4KKyogICAgICAgICAyOC4gR1BPX0NNRF9XUklURV9MT1c6ICBOVUxMLgorKiAgICAgICAgIDI5LiBHUE9fQ01EX01PREVfU0VUXzA6IE5VTEwuLgorKiAgICAgICAgIDMwLiBHUE9fQ01EX01PREVfU0VUXzE6IE5VTEwuLgorKiAgICAgICAgIDMxLiBHUE9fQ01EX01PREVfU0VUXzI6IE5VTEwuCisqICAgICAgICAgMzIuIEdQT19DTURfTU9ERV9TRVRfMzogTlVMTC4KKworKiAgICAgICAgIDMzLiBHUElPX0NNRF9TRVRfRElSX09VVF9OT19JUlFfTUFTSzogTlVMTC4KKyogICAgICAgICAzNC4gR1BJT19DTURfU0VUX0RJUl9JTl9OT19JUlFfTUFTSzogIE5VTEwuCisqICAgICAgICAgMzUuIEdQSU9fQ01EX1dSSVRFX0hJR0hfTk9fSVJRX01BU0s6ICBOVUxMLgorKiAgICAgICAgIDM2LiBHUElPX0NNRF9XUklURV9MT1dfTk9fSVJRX01BU0s6CSAgTlVMTC4KKyogICAgICAgICAzNy4gR1BJT19DTURfUkVBRF9OT19JUlFfTUFTSzoJCSAgcG9pbnRlciB0byBhIEdQSU9fQ1RSTFMgc3RydWN0dXJlCisKKyogICAgICAgICAzOC4gR1BJT19DTURfV1JJVEVfRk9SX1NQSV9UOiBwb2ludGVyIHRvIEdQSU9fQ1RSTF9XUklURV9GT1JfU1BJX1QKKyogUkVUVVJOIFZBTFVFUworKglTVEFUVVNfT0s6IC0gY29tbWFuZCBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisqCVNUQVRVU19GQUlMOiAtIGNvbW1hbmQgaXMgZmFpbGVkLgorKiBTVEFUVVNfSU5WQUxJRF9DTUQ6IC0gVGhlIGNvbW1hbmQgaXMgaW52YWxpZC4KKyogU1RBVFVTX0lOVkFMSURfRENMX0hBTkRMRTogLSBUaGUgaGFuZGxlIGlzIGludmFsaWQuCisqIFNUQVRVU19JTlZBTElEX0NUUkxfREFUQTogLSBUaGUgY3RybCBkYXRhIGlzIG5vdCB2YWxpZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xHUElPX0NvbnRyb2woRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DVFJMX0NNRCBjbWQsIERDTF9DVFJMX0RBVEFfVCAqZGF0YSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xHUElPX0Nsb3NlCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBHUElPIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJaGFuZGxlOiB0aGUgaGFuZGxlIHRoYXQgcmV0dXJuIGJ5IERjbEdQSU9fT3Blbi4KKyoKKyogUkVUVVJOIFZBTFVFUzoKKyoJU1RBVFVTX1VOU1VQUE9SVEVEOgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbEdQSU9fQ2xvc2UoRENMX0hBTkRMRSBoYW5kbGUpOworCisvLyBNb0RJUyBwYXJzZXIgc2tpcCBlbmQKKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfR1BJT19IX1BST1RPVFlQRV9fCisjZW5kaWYgLy8gI2lmZGVmIERDTF9ERUZJTklUSU9OX1BST1RPVFlQRQorCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX2dwdC5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfZ3B0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc0N2M0YgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX2dwdC5oCkBAIC0wLDAgKzEsNTk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDEKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBkY2xfZ3B0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgVEFUQUtBCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgSGVhZGVyIGZpbGUgb2YgRENMIChEcml2ZXIgQ29tbW9uIExheWVyKSBmb3IgR1BULgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9TVFJVQ1QKKyNpZm5kZWYgX19EQ0xfR1BUX0hfU1RSVUNUX18KKyNkZWZpbmUgX19EQ0xfR1BUX0hfU1RSVUNUX18KKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCisvLyBHUFQgSW50ZXJydXB0IEludGVydmFsLiBbd3JpdGUgdG8gaGFyZHdhcmUgcmVnaXN0ZXIuXQorLy8gcHV0IHRoaXMgbWFjcm8gaW4gaGVyZSwgYmVjYXN1ZSBpdCB3aWxsIGJlIHVzZWQgaW4gYWxlcnRlci5jCisjZGVmaW5lIGdwdGltZXJfaW50ZXJ2YWwgICAxMAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9PUFRJT05TIGZvciBHUFQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBHUFRfT1BUSU9OUworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NPTkZJR1VSRV9UIGZvciBHUFQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfRVZFTlQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBHUFRfRVZFTlRTICAgXAorICAgRVZFTlRfSEdQVF9USU1FT1VUID0gMHgxLAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NUUkxfQ01ECisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAjaWZkZWYgX19CVUlMRF9ET01fXworLyoKKyogVGhlIEdQSU8gQ29tbWFuZCB2YWx1ZXMgaW4gRENMX0NUUkxfQ01EX1QgRW51bSBvZiBkY2wuaCAKKyogRENMX0NUUkxfREFUQV9UIERlZmluZSB0aGUgQ29udHJvbCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBtb2R1bGUncyBjb21tYW5kIAorKi8KK3R5cGVkZWYgZW51bQoreworICAgU0dQVF9DTURfU1RBUlQsICAvL0dQVCBTdGFydCBjb21tYW5kLiA8RENMX0dQVF9DQj4KKyAgIFNHUFRfQ01EX1NUT1AsICAgLy9HUFQgU3RvcCAgY29tbWFuZC4gPERDTF9HUFRfQ0I+CisgICBTR1BUX0NNRF9HRVRfUkVNQUlOSU5HX1RJQ0ssIC8vTElURSBHUFQgVXNlZCBDb21tYW5kCisgICBTR1BUX0NNRF9CVVNZV0FJVCwgLy9HUFQgQnVzeXdhaXQgY29tbWFuZCwgdGhhdCdzIG9ubHkgc3VwcG9ydCB0byBEQ0xfR1BUX0J1c3lXYWl0LgorICAgU0dQVF9DTURfUlVOTklOR19USUNLLCAvLyBDMksgdG8gR2V0IHJ1bm5pbmcgdGljayBudW1iZXIKKyAgIFNHUFRfQ01EX01PRElGWV9DTlQsIC8vQzJLIHRvIG1vZGlmeSBhdXRvIHJlcGVhdCBHUFQgZHVyYXRpb24KKyAgIAorICAgU0dQVDJfQ01EX1NUQVJULCAgLy9mb3IgZ3B0MiBzdGFydCBjb21tYW5kLgorICAgU0dQVDJfQ01EX1NUT1AsCisgICBTR1BUMl9DTURfU0VUX0NPVU5UVkFMVUUsCisgICBTR1BUMl9DTURfUkVHSVNURVJDQUxMQkFDSywKKyAgIFNHUFQyX0NNRF9TRVRfQ0xLLAorICAgCisgICBGR1BUX0NNRF9TVEFSVCwgLy9GcmVlIHJ1biBHUFQgc3RhcnQgY29tbWFuZCA8RENMX0dQVF9GcmVlUlVOMyAmIERDTF9HUFRfRnJlZVJVTjQ+CisgICBGR1BUX0NNRF9TVE9QLCAgLy9GcmVlIHJ1biBHUFQgU3RvcCBjb21tYW5kIDxEQ0xfR1BUX0ZyZWVSVU4zICYgRENMX0dQVF9GcmVlUlVOND4KKyAgIEZHUFRfQ01EX1JFVFVSTl9DT1VOVCwJLy9GcmVlIHJ1biBHUFQgcmV0dXJuIGN1cnJlbnQgY291bnQgdmFsdWUuIDxEQ0xfR1BUX0ZyZWVSVU4zICYgRENMX0dQVF9GcmVlUlVOND4KK31EQ0xfQ1RSTF9DTURfVDsKKyNlbHNlCisjZGVmaW5lIEdQVF9DTURTICBcCisgICBTR1BUX0NNRF9TVEFSVCwgIFwKKyAgIFNHUFRfQ01EX1NUT1AsIFwKKyAgIFNHUFRfQ01EX0dFVF9SRU1BSU5JTkdfVElDSywgXAorICAgU0dQVF9DTURfQlVTWVdBSVQsIFwKKyAgIFNHUFRfQ01EX1JVTk5JTkdfVElDSywgXAorICAgU0dQVF9DTURfTU9ESUZZX0NOVCwgXAorICAgU0dQVDJfQ01EX1NUQVJULCBcCisgICBTR1BUMl9DTURfU1RPUCwgXAorICAgU0dQVDJfQ01EX1NFVF9DT1VOVFZBTFVFLCBcCisgICBTR1BUMl9DTURfUkVHSVNURVJDQUxMQkFDSywgXAorICAgU0dQVDJfQ01EX1NFVF9DTEssIFwKKyAgIEZHUFRfQ01EX1NUQVJULCBcCisgICBGR1BUX0NNRF9TVE9QLCBcCisgICBGR1BUX0NNRF9SRVRVUk5fQ09VTlQsCisjZW5kaWYKKworLyogRm9yIFNHUFRfQ01EX1NUQVJUIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQxNiAgIHUyVGljazsvL1RoZSB0aW1lIFRpY2tzKGEgdGljayBpcyAxMG1zKSB0aGF0IHJlZ2lzdGVyIGNhbGxiYWNrIGZ1bmN0aW9uIGRlbGF5IHRvIHdha2UgdXAuIAorICAgRENMX1VJTlQzMiAgIHU0VGljazsKKyAgIHZvaWQgICAgICgqcGZDYWxsYmFjaykodm9pZCAqKTsgLy9yZWdpc3RlciBjYWxsYmFjayBmdW5jdGlvbgorICAgdm9pZCAgICAgKnZQYXJhOyAvL3BhcmFtZXRlciBvZiByZWdpc3RlciBjYWxsYmFjayBmdW5jdGlvbiAKK30gU0dQVF9DVFJMX1NUQVJUX1Q7CisKKy8qIEZvciBGR1BUX0NNRF9SRVRVUk5fQ09VTlQgY29tbWFuZC4gKi8KK3R5cGVkZWYgRENMX1VJTlQxNiBGR1BUX0NUUkxfUkVUVVJOX0NPVU5UX1Q7CisvKkZvciBTR1BUX0NNRF9CVVNZV0FJVCBjb21tYW5kKi8KK3R5cGVkZWYgRENMX1VJTlQxNiBHUFRfQlVTWVdBSVRfQ09VTlQ7CisKKworLy9hZGRlZCBieSBkb25nbWluZyBmb3IgZ3B0MgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9VSU5UMTYgICB1MkNvdW50VmFsdWU7CisgICBEQ0xfQk9PTCAgICAgZmdBdXRvUmVsb2FkOworfSBTR1BUMl9DVFJMX1JFU0VUX0RBVEFfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9VSU5UMzIgICB1NENsb2NrOyAvLyBmb3IgZ3B0MiBTR1BUMl9DVFJMX0NMS19UIGVudW0KK30gU0dQVDJfQ1RSTF9DTEtfVDsKKworCit0eXBlZGVmIERDTF9VSU5UMzIgRENMX0VWRU5UX05FVzsKKwordHlwZWRlZiB2b2lkICgqU0dQVDJfQ0FMTEJBQ0tfRlVOQykoRENMX0VWRU5UX05FVyBldmVudCk7CisKK3R5cGVkZWYgc3RydWN0eworCVNHUFQyX0NBTExCQUNLX0ZVTkMgZ3B0MkNhbGxCYWNrOworfVNHUFQyX0NBTExCQUNLX0ZVTkNfVDsKKworCisjaWZkZWYgX19CVUlMRF9ET01fXworLypUaGUgR1BJTyBjb21tYW5kIHByYXJtZXRlciBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBjb21tYW5kLiB0aGF0J3MgZW51bSBpbiBpbiBEQ0xfQ1RSTF9EQVRBX1QqLwordHlwZWRlZiBlbnVtCisJeworCQkgU0dQVF9DVFJMX1NUQVJUX1QgICAgICAgICAgICAgclNHUFRTdGFydCwgLyogRm9yIFNHUFRfQ01EX1NUQVJUIGNvbW1hbmQuICovCisJICAgRkdQVF9DVFJMX1JFVFVSTl9DT1VOVF9UICAgICAgdTJSZXRDb3VudCwgLyogRm9yIEZHUFRfQ01EX1JFVFVSTl9DT1VOVCBjb21tYW5kLiAqLworCSAgIEdQVF9CVVNZV0FJVF9DT1VOVAkJCSAgIHVCdXN5V2FpdGNvdW50LCAvKkZvciBTR1BUX0NNRF9CVVNZV0FJVCBjb21tYW5kKi8KKwkgICAgU0dQVDJfQ1RSTF9SRVNFVF9EQVRBX1QgICAgICAgICAgICAgIHJIR1BUUmVzZXQsIC8qYWRkIGZvciBncHQyIHJlc2V0IGNvbW1hbmQgKi8KKwkgICAgU0dQVDJfQ0FMTEJBQ0tfRlVOQ19UCQkJCQlncHQyX2NhbGxiYWNrLC8qYWRkIGZvciBncHQyIHJlZ2lzdGVyY2FsbGJhY2sgIGNvbW1hbmQgKi8KKwkgICAgU0dQVDJfQ1RSTF9DTEtfVAkJCQkJZ3B0Ml9jbGssCisJfURDTF9DVFJMX0RBVEFfVDsKKyNlbHNlCisjZGVmaW5lIEdQVF9DVFJMUyBcCisgICBTR1BUX0NUUkxfU1RBUlRfVCAgICAgICAgICAgICByU0dQVFN0YXJ0OyBcCisgICBGR1BUX0NUUkxfUkVUVVJOX0NPVU5UX1QgICAgICB1MlJldENvdW50OyBcCisgICBHUFRfQlVTWVdBSVRfQ09VTlQJCQkgdUJ1c3lXYWl0Y291bnQ7XAorICAgU0dQVDJfQ1RSTF9SRVNFVF9EQVRBX1QgICAgICAgICAgICAgIHJIR1BUUmVzZXQ7XAorICAgU0dQVDJfQ0FMTEJBQ0tfRlVOQ19UCSAgICAgICBncHQyX2NhbGxiYWNrO1wKKyAgIFNHUFQyX0NUUkxfQ0xLX1QgICAgICAgICAgICAgICAgICAgIGdwdDJfY2xrOworI2VuZGlmIC8vIF9fQlVJTERfRE9NX18KKyAKKyNlbmRpZiAvLyAjaWZuZGVmIF9fRENMX0dQVF9IX1NUUlVDVF9fCisjZW5kaWYgLy8gI2lmZGVmIERDTF9ERUZJTklUSU9OX1NUUlVDVCAgIAorI2lmbmRlZiBEQ0xfR1BUX0hfCisjZGVmaW5lIERDTF9HUFRfSF8KKyNkZWZpbmUgTUFYX0dQVF9JVEVNUwkJMzIKKyNkZWZpbmUgRFNQX1VTRVJfTlVNCTQKKyNkZWZpbmUgRU1QVFlfR1BUX0NCX0hBTkRMRVIgIDB4N0YKKworI2lmIGRlZmluZWQoX19GUEdBX18pCisvKiBBTFRFUkEgSkFERSBWZXJzaW9uICovCisvLyNkZWZpbmUgTElURUdQVF9DTE9DSyAzMTI1MC8vMzEyNTAKKy8vI2RlZmluZSBMSVRFR1BUX1VTX1RPX1RJQ0sodXMpICgodXMpLzMyKQorLyogSEFQUyAgSkFERSBWZXJzaW9uICovCisjZGVmaW5lIExJVEVHUFRfQ0xPQ0sgMzE5MjAvLzMxOTIwCisjZGVmaW5lIExJVEVHUFRfVVNfVE9fVElDSyh1cykgKCh1cykvMTI1KQorCisjZWxzZQorCisjZGVmaW5lIExJVEVHUFRfQ0xPQ0sgMzI3NjgKKyNkZWZpbmUgTElURUdQVF9VU19UT19USUNLKHVzKSAoKCh1cykqMikvNjEpCisjZW5kaWYKKworLy9zdGF0aWMga2FsX2Jvb2wgZmdHUFQxSW5pdCA9IEtBTF9GQUxTRTsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisJdm9pZCAoKmdwdDFfZnVuYykodm9pZCk7CisJdm9pZCAoKmdwdDJfZnVuYykodm9pZCk7IAorfWdwdF9mdW5jOworCit0eXBlZGVmIHN0cnVjdCAKK3sKKwlrYWxfdWludDMyICAgdGljazsKKwl2b2lkICAgICAJICgqZ3B0aW1lcl9mdW5jKSh2b2lkICpwYXJhbWV0ZXIpOworCXZvaWQgICAgCSAqcGFyYW1ldGVyOworfWdwdGltZXJfaXRlbTsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisJa2FsX2Jvb2wgZXhlY3V0ZTsKKwlrYWxfdWludDMyICAgdGljazsKKwl2b2lkICAgICAJICgqZ3B0aW1lcl9mdW5jKSh2b2lkICpwYXJhbWV0ZXIpOworCXZvaWQgICAgCSAqcGFyYW1ldGVyOworfWdwdGltZXJfbXVsdGlwbGU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDMyICAgICBzdGF0dXM7ICAvKjEsYWN0aXZhdGVkICwwOmRlLWFjdGl2YXRlZCovCisgICBrYWxfYm9vbCAgICAgICBHUFRTVE9QOworICAga2FsX3VpbnQzMiAgICAgSGdwdF9oYW5kbGU7CisgICBrYWxfdWludDE2ICAgICBHUFRfVElDSzsKKyAgIGthbF91aW50OCAgICAgIE1BWF9HUFRJTUVSX0lURU1TOyAgLy8gSW5kaWNhdGUgdGhlIGN1cnJlbnQgcmVnaXN0ZXJlZCBHUFQgdXNlcnMKKyAgIGthbF91aW50OCAgICAgIEdQVFVzZWRbMzJdOyAgLyogMDogTm90IHJlZ2lzdGVyZWQgYnkgdXNlciwgMTogUmVnaXN0ZXJkIGJ5IHVzZWQqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0byAwIHdoZW4gdXNlciByZWxlYXNlIEdQVCBoYW5kbGUqLworICAgZ3B0aW1lcl9pdGVtICAgR1BUSXRlbXNbMzJdOyAgLypzdXBwb3J0IGF0IG1vc3QgMzIgZ3B0aW1lciovCisgICBncHRfZnVuYyAgICAgICBHUFRfRlVOQzsKKyAgIGthbF9oaXNyaWQgICAgIGhpc3I7Cit9IEdQVFN0cnVjdDsgCisjZW5kaWYKKyNpZiBkZWZpbmVkKERDTF9ERUZJTklUSU9OX1BST1RPVFlQRSkKKyNpZm5kZWYgX19EQ0xfR1BUX0hfUFJPVE9UWVBFX18KKyNkZWZpbmUgX19EQ0xfR1BUX0hfUFJPVE9UWVBFX18KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsU0dQVF9Jbml0aWFsaXplCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGluaXRpYWxpemUgU1cgR1BUIG1vZHVsZS4gCisqCisqIFBBUkFNRVRFUlMKKyoJRENMX1NUQVRVU19PSworKgorKiBSRVRVUk5TCisqICBub25lCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU0dQVF9Jbml0aWFsaXplKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsU0dQVF9PcGVuCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIG9wZW4gdGhlIFNXIEdQVCBtb2R1bGUgYW5kIGdldCBhIGhhbmRsZS4gCisqICBOb3RlIHRoYXQgZm9yIERDTF9HUFRfQ0IsIG11bHRpcGxlIG9wZW5zIGFyZSBhbGxvd2VkLkZvciBEQ0xfR1BUX0J1c3lXYWl0LCBNdWx0aXBsZSBvcGVucyBhcmUgbm90IHN1cHBvcnQuCisqCisqIFBBUkFNRVRFUlMKKyoJZURldjogb25seSB2YWxpZCBmb3IgRENMX0dQVF9DQiBEQ0xfR1BUX0J1c3lXYWl0CisqCWZsYWdzOiBubyBzZXBjaWFsIGZsYWdzIGlzIG5lZWRlZC4gUGxlYXNlIHVzZSBGTEFHU19OT05FCisqCisqIFJFVFVSTiBWQUxVRVMKKyoJRENMX0hBTkRMRV9JTlZBTElEOiBPcGVuIGZhaWxlZC4KKyogIG90aGVyIHZhbHVlOiBPcGVuIHN1Y2Nlc3MsIHJldHVybiBhIGEgdmFsaWQgaGFuZGxlCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9IQU5ETEUgRGNsU0dQVF9PcGVuKERDTF9ERVYgZGV2LCBEQ0xfRkxBR1MgZmxhZ3MpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsU0dQVF9SZWFkRGF0YQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgU1cgR1BUIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTiBWQUxVRVMKKyoJU1RBVFVTX1VOU1VQUE9SVEVEOiAKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTR1BUX1JlYWREYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOICpidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFNHUFRfV3JpdGVEYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBTVyBHUFQgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOIFZBTFVFUworKglTVEFUVVNfVU5TVVBQT1JURUQ6IAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNHUFRfV3JpdGVEYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOICpidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFNHUFRfQ29uZmlndXJlCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBTVyBHUFQgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOIFZBTFVFUworKglTVEFUVVNfVU5TVVBQT1JURUQ6IAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNHUFRfQ29uZmlndXJlKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQ09ORklHVVJFX1QgKmNvbmZpZ3VyZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xTR1BUX1JlZ2lzdGVyQ2FsbGJhY2sKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlIFNXIEdQVCBtb2R1bGUgbm93LgorKgorKiBQQVJBTUVURVJTCisqCU4vQQorKgorKiBSRVRVUk4gVkFMVUVTCisqCVNUQVRVU19VTlNVUFBPUlRFRDogCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU0dQVF9SZWdpc3RlckNhbGxiYWNrKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfRVZFTlQgZXZlbnQsIFBGTl9EQ0xfQ0FMTEJBQ0sgY2FsbGJhY2spOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsU0dQVF9Db250cm9sCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIHNlbmQgY29tbWFuZCB0byBjb250cm9sIHRoZSBTVyBHUFQgbW9kdWxlLgorKgorKiBOb3csIHdlIHN1cHBvcnQgdHdvIGtpbmQgb2YgR1BUIGZ1bmN0aW9uLgorKiBGb3IgRENMX0dQVF9DQiB0aW1lciwgeW91IGNhbiByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggc29tZSB0aWNrIHdhaXRpbmcgdG8gcnVuLihhIHRpY2sgaXMgMTBtcykKKyogd2hlbiB0aW1lb3V0ICx0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBydW4gaW4gRFJWX0hJU1IuCisqCisqIEZvciBEQ0xfR1BUX0J1c3lXYWl0LCBZb3UgY2FuIGNhbGwgRGNsU0dQVF9Db250cm9sIHdpdGggU0dQVF9DTURfQlVTWVdBSVQgY29tbWFuZCwgdGhlIHByb2dyYW1tIHdpbGwgYmUgbG9vcCBpbiB0aGlzCisqIGZ1bmN0aW9uIHVudGlsIHRpbWVvdXQuIChhIGJ1c3l3YWl0IHRpY2sgaXMgMW1zKS4KKyoKKyogUEFSQU1FVEVSUworKgloYW5kbGU6IGEgdmFsaWQgaGFuZGxlIHJldHVybiBieSBEY2xTR1BUX09wZW4oKQorKiAgY21kOiBhIGNvbnRyb2wgY29tbWFuZCBmb3IgR1BUIG1vZHVsZQorKiAgICAgICAgICAxLiBTR1BUX0NNRF9TVEFSVCAtIHRvIHN0YXJ0IGEgR1BUIHRpbWVyCisqICAgICAgICAgIDIuIFNHUFRfQ01EX1NUT1AtIHRvIHN0b3AgYSBHUFQgdGltZXIKKyogICAgICAgICAgMy4gU0dQVF9DTURfQlVTWVdBSVQgLSB0byBzdGFydCBHUFQgQnVzeXdhaXQgZnVuY3Rpb24uCisqICBkYXRhOiAgZGF0YSBzdHJ1Y3R1cmUgZm9yIGNvbnRyb2wgY29tbWFuZC4KKyogICAgICAgICAgICAgMS4gU0dQVF9DTURfU1RBUlQtIHBvaW50ZXIgdG8gYSBTR1BUX0NUUkxfU1RBUlRfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgICAgMi4gU0dQVF9DTURfU1RPUC0gYSBOVUxMIHBvaW50ZXIKKyoJCQkJCQkJMy4gU0dQVF9DTURfQlVTWVdBSVQgLSBhIHBvaW50ZXIgdG8gR1BUX0JVU1lXQUlUX0NPVU5UOworKgorKiBSRVRVUk4gVkFMVUVTCisqCVNUQVRVU19PSzogY29tbWFuZCBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisqCVNUQVRVU19GQUlMOiAgY29tbWFuZCBpcyBmYWlsZWQuCisqIERDTF9IQU5ETEVfSU5WQUxJRDogIEl0J3MgYSBpbnZhaWxkIGhhbmRsZS4KKyogU1RBVFVTX0lOVkFMSURfQ01EOiBJdCdzIGEgaW52YWxpZCBjb21tYW5kLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNHUFRfQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFNHUFRfQ2xvc2UKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gY2xvc2UgdGhlIFNXIEdQVCBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyoJaGFuZGxlOiAgIGhhbmxkZSBwcmV2aW91cyBnb3QgZnJvbSBEY2xTR1BUX09wZW4oKQorKgorKiBSRVRVUk4gVkFMVUVTCisqCURDTF9TVEFUVVNfT0s6IHN1Y2Nlc3NmdWxseSBjbG9zZSB0aGUgU1cgR1BUIG1vZHVsZS4KKyoJRENMX1NUQVRVU19mYWlsOiBmYWlscyB0byBjbG9zZSB0aGUgU1cgR1BUIG1vZHVsZS4KKyogU1RBVFVTX0lOVkFMSURfSEFORExFOiBpbnZhbGlkIGhhbmRsZS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTR1BUX0Nsb3NlKERDTF9IQU5ETEUgKmhhbmRsZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xGR1BUX0luaXRpYWxpemUKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gaW5pdGlhbGl6ZSB0aGUgZnJlZSBydW4gR1BUIG1vZHVsZS4KKyoKKyogUEFSQU1FVEVSUworKglOb25lCisqCisqIFJFVFVSTiBWQUxVRVMKKyoJRENMX1NUQVRVU19PSworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbEZHUFRfSW5pdGlhbGl6ZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbEZHUFRfT3BlbgorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBvcGVuIGEgZnJlZSBydW4gR1BUIG1vZHVsZSBpZiBpdCBleGlzdHMuIE5vdGUgCisqIHRoYXQgaXQgc3VwcG9ydHMgbXVsdGlwbGUgb3BlbnMgYW5kIG5vIG5lZWQgdG8gY2xvc2UgaXQuCisqCisqIFBBUkFNRVRFUlMKKyoJZURldjogb25seSB2YWxpZCBmb3IgIDxEQ0xfR1BUX0ZyZWVSVU4zICYgRENMX0dQVF9GcmVlUlVOND4KKyoJZmxhZ3M6IG5vIHNlcGNpYWwgZmxhZ3MgaXMgbmVlZGVkLiBQbGVhc2UgdXNlIEZMQUdTX05PTkUKKyoKKyogUkVUVVJOIFZBTFVFUworKglEQ0xfSEFORExFX0lOVkFMSUQ6IE9wZW4gZmFpbGVkLiBJdCBtZWFucyBubyBmcmVlIHJ1biBHUFQgZXhpc3RzIG9yIAorKiAgICAgICAgICAgICAgICAgICAgICAgb3BlbiBhIHdyb25nIGRldmljZS4KKyogIG90aGVyIHZhbHVlOiBhIHZhbGlkIGhhbmRsZQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfSEFORExFIERjbEZHUFRfT3BlbihEQ0xfREVWIGRldiwgRENMX0ZMQUdTIGZsYWdzKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbEZHUFRfUmVhZERhdGEKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlIGZyZWUgcnVuIEdQVCBtb2R1bGUgbm93LgorKgorKiBQQVJBTUVURVJTCisqCU4vQQorKgorKiBSRVRVUk5TCisqCVNUQVRVU19VTlNVUFBPUlRFRAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbEZHUFRfUmVhZERhdGEoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9CVUZGICpidWZmLCBEQ0xfQlVGRl9MRU4gKmJ1Zl9sZW4sIERDTF9PUFRJT05TIG9wdGlvbnMpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsRkdQVF9Xcml0ZURhdGEKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlIGZyZWUgcnVuIEdQVCBtb2R1bGUgbm93LgorKgorKiBQQVJBTUVURVJTCisqCU4vQQorKgorKiBSRVRVUk5TCisqCVNUQVRVU19VTlNVUFBPUlRFRAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbEZHUFRfV3JpdGVEYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOICpidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbEZHUFRfQ29uZmlndXJlCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBmcmVlIHJ1biBHUFQgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xGR1BUX0NvbmZpZ3VyZShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NPTkZJR1VSRV9UICpjb25maWd1cmUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsRkdQVF9SZWdpc3RlckNhbGxiYWNrCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBmcmVlIHJ1biBHUFQgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xGR1BUX1JlZ2lzdGVyQ2FsbGJhY2soRENMX0hBTkRMRSBoYW5kbGUsIERDTF9FVkVOVCBldmVudCwgUEZOX0RDTF9DQUxMQkFDSyBjYWxsYmFjayk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xGR1BUX0NvbnRyb2wKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gc2VuZCBjb21tYW5kIHRvIGNvbnRyb2wgdGhlIGZyZWUgcnVuIEdQVCBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyoJaGFuZGxlOiBhIHZhbGlkIGhhbmRsZSByZXR1cm4gYnkgRGNsRkdQVF9PcGVuKCkKKyogIGNtZDogIGEgY29udHJvbCBjb21tYW5kIGZvciBmcmVlIHJ5YiBHUFQgbW9kdWxlCisqCQkJCQkxLiBGR1BUX0NNRF9TVEFSVCAtIHRvIHN0YXJ0IGZyZWUgcnVuIGdwdCB0aW1lcgorKgkJCQkJMi4gRkdQVF9DTURfU1RPUCAtIHRvIHN0b3AgZnJlZSBydW4gZ3B0IHRpbWVyCisqICAgICAgICAgMy4gIEZHUFRfQ01EX1JFVFVSTl9DT1VOVCAtIHRvIGdldCB0aGUgdGltZXIgY291bnQKKyogIGRhdGE6ICAKKyoJIDEuIEZHUFRfQ01EX1JFVFVSTl9DT1VOVC0gcG9pbnRlciB0byBhIEZHUFRfQ1RSTF9SRVRVUk5fQ09VTlRfVCB0eXBlCisqICAyLiBGR1BUX0NNRF9TVEFSVCAtIHBvaW50ZXIgdG8gbnVsbAorKiAgMy4gRkdQVF9DTURfU1RPUCAtcG9pbnRlciB0byBudWxsCisqCisqIFJFVFVSTiBWQUxVRVMKKyoJU1RBVFVTX09LOiAgY29tbWFuZCBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisqCVNUQVRVU19GQUlMOiAgY29tbWFuZCBpcyBmYWlsZWQuIE5vIGZyZWUgcnVuIEdQVCBpcyBzdXBwb3J0ZWQuCisqICBTVEFUVVNfSU5WQUxJRF9DTUQ6ICBUaGUgY29tbWFuZCBpcyBpbnZhbGlkLgorKiAgU1RBVFVTX0lOVkFMSURfSEFORExFOiBUaGUgaGFuZGxlIGlzIGludmFsaWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsRkdQVF9Db250cm9sKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQ1RSTF9DTUQgY21kLCBEQ0xfQ1RSTF9EQVRBX1QgKmRhdGEpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsRkdQVF9DbG9zZQorKgorKiBERVNDUklQVElPTgorKiAgIFRoaXMgZnVuY3Rpb24gaXMgdG8gY2xvc2UgdGhlIFNXIEdQVCBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyoJaGFuZGxlOiAgIGhhbmxkZSBwcmV2aW91cyBnb3QgZnJvbSBEY2xTR1BUX09wZW4oKQorKgorKiBSRVRVUk4gVkFMVUVTCisqCURDTF9TVEFUVVNfT0s6IHN1Y2Nlc3NmdWxseSBjbG9zZSB0aGUgU1cgR1BUIG1vZHVsZS4KKyoJRENMX1NUQVRVU19mYWlsOiBmYWlscyB0byBjbG9zZSB0aGUgU1cgR1BUIG1vZHVsZS4KKyogU1RBVFVTX0lOVkFMSURfSEFORExFOiBpbnZhbGlkIGhhbmRsZS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xGR1BUX0Nsb3NlKERDTF9IQU5ETEUgaGFuZGxlKTsKKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfR1BUX0hfUFJPVE9UWVBFX18KKyNlbmRpZiAvLyAjaWZkZWYgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfaTJjLmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzYzYTUwCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfaTJjLmgKQEAgLTAsMCArMSw1MTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGRjbF9pMmMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgSGVhZGVyIGZpbGUgb2YgRENMIChEcml2ZXIgQ29tbW9uIExheWVyKSBmb3IgSTJDLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9TVFJVQ1QKKyNpZm5kZWYgX19EQ0xfSTJDX0hfU1RSVUNUX18KKyNkZWZpbmUgX19EQ0xfSTJDX0hfU1RSVUNUX18KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9PUFRJT05TIGZvciBJMkMsIG5vdCBpbiB1c2Ugbm93LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEkyQ19PUFRJT05TCisKKyNpbmNsdWRlICJkY2xfaTJjX293bmVyLmgiCisKKyAvKiBJMkMgVHJhbnNhY3Rpb24gTW9kZSovCit0eXBlZGVmIGVudW0KK3sKKyAgIERDTF9JMkNfVFJBTlNBQ1RJT05fRkFTVF9NT0RFLCAvKiBGYXN0IE1vZGU6IDwgNDAwa2JwcyAqLworICAgRENMX0kyQ19UUkFOU0FDVElPTl9ISUdIX1NQRUVEX01PREUgLyogSGlnbiBTcGVlZCBNb2RlOiA+IDQwMGticHMgKi8KK31EQ0xfSTJDX1RSQU5TQUNUSU9OX01PREU7CisKKy8qIFRyYW5zYWN0aW9uIFR5cGUsIGZvciBiYXRjaCB0cmFuc2FjdGlvbiB1c2UqLwordHlwZWRlZiBlbnVtCit7CisJRENMX0kyQ19UUkFOU0FDVElPTl9XUklURSwgLyogU2luZ2xlIHdyaXRlICovCisJRENMX0kyQ19UUkFOU0FDVElPTl9SRUFELCAvKiBTaW5nbGUgcmVhZCAqLworCURDTF9JMkNfVFJBTlNBQ1RJT05fQ09OVF9XUklURSwgLyogQ29udGludWUgd3JpdGUgKi8KKwlEQ0xfSTJDX1RSQU5TQUNUSU9OX0NPTlRfUkVBRCwgLyogQ29udGludWUgcmVhZCAqLworCURDTF9JMkNfVFJBTlNBQ1RJT05fV1JJVEVfQU5EX1JFQUQgLyogV3JpdGUgYW5kIHJlYWQuIE5vdGU6IFRoaXMgY29tbWFuZCBjYW4gbm90IGJlIHVzZWQsIHdoZW4gdXNpbmcgRE1BIHRvIHRyYW5zZmVyIGJ1dCBkcml2ZXIgY2FuIG9ubHkgc3VwcG9ydCBEQ0xfSTJDX0RNQV9TSU5HTEVfQ0hBTk5FTC4gKi8KK31EQ0xfSTJDX1RSQU5TQUNUSU9OX1RZUEU7CisKKy8qIFRyYW5zYWN0aW9uIHJlc3VsdCwgZm9yIGJhdGNoIHRyYW5zYWN0aW9uIHF1ZXJ5ICovCit0eXBlZGVmIGVudW0KK3sKKyAgIERDTF9JMkNfQkFUQ0hfVFJBTlNBQ1RJT05fU1VDQ0VTUywgLyogVGhlIHByaW9yIGJhdGNoIHRyYW5zYWN0aW9uIGlzIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZCAqLworICAgRENMX0kyQ19CQVRDSF9UUkFOU0FDVElPTl9GQUlMLCAvKiBTb21ldGhpbmcgd3Jvbmcgd2FzIGhhcHBlbmVkIGR1cmluZyB0aGUgcHJpb3IgYmF0Y2ggdHJhbnNhY3Rpb24gKi8KKyAgIERDTF9JMkNfQkFUQ0hfVFJBTlNBQ1RJT05fSVNfQlVTWSAvKiBJMkMgYnVzIGlzIG9jY3VwaWVkIG5vdyAqLworfURDTF9JMkNfQkFUQ0hfVFJBTlNBQ1RJT05fUkVTVUxUOworCisvKiBETUEgcHJvcGVydHkgdGhhdCBkcml2ZXIgc3VwcG9ydCwgZm9yIHVzZXIgcXVlcnkgKi8KK3R5cGVkZWYgZW51bQoreworICAgRENMX0kyQ19ETUFfTk9UX1NVUFBPUlQsIC8qIERyaXZlciBkbyBub3Qgc3VwcG9ydCBETUEgKi8KKyAgIERDTF9JMkNfRE1BX0RVQUxfQ0hBTk5FTCwgLyogRHJpdmVyIHN1cHBvcnQgZHVhbCBjaGFubmVsIERNQSBtb2RlICovCisgICBEQ0xfSTJDX0RNQV9TSU5HTEVfQ0hBTk5FTCAvKiBEcml2ZXIgc3VwcG9ydCBzaW5nbGUgY2hhbm5lbCBETUEgbW9kZSwgbm90IHN1cHBvcnQgV1JJVEVfQU5EX1JFQUQgd2hlbiBETUEgaXMgZW5hYmxlZCAqLworfURDTF9JMkNfRE1BX1BST1BFUlRZOworCisvKiBEQ0wgSTJDIGNvbmZpZ3VyZSBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfSTJDX09XTkVSIGVPd25lcjsgLyogVGhlIG93bmVyIG9mIEkyQywgZGVmaW5lZCBpbiBEQ0xfSTJDX09XTkVSICovCisgICBEQ0xfQk9PTCBmZ0dldEhhbmRsZVdhaXQ7IC8qIEtBTF9UUlVFOiB3YWl0IHVudGlsIEkyQyBpcyBpZGxlOyBLQUxfRkFMU0U6IGRvIG5vdCB3YWl0ICovCisgICBEQ0xfVUlOVDggdTFTbGF2ZUFkZHJlc3M7IC8qIFNsYXZlIGFkZHJlc3MgKi8KKyAgIERDTF9VSU5UOCB1MURlbGF5TGVuOyAvKiBXYWl0IGRlbGF5IGJldHdlZW4gY29uc2VjdXRpdmUgdHJhbnNmZXJzICh0aGUgdW5pdCBpcyBoYWxmIHB1bHNlIHdpZHRoKSAqLworICAgRENMX0kyQ19UUkFOU0FDVElPTl9NT0RFIGVUcmFuc2FjdGlvbk1vZGU7IC8qIEZhc3QgbW9kZSBvciBoaWdoIHNwZWVkIG1vZGUgKi8KKyAgIERDTF9VSU5UMzIgdTRGYXN0TW9kZVNwZWVkOyAvKiBUaGUgdHJhbnNmZXIgc3BlZWQgdW5kZXIgZmFzdCBtb2RlLiBCdXQgZXZlbiB1bmRlciBoaWdoIHNwZWVkIG1vZGUsIHlvdSBzaG91bGQgYWxzZSBjb25maWd1cmUgdGhpcyBwYXJhbWV0ZXIgKi8KKyAgIERDTF9VSU5UMzIgdTRIU01vZGVTcGVlZDsgLyogVGhlIHRyYW5zZmVyIHNwZWVkIHVuZGVyIGhpZ2ggc3BlZWQgbW9kZSAqLworICAgRENMX0JPT0wgZmdFbmFibGVETUE7IC8qIEtBTF9UUlVFOiB1c2UgRE1BIHRvIHRyYW5zZmVyIGRhdGE7IEtBTF9GQUxTRTogZG8gbm90IHVzZSBETUEuIE5vdGU6IE1ha2Ugc3VyZSBkcml2ZXIgc3VwcG9ydCBETUEgbW9kZSBiZWZvcmUgeW91IHVzZSBpdC4gKi8KK30gSTJDX0NPTkZJR19UOworCisvKiBEQ0xfQ09ORklHVVJFX1QgZm9yIEkyQy4gKi8KKyNkZWZpbmUgSTJDX0NPTkZJR1MgXAorICAgSTJDX0NPTkZJR19UIHJJMkNDb2ZpZzsKKworLyogRENMX0VWRU5UIGZvciBJMkMsIG5vdCBpbiB1c2Ugbm93LiAqLworI2RlZmluZSBJMkNfRVZFTlRTCisKKyNpZmRlZiBfX0JVSUxEX0RPTV9fCisvKiBEQ0xfQ1RSTF9DTUQgZm9yIEkyQyAqLwordHlwZWRlZiBlbnVtCit7CisgICBJMkNfQ01EX0dFVF9UUkFOU0FDVElPTl9NT0RFLCAvKiBHZXQgdHJhbnNhY3Rpb24gbW9kZSAqLworICAgSTJDX0NNRF9TRVRfVFJBTlNBQ1RJT05fU1BFRUQsIC8qIFNldCB0cmFuc2FjdGlvbiBzcGVlZCAqLworICAgSTJDX0NNRF9TSU5HTEVfV1JJVEUsIC8qIFNpbmdsZSB3cml0ZSBvZiBibG9ja2luZyBtb2RlICovCisgICBJMkNfQ01EX1NJTkdMRV9SRUFELCAvKiBTaW5nbGUgcmVhZCBvZiBibG9ja2luZyBtb2RlICovCisgICBJMkNfQ01EX0NPTlRfV1JJVEUsIC8qIENvbnRpbnVlIHdyaXRlIG9mIGJsb2NraW5nIG1vZGUgKi8KKyAgIEkyQ19DTURfQ09OVF9SRUFELCAvKiBDb250aW51ZSByZWFkIG9mIGJsb2NraW5nIG1vZGUgKi8KKyAgIEkyQ19DTURfV1JJVEVfQU5EX1JFQUQsIC8qIFdyaXRlIGFuZCByZWFkIG9mIGJsb2NraW5nIG1vZGUgKi8KKyAgIEkyQ19DTURfQkFUQ0hfVFJBTlNBQ1RJT04sIC8qIEJhdGNoIHRyYW5zYWN0aW9uIHdoaWNoIHN1cHBvcnQgbm9uLWJsb2NraW5nIG1vZGUgKi8KKyAgIEkyQ19DTURfR0VUX0JBVENIX1RSQU5TQUNUSU9OX1JFU1VMVCwgLyogUXVlcnkgdGhlIHByaW9yIGJhdGNoIHRyYW5zYWN0aW9uIHJlc3VsdCAqLworICAgSTJDX0NNRF9HRVRfRE1BX1BST1BFUlRZLCAvKiBHZXQgdGhlIERNQSBwcm9wZXJ0eSB3aGljaCBkcml2ZXIgc3VwcG9ydCAqLworICAgSTJDX0NNRF9FTkFCTEVfRE1BLCAvKiBVc2UgRE1BIHRvIHRyYW5zZmVyIGRhdGEuIE5vdGU6IEJlZm9yZSB5b3UgZG8gdGhpcywgcGxlYXNlIG1ha2Ugc3VyZSB0aGF0IGRyaXZlciBzdXBwb3J0IERNQSBtb2RlICovCisgICBJMkNfQ01EX1NFVF9TTEFWRV9BRERSRVNTIC8qIFNldCB0aGUgc2xhdmUgYWRkcmVzcyBvZiBzZW5zb3IgKi8KK31EQ0xfQ1RSTF9DTURfVDsKKyNlbHNlIAorI2RlZmluZSBJMkNfQ01EUyBcCisgICBJMkNfQ01EX0dFVF9UUkFOU0FDVElPTl9NT0RFLCBcCisgICBJMkNfQ01EX1NFVF9UUkFOU0FDVElPTl9TUEVFRCwgXAorICAgSTJDX0NNRF9TSU5HTEVfV1JJVEUsIFwKKyAgIEkyQ19DTURfU0lOR0xFX1JFQUQsIFwKKyAgIEkyQ19DTURfQ09OVF9XUklURSwgXAorICAgSTJDX0NNRF9DT05UX1JFQUQsIFwKKyAgIEkyQ19DTURfV1JJVEVfQU5EX1JFQUQsIFwKKyAgIEkyQ19DTURfQkFUQ0hfVFJBTlNBQ1RJT04sIFwKKyAgIEkyQ19DTURfR0VUX0JBVENIX1RSQU5TQUNUSU9OX1JFU1VMVCwgXAorICAgSTJDX0NNRF9HRVRfRE1BX1BST1BFUlRZLCBcCisgICBJMkNfQ01EX0VOQUJMRV9ETUEsIFwKKyAgIEkyQ19DTURfU0VUX1NMQVZFX0FERFJFU1MsIAorI2VuZGlmIC8qIF9fQlVJTERfRE9NX18gKi8KKworLyogRm9yIEkyQ19DTURfR0VUX1RSQU5TQUNUSU9OX01PREUgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfSTJDX1RSQU5TQUNUSU9OX01PREUgZVRyYW5zYWN0aW9uTW9kZTsgLyogVHJhbnNhY3Rpb24gbW9kZSAqLworfUkyQ19DVFJMX0dFVF9UUkFOU0FDVElPTl9NT0RFX1Q7CisvKiBGb3IgSTJDX0NNRF9TRVRfVFJBTlNBQ1RJT05fU1BFRUQgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfSTJDX1RSQU5TQUNUSU9OX01PREUgZVRyYW5zYWN0aW9uTW9kZTsgLyogVHJhbnNhY3Rpb24gbW9kZSAqLworICAgRENMX1VJTlQzMiB1NEZhc3RNb2RlU3BlZWQ7IC8qIEZhc3QgbW9kZSBzcGVlZCAqLworICAgRENMX1VJTlQzMiB1NEhTTW9kZVNwZWVkOyAvKiBIaWdoIHNwZWVkIG1vZGUgc3BlZWQgKi8KK31JMkNfQ1RSTF9TRVRfVFJBTlNBQ1RJT05fU1BFRURfVDsKKy8qIEZvciBJMkNfQ01EX1NJTkdMRV9XUklURSwgSTJDX0NNRF9TSU5HTEVfUkVBRCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9VSU5UOCAqcHUxRGF0YTsgLyogUG9pbnRlciB0byB0aGUgYnVmZmVyIG9mIGRhdGEgKi8KKyAgIERDTF9VSU5UMzIgdTREYXRhTGVuOyAvKiBEYXRhIGxlbmd0aCAqLworfUkyQ19DVFJMX1NJTkdMRV9XUklURV9ULCBJMkNfQ1RSTF9TSU5HTEVfUkVBRF9UOworLyogRm9yIEkyQ19DTURfQ09OVF9XUklURSwgSTJDX0NNRF9DT05UX1JFQUQgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDggKnB1MURhdGE7IC8qIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBvZiBkYXRhICovCisgICBEQ0xfVUlOVDMyIHU0RGF0YUxlbjsgLyogRGF0YSBsZW5ndGggb2YgZWFjaCB0cmFuc2ZlciAqLworICAgRENMX1VJTlQzMiB1NFRyYW5zZmVyTnVtOyAvKiBUcmFuc2ZlciBudW1iZXIgKi8KK31JMkNfQ1RSTF9DT05UX1dSSVRFX1QsIEkyQ19DVFJMX0NPTlRfUkVBRF9UOworLyogRm9yIEkyQ19DTURfV1JJVEVfQU5EX1JFQUQgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDggKnB1MUluRGF0YTsgLyogUG9pbnRlciB0byB0aGUgcmVhZCBkYXRhICovCisgICBEQ0xfVUlOVDMyIHU0SW5EYXRhTGVuOyAvKiBSZWFkIGRhdGEgbGVuZ3RoICovCisgICBEQ0xfVUlOVDggKnB1MU91dERhdGE7IC8qIFBvaW50ZXIgdG8gdGhlIHdyaXRlIGRhdGEgKi8KKyAgIERDTF9VSU5UMzIgdTRPdXREYXRhTGVuOyAvKiBXcml0ZSBkYXRhIGxlbmd0aCAqLworfUkyQ19DVFJMX1dSSVRFX0FORF9SRUFERV9UOworLyogRm9yIEkyQ19DVFJMX0JBVENIX0RBVEFfVCBzdHJ1Y3R1cmUuICovCit0eXBlZGVmIHVuaW9uCit7CisJSTJDX0NUUkxfU0lOR0xFX1dSSVRFX1QgclNpbmdsZVdyaXRlOyAvKiBTaW5nbGUgd3JpdGUgKi8KKyAgSTJDX0NUUkxfU0lOR0xFX1JFQURfVCByU2luZ2xlUmVhZDsgLyogU2luZ2xlIHJlYWQgKi8KKyAgSTJDX0NUUkxfQ09OVF9XUklURV9UIHJDb250V3JpdGU7IC8qIENvbnRpbnVlIHdyaXRlICovCisgIEkyQ19DVFJMX0NPTlRfUkVBRF9UIHJDb250UmVhZDsgLyogQ29udGludWUgcmVhZCAqLworICBJMkNfQ1RSTF9XUklURV9BTkRfUkVBREVfVCByV3JpdGVBbmRSZWFkOyAvKiBXcml0ZSBhbmQgcmVhZC4gTm90ZTogdGhpcyBjb21tYW5kIGNhbiBub3QgYmUgdXNlZCwgd2hlbiB1c2luZyBETUEgdG8gdHJhbnNmZXIgYnV0IGRyaXZlciBjYW4gb25seSBzdXBwb3J0IERDTF9JMkNfRE1BX1NJTkdMRV9DSEFOTkVMLiAqLworfUkyQ19DVFJMX1RSQU5TQUNUSU9OX0RBVEFfVDsKKy8qIEZvciBJMkNfQ1RSTF9CQVRDSF9UUkFOU0FDVElPTl9UIHN0cnVjdHVyZS4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfSTJDX1RSQU5TQUNUSU9OX1RZUEUgZVRyYW5zYWN0aW9uVHlwZTsgLyogVHJhbnNhY3Rpb24gdHlwZSAqLworICAgSTJDX0NUUkxfVFJBTlNBQ1RJT05fREFUQV9UIHJUYW5zYWN0aW9uRGF0YTsgLyogQmF0Y2ggdHJhbnNhY3Rpb24gZGF0YSBvZiBjb3JyZXNwb25kaW5nIHRyYW5zYWN0aW9uIHR5cGUgKi8KK31JMkNfQ1RSTF9CQVRDSF9EQVRBX1Q7CisvKiBGb3IgSTJDX0NNRF9CQVRDSF9UUkFOU0FDVElPTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9VSU5UMzIgdTRCYXRjaE51bTsgLyogTnVtYmVyIG9mIGJhdGNoZXMgb2YgdGhpcyBiYXRjaCB0cmFuc2FjdGlvbiAqLworICAgSTJDX0NUUkxfQkFUQ0hfREFUQV9UICpwckJhdGNoRGF0YTsgLyogUG9pbnRlciB0byB0aGUgYnVmZmVyIHdoZXJlIHN0b3JlZCB0aGUgYmF0Y2hlcyBkYXRhKi8KK31JMkNfQ1RSTF9CQVRDSF9UUkFOU0FDVElPTl9UOworLyogRm9yIEkyQ19DTURfR0VUX0JBVENIX1RSQU5TQUNUSU9OX1JFU1VMVCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9JMkNfQkFUQ0hfVFJBTlNBQ1RJT05fUkVTVUxUIGVCYXRjaFRyYW5zYWN0aW9uUmVzdWx0OyAvKiBCYXRjaCB0cmFuc2FjdGlvbiByZXN1bHQgKi8KKyAgIERDTF9VSU5UMzIgdTRCYXRjaE51bTsgIC8qIFRoZSBudW1iZXIgb2YgQmF0Y2hlcyBoYXZlIGJlZW4gdHJhbnNmZXJyZWQgc3VjY2Vzc2Z1bGx5ICovCit9STJDX0NUUkxfR0VUX0JBVENIX1RSQU5TQUNUSU9OX1JFU1VMVF9UOworLyogRm9yIEkyQ19DTURfR0VUX0RNQV9QUk9QRVJUWSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9JMkNfRE1BX1BST1BFUlRZIGVETUFQcm9wZXJ0eTsgLyogRE1BIHByb3BlcnR5ICovCit9STJDX0NUUkxfR0VUX0RNQV9QUk9QRVJUWV9UOworLyogRm9yIEkyQ19DTURfRU5BQkxFX0RNQSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9CT09MIGZnRW5hYmxlRE1BOyAvKiBLQUxfVFJVRTogdXNlIERNQSB0byB0cmFuc2ZlciBkYXRhOyBLQUxfRkFMU0U6IGRvIG5vdCB1c2UgRE1BLiBOb3RlOiBNYWtlIHN1cmUgZHJpdmVyIHN1cHBvcnQgRE1BIG1vZGUgYmVmb3JlIHlvdSB1c2UgaXQuICovCit9STJDX0NUUkxfRU5BQkxFX0RNQV9UOworLyogRm9yIEkyQ19DTURfU0VUX1NMQVZFX0FERFJFU1MgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDggdTFTbGF2ZUFkZHJlc3M7IC8qIFNsYXZlIGFkZHJlc3MgKi8KK31JMkNfQ1RSTF9TRVRfU0xBVkVfQUREUkVTU19UOworCisjaWZkZWYgX19CVUlMRF9ET01fXworLyogRENMX0NUUkxfREFUQV9UIGZvciBJMkM6IERlZmluZSB0aGUgQ29udHJvbCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBjb21tYW5kICovIAordHlwZWRlZiB1bmlvbgoreworICAgSTJDX0NUUkxfR0VUX1RSQU5TQUNUSU9OX01PREVfVCByR2V0VHJhbnNhY3Rpb25Nb2RlOyAvKiBHZXQgdHJhbnNhY3Rpb24gbW9kZSAqLworICAgSTJDX0NUUkxfU0VUX1RSQU5TQUNUSU9OX1NQRUVEX1QgclNldFRyYW5zYWN0aW9uU3BlZWQ7IC8qIFNldCB0cmFuc2FjdGlvbiBzcGVlZCAqLworICAgSTJDX0NUUkxfU0lOR0xFX1dSSVRFX1QgclNpbmdsZVdyaXRlOyAvKiBTaW5nbGUgd3JpdGUgb2YgYmxvY2tpbmcgbW9kZSAqLworICAgSTJDX0NUUkxfU0lOR0xFX1JFQURfVCByU2luZ2xlUmVhZDsgLyogU2luZ2xlIHJlYWQgb2YgYmxvY2tpbmcgbW9kZSAqLworICAgSTJDX0NUUkxfQ09OVF9XUklURV9UIHJDb250V3JpdGU7IC8qIENvbnRpbnVlIHdyaXRlIG9mIGJsb2NraW5nIG1vZGUgKi8KKyAgIEkyQ19DVFJMX0NPTlRfUkVBRF9UIHJDb250UmVhZDsgLyogQ29udGludWUgcmVhZCBvZiBibG9ja2luZyBtb2RlICovCisgICBJMkNfQ1RSTF9XUklURV9BTkRfUkVBREVfVCByV3JpdGVBbmRSZWFkOyAvKiBXcml0ZSBhbmQgcmVhZCBvZiBibG9ja2luZyBtb2RlICovCisgICBJMkNfQ1RSTF9CQVRDSF9UUkFOU0FDVElPTl9UIHJCYXRjaFRyYW5zYWN0aW9uOyAvKiBCYXRjaCB0cmFuc2FjdGlvbiB3aGljaCBzdXBwb3J0IG5vbi1ibG9ja2luZyBtb2RlICovCisgICBJMkNfQ1RSTF9HRVRfQkFUQ0hfVFJBTlNBQ1RJT05fUkVTVUxUX1QgckdldEJhdGNoVHJhbnNhY3Rpb25SZXN1bHQ7IC8qIFF1ZXJ5IHRoZSBwcmlvciBiYXRjaCB0cmFuc2FjdGlvbiByZXN1bHQgKi8KKyAgIEkyQ19DVFJMX0dFVF9ETUFfUFJPUEVSVFlfVCByR2V0RE1BUHJvcGVydHk7IC8qIEdldCB0aGUgRE1BIHByb3BlcnR5IHdoaWNoIGRyaXZlciBzdXBwb3J0ICovCisgICBJMkNfQ1RSTF9FTkFCTEVfRE1BX1QgckVuYWJsZURNQTsgLyogVXNlIERNQSB0byB0cmFuc2ZlciBkYXRhLiBOb3RlOiBCZWZvcmUgeW91IGRvIHRoaXMsIHBsZWFzZSBtYWtlIHN1cmUgdGhhdCBkcml2ZXIgc3VwcG9ydCBETUEgbW9kZSAqLworICAgSTJDX0NUUkxfU0VUX1NMQVZFX0FERFJFU1NfVCByU2V0U2xhdmVBZGRyZXNzOyAvKiBTZXQgc2xhdmUgYWRkcmVzcyBvZiBzZW5zb3IgKi8KK31EQ0xfQ1RSTF9EQVRBX1Q7CisjZWxzZQorI2RlZmluZSBJMkNfQ1RSTFMgXAorICAgSTJDX0NUUkxfR0VUX1RSQU5TQUNUSU9OX01PREVfVCByR2V0VHJhbnNhY3Rpb25Nb2RlOyBcCisgICBJMkNfQ1RSTF9TRVRfVFJBTlNBQ1RJT05fU1BFRURfVCByU2V0VHJhbnNhY3Rpb25TcGVlZDsgXAorICAgSTJDX0NUUkxfU0lOR0xFX1dSSVRFX1QgclNpbmdsZVdyaXRlOyBcCisgICBJMkNfQ1RSTF9TSU5HTEVfUkVBRF9UIHJTaW5nbGVSZWFkOyBcCisgICBJMkNfQ1RSTF9DT05UX1dSSVRFX1QgckNvbnRXcml0ZTsgXAorICAgSTJDX0NUUkxfQ09OVF9SRUFEX1QgckNvbnRSZWFkOyBcCisgICBJMkNfQ1RSTF9XUklURV9BTkRfUkVBREVfVCByV3JpdGVBbmRSZWFkOyBcCisgICBJMkNfQ1RSTF9CQVRDSF9UUkFOU0FDVElPTl9UIHJCYXRjaFRyYW5zYWN0aW9uOyBcCisgICBJMkNfQ1RSTF9HRVRfQkFUQ0hfVFJBTlNBQ1RJT05fUkVTVUxUX1QgckdldEJhdGNoVHJhbnNhY3Rpb25SZXN1bHQ7IFwKKyAgIEkyQ19DVFJMX0dFVF9ETUFfUFJPUEVSVFlfVCByR2V0RE1BUHJvcGVydHk7IFwKKyAgIEkyQ19DVFJMX0VOQUJMRV9ETUFfVCByRW5hYmxlRE1BOyBcCisgICBJMkNfQ1RSTF9TRVRfU0xBVkVfQUREUkVTU19UIHJTZXRTbGF2ZUFkZHJlc3M7CisjZW5kaWYgLyogX19CVUlMRF9ET01fXyAqLworCisjZW5kaWYgLy8gI2lmbmRlZiBfX0RDTF9JMkNfSF9TVFJVQ1RfXworI2VuZGlmIC8vICNpZmRlZiBEQ0xfREVGSU5JVElPTl9TVFJVQ1QgIAorCisjaWZkZWYgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisjaWZuZGVmIF9fRENMX0kyQ19IX1BST1RPVFlQRV9fCisjZGVmaW5lIF9fRENMX0kyQ19IX1BST1RPVFlQRV9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xTSTJDX0luaXRpYWxpemUKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gaW5pdGlhbGl6ZSBTL1cgSTJDIG1vZHVsZSwgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2Ugd2hlbiBkcml2ZXIgaW5pdC4KKyoKKyogUEFSQU1FVEVSUworKiAgTm9uZQorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTSTJDX0luaXRpYWxpemUodm9pZCk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsU0kyQ19PcGVuCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIG9wZW4gdGhlIEkyQyBtb2R1bGUgYW5kIHJldHVybiBhIGhhbmRsZQorKgorKiBQQVJBTUVURVJTCisqICBkZXY6IEkyQyBkZXZpY2UgSUQuIE9ubHkgdmFsaWQgZm9yIERDTF9JMkMuCisqICBmbGFnczogVXNlciBvZiBJMkMuIFNob3VsZCBiZSBvbmUgb2YgdGhlIGVudW0gRENMX0kyQ19PV05FUi4KKyoKKyogUkVUVVJOUworKiAgRENMX0hBTkRMRV9JTlZBTElEOiBJbmNvcnJlY3QgZGV2aWNlIElELgorKiAgRENMX0hBTkRMRV9PQ0NVUElFRDogVGhpcyB1c2VyIGhhcyBvcGVuZWQgYSBoYW5kbGUsIHdoaWNoIGlzIGluIHVzZS4KKyogIE90aGVyIHZhbHVlOiBBIHZhbGlkIGhhbmRsZQorKgorKiBFWEFNUExFCisqICA8Y29kZT4KKyogIERDTF9IQU5ETEUgaTJjX2hhbmRsZSA9IE5VTEw7CisqICBpZiAoTlVMTCA9PSBpMmNfaGFuZGxlKQorKiAgeworKiAgICAgIGkyY19oYW5kbGUgPSBEY2xTSTJDX09wZW4oRENMX0kyQywgRENMX0kyQ19PV05FUl9DQU1FUkEpOworKiAgfQorKiAgPC9jb2RlPgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfSEFORExFIERjbFNJMkNfT3BlbihEQ0xfREVWIGRldiwgRENMX0ZMQUdTIGZsYWdzKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xTSTJDX1JlYWREYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBJMkMgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTSTJDX1JlYWREYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOIGJ1Zl9sZW4sIERDTF9PUFRJT05TIG9wdGlvbnMpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFNJMkNfV3JpdGVEYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBJMkMgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTSTJDX1dyaXRlRGF0YShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0JVRkYgKmJ1ZmYsIERDTF9CVUZGX0xFTiBidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xTSTJDX0NvbmZpZ3VyZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBjb25maWd1cmUgdGhlIEkyQyBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogdGhlIHJldHVybmVkIGhhbmRsZSB2YWx1ZSBvZiBEY2xTSTJDX09wZW4KKyogIGNvbmZpZ3VyZTogYSBzdHJ1Y3R1cmUgd2hpY2ggaW5jbHVkZSB0aGUgSTJDIGNvbmZpZ3VyYXRpb24uICAKKyoKKyogUkVUVVJOUworKiAgU1RBVFVTX09LOiBTdWNjZXNzZnVsbHkgY29uZmlndXJlIEkyQyBtb2R1bGUuCisqICBTVEFUVVNfSU5WQUxJRF9EQ0xfSEFORExFOiBJdCdzIGEgaW52YWxpZCBoYW5kbGUuCisqICBTVEFUVVNfTk9UX09QRU5FRDogVGhlIG1vZHVsZSBoYXMgbm90IGJlZW4gb3BlbmVkLgorKiAgU1RBVFVTX0lOVkFMSURfQ09ORklHVVJBVElPTjogVGhlIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZC4KKyogIFNUQVRVU19ERVZJQ0VfTk9UX1NVUFBPUlRfRE1BOiBVc2VyIHdhbnRzIHRvIHVzZSBETUEgdHJhbnNmZXIsIGJ1dCBkcml2ZXIgZG8gbm90IHN1cHBvcnQuCisqCisqIEVYQU1QTEUKKyogIDxjb2RlPgorKiAgSTJDX0NPTkZJR19UIGNmZzsKKyogIGNmZy5lT3duZXIgPSBEQ0xfSTJDX09XTkVSX0NBTUVSQTsKKyogIGNmZy5mZ0dldEhhbmRsZVdhaXQgPSBLQUxfVFJVRTsKKyogIGNmZy51MVNsYXZlQWRkcmVzcyA9IFNMQVZFX0FERFJFU1NfSUQ7CisqICBjZmcudTFEZWxheUxlbiA9IDA7CisqICBjZmcuZVRyYW5zYWN0aW9uTW9kZSA9IERDTF9JMkNfVFJBTlNBQ1RJT05fRkFTVF9NT0RFOworKiAgY2ZnLnU0RmFzdE1vZGVTcGVlZCA9IDMwMDsKKyogIGNmZy51NEhTTW9kZVNwZWVkID0gMDsKKyogIGNmZy5mZ0VuYWJsZURNQSA9IEtBTF9GQUxTRTsKKyogIGlmIChTVEFUVVNfT0sgIT0gRGNsU0kyQ19Db25maWd1cmUoaTJjX2hhbmRsZSwgKERDTF9DT05GSUdVUkVfVCAqKSZjZmcpKQorKiAgeworKiAgICAgIEFTU0VSVCgwKTsKKyogIH0KKyogIDwvY29kZT4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTSTJDX0NvbmZpZ3VyZShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NPTkZJR1VSRV9UICpjb25maWd1cmUpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFNJMkNfUmVnaXN0ZXJDYWxsYmFjaworKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBzZXQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBJMkMgbW9kdWxlLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgSTJDIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogdGhlIHJldHVybmVkIGhhbmRsZSB2YWx1ZSBvZiBEY2xTSTJDX09wZW4KKyogIGV2ZW50OiBTdXBwb3J0ZWQgZXZlbnRzOgorKiAgY2FsbGJhY2s6IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgcmVnaXN0ZXJlZCBldmVudHMKKyoKKyogUkVUVVJOUworKiAgU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU0kyQ19SZWdpc3RlckNhbGxiYWNrKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfRVZFTlQgZXZlbnQsIFBGTl9EQ0xfQ0FMTEJBQ0sgY2FsbGJhY2spOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFNJMkNfQ29udHJvbAorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBzZW5kIGNvbW1hbmQgdG8gY29udHJvbCB0aGUgSTJDIG1vZHVsZS4KKyoKKyogUEFSQU1FVEVSUworKiAgaGFuZGxlOiBUaGUgaGFuZGxlIHZhbHVlIHJldHVybmVkIGZyb20gRGNsU0kyQ19PcGVuCisqICBjbWQ6IEEgY29udHJvbCBjb21tYW5kIGZvciBJMkMgbW9kdWxlCisqICAgICAgICAgIDEuIEkyQ19DTURfR0VUX1RSQU5TQUNUSU9OX01PREU6IHRvIGdldCB0cmFuc2FjdGlvbiBtb2RlCisqICAgICAgICAgIDIuIEkyQ19DTURfU0VUX1RSQU5TQUNUSU9OX1NQRUVEOiB0byBzZXQgdHJhbnNhY3Rpb24gc3BlZWQKKyogICAgICAgICAgMy4gSTJDX0NNRF9TSU5HTEVfV1JJVEU6IHRvIHBlcmZvcm0gYSBzaW5nbGUgV1JJVEUKKyogICAgICAgICAgNC4gSTJDX0NNRF9TSU5HTEVfUkVBRDogdG8gcGVyZm9ybSBhIHNpbmdsZSBSRUFECisqICAgICAgICAgIDUuIEkyQ19DTURfQ09OVF9XUklURTogdG8gcGVyZm9ybSBhIGNvbnRpbnVvdXMgV1JJVEUKKyogICAgICAgICAgNi4gSTJDX0NNRF9DT05UX1JFQUQ6IHRvICBwZXJmb3JtIGEgY29udGludW91cyBSRUFECisqICAgICAgICAgIDcuIEkyQ19DTURfV1JJVEVfQU5EX1JFQUQ6IHRvIHBlcmZvcm0gYSBzcGVjaWZpYyBzZXF1ZW5jZSAiV1JJVEUgdGhlbiBSRUFEIgorKiAgICAgICAgICA4LiBJMkNfQ01EX0JBVENIX1RSQU5TQUNUSU9OOiB0byBwZXJmb3JtIGEgbm9uLWJsb2NraW5nIGJhdGNoIHRyYW5zYWN0aW9uCisqICAgICAgICAgIDkuIEkyQ19DTURfR0VUX0JBVENIX1RSQU5TQUNUSU9OX1JFU1VMVDogdG8gZ2V0IGJhdGNoIHRyYW5zYWN0aW9uIHJlc3VsdAorKiAgICAgICAgICAxMC4gSTJDX0NNRF9HRVRfRE1BX1BST1BFUlRZOiB0byBnZXQgRE1BIHByb3BlcnR5CisqICAgICAgICAgIDExLiBJMkNfQ01EX0VOQUJMRV9ETUE6IHRvIGVuYWJsZS9kaXNhYmxlIERNQQorKiAgZGF0YTogVGhlIGRhdGEgb2YgdGhlIGNvbnRyb2wgY29tbWFuZAorKiAgICAgICAgICAxLiBJMkNfQ01EX0dFVF9UUkFOU0FDVElPTl9NT0RFOiBwb2ludGVyIHRvIGEgSTJDX0NUUkxfR0VUX1RSQU5TQUNUSU9OX01PREVfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgMi4gSTJDX0NNRF9TRVRfVFJBTlNBQ1RJT05fU1BFRUQ6IHBvaW50ZXIgdG8gYSBJMkNfQ1RSTF9TRVRfVFJBTlNBQ1RJT05fU1BFRURfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgMy4gSTJDX0NNRF9TSU5HTEVfV1JJVEU6IHBvaW50ZXIgdG8gYSBJMkNfQ1RSTF9TSU5HTEVfV1JJVEVfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgNC4gSTJDX0NNRF9TSU5HTEVfUkVBRDogcG9pbnRlciB0byBhIEkyQ19DVFJMX1NJTkdMRV9SRUFEX1Qgc3RydWN0dXJlCisqICAgICAgICAgIDUuIEkyQ19DTURfQ09OVF9XUklURTogcG9pbnRlciB0byBhIEkyQ19DVFJMX0NPTlRfV1JJVEVfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgNi4gSTJDX0NNRF9DT05UX1JFQUQ6IHBvaW50ZXIgdG8gYSBJMkNfQ1RSTF9DT05UX1JFQURfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgNy4gSTJDX0NNRF9XUklURV9BTkRfUkVBRDogcG9pbnRlciB0byBhIEkyQ19DVFJMX1dSSVRFX0FORF9SRUFERV9UIHN0cnVjdHVyZQorKiAgICAgICAgICA4LiBJMkNfQ01EX0JBVENIX1RSQU5TQUNUSU9OOiBwb2ludGVyIHRvIGEgSTJDX0NUUkxfQkFUQ0hfVFJBTlNBQ1RJT05fVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgOS4gSTJDX0NNRF9HRVRfQkFUQ0hfVFJBTlNBQ1RJT05fUkVTVUxUOiBwb2ludGVyIHRvIGEgSTJDX0NUUkxfR0VUX0JBVENIX1RSQU5TQUNUSU9OX1JFU1VMVF9UIHN0cnVjdHVyZQorKiAgICAgICAgICAxMC4gSTJDX0NNRF9HRVRfRE1BX1BST1BFUlRZOiBwb2ludGVyIHRvIGEgSTJDX0NUUkxfR0VUX0RNQV9QUk9QRVJUWV9UIHN0cnVjdHVyZQorKiAgICAgICAgICAxMS4gSTJDX0NNRF9FTkFCTEVfRE1BOiBwb2ludGVyIHRvIGEgSTJDX0NUUkxfRU5BQkxFX0RNQV9UIHN0cnVjdHVyZQorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0s6IGNvbW1hbmQgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorKiAgU1RBVFVTX0ZBSUw6IGNvbW1hbmQgaXMgZmFpbGVkLgorKiAgU1RBVFVTX0lOVkFMSURfQ01EOiBJdCdzIGEgaW52YWxpZCBjb21tYW5kLgorKiAgU1RBVFVTX0lOVkFMSURfRENMX0hBTkRMRTogSXQncyBhIGludmFsaWQgaGFuZGxlLgorKiAgU1RBVFVTX05PVF9PUEVORUQ6IFRoZSBtb2R1bGUgaGFzIG5vdCBiZWVuIG9wZW5lZC4KKyogIFNUQVRVU19ERVZJQ0VfSVNfQlVTWTogSTJDIGJ1cyBpcyBvY2N1cGllZCBieSBvdGhlcnMsIGJ1dCB0aGlzIHVzZXIgY2hvb3NlIG5vdCB0byB3YWl0LiBPbmx5IHZhbGlkIGZvciBibG9ja2luZyB0cmFuc2FjdGlvbiBtb2RlLgorKiAgU1RBVFVTX0FDS0VSUjogQUNLIGVycm9yIG9jY3VyZWQuIE9ubHkgdmFsaWQgZm9yIGJsb2NraW5nIHRyYW5zYWN0aW9uIG1vZGUuCisqICBTVEFUVVNfSFNfTkFDS0VSUjogTWFzdGVyIGNvZGUgbmFjayBlcnJvciBvY2N1cmVkLiBPbmx5IHZhbGlkIGZvciBibG9ja2luZyB0cmFuc2FjdGlvbiBtb2RlLgorKgorKiBFWEFNUExFCisqICA8Y29kZT4KKyogIGthbF91aW50OCBvdXRfYnVmZlszXTsKKyogIG91dF9idWZmWzBdID0gUkVHX0FERFIgPj4gODsKKyogIG91dF9idWZmWzFdID0gUkVHX0FERFI7CisqICBvdXRfYnVmZlsxXSA9IFdSVF9EQVRBOworKiAgRENMX1NUQVRVU19UIHJ0OworKiAgRENMX0NUUkxfQ01EIGNtZCA9IEkyQ19DTURfU0lOR0xFX1dSSVRFOworKiAgSTJDX0NUUkxfU0lOR0xFX1dSSVRFX1Qgd3JpdGVfZGF0YTsKKyogIHdyaXRlX2RhdGEucHUxRGF0YSA9IG91dF9idWZmOworKiAgd3JpdGVfZGF0YS51NERhdGFMZW4gPSAzOworKiAgcnQgPSBEY2xTSTJDX0NvbnRyb2woaTJjX2hhbmRsZSwgY21kLCAoRENMX0NUUkxfREFUQV9UICopJndyaXRlX2RhdGEpOworKiAgaWYgKFNUQVRVU19PSyAhPSBydCkKKyogIHsKKyogICAgICBBU1NFUlQoMCk7CisqICB9CisqICA8L2NvZGU+CisqICAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTSTJDX0NvbnRyb2woRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DVFJMX0NNRCBjbWQsIERDTF9DVFJMX0RBVEFfVCAqZGF0YSk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsU0kyQ19DbG9zZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBjbG9zZSB0aGUgSTJDIG1vZHVsZS4KKyoKKyogUEFSQU1FVEVSUworKiAgaGFuZGxlOiB0aGUgcmV0dXJuZWQgaGFuZGxlIHZhbHVlIG9mIERjbFNJMkNfT3BlbgorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0sKKyoKKyogRVhBTVBMRQorKiAgPGNvZGU+CisqICBpZiAoaTJjX2hhbmRsZSkKKyogIHsKKyogICAgICBEY2xTSTJDX0Nsb3NlKGkyY19oYW5kbGUpOworKiAgICAgIGkyY19oYW5kbGUgPSBOVUxMOworKiAgfQorKiAgPC9jb2RlPgorKiAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU0kyQ19DbG9zZShEQ0xfSEFORExFIGhhbmRsZSk7CisKKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfSTJDX0hfUFJPVE9UWVBFX18KKyNlbmRpZiAvLyAjaWZkZWYgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisKKworCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9pMmNfb3duZXIuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX2kyY19vd25lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYWQ4YWYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9pMmNfb3duZXIuaApAQCAtMCwwICsxLDE2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgc2NjYl92Ml9jdXN0b20uYworICoKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBTQ0NCL0kyQyBWMiBEcml2ZXIKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0RDTF9JMkNfQ1VTVE9NX09XTkVSX1NUUlVDVF9fCisjZGVmaW5lIF9fRENMX0kyQ19DVVNUT01fT1dORVJfU1RSVUNUX18KKworLy8jaWYgKGRlZmluZWQoRFJWX0kyQ18yNV9TRVJJRVMpKQorLy9Ob3RlOiBEQ0xfSTJDX09XTkVSIGlzIHVzZWQgaW4gZGNsX2kyYy5oLgordHlwZWRlZiBlbnVtCit7CisgICBEQ0xfSTJDX09XTkVSX0NBTUVSQT0wLAorICAgRENMX0kyQ19PV05FUl9GTSwKKyAgIERDTF9JMkNfT1dORVJfVFAsCisgICBEQ0xfSTJDX09XTkVSX01TLAorICAgRENMX0kyQ19PV05FUl9BRiwKKyAgIERDTF9JMkNfT1dORVJfQ0FNRVJBX0VFUFJPTSwKKyAgIERDTF9JMkNfT1dORVJfTVVJQywKKyAgIERDTF9JMkNfT1dORVJfTUFUViwKKyAgIERDTF9JMkNfT1dORVJfUFMsLypwcmVzc3VyZSBzZW5zb3IqLyAgCisgICBEQ0xfSTJDX09XTkVSX0VQLCAvKkVFUFJPTSovCisgICBEQ0xfSTJDX09XTkVSX0FNUywgLypNLVNlbnNvciovCisgICBEQ0xfSTJDX09XTkVSX0dTLCAvKkctU2Vuc29yKi8KKyAgIERDTF9JMkNfT1dORVJfTVQ2MzA2LCAgLypmb3IgTVQ2MzA2Ki8KKyAgIERDTF9JMkNfT1dORVJfQVVESU8sIC8qIGZvciBXTTg5MDQqLworICAgRENMX0kyQ19OVU1fT0ZfT1dORVIKK31EQ0xfSTJDX09XTkVSOworLy8jZW5kaWYgLy9kZWZpbmVkKERSVl9JMkNfMjVfU0VSSUVTKQorCisjZW5kaWYgLy9fX0RDTF9JMkNfQ1VTVE9NX09XTkVSX1NUUlVDVF9fCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9pZGMuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX2lkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYTlhZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9pZGMuaApAQCAtMCwwICsxLDc4NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEwCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICBkY2xfaWRjLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9MWV9Tb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIEhlYWRlciBmaWxlIG9mIERDTCAoRHJpdmVyIENvbW1vbiBMYXllcikgZm9yIElEQy4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKgorICogIEFuc2VsIExpYW8KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9TVFJVQ1QKKyNpZm5kZWYgX19EQ0xfSURDX0hfU1RSVUNUX18KKyNkZWZpbmUgX19EQ0xfSURDX0hfU1RSVUNUX18KKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisKKyNkZWZpbmUgTUFYX05VTV9CWVRFCTkKKyNpZmRlZiBBVEVTVF9EUlZfRU5BQkxFCisjZGVmaW5lCU1BWF9OVU1fRVZFTlQJMTYKKyNlbHNlIC8qQVRFU1RfRFJWX0VOQUJMRSovCisjZGVmaW5lCU1BWF9OVU1fRVZFTlQJMQorI2VuZGlmCisKKworI2lmIGRlZmluZWQoX19NRDkzX18pCisJdHlwZWRlZiB2b2lkICgqSURDX0RSVl9UT19FTDFfQ0FMTEJBQ0spKGthbF9ib29sIGRhdGEpOworI2VsaWYgZGVmaW5lZChfX01EOTVfXykgfHwgZGVmaW5lZChfX01EOTdfXykgfHwgZGVmaW5lZChfX01EOTdQX18pCisJdHlwZWRlZiB2b2lkICgqSURDX0RSVl9UT19FTDFfQ0FMTEJBQ0spKHZvaWQgKmRhdGEpOworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9PUFRJT05TIGZvciBJREMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJRENfT1BUSU9OUworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ09ORklHVVJFX1QgZm9yIElEQworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElEQ19DT05GSUdTCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9FVkVOVCBmb3IgSURDCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSURDX0VWRU5UUworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ1RSTF9DTUQgZm9yIElEQworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUaGUgSURDIENvbW1hbmQgVmFsdWVzIGluIERDTF9DVFJMX0NNRF9UIEVudW0gb2YgZGNsLmggKi8KKyNpZmRlZiBfX0JVSUxEX0RPTV9fCit0eXBlZGVmIGVudW0geworCUlEQ19DTURfU0VUX0RDQl9DT05GSUcsCisJSURDX0NNRF9HRVRfRENCX0NPTkZJRywKKwlJRENfQ01EX1NFVF9CQVVEUkFURSwKKwlJRENfQ01EX0dFVF9NQVhfQkFVRFJBVEUsCisJSURDX0NNRF9TRVRfRklGT19UUklHR0VSLAorCUlEQ19DTURfU0VUX1BNX0NPTkZJRywKKwlJRENfQ01EX0dFVF9QTV9DT05GSUcsCisJSURDX0NNRF9TRU5EX0VWRU5ULAorCUlEQ19DTURfU0NIRURVTEVfRVZFTlQsCisJSURDX0NNRF9TQ0hFRFVMRV9HUFNfQkxBTktfRVZFTlQsCisJSURDX0NNRF9TQ0hFRFVMRV9HUFNfTDFfTDVfQkxBTktfRVZFTlQsCisJSURDX0NNRF9TQ0hFRFVMRV9VUERBVEUsCisJSURDX0NNRF9QVVJHRSwKKwlJRENfQ01EX0NIRUNLX0VWRU5UX1NFTkRfT1VULAorCUlEQ19DTURfU0VUX1BJTl9DT05GSUcsCisJSURDX0NNRF9HRVRfUElOX0NPTkZJRywKKwlJRENfQ01EX1JFR0lTVEVSX1BNX0NBTExCQUNLLAorCUlEQ19DTURfVU5SRUdJU1RFUl9QTV9DQUxMQkFDSywJCisJSURDX0NNRF9TRVRfTkVXX1BNX0NPTkZJRywKKwlJRENfQ01EX0dFVF9ORVdfUE1fQ09ORklHLAorCUlEQ19DTURfU1RPUF9FVkVOVCwKKwlJRENfQ01EX0dFVF9TQ0hFRFVMRV9TVEFUVVMsCisJSURDX0NNRF9HRVRfU0NIRURVTEVfU1RBVFVTXzIsCisJSURDX0NNRF9GT1JDRV9PTl9SRiwKKwlJRENfQ01EX1JFTUFQUElOR19DT05GSUcsCisJSURDX0NNRF9BVVRPX1RYX0NPTkZJRywKKwlJRENfQ01EX0FVVE9fVFhfRU4sCisJSURDX0NNRF9TQ0hFRFVMRV9VUERBVEVfTl9SRVRSVU5fUkZUWCwKKwlJRENfQ01EX1NDSEVEVUxFX0VWRU5UX0xURV9OUiwKKwlJRENfQ01EX0VOQUJMRV9SQVQsCisJSURDX0NNRF9ESVNBQkxFX1JBVCwKKwlJRENfQ01EX1NMRUVQX05PVElGWSwKKwlJRENfQ01EX1dBS0VfTk9USUZZLAorCUlEQ19DTURfU0VUX0lMTSwKKwlJRENfQ01EX0dQU19CMTNfQjE0LAorfSBEQ0xfQ1RSTF9DTURfVDsKKyNlbHNlCS8vIF9fQlVJTERfRE9NX18KKyNkZWZpbmUgSURDX0NNRFMJCQlcCisJSURDX0NNRF9TRVRfRENCX0NPTkZJRywJCVwKKwlJRENfQ01EX0dFVF9EQ0JfQ09ORklHLAkJXAorCUlEQ19DTURfU0VUX0JBVURSQVRFLAkJXAorCUlEQ19DTURfR0VUX01BWF9CQVVEUkFURSwJXAorCUlEQ19DTURfU0VUX0ZJRk9fVFJJR0dFUiwJXAorCUlEQ19DTURfU0VUX1BNX0NPTkZJRywJCVwKKwlJRENfQ01EX0dFVF9QTV9DT05GSUcsCQlcCisJSURDX0NNRF9TRU5EX0VWRU5ULAkJXAorCUlEQ19DTURfU0NIRURVTEVfRVZFTlQsCQlcCisJSURDX0NNRF9TQ0hFRFVMRV9HUFNfQkxBTktfRVZFTlQsCVwKKwlJRENfQ01EX1NDSEVEVUxFX0dQU19MMV9MNV9CTEFOS19FVkVOVCwJXAorCUlEQ19DTURfU0NIRURVTEVfVVBEQVRFLAkJXAorCUlEQ19DTURfUFVSR0UsCQkJXAorCUlEQ19DTURfQ0hFQ0tfRVZFTlRfU0VORF9PVVQsCVwKKwlJRENfQ01EX1NFVF9QSU5fQ09ORklHLAkJXAorCUlEQ19DTURfR0VUX1BJTl9DT05GSUcsCQlcCisJSURDX0NNRF9SRUdJU1RFUl9QTV9DQUxMQkFDSywJXAorCUlEQ19DTURfVU5SRUdJU1RFUl9QTV9DQUxMQkFDSywJXAorCUlEQ19DTURfU0VUX05FV19QTV9DT05GSUcsCVwKKwlJRENfQ01EX0dFVF9ORVdfUE1fQ09ORklHLAlcCisJSURDX0NNRF9TVE9QX0VWRU5ULAlcCisJSURDX0NNRF9HRVRfU0NIRURVTEVfU1RBVFVTLAlcCisJSURDX0NNRF9HRVRfU0NIRURVTEVfU1RBVFVTXzIsCVwKKwlJRENfQ01EX0ZPUkNFX09OX1JGLAlcCisJSURDX0NNRF9SRU1BUFBJTkdfQ09ORklHLAlcCisJSURDX0NNRF9BVVRPX1RYX0NPTkZJRywJXAorCUlEQ19DTURfQVVUT19UWF9FTiwJXAorCUlEQ19DTURfU0NIRURVTEVfVVBEQVRFX05fUkVUUlVOX1JGVFgsCVwKKwlJRENfQ01EX1NDSEVEVUxFX0VWRU5UX0xURV9OUiwJXAorCUlEQ19DTURfRU5BQkxFX1JBVCwJXAorCUlEQ19DTURfRElTQUJMRV9SQVQsCVwKKwlJRENfQ01EX1NMRUVQX05PVElGWSwJXAorCUlEQ19DTURfV0FLRV9OT1RJRlksCVwKKwlJRENfQ01EX1NFVF9JTE0sCQlcCisJSURDX0NNRF9HUFNfQjEzX0IxNCwKKyNlbmRpZgkvLyBfX0JVSUxEX0RPTV9fCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0RBVEFfVDogRGVmaW5lIHRoZSBDb250cm9sIGRhdGEgc3RydWN0dXJlIGZvciBlYWNoIG1vZHVsZSdzIGNvbW1hbmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gRm9yIERjbElEQ19Jbml0aWFsaXplCit0eXBlZGVmIGVudW0KK3sKKwlJRENfSU5JVCwKKwlJRENfUkVJTklULAorCUlEQ19VQVJUX0FDVElWQVRFLAorfSBJRENfSU5JVF9UWVBFX1Q7CisKKy8vIEZvciBJRENfQ01EX1NFVF9EQ0JfQ09ORklHIGNvbW1hbmQKKy8vIEZvciBJRENfQ01EX0dFVF9EQ0JfQ09ORklHIGNvbW1hbmQKK3R5cGVkZWYgc3RydWN0Cit7CisJa2FsX3VpbnQzMgl1NEJhdWQ7CQkvLyBiYXVkcmF0ZQorCWthbF91aW50OAl1MURhdGFCaXRzOwkvLyBVQVJUX0JJVFNfUEVSX0NIQVJfVAorCWthbF91aW50OAl1MVN0b3BCaXRzOwkvLyBVQVJUX1NUT1BfQklUU19UCisJa2FsX3VpbnQ4CXUxUGFyaXR5OwkvLyBVQVJUX1BBUlRJWV9UCit9IElEQ19DVFJMX0RDQl9DT05GSUdfVDsKKworLy8gRm9yIElEQ19DTURfU0VUX0JBVURSQVRFIGNvbW1hbmQKKy8vIEZvciBJRENfQ01EX0dFVF9NQVhfQkFVRFJBVEUgY29tbWFuZAordHlwZWRlZiBzdHJ1Y3QgCit7CisJa2FsX3VpbnQzMgliYXVkcmF0ZTsJLy8gYmF1ZHJhdGUKK30gSURDX0NUUkxfQkFVRFJBVEVfVDsKKworLy8gRm9yIElEQ19DTURfU0VUX0ZJRk9fVFJJR0dFUiBjb21tYW5kCit0eXBlZGVmIHN0cnVjdCAKK3sKKwlrYWxfdWludDgJcnhfdGhyZXNob2xkOwkvLyB0aHJlc2hvbGQgb2YgUlggRklGTworfSBJRENfQ1RSTF9TRVRfRklGT19UUklHR0VSX1Q7CisKKy8vIEZvciBJRENfQ01EX1NFVF9QTV9DT05GSUcgY29tbWFuZAorLy8gRm9yIElEQ19DTURfR0VUX1BNX0NPTkZJRyBjb21tYW5kCit0eXBlZGVmIHN0cnVjdCAKK3sKKwlrYWxfdWludDgJcG1faWR4OwkJLy8gUGF0dGVybiBtYXRjaCBpbmRleAorCWthbF91aW50OAlwcmlvcml0eTsJLy8gUHJpb3JpdHkKKwlrYWxfdWludDgJcHJpb3JpdHlfYml0X2VuOy8vIFByaW9yaXR5IGJpdCBlbmFibGUKKwlrYWxfdWludDgJcGF0dGVybjsJLy8gUGF0dGVybgorCWthbF91aW50OAlwYXR0ZXJuX2JpdF9lbjsJLy8gUGF0dGVybiBiaXQgZW5hYmxlCit9IElEQ19DVFJMX1BNX0NPTkZJR19UOworCisvLyBGb3IgSURDX0NNRF9TRVRfTkVXX1BNX0NPTkZJRyBjb21tYW5kCisvLyBGb3IgSURDX0NNRF9HRVRfTkVXX1BNX0NPTkZJRyBjb21tYW5kCit0eXBlZGVmIHN0cnVjdCAKK3sKKwlrYWxfdWludDgJcGF0dGVybjA7CS8vIFBhdHRlcm4gMCAKKwlrYWxfdWludDgJcGF0dGVybjE7CS8vIFBhdHRlcm4gMQorfSBJRENfQ1RSTF9ORVdfUE1fQ09ORklHX1Q7CisKKy8vIEZvciBJRENfUkVHSVNURVJfUE1fQ0FMTEJBQ0sgY29tbWFuZAorLy8gRm9yIElEQ19VTlJFR0lTVEVSX1BNX0NBTExCQUNLIGNvbW1hbmQKK3R5cGVkZWYgc3RydWN0IAoreworCWthbF91aW50OAlwbV9pZHg7CQkvLyBQYXR0ZXJuIG1hdGNoIGluZGV4ICwgMH4zIDogb2xkIFBNLCA0OiBuZXcgUE0KKwlJRENfRFJWX1RPX0VMMV9DQUxMQkFDSyBmdW5jX3B0cjsJLy8gQ2FsbGJhY2sgZnVuY3Rpb24KKyNpZiBkZWZpbmVkKF9fTUQ5M19fKQorCWthbF9ib29sIHByaXZhdGVfZGF0YTsvLyBQcml2YXRlIGRhdGEKKyNlbGlmIGRlZmluZWQoX19NRDk1X18pIHx8IGRlZmluZWQoX19NRDk3X18pIHx8IGRlZmluZWQoX19NRDk3UF9fKQorCXZvaWQgKnByaXZhdGVfZGF0YTsvLyBvbGQgUE0gLT4ga2FsX2Jvb2wsIG5ldyBQTSAtPiBrYWxfdWludDE2CisjZW5kaWYKK30gSURDX0NUUkxfUE1fQ0FMTEJBQ0tfVDsKKworCisvLyBGb3IgSURDX0NNRF9TQ0hFRFVMRV9FVkVOVCBjb21tYW5kCit0eXBlZGVmIHN0cnVjdAoreworI2lmIGRlZmluZWQoX19NRDkzX18pCisJa2FsX3VpbnQ4IGRhdGFbMl07CisjZWxpZiBkZWZpbmVkKF9fTUQ5NV9fKSB8fCBkZWZpbmVkKF9fTUQ5N19fKSB8fCBkZWZpbmVkKF9fTUQ5N1BfXykKKwlrYWxfdWludDggbnVtOwkJCS8vIG51bWJlciBvZiBieXRlIGluIHRoZSBldmVudAorCWthbF91aW50OCBkYXRhW01BWF9OVU1fQllURV07CQkvLyAyfjkgYnl0ZSBkYXRhIHBlciBldmVudAorI2VuZGlmCisJa2FsX3VpbnQzMiBvZmZzZXQ7CQkvLyA5NzogMTAwMCA9IDEgbXMsIGNhbiBiZSBzZXQgdXAgdG8gMTAwMDAgKD0gMTAgbXMpICoqKiA5NTogNjE0NDAgPSAxIG1zLCBjYW4gYmUgc2V0IHVwIHRvIDYxNDQwMCAoPSAxMCBtcykKK30gSURDX0VWRU5UX1Q7CisKK3R5cGVkZWYgc3RydWN0ICAgCit7CisJa2FsX3VpbnQ4CWNtZF90eXBlOworCWthbF91aW50OAljbWRfc3ViX3R5cGU7CisJa2FsX3VpbnQzMiAgY21kX3BoeXRpbWU7CisJa2FsX3VpbnQ4IAlldmVudF90eXBlOworfSBJRENfQ1RSTF9EUk9QX0NNRF9UOworCit0eXBlZGVmIHN0cnVjdCAKK3sKKwlJRENfRVZFTlRfVAlzY2hlZHVsZV9ldmVudDsJLy8gZXZlbnQgY29sdW1ucworCWthbF9ib29sCXNsZWVwX21vZGU7CS8vIFVzZSBLQUxfVFJVRSB0byBsb2NrIHJlc291cmNlCisJa2FsX2Jvb2wJZ3BzX21vZGU7CS8vIFVzZSBLQUxfVFJVRSB0byBub3RpZnkgZ3BzIHRvIGJsYW5rCisJSURDX0NUUkxfRFJPUF9DTURfVCAqZHJvcF9jbWQ7IC8vIGRyb3BfY21kIHN0cnVjdHVyZSBmb3IgRFJWX0lEQyBmaWxsIGluIGlmIGRyb3AgYmVoYXZpb3Igb2NjdXJzCit9IElEQ19DVFJMX1NDSEVEVUxFX0VWRU5UX1Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworCWthbF91aW50OCAJcmF0X3N0YXR1czsgLy8gcmF0X2x0ZSA9IDAsIHJhdF9uciA9IDEgCisJa2FsX3VpbnQ4IAlyYXdfZGF0YTsgLy8gTDE6IGJpdFswXSwgTDU6Yml0WzFdLCBpZiB2YWx1ZSA9IDB4MCA6IGdwc19vZmYsIHZhbHVlID0gMHgxIDogZ3BzX29uIAkKKwlrYWxfdWludDMyICBmcmNfdGltZTsJCS8vMTAwMCA9IDEgbXMsIGNhbiBiZSBzZXQgdXAgdG8gMTAwMDAgKD0gMTAgbXMpCit9IElEQ19DVFJMX0dQU19MMV9MNV9CTEFOS19FVkVOVF9UOworCit0eXBlZGVmIHN0cnVjdCAKK3sKKwlrYWxfdWludDggCXJhdF9zdGF0dXM7IC8vIHJhdF9sdGUgPSAwLCByYXRfbnIgPSAxIAorCWthbF9ib29sCWdwc19tb2RlOyAvLyBVc2luZyBLQUxfVFJVRSB0byBPTiBHUFMgYmxhbmssS0FMX0ZBTFNFIHRvIE9GRiBHUFMgYmxhbmsJCisJa2FsX3VpbnQzMiAgZnJjX3RpbWU7ICAvLzEwMDAgPSAxIG1zLCBjYW4gYmUgc2V0IHVwIHRvIDEwMDAwICg9IDEwIG1zKQorfSBJRENfQ1RSTF9HUFNfU0lOR0xFX0JMQU5LX0VWRU5UX1Q7CisKKworLy8gRm9yIElEQ19DTURfU0NIRURVTEVfVVBEQVRFIGNvbW1hbmQKK3R5cGVkZWYgc3RydWN0IAoreworCWthbF91aW50MzIJcGh5X3RpbWVfc2V0OwkvLyBBY2NvcmRpbmcgdG8gc3ViIGZyYW1lIGJvdW5kYXJ5LCByYW5nZSA9IDAgfiA2MTQ0MCpuIChuOiBsYXN0IHN1YiBmcmFtZSBib3VuZGFyeSwgNjE0NDAgPSAxbXMpCit9IElEQ19DVFJMX1NDSEVEVUxFX1VQREFURV9UOworCisvLyBGb3IgSURDX0NNRF9TVE9QX0VWRU5UIGNvbW1hbmQKK3R5cGVkZWYgc3RydWN0Cit7CisJa2FsX3VpbnQzMiBiaXRtYXA7CQkvLyBldmVudHMgbmVlZCB0byBiZSBzdG9wcGVkCit9IElEQ19DVFJMX1NUT1BfRVZFTlRfVDsKKworLy8gRm9yIElEQ19DTURfUFVSR0UKK3R5cGVkZWYgc3RydWN0Cit7CisJVUFSVF9idWZmZXIgZGlyOworfSBJRENfQ1RSTF9QVVJHRV9UOworCisvLyBGb3IgSURDX0NNRF9HRVRfU0NIRURVTEVfU1RBVFVTCit0eXBlZGVmIHN0cnVjdAoreworCWthbF91aW50MzIgc2NoZWR1bGVfc3RhdHVzOwkvLyAoYml0bWFwKQorfSBJRENfQ1RSTF9HRVRfU0NIRURVTEVfU1RBVFVTX1Q7CisKKy8vIEZvciBJRENfQ01EX0NIRUNLX0VWRU5UX1NFTkRfT1VUCit0eXBlZGVmIHN0cnVjdAoreworCWthbF9ib29sIHNlbmRfb3V0OwkJLy8gYWxsIGV2ZW50cyBhcmUgc2VudCBvdXQKK30gSURDX0NUUkxfQ0hFQ0tfRVZFTlRfU0VORF9PVVRfVDsKKworLy8gRm9yIElEQ19DTURfU0VUX1BJTl9DT05GSUcKK3R5cGVkZWYgZW51bQoreworCUlEQ19JTlRFUk5BTF9QSU4sCisJSURDX0VYVEVSTkFMX1BJTiwKK30gSURDX1BJTl9NT0RFX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJSURDX1BJTl9NT0RFX1QgcGluX21vZGU7Cit9IElEQ19DVFJMX1BJTl9DT05GSUdfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sJCisJa2FsX3VpbnQ4CXJmX3BhdGg7CS8vCTA6IHJmIHBhdGggMCwgMTogcmYgcGF0aCAxCQorfSBJRENfQ1RSTF9SRl9QQVRIX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CQorCWthbF91aW50OAlyZW1hcHBpbmdfdGFibGU7CS8vIHJlbWFwcGluZyB0YWJsZSBjb25maWcKKwlrYWxfdWludDggCXJlbWFwcGluZ190YWJsZV9lbjsJLy8gcmVtYXBwaW5nIHRhYmxlIGVuYWJsZQkKK30gSURDX0NUUkxfUkVNQVBQSU5HX0NPTkZJR19UOworCit0eXBlZGVmIHN0cnVjdAorewkKKwlrYWxfdWludDgJdHhfc3VzcF9xdW90YTsJLy8gaXQgY291bnQgZG93biB3aGVuIHJlY2VpdmUgUkVWT0tFIElEQ19DTUQsIHVzdWFsbHkgc2V0IDMwbXMsIDFtcyBwZXIgdW5pdAorCWthbF91aW50OCAJcmVzZXRfcXVvdGE7CS8vIGl0IGNvdW50IGRvd24gd2hlbiBzdGFydCBhdXRvIHR4IHN5c3RlbSwgdXN1YWxseSBzZXQgMjAwbXMsIDFtcyBwZXIgdW5pdAkKK30gSURDX0FVVE9fVFhfQ09ORklHX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CQorCWthbF9ib29sIGF1dG9fdHhfZW47CQkvLyBLQUxfVFJVRSA6IGF1dG8gdHggb24sIEtBTF9GQUxTRSA6IGF1dG8gdHggb2ZmCit9IElEQ19BVVRPX1RYX0VOX1Q7CisKKy8vIEZvciBJRENfQ01EX1NDSEVEVUxFX1VQREFURV9OX1JFVFJVTl9SRlRYIGNvbW1hbmQKK3R5cGVkZWYgc3RydWN0IAoreworCWthbF91aW50OCAJcmF0X3N0YXR1czsgLy8gcmF0X2x0ZSA9IDAsIHJhdF9uciA9IDEgCisKK30gSURDX1JBVF9UOwordHlwZWRlZiBzdHJ1Y3QgCit7CisJa2FsX2Jvb2wJaWxtX21vZGU7IC8vIDAgOiBJTE1fRElTQUJMRSwgMSA6IElMTV9FTkFCTEUgCisKK30gSURDX0lMTV9UOwordHlwZWRlZiBzdHJ1Y3QgCit7CisJa2FsX3VpbnQ4IAlyYXRfc3RhdHVzOyAvLyByYXRfbHRlID0gMCwgcmF0X25yID0gMSAKKwlrYWxfdWludDE2IAlyYXdfZGF0YTsgLy8gcmF0X2x0ZTogYml0WzA6MV0sIHJhdF9ucjpiaXRbMl0gCit9IElEQ19HUFNfQjEzX0IxNF9UOworCit0eXBlZGVmIHN0cnVjdCAKK3sKKwlrYWxfdWludDMyCWZyY190aW1lX3NldDsJLy8gQWNjb3JkaW5nIHRvIHN1YiBmcmFtZSBib3VuZGFyeSwgcmFuZ2UgPSAwIH4gMTAwMCpuIChuOiBsYXN0IHN1YiBmcmFtZSBib3VuZGFyeSwgMTAwMCA9IDFtcykKKwlrYWxfdWludDggCXJmX3BhdGhfc3RhdHVzOyAvLyByZXR1cm5zIFJGIHN0YXR1cyB0byBNRF9JREMgCisKK30gSURDX0NUUkxfU0NIRURVTEVfVVBEQVRFX05fUkVUUlVOX1JGVFhfVDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisJSURDX0VWRU5UX1QJc2NoZWR1bGVfZXZlbnQ7CS8vIGV2ZW50IGNvbHVtbnMKKwlrYWxfYm9vbAlzbGVlcF9tb2RlOwkvLyBVc2UgS0FMX1RSVUUgdG8gbG9jayByZXNvdXJjZQorCWthbF91aW50OAlldmVudF90eXBlOwkvLyBMVEUvTlIvQ29tbW9uCisJSURDX0NUUkxfRFJPUF9DTURfVCAqZHJvcF9jbWQ7IC8vIGRyb3BfY21kIHN0cnVjdHVyZSBmb3IgRFJWX0lEQyBmaWxsIGluIGlmIGRyb3AgYmVoYXZpb3Igb2NjdXJzCit9IElEQ19DVFJMX1NDSEVEVUxFX0VWRU5UX0xURV9OUl9UOworCisvKiBUaGUgSURDIENvbW1hbmQgUGFyYW1ldGVyIERhdGEgU3RydWN0dXJlIGZvciBFYWNoIENvbW1hbmQgaW4gRENMX0NUUkxfREFUQV9UIEVudW0gb2YgZGNsLmggKi8KKyNpZmRlZiBfX0JVSUxEX0RPTV9fCit0eXBlZGVmIHVuaW9uIAoreworCUlEQ19DVFJMX0RDQl9DT05GSUdfVAkJcl9pZGNfY3RybF9kY2JfY29uZmlnOwkJCS8vIERhdGEgU3RydWN0dXJlIGZvciBJRENfQ01EX1NFVF9EQ0JfQ09ORklHLCBJRENfQ01EX0dFVF9EQ0JfQ09ORklHCisJSURDX0NUUkxfQkFVRFJBVEVfVAkJcl9pZGNfY3RybF9iYXVkcmF0ZTsJCQkvLyBEYXRhIFN0cnVjdHVyZSBmb3IgSURDX0NNRF9TRVRfQkFVRFJBVEUsIElEQ19DTURfR0VUX01BWF9CQVVEUkFURQorCUlEQ19DVFJMX1NFVF9GSUZPX1RSSUdHRVJfVAlyX2lkY19jdHJsX3NldF9maWZvX3RyaWdnZXI7CQkvLyBEYXRhIFN0cnVjdHVyZSBmb3IgSURDX0NNRF9TRVRfRklGT19UUklHR0VSCisJSURDX0NUUkxfUE1fQ09ORklHX1QJCXJfaWRjX2N0cmxfcG1fY29uZmlnOwkJCS8vIERhdGEgU3RydWN0dXJlIGZvciBJRENfQ01EX1NFVF9QTV9DT05GSUcsIElEQ19DTURfR0VUX1BNX0NPTkZJRworCUlEQ19DVFJMX05FV19QTV9DT05GSUdfVAkJcl9pZGNfY3RybF9uZXdfcG1fY29uZmlnOwkJCS8vIERhdGEgU3RydWN0dXJlIGZvciBJRENfQ01EX1NFVF9ORVdfUE1fQ09ORklHLCBJRENfQ01EX0dFVF9ORVdfUE1fQ09ORklHCisJSURDX0NUUkxfU0NIRURVTEVfRVZFTlRfVAlyX2lkY19jdHJsX3NjaGVkdWxlX2V2ZW50OwkJLy8gRGF0YSBTdHJ1Y3R1cmUgZm9yIElEQ19DTURfU0NIRURVTEVfRVZFTlQKKwlJRENfQ1RSTF9HUFNfU0lOR0xFX0JMQU5LX0VWRU5UX1QJcl9pZGNfY3RybF9ncHNfc2luZ2xlX2JsYW5rX2V2ZW50OwkvLyBEYXRhIFN0cnVjdHVyZSBmb3IgSURDX0NNRF9HUFNfU0lOR0xFX0JMQU5LX0VWRU5UCisJSURDX0NUUkxfR1BTX0wxX0w1X0JMQU5LX0VWRU5UX1QJcl9pZGNfY3RybF9ncHNfbDFfbDVfYmxhbmtfZXZlbnQ7CS8vIERhdGEgU3RydWN0dXJlIGZvciBJRENfQ01EX0dQU19MMV9MNV9CTEFOS19FVkVOVAorCUlEQ19DVFJMX1NDSEVEVUxFX1VQREFURV9UCXJfaWRjX2N0cmxfc2NoZWR1bGVfc3RhcnQ7CQkvLyBEYXRhIFN0cnVjdHVyZSBmb3IgSURDX0NNRF9TQ0hFRFVMRV9FVkVOVAorCUlEQ19DVFJMX1NUT1BfRVZFTlRfVAkJcl9pZGNfY3RybF9zdG9wX2V2ZW50OwkJCS8vIERhdGEgU3RydWN0dXJlIGZvciBJRENfQ01EX1NUT1BfRVZFTlQKKwlJRENfQ1RSTF9QVVJHRV9UCQlyX2lkY19jdHJsX3B1cmdlOwkJCS8vIERhdGEgU3RydWN0dXJlIGZvciBJRENfQ01EX1BVUkdFCisJSURDX0NUUkxfR0VUX1NDSEVEVUxFX1NUQVRVU19UCXJfaWRjX2N0cmxfZ2V0X3NjaGVkdWxlX3N0YXR1czsJCS8vIERhdGEgU3RydWN0dXJlIGZvciBJRENfQ01EX0dFVF9TQ0hFRFVMRV9TVEFUVVMKKwlJRENfQ1RSTF9DSEVDS19FVkVOVF9TRU5EX09VVF9UCXJfaWRjX2N0cmxfY2hlY2tfZXZlbnRfc2VuZF9vdXQ7CS8vIERhdGEgU3RydWN0dXJlIGZvciBJRENfQ01EX0NIRUNLX0VWRU5UX1NFTkRfT1VUCisJSURDX0NUUkxfUElOX0NPTkZJR19UCQlyX2lkY19jdHJsX3Bpbl9jb25maWc7CQkJLy8gRGF0YSBTdHJ1Y3R1cmUgZm9yIElEQ19DVFJMX1BJTl9DT05GSUdfVAorCUlEQ19DVFJMX1BNX0NBTExCQUNLX1QJCXJfaWRjX2N0cmxfcG1fY2FsbGJhY2s7CisJSURDX0NUUkxfUkZfUEFUSF9UCQkJcl9pZGNfY3RybF9yZl9wYXRoOworCUlEQ19DVFJMX1JFTUFQUElOR19DT05GSUdfVAlyX2lkY19jdHJsX3JlbWFwcGluZ19jb25maWc7CisJSURDX0FVVE9fVFhfQ09ORklHX1QJCXJfaWRjX2N0cmxfYXV0b190eF9jb25maWc7CisJSURDX0FVVE9fVFhfRU5fVAkJCXJfaWRjX2N0cmxfYXV0b190eF9lbjsKKwlJRENfQ1RSTF9TQ0hFRFVMRV9VUERBVEVfTl9SRVRSVU5fUkZUWF9UCXJfaWRjX2N0cmxfc2NoZWR1bGVfdXBkYXRlX25fcmV0dXJuX3JmdHg7CisJSURDX0NUUkxfU0NIRURVTEVfRVZFTlRfTFRFX05SX1QJcl9pZGNfY3RybF9zY2hlZHVsZV9ldmVudF9sdGVfbnI7CisJSURDX1JBVF9UCQkJCQlyX2lkY19jdHJsX3JhdF9zdGF0dXM7CisJSURDX0lMTV9UCQkJCQlyX2lkY19jdHJsX2lsbV9tb2RlOworCUlEQ19HUFNfQjEzX0IxNF9UCQkJcl9pZGNfY3RybF9ncHNfYjEzX2IxNF9tb2RlOworfSBEQ0xfQ1RSTF9EQVRBX1Q7CisjZWxzZSAvKiBfX0JVSUxEX0RPTV9fICovCisjZGVmaW5lIElEQ19DVFJMUyBcCisJSURDX0NUUkxfRENCX0NPTkZJR19UCQlyX2lkY19jdHJsX2RjYl9jb25maWc7IFwKKwlJRENfQ1RSTF9CQVVEUkFURV9UCQlyX2lkY19jdHJsX2JhdWRyYXRlOyBcCisJSURDX0NUUkxfU0VUX0ZJRk9fVFJJR0dFUl9UCXJfaWRjX2N0cmxfc2V0X2ZpZm9fdHJpZ2dlcjsgXAorCUlEQ19DVFJMX1BNX0NPTkZJR19UCQlyX2lkY19jdHJsX3BtX2NvbmZpZzsgXAorCUlEQ19DVFJMX1NDSEVEVUxFX0VWRU5UX1QJcl9pZGNfY3RybF9zY2hlZHVsZV9ldmVudDsgXAorCUlEQ19DVFJMX0dQU19TSU5HTEVfQkxBTktfRVZFTlRfVAlyX2lkY19jdHJsX2dwc19zaW5nbGVfYmxhbmtfZXZlbnQ7IFwKKwlJRENfQ1RSTF9HUFNfTDFfTDVfQkxBTktfRVZFTlRfVAlyX2lkY19jdHJsX2dwc19sMV9sNV9ibGFua19ldmVudDsgXAorCUlEQ19DVFJMX1NDSEVEVUxFX1VQREFURV9UCXJfaWRjX2N0cmxfc2NoZWR1bGVfc3RhcnQ7IFwKKwlJRENfQ1RSTF9TVE9QX0VWRU5UX1QJCXJfaWRjX2N0cmxfc3RvcF9ldmVudDsgXAorCUlEQ19DVFJMX1BVUkdFX1QJCXJfaWRjX2N0cmxfcHVyZ2U7IFwKKwlJRENfQ1RSTF9HRVRfU0NIRURVTEVfU1RBVFVTX1QJcl9pZGNfY3RybF9nZXRfc2NoZWR1bGVfc3RhdHVzOyBcCisJSURDX0NUUkxfQ0hFQ0tfRVZFTlRfU0VORF9PVVRfVAlyX2lkY19jdHJsX2NoZWNrX2V2ZW50X3NlbmRfb3V0OyBcCisJSURDX0NUUkxfUElOX0NPTkZJR19UCQlyX2lkY19jdHJsX3Bpbl9jb25maWc7CVwKKwlJRENfQ1RSTF9QTV9DQUxMQkFDS19UCQlyX2lkY19jdHJsX3BtX2NhbGxiYWNrOwlcCisJSURDX0NUUkxfTkVXX1BNX0NPTkZJR19UCQlyX2lkY19jdHJsX25ld19wbV9jb25maWc7CVwKKwlJRENfQ1RSTF9SRl9QQVRIX1QJCQlyX2lkY19jdHJsX3JmX3BhdGg7CVwKKwlJRENfQ1RSTF9SRU1BUFBJTkdfQ09ORklHX1QJcl9pZGNfY3RybF9yZW1hcHBpbmdfY29uZmlnOwlcCisJSURDX0FVVE9fVFhfQ09ORklHX1QJCXJfaWRjX2N0cmxfYXV0b190eF9jb25maWc7CVwKKwlJRENfQVVUT19UWF9FTl9UCQkJcl9pZGNfY3RybF9hdXRvX3R4X2VuOwlcCisJSURDX0NUUkxfU0NIRURVTEVfVVBEQVRFX05fUkVUUlVOX1JGVFhfVAlyX2lkY19jdHJsX3NjaGVkdWxlX3VwZGF0ZV9uX3JldHVybl9yZnR4OwlcCisJSURDX0NUUkxfU0NIRURVTEVfRVZFTlRfTFRFX05SX1QJcl9pZGNfY3RybF9zY2hlZHVsZV9ldmVudF9sdGVfbnI7CVwKKwlJRENfUkFUX1QJCQkJCXJfaWRjX2N0cmxfcmF0X3N0YXR1czsJXAorCUlEQ19JTE1fVAkJCQkJcl9pZGNfY3RybF9pbG1fbW9kZTsJXAorCUlEQ19HUFNfQjEzX0IxNF9UCQkJcl9pZGNfY3RybF9ncHNfYjEzX2IxNF9tb2RlOworI2VuZGlmIC8qIF9fQlVJTERfRE9NX18gKi8KKworLy8gU3VwcG9ydCBsaXN0IG9mIElEQyBkcml2ZXIKK3R5cGVkZWYgc3RydWN0Cit7CisJa2FsX2Jvb2wgaWRjOworCWthbF9ib29sIGdwaW87CisJa2FsX2Jvb2wgdWFydDsKK30gSURDX1NVUFBPUlRfVDsKKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfSURDX0hfU1RSVUNUX18KKyNlbmRpZiAvLyAjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUICAgCisKKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9QUk9UT1RZUEUKKyNpZm5kZWYgX19EQ0xfSURDX0hfUFJPVE9UWVBFX18KKyNkZWZpbmUgX19EQ0xfSURDX0hfUFJPVE9UWVBFX18KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbElEQ19HZXRTdXBwb3J0CisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGdldCB0aGUgc3VwcG9ydCBsaXN0IG9mIElEQyBkcml2ZXIuCisqCisqIFBBUkFNRVRFUlMKKyogIHN1cHBvcnQ6IFtJTl0gSURDX1NVUFBPUlRfVCAqc3VwcG9ydAorKgkxLiBpZGM6CQlJbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBpZGMgZHJpdmVyIGlzIHN1cHBvcnRlZAorKgkyLiBncGlvOglJbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBHUElPIENvLUV4aXN0IHdpbGwgYmUgdXNlZCBhZnRlciBpZGNfaW5pdAorKgkzLiB1YXJ0OglJbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBVQVJUIHdpbGwgYmUgdXNlZCBhZnRlciBpZGNfaW5pdAorKgorKiBSRVRVUk5TCisqICBSZXR1cm4gdGhlIHN1cHBvcnQgbGlzdAorKgorKiBSRVRVUk4gVkFMVUVTCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xJRENfR2V0U3VwcG9ydChJRENfU1VQUE9SVF9UICpzdXBwb3J0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbElEQ19Jbml0aWFsaXplCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGluaXRpYWxpemUgSURDIG1vZHVsZQorKgorKiBSRVRVUk5TCisqICBSZXR1cm4gdGhlIHN0YXR1cyBvZiBEY2xJRENfSW5pdGlhbGl6ZQorKgorKiBSRVRVUk4gVkFMVUVTCisqICBTVEFUVVNfT0s6IEluaXRpYWxpemUgRmluaXNoZWQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xJRENfSW5pdGlhbGl6ZShJRENfSU5JVF9UWVBFX1QgdHlwZSk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbElEQ19PcGVuCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIG9wZW4gdGhlIElEQyBtb2R1bGUgYW5kIHJldHVybiBhIGhhbmRsZQorKgorKiBQQVJBTUVURVJTCisqICBkZXY6IFtJTl0gT25seSB2YWxpZCBmb3IgRENMX0lEQworKiAgZmxhZ3M6IFtJTl0gTm8gc2VwY2lhbCBmbGFncyBpcyBuZWVkZWQuIFBsZWFzZSB1c2UgRkxBR1NfTk9ORQorKgorKiBSRVRVUk5TCisqICBSZXR1cm4gRENMX0hBTkRMRSBvZiBJREMKKyoKKyogUkVUVVJOIFZBTFVFUworKiAgRENMX0hBTkRMRV9JTlZBTElEIDogT3BlbiBmYWlsZWQKKyogIE90aGVyIHZhbHVlIDogQSB2YWxpZCBoYW5kbGUKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX0hBTkRMRSBEY2xJRENfT3BlbihEQ0xfREVWIGRldiwgRENMX0ZMQUdTIGZsYWdzKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsSURDX1JlYWREYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBJREMgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xJRENfUmVhZERhdGEoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9CVUZGICpidWZmLCBEQ0xfQlVGRl9MRU4gKmJ1Zl9sZW4sIERDTF9PUFRJT05TIG9wdGlvbnMpOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xJRENfV3JpdGVEYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBJREMgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xJRENfV3JpdGVEYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOICpidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsSURDX0NvbmZpZ3VyZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgSURDIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsSURDX0NvbmZpZ3VyZShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NPTkZJR1VSRV9UICpjb25maWd1cmUpOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xJRENfUmVnaXN0ZXJDYWxsYmFjaworKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgSURDIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsSURDX1JlZ2lzdGVyQ2FsbGJhY2soRENMX0hBTkRMRSBoYW5kbGUsIERDTF9FVkVOVCBldmVudCwgUEZOX0RDTF9DQUxMQkFDSyBjYWxsYmFjayk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbElEQ19Db250cm9sCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIHNlbmQgY29tbWFuZCB0byBjb250cm9sIHRoZSBJREMgbW9kdWxlLgorKgorKiBQQVJBTUVURVJTCisqICBoYW5kbGU6IFtJTl0gVGhlIGhhbmRsZSB2YWx1ZSByZXR1cm5lZCBmcm9tIERjbElEQ19PcGVuCisqICBjbWQ6IFtJTl0gQSBjb250cm9sIGNvbW1hbmQgZm9yIElEQyBtb2R1bGUKKyoJMS4gSURDX0NNRF9TRVRfRENCX0NPTkZJRzoJCXRvIGNvbmZpZyBEQ0IgKGJhdWRyYXRlLCBkYXRhIGJpdHMsIHN0b3AgYml0cywgYW5kIHBhcml0eSBiaXRzKQorKgkyLiBJRENfQ01EX0dFVF9EQ0JfQ09ORklHOgkJdG8gZ2V0IERDQiBjb25maWcgZnJvbSBkcml2ZXIKKyoJMy4gSURDX0NNRF9TRVRfQkFVRFJBVEU6CQl0byBzZXQgYmF1ZCByYXRlCisqCTQuIElEQ19DTURfR0VUX01BWF9CQVVEUkFURToJCXRvIGdldCBtYXggYmF1ZHJhdGUKKyoJNS4gSURDX0NNRF9TRVRfRklGT19UUklHR0VSOgkJdG8gc2V0IHRocmVzaG9sZCBvZiBpZGMgcnggZmlmbworKgk2LiBJRENfQ01EX1NFVF9QTV9DT05GSUc6CQl0byBzZXQgcGF0dGVybiBtYXRjaGluZyBjb25mZyAoc3RhcnQvZmluaXNoIHByaW9yaXR5L3BhdHRlcm4sIHBhcmlvcml0eS9wYXR0ZXJuIGJpdCBlbmFibGUpCisqCTcuIElEQ19DTURfR0VUX1BNX0NPTkZJRzoJCXRvIGdldCBwYXR0ZXJuIG1hdGNoaW5nCisqCTguIElEQ19DTURfU0NIRURVTEVfRVZFTlQ6CQl0byBzY2hlZHVsZSBldmVudHMKKyoJOS4gSURDX0NNRF9TQ0hFRFVMRV9VUERBVEU6CQl0byBydW4gc2NoZWR1bGUKKyoJMTAuIElEQ19DTURfU1RPUF9FVkVOVDoJCQl0byBzdG9wIHNwZWNpZmljIGV2ZW50IGZyb20gc3BlY2lmaWMgc2NoZWR1bGUKKyoJMTEuIElEQ19DTURfUFVSR0U6CQkJdG8gY2xlYW4gSURDIFJYIEZJRk8KKyoJMTIuIElEQ19DTURfR0VUX1NDSEVEVUxFX1NUQVRVUzoJdG8gZ2V0IHN0YXR1cyBvZiBzY2hlZHVsZSAoYml0bWFwLCBidXN5OjEsIGlkbGU6MCkKKyoJMTMuIElEQ19DTURfQ0hFQ0tfRVZFTlRfU0VORF9PVVQ6CXRvIGNoZWNrIGFsbCBldmVudHMgYXJlIHNlbnQgb3V0IGZyb20gSURDIG9yIG5vdAorKgkxNC4gSURDX0NNRF9TRVRfUElOX0NPTkZJRzoJCXRvIHNldCBwaW5tdXggYmV0ZWVuIGludGVybmFsIGFuZCBleHRlcm5hbCBwaW5zIChLMiBPbmx5KQorKgkxNS4gSURDX0NNRF9HRVRfUElOX0NPTkZJRzoJCXRvIGdldCBwaW51bXggY29uZmlnIChLMiBPbmx5KQorKgorKiAgZGF0YTogW0lOXSBUaGUgZGF0YSBvZiB0aGUgY29udHJvbCBjb21tYW5kCisqCTEuIElEQ19DVFJMX0RDQl9DT05GSUdfVDoJCXBvaW50ZXIgdG8gYW4gSURDX0NUUkxfRENCX0NPTkZJR19UIHN0cnVjdHVyZQorKgkyLiBJRENfQ1RSTF9CQVVEUkFURV9UOgkJCXBvaW50ZXIgdG8gYW4gSURDX0NUUkxfQkFVRFJBVEVfVCBzdHJ1Y3R1cmUgCisqCTMuIElEQ19DVFJMX1NFVF9GSUZPX1RSSUdHRVJfVDoJCXBvaW50ZXIgdG8gYW4gSURDX0NUUkxfU0VUX0ZJRk9fVFJJR0dFUl9UIHN0cnVjdHVyZSAKKyoJNC4gSURDX0NUUkxfUE1fQ09ORklHX1Q6CQlwb2ludGVyIHRvIGFuIElEQ19DVFJMX1BNX0NPTkZJR19UIHN0cnVjdHVyZQorKgk1LiBJRENfQ1RSTF9TQ0hFRFVMRV9FVkVOVF9UOgkJcG9pbnRlciB0byBhbiBJRENfQ1RSTF9TQ0hFRFVMRV9FVkVOVF9UIHN0cnVjdHVyZQorKgk2LiBJRENfQ1RSTF9TQ0hFRFVMRV9VUERBVEVfVDoJCXBvaW50ZXIgdG8gYW4gSURDX0NUUkxfU0NIRURVTEVfVVBEQVRFX1Qgc3RydWN0dXJlCisqCTcuIElEQ19DVFJMX1NUT1BfRVZFTlRfVDoJCXBvaW50ZXIgdG8gYW4gSURDX0NUUkxfU1RPUF9FVkVOVF9UIHN0cnVjdHVyZQorKgk4LiBJRENfQ1RSTF9QVVJHRV9UOgkJCXBvaW50ZXIgdG8gYW4gSURDX0NUUkxfUFVSR0Ugc3RydWN0dXJlCisqCTkuIElEQ19DVFJMX0dFVF9TQ0hFRFVMRV9TVEFUVVNfVDoJcG9pbnRlciB0byBhbiBJRENfQ1RSTF9HRVRfU0NIRURVTEVfU1RBVFVTX1Qgc3RydWN0dXJlCisqCTEwLiBJRENfQ1RSTF9DSEVDS19FVkVOVF9TRU5EX09VVF9UOglwb2ludGVyIHRvIGFuIElEQ19DVFJMX0NIRUNLX0VWRU5UX1NFTkRfT1VUX1Qgc3RydWN0dXJlCisqCTExLiBJRENfQ1RSTF9QSU5fQ09ORklHX1Q6CQlwb2ludGVyIHRvIGFuIElEQ19DVFJMX1BJTl9DT05GSUdfVCBzdHJ1Y3R1cmUKKyoKKyogUkVUVVJOUworKiAgUmV0dXJuIHRoZSBzdGF0dXMgb2YgRGNsSURDX0NvbnRyb2wKKyoKKyogUkVUVVJOIFZBTFVFUworKiAgU1RBVFVTX09LOiBDb21tYW5kIGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyogIFNUQVRVU19GQUlMOiBDb21tYW5kIGlzIGZhaWxlZC4KKyogIFNUQVRVU19JTlZBTElEX0NNRDogSXQncyBhIGludmFsaWQgY29tbWFuZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xJRENfQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbElEQ19jb25uX3R4cnhfY291bnQKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gc3RhcnQvZW5kIGNvdW50aW5nIEJUXzgwMjExX1JYIGFuZCBCVF84MDIxMV9UWAorKgorKiBQQVJBTUVURVJTCisqICBpc19zdGFydDogW0lOXQlLQUxfVFJVRTogU3RhcnQgY291bnRpbmcKKyoJCQlLQUxfRkFMU0U6IEVuZCBjb3VudGluZworKgorKiBSRVRVUk5TCisqICBSZXR1cm4gdGhlIHN0YXR1cyBvZiBEY2xJRENfY29ubl90eHJ4X2NvdW50CisqCisqIFJFVFVSTiBWQUxVRVMKKyogIFNUQVRVU19PSworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbElEQ19jb25uX3R4cnhfY291bnQoa2FsX2Jvb2wgaXNfc3RhcnQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsSURDX0Nsb3NlCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGNsb3NlIHRoZSBJREMgbW9kdWxlLgorKgorKiBQQVJBTUVURVJTCisqICBoYW5kbGU6IFtJTl0gVGhlIHJldHVybmVkIGhhbmRsZSB2YWx1ZSBvZiBEY2xJRENfT3BlbgorKgorKiBSRVRVUk5TCisqICBSZXR1cm4gdGhlIHN0YXR1cyBvZiBEY2xJRENfQ2xvc2UKKyoKKyogUkVUVVJOIFZBTFVFUworKiAgU1RBVFVTX09LCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsSURDX0Nsb3NlKERDTF9IQU5ETEUgaGFuZGxlKTsKKworLy8gTW9ESVMgcGFyc2VyIHNraXAgZW5kCisKKyNlbmRpZiAvLyAjaWZuZGVmIF9fRENMX0lEQ19IX1BST1RPVFlQRV9fCisjZW5kaWYgLy8gI2lmZGVmIERDTF9ERUZJTklUSU9OX1BST1RPVFlQRQpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfaXJkYS5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfaXJkYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlODQ1ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9pcmRhLmgKQEAgLTAsMCArMSwyNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGRjbF9pcmRhLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIEhlYWRlciBmaWxlIG9mIERDTCAoRHJpdmVyIENvbW1vbiBMYXllcikgZm9yIElyREEuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIERDTF9ERUZJTklUSU9OX1NUUlVDVAorI2lmbmRlZiBfX0RDTF9JUkRBX0hfU1RSVUNUX18KKyNkZWZpbmUgX19EQ0xfSVJEQV9IX1NUUlVDVF9fCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX09QVElPTlMgZm9yIElSREEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJUkRBX09QVElPTlMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DT05GSUdVUkVfVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX0JPT0wgICAgIGZnTW9kdWxhdGlvbjFwNjM7CisgICBEQ0xfQk9PTCAgICAgZmdCT0ZUeXBlMHhmZjsKKyAgIERDTF9VSU5UOCAgICB1TWlyRG91YmxlU3RhTnVtOworI2RlZmluZSBEQ0xfTUlSX0RPVUJMRV9TVEFfREVGQVVMVCAgMHg3ZgorI2RlZmluZSBEQ0xfTUlSX0RPVUJMRV9TVEFfTUFYICAweDdmCit9IElSREFfQ09ORklHX1Q7CisKKyNkZWZpbmUgSVJEQV9DT05GSUdTIFwKKyAgIElSREFfQ09ORklHX1QgcklSREFDb2ZpZzsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0VWRU5UIGZvciBJUkRBCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSVJEQV9FVkVOVFMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0NNRCBmb3IgSVJEQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElSREFfQ01EUworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NUUkxfREFUQV9UOiBEZWZpbmUgdGhlIENvbnRyb2wgZGF0YSBzdHJ1Y3R1cmUgZm9yIGVhY2ggbW9kdWxlJ3MgY29tbWFuZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElSREFfQ1RSTFMKKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfSVJEQV9IX1NUUlVDVF9fCisjZW5kaWYgLy8gI2lmZGVmIERDTF9ERUZJTklUSU9OX1NUUlVDVCAgIAorCisjaWYgZGVmaW5lZChEQ0xfREVGSU5JVElPTl9QUk9UT1RZUEUpCisjaWZuZGVmIF9fRENMX0lSREFfSF9QUk9UT1RZUEVfXworI2RlZmluZSBfX0RDTF9JUkRBX0hfUFJPVE9UWVBFX18KKy8vIE1vRElTIHBhcnNlciBza2lwIHN0YXJ0CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsSVJEQV9Jbml0aWFsaXplCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGluaXRpYWxpemUgSVJEQSBtb2R1bGUuIAorKgorKiBQQVJBTUVURVJTCisqCURDTF9TVEFUVVNfT0sKKyogIFNUQVRVU19VTlNVUFBPUlRFRCAtIElyREEgaXMgbm90IHN1cHBvcnRlZCBvciBlbmFibGVkLgorKgorKiBSRVRVUk5TCisqICBub25lCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsSVJEQV9Jbml0aWFsaXplKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsSVJEQV9PcGVuCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIG9wZW4gdGhlIElSREEgbW9kdWxlIGFuZCBnZXQgYSBoYW5kbGUuIE5vdGUgdGhhdCAKKyogbXVsdGlwbGUgb3BlbnMgYXJlIG5vdCBhbGxvd2VkLgorKgorKiBQQVJBTUVURVJTCisqCWVEZXYgLSBvbmx5IHZhbGlkIGZvciBEQ0xfSVJEQQorKglmbGFncyAtIG5vIHNlcGNpYWwgZmxhZ3MgaXMgbmVlZGVkLiBQbGVhc2UgdXNlIEZMQUdTX05PTkUKKyoKKyogUkVUVVJOUworKglEQ0xfSEFORExFX0lOVkFMSUQgLSBPcGVuIGZhaWxlZC4KKyogIFNUQVRVU19VTlNVUFBPUlRFRCAtIElyREEgaXMgbm90IHN1cHBvcnRlZCBvciBlbmFibGVkLgorKiAgb3RoZXIgdmFsdWUgLSBhIHZhbGlkIGhhbmRsZQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfSEFORExFIERjbElSREFfT3BlbihEQ0xfREVWIGVEZXYsIERDTF9GTEFHUyBmbGFncyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xJUkRBX1JlYWREYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBJUkRBIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsSVJEQV9SZWFkRGF0YShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0JVRkYgKmJ1ZmYsIERDTF9CVUZGX0xFTiAqYnVmX2xlbiwgRENMX09QVElPTlMgb3B0aW9ucyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xJUkRBX1dyaXRlRGF0YQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgSVJEQSBtb2R1bGUgbm93LgorKgorKiBQQVJBTUVURVJTCisqCU4vQQorKgorKiBSRVRVUk5TCisqCVNUQVRVU19VTlNVUFBPUlRFRAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbElSREFfV3JpdGVEYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOICpidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbElSREFfQ29uZmlndXJlCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGNvbmZpZ3VyZSBmb3IgdGhlIElSREEgbW9kdWxlLgorKgorKiBQQVJBTUVURVJTCisqCWhhbmRsZSAtIGEgdmFsaWQgaGFuZGxlIHJldHVybiBieSBEY2xJUkRBX09wZW4oKQorKiAgY29uZmlndXJlIC0gYSBwb250ZXIgdG8gSVJEQVRfQ09ORklHX1Qgc3RydWN0dXJlIHdoaWNoIGlzIGEgbWVtYmVyIG9mIHVuaW9uIAorKiAgICAgICAgICAgICAgRENMX0NPTkZJR1VSRV9ULgorKgorKiBSRVRVUk5TCisqCVNUQVRVU19PSyAtIHN1Y2Nlc3NmdWxseSBzZXQgdGhlIGNvbmZpZ3VyYXR1aWIuCisqICBTVEFUVVNfSU5WQUxJRF9IQU5ETEUgLSBJdCdzIGEgaW52YWxpZCBoYW5kbGUuCisqICBTVEFUVVNfVU5TVVBQT1JURUQgLSBJckRBIGlzIG5vdCBzdXBwb3J0ZWQgb3IgZW5hYmxlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xJUkRBX0NvbmZpZ3VyZShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NPTkZJR1VSRV9UICpjb25maWd1cmUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsSVJEQV9SZWdpc3RlckNhbGxiYWNrCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBJUkRBIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsSVJEQV9SZWdpc3RlckNhbGxiYWNrKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfRVZFTlQgZXZlbnQsIFBGTl9EQ0xfQ0FMTEJBQ0sgY2FsbGJhY2spOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsSVJEQV9Db250cm9sCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBJUkRBIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsSVJEQV9Db250cm9sKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQ1RSTF9DTUQgY21kLCBEQ0xfQ1RSTF9EQVRBX1QgKmRhdGEpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsSVJEQV9DbG9zZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBjbG9zZSB0aGUgSVJEQSBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyoJaGFuZGxlICAtIGhhbmxkZSBwcmV2aW91cyBnb3QgZnJvbSBEY2xJUkRBX09wZW4oKQorKgorKiBSRVRVUk5TCisqCURDTF9TVEFUVVNfT0sgLSBzdWNjZXNzZnVsbHkgY2xvc2UgdGhlIElSREEgbW9kdWxlLgorKiAgU1RBVFVTX05PVF9PUEVORUQgLSBJckRBIGhhc24ndCBiZWVuIG9wZW5lZCB5ZXQuCisqICBTVEFUVVNfSU5WQUxJRF9IQU5ETEUgLSBJdCdzIGEgaW52YWxpZCBoYW5kbGUuCisqICBTVEFUVVNfVU5TVVBQT1JURUQgLSBJckRBIGlzIG5vdCBzdXBwb3J0ZWQgb3IgZW5hYmxlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xJUkRBX0Nsb3NlKERDTF9IQU5ETEUgaGFuZGxlKTsKKworLy8gTW9ESVMgcGFyc2VyIHNraXAgZW5kCisKKyNlbmRpZiAvLyAjaWZuZGVmIF9fRENMX0lSREFfSF9QUk9UT1RZUEVfXworI2VuZGlmIC8vICNpZmRlZiBEQ0xfREVGSU5JVElPTl9QUk9UT1RZUEUKKworCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9tc2RjLmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9tc2RjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNmYjQ4OAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX21zZGMuaApAQCAtMCwwICsxLDY5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICBkY2xfbXNkYy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1hdWlfU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgZGVmaW5lcyBjb21tb24gcGFydCBvZiBtc2RjIHJlbGF0ZWQgbW9kdWxlcy4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIERDTF9ERUZJTklUSU9OX1NUUlVDVAorI2lmbmRlZiBfX0RDTF9NU0RDX0hfRlJPTlRfXworI2RlZmluZSBfX0RDTF9NU0RDX0hfRlJPTlRfXworCisvL1JIUiBBREQKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorLy9SSFIgUkVNT1ZFCisvKgorLy9NU0JCIHJlbW92ZSAjaW5jbHVkZSAia2FsX25vbl9zcGVjaWZpY19nZW5lcmFsX3R5cGVzLmgiCisqLworLy9SSFIKKworI2RlZmluZQlEQ0xfTVNEQ19IV19NU0RDMQkxCisjZGVmaW5lCURDTF9NU0RDX0hXX01TREMyCTIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKmZvbGxvd2luZ3Mgd2UgZGVmaW5lcyB0aGUgc3RydWN0dXJlIHVzZWQgYnkgRENMIHVzZXIsIHRoaXMgaXMgcHJldmVudCBEQ0wgdXNlciBmcm9tIGluY2x1ZGUgaW52aXZpZHVhbCBtb3VkbGVzJyBoZWFkZXIgZmlsZS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIERDTF9VSU5UMzIJCQkJRENMX1NEQ19DTURfU1RBVFVTOy8vdGhpcyBpcyB0byByZXBsYWNlIFNEQ19DTURfU1RBVFVTIAorCisKKy8qdGhpcyBpcyB0byByZXBsYWNlIGNtZDUzX29wX2VudW0qLwordHlwZWRlZiBlbnVteworCURDTF9TRElPX0ZJWCwJLy9tdWx0aSBieXRlIHIvdyBhdCBmaXhlZCBhZGRyZXNzCisJRENMX1NESU9fSU5DCS8vbXVsdGkgYnl0ZSByL3cgYXQgaW5jcmVtZW50aW5nIGFkZHJlc3MgCit9RENMX1NESU9fY21kNTNfb3BfZW51bTsKKworLyp0aGlzIGlzIHRvIHJlcGxhY2UgU0RJT19mdW5jdGlvbl9pZF9lbnVtKi8KK3R5cGVkZWYgZW51bXsKKwlEQ0xfU0RJT19GVUNOXzA9MCwKKwlEQ0xfU0RJT19GVUNOXzEsCisJRENMX1NESU9fTUFYX0ZVQ05fSUQsIAorCURDTF9TRElPX0ZVQ05fTUVNPTB4MTAwMAorfURDTF9TRElPX2Z1bmN0aW9uX2lkX2VudW07CisKKy8qdGhpcyBpcyB0byByZXBsYWNlIFNEX0JJVFdJRFRIKi8KK3R5cGVkZWYgZW51bXsKKwlEQ0xfQklUXzFXID0gMHgwMDAwLAorCURDTF9CSVRfNFcgPSAweDAwMDIKK31EQ0xfU0RfQklUV0lEVEg7CisKK3R5cGVkZWYgdm9pZCAoICpNU0RDX0NBTExCQUNLKSAodm9pZCk7CisjZGVmaW5lIERDTF9TRUNUT1JfU0laRQkJNTEyCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBkcml2ZXIgZnVuY3Rpb24gdGFibGVzIGV4cG9zZWQgdG8gRENMLCBpbiBTRCBsYXllciwgU0RJTyBsYXllciwgYW5kIE1TREMgbGF5ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLypoZXJlIGFyZSB0eXBlIGRlZmluaXRpb24gZm9yIGZ1bmN0aW9ucyovCit0eXBlZGVmIERDTF9TRENfQ01EX1NUQVRVUyAoKkRDTF9TSU5HTEVfQkxLX1JEKSAoRENMX1VJTlQzMiBkYXRhX2FkcnMsIERDTF9VSU5UMzIgKnJ4YnVmZmVyKTsKK3R5cGVkZWYgRENMX1NEQ19DTURfU1RBVFVTICgqRENMX01VTF9CTEtfUkQpIChEQ0xfVUlOVDMyIGRhdGFfYWRycywgRENMX1VJTlQzMiAqcnhidWZmZXIsIERDTF9VSU5UMzIgbnVtKTsKK3R5cGVkZWYgRENMX1NEQ19DTURfU1RBVFVTICgqRENMX1NJTkdMRV9CTEtfV1IpIChEQ0xfVUlOVDMyIGFkZHJlc3MsIERDTF9VSU5UMzIgKnR4YnVmZmVyKTsKK3R5cGVkZWYgRENMX1NEQ19DTURfU1RBVFVTICgqRENMX01VTF9CTEtfV1IpIChEQ0xfVUlOVDMyIGFkZHJlc3MsIERDTF9VSU5UMzIgKnR4YnVmZmVyLCBEQ0xfVUlOVDMyIG51bSk7Cit0eXBlZGVmIERDTF9TRENfQ01EX1NUQVRVUyAoKkRDTF9TRF9JTklUSVRBTElaRSkgKHZvaWQpOwordHlwZWRlZiBEQ0xfU0RDX0NNRF9TVEFUVVMgKCpEQ0xfU0VUX1BSRV9FUkFTRV9DTlQpIChEQ0xfVUlOVDMyIG51bSk7Cit0eXBlZGVmIERDTF9TRENfQ01EX1NUQVRVUyAoKkRDTF9TRF9TRVRfQ0FMTEJBQ0spKE1TRENfQ0FMTEJBQ0sgY2FsbGJhY2sxLCBNU0RDX0NBTExCQUNLIGNhbGxiYWNrMiwgTVNEQ19DQUxMQkFDSyBjYWxsYmFjazMsTVNEQ19DQUxMQkFDSyBjYWxsYmFjazQsTVNEQ19DQUxMQkFDSyBjYWxsYmFjazUsTVNEQ19DQUxMQkFDSyBjYWxsYmFjazYpOwordHlwZWRlZiBEQ0xfU0RDX0NNRF9TVEFUVVMgKCpEQ0xfU0VUX1JFQURfVEVTVF9GTEFHKShrYWxfdWludDMyIHJlYWRUZXN0RmxhZyk7Cit0eXBlZGVmCURDTF9TRENfQ01EX1NUQVRVUygqRENMX1NEX1JFQURfVEVTVCkodm9pZCk7Cit0eXBlZGVmCURDTF9TRENfQ01EX1NUQVRVUygqRENMX1NEX1NFVF9VUExMX0NMT0NLX1RFU1QpKHZvaWQpOwordHlwZWRlZglEQ0xfU0RDX0NNRF9TVEFUVVMoKkRDTF9TRF9FUkFTRV9CTEspKERDTF9VSU5UMzIgc3RhcnRTZWN0b3IsIERDTF9VSU5UMzIgc2VjdG9yTnVtKTsKK3R5cGVkZWYgRENMX1NEQ19DTURfU1RBVFVTICgqRENMX0dQRF9NVUxfQkxLX1JEKSAoRENMX1VJTlQzMiBkYXRhX2FkZHJzLERDTF9VSU5UMzIgbnVtLCB2b2lkICpkYXRhX2J1Zik7Cit0eXBlZGVmIERDTF9TRENfQ01EX1NUQVRVUyAoKkRDTF9HUERfTVVMX0JMS19XUikgKERDTF9VSU5UMzIgZGF0YV9hZGRycyxEQ0xfVUlOVDMyIG51bSwgdm9pZCAqZGF0YV9idWYpOworCisKK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1NJTkdMRV9CTEtfUkQgc2luZ2xlQmxrUmQ7CisJRENMX01VTF9CTEtfUkQgbXVsQmxrUmQ7CisJRENMX1NJTkdMRV9CTEtfV1Igc2luZ2xlQmxrV3I7CisJRENMX01VTF9CTEtfV1IgbXVsQmxrV3I7CisJRENMX1NEX0lOSVRJVEFMSVpFIHNkSW5pdGl0YWxpemU7CisJRENMX1NFVF9QUkVfRVJBU0VfQ05UIHNldFByZUVyYXNlQ250OworCURDTF9TRF9TRVRfQ0FMTEJBQ0sgc2RTZXRDYWxsQmFjazsKKwlEQ0xfU0VUX1JFQURfVEVTVF9GTEFHIHNkU2V0UmVhZFRlc3RGbGFnOworCURDTF9TRF9SRUFEX1RFU1Qgc2RTZXRSZWFkVGVzdDsJCisJRENMX1NEX1NFVF9VUExMX0NMT0NLX1RFU1Qgc2RTZXRVcGxsQ2xvY2s7CisJRENMX1NEX0VSQVNFX0JMSyBlcmFzZUJsazsKKyAgICBEQ0xfR1BEX01VTF9CTEtfUkQgR3BkTXVsQmxrUmQ7CisgICAgRENMX0dQRF9NVUxfQkxLX1dSIEdwZE11bEJsa1dyOworfVNERHJpdmVyX3Q7CisKKwordHlwZWRlZiBEQ0xfQk9PTCAoKkRDTF9TRElPX1JFR19XUikgKERDTF9TRElPX2Z1bmN0aW9uX2lkX2VudW0gZnVuY3Rpb24sIERDTF9VSU5UMzIgYWRkciwgRENMX1VJTlQzMiBkYXRhLCBEQ0xfU0RJT19jbWQ1M19vcF9lbnVtIG9wKTsKK3R5cGVkZWYgRENMX0JPT0wgKCpEQ0xfU0RJT19SRUdfV1JfSVNSKSAoRENMX1NESU9fZnVuY3Rpb25faWRfZW51bSBmdW5jdGlvbiwgRENMX1VJTlQzMiBhZGRyLCBEQ0xfVUlOVDMyIGRhdGEsIERDTF9TRElPX2NtZDUzX29wX2VudW0gb3ApOwordHlwZWRlZiBEQ0xfQk9PTCAoKkRDTF9TRElPX0RBVEFfV1IpIChEQ0xfU0RJT19mdW5jdGlvbl9pZF9lbnVtIGZ1bmN0aW9uLCBEQ0xfVUlOVDMyIGFkZHIsIERDTF9VSU5UOCAgKmRhdGEsIERDTF9TRElPX2NtZDUzX29wX2VudW0gb3AsIERDTF9VSU5UMzIgY291bnQsIERDTF9CT09MIGJsb2NrKTsKK3R5cGVkZWYgRENMX0JPT0wgKCpEQ0xfU0RJT19SRUdfUkQpIChEQ0xfU0RJT19mdW5jdGlvbl9pZF9lbnVtIGZ1bmN0aW9uLCBEQ0xfVUlOVDMyIGFkZHIsIERDTF9VSU5UMzIgKmRhdGEsIERDTF9TRElPX2NtZDUzX29wX2VudW0gb3ApOwordHlwZWRlZiBEQ0xfQk9PTCAoKkRDTF9TRElPX0RBVEFfUkQpIChEQ0xfU0RJT19mdW5jdGlvbl9pZF9lbnVtIGZ1bmN0aW9uLCBEQ0xfVUlOVDMyIGFkZHIsIERDTF9VSU5UOCAgKmRhdGEsIERDTF9TRElPX2NtZDUzX29wX2VudW0gb3AsIERDTF9VSU5UMzIgY291bnQsIERDTF9CT09MIGJsb2NrKTsKK3R5cGVkZWYgRENMX1NEQ19DTURfU1RBVFVTICgqRENMX1NESU9fQ0hFQ0tfSU5UUikgKERDTF9TRElPX2Z1bmN0aW9uX2lkX2VudW0gZnVuY3Rpb24sIERDTF9CT09MICpwZW5kaW5nKTsKK3R5cGVkZWYgRENMX1NEQ19DTURfU1RBVFVTICgqRENMX1NESU9fRU5BQkxFX0lOVFIpIChEQ0xfU0RJT19mdW5jdGlvbl9pZF9lbnVtIGZ1bmN0aW9uLCBEQ0xfQk9PTCBlbmFibGUpOwordHlwZWRlZiBEQ0xfVUlOVDMyICgqRENMX1NESU9fSU5JVCkgKHZvaWQpOwordHlwZWRlZiBEQ0xfU0RDX0NNRF9TVEFUVVMgKCpEQ0xfU0RJT19BQk9SVCkgKERDTF9TRElPX2Z1bmN0aW9uX2lkX2VudW0gZnVuY3Rpb24pOwordHlwZWRlZiBEQ0xfU0RDX0NNRF9TVEFUVVMgKCpEQ0xfU0RJT19TV19SU1QpICh2b2lkKTsKK3R5cGVkZWYgRENMX1VJTlQzMiAoKkRDTF9TRElPX1FSWV9CTE9DS19TSVpFKSAoRENMX1NESU9fZnVuY3Rpb25faWRfZW51bSBmdW5jdGlvbik7Cit0eXBlZGVmIERDTF9TRENfQ01EX1NUQVRVUyAoKkRDTF9TRElPX1NFVF9CTE9DS19TSVpFKSAoRENMX1NESU9fZnVuY3Rpb25faWRfZW51bSBmdW5jdGlvbiwgRENMX1VJTlQzMiBzaXplKTsKK3R5cGVkZWYgRENMX1NEQ19DTURfU1RBVFVTICgqRENMX1NESU9fR0VUX0JMT0NLX1NJWkUpIChEQ0xfU0RJT19mdW5jdGlvbl9pZF9lbnVtIGZ1bmN0aW9uLCBEQ0xfVUlOVDMyICpzaXplKTsKK3R5cGVkZWYgRENMX1NEQ19DTURfU1RBVFVTICgqRENMX1NESU9fRU5BQkxFX0lPKSAoRENMX1NESU9fZnVuY3Rpb25faWRfZW51bSBmdW5jdGlvbiwgRENMX0JPT0wgZW5hYmxlKTsKK3R5cGVkZWYgRENMX1NEQ19DTURfU1RBVFVTICgqRENMX1NESU9fU0VUX0JVU19XSURUSCkgKERDTF9TRF9CSVRXSURUSCBidXMpOwordHlwZWRlZiB2b2lkICgqRENMX1NESU9fR0VUX0NDQ1IpIChEQ0xfVUlOVDggKmJ1ZiwgRENMX1VJTlQzMiBidWZMZW4pOwordHlwZWRlZiB2b2lkICgqRENMX1NESU9fR0VUX0ZCUikgKERDTF9VSU5UOCAqYnVmLCBEQ0xfVUlOVDMyIGJ1Zkxlbik7CisKK3R5cGVkZWYgRENMX1NEQ19DTURfU1RBVFVTICgqRENMX1NESU9fQ01ENTJfUkVBRCkoRENMX1NESU9fZnVuY3Rpb25faWRfZW51bSBmdW5jdGlvbiwgRENMX1VJTlQzMiBhZGRyLCBEQ0xfVUlOVDggKnJkYXRhLCBEQ0xfVUlOVDggKnI1cmVzcCk7Cit0eXBlZGVmIERDTF9TRENfQ01EX1NUQVRVUyAoKkRDTF9TRElPX0NNRDUyX1dSSVRFKShEQ0xfU0RJT19mdW5jdGlvbl9pZF9lbnVtIGZ1bmN0aW9uLCBEQ0xfVUlOVDMyIGFkZHIsIERDTF9VSU5UOCB3ZGF0YSwgRENMX1VJTlQ4ICpyNXJlc3ApOwordHlwZWRlZiBEQ0xfU0RDX0NNRF9TVEFUVVMgKCpEQ0xfU0RJT19DTUQ1Ml9XUklURV9SRUFEKShEQ0xfU0RJT19mdW5jdGlvbl9pZF9lbnVtIGZ1bmN0aW9uLCBEQ0xfVUlOVDMyIGFkZHIsIERDTF9VSU5UOCB3ZGF0YSwgRENMX1VJTlQ4ICpyZGF0YSwgRENMX1VJTlQ4ICpyNXJlc3ApOwordHlwZWRlZiBEQ0xfU0RDX0NNRF9TVEFUVVMgKCpEQ0xfU0RJT19DTUQ1M19SRUFEKShEQ0xfU0RJT19mdW5jdGlvbl9pZF9lbnVtIGZ1bmN0aW9uLCBEQ0xfVUlOVDMyIGFkZHIsIERDTF9VSU5UMzIgZGF0YSwgRENMX1NESU9fY21kNTNfb3BfZW51bSBvcCwgRENMX1VJTlQzMiBjb3VudCwgRENMX0JPT0wgYmxvY2ssIERDTF9VSU5UOCAqcjVyZXNwKTsKK3R5cGVkZWYgRENMX1NEQ19DTURfU1RBVFVTICgqRENMX1NESU9fQ01ENTNfV1JJVEUpKERDTF9TRElPX2Z1bmN0aW9uX2lkX2VudW0gZnVuY3Rpb24sIERDTF9VSU5UMzIgYWRkciwgRENMX1VJTlQzMiBkYXRhLCBEQ0xfU0RJT19jbWQ1M19vcF9lbnVtIG9wLCBEQ0xfVUlOVDMyIGNvdW50LCBEQ0xfQk9PTCBibG9jaywgRENMX1VJTlQ4ICpyNXJlc3ApOwordHlwZWRlZiB2b2lkICgqRENMX1NESU9faW50X3JlZ2lzdHJhdGlvbikoRENMX1NESU9fZnVuY3Rpb25faWRfZW51bSBmdW5jdGlvbiwgdm9pZCAoZnVuYykodm9pZCkpOwordHlwZWRlZiBEQ0xfU0RDX0NNRF9TVEFUVVMgKCpEQ0xfU0RJT19NQ1VETUFfUkVBRCkoRENMX1VJTlQzMiAqcmRhdGEpOwordHlwZWRlZiBEQ0xfU0RDX0NNRF9TVEFUVVMgKCpEQ0xfU0RJT19NQ1VETUFfV1JJVEUpKERDTF9VSU5UMzIgd2RhdGEpOwordHlwZWRlZiBEQ0xfU0RDX0NNRF9TVEFUVVMgKCpEQ0xfU0RJT19DTEtQQURSRURfUkVBRCkoRENMX1VJTlQzMiAqcmRhdGEpOwordHlwZWRlZiBEQ0xfU0RDX0NNRF9TVEFUVVMgKCpEQ0xfU0RJT19DTEtQQURSRURfV1JJVEUpKERDTF9VSU5UMzIgd2RhdGEpOwordHlwZWRlZiBEQ0xfU0RDX0NNRF9TVEFUVVMgKCpEQ0xfU0RJT19GT1JDRU1DVV9SRUFEKShEQ0xfVUlOVDMyICpyZGF0YSk7Cit0eXBlZGVmIERDTF9TRENfQ01EX1NUQVRVUyAoKkRDTF9TRElPX0ZPUkNFTUNVX1dSSVRFKShEQ0xfVUlOVDMyIHdkYXRhKTsKK3R5cGVkZWYgRENMX1NEQ19DTURfU1RBVFVTICgqRENMX1NESU9fR0VUQ0xLKShEQ0xfVUlOVDMyICpyZGF0YSk7Cit0eXBlZGVmIERDTF9TRENfQ01EX1NUQVRVUyAoKkRDTF9TRElPX1NFVENMSykoRENMX1VJTlQzMiB3ZGF0YSk7CisKKy8vZ3VpbGluCisKK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1NESU9fUkVHX1dSIHJlZ1dyOworCURDTF9TRElPX1JFR19XUl9JU1IgcmVnV3JJbklzcjsKKwlEQ0xfU0RJT19EQVRBX1dSIGRhdGFXcjsKKwlEQ0xfU0RJT19SRUdfUkQgcmVnUmQ7CisJRENMX1NESU9fREFUQV9SRCBkYXRhUmQ7CisJRENMX1NESU9fQ0hFQ0tfSU5UUiBjaGVja0ludHI7CisJRENMX1NESU9fRU5BQkxFX0lOVFIgZW5hYmxlSW50cjsKKwlEQ0xfU0RJT19JTklUIHNkaW9Jbml0aXRhbGl6ZTsKKwlEQ0xfU0RJT19BQk9SVCBhYm9ydDsKKwlEQ0xfU0RJT19TV19SU1Qgc3dSc3Q7CisJRENMX1NESU9fUVJZX0JMT0NLX1NJWkUgcXJ5QmxrU2l6ZTsKKwlEQ0xfU0RJT19TRVRfQkxPQ0tfU0laRSBzZXRCbGtTaXplOworCURDTF9TRElPX0dFVF9CTE9DS19TSVpFIGdldEJsa1NpemU7CisJRENMX1NESU9fRU5BQkxFX0lPIGVuYWJsZUlPOworCURDTF9TRElPX1NFVF9CVVNfV0lEVEggc2V0QnVzV2lkdGg7CisJRENMX1NESU9fR0VUX0NDQ1IgZ2V0Q0NDUjsKKwlEQ0xfU0RJT19HRVRfRkJSIGdldEZCUjsKKworICAgIERDTF9TRElPX0NNRDUyX1JFQUQgY21kNTJfcmVhZDsKKyAgICBEQ0xfU0RJT19DTUQ1Ml9XUklURSBjbWQ1Ml93cml0ZTsKKyAgICBEQ0xfU0RJT19DTUQ1Ml9XUklURV9SRUFEIGNtZDUyX3dyaXRlX3JlYWQ7CisgICAgRENMX1NESU9fQ01ENTNfUkVBRCBjbWQ1M19yZWFkOworICAgIERDTF9TRElPX0NNRDUzX1dSSVRFIGNtZDUzX3dyaXRlOworICAgIERDTF9TRElPX2ludF9yZWdpc3RyYXRpb24gaGlzcl9jYWxsYmFjazsKKyAgICBEQ0xfU0RJT19NQ1VETUFfUkVBRCBtY3VkbWFfcmVhZDsKKyAgICBEQ0xfU0RJT19NQ1VETUFfV1JJVEUgbWN1ZG1hX3dyaXRlOworICAgIERDTF9TRElPX0NMS1BBRFJFRF9SRUFEIGNsa3BhZHJlZF9yZWFkOworICAgIERDTF9TRElPX0NMS1BBRFJFRF9XUklURSBjbGtwYWRyZWRfd3JpdGU7CisgICAgRENMX1NESU9fRk9SQ0VNQ1VfUkVBRCBmb3JjZW1jdV9yZWFkOworICAgIERDTF9TRElPX0ZPUkNFTUNVX1dSSVRFIGZvcmNlbWN1X3dyaXRlOworICAgIERDTF9TRElPX0dFVENMSyBnZXRjbGs7CisgICAgRENMX1NESU9fU0VUQ0xLIHNldGNsazsKKyAgICAKK31TRElPRHJpdmVyX3Q7CisvL2d1aWxpbgordHlwZWRlZiB2b2lkICgqIERDTF9NU0RDX1BETikoRENMX0JPT0xFQU4gcHdEb3duKTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwkvL3ZvaWQgKCptb2R1bGVQRE4pIChEQ0xfQk9PTEVBTiBwd0Rvd24pOworCURDTF9NU0RDX1BETiBtb2R1bGVQRE47Cit9TVNEQ0RyaXZlcl90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfRkxBR1NfVCBmb3IgU0QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBEQ0xfU0RfRkxBR1NfREVWSUNFX0NBUkQxCQkJMHgxCisjZGVmaW5lIERDTF9TRF9GTEFHU19ERVZJQ0VfQ0FSRDIJCQkweDIKKyNkZWZpbmUgRENMX1NEX0ZMQUdTX0RFVklDRV9TSU1QTFVTCQkJMHg0CisjZGVmaW5lIERDTF9TRElPX0ZMQUdTX1NESU8xCQkJCTB4MTAwCisjZGVmaW5lIERDTF9TRElPX0ZMQUdTX1NESU8yCQkJCTB4MjAwCisjZGVmaW5lIERDTF9TRElPX0ZMQUdTX0FMTAkJCQkJMHgzMDAKKyNkZWZpbmUgRENMX1NEX0ZMQUdTX1VTQUdFX0dFVF9JTkZPUk1BVElPTgkweDEwMDAwCisjZGVmaW5lIERDTF9TRF9GTEFHU19VU0FHRV9DTUQJCQkJMHgyMDAwMAorCisjZGVmaW5lIERDTF9TRF9GTEFHU19ERVZJQ0VfQUxMIChEQ0xfU0RfRkxBR1NfREVWSUNFX0NBUkQxfERDTF9TRF9GTEFHU19ERVZJQ0VfQ0FSRDJ8RENMX1NEX0ZMQUdTX0RFVklDRV9TSU1QTFVTKQorI2RlZmluZSBEQ0xfU0RfRkxBR1NfVVNBR0VfQUxMIChEQ0xfU0RfRkxBR1NfVVNBR0VfR0VUX0lORk9STUFUSU9OfERDTF9TRF9GTEFHU19VU0FHRV9DTUQpCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NUUkxfQ01EIGZvciBTRAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNEX0NNRFMgICAgXAorICAgU0RfQ1RSTF9DTURfQkFTRSwgXAorICAgU0RfQ1RSTF9DTURfUkVBRCA9IFNEX0NUUkxfQ01EX0JBU0UsIFwKKyAgIFNEX0NUUkxfQ01EX1dSSVRFLCBcCisgICBTRF9DVFJMX0NNRF9SRUFEX09ERF9TSVpFLCBcCisgICBTRF9DVFJMX0NNRF9XUklURV9PRERfU0laRSwgXAorICAgU0RfQ1RSTF9DTURfSU5JVCwgXAorICAgU0RfQ1RSTF9DTURfSVNfSU5JVEVELCBcCisgICBTRF9DVFJMX0NNRF9BTkFMT0dfU1dJVENILCBcCisgICBTRF9DVFJMX0NNRF9GQVNUX0ZPUk1BVF9TVEFSVCwgXAorICAgU0RfQ1RSTF9DTURfRkFTVF9GT1JNQVRfU1RPUCwgXAorICAgU0RfQ1RSTF9DTURfSVNfRkFTVF9GT1JNQVRfUlVOTklORywgXAorICAgU0RfQ1RSTF9DTURfR0VUX0NBUEFDSVRZLCBcCisgICBTRF9DVFJMX0NNRF9JU19FWElTVEVOQ0UsIFwKKyAgIFNEX0NUUkxfQ01EX1BPTExfRVhJU1RFTkNFLCBcCisgICBTRF9DVFJMX0NNRF9TRVRfQ0xFQVJfRVhJU1RFTkNFLCBcCisgICBTRF9DVFJMX0NNRF9XUklURV9QUk9URUNUSU9OLCBcCisgICBTRF9DVFJMX0NNRF9RVUVSWV9FVkVSX1BMVUdPVVQsIFwKKyAgIFNEX0NUUkxfQ01EX1JFU0VUX0VWRVJfUExVR09VVCwgXAorICAgU0RfQ1RSTF9DTURfRk9SQ0VfU0lOR0xFX0xJTkUsIFwKKyAgIFNEX0NUUkxfQ01EX0dPX0lETEUsIFwKKyAgIFNEX0NUUkxfQ01EX0NBQ0hFQUJMRV9CVUZGRVIsIFwKKyAgIFNEX0NUUkxfQ01EX0FERF9DQUxMQkFDSywgXAorICAgU0RfQ1RSTF9DTURfU0VUX0ZMQUcsIFwKKyAgIFNEX0NUUkxfQ01EX1JFQURfVEVTVCwgXAorICAgU0RfQ1RSTF9DTURfU0VUX0NMT0NLX1RFU1QsIFwKKyAgIFNEX0NUUkxfQ01EX0ZMVVNILCBcCisgICBTRF9DVFJMX0NNRF9HRVRfQU5EX0NMRUFSX01FRElBX0NIQU5HRUQsIFwKKyAgIFNEX0NUUkxfQ01EX0dQRF9SRUFELFwKKyAgIFNEX0NUUkxfQ01EX0dQRF9XUklURSxcCisgICBTRF9DVFJMX0NNRF9HRVRfQkRfU1RSVUNUX05VTSxcCisgICBTRF9DVFJMX0NNRF9EVU1NWV9FTkQsCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0RBVEFfVDogRGVmaW5lIHRoZSBDb250cm9sIGRhdGEgc3RydWN0dXJlIGZvciBlYWNoIG1vZHVsZSdzIGNvbW1hbmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRk9SIFNEX0NUUkxfQ01EX1JFQUQgY29udHJvbCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfVUlOVDMyCXU0U2VjdG9yOyAvL3RoaXMgc3BlY2lmeSB0aGUgc3RhcnRpbmcgc2VjdG9yIHRvIHJlYWQKKwlEQ0xfVUlOVDMyCXU0U2VjdG9yczsgLy90aGlzIHNwZWNpZnkgdGhlIG51bWJlciBvZiBzZWN0b3JzIHRvIHJlYWQKKwl2b2lkCQkqYnVmZmVyQWRkcjsgLy93ZSB3aWxsIG1vdmUgcmVhZCBkYXRhIGZyb20gY2FyZCB0byB0aGlzIGFkZHJlc3MKK30gU0RfQ1RSTF9SRUFEX1Q7CisKKy8qIEZPUiBTRF9DVFJMX0NNRF9XUklURSBjb250cm9sIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMzIJdTRTZWN0b3I7IC8vdGhpcyBzcGVjaWZ5IHRoZSBzdGFydGluZyBzZWN0b3IgdG8gd3JpdGUKKwlEQ0xfVUlOVDMyCXU0U2VjdG9yczsgLy90aGlzIHNwZWNpZnkgdGhlIG51bWJlciBvZiBzZWN0b3JzIHRvIHdyaXRlCisJdm9pZAkJKmJ1ZmZlckFkZHI7IC8vd2Ugd2lsbCBtb3ZlIG1vdmUgZGF0YSBmcm9tIHRoaXMgYWRkcmVzcyB0byBjYXJkCit9IFNEX0NUUkxfV1JJVEVfVDsKKworLyogRk9SIFNEX0NUUkxfQ01EX0dQRF9SRUFEIGNvbnRyb2wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQzMgl1NFNlY3RvcjsgLy90aGlzIHNwZWNpZnkgdGhlIHN0YXJ0aW5nIHNlY3RvciB0byByZWFkCisJRENMX1VJTlQzMgl1NFNlY3RvcnM7IC8vdGhpcyBzcGVjaWZ5IHRoZSBudW1iZXIgb2Ygc2VjdG9ycyB0byByZWFkCisJdm9pZAkJKmJ1ZmZlckhlYWQ7IC8vd2Ugd2lsbCBtb3ZlIHJlYWQgZGF0YSBmcm9tIGNhcmQgdG8gdGhpcyBhZGRyZXNzCisJdm9pZCAgICAgICAgKmJ1ZmZlclRhaWw7Cit9IFNEX0NUUkxfR1BEX1JFQURfVDsKKworLyogRk9SIFNEX0NUUkxfQ01EX0dQRF9XUklURSBjb250cm9sIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMzIJdTRTZWN0b3I7IC8vdGhpcyBzcGVjaWZ5IHRoZSBzdGFydGluZyBzZWN0b3IgdG8gd3JpdGUKKwlEQ0xfVUlOVDMyCXU0U2VjdG9yczsgLy90aGlzIHNwZWNpZnkgdGhlIG51bWJlciBvZiBzZWN0b3JzIHRvIHdyaXRlCisJdm9pZAkJKmJ1ZmZlckhlYWQ7IC8vd2Ugd2lsbCBtb3ZlIG1vdmUgZGF0YSBmcm9tIHRoaXMgYWRkcmVzcyB0byBjYXJkCisJdm9pZCAgICAgICAgKmJ1ZmZlclRhaWw7Cit9IFNEX0NUUkxfR1BEX1dSSVRFX1Q7Cit0eXBlZGVmIHN0cnVjdAoreworICAgIERDTF9VSU5UMzIgbWF4X2JkX251bTsvL3NwZWNpZnkgdGhlIG1heCBiZCBzdHJ1Y3QgbnVtIGZvciBsaW5rIGxpc3QgZG1hIHRyYW5zZmVyCit9IFNEX0NUUkxfTUFYX0JEX1NUUlVDVF9OVU1fVDsKKworLyogRk9SIFNEX0NUUkxfQ01EX1JFQURfT0REX1NJWkUgY29udHJvbCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfVUlOVDMyCXU0U2VjdG9yOyAvL3RoaXMgc3BlY2lmeSB0aGUgc3RhcnRpbmcgc2VjdG9yIHRvIHJlYWQKKwlEQ0xfVUlOVDMyCXU0U2l6ZTsgLy90aGlzIHNwZWNpZnkgdGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkCisJdm9pZAkJKmJ1ZmZlckFkZHI7IC8vd2Ugd2lsbCBtb3ZlIHJlYWQgZGF0YSBmcm9tIGNhcmQgdG8gdGhpcyBhZGRyZXNzCit9IFNEX0NUUkxfUkVBRF9PRERfVDsKKworLyogRk9SIFNEX0NUUkxfQ01EX1dSSVRFX09ERF9TSVpFIGNvbnRyb2wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQzMgl1NFNlY3RvcjsgLy90aGlzIHNwZWNpZnkgdGhlIHN0YXJ0aW5nIHNlY3RvciB0byB3cml0ZQorCURDTF9VSU5UMzIJdTRTaXplOyAvL3RoaXMgc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCisJdm9pZAkJKmJ1ZmZlckFkZHI7IC8vd2Ugd2lsbCBtb3ZlIG1vdmUgZGF0YSBmcm9tIHRoaXMgYWRkcmVzcyB0byBjYXJkCit9IFNEX0NUUkxfV1JJVEVfT0REX1Q7CisKKy8qIEZPUiBTRF9DVFJMX0NNRF9BTkFMT0dfU1dJVENIIGNvbnRyb2wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQzMgl1NFRhcmdldEludGVyZmFjZTsKK30gU0RfQ1RSTF9BTkFMT0dfU1dJVENIX1Q7CisKKy8qIEZPUiBTRF9DVFJMX0NNRF9HRVRfQ0FQQUNJVFkgY29udHJvbCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfQk9PTAlnSGlnaENhcGFjaXR5Q2FyZDsKKwlEQ0xfVUlOVDY0CXB1OENhcGFjaXR5OworfSBTRF9DVFJMX0dFVF9DQVBBQ0lUWV9UOworCisvKiBGT1IgU0RfQ1RSTF9DTURfUkVBRFkgY29udHJvbCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfQk9PTCBmZ0luaXRlZDsKK30gU0RfQ1RSTF9JTklURURfVDsKKworLyogRk9SIFNEX0NUUkxfQ01EX0lTX0VYSVNURU5DRSBhbmQgU0RfQ1RSTF9DTURfUE9MTF9FWElTVEVOQ0UgY29udHJvbCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfQk9PTCBmZ1ByZXNlbnQ7Cit9IFNEX0NUUkxfRVhJU1RFTkNFX1Q7CisKKy8qIEZPUiBTRF9DVFJMX0NNRF9XUklURV9QUk9URUNUSU9OIGNvbnRyb2wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wgZmdSZWFkT25seTsKK30gU0RfQ1RSTF9XUklURV9QUk9URUNUSU9OX1Q7CisKKy8qIEZPUiBTRF9DVFJMX0NNRF9RVUVSWV9FVkVSX1BMVUdPVVQgY29udHJvbCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfQk9PTCBmZ0V2ZXJQTHVnT3V0OworfSBTRF9DVFJMX1FVRVJZX0VWRVJfUExVR09VVF9UOworCisvKiBGT1IgU0RfQ1RSTF9DTURfRk9SQ0VfU0lOR0xFX0xJTkUgY29udHJvbCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfQk9PTCBmZ0lzSXRUcnVlOworfSBTRF9DVFJMX0ZPUkNFX1NJTkdMRV9MSU5FX1Q7CisKKy8qIEZPUiBTRF9DVFJMX0NNRF9DQUNIRUFCTEVfQlVGRkVSIGNvbnRyb2wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wgZmdJc0NBQ0hFQUJMRTsKK30gU0RfQ1RSTF9DQUNIRUFCTEVfQlVGRkVSX1Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworCU1TRENfQ0FMTEJBQ0sgY2FsbGJhY2sxOworCU1TRENfQ0FMTEJBQ0sgY2FsbGJhY2syOworCU1TRENfQ0FMTEJBQ0sgY2FsbGJhY2szOworCU1TRENfQ0FMTEJBQ0sgY2FsbGJhY2s0OworCU1TRENfQ0FMTEJBQ0sgY2FsbGJhY2s1OworCU1TRENfQ0FMTEJBQ0sgY2FsbGJhY2s2OworfVNEX0NUUkxfQ0FMTEJBQ0tfVDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisJRENMX1VJTlQzMiByZWFkVGVzdEZsYWc7Cit9U0RfQ1RSTF9TRVRfUkVBRF9URVNUX0ZMQUdfVDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisJRENMX1VJTlQzMiBzdGFydFNlY3RvcjsKKwlEQ0xfVUlOVDMyIHNlY3Rvck51bTsKK31TRF9DVFJMX0ZMVVNIX1Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworCURDTF9CT09MIGVuYWJsZTsKK31TRF9DVFJMX0ZBU1RfRk9STUFUX1Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworCURDTF9CT09MIGNoYW5nZWQ7Cit9U0RfQ1RSTF9NRURJQV9DSEFOR0VEX1Q7CisKKyNkZWZpbmUgU0RfQ1RSTFMgXAorICAgU0RfQ1RSTF9SRUFEX1QJCXJTRFJlYWQ7IFwKKyAgIFNEX0NUUkxfV1JJVEVfVAkJclNEV3JpdGU7IFwKKyAgIFNEX0NUUkxfUkVBRF9PRERfVAlyU0RSZWFkT2RkO1wKKyAgIFNEX0NUUkxfV1JJVEVfT0REX1QJclNEV3JpdGVPZGQ7IFwKKyAgIFNEX0NUUkxfQU5BTE9HX1NXSVRDSF9UIHJTRFN3aXRjaDsgXAorICAgU0RfQ1RSTF9HRVRfQ0FQQUNJVFlfVAlyU0RHZXRDYXBhY2l0eTsgXAorICAgU0RfQ1RSTF9JTklURURfVCByU0RJbml0ZWQ7IFwKKyAgIFNEX0NUUkxfRVhJU1RFTkNFX1QgclNERXhpc3RlbmNlOyBcCisgICBTRF9DVFJMX0VYSVNURU5DRV9UIHJTRFBvbGxFeGlzdGVuY2U7IFwKKyAgIFNEX0NUUkxfV1JJVEVfUFJPVEVDVElPTl9UIHJTRFdyaXRlUHJvcmVjdDsgXAorICAgU0RfQ1RSTF9RVUVSWV9FVkVSX1BMVUdPVVRfVCByU0RRdWVyeUV2ZXJQdWdPdXQ7IFwKKyAgIFNEX0NUUkxfRk9SQ0VfU0lOR0xFX0xJTkVfVCByU0RGb3JjZVNpbmdsZUxpbmU7IFwKKyAgIFNEX0NUUkxfQ0FDSEVBQkxFX0JVRkZFUl9UIHJTRENhY2hlYWJsZUJ1ZjsgXAorICAgU0RfQ1RSTF9DQUxMQkFDS19UIHJTRENhbGxCYWNrRnVuYzsgXAorICAgU0RfQ1RSTF9TRVRfUkVBRF9URVNUX0ZMQUdfVCByU0RTZXRSZWFkVGVzdEZsYWc7IFwKKyAgIFNEX0NUUkxfRkxVU0hfVCByU0RGbHVzaDsgXAorICAgU0RfQ1RSTF9GQVNUX0ZPUk1BVF9UIHJTREZhc3RGb3JtYXQ7IFwKKyAgIFNEX0NUUkxfTUVESUFfQ0hBTkdFRF9UIHJTRE1lZGlhQ2hhbmdlZDsgXAorICAgU0RfQ1RSTF9HUERfUkVBRF9UICAgclNEUmVhZEdQRDtcCisgICBTRF9DVFJMX0dQRF9XUklURV9UICAgclNEV3JpdGVHUEQ7XAorICAgU0RfQ1RSTF9NQVhfQkRfU1RSVUNUX05VTV9UIHJTRE1heEJEOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBmb2xsb3dpbmcgaXMgdGhlIHBhcnQgb2YgU0RJTworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0ZMQUdTX1QgZm9yIFNESU8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBEQ0xfU0RJT19GTEFHU19ERVZJQ0VfQ0FSRDEgMHgxCisjZGVmaW5lIERDTF9TRElPX0ZMQUdTX0RFVklDRV9DQVJEMiAweDIKKyNkZWZpbmUgRENMX1NESU9fRkxBR1NfVVNBR0VfR0VUX0lORk9STUFUSU9OCTB4MTAKKyNkZWZpbmUgRENMX1NESU9fRkxBR1NfVVNBR0VfQ01ECTB4MjAKKworI2RlZmluZSBEQ0xfU0RJT19GTEFHU19ERVZJQ0VfQUxMIChEQ0xfU0RJT19GTEFHU19ERVZJQ0VfQ0FSRDF8RENMX1NESU9fRkxBR1NfREVWSUNFX0NBUkQyKQorI2RlZmluZSBEQ0xfU0RJT19GTEFHU19VU0FHRV9BTEwgKERDTF9TRElPX0ZMQUdTX1VTQUdFX0dFVF9JTkZPUk1BVElPTnxEQ0xfU0RJT19GTEFHU19VU0FHRV9DTUQpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0NNRCBmb3IgU0RJTworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNESU9fQ01EUyAgICBcCisgICBTRElPX0NUUkxfQ01EX1JFR19XUiwgXAorICAgU0RJT19DVFJMX0NNRF9SRUdfV1JfSVNSLCBcCisgICBTRElPX0NUUkxfQ01EX0RBVEFfV1IsIFwKKyAgIFNESU9fQ1RSTF9DTURfUkVHX1JELCAgXAorICAgU0RJT19DVFJMX0NNRF9EQVRBX1JELCBcCisgICBTRElPX0NUUkxfQ01EX0NIRUNLX0lOVFIsIFwKKyAgIFNESU9fQ1RSTF9DTURfRU5BQkxFX0lOVFIsIFwKKyAgIFNESU9fQ1RSTF9DTURfSU5JVCwgXAorICAgU0RJT19DVFJMX0NNRF9BQk9SVCwgXAorICAgU0RJT19DVFJMX0NNRF9TV19SU1QsIFwKKyAgIFNESU9fQ1RSTF9DTURfUVVFUllfQkxLX1NJWkUsIFwKKyAgIFNESU9fQ1RSTF9DTURfU0VUX0JMS19TSVpFLCBcCisgICAgU0RJT19DVFJMX0NNRF9HRVRfQkxLX1NJWkUsIFwKKyAgIFNESU9fQ1RSTF9DTURfRU5BQkxFX0lPLCBcCisgICBTRElPX0NUUkxfQ01EX1NFVF9CVVNfV0lEVEgsIFwKKyAgIFNESU9fQ1RSTF9DTURfR0VUX0NDQ1IsIFwKKyAgIFNESU9fQ1RSTF9DTURfR0VUX0ZCUiwgXAorICAgU0RJT19DVFJMX0NNRF9DTUQ1Ml9SRUFELCBcCisgICBTRElPX0NUUkxfQ01EX0NNRDUyX1dSSVRFLCBcCisgICBTRElPX0NUUkxfQ01EX0NNRDUyX1dSSVRFX1JFQUQsIFwKKyAgIFNESU9fQ1RSTF9DTURfQ01ENTNfUkVBRCwgXAorICAgU0RJT19DVFJMX0NNRF9DTUQ1M19XUklURSwgXAorICAgU0RJT19DVFJMX0NNRF9NQ1VETUFfUkVBRCwgXAorICAgU0RJT19DVFJMX0NNRF9NQ1VETUFfV1JJVEUsIFwKKyAgICBTRElPX0NUUkxfQ01EX0NMS1BBRFJFRF9SRUFELCBcCisgICAgU0RJT19DVFJMX0NNRF9DTEtQQURSRURfV1JJVEUsIFwKKyAgICBTRElPX0NUUkxfQ01EX0ZPUkNFTUNVX1JFQUQsIFwKKyAgICBTRElPX0NUUkxfQ01EX0ZPUkNFTUNVX1dSSVRFLCBcCisgICAgU0RJT19DVFJMX0NNRF9HRVRDTEssIFwKKyAgICBTRElPX0NUUkxfQ01EX1NFVENMSywKKy8vZ3VpbGluCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NUUkxfREFUQV9UOiBEZWZpbmUgdGhlIENvbnRyb2wgZGF0YSBzdHJ1Y3R1cmUgZm9yIGVhY2ggbW9kdWxlJ3MgY29tbWFuZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEZvciBTRElPX0NUUkxfQ01EX1JFR19XUiwgU0RJT19DVFJMX0NNRF9SRUdfV1JfSVNSLCBTRElPX0NUUkxfQ01EX1JFR19SRCBjb250cm9sIGNvbW1hbmQuKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1NESU9fZnVuY3Rpb25faWRfZW51bSBmdW5jdGlvbjsKKwlEQ0xfVUlOVDMyIGFkZHI7CS8vIGNhcmQncyBhZGRyZXNzIHRvIGFjY2VzcworCURDTF9VSU5UMzIgZGF0YTsJCS8vIHRoZSBkYXRhIHdhbnQgdG8gcmVhZCBmcm9tL3dyaXRlIGZyb20gY2FyZAorCURDTF9TRElPX2NtZDUzX29wX2VudW0gb3A7CS8vIG9wZXJhdGlvbiBtb2RlCit9IFNESU9fQ1RSTF9SRUdfUldfVDsKKworLyogRm9yIFNESU9fQ1RSTF9DTURfREFUQV9XUiwgU0RJT19DVFJMX0NNRF9EQVRBX1JELCAgY29udHJvbCBjb21tYW5kLiovCit0eXBlZGVmIHN0cnVjdHsKKwlEQ0xfU0RJT19mdW5jdGlvbl9pZF9lbnVtIGZ1bmN0aW9uOwkJLy8gZnVuY3Rpb24KKwlEQ0xfQk9PTCBibG9jazsJCS8vIGJsb2NrIG1vZGUgb3Igbm90CisJRENMX1NESU9fY21kNTNfb3BfZW51bSBvcDsJLy8gb3BlcmF0aW9uIG1vZGUKKwlEQ0xfVUlOVDE2IGNvdW50OwkJLy8gYnl0ZSBvciBibG9jayBjb3VudAorCURDTF9VSU5UMzIgYWRkcjsJCS8vIGFkZHJlc3MKKwlEQ0xfVUlOVDMyIGJ1ZmZlcjsJCS8vIGFkZHJlc3Mgb2YgYnVmZmVyIGZvciBkYXRhIHRyYW5zZmVyCit9U0RJT19DVFJMX0RBVF9SV19UOworCisvKiBGb3IgU0RJT19DVFJMX0NNRF9TRVRfQkxLX1NJWkUsIFNESU9fQ1RSTF9DTURfR0VUX0JMS19TSVpFICwgY29udHJvbCBjb21tYW5kLiovCit0eXBlZGVmIHN0cnVjdHsKKwlEQ0xfU0RJT19mdW5jdGlvbl9pZF9lbnVtIGZ1bmN0aW9uOworCURDTF9VSU5UMzIgc2l6ZTsKK31TRElPX0NUUkxfU0VUX0JMS19TSVpFX1Q7CisKKy8qIEZvciBTRElPX0NUUkxfQ01EX0NIRUNLX0lOVFIsICBjb250cm9sIGNvbW1hbmQuKi8KK3R5cGVkZWYgc3RydWN0eworCURDTF9TRElPX2Z1bmN0aW9uX2lkX2VudW0gZnVuY3Rpb247CisJRENMX0JPT0wgKnBlbmRpbmc7Cit9U0RJT19DVFJMX0NIRUNLX0lOVFJfVDsKKworLyogRm9yIFNESU9fQ1RSTF9DTURfRU5BQkxFX0lOVFIsICBjb250cm9sIGNvbW1hbmQuKi8KK3R5cGVkZWYgc3RydWN0eworCURDTF9TRElPX2Z1bmN0aW9uX2lkX2VudW0gZnVuY3Rpb247CisJRENMX0JPT0wgZW5hYmxlOworfVNESU9fQ1RSTF9FTkFCTEVfVDsKKworLyogRm9yIFNESU9fQ1RSTF9DTURfR0VUX0NDQ1IgYW5kIFNESU9fQ1RSTF9DTURfR0VUX0ZCUiwgIGNvbnRyb2wgY29tbWFuZC4qLwordHlwZWRlZiBzdHJ1Y3R7CisJRENMX1VJTlQ4ICpidWZmZXI7CisJRENMX1VJTlQzMiBidWZmZXJMZW5ndGg7Cit9U0RJT19DVFJMX0dFVF9JTkZPX1Q7CisKK3R5cGVkZWYgc3RydWN0eworLy8JcndfZGlyX2VudW0gcnc7CS8vIGRpcmVjdG9uIChpbnB1dCkwPXJlYWQsMT13cml0ZQorCWthbF91aW50OCBydzsJLy8gZGlyZWN0b24gKGlucHV0KTA9cmVhZCwxPXdyaXRlCisJa2FsX3VpbnQ4IGZ1bmM7CS8vIGZ1bmN0aW9uIChpbnB1dCkKKwlrYWxfdWludDggcmRhdGE7CS8vIHdyaXRlIGRhdGEgb3IgcmVhZCBiYWNrIGRhdGEgKElucHV0ICwgb3V0cHV0KQorCWthbF91aW50OCB3ZGF0YTsJLy8gd3JpdGUgZGF0YSBvciByZWFkIGJhY2sgZGF0YSAoSW5wdXQgLCBvdXRwdXQpCisJa2FsX2Jvb2wgcmF3OwkJLy8gcmVhZCBhZnRlciB3cml0ZQorCWthbF9ib29sIHN0b3A7CQkvLyBzdG9wIGRhdGEgdHJhbnNmZXIgCisJa2FsX3VpbnQzMiBhZGRyOwkvLyBhZGRyZXNzIChpbnB1dCkKKyAgICBrYWxfdWludDggcjVfcmVzcDsgIC8vIFI1Cit9U0RJT19DVFJMX0NNRDUyX1Q7CisKK3R5cGVkZWYgc3RydWN0eworLy8JcndfZGlyX2VudW0gcnc7CS8vIGRpcmVjdG9uIChpbnB1dCkwPXJlYWQsMT13cml0ZQorCWthbF91aW50OCBydzsJLy8gZGlyZWN0b24gKGlucHV0KTA9cmVhZCwxPXdyaXRlCisJa2FsX3VpbnQ4IGZ1bmM7CS8vIGZ1bmN0aW9uIChpbnB1dCkKKyAgICBrYWxfdWludDggcjVfcmVzcDsgIC8vIFI1CisvLyAgY21kNTNfb3BfZW51bSBvcDsgICAgICAgLy8gb3BlcmF0aW9uIG1vZGUsMD1GSVgsMT1JTkMKKyAgICBrYWxfdWludDggb3A7ICAgICAgIC8vIG9wZXJhdGlvbiBtb2RlLDA9RklYLDE9SU5DCisgICAga2FsX2Jvb2wgYmxvY2s7ICAgICAvLyBibG9jayBtb2RlIG9yIG5vdAorICAgIGthbF91aW50MTYgY291bnQ7ICAgICAgIC8vIGJ5dGUgb3IgYmxvY2sgY291bnQKKyAgICBrYWxfdWludDMyIGFkZHI7ICAgICAgICAvLyBhZGRyZXNzCisgICAga2FsX3VpbnQzMiBidWZmZXI7ICAvLyBhZGRyZXNzIG9mIGJ1ZmZlciBmb3IgZGF0YSB0cmFuc2ZlcgorfVNESU9fQ1RSTF9DTUQ1M19UOworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBrYWxfdWludDMyIGRhdGE7Cit9U0RJT19DVFJMX0NNRF9SRUdfVDsKKworI2RlZmluZSBTRElPX0NUUkxTIFwKKyAgIFNESU9fQ1RSTF9SRUdfUldfVAkJclNESU9SZWdSdzsgXAorICAgU0RJT19DVFJMX0RBVF9SV19UCQlyU0RJT0RhdFJ3OyBcCisgICBEQ0xfU0RJT19mdW5jdGlvbl9pZF9lbnVtCXJTRElPRnVuY3Rpb247IFwKKyAgIFNESU9fQ1RSTF9TRVRfQkxLX1NJWkVfVAlyU0RJT1NldEJsa1NpemU7IFwKKyAgIFNESU9fQ1RSTF9DSEVDS19JTlRSX1QJclNESU9DaGVja0ludHI7IFwKKyAgIFNESU9fQ1RSTF9FTkFCTEVfVAkJclNESU9FbmFibGU7IFwKKyAgIERDTF9TRF9CSVRXSURUSAkJCXJTRElPQnVzV2lkdGg7IFwKKyAgIFNESU9fQ1RSTF9HRVRfSU5GT19UCQlyU0RJT0dldEluZm87IFwKKyAgICBTRElPX0NUUkxfQ01ENTJfVCAgICAgICByU0RJT0NNRDUyOyBcCisgICAgU0RJT19DVFJMX0NNRDUzX1QgICAgICAgclNESU9DTUQ1MzsgXAorICAgIFNESU9fQ1RSTF9DTURfUkVHX1QgICAgIHJTRElPQ01EUkVHOworLy9ndWlsaW4KKyNlbmRpZiAvKl9fRENMX01TRENfSF9GUk9OVF9fKi8KKyNlbmRpZiAvKkRDTF9ERUZJTklUSU9OX1NUUlVDVCovCisKKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9QUk9UT1RZUEUKKy8vI2lmbmRlZiBfX0RDTF9NU0RDX0hfRlJPTlRfXworLy8jZGVmaW5lIF9fRENMX01TRENfSF9GUk9OVF9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWNsYXJlIGZ1bmN0aW9uIHByb3RvdHlwZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRENMIGZvciBTRC9NTUMqLworLyogRENMIGZvciBTRElPICovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTRF9Jbml0aWFsaXplKHZvaWQpOworZXh0ZXJuIERDTF9IQU5ETEUgRGNsU0RfT3BlbihEQ0xfREVWIGRldiwgRENMX0ZMQUdTIGZsYWdzKTsKK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNEX1JlYWREYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOICpidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNEX1dyaXRlRGF0YShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0JVRkYgKmJ1ZmYsIERDTF9CVUZGX0xFTiAqYnVmX2xlbiwgRENMX09QVElPTlMgb3B0aW9ucyk7CitleHRlcm4gRENMX1NUQVRVUyBEY2xTRF9Db25maWd1cmUoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DT05GSUdVUkVfVCAqY29uZmlndXJlKTsKK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNEX1JlZ2lzdGVyQ2FsbGJhY2soRENMX0hBTkRMRSBoYW5kbGUsIERDTF9FVkVOVCBldmVudCwgUEZOX0RDTF9DQUxMQkFDSyBjYWxsYmFjayk7CitleHRlcm4gRENMX1NUQVRVUyBEY2xTRF9Db250cm9sKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQ1RSTF9DTUQgY21kLCBEQ0xfQ1RSTF9EQVRBX1QgKmRhdGEpOworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU0RfQ2xvc2UoRENMX0hBTkRMRSBoYW5kbGUpOworLy8jZW5kaWYgLypfX0RDTF9NU0RDX0hfRlJPTlRfXyovCisjZW5kaWYgLypEQ0xfREVGSU5JVElPTl9QUk9UT1RZUEUqLworCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX210YWQuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX210YWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTc4NGRlCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfbXRhZC5oCkBAIC0wLDAgKzEsMzc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUCisjaWZuZGVmICAgX19EQ0xfTVRBRF9TVFJVQ1RfXworI2RlZmluZSAgIF9fRENMX01UQURfU1RSVUNUX18KKworLy8jaW5jbHVkZSAiZGNsLmgiCisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKworCisjZGVmaW5lIEZBS0VfTVRVX1NJWkUgICgyMDQ4KQorCisvL1VBUlRfQ01EX09QRU4KK3R5cGVkZWYgc3RydWN0Cit7CisgIERDTF9VSU5UMzIgdTRPd2VucklkOworfU1UQURfQ1RSTF9PUEVOX1Q7CisKKy8vVUFSVF9DTURfQ0xPU0UKK3R5cGVkZWYgc3RydWN0Cit7CisgIERDTF9VSU5UMzIgdTRPd2VucklkOworfU1UQURfQ1RSTF9DTE9TRV9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQzMiB1NE93ZW5ySWQ7Cit9IE1UQURfQ1RSTF9DTFJfQlVGRkVSX1Q7CisKKy8vVUFSVF9DTURfUFVUX0lTUl9CWVRFUwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBEQ0xfVUlOVDE2IHUyTGVuZ3RoOworICAgIERDTF9VSU5UMzIgdTRPd2VucklkOworICAgIERDTF9VSU5UMTYgIHUyUmV0U2l6ZTsKKyAgICBEQ0xfVUlOVDgqIHB1QnVmZmFkZHI7Cit9TVRBRF9DVFJMX1BVVF9CWVRFU19UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIERDTF9VSU5UMzIgdTRPd25lcklkOworICAgIHZvaWQgKnB1dElvcjsKK31NVEFEX0NUUkxfUFVUX0JZVEVTX0lPUl9UOworCisKKy8vVFRZX0NNRF9HRVRfQ0hVTktfU0laRQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBEQ0xfVUlOVDMyIGNodW5rU2l6ZTsKK30gTVRBRF9DVFJMX0dFVF9DSFVOS19TSVpFX1Q7CisKKy8vVFRZX0NNRF9ORUVEX1RYX0RPTkVfQ0IKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRENMX1VJTlQzMiB1NE93bmVySWQ7CisgICAgRENMX0JPT0wgbmVlZFR4RG9uZUNiOworfSBNVEFEX0NUUkxfTkVFRF9UWF9ET05FX0NCX1Q7CisKKy8vVFRZX0NNRF9HRVRfTVRVX1NJWkUKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRENMX1VJTlQzMiB1bG10dV9zejsKKyAgICBEQ0xfVUlOVDMyIGRsbXR1X3N6OworfSBNVEFEX0NUUkxfR0VUX01UVV9TSVpFX1Q7CisKKy8qIQorICogIEBicmllZiAgVFRZIGRyaXZlciBzdGF0ZQorICovCit0eXBlZGVmIGVudW0gX3R0eV9kcnZfbXRhZF9zdGF0ZSB7CisgICAgICAvKiEKKyAgICAgICAqICBAYnJpZWYgIGRyaXZlciBkZXRhY2hlZCBzdGF0ZQorICAgICAgICovCisgICAgICBEUlZfTVRBRF9TVF9ERVRBQ0hFRCA9IDAsCisgICAgICAvKiEKKyAgICAgICAqICBAYnJpZWYgIGRyaXZlciBhdHRhY2hlZCBzdGF0ZQorICAgICAgICovCisgICAgICBEUlZfTVRBRF9TVF9BVFRBQ0hFRAorfSB0dHlfZHJ2X210YWRfc3RhdGVfZTsKKworLy9UVFlfQ01EX0dFVF9EUlZfU1RBVEUKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRENMX1VJTlQzMiB1NE93bmVySWQ7CisgICAgdHR5X2Rydl9tdGFkX3N0YXRlX2UgZHJ2X3N0YXRlOworfSBNVEFEX0NUUkxfR0VUX0RSVl9TVEFURV9UOworCisKKy8vVFRZX0NNRF9BU1NJR05fUlhfSU9SCit0eXBlZGVmIHN0cnVjdAoreworICAgIERDTF9VSU5UMzIgdTRPd25lcklkOworICAgIHZvaWQgKmlvcjsKK30gTVRBRF9DVFJMX0FTU0lHTl9SWF9JT1JfVDsKKworCisKKworI2RlZmluZSBNVEFEX0NUUkxTIFwKKyAgICBNVEFEX0NUUkxfT1BFTl9UICAgICAgICAgICAgck1UQURDdHJsT1BFTjtcCisgICAgTVRBRF9DVFJMX0NMT1NFX1QgICAgICAgICAgIHJNVEFEQ3RybENMT1NFO1wKKyAgICBNVEFEX0NUUkxfQ0xSX0JVRkZFUl9UICAgICAgck1UQURDdHJsQ0xSQlVGRkVSO1wKKyAgICBNVEFEX0NUUkxfUFVUX0JZVEVTX1QgICAgICAgck1UQURDdHJsUFVUQllURVM7XAorICAgIE1UQURfQ1RSTF9HRVRfTVRVX1NJWkVfVCAgICByTVRBREN0cmxHRVRNVFVTSVpFO1wKKyAgICBNVEFEX0NUUkxfR0VUX0NIVU5LX1NJWkVfVCAgck1UQURDdHJsR0VUQ0hVTktTSVpFO1wKKyAgICBNVEFEX0NUUkxfQVNTSUdOX1JYX0lPUl9UICAgck1UQURDdHJsQXNzaWduUnhJb3I7XAorICAgIE1UQURfQ1RSTF9ORUVEX1RYX0RPTkVfQ0JfVCByTVRBREN0cmxOZWVkVHhEb25lQ2I7XAorICAgIE1UQURfQ1RSTF9HRVRfRFJWX1NUQVRFX1QgICByTVRBREN0cmxHZXREcnZTdGF0ZTtcCisgICAgTVRBRF9DVFJMX1BVVF9CWVRFU19JT1JfVCAgIHJNVEFEQ3RybFBVVEJZVEVTSU9SO1wKKyAgICAKKworCit0eXBlZGVmIGVudW0KK3sKKyAgICBEQ0xfTVRBRF9UWVBFID0gMHgwMCwKKworfU1UQURfU0lPX1RZUEVfVDsKKworCisjZW5kaWYgIC8vIERDTF9ERUZJTklUSU9OX1NUUlVDVAorI2VuZGlmICAvLyBfX0RDTF9NVEFEX1NUUlVDVF9fCisKKworI2lmZGVmIERDTF9ERUZJTklUSU9OX1BST1RPVFlQRQorCit0eXBlZGVmIERDTF9TVEFUVVMoKm10YWRfaGFuZGxlcl9jYikoRENMX0RFViBkZXYsIERDTF9DVFJMX0NNRCBjbWQsIERDTF9DVFJMX0RBVEFfVCAqZGF0YSk7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIE1UQURfU0lPX1RZUEVfVCAgICAgICBEZXZUeXBlOworICAgIG10YWRfaGFuZGxlcl9jYiAgbXRhZEhhbmRsZXJDYjsKK31NVEFEX0hBTkRMRVJfVDsKKworCisvKiEKKyogICBAZnVuY3Rpb24gICBEY2xTZXJpYWxQb3J0X09wZW4KKyogICBAYnJpZWYgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHRvIG9wZW4gdGhlIFVBUlQgbW9kdWxlIGFuZCBnZXQgYSBoYW5kbGUuCisqICAgQHBhcmFtICAgICAgZGV2ICAgICAgICAgUG9ydCBudW1iZXIuIGl0IGNhbiB0YWtlIERDTF9VQVJUX0RFViBhcyByZWZlcmVuY2UKKyogICBAcGFyYW0gICAgICBmbGFncyAgICAgICBtb2R1bGVfdHlwZSB8IEZMQUdTX1VBUlRfVVNFX1ZGSUZPCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX3R5cGU6IEtBTCBtb2R1bGUgdHlwZSBlbnVtIHZhbHVlCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBR1NfVUFSVF9VU0VfVkZJRk86IGZsYWdzIHRoYXQgc3BlY2lmaWVzIHRvIHVzZSBWaXJ0dWFsIEZJRk8gb3Igbm90IGZvciBVQVJUIGRldmljZS4gTm90ZSB0aGF0IGl0J3Mgb25seSB2YWxpZGUgZm9yIGVEZXYgd2l0aCBEQ0xfVUFSVDEsIERDTF9VQVJUMiwgRENMX1VBUlQzKGlmIGV4aXN0cykKKyogICAgICAgICAgICAgICAgICAgICAgICAgICBbTm90ZV0gQ3VycmVudGx5IFRUWSBkb2Vzbid0IGhhbmRsZSBmbGFncyEhIFRoaXMgcGFyYW1ldGVyIGlzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGlibGUuCisqICAgQHJlc3VsdCAgICAgU1RBVFVTX0ZBSUwgICAgICAgICAgICAgT3BlbiBmYWlsZWQuCisqICAgQHJlc3VsdCAgICAgU1RBVFVTX0FMUkVBRFlfT1BFTkVEICAgVGhpcyBkZXZpY2UgaGFzIGFscmVhZHkgYmVlbiBvcGVuZWQuCisqICAgQHJlc3VsdCAgICAgU1RBVFVTX0lOVkFMSURfREVWSUNFICAgVGhlIGRldmljZSBpcyBub3QgdmFsaWQuCisqICAgQHJlc3VsdCAgICAgU1RBVFVTX1NFVF9WRklGT19GQUlMICAgRmFpbCB0byB1c2UgVml0dWFsIEZJRk8gZm9yIHRoZSBVQVJUIHBvcnQuCisqICAgQHJlc3VsdCAgICAgb3RoZXIgdmFsdWUgICAgICAgICAgICAgYSB2YWxpZCBoYW5kbGUKKyoKKyovCitleHRlcm4gRENMX0hBTkRMRSBEY2xTZXJpYWxQb3J0X09wZW4oRENMX0RFViBkZXYsIERDTF9GTEFHUyBmbGFncyk7CisgCisgLyohCisgKiAgIEBmdW5jdGlvbiAgIERjbFNlcmlhbFBvcnRfQ29udHJvbAorICogICBAYnJpZWYgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvcnQgVUFSVCBtb2R1bGUgY29tbWFuZHMuIEl0IGlzIGNhbGxlZCB0byBzZW5kIGNvbW1hbmQgdG8gY29udHJvbCB0aGUgVUFSVCBtb2R1bGUuCisgKiAgIEBwYXJhbSAgICAgIGhhbmRsZSAgICAgIGEgdmFsaWQgaGFuZGxlIHJldHVybiBieSBEY2xTZXJpYWxQb3J0X09wZW4oKQorICogICBAcGFyYW0gICAgICBjbWQgICAgICAgICBkY2wgdWFydCBjb21tYW5kcworICogICBAcGFyYW0gICAgICBkYXRhICAgICAgICBwb2ludGVyIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEgc3RydWN0dXJlIG9mIGNvbW1hbmQKKyAqICAgQHJlc3VsdCAgICAgU1RBVFVTX09LICAgICAgICAgICAgICAgY29tbWFuZCBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiAgIEByZXN1bHQgICAgIFNUQVRVU19JTlZBTElEX0NNRCAgICAgIEl0J3MgYSBpbnZhbGlkIGNvbW1hbmQuCisgKiAgIEByZXN1bHQgICAgIFNUQVRVU19JTlZBTElEX0hBTkRMRSAgIEl0J3MgYSBpbnZhbGlkIGhhbmRsZS4KKyAqLworIGV4dGVybiBEQ0xfU1RBVFVTIERjbFNlcmlhbFBvcnRfQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKKworICAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEV4cG9ydCB0byB1cHBlciBsYXllciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8gCisKKy8qIQorKiAgIEBmdW5jdGlvbiAgIFtOZXcgVFRZIEFQSV0gRGNsU2VyaWFsUG9ydF9VcE1vZHVsZUluaXQKKyogICBAYnJpZWYgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGluaXRpYWxpemUvc3RhcnQgZGVzaWduYXRlZCBDT00gUG9ydCBmb3IgdXBwZXIgbW9kdWxlLgorKiAgIEBwYXJhbSAgICAgIGhhbmRsZSAgICAgICAgICAgICAgICAgIGEgdmFsaWQgaGFuZGxlIHJldHVybiBieSBEY2xTZXJpYWxQb3J0X09wZW4oKQorKiAgIEBwYXJhbSAgICAgIG1vZHVsZV9pZCAgICAgICAgICAgICAgIHVwcGVyIG1vZHVsZSBpZAorKiAgIEBwYXJhbSAgICAgIGZsYWcgICAgICAgICAgICAgICAgICAgIFRUWSBDT00gUG9ydCBhdHRyaWJ1dGUuIEN1cnJlbnRseSB0aGV5IGFyZSBUVFlfRkxBR19ORVdfVFggb3IgVFRZX0ZMQUdfTkVXX1JYLgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVwcGVyIG1vZHVsZSBjYW4gaW5pdGlhbGl6ZSBmbGFnIHdpdGggbmV3IFR4L1J4IGZsb3cgKGdwZCBiYXNlZCkgb3IgY29udmVudGlvbmFsIFR4L1J4IChidWZmZXIvbGVuZ3RoIGJhc2VkKSBmbG93LgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4LiBOZXcgVHggYW5kIENvbnZlbnRpb25hbCBSeCAtIERjbFNlcmlhbFBvcnRfVXBNb2R1bGVSZWluaXQoaGFuZGxlLCBtb2R1bGVfaWQsIFRUWV9GTEFHX05FV19UWCk7CisqICAgQHJlc3VsdCAgICAgU1RBVFVTX09LICAgICAgICAgICAgICAgSW5pdCBDT00gUG9ydCBkZXZpY2Ugc3VjY2Vzc2Z1bGx5LgorKiAgIEByZXN1bHQgICAgIFNUQVRVU19JTlZBTElEX0hBTkRMRSAgIEl0J3MgYSBpbnZhbGlkIGhhbmRsZS4KKyogICBAcmVzdWx0ICAgICBTVEFUVVNfQUxSRUFEWV9PUEVORUQgICBUaGUgQ09NIFBvcnQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYnkgb3RoZXIgbW9kdWxlLgorKiAgIEByZXN1bHQgICAgIFNUQVRVU19ERVZJQ0VfTk9UX0VYSVNUIFRoZSBjb3JyZXNwb25kaW5nIGRldmljZSBkcml2ZXIgb2YgQ09NIFBvcnQgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLgorKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNlcmlhbFBvcnRfVXBNb2R1bGVJbml0KERDTF9IQU5ETEUgaGFuZGxlLCBtb2R1bGVfdHlwZSBtb2R1bGVfaWQsIGludCBmbGFnKTsKKworLyohCisqICAgQGZ1bmN0aW9uICAgW05ldyBUVFkgQVBJXSBEY2xTZXJpYWxQb3J0X1VwTW9kdWxlRGVpbml0CisqICAgQGJyaWVmICAgICAgVGhpcyBmdW5jdGlvbiBpcyB0byBkZS1pbml0L2RlLXJlZ2lzdGVyIENPTSBQb3J0LgorKiAgIEBwYXJhbSAgICAgIGhhbmRsZSAgICAgICAgICAgICAgICAgIGEgdmFsaWQgaGFuZGxlIHJldHVybiBieSBEY2xTZXJpYWxQb3J0X09wZW4oKQorKiAgIEByZXN1bHQgICAgIFNUQVRVU19PSyAgICAgICAgICAgICAgIERlaW5pdCBDT00gUG9ydCBkZXZpY2Ugc3VjY2Vzc2Z1bGx5LgorKiAgIEByZXN1bHQgICAgIFNUQVRVU19JTlZBTElEX0hBTkRMRSAgIEl0J3MgYSBpbnZhbGlkIGhhbmRsZS4KKyogICBAcmVzdWx0ICAgICBTVEFUVVNfTk9UX09QRU5FRCAgICAgICBUaGUgQ09NIFBvcnQgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLgorKiAgIEByZXN1bHQgICAgIFNUQVRVU19ERVZJQ0VfTk9UX0VYSVNUIFRoZSBjb3JyZXNwb25kaW5nIGRldmljZSBkcml2ZXIgb2YgQ09NIFBvcnQgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLgorKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNlcmlhbFBvcnRfVXBNb2R1bGVEZWluaXQoRENMX0hBTkRMRSBoYW5kbGUpOworIAorCisKKy8qIQorKiAgIEBmdW5jdGlvbiAgIFtOZXcgVFRZIEFQSV0gRGNsU2VyaWFsUG9ydF9VcE1vZHVsZVJlZ2lzdGVyQ2IKKyogICBAYnJpZWYgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGZvciB1cHBlciBsYXllciBtb2R1bGUgdG8gcmVnaXN0ZXIgY2FsbGJhY2sgZnVuY3Rpb24uCisqICAgQHBhcmFtICAgICAgaGFuZGxlICAgICAgICAgICAgICBhIHZhbGlkIGhhbmRsZSByZXR1cm4gYnkgRGNsU2VyaWFsUG9ydF9PcGVuKCkKKyogICBAcGFyYW0gICAgICByeF9jYiAgICAgICAgICAgICAgIHJ4IGNhbGxiYWNrIGZ1bmN0aW9uLCBkcml2ZXIgc2VuZCByZWNlaXZpbmcgZGF0YSB0byB1cHBlciBsYXllciB0aHJvdWdoIHRoaXMgcnggY2FsbGJhY2sgZnVuY3Rpb24KKyogICBAcGFyYW0gICAgICB0eF9kb25lX2NiICAgICAgICAgIHR4IGRvbmUgY2FsbGJhY2sgZnVuY3Rpb24sIHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiBkYXRhIGhhcyBiZWVuIHNlbnQKKyogICBAcGFyYW0gICAgICBkcnZfc3RhdGVfY2hhbmdlX2NiIGRyaXZlciBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2sgZnVuY3Rpb24sIGl0IG5vdGlmeSB0aGUgdXBwZXIgbGF5ZXIgbW9kdWxlIHdoZW4gZHJpdmVyIHN0YXRlIGlzIGNoYW5nZWQsIGV4LiBVU0IgZGlzY29ubmVjdAorKiAgIEByZXN1bHQgICAgIFNUQVRVU19PSyAgICAgICAgICAgICAgIFJlZ2lzdGVyIGNhbGxiYWNrIGZ1bmN0aW9uIHN1Y2Nlc3NmdWxseS4KKyogICBAcmVzdWx0ICAgICBTVEFUVVNfSU5WQUxJRF9IQU5ETEUgICBJdCdzIGEgaW52YWxpZCBoYW5kbGUuCisqICAgQHJlc3VsdCAgICAgU1RBVFVTX05PVF9PUEVORUQgICAgICAgVGhlIENPTSBQb3J0IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4KKyogICBAcmVzdWx0ICAgICBTVEFUVVNfREVWSUNFX05PVF9FWElTVCBUaGUgY29ycmVzcG9uZGluZyBkZXZpY2UgZHJpdmVyIG9mIENPTSBQb3J0IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4KKyogICBAcmVzdWx0ICAgICBTVEFUVVNfRkFJTCAgICAgICAgICAgICBGYWlsZWQgZm9yIG90aGVyIHJlYXNvbnMuCisqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU2VyaWFsUG9ydF9VcE1vZHVsZVJlZ2lzdGVyQ2IoRENMX0hBTkRMRSBoYW5kbGUsIHR0eV9yeF9jYiByeF9jYiwgdHR5X3R4ZG9uZV9jYiB0eF9kb25lX2NiLCB0dHlfZHJ2X3N0YXRlX2NoYW5nZV9jYiBkcnZfc3RhdGVfY2hhbmdlX2NiKTsKKyAKKworLyohCisqICAgQGZ1bmN0aW9uICAgW05ldyBUVFkgQVBJXSBEY2xTZXJpYWxQb3J0X1VwTW9kdWxlVHJhbnNtaXQKKyogICBAYnJpZWYgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHRvIHRyYW5zbWl0IGRhdGEgdG8gQ09NIFBvcnQgaW4gaW9yIGZvcm1hdC4KKyogICBAcGFyYW0gICAgICBoYW5kbGUgICAgICBhIHZhbGlkIGhhbmRsZSByZXR1cm4gYnkgRGNsU2VyaWFsUG9ydF9PcGVuKCkKKyogICBAcGFyYW0gICAgICBpb3IgICAgICAgICBwb2ludGVyIHRvIHR4IGlvIHJlcXVlc3Qgd2hpY2ggaXMgc2VudCB0byBDT00gUG9ydCBkcml2ZXIKKyogICBAcmVzdWx0ICAgICBTVEFUVVNfT0sgICAgICAgICAgICAgICBUcmFuc21pdCBpb3Igc3VjY2Vzc2Z1bGx5LgorKiAgIEByZXN1bHQgICAgIFNUQVRVU19JTlZBTElEX0hBTkRMRSAgIEl0J3MgYSBpbnZhbGlkIGhhbmRsZS4KKyogICBAcmVzdWx0ICAgICBTVEFUVVNfRkFJTCAgICAgICAgICAgICBGYWlsZWQgZm9yIG90aGVyIHJlYXNvbnMuCisqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU2VyaWFsUG9ydF9VcE1vZHVsZVRyYW5zbWl0KERDTF9IQU5ETEUgaGFuZGxlLCB0dHlfaW9fcmVxdWVzdF90ICppb3IpOworCisKKy8qIQorKiAgIEBmdW5jdGlvbiAgIFtOZXcgVFRZIEFQSV0gRGNsU2VyaWFsUG9ydF9VcE1vZHVsZVRyYW5zbWl0TGlnaHQKKyogICBAYnJpZWYgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHRvIHRyYW5zbWl0IGRhdGEgdG8gQ09NIFBvcnQgaW4gaW9yIGZvcm1hdCBhbmQgbGlnaHQtd2VpZ2h0LgorKiAgICAgICAgICAgICAgIEJlZm9yZSB1c2VyIHVzZSB0aGlzIFR4IGZ1bmN0aW9uLCBpdCBtdXN0IGNhbGN1bGF0ZSB0eCBjaGVja3N1bSBhbmQgZmx1c2ggR1BEIGluIGFkdmFuY2UuCisqICAgQHBhcmFtICAgICAgaGFuZGxlICAgICAgYSB2YWxpZCBoYW5kbGUgcmV0dXJuIGJ5IERjbFNlcmlhbFBvcnRfT3BlbigpCisqICAgQHBhcmFtICAgICAgaW9yICAgICAgICAgcG9pbnRlciB0byB0eCBpbyByZXF1ZXN0IHdoaWNoIGlzIHNlbnQgdG8gQ09NIFBvcnQgZHJpdmVyCisqICAgQHJlc3VsdCAgICAgU1RBVFVTX09LICAgICAgICAgICAgICAgVHJhbnNtaXQgaW9yIHN1Y2Nlc3NmdWxseS4KKyogICBAcmVzdWx0ICAgICBTVEFUVVNfSU5WQUxJRF9IQU5ETEUgICBJdCdzIGEgaW52YWxpZCBoYW5kbGUuCisqICAgQHJlc3VsdCAgICAgU1RBVFVTX0ZBSUwgICAgICAgICAgICAgRmFpbGVkIGZvciBvdGhlciByZWFzb25zLgorKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNlcmlhbFBvcnRfVXBNb2R1bGVUcmFuc21pdExpZ2h0KERDTF9IQU5ETEUgaGFuZGxlLCB0dHlfaW9fcmVxdWVzdF90ICppb3IpOworCisvKiEKKyogICBAZnVuY3Rpb24gICBbTmV3IFRUWSBBUEldIERjbFNlcmlhbFBvcnRfVXBNb2R1bGVBc3NpZ25SeElvcgorKiAgIEBicmllZiAgICAgIFRoaXMgZnVuY3Rpb24gaXMgdG8gYXNzaWduIGVtcHR5IFJ4IGlvciB0byBkcml2ZXIgZm9yIGRhdGEgcmVjZWl2aW5nLgorKiAgIEBwYXJhbSAgICAgIGhhbmRsZSAgICAgIGEgdmFsaWQgaGFuZGxlIHJldHVybiBieSBEY2xTZXJpYWxQb3J0X09wZW4oKQorKiAgIEBwYXJhbSAgICAgIHJ4X2lvciAgICAgIHBvaW50ZXIgdG8gcnggaW8gcmVxdWVzdCBmb3IgZGF0YSByZWNlaXZpbmcKKyogICBAcmVzdWx0ICAgICBTVEFUVVNfT0sgICAgICAgICAgICAgICBBc3NpZ24gUnggaW9yIHN1Y2Nlc3NmdWxseS4KKyogICBAcmVzdWx0ICAgICBTVEFUVVNfSU5WQUxJRF9IQU5ETEUgICBJdCdzIGEgaW52YWxpZCBoYW5kbGUuCisqICAgQHJlc3VsdCAgICAgU1RBVFVTX0ZBSUwgICAgICAgICAgICAgRmFpbGVkIGZvciBvdGhlciByZWFzb25zLgorKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNlcmlhbFBvcnRfVXBNb2R1bGVBc3NpZ25SeElvcihEQ0xfSEFORExFIGhhbmRsZSwgdHR5X2lvX3JlcXVlc3RfdCAqcnhfaW9yKTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXhwb3J0IHRvIGRyaXZlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovIAorLyohCisqICAgQGZ1bmN0aW9uICAgRGNsU2VyaWFsUG9ydF9EcnZSZWdpc3RlckNiCisqICAgQGJyaWVmICAgICAgVGhpcyBmdW5jdGlvbiBpcyB0byByZWdpc3RlciBjYWxsYmFjayBmdW50aW9uIGZvciB0aGUgVUFSVCBtb2R1bGUgb3IgQ09NIFBvcnQgY2xhc3MgZHJpdmVyLgorKiAgIEBwYXJhbSAgICAgIGhhbmRsZSAgICAgICAgICAgICAgYSB2YWxpZCBoYW5kbGUgcmV0dXJuIGJ5IERjbFNlcmlhbFBvcnRfT3BlbigpCisqICAgQHBhcmFtICAgICAgc2VyaXBvcnRfaGFuZGxlciAgICB0aGUgc3RydWN0dXJlIGNvbnRhaW5zIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBkZXZpY2UgdHlwZS4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVFkgd291bGQgc2VuZCBjb21tYW5kcyAoU0lPL1VBUlQvVVNCL1RUWS8uLi4pIHRvIGRyaXZlciB0aHJvdWdoIHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiB0aGUgY29ycmVzcG9uZGluZyBldmVudCBoYXBwZW5zLgorKiAgIEByZXN1bHQgICAgIFNUQVRVU19PSyAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWwuCisqICAgQHJlc3VsdCAgICAgU1RBVFVTX0lOVkFMSURfSEFORExFICAgSXQncyBhIGludmFsaWQgaGFuZGxlLgorKiAgIEByZXN1bHQgICAgIFNUQVRVU19BTFJFQURZX09QRU5FRCAgIFRoaXMgZGV2aWNlIGhhcyBhbHJlYWR5IGJlZW4gb3BlbmVkLgorKiAgIEByZXN1bHQgICAgIFNUQVRVU19JTlZBTElEX0FSR1VNRU5UIFRoZSBwYXJhbWV0ZXIgaXMgaW52YWxpZCwgZXguIHVhcnRfaGFuZGxlcl9jYiBpcyBOVUxMLgorKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNlcmlhbFBvcnRfRHJ2UmVnaXN0ZXJDYihEQ0xfSEFORExFIGhhbmRsZSwgU2VyaXBvcnRfSEFORExFUl9UKiBzZXJpcG9ydF9oYW5kbGVyKTsKKworLyohCisqICAgQGZ1bmN0aW9uICAgRGNsU2VyaWFsUG9ydF9EcnZEZVJlZ2lzdGVyQ2IKKyogICBAYnJpZWYgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHRvIERlLXJlZ2lzdGVyIGNhbGxiYWNrIGZ1bnRpb24gZm9yIHRoZSBVQVJUIG1vZHVsZSBvciBDT00gUG9ydCBjbGFzcyBkcml2ZXIuCisqICAgQHBhcmFtICAgICAgaGFuZGxlICAgICAgICAgICAgICBhIHZhbGlkIGhhbmRsZSByZXR1cm4gYnkgRGNsU2VyaWFsUG9ydF9PcGVuKCkKKyogICAKKyogICBAcmVzdWx0ICAgICBTVEFUVVNfT0sgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bC4KKyogICBAcmVzdWx0ICAgICBTVEFUVVNfSU5WQUxJRF9IQU5ETEUgICAgSXQncyBhIGludmFsaWQgaGFuZGxlLgorKiAgIEByZXN1bHQgICAgIFNUQVRVU19JTlZBTElEX09QRVJBVElPTiBUaGlzIGRldmljZSBoYXMgYWxyZWFkeSBiZWVuIGRlLXJlZ2lzdGVyZWQgb3IgZHJpdmVyIHN0YXRlIGlzIGF0dGFjaGVkLgorKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNlcmlhbFBvcnRfRHJ2RGVSZWdpc3RlckNiKERDTF9IQU5ETEUgaGFuZGxlKTsKKworLyohCisqICAgQGZ1bmN0aW9uICAgW05ldyBUVFkgQVBJXSBEY2xTZXJpYWxQb3J0X0RydkF0dGFjaAorKiAgIEBicmllZiAgICAgIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGRyaXZlciB0byBpbmZvcm0gVFRZIHRoYXQgdGhlIGRldmljZSBpcyBhdHRhY2hlZC9jb25uZWN0ZWQuCisqICAgQHBhcmFtICAgICAgaGFuZGxlICAgICAgYSB2YWxpZCBoYW5kbGUgcmV0dXJuIGJ5IERjbFNlcmlhbFBvcnRfT3BlbigpCisqICAgQHJlc3VsdCAgICAgU1RBVFVTX09LICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bC4KKyogICBAcmVzdWx0ICAgICBTVEFUVVNfSU5WQUxJRF9IQU5ETEUgICBJdCdzIGEgaW52YWxpZCBoYW5kbGUuCisqICAgQHJlc3VsdCAgICAgU1RBVFVTX0RFVklDRV9OT1RfRVhJU1QgVGhlIGNvcnJlc3BvbmRpbmcgZGV2aWNlIGRyaXZlciBvZiBDT00gUG9ydCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuCisqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU2VyaWFsUG9ydF9EcnZBdHRhY2goRENMX0hBTkRMRSBoYW5kbGUpOworIAorLyohCisqICAgQGZ1bmN0aW9uICAgW05ldyBUVFkgQVBJXSBEY2xTZXJpYWxQb3J0X0RydkRldGFjaAorKiAgIEBicmllZiAgICAgIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGRyaXZlciB0byBpbmZvcm0gVFRZIHRoYXQgdGhlIGRldmljZSBpcyBkZXRhY2hlZC9kaXNjb25uZWN0ZWQuCisqICAgQHBhcmFtICAgICAgaGFuZGxlICAgICAgYSB2YWxpZCBoYW5kbGUgcmV0dXJuIGJ5IERjbFNlcmlhbFBvcnRfT3BlbigpCisqICAgQHJlc3VsdCAgICAgU1RBVFVTX09LICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bC4KKyogICBAcmVzdWx0ICAgICBTVEFUVVNfSU5WQUxJRF9IQU5ETEUgICBJdCdzIGEgaW52YWxpZCBoYW5kbGUuCisqICAgQHJlc3VsdCAgICAgU1RBVFVTX0RFVklDRV9OT1RfRVhJU1QgVGhlIGNvcnJlc3BvbmRpbmcgZGV2aWNlIGRyaXZlciBvZiBDT00gUG9ydCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuCisqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU2VyaWFsUG9ydF9EcnZEZXRhY2goRENMX0hBTkRMRSBoYW5kbGUpOworIAorLyohCisqICAgQGZ1bmN0aW9uICAgW05ldyBUVFkgQVBJXSBEY2xTZXJpYWxQb3J0X0RydlJ4CisqICAgQGJyaWVmICAgICAgVGhpcyBmdW5jdGlvbiBpcyBmb3IgZHJpdmVyIHRvIHNlbmQgYmFjayB0aGUgcmVjZWl2ZWQgZGF0YSB0byBUVFkvdXBwZXIgbGF5ZXIuCisqICAgQHBhcmFtICAgICAgaGFuZGxlICAgICAgYSB2YWxpZCBoYW5kbGUgcmV0dXJuIGJ5IERjbFNlcmlhbFBvcnRfT3BlbigpCisqICAgQHBhcmFtICAgICAgc291cmNlX2lkICAgZHJpdmVyIG1vZHVsZSBpZAorKiAgIEBwYXJhbSAgICAgIHJ4X2lvciAgICAgIHJlY2VpdmVkIGRhdGEgd2l0aCBpb3IgZm9ybWF0CisqICAgQHJlc3VsdCAgICAgU1RBVFVTX09LICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4KKyogICBAcmVzdWx0ICAgICBTVEFUVVNfSU5WQUxJRF9IQU5ETEUgICBJdCdzIGEgaW52YWxpZCBoYW5kbGUuCisqICAgQHJlc3VsdCAgICAgU1RBVFVTX05PVF9PUEVORUQgICAgICAgVGhlIENPTSBQb3J0IGlzIG5vdCBvcGVuZWQgYnkgdXBwZXIgbGF5ZXIuCisqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU2VyaWFsUG9ydF9EcnZSeChEQ0xfSEFORExFIGhhbmRsZSwgbW9kdWxlX3R5cGUgc291cmNlX2lkLCB2b2lkICpyeF9pb3IpOworIAorLyohCisqICAgQGZ1bmN0aW9uICAgW05ldyBUVFkgQVBJXSBEY2xTZXJpYWxQb3J0X0RydlR4RG9uZQorKiAgIEBicmllZiAgICAgIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGRyaXZlciB0byBzZW5kIGJhY2sgdGhlIHRyYW5zbWl0dGVkICh0eCBkb25lKSBkYXRhIHRvIFRUWS91cHBlciBsYXllci4KKyogICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpZiAibmVlZCB0eCBkb25lIGNhbGxiYWNrIiBpcyBjb25maWd1cmVkIFlFUy4KKyogICBAcGFyYW0gICAgICBoYW5kbGUgICAgICBhIHZhbGlkIGhhbmRsZSByZXR1cm4gYnkgRGNsU2VyaWFsUG9ydF9PcGVuKCkKKyogICBAcGFyYW0gICAgICBzb3VyY2VfaWQgICBkcml2ZXIgbW9kdWxlIGlkCisqICAgQHBhcmFtICAgICAgdHhfaW9yICAgICAgdHJhbnNtaXR0ZWQgZGF0YSB3aXRoIGlvciBmb3JtYXQKKyogICBAcmVzdWx0ICAgICBTVEFUVVNfT0sgICAgICAgICAgICAgICBzdWNjZXNzZnVsLgorKiAgIEByZXN1bHQgICAgIFNUQVRVU19JTlZBTElEX0hBTkRMRSAgIEl0J3MgYSBpbnZhbGlkIGhhbmRsZS4KKyogICBAcmVzdWx0ICAgICBTVEFUVVNfTk9UX09QRU5FRCAgICAgICBUaGUgQ09NIFBvcnQgaXMgbm90IG9wZW5lZCBieSB1cHBlciBsYXllci4KKyovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTZXJpYWxQb3J0X0RydlR4RG9uZShEQ0xfSEFORExFIGhhbmRsZSwgbW9kdWxlX3R5cGUgc291cmNlX2lkLCB2b2lkICp0eF9pb3IpOworCisjZW5kaWYgLy8gRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfcGZjLmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9wZmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmRkMGRkCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfcGZjLmgKQEAgLTAsMCArMSwzOTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxMAorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgZGNsX3BmYy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1hdWlfU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBIZWFkZXIgZmlsZSBvZiBEQ0wgKERyaXZlciBDb21tb24gTGF5ZXIpIGZvciBQRkMuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICoKKyAqICBBbnNlbCBMaWFvCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAgKiAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIERDTF9ERUZJTklUSU9OX1NUUlVDVAorI2lmbmRlZiBfX0RDTF9QRkNfSF9TVFJVQ1RfXworI2RlZmluZSBfX0RDTF9QRkNfSF9TVFJVQ1RfXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX09QVElPTlMgZm9yIFBGQworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBGQ19PUFRJT05TCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ09ORklHVVJFX1QgZm9yIFBGQworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBGQ19DT05GSUdTCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfRVZFTlQgZm9yIFBGQworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBGQ19FVkVOVFMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBQUF9QRkNfQ0hBTk5FTCBlbnVtIGZvciBQRkMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtIHsKKwlQUFBfUEZDX0NIQU5ORUxfMCA9IDAsCisJUFBQX1BGQ19DSEFOTkVMXzEsCisJUFBQX1BGQ19DSEFOTkVMXzIsCit9IFBQUF9QRkNfQ0hBTk5FTDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBQUF9QRkNfQ0hBTk5FTCBlbnVtIGZvciBQRkMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtIHsKKwlQRkNfRU5DT0RFID0gMCwKKwlQRkNfREVDT0RFLAorfSBQRkNfT1BFUkFUSU9OX1NFTF9UOyAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0NNRCBmb3IgUEZDCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFRoZSBQRkMgQ29tbWFuZCBWYWx1ZXMgaW4gRENMX0NUUkxfQ01EX1QgRW51bSBvZiBkY2wuaCAqLworI2lmZGVmIF9fQlVJTERfRE9NX18KK3R5cGVkZWYgZW51bSB7CisJUEZDX0NNRF9SRVNFVCwJCS8qIFRvIFJlc2V0IFBGQyAqLworCVBGQ19DTURfU0VUX0NPTkZJRywJLyogdG8gc2V0IGNvbmZpZyAqLworCVBGQ19DTURfRU5DT0RFLAkJLyogVG8gRW5jb2RlIFBQUCBGcmFtZXIgKi8KKwlQRkNfQ01EX0RFQ09ERSwJCS8qIFRvIERlY29kZSBQUFAgRnJhbWVyICovCisJUEZDX0NNRF9ERVFVRVVFLCAJLyogdG8gZGUtUSBlbmNvZGUvZGVjb2RlIGdwZCBsaXN0ICovCisJUEZDX0NNRF9SRUxPQURfUlgJLyogdG8gcmVsb2FkIEdQRCBsaXN0ICovCit9IERDTF9DVFJMX0NNRF9UOworI2Vsc2UgLyogX19CVUlMRF9ET01fXyAqLworI2RlZmluZSBQRkNfQ01EUyBcCisJUEZDX0NNRF9SRVNFVCwgXAorCVBGQ19DTURfU0VUX0NPTkZJRywgXAorCVBGQ19DTURfRU5DT0RFLCBcCisJUEZDX0NNRF9ERUNPREUsIFwKKwlQRkNfQ01EX0RFUVVFVUUsIFwKKwlQRkNfQ01EX1JFTE9BRF9SWCwKKyNlbmRpZiAvKiBfX0JVSUxEX0RPTV9fICovICAgIAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NUUkxfREFUQV9UOiBEZWZpbmUgdGhlIENvbnRyb2wgZGF0YSBzdHJ1Y3R1cmUgZm9yIGVhY2ggbW9kdWxlJ3MgY29tbWFuZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCisvKiBGb3IgUEZDX0NNRF9SRVNFVCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QgCit7CisJRENMX1VJTlQzMiBlbl9kZTsJLyogaW5wdXQ6IGVuY29kZSBvciBkZWNvZGUgKi8gCisJRENMX1VJTlQzMiBjaGFubmVsOwkvKiBpbnB1dDogY2hhbm5lbCBpZCAqLyAKK30gUEZDX0NUUkxfUkVTRVRfVDsKKworLyogRm9yIFBGQ19DTURfU0VUX0NPTkZJRyBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QgCit7CisJRENMX1VJTlQzMiBlbl9kZTsJLyogaW5wdXQ6IGVuY29kZSBvciBkZWNvZGUgKi8KKwlEQ0xfVUlOVDMyIGNoYW5uZWw7CS8qIGlucHV0OiBjaGFubmVsIGlkICovIAorCURDTF9CT09MIGYzMjsJCS8qIGlucHV0OiBmY3MgbW9kZSAqLworCURDTF9CT09MIGFjZmM7CQkvKiBpbnB1dDogYWRkcmVzcyBhbmQgY29udHJvbCBmaWVsZCBjb21wcmVzc2lvbiAqLworCURDTF9CT09MIHBmYzsJCS8qIGlucHV0OiBwcm90b2NvbCBmaWVsZCBjb21wcmVzc2lvbiAqLworCURDTF9VSU5UMTYgbWF4X3BrdF9zejsJLyogaW5wdXQ6IG1heCBwYWNrZXQgc2l6ZSAqLworCURDTF9VSU5UMTYgcHRjOwkJLyogaW5wdXQ6IHBmYyBwcm90b2NvbCAqLworCURDTF9VSU5UMzIgcGZjX2FjY21bN107CS8qIGlucHV0OiBhY2NtIDAgfiA2ICovCit9IFBGQ19DVFJMX1NFVF9DT05GSUdfVDsKKworLyogRm9yIFBGQ19DTURfRU5DT0RFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMzIgY2hhbm5lbDsJLyogaW5wdXQ6IGNoYW5uZWwgaWQgKi8KKwl2b2lkICpoZWFkOwkJLyogaW5wdXQ6IGhlYWQgb2YgVEdQRCBsaXN0ICovCisJdm9pZCAqdGFpbDsJCS8qIGlucHV0OiB0YWlsIG9mIFRHUEQgbGlzdCAqLworfSBQRkNfQ1RSTF9FTkNPREVfVDsKKworLyogRm9yIFBGQ19DTURfREVDT0RFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMzIgY2hhbm5lbDsJLyogaW5wdXQ6IGNoYW5uZWwgaWQgKi8KKwl2b2lkICpoZWFkOwkJLyogaW5wdXQ6IGhlYWQgb2YgVEdQRCBsaXN0ICovCisJdm9pZCAqdGFpbDsJCS8qIGlucHV0OiB0YWlsIG9mIFRHUEQgbGlzdCAqLworfSBQRkNfQ1RSTF9ERUNPREVfVDsKKworLyogRm9yIFBGQ19DTURfREVRVUVVRSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfVUlOVDMyIGVuX2RlOwkvKiBpbnB1dDogZW5jb2RlIG9yIGRlY29kZSAqLworCURDTF9VSU5UMzIgY2hhbm5lbDsJLyogaW5wdXQ6IGNoYW5uZWwgaWQgKi8KKwl2b2lkICoqaGVhZDsJCS8qIG91dHB1dDogaGVhZCBvZiBSR1BEIGxpc3QgKi8KKwl2b2lkICoqdGFpbDsJCS8qIG91dHB1dDogdGFpbCBvZiBSR1BEIGxpc3QgKi8KKwlEQ0xfVUlOVDMyICpxdWV1ZV9sZW47CS8qIG91dHB1dDogbGVuZ3RoIG9mIHF1ZXVlICovCit9IFBGQ19DVFJMX0RFUVVFVUVfVDsKKworLyogRm9yIFBGQ19DTURfUkVMT0FEX1JYIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMzIgZW5fZGU7CS8qIGlucHV0OiBlbmNvZGUgb3IgZGVjb2RlICovCisJRENMX1VJTlQzMiBjaGFubmVsOwkvKiBpbnB1dDogY2hhbm5lbCBpZCAqLworCXZvaWQgKmhlYWQ7CQkvKiBpbnB1dDogaGVhZCBvZiBSR1BEIGxpc3QgKi8KKwl2b2lkICp0YWlsOwkJLyogaW5wdXQ6IHRhaWwgb2YgUkdQRCBsaXN0ICovCisJRENMX1VJTlQzMiBxdWV1ZV9sZW47CS8qIGlucHV0OiBsZW5ndGggb2YgUkdQRCBsaXN0ICovCit9IFBGQ19DVFJMX1JFTE9BRF9SWF9UOworCisvKiBUaGUgUEZDIENvbW1hbmQgUGFyYW1ldGVyIERhdGEgU3RydWN0dXJlIGZvciBFYWNoIENvbW1hbmQgaW4gRENMX0NUUkxfREFUQV9UIEVudW0gb2YgZGNsLmggKi8KKyNpZmRlZiBfX0JVSUxEX0RPTV9fCit0eXBlZGVmIHVuaW9uIAoreworCVBGQ19DVFJMX1JFU0VUX1Qgcl9wZmNfY3RybF9yZXNldDsJCS8qIERhdGEgU3RydWN0dXJlIGZvciBQRkNfQ01EX1JFU0VUICovCisJUEZDX0NUUkxfU0VUX0NPTkZJR19UIHJfcGZjX2N0cmxfc2V0X2NvbmZpZzsJLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFBGQ19DTURfU0VUX0NPTkZJRyAqLworCVBGQ19DVFJMX0VOQ09ERV9UIHJfcGZjX2N0cmxfZW5jb2RlOwkJLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFBGQ19DTURfRU5DT0RFICovCisJUEZDX0NUUkxfREVDT0RFX1Qgcl9wZmNfY3RybF9kZWNvZGU7CQkvKiBEYXRhIFN0cnVjdHVyZSBmb3IgUEZDX0NNRF9ERUNPREUgKi8KKwlQRkNfQ1RSTF9ERVFVRVVFX1Qgcl9wZmNfY3RybF9kZXF1ZXVlOwkJLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFBGQ19DTURfREVRVUVVRSAqLworCVBGQ19DVFJMX1JFTE9BRF9SWF9UIHJfcGZjX2N0cmxfcmVsb2FkX3J4OwkvKiBEYXRhIFN0cnVjdHVyZSBmb3IgUEZDX0NNRF9SRUxPQURfUlggKi8KK30gRENMX0NUUkxfREFUQV9UOworI2Vsc2UgLyogX19CVUlMRF9ET01fXyAqLworI2RlZmluZSBQRkNfQ1RSTFMgXAorCVBGQ19DVFJMX1JFU0VUX1Qgcl9wZmNfY3RybF9yZXNldDsgXAorCVBGQ19DVFJMX1NFVF9DT05GSUdfVCByX3BmY19jdHJsX3NldF9jb25maWc7IFwKKwlQRkNfQ1RSTF9FTkNPREVfVCByX3BmY19jdHJsX2VuY29kZTsgXAorCVBGQ19DVFJMX0RFQ09ERV9UIHJfcGZjX2N0cmxfZGVjb2RlOyBcCisJUEZDX0NUUkxfREVRVUVVRV9UIHJfcGZjX2N0cmxfZGVxdWV1ZTsgXAorCVBGQ19DVFJMX1JFTE9BRF9SWF9UIHJfcGZjX2N0cmxfcmVsb2FkX3J4OworI2VuZGlmIC8qIF9fQlVJTERfRE9NX18gKi8KKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfUEZDX0hfU1RSVUNUX18KKyNlbmRpZiAvLyAjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUICAgCisKKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9QUk9UT1RZUEUKKyNpZm5kZWYgX19EQ0xfUEZDX0hfUFJPVE9UWVBFX18KKyNkZWZpbmUgX19EQ0xfUEZDX0hfUFJPVE9UWVBFX18KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsUEZDX0luaXRpYWxpemUKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gaW5pdGlhbGl6ZSBQRkMgbW9kdWxlCisqCisqIFBBUkFNRVRFUlMKKyogIE5vbmUKKyoKKyogUkVUVVJOUworKiAgUmV0dXJuIHRoZSBzdGF0dXMgb2YgRGNsUEZDX0luaXRpYWxpemUKKyoKKyogUkVUVVJOIFZBTFVFUworKiAgU1RBVFVTX09LOiBJbml0aWFsaXplIEZpbmlzaGVkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsUEZDX0luaXRpYWxpemUodm9pZCk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsUEZDX09wZW4KKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gb3BlbiB0aGUgUEZDIG1vZHVsZSBhbmQgcmV0dXJuIGEgaGFuZGxlCisqCisqIFBBUkFNRVRFUlMKKyogIGRldjogW0lOXSBPbmx5IHZhbGlkIGZvciBEQ0xfUEZDCisqICBmbGFnczogW0lOXSBObyBzZXBjaWFsIGZsYWdzIGlzIG5lZWRlZC4gUGxlYXNlIHVzZSBGTEFHU19OT05FCisqCisqIFJFVFVSTlMKKyogIFJldHVybiBEQ0xfSEFORExFIG9mIFBGQworKgorKiBSRVRVUk4gVkFMVUVTCisqICBEQ0xfSEFORExFX0lOVkFMSUQgOiBPcGVuIGZhaWxlZAorKiAgT3RoZXIgdmFsdWUgOiBBIHZhbGlkIGhhbmRsZQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfSEFORExFIERjbFBGQ19PcGVuKERDTF9ERVYgZGV2LCBEQ0xfRkxBR1MgZmxhZ3MpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFBGQ19SZWFkRGF0YQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgUEZDIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsUEZDX1JlYWREYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOICpidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQRkNfV3JpdGVEYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBQRkMgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQRkNfV3JpdGVEYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOICpidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQRkNfQ29uZmlndXJlCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBQRkMgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQRkNfQ29uZmlndXJlKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQ09ORklHVVJFX1QgKmNvbmZpZ3VyZSk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsUEZDX1JlZ2lzdGVyQ2FsbGJhY2sKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gc2V0IGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgUEZDIG1vZHVsZS4KKyoKKyogUEFSQU1FVEVSUworKiAgaGFuZGxlOiB0aGUgcmV0dXJuZWQgaGFuZGxlIHZhbHVlIG9mIERjbFBGQ19PcGVuCisqICBldmVudDogU3VwcG9ydGVkIGV2ZW50czoKKyogIGNhbGxiYWNrOiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHJlZ2lzdGVyZWQgZXZlbnRzCisqCisqIFJFVFVSTlMKKyogIFNUQVRVU19PSzogU3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4KKyogIFNUQVRVU19JTlZBTElEX0RDTF9IQU5ETEU6IEl0J3MgYSBpbnZhbGlkIGhhbmRsZS4KKyogIFNUQVRVU19OT1RfT1BFTkVEOiBUaGUgbW9kdWxlIGhhcyBub3QgYmVlbiBvcGVuZWQuCisqICBTVEFUVVNfSU5WQUxJRF9FVkVOVDogVGhlIGV2ZW50IHBhcmFtZXRlciBpcyBpbnZhbGlkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFBGQ19SZWdpc3RlckNhbGxiYWNrKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfRVZFTlQgZXZlbnQsIFBGTl9EQ0xfQ0FMTEJBQ0sgY2FsbGJhY2spOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFBGQ19Db250cm9sCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIHNlbmQgY29tbWFuZCB0byBjb250cm9sIHRoZSBQRkMgbW9kdWxlLgorKgorKiBQQVJBTUVURVJTCisqICBoYW5kbGU6IFtJTl0gVGhlIGhhbmRsZSB2YWx1ZSByZXR1cm5lZCBmcm9tIERjbFBGQ19PcGVuCisqICBjbWQ6IFtJTl0gQSBjb250cm9sIGNvbW1hbmQgZm9yIFBGQyBtb2R1bGUKKyogICAgICAgICAgMS4gUEZDX0NNRF9SRVNFVDogdG8gcmVzZXQgUEZDIE1vZHVsZQorKiAgICAgICAgICAyLiBQRkNfQ01EX0VOQ09ERTogdG8gRW5jb2RlCisqICAgICAgICAgIDMuIFBGQ19DTURfREVDT0RFOiB0byBEZWNvZGUKKyoKKyogIGRhdGE6IFtJTl0gVGhlIGRhdGEgb2YgdGhlIGNvbnRyb2wgY29tbWFuZAorKiAgICAgICAgICAxLiBQRkNfQ01EX1JFU0VUOiBwb2ludGVyIHRvIGEgUEZDX0NUUkxfUkVTRVRfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgMi4gUEZDX0NNRF9FTkNPREU6IHBvaW50ZXIgdG8gYSBQRkNfQ1RSTF9FTkNPREVfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgMy4gUEZDX0NNRF9ERUNPREU6IHBvaW50ZXIgdG8gYSBQRkNfQ1RSTF9ERUNPREVfVCBzdHJ1Y3R1cmUKKyoKKyogUkVUVVJOUworKiAgUmV0dXJuIHRoZSBzdGF0dXMgb2YgRGNsUEZDX0NvbnRyb2wKKyoKKyogUkVUVVJOIFZBTFVFUworKiAgU1RBVFVTX09LOiBDb21tYW5kIGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyogIFNUQVRVU19GQUlMOiBDb21tYW5kIGlzIGZhaWxlZC4KKyogIFNUQVRVU19JTlZBTElEX0NNRDogSXQncyBhIGludmFsaWQgY29tbWFuZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQRkNfQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQRkNfQ2xvc2UKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gY2xvc2UgdGhlIFBGQyBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogW0lOXSBUaGUgcmV0dXJuZWQgaGFuZGxlIHZhbHVlIG9mIERjbFBGQ19PcGVuCisqCisqIFJFVFVSTlMKKyogIFJldHVybiB0aGUgc3RhdHVzIG9mIERjbFBGQ19DbG9zZQorKgorKiBSRVRVUk4gVkFMVUVTCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQRkNfQ2xvc2UoRENMX0hBTkRMRSBoYW5kbGUpOworCisvLyBNb0RJUyBwYXJzZXIgc2tpcCBlbmQKKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfUEZDX0hfUFJPVE9UWVBFX18KKyNlbmRpZiAvLyAjaWZkZWYgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9wbXUuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX3BtdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlY2VmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9wbXUuaApAQCAtMCwwICsxLDM3MDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGRjbF9wbXUuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgSGVhZGVyIGZpbGUgb2YgRENMIChEcml2ZXIgQ29tbW9uIExheWVyKSBmb3IgUE1VLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9TVFJVQ1QKKyNpZm5kZWYgX19EQ0xfUE1VX0hfU1RSVUNUX18KKyNkZWZpbmUgX19EQ0xfUE1VX0hfU1RSVUNUX18KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX09QVElPTlMgZm9yIFBNVQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBNVV9PUFRJT05TCisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NPTkZJR1VSRV9UIGZvciBQTVUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFBNVV9DT05GSUdTCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfRVZFTlQgZm9yIFBNVQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBNVV9FVkVOVFMKKworLyogRW51bSBvZiBMRE8vQlVDSyBMaXN0ICovCit0eXBlZGVmIGVudW0KK3sKKwlWQTEyLAorCVZSVEMsCisJVk1JQywKKwlWQVVETiwKKwlWQVVEUCwKKwlWUkYyOCwKKwlWUkY9VlJGMjgsCisJVlJGMjhfMT1WUkYyOCwKKwlWUkYyOF8yLAorCVZUQ1hPLAorCVZUQ1hPXzE9VlRDWE8sCisJVlRDWE9fMiwKKwlWQTI1LAorCVZDQU1BLAorCVZDQU1ELAorCVZDQU1fSU8sCisJVkNBTV9BRiwKKwlWSU8yOCwKKwlWVVNCLAorCVZCVCwKKwlWU0lNLAorCVZTSU0xID0gVlNJTSwKKwlWU0lNMiwKKwlWSUJSLAorCVZNQywKKwlWTUMxLAorCVZNQ0gsCisJVkNBTUEyLAorCVZDQU1EMiwKKwlWRk0sCisJVk0xMiwKKwlWTTEyXzEsCisJVk0xMl8yLAorCVZNMTJfSU5ULAorCVZDT1JFLAorCVZDT1JFMiwKKwlWSU8xOCwKKwlWUEFfU1csCisJVlBST0MsCisJVlJGMTgsCisJVlJGMTIsCisJVlJGMThfMSwKKwlWUkYxOF8yLAorCVZSRjEsCisJVlJGMiwKKwlWQTI4LAorCVZNLAorCVZTRiwKKwlWV0lGSTJWOCwKKwlWV0lGSTNWMywKKwlWM0dUWCwKKwlWM0dSWCwKKwlWR1AsCisJVkdQMiwKKwlWU0RJTywKKwlWRElHLAorCVZCVVMsCisJVkExLAorCVZBMiwKKwlWTUlQSSwKKwlWQkFDS1VQLAorCVZNT0RFTSwKKwlWU1JBTV9NRCwKKwlWTUQxLAorCVZUQ1hPMjQsCisJVlRDWE8yOCwKKwlWWE8yMiwKKwlWRkUyOCwKKwlWUzEsCisJVlMyLAorCVZQQTIsCisJVlNSQU1fT1RIRVJTLAorCVZSRjE4X1ZPQ0FMLAorCVZSRjEyX1ZPQ0FMLAorCVZSRjE4X1ZPVFJJTSwKKwlWUkYxMl9WT1RSSU0sCisJVlBBX09DX1NETl9TVEFUVVMsCisJVlBBX09DX1NETl9FTiwKKwlWU1JBTV9HUFUsCisJVkdQVSwKKwlWR1BVMTEsCisJVkdQVTEyLAorCVZQUk9DMSwKKwlWUFJPQzIsCisJVlBVLAorCVZTUkFNX1BST0MxLAorCVZTUkFNX1BST0MyLAkKKwlQTVVfTERPX0JVQ0tfTUFYLAorCVZJTzE4X1ZPQ0FMLAorCVZJTzE4X1ZPVFJJTSwKK31QTVVfTERPX0JVQ0tfTElTVF9FTlVNOworCisvKiBFbnVtIG9mIFZQQSBMaXN0ICovCit0eXBlZGVmIGVudW0KK3sKKwlWUEEsCisJVlBBMT1WUEEsCisJUE1VX1ZQQV9NQVgKK31QTVVfVlBBX0xJU1RfRU5VTTsKKworLyogRW51bSBvZiBWUkYxOCBMaXN0ICovCit0eXBlZGVmIGVudW0KK3sKKwlQTUlDX1ZSRjE4LAorCVBNSUNfVlJGMThfMSA9IFBNSUNfVlJGMTgsCisJUE1JQ19WUkYxOF8yLAorCVBNSUNfVlJGMThfTUFYCit9UE1JQ19WUkYxOF9MSVNUX0VOVU07CisKKy8qIEVudW0gb2YgVlNJTSBMaXN0ICovCit0eXBlZGVmIGVudW0KK3sKKwlQTUlDX1ZTSU0sCisJUE1JQ19WU0lNMSA9IFBNSUNfVlNJTSwKKwlQTUlDX1ZTSU0yLAorCVBNSUNfVlNJTV9NQVgKK31QTUlDX1ZTSU1fTElTVF9FTlVNOworCisvKiBFbnVtIG9mIEtQTEVEIExpc3QgKi8KK3R5cGVkZWYgZW51bQoreworCUtQTEVELAorCVBNVV9LUExFRF9NQVgKK31QTVVfS1BMRURfTElTVF9FTlVNOworCisvKiBFbnVtIG9mIENIUiBMaXN0ICovCit0eXBlZGVmIGVudW0KK3sKKwlDSFIsCisJUE1VX0NIUl9NQVgKK31QTVVfQ0hSX0xJU1RfRU5VTTsKKworLyogRW51bSBvZiBTVEFSVFVQIExpc3QgKi8KK3R5cGVkZWYgZW51bQoreworCVNUUlVQLAorCVBNVV9TVFJVUF9NQVgKK31QTVVfU1RSVVBfTElTVF9FTlVNOworCisvKiBFbnVtIG9mIElTSU5LIExpc3QgKi8KK3R5cGVkZWYgZW51bQoreworCUlTSU5LMCwKKwlJU0lOSzEsCisJSVNJTksyLAorCUlTSU5LMywKKwlJU0lOSzQsCisgICAgSVNJTks1LAorCVBNVV9JU0lOS19NQVgKK31QTVVfSVNJTktfTElTVF9FTlVNOworCisvKiBFbnVtIG9mIEJPT1NUIExpc3QgKi8KK3R5cGVkZWYgZW51bQoreworCUJPT1NULAorCUJPT1NUMT1CT09TVCwKKwlCT09TVDIsCisJUE1VX0JPT1NUX01BWAorfVBNVV9CT09TVF9MSVNUX0VOVU07CisKKy8qIEVudW0gb2YgU1BLIExpc3QgKi8KK3R5cGVkZWYgZW51bQoreworCVNQSywKKwlQTVVfU1BLX01BWAorfVBNVV9TUEtfTElTVF9FTlVNOworCisvKiBFbnVtIG9mIExQT1NDIExpc3QgKi8KK3R5cGVkZWYgZW51bQoreworCUxQT1NDLAorCVBNVV9MUE9TQ19NQVgKK31QTVVfTFBPU0NfTElTVF9FTlVNOworCisvKiBFbnVtIG9mIFZvbHRhZ2UgTGlzdCAqLwordHlwZWRlZiBlbnVtCit7CisJUE1VX1ZPTFRfMDBfMDAwMDAwX1YgPSAgICAgICAgMCwKKwlQTVVfVk9MVF8wMF8xMDAwMDBfViA9ICAgMTAwMDAwLAorCVBNVV9WT0xUXzAwXzIwMDAwMF9WID0gICAyMDAwMDAsCisJUE1VX1ZPTFRfMDBfMzAwMDAwX1YgPSAgIDMwMDAwMCwKKwlQTVVfVk9MVF8wMF80MDAwMDBfViA9ICAgNDAwMDAwLAorCVBNVV9WT0xUXzAwXzQ1MDAwMF9WID0gICA0NTAwMDAsCisJUE1VX1ZPTFRfMDBfNTAwMDAwX1YgPSAgIDUwMDAwMCwKKwlQTVVfVk9MVF8wMF81MjUwMDBfViA9ICAgNTI1MDAwLAorCVBNVV9WT0xUXzAwXzU1MDAwMF9WID0gICA1NTAwMDAsCisJUE1VX1ZPTFRfMDBfNTY4MDAwX1YgPSAgIDU2ODAwMCwKKwlQTVVfVk9MVF8wMF82MDAwMDBfViA9ICAgNjAwMDAwLAorCVBNVV9WT0xUXzAwXzY1MDAwMF9WID0gICA2NTAwMDAsCisJUE1VX1ZPTFRfMDBfNzAwMDAwX1YgPSAgIDcwMDAwMCwKKwlQTVVfVk9MVF8wMF83MjUwMDBfViA9ICAgNzI1MDAwLAorCVBNVV9WT0xUXzAwXzc1MDAwMF9WID0gICA3NTAwMDAsCisJUE1VX1ZPTFRfMDBfNzc1MDAwX1YgPSAgIDc3NTAwMCwKKwlQTVVfVk9MVF8wMF84MDAwMDBfViA9ICAgODAwMDAwLAorCVBNVV9WT0xUXzAwXzgyNTAwMF9WID0gICA4MjUwMDAsCisJUE1VX1ZPTFRfMDBfODUwMDAwX1YgPSAgIDg1MDAwMCwKKwlQTVVfVk9MVF8wMF84NzUwMDBfViA9ICAgODc1MDAwLAorCVBNVV9WT0xUXzAwXzkwMDAwMF9WID0gICA5MDAwMDAsCisJUE1VX1ZPTFRfMDBfOTI1MDAwX1YgPSAgIDkyNTAwMCwKKwlQTVVfVk9MVF8wMF85NTAwMDBfViA9ICAgOTUwMDAwLAorCVBNVV9WT0xUXzAwXzk3NTAwMF9WID0gICA5NzUwMDAsCisJUE1VX1ZPTFRfMDFfMDAwMDAwX1YgPSAgMTAwMDAwMCwKKwlQTVVfVk9MVF8wMV8wMjUwMDBfViA9ICAxMDI1MDAwLAorCVBNVV9WT0xUXzAxXzA1MDAwMF9WID0gIDEwNTAwMDAsCisJUE1VX1ZPTFRfMDFfMDYwMDAwX1YgPSAgMTA2MDAwMCwKKwlQTVVfVk9MVF8wMV8wNzUwMDBfViA9ICAxMDc1MDAwLAorCVBNVV9WT0xUXzAxXzEwMDAwMF9WID0gIDExMDAwMDAsCisJUE1VX1ZPTFRfMDFfMTI1MDAwX1YgPSAgMTEyNTAwMCwKKwlQTVVfVk9MVF8wMV8xNTAwMDBfViA9ICAxMTUwMDAwLAorCVBNVV9WT0xUXzAxXzE3NTAwMF9WID0gIDExNzUwMDAsCisJUE1VX1ZPTFRfMDFfMjAwMDAwX1YgPSAgMTIwMDAwMCwKKwlQTVVfVk9MVF8wMV8yMjUwMDBfViA9ICAxMjI1MDAwLAorCVBNVV9WT0xUXzAxXzI1MDAwMF9WID0gIDEyNTAwMDAsCisJUE1VX1ZPTFRfMDFfMjc1MDAwX1YgPSAgMTI3NTAwMCwKKwlQTVVfVk9MVF8wMV8zMDAwMDBfViA9ICAxMzAwMDAwLAorCVBNVV9WT0xUXzAxXzMyNTAwMF9WID0gIDEzMjUwMDAsCisJUE1VX1ZPTFRfMDFfMzUwMDAwX1YgPSAgMTM1MDAwMCwKKwlQTVVfVk9MVF8wMV8zNzUwMDBfViA9ICAxMzc1MDAwLAorCVBNVV9WT0xUXzAxXzQwMDAwMF9WID0gIDE0MDAwMDAsCisJUE1VX1ZPTFRfMDFfNDI1MDAwX1YgPSAgMTQyNTAwMCwKKwlQTVVfVk9MVF8wMV80NTAwMDBfViA9ICAxNDUwMDAwLAorCVBNVV9WT0xUXzAxXzQ3NTAwMF9WID0gIDE0NzUwMDAsCisJUE1VX1ZPTFRfMDFfNTAwMDAwX1YgPSAgMTUwMDAwMCwKKwlQTVVfVk9MVF8wMV81MjAwMDBfViA9ICAxNTIwMDAwLAorCVBNVV9WT0xUXzAxXzUyNTAwMF9WID0gIDE1MjUwMDAsCisJUE1VX1ZPTFRfMDFfNTQwMDAwX1YgPSAgMTU0MDAwMCwKKwlQTVVfVk9MVF8wMV81NTAwMDBfViA9ICAxNTUwMDAwLAorCVBNVV9WT0xUXzAxXzU2MDAwMF9WID0gIDE1NjAwMDAsCisJUE1VX1ZPTFRfMDFfNTc1MDAwX1YgPSAgMTU3NTAwMCwKKwlQTVVfVk9MVF8wMV81ODAwMDBfViA9ICAxNTgwMDAwLAorCVBNVV9WT0xUXzAxXzYwMDAwMF9WID0gIDE2MDAwMDAsCisJUE1VX1ZPTFRfMDFfNjIwMDAwX1YgPSAgMTYyMDAwMCwKKwlQTVVfVk9MVF8wMV82MjUwMDBfViA9ICAxNjI1MDAwLAorCVBNVV9WT0xUXzAxXzY0MDAwMF9WID0gIDE2NDAwMDAsCisJUE1VX1ZPTFRfMDFfNjUwMDAwX1YgPSAgMTY1MDAwMCwKKwlQTVVfVk9MVF8wMV82NjAwMDBfViA9ICAxNjYwMDAwLAorCVBNVV9WT0xUXzAxXzY3NTAwMF9WID0gIDE2NzUwMDAsCisJUE1VX1ZPTFRfMDFfNjgwMDAwX1YgPSAgMTY4MDAwMCwKKwlQTVVfVk9MVF8wMV83MDAwMDBfViA9ICAxNzAwMDAwLAorCVBNVV9WT0xUXzAxXzcyMDAwMF9WID0gIDE3MjAwMDAsCisJUE1VX1ZPTFRfMDFfNzI1MDAwX1YgPSAgMTcyNTAwMCwKKwlQTVVfVk9MVF8wMV83NDAwMDBfViA9ICAxNzQwMDAwLAorCVBNVV9WT0xUXzAxXzc1MDAwMF9WID0gIDE3NTAwMDAsCisJUE1VX1ZPTFRfMDFfNzYwMDAwX1YgPSAgMTc2MDAwMCwKKwlQTVVfVk9MVF8wMV83NzUwMDBfViA9ICAxNzc1MDAwLAorCVBNVV9WT0xUXzAxXzc4MDAwMF9WID0gIDE3ODAwMDAsCisJUE1VX1ZPTFRfMDFfODAwMDAwX1YgPSAgMTgwMDAwMCwKKwlQTVVfVk9MVF8wMV84MjAwMDBfViA9ICAxODIwMDAwLAorCVBNVV9WT0xUXzAxXzgyNTAwMF9WID0gIDE4MjUwMDAsCisJUE1VX1ZPTFRfMDFfODQwMDAwX1YgPSAgMTg0MDAwMCwKKwlQTVVfVk9MVF8wMV84NTAwMDBfViA9ICAxODUwMDAwLAorCVBNVV9WT0xUXzAxXzg2MDAwMF9WID0gIDE4NjAwMDAsCisJUE1VX1ZPTFRfMDFfODc1MDAwX1YgPSAgMTg3NTAwMCwKKwlQTVVfVk9MVF8wMV84ODAwMDBfViA9ICAxODgwMDAwLAorCVBNVV9WT0xUXzAxXzkwMDAwMF9WID0gIDE5MDAwMDAsCisJUE1VX1ZPTFRfMDFfOTIwMDAwX1YgPSAgMTkyMDAwMCwKKwlQTVVfVk9MVF8wMV85MjUwMDBfViA9ICAxOTI1MDAwLAorCVBNVV9WT0xUXzAxXzk0MDAwMF9WID0gIDE5NDAwMDAsCisJUE1VX1ZPTFRfMDFfOTUwMDAwX1YgPSAgMTk1MDAwMCwKKwlQTVVfVk9MVF8wMV85NjAwMDBfViA9ICAxOTYwMDAwLAorCVBNVV9WT0xUXzAxXzk3NTAwMF9WID0gIDE5NzUwMDAsCisJUE1VX1ZPTFRfMDFfOTgwMDAwX1YgPSAgMTk4MDAwMCwKKwlQTVVfVk9MVF8wMl8wMDAwMDBfViA9ICAyMDAwMDAwLAorCVBNVV9WT0xUXzAyXzAyMDAwMF9WID0gIDIwMjAwMDAsCisJUE1VX1ZPTFRfMDJfMDI1MDAwX1YgPSAgMjAyNTAwMCwKKwlQTVVfVk9MVF8wMl8wNDAwMDBfViA9ICAyMDQwMDAwLAorCVBNVV9WT0xUXzAyXzA1MDAwMF9WID0gIDIwNTAwMDAsCisJUE1VX1ZPTFRfMDJfMDYwMDAwX1YgPSAgMjA2MDAwMCwKKwlQTVVfVk9MVF8wMl8wNzUwMDBfViA9ICAyMDc1MDAwLAorCVBNVV9WT0xUXzAyXzA4MDAwMF9WID0gIDIwODAwMDAsCisJUE1VX1ZPTFRfMDJfMTAwMDAwX1YgPSAgMjEwMDAwMCwKKwlQTVVfVk9MVF8wMl8xMjAwMDBfViA9ICAyMTIwMDAwLAorCVBNVV9WT0xUXzAyXzEyNTAwMF9WID0gIDIxMjUwMDAsCisJUE1VX1ZPTFRfMDJfMTQwMDAwX1YgPSAgMjE0MDAwMCwKKwlQTVVfVk9MVF8wMl8xNTAwMDBfViA9ICAyMTUwMDAwLAorCVBNVV9WT0xUXzAyXzE3NTAwMF9WID0gIDIxNzUwMDAsCisJUE1VX1ZPTFRfMDJfMjAwMDAwX1YgPSAgMjIwMDAwMCwKKwlQTVVfVk9MVF8wMl8yMjUwMDBfViA9ICAyMjI1MDAwLAorCVBNVV9WT0xUXzAyXzI1MDAwMF9WID0gIDIyNTAwMDAsCisJUE1VX1ZPTFRfMDJfMjc1MDAwX1YgPSAgMjI3NTAwMCwKKwlQTVVfVk9MVF8wMl8zMDAwMDBfViA9ICAyMzAwMDAwLAorCVBNVV9WT0xUXzAyXzM3NTAwMF9WID0gIDIzNzUwMDAsCisJUE1VX1ZPTFRfMDJfMzUwMDAwX1YgPSAgMjM1MDAwMCwKKwlQTVVfVk9MVF8wMl80MjUwMDBfViA9ICAyNDI1MDAwLAorCVBNVV9WT0xUXzAyXzQwMDAwMF9WID0gIDI0MDAwMDAsCisJUE1VX1ZPTFRfMDJfNDUwMDAwX1YgPSAgMjQ1MDAwMCwKKwlQTVVfVk9MVF8wMl81MDAwMDBfViA9ICAyNTAwMDAwLAorCVBNVV9WT0xUXzAyXzU1MDAwMF9WID0gIDI1NTAwMDAsCisJUE1VX1ZPTFRfMDJfNTc1MDAwX1YgPSAgMjU3NTAwMCwKKwlQTVVfVk9MVF8wMl82MDAwMDBfViA9ICAyNjAwMDAwLAorCVBNVV9WT0xUXzAyXzY1MDAwMF9WID0gIDI2NTAwMDAsCisJUE1VX1ZPTFRfMDJfNzAwMDAwX1YgPSAgMjcwMDAwMCwKKwlQTVVfVk9MVF8wMl83MjUwMDBfViA9ICAyNzI1MDAwLAorCVBNVV9WT0xUXzAyXzc1MDAwMF9WID0gIDI3NTAwMDAsCisJUE1VX1ZPTFRfMDJfNzYwMDAwX1YgPSAgMjc2MDAwMCwKKwlQTVVfVk9MVF8wMl84MDAwMDBfViA9ICAyODAwMDAwLAorCVBNVV9WT0xUXzAyXzg1MDAwMF9WID0gIDI4NTAwMDAsCisJUE1VX1ZPTFRfMDJfODc1MDAwX1YgPSAgMjg3NTAwMCwKKwlQTVVfVk9MVF8wMl85MDAwMDBfViA9ICAyOTAwMDAwLAorCVBNVV9WT0xUXzAyXzk1MDAwMF9WID0gIDI5NTAwMDAsCisJUE1VX1ZPTFRfMDNfMDAwMDAwX1YgPSAgMzAwMDAwMCwKKwlQTVVfVk9MVF8wM18wMjUwMDBfViA9ICAzMDI1MDAwLAorCVBNVV9WT0xUXzAzXzA1MDAwMF9WID0gIDMwNTAwMDAsCisJUE1VX1ZPTFRfMDNfMTAwMDAwX1YgPSAgMzEwMDAwMCwKKwlQTVVfVk9MVF8wM18xNTAwMDBfViA9ICAzMTUwMDAwLAorCVBNVV9WT0xUXzAzXzE3NTAwMF9WID0gIDMxNzUwMDAsCisJUE1VX1ZPTFRfMDNfMjAwMDAwX1YgPSAgMzIwMDAwMCwKKwlQTVVfVk9MVF8wM18yNTAwMDBfViA9ICAzMjUwMDAwLAorCVBNVV9WT0xUXzAzXzI3NTAwMF9WID0gIDMyNzUwMDAsCisJUE1VX1ZPTFRfMDNfMzAwMDAwX1YgPSAgMzMwMDAwMCwKKwlQTVVfVk9MVF8wM18zMjUwMDBfViA9ICAzMzI1MDAwLAorCVBNVV9WT0xUXzAzXzM1MDAwMF9WID0gIDMzNTAwMDAsCisJUE1VX1ZPTFRfMDNfNDAwMDAwX1YgPSAgMzQwMDAwMCwKKwlQTVVfVk9MVF8wM180NTAwMDBfViA9ICAzNDUwMDAwLAorCVBNVV9WT0xUXzAzXzUwMDAwMF9WID0gIDM1MDAwMDAsCisJUE1VX1ZPTFRfMDNfNTUwMDAwX1YgPSAgMzU1MDAwMCwKKwlQTVVfVk9MVF8wM182MDAwMDBfViA9ICAzNjAwMDAwLAorCVBNVV9WT0xUXzAzXzY1MDAwMF9WID0gIDM2NTAwMDAsCisJUE1VX1ZPTFRfMDNfODAwMDAwX1YgPSAgMzgwMDAwMCwKKwlQTVVfVk9MVF8wM185NTAwMDBfViA9ICAzOTUwMDAwLAorCVBNVV9WT0xUXzA0XzAwMDAwMF9WID0gIDQwMDAwMDAsCisJUE1VX1ZPTFRfMDRfMDEyNTAwX1YgPSAgNDAxMjUwMCwKKwlQTVVfVk9MVF8wNF8wMjUwMDBfViA9ICA0MDI1MDAwLAorCVBNVV9WT0xUXzA0XzAzNzUwMF9WID0gIDQwMzc1MDAsCisJUE1VX1ZPTFRfMDRfMDUwMDAwX1YgPSAgNDA1MDAwMCwKKwlQTVVfVk9MVF8wNF8wNjI1MDBfViA9ICA0MDYyNTAwLAorCVBNVV9WT0xUXzA0XzA2NzUwMF9WID0gIDQwNjc1MDAsCisJUE1VX1ZPTFRfMDRfMDc1MDAwX1YgPSAgNDA3NTAwMCwKKwlQTVVfVk9MVF8wNF8wODc1MDBfViA9ICA0MDg3NTAwLAorCVBNVV9WT0xUXzA0XzEwMDAwMF9WID0gIDQxMDAwMDAsCisJUE1VX1ZPTFRfMDRfMTEyNTAwX1YgPSAgNDExMjUwMCwKKwlQTVVfVk9MVF8wNF8xMTUwMDBfViA9ICA0MTE1MDAwLAorCVBNVV9WT0xUXzA0XzExNjAwMF9WID0gIDQxMTYwMDAsCisJUE1VX1ZPTFRfMDRfMTI1MDAwX1YgPSAgNDEyNTAwMCwKKwlQTVVfVk9MVF8wNF8xMzc1MDBfViA9ICA0MTM3NTAwLAorCVBNVV9WT0xUXzA0XzE1MDAwMF9WID0gIDQxNTAwMDAsCisJUE1VX1ZPTFRfMDRfMTYyNTAwX1YgPSAgNDE2MjUwMCwKKwlQTVVfVk9MVF8wNF8xNzUwMDBfViA9ICA0MTc1MDAwLAorCVBNVV9WT0xUXzA0XzE4NzUwMF9WID0gIDQxODc1MDAsCisJUE1VX1ZPTFRfMDRfMjAwMDAwX1YgPSAgNDIwMDAwMCwKKwlQTVVfVk9MVF8wNF8yMTI1MDBfViA9ICA0MjEyNTAwLAorCVBNVV9WT0xUXzA0XzIyNTAwMF9WID0gIDQyMjUwMDAsCisJUE1VX1ZPTFRfMDRfMjM3NTAwX1YgPSAgNDIzNzUwMCwKKwlQTVVfVk9MVF8wNF8yNTAwMDBfViA9ICA0MjUwMDAwLAorCVBNVV9WT0xUXzA0XzI2MjUwMF9WID0gIDQyNjI1MDAsCisJUE1VX1ZPTFRfMDRfMjc1MDAwX1YgPSAgNDI3NTAwMCwKKwlQTVVfVk9MVF8wNF8yODc1MDBfViA9ICA0Mjg3NTAwLAorCVBNVV9WT0xUXzA0XzMwMDAwMF9WID0gIDQzMDAwMDAsCisJUE1VX1ZPTFRfMDRfMzI1MDAwX1YgPSAgNDMyNTAwMCwKKwlQTVVfVk9MVF8wNF8zNTAwMDBfViA9ICA0MzUwMDAwLAorCVBNVV9WT0xUXzA0XzM3NTAwMF9WID0gIDQzNzUwMDAsCisJUE1VX1ZPTFRfMDRfNDAwMDAwX1YgPSAgNDQwMDAwMCwKKwlQTVVfVk9MVF8wNF80MTE1MDBfViA9ICA0NDExNTAwLAorCVBNVV9WT0xUXzA0XzQ1MDAwMF9WID0gIDQ0NTAwMDAsCisJUE1VX1ZPTFRfMDRfNTAwMDAwX1YgPSAgNDUwMDAwMCwKKwlQTVVfVk9MVF8wNF81NTAwMDBfViA9ICA0NTUwMDAwLAorCVBNVV9WT0xUXzA0XzYwMDAwMF9WID0gIDQ2MDAwMDAsCisJUE1VX1ZPTFRfMDRfNzAwMDAwX1YgPSAgNDcwMDAwMCwKKwlQTVVfVk9MVF8wNF84MDAwMDBfViA9ICA0ODAwMDAwLAorCVBNVV9WT0xUXzA0Xzg1MDAwMF9WID0gIDQ4NTAwMDAsCisJUE1VX1ZPTFRfMDRfOTUwMDAwX1YgPSAgNDk1MDAwMCwKKwlQTVVfVk9MVF8wNV8wMDAwMDBfViA9ICA1MDAwMDAwLAorCVBNVV9WT0xUXzA1XzE1MDAwMF9WID0gIDUxNTAwMDAsCisJUE1VX1ZPTFRfMDVfMjUwMDAwX1YgPSAgNTI1MDAwMCwKKwlQTVVfVk9MVF8wNV8zMDAwMDBfViA9ICA1MzAwMDAwLAorCVBNVV9WT0xUXzA1XzQ1MDAwMF9WID0gIDU0NTAwMDAsCisJUE1VX1ZPTFRfMDZfMDAwMDAwX1YgPSAgNjAwMDAwMCwKKwlQTVVfVk9MVF8wNl81MDAwMDBfViA9ICA2NTAwMDAwLAorCVBNVV9WT0xUXzA2Xzc1MDAwMF9WID0gIDY3NTAwMDAsCisJUE1VX1ZPTFRfMDdfMDAwMDAwX1YgPSAgNzAwMDAwMCwKKwlQTVVfVk9MVF8wN18yNTAwMDBfViA9ICA3MjUwMDAwLAorCVBNVV9WT0xUXzA3XzUwMDAwMF9WID0gIDc1MDAwMDAsCisJUE1VX1ZPTFRfMDhfMDAwMDAwX1YgPSAgODAwMDAwMCwKKwlQTVVfVk9MVF8wOF81MDAwMDBfViA9ICA4NTAwMDAwLAorCVBNVV9WT0xUXzA5XzUwMDAwMF9WID0gIDk1MDAwMDAsCisJUE1VX1ZPTFRfMTBfMDAwMDAwX1YgPSAxMDAwMDAwMCwKKwlQTVVfVk9MVF8xMF81MDAwMDBfViA9IDEwNTAwMDAwLAorCVBNVV9WT0xUX01BWCwKKwlQTVVfVk9MVF9JTlZBTElECisKK31QTVVfVk9MVEFHRV9FTlVNOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBQTVVfVk9MVF9DQUxfTUlOVVNfMDBfMTQwMDAwX1YgID0gICAtMTQwMDAwLAorICAgIFBNVV9WT0xUX0NBTF9NSU5VU18wMF8xMjAwMDBfViAgPSAgIC0xMjAwMDAsCisgICAgUE1VX1ZPTFRfQ0FMX01JTlVTXzAwXzEwMDAwMF9WICA9ICAgLTEwMDAwMCwKKyAgICBQTVVfVk9MVF9DQUxfTUlOVVNfMDBfMDgwMDAwX1YgID0gICAtODAwMDAsCisgICAgUE1VX1ZPTFRfQ0FMX01JTlVTXzAwXzA2MDAwMF9WICA9ICAgLTYwMDAwLAorICAgIFBNVV9WT0xUX0NBTF9NSU5VU18wMF8wNDAwMDBfViAgPSAgIC00MDAwMCwKKyAgICBQTVVfVk9MVF9DQUxfTUlOVVNfMDBfMDIwMDAwX1YgID0gICAtMjAwMDAsCisgICAgUE1VX1ZPTFRfQ0FMXzAwXzAwMDAwMF9WICAgICAgICA9ICAgMCwKKyAgICBQTVVfVk9MVF9DQUxfMDBfMDIwMDAwX1YgICAgICAgID0gICAyMDAwMCwKKyAgICBQTVVfVk9MVF9DQUxfMDBfMDQwMDAwX1YgICAgICAgID0gICA0MDAwMCwKKyAgICBQTVVfVk9MVF9DQUxfMDBfMDYwMDAwX1YgICAgICAgID0gICA2MDAwMCwKKyAgICBQTVVfVk9MVF9DQUxfMDBfMDgwMDAwX1YgICAgICAgID0gICA4MDAwMCwKKyAgICBQTVVfVk9MVF9DQUxfMDBfMTAwMDAwX1YgICAgICAgID0gICAxMDAwMDAsCisgICAgUE1VX1ZPTFRfQ0FMXzAwXzEyMDAwMF9WICAgICAgICA9ICAgMTIwMDAwLAorICAgIFBNVV9WT0xUX0NBTF8wMF8xNDAwMDBfViAgICAgICAgPSAgIDE0MDAwMCwKKyAgICBQTVVfVk9MVF9DQUxfMDBfMTYwMDAwX1YgICAgICAgID0gICAxNjAwMDAsCisgICAgUE1VX1ZPTFRfQ0FMX01BWCwKKyAgICBQTVVfVk9MVF9DQUxfSU5WQUxJRAorfSBQTVVfVk9MVEFHRV9DQUxJQlJBVElPTl9FTlVNOworCisvKiBFbnVtIG9mIFNQSyBkYiBMaXN0ICovCit0eXBlZGVmIGVudW0KK3sKKwlQTUlDX1NQS19WT0xfMDBfMDBfZEIgICAgPSAgICAwLAorCVBNSUNfU1BLX1ZPTF8wMF81MF9kQiAgICA9ICAgNTAsCisJUE1JQ19TUEtfVk9MXzAxXzAwX2RCICAgID0gIDEwMCwKKwlQTUlDX1NQS19WT0xfMDFfNTBfZEIgICAgPSAgMTUwLAorCVBNSUNfU1BLX1ZPTF8wMl8wMF9kQiAgICA9ICAyMDAsCisJUE1JQ19TUEtfVk9MXzAyXzUwX2RCICAgID0gIDI1MCwKKwlQTUlDX1NQS19WT0xfMDNfMDBfZEIgICAgPSAgMzAwLAorCVBNSUNfU1BLX1ZPTF8wM181MF9kQiAgICA9ICAzNTAsCisJUE1JQ19TUEtfVk9MXzA0XzAwX2RCICAgID0gIDQwMCwKKwlQTUlDX1NQS19WT0xfMDRfNTBfZEIgICAgPSAgNDUwLAorCVBNSUNfU1BLX1ZPTF8wNV8wMF9kQiAgICA9ICA1MDAsCisJUE1JQ19TUEtfVk9MXzA1XzUwX2RCICAgID0gIDU1MCwKKwlQTUlDX1NQS19WT0xfMDZfMDBfZEIgICAgPSAgNjAwLAorCVBNSUNfU1BLX1ZPTF8wNl81MF9kQiAgICA9ICA2NTAsCisJUE1JQ19TUEtfVk9MXzA3XzAwX2RCICAgID0gIDcwMCwKKwlQTUlDX1NQS19WT0xfMDdfNTBfZEIgICAgPSAgNzUwLAorCVBNSUNfU1BLX1ZPTF8wOF8wMF9kQiAgICA9ICA4MDAsCisJUE1JQ19TUEtfVk9MXzA4XzUwX2RCICAgID0gIDg1MCwKKwlQTUlDX1NQS19WT0xfMDlfMDBfZEIgICAgPSAgOTAwLAorCVBNSUNfU1BLX1ZPTF8wOV81MF9kQiAgICA9ICA5NTAsCisJUE1JQ19TUEtfVk9MXzEwXzAwX2RCICAgID0gMTAwMCwKKwlQTUlDX1NQS19WT0xfMTBfNTBfZEIgICAgPSAxMDUwLAorCVBNSUNfU1BLX1ZPTF8xMV8wMF9kQiAgICA9IDExMDAsCisJUE1JQ19TUEtfVk9MXzExXzUwX2RCICAgID0gMTE1MCwKKwlQTUlDX1NQS19WT0xfMTJfMDBfZEIgICAgPSAxMjAwLAorCVBNSUNfU1BLX1ZPTF8xMl81MF9kQiAgICA9IDEyNTAsCisJUE1JQ19TUEtfVk9MXzEzXzAwX2RCICAgID0gMTMwMCwKKwlQTUlDX1NQS19WT0xfMTNfNTBfZEIgICAgPSAxMzUwLAorCVBNSUNfU1BLX1ZPTF8xNF8wMF9kQiAgICA9IDE0MDAsCisJUE1JQ19TUEtfVk9MXzE0XzUwX2RCICAgID0gMTQ1MCwKKwlQTUlDX1NQS19WT0xfMTVfMDBfZEIgICAgPSAxNTAwLAorCVBNSUNfU1BLX1ZPTF8xNV81MF9kQiAgICA9IDE1NTAsCisJUE1JQ19TUEtfVk9MXzE2XzAwX2RCICAgID0gMTYwMCwKKwlQTUlDX1NQS19WT0xfMTZfNTBfZEIgICAgPSAxNjUwLAorCVBNSUNfU1BLX1ZPTF8xN18wMF9kQiAgICA9IDE3MDAsCisJUE1JQ19TUEtfVk9MXzE3XzUwX2RCICAgID0gMTc1MCwKKwlQTUlDX1NQS19WT0xfMThfMDBfZEIgICAgPSAxODAwLAorCVBNSUNfU1BLX1ZPTF8xOF81MF9kQiAgICA9IDE4NTAsCisJUE1JQ19TUEtfVk9MXzE5XzAwX2RCICAgID0gMTkwMCwKKwlQTUlDX1NQS19WT0xfMTlfNTBfZEIgICAgPSAxOTUwLAorCVBNSUNfU1BLX1ZPTF8yMF8wMF9kQiAgICA9IDIwMDAsCisJUE1JQ19TUEtfVk9MXzIwXzUwX2RCICAgID0gMjA1MCwKKwlQTUlDX1NQS19WT0xfMjFfMDBfZEIgICAgPSAyMTAwLAorCVBNSUNfU1BLX1ZPTF8yMV81MF9kQiAgICA9IDIxNTAsCisJUE1JQ19TUEtfVk9MXzIyXzAwX2RCICAgID0gMjIwMCwKKwlQTUlDX1NQS19WT0xfMjJfNTBfZEIgICAgPSAyMjUwLAorCVBNSUNfU1BLX1ZPTF8yM18wMF9kQiAgICA9IDIzMDAsCisJUE1JQ19TUEtfVk9MXzIzXzUwX2RCICAgID0gMjM1MCwKKwlQTUlDX1NQS19WT0xfMjRfMDBfZEIgICAgPSAyNDAwLAorCVBNSUNfU1BLX1ZPTF8yNF81MF9kQiAgICA9IDI0NTAsCisJUE1JQ19TUEtfVk9MX01BWCAgICAgICAgID0gOTkwMCwKKworCVBNVV9TUEtfVk9MXzAwXzAwX2RCICAgID0gICAgMCwKKwlQTVVfU1BLX1ZPTF8wMF81MF9kQiAgICA9ICAgNTAsCisJUE1VX1NQS19WT0xfMDFfMDBfZEIgICAgPSAgMTAwLAorCVBNVV9TUEtfVk9MXzAxXzUwX2RCICAgID0gIDE1MCwKKwlQTVVfU1BLX1ZPTF8wMl8wMF9kQiAgICA9ICAyMDAsCisJUE1VX1NQS19WT0xfMDJfNTBfZEIgICAgPSAgMjUwLAorCVBNVV9TUEtfVk9MXzAzXzAwX2RCICAgID0gIDMwMCwKKwlQTVVfU1BLX1ZPTF8wM181MF9kQiAgICA9ICAzNTAsCisJUE1VX1NQS19WT0xfMDRfMDBfZEIgICAgPSAgNDAwLAorCVBNVV9TUEtfVk9MXzA0XzUwX2RCICAgID0gIDQ1MCwKKwlQTVVfU1BLX1ZPTF8wNV8wMF9kQiAgICA9ICA1MDAsCisJUE1VX1NQS19WT0xfMDVfNTBfZEIgICAgPSAgNTUwLAorCVBNVV9TUEtfVk9MXzA2XzAwX2RCICAgID0gIDYwMCwKKwlQTVVfU1BLX1ZPTF8wNl81MF9kQiAgICA9ICA2NTAsCisJUE1VX1NQS19WT0xfMDdfMDBfZEIgICAgPSAgNzAwLAorCVBNVV9TUEtfVk9MXzA3XzUwX2RCICAgID0gIDc1MCwKKwlQTVVfU1BLX1ZPTF8wOF8wMF9kQiAgICA9ICA4MDAsCisJUE1VX1NQS19WT0xfMDhfNTBfZEIgICAgPSAgODUwLAorCVBNVV9TUEtfVk9MXzA5XzAwX2RCICAgID0gIDkwMCwKKwlQTVVfU1BLX1ZPTF8wOV81MF9kQiAgICA9ICA5NTAsCisJUE1VX1NQS19WT0xfMTBfMDBfZEIgICAgPSAxMDAwLAorCVBNVV9TUEtfVk9MXzEwXzUwX2RCICAgID0gMTA1MCwKKwlQTVVfU1BLX1ZPTF8xMV8wMF9kQiAgICA9IDExMDAsCisJUE1VX1NQS19WT0xfMTFfNTBfZEIgICAgPSAxMTUwLAorCVBNVV9TUEtfVk9MXzEyXzAwX2RCICAgID0gMTIwMCwKKwlQTVVfU1BLX1ZPTF8xMl81MF9kQiAgICA9IDEyNTAsCisJUE1VX1NQS19WT0xfMTNfMDBfZEIgICAgPSAxMzAwLAorCVBNVV9TUEtfVk9MXzEzXzUwX2RCICAgID0gMTM1MCwKKwlQTVVfU1BLX1ZPTF8xNF8wMF9kQiAgICA9IDE0MDAsCisJUE1VX1NQS19WT0xfMTRfNTBfZEIgICAgPSAxNDUwLAorCVBNVV9TUEtfVk9MXzE1XzAwX2RCICAgID0gMTUwMCwKKwlQTVVfU1BLX1ZPTF8xNV81MF9kQiAgICA9IDE1NTAsCisJUE1VX1NQS19WT0xfMTZfMDBfZEIgICAgPSAxNjAwLAorCVBNVV9TUEtfVk9MXzE2XzUwX2RCICAgID0gMTY1MCwKKwlQTVVfU1BLX1ZPTF8xN18wMF9kQiAgICA9IDE3MDAsCisJUE1VX1NQS19WT0xfMTdfNTBfZEIgICAgPSAxNzUwLAorCVBNVV9TUEtfVk9MXzE4XzAwX2RCICAgID0gMTgwMCwKKwlQTVVfU1BLX1ZPTF8xOF81MF9kQiAgICA9IDE4NTAsCisJUE1VX1NQS19WT0xfMTlfMDBfZEIgICAgPSAxOTAwLAorCVBNVV9TUEtfVk9MXzE5XzUwX2RCICAgID0gMTk1MCwKKwlQTVVfU1BLX1ZPTF8yMF8wMF9kQiAgICA9IDIwMDAsCisJUE1VX1NQS19WT0xfMjBfNTBfZEIgICAgPSAyMDUwLAorCVBNVV9TUEtfVk9MXzIxXzAwX2RCICAgID0gMjEwMCwKKwlQTVVfU1BLX1ZPTF8yMV81MF9kQiAgICA9IDIxNTAsCisJUE1VX1NQS19WT0xfMjJfMDBfZEIgICAgPSAyMjAwLAorCVBNVV9TUEtfVk9MXzIyXzUwX2RCICAgID0gMjI1MCwKKwlQTVVfU1BLX1ZPTF8yM18wMF9kQiAgICA9IDIzMDAsCisJUE1VX1NQS19WT0xfMjNfNTBfZEIgICAgPSAyMzUwLAorCVBNVV9TUEtfVk9MXzI0XzAwX2RCICAgID0gMjQwMCwKKwlQTVVfU1BLX1ZPTF8yNF81MF9kQiAgICA9IDI0NTAsCisJUE1VX1NQS19WT0xfTUFYICAgICAgICAgPSA5OTAwCit9UE1VX1NQS19WT0xfRU5VTTsKKworLyogRW51bSBvZiBjaGFyZ2VyIGN1cnJlbnQgTGlzdCAqLwordHlwZWRlZiBlbnVtCit7CisJUE1VX0NIQVJHRV9DVVJSRU5UXzBfMDBfTUEgPSAwLAorCVBNVV9DSEFSR0VfQ1VSUkVOVF81MF8wMF9NQSA9IDUwMDAsCisJUE1VX0NIQVJHRV9DVVJSRU5UXzYyXzUwX01BID0gNjI1MCwKKwlQTVVfQ0hBUkdFX0NVUlJFTlRfNzBfMDBfTUEgPSA3MDAwLAorCVBNVV9DSEFSR0VfQ1VSUkVOVF83NV8wMF9NQSA9IDc1MDAsCisJUE1VX0NIQVJHRV9DVVJSRU5UXzg3XzUwX01BID0gODc1MCwKKwlQTVVfQ0hBUkdFX0NVUlJFTlRfMTAwXzAwX01BID0gMTAwMDAsCisJUE1VX0NIQVJHRV9DVVJSRU5UXzE1MF8wMF9NQSA9IDE1MDAwLAorCVBNVV9DSEFSR0VfQ1VSUkVOVF8yMDBfMDBfTUEgPSAyMDAwMCwKKwlQTVVfQ0hBUkdFX0NVUlJFTlRfMjI1XzAwX01BID0gMjI1MDAsCisJUE1VX0NIQVJHRV9DVVJSRU5UXzI1MF8wMF9NQSA9IDI1MDAwLAorCVBNVV9DSEFSR0VfQ1VSUkVOVF8zMDBfMDBfTUEgPSAzMDAwMCwKKwlQTVVfQ0hBUkdFX0NVUlJFTlRfMzUwXzAwX01BID0gMzUwMDAsCisJUE1VX0NIQVJHRV9DVVJSRU5UXzQwMF8wMF9NQSA9IDQwMDAwLAorCVBNVV9DSEFSR0VfQ1VSUkVOVF80MjVfMDBfTUEgPSA0MjUwMCwKKwlQTVVfQ0hBUkdFX0NVUlJFTlRfNDUwXzAwX01BID0gNDUwMDAsCisJUE1VX0NIQVJHRV9DVVJSRU5UXzUwMF8wMF9NQSA9IDUwMDAwLAorCVBNVV9DSEFSR0VfQ1VSUkVOVF81NTBfMDBfTUEgPSA1NTAwMCwKKwlQTVVfQ0hBUkdFX0NVUlJFTlRfNjAwXzAwX01BID0gNjAwMDAsCisJUE1VX0NIQVJHRV9DVVJSRU5UXzY1MF8wMF9NQSA9IDY1MDAwLAorCVBNVV9DSEFSR0VfQ1VSUkVOVF83MDBfMDBfTUEgPSA3MDAwMCwKKwlQTVVfQ0hBUkdFX0NVUlJFTlRfNzUwXzAwX01BID0gNzUwMDAsCisJUE1VX0NIQVJHRV9DVVJSRU5UXzgwMF8wMF9NQSA9IDgwMDAwLAorCVBNVV9DSEFSR0VfQ1VSUkVOVF84NTBfMDBfTUEgPSA4NTAwMCwKKwlQTVVfQ0hBUkdFX0NVUlJFTlRfOTAwXzAwX01BID0gOTAwMDAsCisJUE1VX0NIQVJHRV9DVVJSRU5UXzk1MF8wMF9NQSA9IDk1MDAwLAorCVBNVV9DSEFSR0VfQ1VSUkVOVF8xMDAwXzAwX01BID0gMTAwMDAwLAorCVBNVV9DSEFSR0VfQ1VSUkVOVF8xMjAwXzAwX01BID0gMTIwMDAwLAorCVBNVV9DSEFSR0VfQ1VSUkVOVF8xNTAwXzAwX01BID0gMTUwMDAwLAorCVBNVV9DSEFSR0VfQ1VSUkVOVF8xODAwXzAwX01BID0gMTgwMDAwLAorCVBNVV9DSEFSR0VfQ1VSUkVOVF8yMDAwXzAwX01BID0gMjAwMDAwLAorCVBNVV9DSEFSR0VfQ1VSUkVOVF9NQVgKK31QTVVfQ0hSX0NVUlJFTlRfRU5VTTsKKworCisvKiBFbnVtIG9mIFZQQSBvdXRwdXQgc2VsZWN0IExpc3QgKi8KK3R5cGVkZWYgZW51bQoreworCVBNVV9WUEEwLAorCVBNVV9WUEExLAorCVBNVV9WUEEyLAorCVBNVV9WUEEzLAorCVBNVV9WUEE0LAorCVBNVV9WUEE1LAorCVBNVV9WUEE2LAorCVBNVV9WUEE3Cit9UE1VX1ZQQV9FTlVNOworCisvKiBFbnVtIG9mIG9uIHNlbGVjdCBMaXN0ICovCit0eXBlZGVmIGVudW0KK3sKKwlFTkFCTEVfV0lUSF9TUkNMS0VOID0gMCwKKwlFTkFCTEVfTERPX0JVQ0tfRU5fUkVHSVNURVIgPSAxCit9UE1VX09OX1NFTF9FTlVNOworCisvKiBFbnVtIG9mIG9uIHNlbGVjdChQTUlDKSBMaXN0ICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBTV19DT05UUk9MID0gMCwKKyAgICBTUkNMS0VOX0NPTlRST0wgPSAxCit9UE1JQ19PTl9TRUxfRU5VTTsKKworLyogRW51bSBvZiBvbiBjb250cm9sKFBNSUMpIExpc3QgKi8KK3R5cGVkZWYgZW51bQoreworICAgIFNXX0NPTlRST0xfQllfUkVHID0gMCwKKyAgICBIV19DT05UUk9MID0gMQorfVBNSUNfT05fQ1RSTF9FTlVNOworCisjaWYgZGVmaW5lZChNVDYzMjApCisvKiBFbnVtIG9mIHNyY2xrZW4gc2VsZWN0IExpc3QgKi8KK3R5cGVkZWYgZW51bQoreworCVNSQ1ZPTFRFTiA9IDAsCisJU1JDTEtFTl9QRVJJLAorCVNSQ0xLRU5fTUQyLAorCVNSQ1ZPTFRFTl9PUl9TUkNMS0VOX1BFUkksCisJU1JDVk9MVEVOX09SX1NSQ0xLRU5fTUQyLAorCVNSQ0xLRU5fUEVSSV9PUl9TUkNMS0VOX01EMiwKKwlTUkNWT0xURU5fT1JfU1JDTEtFTl9QRVJJX09SX1NSQ0xLRU5fTUQyCit9UE1VX1NSQ0xLRU5fU0VMX0VOVU07CisKKyNlbGlmIGRlZmluZWQoTVQ2MzI1KSB8fCBkZWZpbmVkKE1UNjMyOCkKKy8qIEVudW0gb2Ygc3JjbGtlbiBzZWxlY3QgTGlzdCAqLwordHlwZWRlZiBlbnVtCit7CisgICAgCVNSQ0xLRU5fSU4wID0gMCwKKyAgICAJU1JDTEtFTl9JTjEsCisJU1JDTEtFTl9JTjBfT1JfU1JDTEtFTl9JTjEsCisJU1JDTEtFTl9JTjBfQU5EX1NSQ0xLRU5fSU4xCit9UE1VX1NSQ0xLRU5fU0VMX0VOVU07CisKKyNlbGlmIGRlZmluZWQoTVQ2MzUxKQordHlwZWRlZiBlbnVtCit7CisJU1JDTEtFTl9JTjAgPSAwLAorCVNSQ0xLRU5fSU4xLAorCVNSQ0xLRU5fSU4wX09SX1NSQ0xLRU5fSU4xLAorCVNSQ0xLRU5fSU4wX0FORF9TUkNMS0VOX0lOMSwKKwlTUkNMS0VOX0lOMiwKKwlTUkNMS0VOX0lOMF9PUl9TUkNMS0VOX0lOMiwKKwlTUkNMS0VOX0lOMV9PUl9TUkNMS0VOX0lOMiwKKwlTUkNMS0VOX0lOMF9PUl9TUkNMS0VOX0lOMV9PUl9TUkNMS0VOX0lOMgorfVBNVV9TUkNMS0VOX1NFTF9FTlVNOworI2Vsc2UKKy8qIEVudW0gb2Ygc3JjbGtlbiBzZWxlY3QgTGlzdCAqLwordHlwZWRlZiBlbnVtCit7CisJU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yID0gMCwKKwlTUkNMS0VOX0lOMSwKKwlTUkNMS0VOX0lOMiwKKwlTUkNMS0VOX0lOMV9PUl9TUkNMS0VOX0lOMgorfVBNVV9TUkNMS0VOX1NFTF9FTlVNOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1UNjMyOCkKKy8qIEVudW0gb2Ygc3JjbGtlbiBzZWxlY3QgTGlzdCAqLwordHlwZWRlZiBlbnVtCit7CisgICAgU1JDTEtFTl9JTjBfU0VMID0gMCwKKyAgICBTUkNMS0VOX0lOMV9TRUwsCisgICAgU1JDTEtFTl9JTjBfT1JfU1JDTEtFTl9JTjFfU0VMLAorICAgIFNSQ0xLRU5fSU4wX0FORF9TUkNMS0VOX0lOMV9TRUwKK31QTUlDX1NJR05BTF9TRUxfRU5VTTsKKyNlbGlmIGRlZmluZWQoTVQ2MzUxKQorLyogRW51bSBvZiBzcmNsa2VuIHNlbGVjdCBMaXN0ICovCit0eXBlZGVmIGVudW0KK3sKKwlTUkNMS0VOX0lOMF9TRUwgPSAwLAorCVNSQ0xLRU5fSU4xX1NFTCwKKwlTUkNMS0VOX0lOMF9PUl9TUkNMS0VOX0lOMV9TRUwsCisJU1JDTEtFTl9JTjBfQU5EX1NSQ0xLRU5fSU4xX1NFTCwKKwlTUkNMS0VOX0lOMl9TRUwsCisJU1JDTEtFTl9JTjBfT1JfU1JDTEtFTl9JTjJfU0VMLAorCVNSQ0xLRU5fSU4xX09SX1NSQ0xLRU5fSU4yX1NFTCwKKwlTUkNMS0VOX0lOMF9PUl9TUkNMS0VOX0lOMV9PUl9TUkNMS0VOX0lOMl9TRUwKK31QTUlDX1NJR05BTF9TRUxfRU5VTTsKKyNlbHNlCisvKiBFbnVtIG9mIHNyY2xrZW4gc2VsZWN0IExpc3QgKi8KK3R5cGVkZWYgZW51bQoreworICAgIFNSQ0xLRU5fSU4xX1NFTCA9IDAsCisgICAgU1JDTEtFTl9JTjJfU0VMLAorICAgIFNSQ0xLRU5fSU4xX09SX1NSQ0xLRU5fSU4yX1NFTCwKKyAgICBTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMCit9UE1JQ19TSUdOQUxfU0VMX0VOVU07CisjZW5kaWYKKworLyogRW51bSBvZiByZW1vdGUgc2Vuc2UgTGlzdCAqLwordHlwZWRlZiBlbnVtCit7CisJREVGQVVMVF9MT0NBTF9TRU5TRT0gMCwKKwlSRU1PVEVfU0VOU0UgPSAxCit9UE1VX1JTX0VOVU07CisKKy8qIEVudW0gb2YgY29udHJvbCBtb2RlIExpc3QgKi8KK3R5cGVkZWYgZW51bQoreworCUtQTEVEX1BXTV9NT0RFID0gMCwKKwlLUExFRF9SRUdJU1RFUl9DVFJMX01PREUgPSAxCit9UE1VX0NUUkxfS1BMRURfTU9ERV9FTlVNOworCisvKiBFbnVtIG9mIGNvbnRyb2wgbW9kZSBMaXN0ICovCit0eXBlZGVmIGVudW0KK3sKKwlMRE9fRU5fU0VMX0JZX0NPTlRST0xMRVIgPSAwLCAvLyBUaGUgTERPIGlzIGNvbm5lY3RlZCB0byBzcGVjaWZpYyBjb250cm9sbGVyIGFuZCBjYW4gYmUgY29udHJvbGxlZCBkaXJlY3RseSBieSB0aGUgY29udHJvbGxlcgorCUxET19FTl9TRUxfQllfTERPX0NPTiwKKwlMRE9fRU5fU0VMX01BWCA9IDB4RkYKK31QTVVfQ1RSTF9MRE9fQ1RSTF9NT0RFX0VOVU07CisKKy8qIEVudW0gb2YgY29udHJvbCBMRE8vQnVjayBtb2RlIExpc3QgKi8KK3R5cGVkZWYgZW51bQoreworCUJVQ0tfTU9ERSA9IDAsCisJTERPX01PREUKK31QTVVfQ1RSTF9CVUNLX0xET19DVFJMX01PREVfRU5VTTsKKworLyogRW51bSBvZiBjb250cm9sIExETy9CdWNrIE1PREVTRVQgbGlzdCAqLwordHlwZWRlZiBlbnVtCit7CisJQVVUT19NT0RFID0gMCwKKwlGT1JDRV9QV01fTU9ERQorfVBNVV9DVFJMX0JVQ0tfTERPX0NUUkxfTU9ERVNFVF9FTlVNOworCit0eXBlZGVmIGVudW0KK3sKKwlDT1RfQVVUT19NT0RFID0gMCwKKwlGT1JDRV9DT1RfTU9ERQorfVBNVV9DVFJMX0JVQ0tfTERPX0NUUkxfQ09UX0VOVU07CisKKy8qIEVudW0gb2YgU1RCIFNJTyBtb2RlIExpc3QgKi8KK3R5cGVkZWYgZW51bQoreworCUhXX0VOQUJMRSA9IDAsCisJU1dfRU5BQkxFCit9UE1VX0NUUkxfU1RCX1NJT19DVFJMX01PREVfRU5VTTsKKworLyogRW51bSBvZiBrcGxlZCBzZWwgTGlzdCAqLwordHlwZWRlZiBlbnVtCit7CisJS1BMRURfU0VMXzFfU1dJVENIID0gMCwKKwlLUExFRF9TRUxfMl9TV0lUQ0ggPSAxLAorCUtQTEVEX1NFTF8zX1NXSVRDSCA9IDIsCisJS1BMRURfU0VMXzRfU1dJVENIID0gMywKKwlLUExFRF9TRUxfNV9TV0lUQ0ggPSA0LAorCUtQTEVEX1NFTF82X1NXSVRDSCA9IDUsCisJS1BMRURfU0VMXzdfU1dJVENIID0gNiwKKwlLUExFRF9TRUxfOF9TV0lUQ0ggPSA3Cit9UE1VX0NUUkxfS1BMRURfU0VMX0VOVU07CisKKy8qIEVudW0gb2YgY29udHJvbCBtb2RlIExpc3QgKi8KK3R5cGVkZWYgZW51bQoreworCUZMQVNITEVEX1BXTV9NT0RFID0gMCwKKwlGTEFTSExFRF9SRUdJU1RFUl9DVFJMX01PREUgPSAxCit9UE1VX0NUUkxfRkxBU0hMRURfTU9ERV9FTlVNOworCisvKiBFbnVtIG9mIGtwbGVkIHNlbCBMaXN0ICovCit0eXBlZGVmIGVudW0KK3sKKwlGTEFTSExFRF9TRUxfMV9TV0lUQ0ggPSAwLAorCUZMQVNITEVEX1NFTF8yX1NXSVRDSCA9IDEsCisJRkxBU0hMRURfU0VMXzNfU1dJVENIID0gMiwKKwlGTEFTSExFRF9TRUxfNF9TV0lUQ0ggPSAzLAorCUZMQVNITEVEX1NFTF81X1NXSVRDSCA9IDQsCisJRkxBU0hMRURfU0VMXzZfU1dJVENIID0gNSwKKwlGTEFTSExFRF9TRUxfN19TV0lUQ0ggPSA2LAorCUZMQVNITEVEX1NFTF84X1NXSVRDSCA9IDcKK31QTVVfQ1RSTF9GTEFTSExFRF9TRUxfRU5VTTsKKworLyogRW51bSBvZiB3ZHQgaW50ZXJ2YWwgTGlzdCAqLwordHlwZWRlZiBlbnVtCit7CisJUE1VX0NIUl9XRFRfVERfNFNFQyA9IDQwLAorCVBNVV9DSFJfV0RUX1REXzhTRUMgPSA4MCwKKwlQTVVfQ0hSX1dEVF9URF8xNlNFQyA9IDE2MCwKKwlQTVVfQ0hSX1dEVF9URF8zMlNFQyA9IDMyMCwKKwlQTVVfQ0hSX1dEVF9URF8xMjhTRUMgPSAxMjgwLAorCVBNVV9DSFJfV0RUX1REXzI1NlNFQyA9IDI1NjAsCisJUE1VX0NIUl9XRFRfVERfNTEyU0VDID0gNTEyMCwKKwlQTVVfQ0hSX1dEVF9URF8xMDI0U0VDID0gMTAyNDAsCisJUE1VX0NIUl9XRFRfVERfMzAwMFNFQyA9IDMwMDAwCit9UE1VX0NIUl9XRFRfVERfRU5VTTsKKworLyogRW51bSBvZiBjb250cm9sIG1vZGUgTGlzdCAqLwordHlwZWRlZiBlbnVtCit7CisJSVNJTktfUFdNX01PREUgPSAwLAorCUlTSU5LX1JFR0lTVEVSX0NUUkxfTU9ERSA9IDEKK31QTVVfQ1RSTF9JU0lOS19NT0RFX0VOVU07CisKKy8qIEVudW0gb2YgSVNJTksgY3VycmVudCBMaXN0ICovCit0eXBlZGVmIGVudW0KK3sKKwlJU0lOS19TVEVQXzA0X01BID0gNCwKKwlJU0lOS19TVEVQXzA1X01BID0gNSwKKwlJU0lOS19TVEVQXzA4X01BID0gOCwKKwlJU0lOS19TVEVQXzEwX01BID0gMTAsCisJSVNJTktfU1RFUF8xMl9NQSA9IDEyLAorCUlTSU5LX1NURVBfMTVfTUEgPSAxNSwKKwlJU0lOS19TVEVQXzE2X01BID0gMTYsCisJSVNJTktfU1RFUF8yMF9NQSA9IDIwLAorCUlTSU5LX1NURVBfMjRfTUEgPSAyNAorfVBNVV9DVFJMX0lTSU5LX1NURVBfRU5VTTsKKworLyogRW51bSBvZiBzcGsgbW9kZSBMaXN0ICovCit0eXBlZGVmIGVudW17CisJU1BLX0NMQVNTX0RfTU9ERSA9IDAsCisJU1BLX0NMQVNTX0FCX01PREUKK31QTVVfQ1RSTF9TUEtfTU9ERV9FTlVNOworCisvKiBFbnVtIG9mIHNwayBzbGV3IExpc3QgKi8KK3R5cGVkZWYgZW51bXsKKwlTUEtfU0xFV19SQVRFXzJfT1ZFUl80ID0gMCwKKwlTUEtfU0xFV19SQVRFXzFfT1ZFUl80LAorCVNQS19TTEVXX1JBVEVfNF9PVkVSXzQsCisJU1BLX1NMRVdfUkFURV8zX09WRVJfNAorfVBNVV9DVFJMX1NQS19TTEVXX1JBVEVfRU5VTTsKKworLyogRW51bSBvZiBzcGsgY2xhc3MgRCBvZmZzZXQgY2FsaWJyYXRpb24gcGF0aExpc3QgKi8KK3R5cGVkZWYgZW51bXsKKwlTUEtfTiA9IDAsCisJU1BLX1AsCit9UE1VX0NUUkxfU1BLX0NBTElfUEFUSF9FTlVNOworCisvKiBFbnVtIG9mIGNvbnRyb2wgc3RlcHMgTGlzdCAqLwordHlwZWRlZiBlbnVteworCVBNVV9DVFJMX1NURVAxLAorCVBNVV9DVFJMX1NURVAyLAorCVBNVV9DVFJMX1NURVAzLAorCVBNVV9DVFJMX1NURVA0Cit9UE1VX0NUUkxfU1RFUF9FTlVNOworCisvKiBFbnVtIG9mIFBNSUMgTGlzdCAqLwordHlwZWRlZiBlbnVtCit7CisJUE1JQ19NVF82MzIwID0gMHg2MzIwLAorCVBNSUNfTVRfNjMyMyA9IDB4NjMyMywKKwlQTUlDX01UXzYzMjUgPSAweDYzMjUsCisJUE1JQ19NVF82MzI4ID0gMHg2MzI4LAorICAgICAgICBQTUlDX01UXzYzMjkgPSAweDYzMjksCisgICAgICAgIFBNSUNfTVRfNjMzMSA9IDB4NjMzMSwKKwlQTUlDX01UXzYzMzIgPSAweDYzMzIsCisJUE1JQ19NVF82MzM5ID0gMHg2MzM5LAorCVBNSUNfQ0hJUF9NQVgKK31QTUlDX0NISVBfTElTVF9FTlVNOworCit0eXBlZGVmIGVudW0KK3sKKwlQTUlDX0VDT19FMSA9IDAsCisJUE1JQ19FQ09fRTIsCisJUE1JQ19FQ09fRTMsCisJUE1JQ19FQ09fRTQsCisJUE1JQ19FQ09fRTUsCisJUE1JQ19FQ09fRTYsCisJUE1JQ19FQ09fRTcsCisJUE1JQ19FQ09fRTgsCisJUE1JQ19FQ09fRTksCisJUE1JQ19FQ09fRTEwLAorfVBNVV9DVFJMX1BNSUNfRUNPX1ZFUlNJT05fRU5VTTsKKwordHlwZWRlZiBlbnVtCit7CisJU1dfT1BfRU5fU0hJRlQgPSAwLAorCUhXMF9PUF9FTl9TSElGVCwKKwlIVzFfT1BfRU5fU0hJRlQsCisJSFcyX09QX0VOX1NISUZULAorfVBNVV9MRE9fQlVDS19PUF9FTl9TSElGVF9FTlVNOworCit0eXBlZGVmIGVudW0KK3sKKwlIVzBfT1BfQ0ZHX1NISUZUID0gMSwKKwlIVzFfT1BfQ0ZHX1NISUZUID0gMiwKKwlIVzJfT1BfQ0ZHX1NISUZUID0gMywKKwlHT19PTl9PUF9TSElGVCA9IDgsCisJR09fTFBfT1BfU0hJRlQgPSA5LAorCit9UE1VX0xET19CVUNLX09QX0NGR19TSElGVF9FTlVNOworCit0eXBlZGVmIGVudW0KK3sKKwlPTl9PRkZfTU9ERSA9IDAsCisJTFBfTk9MUF9NT0RFLAorfVBNVV9MRE9fQlVDS19IV19PUF9DRkdfTU9ERV9FTlVNOworCit0eXBlZGVmIGVudW0KK3sKKwlNVUxUSV9VU0VSX01PREUgPSAwLAorCUxPV19QT1dFUl9NT0RFLAorfVBNVV9MRE9fQlVDS19PUF9NT0RFX0VOVU07CisKK3R5cGVkZWYgZW51bQoreworCVByZWZlcl9PTiA9IDAsCisJUHJlZmVyX09GRiwKK31QTVVfTERPX0JVQ0tfR09fT05fT1BfTU9ERV9FTlVNOworCit0eXBlZGVmIGVudW0KK3sKKwlQcmVmZXJfTFAgPSAwLAorCVByZWZlcl9OT19MUCwKK31QTVVfTERPX0JVQ0tfR09fTFBfT1BfTU9ERV9FTlVNOworCit0eXBlZGVmIGVudW0KK3sKKwlQTUlDX1NSQ0xLRU5fSU4wID0gMCwKKwlQTUlDX1NSQ0xLRU5fSU4xID0gMSwKKwlQTUlDX1NSQ0xLRU5fSU4yID0gMiwKKwlQTUlDX1NSQ0xLRU5fSU4zID0gMywKK31QTUlDX1RPUF9TUkNMS0VOX0lOX0xJU1RfRU5VTTsKKwordHlwZWRlZiBlbnVtCit7CisJUE1JQ19TTEVFUF9NT0RFID0gMCwKKwlQTUlDX05PUk1BTF9NT0RFLAorfVBNSUNfU1JDTEtFTl9JTl9FTl9FTlVNOworCit0eXBlZGVmIGVudW0KK3sKKwlTV19NT0RFID0gMCwKKwlIV19NT0RFLAorfVBNSUNfU1JDTEtFTl9JTl9NT0RFX0VOVU07CisKKworLyogRm9yIExET19CVUNLX1NFVF9FTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJRENMX0JPT0wJZW5hYmxlOworfVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTjsKKworLyogRm9yIExET19CVUNLX0dFVF9FTl9TVEFUVVMgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19HRVRfRU5fU1RBVFVTOworCisvKiBGb3IgTERPX0JVQ0tfR0VUX1FJX01PREUgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworCURDTF9CT09MCW1vZGU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfR0VUX1FJX01PREU7CisKKy8qIEZvciBMRE9fQlVDS19TRVRfRU5fRk9SQ0UgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fRk9SQ0U7CisKKy8qIEZvciBMRE9fQlVDS19TRVRfVEhFUl9TSEROX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlEQ0xfQk9PTAllbmFibGU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX1RIRVJfU0hETl9FTjsKKworLyogRm9yIExET19CVUNLX1NFVF9WT0xUQUdFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlQTVVfVk9MVEFHRV9FTlVNCXZvbHRhZ2U7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPTFRBR0U7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworCURDTF9VSU5UMTYJCQkJCWNvZGU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPTFRBR0U7CisKKy8qIEZvciBMRE9fQlVDS19HRVRfVk9TRUxfQ1RSTCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisgICAgUE1JQ19PTl9DVFJMX0VOVU0gbW9kZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9TRUxfQ1RSTDsKKworLyogRm9yIExET19CVUNLX0dFVF9WT1NFTCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJRENMX1VJTlQxNgkJCQkJY29kZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9TRUw7CisKKy8qIEZvciBMRE9fQlVDS19HRVRfVk9TRUxfT04gY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworCURDTF9VSU5UMTYJCQkJCWNvZGU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPU0VMX09OOworCisvKiBGb3IgTERPX0JVQ0tfR0VUX1ZPU0VMX1NMRUVQIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlEQ0xfVUlOVDE2CQkJCQljb2RlOworfVBNVV9DVFJMX0xET19CVUNLX0dFVF9WT1NFTF9TTEVFUDsKKworLyogRm9yIExET19CVUNLX1NFVF9WT1NFTF9DVFJMIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKyAgICBQTUlDX09OX0NUUkxfRU5VTSBtb2RlOworfVBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1NFTF9DVFJMOworCisvKiBGb3IgTERPX0JVQ0tfU0VUX1ZPU0VMIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlEQ0xfVUlOVDE2CQkJCQljb2RlOworfVBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1NFTDsKKworLyogRm9yIExET19CVUNLX1NFVF9WT1NFTF9PTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJRENMX1VJTlQxNgkJCQkJY29kZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9TRUxfT047CisKKy8qIEZvciBMRE9fQlVDS19TRVRfVk9TRUxfU0xFRVAgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworCURDTF9VSU5UMTYJCQkJCWNvZGU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPU0VMX1NMRUVQOworCisvKiBGb3IgTERPX1ZUQ1hPMjRfU1dJVENIX1NFVF9FTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJRENMX0JPT0wJZW5hYmxlOworfVBNVV9DVFJMX0xET19TRVRfVlRDWE8yNF9TV0lUQ0hfRU47CisKKy8qIEZvciBCVUNLX1NFVF9GUFdNIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlEQ0xfQk9PTAllbmFibGU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX0ZQV007CisKK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19HRVRfRlBXTTsKKworLyogRm9yIExET19CVUNLX1NFVF9TTEVFUF9WT0xUQUdFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlQTVVfVk9MVEFHRV9FTlVNCXNsZWVwVm9sdGFnZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19TRVRfU0xFRVBfVk9MVEFHRTsKKworLyogRm9yIExET19CVUNLX1NFVF9WT0xUQUdFX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlQTVVfVk9MVEFHRV9FTlVNCXZvbHRhZ2U7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPTFRBR0VfRU47CisKKy8qIEZvciBMRE9fQlVDS19TRVRfUlMgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworCVBNVV9SU19FTlVNCXJzOworfVBNVV9DVFJMX0xET19CVUNLX1NFVF9SUzsKKworLyogRm9yIExET19CVUNLX1NFVF9CVVJTVF9USFJFU0hPTEQgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworCURDTF9VSU5UMTYJCQkJCXRocmVzaG9sZElkeDsKK31QTVVfQ1RSTF9MRE9fQlVDS19TRVRfQlVSU1RfVEhSRVNIT0xEOworCisvKiBGb3IgTERPX0JVQ0tfU0VUX0NVUlJFTlRfTElNSVQgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworCURDTF9VSU5UMTYJCQkJCWN1cnJlbnRMaW1pdElkeDsKK31QTVVfQ1RSTF9MRE9fQlVDS19TRVRfQ1VSUkVOVF9MSU1JVDsKKworLyogRm9yIExET19CVUNLX1NFVF9CSUFTX0NVUlJFTlRfQ0FMSUJSQVRJT05fQ09ERSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJRENMX1VJTlQxNgkJCQkJYmlhc0N1cnJlbnRDYWxpYnJhdGlvbkNvZGU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX0JJQVNfQ1VSUkVOVF9DQUxJQlJBVElPTl9DT0RFOworCisvKiBGb3IgTERPX0JVQ0tfU0VUX1ZPTFRBR0VfQ0FMSUJSQVRJT05fQ09ERSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJRENMX1VJTlQxNgkJCQkJdm9sdGFnZUNhbGlicmF0aW9uQ29kZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRV9DQUxJQlJBVElPTl9DT0RFOworCisvKiBGb3IgTERPX0JVQ0tfU0VUX1NUQl9URCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJRENMX1VJTlQxNgkJZGVsYXlUaW1lSWR4OworfVBNVV9DVFJMX0xET19CVUNLX1NFVF9TVEJfVEQ7CisKKy8qIEZvciBMRE9fQlVDS19TRVRfT0NfVEQgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworCURDTF9VSU5UMTYJCWRlZ2xpdGNoVGltZUlkeDsKK31QTVVfQ1RSTF9MRE9fQlVDS19TRVRfT0NfVEQ7CisKKy8qIEZvciBMRE9fQlVDS19TRVRfT0NGQl9FTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJRENMX0JPT0wJZW5hYmxlOworfVBNVV9DVFJMX0xET19CVUNLX1NFVF9PQ0ZCX0VOOworCisvKiBGb3IgTERPX0JVQ0tfU0VUX09DX0FVVE9fT0ZGIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlEQ0xfQk9PTAllbmFibGU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX09DX0FVVE9fT0ZGOworCisvKiBGb3IgTERPX0JVQ0tfU0VUX09OX1NFTCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJUE1VX09OX1NFTF9FTlVNCW9uU2VsOworfVBNVV9DVFJMX0xET19CVUNLX1NFVF9PTl9TRUw7CisKKy8qIEZvciBMRE9fQlVDS19TRVRfU1JDTEtFTl9TRUwgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworCVBNVV9TUkNMS0VOX1NFTF9FTlVNCVNyY2xrZW5TZWw7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX1NSQ0xLRU5fU0VMOworCisvKiBGb3IgTERPX0JVQ0tfU0VUX1NSQ0xLX0VOX1NFTCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJUE1JQ19TSUdOQUxfU0VMX0VOVU0Jc2VsOworfVBNVV9DVFJMX0xET19CVUNLX1NFVF9TUkNMS19FTl9TRUw7CisKKy8qIEZvciBMRE9fQlVDS19TRVRfU1RCX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlEQ0xfQk9PTAllbmFibGU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX1NUQl9FTjsKKworLyogRm9yIExET19CVUNLX1NFVF9ORElTX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlEQ0xfQk9PTAllbmFibGU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX05ESVNfRU47CisKKy8qIEZvciBMRE9fQlVDS19TRVRfVlNJTV9HUExET19FTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJRENMX0JPT0wJZW5hYmxlOworfVBNVV9DVFJMX0xET19CVUNLX1NFVF9WU0lNX0dQTERPX0VOOworCisvKiBGb3IgX0xET19CVUNLX1NFVF9WU0lNMl9HUExET19FTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJRENMX0JPT0wJZW5hYmxlOworfVBNVV9DVFJMX0xET19CVUNLX1NFVF9WU0lNMl9HUExET19FTjsKKworLyogRm9yIExET19CVUNLX1NFVF9TSU0yX0dQSU9fRU4gY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19TRVRfU0lNMl9HUElPX0VOOworCisvKiBGb3IgTERPX0JVQ0tfU0VUX0NDSV9TUkNMS0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlEQ0xfQk9PTAllbmFibGU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX0NDSV9TUkNMS0VOOworCisvKiBGb3IgTERPX0JVQ0tfR0VUX09DX1NUQVRVUyBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJRENMX0JPT0wJc3RhdHVzOworfVBNVV9DVFJMX0xET19CVUNLX0dFVF9PQ19TVEFUVVM7CisKKy8qIEZvciBMRE9fQlVDS19HRVRfUUlfT0NfU1RBVFVTIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlEQ0xfQk9PTAlzdGF0dXM7Cit9UE1VX0NUUkxfTERPX0JVQ0tfR0VUX1FJX09DX1NUQVRVUzsKKworLyogRm9yIExET19CVUNLX1NFVF9PQ19JTlRfRU4uICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKyAgICBEQ0xfQk9PTCBvY19pbnRfZW47Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX09DX0lOVF9FTjsKKworLyogRm9yIExET19CVUNLX0NMRUFSX09DX0ZMQUcuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKK31QTVVfQ1RSTF9MRE9fQlVDS19DTEVBUl9PQ19GTEFHOworCisvKiBGb3IgTERPX0JVQ0tfR0VUX09DX0ZMQUcuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKyAgICBEQ0xfQk9PTCBvY19mbGFnOworfVBNVV9DVFJMX0xET19CVUNLX0dFVF9PQ19GTEFHOworCisvKiBGb3IgTERPX0JVQ0tfR0VUX1ZPTFRBR0VfTElTVC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUE1VX0xET19CVUNLX0xJU1RfRU5VTSAgICAgIG1vZDsKKyAgICBjb25zdCBEQ0xfVUlOVDMyICAgICAgICAgICAgKnBWYWxzOworICAgIERDTF9VSU5UOCAgICAgICAgICAgICAgICAgICBzaXplOworfVBNVV9DVFJMX0xET19CVUNLX0dFVF9WT0xUQUdFX0xJU1Q7CisKKy8qIEZvciBMRE9fQlVDS19TRVRfTFBfTU9ERV9TRVQgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19TRVRfTFBfTU9ERV9TRVQ7CisKKy8qIEZvciBMRE9fQlVDS19TRVRfTFBfU0VMIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlQTUlDX09OX1NFTF9FTlVNCW9uU2VsOworfVBNVV9DVFJMX0xET19CVUNLX1NFVF9MUF9TRUw7CisKKy8qIEZvciBMRE9fQlVDS19HRVRfTFBfTU9ERS4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUE1VX0xET19CVUNLX0xJU1RfRU5VTSAgICAgIG1vZDsKKyAgICBEQ0xfQk9PTAkgICAgICAgICAgICAgICAgZW5hYmxlOworfVBNVV9DVFJMX0xET19CVUNLX0dFVF9MUF9NT0RFOworCisvKiBGb3IgTERPX0JVQ0tfU0VUX09OX0NUUkwgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworICAgIFBNSUNfT05fQ1RSTF9FTlVNIG1vZGU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX09OX0NUUkw7CisKKy8qIEZvciBMRE9fQlVDS19TRVRfTU9ERVNFVCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBQTVVfTERPX0JVQ0tfTElTVF9FTlVNICAgICAgbW9kOworICAgIFBNVV9DVFJMX0JVQ0tfTERPX0NUUkxfTU9ERVNFVF9FTlVNICAgICBtb2RlOworfVBNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNVV9MRE9fQlVDS19MSVNUX0VOVU0gICAgICBtb2Q7CisgICAgUE1VX0NUUkxfQlVDS19MRE9fQ1RSTF9DT1RfRU5VTSAgICAgbW9kZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19TRVRfQ09UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNVV9MRE9fQlVDS19MSVNUX0VOVU0gICAgICBtb2Q7CisgICAgUE1VX0NUUkxfQlVDS19MRE9fQ1RSTF9DT1RfRU5VTSAgICAgbW9kZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19HRVRfQ09UOworCisvKiBGb3IgTERPX0JVQ0tfU0VUX0VOX0NUUkwgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworICAgIFBNSUNfT05fQ1RSTF9FTlVNIG1vZGU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX0NUUkw7CisKKy8qIEZvciBMRE9fQlVDS19TRVRfRU5fU0VMIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKyAgICBQTUlDX1NJR05BTF9TRUxfRU5VTSBzZWw7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX1NFTDsKKworLyogRm9yIExET19CVUNLX1NFVF9TUkNMS19NT0RFX1NFTCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisgICAgUE1JQ19TSUdOQUxfU0VMX0VOVU0gc2VsOworfVBNVV9DVFJMX0xET19CVUNLX1NFVF9TUkNMS19NT0RFX1NFTDsKKworLyogRm9yIExET19CVUNLX1NFVF9PUF9FTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJRENMX0JPT0wJc3dfb3BfZW47CisJRENMX0JPT0wJaHcwX29wX2VuOworCURDTF9CT09MCWh3MV9vcF9lbjsKKwlEQ0xfQk9PTAlodzJfb3BfZW47Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX09QX0VOOworCisvKiBGb3IgTERPX0JVQ0tfQ0xSX09QX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlEQ0xfQk9PTAlzd19vcF9lbjsKKwlEQ0xfQk9PTAlodzBfb3BfZW47CisJRENMX0JPT0wJaHcxX29wX2VuOworCURDTF9CT09MCWh3Ml9vcF9lbjsKK31QTVVfQ1RSTF9MRE9fQlVDS19DTFJfT1BfRU47CisKKy8qIEZvciBMRE9fQlVDS19TRVRfSFdfT1BfQ0ZHIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCQkJbW9kOworCVBNVV9MRE9fQlVDS19IV19PUF9DRkdfTU9ERV9FTlVNCWh3MF9vcF9jZmc7CisJUE1VX0xET19CVUNLX0hXX09QX0NGR19NT0RFX0VOVU0JaHcxX29wX2NmZzsKKwlQTVVfTERPX0JVQ0tfSFdfT1BfQ0ZHX01PREVfRU5VTQlodzJfb3BfY2ZnOworfVBNVV9DVFJMX0xET19CVUNLX1NFVF9IV19PUF9DRkc7CisKKy8qIEZvciBMRE9fQlVDS19DTFJfSFdfT1BfQ0ZHIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCQltb2Q7CisJUE1VX0xET19CVUNLX0hXX09QX0NGR19NT0RFX0VOVU0JaHcwX29wX2NmZzsKKwlQTVVfTERPX0JVQ0tfSFdfT1BfQ0ZHX01PREVfRU5VTQlodzFfb3BfY2ZnOworCVBNVV9MRE9fQlVDS19IV19PUF9DRkdfTU9ERV9FTlVNCWh3Ml9vcF9jZmc7Cit9UE1VX0NUUkxfTERPX0JVQ0tfQ0xSX0hXX09QX0NGRzsKKworLyogRm9yIExET19CVUNLX1NFVF9IV19PUF9NT0RFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlQTVVfTERPX0JVQ0tfT1BfTU9ERV9FTlVNCWh3MF9vcF9tb2RlOworCVBNVV9MRE9fQlVDS19PUF9NT0RFX0VOVU0JaHcxX29wX21vZGU7CisJUE1VX0xET19CVUNLX09QX01PREVfRU5VTQlodzJfb3BfbW9kZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19TRVRfQlVDS19IV19PUF9NT0RFOworCisvKiBGb3IgTERPX0JVQ0tfQ0xSX0hXX09QX01PREUgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJbW9kOworCVBNVV9MRE9fQlVDS19PUF9NT0RFX0VOVU0JaHcwX29wX21vZGU7CisJUE1VX0xET19CVUNLX09QX01PREVfRU5VTQlodzFfb3BfbW9kZTsKKwlQTVVfTERPX0JVQ0tfT1BfTU9ERV9FTlVNCWh3Ml9vcF9tb2RlOworfVBNVV9DVFJMX0xET19CVUNLX0NMUl9CVUNLX0hXX09QX01PREU7CisKKy8qIEZvciBMRE9fQlVDS19TRVRfSFdfT1BfTU9ERSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJUE1VX0xET19CVUNLX09QX01PREVfRU5VTQlodzBfb3BfbW9kZTsKKwlQTVVfTERPX0JVQ0tfT1BfTU9ERV9FTlVNCWh3MV9vcF9tb2RlOworCVBNVV9MRE9fQlVDS19PUF9NT0RFX0VOVU0JaHcyX29wX21vZGU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX0hXX09QX01PREU7CisKKy8qIEZvciBMRE9fQlVDS19DTFJfSFdfT1BfTU9ERSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJUE1VX0xET19CVUNLX09QX01PREVfRU5VTQlodzBfb3BfbW9kZTsKKwlQTVVfTERPX0JVQ0tfT1BfTU9ERV9FTlVNCWh3MV9vcF9tb2RlOworCVBNVV9MRE9fQlVDS19PUF9NT0RFX0VOVU0JaHcyX29wX21vZGU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfQ0xSX0hXX09QX01PREU7CisKKy8qIEZvciBMRE9fQlVDS19TRVRfR09fT05fT1AgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0xET19CVUNLX0xJU1RfRU5VTQkJCQkgbW9kOworCVBNVV9MRE9fQlVDS19HT19PTl9PUF9NT0RFX0VOVU0JIG1vZGU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX0dPX09OX09QOworCisvKiBGb3IgTERPX0JVQ0tfU0VUX0dPX0xQX09QIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlQTVVfTERPX0JVQ0tfR09fTFBfT1BfTU9ERV9FTlVNCSBtb2RlOworfVBNVV9DVFJMX0xET19CVUNLX1NFVF9HT19MUF9PUDsKKworLyogRm9yIExET19TRVRfQ0FMIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlQTVVfVk9MVEFHRV9DQUxJQlJBVElPTl9FTlVNIHZvbHRhZ2U7Cit9UE1VX0NUUkxfTERPX1NFVF9DQUw7CisKKworLyogRm9yIFZQQV9TRVRfVk9TRUxfTUFQX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9WUEFfTElTVF9FTlVNIHZwYTsKKwlEQ0xfQk9PTAllbmFibGU7Cit9UE1VX0NUUkxfVlBBX1NFVF9WT1NFTF9NQVBfRU47CisKKy8qIEZvciBWUEFfU0VUX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9WUEFfTElTVF9FTlVNIHZwYTsKKwlEQ0xfQk9PTAllbmFibGU7Cit9UE1VX0NUUkxfVlBBX1NFVF9FTjsKKworLyogRm9yIFZQQV9TRVRfVk9MVEFHRSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfVk9MVEFHRV9FTlVNCXZvbHRhZ2U7CisJUE1VX1ZQQV9FTlVNCXZwYUlkeDsKKwlQTVVfVlBBX0xJU1RfRU5VTSB2cGE7Cit9UE1VX0NUUkxfVlBBX1NFVF9WT0xUQUdFOworCisvKiBGb3IgVlBBX0NUUkxfU0VMIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9CT09MCWJ5UEFTRUw7Cit9UE1VX0NUUkxfVlBBX0NUUkxfU0VMOworCisvKiBGb3IgVlBBX0dFVF9WT0xUQUdFX0xJU1QgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJY29uc3QgRENMX1VJTlQzMiAqcFZvbHRhZ2VMaXN0OworCURDTF9VSU5UMzIgbnVtYmVyOworfVBNVV9DVFJMX1ZQQV9HRVRfVk9MVEFHRV9MSVNUOworCisvKiBGb3IgVlBBX1NFVF9CQVRfTE9XIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9WUEFfU0VUX0JBVF9MT1c7CisKKy8qIEZvciBWUEFfU0VUX0ZQV00gY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX1ZQQV9MSVNUX0VOVU0gdnBhOworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9WUEFfU0VUX0ZQV007CisKKy8qIEZvciBWUEFfU0VUX1ZPTFRBR0VfU0VMRUNUSU9OX1RBQkxFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgICAgICBQTVVfVlBBX0VOVU0gICAgICAgICAgICB0YWJsZV9lbnRyeTsKKwlQTVVfVk9MVEFHRV9FTlVNCXZvbHRhZ2U7Cit9UE1VX0NUUkxfVlBBX1NFVF9WT0xUQUdFX1NFTEVDVElPTl9UQUJMRTsKKworCisvKiBGb3IgVlBBX1NFVF9NQVBfU0VMIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgICAgICBQTVVfVlBBX0VOVU0gdGFibGVfZW50cnk7Cit9UE1VX0NUUkxfVlBBX1NFVF9NQVBfU0VMOworCisvKiBGb3IgVklCUl9TRVRfRElNTUlOR19PTl9EVVRZIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMTYJZHV0eTsKK31QTVVfQ1RSTF9WSUJSX1NFVF9ESU1NSU5HX09OX0RVVFk7CisKKy8qIEZvciBWUkYxOF9TRVRfRlBXTSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfQk9PTAllbmFibGU7Cit9UE1VX0NUUkxfVlJGMThfU0VUX0ZQV007CisKKy8qIEZvciBWUkYxOF9TRVRfTU9ERVNFVCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBQTUlDX1ZSRjE4X0xJU1RfRU5VTSB2cmYxOElkeDsKKwlEQ0xfQk9PTAllbmFibGU7Cit9UE1VX0NUUkxfVlJGMThfU0VUX01PREVTRVQ7CisKKy8qIEZvciBWUkYxOF9TRVRfQlVDS19MRE9fTU9ERSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBQTUlDX1ZSRjE4X0xJU1RfRU5VTSB2cmYxOElkeDsKKwlQTVVfQ1RSTF9CVUNLX0xET19DVFJMX01PREVfRU5VTSAgICBtb2RlOworfVBNVV9DVFJMX1ZSRjE4X1NFVF9CVUNLX0xET19NT0RFOworCisvKiBGb3IgVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9TRVQgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRENMX1VJTlQxNiByZWd2YWw7Cit9UE1VX0NUUkxfVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9TRVQ7CisKKy8qIEZvciBWUkYxX1NFVF9NT0RFU0VUX0NLUEROX0NMUiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBEQ0xfVUlOVDE2IHJlZ3ZhbDsKK31QTVVfQ1RSTF9WUkYxX1NFVF9NT0RFU0VUX0NLUEROX0NMUjsKKworLyogRm9yIFZSRjFfR0VUX01PREVTRVRfQ0tQRE4gY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRENMX1VJTlQxNiByZWd2YWw7Cit9UE1VX0NUUkxfVlJGMV9HRVRfTU9ERVNFVF9DS1BETjsKKworLyogRm9yIFNJTUxTX1NFVF9TUlNUX0NPTkYgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUE1JQ19WU0lNX0xJU1RfRU5VTSB2c2ltSWR4OworICAgIERDTF9VSU5UMzIgcmVndmFsOworfVBNVV9DVFJMX1NJTUxTX1NFVF9TUlNUX0NPTkY7CisKKy8qIEZvciBTSU1MU19TRVRfU0NMS19DT05GIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNSUNfVlNJTV9MSVNUX0VOVU0gdnNpbUlkeDsKKyAgICBEQ0xfVUlOVDMyIHJlZ3ZhbDsKK31QTVVfQ1RSTF9TSU1MU19TRVRfU0NMS19DT05GOworCisvKiBGb3IgU0lNTFNfU0VUX1REU0VMIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIERDTF9VSU5UMzIgcmVndmFsOworfVBNVV9DVFJMX1NJTUxTX1NFVF9URFNFTDsKKworLyogRm9yIFNJTUFQX1NFVF9URFNFTCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBEQ0xfVUlOVDMyIHJlZ3ZhbDsKK31QTVVfQ1RSTF9TSU1BUF9TRVRfVERTRUw7CisKKy8qIEZvciBTSU1MU19TRVRfUkRTRUwgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRENMX1VJTlQzMiByZWd2YWw7Cit9UE1VX0NUUkxfU0lNTFNfU0VUX1JEU0VMOworCisvKiBGb3IgU0lNQVBfU0VUX1JEU0VMIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIERDTF9VSU5UMzIgcmVndmFsOworfVBNVV9DVFJMX1NJTUFQX1NFVF9SRFNFTDsKKworLyogRm9yIE9DVExfU0VUX1NJTV9BUF9TUlNUIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNSUNfVlNJTV9MSVNUX0VOVU0gdnNpbUlkeDsKKyAgICBEQ0xfVUlOVDMyIHJlZ3ZhbDsKK31QTVVfQ1RSTF9PQ1RMX1NFVF9TSU1fQVBfU1JTVDsKKworLyogRm9yIE9DVExfU0VUX1NJTV9BUF9TQ0xLIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNSUNfVlNJTV9MSVNUX0VOVU0gdnNpbUlkeDsKKyAgICBEQ0xfVUlOVDMyIHJlZ3ZhbDsKK31QTVVfQ1RSTF9PQ1RMX1NFVF9TSU1fQVBfU0NMSzsKKworLyogRm9yIE9DVExfU0VUX1NJTUxTX1NSU1QgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUE1JQ19WU0lNX0xJU1RfRU5VTSB2c2ltSWR4OworICAgIERDTF9VSU5UMzIgcmVndmFsOworfVBNVV9DVFJMX09DVExfU0VUX1NJTUxTX1NSU1Q7CisKKy8qIEZvciBPQ1RMX1NFVF9TSU1MU19TQ0xLIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNSUNfVlNJTV9MSVNUX0VOVU0gdnNpbUlkeDsKKyAgICBEQ0xfVUlOVDMyIHJlZ3ZhbDsKK31QTVVfQ1RSTF9PQ1RMX1NFVF9TSU1MU19TQ0xLOworCisvKiBGb3IgU0lNX1NFVF9TVEJfU0lPX01PREUgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUE1JQ19WU0lNX0xJU1RfRU5VTSB2c2ltSWR4OworICAgIFBNVV9DVFJMX1NUQl9TSU9fQ1RSTF9NT0RFX0VOVU0gbW9kZTsKK31QTVVfQ1RSTF9TSU1fU0VUX1NUQl9TSU9fTU9ERTsKKworLyogRm9yIFNJTVJTVF9TRVRfR1BJT19TRVQgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUE1JQ19WU0lNX0xJU1RfRU5VTSB2c2ltSWR4OworfVBNVV9DVFJMX1NJTVJTVF9TRVRfR1BJT19TRVQ7CisKKy8qIEZvciBTSU1SU1RfU0VUX0dQSU9fQ0xSIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNSUNfVlNJTV9MSVNUX0VOVU0gdnNpbUlkeDsKK31QTVVfQ1RSTF9TSU1SU1RfU0VUX0dQSU9fQ0xSOworCisvKiBGb3IgU1BLX1NFVF9FTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfU1BLX0xJU1RfRU5VTSBzcGs7CisJRENMX0JPT0wJZW5hYmxlOworCVBNVV9DVFJMX1NURVBfRU5VTSBzdGVwOworfVBNVV9DVFJMX1NQS19TRVRfRU47CisKKy8qIEZvciBTUEtfU0VUX01PREUgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX1NQS19MSVNUX0VOVU0gc3BrOworCVBNVV9DVFJMX1NQS19NT0RFX0VOVU0JbW9kZTsKK31QTVVfQ1RSTF9TUEtfU0VUX01PREU7CisKKy8qIEZvciBTUEtfR0VUX01PREUgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX1NQS19MSVNUX0VOVU0gc3BrOworCURDTF9VSU5UMTYJbW9kZTsKK31QTVVfQ1RSTF9TUEtfR0VUX01PREU7CisKKy8qIEZvciBTUEtfU0VUX1NMRVdfUkFURSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfU1BLX0xJU1RfRU5VTSBzcGs7CisJUE1VX0NUUkxfU1BLX01PREVfRU5VTQltb2RlOworfVBNVV9DVFJMX1NQS19TRVRfU0xFV19SQVRFOworCisvKiBGb3IgU1BLX1NFVF9PQ19BVVRPX09GRiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfU1BLX0xJU1RfRU5VTSBzcGs7CisJRENMX0JPT0wJZW5hYmxlOworfVBNVV9DVFJMX1NQS19TRVRfT0NfQVVUT19PRkY7CisKKy8qIEZvciBTUEtfU0VUX1ZPTF9WQUxVRSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfU1BLX0xJU1RfRU5VTSBzcGs7CisJRENMX1VJTlQxNgl2b2xWYWx1ZTsKK31QTVVfQ1RSTF9TUEtfU0VUX1ZPTF9WQUxVRTsKKworLyogRm9yIFNQS19HRVRfVk9MX1ZBTFVFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9TUEtfTElTVF9FTlVNIHNwazsKKwlEQ0xfVUlOVDE2CXZvbFZhbHVlOworfVBNVV9DVFJMX1NQS19HRVRfVk9MX1ZBTFVFOworCisvKiBGb3IgU1BLX0dFVF9WT0wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX1NQS19MSVNUX0VOVU0gc3BrOworCVBNVV9TUEtfVk9MX0VOVU0JZGJtOworfVBNVV9DVFJMX1NQS19HRVRfVk9MOworCisvKiBGb3IgU1BLX1NFVF9WT0wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX1NQS19MSVNUX0VOVU0gc3BrOworCVBNVV9TUEtfVk9MX0VOVU0JZGJtOworfVBNVV9DVFJMX1NQS19TRVRfVk9MOworCisvKiBGb3IgU1BLX1NFVF9DQUxJQlJfRU4gY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX1NQS19MSVNUX0VOVU0gc3BrOworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9TUEtfU0VUX0NBTElCUl9FTjsKKworLyogRm9yIFNQS19TRVRfQ0FMSUJSX1NFTCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfU1BLX0xJU1RfRU5VTSBzcGs7CisJUE1VX0NUUkxfU1BLX0NBTElfUEFUSF9FTlVNCXBhdGg7Cit9UE1VX0NUUkxfU1BLX1NFVF9DQUxJQlJfU0VMOworCisvKiBGb3IgQkxfU0VUX0lOSVQgY29tbWFuZC4gKi8KK3R5cGVkZWYgZW51bQoreworCUJMX1ZCT09TVF9WT0xUQUdFX0NPTlRST0xMRVJfTU9ERT0wLAorCUJMX1ZCT09TVF9DVVJSRU5UX0NPTlZFUlRFUl9NT0RFPTEsCisJQkxfSVNJTktfTU9ERT0yLAorCUJMX01PREVfMT0wLAorCUJMX01PREVfMj0xLAorCUJMX01PREVfMz0yLAorCUJMX01PREUwPTAsCisJQkxfTU9ERTE9MSwKKwlCTF9NT0RFMj0yLAorCUJMX01PREUzPTMsCisJQkxfTU9ERV9OVU0KK31QTVVfQ1RSTF9CTF9NT0RFX0VOVU07CisKKy8qIEZvciBCTF9TRVRfSU5JVCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfQ1RSTF9CTF9NT0RFX0VOVU0gYmxNb2RlOworfVBNVV9DVFJMX0JMX1NFVF9JTklUOworCisvKiBGb3IgQkxfU0VUX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9CTF9TRVRfRU47CisKKy8qIEZvciBCTF9HRVRfU1VQUE9SVF9MRVZFTCBjb21tYW5kICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIERDTF9VSU5UMzIgYmxTdXBwb3J0TGV2ZWw7Cit9UE1VX0NUUkxfQkxfR0VUX1NVUFBPUlRfTEVWRUw7CisKKy8qIEZvciBCTF9HRVRfVVNFX1BXTV9NT0RFIGNvbW1hbmQgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRENMX1VJTlQzMiBibFVzZVB3bVF1ZXJ5OworfVBNVV9DVFJMX0JMX0dFVF9VU0VfUFdNX1FVRVJZOworCisvKiBGb3IgRkxBU0hMRURfU0VUX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9GTEFTSExFRF9TRVRfRU47CisKKy8qIEZvciBGTEFTSExFRF9TRVRfTU9ERSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfQ1RSTF9GTEFTSExFRF9NT0RFX0VOVU0gbW9kZTsKK31QTVVfQ1RSTF9GTEFTSExFRF9TRVRfTU9ERTsKKworLyogRm9yIEZMQVNITEVEX1NFVF9TRUwgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0NUUkxfRkxBU0hMRURfU0VMX0VOVU0gc2VsOworfVBNVV9DVFJMX0ZMQVNITEVEX1NFVF9TRUw7CisKKy8qIEZvciBLUExFRF9TRVRfRU4gY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wJZW5hYmxlOworfVBNVV9DVFJMX0tQTEVEX1NFVF9FTjsKKworLyogRm9yIEtQTEVEX1NFVF9NT0RFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9DVFJMX0tQTEVEX01PREVfRU5VTSBtb2RlOworfVBNVV9DVFJMX0tQTEVEX1NFVF9NT0RFOworCisvKiBGb3IgS1BMRURfU0VUX1NFTCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfQ1RSTF9LUExFRF9TRUxfRU5VTSBzZWw7Cit9UE1VX0NUUkxfS1BMRURfU0VUX1NFTDsKKworLyogRm9yIEtQTEVEX1NFVF9GUkVRVUVOQ1lfRElWSVNJT04gY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQxNiBkaXY7Cit9UE1VX0NUUkxfS1BMRURfU0VUX0ZSRVFVRU5DWV9ESVZJU0lPTjsKKworLyogRm9yIEtQTEVEX1NFVF9ESU1NSU5HX09OX0RVVFkgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQxNiBkdXR5OworfVBNVV9DVFJMX0tQTEVEX1NFVF9ESU1NSU5HX09OX0RVVFk7CisKKy8qIEZvciBDSFJfU0VUX0FEQ19NRUFTVVJFX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9DSFJfU0VUX0FEQ19NRUFTVVJFX0VOOworCisvKiBGb3IgQ0hSX1NFVF9DU0RBQ19FTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfQk9PTAllbmFibGU7Cit9UE1VX0NUUkxfQ0hSX1NFVF9DU0RBQ19FTjsKKworLyogRm9yIENIUl9TRVRfQ0hSX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9DSFJfU0VUX0NIUl9FTjsKKworLyogRm9yIENIUl9TRVRfQ0hSX0ZPUkNFX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9DSFJfU0VUX0NIUl9GT1JDRV9FTjsKKworLyogRm9yIENIUl9HRVRfQ0hSX0NVUlJFTlQgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0NIUl9DVVJSRU5UX0VOVU0JY3VycmVudDsKK31QTVVfQ1RSTF9DSFJfR0VUX0NIUl9DVVJSRU5UOworCisvKiBGb3IgQ0hSX0dFVF9DSFJfQ1VSUkVOVF9MSVNUIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCWNvbnN0IERDTF9VSU5UMzIgKnBDdXJyZW50TGlzdDsKKwlEQ0xfVUlOVDMyIG51bWJlcjsKK31QTVVfQ1RSTF9DSFJfR0VUX0NIUl9DVVJSRU5UX0xJU1Q7CisKKy8qIEZvciBDSFJfU0VUX0NIUl9DVVJSRU5UIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9DSFJfQ1VSUkVOVF9FTlVNCWN1cnJlbnQ7Cit9UE1VX0NUUkxfQ0hSX1NFVF9DSFJfQ1VSUkVOVDsKKworLyogRm9yIENIUl9HRVRfQ0hSX0RFVF9TVEFUVVMgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wJZW5hYmxlOworfVBNVV9DVFJMX0NIUl9HRVRfQ0hSX0RFVF9TVEFUVVM7CisKKy8qIEZvciBDSFJfR0VUX0NWX0RFVEVDVElPTl9TVEFUVVMgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wJZW5hYmxlOworfVBNVV9DVFJMX0NIUl9HRVRfQ1ZfREVURUNUSU9OX1NUQVRVUzsKKworLyogRm9yIENIUl9TRVRfQ1ZfREVURUNUSU9OX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9DSFJfU0VUX0NWX0RFVEVDVElPTl9FTjsKKworLyogRm9yIENIUl9TRVRfQ1ZfREVURUNUSU9OX1ZPTFRBR0UgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX1ZPTFRBR0VfRU5VTQl2b2x0YWdlOworfVBNVV9DVFJMX0NIUl9TRVRfQ1ZfREVURUNUSU9OX1ZPTFRBR0U7CisKKy8qIEZvciBDSFJfR0VUX0lTX0JBVFRFUllfT04gY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wJZW5hYmxlOworfVBNVV9DVFJMX0NIUl9HRVRfSVNfQkFUVEVSWV9PTjsKKworLyogRm9yIENIUl9HRVRfSVNfQ0hSX1ZBTElEIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9DSFJfR0VUX0lTX0NIUl9WQUxJRDsKKworLyogRm9yIENIUl9TRVRfV0RUX0lOVF9FTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfQk9PTAllbmFibGU7Cit9UE1VX0NUUkxfQ0hSX1NFVF9XRFRfSU5UX0VOOworCisvKiBGb3IgQ0hSX1NFVF9XRFRfRU4gY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wJZW5hYmxlOworfVBNVV9DVFJMX0NIUl9TRVRfV0RUX0VOOworCisvKiBGb3IgQ0hSX1NFVF9XRFRfVElNRVIgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0NIUl9XRFRfVERfRU5VTQlzZWNzOworfVBNVV9DVFJMX0NIUl9TRVRfV0RUX1RJTUVSOworCisvKiBGb3IgQ0hSX1NFVF9IVl9ERVRFQ1RJT05fVk9MVEFHRSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfVk9MVEFHRV9FTlVNCXZvbHRhZ2U7Cit9UE1VX0NUUkxfQ0hSX1NFVF9IVl9ERVRFQ1RJT05fVk9MVEFHRTsKKworLyogRm9yIENIUl9HRVRfSFZfREVURUNUSU9OX1ZPTFRBR0VfTElTVCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwljb25zdCBEQ0xfVUlOVDMyICpwVm9sdGFnZUxpc3Q7CisJRENMX1VJTlQzMiBudW1iZXI7Cit9UE1VX0NUUkxfQ0hSX0dFVF9IVl9ERVRFQ1RJT05fVk9MVEFHRV9MSVNUOworCisvKiBGb3IgQ0hSX1NFVF9WQkFUX09WX0RFVEVDVElPTl9WT0xUQUdFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9WT0xUQUdFX0VOVU0Jdm9sdGFnZTsKK31QTVVfQ1RSTF9DSFJfU0VUX1ZCQVRfT1ZfREVURUNUSU9OX1ZPTFRBR0U7CisKKy8qIEZvciBDSFJfU0VUX0JBVF9IVF9FTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfQk9PTAllbmFibGU7Cit9UE1VX0NUUkxfQ0hSX1NFVF9CQVRfSFRfRU47CisKKy8qIEZvciBDSFJfU0VUX09UR19CVkFMSURfRU4gY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wJZW5hYmxlOworfVBNVV9DVFJMX0NIUl9TRVRfT1RHX0JWQUxJRF9FTjsKKworLyogRm9yIENIUl9TRVRfQkMxMV9QVUxMVVBfRU4gY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wJZW5hYmxlOworfVBNVV9DVFJMX0NIUl9TRVRfQkMxMV9QVUxMVVBfRU47CisKKy8qIEZvciBDSFJfU0VUX0NWX01PREUgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wJZW5hYmxlOworfVBNVV9DVFJMX0NIUl9TRVRfQ1ZfTU9ERTsKKworLyogRm9yIENIUl9TRVRfQ1NEQUNfTU9ERSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfQk9PTAllbmFibGU7Cit9UE1VX0NUUkxfQ0hSX1NFVF9DU0RBQ19NT0RFOworCisvKiBGb3IgQ0hSX1NFVF9UUkFDS0lOR19FTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfQk9PTAllbmFibGU7Cit9UE1VX0NUUkxfQ0hSX1NFVF9UUkFDS0lOR19FTjsKKworLyogRm9yIENIUl9TRVRfSFdDVl9FTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfQk9PTAllbmFibGU7Cit9UE1VX0NUUkxfQ0hSX1NFVF9IV0NWX0VOOworCisvKiBGb3IgQ0hSX1NFVF9VTENfREVUX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9DSFJfU0VUX1VMQ19ERVRfRU47CisKKy8qIEZvciBDSFJfU0VUX0xPV19JQ0hfREIgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQxNglkZWJvdW5jZVRpbWU7Cit9UE1VX0NUUkxfQ0hSX1NFVF9MT1dfSUNIX0RCOworCisvKiBGb3IgQ0hSX1NFVF9WQkFUX0NWX0NBTElCUkFUSU9OIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9JTlQzMgl2YmF0OworfVBNVV9DVFJMX0NIUl9TRVRfVkJBVF9DVl9DQUxJQlJBVElPTjsKKworLyogRm9yIENIUl9HRVRfQ0NfREVUIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9CT09MIHZiYXRfY2NfZGV0OworfVBNVV9DVFJMX0NIUl9HRVRfQ0NfREVUOworCisvKiBGb3IgQk9PU1RfU0VUX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9CT09TVF9MSVNUX0VOVU0gYm9vc3Q7CisJRENMX0JPT0wJZW5hYmxlOworfVBNVV9DVFJMX0JPT1NUX1NFVF9FTjsKKworLyogRm9yIEJPT1NUX1NFVF9DVVJSRU5UX0xJTUlUIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9CT09TVF9MSVNUX0VOVU0gYm9vc3Q7CisJRENMX0JPT0wJY3VycmVudExpbWl0OworfVBNVV9DVFJMX0JPT1NUX1NFVF9DVVJSRU5UX0xJTUlUOworCisvKiBGb3IgQk9PU1RfU0VUX0NMS19DQUwgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0JPT1NUX0xJU1RfRU5VTSBib29zdDsKKwlEQ0xfQk9PTAljbGtDYWw7Cit9UE1VX0NUUkxfQk9PU1RfU0VUX0NMS19DQUw7CisKKy8qIEZvciBCT09TVF9TRVRfU1lOQ19FTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfQk9PU1RfTElTVF9FTlVNIGJvb3N0OworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9CT09TVF9TRVRfU1lOQ19FTjsKKworLyogRm9yIEJPT1NUX1NFVF9WT0xUQUdFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9CT09TVF9MSVNUX0VOVU0gYm9vc3Q7CisJUE1VX1ZPTFRBR0VfRU5VTQl2b2x0YWdlOworfVBNVV9DVFJMX0JPT1NUX1NFVF9WT0xUQUdFOworCisvKiBGb3IgQk9PU1RfU0VUX0xFVkVMIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9CT09TVF9MSVNUX0VOVU0gYm9vc3Q7CisJRENMX1VJTlQxNglsZXZlbDsKK31QTVVfQ1RSTF9CT09TVF9TRVRfTEVWRUw7CisKKy8qIEZvciBJU0lOS19TRVRfRU4gY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0lTSU5LX0xJU1RfRU5VTQkJaXNpbms7CisJRENMX0JPT0wJZW5hYmxlOworfVBNVV9DVFJMX0lTSU5LX1NFVF9FTjsKKworLyogRm9yIElTSU5LX1NFVF9NT0RFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9JU0lOS19MSVNUX0VOVU0JCWlzaW5rOworCVBNVV9DVFJMX0lTSU5LX01PREVfRU5VTQltb2RlOworfVBNVV9DVFJMX0lTSU5LX1NFVF9NT0RFOworCisvKiBGb3IgSVNJTktfU0VUX1NURVAgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0lTSU5LX0xJU1RfRU5VTQkJaXNpbms7CisJUE1VX0NUUkxfSVNJTktfU1RFUF9FTlVNCXN0ZXA7Cit9UE1VX0NUUkxfSVNJTktfU0VUX1NURVA7CisKKy8qIEZvciBJU0lOS19TRVRfU1RFUCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfSVNJTktfTElTVF9FTlVNCQlpc2luazsKKwlEQ0xfQk9PTCAgICBmb3JjZU9mZjsKK31QTVVfQ1RSTF9JU0lOS19TRVRfRk9SQ0VfT0ZGOworCisvKiBGb3IgSVNJTktfU0VUX0RJTU1JTkdfT05fRFVUWSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfSVNJTktfTElTVF9FTlVNCQlpc2luazsKKwlEQ0xfVUlOVDE2CWR1dHk7Cit9UE1VX0NUUkxfSVNJTktfU0VUX0RJTU1JTkdfT05fRFVUWTsKKworLyogRm9yIElTSU5LX1NFVF9GUkVRVUVOQ1lfRElWSVNJT04gY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUE1VX0lTSU5LX0xJU1RfRU5VTQkJaXNpbms7CisJRENMX1VJTlQxNglkaXY7Cit9UE1VX0NUUkxfSVNJTktfU0VUX0ZSRVFVRU5DWV9ESVZJU0lPTjsKKworLyogRm9yIEFEQ19TRVRfUlFTVCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBEQ0xfQk9PTCAgICBlbmFibGU7CisKK31QTVVfQ1RSTF9BRENfU0VUX1JRU1Q7CisKKy8qIEZvciBBRENfQ0xSX1JRU1QgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRENMX0JPT0wgICAgZW5hYmxlOworCit9UE1VX0NUUkxfQURDX0NMUl9SUVNUOworCisvKiBGb3IgQURDX0dFVF9SRFlfTUQgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRENMX0JPT0wgICAgc3RhdHVzOworfVBNVV9DVFJMX0FEQ19HRVRfUkRZX01EOworCisvKiBGb3IgQURDX0dFVF9PVVRfTUQgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRENMX1VJTlQzMiBkYXRhOworfVBNVV9DVFJMX0FEQ19HRVRfT1VUX01EOworCisvKiBGb3IgVE9QX1NFVF9TUkNMS0VOX0lOX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNSUNfVE9QX1NSQ0xLRU5fSU5fTElTVF9FTlVNCW1vZDsKKyAgICBQTUlDX1NSQ0xLRU5fSU5fRU5fRU5VTSAJCW1vZGU7Cit9UE1VX0NUUkxfVE9QX1NFVF9TUkNMS0VOX0lOX0VOOworCisvKiBGb3IgVE9QX1NFVF9TUkNMS0VOX0lOX01PREUgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUE1JQ19UT1BfU1JDTEtFTl9JTl9MSVNUX0VOVU0JbW9kOworICAgIFBNSUNfU1JDTEtFTl9JTl9NT0RFX0VOVU0gICAJbW9kZTsKK31QTVVfQ1RSTF9UT1BfU0VUX1NSQ0xLRU5fSU5fTU9ERTsKKworLyogRm9yIERDWE9fU0VUX1JFR0lTVEVSX1ZBTFVFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMzIgb2Zmc2V0OworCURDTF9VSU5UMTYgdmFsdWU7Cit9UE1VX0NUUkxfRENYT19TRVRfUkVHSVNURVJfVkFMVUU7CisKKy8qIEZvciBEQ1hPX0dFVF9SRUdJU1RFUl9WQUxVRSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfVUlOVDMyIG9mZnNldDsKKwlEQ0xfVUlOVDE2IHZhbHVlOworfVBNVV9DVFJMX0RDWE9fR0VUX1JFR0lTVEVSX1ZBTFVFOworCisvKiBGb3IgTUlTQ19CTEVEX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9NSVNDX1NFVF9CTEVEX0VOOworCisvKiBGb3IgTUlTQ19STEVEX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9NSVNDX1NFVF9STEVEX0VOOworCisvKiBGb3IgTUlTQ19HTEVEX0VOIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9CT09MCWVuYWJsZTsKK31QTVVfQ1RSTF9NSVNDX1NFVF9HTEVEX0VOOworCisvKiBGb3IgTUlTQ19HRVRfQ0lEIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMzIgY2lkX3ZhbHVlOworfVBNVV9DVFJMX01JU0NfR0VUX0NJRDsKKworLyogRm9yIE1JU0NfR0VUX0VDT19WRVJTSU9OIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMzIgZWNvX3ZlcnNpb247Cit9UE1VX0NUUkxfTUlTQ19HRVRfRUNPX1ZFUlNJT047CisKKy8qIEZvciBNSVNDX0dFVF9IV19WRVJTSU9OIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNSUNfQ0hJUF9MSVNUX0VOVU0gY2hpcF9uYW1lOworCURDTF9VSU5UMzIgdmVyc2lvbjsKK31QTVVfQ1RSTF9NSVNDX0dFVF9IV19WRVJTSU9OOworCisvKiBGb3IgTUlTQ19TRVRfUkVHSVNURVJfVkFMVUUgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQzMiBvZmZzZXQ7CisJRENMX1VJTlQxNiB2YWx1ZTsKK31QTVVfQ1RSTF9NSVNDX1NFVF9SRUdJU1RFUl9WQUxVRTsKKworLyogRm9yIE1JU0NfR0VUX1JFR0lTVEVSX1ZBTFVFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMzIgb2Zmc2V0OworCURDTF9VSU5UMTYgdmFsdWU7Cit9UE1VX0NUUkxfTUlTQ19HRVRfUkVHSVNURVJfVkFMVUU7CisKKy8qIGludGVybmFsIHVzZSBmb3IgYnVjayBhbmQgbGRvLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7Cit9UE1VX0NUUkxfTERPX0JVQ0tfQ1RSTDsKKworLyogRm9yIExET19CVUNLX1NFVF9WT0NBTCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBQTVVfTERPX0JVQ0tfTElTVF9FTlVNICAgICAgbW9kOworICAgIERDTF9VSU5UMTYgdmFsdWU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPQ0FMOworCisvKiBGb3IgTERPX0JVQ0tfR0VUX1ZPQ0FMIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNVV9MRE9fQlVDS19MSVNUX0VOVU0gICAgICBtb2Q7CisgICAgRENMX1VJTlQxNiB2YWx1ZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9DQUw7CisKKy8qIEZvciBMRE9fQlVDS19TRVRfVk9UUklNIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNVV9MRE9fQlVDS19MSVNUX0VOVU0gICAgICBtb2Q7CisgICAgRENMX1VJTlQxNiB2YWx1ZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9UUklNOworCisvKiBGb3IgTERPX0JVQ0tfR0VUX1ZPVFJJTSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBQTVVfTERPX0JVQ0tfTElTVF9FTlVNICAgICAgbW9kOworICAgIERDTF9VSU5UMTYgdmFsdWU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPVFJJTTsKKworLyogRm9yIExET19CVUNLX1NFVF9WUEFfT0NfU0ROX1NUQVRVUyBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBQTVVfTERPX0JVQ0tfTElTVF9FTlVNICAgICAgbW9kOworICAgIERDTF9VSU5UMTYgdmFsdWU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZQQV9PQ19TRE5fU1RBVFVTOworCisvKiBGb3IgTERPX0JVQ0tfR0VUX1ZQQV9PQ19TRE5fU1RBVFVTIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNVV9MRE9fQlVDS19MSVNUX0VOVU0gICAgICBtb2Q7CisgICAgRENMX1VJTlQxNiB2YWx1ZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19HRVRfVlBBX09DX1NETl9TVEFUVVM7CisKKy8qIEZvciBMRE9fQlVDS19TRVRfVlBBX09DX1NETl9FTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBQTVVfTERPX0JVQ0tfTElTVF9FTlVNICAgICAgbW9kOworICAgIERDTF9VSU5UMTYgdmFsdWU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZQQV9PQ19TRE5fRU47CisKKy8qIEZvciBMRE9fQlVDS19HRVRfVlBBX09DX1NETl9FTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBQTVVfTERPX0JVQ0tfTElTVF9FTlVNICAgICAgbW9kOworICAgIERDTF9VSU5UMTYgdmFsdWU7Cit9UE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZQQV9PQ19TRE5fRU47CisKKy8qIEZvciBMRE9fQlVDS19TRVRfT1BfTU9ERSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQTVVfTERPX0JVQ0tfTElTVF9FTlVNCQltb2Q7CisJRENMX1VJTlQxNiB2YWx1ZTsKK31QTVVfQ1RSTF9MRE9fQlVDS19TRVRfT1BfTU9ERTsKKworLyogRm9yIExET19CVUNLX1NFVF9WT1RFUl9WT0xUQUdFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCVBNVV9MRE9fQlVDS19MSVNUX0VOVU0JCW1vZDsKKwlEQ0xfVUlOVDE2IHZhbHVlOworfVBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1RFUl9WT0xUQUdFOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NUUkxfREFUQV9UOiBEZWZpbmUgdGhlIENvbnRyb2wgZGF0YSBzdHJ1Y3R1cmUgZm9yIGVhY2ggbW9kdWxlJ3MgY29tbWFuZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgX19CVUlMRF9ET01fXworLyogVGhlIFBNVSBDb21tYW5kIFBhcmFtZXRlciBEYXRhIFN0cnVjdHVyZSBmb3IgRWFjaCBDb21tYW5kIGluIERDTF9DVFJMX0RBVEFfVCBFbnVtIG9mIGRjbC5oICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBNVV9DVFJMX0xET19CVUNLX0NUUkwgclBNVUxkb0J1Y2tDdHJsOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgSW50ZXJuYWwgVXNlKi8KKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU4gclBNVUxkb0J1Y2tTZXRFbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX1NFVF9FTiAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9FTl9TVEFUVVMgclBNVUxkb0J1Y2tHZXRFblN0YXR1czsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX0dFVF9FTl9TVEFUVVMgKi8KKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfUUlfTU9ERSByUE1VTGRvQnVja0dldFFpTW9kZTsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX0dFVF9RSV9NT0RFICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX0ZPUkNFIHJQTVVMZG9CdWNrU2V0RW5Gb3JjZTsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX1NFVF9FTl9GT1JDRSAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFIHJQTVVMZG9CdWNrU2V0Vm9sdGFnZTsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX1NFVF9WT0xUQUdFICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPTFRBR0VfRU4gclBNVUxkb0J1Y2tTZXRWb2x0YWdlRW47IC8qIERhdGEgU3RydWN0dXJlIGZvciBMRE9fQlVDS19TRVRfVk9MVEFHRV9FTiAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9TTEVFUF9WT0xUQUdFIHJQTVVMZG9CdWNrU2V0U2xlZXBWb2x0YWdlOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgTERPX0JVQ0tfU0VUX1NMRUVQX1ZPTFRBR0UgKi8KKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfQlVSU1RfVEhSRVNIT0xEIHJQTVVMZG9CdWNrU2V0QnVyc3RUaHJlc2hvbGQ7IC8qIERhdGEgU3RydWN0dXJlIGZvciBMRE9fQlVDS19TRVRfQlVSU1RfVEhSRVNIT0xEICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0NVUlJFTlRfTElNSVQgclBNVUxkb0J1Y2tTZXRDdXJyZW50TGltaXQ7IC8qIERhdGEgU3RydWN0dXJlIGZvciBMRE9fQlVDS19TRVRfQ1VSUkVOVF9MSU1JVCAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFX0NBTElCUkFUSU9OX0NPREUgclBNVUxkb0J1Y2tTZXRWb2x0YWdlQ2FsaWJyYXRpb25Db2RlOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgTERPX0JVQ0tfU0VUX1ZPTFRBR0VfQ0FMSUJSQVRJT05fQ09ERSAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9CSUFTX0NVUlJFTlRfQ0FMSUJSQVRJT05fQ09ERSByUE1VTGRvQnVja1NldEJpYXNDdXJyZW50Q2FsaWJyYXRpb25Db2RlOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgTERPX0JVQ0tfU0VUX0JJQVNfQ1VSUkVOVF9DQUxJQlJBVElPTl9DT0RFICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1NUQl9FTiByUE1VTGRvQnVja1NldFN0YkVuOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgTERPX0JVQ0tfU0VUX1NUQl9FTiAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9PQ19BVVRPX09GRiByUE1VTGRvQnVja1NldE9jQXV0b09mZjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX1NFVF9PQ19BVVRPX09GRiAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9SUyByUE1VTGRvQnVja1NldFJzOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgTERPX0JVQ0tfU0VUX1JTICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09OX1NFTCByUE1VTGRvQnVja1NldE9uU2VsOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgTERPX0JVQ0tfU0VUX09OX1NFTCAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9TUkNMS0VOX1NFTCByUE1VTGRvQnVja1NldFNyY2xrZW5TZWw7IC8qIERhdGEgU3RydWN0dXJlIGZvciBMRE9fQlVDS19TRVRfU1JDTEtFTl9TRUwgKi8KKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfU1RCX1REIHJQTVVMZG9CdWNrU2V0U3RiVGQ7IC8qIERhdGEgU3RydWN0dXJlIGZvciBMRE9fQlVDS19TRVRfU1RCX1REICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX05ESVNfRU4gclBNVUxkb0J1Y2tTZXROZGlzRW47IC8qIERhdGEgU3RydWN0dXJlIGZvciBMRE9fQlVDS19TRVRfTkRJU19FTiAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9PQ19URCByUE1VTGRvQnVja1NldE9jVGQ7IC8qIERhdGEgU3RydWN0dXJlIGZvciBMRE9fQlVDS19TRVRfT0NfVEQgKi8KKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT0NGQl9FTiByUE1VTGRvQnVja1NldE9jZmJFbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX1NFVF9PQ0ZCX0VOICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZTSU1fR1BMRE9fRU4gclBNVUxkb0J1Y2tTZXRWc2ltR3BsZG9FbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX1NFVF9WU0lNX0dQTERPX0VOICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZTSU0yX0dQTERPX0VOIHJQTVVMZG9CdWNrU2V0VnNpbTJHcGxkb0VuOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgTERPX0JVQ0tfU0VUX1ZTSU0yX0dQTERPX0VOICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1NJTTJfR1BJT19FTiByUE1VTGRvQnVja1NldFNpbTJHcGlvRW47IC8qIERhdGEgU3RydWN0dXJlIGZvciBMRE9fQlVDS19TRVRfU0lNMl9HUElPX0VOICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0NDSV9TUkNMS0VOIHJQTVVMZG9CdWNrU2V0Q2NpU3JjbGtlbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX1NFVF9DQ0lfU1JDTEtFTiAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9PQ19TVEFUVVMgclBNVUxkb0J1Y2tHZXRPY1N0YXR1czsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX0dFVF9PQ19TVEFUVVMgKi8KKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfUUlfT0NfU1RBVFVTIHJQTVVMZG9CdWNrR2V0UWlPY1N0YXR1czsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX0dFVF9RSV9PQ19TVEFUVVMgKi8KKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT0NfSU5UX0VOIHJQTVVMZG9CdWNrU2V0T2NJbnRFbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX1NFVF9PQ19JTlRfRU4gKi8KKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19DTEVBUl9PQ19GTEFHIHJQTVVMZG9CdWNrQ2xlYXJPY0ZsYWc7IC8qIERhdGEgU3RydWN0dXJlIGZvciBMRE9fQlVDS19DTEVBUl9PQ19GTEFHICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX09DX0ZMQUcgclBNVUxkb0J1Y2tHZXRPY0ZsYWc7IC8qIERhdGEgU3RydWN0dXJlIGZvciBMRE9fQlVDS19HRVRfT0NfRkxBRyAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT0xUQUdFX0xJU1QgclBNVUxkb0J1Y2tHZXRWb2x0YWdlTGlzdDsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX0dFVF9WT0xUQUdFX0xJU1QgKi8KKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVEhFUl9TSEROX0VOIHJQTVVMZG9CdWNrU2V0VGhlclNoZG5FbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX1NFVF9USEVSX1NIRE5fRU4gKi8KKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTFBfTU9ERV9TRVQgclBNVUxkb0J1Y2tTZXRMcE1vZGVTZXQ7IC8qIERhdGEgU3RydWN0dXJlIGZvciBMRE9fQlVDS19TRVRfTFBfTU9ERV9TRVQgKi8KKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTFBfU0VMIHJQTVVMZG9CdWNrU2V0THBTZWw7IC8qIERhdGEgU3RydWN0dXJlIGZvciBMRE9fQlVDS19TRVRfTFBfU0VMICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX0xQX01PREUgclBNVUxkb0J1Y2tHZXRMcE1vZGU7IC8qIERhdGEgU3RydWN0dXJlIGZvciBMRE9fQlVDS19HRVRfTFBfTU9ERSAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9PTl9DVFJMIHJQTVVMZG9CdWNrU2V0T25DdHJsOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgTERPX0JVQ0tfU0VUX09OX0NUUkwgKi8KKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCByUE1VTGRvQnVja1NldE1vZGVzZXQ7IC8qIERhdGEgU3RydWN0dXJlIGZvciBMRE9fQlVDS19TRVRfTU9ERVNFVCAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9DT1QgclBNVUxkb0J1Y2tTZXRDb3RzZXQ7IC8qIERhdGEgU3RydWN0dXJlIGZvciBMRE9fQlVDS19TRVRfQ09UICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX0NPVCByUE1VTGRvQnVja0dldENvdDsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX1NFVF9DT1QgKi8KKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fQ1RSTCByUE1VTGRvQnVja1NldEVuQ3RybDsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX1NFVF9FTl9DVFJMICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX1NFTCByUE1VTGRvQnVja1NldEVuU2VsOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgTERPX0JVQ0tfU0VUX0VOX1NFTCAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9TUkNMS19NT0RFX1NFTCByUE1VTGRvQnVja1NldFNyY2xrTW9kZVNlbDsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIExET19CVUNLX1NFVF9TUkNMS19NT0RFX1NFTCAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9TUkNMS19FTl9TRUwgclBNVUxkb0J1Y2tTZXRTcmNsa0VuU2VsOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgTERPX0JVQ0tfU0VUX1NSQ0xLX0VOX1NFTCAqLworICAgIFBNVV9DVFJMX0xET19TRVRfQ0FMIHJQTVVMZG9TZXRDYWw7IC8qIERhdGEgU3RydWN0dXJlIGZvciBMRE9fU0VUX0NBTCAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT0xUQUdFIHJQTVVMZG9CdWNrR2V0Vm9sdDsgLyogRGF0YSBzdHJ1Y3R1cmUgZm9yIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT0xUQUdFICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPU0VMX0NUUkwgclBNVUxkb0J1Y2tHZXRWb3NlbEN0cmw7IC8qIERhdGEgc3RydWN0dXJlIGZvciBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9TRUxfQ1RSTCAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT1NFTCByUE1VTGRvQnVja0dldFZvc2VsOyAvKiBEYXRhIHN0cnVjdHVyZSBmb3IgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPU0VMICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPU0VMX09OIHJQTVVMZG9CdWNrR2V0Vm9zZWxPbjsgLyogRGF0YSBzdHJ1Y3R1cmUgZm9yIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT1NFTF9PTiAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT1NFTF9TTEVFUCByUE1VTGRvQnVja0dldFZvc2VsU2xlZXA7IC8qIERhdGEgc3RydWN0dXJlIGZvciBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9TRUxfU0xFRVAgKi8KKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9TRUxfQ1RSTCByUE1VTGRvQnVja1NldFZvc2VsQ3RybDsgLyogRGF0YSBzdHJ1Y3R1cmUgZm9yIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1NFTF9DVFJMICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPU0VMIHJQTVVMZG9CdWNrU2V0Vm9zZWw7IC8qIERhdGEgc3RydWN0dXJlIGZvciBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9TRUwgKi8KKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9TRUxfT04gclBNVUxkb0J1Y2tTZXRWb3NlbE9uOyAvKiBEYXRhIHN0cnVjdHVyZSBmb3IgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPU0VMX09OICovCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPU0VMX1NMRUVQIHJQTVVMZG9CdWNrU2V0Vm9zZWxTbGVlcDsgLyogRGF0YSBzdHJ1Y3R1cmUgZm9yIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1NFTF9TTEVFUCAqLworICAgIFBNVV9DVFJMX0xET19TRVRfVlRDWE8yNF9TV0lUQ0hfRU4gIHJQTVVMZG9CdWNrU2V0VnRjeG9Td2l0aDsgLyogRGF0YSBzdHJ1Y3R1cmUgZm9yIFBNVV9DVFJMX0xET19WVENYTzI0X1NXSVRDSF9TRVRfRU4gKi8KKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRlBXTSAgclBNVUxkb0J1Y2tTZXRGcHdtOyAvKiBEYXRhIHN0cnVjdHVyZSBmb3IgQlVDSyBTRVQgRlBXTSAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9GUFdNICByUE1VTGRvQnVja0dldEZwd207IC8qIERhdGEgc3RydWN0dXJlIGZvciBCVUNLIEdFVCBGUFdNICovCisgICAgUE1VX0NUUkxfVlBBX1NFVF9WT1NFTF9NQVBfRU4gclBNVVZwYVNldFZvc2VsTWFwRW47IC8qIERhdGEgU3RydWN0dXJlIGZvciBWUEFfU0VUX1ZPU0VMX01BUF9FTiAqLworICAgIFBNVV9DVFJMX1ZQQV9TRVRfRU4gclBNVVZwYVNldEVuOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgVlBBX1NFVF9FTiAqLworICAgIFBNVV9DVFJMX1ZQQV9TRVRfVk9MVEFHRSByUE1VVnBhU2V0Vm9sdGFnZTsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFZQQV9TRVRfVk9MVEFHRSAqLworICAgIFBNVV9DVFJMX1ZQQV9DVFJMX1NFTCByUE1VVnBhQ3RybFNlbDsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFZQQV9DVFJMX1NFTCAqLworICAgIFBNVV9DVFJMX1ZQQV9HRVRfVk9MVEFHRV9MSVNUIHJQTVVWcGFHZXRWb2x0YWdlTGlzdDsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFZQQV9HRVRfVk9MVEFHRV9MSVNUICovCisgICAgUE1VX0NUUkxfVlBBX1NFVF9CQVRfTE9XIHJQTVVWcGFTZXRCYXRMb3c7IC8qIERhdGEgU3RydWN0dXJlIGZvciBWUEFfU0VUX0JBVF9MT1cgKi8KKyAgICBQTVVfQ1RSTF9WUEFfU0VUX0ZQV00gclBNVVZwYVNldEZwd207IC8qIERhdGEgU3RydWN0dXJlIGZvciBWUEFfU0VUX0ZQV00gKi8KKyAgICBQTVVfQ1RSTF9WUEFfU0VUX1ZPTFRBR0VfU0VMRUNUSU9OX1RBQkxFIHJQTVVWcGFTZXRWb2x0YWdlU2VsZWN0aW9uVGFibGU7IC8qIERhdGEgU3RydWN0dXJlIGZvciBWUEFfU0VUX1ZPTFRBR0VfU0VMRUNUSU9OX1RBQkxFICovCisgICAgUE1VX0NUUkxfVlBBX1NFVF9NQVBfU0VMIHJQTVVWcGFTZXRNYXBTZWw7IC8qIERhdGEgU3RydWN0dXJlIGZvciBWUEFfU0VUX01BUF9TRUwgKi8KKyAgICBQTVVfQ1RSTF9WSUJSX1NFVF9ESU1NSU5HX09OX0RVVFkgclBNVVZpYnJTZXREaW1taW5nT25EdXR5OyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgVklCUl9TRVRfRElNTUlOR19PTl9EVVRZICovCisgICAgUE1VX0NUUkxfVlJGMThfU0VUX0ZQV00gclBNVVZyZjE4U2V0RnB3bTsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFZSRjE4X1NFVF9GUFdNICovCisgICAgUE1VX0NUUkxfVlJGMThfU0VUX01PREVTRVQgclBNVVZyZjE4U2V0TW9kZXNldDsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFZSRjE4X1NFVF9GUFdNICovCisgICAgUE1VX0NUUkxfVlJGMThfU0VUX0JVQ0tfTERPX01PREUgclBNVVZyZjE4U2V0QnVja0xkb01vZGU7IC8qIERhdGEgU3RydWN0dXJlIGZvciBWUkYxOF9TRVRfQlVDS19MRE9fTU9ERSAqLworICAgIFBNVV9DVFJMX1ZSRjFfU0VUX01PREVTRVRfQ0tQRE5fU0VUIHJQTVVWcmYxU2V0TW9kZXNldENrcGRuU2V0OyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9TRVQgKi8KKyAgICBQTVVfQ1RSTF9WUkYxX1NFVF9NT0RFU0VUX0NLUEROX0NMUiByUE1VVnJmMVNldE1vZGVzZXRDa3BkbkNscjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFZSRjFfU0VUX01PREVTRVRfQ0tQRE5fQ0xSICovCisgICAgUE1VX0NUUkxfVlJGMV9HRVRfTU9ERVNFVF9DS1BETiByUE1VVnJmMUdldE1vZGVzZXRDa3BkbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFZSRjFfR0VUX01PREVTRVRfQ0tQRE4gKi8KKyAgICBQTVVfQ1RSTF9TSU1MU19TRVRfU1JTVF9DT05GIHJQTVVTaW1sc1NldFNyc3RDb25mOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgU0lNTFNfU0VUX1NSU1RfQ09ORiAqLworICAgIFBNVV9DVFJMX1NJTUxTX1NFVF9TQ0xLX0NPTkYgclBNVVNpbWxzU2V0U2Nsa0NvbmY7IC8qIERhdGEgU3RydWN0dXJlIGZvciBTSU1MU19TRVRfU0NMS19DT05GICovCisgICAgUE1VX0NUUkxfU0lNTFNfU0VUX1REU0VMIHJQTVVTaW1sc1NldFRkc2VsOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgU0lNTFNfU0VUX1REU0VMICovCisgICAgUE1VX0NUUkxfU0lNQVBfU0VUX1REU0VMIHJQTVVTaW1hcFNldFRkc2VsOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgU0lNQVBfU0VUX1REU0VMICovCisgICAgUE1VX0NUUkxfU0lNTFNfU0VUX1JEU0VMIHJQTVVTaW1sc1NldFJkc2VsOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgU0lNTFNfU0VUX1JEU0VMICovCisgICAgUE1VX0NUUkxfU0lNQVBfU0VUX1JEU0VMIHJQTVVTaW1hcFNldFJkc2VsOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgU0lNQVBfU0VUX1JEU0VMICovCisgICAgUE1VX0NUUkxfU0lNX1NFVF9TVEJfU0lPX01PREUgclBNVVNpbVNldFN0YlNpb01vZGU7IC8qIERhdGEgU3RydWN0dXJlIGZvciBTSU1fU0VUX1NUQl9TSU9fTU9ERSAqLworICAgIFBNVV9DVFJMX1NJTVJTVF9TRVRfR1BJT19TRVQgclBNVVNpbXJzdFNldEdwaW9TZXQ7IC8qIERhdGEgU3RydWN0dXJlIGZvciBTSU1SU1RfU0VUX0dQSU9fU0VUICovCisgICAgUE1VX0NUUkxfU0lNUlNUX1NFVF9HUElPX0NMUiByUE1VU2ltcnN0U2V0R3Bpb0NscjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFNJTVJTVF9TRVRfR1BJT19DTFIgKi8KKyAgICBQTVVfQ1RSTF9PQ1RMX1NFVF9TSU1fQVBfU1JTVCByUE1VT2N0bFNldFNpbUFwU3JzdDsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIE9DVExfU0VUX1NJTV9BUF9TUlNUICovCisgICAgUE1VX0NUUkxfT0NUTF9TRVRfU0lNX0FQX1NDTEsgclBNVU9jdGxTZXRTaW1BcFNjbGs7IC8qIERhdGEgU3RydWN0dXJlIGZvciBPQ1RMX1NFVF9TSU1fQVBfU0NMSyAqLworICAgIFBNVV9DVFJMX09DVExfU0VUX1NJTUxTX1NSU1QgclBNVU9jdGxTZXRTaW1sc1Nyc3Q7IC8qIERhdGEgU3RydWN0dXJlIGZvciBPQ1RMX1NFVF9TSU1MU19TUlNUICovCisgICAgUE1VX0NUUkxfT0NUTF9TRVRfU0lNTFNfU0NMSyByUE1VT2N0bFNldFNpbWxzU2NsazsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIE9DVExfU0VUX1NJTUxTX1NDTEsgKi8KKyAgICBQTVVfQ1RSTF9TUEtfU0VUX0VOIHJQTVVTcGtTZXRFbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFNQS19TRVRfRU4gKi8KKyAgICBQTVVfQ1RSTF9TUEtfU0VUX01PREUgclBNVVNwa1NldE1vZGU7IC8qIERhdGEgU3RydWN0dXJlIGZvciBTUEtfU0VUX01PREUgKi8KKyAgICBQTVVfQ1RSTF9TUEtfR0VUX01PREUgclBNVVNwa0dldE1vZGU7IC8qIERhdGEgU3RydWN0dXJlIGZvciBTUEtfR0VUX01PREUgKi8KKyAgICBQTVVfQ1RSTF9TUEtfU0VUX09DX0FVVE9fT0ZGIHJQTVVTcGtTZXRPY0F1dG9PZmY7IC8qIERhdGEgU3RydWN0dXJlIGZvciBTUEtfU0VUX09DX0FVVE9fT0ZGICovCisgICAgUE1VX0NUUkxfU1BLX1NFVF9WT0xfVkFMVUUgclBNVVNwa1NldFZvbFZhbHVlOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgU1BLX1NFVF9WT0xfVkFMVUUgKi8KKyAgICBQTVVfQ1RSTF9TUEtfR0VUX1ZPTF9WQUxVRSByUE1VU3BrR2V0Vm9sVmFsdWU7IC8qIERhdGEgU3RydWN0dXJlIGZvciBTUEtfR0VUX1ZPTF9WQUxVRSAqLworICAgIFBNVV9DVFJMX1NQS19TRVRfVk9MIHJQTVVTcGtTZXRWb2w7IC8qIERhdGEgU3RydWN0dXJlIGZvciBTUEtfU0VUX1ZPTCAqLworICAgIFBNVV9DVFJMX1NQS19HRVRfVk9MIHJQTVVTcGtHZXRWb2w7IC8qIERhdGEgU3RydWN0dXJlIGZvciBTUEtfR0VUX1ZPTCAqLworICAgIFBNVV9DVFJMX1NQS19TRVRfU0xFV19SQVRFIHJQTVVTcGtTZXRTbGV3UmF0ZTsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFNQS19TRVRfU0xFV19SQVRFICovCisgICAgUE1VX0NUUkxfU1BLX1NFVF9DQUxJQlJfRU4gclBNVVNwa1NldENhbGlickVuOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgU1BLX1NFVF9DQUxJQlJfRU4gKi8KKyAgICBQTVVfQ1RSTF9TUEtfU0VUX0NBTElCUl9TRUwgclBNVVNwa1NldENhbGliclNlbDsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFNQS19TRVRfQ0FMSUJSX1NFTCAqLworICAgIFBNVV9DVFJMX0ZMQVNITEVEX1NFVF9FTiByUE1VRmxhc2hsZWRTZXRFbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIEZMQVNITEVEX1NFVF9FTiAqLworICAgIFBNVV9DVFJMX0ZMQVNITEVEX1NFVF9NT0RFIHJQTVVGbGFzaGxlZFNldE1vZGU7IC8qIERhdGEgU3RydWN0dXJlIGZvciBGTEFTSExFRF9TRVRfTU9ERSAqLworICAgIFBNVV9DVFJMX0ZMQVNITEVEX1NFVF9TRUwgclBNVUZsYXNobGVkU2V0U2VsOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgRkxBU0hMRURfU0VUX1NFTCAqLworICAgIFBNVV9DVFJMX0tQTEVEX1NFVF9FTiByUE1VS3BsZWRTZXRFbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIEtQTEVEX1NFVF9FTiAqLworICAgIFBNVV9DVFJMX0tQTEVEX1NFVF9NT0RFIHJQTVVLcGxlZFNldE1vZGU7IC8qIERhdGEgU3RydWN0dXJlIGZvciBLUExFRF9TRVRfTU9ERSAqLworICAgIFBNVV9DVFJMX0tQTEVEX1NFVF9TRUwgclBNVUtwbGVkU2V0U2VsOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgS1BMRURfU0VUX1NFTCAqLworICAgIFBNVV9DVFJMX0tQTEVEX1NFVF9GUkVRVUVOQ1lfRElWSVNJT04gclBNVUtwbGVkU2V0RnJlcXVlbmN5RGl2aXNpb247IC8qIERhdGEgU3RydWN0dXJlIGZvciBLUExFRF9TRVRfRlJFUVVFTkNZX0RJVklTSU9OICovCisgICAgUE1VX0NUUkxfS1BMRURfU0VUX0RJTU1JTkdfT05fRFVUWSByUE1VS3BsZWRTZXREaW1taW5nT25EdXR5OyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgS1BMRURfU0VUX0RJTU1JTkdfT05fRFVUWSAqLworICAgIFBNVV9DVFJMX0NIUl9TRVRfQURDX01FQVNVUkVfRU4gclBNVUNoclNldEFkY01lYXN1cmVFbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIENIUl9TRVRfQURDX01FQVNVUkVfRU4gKi8KKyAgICBQTVVfQ1RSTF9DSFJfU0VUX1dEVF9USU1FUiByUE1VQ2hyU2V0V2R0VGltZXI7IC8qIERhdGEgU3RydWN0dXJlIGZvciBDSFJfU0VUX1dEVF9USU1FUiAqLworICAgIFBNVV9DVFJMX0NIUl9TRVRfV0RUX0lOVF9FTiByUE1VQ2hyU2V0V2R0SW50RW47IC8qIERhdGEgU3RydWN0dXJlIGZvciBDSFJfU0VUX1dEVF9JTlRfRU4gKi8KKyAgICBQTVVfQ1RSTF9DSFJfU0VUX1dEVF9FTiByUE1VQ2hyU2V0V2R0RW47IC8qIERhdGEgU3RydWN0dXJlIGZvciBDSFJfU0VUX1dEVF9FTiAqLworICAgIFBNVV9DVFJMX0NIUl9TRVRfQ0hSX0VOIHJQTVVDaHJTZXRDaHJFbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIENIUl9TRVRfQ0hSX0VOICovCisgICAgUE1VX0NUUkxfQ0hSX1NFVF9DSFJfRk9SQ0VfRU4gclBNVUNoclNldENockZvcmNlRW47IC8qIERhdGEgU3RydWN0dXJlIGZvciBDSFJfU0VUX0NIUl9GT1JDRV9FTiAqLworICAgIFBNVV9DVFJMX0NIUl9HRVRfQ0hSX0RFVF9TVEFUVVMgclBNVUNockdldENockRldFN0YXR1czsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIENIUl9HRVRfQ0hSX0RFVF9TVEFUVVMgKi8KKyAgICBQTVVfQ1RSTF9DSFJfR0VUX0NIUl9DVVJSRU5UIHJQTVVDaHJHZXRDaHJDdXJyZW50OyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgQ0hSX0dFVF9DSFJfQ1VSUkVOVCAqLworICAgIFBNVV9DVFJMX0NIUl9HRVRfQ0hSX0NVUlJFTlRfTElTVCByUE1VQ2hyR2V0Q2hyQ3VycmVudExpc3Q7IC8qIERhdGEgU3RydWN0dXJlIGZvciBDSFJfR0VUX0NIUl9DVVJSRU5UX0xJU1QgKi8KKyAgICBQTVVfQ1RSTF9DSFJfU0VUX0NIUl9DVVJSRU5UIHJQTVVDaHJTZXRDaHJDdXJyZW50OyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgQ0hSX1NFVF9DSFJfQ1VSUkVOVCAqLworICAgIFBNVV9DVFJMX0NIUl9HRVRfQ1ZfREVURUNUSU9OX1NUQVRVUyByUE1VQ2hyR2V0Q3ZEZXRlY3Rpb25TdGF0dXM7IC8qIERhdGEgU3RydWN0dXJlIGZvciBDSFJfR0VUX0NWX0RFVEVDVElPTl9TVEFUVVMgKi8KKyAgICBQTVVfQ1RSTF9DSFJfU0VUX0NWX0RFVEVDVElPTl9FTiByUE1VQ2hyU2V0Q3ZEZXRlY3Rpb25FbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIENIUl9TRVRfQ1ZfREVURUNUSU9OX0VOICovCisgICAgUE1VX0NUUkxfQ0hSX1NFVF9DVl9ERVRFQ1RJT05fVk9MVEFHRSByUE1VQ2hyU2V0Q3ZEZXRlY3Rpb25Wb2x0YWdlOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgQ0hSX1NFVF9DVl9ERVRFQ1RJT05fVk9MVEFHRSAqLworICAgIFBNVV9DVFJMX0NIUl9TRVRfQ1NEQUNfRU4gclBNVUNoclNldENzZGFjRW47IC8qIERhdGEgU3RydWN0dXJlIGZvciBDSFJfU0VUX0NTREFDX0VOICovCisgICAgUE1VX0NUUkxfQ0hSX0dFVF9JU19CQVRURVJZX09OIHJQTVVDaHJHZXRJc0JhdHRlcnlPbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIENIUl9HRVRfSVNfQkFUVEVSWV9PTiAqLworICAgIFBNVV9DVFJMX0NIUl9HRVRfSVNfQ0hSX1ZBTElEIHJQTVVDaHJHZXRJc0NoclZhbGlkOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgQ0hSX0dFVF9JU19DSFJfVkFMSUQgKi8KKyAgICBQTVVfQ1RSTF9DSFJfU0VUX0hWX0RFVEVDVElPTl9WT0xUQUdFIHJQTVVDaHJTZXRIdkRldGVjdGlvblZvbHRhZ2U7IC8qIERhdGEgU3RydWN0dXJlIGZvciBDSFJfU0VUX0hWX0RFVEVDVElPTl9WT0xUQUdFICovCisgICAgUE1VX0NUUkxfQ0hSX0dFVF9IVl9ERVRFQ1RJT05fVk9MVEFHRV9MSVNUIHJQTVVDaHJHZXRIdkRldGVjdGlvblZvbHRhZ2VMaXN0OyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgQ0hSX0dFVF9IVl9ERVRFQ1RJT05fVk9MVEFHRV9MSVNUICovCisgICAgUE1VX0NUUkxfQ0hSX1NFVF9WQkFUX09WX0RFVEVDVElPTl9WT0xUQUdFIHJQTVVDaHJTZXRWYmF0T3ZEZXRlY3Rpb25Wb2x0YWdlOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgQ0hSX1NFVF9WQkFUX09WX0RFVEVDVElPTl9WT0xUQUdFICovCisgICAgUE1VX0NUUkxfQ0hSX1NFVF9CQVRfSFRfRU4gclBNVUNoclNldEJhdEh0RW47IC8qIERhdGEgU3RydWN0dXJlIGZvciBDSFJfU0VUX0JBVF9IVF9FTiAqLworICAgIFBNVV9DVFJMX0NIUl9TRVRfT1RHX0JWQUxJRF9FTiByUE1VQ2hyU2V0T3RnQnZhbGlkRW47IC8qIERhdGEgU3RydWN0dXJlIGZvciBDSFJfU0VUX09UR19CVkFMSURfRU4gKi8KKyAgICBQTVVfQ1RSTF9DSFJfU0VUX0NWX01PREUgclBNVUNoclNldEN2TW9kZTsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIENIUl9TRVRfQ1ZfTU9ERSAqLworICAgIFBNVV9DVFJMX0NIUl9TRVRfQ1NEQUNfTU9ERSByUE1VQ2hyU2V0Q3NkYWNNb2RlOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgQ0hSX1NFVF9DU0RBQ19NT0RFICovCisgICAgUE1VX0NUUkxfQ0hSX1NFVF9UUkFDS0lOR19FTiByUE1VQ2hyU2V0VHJhY2tpbmdFbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIENIUl9TRVRfVFJBQ0tJTkdfRU4gKi8KKyAgICBQTVVfQ1RSTF9DSFJfU0VUX0hXQ1ZfRU4gclBNVUNoclNldEh3Y3ZFbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIENIUl9TRVRfSFdDVl9FTiAqLworICAgIFBNVV9DVFJMX0NIUl9TRVRfVUxDX0RFVF9FTiByUE1VQ2hyU2V0VWxjRGV0RW47IC8qIERhdGEgU3RydWN0dXJlIGZvciBDSFJfU0VUX1VMQ19ERVRfRU4gKi8KKyAgICBQTVVfQ1RSTF9DSFJfU0VUX0JDMTFfUFVMTFVQX0VOCXJQTVVDaHJTZXRCYzExUHVsbHVwRW47IC8qIERhdGEgU3RydWN0dXJlIGZvciBDSFJfU0VUX0JDMTFfUFVMTFVQX0VOICovCisgICAgUE1VX0NUUkxfQ0hSX1NFVF9MT1dfSUNIX0RCIHJQTVVDaHJTZXRMb3dJY2hEYjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIENIUl9TRVRfTE9XX0lDSF9EQiAqLworICAgIFBNVV9DVFJMX0NIUl9TRVRfVkJBVF9DVl9DQUxJQlJBVElPTiByUE1VQ2hyU2V0VmJhdEN2Q2FsaWJyYXRpb247IC8qIERhdGEgU3RydWN0dXJlIGZvciBDSFJfU0VUX1ZCQVRfQ1ZfQ0FMSUJSQVRJT04gKi8KKyAgICBQTVVfQ1RSTF9DSFJfR0VUX0NDX0RFVCByUE1VQ2hyR2V0Q2NEZXQ7IC8qIERhdGEgU3RydWN0dXJlIGZvciBDSFJfR0VUX0NDX0RFVCAqLworICAgIFBNVV9DVFJMX0JMX1NFVF9FTiByUE1VQmxTZXRFbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIEJMX1NFVF9FTiAqLworICAgIFBNVV9DVFJMX0JMX1NFVF9JTklUIHJQTVVCbFNldEluaXQ7IC8qIERhdGEgU3RydWN0dXJlIGZvciBCTF9TRVRfSU5JVCAqLworICAgIFBNVV9DVFJMX0JMX0dFVF9TVVBQT1JUX0xFVkVMIHJQTVVCbEdldFN1cHBvcnRMZXZlbDsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIEJMX0dFVF9TVVBQUE9SVF9MRVZFTCAqLworICAgIFBNVV9DVFJMX0JMX0dFVF9VU0VfUFdNX1FVRVJZIHJQTVVCbEdldFVzZVB3bVF1ZXJ5OyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgQkxfR0VUX1VTRV9QV01fUVVFUlkgKi8KKyAgICBQTVVfQ1RSTF9CT09TVF9TRVRfRU4gclBNVUJvb3N0U2V0RW47IC8qIERhdGEgU3RydWN0dXJlIGZvciBCT09TVF9TRVRfRU4gKi8KKyAgICBQTVVfQ1RSTF9CT09TVF9TRVRfQ1VSUkVOVF9MSU1JVCByUE1VQm9vc3RTZXRDdXJyZW50TGltaXQ7IC8qIERhdGEgU3RydWN0dXJlIGZvciBCT09TVF9TRVRfQ1VSUkVOVF9MSU1JVCAqLworICAgIFBNVV9DVFJMX0JPT1NUX1NFVF9DTEtfQ0FMIHJQTVVCb29zdFNldENsa0NhbDsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIEJPT1NUX1NFVF9DTEtfQ0FMICovCisgICAgUE1VX0NUUkxfQk9PU1RfU0VUX1NZTkNfRU4gclBNVUJvb3N0U2V0U3luY0VuOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgQk9PU1RfU0VUX1NZTkNfRU4gKi8KKyAgICBQTVVfQ1RSTF9CT09TVF9TRVRfVk9MVEFHRSByUE1VQm9vc3RTZXRWb2x0YWdlOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgQk9PU1RfU0VUX1ZPTFRBR0UgKi8KKyAgICBQTVVfQ1RSTF9CT09TVF9TRVRfTEVWRUwgclBNVUJvb3N0U2V0TGV2ZWw7IC8qIERhdGEgU3RydWN0dXJlIGZvciBCT09TVF9TRVRfTEVWRUwgKi8KKyAgICBQTVVfQ1RSTF9JU0lOS19TRVRfRU4gclBNVUlzaW5rU2V0RW47IC8qIERhdGEgU3RydWN0dXJlIGZvciBJU0lOS19TRVRfRU4gKi8KKyAgICBQTVVfQ1RSTF9JU0lOS19TRVRfTU9ERSByUE1VSXNpbmtTZXRNb2RlOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgSVNJTktfU0VUX01PREUgKi8KKyAgICBQTVVfQ1RSTF9JU0lOS19TRVRfU1RFUCByUE1VSXNpbmtTZXRTdGVwOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgSVNJTktfU0VUX1NURVAgKi8KKyAgICBQTVVfQ1RSTF9JU0lOS19TRVRfRk9SQ0VfT0ZGIHJQTVVJc2lua1NldEZvcmNlT2ZmOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgSVNJTktfU0VUX0ZPUkNFX09GRiAqLworICAgIFBNVV9DVFJMX0lTSU5LX1NFVF9ESU1NSU5HX09OX0RVVFkgclBNVUlzaW5rU2V0RGltbWluZ09uRHV0eTsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIElTSU5LX1NFVF9ESU1NSU5HX09OX0RVVFkgKi8KKyAgICBQTVVfQ1RSTF9JU0lOS19TRVRfRlJFUVVFTkNZX0RJVklTSU9OIHJQTVVJc2lua1NldEZyZXF1ZW5jeURpdmlzaW9uOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgSVNJTktfU0VUX0ZSRVFVRU5DWV9ESVZJU0lPTiAqLworICAgIFBNVV9DVFJMX0FEQ19TRVRfUlFTVCByUE1VQWRjU2V0UnFzdDsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIEFEQ19TRVRfUlFTVCAqLworICAgIFBNVV9DVFJMX0FEQ19DTFJfUlFTVCByUE1VQWRjQ2xyUnFzdDsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIEFEQ19DTFJfUlFTVCAqLworICAgIFBNVV9DVFJMX0FEQ19HRVRfUkRZX01EIHJQTVVBZGNHZXRSZHlNZDsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIEFEQ19HRVRfUkRZX01EICovCisgICAgUE1VX0NUUkxfQURDX0dFVF9PVVRfTUQgclBNVUFkY0dldE91dE1kOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgQURDX0dFVF9PVVRfTUQgKi8KKyAgICBQTVVfQ1RSTF9NSVNDX1NFVF9STEVEX0VOIHJQTVVNaXNjU2V0UmxlZEVuOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgTUlTQ19TRVRfUkxFRF9FTiAqLworICAgIFBNVV9DVFJMX01JU0NfU0VUX0dMRURfRU4gclBNVU1pc2NTZXRHbGVkRW47IC8qIERhdGEgU3RydWN0dXJlIGZvciBNSVNDX1NFVF9HTEVEX0VOICovCisgICAgUE1VX0NUUkxfTUlTQ19TRVRfQkxFRF9FTiByUE1VTWlzY1NldEJsZWRFbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIE1JU0NfU0VUX0JMRURfRU4gKi8KKyAgICBQTVVfQ1RSTF9NSVNDX0dFVF9DSUQgclBNVU1pc2NHZXRDaWQ7IC8qIERhdGEgU3RydWN0dXJlIGZvciBNSVNDX0dFVF9DSUQgKi8KKyAgICBQTVVfQ1RSTF9NSVNDX0dFVF9FQ09fVkVSU0lPTiByUE1VTWlzY0dldEVjb1ZlcnNpb247IC8qIERhdGEgU3RydWN0dXJlIGZvciBNSVNDX0dFVF9FQ09fVkVSU0lPTiAqLworICAgIFBNVV9DVFJMX01JU0NfR0VUX0hXX1ZFUlNJT04gclBNVU1pc2NHZXRId1ZlcnNpb247IC8qIERhdGEgU3RydWN0dXJlIGZvciBNSVNDX0dFVF9IV19WRVJJU09OICovCisgICAgUE1VX0NUUkxfTUlTQ19TRVRfUkVHSVNURVJfVkFMVUUgclBNVU1pc2NTZXRSZWdpc3RlclZhbHVlOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgTUlTQ19TRVRfUkVHSVNURVJfVkFMVUUgKi8KKyAgICBQTVVfQ1RSTF9NSVNDX0dFVF9SRUdJU1RFUl9WQUxVRSByUE1VTWlzY0dldFJlZ2lzdGVyVmFsdWU7IC8qIERhdGEgU3RydWN0dXJlIGZvciBNSVNDX0dFVF9SRUdJU1RFUl9WQUxVRSAqLworICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9PUF9FTiByUE1VTGRvQnVja1NldE9wRW47CisgICAgUE1VX0NUUkxfTERPX0JVQ0tfQ0xSX09QX0VOIHJQTVVMZG9CdWNrQ2xyT3BFbjsKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfSFdfT1BfQ0ZHIHJQTVVMZG9CdWNrU2V0SHdPcDsKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19DTFJfSFdfT1BfQ0ZHIHJQTVVMZG9CdWNrQ2xySHdPcDsKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfR09fT05fT1AgclBNVUxkb0J1Y2tTZXRHb09uT3A7CisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0dPX0xQX09QIHJQTVVMZG9CdWNrU2V0R29McE9wOworICAgIFBNVV9DVFJMX1RPUF9TRVRfU1JDTEtFTl9JTl9FTiByUE1VVG9wU2V0U3JjbGtlbkluRW47CisgICAgUE1VX0NUUkxfVE9QX1NFVF9TUkNMS0VOX0lOX01PREUgclBNVVRvcFNldFNyY2xrZW5Jbk1vZGU7CisgICAgUE1VX0NUUkxfRENYT19TRVRfUkVHSVNURVJfVkFMVUUgclBNVURjeG9TZXRSZWdpc3RlclZhbHVlOworICAgIFBNVV9DVFJMX0RDWE9fR0VUX1JFR0lTVEVSX1ZBTFVFIHJQTVVEY3hvR2V0UmVnaXN0ZXJWYWx1ZTsKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9DQUwgclBNVUxkb0J1Y2tTZXRWb2NhbDsKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9DQUwgclBNVUxkb0J1Y2tHZXRWb2NhbDsKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9UUklNIHJQTVVMZG9CdWNrU2V0Vm90cmltOworICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT1RSSU0gclBNVUxkb0J1Y2tHZXRWb3RyaW07CisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZQQV9PQ19TRE5fU1RBVFVTIHJQTVVMZG9CdWNrU2V0VnBhT2NTZG5TdGF0dXM7CisgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZQQV9PQ19TRE5fU1RBVFVTIHJQTVVMZG9CdWNrR2V0VnBhT2NTZG5TdGF0dXM7CisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZQQV9PQ19TRE5fRU4gclBNVUxkb0J1Y2tTZXRWcGFPY1NkbkVuOworICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WUEFfT0NfU0ROX0VOIHJQTVVMZG9CdWNrR2V0VnBhT2NTZG5FbjsKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT1BfTU9ERSByUE1VTGRvQnVja1NldE9wTW9kZTsKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9URVJfVk9MVEFHRSByUE1VTGRvQnVja1NldFZvdGVyVm9sdGFnZTsKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfQlVDS19IV19PUF9NT0RFIHJQTVVMZG9CdWNrU2V0QnVja0h3T3BNb2RlOworICAgIFBNVV9DVFJMX0xET19CVUNLX0NMUl9CVUNLX0hXX09QX01PREUgclBNVUxkb0J1Y2tDbHJCdWNrSHdPcE1vZGU7CisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0hXX09QX01PREUgclBNVUxkb0J1Y2tTZXRId09wTW9kZTsKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19DTFJfSFdfT1BfTU9ERSByUE1VTGRvQnVja0Nsckh3T3BNb2RlOworCit9UE1VX0NUUkxfREFUQTsKKyNlbHNlIC8qIF9fQlVJTERfRE9NX18gKi8KKyNkZWZpbmUgUE1VX0NUUkxTIFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19DVFJMIHJQTVVMZG9CdWNrQ3RybDsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiByUE1VTGRvQnVja1NldEVuOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX0VOX1NUQVRVUyByUE1VTGRvQnVja0dldEVuU3RhdHVzOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1FJX01PREUgclBNVUxkb0J1Y2tHZXRRaU1vZGU7IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fRk9SQ0UgclBNVUxkb0J1Y2tTZXRFbkZvcmNlOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPTFRBR0UgclBNVUxkb0J1Y2tTZXRWb2x0YWdlOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPTFRBR0VfRU4gclBNVUxkb0J1Y2tTZXRWb2x0YWdlRW47IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfU0xFRVBfVk9MVEFHRSByUE1VTGRvQnVja1NldFNsZWVwVm9sdGFnZTsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9CVVJTVF9USFJFU0hPTEQgclBNVUxkb0J1Y2tTZXRCdXJzdFRocmVzaG9sZDsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9DVVJSRU5UX0xJTUlUIHJQTVVMZG9CdWNrU2V0Q3VycmVudExpbWl0OyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPTFRBR0VfQ0FMSUJSQVRJT05fQ09ERSByUE1VTGRvQnVja1NldFZvbHRhZ2VDYWxpYnJhdGlvbkNvZGU7IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfQklBU19DVVJSRU5UX0NBTElCUkFUSU9OX0NPREUgclBNVUxkb0J1Y2tTZXRCaWFzQ3VycmVudENhbGlicmF0aW9uQ29kZTsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9TVEJfRU4gclBNVUxkb0J1Y2tTZXRTdGJFbjsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9PQ19BVVRPX09GRiByUE1VTGRvQnVja1NldE9jQXV0b09mZjsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9SUyByUE1VTGRvQnVja1NldFJzOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09OX1NFTCByUE1VTGRvQnVja1NldE9uU2VsOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1NSQ0xLRU5fU0VMIHJQTVVMZG9CdWNrU2V0U3JjbGtlblNlbDsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9TVEJfVEQgclBNVUxkb0J1Y2tTZXRTdGJUZDsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9ORElTX0VOIHJQTVVMZG9CdWNrU2V0TmRpc0VuOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09DX1REIHJQTVVMZG9CdWNrU2V0T2NUZDsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9PQ0ZCX0VOIHJQTVVMZG9CdWNrU2V0T2NmYkVuOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZTSU1fR1BMRE9fRU4gclBNVUxkb0J1Y2tTZXRWc2ltR3BsZG9FbjsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WU0lNMl9HUExET19FTiByUE1VTGRvQnVja1NldFZzaW0yR3BsZG9FbjsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9TSU0yX0dQSU9fRU4gclBNVUxkb0J1Y2tTZXRTaW0yR3Bpb0VuOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0NDSV9TUkNMS0VOIHJQTVVMZG9CdWNrU2V0Q2NpU3JjbGtlbjsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9PQ19TVEFUVVMgclBNVUxkb0J1Y2tHZXRPY1N0YXR1czsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9RSV9PQ19TVEFUVVMgclBNVUxkb0J1Y2tHZXRRaU9jU3RhdHVzOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09DX0lOVF9FTiByUE1VTGRvQnVja1NldE9jSW50RW47IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19DTEVBUl9PQ19GTEFHIHJQTVVMZG9CdWNrQ2xlYXJPY0ZsYWc7IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfT0NfRkxBRyByUE1VTGRvQnVja0dldE9jRmxhZzsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT0xUQUdFX0xJU1QgclBNVUxkb0J1Y2tHZXRWb2x0YWdlTGlzdDsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9USEVSX1NIRE5fRU4gclBNVUxkb0J1Y2tTZXRUaGVyU2hkbkVuOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0xQX01PREVfU0VUIHJQTVVMZG9CdWNrU2V0THBNb2RlU2V0OyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX0xQX01PREUgclBNVUxkb0J1Y2tHZXRMcE1vZGU7IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTFBfU0VMIHJQTVVMZG9CdWNrU2V0THBTZWw7IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT05fQ1RSTCByUE1VTGRvQnVja1NldE9uQ3RybDsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUIHJQTVVMZG9CdWNrU2V0TW9kZXNldDsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9DT1QgclBNVUxkb0J1Y2tTZXRDb3RzZXQ7IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfQ09UIHJQTVVMZG9CdWNrR2V0Q290OyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX0NUUkwgclBNVUxkb0J1Y2tTZXRFbkN0cmw7IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fU0VMIHJQTVVMZG9CdWNrU2V0RW5TZWw7IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfU1JDTEtfTU9ERV9TRUwgclBNVUxkb0J1Y2tTZXRTcmNsa01vZGVTZWw7IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfU1JDTEtfRU5fU0VMIHJQTVVMZG9CdWNrU2V0U3JjbGtFblNlbDsgXAorICAgIFBNVV9DVFJMX0xET19TRVRfQ0FMIHJQTVVMZG9TZXRDYWw7IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9MVEFHRSByUE1VTGRvQnVja0dldFZvbHQ7IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9TRUxfQ1RSTCByUE1VTGRvQnVja0dldFZvc2VsQ3RybDsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT1NFTCByUE1VTGRvQnVja0dldFZvc2VsOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPU0VMX09OIHJQTVVMZG9CdWNrR2V0Vm9zZWxPbjsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT1NFTF9TTEVFUCByUE1VTGRvQnVja0dldFZvc2VsU2xlZXA7IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9TRUxfQ1RSTCByUE1VTGRvQnVja1NldFZvc2VsQ3RybDsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1NFTCByUE1VTGRvQnVja1NldFZvc2VsOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPU0VMX09OIHJQTVVMZG9CdWNrU2V0Vm9zZWxPbjsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1NFTF9TTEVFUCByUE1VTGRvQnVja1NldFZvc2VsU2xlZXA7IFwKKyAgICBQTVVfQ1RSTF9MRE9fU0VUX1ZUQ1hPMjRfU1dJVENIX0VOIHJQTVVMZG9CdWNrU2V0VnRjeG9Td2l0aDsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9GUFdNICByUE1VTGRvQnVja1NldEZwd207IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfRlBXTSAgclBNVUxkb0J1Y2tHZXRGcHdtOyBcCisgICAgUE1VX0NUUkxfVlBBX1NFVF9WT1NFTF9NQVBfRU4gclBNVVZwYVNldFZvc2VsTWFwRW47IFwKKyAgICBQTVVfQ1RSTF9WUEFfU0VUX0VOIHJQTVVWcGFTZXRFbjsgXAorICAgIFBNVV9DVFJMX1ZQQV9TRVRfVk9MVEFHRSByUE1VVnBhU2V0Vm9sdGFnZTsgXAorICAgIFBNVV9DVFJMX1ZQQV9DVFJMX1NFTCByUE1VVnBhQ3RybFNlbDsgXAorICAgIFBNVV9DVFJMX1ZQQV9HRVRfVk9MVEFHRV9MSVNUIHJQTVVWcGFHZXRWb2x0YWdlTGlzdDsgXAorICAgIFBNVV9DVFJMX1ZQQV9TRVRfQkFUX0xPVyByUE1VVnBhU2V0QmF0TG93OyBcCisgICAgUE1VX0NUUkxfVlBBX1NFVF9GUFdNIHJQTVVWcGFTZXRGcHdtOyBcCisgICAgUE1VX0NUUkxfVlBBX1NFVF9WT0xUQUdFX1NFTEVDVElPTl9UQUJMRSByUE1VVnBhU2V0Vm9sdGFnZVNlbGVjdGlvblRhYmxlOyBcCisgICAgUE1VX0NUUkxfVlBBX1NFVF9NQVBfU0VMIHJQTVVWcGFTZXRNYXBTZWw7IFwKKyAgICBQTVVfQ1RSTF9WSUJSX1NFVF9ESU1NSU5HX09OX0RVVFkgclBNVVZpYnJTZXREaW1taW5nT25EdXR5OyBcCisgICAgUE1VX0NUUkxfVlJGMThfU0VUX0ZQV00gclBNVVZyZjE4U2V0RnB3bTsgXAorICAgIFBNVV9DVFJMX1ZSRjE4X1NFVF9NT0RFU0VUIHJQTVVWcmYxOFNldE1vZGVzZXQ7IFwKKyAgICBQTVVfQ1RSTF9WUkYxOF9TRVRfQlVDS19MRE9fTU9ERSByUE1VVnJmMThTZXRCdWNrTGRvTW9kZTsgXAorICAgIFBNVV9DVFJMX1ZSRjFfU0VUX01PREVTRVRfQ0tQRE5fU0VUIHJQTVVWcmYxU2V0TW9kZXNldENrcGRuU2V0OyBcCisgICAgUE1VX0NUUkxfVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9DTFIgclBNVVZyZjFTZXRNb2Rlc2V0Q2twZG5DbHI7IFwKKyAgICBQTVVfQ1RSTF9WUkYxX0dFVF9NT0RFU0VUX0NLUEROIHJQTVVWcmYxR2V0TW9kZXNldENrcGRuOyBcCisgICAgUE1VX0NUUkxfU0lNTFNfU0VUX1NSU1RfQ09ORiByUE1VU2ltbHNTZXRTcnN0Q29uZjsgXAorICAgIFBNVV9DVFJMX1NJTUxTX1NFVF9TQ0xLX0NPTkYgclBNVVNpbWxzU2V0U2Nsa0NvbmY7IFwKKyAgICBQTVVfQ1RSTF9TSU1MU19TRVRfVERTRUwgclBNVVNpbWxzU2V0VGRzZWw7IFwKKyAgICBQTVVfQ1RSTF9TSU1BUF9TRVRfVERTRUwgclBNVVNpbWFwU2V0VGRzZWw7IFwKKyAgICBQTVVfQ1RSTF9TSU1MU19TRVRfUkRTRUwgclBNVVNpbWxzU2V0UmRzZWw7IFwKKyAgICBQTVVfQ1RSTF9TSU1BUF9TRVRfUkRTRUwgclBNVVNpbWFwU2V0UmRzZWw7IFwKKyAgICBQTVVfQ1RSTF9TSU1fU0VUX1NUQl9TSU9fTU9ERSByUE1VU2ltU2V0U3RiU2lvTW9kZTsgXAorICAgIFBNVV9DVFJMX1NJTVJTVF9TRVRfR1BJT19TRVQgclBNVVNpbXJzdFNldEdwaW9TZXQ7IFwKKyAgICBQTVVfQ1RSTF9TSU1SU1RfU0VUX0dQSU9fQ0xSIHJQTVVTaW1yc3RTZXRHcGlvQ2xyOyBcCisgICAgUE1VX0NUUkxfT0NUTF9TRVRfU0lNX0FQX1NSU1QgclBNVU9jdGxTZXRTaW1BcFNyc3Q7IFwKKyAgICBQTVVfQ1RSTF9PQ1RMX1NFVF9TSU1fQVBfU0NMSyByUE1VT2N0bFNldFNpbUFwU2NsazsgXAorICAgIFBNVV9DVFJMX09DVExfU0VUX1NJTUxTX1NSU1QgclBNVU9jdGxTZXRTaW1sc1Nyc3Q7IFwKKyAgICBQTVVfQ1RSTF9PQ1RMX1NFVF9TSU1MU19TQ0xLIHJQTVVPY3RsU2V0U2ltbHNTY2xrOyBcCisgICAgUE1VX0NUUkxfU1BLX1NFVF9FTiByUE1VU3BrU2V0RW47IFwKKyAgICBQTVVfQ1RSTF9TUEtfU0VUX01PREUgclBNVVNwa1NldE1vZGU7IFwKKyAgICBQTVVfQ1RSTF9TUEtfR0VUX01PREUgclBNVVNwa0dldE1vZGU7IFwKKyAgICBQTVVfQ1RSTF9TUEtfU0VUX09DX0FVVE9fT0ZGIHJQTVVTcGtTZXRPY0F1dG9PZmY7IFwKKyAgICBQTVVfQ1RSTF9TUEtfU0VUX1ZPTF9WQUxVRSByUE1VU3BrU2V0Vm9sVmFsdWU7IFwKKyAgICBQTVVfQ1RSTF9TUEtfR0VUX1ZPTF9WQUxVRSByUE1VU3BrR2V0Vm9sVmFsdWU7IFwKKyAgICBQTVVfQ1RSTF9TUEtfU0VUX1ZPTCByUE1VU3BrU2V0Vm9sOyBcCisgICAgUE1VX0NUUkxfU1BLX0dFVF9WT0wgclBNVVNwa0dldFZvbDsgXAorICAgIFBNVV9DVFJMX1NQS19TRVRfU0xFV19SQVRFIHJQTVVTcGtTZXRTbGV3UmF0ZTsgXAorICAgIFBNVV9DVFJMX1NQS19TRVRfQ0FMSUJSX0VOIHJQTVVTcGtTZXRDYWxpYnJFbjsgXAorICAgIFBNVV9DVFJMX1NQS19TRVRfQ0FMSUJSX1NFTCByUE1VU3BrU2V0Q2FsaWJyU2VsOyBcCisgICAgUE1VX0NUUkxfRkxBU0hMRURfU0VUX0VOIHJQTVVGbGFzaGxlZFNldEVuOyBcCisgICAgUE1VX0NUUkxfRkxBU0hMRURfU0VUX01PREUgclBNVUZsYXNobGVkU2V0TW9kZTsgXAorICAgIFBNVV9DVFJMX0ZMQVNITEVEX1NFVF9TRUwgclBNVUZsYXNobGVkU2V0U2VsOyBcCisgICAgUE1VX0NUUkxfS1BMRURfU0VUX0VOIHJQTVVLcGxlZFNldEVuOyBcCisgICAgUE1VX0NUUkxfS1BMRURfU0VUX01PREUgclBNVUtwbGVkU2V0TW9kZTsgXAorICAgIFBNVV9DVFJMX0tQTEVEX1NFVF9TRUwgclBNVUtwbGVkU2V0U2VsOyBcCisgICAgUE1VX0NUUkxfS1BMRURfU0VUX0ZSRVFVRU5DWV9ESVZJU0lPTiByUE1VS3BsZWRTZXRGcmVxdWVuY3lEaXZpc2lvbjsgXAorICAgIFBNVV9DVFJMX0tQTEVEX1NFVF9ESU1NSU5HX09OX0RVVFkgclBNVUtwbGVkU2V0RGltbWluZ09uRHV0eTsgXAorICAgIFBNVV9DVFJMX0NIUl9TRVRfQURDX01FQVNVUkVfRU4gclBNVUNoclNldEFkY01lYXN1cmVFbjsgXAorICAgIFBNVV9DVFJMX0NIUl9TRVRfV0RUX1RJTUVSIHJQTVVDaHJTZXRXZHRUaW1lcjsgXAorICAgIFBNVV9DVFJMX0NIUl9TRVRfV0RUX0lOVF9FTiByUE1VQ2hyU2V0V2R0SW50RW47IFwKKyAgICBQTVVfQ1RSTF9DSFJfU0VUX1dEVF9FTiByUE1VQ2hyU2V0V2R0RW47IFwKKyAgICBQTVVfQ1RSTF9DSFJfU0VUX0NIUl9FTiByUE1VQ2hyU2V0Q2hyRW47IFwKKyAgICBQTVVfQ1RSTF9DSFJfU0VUX0NIUl9GT1JDRV9FTiByUE1VQ2hyU2V0Q2hyRm9yY2VFbjsgXAorICAgIFBNVV9DVFJMX0NIUl9HRVRfQ0hSX0RFVF9TVEFUVVMgclBNVUNockdldENockRldFN0YXR1czsgXAorICAgIFBNVV9DVFJMX0NIUl9HRVRfQ0hSX0NVUlJFTlQgclBNVUNockdldENockN1cnJlbnQ7IFwKKyAgICBQTVVfQ1RSTF9DSFJfR0VUX0NIUl9DVVJSRU5UX0xJU1QgclBNVUNockdldENockN1cnJlbnRMaXN0OyBcCisgICAgUE1VX0NUUkxfQ0hSX1NFVF9DSFJfQ1VSUkVOVCByUE1VQ2hyU2V0Q2hyQ3VycmVudDsgXAorICAgIFBNVV9DVFJMX0NIUl9HRVRfQ1ZfREVURUNUSU9OX1NUQVRVUyByUE1VQ2hyR2V0Q3ZEZXRlY3Rpb25TdGF0dXM7IFwKKyAgICBQTVVfQ1RSTF9DSFJfU0VUX0NWX0RFVEVDVElPTl9FTiByUE1VQ2hyU2V0Q3ZEZXRlY3Rpb25FbjsgXAorICAgIFBNVV9DVFJMX0NIUl9TRVRfQ1ZfREVURUNUSU9OX1ZPTFRBR0UgclBNVUNoclNldEN2RGV0ZWN0aW9uVm9sdGFnZTsgXAorICAgIFBNVV9DVFJMX0NIUl9TRVRfQ1NEQUNfRU4gclBNVUNoclNldENzZGFjRW47IFwKKyAgICBQTVVfQ1RSTF9DSFJfR0VUX0lTX0JBVFRFUllfT04gclBNVUNockdldElzQmF0dGVyeU9uOyBcCisgICAgUE1VX0NUUkxfQ0hSX0dFVF9JU19DSFJfVkFMSUQgclBNVUNockdldElzQ2hyVmFsaWQ7IFwKKyAgICBQTVVfQ1RSTF9DSFJfU0VUX0hWX0RFVEVDVElPTl9WT0xUQUdFIHJQTVVDaHJTZXRIdkRldGVjdGlvblZvbHRhZ2U7IFwKKyAgICBQTVVfQ1RSTF9DSFJfR0VUX0hWX0RFVEVDVElPTl9WT0xUQUdFX0xJU1QgclBNVUNockdldEh2RGV0ZWN0aW9uVm9sdGFnZUxpc3Q7IFwKKyAgICBQTVVfQ1RSTF9DSFJfU0VUX1ZCQVRfT1ZfREVURUNUSU9OX1ZPTFRBR0UgclBNVUNoclNldFZiYXRPdkRldGVjdGlvblZvbHRhZ2U7IFwKKyAgICBQTVVfQ1RSTF9DSFJfU0VUX0JBVF9IVF9FTiByUE1VQ2hyU2V0QmF0SHRFbjsgXAorICAgIFBNVV9DVFJMX0NIUl9TRVRfT1RHX0JWQUxJRF9FTiByUE1VQ2hyU2V0T3RnQnZhbGlkRW47IFwKKyAgICBQTVVfQ1RSTF9DSFJfU0VUX0NWX01PREUgclBNVUNoclNldEN2TW9kZTsgXAorICAgIFBNVV9DVFJMX0NIUl9TRVRfQ1NEQUNfTU9ERSByUE1VQ2hyU2V0Q3NkYWNNb2RlOyBcCisgICAgUE1VX0NUUkxfQ0hSX1NFVF9UUkFDS0lOR19FTiByUE1VQ2hyU2V0VHJhY2tpbmdFbjsgXAorICAgIFBNVV9DVFJMX0NIUl9TRVRfSFdDVl9FTiByUE1VQ2hyU2V0SHdjdkVuOyBcCisgICAgUE1VX0NUUkxfQ0hSX1NFVF9VTENfREVUX0VOIHJQTVVDaHJTZXRVbGNEZXRFbjsgXAorICAgIFBNVV9DVFJMX0NIUl9TRVRfQkMxMV9QVUxMVVBfRU4gclBNVUNoclNldEJjMTFQdWxsdXBFbjsgXAorICAgIFBNVV9DVFJMX0NIUl9TRVRfTE9XX0lDSF9EQiByUE1VQ2hyU2V0TG93SWNoRGI7IFwKKyAgICBQTVVfQ1RSTF9DSFJfU0VUX1ZCQVRfQ1ZfQ0FMSUJSQVRJT04gclBNVUNoclNldFZiYXRDdkNhbGlicmF0aW9uOyBcCisgICAgUE1VX0NUUkxfQ0hSX0dFVF9DQ19ERVQgclBNVUNockdldENjRGV0OyBcCisgICAgUE1VX0NUUkxfQkxfU0VUX0VOIHJQTVVCbFNldEVuOyBcCisgICAgUE1VX0NUUkxfQkxfU0VUX0lOSVQgclBNVUJsU2V0SW5pdDsgXAorICAgIFBNVV9DVFJMX0JMX0dFVF9TVVBQT1JUX0xFVkVMIHJQTVVCbEdldFN1cHBvcnRMZXZlbDsgXAorICAgIFBNVV9DVFJMX0JMX0dFVF9VU0VfUFdNX1FVRVJZIHJQTVVCbEdldFVzZVB3bVF1ZXJ5OyBcCisgICAgUE1VX0NUUkxfQk9PU1RfU0VUX0VOIHJQTVVCb29zdFNldEVuOyBcCisgICAgUE1VX0NUUkxfQk9PU1RfU0VUX0NVUlJFTlRfTElNSVQgclBNVUJvb3N0U2V0Q3VycmVudExpbWl0OyBcCisgICAgUE1VX0NUUkxfQk9PU1RfU0VUX0NMS19DQUwgclBNVUJvb3N0U2V0Q2xrQ2FsOyBcCisgICAgUE1VX0NUUkxfQk9PU1RfU0VUX1NZTkNfRU4gclBNVUJvb3N0U2V0U3luY0VuOyBcCisgICAgUE1VX0NUUkxfQk9PU1RfU0VUX1ZPTFRBR0UgclBNVUJvb3N0U2V0Vm9sdGFnZTsgXAorICAgIFBNVV9DVFJMX0JPT1NUX1NFVF9MRVZFTCByUE1VQm9vc3RTZXRMZXZlbDsgXAorICAgIFBNVV9DVFJMX0lTSU5LX1NFVF9FTiByUE1VSXNpbmtTZXRFbjsgXAorICAgIFBNVV9DVFJMX0lTSU5LX1NFVF9NT0RFIHJQTVVJc2lua1NldE1vZGU7IFwKKyAgICBQTVVfQ1RSTF9JU0lOS19TRVRfU1RFUCByUE1VSXNpbmtTZXRTdGVwOyBcCisgICAgUE1VX0NUUkxfSVNJTktfU0VUX0ZPUkNFX09GRiByUE1VSXNpbmtTZXRGb3JjZU9mZjsgXAorICAgIFBNVV9DVFJMX0lTSU5LX1NFVF9ESU1NSU5HX09OX0RVVFkgclBNVUlzaW5rU2V0RGltbWluZ09uRHV0eTsgXAorICAgIFBNVV9DVFJMX0lTSU5LX1NFVF9GUkVRVUVOQ1lfRElWSVNJT04gclBNVUlzaW5rU2V0RnJlcXVlbmN5RGl2aXNpb247IFwKKyAgICBQTVVfQ1RSTF9BRENfU0VUX1JRU1QgclBNVUFkY1NldFJxc3Q7IFwKKyAgICBQTVVfQ1RSTF9BRENfQ0xSX1JRU1QgclBNVUFkY0NsclJxc3Q7IFwKKyAgICBQTVVfQ1RSTF9BRENfR0VUX1JEWV9NRCByUE1VQWRjR2V0UmR5TWQ7IFwKKyAgICBQTVVfQ1RSTF9BRENfR0VUX09VVF9NRCByUE1VQWRjR2V0T3V0TWQ7IFwKKyAgICBQTVVfQ1RSTF9NSVNDX1NFVF9STEVEX0VOIHJQTVVNaXNjU2V0UmxlZEVuOyBcCisgICAgUE1VX0NUUkxfTUlTQ19TRVRfR0xFRF9FTiByUE1VTWlzY1NldEdsZWRFbjsgXAorICAgIFBNVV9DVFJMX01JU0NfU0VUX0JMRURfRU4gclBNVU1pc2NTZXRCbGVkRW47IFwKKyAgICBQTVVfQ1RSTF9NSVNDX0dFVF9DSUQgclBNVU1pc2NHZXRDaWQ7IFwKKyAgICBQTVVfQ1RSTF9NSVNDX0dFVF9FQ09fVkVSU0lPTiByUE1VTWlzY0dldEVjb1ZlcnNpb247IFwKKyAgICBQTVVfQ1RSTF9NSVNDX0dFVF9IV19WRVJTSU9OIHJQTVVNaXNjR2V0SHdWZXJzaW9uOyBcCisgICAgUE1VX0NUUkxfTUlTQ19TRVRfUkVHSVNURVJfVkFMVUUgclBNVU1pc2NTZXRSZWdpc3RlclZhbHVlOyBcCisgICAgUE1VX0NUUkxfTUlTQ19HRVRfUkVHSVNURVJfVkFMVUUgclBNVU1pc2NHZXRSZWdpc3RlclZhbHVlOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09QX0VOIHJQTVVMZG9CdWNrU2V0T3BFbjsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX0NMUl9PUF9FTiByUE1VTGRvQnVja0Nsck9wRW47IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfSFdfT1BfQ0ZHIHJQTVVMZG9CdWNrU2V0SHdPcDsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX0NMUl9IV19PUF9DRkcgclBNVUxkb0J1Y2tDbHJId09wOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0dPX09OX09QIHJQTVVMZG9CdWNrU2V0R29Pbk9wOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0dPX0xQX09QIHJQTVVMZG9CdWNrU2V0R29McE9wOyBcCisgICAgUE1VX0NUUkxfVE9QX1NFVF9TUkNMS0VOX0lOX0VOIHJQTVVUb3BTZXRTcmNsa2VuSW5FbjsgXAorICAgIFBNVV9DVFJMX1RPUF9TRVRfU1JDTEtFTl9JTl9NT0RFIHJQTVVUb3BTZXRTcmNsa2VuSW5Nb2RlOyBcCisgICAgUE1VX0NUUkxfRENYT19TRVRfUkVHSVNURVJfVkFMVUUgclBNVURjeG9TZXRSZWdpc3RlclZhbHVlOyBcCisgICAgUE1VX0NUUkxfRENYT19HRVRfUkVHSVNURVJfVkFMVUUgclBNVURjeG9HZXRSZWdpc3RlclZhbHVlOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPQ0FMIHJQTVVMZG9CdWNrU2V0Vm9jYWw7IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9DQUwgclBNVUxkb0J1Y2tHZXRWb2NhbDsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1RSSU0gclBNVUxkb0J1Y2tTZXRWb3RyaW07IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9UUklNIHJQTVVMZG9CdWNrR2V0Vm90cmltOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZQQV9PQ19TRE5fU1RBVFVTIHJQTVVMZG9CdWNrU2V0VnBhT2NTZG5TdGF0dXM7IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVlBBX09DX1NETl9TVEFUVVMgclBNVUxkb0J1Y2tHZXRWcGFPY1NkblN0YXR1czsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WUEFfT0NfU0ROX0VOIHJQTVVMZG9CdWNrU2V0VnBhT2NTZG5FbjsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WUEFfT0NfU0ROX0VOIHJQTVVMZG9CdWNrR2V0VnBhT2NTZG5FbjsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9PUF9NT0RFIHJQTVVMZG9CdWNrU2V0T3BNb2RlOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPVEVSX1ZPTFRBR0UgclBNVUxkb0J1Y2tTZXRWb3RlclZvbHRhZ2U7IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfQlVDS19IV19PUF9NT0RFIHJQTVVMZG9CdWNrU2V0QnVja0h3T3BNb2RlOyBcCisgICAgUE1VX0NUUkxfTERPX0JVQ0tfQ0xSX0JVQ0tfSFdfT1BfTU9ERSByUE1VTGRvQnVja0NsckJ1Y2tId09wTW9kZTsgXAorICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9IV19PUF9NT0RFIHJQTVVMZG9CdWNrU2V0SHdPcE1vZGU7IFwKKyAgICBQTVVfQ1RSTF9MRE9fQlVDS19DTFJfSFdfT1BfTU9ERSByUE1VTGRvQnVja0Nsckh3T3BNb2RlOworCisjZW5kaWYgLyogX19CVUlMRF9ET01fXyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NUUkxfQ01EIGZvciBQTVUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICNpZmRlZiBfX0JVSUxEX0RPTV9fCisvKiBUaGUgUE1VIENvbW1hbmQgVmFsdWVzIGluIERDTF9DVFJMX0NNRF9UIEVudW0gb2YgZGNsLmggKi8KK3R5cGVkZWYgZW51bSB7CisgICAgTERPX0JVQ0tfU0VUX0NNRFNfU1RBUlQgPSAwLCAvKiBGb3IgaW50ZXJuYWwgdXNlICAqLworICAgIExET19CVUNLX0NUUkwsIC8qIEZvciBpbnRlcm5hbCB1c2UgICovCisgICAgTERPX0JVQ0tfU0VUX0VOLCAvKiBlbmFibGUgbGRvL2J1Y2sgKi8KKyAgICBMRE9fQlVDS19HRVRfRU5fU1RBVFVTLCAvKiBHZXQgTERPL0JVQ0sgRW5hYmxlIFN0YXR1cyAqLworICAgIExET19CVUNLX0dFVF9RSV9NT0RFLCAvKiBHZXQgTERPL0JVQ0sgUUkgTW9kZSAqLworICAgIExET19CVUNLX1NFVF9FTl9GT1JDRSwgLyogc2V0IGxkby9idWNrIGZvcmNlIGVuYWJsZSAqLworICAgIExET19CVUNLX1NFVF9WT0xUQUdFLCAvKiBzZXQgbGRvL2J1Y2sgdm9sdGFnZSAqLworICAgIExET19CVUNLX1NFVF9WT0xUQUdFX0VOLCAvKiBzZXQgbGRvL2J1Y2sgdm9sdGFnZSBhbmQgZW5hYmxlICovCisgICAgTERPX0JVQ0tfU0VUX1NMRUVQX1ZPTFRBR0UsIC8qIHNldCBsZG8vYnVjayBzbGVlcCB2b2x0YWdlICovCisgICAgTERPX0JVQ0tfU0VUX0JVUlNUX1RIUkVTSE9MRCA9IDUwMCwgLyogc2V0IGxkby9idWNrIGJ1cnN0IHRocmVzaG9sZCAqLworICAgIExET19CVUNLX1NFVF9DVVJSRU5UX0xJTUlULCAvKiBzZXQgbGRvL2J1Y2sgY3VycmVudCBsaW1pdCAqLworICAgIExET19CVUNLX1NFVF9WT0xUQUdFX0NBTElCUkFUSU9OX0NPREUsIC8qIHNldCBsZG8vYnVjayB2b2x0YWdlIGNhbGlicmF0aW9uIGNvZGUgKi8KKyAgICBMRE9fQlVDS19TRVRfQklBU19DVVJSRU5UX0NBTElCUkFUSU9OX0NPREUsIC8qIHNldCBsZG8vYnVjayBiaWFzIGN1cnJlbnQgY2FsaWJyYXRpb24gY29kZSAqLworICAgIExET19CVUNLX1NFVF9TVEJfRU4sIC8qIGVuYWJsZSBsZG8vYnVjayBzb2Z0IHN0YXJ0ICovCisgICAgTERPX0JVQ0tfU0VUX09DX0FVVE9fT0ZGLCAvKiBlbmFibGUgdG8gcG93ZXItb2ZmIGF1dG9tYXRpY2FsbHkgaWYgb2NfZmxhZyBiZWVuIGFzc2VydGVkICovCisgICAgTERPX0JVQ0tfU0VUX1JTLCAvKiBzZXQgbGRvL2J1Y2sgbG9jYWwvcmVtb3RlIHNlbnNlICovCisgICAgTERPX0JVQ0tfU0VUX09OX1NFTCwgLyogZW5hYmxlIGNvbnRyb2wgc2VsZWN0aW9uLCBoYXJkd2FyZS9zb2Z0d2FyZSAqLworICAgIExET19CVUNLX1NFVF9TUkNMS0VOX1NFTCwgLyogaC93IHNyY2xrIGVuYWJsZSBzZWxlY3Rpb24gKi8KKyAgICBMRE9fQlVDS19TRVRfU1RCX1RELCAvKiBzZXQgbGRvL2J1Y2sgZGVnbGl0Y2ggZGVsYXkgdGltZSBmb3Igc29mdCBzdGFydCAqLworICAgIExET19CVUNLX1NFVF9ORElTX0VOLCAvKiBlbmFibGUgbGRvL2J1Y2sgTk1PUyBkaXNjaGFyZ2UgKi8KKyAgICBMRE9fQlVDS19TRVRfT0NfVEQsIC8qIHNldCBsZG8vYnVjayBkZWdsaXRjaCB0aW1lIGNvbnN0YW50IGZvciBvdmVyLWN1cnJlbnQgc3RhdHVzIGZyb20gUE1VIHRvIGdlbmVyYXRlIG9jX2ZsYWcgKi8KKyAgICBMRE9fQlVDS19TRVRfT0NGQl9FTiwgLyogZW5hYmxlIGxkby9idWNrIG92ZXItY3VycmVudCBmb2xkLWJhY2sgKi8KKyAgICBMRE9fQlVDS19TRVRfVlNJTV9HUExET19FTiwgLyogc2VsZWN0IFZTSU0gTERPIGVuYWJsZSAmIHZvbHRhZ2UgY29udHJvbGxlZCBieSBTSU0gY29udHJvbGxlciBvciByZWdpc3RlciAqLworICAgIExET19CVUNLX1NFVF9WU0lNMl9HUExET19FTiwgLyogc2VsZWN0IFZTSU0yIExETyBlbmFibGUgJiB2b2x0YWdlIGNvbnRyb2xsZWQgYnkgU0lNMiBjb250cm9sbGVyIG9yIHJlZ2lzdGVyICovCisgICAgTERPX0JVQ0tfU0VUX1NJTTJfR1BJT19FTiwgLyogc2V0IFNJTTIgR1BJTyBlbmFibGUgKi8KKyAgICBMRE9fQlVDS19TRVRfQ0NJX1NSQ0xLRU4sIC8qIGVuYWJsZSBTUkNMS0VOQSB0byBQTUlDIGZvcmNlIGVuYWJsZSBjb250cm9sIHNpZ25hbCAqLworICAgIExET19CVUNLX0dFVF9PQ19TVEFUVVMsIC8qIEdldCBMRE8vQlVDSyBPdmVyIEN1cnJlbnQgU3RhdHVzICovCisgICAgTERPX0JVQ0tfR0VUX1FJX09DX1NUQVRVUywgLyogR2V0IExETy9CVUNLIFFJIE92ZXIgQ3VycmVudCBTdGF0dXMgKi8KKyAgICBMRE9fQlVDS19TRVRfT0NfSU5UX0VOLCAvKiBlbmFibGUgb2MgaW50ZXJydXB0IG9mIGEgbGRvIG9yIGJ1Y2sgKi8KKyAgICBMRE9fQlVDS19DTEVBUl9PQ19GTEFHLCAvKiBjbGVhciBvYyBmbGFnIG9mIGxkbyBvciBidWNrICovCisgICAgTERPX0JVQ0tfR0VUX09DX0ZMQUcsIC8qIGdldCBvYyBmbGFnIG9mIGxkbyBvciBidWNrICovCisgICAgTERPX0JVQ0tfR0VUX1ZPTFRBR0VfTElTVCwgLyogZ2V0IHZvbHRhZ2UgbGlzdCBvZiBsZG8gb3IgYnVjayAqLworICAgIExET19CVUNLX1NFVF9USEVSX1NIRE5fRU4sIC8qIFNldCBMb3cgUG93ZXIgTW9kZSAqLworICAgIExET19CVUNLX1NFVF9MUF9NT0RFX1NFVCwgLyogU2V0IExvdyBQb3dlciBNb2RlICovCisgICAgTERPX0JVQ0tfR0VUX0xQX01PREUsIC8qIGdldCBscCBtb2RlIG9mIGxkbyBvciBidWNrICovCisgICAgTERPX0JVQ0tfU0VUX0xQX1NFTCwgLyogU2V0IExvdyBQb3dlciBNb2RlIFNlbGVjdGlvbiAqLworICAgIExET19CVUNLX1NFVF9PTl9DVFJMLCAvKiBTZXQgT24gQ29udHJvbCBNb2RlICovCisgICAgTERPX0JVQ0tfU0VUX01PREVTRVQsIC8qIFN3aXRjaCBiZXR3ZWVuIGZvcmNlIFBXTSBtb2RlIGFuZCBBVVRPIE1vZGUgKi8KKyAgICBMRE9fQlVDS19TRVRfQ09ULCAvKiBTd2l0Y2ggYmV0d2VlbiBmb3JjZSBDT1QgbW9kZSBhbmQgQVVUTyBNb2RlICovCisgICAgTERPX0JVQ0tfR0VUX0NPVCwgLyogU3dpdGNoIGJldHdlZW4gZm9yY2UgQ09UIG1vZGUgYW5kIEFVVE8gTW9kZSAqLworICAgIExET19CVUNLX1NFVF9FTl9DVFJMLCAvKiBFbmFibGUgQ29udHJvbCAqLworICAgIExET19CVUNLX1NFVF9FTl9TRUwsIC8qIEVuYWJsZSBTZWxlY3Rpb24gKi8KKyAgICBMRE9fQlVDS19TRVRfU1JDTEtfTU9ERV9TRUwsIC8qIEhXIGxvdyBwb3dlciBtb2RlIHNyY2xrIHNlbGVjdGlvbiAqLworICAgIExET19CVUNLX1NFVF9TUkNMS19FTl9TRUwsIC8qIEVuYWJsZSBTZWxlY3Rpb24gKi8KKyAgICBMRE9fU0VUX0NBTCwgLyogbGRvIG91dHB1dCB2b2x0YWdlIGNhbGlicmF0aW9uICovCisgICAgTERPX0JVQ0tfR0VUX1ZPTFRBR0UsIC8qIGdldCB2b2x0YWdlIG9mIGxkbyBvciBidWNrICovCisgICAgTERPX0JVQ0tfR0VUX1ZPU0VMX0NUUkwsIC8qIGdldCB2b3NlbCBjdHJsIGJ5IHN3IG9yIGh3ICovCisgICAgTERPX0JVQ0tfR0VUX1ZPU0VMLCAvKiBnZXQgdm9zZWwgICovCisgICAgTERPX0JVQ0tfR0VUX1ZPU0VMX09OLCAvKiBnZXQgdm9zZWwgb24gICovCisgICAgTERPX0JVQ0tfR0VUX1ZPU0VMX1NMRUVQLCAvKiBnZXQgdm9zZWwgIHNsZWVwICovCisgICAgTERPX0JVQ0tfU0VUX1ZPU0VMX0NUUkwsIC8qIHNldCB2b3NlbCBjdHJsIGJ5IHN3IG9yIGh3ICovCisgICAgTERPX0JVQ0tfU0VUX1ZPU0VMLCAvKiBzZXQgdm9zZWwgICovCisgICAgTERPX0JVQ0tfU0VUX1ZPU0VMX09OLCAvKiBzZXQgdm9zZWwgb24gICovCisgICAgTERPX0JVQ0tfU0VUX1ZPU0VMX1NMRUVQLCAvKiBzZXQgdm9zZWwgIHNsZWVwICovCisgICAgTERPX0JVQ0tfU0VUX1ZUQ1hPMjRfU1dJVENILCAvKiBzZXQgdnRjeG8yNCBzd2l0Y2ggKi8KKyAgICBMRE9fQlVDS19TRVRfRlBXTSwgLyogRm9yIGludGVybmFsIHVzZSAgKi8KKyAgICBMRE9fQlVDS19HRVRfRlBXTSwgLyogRm9yIGludGVybmFsIHVzZSAgKi8KKyAgICBMRE9fQlVDS19TRVRfQ01EU19FTkQsIC8qIEZvciBpbnRlcm5hbCB1c2UgICovCisgICAgVklCUl9TRVRfRElNTUlOR19PTl9EVVRZID0gOTAwLCAvKiBtb2RpZnkgdmlicmF0b3IgZGltbWluZyBkdXR5ICovCisgICAgVlBBX1NFVF9WT0xUQUdFID0gMTAwMCwgLyogc2V0IFZQQTAtNyB2b2x0YWdlICovCisgICAgVlBBX1NFVF9WT1NFTF9NQVBfRU4sIC8qIGVuYWJsZXMgdm9sdGFnZSBtYXBwaW5nIHRvIHNlbGVjdCBWUEFfVk9TRUwgZnJvbSB2cGEgdm9zZWwgdGFibGUgZGVwZW5kaW5nIG9uIHZwYV90YWJsZV9zZWwgKi8KKyAgICBWUEFfU0VUX0VOLCAvKiBlbmFibGUgVlBBICovCisgICAgVlBBX0NUUkxfU0VMLCAvKiBDb250cm9sIHRoZSBWUEEgU291cnNlICovCisgICAgVlBBX0dFVF9WT0xUQUdFX0xJU1QsIC8qIGdldCBWUEEgc3VwcG9ydGVkIHZvbHRhZ2UgbGlzdCAqLworICAgIFZQQV9TRVRfQkFUX0xPVywgLyogQkFUX0xPVyB0byBpbmRpY2F0ZSBWUEEgYnktcGFzcyBtb2RlICg2MzI2KSAqLworICAgIFZQQV9TRVRfRlBXTSwgLyogc2V0IFZQQSBGUFdNICovCisgICAgVlBBX1NFVF9WT0xUQUdFX1NFTEVDVElPTl9UQUJMRSwgLyogdm9sdGFnZSBzZWxlY3Rpb24gd2hlbiB2cGFfdm9zZWxfbWFwX2VuPTEgKi8KKyAgICBWUEFfU0VUX01BUF9TRUwsIC8qIFNlbGVjdHMgb25lIGVudHJ5IGluIHZwYSB2b3NlbCB0YWJsZSB0byB1c2UgZm9yIFZQQV9WT1NFTCAqLworICAgIFZSRjE4X1NFVF9NT0RFU0VULCAvKiBzZXQgVlJGMTggRm9yY2UgUFdNIE1vZGUgKi8KKyAgICBWUkYxOF9TRVRfRlBXTSwgLyogc2V0IFZSRjE4IEZQV00gKi8KKyAgICBWUkYxOF8yX1NFVF9GUFdNLCAvKiBzZXQgVlJGMThfMiBGUFdNICovCisgICAgVlJGMThfU0VUX0JVQ0tfTERPX01PREUsIC8qIHNldCBWUkYxOCBCdWNrL0xETyBNb2RlICovCisgICAgVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9TRVQsIC8qIFZSRjEgTU9ERVNFVCBDbG9jayBTRVQgKi8KKyAgICBWUkYxX1NFVF9NT0RFU0VUX0NLUEROX0NMUiwgLyogVlJGMSBNT0RFU0VUIENsb2NrIENMUiAqLworICAgIFZSRjFfR0VUX01PREVTRVRfQ0tQRE4sIC8qIEVuYWJsZSBTZWxlY3Rpb24gKi8KKyAgICBTSU1MU19TRVRfU1JTVF9DT05GLCAvKiBTZXQgU0lNTFNfU1JTVCAqLworICAgIFNJTUxTX1NFVF9TQ0xLX0NPTkYsIC8qIFNldCBTSU1MU19TQ0xLICovCisgICAgU0lNTFNfU0VUX1REU0VMLCAvKiBTZXQgU0lNTFNfVERTRUwgKi8KKyAgICBTSU1BUF9TRVRfVERTRUwsIC8qIFNldCBTSU1BUF9SRFNFTCAqLworICAgIFNJTUxTX1NFVF9SRFNFTCwgLyogU2V0IFNJTUxTX1REU0VMICovCisgICAgU0lNQVBfU0VUX1JEU0VMLCAvKiBTZXQgU0lNQVBfUkRTRUwgKi8KKyAgICBTSU1fU0VUX1NUQl9TSU9fTU9ERSwgLyogU2V0IFNJTSBTVEIgU0lPIE1vZGUgKi8KKyAgICBTSU1SU1RfU0VUX0dQSU9fU0VULCAvKiBTZXQgU0lNUlNUIEdQSU8gKi8KKyAgICBTSU1SU1RfU0VUX0dQSU9fQ0xSLCAvKiBDbGVhciBTSU1SU1QgR1BJTyAqLworICAgIE9DVExfU0VUX1NJTV9BUF9TUlNULCAvKiBTZXQgT0NUTF9TSU1fQVBfU1JTVCAqLworICAgIE9DVExfU0VUX1NJTV9BUF9TQ0xLLCAvKiBTZXQgT0NUTF9TSU1fQVBfU0NMSyAqLworICAgIE9DVExfU0VUX1NJTUxTX1NSU1QsIC8qIFNldCBPQ1RMX1NJTUxTX1NSU1QgKi8KKyAgICBPQ1RMX1NFVF9TSU1MU19TQ0xLLCAvKiBTZXQgT0NUTF9TSU1MU19TQ0xLICovCisgICAgU1BLX1NFVF9FTiA9IDIwMDAsIC8qIGVuYWJsZSBzcGsgKi8KKyAgICBTUEtfU0VUX01PREUsIC8qIHNldCBzcGsgbW9kZSAqLworICAgIFNQS19HRVRfTU9ERSwgLyogZ2V0IHNwayBtb2RlICovCisgICAgU1BLX1NFVF9PQ19BVVRPX09GRiwgLyogZW5hYmxlIHNwayBvdmVyLWN1cnJlbnQgYXV0byBvZmYgKi8KKyAgICBTUEtfU0VUX1ZPTF9WQUxVRSwgLyogc2V0IHNwayB2b2x1bWUgKHJlZ2lzdGVyIHZhbHVlKSAqLworICAgIFNQS19HRVRfVk9MX1ZBTFVFLCAvKiBnZXQgc3BrIHZvbHVtZSAocmVnaXN0ZXIgdmFsdWUpICovCisgICAgU1BLX1NFVF9WT0wsIC8qIHNldCBzcGsgdm9sdW1lIChkYm0pICovCisgICAgU1BLX0dFVF9WT0wsIC8qIGdldCBzcGsgdm9sdW1lIChkYm0pICovCisgICAgU1BLX1NFVF9TTEVXX1JBVEUsIC8qIHNldCBzcGsgc2xldyByYXRlICovCisgICAgU1BLX1NFVF9DQUxJQlJfRU4sIC8qIHNldCBzcGsgQ2xhc3MgRCBvZmZzZXQgY2FsaWJyYXRpb24gZW5hYmxlICovCisgICAgU1BLX1NFVF9DQUxJQlJfU0VMLCAvKiBzZXQgc3BrIENsYXNzIEQgb2Zmc2V0IGNhbGlicmF0aW9uIHBhdGggKi8KKyAgICBLUExFRF9TRVRfRU4gPSAzMDAwLCAvKiBlbmFibGUga3BsZWQgKi8KKyAgICBLUExFRF9TRVRfTU9ERSwgLyogc2V0IGtwbGVkIG1vZGUgKHB3bS9yZWdpc3RlcikgKi8KKyAgICBLUExFRF9TRVRfU0VMLCAvKiBrcGxlZCBUdXJuIE9uIFJlc2lzdG9yIFNlbGVjdCAqLworICAgIEtQTEVEX1NFVF9GUkVRVUVOQ1lfRElWSVNJT04sIC8qIHNldCBrcGxlZCBmcmVxdWVuY3kgZGl2aXNpb24gKi8KKyAgICBLUExFRF9TRVRfRElNTUlOR19PTl9EVVRZLCAvKiBzZXQga3BsZWQgZGltbWluZyBkdXR5ICovCisgICAgRkxBU0hMRURfU0VUX0VOID0gNDAwMCwgLyogZW5hYmxlIGZsYXNobGVkICovCisgICAgRkxBU0hMRURfU0VUX01PREUsIC8qIHNldCBmbGFzaGxlZCBtb2RlIChwd20vcmVnc2l0ZXIpICovCisgICAgRkxBU0hMRURfU0VUX1NFTCwgLyoga3BsZWQgVHVybiBPbiBSZXNpc3RvciBTZWxlY3QgKi8KKyAgICBCTF9TRVRfSU5JVCA9IDUwMDAsIC8qIGJhY2tsaWdodCBpbml0IG1vZGUgKi8KKyAgICBCTF9TRVRfRU4sIC8qIGVuYWJsZSBiYWNrbGlnaHQgKi8KKyAgICBCTF9HRVRfU1VQUE9SVF9MRVZFTCwgLyogZ2V0IGJhY2tsaWdodCBzdXBwb3J0IGxldmVsICovCisgICAgQkxfR0VUX1VTRV9QV01fUVVFUlksIC8qIGdldCBiYWNrbGlnaHQgdXNlIHB3bSBxdWVyeSAqLworICAgIEJPT1NUX1NFVF9FTiA9IDYwMDAsIC8qIGVuYWJsZSBib29zdCAqLworICAgIEJPT1NUX1NFVF9DVVJSRU5UX0xJTUlULCAvKiBzZXQgYm9vc3QgY3VycmVudCBsaW1pdCAqLworICAgIEJPT1NUX1NFVF9DTEtfQ0FMLCAvKiBzZXQgYm9vc3QgY2xvY2sgY2FsICovCisgICAgQk9PU1RfU0VUX1NZTkNfRU4sIC8qIGVuYWJsZSBib29zdCBzeW5jICovCisgICAgQk9PU1RfU0VUX1ZPTFRBR0UsIC8qIHNldCBib29zdCB2b2x0YWdlICovCisgICAgQk9PU1RfU0VUX0xFVkVMLCAvKiBzZXQgYm9vc3QgbGV2ZWwgKi8KKyAgICBJU0lOS19TRVRfRU4gPSA3MDAwLCAvKiBlbmFibGUgaXNpbmsgKi8KKyAgICBJU0lOS19TRVRfTU9ERSwgLyogc2V0IGlzaW5rIG1vZGUgKi8KKyAgICBJU0lOS19TRVRfU1RFUCwgLyogc2V0IGlzaW5rIHN0ZXAgKi8KKyAgICBJU0lOS19TRVRfRk9SQ0VfT0ZGLCAvKiBzZXQgaXNpbmsgZm9yY2Ugb2ZmICovCisgICAgSVNJTktfU0VUX0NIQU5ORUwsIC8qIHNldCBpc2luayBjaGFubmVsICovCisgICAgSVNJTktfU0VUX0RJTU1JTkdfT05fRFVUWSwgLyogc2V0IGtwbGVkIGRpbW1pbmcgZHV0eSAqLworICAgIElTSU5LX1NFVF9GUkVRVUVOQ1lfRElWSVNJT04sIC8qIHNldCBrcGxlZCBmcmVxdWVuY3kgZGl2aXNpb24gKi8KKyAgICBDSFJfU0VUX0FEQ19NRUFTVVJFX0VOID0gODAwMCwgLyogZW5hYmxlIGFkYyBtZWFzdXJlICovCisgICAgQ0hSX1NFVF9XRFRfQ0xFQVIsIC8qIGNsZWFyIGNoYXJnZXIgd2R0ICovCisgICAgQ0hSX1NFVF9XRFRfVElNRVIsIC8qIHNldCBjaGFyZ2VyIHdkdCB0aW1lciAqLworICAgIENIUl9TRVRfV0RUX0lOVF9FTiwgLyogZW5hYmxlIGNoYXJnZXIgd2R0IGludGVycnVwdCAqLworICAgIENIUl9TRVRfV0RUX0VOLCAvKiBlbmFibGUgY2hhcmdlciB3ZHQgKi8KKyAgICBDSFJfU0VUX0NIUl9FTiwgLyogZW5hYmxlIGNoYXJnZXIgKi8KKyAgICBDSFJfU0VUX0NIUl9GT1JDRV9FTiwgLyogZm9yY2UgZW5hYmxlIGNoYXJnZXIgKi8KKyAgICBDSFJfR0VUX0NIUl9ERVRfU1RBVFVTLCAvKiBnZXQgY2hhcmdlciBkZXRlY3Rpb24gc3RhdHVzICovCisgICAgQ0hSX0dFVF9DSFJfQ1VSUkVOVCwgLyogZ2V0IGNoYXJnZXIgY3VycmVudCAqLworICAgIENIUl9HRVRfQ0hSX0NVUlJFTlRfTElTVCwgLyogZ2V0IGNoYXJnZXIgY3VycmVudCBsaXN0ICovCisgICAgQ0hSX1NFVF9DSFJfQ1VSUkVOVCwgLyogc2V0IGNoYXJnZXIgY3VycmVudCAqLworICAgIENIUl9HRVRfQ1ZfREVURUNUSU9OX1NUQVRVUywgLyogZ2V0IENWIGRldGVjdGlvbiBzdGF0dXMgKi8KKyAgICBDSFJfU0VUX0NWX0RFVEVDVElPTl9FTiwgLyogZW5hYmxlIENWIGRldGVjdGlvbiAqLworICAgIENIUl9TRVRfQ1ZfREVURUNUSU9OX1ZPTFRBR0UsIC8qIHNldCBDViB2b2x0YWdlICovCisgICAgQ0hSX1NFVF9DVl9ERVRFQ1RJT05fVk9MVEFHRV9DQUxJQlJBVElPTiwgLyogc2V0IENWIHZvbHRhZ2UgY2FsaWJyYXRpb24gKi8KKyAgICBDSFJfU0VUX0NTREFDX0VOLCAvKiBlbmFibGUgY3NkYWMgKi8KKyAgICBDSFJfR0VUX0lTX0JBVFRFUllfT04sIC8qIGNoZWNrIGlzIGJhdHRlcnkgb24gKi8KKyAgICBDSFJfR0VUX0lTX0NIUl9WQUxJRCwgLyogY2hlY2sgaXMgY2hhcmdlciB2YWxpZCAqLworICAgIENIUl9TRVRfSFZfREVURUNUSU9OX1ZPTFRBR0UsIC8qIHNldCBIViBkZXRlY3Rpb24gdm9sdGFnZSAqLworICAgIENIUl9HRVRfSFZfREVURUNUSU9OX1ZPTFRBR0VfTElTVCwgLyogZ2V0IEhWIGRldGVjdGlvbiB2b2x0YWdlIGxpc3QgKi8KKyAgICBDSFJfU0VUX1ZCQVRfT1ZfREVURUNUSU9OX1ZPTFRBR0UsIC8qIHNldCBiYXR0ZXJ5IE9WIGRldGVjdGlvbiB2b2x0YWdlICovCisgICAgQ0hSX1NFVF9CQVRfSFRfRU4sIC8qIGVuYWJsZSBiYXR0ZXJ5IGhpZ2ggdGVtcHR1cmUgZGV0ZWN0aW9uICovCisgICAgQ0hSX1NFVF9PVEdfQlZBTElEX0VOLCAvKiBlbmFibGUgT1RHIEJWQUxJRCAqLworICAgIENIUl9TRVRfQ1ZfTU9ERSwgLyogZW5hYmxlIENWIGRldGVjdEAgY2hhcmdpbmcgZW5hYmxlICovCisgICAgQ0hSX1NFVF9DU0RBQ19NT0RFLCAvKiBlbmFibGUgcy93IGNvbnRyb2wgKi8KKyAgICBDSFJfU0VUX1RSQUNLSU5HX0VOLCAvKiBlbmFibGUgSFRIL0xUSCBmb3IgY3VycmVudCB0cmFja2luZyAqLworICAgIENIUl9TRVRfSFdDVl9FTiwgLyogZW5hYmxlIEgvVyBDViAqLworICAgIENIUl9TRVRfVUxDX0RFVF9FTiwgLyogZW5hYmxlIHBsdWcgb3V0IEhXIGRldGVjdGlvbiAqLworICAgIENIUl9TRVRfTE9XX0lDSF9EQiwgLyogc2V0IHBsdWcgb3V0IEhXIGRldGVjdGlvbiBkZS1ib3VuY2UgdGltZSAqLworICAgIENIUl9TRVRfQ0hBUkdFX1dJVEhPVVRfQkFUVEVSWSwgLyogZW5hYmxlIGNoYXJnZXIgd2l0aG91dCBiYXR0ZXJ5ICovCisgICAgQ0hSX1NFVF9CQzExX1BVTExVUF9FTiwJLyogdHVybiBvbi9vZmYgQkMxMSBwdWxsIHVwKi8KKyAgICBDSFJfU0VUX1ZCQVRfQ1ZfQ0FMSUJSQVRJT04sIC8qIGRvIFZCQVQgQ1YgQ2FsaWJyYXRpb24gdHJpbW1pbmcgKi8KKyAgICBDSFJfR0VUX0NDX0RFVCwgLyogZ2V0IFZCQVQgQ0MgZGV0ZWN0aW9uIHJlc3VsdCAqLworICAgIEFEQ19TRVRfUlFTVCwgLyogQVVYQURDIE1EIFNldCByZXF1ZXN0ICovCisgICAgQURDX0NMUl9SUVNULCAvKiBBVVhBREMgTUQgQ2xyIHJlcXVlc3QgKi8KKyAgICBBRENfR0VUX1JEWV9NRCwgLyogQVVYQURDIE1EIERhdGEgUmVhZHkgKi8KKyAgICBBRENfR0VUX09VVF9NRCwgLyogQVVYQURDIGNoYW5uZWwgb3V0cHV0IGRhdGEgZm9yIE1EICovCisgICAgTUlTQ19TRVRfUkxFRF9FTiA9IDkwMDAsIC8qIGVuYWJsZSBSZWQgbGVkICovCisgICAgTUlTQ19TRVRfR0xFRF9FTiwgLyogZW5hYmxlIGdyZWVuIGxlZCAqLworICAgIE1JU0NfU0VUX0JMRURfRU4sIC8qIGVuYWJsZSBibHVlIGxlZCAqLworICAgIE1JU0NfR0VUX0NJRCwgLyogZ2V0IHBtdS9wbWljIGNpZCAqLworICAgIE1JU0NfR0VUX0VDT19WRVJTSU9OLCAvKiBnZXQgcG11L3BtaWMgZWNvIHZlcnNpb24gKi8KKyAgICBNSVNDX0dFVF9IV19WRVJTSU9OLCAvKiBnZXQgcG11L3BtaWMgSFcgdmVyc2lvbiAqLworICAgIE1JU0NfU0VUX1JFR0lTVEVSX1ZBTFVFLCAvKiBzZXQgcG11L3BtaWMgcmVnaXN0ZXIgdmFsdWUgKi8KKyAgICBNSVNDX0dFVF9SRUdJU1RFUl9WQUxVRSwgLyogZ2V0IHBtdS9wbWljIHJlZ2lzdGVyIHZhbHVlICovCisgICAgTERPX0JVQ0tfU0VUX09QX0VOLAorICAgIExET19CVUNLX0NMUl9PUF9FTiwKKyAgICBMRE9fQlVDS19TRVRfSFdfT1BfQ0ZHLAorICAgIExET19CVUNLX0NMUl9IV19PUF9DRkcsCisgICAgTERPX0JVQ0tfU0VUX0dPX09OX09QLAorICAgIExET19CVUNLX1NFVF9HT19MUF9PUCwKKyAgICBUT1BfU0VUX1NSQ0xLRU5fSU5fRU4sCisgICAgVE9QX1NFVF9TUkNMS0VOX0lOX01PREUsCisgICAgRENYT19TRVRfUkVHSVNURVJfVkFMVUUsCisgICAgRENYT19HRVRfUkVHSVNURVJfVkFMVUUsCisgICAgUE1VX01PRF9DTURfTUFYLAorICAgIExET19CVUNLX1NFVF9WT0NBTCwKKyAgICBMRE9fQlVDS19HRVRfVk9DQUwsCisgICAgTERPX0JVQ0tfU0VUX1ZPVFJJTSwKKyAgICBMRE9fQlVDS19HRVRfVk9UUklNLAorICAgIExET19CVUNLX1NFVF9WUEFfT0NfU0ROX1NUQVRVUywKKyAgICBMRE9fQlVDS19HRVRfVlBBX09DX1NETl9TVEFUVVMsCisgICAgTERPX0JVQ0tfU0VUX1ZQQV9PQ19TRE5fRU4sCisgICAgTERPX0JVQ0tfR0VUX1ZQQV9PQ19TRE5fRU4sCisgICAgTERPX0JVQ0tfU0VUX09QX01PREUsCisgICAgTERPX0JVQ0tfU0VUX1ZPVEVSX1ZPTFRBR0UsCisgICAgTERPX0JVQ0tfU0VUX0JVQ0tfSFdfT1BfTU9ERSwKKyAgICBMRE9fQlVDS19DTFJfQlVDS19IV19PUF9NT0RFLAorICAgIExET19CVUNLX1NFVF9IV19PUF9NT0RFLAorICAgIExET19CVUNLX0NMUl9IV19PUF9NT0RFCit9IFBNVV9DVFJMX0NNRDsKKyNlbHNlIC8qIF9fQlVJTERfRE9NX18gKi8KKyNkZWZpbmUgUE1VX0NNRFMgXAorICAgIExET19CVUNLX1NFVF9DTURTX1NUQVJUID0gMCwgXAorICAgIExET19CVUNLX0NUUkwsIFwKKyAgICBMRE9fQlVDS19TRVRfRU4sIFwKKyAgICBMRE9fQlVDS19HRVRfRU5fU1RBVFVTLCBcCisgICAgTERPX0JVQ0tfR0VUX1FJX01PREUsIFwKKyAgICBMRE9fQlVDS19TRVRfRU5fRk9SQ0UsIFwKKyAgICBMRE9fQlVDS19TRVRfVk9MVEFHRSwgXAorICAgIExET19CVUNLX1NFVF9WT0xUQUdFX0VOLCBcCisgICAgTERPX0JVQ0tfU0VUX1NMRUVQX1ZPTFRBR0UsIFwKKyAgICBMRE9fQlVDS19TRVRfQlVSU1RfVEhSRVNIT0xEID0gNTAwLCBcCisgICAgTERPX0JVQ0tfU0VUX0NVUlJFTlRfTElNSVQsIFwKKyAgICBMRE9fQlVDS19TRVRfVk9MVEFHRV9DQUxJQlJBVElPTl9DT0RFLCBcCisgICAgTERPX0JVQ0tfU0VUX0JJQVNfQ1VSUkVOVF9DQUxJQlJBVElPTl9DT0RFLCBcCisgICAgTERPX0JVQ0tfU0VUX1NUQl9FTiwgXAorICAgIExET19CVUNLX1NFVF9PQ19BVVRPX09GRiwgXAorICAgIExET19CVUNLX1NFVF9SUywgXAorICAgIExET19CVUNLX1NFVF9PTl9TRUwsIFwKKyAgICBMRE9fQlVDS19TRVRfU1JDTEtFTl9TRUwsIFwKKyAgICBMRE9fQlVDS19TRVRfU1RCX1RELCBcCisgICAgTERPX0JVQ0tfU0VUX05ESVNfRU4sIFwKKyAgICBMRE9fQlVDS19TRVRfT0NfVEQsIFwKKyAgICBMRE9fQlVDS19TRVRfT0NGQl9FTiwgXAorICAgIExET19CVUNLX1NFVF9WU0lNX0dQTERPX0VOLCBcCisgICAgTERPX0JVQ0tfU0VUX1ZTSU0yX0dQTERPX0VOLCBcCisgICAgTERPX0JVQ0tfU0VUX1NJTTJfR1BJT19FTiwgXAorICAgIExET19CVUNLX1NFVF9DQ0lfU1JDTEtFTiwgXAorICAgIExET19CVUNLX0dFVF9PQ19TVEFUVVMsIFwKKyAgICBMRE9fQlVDS19HRVRfUUlfT0NfU1RBVFVTLCBcCisgICAgTERPX0JVQ0tfU0VUX09DX0lOVF9FTiwgXAorICAgIExET19CVUNLX0NMRUFSX09DX0ZMQUcsIFwKKyAgICBMRE9fQlVDS19HRVRfT0NfRkxBRywgXAorICAgIExET19CVUNLX0dFVF9WT0xUQUdFX0xJU1QsIFwKKyAgICBMRE9fQlVDS19TRVRfVEhFUl9TSEROX0VOLCBcCisgICAgTERPX0JVQ0tfU0VUX0xQX01PREVfU0VULCBcCisgICAgTERPX0JVQ0tfR0VUX0xQX01PREUsIFwKKyAgICBMRE9fQlVDS19TRVRfTFBfU0VMLCBcCisgICAgTERPX0JVQ0tfU0VUX09OX0NUUkwsIFwKKyAgICBMRE9fQlVDS19TRVRfTU9ERVNFVCwgXAorICAgIExET19CVUNLX1NFVF9DT1QsIFwKKyAgICBMRE9fQlVDS19HRVRfQ09ULCBcCisgICAgTERPX0JVQ0tfU0VUX0VOX0NUUkwsIFwKKyAgICBMRE9fQlVDS19TRVRfU1JDTEtfTU9ERV9TRUwsIFwKKyAgICBMRE9fQlVDS19TRVRfU1JDTEtfRU5fU0VMLCBcCisgICAgTERPX0JVQ0tfU0VUX0VOX1NFTCwgXAorICAgIExET19TRVRfQ0FMLCBcCisgICAgTERPX0JVQ0tfR0VUX1ZPTFRBR0UsIFwKKyAgICBMRE9fQlVDS19HRVRfVk9TRUxfQ1RSTCwgXAorICAgIExET19CVUNLX0dFVF9WT1NFTCwgXAorICAgIExET19CVUNLX0dFVF9WT1NFTF9PTiwgXAorICAgIExET19CVUNLX0dFVF9WT1NFTF9TTEVFUCwgXAorICAgIExET19CVUNLX1NFVF9WT1NFTF9DVFJMLCBcCisgICAgTERPX0JVQ0tfU0VUX1ZPU0VMLCBcCisgICAgTERPX0JVQ0tfU0VUX1ZPU0VMX09OLCBcCisgICAgTERPX0JVQ0tfU0VUX1ZPU0VMX1NMRUVQLCBcCisgICAgTERPX0JVQ0tfU0VUX1ZUQ1hPMjRfU1dJVENILCBcCisgICAgTERPX0JVQ0tfU0VUX0ZQV00sIFwKKyAgICBMRE9fQlVDS19HRVRfRlBXTSwgXAorICAgIExET19CVUNLX1NFVF9DTURTX0VORCwgXAorICAgIFZJQlJfU0VUX0RJTU1JTkdfT05fRFVUWSA9IDkwMCwgXAorICAgIFZQQV9TRVRfVk9MVEFHRSA9IDEwMDAsIFwKKyAgICBWUEFfU0VUX1ZPU0VMX01BUF9FTiwgXAorICAgIFZQQV9TRVRfRU4sIFwKKyAgICBWUEFfQ1RSTF9TRUwsIFwKKyAgICBWUEFfR0VUX1ZPTFRBR0VfTElTVCwgXAorICAgIFZQQV9TRVRfQkFUX0xPVywgXAorICAgIFZQQV9TRVRfRlBXTSwgXAorICAgIFZQQV9TRVRfVk9MVEFHRV9TRUxFQ1RJT05fVEFCTEUsIFwKKyAgICBWUEFfU0VUX01BUF9TRUwsIFwKKyAgICBWUkYxOF9TRVRfRlBXTSwgXAorICAgIFZSRjE4X1NFVF9NT0RFU0VULCBcCisgICAgVlJGMThfMl9TRVRfRlBXTSwgXAorICAgIFZSRjE4X1NFVF9CVUNLX0xET19NT0RFLCBcCisgICAgVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9TRVQsIFwKKyAgICBWUkYxX1NFVF9NT0RFU0VUX0NLUEROX0NMUiwgXAorICAgIFZSRjFfR0VUX01PREVTRVRfQ0tQRE4sIFwKKyAgICBTSU1MU19TRVRfU1JTVF9DT05GLCBcCisgICAgU0lNTFNfU0VUX1NDTEtfQ09ORiwgXAorICAgIFNJTUxTX1NFVF9URFNFTCwgXAorICAgIFNJTUFQX1NFVF9URFNFTCwgXAorICAgIFNJTUxTX1NFVF9SRFNFTCwgXAorICAgIFNJTUFQX1NFVF9SRFNFTCwgXAorICAgIFNJTV9TRVRfU1RCX1NJT19NT0RFLCBcCisgICAgU0lNUlNUX1NFVF9HUElPX1NFVCwgXAorICAgIFNJTVJTVF9TRVRfR1BJT19DTFIsIFwKKyAgICBPQ1RMX1NFVF9TSU1fQVBfU1JTVCwgXAorICAgIE9DVExfU0VUX1NJTV9BUF9TQ0xLLCBcCisgICAgT0NUTF9TRVRfU0lNTFNfU1JTVCwgXAorICAgIE9DVExfU0VUX1NJTUxTX1NDTEssIFwKKyAgICBTUEtfU0VUX0VOID0gMjAwMCwgXAorICAgIFNQS19TRVRfTU9ERSwgXAorICAgIFNQS19HRVRfTU9ERSwgXAorICAgIFNQS19TRVRfT0NfQVVUT19PRkYsIFwKKyAgICBTUEtfU0VUX1ZPTF9WQUxVRSwgXAorICAgIFNQS19HRVRfVk9MX1ZBTFVFLCBcCisgICAgU1BLX1NFVF9WT0wsIFwKKyAgICBTUEtfR0VUX1ZPTCwgXAorICAgIFNQS19TRVRfU0xFV19SQVRFLCBcCisgICAgU1BLX1NFVF9DQUxJQlJfRU4sIFwKKyAgICBTUEtfU0VUX0NBTElCUl9TRUwsIFwKKyAgICBLUExFRF9TRVRfRU4gPSAzMDAwLCBcCisgICAgS1BMRURfU0VUX01PREUsIFwKKyAgICBLUExFRF9TRVRfU0VMLCBcCisgICAgS1BMRURfU0VUX0ZSRVFVRU5DWV9ESVZJU0lPTiwgXAorICAgIEtQTEVEX1NFVF9ESU1NSU5HX09OX0RVVFksIFwKKyAgICBGTEFTSExFRF9TRVRfRU4gPSA0MDAwLCBcCisgICAgRkxBU0hMRURfU0VUX01PREUsIFwKKyAgICBGTEFTSExFRF9TRVRfU0VMLCBcCisgICAgQkxfU0VUX0lOSVQgPSA1MDAwLCBcCisgICAgQkxfU0VUX0VOLCBcCisgICAgQkxfR0VUX1NVUFBPUlRfTEVWRUwsIFwKKyAgICBCTF9HRVRfVVNFX1BXTV9RVUVSWSwgXAorICAgIEJPT1NUX1NFVF9FTiA9IDYwMDAsIFwKKyAgICBCT09TVF9TRVRfQ1VSUkVOVF9MSU1JVCwgXAorICAgIEJPT1NUX1NFVF9DTEtfQ0FMLCBcCisgICAgQk9PU1RfU0VUX1NZTkNfRU4sIFwKKyAgICBCT09TVF9TRVRfVk9MVEFHRSwgXAorICAgIEJPT1NUX1NFVF9MRVZFTCwgXAorICAgIElTSU5LX1NFVF9FTiA9IDcwMDAsIFwKKyAgICBJU0lOS19TRVRfTU9ERSwgXAorICAgIElTSU5LX1NFVF9TVEVQLCBcCisgICAgSVNJTktfU0VUX0ZPUkNFX09GRiwgXAorICAgIElTSU5LX1NFVF9DSEFOTkVMLCBcCisgICAgSVNJTktfU0VUX0RJTU1JTkdfT05fRFVUWSwgXAorICAgIElTSU5LX1NFVF9GUkVRVUVOQ1lfRElWSVNJT04sIFwKKyAgICBDSFJfU0VUX0FEQ19NRUFTVVJFX0VOID0gODAwMCwgXAorICAgIENIUl9TRVRfV0RUX0NMRUFSLCBcCisgICAgQ0hSX1NFVF9XRFRfVElNRVIsIFwKKyAgICBDSFJfU0VUX1dEVF9JTlRfRU4sIFwKKyAgICBDSFJfU0VUX1dEVF9FTiwgXAorICAgIENIUl9TRVRfQ0hSX0VOLCBcCisgICAgQ0hSX1NFVF9DSFJfRk9SQ0VfRU4sIFwKKyAgICBDSFJfR0VUX0NIUl9ERVRfU1RBVFVTLCBcCisgICAgQ0hSX0dFVF9DSFJfQ1VSUkVOVCwgXAorICAgIENIUl9HRVRfQ0hSX0NVUlJFTlRfTElTVCwgXAorICAgIENIUl9TRVRfQ0hSX0NVUlJFTlQsIFwKKyAgICBDSFJfR0VUX0NWX0RFVEVDVElPTl9TVEFUVVMsIFwKKyAgICBDSFJfU0VUX0NWX0RFVEVDVElPTl9FTiwgXAorICAgIENIUl9TRVRfQ1ZfREVURUNUSU9OX1ZPTFRBR0UsIFwKKyAgICBDSFJfU0VUX0NWX0RFVEVDVElPTl9WT0xUQUdFX0NBTElCUkFUSU9OLCBcCisgICAgQ0hSX1NFVF9DU0RBQ19FTiwgXAorICAgIENIUl9HRVRfSVNfQkFUVEVSWV9PTiwgXAorICAgIENIUl9HRVRfSVNfQ0hSX1ZBTElELCBcCisgICAgQ0hSX1NFVF9IVl9ERVRFQ1RJT05fVk9MVEFHRSwgXAorICAgIENIUl9HRVRfSFZfREVURUNUSU9OX1ZPTFRBR0VfTElTVCwgXAorICAgIENIUl9TRVRfVkJBVF9PVl9ERVRFQ1RJT05fVk9MVEFHRSwgXAorICAgIENIUl9TRVRfQkFUX0hUX0VOLCBcCisgICAgQ0hSX1NFVF9PVEdfQlZBTElEX0VOLCBcCisgICAgQ0hSX1NFVF9DVl9NT0RFLCBcCisgICAgQ0hSX1NFVF9DU0RBQ19NT0RFLCBcCisgICAgQ0hSX1NFVF9UUkFDS0lOR19FTiwgXAorICAgIENIUl9TRVRfSFdDVl9FTiwgXAorICAgIENIUl9TRVRfVUxDX0RFVF9FTiwgXAorICAgIENIUl9TRVRfTE9XX0lDSF9EQiwgXAorICAgIENIUl9TRVRfQ0hBUkdFX1dJVEhPVVRfQkFUVEVSWSwgXAorICAgIENIUl9TRVRfQkMxMV9QVUxMVVBfRU4sIFwKKyAgICBDSFJfU0VUX1ZCQVRfQ1ZfQ0FMSUJSQVRJT04sIFwKKyAgICBDSFJfR0VUX0NDX0RFVCwgXAorICAgIEFEQ19TRVRfUlFTVCwgXAorICAgIEFEQ19DTFJfUlFTVCwgXAorICAgIEFEQ19HRVRfUkRZX01ELCBcCisgICAgQURDX0dFVF9PVVRfTUQsIFwKKyAgICBNSVNDX1NFVF9STEVEX0VOID0gOTAwMCwgXAorICAgIE1JU0NfU0VUX0dMRURfRU4sIFwKKyAgICBNSVNDX1NFVF9CTEVEX0VOLCBcCisgICAgTUlTQ19HRVRfQ0lELCBcCisgICAgTUlTQ19HRVRfRUNPX1ZFUlNJT04sIFwKKyAgICBNSVNDX0dFVF9IV19WRVJTSU9OLCBcCisgICAgTUlTQ19TRVRfUkVHSVNURVJfVkFMVUUsIFwKKyAgICBNSVNDX0dFVF9SRUdJU1RFUl9WQUxVRSwgXAorICAgIExET19CVUNLX1NFVF9PUF9FTiwgXAorICAgIExET19CVUNLX0NMUl9PUF9FTiwgXAorICAgIExET19CVUNLX1NFVF9IV19PUF9DRkcsXAorICAgIExET19CVUNLX0NMUl9IV19PUF9DRkcsXAorICAgIExET19CVUNLX1NFVF9HT19PTl9PUCxcCisgICAgTERPX0JVQ0tfU0VUX0dPX0xQX09QLFwKKyAgICBUT1BfU0VUX1NSQ0xLRU5fSU5fRU4sIFwKKyAgICBUT1BfU0VUX1NSQ0xLRU5fSU5fTU9ERSAsIFwKKyAgICBEQ1hPX1NFVF9SRUdJU1RFUl9WQUxVRSwgXAorICAgIERDWE9fR0VUX1JFR0lTVEVSX1ZBTFVFLCBcCisgICAgTERPX0JVQ0tfU0VUX1ZPQ0FMLCBcCisgICAgTERPX0JVQ0tfR0VUX1ZPQ0FMLCBcCisgICAgTERPX0JVQ0tfU0VUX1ZPVFJJTSwgXAorICAgIExET19CVUNLX0dFVF9WT1RSSU0sIFwKKyAgICBMRE9fQlVDS19TRVRfVlBBX09DX1NETl9TVEFUVVMsIFwKKyAgICBMRE9fQlVDS19HRVRfVlBBX09DX1NETl9TVEFUVVMsIFwKKyAgICBMRE9fQlVDS19TRVRfVlBBX09DX1NETl9FTiwgXAorICAgIExET19CVUNLX0dFVF9WUEFfT0NfU0ROX0VOLCBcCisgICAgTERPX0JVQ0tfU0VUX09QX01PREUsIFwKKyAgICBMRE9fQlVDS19TRVRfVk9URVJfVk9MVEFHRSwgXAorICAgIExET19CVUNLX1NFVF9CVUNLX0hXX09QX01PREUsXAorICAgIExET19CVUNLX0NMUl9CVUNLX0hXX09QX01PREUsIFwKKyAgICBMRE9fQlVDS19TRVRfSFdfT1BfTU9ERSwgXAorICAgIExET19CVUNLX0NMUl9IV19PUF9NT0RFLCBcCisgICAgUE1VX01PRF9DTURfTUFYLAorI2VuZGlmIC8qIF9fQlVJTERfRE9NX18gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9GTEFHUyBmb3IgUE1VCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAjaWZkZWYgX19CVUlMRF9ET01fXworLyogVGhlIFBNVSBDb21tYW5kIFZhbHVlcyBpbiBEQ0xfQ1RSTF9DTURfVCBFbnVtIG9mIGRjbC5oICovCit0eXBlZGVmIGVudW0geworICAgIFBXUkFQX0ZMQUdTX1NUQVJUID0gMTAwLAorICAgIFBXUkFQX0ZMQUdTX0FDQ0VTU19XQUNTMCA9IFBXUkFQX0ZMQUdTX1NUQVJULAorICAgIFBXUkFQX0ZMQUdTX0FDQ0VTU19XQUNTMSwKKyAgICBQTVVfTU9EX0NNRF9NQVgsCit9IFBNVV9GTEFHUzsKKyNlbHNlIC8qIF9fQlVJTERfRE9NX18gKi8KKyNkZWZpbmUgUE1VX0ZMQUdTIFwKKyAgICBQV1JBUF9GTEFHU19TVEFSVCA9IDEwMCwgXAorICAgIFBXUkFQX0ZMQUdTX0FDQ0VTU19XQUNTMCA9IFBXUkFQX0ZMQUdTX1NUQVJULFwKKyAgICBQV1JBUF9GTEFHU19BQ0NFU1NfV0FDUzEsIFwKKyAgICBQTVVfRkxBR1NfTUFYLAorI2VuZGlmIC8qIF9fQlVJTERfRE9NX18gKi8KKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfUE1VX0hfU1RSVUNUX18KKyNlbmRpZiAvLyAjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUCisKKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9QUk9UT1RZUEUKKyNpZm5kZWYgX19EQ0xfUE1VX0hfUFJPVE9UWVBFX18KKyNkZWZpbmUgX19EQ0xfUE1VX0hfUFJPVE9UWVBFX18KKwordHlwZWRlZiBEQ0xfU1RBVFVTICgqUE1VX0NPTlRST0xfSEFORExFUikoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DVFJMX0NNRCBjbWQsIERDTF9DVFJMX0RBVEFfVCAqZGF0YSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQTVVfSW5pdGlhbGl6ZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBpbml0aWFsaXplIFBNVSBtb2R1bGUKKyoKKyogUEFSQU1FVEVSUworKiAgTm9uZQorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQTVVfSW5pdGlhbGl6ZSh2b2lkKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQTVVfT3BlbgorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBvcGVuIHRoZSBQTVUgbW9kdWxlIGFuZCByZXR1cm4gYSBoYW5kbGUKKyoKKyogUEFSQU1FVEVSUworKiAgZGV2OiBvbmx5IHZhbGlkIGZvciBEQ0xfUE1VCisqICBmbGFnczogbm8gc2VwY2lhbCBmbGFncyBpcyBuZWVkZWQuIFBsZWFzZSB1c2UgRkxBR1NfTk9ORQorKgorKiBSRVRVUk5TCisqICBEQ0xfSEFORExFX0lOVkFMSUQ6IE9wZW4gZmFpbGVkLgorKiAgb3RoZXIgdmFsdWU6IGEgdmFsaWQgaGFuZGxlCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9IQU5ETEUgRGNsUE1VX09wZW4oRENMX0RFViBkZXYsIERDTF9GTEFHUyBmbGFncyk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsUE1VX1JlYWREYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBQTVUgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQTVVfUmVhZERhdGEoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9CVUZGICpidWZmLCBEQ0xfQlVGRl9MRU4gYnVmX2xlbiwgRENMX09QVElPTlMgb3B0aW9ucyk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsUE1VX1dyaXRlRGF0YQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgUE1VIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsUE1VX1dyaXRlRGF0YShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0JVRkYgKmJ1ZmYsIERDTF9CVUZGX0xFTiBidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQTVVfQ29uZmlndXJlCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBQTVUgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQTVVfQ29uZmlndXJlKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQ09ORklHVVJFX1QgKmNvbmZpZ3VyZSk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsUE1VX1JlZ2lzdGVyQ2FsbGJhY2sKKyoKKyogREVTQ1JJUFRJT04KKyogICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBQTVUgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKiAgCU4vQQorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQTVVfUmVnaXN0ZXJDYWxsYmFjayhEQ0xfSEFORExFIGhhbmRsZSwgRENMX0VWRU5UIGV2ZW50LCBQRk5fRENMX0NBTExCQUNLIGNhbGxiYWNrKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQTVVfQ29udHJvbAorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBzZW5kIGNvbW1hbmQgdG8gY29udHJvbCB0aGUgUE1VIG1vZHVsZS4KKyoKKyogUEFSQU1FVEVSUworKiAgaGFuZGxlOiBUaGUgaGFuZGxlIHZhbHVlIHJldHVybmVkIGZyb20gRGNsUE1VX09wZW4KKyogIGNtZDogYSBjb250cm9sIGNvbW1hbmQgZm9yIFBNVSBtb2R1bGUKKyogICAgICAgICAgTERPX0JVQ0tfU0VUX0NNRFNfU1RBUlQ6IEZvciBpbnRlcm5hbCB1c2UKKyogICAgICAgICAgTERPX0JVQ0tfQ1RSTDogRm9yIGludGVybmFsIHVzZQorKiAgICAgICAgICBMRE9fQlVDS19TRVRfRU46IGVuYWJsZSBsZG8vYnVjaworKiAgICAgICAgICBMRE9fQlVDS19HRVRfRU5fU1RBVFVTOiBHZXQgTERPL0JVQ0sgRW5hYmxlIFN0YXR1cworKiAgICAgICAgICBMRE9fQlVDS19HRVRfUUlfTU9ERTogR2V0IExETy9CVUNLIFFJIE1PREUKKyogICAgICAgICAgTERPX0JVQ0tfU0VUX0VOX0ZPUkNFOiBzZXQgbGRvL2J1Y2sgZm9yY2UgZW5hYmxlCisqICAgICAgICAgIExET19CVUNLX1NFVF9WT0xUQUdFOiBzZXQgbGRvL2J1Y2sgdm9sdGFnZQorKiAgICAgICAgICBMRE9fQlVDS19TRVRfVk9MVEFHRV9FTjogc2V0IGxkby9idWNrIHZvbHRhZ2UgYW5kIGVuYWJsZQorKiAgICAgICAgICBMRE9fQlVDS19TRVRfU0xFRVBfVk9MVEFHRTogc2V0IGxkby9idWNrIHNsZWVwIHZvbHRhZ2UKKyogICAgICAgICAgTERPX0JVQ0tfU0VUX0JVUlNUX1RIUkVTSE9MRDogc2V0IGxkby9idWNrIGJ1cnN0IHRocmVzaG9sZAorKiAgICAgICAgICBMRE9fQlVDS19TRVRfQ1VSUkVOVF9MSU1JVDogc2V0IGxkby9idWNrIGN1cnJlbnQgbGltaXQKKyogICAgICAgICAgTERPX0JVQ0tfU0VUX1ZPTFRBR0VfQ0FMSUJSQVRJT05fQ09ERTogc2V0IGxkby9idWNrIHZvbHRhZ2UgY2FsaWJyYXRpb24gY29kZQorKiAgICAgICAgICBMRE9fQlVDS19TRVRfQklBU19DVVJSRU5UX0NBTElCUkFUSU9OX0NPREU6IHNldCBsZG8vYnVjayBiaWFzIGN1cnJlbnQgY2FsaWJyYXRpb24gY29kZQorKiAgICAgICAgICBMRE9fQlVDS19TRVRfU1RCX0VOOiBlbmFibGUgbGRvL2J1Y2sgc29mdCBzdGFydAorKiAgICAgICAgICBMRE9fQlVDS19TRVRfT0NfQVVUT19PRkY6IGVuYWJsZSB0byBwb3dlci1vZmYgYXV0b21hdGljYWxseSBpZiBvY19mbGFnIGJlZW4gYXNzZXJ0ZWQKKyogICAgICAgICAgTERPX0JVQ0tfU0VUX1JTOiBzZXQgbGRvL2J1Y2sgbG9jYWwvcmVtb3RlIHNlbnNlCisqICAgICAgICAgIExET19CVUNLX1NFVF9PTl9TRUw6IGVuYWJsZSBjb250cm9sIHNlbGVjdGlvbiwgaGFyZHdhcmUvc29mdHdhcmUKKyogICAgICAgICAgTERPX0JVQ0tfU0VUX1NUQl9URDogc2V0IGxkby9idWNrIGRlZ2xpdGNoIGRlbGF5IHRpbWUgZm9yIHNvZnQgc3RhcnQKKyogICAgICAgICAgTERPX0JVQ0tfU0VUX05ESVNfRU46IGVuYWJsZSBsZG8vYnVjayBOTU9TIGRpc2NoYXJnZQorKiAgICAgICAgICBMRE9fQlVDS19TRVRfT0NfVEQ6IHNldCBsZG8vYnVjayBkZWdsaXRjaCB0aW1lIGNvbnN0YW50IGZvciBvdmVyLWN1cnJlbnQgc3RhdHVzIGZyb20gUE1VIHRvIGdlbmVyYXRlIG9jX2ZsYWcKKyogICAgICAgICAgTERPX0JVQ0tfU0VUX09DRkJfRU46IGVuYWJsZSBsZG8vYnVjayBvdmVyLWN1cnJlbnQgZm9sZC1iYWNrCisqICAgICAgICAgIExET19CVUNLX1NFVF9WU0lNX0dQTERPX0VOOiBzZWxlY3QgVlNJTSBMRE8gZW5hYmxlICYgdm9sdGFnZSBjb250cm9sbGVkIGJ5IFNJTSBjb250cm9sbGVyIG9yIHJlZ2lzdGVyCisqICAgICAgICAgIExET19CVUNLX1NFVF9WU0lNMl9HUExET19FTjogc2VsZWN0IFZTSU0yIExETyBlbmFibGUgJiB2b2x0YWdlIGNvbnRyb2xsZWQgYnkgU0lNMiBjb250cm9sbGVyIG9yIHJlZ2lzdGVyCisqICAgICAgICAgIExET19CVUNLX1NFVF9TSU0yX0dQSU9fRU46IHNldCBTSU0yIEdQSU8gZW5hYmxlCisqICAgICAgICAgIExET19CVUNLX1NFVF9DQ0lfU1JDTEtFTjogZW5hYmxlIFNSQ0xLRU5BIHRvIFBNSUMgZm9yY2UgZW5hYmxlIGNvbnRyb2wgc2lnbmFsCisqICAgICAgICAgIExET19CVUNLX0dFVF9PQ19TVEFUVVM6IEdldCBMRE8vQlVDSyBPdmVyIEN1cnJlbnQgU3RhdHVzCisqICAgICAgICAgIExET19CVUNLX0dFVF9RSV9PQ19TVEFUVVM6IEdldCBMRE8vQlVDSyBRSSBPdmVyIEN1cnJlbnQgU3RhdHVzCisqICAgICAgICAgIExET19CVUNLX1NFVF9USEVSX1NIRE5fRU46IFNldCBMb3cgUG93ZXIgTW9kZQorKiAgICAgICAgICBMRE9fQlVDS19TRVRfTFBfTU9ERV9TRVQ6IFNldCBMb3cgUG93ZXIgTW9kZQorKiAgICAgICAgICBMRE9fQlVDS19TRVRfTFBfU0VMOiBTZXQgTG93IFBvd2VyIE1vZGUgU2VsZWN0aW9uCisqICAgICAgICAgIExET19CVUNLX1NFVF9PTl9DVFJMOiBPbiBDb250cm9sIE1vZGUKKyogICAgICAgICAgTERPX0JVQ0tfU0VUX01PREVTRVQ6IFN3aXRjaCBiZXR3ZWVuIGZvcmNlIFBXTSBtb2RlIGFuZCBBVVRPIE1vZGUKKyogICAgICAgICAgTERPX0JVQ0tfU0VUX0VOX0NUUkw6IEVuYWJsZSBDb250cm9sCisqICAgICAgICAgIExET19CVUNLX1NFVF9FTl9TRUw6IEVuYWJsZSBTZWxlY3Rpb24KKyogICAgICAgICAgTERPX0JVQ0tfU0VUX1NSQ0xLX01PREVfU0VMOiBIVyBsb3cgcG93ZXIgbW9kZSBzcmNsayBzZWxlY3Rpb24KKyogICAgICAgICAgTERPX0JVQ0tfU0VUX1NSQ0xLX0VOX1NFTDogU1JDTEtfRU4gU2VsZWN0aW9uCisqICAgICAgICAgIExET19CVUNLX1NFVF9DTURTX0VORDogRm9yIGludGVybmFsIHVzZQorKiAgICAgICAgICBWSUJSX1NFVF9ESU1NSU5HX09OX0RVVFk6IG1vZGlmeSB2aWJyYXRvciBkaW1taW5nIGR1dHkKKyogICAgICAgICAgVlBBX1NFVF9WT0xUQUdFOiBzZXQgVlBBMC03IHZvbHRhZ2UKKyogICAgICAgICAgVlBBX1NFVF9WT1NFTF9NQVBfRU46IGVuYWJsZXMgdm9sdGFnZSBtYXBwaW5nIHRvIHNlbGVjdCBWUEFfVk9TRUwgZnJvbSB2cGEgdm9zZWwgdGFibGUgZGVwZW5kaW5nIG9uIHZwYV90YWJsZV9zZWwKKyogICAgICAgICAgVlBBX1NFVF9FTjogZW5hYmxlIFZQQQorKiAgICAgICAgICBWUEFfR0VUX1ZPTFRBR0VfTElTVDogZ2V0IFZQQSBzdXBwb3J0ZWQgdm9sdGFnZSBsaXN0CisqICAgICAgICAgIFZQQV9TRVRfQkFUX0xPVzogQkFUX0xPVyB0byBpbmRpY2F0ZSBWUEEgYnktcGFzcyBtb2RlICg2MzI2KQorKiAgICAgICAgICBWUEFfU0VUX1ZPTFRBR0VfU0VMRUNUSU9OX1RBQkxFOiB2b2x0YWdlIHNlbGVjdGlvbiB3aGVuIHZwYV92b3NlbF9tYXBfZW49MQorKiAgICAgICAgICBWUEFfU0VUX01BUF9TRUw6IFNlbGVjdHMgb25lIGVudHJ5IGluIHZwYSB2b3NlbCB0YWJsZSB0byB1c2UgZm9yIFZQQV9WT1NFTAorKiAgICAgICAgICBWUkYxX1NFVF9NT0RFU0VUX0NLUEROX1NFVDogRW5hYmxlIFZSRjEgTU9ERVNFVCBDbG9jaworKiAgICAgICAgICBWUkYxX1NFVF9NT0RFU0VUX0NLUEROX0NMUjogRGlzYWJsZSBWUkYxIE1PREVTRVQgQ2xvY2sKKyogICAgICAgICAgVlJGMV9HRVRfTU9ERVNFVF9DS1BETjogUmVhZGJhY2sgVlJGMSBNT0RFU0VUIENsb2NrCisqICAgICAgICAgIFNJTUxTX1NFVF9TUlNUX0NPTkY6IFNldCBTSU1MU19TUlNUCisqICAgICAgICAgIFNJTUxTX1NFVF9TQ0xLX0NPTkY6IFNldCBTSU1MU19TQ0xLCisqICAgICAgICAgIFNJTUxTX1NFVF9URFNFTDogU2V0IFNJTUxTX1REU0VMCisqICAgICAgICAgIFNJTUFQX1NFVF9URFNFTDogU2V0IFNJTUFQX1REU0VMCisqICAgICAgICAgIFNJTUxTX1NFVF9SRFNFTDogU2V0IFNJTUxTX1JEU0VMCisqICAgICAgICAgIFNJTUFQX1NFVF9SRFNFTDogU2V0IFNJTUFQX1JEU0VMCisqICAgICAgICAgIFNJTV9TRVRfU1RCX1NJT19NT0RFOiBTZXQgU0lNIFNUQiBTSU8gTW9kZQorKiAgICAgICAgICBTSU1SU1RfU0VUX0dQSU9fU0VUOiBTZXQgU0lNUlNUIEdQSU8KKyogICAgICAgICAgU0lNUlNUX1NFVF9HUElPX0NMUjogQ2xlYXIgU0lNUlNUIEdQSU8KKyogICAgICAgICAgT0NUTF9TRVRfU0lNX0FQX1NDTEs6IFNldCBTSU1fQVBfU1JTVAorKiAgICAgICAgICBPQ1RMX1NFVF9TSU1fQVBfU0NMSzogU2V0IFNJTV9BUF9TQ0xLCisqICAgICAgICAgIE9DVExfU0VUX1NJTUxTX1NDTEs6IFNldCBTSU1MU19TUlNUCisqICAgICAgICAgIE9DVExfU0VUX1NJTUxTX1NDTEs6IFNldCBTSU1MU19TQ0xLCisqICAgICAgICAgIExET19TRVRfQ0FMOiBsZG8gb3V0cHV0IHZvbHRhZ2UgY2FsaWJyYXRpb24KKyogICAgICAgICAgU1BLX1NFVF9FTjogZW5hYmxlIHNwaworKiAgICAgICAgICBTUEtfU0VUX01PREU6IHNldCBzcGsgbW9kZQorKiAgICAgICAgICBTUEtfR0VUX01PREU6IGdldCBzcGsgbW9kZQorKiAgICAgICAgICBTUEtfU0VUX09DX0FVVE9fT0ZGOiBlbmFibGUgc3BrIG92ZXItY3VycmVudCBhdXRvIG9mZgorKiAgICAgICAgICBTUEtfU0VUX1ZPTF9WQUxVRTogc2V0IHNwayB2b2x1bWUgKHJlZ2lzdGVyIHZhbHVlKQorKiAgICAgICAgICBTUEtfR0VUX1ZPTF9WQUxVRTogZ2V0IHNwayB2b2x1bWUgKHJlZ2lzdGVyIHZhbHVlKQorKiAgICAgICAgICBTUEtfU0VUX1ZPTDogc2V0IHNwayB2b2x1bWUgKGRibSkKKyogICAgICAgICAgU1BLX0dFVF9WT0w6IGdldCBzcGsgdm9sdW1lIChkYm0pCisqICAgICAgICAgIFNQS19TRVRfU0xFV19SQVRFOiBzZXQgc3BrIHNsZXcgcmF0ZQorKiAgICAgICAgICBTUEtfU0VUX0NBTElCUl9FTjogc2V0IHNwayBDbGFzcyBEIG9mZnNldCBjYWxpYnJhdGlvbiBlbmFibGUKKyogICAgICAgICAgU1BLX1NFVF9DQUxJQlJfU0VMOiBzZXQgc3BrIENsYXNzIEQgb2Zmc2V0IGNhbGlicmF0aW9uIHBhdGgKKyogICAgICAgICAgS1BMRURfU0VUX0VOOiBlbmFibGUga3BsZWQKKyogICAgICAgICAgS1BMRURfU0VUX01PREU6IHNldCBrcGxlZCBtb2RlIChwd20vcmVnaXN0ZXIpCisqICAgICAgICAgIEtQTEVEX1NFVF9TRUw6IGtwbGVkIFR1cm4gT24gUmVzaXN0b3IgU2VsZWN0CisqICAgICAgICAgIEtQTEVEX1NFVF9GUkVRVUVOQ1lfRElWSVNJT046IHNldCBrcGxlZCBmcmVxdWVuY3kgZGl2aXNpb24KKyogICAgICAgICAgS1BMRURfU0VUX0RJTU1JTkdfT05fRFVUWTogc2V0IGtwbGVkIGRpbW1pbmcgZHV0eQorKiAgICAgICAgICBGTEFTSExFRF9TRVRfRU46IGVuYWJsZSBmbGFzaGxlZAorKiAgICAgICAgICBGTEFTSExFRF9TRVRfTU9ERTogc2V0IGZsYXNobGVkIG1vZGUgKHB3bS9yZWdzaXRlcikKKyogICAgICAgICAgRkxBU0hMRURfU0VUX1NFTDoga3BsZWQgVHVybiBPbiBSZXNpc3RvciBTZWxlY3QKKyogICAgICAgICAgQkxfU0VUX0lOSVQ6IGJhY2tsaWdodCBpbml0IG1vZGUKKyogICAgICAgICAgQkxfU0VUX0VOOiBlbmFibGUgYmFja2xpZ2h0CisqICAgICAgICAgIEJPT1NUX1NFVF9FTjogZW5hYmxlIGJvb3N0CisqICAgICAgICAgIEJPT1NUX1NFVF9DVVJSRU5UX0xJTUlUOiBzZXQgYm9vc3QgY3VycmVudCBsaW1pdAorKiAgICAgICAgICBCT09TVF9TRVRfQ0xLX0NBTDogc2V0IGJvb3N0IGNsb2NrIGNhbAorKiAgICAgICAgICBCT09TVF9TRVRfU1lOQ19FTjogZW5hYmxlIGJvb3N0IHN5bmMKKyogICAgICAgICAgQk9PU1RfU0VUX1ZPTFRBR0U6IHNldCBib29zdCB2b2x0YWdlCisqICAgICAgICAgIEJPT1NUX1NFVF9MRVZFTDogc2V0IGJvb3N0IGxldmVsCisqICAgICAgICAgIElTSU5LX1NFVF9FTjogZW5hYmxlIGlzaW5rCisqICAgICAgICAgIElTSU5LX1NFVF9NT0RFOiBzZXQgaXNpbmsgbW9kZQorKiAgICAgICAgICBJU0lOS19TRVRfU1RFUDogc2V0IGlzaW5rIHN0ZXAKKyogICAgICAgICAgSVNJTktfU0VUX0ZPUkNFX09GRjogc2V0IGlzaW5rIGZvcmNlIG9mZgorKiAgICAgICAgICBJU0lOS19TRVRfQ0hBTk5FTDogc2V0IGlzaW5rIGNoYW5uZWwKKyogICAgICAgICAgSVNJTktfU0VUX0RJTU1JTkdfT05fRFVUWTogc2V0IGtwbGVkIGRpbW1pbmcgZHV0eQorKiAgICAgICAgICBJU0lOS19TRVRfRlJFUVVFTkNZX0RJVklTSU9OOiBzZXQga3BsZWQgZnJlcXVlbmN5IGRpdmlzaW9uCisqICAgICAgICAgIENIUl9TRVRfQURDX01FQVNVUkVfRU46IGVuYWJsZSBhZGMgbWVhc3VyZQorKiAgICAgICAgICBDSFJfU0VUX1dEVF9DTEVBUjogY2xlYXIgY2hhcmdlciB3ZHQKKyogICAgICAgICAgQ0hSX1NFVF9XRFRfVElNRVI6IHNldCBjaGFyZ2VyIHdkdCB0aW1lcgorKiAgICAgICAgICBDSFJfU0VUX1dEVF9JTlRfRU46IGVuYWJsZSBjaGFyZ2VyIHdkdCBpbnRlcnJ1cHQKKyogICAgICAgICAgQ0hSX1NFVF9XRFRfRU46IGVuYWJsZSBjaGFyZ2VyIHdkdAorKiAgICAgICAgICBDSFJfU0VUX0NIUl9FTjogZW5hYmxlIGNoYXJnZXIKKyogICAgICAgICAgQ0hSX1NFVF9DSFJfRk9SQ0VfRU46IGZvcmNlIGVuYWJsZSBjaGFyZ2VyCisqICAgICAgICAgIENIUl9HRVRfQ0hSX0RFVF9TVEFUVVM6IGdldCBjaGFyZ2VyIGRldGVjdGlvbiBzdGF0dXMKKyogICAgICAgICAgQ0hSX0dFVF9DSFJfQ1VSUkVOVDogZ2V0IGNoYXJnZXIgY3VycmVudAorKiAgICAgICAgICBDSFJfR0VUX0NIUl9DVVJSRU5UX0xJU1Q6IGdldCBjaGFyZ2VyIGN1cnJlbnQgbGlzdAorKiAgICAgICAgICBDSFJfU0VUX0NIUl9DVVJSRU5UOiBzZXQgY2hhcmdlciBjdXJyZW50CisqICAgICAgICAgIENIUl9HRVRfQ1ZfREVURUNUSU9OX1NUQVRVUzogZ2V0IENWIGRldGVjdGlvbiBzdGF0dXMKKyogICAgICAgICAgQ0hSX1NFVF9DVl9ERVRFQ1RJT05fRU46IGVuYWJsZSBDViBkZXRlY3Rpb24KKyogICAgICAgICAgQ0hSX1NFVF9DVl9ERVRFQ1RJT05fVk9MVEFHRTogc2V0IENWIHZvbHRhZ2UKKyogICAgICAgICAgQ0hSX1NFVF9DVl9ERVRFQ1RJT05fVk9MVEFHRV9DQUxJQlJBVElPTjogc2V0IENWIHZvbHRhZ2UgY2FsaWJyYXRpb24KKyogICAgICAgICAgQ0hSX1NFVF9DU0RBQ19FTjogZW5hYmxlIGNzZGFjCisqICAgICAgICAgIENIUl9HRVRfSVNfQkFUVEVSWV9PTjogY2hlY2sgaXMgYmF0dGVyeSBvbgorKiAgICAgICAgICBDSFJfR0VUX0lTX0NIUl9WQUxJRDogY2hlY2sgaXMgY2hhcmdlciB2YWxpZAorKiAgICAgICAgICBDSFJfU0VUX0hWX0RFVEVDVElPTl9WT0xUQUdFOiBzZXQgSFYgZGV0ZWN0aW9uIHZvbHRhZ2UKKyogICAgICAgICAgQ0hSX1NFVF9WQkFUX09WX0RFVEVDVElPTl9WT0xUQUdFOiBzZXQgYmF0dGVyeSBPViBkZXRlY3Rpb24gdm9sdGFnZQorKiAgICAgICAgICBDSFJfU0VUX0JBVF9IVF9FTjogZW5hYmxlIGJhdHRlcnkgaGlnaCB0ZW1wdHVyZSBkZXRlY3Rpb24KKyogICAgICAgICAgQ0hSX1NFVF9PVEdfQlZBTElEX0VOOiBlbmFibGUgT1RHIEJWQUxJRAorKiAgICAgICAgICBDSFJfU0VUX0NWX01PREU6IGVuYWJsZSBDViBkZXRlY3RAIGNoYXJnaW5nIGVuYWJsZQorKiAgICAgICAgICBDSFJfU0VUX0NTREFDX01PREU6IGVuYWJsZSBzL3cgY29udHJvbAorKiAgICAgICAgICBDSFJfU0VUX1RSQUNLSU5HX0VOOiBlbmFibGUgSFRIL0xUSCBmb3IgY3VycmVudCB0cmFja2luZworKiAgICAgICAgICBDSFJfU0VUX0hXQ1ZfRU46IGVuYWJsZSBIL1cgQ1YKKyogICAgICAgICAgQ0hSX1NFVF9VTENfREVUX0VOOiBlbmFibGUgcGx1ZyBvdXQgSFcgZGV0ZWN0aW9uCisqICAgICAgICAgIENIUl9TRVRfTE9XX0lDSF9EQjogc2V0IHBsdWcgb3V0IEhXIGRldGVjdGlvbiBkZS1ib3VuY2UgdGltZQorKiAgICAgICAgICBDSFJfR0VUX0NDX0RFVDogZ2V0IFZCQVQgQ0MgZGV0ZWN0aW9uIHJlc3VsdAorKiAgICAgICAgICBBRENfU0VUX1JRU1Q6IEFVWEFEQyBNRCBTRVQgcmVxdWVzdAorKiAgICAgICAgICBBRENfQ0xSX1JRU1Q6IEFVWEFEQyBNRCBDTFIgcmVxdWVzdAorKiAgICAgICAgICBBRENfR0VUX1JEWV9NRDogQVVYQURDIE1EIERhdGEgUmVhZHkKKyogICAgICAgICAgQURDX0dFVF9PVVRfTUQ6IEFVWEFEQyBjaGFubmVsIG91dHB1dCBkYXRhIGZvciBNRAorKiAgICAgICAgICBNSVNDX1NFVF9STEVEX0VOOiBlbmFibGUgUmVkIGxlZAorKiAgICAgICAgICBNSVNDX1NFVF9HTEVEX0VOOiBlbmFibGUgZ3JlZW4gbGVkCisqICAgICAgICAgIE1JU0NfU0VUX0JMRURfRU46IGVuYWJsZSBibHVlIGxlZAorKiAgICAgICAgICBNSVNDX1NFVF9SRUdJU1RFUl9WQUxVRTogc2V0IHBtdS9wbWljIHJlZ2lzdGVyIHZhbHVlCisqICAgICAgICAgIE1JU0NfR0VUX1JFR0lTVEVSX1ZBTFVFOiBnZXQgcG11L3BtaWMgcmVnaXN0ZXIgdmFsdWUKKyogIGRhdGE6IFRoZSBkYXRhIG9mIHRoZSBjb250cm9sIGNvbW1hbmQKKyogICAgICAgICAgY21kOiB4eHh4IDogcG9pbnRlciB0byBhIFBNVV9DVFJMX3h4eHggc3RydWN0dXJlCisqICAgICAgICAgIGV4OiBMRE9fQlVDS19TRVRfRU46ICBwb2ludGVyIHRvIGEgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHN0cnVjdHVyZQorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0s6IGNvbW1hbmQgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorKiAgU1RBVFVTX0ZBSUw6IGNvbW1hbmQgaXMgZmFpbGVkLgorKiAgU1RBVFVTX0lOVkFMSURfQ01EOiBJdCdzIGEgaW52YWxpZCBjb21tYW5kLgorKiAgICAgU1RBVFVTX1VOU1VQUE9SVEVEOiBJdCdzIGEgdW5zdXBwb3J0ZWQgY29tbWFuZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQTVVfQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQTVVfQ2xvc2UKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gY2xvc2UgdGhlIFBNVSBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogdGhlIHJldHVybmVkIGhhbmRsZSB2YWx1ZSBvZiBEY2xQTVVfT3BlbgorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQTVVfQ2xvc2UoRENMX0hBTkRMRSBoYW5kbGUpOworCisjZGVmaW5lIERDTF9QTUlDX01PRFVMRV9DT05UUk9MCitrYWxfYXRvbWljX3VpbnQzMiBEY2xQTVVfR2V0SHJ0RmxhZyh2b2lkKTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfTU9EVUxFX0NPTlRST0wpCitleHRlcm4gRENMX0ZMQUdTIERjbFBNVV9HZXRDdXJyZW50SGFuZGxlckZsYWcoRENMX0hBTkRMRSBoYW5kbGUpOworI2VuZGlmCisKKyNlbmRpZiAvLyAjaWZuZGVmIF9fRENMX1BNVV9IX1BST1RPVFlQRV9fCisjZW5kaWYgLy8gI2lmZGVmIERDTF9ERUZJTklUSU9OX1BST1RPVFlQRQpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfcHcuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX3B3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFhZTUwYwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX3B3LmgKQEAgLTAsMCArMSw0MjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgZGNsX3B3LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aV9Tb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCBmb3IgcGhvbmUgb24vb2ZmIGNvbnRyb2wgYW5kIHBvd2VyIG9uIHJlYXNvbgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9TVFJVQ1QKKyNpZm5kZWYgX19EQ0xfUFdfSF9TVFJVQ1RfXworI2RlZmluZSBfX0RDTF9QV19IX1NUUlVDVF9fCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9PUFRJT05TIGZvciBQTVUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBQV19PUFRJT05TCisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NPTkZJR1VSRV9UIGZvciBQTVUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFBXX0NPTkZJR1MKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9FVkVOVCBmb3IgUE1VCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUFdfRVZFTlRTCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0RBVEFfVDogRGVmaW5lIHRoZSBDb250cm9sIGRhdGEgc3RydWN0dXJlIGZvciBlYWNoIG1vZHVsZSdzIGNvbW1hbmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIGVudW17CisJUFdSS0VZUFdST04gPSAwLCAvKiBwb3dlciBvbiByZWFzb24gaXMgcG93ZXJrZXkgKi8KKwlDSFJQV1JPTgk9IDEsICAgICAgLyogcG93ZXIgb24gcmVhc29uIGlzIGNoYXJnZXIgaW4gKi8KKwlSVENQV1JPTiA9IDIsCSAgICAvKiBwb3dlciBvbiByZWFzb24gaXMgcnRjIGFsYXJtICovCisJQ0hSUFdST0ZGID0gMywgICAgIC8qIHJlc2VydmVkICovCisJV0RUUkVTRVQgPSA0LCAJICAgLyogcmVzZXJ2ZWQgKi8KKwlBQk5SRVNFVCA9IDUsICAgICAgIC8qIHBvd2VyIG9uIHJlYXNvbiBpcyBhYm5vcm1hbCByZWJvb3QgKi8KKwlVU0JQV1JPTiA9IDYsICAgICAvKiBwb3dlciBvbiByZWFzb24gaXMgdXNiIGNhYmxlIGluICovCisJVVNCUFdST05fV0RUID0gNywgLyogcG93ZXIgb24gcmVhc29uIGlzIHVzYiBjYWJsZSBpbiBhbmQgYWJub3JtYWwgcmVib290Ki8KKwlQUkVDSFJQV1JPTiA9IDgsICAgLyogcG93ZXIgb24gcmVhc29uIGlzIHByZWNoYXJnZXIgcG93ZXIgb24qLworCVVOS05PV05fUFdST04gPSAweEY5CS8qIHBvd2VyIG9uIHJlYXNvbiBpcyB1bmtub3duKi8KK31QV19DVFJMX1BPV0VSX09OX1JFQVNPTjsKKwordHlwZWRlZiBlbnVteworIAlQV1JfRkFDVE9SX1BPV0VSX0tFWSA9IDAsCisJUFdSX0ZBQ1RPUl9DSEFSR0VSX0lOLAorIAlQV1JfRkFDVE9SX1VTQl9JTiwKKyAJUFdSX0ZBQ1RPUl9SVENfRVhQSVJFLAorIAlQV1JfRkFDVE9SX1dEVF9SRVNFVCwKKyAJUFdSX0ZBQ1RPUl9OT1JNQUxfUkVTRVRfRkxHLAorIAlQV1JfRkFDVE9SX0NIUlBXUk9OX0ZMRywKKyAJUFdSX0ZBQ1RPUl9VU0JNU19QV1JPTl9GTEcsCisgCVBXUl9GQUNUT1JfUlRDUFdST05fRkxHLAorIAlQV1JfRkFDVE9SX1BSRUNIUlBXUk9OX0ZMRywKKyAJUFdSX0ZBQ1RPUl9TV0lUQ0gySURMRV9GTEcsCisgCVBXUl9GQUNUT1JfU1dJVENIMkNIUl9GTEcsCisgCVBXUl9GQUNUT1JfU1dJVENIMlVTQl9GTEcsCisgCVBXUl9GQUNUT1JfTUFYCit9cHdyX2ZhY3Rvcl9lbnVtOworCit0eXBlZGVmIGVudW17CisgICAgUFdSX0ZBQ1RPUl9CTF9QT1dFUl9LRVkgPSAweDEsCisgICAgUFdSX0ZBQ1RPUl9CTF9DQUJMRV9JTiA9IDB4MiwKKyAgICBQV1JfRkFDVE9SX0JMX1JUQ19FWFBJUkUgPSAweDQsCisgICAgUFdSX0ZBQ1RPUl9CTF9OT1JNQUxfUkVTRVRfRkxHID0gMHg4LAorICAgIFBXUl9GQUNUT1JfQkxfQ0hSUFdST05fRkxHID0gMHgxMCwKKyAgICBQV1JfRkFDVE9SX0JMX1VTQk1TX1BXUk9OX0ZMRyA9IDB4MjAsCisgICAgUFdSX0ZBQ1RPUl9CTF9SVENQV1JPTl9GTEcgPSAweDQwLAorICAgIFBXUl9GQUNUT1JfQkxfRkFDVE9SWV9GTEcgPSAweDgwLAorICAgIFBXUl9GQUNUT1JfQkxfTUFYCit9cHdfZmFjdG9yX2JsX2VudW07CisKK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wJdmFsOyAvKiBPdXRwdXQgOiBUUlVFOiBpbmRpY2F0ZSB1c2IgcGx1ZyBpbjsgRkFMU0U6IGluZGljYXRlIG5vdCB1c2IgcGx1ZyBpbiAgKi8KK30gUFdfQ1RSTF9JU19VU0JfQk9PVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQV19DVFJMX1BPV0VSX09OX1JFQVNPTglwb3dlck9uUmVhc29uOyAvKiBJbnB1dCA6IHBvd2VyIG9uIHJlYXNvbiAgKi8KK30gUFdfQ1RSTF9TRVRfUE9XRVJPTl9SRUFTT047CisgICAKK3R5cGVkZWYgc3RydWN0Cit7CisJUFdfQ1RSTF9QT1dFUl9PTl9SRUFTT04JcG93ZXJPblJlYXNvbjsgLyogT3V0cHV0IDogcG93ZXIgb24gcmVhc29uICAqLworfSBQV19DVFJMX0dFVF9QT1dFUk9OX1JFQVNPTjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0RBVEFfVDogRGVmaW5lIHRoZSBDb250cm9sIGRhdGEgc3RydWN0dXJlIGZvciBlYWNoIG1vZHVsZSdzIGNvbW1hbmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIF9fQlVJTERfRE9NX18KKy8qIFRoZSBQVyBDb21tYW5kIFBhcmFtZXRlciBEYXRhIFN0cnVjdHVyZSBmb3IgRWFjaCBDb21tYW5kIGluIERDTF9DVFJMX0RBVEFfVCBFbnVtIG9mIGRjbC5oICovCit0eXBlZGVmIHN0cnVjdAoreworCVBXX0NUUkxfU0VUX1BPV0VST05fUkVBU09OCQlyUFdTZXRQb3dlck9uUmVhc29uOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgUFdfQ01EX1NFVF9QT1dFUk9OX1JFQVNPTiAqLworCVBXX0NUUkxfR0VUX1BPV0VST05fUkVBU09OCQlyUFdHZXRQb3dlck9uUmVhc29uOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgUFdfQ01EX0dFVF9QT1dFUk9OX1JFQVNPTiAqLworCVBXX0NUUkxfSVNfVVNCX0JPT1QJCQkJclBXSXNVc2JCb290OyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgUFdfQ01EX0lTX1VTQl9CT09UICovCit9RENMX0NUUkxfUFdfREFUQTsKKyNlbHNlIC8qIF9fQlVJTERfRE9NX18gKi8KKyNkZWZpbmUgUFdfQ1RSTFMgXAorCVBXX0NUUkxfU0VUX1BPV0VST05fUkVBU09OCQlyUFdTZXRQb3dlck9uUmVhc29uOyBcCisJUFdfQ1RSTF9HRVRfUE9XRVJPTl9SRUFTT04JCXJQV0dldFBvd2VyT25SZWFzb247IFwKKwlQV19DVFJMX0lTX1VTQl9CT09UCQkJCXJQV0lzVXNiQm9vdDsKKyNlbmRpZiAvKiBfX0JVSUxEX0RPTV9fICovCQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ1RSTF9DTUQgZm9yIFBNVQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgX19CVUlMRF9ET01fXworLyogVGhlIFBXIENvbW1hbmQgVmFsdWVzIGluIERDTF9DVFJMX0NNRF9UIEVudW0gb2YgZGNsLmggKi8KK3R5cGVkZWYgZW51bSB7CisJUFdfQ01EX1BPV0VST04sIC8qIGNhbGwgUlRDIG1vZHVsZSB0byBsYXRjaCBwb3dlciBhbmQgaW5pdCB0aW1lIGlmIG5lY2Vzc2FyeSAqLworCVBXX0NNRF9QT1dFUk9GRiwgLyogY2FsbCBSVEMgbW9kdWxlIHRvIHVubGF0Y2ggcG93ZXIgKi8KKwlQV19DTURfU0VUX1BPV0VST05fUkVBU09OLCAvKiBzZXQgcG93ZXIgb24gcmVhc29uICovCisJUFdfQ01EX0dFVF9QT1dFUk9OX1JFQVNPTiwgLyogZ2V0IHBvd2VyIG9uIHJlYXNvbiAqLworCVBXX0NNRF9TRVRfU1dJVENIX1RPX0lETEUsIC8qIHNldCBmbGFnIHdoaWNoIGZvcmNlIHBob25lIHRvIGVudGVyIGlkbGUgbW9kZSAqLworCVBXX0NNRF9DTEVBUl9TV0lUQ0hfVE9fSURMRSwgLyogY2xlYXIgZmxhZyB3aGljaCBmb3JjZSBwaG9uZSB0byBlbnRlciBpZGxlIG1vZGUgKi8KKwlQV19DTURfUE9XRVJfSU5JVCwgLyogRm9yIGNoZWNrIHBvd2VyIG9uIGZhY3RvcnMgdG8gZGVjaWRlIHBvd2VyIG9uIHJlYXNvbiBhbmQgc2F2ZSBpbiBSVEMgcmVnaXN0ZXIgKi8KKwlQV19DTURfVVBEQVRFX0ZMQUdTLCAvKiB1cGRhdGUgcG93ZXIgb24gcmVhc29uIHRvIHJ0YyByZWdpc3RlciAqLworCVBXX0NNRF9ORkJfUE9XRVJPTiwgLyogY2FsbCBSVEMgbW9kdWxlIHRvIGxhdGNoIHBvd2VyIGFuZCBpbml0IHRpbWUgaWYgbmVjZXNzYXJ5IChvbmx5IGZvciBOQU5EIEZMQVNIIEJPT1RJTkcpICovCisJUFdfQ01EX0lTX1VTQl9CT09ULCAvKiBxdWVyeSBpcyBwb3dlciBvbiByZWFzb24gVVNCIHBsdWcgaW4gICovCit9IERDTF9DVFJMX1BXX0NNRDsKKyNlbHNlIC8qIF9fQlVJTERfRE9NX18gKi8KKyNkZWZpbmUgUFdfQ01EUyBcCisJUFdfQ01EX1BPV0VST04sIFwKKwlQV19DTURfUE9XRVJPRkYsIFwKKwlQV19DTURfU0VUX1BPV0VST05fUkVBU09OLCBcCisJUFdfQ01EX0dFVF9QT1dFUk9OX1JFQVNPTiwgXAorCVBXX0NNRF9TRVRfU1dJVENIX1RPX0lETEUsIFwKKwlQV19DTURfQ0xFQVJfU1dJVENIX1RPX0lETEUsIFwKKwlQV19DTURfUE9XRVJfSU5JVCwgXAorCVBXX0NNRF9VUERBVEVfRkxBR1MsIFwKKwlQV19DTURfTkZCX1BPV0VST04sIFwKKwlQV19DTURfSVNfVVNCX0JPT1QsCisjZW5kaWYgLyogX19CVUlMRF9ET01fXyAqLwkJCisKKyNpZm5kZWYgX19EUlZfREVCVUdfUFdJQ19SRUdfUkVBRF9XUklURV9fCisjZGVmaW5lIFBXX0RSVl9DbGVhckJpdHMxNihhZGRyLCBkYXRhKSAgICAgICBEUlZfQ2xlYXJCaXRzKGFkZHIsZGF0YSkKKyNkZWZpbmUgUFdfRFJWX1NldEJpdHMxNihhZGRyLCBkYXRhKSAgICAgICAgIERSVl9TZXRCaXRzKGFkZHIsZGF0YSkKKyNkZWZpbmUgUFdfRFJWX1dyaXRlUmVnMTYoYWRkciwgZGF0YSkgICAgICAgIERSVl9Xcml0ZVJlZyhhZGRyLCBkYXRhKQorI2RlZmluZSBQV19EUlZfV3JpdGVSZWczMihhZGRyLCBkYXRhKSAgICAgICAgRFJWX1dyaXRlUmVnMzIoYWRkciwgZGF0YSkKKyNkZWZpbmUgUFdfRFJWX1JlYWRSZWcxNihhZGRyKSAgICAgICAgICAgICAgIERSVl9SZWcoYWRkcikKKyNkZWZpbmUgUFdfRFJWX1JlYWRSZWczMihhZGRyKSAgICAgICAgICAgICAgIERSVl9SZWczMihhZGRyKQorI2Vsc2UgLy8gI2lmbmRlZiBfX0RSVl9ERUJVR19QV0lDX1JFR19SRUFEX1dSSVRFX18KKyNkZWZpbmUgUFdfRFJWX0NsZWFyQml0czE2KGFkZHIsZGF0YSkgICAgICAgIERSVl9EQkdfQ2xlYXJCaXRzKGFkZHIsZGF0YSkKKyNkZWZpbmUgUFdfRFJWX1NldEJpdHMxNihhZGRyKSAgICAgICAgICAgICAgIERSVl9EQkdfU2V0Qml0cyhhZGRyKQorI2RlZmluZSBQV19EUlZfV3JpdGVSZWcxNihhZGRyLCBkYXRhKSAgICAgICAgRFJWX0RCR19Xcml0ZVJlZyhhZGRyLCBkYXRhKQorI2RlZmluZSBQV19EUlZfV3JpdGVSZWczMihhZGRyLCBkYXRhKSAgICAgICAgRFJWX0RCR19Xcml0ZVJlZzMyKGFkZHIsIGRhdGEpCisjZGVmaW5lIFBXX0RSVl9SZWFkUmVnMTYoYWRkcikgICAgICAgICAgICAgICBEUlZfREJHX1JlZyhhZGRyKQorI2RlZmluZSBQV19EUlZfUmVhZFJlZzMyKGFkZHIpICAgICAgICAgICAgICAgRFJWX0RCR19SZWczMihhZGRyKQorI2VuZGlmIC8vICNpZm5kZWYgX19EUlZfREVCVUdfUFdJQ19SRUdfUkVBRF9XUklURV9fCisKKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfUE1VX0hfU1RSVUNUX18KKyNlbmRpZiAvLyAjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUCisKKworI2lmZGVmIERDTF9ERUZJTklUSU9OX1BST1RPVFlQRQorI2lmbmRlZiBfX0RDTF9QV19IX1BST1RPVFlQRV9fCisjZGVmaW5lIF9fRENMX1BXX0hfUFJPVE9UWVBFX18KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQV19Jbml0aWFsaXplCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGluaXRpYWxpemUgUFcgbW9kdWxlCisqCisqIFBBUkFNRVRFUlMKKyogIE5vbmUKKyoKKyogUkVUVVJOUworKiAgU1RBVFVTX09LCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsUFdfSW5pdGlhbGl6ZSh2b2lkKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQV19PcGVuCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIG9wZW4gdGhlIFBXIG1vZHVsZSBhbmQgcmV0dXJuIGEgaGFuZGxlCisqCisqIFBBUkFNRVRFUlMKKyogIGRldjogb25seSB2YWxpZCBmb3IgRENMX1BXCisqICBmbGFnczogbm8gc2VwY2lhbCBmbGFncyBpcyBuZWVkZWQuIFBsZWFzZSB1c2UgRkxBR1NfTk9ORQorKgorKiBSRVRVUk5TCisqICBEQ0xfSEFORExFX0lOVkFMSUQ6IE9wZW4gZmFpbGVkLgorKiAgb3RoZXIgdmFsdWU6IGEgdmFsaWQgaGFuZGxlCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9IQU5ETEUgRGNsUFdfT3BlbihEQ0xfREVWIGRldiwgRENMX0ZMQUdTIGZsYWdzKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQV19SZWFkRGF0YQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgUFcgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQV19SZWFkRGF0YShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0JVRkYgKmJ1ZmYsIERDTF9CVUZGX0xFTiBidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQV19Xcml0ZURhdGEKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlIFBXIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsUFdfV3JpdGVEYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOIGJ1Zl9sZW4sIERDTF9PUFRJT05TIG9wdGlvbnMpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFBXX0NvbmZpZ3VyZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgUFcgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQV19Db25maWd1cmUoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DT05GSUdVUkVfVCAqY29uZmlndXJlKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQV19SZWdpc3RlckNhbGxiYWNrCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBQVyBtb2R1bGUgbm93LgorKgorKiBQQVJBTUVURVJTCisqCU4vQQorKgorKiBSRVRVUk5TCisqCVNUQVRVU19VTlNVUFBPUlRFRAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFBXX1JlZ2lzdGVyQ2FsbGJhY2soRENMX0hBTkRMRSBoYW5kbGUsIERDTF9FVkVOVCBldmVudCwgUEZOX0RDTF9DQUxMQkFDSyBjYWxsYmFjayk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKglEY2xQV19Db250cm9sCisqCisqIERFU0NSSVBUSU9OCisqICAgCVRoaXMgZnVuY3Rpb24gaXMgdG8gc2VuZCBjb21tYW5kIHRvIGNvbnRyb2wgdGhlIFBXIG1vZHVsZS4KKyoJQWxsIGNvbW1hbmQgCisqCisqIENBTExTICAKKyoJSXQgaXMgY2FsbGVkIHRvIHNlbmQgY29tbWFuZCB0byBjb250cm9sIHRoZSBQVyBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogW0lOXSBUaGUgaGFuZGxlIHZhbHVlIHJldHVybmVkIGZyb20gRGNsUFdfT3BlbigpCisqICBjbWQ6IFtJTl0gQSBjb250cm9sIGNvbW1hbmQgZm9yIFBXIG1vZHVsZQorKiAgICAgICAgICAxLiBQV19DTURfUE9XRVJPTjogY2FsbCBSVEMgbW9kdWxlIHRvIGxhdGNoIHBvd2VyIGFuZCBpbml0IHRpbWUgaWYgbmVjZXNzYXJ5CisqICAgICAgICAgIDIuIFBXX0NNRF9QT1dFUk9GRjogY2FsbCBSVEMgbW9kdWxlIHRvIHVubGF0Y2ggcG93ZXIKKyogICAgICAgICAgMy4gUFdfQ01EX1NFVF9QT1dFUk9OX1JFQVNPTjogc2V0IHBvd2VyIG9uIHJlYXNvbgorKiAgICAgICAgICA0LiBQV19DTURfR0VUX1BPV0VST05fUkVBU09OOiBnZXQgcG93ZXIgb24gcmVhc29uCisqICAgICAgICAgIDUuIFBXX0NNRF9TRVRfU1dJVENIX1RPX0lETEU6IHNldCBmbGFnIHdoaWNoIGZvcmNlIHBob25lIHRvIGVudGVyIGlkbGUgbW9kZQorKiAgICAgICAgICA2LiBQV19DTURfQ0xFQVJfU1dJVENIX1RPX0lETEU6IGNsZWFyIGZsYWcgd2hpY2ggZm9yY2UgcGhvbmUgdG8gZW50ZXIgaWRsZSBtb2RlCisqICAgICAgICAgIDcuIFBXX0NNRF9QT1dFUl9JTklUOiBjaGVjayBwb3dlciBvbiBmYWN0b3JzIHRvIGRlY2lkZSBwb3dlciBvbiByZWFzb24gYW5kIHNhdmUgaW4gUlRDIHJlZ2lzdGVyCisqCSAgICAgOC4gUFdfQ01EX1VQREFURV9GTEFHUzogdXBkYXRlIHBvd2VyIG9uIHJlYXNvbiB0byBydGMgcmVnaXN0ZXIKKyoJICAgICA5LiBQV19DTURfTkZCX1BPV0VST046IGNhbGwgUlRDIG1vZHVsZSB0byBsYXRjaCBwb3dlciBhbmQgaW5pdCB0aW1lIGlmIG5lY2Vzc2FyeSAob25seSBmb3IgTkFORCBGTEFTSCBCT09USU5HKQorKiAgICAgICAgICAxMC4gUFdfQ01EX0lTX1VTQl9CT09UOiBxdWVyeSBpcyBwb3dlciBvbiByZWFzb24gVVNCIHBsdWcgaW4KKyoKKyogIGRhdGE6IFRoZSBkYXRhIG9mIHRoZSBjb250cm9sIGNvbW1hbmQKKyogICAgICAgICAgMS4gUFdfQ01EX1BPV0VST046IEEgbnVsbCBwb2ludGVyCisqICAgICAgICAgIDIuIFBXX0NNRF9QT1dFUk9GRjogQSBudWxsIHBvaW50ZXIKKyogICAgICAgICAgMy4gUFdfQ01EX1NFVF9QT1dFUk9OX1JFQVNPTjogcG9pbnRlciB0byBhIFBXX0NUUkxfU0VUX1BPV0VST05fUkVBU09OIHN0cnVjdHVyZQorKiAgICAgICAgICA0LiBQV19DTURfR0VUX1BPV0VST05fUkVBU09OOiBwb2ludGVyIHRvIGEgUFdfQ1RSTF9HRVRfUE9XRVJPTl9SRUFTT04gc3RydWN0dXJlCisqICAgICAgICAgIDUuIFBXX0NNRF9TRVRfU1dJVENIX1RPX0lETEU6IEEgbnVsbCBwb2ludGVyCisqICAgICAgICAgIDYuIFBXX0NNRF9DTEVBUl9TV0lUQ0hfVE9fSURMRTogQSBudWxsIHBvaW50ZXIKKyogICAgICAgICAgNy4gUFdfQ01EX1BPV0VSX0lOSVQ6IEEgbnVsbCBwb2ludGVyCisqCSAgICAgOC4gUFdfQ01EX1VQREFURV9GTEFHUzogQSBudWxsIHBvaW50ZXIKKyoJICAgICA5LiBQV19DTURfTkZCX1BPV0VST046IEEgbnVsbCBwb2ludGVyCisqICAgICAgICAgIDEwLiBQV19DTURfSVNfVVNCX0JPT1Q6IHBvaW50ZXIgdG8gYSBQV19DVFJMX0lTX1VTQl9CT09UCisqCisqIFJFVFVSTlMKKyogIFNUQVRVU19PSzogY29tbWFuZCBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisqICBTVEFUVVNfRkFJTDogY29tbWFuZCBpcyBmYWlsZWQuCisqICBTVEFUVVNfSU5WQUxJRF9DTUQ6IEl0J3MgYSBpbnZhbGlkIGNvbW1hbmQuCisqICAgICBTVEFUVVNfVU5TVVBQT1JURUQ6IEl0J3MgYSB1bnN1cHBvcnRlZCBjb21tYW5kLgorKgorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgZXh0ZXJuYWxfZ2xvYmFsCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsUFdfQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQV19DbG9zZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBjbG9zZSB0aGUgUFcgbW9kdWxlLgorKgorKiBQQVJBTUVURVJTCisqICBoYW5kbGU6IHRoZSByZXR1cm5lZCBoYW5kbGUgdmFsdWUgb2YgRGNsUFdfT3BlbgorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQV19DbG9zZShEQ0xfSEFORExFIGhhbmRsZSk7CisKKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfUFdfSF9QUk9UT1RZUEVfXworCisjZW5kaWYgLy8jaWZkZWYgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisKKworCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9wd20uaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX3B3bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NjZkZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9wd20uaApAQCAtMCwwICsxLDYwMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDAxCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgZGNsX1BXTS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1hdWkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBIZWFkZXIgZmlsZSBvZiBEQ0wgKERyaXZlciBDb21tb24gTGF5ZXIpIGZvciBQV00uCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUCisjaWZuZGVmIF9fRENMX1BXTV9IX1NUUlVDVF9fCisjZGVmaW5lIF9fRENMX1BXTV9IX1NUUlVDVF9fCisvLyNpbmNsdWRlICJrYWxfbm9uX3NwZWNpZmljX2dlbmVyYWxfdHlwZXMuaCIgIC8vaXQgaXMgZW1wdHkgLHdlIGRvbid0IGRlbGV0ZSBpdCBpbiBvcmRlciB0byBhdm9pZCAgdmlsYXRpbmcgIEhBTCBydWxlIDEKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjZGVmaW5lICBQV01fT1VUUFVUX0xPVyAgIDAKKyNkZWZpbmUgIFBXTV9PVVRQVVRfSElHSCAgMQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgIFBXTV9NQVhfRlJFUSAgICAgNTAwMDAKKyNkZWZpbmUgIFBXTV9NQVhfRFVUWSAgICAgMTAwCisjZGVmaW5lICBQV01fTUlOX0ZSRVEgICAgIDUwCisjZGVmaW5lICBQV01fTUlOX0RVVFkgICAgIDEKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQ4ICBwaXRjaDsgIC8qbm90ZSB2bGF1ZSovCisgICBEQ0xfVUlOVDggIHZvbHVtZTsgLypub3RlIHZvbHVtZSovCisgICBEQ0xfVUlOVDE2IG9uX2R1cmF0aW9uOyAgLyogaW4gbXMgKi8KKyAgIERDTF9VSU5UMTYgb2ZmX2R1cmF0aW9uOyAgLyogaW4gbXMgKi8KK31CdXpOb3RlU3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQ4IHZvbHVtZTsKKyAgIERDTF9VSU5UOCBzdG9wOworICAgRENMX1VJTlQzMiBoYW5kbGU7ICAvKkdQVCBoYW5kbGUqLworICAgQnV6Tm90ZVN0cnVjdCBOb3Rlc0RhdGE7CisgICBrYWxfYm9vbCAoKkdldE5vdGVzQ2FsbGJhYykoQnV6Tm90ZVN0cnVjdCAqQnV6KTsKKyAgIHZvaWQgKCpFbmRvZkFsdGVyUGxheSkodm9pZCk7Cit9QUx0ZXJOb3RlU3RydWN0OworCisvKiBQV00gd3JvayBtb2RlIGVudW1lcmF0ZSovCit0eXBlZGVmIGVudW0KK3sKKyAgIFBXTV9GSUZPX01PREU9MCwKKyAgIFBXTV9NRU1PX01PREUsCisgICBQV01fT0xEX01PREUsCisgICBQV01fUkFORE9NX01PREUsCisgICBQV01fTU9ERV9DT1VOVAorfXB3bV9tb2RlX2U7CisKKy8qUFdNIEZJRk8gbW9kZSBkYXRhIHN0cnVjdHVyZS5bbW9yZSBkZXRhaWwgaW4gc3BlY10qLwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICBrYWxfdWludDMyIGRhdGEwOworICAga2FsX3VpbnQzMiBkYXRhMTsKKyAgIGthbF91aW50MTYgcmVwZWF0X2NvdW50OyAvKiAwIG1lYW5zIGVuZGxlc3MgcmVwZWF0ICovCisgICBrYWxfdWludDggIHN0b3BfYml0cG9zOyAvKiAwfjYzKi8KKyAgIGthbF91aW50MTYgaGlnaF9kdXI7IC8qIG11c3Q+MC4gV2hlbiBzZXQgdG8gTiwgdGhlIGR1cmF0aW9uIGlzIE4rMSBjbG9ja3MuICovCisgICBrYWxfdWludDE2IGxvd19kdXI7IC8qIG11c3Q+MC4gV2hlbiBzZXQgdG8gTiwgdGhlIGR1cmF0aW9uIGlzIE4rMSBjbG9ja3MuICovCisgICBrYWxfdWludDE2IGd1YXJkX2R1cjsgLyogbXVzdD4wLiBXaGVuIHNldCB0byBOLCB0aGUgZHVyYXRpb24gaXMgTisxIGNsb2Nrcy4gKi8KKyAgIGthbF91aW50OCAgaWRsZV9vdXRwdXQ7IC8qIFBXTV9PVVRQVVRfTE9XIG9yIFBXTV9PVVRQVVRfSElHSCAqLworICAga2FsX3VpbnQ4ICBndWFyZF9vdXRwdXQ7IC8qIFBXTV9PVVRQVVRfTE9XIG9yIFBXTV9PVVRQVVRfSElHSCAqLworICAgdm9pZCAgICAgICAoKnB3bV9jYWxsYmFjaykoa2FsX3VpbnQzMiBwd21fbnVtKTsKK31wd21fZmlmb19wYXJhX3M7CisKKy8qUFdNIG1lbW9yeSBtb2RlIGRhdGEgc3RydWN0dXJlLlttb3JlIGRldGFpbCBpbiBzcGVjXSAqLwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICBrYWxfdWludDMyICpidWZfYWRkcjsKKyAgIGthbF91aW50MTYgYnVmX3NpemU7CisgICBrYWxfdWludDE2IHJlcGVhdF9jb3VudDsgLyogMCBtZWFucyBlbmRsZXNzIHJlcGVhdCAqLworICAga2FsX3VpbnQ4ICBzdG9wX2JpdHBvczsgLyogMH4zMSBpbiB0aGUgbGFzdCAzMmJpdHMqLworICAga2FsX3VpbnQxNiBoaWdoX2R1cjsgLyogbXVzdD4wLiBXaGVuIHNldCB0byBOLCB0aGUgZHVyYXRpb24gaXMgTisxIGNsb2Nrcy4gKi8KKyAgIGthbF91aW50MTYgbG93X2R1cjsgLyogbXVzdD4wLiBXaGVuIHNldCB0byBOLCB0aGUgZHVyYXRpb24gaXMgTisxIGNsb2Nrcy4gKi8KKyAgIGthbF91aW50MTYgZ3VhcmRfZHVyOyAvKiBtdXN0PjAuIFdoZW4gc2V0IHRvIE4sIHRoZSBkdXJhdGlvbiBpcyBOKzEgY2xvY2tzLiAqLworICAga2FsX3VpbnQ4ICBpZGxlX291dHB1dDsgLyogUFdNX09VVFBVVF9MT1cgb3IgUFdNX09VVFBVVF9ISUdIICovCisgICBrYWxfdWludDggIGd1YXJkX291dHB1dDsgLyogUFdNX09VVFBVVF9MT1cgb3IgUFdNX09VVFBVVF9ISUdIICovCisgICB2b2lkICAgICAgICgqcHdtX2NhbGxiYWNrKShrYWxfdWludDMyIHB3bV9udW0pOworfXB3bV9tZW1vX3BhcmFfczsKKworLypQV00gb2xkIG1vZGUgZGF0YSBzdHJ1Y3R1cmUuW21vcmUgZGV0YWlsIGluIHNwZWNdKi8KK3R5cGVkZWYgc3RydWN0IAoreworICAga2FsX3VpbnQxNiBkYXRhX3dpZHRoOworICAga2FsX3VpbnQxNiB0aHJlc2hvbGQ7CisgICBrYWxfdWludDE2IHJlcGVhdF9jb3VudDsgLyogMCBtZWFucyBlbmRsZXNzIHJlcGVhdCAqLworICAga2FsX3VpbnQxNiBndWFyZF9kdXI7IC8qIG11c3Q+MC4gV2hlbiBzZXQgdG8gTiwgdGhlIGR1cmF0aW9uIGlzIE4rMSBjbG9ja3MuICovCisgICBrYWxfdWludDggIGlkbGVfb3V0cHV0OyAvKiBQV01fT1VUUFVUX0xPVyBvciBQV01fT1VUUFVUX0hJR0ggKi8KKyAgIGthbF91aW50OCAgZ3VhcmRfb3V0cHV0OyAvKiBQV01fT1VUUFVUX0xPVyBvciBQV01fT1VUUFVUX0hJR0ggKi8KKyAgIHZvaWQgICAgICAgKCpwd21fY2FsbGJhY2spKGthbF91aW50MzIgcHdtX251bSk7Cit9cHdtX29sZF9wYXJhX3M7CisKKy8qUFdNIHJhbmRvbSBtb2RlIGRhdGEgc3RydWN0dXJlLlttb3JlIGRldGFpbCBpbiBzcGVjXSovCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgIGthbF91aW50MzIgKmJ1ZjBfYWRkcjsKKyAgIGthbF91aW50MzIgKmJ1ZjFfYWRkcjsKKyAgIGthbF91aW50MTYgYnVmMF9zaXplOyAvKiBtdXN0PjAgKi8KKyAgIGthbF91aW50MTYgYnVmMV9zaXplOyAvKiBtdXN0PjAgKi8KKyAgIGthbF91aW50MTYgaGlnaF9kdXI7IC8qIG11c3Q+MC4gV2hlbiBzZXQgdG8gTiwgdGhlIGR1cmF0aW9uIGlzIE4rMSBjbG9ja3MuICovCisgICBrYWxfdWludDE2IGxvd19kdXI7IC8qIG11c3Q+MC4gV2hlbiBzZXQgdG8gTiwgdGhlIGR1cmF0aW9uIGlzIE4rMSBjbG9ja3MuICovCisgICBrYWxfdWludDggIGlkbGVfb3V0cHV0OyAvKiBQV01fT1VUUFVUX0xPVyBvciBQV01fT1VUUFVUX0hJR0ggKi8KKyAgIHZvaWQgICAgICAgKCpwd21faW52YWxpZF9jYikoa2FsX3VpbnQzMiBwd21fbnVtLCBrYWxfdWludDggYnVmX251bSk7CisgICB2b2lkICAgICAgICgqcHdtX3VuZGVyZmxvd19jYikoa2FsX3VpbnQzMiBwd21fbnVtKTsKK31wd21fcmFuZG9tX3BhcmFfczsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9VSU5UMzIgY2xrc3JjOyAvL3RoZSBDbG9jayBzb3VyY2Ugb2YgdGhlIFBXTSBtb2R1bGUuCisgICBEQ0xfVUlOVDMyIGNsa2RpdjsgLy9UaGUgQ2xvY2sgRGl2aXNvciB2YWx1ZS4KK31QV01fQ09ORklHX1Q7CisKKyNkZWZpbmUgUFdNX0NPTkZJR1MgICAgXAorICAgUFdNX0NPTkZJR19UICAgclBXTUNvbmZpZzsgCisKKyNpZmRlZiBfX0JVSUxEX0RPTV9fCisvKgorKiBUaGUgQUxFUlRFUiBDb21tYW5kIHZhbHVlcyBpbiBEQ0xfQ1RSTF9DTURfVCBFbnVtIG9mIGRjbC5oIAorKiBEQ0xfQ1RSTF9EQVRBX1QgRGVmaW5lIHRoZSBDb250cm9sIGRhdGEgc3RydWN0dXJlIGZvciBlYWNoIG1vZHVsZSdzIGNvbW1hbmQgCisqLwordHlwZWRlZiBlbnVtCit7CisgICBQV01fQ01EX1NFUV9PUEVOLCAvL1RoaXMgY29tbWFuZCBpcyB0byBvcGVuIHRoZSBQV00gY2hhbm5lbCB1bmRlciB0aGUgU2VxdWVudGlhbCBtb2RlLgorICAgUFdNX0NNRF9TRVFfU1RBUlQsIC8vVGhpcyBjb21tYW5kIGlzIHRvIGVuYWJsZSBQV00gb3V0cHV0IHVuZGVyIHRoZSBTZXF1ZW50aWFsIG1vZGUuCisgICBQV01fQ01EX1NFUV9TVE9QLCAgLy9UaGlzIGNvbW1hbmQgaXMgdG8gc3RvcCBQV00gb3V0cHV0IHVuZGVyIHRoZSBTZXF1ZW50aWFsIG1vZGUuCisgICBQV01fQ01EX1NFUV9DTE9TRSwgLy9UaGlzIGNvbW1hbmQgaXMgdG8gQ2xvc2UgdGhlIFBXTSBjaGFubmVsIHVuZGVyIHRoZSBTZXF1ZW50aWFsIG1vZGUuCisgICBQV01fQ09ORklHX0ZSRVFfU1RFUFMsIC8vVGhlIGNvbW1hbmQgaXMgdG8gc2V0IHRoZSBvdXRwdXQgZnJlcXVlbmN5IGFuZCB0aGUgc3RlcHMuaXQgaXMgdXNlZCBieSB0aGUgQ2FtZXJhIEFGIGxlbnMgZHJpdmVyLiAKKyAgIFBXTV9DTURfU0VUX0RVVFksIC8vVGhlIGZ1bmN0aW9uIGlzIHRvIHNldCB0aGUgb3V0cHV0IGR1dHkgdmFsdWUsIGl0IHNob3VsZCBub3QgbGFyZ2VyIHRoYW4gdGhlIFN0ZXBzIGluIHRoZSBhYm92ZSBmdW5jdGlvbi5pdCBpcyB1c2VkIGJ5IHRoZSBDYW1lcmEgQUYgbGVucyBkcml2ZXIuCisgICBQV01fQ01EX09QRU4sIC8vVGhpcyBjb21tYW5kIGlzIHRvIE9wZW4gUFdNIGNoYW5uZWwuVGhpcyBjb21tYW5kIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGZ1bmN0aW9uLgorICAgUFdNX0NNRF9DTE9TRSwgLy9UaGUgZnVuY3Rpb24gaXMgdG8gY2xvc2UgdGhlIFBXTSBjaGFubmVsLml0IHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgc3RvcCB0aGUgUFdNIGNoYW5uZWwuCisgICBQV01fQ01EX1NUQVJULCAvL1RoaXMgY29tbWFuZCBpcyB0byBTdGFydCB0aGUgUFdNIGNoYW5uZWwgb3V0cHV0Lkl0IGlzIGNhbGxlZCBhZnRlciBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gZmluaXNoZWQKKyAgIFBXTV9DTURfU1RPUCwgLy9UaGlzIGNvbW1hbmQgaXMgdG8gc3RvcCB0aGUgUFdNIGNoYW5uZWwgb3V0cHV0LgorICAgUFdNX0NNRF9DT05GSUcsIC8vVGhpcyBjb21tYW5kIGlzIHRvIGNvbmZpZ3VyZSB0aGUgUFdNIGNoYW5uZWwgd29ya2luZyBtb2RlIGFuZCBzZXR0aW5nIHRoZSBhY2NvcmluZyBtb2RlIHBhcmFtZXRlci4KKyAgIFBXTV9DTURfQ09ORklHX09MRCwgIC8vVGhpcyBjb21tYW5kIGlzIHRvIGNvbmZpZ3VyZSB0aGUgUFdNMSBvdXRwdXQgZnJlcXVlbmN5IGFuZCBkdXR5IGN5Y2xlLnRoZSBmdW5jdGlvbiBpcyB0byBnZW5lcmF0ZSB0aGUgc2ltcGxpZXN0IHBlcmlvZGljYWwgb3V0cHV0IHNpZ25hbC4KKyAgIFBXTV9DTURfU0VUX0JVRl9WQUxJRCwgLy9TZXQgYnVmZmVyIHN0YXR1cyB0byBiZSB2YWxpZCBhbmQgdXBkYXRlIHRoZSBidWZmZXIgZGF0YS50aGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gcmVjZWl2aW5nIHRoZSBmaW5pc2ggaW50ZXJydXB0IHVuZGVyIHRoZSByYW5kb20gbW9kZS5pdCBpcyByZXNwb25zaWJsZSB0byBjYWxsIHRoZSBmdW5jdGlvbiB0byB1cGRhdGUgdGhlIGJ1ZmZlciBvZiB0aGUgdXNlci4KKyAgIFBXTV9DTURfU0VUX0RFTEFZLCAvL1RoaXMgY29tbWFuZCBpcyB0byBzZXQgdGhlIGRlbGF5IHRpbWUgZHVyaW5nIHRoZSBhZGphY2VudCBjaGFubmVscyB1bmRlciB0aGUgU2VxdWVudGlhbCBtb2RlLgorICAgLy9QV01fQ01EX1RFU1RfU0VMLCAgc2hvdWxkIHJlbW92ZS4KKyAgIFBXTV9DTURfR0VUX0NVUlJFTlRfTEVWRUwsIC8vVGhpcyBjb21tYW5kIGlzIHRvIGdldCBjdXJyZW50IFBXTTEgb3V0cHV0IGxldmVsLgorICAgUFdNX0NNRF9HRVRfQ1VSUkVOVF9EVVRZLCAvL1RoaXMgY29tbWFuZCBpcyB0byBnZXQgY3VycmVudCBQV00xIG91dHB1dCBkdXR5IGN5Y2xlLgorICAgUFdNX0NNRF9HRVRfQ1VSUkVOVF9GUkVRLCAvL1RoaXMgY29tbWFuZCBpcyB0byBnZXQgY3VycmVudCBQV00xIG91dHB1dCBkdXR5IGN5Y2xlLgorICAgQUxFUlRFUl9DTURfQ09ORklHVVJFLCAvL2NvbmZpZ3VyZSBBTGVydGVyIGZyZXEgYW5kIGR1dHkuCisgICBBTEVSVEVSX0NNRF9TVEFSVCwgCSAgLy9TdGFydCBBTEVSVEVSIG1vZHVsZS4KKyAgIEFMRVJURVJfQ01EX1NUT1AsIAkJICAvL1N0b3AgQUxFUlRFUiBtb2R1bGUuCisgICBBTEVSVEVSX0NNRF9QV1JPUEVOLCAKKyAgIEFMRVJURVJfQ01EX09VVFBVVCwgCisgICBBTEVSVEVSX0NNRF9QTEFZTk9URVMsIAorICAgQUxFUlRFUl9DTURfU1RPUE5PVEVTLCAKKyAgIEFMRVJURVJfQ01EX1NFVEJVWlZPTFVNRSwgCisgICBBTEVSVEVSX0NNRF9HRVRMRVZFTCwKK31EQ0xfQ1RSTF9DTURfVDsKKyNlbHNlCisjZGVmaW5lIFBXTV9DTURTICAgIFwKKyAgIFBXTV9DTURfU0VRX09QRU4sIFwKKyAgIFBXTV9DTURfU0VRX1NUQVJULCBcCisgICBQV01fQ01EX1NFUV9TVE9QLCBcCisgICBQV01fQ01EX1NFUV9DTE9TRSwgXAorICAgUFdNX0NPTkZJR19GUkVRX1NURVBTLCBcCisgICBQV01fQ01EX1NUQVJULCBcCisgICBQV01fQ01EX1NUT1AsIFwKKyAgIFBXTV9DTURfR0VUX0NVUlJFTlRfTEVWRUwsIFwKKyAgIFBXTV9DTURfR0VUX0NVUlJFTlRfRFVUWSwgXAorICAgUFdNX0NNRF9HRVRfQ1VSUkVOVF9GUkVRLCBcCisgICBQV01fQ01EX0NPTkZJRywgXAorICAgUFdNX0NNRF9DT05GSUdfT0xELCBcCisgICBQV01fQ01EX1NFVF9CVUZfVkFMSUQsIFwKKyAgIFBXTV9DTURfU0VUX0RFTEFZLCBcCisgICBQV01fQ01EX1NFVF9EVVRZLCBcCisgICBQV01fQ01EX1RFU1RfU0VMLCBcCisgICBQV01fQ01EX09QRU4sIFwKKyAgIFBXTV9DTURfQ0xPU0UsCisgICAKKyNkZWZpbmUgQUxFUlRFUl9DTURTIFwKKyAgIEFMRVJURVJfQ01EX0NPTkZJR1VSRSwgXAorICAgQUxFUlRFUl9DTURfU1RBUlQsIFwKKyAgIEFMRVJURVJfQ01EX1NUT1AsIFwKKyAgIEFMRVJURVJfQ01EX1BXUk9QRU4sIFwKKyAgIEFMRVJURVJfQ01EX09VVFBVVCwgXAorICAgQUxFUlRFUl9DTURfUExBWU5PVEVTLCBcCisgICBBTEVSVEVSX0NNRF9TVE9QTk9URVMsIFwKKyAgIEFMRVJURVJfQ01EX1NFVEJVWlZPTFVNRSwgXAorICAgQUxFUlRFUl9DTURfR0VUTEVWRUwsCisgICAKKyNlbmRpZgorCisvKiBGb3IgUFdNX0NNRF9TRVFfU1RBUlQgY29tbWFuZCBwYXJhbWV0ZXIuICovIAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9VSU5UOCB1RW5Db3VudDsgLy90aGUgUFdNIENoYW5uZWwgR3JvdXAgb2YgdGhlIFNlcXVlbnRpYWwgbW9kZQorfVBXTV9DVFJMX1NTX1Q7CisKKy8qIEZvciBQV01fQ01EX0NMS19JTklUIGNvbW1hbmQgcGFyYW1ldGVyLiAqLyAKK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDMyIHU0Q2xrU2VsOyAvL3RoZSBDbG9jayBzb3VyY2Ugb2YgdGhlIFBXTSBtb2R1bGUuCisgICBEQ0xfVUlOVDMyIHU0Q2xrRGl2OyAvLyBUaGUgQ2xvY2sgRGl2aXNvciB2YWx1ZS4KK31QV01fQ1RSTF9DSV9UOworCisvKiBGb3IgUFdNX0NNRF9TRVRfQlVGX1ZBTElEIGNvbW1hbmQgcGFyYW1ldGVyLiAqLyAKK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDMyICpwdTRCdWZBZGRyOyAvL3RoZSBidWZmZXIgYWRkcmVzcyBvZiB0aGUgdXBkYXRlIGRhdGEuCisgICBEQ0xfVUlOVDE2ICB1MkJ1ZlNpemU7ICAvL3RoZSBidWZmZXIgc2l6ZS4KKyAgIERDTF9CT09MICAgZmdJc0J1ZjA7ICAgIC8vdGhlIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgYnVmZmVyIDAgaXMgdG8gYmUgdXBkYXRlCit9UFdNX0NUUkxfU0JWX1Q7CisKKy8qIEZvciBQV01fQ01EX1NFVF9ERUxBWSBjb21tYW5kIHBhcmFtZXRlci4gKi8gCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQzMiB1NENsa1NlbDsgLy8gdGhlIGNsb2NrIHVuaXQgb2YgdGhlIGRlbGF5X2NudAorICAgRENMX1VJTlQxNiB1MkRlbGF5Q250OyAvL3RoZSBkZWxheSBjbG9jayBjb3VudCBvZiB0aGUgdHdvIGNoYW5uZWxzLgorfVBXTV9DVFJMX1NEX1Q7CisKKy8qIEZvciBQV01fQ01EX1RFU1RfU0VMIGNvbW1hbmQgcGFyYW1ldGVyLiAqLyAKK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfQk9PTEVBTiBiVGVzdFNlbDsgCit9UFdNX0NUUkxfVFNfVDsKKworLyogRm9yIFBXTV9DTURfQ09ORklHIGNvbW1hbmQgcGFyYW1ldGVyLiAqLyAKK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDMyIG1vZGU7IC8vU2V0IHRoZSB3b3JrIG1vZGUgb2YgdGhlIFBXTSBjaGFubmVsLgorICAgdm9pZCAqcGFyYTsgLy8gVGhlIG1vZGUgcGFyYW1ldGVyLgorfVBXTV9DVFJMX0NPTkZJR19UOworCisvKiBGb3IgUFdNX0NNRF9DT05GSUdfT0xEIGNvbW1hbmQgcGFyYW1ldGVyLiAqLyAKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDMyIGZyZXE7IC8vIHRoZSBQV00gY2hhbm5lbCBvdXRwdXQgZnJlcXVlbmN5LgorICAga2FsX3VpbnQ4IGR1dHk7ICAvLyB0aGUgZHV0eSBjeWNsZSBvZiB0aGUgaGlnaCBsZXZlbCB1bmRlciB0aGUgcGVyaW9kaWNhbCBvdXRwdXQuCit9UFdNX0NNRF9DT05GSUdfT0xEX1Q7CisKKy8qRm9yCisqIFBXTV9DTURfR0VUX0NVUlJFTlRfTEVWRUwsIAorKiBQV01fQ01EX0dFVF9DVVJSRU5UX0RVVFksIAorKiBQV01fQ01EX0dFVF9DVVJSRU5UX0ZSRVEsIAorKiBjb21tYW5kIHBhcmFtZXRlcgorKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDggCXB3bV9sZXZlbDsvL3JldHVybiB2YWx1ZSBvZiB0aGUgY29tbWFuZCAsIHRoZSBjdXJyZW50IGxldmVsIHZhbHVlCisgICBEQ0xfVUlOVDggCXB3bV9kdXR5OyAvL3JldHVybiB2YWx1ZSBvZiB0aGUgY29tbWFuZCAsdGhlIGN1cnJlbnQgc2V0dGluZyBkdXR5IGN5Y2xlIHZhbHVlCisgICBEQ0xfVUlOVDMyICBwd21fZnJlcTsvL3JldHVybiB2YWx1ZSBvZiB0aGUgY29tbWFuZCAsdGhlIGN1cnJlbnQgc2V0dGluZyBmcmVxdWVuY3kgdmFsdWUKK31QV01fREFUQV9UOworCisvKkZvciBQV01fQ01EX1NFVF9EVVRZIGNvbW1hbmQgcGFyYW1ldGVyLiovCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQxNiBkdXR5OyAvL3RoZSBvdXRwdXQgZHV0eSB2YWx1ZSAoMH5zdGVwcykuCit9UFdNX0RVVFlfVDsKKworLypGb3IgUFdNX0NPTkZJR19GUkVRX1NURVBTIGNvbW1hbmQgcGFyYW1ldGVyLiovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQzMiBmcmVxOyAgLy90aGUgb3V0cHV0IGZyZXF1ZW5jeS4KKyAgIGthbF91aW50MTYgc3RlcHM7IC8vdGhlIGxlbnMgZHJpdmVyIHN0ZXBzLgorfVBXTV9DT05GSUdfRlJFUV9TVEVQU19UOworCisvLyNpZiAhZGVmaW5lZChEUlZfQUxFUlRFUl9OT1RfRVhJU1QpCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQzMiBmcmVxOworICAgRENMX1VJTlQ4ICBkdXR5OworfUFMRVJURVJfQ09ORklHVVJFX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfQk9PTCBwb3dlcm9uOworfUFMRVJURVJfUFdST1BFTl9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgKCpHZXROb3RlY2FsbGJhYykoQnV6Tm90ZVN0cnVjdCAqQnV6KTsKKyAgIHZvaWQgKCplbmRvZkFsdGVyKSh2b2lkKTsKK31BTEVSVEVSX1BMQVlOT1RFX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDggdm9sdW1uOworfUFMRVJURVJfU0VUVk9MVU1OX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDggICBtb2RlOworICAgRENMX1VJTlQ4ICAgY2xvY2s7Cit9QUxFUlRFUl9DT05GSUdfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCBvdXRwdXQ7Cit9QUxFUlRFUl9PVVRQVVRfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCBsZXZlbDsKK31BTEVSVEVSX0xFVkVMX1Q7CisKKyNkZWZpbmUgQUxFUlRFUl9DVFJMUwkJXAorICAgQUxFUlRFUl9DT05GSUdVUkVfVCAgICAgcmFsZXJ0Q29uZmlndXJlOyBcCisgICBBTEVSVEVSX1BXUk9QRU5fVAkgICAgICByYWxlcnRQd3JPcGVuOyBcCisgICBBTEVSVEVSX1BMQVlOT1RFX1QgICAgICByYWxlcnRQbGF5Tm90ZTsgXAorICAgQUxFUlRFUl9TRVRWT0xVTU5fVCAgICAgcmFsZXJ0U2V0Vm9sdW1uOyBcCisgICBBTEVSVEVSX0NPTkZJR19UICAgICAgICByYWxlcnRDb25maWc7CSBcCisgICBBTEVSVEVSX09VVFBVVF9UICAgICAgICByYWxlcnRPdXRwdXQ7CVwKKyAgIEFMRVJURVJfTEVWRUxfVCAgICAgICAgIHJhbGVydGxldmVsOworCisKKyNkZWZpbmUgUFdNX0NUUkxTIFwKKyAgIFBXTV9DVFJMX1NTX1QgICAgICAgICAgIHJQV01DdHJsU1M7IFwKKyAgIFBXTV9DVFJMX0NJX1QgICAgICAgICAgIHJQV01DdHJsQ0k7IFwKKyAgIFBXTV9DVFJMX1NCVl9UICAgICAgICAgIHJQV01DdHJsU0JWOyBcCisgICBQV01fQ1RSTF9TRF9UICAgICAgICAgICByUFdNQ3RybFNEOyBcCisgICBQV01fQ1RSTF9UU19UICAgICAgICAgICByUFdNQ3RybFRTOyBcCisgICBQV01fRFVUWV9UICAgICAgICAgICAgICByUFdNQ3RybER1dHk7IFwKKyAgIFBXTV9EQVRBX1QgICAgICAgICAgICAgIHJQV01TYXZlRGF0YTsgXAorICAgUFdNX0NUUkxfQ09ORklHX1QgICAgICAgclBXTUNvbmZpZzsgXAorICAgUFdNX0NPTkZJR19GUkVRX1NURVBTX1QgclBXTUZyZXFDb25maWc7IFwKKyAgIFBXTV9DTURfQ09ORklHX09MRF9UICAgIHJQV01Db25maWdPbGQ7IAorCisjZW5kaWYgLy8gI2lmbmRlZiBfX0RDTF9QV01fSF9TVFJVQ1RfXworI2VuZGlmIC8vICNpZmRlZiBEQ0xfREVGSU5JVElPTl9TVFJVQ1QgICAKKworCisjaWZkZWYgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisjaWZuZGVmIF9fRENMX1BXTV9IX1BST1RPVFlQRV9fCisjZGVmaW5lIF9fRENMX1BXTV9IX1BST1RPVFlQRV9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqCURjbFBXTV9DbG9zZQorKgorKiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqICAgCVRoaXMgZnVuY3Rpb24gaXMgdG8gY2xvc2UgdGhlIHNvZnR3YXJlIGxheWVyIG9mIFBXTSBtb2R1bGUuCisqCisqIENBTExTICAKKyoJSXQgaXMgY2FsbGVkIHRvIGNsb3NlIFBXTSgxfjYpIG1vZHVsZQorKgorKiBQQVJBTUVURVJTCisqCU5vbmUKKyoJCisqIFJFVFVSTlMKKyogICBEQ0xfU1RBVFVTX09LCisqICAgU1RBVFVTX0lOVkFMSURfQVJHVU1FTlQ6IGludmFsaWQgYXJndW1lbnRzCisqCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBleHRlcm5hbF9nbG9iYWwKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQV01fQ2xvc2UoRENMX0hBTkRMRSBoYW5kbGUpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyoJRGNsUFdNX0NvbmZpZ3VyZQorKgorKiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqICAgCVRoaXMgZnVuY3Rpb24gaXMgdG8gY29uZmlndXJlIHRoZSBQV00gbW9kdWxlLiBJbmNsdWRlIGNsb2NrIHNvdXJjZXMgYW5kIGRpdiB2YXVsZXMuCisqCisqIENBTExTICAKKyoJSXQgaXMgY2FsbGVkIHRvIGNvbmZpZ3VyZSBvZiB0aGUgUFdNIG1vZHVsZS4KKyoKKyogUEFSQU1FVEVSUworKiAgIGhhbmRsZTogIC0gYSB2YWxpZCBoYW5kbGUgcmV0dXJuIGJ5IERjbFBXTV9Db25maWd1cmUoKQorKgkKKyogUkVUVVJOUworKglTVEFUVVNfT0s6IGNvbW1hbmQgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorKglTVEFUVVNfRkFJTDogY29tbWFuZCBpcyBmYWlsZWQuCisqCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBleHRlcm5hbF9nbG9iYWwKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQV01fQ29uZmlndXJlKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQ09ORklHVVJFX1QgKmNvbmZpZ3VyZSk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKglEY2xQV01fQ29udHJvbAorKgorKiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqICAgCVRoaXMgZnVuY3Rpb24gaXMgdG8gc2VuZCBjb21tYW5kIHRvIGNvbnRyb2wgdGhlIFBXTSBtb2R1bGUuCisqCUFsbCBjb21tYW5kIAorKgorKiBDQUxMUyAgCisqCUl0IGlzIGNhbGxlZCB0byBzZW5kIGNvbW1hbmQgdG8gY29udHJvbCB0aGUgUFdNIG1vZHVsZS4KKyoKKyogUEFSQU1FVEVSUworKiAgIGhhbmRsZTogIC0gYSB2YWxpZCBoYW5kbGUgcmV0dXJuIGJ5IERjbFBXTV9PcGVuKCkKKyogICBjbWQ6ICAgLSBhIGNvbnRyb2wgY29tbWFuZCBmb3IgUFdNIG1vZHVsZQorKiAgICAgICAgICAxLiBQV01fQ01EX1NUQVJUOiB0byBzdGFydCBhIFBXTSB0aW1lcgorKiAgICAgICAgICAyLiBQV01fQ01EX1NUT1A6IHRvIHN0b3AgYSBQV00gdGltZXIKKyogICAgICAgICAgMy4gUFdNX0NNRF9DT05GSUc6IHRvIGNvbmZpZyBhIHB3bSB0aW1lci4KKyogICAgICAgICAgNC4gUFdNX0NNRF9DT05GSUdfT0xECisqICAgICAgICAgIDUuIFBXTV9DTURfR0VUX0NVUlJFTlRfTEVWRUw6CisqICAgICAgICAgIDYuIFBXTV9DTURfR0VUX0NVUlJFTlRfRFVUWToKKyogICAgICAgICAgNy4gUFdNX0NNRF9HRVRfQ1VSUkVOVF9GUkVROgorKgkgICAgIDguIFBXTV9DTURfT1BFTgorKgkgICAgIDkuIFBXTV9DTURfQ0xPU0UKKyogICAgICAgICAgMTAuIFBXTV9DTURfU0VRX09QRU46IAorKiAgICAgICAgICAxMS4gUFdNX0NNRF9TRVFfU1RBUlQ6CisqICAgICAgICAgIDEyLiBQV01fQ01EX1NFUV9TVE9QOgorKgkgICAgIDEzLiBQV01fQ01EX1NFUV9DTE9TRQorKgkgICAgIDE0LiBQV01fQ01EX1NFVF9CVUZfVkFMSUQKKyoJICAgICAxNS4gUFdNX0NNRF9TRVRfREVMQVkKKyoJICAgICAxNi4gUFdNX0NNRF9URVNUX1NFTAorKiAgIGRhdGEgLSBmb3IgMS4gUFdNX0NNRF9TVEFSVDogcG9pdGVyIHRvIGEgUFdNX0NUUkxfU1RBUlRfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgICAgMi4gUFdNX0NNRF9TVE9QOiBhIE5VTEwgcG9pbnRlcgorKgkgI2lmICFkZWZpbmVkKERSVl9BTEVSVEVSX05PVF9FWElTVCkKKyAjZGVmaW5lIEFMRVJURVJfQ01EUworIEFMRVJURVJfQ01EX0NPTkZJR1VSRSwgXAorIEFMRVJURVJfQ01EX1NUQVJULCAgIFwKKyBBTEVSVEVSX0NNRF9TVE9QLAkgIFwKKyBBTEVSVEVSX0NNRF9QV1JPUEVOLCBcCisgQUxFUlRFUl9DTURfT1VUUFVULCAgXAorIEFMRVJURVJfQ01EX1BMQVlOT1RFUywgICBcCisgQUxFUlRFUl9DTURfU1RPUE5PVEVTLCAgIFwKKyBBTEVSVEVSX0NNRF9TRVRCVVpWT0xVTUUsCisgI2VuZGlmIAorKiBSRVRVUk5TCisqCVNUQVRVU19PSzogY29tbWFuZCBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisqCVNUQVRVU19GQUlMOiBjb21tYW5kIGlzIGZhaWxlZC4KKyogICBTVEFUVVNfSU5WQUxJRF9DTUQ6IEl0J3MgYSBpbnZhbGlkIGNvbW1hbmQuCisqCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBleHRlcm5hbF9nbG9iYWwKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQV01fQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqCURjbFBXTV9Jbml0aWFsaXplCisqCisqIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyogICAJVGhpcyBmdW5jdGlvbiBpcyB0byBpbml0aWFsaXplIFBXTSBtb2R1bGUsIEl0J3Mgc2hvdWxkIGJlIGNhbGxlZCBkdXJpbmcgZHJ2X2luaXQgc3RhZ2UuCisqCQorKglGb3IgUFdNLCB0aGlzIGZ1bmN0aW9uIGRvIG5vdGhpbmcuCisqCisqCUZvciBSV0csIHRoaXMgZnVuY3Rpb24gY3JlYXRlIHNvbWUgZ2xvYmFsIHZhcmlhYmxlIGFuZCBMSVNSLCBISVNSLgorKgkKKyogQ0FMTFMgIAorKglJdCBpcyBjYWxsZWQgdG8gaW5pdGlhbGl6ZSBQV00gbW9kdWxlCisqCisqIFBBUkFNRVRFUlMKKyoJTm9uZQorKgkKKyogUkVUVVJOUworKglEQ0xfU1RBVFVTX09LCisqCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBleHRlcm5hbF9nbG9iYWwKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQV01fSW5pdGlhbGl6ZSh2b2lkKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqCURjbFBXTV9PcGVuCisqCisqIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyogICAJVGhpcyBmdW5jdGlvbiBpcyB0byBvcGVuIHRoZSBzb2Z0d2FyZSBsYXllciBQV00gbW9kdWxlIGFuZCByZXR1cm4gYSBzb2Z0d2FyZSBoYW5kbGUuCisqICAgICBUaGlzIGZ1bmN0aW9uIGRvbid0IG9wZW4gdGhlIFBXTSBoYXJkd2FyZSBwb3dlciBvciBnZW5lcmF0ZSBvdXQgd2F2ZS4gCisqCVRoaXMgaXMgb25seSBmb3Igc29mdHdhcmUgbGF5ZXIgdG8gYXZvaWQgbXVsdGkgb3BlbiBieSBkaWZmZXJlbnQgbW9kdWxlLgorKgorKglJZiB5b3Ugd2FudCB0byBwb3dlciBvbiBvciBzdGFydCBQV00gaGFyZHdhcmUgLCB5b3Ugc2hvdWxkIHNlbmQgYSBjb21tYW5kIGJ5IHVzZSBvZiBEY2xQV01fQ29udHJvbC4KKyogQ0FMTFMgIAorKglJdCBpcyBjYWxsZWQgdG8gb3BlbiBQV00gbW9kdWxlCisqCisqIFBBUkFNRVRFUlMKKyoJZGV2IAkgLSAJdmFsaWQgZm9yIERDTF9QV00xIH4gRENMX1BXTTYKKyoJZmxhZ3MgLQltb2R1bGUgbmFtZSB0aGF0IGNhbGwgdGhpcyBmdWN0aW9uLiAKKyoKKyogUkVUVVJOUworKiAgIERDTF9IQU5ETEVfT0NDVVBJRUQ6IC0gT3BlbiBmYWlsZWQuCisqICAgU1RBVFVTX0lOVkFMSURfQVJHVU1FTlQ6ICAtIGludmFsaWQgYXJndW1lbnRzCisqICAgb3RoZXIgdmFsdWU6ICAtIGEgdmFsaWQgaGFuZGxlCisqCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBleHRlcm5hbF9nbG9iYWwKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX0hBTkRMRSBEY2xQV01fT3BlbihEQ0xfREVWIGRldiwgRENMX0ZMQUdTIGZsYWdzKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQV01fUmVnaXN0ZXJDYWxsYmFjaworKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgUFdNIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsUFdNX1JlZ2lzdGVyQ2FsbGJhY2soRENMX0hBTkRMRSBoYW5kbGUsIERDTF9FVkVOVCBldmVudCwgUEZOX0RDTF9DQUxMQkFDSyBjYWxsYmFjayk7CisKKyNlbmRpZiAvLyAjaWZuZGVmIF9fRENMX1BXTV9IX1BST1RPVFlQRV9fCisjZW5kaWYgLy8gI2lmZGVmIERDTF9ERUZJTklUSU9OX1BST1RPVFlQRQorCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX3B4cy5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfcHhzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhMzQwYQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX3B4cy5oCkBAIC0wLDAgKzEsMzkzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDEKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBkY2xfcHhzLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIEhlYWRlciBmaWxlIG9mIERDTCAoRHJpdmVyIENvbW1vbiBMYXllcikgZm9yIHByb3hpbWl0eSBzZW5zb3IuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUCisjaWZuZGVmIF9fRENMX1BYU19IX1NUUlVDVF9fCisjZGVmaW5lIF9fRENMX1BYU19IX1NUUlVDVF9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfT1BUSU9OUyBmb3IgUFhTCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUFhTX09QVElPTlMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DT05GSUdVUkVfVCBmb3IgUFhTCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgdm9pZCAoKlBGTl9EQ0xfUFhTX05PVElGWV9DQUxMQkFDSykoRENMX0JPT0wgZmdPYmplY3REZXRlY3RlZCk7CisKK3R5cGVkZWYgZW51bQoreworCVBYU19DT01QQVJFX1dJTkRPVywgIC8vIENvbXBhcmluZyB3aW5kb3cgb2YgUFhTIHRocmVzb2xkIGFsZ29yaXRobQorCVBYU19ISUxPX1RIUkVTSE9MRCwgIC8vIEhJR0gvTE9XIHRocmVzb2xkIG1ldGhvZG9sb2d5CisJUFhTX0FEVl9BTEdPX01BWAorfSBQWFNfQURWX0FMR09fRU5VTTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9CT09MIGZnTm90aWZ5OworICAgUEZOX0RDTF9QWFNfTk9USUZZX0NBTExCQUNLIE5vdGlmeUNhbGxiYWNrOworfSBQWFNfQ09ORklHX1QsIFBYU19DVFJMX0NPTkZJR19UOworCisjZGVmaW5lIFBYU19DT05GSUdTIFwKKyAgIFBYU19DT05GSUdfVCByUFhTQ29uZmlnOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0VWRU5UIGZvciBQWFMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBQWFNfRVZFTlRTCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ1RSTF9DTUQgZm9yIFBYUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBYU19DTURTIFwKKyAgIFBYU19DTURfRU5BQkxFLCBcCisgICBQWFNfQ01EX0dFVF9SQVdfREFUQSwgXAorICAgUFhTX0NNRF9FTV9SRUFELCBcCisgICBQWFNfQ01EX0VNX1dSSVRFLCBcCisgICBQWFNfQ01EX0dFVF9BRFZfQUxHT19XSU5ET1dJTkcsIFwKKyAgIFBYU19DTURfR0VUX0FEVl9BTEdPX1RIUkVTSE9MRCwgXAorICAgUFhTX0NNRF9NT0RJRllfQ09ORklHLCBcCisgICBQWFNfQ01EX0dFVF9TRU5TSVRJVklUWV9MRVZFTF9OVU0sIFwKKyAgIFBYU19DTURfU0VUX1NFTlNJVElWSVRZX0xFVkVMLCBcCisgICBQWFNfQ01EX0dFVF9ERVRFQ1RfU1RBVFVTLCBcCisgICBQWFNfQ01EX1NFVF9ERUJPVU5DRSwgXAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ1RSTF9EQVRBX1Q6IERlZmluZSB0aGUgQ29udHJvbCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBtb2R1bGUncyBjb21tYW5kCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCit0eXBlZGVmIGVudW0KK3sKKwlQWFNfSFdfQ01EX1BPV0VSX0VOQUJMRSwKKwlQWFNfSFdfQ01EX0dFVF9TRU5TSVRJVklUWV9MRVZFTF9OVU0sCisJUFhTX0hXX0NNRF9HRVRfU0VOU0lUSVZJVFlfVEFCTEUsCit9UFhTX0hXX0NNRF9FTlVNOworCisvKiBGb3IgUFhTX0NNRF9FTkFCTEUgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfQk9PTCBmZ0VuYWJsZTsKK31QWFNfQ1RSTF9FTkFCTEVfVDsKKworLyogRm9yIFBYU19DTURfR0VUX1JBV19EQVRBIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQxNiB1MkRhdGE7Cit9UFhTX0NUUkxfUkFXX0RBVEFfVDsKKworLyogRm9yIFBYU19DTURfRU1fQURWX0FMR09fV0lORE9XSU5HIGNvbW1hbmQuICovCisvL3R5cGVkZWYgc3RydWN0CisvL3sKKy8vICAgRENMX1VJTlQxNiB1MkNvdW50OworLy99UFhTX0NUUkxfRU1fV0lORE9XSU5HX1Q7CisKKy8qIEZvciBQWFNfQ01EX0VNX0FEVl9BTEdPX1RIUkVTSE9MRCBjb21tYW5kLiAqLworLy90eXBlZGVmIHN0cnVjdAorLy97CisvLyAgIERDTF9VSU5UMTYgdTJIaVRocmVzaG9sZDsKKy8vICAgRENMX1VJTlQxNiB1MkxvVGhyZXNob2xkOworLy99UFhTX0NUUkxfRU1fVEhSRVNIT0xEX1Q7CisKKy8qIEZvciBQWFNfQ01EX0VNX1JFQUQsIFBYU19DTURfRU1fV1JJVEUgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDMyIHU0UDE7CisgICBEQ0xfVUlOVDMyIHU0UDI7CisgICBEQ0xfVUlOVDMyIHU0UDM7CisgICBEQ0xfVUlOVDMyIHU0UDQ7CisgICBEQ0xfVUlOVDMyIHU0UDU7CisgICBEQ0xfVUlOVDMyIHU0UDY7CisgICBEQ0xfVUlOVDMyIHU0UDc7CisgICBEQ0xfVUlOVDMyIHU0UDg7CisgICBEQ0xfVUlOVDMyIHU0UG9sbGluZ1BlcmlvZDsgICAvLyBFTSBwb2xsaW5nIHBlcmlvZCwgdW5pdCBieSBtcworfVBYU19DVFJMX0VNX1BBUkFNX1Q7CisKKy8qIEZvciBQWFNfQ01EX0dFVF9BRFZfQUxHT19XSU5ET1dJTkcgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDE2IHUyQ291bnQ7Cit9UFhTX0NUUkxfR0VUX0FEVl9BTEdPX1dJTkRPV0lOR19UOworCisvKiBGb3IgUFhTX0NNRF9HRVRfQURWX0FMR09fVEhSRVNIT0xEIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQxNiB1MkhpVGhyZXNob2xkOworICAgRENMX1VJTlQxNiB1MkxvVGhyZXNob2xkOworfVBYU19DVFJMX0dFVF9BRFZfQUxHT19USFJFU0hPTERfVDsKKworLyogRm9yIFBYU19DTURfR0VUX1NFTlNJVElWSVRZX0xFVkVMX05VTSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9VSU5UMTYgdTJMZXZlbE51bTsKK31QWFNfQ1RSTF9HRVRfU0VOU0lUSVZJVFlfTEVWRUxfTlVNX1Q7CisKKy8qIEZvciBQWFNfQ01EX1NFVF9TRU5TSVRJVklUWV9MRVZFTCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9VSU5UMTYgdTJMZXZlbDsKK31QWFNfQ1RSTF9TRVRfU0VOU0lUSVZJVFlfTEVWRUxfVDsKKworLyogRm9yIFBYU19DTURfR0VUX0RFVEVDVF9TVEFUVVMgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfQk9PTCBmZ0RldGVjdGVkOworfVBYU19DVFJMX0dFVF9ERVRFQ1RfU1RBVFVTX1Q7CisKKworLyogRm9yIFBYU19DTURfU0VUX0RFQk9VTkNFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMzIgdTRUb3BBcmVhRGVib3VuY2U7IC8vbXMKKwlEQ0xfVUlOVDMyIHU0TGFyZ2VyQXJlYURlYm91bmNlOyAvL21zCit9UFhTX0NUUkxfU0VUX0RFQk9VTkNFX1Q7CisKKyNkZWZpbmUgUFhTX0NUUkxTIFwKKyAgIFBYU19DVFJMX0VOQUJMRV9UICAgclBYU0VuYWJsZTsgXAorICAgUFhTX0NUUkxfUkFXX0RBVEFfVCByUFhTUmF3RGF0YTsgXAorICAgUFhTX0NUUkxfRU1fUEFSQU1fVCByUFhTRU1QYXJhbTsgXAorICAgUFhTX0NUUkxfR0VUX0FEVl9BTEdPX1dJTkRPV0lOR19UIHJQWFNBZHZBbGdvV2luZG93aW5nOyBcCisgICBQWFNfQ1RSTF9HRVRfQURWX0FMR09fVEhSRVNIT0xEX1QgclBYU0FkdkFsZ29UaHJlc2hvbGQ7IFwKKyAgIFBYU19DVFJMX0NPTkZJR19UIHJQWFNDb25maWc7IFwKKyAgIFBYU19DVFJMX0dFVF9TRU5TSVRJVklUWV9MRVZFTF9OVU1fVCByUFhTU2Vuc2l0aXZpdHlMZXZlbE51bTsgXAorICAgUFhTX0NUUkxfU0VUX1NFTlNJVElWSVRZX0xFVkVMX1QgclBYU1NlbnNpdGl2aXR5TGV2ZWw7IFwKKyAgIFBYU19DVFJMX0dFVF9ERVRFQ1RfU1RBVFVTX1QgclBYU0RldGVjdFN0YXR1czsgXAorICAgUFhTX0NUUkxfU0VUX0RFQk9VTkNFX1QgclBYU1NldERlYm91bmNlOworCisKKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfUFhTX0hfU1RSVUNUX18KKyNlbmRpZiAvLyAjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUCisKKworI2lmZGVmIERDTF9ERUZJTklUSU9OX1BST1RPVFlQRQorI2lmbmRlZiBfX0RDTF9QWFNfSF9QUk9UT1RZUEVfXworI2RlZmluZSBfX0RDTF9QWFNfSF9QUk9UT1RZUEVfXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsUFhTX0luaXRpYWxpemUKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gaW5pdGlhbGl6ZSBQWFMgbW9kdWxlCisqCisqIFBBUkFNRVRFUlMKKyogIE5vbmUKKyoKKyogUkVUVVJOUworKiAgU1RBVFVTX09LCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsUFhTX0luaXRpYWxpemUodm9pZCk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsUFhTX09wZW4KKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gb3BlbiB0aGUgUFhTIG1vZHVsZSBhbmQgcmV0dXJuIGEgaGFuZGxlCisqCisqIFBBUkFNRVRFUlMKKyogIGRldjogb25seSB2YWxpZCBmb3IgRENMX1BYUworKiAgZmxhZ3M6IG5vIHNlcGNpYWwgZmxhZ3MgaXMgbmVlZGVkLiBQbGVhc2UgdXNlIEZMQUdTX05PTkUKKyoKKyogUkVUVVJOUworKiAgRENMX0hBTkRMRV9JTlZBTElEOiBPcGVuIGZhaWxlZAorKiAgT3RoZXIgdmFsdWU6IEEgdmFsaWQgaGFuZGxlCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9IQU5ETEUgRGNsUFhTX09wZW4oRENMX0RFViBkZXYsIERDTF9GTEFHUyBmbGFncyk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsUFhTX1JlYWREYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBQWFMgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQWFNfUmVhZERhdGEoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9CVUZGICpidWZmLCBEQ0xfQlVGRl9MRU4gYnVmX2xlbiwgRENMX09QVElPTlMgb3B0aW9ucyk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsUFhTX1dyaXRlRGF0YQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgUFhTIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsUFhTX1dyaXRlRGF0YShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0JVRkYgKmJ1ZmYsIERDTF9CVUZGX0xFTiBidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQWFNfQ29uZmlndXJlCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGNvbmZpZ3VyZSB0aGUgUFhTIG1vZHVsZS4KKyoKKyogUEFSQU1FVEVSUworKiAgaGFuZGxlOiB0aGUgcmV0dXJuZWQgaGFuZGxlIHZhbHVlIG9mIERjbFBYU19PcGVuCisqICBjb25maWd1cmU6IGEgc3RydWN0dXJlIHdoaWNoIGluY2x1ZGUgdGhlIFBYUyBjb25maWd1cmF0aW9uLgorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0s6IFN1Y2Nlc3NmdWxseSBjb25maWd1cmUgUFhTIG1vZHVsZS4KKyogIFNUQVRVU19JTlZBTElEX0hBTkRMRTogSXQncyBhIGludmFsaWQgaGFuZGxlLgorKiAgU1RBVFVTX05PVF9PUEVORUQ6IFRoZSBtb2R1bGUgaGFzIG5vdCBiZWVuIG9wZW5lZC4KKyogIFNUQVRVU19JTlZBTElEX0NPTkZJR1VSQVRJT046IFRoZSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsUFhTX0NvbmZpZ3VyZShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NPTkZJR1VSRV9UICpjb25maWd1cmUpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFBYU19SZWdpc3RlckNhbGxiYWNrCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIHNldCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIFBYUyBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogdGhlIHJldHVybmVkIGhhbmRsZSB2YWx1ZSBvZiBEY2xQWFNfT3BlbgorKiAgZXZlbnQ6IFN1cHBvcnRlZCBldmVudHM6CisqICBjYWxsYmFjazogdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciByZWdpc3RlcmVkIGV2ZW50cworKgorKiBSRVRVUk5TCisqICBTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQWFNfUmVnaXN0ZXJDYWxsYmFjayhEQ0xfSEFORExFIGhhbmRsZSwgRENMX0VWRU5UIGV2ZW50LCBQRk5fRENMX0NBTExCQUNLIGNhbGxiYWNrKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQWFNfQ29udHJvbAorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBzZW5kIGNvbW1hbmQgdG8gY29udHJvbCB0aGUgUFhTIG1vZHVsZS4KKyoKKyogUEFSQU1FVEVSUworKiAgaGFuZGxlOiBUaGUgaGFuZGxlIHZhbHVlIHJldHVybmVkIGZyb20gRGNsUFhTX09wZW4KKyogIGNtZDogQSBjb250cm9sIGNvbW1hbmQgZm9yIFBYUyBtb2R1bGUKKyogICAgICAgICAgMS4gUFhTX0NNRF9FTkFCTEU6IHRvIGVuYWJsZS9kaXNhYmxlIFBYUyBmdW5jdGlvbgorKiAgICAgICAgICAyLiBQWFNfQ01EX0dFVF9SQVdfREFUQTogdG8gZ2V0IFBYUyBzYW1wbGVkIHJhdyBkYXRhCisqICAgICAgICAgIDMuIFBYU19DTURfRU1fUkVBRDogdG8gcmVhZCBFTSBwYXJhbWV0ZXJzCisqICAgICAgICAgIDQuIFBYU19DTURfRU1fV1JJVEU6IHRvIHdyaXRlIEVNIHBhcmFtZXRlcnMKKyogICAgICAgICAgNS4gUFhTX0NNRF9HRVRfREVURUNUX1NUQVRVUzogdG8gZ2V0IFBYUyBkZXRlY3RlZCBzdGF0dXMKKyogIGRhdGE6IFRoZSBkYXRhIG9mIHRoZSBjb250cm9sIGNvbW1hbmQKKyogICAgICAgICAgMS4gUFhTX0NNRF9FTkFCTEU6IHBvaW50ZXIgdG8gYSBQWFNfQ1RSTF9FTkFCTEVfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgMi4gUFhTX0NNRF9HRVRfUkFXX0RBVEE6IHBvaW50ZXIgdG8gYSBQWFNfQ1RSTF9SQVdfREFUQV9UIHN0cnVjdHVyZQorKiAgICAgICAgICAzLiBQWFNfQ01EX0VNX1JFQUQ6IHBvaW50ZXIgdG8gYSBQWFNfQ1RSTF9FTV9QQVJBTV9UIHN0cnVjdHVyZQorKiAgICAgICAgICA0LiBQWFNfQ01EX0VNX1dSSVRFOiBwb2ludGVyIHRvIGEgUFhTX0NUUkxfRU1fUEFSQU1fVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgNS4gUFhTX0NNRF9HRVRfREVURUNUX1NUQVRVUzogcG9pbnRlciB0byBhIFBYU19DVFJMX0dFVF9ERVRFQ1RfU1RBVFVTX1Qgc3RydWN0dXJlCisqCisqIFJFVFVSTlMKKyogIFNUQVRVU19PSzogY29tbWFuZCBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisqICBTVEFUVVNfRkFJTDogY29tbWFuZCBpcyBmYWlsZWQuCisqICBTVEFUVVNfSU5WQUxJRF9DTUQ6IEl0J3MgYSBpbnZhbGlkIGNvbW1hbmQuCisqICBTVEFUVVNfVU5TVVBQT1JURUQ6IFRoZSBjb21tYW5kIGlzIE5PVCBzdXBwb3J0ZWQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQWFNfQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQWFNfQ2xvc2UKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gY2xvc2UgdGhlIFBYUyBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogdGhlIHJldHVybmVkIGhhbmRsZSB2YWx1ZSBvZiBEY2xQWFNfT3BlbgorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xQWFNfQ2xvc2UoRENMX0hBTkRMRSBoYW5kbGUpOworCisKKworLy8gTG93IGxldmVsIFBYUyBkcml2ZXIgKERjbEhQWFNfWFhYIGludGVyZmFjZXMpCitleHRlcm4gRENMX1NUQVRVUyBEY2xIUFhTX0luaXRpYWxpemUodm9pZCk7CitleHRlcm4gRENMX0hBTkRMRSBEY2xIUFhTX09wZW4oRENMX0RFViBkZXYsIERDTF9GTEFHUyBmbGFncyk7CitleHRlcm4gRENMX1NUQVRVUyBEY2xIUFhTX1JlYWREYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOIGJ1Zl9sZW4sIERDTF9PUFRJT05TIG9wdGlvbnMpOworZXh0ZXJuIERDTF9TVEFUVVMgRGNsSFBYU19Xcml0ZURhdGEoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9CVUZGICpidWZmLCBEQ0xfQlVGRl9MRU4gYnVmX2xlbiwgRENMX09QVElPTlMgb3B0aW9ucyk7CitleHRlcm4gRENMX1NUQVRVUyBEY2xIUFhTX0NvbmZpZ3VyZShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NPTkZJR1VSRV9UICpjb25maWd1cmUpOworZXh0ZXJuIERDTF9TVEFUVVMgRGNsSFBYU19SZWdpc3RlckNhbGxiYWNrKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfRVZFTlQgZXZlbnQsIFBGTl9EQ0xfQ0FMTEJBQ0sgY2FsbGJhY2spOworZXh0ZXJuIERDTF9TVEFUVVMgRGNsSFBYU19Db250cm9sKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQ1RSTF9DTUQgY21kLCBEQ0xfQ1RSTF9EQVRBX1QgKmRhdGEpOworZXh0ZXJuIERDTF9TVEFUVVMgRGNsSFBYU19DbG9zZShEQ0xfSEFORExFIGhhbmRsZSk7CisKKworCisKKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfUFhTX0hfUFJPVE9UWVBFX18KKyNlbmRpZiAvLyAjaWZkZWYgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfcnRjLmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9ydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTA0ZDUyCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfcnRjLmgKQEAgLTAsMCArMSw4OTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGRjbF9ydGMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgSGVhZGVyIGZpbGUgb2YgRENMIChEcml2ZXIgQ29tbW9uIExheWVyKSBmb3IgUlRDLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUCisjaWZuZGVmIF9fRENMX1JUQ19IX1NUUlVDVF9fCisjZGVmaW5lIF9fRENMX1JUQ19IX1NUUlVDVF9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfT1BUSU9OUyBmb3IgUlRDCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUlRDX09QVElPTlMKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ09ORklHVVJFX1QgZm9yIFJUQworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJUQ19DT05GSUdTCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfRVZFTlQgZm9yIFJUQworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJUQ19FVkVOVFMgXAorICAgIEVWRU5UX1JUQ19BTEFSTSA9ICAgICAgICAgICAweDAwMDAwMDAxLFwKKyAgICBFVkVOVF9SVENfVEMgICAgPSAgICAgICAgICAgMHgwMDAwMDAwMiwKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0NNRCBmb3IgUlRDCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBfX0JVSUxEX0RPTV9fCisvKiBUaGUgUlRDIENvbW1hbmQgVmFsdWVzIGluIERDTF9DVFJMX0NNRF9UIEVudW0gb2YgZGNsLmggKi8KK3R5cGVkZWYgZW51bSB7CisgICAgUlRDX0NNRF9CT09UTE9BREVSX1BPV0VST04sIC8qIEZvciBSVEMgQm9vdGxvYWRlciBQb3dlciBPbiAqLworICAgIFJUQ19DTURfQ0xFQVJfUEROX0JJVFMsIC8qIFRvIENsZWFyIFJUQyBQRE4gQml0cyAqLworICAgIFJUQ19DTURfQ09ORklHX0FMX1RDLCAvKiBUbyBDb25maWd1cmUgdGhlIFJUQyBJbnRlcnJ1cHQgKi8KKyAgICBSVENfQ01EX0RFTEFZLCAvKiBUbyBEZWxheSAqLworICAgIFJUQ19DTURfRlRfUE9XRVJPRkYsIC8qIEZvciBGbGFzaCBUb29sIFBvd2VyIE9mZiAqLworICAgIFJUQ19DTURfR0VUX0FMQVJNX1RJTUUsIC8qIFRvIEdldCBBbGFybSBUaW1lICovCisgICAgUlRDX0NNRF9HRVRfVElNRSwgLyogVG8gR2V0IFRpbWUqLworICAgIFJUQ19DTURfR1BJT19HRVRfSU5QVVQsIC8qIFRvIEdldCBHUElPIElucHV0ICovCisgICAgUlRDX0NNRF9HUElPX1NFVF9FWFBPUlRfMzJLLCAvKiBUbyBTZXQgRXhwb3J0IDMySyBmb3IgR1BJTyAqLworICAgIFJUQ19DTURfR1BJT19TRVRfRVhQT1JUX0NPUkVERVRCLCAvKiBUbyBTZXQgRXhwb3J0IENPUkVERVRCICBmb3IgR1BJTyAqLworICAgIFJUQ19DTURfR1BJT19TRVRfSU5QVVRfTU9ERSwgLyogVG8gU2V0IEdQSU8gSW5wdXQgTW9kZSAqLworICAgIFJUQ19DTURfR1BJT19TRVRfT1VUUFVUX01PREUsIC8qIFRvIFNldCBHUElPIE91dHB1dCBNb2RlICovCisgICAgUlRDX0NNRF9IV19JTklULCAvKiBUbyBJbml0aWFsaXplIFJUQyBIVyAqLworICAgIFJUQ19DTURfSU5JVCwgLyogVG8gSW5pdGlhbGl6ZSBSVEMgU1cgKi8KKyAgICBSVENfQ01EX0lOSVRfVENfQUxfSU5UUiwgLyogVG8gSW5pdGlhbGl6ZSBSVEMgU1cgKFJUQ19UQ2ludHIsUlRDX0FMaW50cikgKi8KKyAgICBSVENfQ01EX0lTX0NPTkZJR19WQUxJRCwgLyogVG8gQ2hlY2sgSWYgUlRDIENvbmZpZ3VyZSBWYWxpZCBvciBOb3QgKi8KKyAgICBSVENfQ01EX0lTX0ZJUlNUX09OLCAvKiBUbyBDaGVjayBJZiBSVEMgSXMgRmlyc3QgT24gb3IgTm90ICovCisgICAgUlRDX0NNRF9JU19NU19GSVJTVFBPV0VST04sIC8qIFRvIENoZWNrIElmIFJUQyBJcyBGaXJzdCBPbiBvciBOb3QgKGZvciBNTUkgT25seSkgKi8KKyAgICBSVENfQ01EX0lTX1RJTUVfVkFMSUQsIC8qIFRvIENoZWNrIElmIFJUQyBUaW1lIElzIFZhbGlkIG9yIE5vdCAqLworICAgIFJUQ19DTURfUFdJQ19DSEVDS19QT1dFUk9OLCAvKiBUbyBDaGVjayBSVEMgUG93ZXIgT24gKGZvciBQV0lDIE9ubHkpICovCisgICAgUlRDX0NNRF9QV0lDX0ZJUlNUX1BPV0VST05fSU5JVF9SVENUSU1FLCAvKiBUbyBJbml0aWFsaXplIFJUQyBUaW1lIFdoZW4gRmlyc3QgUG93ZXIgT24gKGZvciBQV0lDIE9ubHkpICovCisgICAgUlRDX0NNRF9QV0lDX01BU0tfQUwsIC8qIFRvIERpYWJsZSBBbGwgQWxhcm0gTWFzayAoZm9yIFBXSUMgT25seSkgKi8KKyAgICBSVENfQ01EX1BXSUNfUE9XRVJPRkZfUlRDX0lOSVQsIC8qIFRvIERvIFJUQyBJbml0YWxpemUgV2hlbiBQb3dlciBPZmYgKGZvciBQV0lDIE9ubHkpICovCisgICAgUlRDX0NNRF9QV0lDX1BPV0VST05fUlRDX0lOSVQsIC8qIFRvIERvIFJUQyBJbml0YWxpemUgV2hlbiBQb3dlciBPbiAoZm9yIFBXSUMgT25seSkgKi8KKyAgICBSVENfQ01EX1JFQURfUEROX0JJVFMsIC8qIFRvIFJlYWQgUlRDIFBETiBCaXRzICovCisgICAgUlRDX0NNRF9SRUFEX1NQQVIsIC8qIFRvIFJlYWQgU1BBUiBSZWdpc3RlciAqLworICAgIFJUQ19DTURfUkVBRF9YT1NDX1JFRywgLyogVG8gUmVhZCBSVEMgWE9TQyBSZWdpc3RlciAqLworICAgIFJUQ19DTURfUkVMT0FELCAvKiBUbyBEbyBSVEMgUmVsb2FkICovCisgICAgUlRDX0NNRF9TRVRfQUxBUk1fVElNRSwgLyogVG8gU2V0IEFsYXJtIFRpbWUgKi8KKyAgICBSVENfQ01EX1NFVF9GSVJTVF9QT1dFUk9OLCAvKiBUbyBTZXQgRmlyc3QgUG93ZXIgT24gKi8KKyAgICBSVENfQ01EX1NFVF9QRE5fQklUUywgLyogVG8gU2V0IFJUQyBQRE4gQml0cyAqLworICAgIFJUQ19DTURfU0VUX1BXUl9LRVksIC8qIFRvIFNldCBQb3dlciBLZXkgKi8KKyAgICBSVENfQ01EX1NFVF9USU1FLCAvKiBUbyBTZXQgVGltZSAqLworICAgIFJUQ19DTURfU0VUQkJQVSwgLyogVG8gU2V0IEJCUFUgKi8KKyAgICBSVENfQ01EX1NFVFhPU0MsIC8qIFRvIFNldCBYT1NDICovCisgICAgUlRDX0NNRF9TVEFSVF9DQUxJLCAvKiBUbyBTdGFydCBDYWxpYnJhdGlvbiAqLworICAgIFJUQ19DTURfV0FJVF9ERUJPVU5DRSwgLyogVG8gV2FpdCBEZS1ib3VuY2UgKi8KKyAgICBSVENfQ01EX1dSSVRFX1BETl9CSVRTLCAvKiBUbyBXcml0ZSBSVEMgUEROIEJpdHMgKi8KKyAgICBSVENfQ01EX1dSSVRFX1NQQVIsIC8qIFRvIFdyaXRlIFNQQVIgUmVnaXN0ZXIgKi8gICAgCisgICAgUlRDX0NNRF9XUklURV9UUklHR0VSLCAvKiBUbyBTZXQgV3JpdGUgVHJpZ2dlciAqLworICAgIFJUQ19DTURfV1JJVEVfVFJJR0dFUl9XQUlULCAvKiBUbyBTZXQgV3JpdGUgVHJpZ2dlciBBbmQgV2FpdCAqLworICAgIFJUQ19DTURfV1JJVEVfWE9TQ19SRUcsIC8qIFRvIFdyaXRlIFJUQyBYT1NDIFJlZ2lzdGVyICovCisgICAgUlRDX0NNRF9QUk9UX1VOTE9DSywgLyogVG8gVW5sb2NrIFJUQyBQUk9UICovCisgICAgUlRDX0NNRF9SRUdJU1RFUl9NT0RVTEVfVE9fU0VORF9SVENUSU1FLCAvKiBUbyByZWdpc3RlciBpbG0gaW5mb21hdGlvbiBieSBvdGhlciBtb2R1bGVzIHRvIHJlcXVlc3QgUlRDIHRpbWUgKi8KKyAgICBSVENfQ01EX1dSSVRFX09TQzMyQ09OX1JFRywgLyogVG8gV3JpdGUgUlRDIE9TQzMyQ09OIFJlZ2lzdGVyICovCit9IERDTF9DVFJMX0NNRF9UOworI2Vsc2UgLyogX19CVUlMRF9ET01fXyAqLworI2RlZmluZSBSVENfQ01EUyBcCisgICAgUlRDX0NNRF9CT09UTE9BREVSX1BPV0VST04sIFwKKyAgICBSVENfQ01EX0NMRUFSX1BETl9CSVRTLCBcCisgICAgUlRDX0NNRF9DT05GSUdfQUxfVEMsIFwKKyAgICBSVENfQ01EX0RFTEFZLCBcCisgICAgUlRDX0NNRF9GVF9QT1dFUk9GRiwgXAorICAgIFJUQ19DTURfR0VUX0FMQVJNX1RJTUUsIFwKKyAgICBSVENfQ01EX0dFVF9USU1FLCBcCisgICAgUlRDX0NNRF9HUElPX0dFVF9JTlBVVCwgXAorICAgIFJUQ19DTURfR1BJT19TRVRfRVhQT1JUXzMySywgXAorICAgIFJUQ19DTURfR1BJT19TRVRfRVhQT1JUX0NPUkVERVRCLCBcCisgICAgUlRDX0NNRF9HUElPX1NFVF9JTlBVVF9NT0RFLCBcCisgICAgUlRDX0NNRF9HUElPX1NFVF9PVVRQVVRfTU9ERSwgXAorICAgIFJUQ19DTURfSFdfSU5JVCwgXAorICAgIFJUQ19DTURfSU5JVCwgXAorICAgIFJUQ19DTURfSU5JVF9UQ19BTF9JTlRSLCBcCisgICAgUlRDX0NNRF9JU19DT05GSUdfVkFMSUQsXAorICAgIFJUQ19DTURfSVNfRklSU1RfT04sIFwKKyAgICBSVENfQ01EX0lTX01TX0ZJUlNUUE9XRVJPTiwgXAorICAgIFJUQ19DTURfSVNfVElNRV9WQUxJRCwgXAorICAgIFJUQ19DTURfUFdJQ19DSEVDS19QT1dFUk9OLCBcCisgICAgUlRDX0NNRF9QV0lDX0ZJUlNUX1BPV0VST05fSU5JVF9SVENUSU1FLCBcCisgICAgUlRDX0NNRF9QV0lDX01BU0tfQUwsIFwKKyAgICBSVENfQ01EX1BXSUNfUE9XRVJPRkZfUlRDX0lOSVQsIFwKKyAgICBSVENfQ01EX1BXSUNfUE9XRVJPTl9SVENfSU5JVCwgXAorICAgIFJUQ19DTURfUkVBRF9QRE5fQklUUywgXAorICAgIFJUQ19DTURfUkVBRF9TUEFSLCBcCisgICAgUlRDX0NNRF9SRUFEX1hPU0NfUkVHLCBcCisgICAgUlRDX0NNRF9SRUxPQUQsIFwKKyAgICBSVENfQ01EX1NFVF9BTEFSTV9USU1FLCBcCisgICAgUlRDX0NNRF9TRVRfRklSU1RfUE9XRVJPTiwgXAorICAgIFJUQ19DTURfU0VUX1BETl9CSVRTLCBcCisgICAgUlRDX0NNRF9TRVRfUFdSX0tFWSwgXAorICAgIFJUQ19DTURfU0VUX1RJTUUsIFwKKyAgICBSVENfQ01EX1NFVEJCUFUsIFwKKyAgICBSVENfQ01EX1NFVFhPU0MsIFwKKyAgICBSVENfQ01EX1NUQVJUX0NBTEksIFwKKyAgICBSVENfQ01EX1dBSVRfREVCT1VOQ0UsIFwKKyAgICBSVENfQ01EX1dSSVRFX1BETl9CSVRTLCBcCisgICAgUlRDX0NNRF9XUklURV9TUEFSLCBcCisgICAgUlRDX0NNRF9XUklURV9UUklHR0VSLCBcCisgICAgUlRDX0NNRF9XUklURV9UUklHR0VSX1dBSVQsIFwKKyAgICBSVENfQ01EX1dSSVRFX1hPU0NfUkVHLCBcCisgICAgUlRDX0NNRF9QUk9UX1VOTE9DSywgXAorICAgIFJUQ19DTURfUkVHSVNURVJfTU9EVUxFX1RPX1NFTkRfUlRDVElNRSwgXAorICAgIFJUQ19DTURfV1JJVEVfT1NDMzJDT05fUkVHLAorI2VuZGlmIC8qIF9fQlVJTERfRE9NX18gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluZSB0aGUgRGF0YSBhbmQgVGltZSBJbnRlcnJ1cHQgQ29udHJvbCBCaXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorLyogWTpZZWFyLCBNOk1vbnRoLCBXOkRPVywgRDpET00sIEg6SG91ciwgTTpNaW4sIFM6U0VDICovCisKKy8qIEFsYXJtIEVuYWJsZSBOb25lICovCisjZGVmaW5lIEFMX0VOX05vbmUJCSAgICAgICAgICAgICAgIDAKKy8qIEFsYXJtIEVuYWJsZSBDaGVjayBTZWMgKi8KKyNkZWZpbmUgQUxfRU5fQ2hrUyAgICAgICAgICAgICAgICAgICAgIDEgCisvKiBBbGFybSBFbmFibGUgQ2hlY2sgTWluICYgU2VjICovCisjZGVmaW5lIEFMX0VOX0Noa01TICAgICAgICAgICAgICAgICAgICAyCisvKiBBbGFybSBFbmFibGUgQ2hlY2sgSG91ciwgTWluICYgU2VjICovCisjZGVmaW5lIEFMX0VOX0Noa0hNUyAgICAgICAgICAgICAgICAgICAzCisvKiBBbGFybSBFbmFibGUgQ2hlY2sgRE9NLCBIb3VyLCBNaW4gJiBTZWMgKi8KKyNkZWZpbmUgQUxfRU5fQ2hrREhNUyAgICAgICAgICAgICAgICAgIDQgCisvKiBBbGFybSBFbmFibGUgQ2hlY2sgRE9XLCBIb3VyLCBNaW4gJiBTZWMgKi8KKyNkZWZpbmUgQUxfRU5fQ2hrV0hNUyAgICAgICAgICAgICAgICAgIDUKKy8qIEFsYXJtIEVuYWJsZSBDaGVjayBNb250aCwgRE9NLCBIb3VyLCBNaW4gJiBTZWMgKi8KKyNkZWZpbmUgQUxfRU5fQ2hrTURITVMgICAgICAgICAgICAgICAgIDYKKy8qIEFsYXJtIEVuYWJsZSBDaGVjayBZZWFyLCBNb250aCwgRE9NLCBIb3VyLCBNaW4gJiBTZWMgKi8KKyNkZWZpbmUgQUxfRU5fQ2hrWU1ESE1TICAgICAgICAgICAgICAgIDcKKy8qIEFsYXJtIEVuYWJsZSBObyBDaGFuZ2UgKi8KKyNkZWZpbmUgQUxfRU5fTm9DaGFuZ2UgICAgICAgICAgICAgICAgIDgKKworLyogVGltZSBDb3VudGVyIEVuYWJsZSBOb25lICovCisjZGVmaW5lIFRDX0VOX05vbmUJCSAgICAgICAgICAgICAgIDAKKy8qIFRpbWUgQ291bnRlciBFbmFibGUgQ2hlY2sgU2VjICovCisjZGVmaW5lIFRDX0VOX0Noa1MgICAgICAgICAgICAgICAgICAgICAxCisvKiBUaW1lIENvdW50ZXIgRW5hYmxlIENoZWNrIE1pbiAmIFNlYyAqLworI2RlZmluZSBUQ19FTl9DaGtNICAgICAgICAgICAgICAgICAgICAgMgorLyogVGltZSBDb3VudGVyIEVuYWJsZSBDaGVjayBIb3VyLCBNaW4gJiBTZWMgKi8KKyNkZWZpbmUgVENfRU5fQ2hrSCAgICAgICAgICAgICAgICAgICAgIDMKKy8qIFRpbWUgQ291bnRlciBFbmFibGUgQ2hlY2sgRE9NLCBIb3VyLCBNaW4gJiBTZWMgKi8KKyNkZWZpbmUgVENfRU5fQ2hrRCAgICAgICAgICAgICAgICAgICAgIDQKKy8qIFRpbWUgQ291bnRlciBFbmFibGUgQ2hlY2sgRE9XLCBIb3VyLCBNaW4gJiBTZWMgKi8KKyNkZWZpbmUgVENfRU5fQ2hrVyAgICAgICAgICAgICAgICAgICAgIDUKKy8qIFRpbWUgQ291bnRlciBFbmFibGUgQ2hlY2sgTW9udGgsIERPTSwgSG91ciwgTWluICYgU2VjICovCisjZGVmaW5lIFRDX0VOX0Noa01vbiAgICAgICAgICAgICAgICAgICA2CisvKiBUaW1lIENvdW50ZXIgRW5hYmxlIENoZWNrIFllYXIsIE1vbnRoLCBET00sIEhvdXIsIE1pbiAmIFNlYyAqLworI2RlZmluZSBUQ19FTl9DaGtZICAgICAgICAgICAgICAgICAgICAgNworLyogVGltZSBDb3VudGVyIEVuYWJsZSBObyBDaGFuZ2UgKi8KKyNkZWZpbmUgVENfRU5fTm9DaGFuZ2UgICAgICAgICAgICAgICAgIDgKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJUQyBQRE4gQml0cyBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBETiAxIEJpdFs3XSwgTUVUQSBSZXNldCBSVEMgKi8KKyNkZWZpbmUgRFJWX0NPTU1fUkVHMV9NRVRBX1JFU0VUX1JUQyAgICAgICAgMHgwMDgwCisvKiBQRE4gMiBCaXRbN10sIE5vcm1hbCBSZXNldCAqLworI2RlZmluZSBEUlZfQ09NTV9SRUcyX05PUk1BTF9SRVNFVCAgICAgICAgICAweDAwODAKKy8qIFBETiAyIEJpdFs2XSwgQ2hhcmdlIFBvd2VyIE9uICovCisjZGVmaW5lIERSVl9DT01NX1JFRzJfQ0hSUFdST04gICAgICAgICAgICAgIDB4MDA0MAorLyogUEROIDIgQml0WzVdLCBVU0IgTWFzcyBTdG9yYWdlIFBvd2VyIE9uICovCisjZGVmaW5lIERSVl9DT01NX1JFRzJfVVNCTVNfUFdST04gICAgICAgICAgIDB4MDAyMAorLyogUEROIDIgQml0WzRdLCBSVEMgUG93ZXIgT24gKi8KKyNkZWZpbmUgRFJWX0NPTU1fUkVHMl9SVENQV1JPTiAgICAgICAgICAgICAgMHgwMDEwCisvKiBQRE4gMiBCaXRbM10sIFVTQiBNYXNzIFN0b3JhZ2UgUG93ZXIgT2ZmICovCisjZGVmaW5lIERSVl9DT01NX1JFRzJfVVNCTVNfUFdST0ZGICAgICAgICAgIDB4MDAwOAorLyogUEROIDIgQml0WzJdLCBSVEMgTlZSQU0gVmFsaWQgKi8KKyNkZWZpbmUgRFJWX0NPTU1fUkVHMl9SVENfTlZSQU0gICAgICAgICAgICAgMHgwMDA0CisvKiBQRE4gMiBCaXRbMV0sIFN3aWNoIFRvIElETEUgUG93ZXIgT24gKi8KKyNkZWZpbmUgRFJWX0NPTU1fUkVHMl9TV0lUQ0gySURMRV9QV1JPTgkJMHgwMDAyCisvKiBQRE4gMiBCaXRbMF0sIEJUTVQgV2F0Y2hkb2cgUmVzZXQgUG93ZXIgT24gKi8KKyNkZWZpbmUgRFJWX0NPTU1fUkVHMl9CVE1UX1dEVFJFVF9QV1JPTgkJMHgwMDAxCisKKy8qIFJlc2VydmVkIGZvciBib290cm9tIHNlY3VyaXR5LCBzdXBwb3J0IGl0IGFmdGVyIDYyMjcgKi8KKyNpZiBkZWZpbmVkKERSVl9SVENfQ09NTV9SRUcxX1NFQ1VSSVRZKQorLyogQm9vdHJvbSBTZWN1cml0eSAxICovCisjZGVmaW5lIERSVl9DT01NX1JFRzFfQk9PVFJPTV9TRUNVUklUWTEgICAgIDB4MDAwMQorLyogQm9vdHJvbSBTZWN1cml0eSAyICovCisjZGVmaW5lIERSVl9DT01NX1JFRzFfQk9PVFJPTV9TRUNVUklUWTIgICAgIDB4MDAxMAorLyogQm9vdHJvbSBTZWN1cml0eSAzICovCisjZGVmaW5lIERSVl9DT01NX1JFRzFfQk9PVFJPTV9TRUNVUklUWTMgICAgIDB4MDAyMAorLyogQm9vdHJvbSBTZWN1cml0eSA0ICovCisjZGVmaW5lIERSVl9DT01NX1JFRzFfQk9PVFJPTV9TRUNVUklUWTQgICAgIDB4MDA0MAorI2VuZGlmCisKKy8qIFJUQyBQRE4xLCB1c2UgUlRDIElORk8xIGFzIERSVl9DT01NX1JFRzEgKi8KKyNkZWZpbmUgRFJWX0NPTU1fUkVHMSAgICAgICAgICAgICAgICAgIChSVENfYmFzZSsweDAwNTgpCisvKiBSVEMgUEROMSwgdXNlIFJUQyBJTkZPMiBhcyBEUlZfQ09NTV9SRUcyICovCisjZGVmaW5lIERSVl9DT01NX1JFRzIgICAgICAgICAgICAgICAgICAoUlRDX2Jhc2UrMHgwMDVjKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NUUkxfREFUQV9UOiBEZWZpbmUgdGhlIENvbnRyb2wgZGF0YSBzdHJ1Y3R1cmUgZm9yIGVhY2ggbW9kdWxlJ3MgY29tbWFuZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFJUQyBEYXRhIFN0dWN0dXJlIGZvciBTYXZlIEluZm9ybWF0aW9uIE9ubHkgKENhbm5vdCBiZSB1c2VkIGZvciBmdW5jdGlvbidzIHBhcmFtZXRlcikgKi8KK3R5cGVkZWYgc3RydWN0IAoreworCURDTF9VSU5UOAkJcnRjX3NlYzsgICAgLyogU2Vjb25kcyBhZnRlciB0aGUgbWludXRlICAgLSBbMCw1OV0gICovCisJRENMX1VJTlQ4CQlydGNfbWluOyAgICAvKiBNaW51dGVzIGFmdGVyIHRoZSBob3VyICAgICAtIFswLDU5XSAgKi8KKwlEQ0xfVUlOVDgJCXJ0Y19ob3VyOyAgIC8qIEhvdXJzIGFmdGVyIHRoZSBtaWRuaWdodCAgIC0gWzAsMjNdICAqLworCURDTF9VSU5UOAkJcnRjX2RheTsgICAgLyogRGF5IG9mIHRoZSBtb250aCAgICAgICAgICAgLSBbMSwzMV0gICovCisJRENMX1VJTlQ4CQlydGNfbW9uOyAgICAvKiBNb250aHMgCQkgICAgICAgICAgICAgIC0gWzEsMTJdICAqLworCURDTF9VSU5UOAkJcnRjX3dkYXk7ICAgLyogRGF5cyBpbiBhIHdlZWsgCQkgICAgICAtIFsxLDddICAgKi8KKwlEQ0xfVUlOVDgJCXJ0Y195ZWFyOyAgIC8qIFllYXJzICAgICAgICAgICAgICAgICAgICAgIC0gWzAsMTI3XSAqLworfURDTF9SVENfREFUQV9UOworCisvKiBGb3IgUlRDX0NNRF9CT09UTE9BREVSX1BPV0VST04gY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAJRENMX0JPT0xFQU4gZmdCb290bG9hZGVyUG93ZXJPbjsgLyogT3V0cHV0IDogVFJVRTogSW5kaWNhdGUgRGV2aWNlIElzIEZpcnN0IE9uOyBGQUxTRTogRGV2aWNlIElzIE5vdCBGaXJzdCBPbiAqLworfVJUQ19DVFJMX0JPT1RMT0FERVJfUE9XRVJPTl9UOworCisvKiBFbnVtIG9mIFBETiBSZWdpc3RlcnMgKi8KK3R5cGVkZWYgZW51bQoreworICAgIERDTF9SVENfUEROMSA9IDAsIC8qIFBETjEgKi8KKyAgICBEQ0xfUlRDX1BETjIsIC8qIFBETjIgKi8KKwlEQ0xfUlRDX01BWF9JTkRFWCAvKiBNYXhpbXVtIFBETiBSZWdpc3RlciAqLworfURDTF9SVENfUEROX0lOREVYX1Q7CisKKy8qIEZvciBSVENfQ01EX0NMRUFSX1BETl9CSVRTLCBSVENfQ01EX1JFQURfUEROX0JJVFMsIFJUQ19DTURfU0VUX1BETl9CSVRTLCBSVENfQ01EX1dSSVRFX1BETl9CSVRTIGNvbW1hbmRzLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfUlRDX1BETl9JTkRFWF9UIFBETkluZGV4OyAvKiBJbnB1dCA6IE51bWJlciBvZiBQRE4gUmVnaXN0ZXIgKi8KKwlEQ0xfVUlOVDE2IGZnQ29uZmlnQml0OyAvKiBJbnB1dCA6IFBETiBCaXQgZm9yIENvbmZpZ3VyYXRpb24gKi8KKwlEQ0xfVUlOVDE2IFBETlZhbHVlOyAvKiBPdXRwdXQgOiBWYWx1ZSBvZiBQRE4gUmVnaXN0ZXIgKi8KK31SVENfQ1RSTF9DT05GSUdfUEROX0JJVF9UOworCisvKiBGb3IgUlRDX0NNRF9DT05GSUdfQUxfVEMgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRENMX1VJTlQ4IHUxQUxFbjsgLyogSW5wdXQgOiBBbGFybSBFbmFibGUgKi8KKyAgICBEQ0xfVUlOVDggdTFUQ0VuOyAvKiBJbnB1dCA6IFRpbWUgQ291bnRlciBFbmFibGUgKi8KK31SVENfQ1RSTF9DT05GSUdfQUxfVENfVDsKKworLyogRm9yIFJUQ19DTURfREVMQVkgY29tbWFuZC4gKi8KKy8vIFJUQ19DTURfREVMQVkgZG9lcyBOT1QgbmVlZCBwYXJhbWV0ZXJzCisKKy8qIEZvciBSVENfQ01EX0ZUX1BPV0VST0ZGIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9CT09MRUFOIGZnTWV0YVJlc2V0OyAvKiBPdXRwdXQgOiBJZiBEUlZfQ09NTV9SRUcxX01FVEFfUkVTRVRfUlRDIHNldCBvciBub3QqLworfVJUQ19DVFJMX0ZUX1BPV0VST0ZGX1Q7CisKKy8qIEZvciBSVENfQ01EX0dFVF9BTEFSTV9USU1FIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIERDTF9VSU5UOCB1MVNlYzsJCS8qIE91dHB1dCA6IFNlY29uZHMgYWZ0ZXIgdGhlIG1pbnV0ZSAgIC0gWzAsNTldICAqLworICAgIERDTF9VSU5UOCB1MU1pbjsJCS8qIE91dHB1dCA6IE1pbnV0ZXMgYWZ0ZXIgdGhlIGhvdXIgICAgIC0gWzAsNTldICAqLworICAgIERDTF9VSU5UOCB1MUhvdXI7CSAgICAvKiBPdXRwdXQgOiBIb3VycyBhZnRlciB0aGUgbWlkbmlnaHQgICAtIFswLDIzXSAgKi8KKyAgICBEQ0xfVUlOVDggdTFEYXk7CQkvKiBPdXRwdXQgOiBEYXkgb2YgdGhlIG1vbnRoICAgICAgICAgICAtIFsxLDMxXSAgKi8KKyAgICBEQ0xfVUlOVDggdTFNb247CQkvKiBPdXRwdXQgOiBNb250aHMgCQkgICAgICAgICAgICAgIC0gWzEsMTJdICAqLworICAgIERDTF9VSU5UOCB1MVdEYXk7CSAgICAvKiBPdXRwdXQgOiBEYXlzIGluIGEgd2VlayAJCSAgICAgIC0gWzEsN10gICAqLworICAgIERDTF9VSU5UOCB1MVllYXI7CSAgICAvKiBPdXRwdXQgOiBZZWFycyAgICAgICAgICAgICAgICAgICAgICAtIFswLDEyN10gKi8KKyAgICBEQ0xfQk9PTEVBTiBBTEVuQml0OyAgICAvKiBPdXRwdXQgOiBUaGUgc3RhdHVzIG9mIEFMIGVuYWJsZSBiaXQgb2YgUlRDX0lSUV9FTiAqLworfVJUQ19DVFJMX0dFVF9BTEFSTV9USU1FX1Q7CisKKy8qIEZvciBSVENfQ01EX0dFVF9USU1FIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIERDTF9VSU5UOCB1MVNlYzsJCS8qIE91dHB1dCA6IFNlY29uZHMgYWZ0ZXIgdGhlIG1pbnV0ZSAgIC0gWzAsNTldICAqLworICAgIERDTF9VSU5UOCB1MU1pbjsJCS8qIE91dHB1dCA6IE1pbnV0ZXMgYWZ0ZXIgdGhlIGhvdXIgICAgIC0gWzAsNTldICAqLworICAgIERDTF9VSU5UOCB1MUhvdXI7CQkvKiBPdXRwdXQgOiBIb3VycyBhZnRlciB0aGUgbWlkbmlnaHQgICAtIFswLDIzXSAgKi8KKyAgICBEQ0xfVUlOVDggdTFEYXk7CQkvKiBPdXRwdXQgOiBEYXkgb2YgdGhlIG1vbnRoICAgICAgICAgICAtIFsxLDMxXSAgKi8KKyAgICBEQ0xfVUlOVDggdTFNb247CQkvKiBPdXRwdXQgOiBNb250aHMgCQkgICAgICAgICAgICAgIC0gWzEsMTJdICAqLworICAgIERDTF9VSU5UOCB1MVdEYXk7CQkvKiBPdXRwdXQgOiBEYXlzIGluIGEgd2VlayAJCSAgICAgIC0gWzEsN10gICAqLworICAgIERDTF9VSU5UOCB1MVllYXI7CQkvKiBPdXRwdXQgOiBZZWFycyAgICAgICAgICAgICAgICAgICAgICAtIFswLDEyN10gKi8KK31SVENfQ1RSTF9HRVRfVElNRV9UOworCisvKiBGb3IgUlRDIEdQSU8gUHVsbGluZyBUeXBlICovCit0eXBlZGVmIGVudW0geworICAgIERDTF9SVENfR1BJT19OT19QVUxMID0gMCwgICAvKiBObyBQdWxsICovCisgICAgRENMX1JUQ19HUElPX1BVTExfRE9XTiwgICAgIC8qIFB1bGwgRG93biAqLworICAgIERDTF9SVENfR1BJT19QVUxMX1VQICAgICAgICAvKiBQdWxsIFVwICovCit9RENMX1JUQ19HUElPX1BVTExfVFlQRV9UOworCisvKiBGb3IgUlRDIEdQSU8gRHJpdmluZyBTdHJlbmd0aCAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBEQ0xfUlRDX0dQSU9fRFNfNG1BID0gMCwgICAgLyogNG1BICovCisgICAgRENMX1JUQ19HUElPX0RTXzhtQSwgICAgICAgIC8qIDhtQSAqLworICAgIERDTF9SVENfR1BJT19EU18xMm1BLCAgICAgICAvKiAxMm1BICovCisgICAgRENMX1JUQ19HUElPX0RTXzE2bUEgICAgICAgIC8qIDE2bUEgKi8KK31EQ0xfUlRDX0dQSU9fRFJJVklOR19TVFJFTkdUSF9UOworCisvKiBGb3IgUlRDX0NNRF9HUElPX0NPTkZJR19NT0RFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIERDTF9SVENfR1BJT19QVUxMX1RZUEVfVCByUHVsbFR5cGU7IC8qIElucHV0IDogUHVsbCBUeXBlICovCisgICAgRENMX1JUQ19HUElPX0RSSVZJTkdfU1RSRU5HVEhfVCByUHVsbFN0cmVuZ3RoOyAvKiBJbnB1dCA6IERydmluZyBTdHJlbmd0aCAqLworICAgIERDTF9CT09MRUFOIElucHV0VmFsdWU7IC8qIE91dHB1dCA6IFZhbHVlIG9mIEdQSU8gSW5wdXQgKi8KKyAgICBEQ0xfQk9PTEVBTiBPdXRwdXRWYWx1ZTsgLyogSW5wdXQgOiBWYWx1ZSBvZiBHUElPIE91dHB1dCAqLyAKKyAgICBEQ0xfQk9PTEVBTiBpc19TbWl0aFRyaWdnZXI7IC8qIElucHV0IDogSXMgU21pdGggVHJpZ2d0ZXIgT3IgTm90ICovIAorICAgIERDTF9CT09MRUFOIGlzX1NsZXdSYXRlQ29udHJvbDsgLyogSW5wdXQgOiBJcyBTbGV3IFJhdGUgQ29udHJvbCBPciBOb3QgKi8gCit9UlRDX0NUUkxfR1BJT19USU1FX1Q7CisKKy8qIEZvciBSVENfQ01EX0hXX0lOSVQgY29tbWFuZC4gKi8KKy8vIFJUQ19DTURfSFdfSU5JVCBkb2VzIE5PVCBuZWVkIHBhcmFtZXRlcnMKKworLyogRm9yIFJUQ19DTURfSU5JVCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB2b2lkICgqUlRDX1RDQ2FsbGJhY2spKHZvaWQpOyAvKiBJbnB1dCA6IENhbGxiYWNrIEZ1bmN0aW9uIGZvciBUaW1lciBDb3VudCAqLworICAgIHZvaWQgKCpSVENfQUxDYWxsYmFjaykodm9pZCk7IC8qIElucHV0IDogQ2FsbGJhY2sgRnVuY3Rpb24gZm9yIEFsYXJtICovCit9UlRDX0NUUkxfSU5JVF9UOworCisvKiBGb3IgUlRDX0NNRF9JTklUX1RDX0FMX0lOVFIgY29tbWFuZC4gKi8KKy8vIFJUQ19DTURfSU5JVF9UQ19BTF9JTlRSIGRvZXMgTk9UIG5lZWQgcGFyYW1ldGVycworCisvKiBGb3IgUlRDX0NNRF9JU19DT05GSUdfVkFMSUQgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CQorCURDTF9CT09MRUFOIGZnSXNWYWxpZDsgLyogT3V0cHV0IDogUlRDIENvbmZpZyBJcyBWYWxpZCBPciBOb3QgKi8KK31SVENfQ1RSTF9JU19DT05GSUdfVkFMSURfVDsKKworLyogRm9yIFJUQ19DTURfSVNfRklSU1RfT04gY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAJRENMX0JPT0xFQU4gZmdGaXJzdE9uOyAvKiBPdXRwdXQgOiBUUlVFOiBJbmRpY2F0ZSBEZXZpY2UgSXMgRmlyc3QgT247IEZBTFNFOiBEZXZpY2UgSXMgTm90IEZpcnN0IE9uICovCit9UlRDX0NUUkxfSVNfRklSU1RfT05fVDsKKworLyogRm9yIFJUQ19DTURfSVNfTVNfRklSU1RQT1dFUk9OIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAorewkKKwlEQ0xfQk9PTEVBTiBmZ01TRmlyc3RQb3dlck9uOyAvKiBPdXRwdXQgOiBUUlVFOiBJbmRpY2F0ZSBEZXZpY2UgSXMgRmlyc3QgT247IEZBTFNFOiBEZXZpY2UgSXMgTm90IEZpcnN0IE9uICovCit9UlRDX0NUUkxfSVNfTVNfRklSU1RQT1dFUk9OX1Q7CisKKy8qIEZvciBSVENfQ01EX0lTX1RJTUVfVkFMSUQgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRENMX1VJTlQ4IHUxU2VjOwkJLyogSW5wdXQgOiBTZWNvbmRzIGFmdGVyIHRoZSBtaW51dGUgICAtIFswLDU5XSAgKi8KKyAgICBEQ0xfVUlOVDggdTFNaW47CQkvKiBJbnB1dCA6IE1pbnV0ZXMgYWZ0ZXIgdGhlIGhvdXIgICAgIC0gWzAsNTldICAqLworICAgIERDTF9VSU5UOCB1MUhvdXI7CQkvKiBJbnB1dCA6IEhvdXJzIGFmdGVyIHRoZSBtaWRuaWdodCAgIC0gWzAsMjNdICAqLworICAgIERDTF9VSU5UOCB1MURheTsJCS8qIElucHV0IDogRGF5IG9mIHRoZSBtb250aCAgICAgICAgICAgLSBbMSwzMV0gICovCisgICAgRENMX1VJTlQ4IHUxTW9uOwkJLyogSW5wdXQgOiBNb250aHMgCQkgICAgICAgICAgICAgIC0gWzEsMTJdICAqLworICAgIERDTF9VSU5UOCB1MVdEYXk7CQkvKiBJbnB1dCA6IERheXMgaW4gYSB3ZWVrIAkJICAgICAgLSBbMSw3XSAgICovCisgICAgRENMX1VJTlQ4IHUxWWVhcjsJCS8qIElucHV0IDogWWVhcnMgICAgICAgICAgICAgICAgICAgICAgLSBbMCwxMjddICovCisgICAgRENMX0JPT0xFQU4gaXNUaW1lVmFsaWQ7ICAgIC8qIE91dHB1dDogSWYgdGltZSBpcyB2YWxpZCAgICAgICAgICAgICAgICAgICAgICovCit9UlRDX0NUUkxfSVNfVElNRV9WQUxJRF9UOworCisvKiBGb3IgUlRDX0NNRF9QV0lDX0NIRUNLX1BPV0VST04gY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CQorCURDTF9CT09MRUFOIGZnSXNQb3dlck9uOyAvKiBPdXRwdXQgOiBJZiBQb3dlciBPbiBPciBOb3QgKi8KK31SVENfQ1RSTF9QV0lDX0NIRUNLX1BPV0VST05fVDsKKworLyogRm9yIFJUQ19DTURfUFdJQ19GSVJTVF9QT1dFUk9OX0lOSVRfUlRDVElNRSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBEQ0xfVUlOVDggdTFTZWM7CQkvKiBJbnB1dCA6IFNlY29uZHMgYWZ0ZXIgdGhlIG1pbnV0ZSAgIC0gWzAsNTldICAqLworICAgIERDTF9VSU5UOCB1MU1pbjsJCS8qIElucHV0IDogTWludXRlcyBhZnRlciB0aGUgaG91ciAgICAgLSBbMCw1OV0gICovCisgICAgRENMX1VJTlQ4IHUxSG91cjsJCS8qIElucHV0IDogSG91cnMgYWZ0ZXIgdGhlIG1pZG5pZ2h0ICAgLSBbMCwyM10gICovCisgICAgRENMX1VJTlQ4IHUxRGF5OwkJLyogSW5wdXQgOiBEYXkgb2YgdGhlIG1vbnRoICAgICAgICAgICAtIFsxLDMxXSAgKi8KKyAgICBEQ0xfVUlOVDggdTFNb247CQkvKiBJbnB1dCA6IE1vbnRocyAJCSAgICAgICAgICAgICAgLSBbMSwxMl0gICovCisgICAgRENMX1VJTlQ4IHUxV0RheTsJCS8qIElucHV0IDogRGF5cyBpbiBhIHdlZWsgCQkgICAgICAtIFsxLDddICAgKi8KKyAgICBEQ0xfVUlOVDggdTFZZWFyOwkJLyogSW5wdXQgOiBZZWFycyAgICAgICAgICAgICAgICAgICAgICAtIFswLDEyN10gKi8KK31SVENfQ1RSTF9QV0lDX0ZJUlNUX1BPV0VST05fSU5JVF9SVENUSU1FX1Q7CisKKy8qIEZvciBSVENfQ01EX1BXSUNfTUFTS19BTCBjb21tYW5kLiAqLworLy8gUlRDX0NNRF9QV0lDX01BU0tfQUwgZG9lcyBOT1QgbmVlZCBwYXJhbWV0ZXJzCisKKy8qIEZvciBSVENfQ01EX1BXSUNfUE9XRVJPRkZfUlRDX0lOSVQgY29tbWFuZC4gKi8KKy8vIFJUQ19DTURfUFdJQ19QT1dFUk9GRl9SVENfSU5JVCBkb2VzIE5PVCBuZWVkIHBhcmFtZXRlcnMKKworLyogRm9yIFJUQ19DTURfUFdJQ19QT1dFUk9OX1JUQ19JTklUIGNvbW1hbmQuICovCisvLyBSVENfQ01EX1BXSUNfUE9XRVJPTl9SVENfSU5JVCBkb2VzIE5PVCBuZWVkIHBhcmFtZXRlcnMKKworLyogRW51bSBvZiBTUEFSIFJlZ2lzdGVycyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgRENMX1JUQ19TUEFSMCA9IDAsIC8qIFNQQVIwICovCisgICAgRENMX1JUQ19TUEFSMSwgLyogU1BBUjEgKi8KKwlEQ0xfUlRDX1NQQVJfTUFYX0lOREVYIC8qIE1heGltdW0gU1BBUiBSZWdpc3RlciAqLworfURDTF9SVENfU1BBUl9JTkRFWF9UOworCisvKiBGb3IgUlRDX0NNRF9SRUFEX1NQQVIsIFJUQ19DTURfV1JJVEVfU1BBUiBjb21tYW5kcy4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1JUQ19TUEFSX0lOREVYX1QgU1BBUkluZGV4OyAvKiBJbnB1dCA6IE51bWJlciBvZiBTUEFSIFJlZ2lzdGVyICovCisJRENMX1VJTlQxNiBXcml0ZVZhbHVlOyAvKiBJbnB1dCA6IFZhbHVlIG9mIFNQQVIgZm9yIENvbmZpZ3VyYXRpb24gKi8KKwlEQ0xfVUlOVDE2IFJlYWRWYWx1ZTsgLyogT3V0cHV0IDogVmFsdWUgb2YgU1BBUiBSZWdpc3RlciAqLworfVJUQ19DVFJMX0NPTkZJR19TUEFSX1Q7CisKKy8qIEZvciBSVENfQ01EX1JFQURfWE9TQ19SRUcgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CQorCURDTF9VSU5UOCBYT1NDVmFsdWU7IC8qIE91dHB1dCA6IFRoZSBSZXN1bHQgb2YgWE9TQ0NBTEkgKi8gCit9UlRDX0NUUkxfUkVBRF9YT1NDX1JFR19UOworCisvKiBGb3IgUlRDX0NNRF9SRUxPQUQgY29tbWFuZC4gKi8KKy8vIFJUQ19DTURfUkVMT0FEIGRvZXMgTk9UIG5lZWQgcGFyYW1ldGVycworCisvKiBGb3IgUlRDX0NNRF9TRVRfQUxBUk1fVElNRSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBEQ0xfVUlOVDggdTFTZWM7CQkvKiBJbnB1dCA6IFNlY29uZHMgYWZ0ZXIgdGhlIG1pbnV0ZSAgIC0gWzAsNTldICAqLworICAgIERDTF9VSU5UOCB1MU1pbjsJCS8qIElucHV0IDogTWludXRlcyBhZnRlciB0aGUgaG91ciAgICAgLSBbMCw1OV0gICovCisgICAgRENMX1VJTlQ4IHUxSG91cjsJCS8qIElucHV0IDogSG91cnMgYWZ0ZXIgdGhlIG1pZG5pZ2h0ICAgLSBbMCwyM10gICovCisgICAgRENMX1VJTlQ4IHUxRGF5OwkJLyogSW5wdXQgOiBEYXkgb2YgdGhlIG1vbnRoICAgICAgICAgICAtIFsxLDMxXSAgKi8KKyAgICBEQ0xfVUlOVDggdTFNb247CQkvKiBJbnB1dCA6IE1vbnRocyAJCSAgICAgICAgICAgICAgLSBbMSwxMl0gICovCisgICAgRENMX1VJTlQ4IHUxV0RheTsJCS8qIElucHV0IDogRGF5cyBpbiBhIHdlZWsgCQkgICAgICAtIFsxLDddICAgKi8KKyAgICBEQ0xfVUlOVDggdTFZZWFyOwkJLyogSW5wdXQgOiBZZWFycyAgICAgICAgICAgICAgICAgICAgICAtIFswLDEyN10gKi8KK31SVENfQ1RSTF9TRVRfQUxBUk1fVElNRV9UOworCisvKiBGb3IgUlRDX0NNRF9TRVRfRklSU1RfUE9XRVJPTiBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sJCisJRENMX0JPT0xFQU4gZmdQb3dlck9uOyAvKiBJbnB1dCA6IFNldCBGaXJzdCBQb3dlciBPbiAqLworfVJUQ19DVFJMX1NFVF9GSVJTVF9QT1dFUk9OX1Q7CisKKy8qIEZvciBSVENfQ01EX1NFVF9QV1JfS0VZIGNvbW1hbmQuICovCisvLyBSVENfQ01EX1NFVF9QV1JfS0VZIGRvZXMgTk9UIG5lZWQgcGFyYW1ldGVycworCisvKiBGb3IgUlRDX0NNRF9TRVRfVElNRSBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBEQ0xfVUlOVDggdTFTZWM7CQkvKiBJbnB1dCA6IFNlY29uZHMgYWZ0ZXIgdGhlIG1pbnV0ZSAgIC0gWzAsNTldICAqLworICAgIERDTF9VSU5UOCB1MU1pbjsJCS8qIElucHV0IDogTWludXRlcyBhZnRlciB0aGUgaG91ciAgICAgLSBbMCw1OV0gICovCisgICAgRENMX1VJTlQ4IHUxSG91cjsJICAgIC8qIElucHV0IDogSG91cnMgYWZ0ZXIgdGhlIG1pZG5pZ2h0ICAgLSBbMCwyM10gICovCisgICAgRENMX1VJTlQ4IHUxRGF5OwkJLyogSW5wdXQgOiBEYXkgb2YgdGhlIG1vbnRoICAgICAgICAgICAtIFsxLDMxXSAgKi8KKyAgICBEQ0xfVUlOVDggdTFNb247CQkvKiBJbnB1dCA6IE1vbnRocyAJCSAgICAgICAgICAgICAgLSBbMSwxMl0gICovCisgICAgRENMX1VJTlQ4IHUxV0RheTsJICAgIC8qIElucHV0IDogRGF5cyBpbiBhIHdlZWsgCQkgICAgICAtIFsxLDddICAgKi8KKyAgICBEQ0xfVUlOVDggdTFZZWFyOwkgICAgLyogSW5wdXQgOiBZZWFycyAgICAgICAgICAgICAgICAgICAgICAtIFswLDEyN10gKi8KK31SVENfQ1RSTF9TRVRfVElNRV9UOworCisvKiBGb3IgUlRDX0NNRF9TRVRCQlBVIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAorewkKKwlEQ0xfVUlOVDE2IEJCUFVSZWc7IC8qIElucHV0IDogU2V0IEJCUFUgUmVnaXN0ZXIgKi8KK31SVENfQ1RSTF9TRVRCQlBVX1Q7CisKKy8qIEZvciBSVENfQ01EX1NFVFhPU0MgY29tbWFuZC4gKi8KKy8vIFJUQ19DTURfU0VUWE9TQyBkb2VzIE5PVCBuZWVkIHBhcmFtZXRlcnMKKworLyogRm9yIFJUQ19DTURfU1RBUlRfQ0FMSSBjb21tYW5kLiAqLworLy8gUlRDX0NNRF9TVEFSVF9DQUxJIGRvZXMgTk9UIG5lZWQgcGFyYW1ldGVycworCisvKiBGb3IgUlRDX0NNRF9XQUlUX0RFQk9VTkNFIGNvbW1hbmQuICovCisvLyBSVENfQ01EX1dBSVRfREVCT1VOQ0UgZG9lcyBOT1QgbmVlZCBwYXJhbWV0ZXJzCisKKy8qIEZvciBSVENfQ01EX1dSSVRFX1RSSUdHRVIgY29tbWFuZC4gKi8KKy8vIFJUQ19DTURfV1JJVEVfVFJJR0dFUiBkb2VzIE5PVCBuZWVkIHBhcmFtZXRlcnMKKworLyogRm9yIFJUQ19DTURfV1JJVEVfVFJJR0dFUl9XQUlUIGNvbW1hbmQuICovCisvLyBSVENfQ01EX1dSSVRFX1RSSUdHRVJfV0FJVCBkb2VzIE5PVCBuZWVkIHBhcmFtZXRlcnMKKworLyogRm9yIFJUQ19DTURfV1JJVEVfWE9TQ19SRUcgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CQorCURDTF9VSU5UOCBYT1NDX1JlZzsgLyogSW5wdXQgOiBTZXQgWE9TQ0NBTEkgUmVnaXN0ZXIgKi8KK31SVENfQ1RSTF9XUklURV9YT1NDX1JFR19UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIERDTF9VSU5UMzIgIGRlc3RfbW9kX2lkOworICAgIERDTF9VSU5UMzIgIHNhcF9pZDsKKyAgICBEQ0xfVUlOVDMyICBtc2dfaWQ7CisgICAgRENMX0JPT0xFQU4gZmdSZWdpc3RlcklMTTsKK31SVENfQ1RSTF9SRUdJU1RFUl9NT0RVTEVfSUxNX0lORk9fVDsKKworLyogRm9yIFJUQ19DTURfV1JJVEVfWE9TQ19SRUcgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CQorCURDTF9VSU5UMTYgT1NDMzJDT05fUmVnOyAvKiBJbnB1dCA6IFNldCBYT1NDQ0FMSSBSZWdpc3RlciAqLworfVJUQ19DVFJMX1dSSVRFX09TQzMyQ09OX1JFR19UOworCisjaWZkZWYgX19CVUlMRF9ET01fXworLyogVGhlIFJUQyBDb21tYW5kIFBhcmFtZXRlciBEYXRhIFN0cnVjdHVyZSBmb3IgRWFjaCBDb21tYW5kIGluIERDTF9DVFJMX0RBVEFfVCBFbnVtIG9mIGRjbC5oICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFJUQ19DVFJMX0JPT1RMT0FERVJfUE9XRVJPTl9UIHJCb290bG9hZGVyUG93ZXJPbjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFJUQ19DTURfQk9PVExPQURFUl9QT1dFUk9OICovCisgICAgUlRDX0NUUkxfQ09ORklHX0FMX1RDX1QgckNvbmZpZ0FMVEM7IC8qIERhdGEgU3RydWN0dXJlIGZvciBSVENfQ01EX0NPTkZJR19BTF9UQyAqLworICAgIFJUQ19DVFJMX0NPTkZJR19QRE5fQklUX1QgckNvbmZpZ1BETkJpdDsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFJUQ19DTURfQ0xFQVJfUEROX0JJVFMsIFJUQ19DTURfUkVBRF9QRE5fQklUUywgUlRDX0NNRF9TRVRfUEROX0JJVFMsIGFuZCBSVENfQ01EX1dSSVRFX1BETl9CSVRTICovCisJUlRDX0NUUkxfRlRfUE9XRVJPRkZfVCByRlRQb3dlck9mZjsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFJUQ19DTURfRlRfUE9XRVJPRkYgKi8KKyAgICBSVENfQ1RSTF9HRVRfQUxBUk1fVElNRV9UIHJHZXRBbGFybVRpbWU7IC8qIERhdGEgU3RydWN0dXJlIGZvciBSVENfQ01EX0dFVF9BTEFSTV9USU1FICovCisgICAgUlRDX0NUUkxfR0VUX1RJTUVfVCByR2V0VGltZTsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFJUQ19DTURfR0VUX1RJTUUgKi8KKyAgICBSVENfQ1RSTF9HUElPX1RJTUVfVCByR1BJTzsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFJUQ19DTURfR1BJT19HRVRfSU5QVVQsIFJUQ19DTURfR1BJT19TRVRfSU5QVVRfTU9ERSwgYW5kIFJUQ19DTURfR1BJT19TRVRfT1VUUFVUX01PREUgKi8KKyAgICBSVENfQ1RSTF9JTklUX1QgckluaXQ7IC8qIERhdGEgU3RydWN0dXJlIGZvciBSVENfQ01EX0lOSVQgKi8KKyAgICBSVENfQ1RSTF9JU19DT05GSUdfVkFMSURfVCBySXNDb25maWdWYWxpZDsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFJUQ19DTURfSVNfQ09ORklHX1ZBTElEICovCisgICAgUlRDX0NUUkxfSVNfRklSU1RfT05fVCBySXNGaXJzdE9uOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgUlRDX0NNRF9JU19GSVJTVF9PTiAqLworICAgIFJUQ19DVFJMX0lTX01TX0ZJUlNUUE9XRVJPTl9UIHJJc01TRmlyc3RQb3dlck9uOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgUlRDX0NNRF9JU19NU19GSVJTVFBPV0VST04gKi8KKyAgICBSVENfQ1RSTF9JU19USU1FX1ZBTElEX1QgcklzVGltZVZhbGlkOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgUlRDX0NNRF9JU19USU1FX1ZBTElEICovCisgCVJUQ19DVFJMX1BXSUNfQ0hFQ0tfUE9XRVJPTl9UIHJQd2ljQ2hlY2tQb3dlck9uOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgUlRDX0NNRF9QV0lDX0NIRUNLX1BPV0VST04gKi8KKyAJUlRDX0NUUkxfUFdJQ19GSVJTVF9QT1dFUk9OX0lOSVRfUlRDVElNRV9UIHJQd2ljRmlyc3RQb3dlck9uSW5pdFJUQ1RpbWU7IC8qIERhdGEgU3RydWN0dXJlIGZvciBSVENfQ01EX1BXSUNfRklSU1RfUE9XRVJPTl9JTklUX1JUQ1RJTUUgKi8KKyAgICBSVENfQ1RSTF9DT05GSUdfU1BBUl9UIHJDb25maWdTUEFSUmVnOyAvKiBEYXRhIFN0cnVjdHVyZSBmb3IgUlRDX0NNRF9SRUFEX1NQQVIsIGFuZCBSVENfQ01EX1dSSVRFX1NQQVIgKi8KKyAJUlRDX0NUUkxfUkVBRF9YT1NDX1JFR19UIHJSZWFkWE9TQ1JlZzsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFJUQ19DTURfUkVBRF9YT1NDX1JFRyAqLworCVJUQ19DVFJMX1NFVF9BTEFSTV9USU1FX1QgclNldEFsYXJtVGltZTsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFJUQ19DTURfU0VUX0FMQVJNX1RJTUUgKi8KKwlSVENfQ1RSTF9TRVRfRklSU1RfUE9XRVJPTl9UIHJTZXRGaXJzdFBvd2VyT247IC8qIERhdGEgU3RydWN0dXJlIGZvciBSVENfQ01EX1NFVF9GSVJTVF9QT1dFUk9OICovCisgICAJUlRDX0NUUkxfU0VUX1RJTUVfVCByU2V0VGltZTsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIFJUQ19DTURfU0VUX1RJTUUgKi8KKwlSVENfQ1RSTF9TRVRCQlBVX1QgclNldEJCUFU7IC8qIERhdGEgU3RydWN0dXJlIGZvciBSVENfQ01EX1NFVEJCUFUgKi8KKwlSVENfQ1RSTF9XUklURV9YT1NDX1JFR19UIHJXcml0ZVhPU0NSZWY7IC8qIERhdGEgU3RydWN0dXJlIGZvciBSVENfQ01EX1dSSVRFX1hPU0NfUkVHICovICAgCisgICAgUlRDX0NUUkxfUkVHSVNURVJfTU9EVUxFX0lMTV9JTkZPX1QgclJlZ2lzdGVyTW9kSUxNSW5mbzsgLyogRGF0YSBTdHJ1Y3R1cmUgZm9yIGlsbSB0byBzZW5kIHRvIG90aGVyIG1vZHVsZXMgKi8KKyAgICBSVENfQ1RSTF9XUklURV9PU0MzMkNPTl9SRUdfVCByV3JpdGVPU0MzMkNPTlJlZzsgIC8qIERhdGEgU3RydWN0dXJlIGZvciBSVENfQ01EX1JFR0lTVEVSX01PRFVMRV9UT19TRU5EX1JUQ1RJTUUgKi8gCit9RENMX0NUUkxfREFUQV9UOworI2Vsc2UgLyogX19CVUlMRF9ET01fXyAqLworCisjZGVmaW5lIFJUQ19DVFJMUyBcCisgICAgUlRDX0NUUkxfQk9PVExPQURFUl9QT1dFUk9OX1QgckJvb3Rsb2FkZXJQb3dlck9uOyBcCisgICAgUlRDX0NUUkxfQ09ORklHX0FMX1RDX1QgckNvbmZpZ0FMVEM7IFwKKyAgICBSVENfQ1RSTF9DT05GSUdfUEROX0JJVF9UIHJDb25maWdQRE5CaXQ7IFwKKwlSVENfQ1RSTF9GVF9QT1dFUk9GRl9UIHJGVFBvd2VyT2ZmOyBcCisgICAgUlRDX0NUUkxfR0VUX0FMQVJNX1RJTUVfVCByR2V0QWxhcm1UaW1lOyBcCisgICAgUlRDX0NUUkxfR0VUX1RJTUVfVCByR2V0VGltZTsgXAorICAgIFJUQ19DVFJMX0dQSU9fVElNRV9UIHJHUElPOyBcCisgICAgUlRDX0NUUkxfSU5JVF9UIHJJbml0OyBcCisgICAgUlRDX0NUUkxfSVNfQ09ORklHX1ZBTElEX1QgcklzQ29uZmlnVmFsaWQ7IFwKKyAgICBSVENfQ1RSTF9JU19GSVJTVF9PTl9UIHJJc0ZpcnN0T247IFwKKyAgICBSVENfQ1RSTF9JU19NU19GSVJTVFBPV0VST05fVCBySXNNU0ZpcnN0UG93ZXJPbjsgXAorICAgIFJUQ19DVFJMX0lTX1RJTUVfVkFMSURfVCBySXNUaW1lVmFsaWQ7IFwKKyAJUlRDX0NUUkxfUFdJQ19DSEVDS19QT1dFUk9OX1QgclB3aWNDaGVja1Bvd2VyT247IFwKKyAJUlRDX0NUUkxfUFdJQ19GSVJTVF9QT1dFUk9OX0lOSVRfUlRDVElNRV9UIHJQd2ljRmlyc3RQb3dlck9uSW5pdFJUQ1RpbWU7IFwKKyAJUlRDX0NUUkxfQ09ORklHX1NQQVJfVCByQ29uZmlnU1BBUlJlZzsgXAorIAlSVENfQ1RSTF9SRUFEX1hPU0NfUkVHX1QgclJlYWRYT1NDUmVnOyBcCisJUlRDX0NUUkxfU0VUX0FMQVJNX1RJTUVfVCByU2V0QWxhcm1UaW1lOyBcCisJUlRDX0NUUkxfU0VUX0ZJUlNUX1BPV0VST05fVCByU2V0Rmlyc3RQb3dlck9uOyBcCisgICAJUlRDX0NUUkxfU0VUX1RJTUVfVCByU2V0VGltZTsgXAorCVJUQ19DVFJMX1NFVEJCUFVfVCByU2V0QkJQVTsgXAorCVJUQ19DVFJMX1dSSVRFX1hPU0NfUkVHX1QgcldyaXRlWE9TQ1JlZjsgXAorICAgIFJUQ19DVFJMX1JFR0lTVEVSX01PRFVMRV9JTE1fSU5GT19UIHJSZWdpc3Rlck1vZElMTUluZm87IFwKKwlSVENfQ1RSTF9XUklURV9PU0MzMkNPTl9SRUdfVCByV3JpdGVPU0MzMkNPTlJlZzsKKworI2VuZGlmIC8qIF9fQlVJTERfRE9NX18gKi8KKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfUlRDX0hfU1RSVUNUX18KKyNlbmRpZiAvLyAjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUICAgCisKKworI2lmZGVmIERDTF9ERUZJTklUSU9OX1BST1RPVFlQRQorI2lmbmRlZiBfX0RDTF9SVENfSF9QUk9UT1RZUEVfXworI2RlZmluZSBfX0RDTF9SVENfSF9QUk9UT1RZUEVfXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsUlRDX0luaXRpYWxpemUKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gaW5pdGlhbGl6ZSBSVEMgbW9kdWxlCisqCisqIFBBUkFNRVRFUlMKKyogIE5vbmUKKyoKKyogUkVUVVJOUworKiAgUmV0dXJuIHRoZSBzdGF0dXMgb2YgRGNsUlRDX0luaXRpYWxpemUKKyoKKyogUkVUVVJOIFZBTFVFUworKiAgU1RBVFVTX09LOiBJbml0aWFsaXplIEZpbmlzaGVkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsUlRDX0luaXRpYWxpemUodm9pZCk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsUlRDX09wZW4KKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gb3BlbiB0aGUgUlRDIG1vZHVsZSBhbmQgcmV0dXJuIGEgaGFuZGxlCisqCisqIFBBUkFNRVRFUlMKKyogIGRldjogW0lOXSBPbmx5IHZhbGlkIGZvciBEQ0xfUlRDCisqICBmbGFnczogW0lOXSBObyBzZXBjaWFsIGZsYWdzIGlzIG5lZWRlZC4gUGxlYXNlIHVzZSBGTEFHU19OT05FCisqCisqIFJFVFVSTlMKKyogIFJldHVybiBEQ0xfSEFORExFIG9mIFJUQworKgorKiBSRVRVUk4gVkFMVUVTCisqICBEQ0xfSEFORExFX0lOVkFMSUQgOiBPcGVuIGZhaWxlZAorKiAgT3RoZXIgdmFsdWUgOiBBIHZhbGlkIGhhbmRsZQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfSEFORExFIERjbFJUQ19PcGVuKERDTF9ERVYgZGV2LCBEQ0xfRkxBR1MgZmxhZ3MpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFJUQ19SZWFkRGF0YQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgUlRDIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsUlRDX1JlYWREYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOICpidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xSVENfV3JpdGVEYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBSVEMgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xSVENfV3JpdGVEYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOICpidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xSVENfQ29uZmlndXJlCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBSVEMgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xSVENfQ29uZmlndXJlKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQ09ORklHVVJFX1QgKmNvbmZpZ3VyZSk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsUlRDX1JlZ2lzdGVyQ2FsbGJhY2sKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gc2V0IGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgUlRDIG1vZHVsZS4KKyoKKyogUEFSQU1FVEVSUworKiAgaGFuZGxlOiBbSU5dIFRoZSByZXR1cm5lZCBoYW5kbGUgdmFsdWUgb2YgRGNsUlRDX09wZW4KKyogIGV2ZW50OiBbSU5dIFN1cHBvcnRlZCBldmVudHM6CisqICAgICAgICAgIDEuRVZFTlRfUlRDX0FMQVJNOiBSVEMgYWxhcm0gaW50ZXJydXB0CisqICAgICAgICAgIDIuRVZFTlRfUlRDX1RDOiBSVEMgdGljayBpbnRlcnJ1cHQKKyogIGNhbGxiYWNrOiBbSU5dIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgcmVnaXN0ZXJlZCBldmVudHMKKyoKKyogUkVUVVJOUworKiAgUmV0dXJuIHRoZSBzdGF0dXMgb2YgRGNsUlRDX1JlZ2lzdGVyQ2FsbGJhY2sKKyoKKyogUkVUVVJOIFZBTFVFUworKiAgU1RBVFVTX09LOiBTdWNjZXNzZnVsbHkgcmVnaXN0ZXIgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorKiAgU1RBVFVTX0lOVkFMSURfRENMX0hBTkRMRTogSXQncyBhIGludmFsaWQgaGFuZGxlLgorKiAgU1RBVFVTX05PVF9PUEVORUQ6IFRoZSBtb2R1bGUgaGFzIG5vdCBiZWVuIG9wZW5lZC4KKyogIFNUQVRVU19JTlZBTElEX0VWRU5UOiBUaGUgZXZlbnQgcGFyYW1ldGVyIGlzIGludmFsaWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsUlRDX1JlZ2lzdGVyQ2FsbGJhY2soRENMX0hBTkRMRSBoYW5kbGUsIERDTF9FVkVOVCBldmVudCwgUEZOX0RDTF9DQUxMQkFDSyBjYWxsYmFjayk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsUlRDX0NvbnRyb2wKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gc2VuZCBjb21tYW5kIHRvIGNvbnRyb2wgdGhlIFJUQyBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogW0lOXSBUaGUgaGFuZGxlIHZhbHVlIHJldHVybmVkIGZyb20gRGNsUlRDX09wZW4KKyogIGNtZDogW0lOXSBBIGNvbnRyb2wgY29tbWFuZCBmb3IgUlRDIG1vZHVsZQorKiAgICAgICAgICAgMS4gUlRDX0NNRF9CT09UTE9BREVSX1BPV0VST046IHRvIGNoZWNrIFJUQyBQb3dlciBPbiBpbiBib290bG9hZGVyCisqICAgICAgICAgICAyLiBSVENfQ01EX0NMRUFSX1BETl9CSVRTOiB0byBjbGVhciBSVEMgUEROIGJpdHMKKyogICAgICAgICAgIDMuIFJUQ19DTURfQ09ORklHX0FMX1RDOiB0byBzZXQgYWxhcm0gbWFzayBhbmQgdGljayBtYXNrCisqICAgICAgICAgICA0LiBSVENfQ01EX0RFTEFZOiB0byBEZWxheSAyMDAwIGNvdW50cworKiAgICAgICAgICAgNS4gUlRDX0NNRF9GVF9QT1dFUk9GRjogdG8gUG93ZXIgT2ZmIGZvciBGbGFzaFRvb2wKKyogICAgICAgICAgCTYuIFJUQ19DTURfR0VUX0FMQVJNX1RJTUU6IHRvIGdldCBhbGFybSB0aW1lCisqICAgICAgICAgICA3LiBSVENfQ01EX0dFVF9USU1FOiB0byBnZXQgdGltZSAgICAgICAgICAgICAgCisqICAgICAgICAgICA4LiBSVENfQ01EX0dQSU9fR0VUX0lOUFVUOiB0byBnZXQgUlRDX0dQSU9fR1BJIHJlZ2lzdGVyIHZhbHVlCisqICAgICAgICAgICA5LiBSVENfQ01EX0dQSU9fU0VUX0VYUE9SVF8zMks6IHRvIGV4cG9ydCAzMi43NjhLSHogY2xvY2sgb24gUlRDX0dQSU8KKyogICAgICAgICAgMTAuIFJUQ19DTURfR1BJT19TRVRfRVhQT1JUX0NPUkVERVRCOiB0byBleHBvcnQgQ09SRURFVEIgb24gUlRDX0dQSU8KKyogICAgICAgICAgMTEuIFJUQ19DTURfR1BJT19TRVRfSU5QVVRfTU9ERTogdG8gc2V0IFJUQ19HUElPIGlucHV0IG1vZGUKKyogICAgICAgICAgMTIuIFJUQ19DTURfR1BJT19TRVRfT1VUUFVUX01PREU6IHRvIHNldCBSVENfR1BJTyBvdXRwdXQgbW9kZQorKiAgICAgICAgICAxMy4gUlRDX0NNRF9IV19JTklUOiB0byBpbml0aWFsaXplIFJUQyBoYXJkd2FyZQorKiAgICAgICAgICAxNC4gUlRDX0NNRF9JTklUOiB0byBpbml0aWFsaXplIFJUQyBzb2Z0d2FyZQorKiAgICAgICAgICAxNS4gUlRDX0NNRF9JTklUX1RDX0FMX0lOVFI6IHRvIGluaXRpYWxpemUgUlRDIFRDICYgQUwgSU5UUgorKiAgICAgICAgICAxNi4gUlRDX0NNRF9JU19DT05GSUdfVkFMSUQ6IHRvIGNoZWNrIGlmIFJUQyB0aW1lIGFuZCBBbGFybSBhcmUgdmFsaWQKKyogICAgICAgICAgMTcuIFJUQ19DTURfSVNfRklSU1RfT046IHRvIGNoZWNrIGlmIGRldmljZSBpcyBmaXJzdCBvbiAgICAgICAgICAgICAgIAorKiAgICAgICAgICAxOC4gUlRDX0NNRF9JU19NU19GSVJTVFBPV0VST046IHRvIGNoZWNrIHdoZXRoZXIgUlRDIGlzIGZpcnN0IHBvd2VyIG9uKGZvciBNTUkpCisqICAgICAgICAgIDE5LiBSVENfQ01EX0lTX1RJTUVfVkFMSUQ6IHRvIGNoZWNrIGlmIHRpbWUgYXJlIHZhbGlkCisqICAgICAgICAgIDIwLiBSVENfQ01EX1BXSUNfQ0hFQ0tfUE9XRVJPTjogdG8gY2hlY2sgaWYgcG93ZXIgb24gKGZvciBQV0lDKQorKiAgICAgICAgICAyMS4gUlRDX0NNRF9QV0lDX0ZJUlNUX1BPV0VST05fSU5JVF9SVENUSU1FOiB0byBpbml0IFJUQyB0aW1lIGF0IGZpcnN0IHBvd2VyIG9uIChmb3IgUFdJQykKKyogICAgICAgICAgMjIuIFJUQ19DTURfUFdJQ19NQVNLX0FMOiB0byBjb250cm9sIFJUQyBBbGFybSBtYXNrIChmb3IgUFdJQykKKyogICAgICAgICAgMjMuIFJUQ19DTURfUFdJQ19QT1dFUk9GRl9SVENfSU5JVDogdG8gaW5pdCBSVEMgYXQgcG93ZXIgb2ZmIChmb3IgUFdJQykKKyogICAgICAgICAgMjQuIFJUQ19DTURfUFdJQ19QT1dFUk9OX1JUQ19JTklUOiB0byBpbml0IFJUQyBhdCBwb3dlciBvbiAoZm9yIFBXSUMpCisqICAgICAgICAgIDI1LiBSVENfQ01EX1JFQURfUEROX0JJVFM6IHRvIHJlYWQgUlRDIFBETiBiaXRzCisqICAgICAgICAgIDI2LiBSVENfQ01EX1JFQURfU1BBUjogdG8gcmVhZCBSVEMgU1BBUiBSZWdpc3RlcgorKiAgICAgICAgICAyNy4gUlRDX0NNRF9SRUFEX1hPU0NfUkVHOiB0byByZWFkIFJUQyBYT1NDQ0FMSSByZWdpc3RlcgorKiAgICAgICAgICAyOC4gUlRDX0NNRF9SRUxPQUQ6IHRvIGxvYWQgUlRDIHdob2xlIHJlZ2lzdGVyIGluZm8gZnJvbSBSVEMgbW9kdWxlCisqICAgICAgICAgIDI5LiBSVENfQ01EX1NFVF9BTEFSTV9USU1FOiB0byBzZXQgYWxhcm0gdGltZQorKiAgICAgICAgICAzMC4gUlRDX0NNRF9TRVRfRklSU1RfUE9XRVJPTjogdG8gc2V0IGZpcnN0IHBvd2VyIG9uCisqICAgICAgICAgIDMxLiBSVENfQ01EX1NFVF9QRE5fQklUUzogdG8gc2V0IFJUQyBQRE4gYml0cworKiAgICAgICAgICAzMi4gUlRDX0NNRF9TRVRfUFdSX0tFWTogdG8gc2V0IFBXUiBLRVkKKyogICAgICAgICAgMzMuIFJUQ19DTURfU0VUX1RJTUU6IHRvIHNldCB0aW1lCisqICAgICAgICAgIDM0LiBSVENfQ01EX1NFVEJCUFU6IHRvIHNldCBSVENfQkJQVQorKiAgICAgICAgICAzNS4gUlRDX0NNRF9TRVRYT1NDOiB0byBzZXQgUlRDIFhPU0NDQUxJIHJlZ2lzdGVyCisqICAgICAgICAgIDM2LiBSVENfQ01EX1NUQVJUX0NBTEk6IHRvIHN0YXJ0IGNhbGlicmF0aW9uIHByb2Nlc3MKKyogICAgICAgICAgMzcuIFJUQ19DTURfV0FJVF9ERUJPVU5DRTogdG8gd2FpdCB1bnRpbCBkZWJvdW5jZSBiaXQgYmVjb21lcyAwCisqICAgICAgICAgIDM4LiBSVENfQ01EX1dSSVRFX1BETl9CSVRTOiB0byB3cml0ZSBSVEMgUEROIGJpdHMKKyogICAgICAgICAgMzkuIFJUQ19DTURfV1JJVEVfU1BBUjogdG8gd3JpdGUgUlRDIFNQQVIgUmVnaXN0ZXIKKyogICAgICAgICAgNDAuIFJUQ19DTURfV1JJVEVfVFJJR0dFUjogdG8gc2V0IHdyaXRlIHRyaWdnZXIKKyogICAgICAgICAgNDEuIFJUQ19DTURfV1JJVEVfVFJJR0dFUl9XQUlUOiB0byBzZXQgd3JpdGUgdHJpZ2dlciBhbmQgd2FpdCB1bnRpbCBCVVNZIGJpdCBiZWNvbWVzIDAKKyogICAgICAgICAgNDIuIFJUQ19DTURfV1JJVEVfWE9TQ19SRUc6IHRvIHdyaXRlIFJUQyBYT1NDQ0FMSSByZWdpc3RlcgorKgorKiAgZGF0YTogVGhlIGRhdGEgb2YgdGhlIGNvbnRyb2wgY29tbWFuZAorKiAgICAgICAgICAgMS4gUlRDX0NNRF9CT09UTE9BREVSX1BPV0VST046IHBvaW50ZXIgdG8gYSBSVENfQ1RSTF9CT09UTE9BREVSX1BPV0VST05fVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgIDIuIFJUQ19DTURfQ0xFQVJfUEROX0JJVFM6IHBvaW50ZXIgdG8gYSBSVENfQ1RSTF9DT05GSUdfUEROX0JJVF9UIHN0cnVjdHVyZQorKiAgICAgICAgICAgMy4gUlRDX0NNRF9DT05GSUdfQUxfVEM6IHBvaW50ZXIgdG8gYSBSVENfQ1RSTF9DT05GSUdfQUxfVENfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgIDQuIFJUQ19DTURfREVMQVk6IEEgbnVsbCBwb2ludGVyCisqICAgICAgICAgICA1LiBSVENfQ01EX0ZUX1BPV0VST0ZGOiBBIG51bGwgcG9pbnRlcgorKiAgICAgICAgICAJNi4gUlRDX0NNRF9HRVRfQUxBUk1fVElNRTogcG9pbnRlciB0byBhIFJUQ19DVFJMX0dFVF9BTEFSTV9USU1FX1Qgc3RydWN0dXJlCisqICAgICAgICAgICA3LiBSVENfQ01EX0dFVF9USU1FOiBwb2ludGVyIHRvIGEgUlRDX0NUUkxfR0VUX1RJTUVfVCBzdHJ1Y3R1cmUgICAgICAgCisqICAgICAgICAgICA4LiBSVENfQ01EX0dQSU9fR0VUX0lOUFVUOiBwb2ludGVyIHRvIGEgUlRDX0NUUkxfR1BJT19USU1FX1Qgc3RydWN0dXJlCisqICAgICAgICAgICA5LiBSVENfQ01EX0dQSU9fU0VUX0VYUE9SVF8zMks6IHBvaW50ZXIgdG8gYSBSVENfQ1RSTF9HUElPX1RJTUVfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgMTAuIFJUQ19DTURfR1BJT19TRVRfRVhQT1JUX0NPUkVERVRCOiBwb2ludGVyIHRvIGEgUlRDX0NUUkxfR1BJT19USU1FX1Qgc3RydWN0dXJlCisqICAgICAgICAgIDExLiBSVENfQ01EX0dQSU9fU0VUX0lOUFVUX01PREU6IHBvaW50ZXIgdG8gYSBSVENfQ1RSTF9HUElPX1RJTUVfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgMTIuIFJUQ19DTURfR1BJT19TRVRfT1VUUFVUX01PREU6IHBvaW50ZXIgdG8gYSBSVENfQ1RSTF9HUElPX1RJTUVfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgMTMuIFJUQ19DTURfSFdfSU5JVDogQSBudWxsIHBvaW50ZXIKKyogICAgICAgICAgMTQuIFJUQ19DTURfSU5JVDogcG9pbnRlciB0byBhIFJUQ19DVFJMX0lOSVRfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgMTUuIFJUQ19DTURfSU5JVF9UQ19BTF9JTlRSOiBBIG51bGwgcG9pbnRlcgorKiAgICAgICAgICAxNi4gUlRDX0NNRF9JU19DT05GSUdfVkFMSUQ6IHBvaW50ZXIgdG8gYSBSVENfQ1RSTF9JU19DT05GSUdfVkFMSURfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgMTcuIFJUQ19DTURfSVNfRklSU1RfT046IHBvaW50ZXIgdG8gYSBSVENfQ1RSTF9JU19GSVJTVF9PTl9UIHN0cnVjdHVyZSAgICAgICAgICAgICAKKyogICAgICAgICAgMTguIFJUQ19DTURfSVNfTVNfRklSU1RQT1dFUk9OOiBwb2ludGVyIHRvIGEgUlRDX0NUUkxfSVNfTVNfRklSU1RQT1dFUk9OX1Qgc3RydWN0dXJlCisqICAgICAgICAgIDE5LiBSVENfQ01EX0lTX1RJTUVfVkFMSUQ6IHBvaW50ZXIgdG8gYSBSVENfQ1RSTF9JU19USU1FX1ZBTElEX1Qgc3RydWN0dXJlCisqICAgICAgICAgIDIwLiBSVENfQ01EX1BXSUNfQ0hFQ0tfUE9XRVJPTjogcG9pbnRlciB0byBhIFJUQ19DVFJMX1BXSUNfQ0hFQ0tfUE9XRVJPTl9UIHN0cnVjdHVyZQorKiAgICAgICAgICAyMS4gUlRDX0NNRF9QV0lDX0ZJUlNUX1BPV0VST05fSU5JVF9SVENUSU1FOiBwb2ludGVyIHRvIGEgUlRDX0NUUkxfUFdJQ19GSVJTVF9QT1dFUk9OX0lOSVRfUlRDVElNRV9UIHN0cnVjdHVyZQorKiAgICAgICAgICAyMi4gUlRDX0NNRF9QV0lDX01BU0tfQUw6IEEgbnVsbCBwb2ludGVyCisqICAgICAgICAgIDIzLiBSVENfQ01EX1BXSUNfUE9XRVJPRkZfUlRDX0lOSVQ6IEEgbnVsbCBwb2ludGVyCisqICAgICAgICAgIDI0LiBSVENfQ01EX1BXSUNfUE9XRVJPTl9SVENfSU5JVDogQSBudWxsIHBvaW50ZXIKKyogICAgICAgICAgMjUuIFJUQ19DTURfUkVBRF9QRE5fQklUUzogcG9pbnRlciB0byBhIFJUQ19DVFJMX0NPTkZJR19QRE5fQklUX1Qgc3RydWN0dXJlCisqICAgICAgICAgIDI2LiBSVENfQ01EX1JFQURfU1BBUjogcG9pbnRlciB0byBhIFJUQ19DVFJMX0NPTkZJR19TUEFSX1Qgc3RydWN0dXJlCisqICAgICAgICAgIDI3LiBSVENfQ01EX1JFQURfWE9TQ19SRUc6IHBvaW50ZXIgdG8gYSBSVENfQ1RSTF9SRUFEX1hPU0NfUkVHX1Qgc3RydWN0dXJlCisqICAgICAgICAgIDI4LiBSVENfQ01EX1JFTE9BRDogQSBudWxsIHBvaW50ZXIKKyogICAgICAgICAgMjkuIFJUQ19DTURfU0VUX0FMQVJNX1RJTUU6IHBvaW50ZXIgdG8gYSBSVENfQ1RSTF9TRVRfQUxBUk1fVElNRV9UIHN0cnVjdHVyZQorKiAgICAgICAgICAzMC4gUlRDX0NNRF9TRVRfRklSU1RfUE9XRVJPTjogcG9pbnRlciB0byBhIFJUQ19DVFJMX1NFVF9GSVJTVF9QT1dFUk9OX1Qgc3RydWN0dXJlCisqICAgICAgICAgIDMxLiBSVENfQ01EX1NFVF9QRE5fQklUUzogcG9pbnRlciB0byBhIFJUQ19DVFJMX0NPTkZJR19QRE5fQklUX1Qgc3RydWN0dXJlCisqICAgICAgICAgIDMyLiBSVENfQ01EX1NFVF9QV1JfS0VZOiBBIG51bGwgcG9pbnRlcgorKiAgICAgICAgICAzMy4gUlRDX0NNRF9TRVRfVElNRTogcG9pbnRlciB0byBhIFJUQ19DVFJMX1NFVF9USU1FX1Qgc3RydWN0dXJlCisqICAgICAgICAgIDM0LiBSVENfQ01EX1NFVEJCUFU6IHBvaW50ZXIgdG8gYSBSVENfQ1RSTF9TRVRCQlBVX1Qgc3RydWN0dXJlCisqICAgICAgICAgIDM1LiBSVENfQ01EX1NFVFhPU0M6IEEgbnVsbCBwb2ludGVyCisqICAgICAgICAgIDM2LiBSVENfQ01EX1NUQVJUX0NBTEk6IEEgbnVsbCBwb2ludGVyCisqICAgICAgICAgIDM3LiBSVENfQ01EX1dBSVRfREVCT1VOQ0U6IEEgbnVsbCBwb2ludGVyCisqICAgICAgICAgIDM4LiBSVENfQ01EX1dSSVRFX1BETl9CSVRTOiBwb2ludGVyIHRvIGEgUlRDX0NUUkxfQ09ORklHX1BETl9CSVRfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgMzkuIFJUQ19DTURfV1JJVEVfU1BBUjogcG9pbnRlciB0byBhIFJUQ19DVFJMX0NPTkZJR19TUEFSX1Qgc3RydWN0dXJlCisqICAgICAgICAgIDQwLiBSVENfQ01EX1dSSVRFX1RSSUdHRVI6IEEgbnVsbCBwb2ludGVyCisqICAgICAgICAgIDQxLiBSVENfQ01EX1dSSVRFX1RSSUdHRVJfV0FJVDogQSBudWxsIHBvaW50ZXIKKyogICAgICAgICAgNDIuIFJUQ19DTURfV1JJVEVfWE9TQ19SRUc6IHBvaW50ZXIgdG8gYSBSVENfQ1RSTF9XUklURV9YT1NDX1JFR19UIHN0cnVjdHVyZQorKgorKiBSRVRVUk5TCisqICBSZXR1cm4gdGhlIHN0YXR1cyBvZiBEY2xSVENfQ29udHJvbAorKgorKiBSRVRVUk4gVkFMVUVTCisqICBTVEFUVVNfT0s6IENvbW1hbmQgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorKiAgU1RBVFVTX0ZBSUw6IENvbW1hbmQgaXMgZmFpbGVkLgorKiAgU1RBVFVTX0lOVkFMSURfQ01EOiBJdCdzIGEgaW52YWxpZCBjb21tYW5kLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFJUQ19Db250cm9sKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQ1RSTF9DTUQgY21kLCBEQ0xfQ1RSTF9EQVRBX1QgKmRhdGEpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFJUQ19DbG9zZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBjbG9zZSB0aGUgUlRDIG1vZHVsZS4KKyoKKyogUEFSQU1FVEVSUworKiAgaGFuZGxlOiBbSU5dIFRoZSByZXR1cm5lZCBoYW5kbGUgdmFsdWUgb2YgRGNsUlRDX09wZW4KKyoKKyogUkVUVVJOUworKiAgUmV0dXJuIHRoZSBzdGF0dXMgb2YgRGNsUlRDX0Nsb3NlCisqCisqIFJFVFVSTiBWQUxVRVMKKyogIFNUQVRVU19PSworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFJUQ19DbG9zZShEQ0xfSEFORExFIGhhbmRsZSk7CisKKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfUlRDX0hfUFJPVE9UWVBFX18KKyNlbmRpZiAvLyAjaWZkZWYgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX3NpbS5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfc2ltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU3NzU1NwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX3NpbS5oCkBAIC0wLDAgKzEsNTQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgZGNsX3NpbS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1hdWlfU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgZGVmaW5lcyBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgZm9yIFNJTSBEQ0wgaW50ZXJmYWNlLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUCisKKyNpZm5kZWYgX19EQ0xfU0lNX0hfU1RSVUNUX18KKyNkZWZpbmUgX19EQ0xfU0lNX0hfU1RSVUNUX18KKworLypSSFIqLworLy8jaW5jbHVkZSAia2FsX25vbl9zcGVjaWZpY19nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAiZGNsLmgiCisvKlJIUiovCisKKyNkZWZpbmUJRENMX1NJTV9NQVhfSU5URVJGQUNFCTUKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKmZvbGxvd2luZ3Mgd2UgZGVmaW5lcyB0aGUgc3RydWN0dXJlIHVzZWQgYnkgRENMIHVzZXIsIHRoaXMgaXMgcHJldmVudCBEQ0wgdXNlciBmcm9tIGluY2x1ZGUgaW52aXZpZHVhbCBtb3VkbGVzJyBoZWFkZXIgZmlsZS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIERDTF9VSU5UMTYgRENMX1NJTV9TVEFUVVNfV09SRDsKKwordHlwZWRlZiBlbnVtCit7CisJRENMX01FX1VOS05PVyA9MCwKKwlEQ0xfTUVfMThWXzMwViwKKwlEQ0xfTUVfMzBWX09OTFksCisJRENMX01FXzE4Vl9PTkxZCit9IERDTF9TSU1fRU5WOworCit0eXBlZGVmIGVudW17CisJRENMX1VTSU1fTk9fRVJST1IgPSAwLAorCisJLypleHBlY3RlZCBzdGF0dXMqLworCURDTF9VU0lNX1dBSVRJTkdfRVZFTlQgPSAxLAkvKiBpbml0aWFsIHdhaXQgZXZlbnQgc3RhdHVzICovCisJRENMX1VTSU1fQkxPQ0tfUkVDID0gMiwJCS8qIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIGNvbXBsZXRlIGJsb2NrICovCisJRENMX1VTSU1fUE9XRVJfT0ZGID0gMywJCS8qIHN1Y2Nlc3NmdWxseSBwb3dlcmVkIG9mZiAqLworCURDTF9VU0lNX0FUUl9SRUMgPSA0LAkJCS8qIHN1Y2Nlc3NmdWxseSByZXZlaXZlZCBhbGwgQVRSICovCisJRENMX1VTSU1fU19CTE9DS19SRUMgPSA1LAkJLyogc3VjY2Vzc2Z1bGx5IHJldmVpdmVkIFMgUkVTUCAqLworCisJRENMX1NJTV9JTklQVFNFUlIgPSA2LAorCURDTF9TSU1fQ01EVE9VVCA9IDksCisJRENMX1NJTV9OVUxMVElNRU9VVCA9IDExLAorCURDTF9TSU1fUFRTX1JYX0lOVkFMSUQgPSAxOCwKKwlEQ0xfU0lNX0NNRFJFQ0VSUiA9IDgsCisJRENMX1NJTV9PVkVSUlVOID0gMTksCisJCisJLyogZXJyb3Igc3RhdHVzICovCisJRENMX1VTSU1fTk9fSU5TRVJUID0gLTEsCisJRENMX1VTSU1fVk9MVF9OT1RfU1VQUE9SVCA9IC0yLAorCURDTF9VU0lNX05PX0FUUiA9IC0zLAorCURDTF9VU0lNX1RTX0lOVkFMSUQgPSAtNCwKKwlEQ0xfVVNJTV9BVFJfRVJSID0gLTUsCisJRENMX1VTSU1fSU5WQUxJRF9BVFIgPSAtNiwKKwlEQ0xfVVNJTV9QVFNfRkFJTCA9IC03LAorCURDTF9VU0lNX1JYX0lOVkFMSUQgPSAtOCwJLyogRURDIGVycm9yIG9yIHBhcml0eSBlcnJvciAqLworCURDTF9VU0lNX0JXVF9USU1FT1VUID0gLTksCisJRENMX1VTSU1fREFUQV9BQk9SVCA9IC0xMCwKKwlEQ0xfVVNJTV9ERUFDVElWQVRFRCA9IC0xMSwKKwlEQ0xfVVNJTV9TX0JMT0NLX0ZBSUwgPSAtMTIsCisJRENMX1VTSU1fSU5WQUxJRF9XUlNUID0gLTEzLAorCURDTF9VU0lNX0dQVF9USU1FT1VUID0gLTE0LAorCURDTF9VU0lNX1BUU19USU1FT1VUID0gLTE1LAorCURDTF9VU0lNX1BUU19SWF9JTlZBTElEID0gLTE2Cit9RENMX1NJTV9TVEFUVVM7CisKKy8qQWxsIHBvc3NpYmxlIHZvbGF0ZWdlIHN1cHBvcnQgdmFsdWVzLiBUaGlzIGVudW0gdG8gZHVwbGljYXRlIHRoZSBzYW1lIGRlZmluaXRpb24gYXMgaW50ZXJuYWwgU0lNIGRyaXZlciBkZWZpbml0aW9uLCBzbyB0aGF0IHByb3RvY29sIGRvZXMgbm90IG5lZWQgdG8gaW5jbHVkZSBkcml2ZXIgaW50ZXJuYWwgaGVhZGVyIGZpbGVzKi8KK3R5cGVkZWYgZW51bXsKKwlEQ0xfVU5LTk9XTl9QT1dFUl9DTEFTUyA9IDAsCisJRENMX0NMQVNTX0FfNTBWID0gMSwJCQkJCQkJLyp0aGlzIGNhcmQgc3VwcG9ydCA1ViBvbmx5LCBmcm9tIEFUUiovCisJRENMX0NMQVNTX0JfMzBWID0gMiwJCQkJCQkJLyp0aGlzIGNhcmQgc3VwcG9ydCAzViBvbmx5LCBmcm9tIEFUUiovCisJRENMX0NMQVNTX0FCIAk9IDMsCQkJCQkJCQkvKnRoaXMgY2FyZCBzdXBwb3J0IDVWIGFuZCAzViwgZnJvbSBBVFIqLworCURDTF9DTEFTU19DXzE4ViA9IDQsCQkJCQkJCS8qdGhpcyBjYXJkIHN1cHBvcnQgMS44ViBvbmx5LCBmcm9tIEFUUiovCisJRENMX0NsQVNTX0JDCQk9IDYsCQkJCQkJCS8qdGhpcyBjYXJkIHN1cHBvcnQgM1YgYW5kIDEuOFYsIGZyb20gQVRSKi8KKwlEQ0xfQ0xBU1NfQUJDCT0gNwkJCQkJCQkJCS8qdGhpcyBjYXJkIHN1cHBvcnQgNVYsIDNWLCBhbmQgMS44ViwgZnJvbSBBVFIqLworfURDTF9TSU1fUE9XRVI7CisKK3R5cGVkZWYgRENMX1VJTlQzMiBEQ0xfU0lNX0hXX0NCOworCisvKlRoZSBhcHBsaWNhdGlvbiBwcm90b2NvbCBzdXBwb3J0IGluZm9ybWF0aW9uLiBUaGlzIGVudW0gdG8gZHVwbGljYXRlIHRoZSBzYW1lIGRlZmluaXRpb24gYXMgaW50ZXJuYWwgU0lNIGRyaXZlciBkZWZpbml0aW9uLCBzbyB0aGF0IHByb3RvY29sIGRvZXMgbm90IG5lZWQgdG8gaW5jbHVkZSBkcml2ZXIgaW50ZXJuYWwgaGVhZGVyIGZpbGVzKi8KK3R5cGVkZWYgZW51bQoreworCURDTF9TSU1fUFJPVE9DT0wsCQkJLypzdXBwb3J0IFNJTSBwcm90b2NvbCwgb3IgdG8gYmUgbW9yZSBwcmVjaXNlbHksIHRoaXMgc2hvdWxkIGJlIGEgSUNDIGNhcmQqLworCURDTF9VU0lNX1BST1RPQ09MCQkJLypzdXBwb3J0IFVTSU0gcHJvdG9jb2wsIG9yIHRvIGJlIG1vcmUgcHJlY2lzZWx5LCB0aGlzIHNob3VsZCBiZSBhIFVJQ0MgY2FyZCovCit9RENMX1NJTV9BUFBfUFJPVE9DT0w7CisKKworCisvKmRlZmluZXMgdGhlIHBvc3NpYmxlIGNob2ljZSBvZiBwaHlzaWNhbCBwcm90b2NvbC4gVGhpcyBlbnVtIHRvIGR1cGxpY2F0ZSB0aGUgc2FtZSBkZWZpbml0aW9uIGFzIGludGVybmFsIFNJTSBkcml2ZXIgZGVmaW5pdGlvbiwgc28gdGhhdCBwcm90b2NvbCBkb2VzIG5vdCBuZWVkIHRvIGluY2x1ZGUgZHJpdmVyIGludGVybmFsIGhlYWRlciBmaWxlcyovCit0eXBlZGVmIGVudW0KK3sKKwlEQ0xfVDBfUFJPVE9DT0wsCQkJLypwcmVmZXIgdG8gdXNlIHRoZSBUMCBwcm90b2NvbCovCisJRENMX1QxX1BST1RPQ09MLAkJCS8qcHJlZmVyIHRvIHVzZSB0aGUgVDEgcHJvdG9jb2wqLworCURDTF9VTktOT1dOX1BST1RPQ09MCS8qbm8gcHJlZmVycmVkIHBoeXNpY2FsIHByb3RvY29sKi8KK31EQ0xfU0lNX1BIWV9QUk9UT0NPTDsKKworLypkZWZpbmVzIHRoZSBhbGwgb2YgdGhlIGNsb2NrIHN0b3AgcmVsYXRlZCBpbmZvcm1hdGlvbi4gVGhpcyBlbnVtIHRvIGR1cGxpY2F0ZSB0aGUgc2FtZSBkZWZpbml0aW9uIGFzIGludGVybmFsIFNJTSBkcml2ZXIgZGVmaW5pdGlvbiwgc28gdGhhdCBwcm90b2NvbCBkb2VzIG5vdCBuZWVkIHRvIGluY2x1ZGUgZHJpdmVyIGludGVybmFsIGhlYWRlciBmaWxlcyovCit0eXBlZGVmIGVudW17CisJRENMX0NMT0NLX1NUT1BfTk9UX1NVUFBPUlQgCT0gMHgwLAkJLypub3Qgc3VwcG9ydCBjbG9jayBzdG9wKi8KKwlEQ0xfQ0xPQ0tfU1RPUF9MT1cgCQkJPSAweDQwLAkJCQkvKnN1cHBvcnQgY2xvY2sgc3RvcCBpbiBsb3cgbGV2ZWwqLworCURDTF9DTE9DS19TVE9QX0hJR0ggCQkJPSAweDgwLAkJCS8qc3VwcG9ydCBjbG9jayBzdG9wIGluIGhpZ2ggbGV2ZWwqLworCURDTF9DTE9DS19TVE9QX0FOWQkJCQk9IDB4YzAsCQkJLypzdXBwb3J0IGNsb2NrIHN0b3AgaW4gYW55IHZvbHRhZ2UgbGV2ZWwqLworCURDTF9DTE9DS19TVE9QX01TSwkJCQk9IDB4YzAsCQkJLypkZWZpbmUgdGhlIGNsb2NrIHN0b3AgbWFzaywgdXNlZCB0byBwYXJzZSB0aGUgaW5mb3JtYXRpb24gcmVjZWl2ZWQgZnJvbSBjYXJkcyovCisJRENMX0NMT0NLX1NUT1BfVU5LT05XCQkJPSAweDBmCQkJLyp0aGUgZGVmYXVsdCB2YWx1ZSovCit9RENMX1NJTV9DTEtfU1RPUDsKKworLypkZWZpbmVzIHRoZSBwb3NzaWJsZSBjYXJkIHNwZWVkIHZhbHVlcy4gVGhpcyBlbnVtIGlzIHRvIGR1cGxpY2F0ZSB0aGUgc2FtZSBkZWZpbml0aW9uIGFzIGludGVybmFsIFNJTSBkcml2ZXIgZGVmaW5pdGlvbiwgc28gdGhhdCBwcm90b2NvbCBkb2VzIG5vdCBuZWVkIHRvIGluY2x1ZGUgZHJpdmVyIGludGVybmFsIGhlYWRlciBmaWxlcyovCit0eXBlZGVmIGVudW17CisJRENMX1NQRUVEXzM3MiwJCS8qZm9yIHNwZWVkMzcyKi8KKwlEQ0xfU1BFRURfNjQsCQkJLypmb3Igc3BlZWQ2NCovCisJRENMX1NQRUVEXzMyLAkJCS8qZm9yIHNwZWVkMzIqLworCURDTF9TUEVFRF8xNgkJCS8qZm9yIHNwZWVkMTYqLworfURDTF9TSU1fQ0FSRF9TUEVFRDsKKworLyp0aGUgc3RydWN0dXJlIHRvIGRlZmluZSB0aGUgdmFsdWVzIGV4Y2hhbmdlZCB3aGVuIGRvaW5nIGdldCBjYXJkIGluZm9ybWF0aW9uKi8KK3R5cGVkZWYgc3RydWN0eworCURDTF9TSU1fUE9XRVIgcG93ZXI7IC8qdGhlIHZvbHRhZ2Ugd2UgY2hvb3NlKi8KKwlEQ0xfU0lNX0NBUkRfU1BFRUQgc3BlZWQ7IC8qdGhlIHNwZWVkIHdlIGNob29zZSovCisJRENMX1NJTV9DTEtfU1RPUCBjbG9ja19zdG9wOyAvKmNsb2NrIHN0b3AgaW5mb3JtYXRpb24gaW4gQVRSKi8KKwlEQ0xfU0lNX0FQUF9QUk9UT0NPTCBhcHBfcHJvdG87IC8qd2hldGhlciBpdCBpcyBhIElDQyBjYXJkIG9yIFVJQ0MgY2FyZCovCisJRENMX1NJTV9QSFlfUFJPVE9DT0wgcGh5X3Byb3RvOyAvKnRoZSBwaHlzaWNhbCBwcm90b2NvbCB3ZSB1c2VkKi8KKwlrYWxfYm9vbCBUMF9zdXBwb3J0OwkvKiBpZiBUMCBpcyBzdXBwb3J0ZWQqLworCWthbF9ib29sIFQxX3N1cHBvcnQ7CS8qIGlmIFQxIGlzIHN1cHBvcnRlZCovCisJa2FsX3VpbnQ4IGhpc3RfaW5kZXg7IC8qIGluZGV4IHRvIHRoZSBoaXN0b3JpY2FsIGNoYXIgb2YgQVRSKi8KKwlrYWxfdWludDggKkFUUjsgLyp0aGUgcG9pbnRlciB0byBzdG9yZSB0aGUgQVRSIHJlY2VpdmVkKi8KKwlrYWxfYm9vbCBUQWlFeGlzdDsgLyppZiB0aGUgZmlyc3QgVEEgZm9yIFQ9MTUgaXMgZXhpc3RlZCovCisJa2FsX3VpbnQ4IEFUUl9sZW5ndGg7CQkJLyogbGVuZ3RoIHRvIHRoZSBBVFJfZGF0YSovCisJa2FsX2Jvb2wgaXNTVzYyNjM7IC8qIHF1ZXJ5IGlmIHN0YXR1cyB3b3JkIDB4NjJ4eCAweDYzeHggaGFwcGVuKi8KKwlrYWxfdWludDggVEIxNTsgLy8gcXVlcnkgaWYgc3VwcG9ydCBpYyB1c2IKKwlrYWxfYm9vbCBoYXNQb3dlckNsYXNzOworCWthbF91aW50OCBQb3dlckNsYXNzOworICAgIGthbF9ib29sIFN1cHBvcnRFeHRlbmRlZExlbmd0aDsKKyAgICBrYWxfdWludDggc2ltX3RyYXlfc3RhdHVzOworCWthbF91aW50OCBzaW1fcmVzdWx0OworfURDTF9TSU1fSU5GTzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGRyaXZlciBmdW5jdGlvbiB0YWJsZXMgZXhwb3NlZCB0byBEQ0wKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLypoZXJlIGFyZSB0eXBlIGRlZmluaXRpb24gZm9yIGZ1bmN0aW9ucyovCisvKmRjbCBhZGQgbmV3IGFwaSA6IDIuIGRlZmluZSBmdW5jdGlvbiB0eXBlKi8KKworLyp0aGUgcHJvdG90eXBlIGRlZmluaXRpb24gZm9yIFJTVCBmdW5jdGlvbiBwb2ludGVyKi8KK3R5cGVkZWYgRENMX1NJTV9TVEFUVVMgKCogRENMX1NJTV9SU1QpKERDTF9TSU1fUE9XRVIgRXhwZWN0Vm9sdCwgRENMX1NJTV9QT1dFUiAqUmVzdWx0Vm9sdCwga2FsX2Jvb2wgd2FybSwgRENMX1NJTV9IV19DQiBoYW5kbGUpOworLyp0aGUgcHJvdG90eXBlIGRlZmluaXRpb24gZm9yIENNRCBmdW5jdGlvbiBwb2ludGVyKi8KK3R5cGVkZWYgRENMX1NJTV9TVEFUVVNfV09SRCAoKiBEQ0xfU0lNX0NNRCkoa2FsX3VpbnQ4ICAqdHhEYXRhLGthbF91aW50MzIgICp0eFNpemUsa2FsX3VpbnQ4ICAqcnhEYXRhLCBrYWxfdWludDMyICAqcnhTaXplLCBEQ0xfU0lNX0hXX0NCIGhhbmRsZSxrYWxfdWludDggICpieXBhc3M2MjYzKTsKKy8qdGhlIHByb3RvdHlwZSBkZWZpbml0aW9uIGZvciBwb3dlciBvZmYgZnVuY3Rpb24gcG9pbnRlciovCit0eXBlZGVmIHZvaWQgKCogRENMX1NJTV9QV09GRikoRENMX1NJTV9IV19DQiBoYW5kbGUpOworLyp0aGUgcHJvdG90eXBlIGRlZmluaXRpb24gZm9yIGdldCBjYXJkIGluZm8gZnVuY3Rpb24gcG9pbnRlciovCit0eXBlZGVmIHZvaWQgKCogRENMX1NJTV9HRVRfQ0FSRF9JTkZPKShEQ0xfU0lNX0lORk8gKmluZm8sIERDTF9TSU1fSFdfQ0IgaGFuZGxlKTsKKy8qdGhlIHByb3RvdHlwZSBkZWZpbml0aW9uIGZvciBnZXQgY2FyZCBpbmZvIGZ1bmN0aW9uIHBvaW50ZXIqLwordHlwZWRlZiB2b2lkICgqIERDTF9TSU1fR0VUX0NBUkRfRVJST1JfVFlQRVNfSU5GTykoRENMX1NJTV9JTkZPICppbmZvLCBEQ0xfU0lNX0hXX0NCIGhhbmRsZSk7CisvKnRoZSBwcm90b3R5cGUgZGVmaW5pdGlvbiBmb3Igc2V0IG1heGltdW0gc3BlZWQgZnVuY3Rpb24gcG9pbnRlciovCit0eXBlZGVmIHZvaWQgKCogRENMX1NJTV9TRVRfTUFYX1NQRUVEKShEQ0xfU0lNX0NBUkRfU1BFRUQgc3BlZWQsIERDTF9TSU1fSFdfQ0IgaGFuZGxlKTsKKy8qdGhlIHByb3RvdHlwZSBkZWZpbml0aW9uIGZvciBzZXQgcHJlZmVyIHBoeXNpY2FsIHByb3RvY29sIGZ1bmN0aW9uIHBvaW50ZXIqLwordHlwZWRlZiB2b2lkICgqIERDTF9TSU1fU0VUX1BSRUZFUl9QUk9UT0NPTCkoRENMX1NJTV9QSFlfUFJPVE9DT0wgVCwgRENMX1NJTV9IV19DQiBoYW5kbGUpOworLyp0aGUgcHJvdG90eXBlIGRlZmluaXRpb24gZm9yIHNldCBjbG9jayBzdG9wIG1vZGUgZnVuY3Rpb24gcG9pbnRlciovCit0eXBlZGVmIGthbF9ib29sICgqIERDTF9TSU1fU0VUX0NMS19TVE9QX01PREUpKERDTF9TSU1fQ0xLX1NUT1AgbW9kZSwgRENMX1NJTV9IV19DQiBoYW5kbGUpOworLyp0aGUgcHJvdG90eXBlIGRlZmluaXRpb24gZm9yIFRPVVQgdGVzdCBmdW5jdGlvbiBwb2ludGVyKi8KK3R5cGVkZWYgdm9pZCAoKiBEQ0xfU0lNX1RPVVRfVEVTVCkoa2FsX3VpbnQzMiB0b3V0VmFsdWUsIERDTF9TSU1fSFdfQ0IgaGFuZGxlKTsKKy8qdGhlIHByb3RvdHlwZSBkZWZpbml0aW9uIGZvciBhc3NpZ24gbG9naWNhbCBudW1iZXIgZnVuY3Rpb24gcG9pbnRlciovCit0eXBlZGVmIGthbF91aW50MzIgKCogRENMX1NJTV9BU1NJR05fTE9HSUNBTCkoa2FsX3VpbnQzMiBsb2dpY2FsTnVtYmVyKTsKKy8qdGhlIHByb3RvdHlwZSBkZWZpbml0aW9uIGZvciBnZXQgY2FyZCBzcGVlZCBmdW5jdGlvbiBwb2ludGVyKi8KK3R5cGVkZWYgRENMX1NJTV9DQVJEX1NQRUVEICgqRENMX1NJTV9HQVRfQ0FSRF9TUEVFRCkoRENMX1NJTV9IV19DQiBoYW5kbGUpOworLyp0aGUgcHJvdG90eXBlIGRlZmluaXRpb24gZm9yIHF1ZXJ5IDkwMDAgZnVuY3Rpb24gcG9pbnRlciovCit0eXBlZGVmIERDTF9CT09MICgqRENMX1NJTV9RVUVSWV9HRVRfOTAwMF9XSEVOX1NFTEVDVCkoRENMX1NJTV9IV19DQiBoYW5kbGUpOworLyp0aGUgcHJvdG90eXBlIGRlZmluaXRpb24gZm9yIHNldCBvd25lciB0YXNrIHBvaW50ZXIqLwordHlwZWRlZiB2b2lkICgqIERDTF9TSU1fU0VUX09XTkVSX1RBU0spKERDTF9TSU1fSFdfQ0IgaGFuZGxlKTsKKy8qIEZvciBzaW0gaG90IHBsdWcgY2FsbGJhY2sgZnVuY3Rpb24gKi8KKy8qdGhlIHByb3RvdHlwZSBkZWZpbml0aW9uIGZvciBTSU0gaG90IHBsdWcgb3V0IGNhbGwgYmFjayBmdW5jdGlvbiovCit0eXBlZGVmIHZvaWQgKCpEQ0xfU0lNX1BMVUdfT1VUX0NBTExCQUNLKShrYWxfdWludDMyIHNpbUlmKTsKKy8qdGhlIHByb3RvdHlwZSBkZWZpbml0aW9uIGZvciBTSU0gaG90IHBsdWcgaW4gY2FsbCBiYWNrIGZ1bmN0aW9uKi8KK3R5cGVkZWYgdm9pZCAoKkRDTF9TSU1fUExVR19JTl9DQUxMQkFDSykoa2FsX3VpbnQzMiBzaW1JZik7CisvKnRoZSBwcm90b3R5cGUgZGVmaW5pdGlvbiBmb3IgZ2V0IGNhcmQgZGV0ZWN0IHN0YXR1cyBwb2ludGVyKi8KK3R5cGVkZWYgdm9pZCAoKiBEQ0xfU0lNX0dFVF9DQVJEX0RFVEVDVF9TVEFUVVMpKERDTF9TSU1fSU5GTyAqaW5mbywgRENMX1NJTV9IV19DQiBoYW5kbGUpOworCisvKmRjbCBhZGQgbmV3IGFwaSA6IDMuIGFkZCB0byBmdW50aW9uIHRhYmxlIHR5cGUqLworCisvKnRoZSBkZWNsYXJhdGlvbiBvZiBTSU0gZHJpdmVyIHRhYmxlLCBleHBlb3J0ZWQgZnJvbSBTSU0gZHJpdmVyIHRvIERDTCBTSU0gaW50ZXJmYWNlLiBUaGlzIHRhYmxlIGltcGxpZXMgd2UgYWNjZXB0IGFueSBTSU0gZHJpdmVyIGZ1bmN0aW9uIHRhYmxlcyB3aXRoIHRoZSBzYW1lIGZvcm1hdC4qLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfU0lNX1JTVCByc3Q7IC8qVGhlIFJTVCBmdW5jdGlvbiB0byBkZXRlY3QgY2FyZCdzIGV4aXN0ZW5jZSovCisJRENMX1NJTV9DTUQgY21kOyAvKlRoZSBDTUQgZnVuY3Rpb24gdG8gc2VuZCB0aGUgQVBEVSBjb21tYW5kIHRvIHRoZSBjYXJkKi8KKwlEQ0xfU0lNX1BXT0ZGIHB3T2ZmOyAvKlRoZSBwb3dlciBvZmYgZnVuY3Rpb24gdG8gZGVhY3RpdmF0ZSB0aGUgY2FyZCovCisJRENMX1NJTV9HRVRfQ0FSRF9JTkZPIGdldENhcmRJbmZvOyAvKlRvIHJlcG9ydCB0aGUgY2FyZCBpbmZvcm1hdGlvbiwga25vd24gYnkgU0lNIGRyaXZlciwgdG8gdGhlIHByb3RvY29sIGxheWVyKi8KKwlEQ0xfU0lNX0dFVF9DQVJEX0VSUk9SX1RZUEVTX0lORk8gZ2V0Q2FyZEVycm9yVHlwZXNJbmZvOyAvKlRvIHJlcG9ydCB0aGUgY2FyZCBlcnJvciB0cHllcyBpbmZvcm1hdGlvbiwga25vd24gYnkgU0lNIGRyaXZlciwgdG8gdGhlIHByb3RvY29sIGxheWVyKi8KKwlEQ0xfU0lNX1NFVF9NQVhfU1BFRUQgc2V0U3BlZWQ7IC8qVG8gc2V0IHRoZSBtYXhpbXVtIGFsbG93ZWQgc3BlZWQgdG8gZHJpdmVyKi8KKwlEQ0xfU0lNX1NFVF9QUkVGRVJfUFJPVE9DT0wgc2V0UHJlZmVyVDsgLypUbyBzZXQgdGhlIHByZWZlcnJlZCBwaHlzaWNhbCBsYXllciBwcm90b2NvbCB0byBkcml2ZXIqLworCURDTF9TSU1fU0VUX0NMS19TVE9QX01PREUgc2V0Q2xvY2tTdG9wTW9kZTsgLypUbyBzZXQgdGhlIENMSyBzdG9wIGluZm9ybWF0aW9uLCBrbm93biBieSBwcm90b2NvbCwgdG8gZHJpdmVyKi8KKwlEQ0xfU0lNX1RPVVRfVEVTVCB0b3V0VGVzdDsgLypUbyBhc2sgdGhlIGRyaXZlciB0byBzdGFydCBUT1VUIHRlc3QqLworCURDTF9TSU1fQVNTSUdOX0xPR0lDQUwgYXNzaWduTG9naWNhbDsgLypUbyBBc3NpZ24gdGhlIGxvZ2ljYWwgbnVtYmVyIHRvIHNwZWNpZmljIGNhcmQqLworCURDTF9TSU1fR0FUX0NBUkRfU1BFRUQgZ2V0Q2FyZFNwZWVkOyAvKnRvIGdldCB0aGUgY2FyZCBzcGVlZCBpbmZvcm1hdGlvbiovCisJRENMX1NJTV9RVUVSWV9HRVRfOTAwMF9XSEVOX1NFTEVDVCBxdWVyeTkwMDBXaGVuU2VsZWN0OyAvKlRvIHF1ZXJ5IHdoZXRoZXIgYSBzdGF0dXMgd29yZCAweDkwMDAgaGFwcGVuZWQgYWZ0ZXIgU0VMRUNUIGNvbW1hbmQqLworCURDTF9TSU1fU0VUX09XTkVSX1RBU0sgc2V0T3duZXJUYXNrOyAvKnRvIHVwZGF0ZSBjdXJyZW50IG93bmVyIHRhc2sgKi8KKyAgICBEQ0xfU0lNX0dFVF9DQVJEX0RFVEVDVF9TVEFUVVMgZ2V0Q2FyZERldGVjdFN0YXR1czsgLyp0byBnZXQgY2FyZCBkZXRlY3QgcGluIHN0YXR1cyAqLworfURDTF9TSU1Ecml2ZXJfdDsKKworLyogZGVmaW5lcyB0aGUgcG9zc2libGUgYXBwbGljYXRpb24gdmFsdWUqLwordHlwZWRlZiBlbnVtCit7CisJU0lNX0NPTkZJR19BUF9UWVBFX1BIT05FMSwJCS8qdGhlIGNhcmQgd2lsbCBiZSB1c2VkIGZvciBwaG9uZSBhcHBsaWNhdGlvbiBTSU0gY2FyZCAxKi8KKwlTSU1fQ09ORklHX0FQX1RZUEVfUEhPTkUyLAkJLyp0aGUgY2FyZCB3aWxsIGJlIHVzZWQgZm9yIHBob25lIGFwcGxpY2F0aW9uIFNJTSBjYXJkIDIqLworCVNJTV9DT05GSUdfQVBfVFlQRV9DTU1CX1NNRCwJLyp0aGUgY2FyZCB3aWxsIGJlIHVzZWQgZm9yIENNTUIgU01EIGNhcmQqLworCVNJTV9DT05GSUdfQVBfVFlQRV9QSE9ORTMsCQkvKnRoZSBjYXJkIHdpbGwgYmUgdXNlZCBmb3IgcGhvbmUgYXBwbGljYXRpb24gU0lNIGNhcmQgMyovCisJU0lNX0NPTkZJR19BUF9UWVBFX1BIT05FNAkJCS8qdGhlIGNhcmQgd2lsbCBiZSB1c2VkIGZvciBwaG9uZSBhcHBsaWNhdGlvbiBTSU0gY2FyZCA0Ki8KK30gRENMX1NJTV9DT05GSUdfQVBfVFlQRTsKKworLyogZGVmaW5lcyB0aGUgU0lNIGNvbmZpZ3VyZSBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1NJTV9DT05GSUdfQVBfVFlQRQlhcFR5cGU7IC8qIGRlZmluZSB0aGUgYXBwbGljYXRpb24gdHlwZSBwcm90b2NvbCB3YW50IHRvIHVzZSovCisgICAgRENMX1NJTV9QTFVHX0lOX0NBTExCQUNLIGhvdFBsdWdJbkNiOyAvKiBzcGVjaWZ5IHRoZSBob3QgcGx1ZyBpbiBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyKi8KKwlEQ0xfU0lNX1BMVUdfT1VUX0NBTExCQUNLIGhvdFBsdWdPdXRDYjsgLyogc3BlY2lmeSB0aGUgaG90IHBsdWcgb3V0IGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIqLworfSBTSU1fQ09ORklHX1Q7CisKKyNkZWZpbmUgU0lNX0NPTkZJR1MgICAgXAorICAgU0lNX0NPTkZJR19UICAgclNpbUNvbmZpZzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0NNRCBmb3IgU0lNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAvKmRjbCBhZGQgbmV3IGFwaSA6IDQuIGFkZCB0byBEQ0xfQ1RSTF9DTUQgZW51bSovCisKKyNpZmRlZiBfX0JVSUxEX0RPTV9fCisvKlRoZSBTSU0gQ29tbWFuZCB2YWx1ZXMgaW4gRENMX0NUUkxfQ01EX1QgRW51bSBvZiBkY2wuaCovCit0eXBlZGVmIGVudW0KK3sKKwkgU0lNX0NUUkxfQ01EX1JTVCwgCQkJIAkJIAkJCQkJCQkvKnRyeSB0byByZXNldCB0aGUgY2FyZCBhbmQgdGVsbCBpdHMgZXhpc3RlbmNlKi8KKwkgU0lNX0NUUkxfQ01EX0NNRCwgCQkJIAkJIAkJCQkJCQkvKnNlbmQgQVBEVSBjb21tYW5kIHRvIElDQy9VSUNDKi8KKyAgIFNJTV9DVFJMX0NNRF9QV09GRiwgICAJCSAJCQkJCQkJCS8qdG8gcG93ZXIgb2ZmIHRoZSBjYXJkKi8KKyAgIFNJTV9DVFJMX0NNRF9HRVRfQ0FSRF9JTkZPLAkJCSAJCQkJLyp0byBnZXQgdGhlIGNhcmQgaW5mb3JtYXRpb24gc3RvcmVkIGluIGRyaXZlciBsYXllciovCisgICBTSU1fQ1RSTF9DTURfR0VUX0NBUkRfRVJST1JfVFlQRVNfSU5GTywJCQkgCS8qdG8gZ2V0IHRoZSBjYXJkIGVycm9yIHR5cGVzIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBkcml2ZXIgbGF5ZXIqLworICAgU0lNX0NUUkxfQ01EX1NFVF9TUEVFRCwgCQkgCQkJCQkJCS8qc2V0IHRoZSBtYXhpbXVtIGFsbG93ZWQgc3BlZWQqLworICAgU0lNX0NUUkxfQ01EX1NFVF9QUkVGRVJfUFJPVE9DT0wsCQkJCS8qdG8gc2V0IHRoZSBwcmVmZXJyZWQgcGh5c2ljYWwgcHJvdG9jbCovCisgICBTSU1fQ1RSTF9DTURfU0VUX0NMS19TVE9QX01PREUsCQkJCQkvKnRvIHNldCB0aGUgY2xvY2sgc3RvcCByZWxhdGVkIHNldHRpbmcqLworICAgU0lNX0NUUkxfQ01EX1RPVVRfVEVTVCwJCQkgCQkJCQkJLyp0byBzdGFydCBUT1VUIHRlc3QsIHVzZWQgYnkgTUVVVCBTSU0gdGVzdCB0YXNrKi8KKyAgIFNJTV9DVFJMX0NNRF9HRVRfU1BFRUQsCQkJIAkJCQkJCS8qdG8gZ2V0IHRoZSBjYXJkIHNwZWVkIGluZm9ybWF0aW9uKi8KKyAgIFNJTV9DVFJMX0NNRF9RVUVSWV85MDAwX09OX1NFTEVDVCwJCQkJLyp0byBxdWVycnkgd2hldGhlciAweDkwMDAgYWZ0ZXIgU0VMRUNUIGNvbW1hbmQgaGFwcGVucyovCisgICBTSU1fQ1RSTF9DTURfU0VUX09XTkVSX1RBU0ssCQkJCS8qdG8gdXBkYXRlIHNpbSBkcml2ZXIgb3duZXIgdGFzayovCisgICBTSU1fQ1RSTF9DTURfR0VUX0NBUkRfREVURUNUX1NUQVRVUywJCQkJLyp0byBnZXQgc2ltIGNhcmQgZGV0ZWN0IHBpbiBzdGF0dXMqLworICAgU0lNX0NUUkxfQ01EX1NFVF9TTFRfUkxULAkJCQkvKnRvIHNldCBTTFQgcmVzdWx0Ki8KK31EQ0xfQ1RSTF9DTURfVDsKKyNlbHNlCisjZGVmaW5lIFNJTV9DTURTICAgIFwKKyAgIFNJTV9DVFJMX0NNRF9CQVNFLCBcCisgICBTSU1fQ1RSTF9DTURfUlNUID0gMCwgXAorICAgU0lNX0NUUkxfQ01EX0NNRCwgXAorICAgU0lNX0NUUkxfQ01EX1BXT0ZGLCBcCisgICBTSU1fQ1RSTF9DTURfR0VUX0NBUkRfSU5GTywgXAorICAgU0lNX0NUUkxfQ01EX0dFVF9DQVJEX0VSUk9SX1RZUEVTX0lORk8sIFwKKyAgIFNJTV9DVFJMX0NNRF9TRVRfU1BFRUQsICBcCisgICBTSU1fQ1RSTF9DTURfU0VUX1BSRUZFUl9QUk9UT0NPTCwgXAorICAgU0lNX0NUUkxfQ01EX1NFVF9DTEtfU1RPUF9NT0RFLCBcCisgICBTSU1fQ1RSTF9DTURfVE9VVF9URVNULCBcCisgICBTSU1fQ1RSTF9DTURfR0VUX1NQRUVELCBcCisgICBTSU1fQ1RSTF9DTURfUVVFUllfOTAwMF9PTl9TRUxFQ1QsIFwKKyAgIFNJTV9DVFJMX0NNRF9TRVRfT1dORVJfVEFTSywJXAorICAgU0lNX0NUUkxfQ01EX0dFVF9DQVJEX0RFVEVDVF9TVEFUVVMsCVwKKyAgIFNJTV9DVFJMX0NNRF9TRVRfU0xUX1JMVCwgXAorICAgU0lNX0NUUkxfQ01EX01BWF9WQUxVRSwgXAorICAgU0lNX0NUUkxfQ01EX0RVTU1ZX0VORCA9IFNJTV9DVFJMX0NNRF9CQVNFICsgU0lNX0NUUkxfQ01EX01BWF9WQUxVRSwKKyNlbmRpZiAvKl9fQlVJTERfRE9NX18qLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ1RSTF9EQVRBX1Q6IERlZmluZSB0aGUgQ29udHJvbCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBtb2R1bGUncyBjb21tYW5kCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKKy8qIEZPUiBTSU1fQ1RSTF9DTURfUlNUIGNvbnRyb2wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1NJTV9QT1dFUiBFeHBlY3RWb2x0OyAvKnRoZSBleHBlY3RlZCB2b2x0YWdlIGZyb20gY2FsbGVyKi8KKwlEQ0xfU0lNX1BPV0VSICpSZXN1bHRWb2x0OyAvKnRoZSBwb2ludGVyIHRvIHJlcG9ydCB0aGUgZXZlbnR1YWwgcmVzZXQgdm9sdGFnZSBmcm9tIGRyaXZlciovCisJa2FsX2Jvb2wgd2FybTsgLyp0byBpbmRpY2F0ZSB3aGV0aGVyIHRoaXMgaXMgY29sZCByZXNldCBvciB3YXJtIHJlc2V0Ki8KKwlEQ0xfU0lNX1NUQVRVUyByc3RSZXN1bHQ7IC8qdGhlIHJlc3VsdCovCit9IFNJTV9DVFJMX1JTVF9UOworCisvKiBGT1IgU0lNX0NUUkxfQ01EX0NNRCBjb250cm9sIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgKnR4RGF0YTsgICAgICAgICAgICAgLyp0aGUgcG9pbnRlciB0byB0aGUgdHggZGF0YSBidWZmZXIqLworICAgIGthbF91aW50MzIgICp0eFNpemU7ICAgICAgICAgICAgLyp0aGUgcG9pbnRlciB0byB0aGUgdHggYnVmZmVyIHNpemUqLworICAgIGthbF91aW50OCAgKnJ4RGF0YTsgICAgICAgICAgICAgLyp0aGUgcG9pbnRlciB0byB0aGUgdHggZGF0YSBidWZmZXIqLworICAgIGthbF91aW50MzIgICpyeFNpemU7ICAgICAgICAgICAgLyp0aGUgcG9pbnRlciB0byB0aGUgcnggYnVmZmVyIHNpemUsIGRyaXZlciB3aWxsIHRoZW4gZmVlZGJhY2sgYWN0dWFsIHJlY2VpdmUgc2l6ZSBoZXJlKi8KKyAgICBrYWxfdWludDE2ICpzdGF0dXNXb3JkOyAgICAgICAgIC8qdGhlIHBvaW50ZXIgdG8gY29udGFpbnMgdGhlIHN0YXR1cyB3b3JkIGZyb20gY2FyZCovCisgICAga2FsX3VpbnQ4ICAqYnlwYXNzNjI2MzsgICAgICAgICAvKnRoZSBmbGFnIHRvIGNvbnRyb2wgd2hldGhlciByZXR1cm4gNjI2MyBkaXJlY2x0bHkqLworfSBTSU1fQ1RSTF9DTURfVDsKKworLypkY2wgYWRkIG5ldyBhcGkgOiA0LiBuZXcgY3RybCBkYXRhIHR5cGUqLworCisvKiBGT1IgU0lNX0NUUkxfQ01EX0dFVF9DQVJEX0lORk8gY29udHJvbCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfU0lNX0lORk8gKmluZm87CQkJCS8qdGhlIHBvaW50ZXIgdG8gRENMX1NJTV9JTkZPIHN0cnVjdHVyZSwgU0lNIGRyaXZlciB3aWxsIGZpbGxlZCB0aGUgdmFsdWVzIG9mIHRoZSBzdHJ1Y3R1cmUqLworfSBTSU1fQ1RSTF9HRVRfQ0FSRF9JTkZPX1Q7Cit0eXBlZGVmIHN0cnVjdAoreworCURDTF9TSU1fSU5GTyAqaW5mbzsJCQkJLyp0aGUgcG9pbnRlciB0byBEQ0xfU0lNX0lORk8gc3RydWN0dXJlLCBTSU0gZHJpdmVyIHdpbGwgZmlsbGVkIHRoZSB2YWx1ZXMgb2YgdGhlIHN0cnVjdHVyZSovCit9IFNJTV9DVFJMX0dFVF9DQVJEX0RFVEVDVF9TVEFUVVNfVDsKKworLyogRk9SIFNJTV9DVFJMX0NNRF9HRVRfQ0FSRF9FUlJPUl9UWVBFU19JTkZPIGNvbnRyb2wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1NJTV9JTkZPICppbmZvOwkJCQkvKnRoZSBwb2ludGVyIHRvIERDTF9TSU1fSU5GTyBzdHJ1Y3R1cmUsIFNJTSBkcml2ZXIgd2lsbCBmaWxsZWQgdGhlIHZhbHVlcyBvZiB0aGUgc3RydWN0dXJlKi8KK30gU0lNX0NUUkxfR0VUX0NBUkRfRVJST1JfVFlQRVNfSU5GT19UOworCisvKiBGT1IgU0lNX0NUUkxfQ01EX1NFVF9TUEVFRCBjb250cm9sIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9TSU1fQ0FSRF9TUEVFRCBzcGVlZDsJLyp0aGUgRENMX1NJTV9DQVJEX1NQRUVEIHN0cnVjdHVyZSwgdGhlIHN0cnVjdHVyZSBpcyB0byB0ZWxsIHRoZSBkcml2ZXIgdGhlIG1heGltdW0gYWxsb3dlZCBzcGVlZCB2YWx1ZSovCit9IFNJTV9DVFJMX1NFVF9NQVhfU1BFRURfVDsKKworLyogRk9SIFNJTV9DVFJMX0NNRF9TRVRfUFJFRkVSX1BST1RPQ09MIGNvbnRyb2wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1NJTV9QSFlfUFJPVE9DT0wgVDsJCS8qdGhlIERDTF9TSU1fUEhZX1BST1RPQ09MIHN0cnVjdHVyZSwgdGhlIHN0cnVjdHVyZSBpcyB0byB0ZWxsIHRoZSBkcml2ZXIgdGhlIHByZWZlcnJlZCBwaHlzaWNhbCBwcm90b2NvbCovCit9IFNJTV9DVFJMX1NFVF9QUkVGRVJfUFJPVE9DT0xfVDsKKworLyogRk9SIFNJTV9DVFJMX0NNRF9TRVRfQ0xLX1NUT1BfTU9ERSBjb250cm9sIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9TSU1fQ0xLX1NUT1AgbW9kZTsJCS8qdGhlIERDTF9TSU1fQ0xLX1NUT1Agc3RydWN0dXJlLCB0aGUgc3RydWN0dXJlIGlzIHRvIHRlbGwgdGhlIGRyaXZlciBjbG9jayBzdG9wIHJlbGF0ZWQgaW5mb3JtYXRpb24qLworfSBTSU1fQ1RSTF9TRVRfQ0xLX1NUT1BfTU9ERV9UOworCisvKiBGT1IgU0lNX0NUUkxfQ01EX1RPVVRfVEVTVCBjb250cm9sIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMzIgdG91dFZhbHVlOwkJCS8qdGhlIHRvdXQgdmFsdWUgdGhhdCB3ZSB3YW50IHRvIGFwcGx5IHRvIFRPVVQgdGVzdCovCit9IFNJTV9DVFJMX1RPVVRfVEVTVF9UOworCisvKiBGT1IgU0lNX0NUUkxfQ01EX0dFVF9TUEVFRCBjb250cm9sIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9TSU1fQ0FSRF9TUEVFRCAqc3BlZWQ7IC8vcmV0dXJuIHRoZSBjYXJkJ3Mgc3BlZWQgdG8gU0lNIHRhc2sKK30gU0lNX0NUUkxfR0VUX1NQRUVEX1Q7CisKKy8qIEZPUiBTSU1fQ1RSTF9DTURfUVVFUllfOTAwMF9PTl9TRUxFQ1QgY29udHJvbCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfQk9PTCAqZ290OTAwMDsgLy9yZXR1cm4gdGhlIGluZm9ybWF0aW9uIHdoZXRoZXIgd2UgZW5jb3VudGVyIDkwMDAgaW4gc2VsZWN0IGNvbW1hbmQKK30gU0lNX0NUUkxfUVVFUllfOTAwMF9UOworCisvKiBGT1IgU0lNX1NMVF9TRVRfUkxUIGNvbnRyb2wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wgcmx0OyAJCQkvKnRoZSBTTFQgY2hlY2tpbmcgcmVzdWx0IHNldCBmcm9tIHByb3RvY29sKi8KK30gU0lNX0NUUkxfU0VUX1NMVF9STFRfVDsKKworLypkY2wgYWRkIG5ldyBhcGkgOiA1LiBhZGQgdG8gRENMX0NUUkxfREFUQSBlbnVtKi8KKworI2lmZGVmIF9fQlVJTERfRE9NX18KKy8qZGF0YSBzdHJ1Y3R1cmUgdW5pb24gZm9yIGFsbCBvZiBTSU0gY29udHJvbCBjb21tYW5kcyovCit0eXBlZGVmIHVuaW9uCit7CisgICBTSU1fQ1RSTF9SU1RfVAkJclNJTVJzdDsJCQkJCQkJCQkJCQkJCQkvKmRhdGEgc3RydWN0dXJlIGZvciBTSU1fQ1RSTF9DTURfUlNUIGNvbnRyb2wgY29tbWFuZCovCisgICBTSU1fQ1RSTF9DTURfVAkJclNJTUNtZDsJCQkJCQkJCQkJCQkJCQkvKmRhdGEgc3RydWN0dXJlIGZvciBTSU1fQ1RSTF9DTURfQ01EIGNvbnRyb2wgY29tbWFuZCovCisgICBTSU1fQ1RSTF9HRVRfQ0FSRF9JTkZPX1QJclNJTUdldENhcmRJbmZvOwkJCQkJCQkvKmRhdGEgc3RydWN0dXJlIGZvciBTSU1fQ1RSTF9DTURfR0VUX0NBUkRfSU5GTyBjb250cm9sIGNvbW1hbmQqLworICAgU0lNX0NUUkxfR0VUX0NBUkRfRVJST1JfVFlQRVNfSU5GT19UCXJTSU1HZXRDYXJkRXJyb3JUeXBlc0luZm87CQkJCQkJCS8qZGF0YSBzdHJ1Y3R1cmUgZm9yIFNJTV9DVFJMX0NNRF9HRVRfQ0FSRF9FUlJPUl9UWVBFU19JTkZPIGNvbnRyb2wgY29tbWFuZCovCisgICBTSU1fQ1RSTF9HRVRfQ0FSRF9ERVRFQ1RfU1RBVFVTX1QJclNJTUdldENhcmREZXRlY3RTdGF0dXM7CQkJCQkJCS8qZGF0YSBzdHJ1Y3R1cmUgZm9yIFNJTV9DVFJMX0dFVF9DQVJEX0RFVEVDVF9TVEFUVVMgY29udHJvbCBjb21tYW5kKi8KKyAgIFNJTV9DVFJMX1NFVF9NQVhfU1BFRURfVAlyU0lNU2V0TWF4U3BlZWQ7CQkJCQkJCS8qZGF0YSBzdHJ1Y3R1cmUgZm9yIFNJTV9DVFJMX0NNRF9TRVRfU1BFRUQgY29udHJvbCBjb21tYW5kKi8KKyAgIFNJTV9DVFJMX1NFVF9QUkVGRVJfUFJPVE9DT0xfVAlyU0lNU2V0UHJlZmVyUHJvdG9jb2w7CS8qZGF0YSBzdHJ1Y3R1cmUgZm9yIFNJTV9DVFJMX0NNRF9TRVRfUFJFRkVSX1BST1RPQ09MIGNvbnRyb2wgY29tbWFuZCovCisgICBTSU1fQ1RSTF9TRVRfQ0xLX1NUT1BfTU9ERV9UCQlyU0lNU2V0Q2xrU3RvcE1vZGU7CQkJLypkYXRhIHN0cnVjdHVyZSBmb3IgU0lNX0NUUkxfQ01EX1NFVF9DTEtfU1RPUF9NT0RFIGNvbnRyb2wgY29tbWFuZCovCisgICBTSU1fQ1RSTF9UT1VUX1RFU1RfVAkJclNJTVRvdXRUZXN0OwkJCQkJCQkJCQkvKmRhdGEgc3RydWN0dXJlIGZvciBTSU1fQ1RSTF9DTURfVE9VVF9URVNUIGNvbnRyb2wgY29tbWFuZCovCisgICBTSU1fQ1RSTF9HRVRfU1BFRURfVAkJclNJTUdldFNwZWVkOwkJCQkJCQkJCQkvKmRhdGEgc3RydWN0dXJlIGZvciBTSU1fQ1RSTF9DTURfR0VUX1NQRUVEIGNvbnRyb2wgY29tbWFuZCovCisgICBTSU1fQ1RSTF9RVUVSWV85MDAwX1QJCXJTSU1RdWVyeTkwMDA7CQkJCQkJCQkvKmRhdGEgc3RydWN0dXJlIGZvciBTSU1fQ1RSTF9DTURfUVVFUllfOTAwMF9PTl9TRUxFQ1QgY29udHJvbCBjb21tYW5kKi8KKyAgIFNJTV9DVFJMX1NFVF9TTFRfUkxUX1QJCXJTSU1TZXRTbHRSbHQ7CQkJCQkJCQkvKmRhdGEgc3RydWN0dXJlIGZvciBTSU1fQ1RSTF9DTURfU0VUX1NMVF9STFQgY29udHJvbCBjb21tYW5kKi8KK31EQ0xfQ1RSTF9EQVRBX1Q7CisjZWxzZQorI2RlZmluZSBTSU1fQ1RSTFMgXAorICAgU0lNX0NUUkxfUlNUX1QJCXJTSU1Sc3Q7IFwKKyAgIFNJTV9DVFJMX0NNRF9UCQlyU0lNQ21kOyBcCisgICBTSU1fQ1RSTF9HRVRfQ0FSRF9JTkZPX1QJclNJTUdldENhcmRJbmZvO1wKKyAgIFNJTV9DVFJMX0dFVF9DQVJEX0VSUk9SX1RZUEVTX0lORk9fVAlyU0lNR2V0Q2FyZEVycm9yVHlwZXNJbmZvO1wKKyAgIFNJTV9DVFJMX0dFVF9DQVJEX0RFVEVDVF9TVEFUVVNfVAlyU0lNR2V0Q2FyZERldGVjdFN0YXR1czsgXAorICAgU0lNX0NUUkxfU0VUX01BWF9TUEVFRF9UCXJTSU1TZXRNYXhTcGVlZDsgXAorICAgU0lNX0NUUkxfU0VUX1BSRUZFUl9QUk9UT0NPTF9UCXJTSU1TZXRQcmVmZXJQcm90b2NvbDsgXAorICAgU0lNX0NUUkxfU0VUX0NMS19TVE9QX01PREVfVAkJclNJTVNldENsa1N0b3BNb2RlOyBcCisgICBTSU1fQ1RSTF9UT1VUX1RFU1RfVAkJclNJTVRvdXRUZXN0OyBcCisgICBTSU1fQ1RSTF9HRVRfU1BFRURfVAkJclNJTUdldFNwZWVkOyBcCisgICBTSU1fQ1RSTF9RVUVSWV85MDAwX1QJCXJTSU1RdWVyeTkwMDA7IFwKKyAgIFNJTV9DVFJMX1NFVF9TTFRfUkxUX1QJCXJTSU1TZXRTbHRSbHQ7ICAgCisjZW5kaWYgLypfX0JVSUxEX0RPTV9fKi8KKworI2VuZGlmIC8qX19EQ0xfU0lNX0hfU1RSVUNUX18qLworCisjZW5kaWYgLypEQ0xfREVGSU5JVElPTl9TVFJVQ1QqLworCisjaWZkZWYgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisjaWZuZGVmIF9fRENMX1NJTV9IX1BST1RPVFlQRV9fCisjZGVmaW5lIF9fRENMX1NJTV9IX1BST1RPVFlQRV9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xTSU1fT3BlbgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBvcGVuIHRoZSBTSU0gbW9kdWxlIGFuZCBnZXQgYSBoYW5kbGUuCisqCisqIFBBUkFNRVRFUlMKKyoJZGV2OiAtIG9ubHkgdmFsaWQgZm9yIERDTF9TSU0uCisqCWZsYWdzOiAtIG5vIHNlcGNpYWwgZmxhZ3MgaXMgbmVlZGVkLgorKgorKiBSRVRVUk4gVkFMVUVTCisqCURDTF9IQU5ETEVfSU5WQUxJRDogLSBkZXYgaXMgYW4gaW52YWxpZCB2YWx1ZS4KKyoJRENMX0hBTkRMRV9OT05FOiAtIG5vIGhhbmRsZXIgbGVmdCwgb3BlbiBmYWlsZWQuCisqIG90aGVyIHZhbHVlOiAtIGEgdmFsaWQgaGFuZGxlCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworRENMX0hBTkRMRSBEY2xTSU1fT3BlbihEQ0xfREVWIGRldiwgRENMX0ZMQUdTIGZsYWdzKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFNJTV9Db25maWd1cmUKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gY29uZmlndXJlIHRoZSBhcHBsaWNhdGlvbiB1c2FnZSBvZiBnaXZlbiBoYW5kbGVyLgorKgorKiBQQVJBTUVURVJTCisqCWhhbmRsZTogLSB0aGUgaGFuZGxlIHRvIGJlIGNvbmZpZ3VyZWQsIHRoZSB2YWx1ZSBjYW5ub3QgYmUgemVybworKiBjb25maWd1cmU6IC0gdG8gY29uZmlndXJlIHRoZSBhcHBsaWNhdGlvbiB1c2FnZSBvZiB0aGlzIGNhcmQsIHBvc3NpYmxlIHZhbHVlIGNhbiBiZSBmb3VuZCBpbiBEQ0xfU0lNX0NPTkZJR19BUF9UWVBFCisqCisqIFJFVFVSTiBWQUxVRVMgCisqCVNUQVRVU19JTlZBTElEX0RDTF9IQU5ETEU6IC0gdGhlIGhhbmRsZSBpcyBpbGxlZ2FsCisqIFNUQVRVU19PSzogLSB0aGUgY29uZmlndXJhdGlvbiBpcyBkb25lIHN1Y2Nlc3NmdWxseQorKiBTVEFUVVNfSU5WQUxJRF9DT05GSUdVUkFUSU9OOiAtIHRoZSB2YWx1ZSBvZiBjb25maWd1cmUgaXMgbm90IHRoZSBvbmUgaW4gRENMX1NJTV9DT05GSUdfQVBfVFlQRQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0RDTF9TVEFUVVMgRGNsU0lNX0NvbmZpZ3VyZShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NPTkZJR1VSRV9UICpjb25maWd1cmUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsU0lNX0NvbnRyb2wKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvbnRyb2wgY29tbWFuZCBvZiBTSU0gZHJpdmVyLCB0aGlzIHByb3ZpZGVzIG1vc3Qgb2YgdGhlIFNJTSBkcml2ZXIgc2VydmljZXMgdG8gcHJvdG9jb2wuCisqCisqIFBBUkFNRVRFUlMKKyogaGFuZGxlOiAtIGEgdmFsaWQgaGFuZGxlIHJldHVybiBieSBEY2xTSU1fT3BlbigpCisqIGNtZDogCSAgLSBhIGNvbnRyb2wgY29tbWFuZCB0byBTSU0gZHJpdmVyLCBwb3NzaWJsZSB2YWx1ZXMgYXJlIGFzIGZvbGxvd2luZworKiAgICAgICAgIDEuCVNJTV9DVFJMX0NNRF9SU1Q6IHRyeSB0byByZXNldCB0aGUgY2FyZCBhbmQgdGVsbCBpdHMgZXhpc3RlbmNlCisqICAgICAgICAgMi4JU0lNX0NUUkxfQ01EX0NNRDogc2VuZCBBUERVIGNvbW1hbmQgdG8gSUNDL1VJQ0MKKyogICAgICAgICAzLglTSU1fQ1RSTF9DTURfUFdPRkY6IHRvIHBvd2VyIG9mZiB0aGUgY2FyZAorKiAgICAgICAgIDQuCVNJTV9DVFJMX0NNRF9HRVRfQ0FSRF9JTkZPOiB0byBnZXQgdGhlIGNhcmQgaW5mb3JtYXRpb24gc3RvcmVkIGluIGRyaXZlciBsYXllcgorKiAgICAgICAgIDUuCVNJTV9DVFJMX0NNRF9TRVRfU1BFRUQ6IHNldCB0aGUgbWF4aW11bSBhbGxvd2VkIHNwZWVkCisqICAgICAgICAgNi4JU0lNX0NUUkxfQ01EX1NFVF9QUkVGRVJfUFJPVE9DT0w6IHRvIHNldCB0aGUgcHJlZmVycmVkIHBoeXNpY2FsIHByb3RvY2wKKyogICAgICAgICA3LglTSU1fQ1RSTF9DTURfU0VUX0NMS19TVE9QX01PREU6IHRvIHNldCB0aGUgY2xvY2sgc3RvcCByZWxhdGVkIHNldHRpbmcKKyogICAgICAgICA4LglTSU1fQ1RSTF9DTURfVE9VVF9URVNUOiB0byBzdGFydCBUT1VUIHRlc3QsIHVzZWQgYnkgTUVVVCBTSU0gdGVzdCB0YXNrCisqICAgICAgICAgOS4JU0lNX0NUUkxfQ01EX0dFVF9TUEVFRDogdG8gZ2V0IHRoZSBjYXJkIHNwZWVkIGluZm9ybWF0aW9uCisqICAgICAgICAgMTAuCVNJTV9DVFJMX0NNRF9RVUVSWV85MDAwX09OX1NFTEVDVDogdG8gcXVlcnJ5IHdoZXRoZXIgMHg5MDAwIGFmdGVyIFNFTEVDVCBjb21tYW5kIGhhcHBlbnMKKyogZGF0YTogLSBjb250cm9sIGRhdGEgZm9yIFNJTSBjb250cm9sIGNvbW1hbmQsIHBvc3NpYmxlIHZhbHVlcyBhcmUgYXMgZm9sbG93aW5nCisqICAgICAgICAgIDEuIFNJTV9DVFJMX0NNRF9SU1Q6IHBvaW50ZXIgdG8gYSBTSU1fQ1RSTF9SU1RfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgMS4gU0lNX0NUUkxfQ01EX0NNRDogcG9pbnRlciB0byBhIFNJTV9DVFJMX0NNRF9UIHN0cnVjdHVyZQorKiAgICAgICAgICAyLiBTSU1fQ1RSTF9DTURfUFdPRkY6IE5VTEwKKyogICAgICAgICAgMy4gU0lNX0NUUkxfQ01EX0dFVF9DQVJEX0lORk86IHBvaW50ZXIgdG8gYSBTSU1fQ1RSTF9HRVRfQ0FSRF9JTkZPX1Qgc3RydWN0dXJlCisqICAgICAgICAgIDQuIFNJTV9DVFJMX0NNRF9TRVRfU1BFRUQ6IHBvaW50ZXIgdG8gYSBTSU1fQ1RSTF9TRVRfTUFYX1NQRUVEX1Qgc3RydWN0dXJlCisqICAgICAgICAgIDUuIFNJTV9DVFJMX0NNRF9TRVRfUFJFRkVSX1BST1RPQ09MOiBwb2ludGVyIHRvIGEgU0lNX0NUUkxfU0VUX1BSRUZFUl9QUk9UT0NPTF9UIHN0cnVjdHVyZQorKiAgICAgICAgICA2LiBTSU1fQ1RSTF9DTURfU0VUX0NMS19TVE9QX01PREU6IHBvaW50ZXIgdG8gYSBTSU1fQ1RSTF9TRVRfQ0xLX1NUT1BfTU9ERV9UIHN0cnVjdHVyZQorKiAgICAgICAgICA3LiBTSU1fQ1RSTF9DTURfVE9VVF9URVNUOiBwb2ludGVyIHRvIGEgU0lNX0NUUkxfVE9VVF9URVNUX1Qgc3RydWN0dXJlCisqICAgICAgICAgIDguIFNJTV9DVFJMX0NNRF9HRVRfU1BFRUQ6IHBvaW50ZXIgdG8gYSBTSU1fQ1RSTF9HRVRfU1BFRURfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgOS4gU0lNX0NUUkxfQ01EX1FVRVJZXzkwMDBfT05fU0VMRUNUOiBwb2ludGVyIHRvIGEgU0lNX0NUUkxfUVVFUllfOTAwMF9UIHN0cnVjdHVyZQorKiBSRVRVUk4gVkFMVUVTCisqCVNUQVRVU19PSzogLSBjb21tYW5kIGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyogU1RBVFVTX0lOVkFMSURfQ01EOiAtIFRoZSBjb21tYW5kIGlzIGludmFsaWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworRENMX1NUQVRVUyBEY2xTSU1fQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFNJTV9DbG9zZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiB0byBjbG9zZSB0aGUgZnVydGhlciBmdW5jdGlvbmFsaXR5IG9mIHNwZWNpZmllZCBTSU0gaGFuZGxlLgorKgorKiBQQVJBTUVURVJTCisqCWhhbmRsZTogdGhlIGhhbmRsZSB0aGF0IHJldHVybiBieSBEY2xTSU1fT3Blbi4KKyoKKyogUkVUVVJOIFZBTFVFUzoKKyogU1RBVFVTX09LOiAtIHRoZSBoYW5kbGUgaXMgY2xvc2VkIHN1Y2Nlc3NmdWxseQorKiBTVEFUVVNfSU5WQUxJRF9EQ0xfSEFORExFOiAtIHRoZSBoYW5kbGUgaXMgaW52YWxpZAorKglTVEFUVVNfVU5TVVBQT1JURUQ6CisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworRENMX1NUQVRVUyBEY2xTSU1fQ2xvc2UoRENMX0hBTkRMRSBoYW5kbGUpOworRENMX1NUQVRVUyBEY2xTSU1fSW5pdGlhbGl6ZSh2b2lkKTsKKyNlbmRpZiAvKl9fRENMX1NJTV9IX1BST1RPVFlQRV9fKi8KKyNlbmRpZiAvL0RDTF9ERUZJTklUSU9OX1BST1RPVFlQRQorCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9zaW1fZ3Bpby5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfc2ltX2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODE5ZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfc2ltX2dwaW8uaApAQCAtMCwwICsxLDE3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgIGRjbF9zaW1fZ3Bpby5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1hdWlfU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgZGVmaW5lcyBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgZm9yIFNJTSBHUElPIERDTCBpbnRlcmZhY2UuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9TVFJVQ1QKKworI2lmbmRlZiBfX0RDTF9TSU1fR1BJT19IX1NUUlVDVF9fCisjZGVmaW5lIF9fRENMX1NJTV9HUElPX0hfU1RSVUNUX18KKworLypSSFIqLworLy8jaW5jbHVkZSAia2FsX25vbl9zcGVjaWZpY19nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAiZGNsLmgiCisvKlJIUiovCisKK3R5cGVkZWYgZW51bXsKKyAgIE1UNjMwNl9TSU1fR1BJTzEgPSAwLAorICAgTVQ2MzA2X1NJTV9HUElPMiwKKyAgIE1UNjMwNl9TSU1fR1BJTzMsCisgICBNVDYzMDZfU0lNX0dQSU80LAorICAgTVQ2MzA2X1NJTV9HUElPNSwKKyAgIE1UNjMwNl9TSU1fR1BJTzYsCisgICBNVDYzMDZfU0lNX0dQSU83LAorICAgTVQ2MzA2X1NJTV9HUElPOCwKKyAgIE1UNjMwNl9TSU1fR1BJTzksCisgICBNVDYzMDZfU0lNX0dQSU8xMCwKKyAgIE1UNjMwNl9TSU1fR1BJTzExLAorICAgTVQ2MzA2X1NJTV9HUElPMTIsCisgICBNVDYzMDZfU0lNX0dQSTEzLAorICAgTVQ2MzA2X1NJTV9HUEkxNCwKKyAgIE1UNjMwNl9TSU1fR1BJMTUsCisgICBNVDYzMDZfU0lNX0dQSTE2LAorICAgTVQ2MzA2X1NJTV9HUEkxNywKKyAgIE1UNjMwNl9TSU1fR1BJMTgsCit9RENMX1NJTUdQSU9fUElOX0RFRjsKKworI2RlZmluZSBTSU1HUElPX1BVTExfSElHSAkJCTEKKyNkZWZpbmUgU0lNR1BJT19QVUxMX0xPVwkJCTAKKyNkZWZpbmUgU0lNR1BJT19ESVJfSU4gICAgICAgICAgIDAKKyNkZWZpbmUgU0lNR1BJT19ESVJfT1VUICAgICAgICAgIDEgCisjZGVmaW5lIFNJTUdQSU9fVk9MVF8xOFYgICAgICAgICAwCisjZGVmaW5lIFNJTUdQSU9fVk9MVF8yOFYgICAgICAgICAxCisjZGVmaW5lIFNJTUdQSU9fVk9MVF8zMFYgICAgICAgICAyCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9PUFRJT05TIGZvciBTSU1HUElPCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgU0lNR1BJT19PUFRJT05TCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ09ORklHVVJFX1QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0VWRU5UIGZvciBHUElPCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgU0lNR1BJT19FVkVOVFMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0NNRCBmb3IgR1BJTworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNJTUdQSU9fQ01EUyAgICBcCisgICBTSU1HUElPX0NNRF9SRUFELCAgXAorICAgU0lNR1BJT19DTURfV1JJVEUsICBcCisgICBTSU1HUElPX0NNRF9TRVRfRElSLCAgXAorICAgU0lNR1BJT19DTURfVFJVTl9PTl9WQ0MsICBcCisgICBTSU1HUElfQ01EX1JFQUQsCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ1RSTF9EQVRBX1Q6IERlZmluZSB0aGUgQ29udHJvbCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBtb2R1bGUncyBjb21tYW5kCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEZPUiBHUElPX0NNRF9SRUFEIGNvbnRyb2wgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDggICB1MUlPRGF0YTsgLy8gR1BJT19JT19ISUdIIG9yIEdQSU9fSU9fTE9XCit9IFNJTUdQSU9fQ1RSTF9SRUFEX1Q7CisKKy8qIEZPUiBTSU1HUElPX0NNRF9XUklURSBjb250cm9sIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQ4ICAgdTFJT0RhdGE7Ly8gR1BJT19JT19ISUdIIG9yIEdQSU9fSU9fTE9XCit9IFNJTUdQSU9fQ1RSTF9XUklURV9UOworCisvKiBGT1IgU0lNR1BJT19DTURfU0VUX0RJUiBjb250cm9sIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQxNiAgdTJEaXI7Cit9IFNJTUdQSU9fQ1RSTF9TRVRfRElSX1Q7CisKKy8qIEZPUiBTSU1HUElPX0NNRF9UUlVOX09OX1ZDQyBjb250cm9sIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgb247CisgICBrYWxfdWludDggdm9sdDsKK30gU0lNR1BJT19DVFJMX1RSVU5fT05fUE9XRVI7CisKKyNkZWZpbmUgU0lNR1BJT19DVFJMUyBcCisgICBTSU1HUElPX0NUUkxfUkVBRF9UICAgICAgICAgICAgICAgclNHUmVhZDsgXAorICAgU0lNR1BJT19DVFJMX1dSSVRFX1QgICAgICAgICAgICAgIHJTR1dyaXRlOyBcCisgICBTSU1HUElPX0NUUkxfU0VUX0RJUl9UICAgICAgICAgICAgclNHU2V0RGlyOyBcCisgICBTSU1HUElPX0NUUkxfVFJVTl9PTl9QT1dFUiAgICAgICAgclNHVHVybk9uUG93ZXI7IFwKKyAgIFNJTUdQSU9fQ1RSTF9SRUFEX1QgICAgICAgICAgICAgICByU0dJUmVhZDsKKworI2VuZGlmIC8qX19EQ0xfU0lNX0dQSU9fSF9TVFJVQ1RfXyovCisKKyNlbmRpZiAvKkRDTF9ERUZJTklUSU9OX1NUUlVDVCovCisKKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9QUk9UT1RZUEUKKyNpZm5kZWYgX19EQ0xfU0lNX0dQSU9fSF9QUk9UT1RZUEVfXworI2RlZmluZSBfX0RDTF9TSU1fR1BJT19IX1BST1RPVFlQRV9fCitEQ0xfU1RBVFVTIERjbFNJTUdQSU9fSW5pdGlhbGl6ZSh2b2lkKTsKK0RDTF9IQU5ETEUgRGNsU0lNR1BJT19PcGVuKERDTF9ERVYgZGV2LCBEQ0xfRkxBR1MgZmxhZ3MpOworRENMX1NUQVRVUyBEY2xTSU1HUElPX0NvbnRyb2woRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DVFJMX0NNRCBjbWQsIERDTF9DVFJMX0RBVEFfVCAqZGF0YSk7CitEQ0xfU1RBVFVTIERjbFNJTUdQSU9fQ2xvc2UoRENMX0hBTkRMRSBoYW5kbGUpOworI2VuZGlmIC8qX19EQ0xfU0lNX0dQSU9fSF9QUk9UT1RZUEVfXyovCisjZW5kaWYgLy9EQ0xfREVGSU5JVElPTl9QUk9UT1RZUEUKKworCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9zcG1pLmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9zcG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFhNGVlYQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX3NwbWkuaApAQCAtMCwwICsxLDMzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE5CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgIGRjbF9zcG1pLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aV9Tb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBkZWZpbmVzIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBmb3IgU1BNSSBEQ0wgaW50ZXJmYWNlLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUCisKKyNpZm5kZWYgX19EQ0xfU1BNSV9IX1NUUlVDVF9fCisjZGVmaW5lIF9fRENMX1NQTUlfSF9TVFJVQ1RfXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX09QVElPTlMgZm9yIFNQTUkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTUE1JX09QVElPTlMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DT05GSUdVUkVfVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNQTUlfQ09ORklHUworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0VWRU5UIGZvciBTUE1JCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgU1BNSV9FVkVOVFMKKwordHlwZWRlZiBlbnVtCit7CisJRENMX0JVQ0tfQ1BVLAorCURDTF9CVUNLX0dQVSwKKwlEQ0xfQlVDS19NRCwKKwlEQ0xfQlVDS19SRiwKKwlEQ0xfTUFJTl9QTUlDLAorCURDTF9CVUNLX1ZQVSwKKwlEQ0xfU1VCX1BNSUMsCisJRENMX1NMVl9UWVBFX01BWAorfVNQTUlfU0xWX1RZUEVfRU5VTTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0RBVEFfVDogRGVmaW5lIHRoZSBDb250cm9sIGRhdGEgc3RydWN0dXJlIGZvciBlYWNoIG1vZHVsZSdzIGNvbW1hbmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRm9yIFNQTUlfQ1RSTF9FWFRfUkVHSVNURVJfUkVBREwgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQxNiB0eXBlOworCURDTF9VSU5UMTYgYWRkcjsKKwlEQ0xfVUlOVDE2IHZhbHVlOworCURDTF9VSU5UMTYgbGVuOworfVNQTUlfQ1RSTF9FWFRfUkVHSVNURVJfUkVBREw7CisKKy8qIEZvciBTUE1JX0NUUkxfRVhUX1JFR0lTVEVSX1dSSVRFTCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfVUlOVDE2IHR5cGU7CisJRENMX1VJTlQxNiBhZGRyOworCURDTF9VSU5UMTYgdmFsdWU7CisJRENMX1VJTlQxNiBsZW47Cit9U1BNSV9DVFJMX0VYVF9SRUdJU1RFUl9XUklURUw7CisKKy8qIEZvciBTUE1JX0NUUkxfRVhUX1JFR0lTVEVSX1JFQURMX0ZJRUxEIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMTYgdHlwZTsKKwlEQ0xfVUlOVDE2IGFkZHI7CisJRENMX1VJTlQxNiB2YWx1ZTsKKwlEQ0xfVUlOVDE2IGxlbjsKKwlEQ0xfVUlOVDE2IG1hc2s7CisJRENMX1VJTlQxNiBzaGlmdDsKK31TUE1JX0NUUkxfRVhUX1JFR0lTVEVSX1JFQURMX0ZJRUxEOworCisvKiBGb3IgU1BNSV9DVFJMX0VYVF9SRUdJU1RFUl9XUklURUxfRklFTEQgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQxNiB0eXBlOworCURDTF9VSU5UMTYgYWRkcjsKKwlEQ0xfVUlOVDE2IHZhbHVlOworCURDTF9VSU5UMTYgbGVuOworCURDTF9VSU5UMTYgbWFzazsKKwlEQ0xfVUlOVDE2IHNoaWZ0OworfVNQTUlfQ1RSTF9FWFRfUkVHSVNURVJfV1JJVEVMX0ZJRUxEOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NUUkxfREFUQV9UOiBEZWZpbmUgdGhlIENvbnRyb2wgZGF0YSBzdHJ1Y3R1cmUgZm9yIGVhY2ggbW9kdWxlJ3MgY29tbWFuZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgX19CVUlMRF9ET01fXworLyogVGhlIFNQTUkgQ29tbWFuZCBQYXJhbWV0ZXIgRGF0YSBTdHJ1Y3R1cmUgZm9yIEVhY2ggQ29tbWFuZCBpbiBEQ0xfQ1RSTF9EQVRBX1QgRW51bSBvZiBkY2wuaCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlTUE1JX0NUUkxfRVhUX1JFR0lTVEVSX1JFQURMICAgICAgICAgIHJTUE1JRXh0UmVnaXN0ZXJSZWFkTDsKKwlTUE1JX0NUUkxfRVhUX1JFR0lTVEVSX1dSSVRFTCAgICAgICAgIHJTUE1JRXh0UmVnaXN0ZXJXcml0ZUw7CisJU1BNSV9DVFJMX0VYVF9SRUdJU1RFUl9SRUFETF9GSUVMRCAgICByU1BNSUV4dFJlZ2lzdGVyUmVhZExGaWVsZDsKKwlTUE1JX0NUUkxfRVhUX1JFR0lTVEVSX1dSSVRFTF9GSUVMRCAgIHJTUE1JRXh0UmVnaXN0ZXJXcml0ZUxGaWVsZDsKK31TUE1JX0NUUkxfREFUQTsKKyNlbHNlIC8qIF9fQlVJTERfRE9NX18gKi8KKyNkZWZpbmUgU1BNSV9DVFJMUyBcCisJU1BNSV9DVFJMX0VYVF9SRUdJU1RFUl9SRUFETCAgICAgICAgICByU1BNSUV4dFJlZ2lzdGVyUmVhZEw7IFwKKwlTUE1JX0NUUkxfRVhUX1JFR0lTVEVSX1dSSVRFTCAgICAgICAgIHJTUE1JRXh0UmVnaXN0ZXJXcml0ZUw7IFwKKwlTUE1JX0NUUkxfRVhUX1JFR0lTVEVSX1JFQURMX0ZJRUxEICAgIHJTUE1JRXh0UmVnaXN0ZXJSZWFkTEZpZWxkOyBcCisJU1BNSV9DVFJMX0VYVF9SRUdJU1RFUl9XUklURUxfRklFTEQgICByU1BNSUV4dFJlZ2lzdGVyV3JpdGVMRmllbGQ7CisjZW5kaWYgLyogX19CVUlMRF9ET01fXyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0NUUkxfQ01EIGZvciBTUE1JCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAjaWZkZWYgX19CVUlMRF9ET01fXwordHlwZWRlZiBlbnVtIHsKKwlFWFRfUkVHSVNURVJfUkVBREwgPSAwLAorCUVYVF9SRUdJU1RFUl9XUklURUwsCisJRVhUX1JFR0lTVEVSX1JFQURMX0ZJRUxELAorCUVYVF9SRUdJU1RFUl9XUklURUxfRklFTEQsCisJUkVHSVNURVJfUkVBRCwKKwlSRUdJU1RFUl9XUklURSwKKwlFWFRfUkVHSVNURVJfUkVBRCwKKwlFWFRfUkVHSVNURVJfV1JJVEUsCisJU1BNSV9NT0RfQ01EX01BWAorfSBTUE1JX0NUUkxfQ01EOworI2Vsc2UgLyogX19CVUlMRF9ET01fXyAqLworI2RlZmluZSBTUE1JX0NNRFMgICAgXAorCUVYVF9SRUdJU1RFUl9SRUFETCA9IDAsICBcCisJRVhUX1JFR0lTVEVSX1dSSVRFTCwgIFwKKwlFWFRfUkVHSVNURVJfUkVBRExfRklFTEQsICBcCisJRVhUX1JFR0lTVEVSX1dSSVRFTF9GSUVMRCwgXAorCVJFR0lTVEVSX1JFQUQsIFwKKwlSRUdJU1RFUl9XUklURSwgXAorCUVYVF9SRUdJU1RFUl9SRUFELCBcCisJRVhUX1JFR0lTVEVSX1dSSVRFLCBcCisJU1BNSV9NT0RfQ01EX01BWCwKKyNlbmRpZiAvKiBfX0JVSUxEX0RPTV9fICovCisKKyNlbmRpZiAvKl9fRENMX1NQTUlfSF9TVFJVQ1RfXyovCisKKyNlbmRpZiAvKkRDTF9ERUZJTklUSU9OX1NUUlVDVCovCisKKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9QUk9UT1RZUEUKKyNpZm5kZWYgX19EQ0xfU1BNSV9IX1BST1RPVFlQRV9fCisjZGVmaW5lIF9fRENMX1NQTUlfSF9QUk9UT1RZUEVfXworCit0eXBlZGVmIERDTF9TVEFUVVMgKCpTUE1JX0NPTlRST0xfSEFORExFUikoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DVFJMX0NNRCBjbWQsIERDTF9DVFJMX0RBVEFfVCAqZGF0YSk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsU1BNSV9Jbml0aWFsaXplCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGluaXRpYWxpemUgU1BNSSBtb2R1bGUKKyoKKyogUEFSQU1FVEVSUworKiAgTm9uZQorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTUE1JX0luaXRpYWxpemUodm9pZCk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsU1BNSV9PcGVuCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIG9wZW4gdGhlIFNQTUkgbW9kdWxlIGFuZCByZXR1cm4gYSBoYW5kbGUKKyoKKyogUEFSQU1FVEVSUworKiAgZGV2OiBvbmx5IHZhbGlkIGZvciBEQ0xfU1BNSQorKiAgZmxhZ3M6IG5vIHNlcGNpYWwgZmxhZ3MgaXMgbmVlZGVkLiBQbGVhc2UgdXNlIEZMQUdTX05PTkUKKyoKKyogUkVUVVJOUworKiAgRENMX0hBTkRMRV9JTlZBTElEOiBPcGVuIGZhaWxlZC4KKyogIG90aGVyIHZhbHVlOiBhIHZhbGlkIGhhbmRsZQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfSEFORExFIERjbFNQTUlfT3BlbihEQ0xfREVWIGRldiwgRENMX0ZMQUdTIGZsYWdzKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xTUE1JX1JlYWREYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBTUE1JIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU1BNSV9SZWFkRGF0YShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0JVRkYgKmJ1ZmYsIERDTF9CVUZGX0xFTiBidWZfbGVuLCBEQ0xfT1BUSU9OUyBvcHRpb25zKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xTUE1JX1dyaXRlRGF0YQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgU1BNSSBtb2R1bGUgbm93LgorKgorKiBQQVJBTUVURVJTCisqCU4vQQorKgorKiBSRVRVUk5TCisqCVNUQVRVU19VTlNVUFBPUlRFRAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNQTUlfV3JpdGVEYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOIGJ1Zl9sZW4sIERDTF9PUFRJT05TIG9wdGlvbnMpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFNQTUlfQ29uZmlndXJlCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBTUE1JIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU1BNSV9Db25maWd1cmUoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DT05GSUdVUkVfVCAqY29uZmlndXJlKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xTUE1JX1JlZ2lzdGVyQ2FsbGJhY2sKKyoKKyogREVTQ1JJUFRJT04KKyogICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBTUE1JIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyogIAlOL0EKKyoKKyogUkVUVVJOUworKiAgU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU1BNSV9SZWdpc3RlckNhbGxiYWNrKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfRVZFTlQgZXZlbnQsIFBGTl9EQ0xfQ0FMTEJBQ0sgY2FsbGJhY2spOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFNQTUlfQ29udHJvbAorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBzZW5kIGNvbW1hbmQgdG8gY29udHJvbCB0aGUgU1BNSSBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogVGhlIGhhbmRsZSB2YWx1ZSByZXR1cm5lZCBmcm9tIERjbFNQTUlfT3BlbgorKiAgY21kOiBhIGNvbnRyb2wgY29tbWFuZCBmb3IgU1BNSSBtb2R1bGUKKyogUkVUVVJOUworKiAgU1RBVFVTX09LOiBjb21tYW5kIGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyogIFNUQVRVU19GQUlMOiBjb21tYW5kIGlzIGZhaWxlZC4KKyogIFNUQVRVU19JTlZBTElEX0NNRDogSXQncyBhIGludmFsaWQgY29tbWFuZC4KKyogICAgIFNUQVRVU19VTlNVUFBPUlRFRDogSXQncyBhIHVuc3VwcG9ydGVkIGNvbW1hbmQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU1BNSV9Db250cm9sKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQ1RSTF9DTUQgY21kLCBEQ0xfQ1RSTF9EQVRBX1QgKmRhdGEpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFNQTUlfQ2xvc2UKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gY2xvc2UgdGhlIHNwbWkgbW9kdWxlLgorKgorKiBQQVJBTUVURVJTCisqICBoYW5kbGU6IHRoZSByZXR1cm5lZCBoYW5kbGUgdmFsdWUgb2YgRGNsU1BNSV9DbG9zZQorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTUE1JX0Nsb3NlKERDTF9IQU5ETEUgaGFuZGxlKTsKKyNlbmRpZiAvKl9fRENMX1NQTUlfSF9QUk9UT1RZUEVfXyovCisjZW5kaWYgLy9EQ0xfREVGSU5JVElPTl9QUk9UT1RZUEUKKworCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9zdHMuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZGNsX3N0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNmYwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF9zdHMuaApAQCAtMCwwICsxLDY2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDAxCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgZGNsX3RzLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIEhlYWRlciBmaWxlIG9mIERDTCAoRHJpdmVyIENvbW1vbiBMYXllcikgZm9yIFRTLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9TVFJVQ1QKKyNpZm5kZWYgX19EQ0xfVFNfSF9TVFJVQ1RfXworI2RlZmluZSBfX0RDTF9UU19IX1NUUlVDVF9fCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9PUFRJT05TIGZvciBUUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFRTX09QVElPTlMgCisKKy8vIEVhcmxpZXIgZGVmaW5lZCBpbiBkY2xfdHMuYy4gTW92ZWQgaGVyZSBzbyB0aGF0IGFwcGxpY2F0aW9uIGZpbGVzIGNhbiB1c2UgdGhpcyBkZWZpbmUKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DT05GSUdVUkVfVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgVFNfQ09ORklHUyAgICBcCisgICAvL1RTX0NPTkZJR19UICAgclRTQ29uZmlnOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0VWRU5UIGZvciBUUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFRTX0VWRU5UUyBcCisgICBEQ0xfRVZFTlRfU1RTX1BVU0hfQlVGRiA9IDEsIFwKKyAgIERDTF9FVkVOVF9TVFNfVVAsCQkJXAorICAgRENMX0VWTkVUX1NUU19ET1dOLAkJCVwKKyAgIERDTF9FVkVOVF9TVFNfTUFYLCAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0NNRCBmb3IgVFMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBUU19DTURTICAgIFwKKyAgIFNUU19DTURfR0VUX0VWRU5ULCBcCisgICBTVFNfQ01EX1BFRUtfRVZFTlQsIFwKKyAgIFNUU19DTURfRU5BQkxFLCBcCisgICBTVFNfQ01EX0ZMVVNILCBcCisgICBTVFNfQ01EX1NUQVJUX0NBTEksIFwKKyAgIFNUU19DTURfU1RPUF9DQUxJLCBcCisgICBTVFNfQ01EX1JFQURfQ0FMSSwgXAorICAgU1RTX0NNRF9TRVRfQ0FMSSwgXAorICAgU1RTX0NNRF9SRVNFVCwgXAorICAgU1RTX0NNRF9SRVNFVF9IQU5EV1JJVElORywgXAorICAgU1RTX0NNRF9DT05GX1NBTVBMRV9QRVJJT0QsIFwKKyAgIFNUU19DTURfQ09ORl9NT1ZFX09GRlNFVCwgXAorICAgU1RTX0NNRF9DT05GX0hBTkRXUklUSU5HLCBcCisgICBTVFNfQ01EX1BPV0VSX09OLCBcCisgICBTVFNfQ01EX0NPTkZfVElNRU9VVF9QRVJJT0QsIFwKKyAgIFNUU19DTURfQ1RSTF9DVVNUT01fUEFSQU0sXAorICAgU1RTX0NNRF9DVFJMX0NVU1RPTV9QQVJBTV9SQU5HRSxcCisgICBTVFNfQ01EX0NUUkxfTUlDUk9OTUVURVJfVE9fQ09PUkQsXAorICAgU1RTX0NNRF9DVFJMX0NPT1JEX1RPX01JQ1JPTk1FVEVSLFwKKyAgIFNUU19DTURfUVVFUllfVFBfVFlQRSxcCisgICBTVFNfQ01EX1NFVF9ERVZJQ0UsXAorICAgU1RTX0NNRF9DT01NQU5ELAorICAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0xfQ1RSTF9EQVRBX1Q6IERlZmluZSB0aGUgQ29udHJvbCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBtb2R1bGUncyBjb21tYW5kCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEZvciBUU19DTUQgY29tbWFuZC4gKi8KKworCisvL1NUU19DTURfUVVFUllfVFBfVFlQRQordHlwZWRlZiBlbnVtCit7CisgICAgUlRQX1R5cGUgPSAwLAorICAgIENUUF9UeXBlCisgICAgCit9RENMX1RQX1RZUEVfRW51bTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBEQ0xfVFBfVFlQRV9FbnVtIFRvdWNoUGFuZWxUeXBlOworfURDTF9UUF9UWVBFX1Q7CisKKworLy9TVFNfQ01EX0NUUkxfQ1VTVE9NX1BBUkFNCit0eXBlZGVmIGVudW0KK3sKKyAgICBUUF9QQVJBTV9HRVQgPSAwLAorICAgIFRQX1BBUkFNX1NFVCwKKyAgICBUUF9QQVJBTV9SRVNFVAorfVRQX0NUUkxfUEFSQU1fVFlQRTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAga2FsX3VpbnQzMiB0c19kZWJvdW5jZV90aW1lOworICAga2FsX3VpbnQzMiB0b3VjaF9wYW5lbF9jYWxpX2NoZWNrX29mZnNldDsKKyAgIGthbF91aW50MzIgbWluX3Blbl9tb3ZlX29mZnNldDsKKyAgIGthbF91aW50MzIgaGFuZF93cml0aW5nX21heF9vZmZzZXQ7CisgICBrYWxfdWludDMyIG5vbmhhbmRfd3JpdGluZ19tYXhfb2Zmc2V0OworICAga2FsX3VpbnQzMiBtYXhfc3Ryb2tlX21vdmVfb2Zmc2V0OworICAga2FsX3VpbnQzMiBtdWx0aXBsZV9wb2ludF9zZWxlY3Rpb247CisgICBrYWxfdWludDMyIHRvdWNoX3ByZXNzdXJlX3RocmVzaG9sZF9oaWdoOworICAga2FsX3VpbnQzMiB0b3VjaF9wcmVzc3VyZV90aHJlc2hvbGRfbG93OworICAga2FsX3VpbnQzMiBwcmVzc3VyZV9jaGVja19ib3VuZGFyeTsKKyAgIGthbF91aW50MzIgcHJlc3N1cmVfc2hpZnRpbmdfYm91bmRhcnk7CisgICBrYWxfdWludDMyIGJvcmRlcl9wYXNzX2NyaXRlcmlvbjsKKyAgIGthbF91aW50MzIgbm9uX2JvcmRlcl9wYXNzX2NyaXRlcmlvbjsKKyAgIGthbF91aW50MzIgYm9yZGVyX3JhbmdlOworICAga2FsX3VpbnQzMiBqaXR0ZXJfY2lyY3VpdF9pbnRlcnZhbDsKKyAgIGthbF91aW50MzIgRHVtcF9TY3JlZW47CisgICBrYWxfdWludDMyIHJlc2VydmVfcGFyYW1ldGVyMTsgLy91c2UgZm9yIEFVWF9TUExfTlVNCisgICBrYWxfdWludDMyIHJlc2VydmVfcGFyYW1ldGVyMjsKKyAgIGthbF91aW50MzIgcmVzZXJ2ZV9wYXJhbWV0ZXIzOworICAga2FsX3VpbnQzMiAgaGVpZ2h0OyAvLyBnZXQgb25seQorICAga2FsX3VpbnQzMiAgd2lkdGg7ICAvLyBnZXQgb25seQorfSBUb3VjaFBhbmVsX0VNX2N1c3RvbV9kYXRhX3N0cnVjdDsgCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgVFBfQ1RSTF9QQVJBTV9UWVBFIHR5cGU7CisgICAgVG91Y2hQYW5lbF9FTV9jdXN0b21fZGF0YV9zdHJ1Y3QqIHBFbURhdGE7Cit9RENMX0NUUkxfQ1VTVE9NX1BBUkFNX1Q7CisKKworCit0eXBlZGVmIHN0cnVjdAoreworIGthbF9pbnQzMiB0c19kZWJvdW5jZV90aW1lX21pbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGthbF9pbnQzMiB0c19kZWJvdW5jZV90aW1lX21heDsKK2thbF9pbnQzMiB0b3VjaF9wYW5lbF9jYWxpX2NoZWNrX29mZnNldF9taW47ICAgICAgICAgCitrYWxfaW50MzIgdG91Y2hfcGFuZWxfY2FsaV9jaGVja19vZmZzZXRfbWF4Owora2FsX2ludDMyIG1pbl9wZW5fbW92ZV9vZmZzZXRfbWluOyAgICAgICAgICAgICAgICAgICAgICAgCitrYWxfaW50MzIgbWluX3Blbl9tb3ZlX29mZnNldF9tYXg7CitrYWxfaW50MzIgaGFuZF93cml0aW5nX21heF9vZmZzZXRfbWluOyAgICAgICAgICAgICAgICAgIAora2FsX2ludDMyIGhhbmRfd3JpdGluZ19tYXhfb2Zmc2V0X21heDsKK2thbF9pbnQzMiBub25oYW5kX3dyaXRpbmdfbWF4X29mZnNldF9taW47ICAgICAgICAgICAgCitrYWxfaW50MzIgbm9uaGFuZF93cml0aW5nX21heF9vZmZzZXRfbWF4Owora2FsX2ludDMyIG1heF9zdHJva2VfbW92ZV9vZmZzZXRfbWluOyAgICAgICAgICAgICAgICAgIAora2FsX2ludDMyIG1heF9zdHJva2VfbW92ZV9vZmZzZXRfbWF4Owora2FsX2ludDMyIG11bHRpcGxlX3BvaW50X3NlbGVjdGlvbl9taW47ICAgICAgICAgICAgICAgICAgICAKK2thbF9pbnQzMiBtdWx0aXBsZV9wb2ludF9zZWxlY3Rpb25fbWF4Owora2FsX2ludDMyIHRvdWNoX3ByZXNzdXJlX3RocmVzaG9sZF9oaWdoX21pbjsgICAgICAgIAora2FsX2ludDMyIHRvdWNoX3ByZXNzdXJlX3RocmVzaG9sZF9oaWdoX21heDsKK2thbF9pbnQzMiBwcmVzc3VyZV9jaGVja19ib3VuZGFyeV9taW47ICAgICAgICAgICAgICAgIAora2FsX2ludDMyIHByZXNzdXJlX2NoZWNrX2JvdW5kYXJ5X21heDsKK2thbF9pbnQzMiBwcmVzc3VyZV9zaGlmdGluZ19ib3VuZGFyeV9taW47ICAgICAgICAgICAgICAKK2thbF9pbnQzMiBwcmVzc3VyZV9zaGlmdGluZ19ib3VuZGFyeV9tYXg7CitrYWxfaW50MzIgYm9yZGVyX3Bhc3NfY3JpdGVyaW9uX21pbjsgICAgICAgICAgICAgICAgICAgICAgICAKK2thbF9pbnQzMiBib3JkZXJfcGFzc19jcml0ZXJpb25fbWF4Owora2FsX2ludDMyIG5vbmJvcmRlcl9wYXNzX2NyaXRlcmlvbl9taW47ICAgICAgICAgICAgICAgICAgCitrYWxfaW50MzIgbm9uYm9yZGVyX3Bhc3NfY3JpdGVyaW9uX21heDsKK2thbF9pbnQzMiBib3JkZXJfcmFuZ2VfbWluOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2thbF9pbnQzMiBib3JkZXJfcmFuZ2VfbWF4Owora2FsX3VpbnQzMiBqaXR0ZXJfY2lyY3VpdF9pbnRlcnZhbF9taW47CitrYWxfdWludDMyIGppdHRlcl9jaXJjdWl0X2ludGVydmFsX21heDsKK2thbF91aW50MzIgRHVtcF9TY3JlZW5fbWluOwora2FsX3VpbnQzMiBEdW1wX1NjcmVlbl9tYXg7CitrYWxfaW50MzIgcmVzZXJ2ZV9wYXJhbWV0ZXIxX21pbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2thbF9pbnQzMiByZXNlcnZlX3BhcmFtZXRlcjFfbWF4Owora2FsX2ludDMyIHJlc2VydmVfcGFyYW1ldGVyMl9taW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgCitrYWxfaW50MzIgcmVzZXJ2ZV9wYXJhbWV0ZXIyX21heDsKK2thbF9pbnQzMiByZXNlcnZlX3BhcmFtZXRlcjNfbWluOyAgICAgICAgICAgICAgICAgICAgICAgICAgIAora2FsX2ludDMyIHJlc2VydmVfcGFyYW1ldGVyM19tYXg7Cit9VFBfUEFSQU1fUkFOR0U7CisKKy8vU1RTX0NNRF9DVFJMX0NVU1RPTV9QQVJBTV9SQU5HRQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBUUF9DVFJMX1BBUkFNX1RZUEUgdHlwZTsKKyAgICBUUF9QQVJBTV9SQU5HRSogcEVtRGF0YVJhbmdlOworfURDTF9DVFJMX0NVU1RPTV9QQVJBTV9SQU5HRV9UOworCisvLyAgIFNUU19DTURfQ1RSTF9NSUNST05NRVRFUl9UT19QSVhFTAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyIHhfbWljcm9ubWV0ZXI7CisgICAga2FsX3VpbnQzMiB5X21pY3Jvbm1ldGVyOworICAgIGthbF91aW50MzIgeF9jb29yZDsKKyAgICBrYWxfdWludDMyIHlfY29vcmQ7Cit9RENMX0NUUkxfTUlDUk9OTUVURVJfQ09PUkRfVDsKKworCisKKy8vU1RTX0NNRF9HRVRfRVZFTlQKKwordHlwZWRlZiBlbnVtIHsKKyAgICAgIERDTF9QRU5fRE9XTiwgICAgLyowKi8gIAorICAgICAgRENMX1BFTl9VUCwgICAgICAvKjEqLworICAgICAgRENMX1BFTl9NT1ZFLCAgICAvKjIqLworICAgICAgRENMX1BFTl9MT05HVEFQLCAvKjMqLyAgICAgCisgICAgICBEQ0xfUEVOX1JFUEVBVCwgIC8qNCovIAorICAgICAgRENMX1BFTl9BQk9SVCwgICAvKjUqLyAKKyAgICAgIERDTF9UUF9VTktOT1dOX0VWRU5ULC8qNiovCisgICAgICBEQ0xfU1RST0tFX01PVkUsICAgICAvKjcqLworICAgICAgRENMX1NUUk9LRV9TVEFUSUNBTCwgLyo4Ki8KKyAgICAgIERDTF9TVFJPS0VfSE9MRCwgLyo5Ki8KKyAgICAgIERDTF9QRU5fTE9OR1RBUF9IT0xELCAvKjEwKi8KKyAgICAgIERDTF9QRU5fUkVQRUFUX0hPTEQsICAvKjExKi8gCisgICAgICBEQ0xfU1RST0tFX0RPV049MHhjMCwgLyowKi8gICAgICAgIC8qMSovCisgICAgICBEQ0xfU1RST0tFX0xPTkdUQVA9MHg3ZSwgICAvKjgqLworICAgICAgRENMX1NUUk9LRV9VUD0weDdmLyoxMjcqLworfSBEQ0xfVFBfRXZlbnRfZW51bTsKKworLyoKK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfSU5UMTYgICAgIGkyeEFkYzsKKyAgIERDTF9JTlQxNiAgICAgaTJ5QWRjOworICAgRENMX1RQX0V2ZW50X2VudW0gckV2ZW50OworICAgRENMX1VJTlQxNiAgICBpMlRpbWVTdGFtcDsJCS8vIHVuaXQ6IHN5c3RlbSB0aWNrCit9IFNUU19DVFJMX0dFVF9UOworKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIC8vIFRvdWNoX1BhbmVsX0V2ZW50X2VudW0KKyAgIERDTF9VSU5UMTYgdTJFdmVudDsgCisgICAvKmNvb3JkaW5hdGUgcG9pbnQsIG5vdCBkaWZmKi8KKyAgIERDTF9VSU5UMTYgdTJ4OworICAgRENMX1VJTlQxNiB1Mnk7CisgICBEQ0xfVUlOVDE2IHUyejsgLy9yZXNpc3RhbmNlIFRQOiBwcmVzdXJlLCAgY2FwYWNpdGl2ZSBUUDogYXJlYQorfSBEQ0xfVFBfU0lOR0xFX0VWRU5UX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDE2ICAgdU1vZGVsOyAvLyBTaW5nbGUvRHVhbC9UcmlwbGUvRm91ci9GaXZlL0FsbCBnZXN0dXJlIAorICAgRENMX1VJTlQxNiAgIHVQYWRkaW5nOyAvL2N1cnJlbnRseSB1c2UgZm9yIGNoZWNrIHRoZSBzdHJ1Y3R1cmUgZm9ybWF0IGNvcnJlY3RuZXNzLCAweEFBCisgICBEQ0xfVUlOVDMyICB1MlRpbWVfc3RhbXA7CisgICBEQ0xfVFBfU0lOR0xFX0VWRU5UX1QgclBvaW50c1s1XTsKK30gU1RTX0NUUkxfR0VUX1Q7CisKKy8vU1RTX0NNRF9FTkFCTEUKK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfQk9PTCBmZ0VuYWJsZTsKK30gU1RTX0NUUkxfRU5fVDsKKwordHlwZWRlZiBzdHJ1Y3QgIAoreyAgICAgICAKKwlrYWxfdWludDggCXJlZl9jb3VudDsKKwlrYWxfdWludDE2IAltc2dfbGVuOwkJCS8qIExPQ0FMX1BBUkFfSERSICovCQorCWthbF9ib29sIAlyZXN1bHQ7Cit9dHBfY2FsaV9kb25lX3N0cnVjdDsgCisKKy8vU1RTX0NNRF9TVEFSVF9DQUxJCit0eXBlZGVmIHN0cnVjdAoreyAgIAorICAgRENMX0lOVDE2IGkyeDsgIC8qeCBjb29yZGluYXRlKi8KKyAgIERDTF9JTlQxNiBpMnk7ICAvKnkgY29vcmRpbmF0ZSovIAorfSBUU19DT09SRF9UOwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFRTX0NPT1JEX1QgKnJwUG9pbnQ7CisgICBEQ0xfVUlOVDE2IHUyTnVtOworfSBTVFNfQ1RSTF9TQ19UOworCisvL1NUU19DTURfUkVBRF9DQUxJCit0eXBlZGVmIHN0cnVjdAoreyAgCisgICAvKngqLyAKKyAgIGRvdWJsZSB4X3Nsb3BlOworICAgZG91YmxlIHhfb2Zmc2V0OyAKKyAgIC8qeSovICAgCisgICBkb3VibGUgeV9zbG9wZTsKKyAgIGRvdWJsZSB5X29mZnNldDsgCit9IFRTX0NBTElfVDsgCit0eXBlZGVmIHN0cnVjdAoreworICAgVFNfQ0FMSV9UIHJDYWxpOworfSBTVFNfQ1RSTF9SQ19UOworCisvL1NUU19DTURfU0VUX0NBTEkKK3R5cGVkZWYgc3RydWN0Cit7CisgICBUU19DQUxJX1QgckNhbGk7Cit9IFNUU19DVFJMX1NFVENfVDsKKworLy9TVFNfQ01EX1JFU0VUCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX0JPT0wgZmdTa2lwVW5yZWxlYXNlRW5hYmxlOworfSBTVFNfQ1RSTF9SRVNFVF9UOworCisvL1NUU19DTURfQ09ORl9TQU1QTEVfUEVSSU9ECit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQzMiB1NExvdzsKKyAgIERDTF9VSU5UMzIgdTRIaWdoOworfSBTVFNfQ1RSTF9DU1BfVDsKKworLy9TVFNfQ01EX0NPTkZfTU9WRV9PRkZTRVQKK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDE2IHUyUGVuX29mZnNldDsKKyAgIERDTF9VSU5UMTYgdTJTdHJva2Vfb2Zmc2V0OworICAgRENMX1VJTlQxNiB1Mkxvbmd0YXBfcGVuX29mZnNldDsKKyAgIERDTF9VSU5UMTYgdTJMb25ndGFwX3N0cm9rZV9vZmZzZXQ7Cit9IFNUU19DVFJMX0NNT19UOworCisvL1NUU19DTURfQ09ORl9IQU5EV1JJVElORwordHlwZWRlZiBzdHJ1Y3QKK3sgIAorICAgVFNfQ09PUkRfVCByTWluOworICAgVFNfQ09PUkRfVCByTWF4OworfSBUU19IYW5kQXJlYV9UOwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFRTX0hhbmRBcmVhX1QgKnJBcmVhOworICAgRENMX1VJTlQxNiB1Mm47CisgICBUU19IYW5kQXJlYV9UICpyRXh0QXJlYTsKK30gU1RTX0NUUkxfQ0hXX1Q7CisKKy8vU1RTX0NNRF9DT05GX1RJTUVPVVRfUEVSSU9ECit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQzMiB1NExvbmd0YXA7CisgICBEQ0xfVUlOVDMyIHU0UmVwZWF0OworICAgRENMX1VJTlQzMiB1NEhhbmR3cml0aW5nX2xvbmd0YXA7Cit9IFNUU19DVFJMX0NUUF9UOworCisvL1NUU19DTURfUE9XRVJfT04KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfQk9PTCBmZ1Bvd2VyT247Cit9IFNUU19DVFJMX1BPV0VSX09OX1Q7CisKKy8vU1RTX0NNRF9TRVRfREVWSUNFCit0eXBlZGVmIGVudW0gCit7CisgICBEQ0xfQ1RQX0FDVElWRV9NT0RFLAorICAgRENMX0NUUF9JRExFX01PREUsCisgICBEQ0xfQ1RQX1NMRUVQX01PREUsCisgICBEQ0xfQ1RQX0dFU1RVUkVfREVURUNUSU9OX01PREUsCisgICBEQ0xfQ1RQX01VTFRJUExFX1BPSU5UX01PREUsCisgICBEQ0xfQ1RQX0ZJUk1XQVJFX1VQREFURSwKKyAgIERDTF9DVFBfRk1fRU5BQkxFLAorICAgRENMX0NUUF9GTV9ESVNBQkxFCit9RENMX0NUUF9ERVZJQ0VfTU9ERV9lbnVtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX0NUUF9ERVZJQ0VfTU9ERV9lbnVtIG1vZGU7Cit9IFNUU19DVFJMX1NFVF9ERVZJQ0VfVDsKKworLy9TVFNfQ01EX0NPTU1BTkQKK3R5cGVkZWYgZW51bSAKK3sKKyAgIERDTF9DVFBfQ09NTUFORF9HRVRfVkVSU0lPTiwKKyAgIERDTF9DVFBfQ09NTUFORF9HRVRfQ09ORklHLAorICAgRENMX0NUUF9DT01NQU5EX0xPQURfSU5UX0NPTkZJRywKKyAgIERDTF9DVFBfQ09NTUFORF9MT0FEX0VYVF9DT05GSUcsCisgICBEQ0xfQ1RQX0NPTU1BTkRfR0VUX0RJRkZfREFUQSwKKyAgIERDTF9DVFBfQ09NTUFORF9HRVRfRldfQlVGRkVSLAorICAgRENMX0NUUF9DT01NQU5EX0RPX0ZXX1VQREFURQorfURDTF9DVFBfQ1RSTF9DT01NQU5EX2VudW07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDMyIHU0Q29tbWFuZDsKKyAgIHZvaWQgKnBWb2lkMTsKKyAgIHZvaWQgKnBWb2lkMjsKK30gU1RTX0NUUkxfQ09NTUFORF9UOworCisjZGVmaW5lIFRTX0NUUkxTIFwKKyAgIFNUU19DVFJMX0dFVF9UICAgICByVFNDdHJsR0U7IFwKKyAgIFNUU19DVFJMX0VOX1QgICAgICByVFNDdHJsRU47IFwKKyAgIFNUU19DVFJMX1NDX1QgICAgICByVFNDdHJsU0M7IFwKKyAgIFNUU19DVFJMX1JDX1QgICAgICByVFNDdHJsUkM7IFwKKyAgIFNUU19DVFJMX1NFVENfVCAgICByVFNDdHJsU0VUQzsgXAorICAgU1RTX0NUUkxfUkVTRVRfVCAgIHJUU0N0cmxSRVNFVDsgXAorICAgU1RTX0NUUkxfQ1NQX1QgICAgIHJUU0N0cmxDU1A7IFwKKyAgIFNUU19DVFJMX0NNT19UICAgICByVFNDdHJsQ01POyBcCisgICBTVFNfQ1RSTF9DSFdfVCAgICAgclRTQ3RybENIVzsgXAorICAgU1RTX0NUUkxfUE9XRVJfT05fVCByVFNDdHJsUE87IFwKKyAgIFNUU19DVFJMX0NUUF9UICAgICByVFNDdHJsQ1RQOyBcCisgICBEQ0xfQ1RSTF9DVVNUT01fUEFSQU1fVCByVFNDdHJsQ3VzdG9tUGFyYW07XAorICAgRENMX0NUUkxfQ1VTVE9NX1BBUkFNX1JBTkdFX1QgclRTQ3RybEN1c3RvbVBhcmFtUmFuZztcCisgICBEQ0xfQ1RSTF9NSUNST05NRVRFUl9DT09SRF9UIHJUU0N0cmxNaWNyb25NZXRlcl9QaXhlbDtcCisgICBEQ0xfVFBfVFlQRV9UICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJUU0N0cmxUb3VjaFBhbmVsVHlwZTtcCisgICBTVFNfQ1RSTF9TRVRfREVWSUNFX1QgclRTQ3RybFNEO1wKKyAgIFNUU19DVFJMX0NPTU1BTkRfVCByVFNDdHJsQ21kOworCisKKyNlbmRpZiAvLyAjaWZuZGVmIF9fRENMX1RTX0hfU1RSVUNUX18KKyNlbmRpZiAvLyAjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUICAgCisKKworI2lmZGVmIERDTF9ERUZJTklUSU9OX1BST1RPVFlQRQorI2lmbmRlZiBfX0RDTF9UU19IX1BST1RPVFlQRV9fCisjZGVmaW5lIF9fRENMX1RTX0hfUFJPVE9UWVBFX18KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKglEY2xTVFNfQ29uZmlndXJlCisqCisqIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyogICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGNvbmZpZ3VyZSB0aGUgU1cgVFMgbW9kdWxlLgorKgorKiBDQUxMUyAgCisqCUl0IGlzIGNhbGxlZCB0byBjb25maWd1cmUgb2YgdGhlIFNXIFRTIG1vZHVsZS4KKyoKKyogUEFSQU1FVEVSUworKgloYW5kbGUgLSBhIHZhbGlkIGhhbmRsZSByZXR1cm4gYnkgRGNsU1RTX09wZW4oKQorKiAgIGNvbmZpZ3VyZSAtIGEgc3RydWN0dXJlIHdoaWNoIGluY2x1ZGUgdGhlIFRTIGNvbmZpZ3VyYXRpb24uICAKKyoJCisqIFJFVFVSTlMKKyoJU1RBVFVTX09LOiBjb21tYW5kIGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyoJU1RBVFVTX0ZBSUw6IG5vdCBvcGVuIHlldC4KKyogICBTVEFUVVNfSU5WQUxJRF9BUkdVTUVOVDogbm90IGEgdmFsaWQgaGFuZGxlLgorKgorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgZXh0ZXJuYWxfZ2xvYmFsCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU1RTX0NvbmZpZ3VyZShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NPTkZJR1VSRV9UICpjb25maWd1cmUpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyoJRGNsU1RTX0NvbnRyb2wKKyoKKyogREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKiAgIAlUaGlzIGZ1bmN0aW9uIGlzIHRvIHNlbmQgY29tbWFuZCB0byBjb250cm9sIHRoZSBTVyBUUyBtb2R1bGUuCisqCisqIENBTExTICAKKyoJSXQgaXMgY2FsbGVkIHRvIHNlbmQgY29tbWFuZCB0byBjb250cm9sIHRoZSBTVyBUUyBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyoJaGFuZGxlIC0gYSB2YWxpZCBoYW5kbGUgcmV0dXJuIGJ5IERjbFNUU19PcGVuKCkKKyogICBjbWQgICAtIGEgY29udHJvbCBjb21tYW5kIGZvciBUUyBtb2R1bGUKKyogICAgICAgICAgIDEuIFNUU19DTURfRU5BQkxFICAgICAgICAgICAgIDplbmFibGUvZGlzYWJsZSB0b3VjaCBwYW5lbAorKiAgICAgICAgICAgMi4gU1RTX0NNRF9GTFVTSCAgICAgICAgICAgICAgOnRvIGZsdXNoIGFsbCBkYXRhIGluIHJpbmcgYnVmZmVyLgorKiAgICAgICAgICAgMy4gU1RTX0NNRF9TVEFSVF9DQUxJICAgICAgICAgOnRvIGRvIGNvb3JkaW5hdGUgY2FsaWJyYXRpb24uIAorKiAgICAgICAgICAgNC4gU1RTX0NNRF9TVE9QX0NBTEkgICAgICAgICAgOnRvIHN0b3AgY29vcmRpbmF0ZSBjYWxpYnJhdGlvbi4KKyogICAgICAgICAgIDUuIFNUU19DTURfUkVBRF9DQUxJICAgICAgICAgIDp0byByZWFkIGNvb3JkaW5hdGUgY2FsaWJyYXRpb24uCisqICAgICAgICAgICA2LiBTVFNfQ01EX1NFVF9DQUxJICAgICAgICAgICA6dG8gc2V0IGNvb3JkaW5hdGUgY2FsaWJyYXRpb24uCisqICAgICAgICAgICA3LiBTVFNfQ01EX1JFU0VUICAgICAgICAgICAgICA6dG8gcmVzZXQgdG91Y2ggcGFuZWwgZHJpdmVyLiAKKyogICAgICAgICAgIDguIFNUU19DTURfUkVTRVRfSEFORFdSSVRJTkcgIDp0byByZXNldCBoYW5kd3JpdGluZyBhcmVhIGFzIG5vcm1hbC4KKyogICAgICAgICAgIDkuIFNUU19DTURfQ09ORl9TQU1QTEVfUEVSSU9EIDp0byBjb25maWd1cmUgc2FtcGxlIHBlcmlvZCBpbiBoYW5kd3JpdGluZyBhbmQgbm9uLWhhbmR3cml0aW5nIGFyZWEuCisqICAgICAgICAgIDEwLiBTVFNfQ01EX0NPTkZfTU9WRV9PRkZTRVQgICA6dG8gY29uZmlndXJlIHBlbiBtb3ZlIG9mZnNldCBhbmQgc3Ryb2tlIG1vdmUgb2Zmc2V0LgorKiAgICAgICAgICAxMS4gU1RTX0NNRF9DT05GX0hBTkRXUklUSU5HICAgOnRvIGNvbmZpZ3VyZSBoYW5kd3JpdGluZyBhcmVhLgorKiAgICAgICAgICAxMi4gU1RTX0NNRF9DT05GX1RJTUVPVVRfUEVSSU9EOnRvIGNvbmZpZ3VyZSBwZXJpb2Qgb2YgbG9uZyB0YXAgYW5kIHJlcGVhdCBldmVudC4KKyogICAgICAgICAgMTMuIFNUU19DTURfR0VUX0VWRU5UICAgICAgICAgIDp0byByZWFkIGV2ZW50IGZyb20gcmluZyBidWZmZXIKKyogICAgICAgICAgMTMuIFNUU19DTURfUEVFS19FVkVOVCAgICAgICAgIDp0byBwZWVrIGV2ZW50IGZyb20gcmluZyBidWZmZXIKKworKiAgIGRhdGEgLSBhIHVuaW9uIG9mIERDTF9DVFJMX0RBVEFfVAorKiAgICAgICAgICAgIHJUU0N0cmxFTjsgICAgIC8vU1RTX0NNRF9FTkFCTEUKKyogICAgICAgICAgICByVFNDdHJsU0M7ICAgICAvL1NUU19DTURfU1RBUlRfQ0FMSQorKiAgICAgICAgICAgIHJUU0N0cmxSQzsgICAgIC8vU1RTX0NNRF9SRUFEX0NBTEkKKyogICAgICAgICAgICByVFNDdHJsU0VUQzsgICAvL1NUU19DTURfU0VUX0NBTEkKKyogICAgICAgICAgICByVFNDdHJsUkVTRVQ7ICAvL1NUU19DTURfUkVTRVQKKyogICAgICAgICAgICByVFNDdHJsQ1NQOyAgICAvL1NUU19DTURfQ09ORl9TQU1QTEVfUEVSSU9ECisqICAgICAgICAgICAgclRTQ3RybENNTzsgICAgLy9TVFNfQ01EX0NPTkZfTU9WRV9PRkZTRVQKKyogICAgICAgICAgICByVFNDdHJsQ0hXOyAgICAvL1NUU19DTURfQ09ORl9IQU5EV1JJVElORworKiAgICAgICAgICAgIHJUU0N0cmxDVFA7ICAgIC8vU1RTX0NNRF9DT05GX1RJTUVPVVRfUEVSSU9ECisqICAgICAgICAgICAgclRTQ3RybEdFOyAgICAgLy9TVFNfQ01EX0dFVF9FVkVOVAorKiAgICAgICAgICAgIHJUU0N0cmxHRTsgICAgIC8vU1RTX0NNRF9QRUVLX0VWRU5UCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX09LOiBjb21tYW5kIGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyoJU1RBVFVTX0ZBSUw6IGNvbW1hbmQgaXMgZmFpbGVkLgorKiAgIFNUQVRVU19JTlZBTElEX0NNRDogSXQncyBhIGludmFsaWQgY29tbWFuZC4KKyogICBTVEFUVVNfSU5WQUxJRF9BUkdVTUVOVDogbm90IGEgdmFsaWQgaGFuZGxlLgorKgorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgZXh0ZXJuYWxfZ2xvYmFsCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU1RTX0NvbnRyb2woRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DVFJMX0NNRCBjbWQsIERDTF9DVFJMX0RBVEFfVCAqZGF0YSk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKglEY2xTVFNfSW5pdGlhbGl6ZQorKgorKiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqICAgVGhpcyBmdW5jdGlvbiBpcyB0byBpbml0aWFsaXplIFNXIFRTIG1vZHVsZQorKgorKiBDQUxMUyAgCisqCUl0IGlzIGNhbGxlZCB0byBpbml0aWFsaXplIFNXIFRTIG1vZHVsZQorKgorKiBQQVJBTUVURVJTCisqCU5vbmUKKyoJCisqIFJFVFVSTlMKKyoJRENMX1NUQVRVU19PSworKgorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgZXh0ZXJuYWxfZ2xvYmFsCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU1RTX0luaXRpYWxpemUodm9pZCk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKglEY2xTVFNfT3BlbgorKgorKiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqICAgCVRoaXMgZnVuY3Rpb24gaXMgdG8gb3BlbiB0aGUgVFMgU1cgbW9kdWxlIGFuZCByZXR1cm4gYSBoYW5kbGUKKyoKKyogQ0FMTFMgIAorKglJdCBpcyBjYWxsZWQgdG8gb3BlbiBTVyBUUyBtb2R1bGUKKyoKKyogUEFSQU1FVEVSUworKglkZXYgLSB2YWxpZCBmb3IgRENMX1RTCisqCWZsYWdzIC0gbm8gc2VwY2lhbCBmbGFncyBpcyBuZWVkZWQuIFBsZWFzZSB1c2UgRkxBR1NfTk9ORQorKgorKiBSRVRVUk5TCisqCURDTF9IQU5ETEVfSU5WQUxJRCAtIE9wZW4gZmFpbGVkLgorKiAgIE90aGVyIHZhbHVlIC0gYSB2YWxpZCBoYW5kbGUKKyoKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIGV4dGVybmFsX2dsb2JhbAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfSEFORExFIERjbFNUU19PcGVuKERDTF9ERVYgZGV2LCBEQ0xfRkxBR1MgZmxhZ3MpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyoJRGNsU1RTX1JlYWREYXRhCisqCisqIERFU0NSSVBUSU9OCisqICAgVGhpcyBmdW5jdGlvbiB1bnN1cHBvcnRlZC4KKyoKKyogQ0FMTFMgIAorKglJdCBpcyB1bnN1cHBvcnRlZC4KKyoKKyogUEFSQU1FVEVSUworKgloYW5kbGUKKyogICBidWZmICAKKyogICBidWZfbGVuIAorKiAgIG9wdGlvbnMgIAorKgkKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQ6IGNvbW1hbmQgdW5zdXBwb3J0ZWQKKyoKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIGV4dGVybmFsX2dsb2JhbAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNUU19SZWFkRGF0YShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0JVRkYgKmJ1ZmYsIERDTF9CVUZGX0xFTiAqYnVmX2xlbiwgRENMX09QVElPTlMgb3B0aW9ucyk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKglEY2xTVFNfUmVnaXN0ZXJDYWxsYmFjaworKgorKiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqICAgCVRoaXMgZnVuY3Rpb24gaXMgdG8gcmVnaXN0ZXIgU1cgVFMgY2FsbCBiYWNrIGZ1bmNpdG9uLgorKiAgICAgICBFeGVjdXRlIGNhbGwgYmFjayBmdW5jdGlvbiB3aGVuIHdlIHB1c2ggdHMgZGF0YSBpbnRvIHRzIHJpbmcgYnVmZmVyLgorKgorKiBDQUxMUyAgCisqCUl0IGlzIGNhbGxlZCB0byByZWdpc3RlciBTVyBUUyBjYWxsIGJhY2sgZnVuY2l0b24uCisqCisqIFBBUkFNRVRFUlMKKyoJZXZlbnQgLSBhIHZhbGlkIGV2ZW50IGluZGljYXRlIHJlZ2lzdGVyIHdoaWNoIGV2ZW50J3MgY2FsbCBiYWNrIGZ1bmNpdG9uCisqICAgICAgICAgICAxLiBEQ0xfRVZFTlRfU1RTX1BVU0hfQlVGRgorKgorKiAgIGNhbGxiYWNrIC0gYSBjYWxsIGJhY2sgZnVuY2l0b24KKyoJCisqIFJFVFVSTlMKKyoJU1RBVFVTX09LOiBjb21tYW5kIGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyoJU1RBVFVTX0ZBSUw6IGNvbW1hbmQgaXMgZmFpbGVkLgorKiAgIFNUQVRVU19JTlZBTElEX0NNRDogSXQncyBhIGludmFsaWQgY29tbWFuZC4KKyoKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIGV4dGVybmFsX2dsb2JhbAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNUU19SZWdpc3RlckNhbGxiYWNrKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfRVZFTlQgZXZlbnQsIFBGTl9EQ0xfQ0FMTEJBQ0sgY2FsbGJhY2spOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyoJRGNsU1RTX0Nsb3NlCisqCisqIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyogICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGNsb3NlIHRoZSBTVyBUUyBtb2R1bGUuCisqCisqIENBTExTICAKKyoJSXQgaXMgY2FsbGVkIHRvIGNsb3NlIFNXIFRTIG1vZHVsZQorKgorKiBQQVJBTUVURVJTCisqCU5vbmUKKyoJCisqIFJFVFVSTlMKKyoJRENMX1NUQVRVU19PSworKiAgIFNUQVRVU19JTlZBTElEX0FSR1VNRU5UOiBpbnZhbGlkIGFyZ3VtZW50cworKgorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgZXh0ZXJuYWxfZ2xvYmFsCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU1RTX0Nsb3NlKERDTF9IQU5ETEUgaGFuZGxlKTsKKworCisjZW5kaWYgLy8gI2lmbmRlZiBfX0RDTF9UU19IX1BST1RPVFlQRV9fCisjZW5kaWYgLy8gI2lmZGVmIERDTF9ERUZJTklUSU9OX1BST1RPVFlQRQpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfdWFydC5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfdWFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYzg4NzcKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF91YXJ0LmgKQEAgLTAsMCArMSwxNjcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDEKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBkY2xfdWFydC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1hdWkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBIZWFkZXIgZmlsZSBvZiBEQ0wgKERyaXZlciBDb21tb24gTGF5ZXIpIGZvciBVQVJULgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUCisjaWZuZGVmICBfX0RDTF9VQVJUX1NUUlVDVF9fCisjZGVmaW5lICAgX19EQ0xfVUFSVF9TVFJVQ1RfXworCisjaWYgZGVmaW5lZChfX0NNVVhfU1VQUE9SVF9fKQorI2luY2x1ZGUgImNtdXhfdnBfbnVtLmgiCisjZGVmaW5lIFZJUlRVQUxfUE9SVF9OVU0gIENNVVhfVlBfTlVNCisjZWxzZSAgLy8gI2lmIGRlZmluZWQoX19DTVVYX1NVUFBPUlRfXykKKyNkZWZpbmUgVklSVFVBTF9QT1JUX05VTSAgMAorI2VuZGlmIC8vICNpZiBkZWZpbmVkKF9fQ01VWF9TVVBQT1JUX18pCisKKy8qIQorICoJQGJyaWVmCWl0IGRlZmluZXMgRENMIFVBUlQgRGV2aWNlIHBvcnQgZW51bWVyYXRpb24KKyAqLworI2RlZmluZSBEQ0xfVUFSVF9ERVYgXAorCQl1YXJ0X3BvcnQxPTB4MDAsIFwKKwkJdWFydF9wb3J0MiwgXAorCQl1YXJ0X3BvcnQzLAlcCisJCS8qdWFydF9wb3J0X2lyZGEsKi9cCisJCXVhcnRfcG9ydF91c2IsXAorCQl1YXJ0X3BvcnRfdXNiMixcCisJCXVhcnRfcG9ydF91c2IzLFwKKwkJdWFydF9wb3J0X3VzYjQsXAorCQl1YXJ0X3BvcnRfdXNiNSxcCisgICAgICAgIHVhcnRfcG9ydF91c2I2LFwKKwkJdWFydF9wb3J0X3VzYjcsXAorCQl1YXJ0X3BvcnRfdXNiOCxcCisgICAgICAgIHVhcnRfcG9ydF91c2Jfc3BfZGlyZWN0LFwKKwkJLyp1YXJ0X3BvcnRfYmx1ZXRvb3RoLCovXAorCQkvKnVhcnRfcG9ydF9zd2RiZywqL1wKKyAgICB1YXJ0X3BvcnRfZGhsX3NwX2V4cHQsXAorICAgIHVhcnRfcG9ydF9kaGxfZWFwX2V4cHQgPSB1YXJ0X3BvcnRfZGhsX3NwX2V4cHQsXAorICAgIHVhcnRfcG9ydF9kaGxfY3RybF9zcF9leHB0LFwKKyAgICB1YXJ0X3BvcnRfbWV0YV9lYXBfZXhwdCA9IHVhcnRfcG9ydF9kaGxfY3RybF9zcF9leHB0LFwKKyAgICB1YXJ0X3BvcnRfZGhsX3NwLFwKKyAgICB1YXJ0X3BvcnRfZGhsX2NjY2kgPSB1YXJ0X3BvcnRfZGhsX3NwLFwKKyAgICB1YXJ0X3BvcnRfY2NjaV9zdGFydCA9IHVhcnRfcG9ydF9kaGxfY2NjaSxcCisgICAgdWFydF9wb3J0X2RobF9jdHJsX3NwLFwKKyAgICB1YXJ0X3BvcnRfdHN0X2NjY2kgPSB1YXJ0X3BvcnRfZGhsX2N0cmxfc3AsXAorICAgIHVhcnRfcG9ydF9hdF9jY2NpLFwKKyAgICB1YXJ0X3BvcnRfZ3BzX2NjY2ksXAorICAgIHVhcnRfcG9ydF9zaW1fY2NjaSxcCisgICAgdWFydF9wb3J0X2RobDJfY2NjaSxcCisgICAgdWFydF9wb3J0X2F0Y3BfY2NjaSxcCisgICAgdWFydF9wb3J0X2Mya19wcHBfY2NjaSxcCisgICAgdWFydF9wb3J0X2Mya19hZ3BzX2NjY2ksXAorICAgIHVhcnRfcG9ydF9jZWxsaW5mb19jY2NpLFwKKyAgICB1YXJ0X3BvcnRfaW1zbV9jY2NpLFwKKyAgICB1YXJ0X3BvcnRfd29hX2NjY2ksXAorICAgIHVhcnRfcG9ydF94dWlfY2NjaSxcCisgICAgdWFydF9wb3J0X2JpcF9jY2NpLFwKKyAgICB1YXJ0X3BvcnRfdWRjX2NjY2ksXAorICAgIHVhcnRfcG9ydF9ubG9wdF9jY2NpLFwKKyAgICB1YXJ0X3BvcnRfbmxvcHBfY2NjaSxcCisgICAgdWFydF9wb3J0X3Nhcl9jY2NpLFwKKyAgICB1YXJ0X3BvcnRfY2lxX2NjY2ksXAorICAgIHVhcnRfcG9ydF9pa2VyYXdfY2NjaSxcCisgICAgdWFydF9wb3J0X3JpbF9pcGMwX2NjY2ksXAorICAgIHVhcnRfcG9ydF9yaWxfaXBjMV9jY2NpLFwKKyAgICB1YXJ0X3BvcnRfdnRfY2NjaSxcCisgICAgdWFydF9wb3J0X2NjX3N0YXRlX2NjY2ksXAorICAgIHVhcnRfcG9ydF9taXBpX2NjY2ksXAorICAgIHVhcnRfcG9ydF9taXBjX2FwMF9jY2NpLFwKKyAgICB1YXJ0X3BvcnRfbWlwY19hcDFfY2NjaSxcCisgICAgdWFydF9wb3J0X21pcGNfYXAyX2NjY2ksXAorICAgIHVhcnRfcG9ydF9taXBjX2FwM19jY2NpLFwKKyAgICB1YXJ0X3BvcnRfbWlwY19hcDRfY2NjaSxcCisgICAgdWFydF9wb3J0X21pcGNfYXA1X2NjY2ksXAorICAgIHVhcnRfcG9ydF9taXBjX2FwNl9jY2NpLFwKKyAgICB1YXJ0X3BvcnRfbWlwY19hcDdfY2NjaSxcCisgICAgdWFydF9wb3J0X21pcGNfYXA4X2NjY2ksXAorICAgIHVhcnRfcG9ydF9taXBjX2FwOV9jY2NpLFwKKyAgICB1YXJ0X3BvcnRfbWlwY19lYXAwX2NjY2ksXAorICAgIHVhcnRfcG9ydF9tYmltX2VhcDBfY2NjaSxcCisgICAgdWFydF9wb3J0X2xvZ19lYXBfY2NjaSwgdWFydF9wb3J0X2RobF9lYXAgPSB1YXJ0X3BvcnRfbG9nX2VhcF9jY2NpLFwKKyAgICB1YXJ0X3BvcnRfbWV0YV9lYXBfY2NjaSwgdWFydF9wb3J0X21ldGFfZWFwID0gdWFydF9wb3J0X21ldGFfZWFwX2NjY2ksXAorICAgIHVhcnRfcG9ydF9lcGRnX2NjY2ksXAorICAgIHVhcnRfcG9ydF9lcGRnMl9jY2NpLFwKKyAgICB1YXJ0X3BvcnRfZXBkZzNfY2NjaSxcCisgICAgdWFydF9wb3J0X2VwZGc0X2NjY2ksXAorCXVhcnRfcG9ydF9tYmltX2VhcF9kc3MwX2NjY2ksXAorCXVhcnRfcG9ydF9tYmltX2VhcF9kc3MxX2NjY2ksXAorCXVhcnRfcG9ydF9tYmltX2VhcF9kc3MyX2NjY2ksXAorCXVhcnRfcG9ydF9tYmltX2VhcF9kc3MzX2NjY2ksXAorCXVhcnRfcG9ydF9tYmltX2VhcF9kc3M0X2NjY2ksXAorCXVhcnRfcG9ydF9tYmltX2VhcF9kc3M1X2NjY2ksXAorCXVhcnRfcG9ydF9tYmltX2VhcF9kc3M2X2NjY2ksXAorCXVhcnRfcG9ydF9tYmltX2VhcF9kc3M3X2NjY2ksXAorCSAgICB1YXJ0X3BvcnRfbWlwY19hcDEwX2NjY2ksXAorCSAgICB1YXJ0X3BvcnRfbWlwY19hcDExX2NjY2ksXAorCSAgICB1YXJ0X3BvcnRfbWlwY19hcDEyX2NjY2ksXAorCSAgICB1YXJ0X3BvcnRfbWlwY19hcDEzX2NjY2ksXAorCSAgICB1YXJ0X3BvcnRfbWlwY19hcDE0X2NjY2ksXAorICAgICAgICB1YXJ0X3BvcnRfY2NjaV9lbmQgPSB1YXJ0X3BvcnRfbWlwY19hcDE0X2NjY2ksXAorCQlzdGFydF9vZl92aXJ0dWFsX3BvcnQsXAorCQllbmRfb2ZfdmlydHVhbF9wb3J0ID0gKFZJUlRVQUxfUE9SVF9OVU0gKyBzdGFydF9vZl92aXJ0dWFsX3BvcnQpLFwKKwkJLyp1YXJ0X3BvcnRfZGNjLCovXAorCQkvKnVhcnRfcG9ydF9sZ2ExLCovXAorCQkvKnVhcnRfcG9ydF9sZ2EyLCovXAorCQkvKnVhcnRfcG9ydF9sbXUsKi9cCisJCS8qdWFydF9wb3J0X3NwX3VzYiwqL1wKKwkJLyp1YXJ0X3BvcnRfc3BfdXNiX2RzcCwqL1wKKwkJdWFydF9wb3J0X21pbmlfbG9nLFwKKwkJdWFydF9wb3J0X2R1YWxfdGFsayxcCisJCXVhcnRfcG9ydF9tb2RpcywvKm9ubHkgZm9yIG1vZGlzKi9cCisJCXVhcnRfcG9ydF9tdGFkLFwKKwkJdWFydF9tYXhfcG9ydCxcCisJCXVhcnRfcG9ydF9udWxsID0gOTksCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0NNRCBmb3IgVUFSVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqCUBicmllZglpdCBkZWZpbmVzIERDTCBVQVJUIGNvbW1hbmRzLCBpbmNsdWRpbmcgU0lPL1VBUlQvVVNCL1RUWSBjb21tYW5kcworICoJCQlTaW5jZSBUVFkgYXJjaGl0ZWN0dXJlIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBlbmhhbmNlZCwgdGhlcmUgYXJlIHNvbWUgc3VtbWFyaWVzIGZvciBVQVJUIGNvbW1hbmRzOgorICoJCQktIERhdGEgcmVsYXRlZCBTSU8gY29tbWFuZHMsIHN1Y2ggYXMKKyAqCQkJCVNJT19DTURfUFVUX0JZVEVTCisgKgkJCQlTSU9fQ01EX1BVVF9JU1JfQllURVMsCisgKgkJCQlTSU9fQ01EX1BVVF9VQVJUX0JZVEUKKyAqCQkJCVNJT19DTURfUFVUX1VBUlRfQllURVMKKyAqCQkJCVNJT19DTURfR0VUX1RYX0FWQUlMCisgKgkJCQlTSU9fQ01EX0dFVF9JU1JfVFhfQVZBSUwKKyAqCQkJCS0+IG9ubHkgc3VwcG9ydCBmb3IgY29udmVudGlvbmFsIFR4IFBhdGguCisgKgkJCQlTSU9fQ01EX0dFVF9CWVRFUworICoJCQkJU0lPX0NNRF9HRVRfVUFSVF9CWVRFCisgKgkJCQlTSU9fQ01EX0dFVF9SWF9BVkFJTAorICoJCQkJLT4gb25seSBzdXBwb3J0IGZvciBjb252ZW50aW9uYWwgUnggUGF0aC4KKyAqCQkJCVNJT19DTURfU0VORF9JU1JfREFUQQorICoJCQkJU0lPX0NNRF9TRU5EX0RBVEEKKyAqCQkJCS0+IG5vdCBzdXBwb3J0IGZvciBhbGwgcGF0aC4KKyAqCQkJICAgIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBuZXcgdXBwZXIgbGF5ZXIgbW9kdWxlcyB3aGljaCB1c2UgTkVXIFRUWSBhcmNoaXRlY3R1cmUuCisgKgkJCS0gVFRZIGNvbW1hbmRzIGFyZSBhZGRlZCBmb3IgbmV3IFRUWSBhcmNoaXRlY3R1cmUuCisgKgkJCSAgICBhbW9uZyB0aGVzZSBjb21tYW5kcywgVFRZX0NNRF9QVVRfQllURVNfSU9SIGlzIHRvIHB1dCBieXRlcyB3aXRoIGlvciBmb3JtYXQuCisgKgkJCSAgICBCdXQgdGhlIHVwcGVyIGxheWVyIG1vZHVsZXMgZG9uJ3QgbmVlZCB0byB0YWtlIGNhcmUgVFRZX0NNRF9QVVRfQllURVNfSU9SIGNvbW1hbmRzLiBUaGV5IG9ubHkgdXNlIERjbFNlcmlhbFBvcnRfVXBNb2R1bGVUcmFuc21pdCBBUEkgdG8gcHV0IGRhdGEuCisgKgkJCS0gRHJpdmVyIG11c3QgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisgKgkJCQlTSU9fQ01EX0lOSVQKKyAqCQkJCVNJT19DTURfT1BFTgorICoJCQkJU0lPX0NNRF9DTE9TRQorICoJCQkJU0lPX0NNRF9QVVJHRQorICoJCQkJU0lPX0NNRF9TRVRfT1dORVIKKyAqCQkJCVNJT19DTURfQ0xSX1JYX0JVRgorICoJCQkJU0lPX0NNRF9DTFJfVFhfQlVGCisgKgkJCQlTSU9fQ01EX0dFVF9PV05FUl9JRAorICoJCQkJVFRZX0NNRF9QVVRfQllURVNfSU9SCisgKgkJCQlUVFlfQ01EX0dFVF9DSFVOS19TSVpFCisgKgkJCQlUVFlfQ01EX0FTU0lHTl9SWF9JT1IKKyAqCQkJCVRUWV9DTURfTkVFRF9UWF9ET05FX0NCCisgKgkJCQksIG90aGVyIGNvbW1hbmRzIAorICoJCQktIFVBUlQgY29tbWFuZHMgVUFSVF9DTURfQk9PVF9QVVRCWVRFUyAmIFVBUlRfQ01EX0JNVF9QVVRfQllURVMgc3RpbGwgdXNlIGJ1ZmZlci9sZW5ndGggaW5zdGVhZCBvZiBpb3IgYXMgcGFyYW1ldGVyLgorICoKKyAqCQkJTm90ZXMgb2Ygc29tZSBjb21tYW5kczoKKyAqCQkJLSBTSU9fQ01EX0NMUl9UWF9CVUYgOiBpdCB3b3VsZCBibG9jayBhbmQgc2xlZXAgYmVmb3JlIHRoZSBjb21tYW5kIHJldHVybnMgaW4gY29udmVudGlvbmFsIFR4IG1vZGUuCisgKgkJCS0gU0lPX0NNRF9DTFJfUlhfQlVGIDogaXQgd291bGQgYmxvY2sgYW5kIHNsZWVwIGJlZm9yZSB0aGUgY29tbWFuZCByZXR1cm5zIGluIGNvbnZlbnRpb25hbCBSeCBtb2RlLgorICoJCQktIFNJT19DTURfU0VUX09XTkVSIDogaXQgd291bGQgYmxvY2sgYW5kIHNsZWVwIGJlZm9yZSB0aGUgY29tbWFuZCByZXR1cm5zIGluIGNvbnZlbnRpb25hbCBUeCBvciBSeCBtb2RlLgorICoJCQktIFNJT19DTURfQ0xPU0UgOiBpdCB3b3VsZCBibG9jayBhbmQgc2xlZXAgYmVmb3JlIHRoZSBjb21tYW5kIHJldHVybnMgaW4gY29udmVudGlvbmFsIFR4IG9yIFJ4IG1vZGUuCisgKgkJCS0gU0lPX0NNRF9QVVRfSVNSX0JZVEVTIDogVGhpcyBjb21tYW5kIGRvZXNuJ3QgZ3VhcmFudGVlIHRoYXQgYWxsIGRhdGEgY2FuIGJlIHNlbnQgc3VjY2Vzc2Z1bGx5IGluIGNvbnZlbnRpb25hbCBUeCBtb2RlIHNpbmNlIGl0IHdvbid0IHNlbmQgUmVhZHlUb1dyaXRlIGlsbS4KKyAqLworI2RlZmluZSBVQVJUX0NNRFMgXAorCVNJT19DTURfSU5JVCA9IDB4MDAsXAorCVNJT19DTURfT1BFTixcCisJU0lPX0NNRF9DTE9TRSxcCisJU0lPX0NNRF9HRVRfQllURVMsXAorCVNJT19DTURfUFVUX0JZVEVTLFwKKwlTSU9fQ01EX0dFVF9SWF9BVkFJTCxcCisJU0lPX0NNRF9HRVRfVFhfQVZBSUwsXAorCVNJT19DTURfUFVUX0lTUl9CWVRFUyxcCisJU0lPX0NNRF9HRVRfSVNSX1RYX0FWQUlMLFwKKwlTSU9fQ01EX1BVUkdFLFwKKwlTSU9fQ01EX1NFVF9PV05FUixcCisJU0lPX0NNRF9TRVRfRkxPV19DVFJMLFwKKwlTSU9fQ01EX0NPTkZJR19FU0NBUEUsXAorCVNJT19DTURfU0VUX0RDQl9DT05GSUcsXAorCVNJT19DTURfQ1RSTF9EQ0QsXAorCVNJT19DTURfQ1RSTF9CUkVBSywgXAorCVNJT19DTURfQ0xSX1JYX0JVRixcCisJU0lPX0NNRF9DTFJfVFhfQlVGLCBcCisJU0lPX0NNRF9TRVRfQkFVRFJBVEUsIFwKKwlTSU9fQ01EX1NFTkRfSVNSX0RBVEEsIFwKKwlTSU9fQ01EX1NFTkRfREFUQSwgXAorCVNJT19DTURfR0VUX09XTkVSX0lELCBcCisJU0lPX0NNRF9TRVRfQVVUT0JBVURfRElWLCBcCisJU0lPX0NNRF9SRUdfVFhfQ0IsXAorCVNJT19DTURfUkVHX1JYX0NCLFwKKwlTSU9fQ01EX0dFVF9VQVJUX0JZVEUsXAorCVNJT19DTURfUFVUX1VBUlRfQllURSxcCisJU0lPX0NNRF9QVVRfVUFSVF9CWVRFUyxcCisJU0lPX0NNRF9SRUFEX0RDQl9DT05GSUcsXAorCVNJT19DTURfQ1RSTF9SSSxcCisJU0lPX0NNRF9HRVRfRVNDQVBFX0lORk8sXAorCVNJT19DTURfQ1RSTF9EVFIsXAorCVNJT19DTURfUkVBRF9IV19TVEFUVVMsXAorCVNJT19DTURfR0VUX1VBUlRfQllURV9XSVRIX1RJTUVPVVQsXAorCVVBUlRfQ01EX1VBUlRfU1RBUlQgPSAweDEwMCxcCisJVUFSVF9DTURfU0VUX0ZJRk9fVFJJR0dFUixcCisJVUFSVF9DTURfUE9XRVJfT04sXAorCVVBUlRfQ01EX0NIRUNLX1RYX0JVRl9FTVBUWSxcCisJVUFSVF9DTURfQ0hFQ0tfVFhfU0VORF9PVVQsXAorCVVBUlRfQ01EX0dFVF9UWF9CVUZfU0laRSxcCisJVUFSVF9DTURfU0xFRVBfVFhfRU5BQkxFLFwKKwlVQVJUX0NNRF9DVFJMX1NMRUVQX01PREUsXAorCVVBUlRfQ01EX1NXSVRDSF9QT1JULFwKKwlVQVJUX0NNRF9CT09UVVBfSU5JVCxcCisJVUFSVF9DTURfQk9PVF9QVVRCWVRFUyxcCisJVUFSVF9DTURfTE9PUEJBQ0ssXAorCVVBUlRfQ01EX0FTU0VSVF9XQUlUX1NFTkRfT1VULFwKKwlVQVJUX0NNRF9DVFJMX1VTRV9WRklGTyxcCisJVUFSVF9DTURfR0VUX0ZMT1dfQ09OVFJPTCxcCisJVUFSVF9DTURfUkVHX0RFRl9DQixcCisJVUFSVF9DTURfQk1UX1BVVF9CWVRFUyxcCisJVUFSVF9DTURfUkVDSEFORExFUl9WRklGTyxcCisJVUFSVF9DTURfVFJYSEFORExFUl9WRklGTyxcCisJVUFSVF9DTURfUkVDVElNRU9VVEhBTkRMRSxcCisJVUFSVF9DTURfQ1RSTF9UWF9ETUEsXAorCVVBUlRfQ01EX0dFVF9NQVhfQkFVRFJBVEUsXAorCVVBUlRfQ01EX1VBUlRfRU5ELFwKKwlVU0JfQ01EX1VBUlRfU1RBUlQgPSAweDIwMCxcCisJVVNCX0NNRF9JU19DRENBQ00sXAorCVVTQl9DTURfSElHSF9TUEVFRF9JRl9FTkFCTEUsIFwKKwlVU0JfQ01EX1JFR19UWF9DQiwgXAorCVVTQl9DTURfVFhfREFUQV9TVEFUVVMsIFwKKwlVU0JfQ01EX1NFTkRfREFUQSwgXAorCVVTQl9DTURfR0VUX0RBVEEsIFwKKwlVU0JfQ01EX1NFTkRfSVNSX0RBVEEsIFwKKwlVU0JfQ01EX0NUUkxfU0VORF9EQVRBLCBcCisJVVNCX0NNRF9DVFJMX0dFVF9EQVRBLCBcCisJVVNCX0NNRF9IQUxULCBcCisJVVNCX0NNRF9GVF9QT1JULCBcCisJVVNCX0NNRF9BQ01fUklOR19CVUZGX1RIUkVTSE9MRF9FTiwgXAorCVVTQl9DTURfVVNCMlVBUlRfVFhfRE1BX0NCSywgXAorCVVTQl9DTURfQk9PVF9QVVRCWVRFUywgXAorICAgIFVTQl9DTURfSVNfQ0RDQUNNX0FDVElWRSxcCisJVVNCX0NNRF9VQVJUX0VORCwgXAorCVRUWV9DTURfVUFSVF9TVEFSVCA9IDB4MzAwLFwKKwlUVFlfQ01EX0dFVF9DSFVOS19TSVpFLFwKKwlUVFlfQ01EX0FTU0lHTl9SWF9JT1IsXAorCVRUWV9DTURfTkVFRF9UWF9ET05FX0NCLFwKKwlUVFlfQ01EX0dFVF9EUlZfU1RBVEUsXAorCVRUWV9DTURfUFVUX0JZVEVTX0lPUixcCisJVFRZX0NNRF9QVVRfQllURVNfSU9SX0xJR0hULFwKKwlUVFlfQ01EX0dFVF9NVFVfU0laRSxcCisJVFRZX0NNRF9TRVRfSU5ESUNBVElPTixcCisJVFRZX0NNRF9VQVJUX0VORCxcCisJVFRZX0NNRF9FWENFUFRJT05fU1RBUlQgPSAweDQwMCxcCisJVFRZX0NNRF9FWENFUFRJT05fUkVTRVQsXAorCVRUWV9DTURfRVhDRVBUSU9OX0hJRl9JTklULFwKKwlUVFlfQ01EX0VYQ0VQVElPTl9DTEVBUl9DSEFOTkVMLFwKKwlUVFlfQ01EX0VYQ0VQVElPTl9UWF9HUEQsXAorCVRUWV9DTURfRVhDRVBUSU9OX1RYX0RPTkVfSU5GTyxcCisJVFRZX0NNRF9FWENFUFRJT05fSElGX1NUQVRFLFwKKwlUVFlfQ01EX0VYQ0VQVElPTl9BU1NJR05fUlhfR1BELFwKKwlUVFlfQ01EX0VYQ0VQVElPTl9HRVRfUlhfR1BELFwKKwlUVFlfQ01EX0VYQ0VQVElPTl9ISUZfUE9MTCxcCisJVFRZX0NNRF9FWENFUFRJT05fSElGX1JFU0VUX0xJTkssXAorCVRUWV9DTURfRVhDRVBUSU9OX0ZMVVNIX1RYLFwKKwlUVFlfQ01EX0VYQ0VQVElPTl9GTFVTSF9SWCxcCisJVFRZX0NNRF9FWENFUFRJT05fRU5ELAorCisvLwordHlwZWRlZiBlbnVtCit7CisJRENMX1VBUlRfVFlQRSA9IDB4MDAsCisJRENMX1VBUlRfVVNCX1RZUEUsCisJRENMX1VBUlRfQkxVRVRPT1RIX1RZUEUsCisJRENMX1VBUlRfQ01VWF9UWVBFLAorCURDTF9VQVJUX1NQUEFfVFlQRSwKKwlEQ0xfVUFSVF9DQ0NJX1RZUEUsCisJRENMX1VBUlRfQ0NJRl9UWVBFLAorCURDTF9VQVJUX0RDQ19UWVBFLAorCURDTF9VQVJUX0xPR0FDQ19UWVBFLAorCURDTF9VQVJUX0xNVV9UWVBFLAorCURDTF9VQVJUX1NQX1VTQl9UWVBFLAorCURDTF9VQVJUX01JTklfTE9HX1RZUEUsCisJRENMX1VBUlRfTVRBRF9UWVBFLAorCURDTF9VQVJUX0RFVl9UWVBFX01BWAorfVNJT19UWVBFX1Q7CisKK3R5cGVkZWYgRENMX1VJTlQzMiBVQVJUX0JBVURSQVRFX1Q7Cit0eXBlZGVmIFVBUlRfQkFVRFJBVEVfVCBVQVJUX2JhdWRyYXRlOwordHlwZWRlZiBEQ0xfVUlOVDE2ICAgVUFSVF9QT1JUOworCisjZGVmaW5lICAgICBVQVJUX0JBVURfQVVUTyAgICAgICAgICAwCisjZGVmaW5lICAgICBVQVJUX0JBVURfNzUgICAgICAgICAgICA3NQorI2RlZmluZSAgICAgVUFSVF9CQVVEXzE1MCAgICAgICAgICAgMTUwCisjZGVmaW5lICAgICBVQVJUX0JBVURfMzAwICAgICAgICAgICAzMDAKKyNkZWZpbmUgICAgIFVBUlRfQkFVRF82MDAgICAgICAgICAgIDYwMAorI2RlZmluZSAgICAgVUFSVF9CQVVEXzEyMDAgICAgICAgICAgMTIwMAorI2RlZmluZSAgICAgVUFSVF9CQVVEXzI0MDAgICAgICAgICAgMjQwMCAgICAKKyNkZWZpbmUgICAgIFVBUlRfQkFVRF80ODAwICAgICAgICAgIDQ4MDAKKyNkZWZpbmUgICAgIFVBUlRfQkFVRF83MjAwICAgICAgICAgIDcyMDAKKyNkZWZpbmUgICAgIFVBUlRfQkFVRF85NjAwICAgICAgICAgIDk2MDAKKyNkZWZpbmUgICAgIFVBUlRfQkFVRF8xNDQwMCAgICAgICAgIDE0NDAwCisjZGVmaW5lICAgICBVQVJUX0JBVURfMTkyMDAgICAgICAgICAxOTIwMAorI2RlZmluZSAgICAgVUFSVF9CQVVEXzI4ODAwICAgICAgICAgMjg4MDAKKyNkZWZpbmUgICAgIFVBUlRfQkFVRF8zMzkwMCAgICAgICAgIDMzOTAwCisjZGVmaW5lICAgICBVQVJUX0JBVURfMzg0MDAgICAgICAgICAzODQwMAorI2RlZmluZSAgICAgVUFSVF9CQVVEXzU3NjAwICAgICAgICAgNTc2MDAKKyNkZWZpbmUgICAgIFVBUlRfQkFVRF8xMTUyMDAgICAgICAgIDExNTIwMAorI2RlZmluZSAgICAgVUFSVF9CQVVEXzIzMDQwMCAgICAgICAgMjMwNDAwCisjZGVmaW5lICAgICBVQVJUX0JBVURfNDYwODAwICAgICAgICA0NjA4MDAKKyNkZWZpbmUgICAgIFVBUlRfQkFVRF85MjE2MDAgICAgICAgIDkyMTYwMAorI2RlZmluZSAgICAgVUFSVF9CQVVEXzE1MDAwMDAgICAgICAgMTUwMDAwMCAKKworI2RlZmluZSAgICAgVUFSVF9UT19FTFRfQkFVRCAgMTUwMDAwMAorCit0eXBlZGVmIGVudW0geworICAgICAgTEVOXzU9NSwKKyAgICAgIExFTl82LAorICAgICAgTEVOXzcsCisgICAgICBMRU5fOAorfSBVQVJUX0JJVFNfUEVSX0NIQVJfVDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICAgIFNCXzE9MSwKKyAgICAgIFNCXzIsCisgICAgICBTQl8xXzUKK30gVUFSVF9TVE9QX0JJVFNfVDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICAgIFBBX05PTkU9MCwKKyAgICAgIFBBX09ERCwKKyAgICAgIFBBX0VWRU4sCisgICAgICBQQV9TUEFDRQorfSBVQVJUX1BBUklUWV9UOworCisvKgorI2lmIGRlZmluZWQoRkNfTk9ORSkKKyN1bmRlZiBGQ19OT05FCisjZW5kaWYKKyovCisKK3R5cGVkZWYgZW51bSB7CisgICAgICBGQ19OT05FPTEsCisgICAgICBGQ19IVywKKyAgICAgIEZDX1NXCit9IFVBUlRfRkxPV19DVFJMX01PREVfVDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICAgIERDTF9OT05FX1ZGSUZPLAorICAgICAgRENMX1JYX1ZGSUZPLAorICAgICAgRENMX1RYX1ZGSUZPLAorICAgICAgRENMX1RYUlhfVkZJRk8KK30gVUFSVF9WRklGT19UOworCit0eXBlZGVmIGVudW0geworICAgICAgdWFydF9zbGVlcF9vbl90eF9hbGxvdyA9IDAsCisgICAgICB1YXJ0X3NsZWVwX29uX3R4X2ZvcmJpZAorfSBVQVJUX1NMRUVQX09OX1RYOworCisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFVBUlRfQkFVRFJBVEVfVCAgICAgIHU0QmF1ZDsgCisgICBEQ0xfVUlOVDggICAgICAgICAgICB1MURhdGFCaXRzOyAvL1VBUlRfQklUU19QRVJfQ0hBUl9UCisgICBEQ0xfVUlOVDggICAgICAgICAgICB1MVN0b3BCaXRzOyAvL1VBUlRfU1RPUF9CSVRTX1QKKyAgIERDTF9VSU5UOCAgICAgICAgICAgIHUxUGFyaXR5OyAvL1VBUlRfUEFSSVRZX1QKKyAgIERDTF9VSU5UOCAgICAgICAgICAgIHUxRmxvd0NvbnRyb2w7IC8vVUFSVF9GTE9XX0NUUkxfTU9ERV9UCisgICBEQ0xfVUNIQVIgICAgICAgICAgICB1Y1hvbkNoYXI7CisgICBEQ0xfVUNIQVIgICAgICAgICAgICB1Y1hvZmZDaGFyOworICAgRENMX0JPT0xFQU4gICAgICAgICAgZmdEU1JDaGVjazsKK30gVUFSVF9DT05GSUdfVDsKKwordHlwZWRlZiBlbnVtIAoreworCURDTF9JT19Mb3c9MCwKKwlEQ0xfSU9fSGlnaAorfSBJT19MRVZFTF9UOworCisKK3R5cGVkZWYgZW51bSB7CisgICAgICBEQ0xfUlhfQlVGLAorICAgICAgRENMX1RYX0JVRgorfSBVQVJUX0JVRkZFUl9UOworCit0eXBlZGVmIGVudW0geworICAgICAgRENMX1VBUlRfU0xFRVBfT05fVFhfQUxMT1cgPSAwLAorICAgICAgRENMX1VBUlRfU0xFRVBfT05fVFhfRk9SQklELAorfSBVQVJUX1NMRUVQX09OX1RYX1Q7CisKK3R5cGVkZWYgZW51bSB7CisgICAgICBEQ0xfVUFSVF9CWV9WRklGTywKKyAgICAgIERDTF9VQVJUX0JZX0RNQSwKKyAgICAgIERDTF9VQVJUX0JZX01DVSwKKyAgICAgIERDTF9VQVJUX0JZX1VOS05PV04KK30gVUFSVF9XT1JLX01PREU7CisKKworLyohCisgKiAgQGJyaWVmIHR0eV9pb19yZXF1ZXN0X3QgaXMgYSB0eXBlZGVmIG9mIHN0cnVjdCBfdHR5X2lvX3JlcXVlc3QKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3R0eV9pb19yZXF1ZXN0X3QgdHR5X2lvX3JlcXVlc3RfdDsKKworLyohCisgKiAgQGJyaWVmIHN0cnVjdCBfdHR5X2lvX3JlcXVlc3RfdCBkZXNjcmliZSBpbyByZXF1ZXN0IHVzZWQgdG8gY29tbXVuaWNhdGUKKyAqICAgICAgICAgYmV0d2VlbiBhcCBtb2R1bGUgJiB0dHkKKyAqLworc3RydWN0IF90dHlfaW9fcmVxdWVzdF90eworICAgIC8qIQorICAgICAqICBAYnJpZWYgbmV4dCBpbyByZXF1ZXN0CisgICAgICovCisgICAgdHR5X2lvX3JlcXVlc3RfdCAgICAqbmV4dF9yZXF1ZXN0OworICAgIC8qIQorICAgICAqICBAYnJpZWYgcG9pbnRlciB0byBjdXJyZW50IGdwZCBvZiB0aGlzIGlvIHJlcXVlc3QKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAgICAgICpmaXJzdF9ncGQ7CisgICAgLyohCisgICAgICogIEBicmllZiBwb2ludGVyIHRvIGxhc3QgZ3BkIG9mIHRoaXMgaW8gcmVxdWVzdAorICAgICAqLworICAgIHZvaWQgICAgICAgICAgICAgICAgKmxhc3RfZ3BkOworfTsKKworLy9VQVJUX0NNRF9JTklUCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMzIgdTRGbGFnOworfVVBUlRfQ1RSTF9JTklUX1Q7CisKKy8vVUFSVF9DTURfT1BFTgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgRENMX1VJTlQzMiB1NE93ZW5ySWQ7Cit9VUFSVF9DVFJMX09QRU5fVDsKKworLy9VQVJUX0NNRF9DTE9TRQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgRENMX1VJTlQzMiB1NE93ZW5ySWQ7Cit9VUFSVF9DVFJMX0NMT1NFX1Q7CisKKy8vVUFSVF9DTURfR0VUX0JZVEVTCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMTYgdTJMZW5ndGg7CisJRENMX1VJTlQzMiB1NE93ZW5ySWQ7CisJRENMX1VJTlQxNgl1MlJldFNpemU7CisJRENMX1VJTlQ4KiBwdUJ1ZmZhZGRyOworCURDTF9VSU5UOCogIHB1c3RhdHVzOworCQorfVVBUlRfQ1RSTF9HRVRfQllURVNfVDsKKworLy9VQVJUX0NNRF9QVVRfQlRZRVMKKy8vVUFSVF9DTURfUFVUX0lTUl9CWVRFUwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfVUlOVDE2IHUyTGVuZ3RoOworCURDTF9VSU5UMzIgdTRPd2VucklkOworCURDTF9VSU5UMTYJdTJSZXRTaXplOworCURDTF9VSU5UOCogcHVCdWZmYWRkcjsKK31VQVJUX0NUUkxfUFVUX0JZVEVTX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQzMiB1NE93bmVySWQ7CisJdm9pZCAqcHV0SW9yOworfVVBUlRfQ1RSTF9QVVRfQllURVNfSU9SX1Q7CisKKy8vVUFSVF9DTURfR0VUX1JYX0FWQUlMCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMTYgdTJSZXRTaXplOworfVVBUlRfQ1RSTF9SWF9BVkFJTF9UOworCisvL1VBUlRfQ01EX0dFVF9UWF9BVkFJTAorLy9VQVJUX0NNRF9HRVRfSVNSX1RYX0FWQUlMCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMTYgdTJSZXRTaXplOworfVVBUlRfQ1RSTF9UWF9BVkFJTF9UOworCisvL1VBUlRfQ01EX1BVUkdFCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMzIgdTRPd2VucklkOworCVVBUlRfQlVGRkVSX1QgZGlyOworfVVBUlRfQ1RSTF9QVVJHRV9UOworCisvL1VBUlRfQ01EX1NFVF9PV05FUgorLy9VQVJUX0NNRF9HRVRfT1dORVJfSUQKK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQzMiB1NE93ZW5ySWQ7Cit9VUFSVF9DVFJMX09XTkVSX1Q7CisKKy8vVUFSVF9DTURfU0VUX0ZMT1dfQ1RSTAordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfVUlOVDMyIHU0T3dlbnJJZDsKKwlEQ0xfQk9PTCAJYlhPTjsKK31VQVJUX0NUUkxfRkxPV19DVFJMX1Q7CisKKy8vVUFSVF9DTURfQ09ORklHX0VTQ0FQRQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9VSU5UMzIgdTRPd2VucklkOworICAgRENMX1VJTlQ4ICB1RXNjQ2hhcjsKKyAgIERDTF9VSU5UMTYgdTJFU0NHdWFyZHRpbWU7Cit9IFVBUlRfQ1RSTF9DT05GSUdfRVNQX1Q7CisKKy8vVUFSVF9DTURfU0VUX0RDQl9DT0ZJRworLy9VQVJUX0NNRF9SRUFEX0RDQl9DT05GSUcKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfVUlOVDMyIHU0T3dlbnJJZDsKKwlVQVJUX0NPTkZJR19UICByVUFSVENvbmZpZzsKK30gVUFSVF9DVFJMX0RDQl9UOworCisvL1VBUlRfQ01EX0NUUkxfRENECisKK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQzMiB1NE93ZW5ySWQ7CisJSU9fTEVWRUxfVCBySU9MZXZlbERDRDsKK30gVUFSVF9DVFJMX0RDRF9UOworCisvL1VBUlRfQ01EX0dFVF9GTE9XX0NPTlRST0wKK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQzMiB1NE93ZW5ySWQ7CisJVUFSVF9GTE9XX0NUUkxfTU9ERV9UIEZsb3dDdHJsTW9kZTsKK31VQVJUX0NUUkxfR0VUX0ZDX1Q7CisKKy8vVFRZX0NNRF9HRVRfQ0hVTktfU0laRQordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfVUlOVDMyIGNodW5rU2l6ZTsKK30gVUFSVF9DVFJMX0dFVF9DSFVOS19TSVpFX1Q7CisKKy8vVFRZX0NNRF9ORUVEX1RYX0RPTkVfQ0IKK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQzMiB1NE93bmVySWQ7CisJRENMX0JPT0wgbmVlZFR4RG9uZUNiOworfSBVQVJUX0NUUkxfTkVFRF9UWF9ET05FX0NCX1Q7CisKKy8vVFRZX0NNRF9HRVRfTVRVX1NJWkUKK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQzMiB1bG10dV9zejsKKwlEQ0xfVUlOVDMyIGRsbXR1X3N6OworfSBVQVJUX0NUUkxfR0VUX01UVV9TSVpFX1Q7CisKKy8vVFRZX0NNRF9TRVRfSU5ESUNBVElPTgordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfQk9PTCBuZWVkX2luZGljYXRpb247Cit9IFVBUlRfQ1RSTF9TRVRfSU5ESUNBVElPTl9UOworCisvKiEKKyAqCUBicmllZglUVFkgZHJpdmVyIHN0YXRlCisgKi8KK3R5cGVkZWYgZW51bSBfdHR5X2Rydl9zdGF0ZSB7CisJICAvKiEKKwkgICAqICBAYnJpZWYgIGRyaXZlciBkZXRhY2hlZCBzdGF0ZQorCSAgICovCisgICAgICBEUlZfU1RfREVUQUNIRUQgPSAwLAorCSAgLyohCisJICAgKiAgQGJyaWVmICBkcml2ZXIgYXR0YWNoZWQgc3RhdGUKKwkgICAqLworICAgICAgRFJWX1NUX0FUVEFDSEVECit9IHR0eV9kcnZfc3RhdGVfZTsKKworLy9UVFlfQ01EX0dFVF9EUlZfU1RBVEUKK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQzMiB1NE93bmVySWQ7CisJdHR5X2Rydl9zdGF0ZV9lIGRydl9zdGF0ZTsKK30gVUFSVF9DVFJMX0dFVF9EUlZfU1RBVEVfVDsKKworLy9UVFlfQ01EX0FTU0lHTl9SWF9JT1IKK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQzMiB1NE93bmVySWQ7CisJdm9pZCAqaW9yOworfSBVQVJUX0NUUkxfQVNTSUdOX1JYX0lPUl9UOworCisvL1VBUlRfQ01EX0NUUkxfQlJFQUsKK3R5cGVkZWYgc3RydWN0Cit7CisgIERDTF9VSU5UMzIgdTRPd2VucklkOworICAgSU9fTEVWRUxfVCBySU9MZXZlbEJSSzsKK30gVUFSVF9DVFJMX0JSRUFLX1Q7CisKKy8vVUFSVF9DTURfQ0xSX1JYX0JVRgorLy9VQVJUX0NNRF9DTFJfVFhfQlVGCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQzMiB1NE93ZW5ySWQ7Cit9IFVBUlRfQ1RSTF9DTFJfQlVGRkVSX1Q7CisKKy8vVUFSVF9DTURfU0VUX0JBVURSQVRFCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQzMiB1NE93ZW5ySWQ7CisgICBVQVJUX0JBVURSQVRFX1QgYmF1ZHJhdGU7Cit9IFVBUlRfQ1RSTF9CQVVEUkFURV9UOworCisvL1VBUlRfQ01EX1NFTkRfSVNSX0RBVEEKKy8vVUFSVF9DTURfU0VORF9EQVRBCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMzIgdTRPd2VucklkOworCURDTF9VSU5UOCogcHVCdWZmYWRkcjsKKwlEQ0xfVUlOVDE2IHUyTGVuZ3RoOworCURDTF9VSU5UOCB1bW9kZTsKKwlEQ0xfVUlOVDggdWVzY2FwZV9jaGFyOworCURDTF9VSU5UMTYgdTJSZXRTaXplOworfVVBUlRfQ1RSTF9TRU5EX0RBVEFfVDsKKworLy9VQVJUX0NNRF9TRVRfQVVUT0JBVURfRElWCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQzMiB1NE93ZW5ySWQ7Cit9IFVBUlRfQ1RSTF9BVVRPX0JBVURESVZfVDsKKwordHlwZWRlZiB2b2lkICgqRENMX1VBUlRfVFhfRlVOQykoRENMX1VJTlQzMiB1NFBvcnQpOyAKK3R5cGVkZWYgdm9pZCAoKkRDTF9VQVJUX1JYX0ZVTkMpKERDTF9VSU5UMzIgdTRQb3J0KSA7IAorCisKKy8vVUFSVF9DTURfUkVHX1RYX0NCCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX1VJTlQzMiB1NE93ZW5ySWQ7CisgICBEQ0xfVUFSVF9UWF9GVU5DIGZ1bmM7Cit9IFVBUlRfQ1RSTF9SRUdfVFhfQ0JfVDsKKworCQorLy9VQVJUX0NNRF9SRUdfUlhfQ0IKK3R5cGVkZWYgc3RydWN0Cit7CisJICBEQ0xfVUlOVDMyIHU0T3dlbnJJZDsKKworICAgRENMX1VBUlRfUlhfRlVOQyBmdW5jOworfSBVQVJUX0NUUkxfUkVHX1JYX0NCX1Q7CisKK3R5cGVkZWYgZW51bQoreworCVVBUlRfVFggPSAwLAorCVVBUlRfUlgsCisJRFNQX1RYLAorCURTUF9SWAorfVVBUlRfSU9fRElSOworCisvL1VBUlRfQ01EX1JFR19ERUZfQ0IKK3R5cGVkZWYgc3RydWN0Cit7CisJVUFSVF9JT19ESVIgZGlyOworfVVBUlRfQ1RSTF9SRUdfREVGX0NCX1Q7CisKKy8vVUFSVF9DTURfR0VUX1VBUlRfQllURQordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfVUlOVDggdUJ5dGU7Cit9VUFSVF9DVFJMX0dFVF9VQVJUX0JZVEVfVDsKKworLy9TSU9fQ01EX0dFVF9VQVJUX0JZVEVfV0lUSF9USU1FT1VUCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UOCB1MXJldEJ5dGU7ICAKKwlEQ0xfVUlOVDggdUJ5dGU7CisJRENMX1VJTlQzMiB1NHRpbWVvdXRfdmFsdWU7CQorfVVBUlRfQ1RSTF9HRVRfVUFSVF9CWVRFX1dJVEhfVElNRU9VVF9UOworCisvL1VBUlRfQ01EX1BVVF9VQVJUX0JZVEUKK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQ4ICB1RGF0YTsKK31VQVJUX0NUUkxfUFVUX1VBUlRfQllURV9UOworCisvL1VBUlRfQ01EX1BVVF9VQVJUX0JZVEVTCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UOCogcHVCdWZmYWRkcjsKKwlEQ0xfVUlOVDE2IHUyTGVuZ3RoOworCQorfVVBUlRfQ1RSTF9QVVRfVUFSVF9CWVRFU19UOworCisvL1VBUlRfQ01EX0NUUkxfUkkKK3R5cGVkZWYgc3RydWN0Cit7CisJIERDTF9VSU5UMzIgdTRPd2VucklkOworCUlPX0xFVkVMX1QgcklPTGV2ZWxTUkk7CisKK31VQVJUX0NUUkxfUklfVDsKKworLy9VQVJUX0NNRF9DVFJMX0RUUgordHlwZWRlZiBzdHJ1Y3QKK3sKKwkgRENMX1VJTlQzMiB1NE93ZW5ySWQ7CisJSU9fTEVWRUxfVCBySU9MZXZlbERUUjsKK31VQVJUX0NUUkxfRFRSX1Q7CisKKy8vVUFSVF9DTURfUkVBRF9IV19TVEFUVVMKK3R5cGVkZWYgc3RydWN0Cit7CisJSU9fTEVWRUxfVCBySU9MZXZlbERTUjsKKwlJT19MRVZFTF9UIHJJT0xldmVsQ1RTOworfVVBUlRfQ1RSTF9SSFNfVDsKKworLy9VQVJUX0NNRF9TRVRfRklGT19UUklHR0VSCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9VSU5UMTYgdHhfbGV2ZWw7CisJRENMX1VJTlQxNiByeF9sZXZlbDsKK31VQVJUX0NUUkxfU0ZUX1Q7CisKKy8vVUFSVF9DTURfUE9XRVJfT04KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wgYkZsYWdfUG93ZXJvbjsKK31VQVJUX0NUUkxfUE9XRVJPTl9UOworCisvL1VBUlRfQ01EX0NIRUNLX1RYX0JVRl9FTVBUWQordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfQk9PTCBiRmxhZzsKK31VQVJUX0NUUkxfQ0hFQ0tfVEJFX1Q7CisKKy8vCVVBUlRfQ01EX0NIRUNLX1RYX1NFTkRfT1VUCit0eXBlZGVmIHN0cnVjdAoreworCURDTF9CT09MIGJGbGFnOworfVVBUlRfQ1RSTF9DSEVDS19UU09fVDsKKworLy9VQVJUX0NNRF9HRVRfVFhfQlVGX1NJWkUKK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX1VJTlQzMiogcHRvdGFsX3NpemU7CisJRENMX1VJTlQzMiogcHJldHVybl9zaXplOworfVVBUlRfQ1RSTF9HRVRfVEJTX1Q7CisKKworLy9VQVJUX0NNRF9TTEVFUF9UWF9FTkFCTEUKK3R5cGVkZWYgc3RydWN0Cit7CisJVUFSVF9TTEVFUF9PTl9UWF9UIGJGbGFnOworfVVBUlRfQ1RSTF9TTEVFUF9PTl9UWF9FTkFCTEVfVDsKKworLy9VQVJUX0NNRF9DVFJMX1NMRUVQX01PREUKK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wgYkZsYWc7Cit9VUFSVF9DVFJMX1NMRUVQX0VOQUJMRV9UOworCisKKy8vVUFSVF9DTURfQk9PVF9QVVRCWVRFUwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEQ0xfVUlOVDgqIHB1QnVmZmFkZHI7CisJRENMX1VJTlQxNiB1Mkxlbmd0aDsKK31VQVJUX0NUUkxfQk9PVF9QVVRCWVRFU19UOworCisKKy8vVUFSVF9DTURfQ1RSTF9VU0VfVkZJRk8KK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wJYlVzZVZGaWZvOworfVVBUlRfQ1RSTF9VU0VfVkZJRk9fVDsJCisKKy8vVUFSVF9DTURfR0VUX01BWF9CQVVEUkFURQordHlwZWRlZiBzdHJ1Y3QKK3sKKwlrYWxfdWludDMyIG1heF9iYXVkcmF0ZTsKK31VQVJUX0NUUkxfR0VUX01BWEJBVURSQVRFX1Q7CisKKy8vVFRZX0NNRF9FWENFUFRJT05fVFhfR1BECit0eXBlZGVmIHN0cnVjdAoreworCXZvaWQgKmZpcnN0X2dwZDsKKwl2b2lkICpsYXN0X2dwZDsKK31UVFlfQ1RSTF9FWENQX1RYX0dQRF9UOworCisvL1RUWV9DTURfRVhDRVBUSU9OX1RYX0RPTkVfSU5GTwordHlwZWRlZiBzdHJ1Y3QKK3sKKwl2b2lkICpmaXJzdF9ncGQ7CisJdm9pZCAqbGFzdF9ncGQ7CisJRENMX1VJTlQzMiBudW07Cit9VFRZX0NUUkxfRVhDUF9UWF9ET05FX0lORk9fVDsKKworLy9UVFlfQ01EX0VYQ0VQVElPTl9ISUZfU1RBVEUKK3R5cGVkZWYgZW51bSBfdHR5X2V4Y3BfaGlmX3N0YXRlIHsKKwlISUZfU1RBVEVfTk9STUFMID0gMCwKKwlISUZfU1RBVEVfVFhFUlJPUgorfSB0dHlfZXhjcF9oaWZfc3RhdGU7Cit0eXBlZGVmIHN0cnVjdAoreworCXR0eV9leGNwX2hpZl9zdGF0ZSBoaWZfc3RhdGU7Cit9VFRZX0NUUkxfRVhDUF9ISUZfU1RBVEVfVDsKKworLy9UVFlfQ01EX0VYQ0VQVElPTl9BU1NJR05fUlhfR1BECit0eXBlZGVmIHN0cnVjdAoreworCXZvaWQgKmZpcnN0X2dwZDsKKwl2b2lkICpsYXN0X2dwZDsKK31UVFlfQ1RSTF9FWENQX0FTU0lHTl9SWF9HUERfVDsKKworLy9UVFlfQ01EX0VYQ0VQVElPTl9HRVRfUlhfR1BECit0eXBlZGVmIHN0cnVjdAoreworCXZvaWQgKmZpcnN0X2dwZDsKKwl2b2lkICpsYXN0X2dwZDsKKwlEQ0xfVUlOVDMyIG51bTsKK31UVFlfQ1RSTF9FWENQX0dFVF9SWF9HUERfVDsKKworLy9UVFlfQ01EX0VYQ0VQVElPTl9GTFVTSF9UWAordHlwZWRlZiBzdHJ1Y3QKK3sKKwl2b2lkICpmaXJzdF9ncGQ7CisJdm9pZCAqbGFzdF9ncGQ7CisJRENMX1VJTlQzMiBudW07Cit9VFRZX0NUUkxfRVhDUF9GTFVTSF9UWF9UOworCisvL1RUWV9DTURfRVhDRVBUSU9OX0ZMVVNIX1JYCit0eXBlZGVmIHN0cnVjdAoreworCXZvaWQgKmZpcnN0X2dwZDsKKwl2b2lkICpsYXN0X2dwZDsKKwlEQ0xfVUlOVDMyIG51bTsKK31UVFlfQ1RSTF9FWENQX0ZMVVNIX1JYX1Q7CisKKy8vVFRZX0NNRF9FWENFUFRJT05fSElGX1BPTEwKK3R5cGVkZWYgc3RydWN0Cit7CisJRENMX0JPT0wgcmVzZXRfZXZlbnQ7Cit9VFRZX0NUUkxfRVhDUF9ISUZfUE9MTF9UOworCit0eXBlZGVmIGVudW0geworICAgICAgTk9ORV9WRklGTywKKyAgICAgIFJYX1ZGSUZPLAorICAgICAgVFhfVkZJRk8sCisgICAgICBUWFJYX1ZGSUZPCit9IFVBUlRfVHhSeF9WRklGT19zdXBwb3J0OworCit0eXBlZGVmIGVudW0geworICAgICAgUlhfQlVGLAorICAgICAgVFhfQlVGCit9IFVBUlRfYnVmZmVyOworCit0eXBlZGVmIGVudW0geworICAgQ29tcGVuc2F0ZV9Ob25lID0gMCwKKyAgIENvbXBlbnNhdGVfV2FpdCwKKyAgIENvbXBlbnNhdGVfQVQsCisgICBDb21wZW5zYXRlX2F0Cit9VUFSVF9Db21wZW5zYXRlX2VudW07CisKKwordHlwZWRlZiBlbnVtIHsKKyAgICAgIGxlbl81PTUsCisgICAgICBsZW5fNiwKKyAgICAgIGxlbl83LAorICAgICAgbGVuXzgKK30gVUFSVF9iaXRzUGVyQ2hhcmFjdGVyOworCit0eXBlZGVmIGVudW0geworICAgICAgc2JfMT0xLAorICAgICAgc2JfMiwKKyAgICAgIHNiXzFfNQorfSBVQVJUX3N0b3BCaXRzOworCit0eXBlZGVmIGVudW0geworICAgICAgcGFfbm9uZT0wLAorICAgICAgcGFfb2RkLAorICAgICAgcGFfZXZlbiwKKyAgICAgIHBhX21hcmssICAgICAgLy9rMiBtZDIgNjU4OSwgYWRkIGZvciBzb2x2aW5nIGRyaXZlci9wZXJpcGhlcmFsIHVhcnQgbW9kdWxlIGJ1aWxkIGVycm9yCisgICAgICBwYV9zcGFjZQorfSBVQVJUX3Bhcml0eTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICAgIGZjX25vbmU9MSwKKyAgICAgIGZjX2h3LAorICAgICAgZmNfc3cKK30gVUFSVF9mbG93Q3RybE1vZGU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgICBVQVJUX2JhdWRyYXRlICAgICAgICAgICAgICAgICBiYXVkOyAKKyAgICAgIFVBUlRfYml0c1BlckNoYXJhY3RlciAgICAgICAgIGRhdGFCaXRzOworICAgICAgVUFSVF9zdG9wQml0cyAgICAgICAgICAgICAgICAgc3RvcEJpdHM7CisgICAgICBVQVJUX3Bhcml0eSAgICAgICAgICAgICAgICAgICBwYXJpdHk7CisgICAgICBVQVJUX2Zsb3dDdHJsTW9kZSAgICAgICAgICAgICBmbG93Q29udHJvbDsKKyAgICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgIHhvbkNoYXI7CisgICAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICB4b2ZmQ2hhcjsKKyAgICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgIERTUkNoZWNrOworfSBVQVJURENCU3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgIEVzY0NoYXI7CisgICAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgR3VhcmRUaW1lOworfSBVQVJUX0VTQ0RldGVjdFN0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAqcnhfYnVmZmVyOyAgIC8qIGRhdGEgYnVmZmVyICovCisgICAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgKnR4X2J1ZmZlcjsgICAvKiBkYXRhIGJ1ZmZlciAqLworICAgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICp0eElTUl9idWZmZXI7ICAvKiBkYXRhIGJ1ZmZlciAqLworfSBVQVJUX1JpbmdCdWZmZXJTdHJ1Y3Q7CisKKworICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgIHVhcnRfbnVsbF9idWZmZXI9MCwKKyAgICAgIHVhcnRfaXNyX2J1ZmZlciwKKyAgICAgIHVhcnRfbm9ybWFsX2J1ZmZlcgorICAgfSBVQVJUX1JpbmdCdWZmZXJfVHlwZTsKKworICAgdHlwZWRlZiBzdHJ1Y3QKKyAgIHsKKyAgICAgICAgIFVBUlRfUmluZ0J1ZmZlcl9UeXBlICAgICAgICAgICAgdHlwZTsKKyAgICAgICAgIGthbF91aW50MTYgICAgICAgICAgICAgICAgICAgICAgaW5kZXg7CisgICB9IFVBUlRfUmluZ0J1ZmZlcl9TYXZlSW5kZXg7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlrYWxfdWludDE2CSAgICAgICB0c3RfcG9ydF9wczsKKwlrYWxfdWludDE2ICAgICAgICAgcHNfcG9ydDsJCisJVUFSVF9iYXVkcmF0ZSAgICAgIHRzdF9iYXVkcmF0ZV9wczsKKwlVQVJUX2JhdWRyYXRlICAgICAgcHNfYmF1ZHJhdGU7CisJa2FsX2Jvb2wgICAgICAgICAgIEhpZ2hfU3BlZWRfU0lNX0VuYWJsZWQ7CisJa2FsX3VpbnQ4ICAgICAgICAgIHN3ZGJnOwkKKyAgIGthbF91aW50OCAgICAgICAgICB1YXJ0X3Bvd2VyX3NldHRpbmc7IC8qIEZvciBEQ00sIFN0YXJ0IFtTZXQgVUFSVCBQT1dFUl0sIENUSSAgKi8KKyAgIGthbF91aW50OCAgICAgICAgICBjdGlfdWFydF9wb3J0OworICAgVUFSVF9iYXVkcmF0ZSAgICAgIGN0aV9iYXVkcmF0ZTsKKyAgIGthbF91aW50OCAgICAgICAgICAgdHN0X3BvcnRfbDE7CisgICBVQVJUX2JhdWRyYXRlICAgICAgIHRzdF9iYXVkcmF0ZV9sMTsKKyAgICBrYWxfdWludDggICAgICAgICAgdHN0X291dHB1dF9tb2RlOworICAgIGthbF91aW50OAkgICAgICB1c2JfbG9nZ2luZ19tb2RlOworICAgIGthbF91aW50MTYgdHN0X3BvcnRfZHNwOworICAgIFVBUlRfYmF1ZHJhdGUgICAgICAgdHN0X2JhdWRfcmF0ZV9kc3A7CisJa2FsX3VpbnQ4ICAgdXNiX2Nkcm9tX2NvbmZpZzsKKwlrYWxfdWludDE2CXNwZWVjaF9wb3J0OworCWthbF91aW50MTYJbmRpc19wb3J0OworCWthbF91aW50MTYJZXBkZ19jbWRfcG9ydDsKKwlrYWxfdWludDE2CWVwZGdfdXJjX3BvcnQ7CisJa2FsX3VpbnQxNgllcGRnX2NtZF9wb3J0XzI7CisJa2FsX3VpbnQxNgllcGRnX3VyY19wb3J0XzI7Cit9IHBvcnRfc2V0dGluZ19zdHJ1Y3Q7CisKKy8qc3RhcnQgb2YgbG9jYWwgcGFyYW1ldGVyIHN0cnVjdCAqLworCit0eXBlZGVmIHN0cnVjdCAgCit7ICAKKyAgICBMT0NBTF9QQVJBX0hEUiAgICAgICAgICAvKiAgTE9DQUxfUEFSQV9IRFIgKi8KKwlEQ0xfVUlOVDE2IAlwb3J0OworfXVhcnRfcmVhZHlfdG9fcmVhZF9pbmRfc3RydWN0OyAKKwordHlwZWRlZiBzdHJ1Y3QgIAoreyAgICAgICAKKyAgICBMT0NBTF9QQVJBX0hEUiAgICAgICAgICAvKiAgTE9DQUxfUEFSQV9IRFIgKi8KKwlEQ0xfVUlOVDE2IAlwb3J0OworfXVhcnRfcmVhZHlfdG9fd3JpdGVfaW5kX3N0cnVjdDsKKyAKKyB0eXBlZGVmIHN0cnVjdCAgCit7ICAgICAgIAorICAgIExPQ0FMX1BBUkFfSERSICAgICAgICAgIC8qICBMT0NBTF9QQVJBX0hEUiAqLworCURDTF9VSU5UMTYgCXBvcnQ7Cit9dWFydF9kc3JfY2hhbmdlX2luZF9zdHJ1Y3Q7CisgCisgdHlwZWRlZiBzdHJ1Y3QgIAoreyAgICAgICAKKyAgICBMT0NBTF9QQVJBX0hEUiAgICAgICAgICAvKiAgTE9DQUxfUEFSQV9IRFIgKi8KKwlEQ0xfVUlOVDE2IAlwb3J0OworfXVhcnRfZXNjYXBlX2RldGVjdGVkX2luZF9zdHJ1Y3Q7CisKKyB0eXBlZGVmIHN0cnVjdCAgCit7ICAgICAgIAorICAgIExPQ0FMX1BBUkFfSERSICAgICAgICAgIC8qICBMT0NBTF9QQVJBX0hEUiAqLworCURDTF9VSU5UMTYgCXBvcnQ7Cit9dWFydF9wbHVnaW5faW5kX3N0cnVjdDsKKworIHR5cGVkZWYgc3RydWN0ICAKK3sgICAgICAgCisgICAgTE9DQUxfUEFSQV9IRFIgICAgICAgICAgLyogIExPQ0FMX1BBUkFfSERSICovCisJRENMX1VJTlQxNiAJcG9ydDsKK311YXJ0X3BsdWdvdXRfaW5kX3N0cnVjdDsgIAorCisKKyNkZWZpbmUgVUFSVF9DVFJMUyBcCisJICBVQVJUX0NUUkxfSU5JVF9UICAgIHJVQVJUQ3RybEluaXQ7XAorICAgICAgVUFSVF9DVFJMX09QRU5fVCAgICByVUFSVEN0cmxPUEVOOyBcCisgICAgICBVQVJUX0NUUkxfQ0xPU0VfVAkgIHJVQVJUQ3RybENMT1NFOyBcCisgICAgICBVQVJUX0NUUkxfR0VUX0JZVEVTX1QgclVBUlRDdHJsR0VUQllURVM7IFwKKyAgICAgIFVBUlRfQ1RSTF9QVVRfQllURVNfVCByVUFSVEN0cmxQVVRCWVRFUzsgXAorICAgICAgVUFSVF9DVFJMX1JYX0FWQUlMX1QgIHJVQVJUQ3RybFJYQVZBSUw7IFwKKyAgICAgIFVBUlRfQ1RSTF9UWF9BVkFJTF9UICByVUFSVEN0cmxUWEFWQUlMOyBcCisgICAgICBVQVJUX0NUUkxfUFVSR0VfVAkJclVBUlRDdHJsUFVSR0U7IFwKKyAgICAgIFVBUlRfQ1RSTF9PV05FUl9UCQlyVUFSVEN0cmxPV05FUjsgXAorICAgICAgVUFSVF9DVFJMX0ZMT1dfQ1RSTF9UIHJVQVJUQ3RybEZMT1dDVFJMOyBcCisgICAgICBVQVJUX0NUUkxfQ09ORklHX0VTUF9UIHJVQVJUQ3RybENPTkZJR0VTUDsgXAorICAgICAgVUFSVF9DVFJMX0RDQl9UCQlyVUFSVEN0cmxEQ0I7IFwKKyAgICAgIFVBUlRfQ1RSTF9EQ0RfVCAgICAgICByVUFSVEN0cmxEQ0Q7XAorICAgICAgVUFSVF9DVFJMX0JSRUFLX1QgICAgICByVUFSVEN0cmxCUkVBSztcCisgICAgICBVQVJUX0NUUkxfQ0xSX0JVRkZFUl9UCXJVQVJUQ3RybENMUkJVRkZFUjtcCisgICAgICBVQVJUX0NUUkxfQkFVRFJBVEVfVCAgICAgclVBUlRDdHJsQkFVRFJBVEU7XAorICAgICAgVUFSVF9DVFJMX1NFTkRfREFUQV9UICAgICByVUFSVEN0cmxTRU5EREFUQTtcCisgICAgICBVQVJUX0NUUkxfQVVUT19CQVVERElWX1QgIHJVQVJUQ3RybEFVVE9CQVVERElWO1wKKyAgICAgIFVBUlRfQ1RSTF9SRUdfVFhfQ0JfVCAgICAgclVBUlRDdHJsUkVHVFhDQjtcCisgICAgICBVQVJUX0NUUkxfUkVHX1JYX0NCX1QgICAgclVBUlRDdHJsUkVHUlhDQjtcCisgICAgICBVQVJUX0NUUkxfR0VUX1VBUlRfQllURV9UICByVUFSVEN0cmxHRVRVQVJUQllURTtcCisJVUFSVF9DVFJMX0dFVF9VQVJUX0JZVEVfV0lUSF9USU1FT1VUX1QgclVBUlRDdHJsR0VUVUFSVEJZVEVXaXRoVGltZU91dDtcCisgICAgICBVQVJUX0NUUkxfUFVUX1VBUlRfQllURV9UICByVUFSVEN0cmxQVVRVQVJUQllURTtcCisgICAgICBVQVJUX0NUUkxfUFVUX1VBUlRfQllURVNfVCByVUFSVEN0cmxQVVRVQVJUQllURVM7XAorICAgICAgVUFSVF9DVFJMX1JJX1QgICAgICAgICAgICAgIHJVQVJUQ3RybFJJO1wKKyAgICAgIFVBUlRfQ1RSTF9EVFJfVCAgICAgICAgICAgICAgIHJVQVJUQ3RybERUUjtcCisgICAgICBVQVJUX0NUUkxfUkhTX1QgICAgICAgICAgICAgICAgclVBUlRDdHJsUkhTO1wKKyAgICAgIFVBUlRfQ1RSTF9TRlRfVAkJCQlyVUFSVEN0cmxTRlQ7XAorCSAgVUFSVF9DVFJMX1BPV0VST05fVCAgICAgICAgICAgclVBUlRDdHJsUG93ZXJvbjtcCisJICBVQVJUX0NUUkxfQ0hFQ0tfVEJFX1QJCQlyVUFSVEN0cmxDaGVja0JVRkVNUDtcCisJICBVQVJUX0NUUkxfQ0hFQ0tfVFNPX1QJCQlyVUFSVEN0cmxDaGVja1RYU2VuZE91dDtcCisJICBVQVJUX0NUUkxfR0VUX1RCU19UCQkJclVBUlRDdHJsR2V0VHhCdWZTaXplO1wKKwkgIFVBUlRfQ1RSTF9TTEVFUF9PTl9UWF9FTkFCTEVfVAlyVUFSVEN0cmxTbGVlcE9uVHhFbmFibGU7XAorCSAgVUFSVF9DVFJMX1NMRUVQX0VOQUJMRV9UCQlyVUFSVEN0cmxTbGVlcEVuYWJsZTtcCisJICBVQVJUX0NUUkxfQk9PVF9QVVRCWVRFU19UCQlyVUFSVEN0cmxCb290UHV0Qnl0ZXM7XAorCSAgVUFSVF9DVFJMX1VTRV9WRklGT19UCQkJclVBUlRDdHJsVXNlVkZpZm87XAorICAgICAgVUFSVF9DVFJMX1JFR19ERUZfQ0JfVAkJclVBUlRDdHJsUmVnRGVmQ0I7XAorICAgICAgVUFSVF9DVFJMX0dFVF9NQVhCQVVEUkFURV9UICAgclVBUlRDdHJsR2V0TWF4QmF1ZHJhdGU7XAorCSAgVUFSVF9DVFJMX0dFVF9GQ19UCQkJclVBUlRDdHJsR2V0RkM7XAorCSAgVUFSVF9DVFJMX05FRURfVFhfRE9ORV9DQl9UCXJVQVJUQ3RybE5lZWRUeERvbmVDYjsgLypuZXcqL1wKKwkgIFVBUlRfQ1RSTF9HRVRfRFJWX1NUQVRFX1QJCXJVQVJUQ3RybEdldERydlN0YXRlOyAvKm5ldyovXAorCSAgVUFSVF9DVFJMX0FTU0lHTl9SWF9JT1JfVAkJclVBUlRDdHJsQXNzaWduUnhJb3I7IC8qbmV3Ki8gXAorCSAgVUFSVF9DVFJMX1BVVF9CWVRFU19JT1JfVAkJclVBUlRDdHJsUFVUQllURVNJT1I7IC8qbmV3Ki8gXAorCSAgVUFSVF9DVFJMX0dFVF9DSFVOS19TSVpFX1QJclVBUlRDdHJsR0VUQ0hVTktTSVpFOyAvKm5ldyovXAorCSAgVUFSVF9DVFJMX0dFVF9NVFVfU0laRV9UICAgICAgclVBUlRDdHJsR0VUTVRVU0laRTsgLypuZXcqL1wKKwkgIFVBUlRfQ1RSTF9TRVRfSU5ESUNBVElPTl9UICAgIHJVQVJUQ3RybFNFVElORElDQVRJT047IC8qbmV3Ki9cCisJICBUVFlfQ1RSTF9FWENQX1RYX0dQRF9UCQlyVFRZQ3RybEV4Y3BUeEdQRDsgLypuZXcqL1wKKwkgIFRUWV9DVFJMX0VYQ1BfVFhfRE9ORV9JTkZPX1QJclRUWUN0cmxFeGNwVHhEb25lSW5mbzsgLypuZXcqL1wKKwkgIFRUWV9DVFJMX0VYQ1BfSElGX1NUQVRFX1QJCXJUVFlDdHJsRXhjcEhpZlN0YXRlOyAvKm5ldyovXAorCSAgVFRZX0NUUkxfRVhDUF9BU1NJR05fUlhfR1BEX1QJclRUWUN0cmxFeGNwQXNzaWduUnhHUEQ7IC8qbmV3Ki9cCisJICBUVFlfQ1RSTF9FWENQX0dFVF9SWF9HUERfVAlyVFRZQ3RybEV4Y3BHZXRSeEdQRDsgLypuZXcqL1wKKwkgIFRUWV9DVFJMX0VYQ1BfRkxVU0hfVFhfVCAgICAgIHJUVFlDdHJsRXhjcEZsdXNoVHg7IC8qbmV3Ki9cCisJICBUVFlfQ1RSTF9FWENQX0ZMVVNIX1JYX1QJICAgIHJUVFlDdHJsRXhjcEZsdXNoUng7IC8qbmV3Ki9cCisgICAgICBUVFlfQ1RSTF9FWENQX0hJRl9QT0xMX1QJICAgIHJUVFlDdHJsRXhjcEhpZlBvbGw7IC8qbmV3Ki8KKworI2VuZGlmCisjZW5kaWYKKworCisjaWZkZWYgRENMX0RFRklOSVRJT05fUFJPVE9UWVBFCisjaWZuZGVmIF9fRENMX1VBUlRfSF9QUk9UT1RZUEVfXworI2RlZmluZSBfX0RDTF9VQVJUX0hfUFJPVE9UWVBFX18KKwordHlwZWRlZiBEQ0xfU1RBVFVTKCpTZXJpUG9ydF9IQU5MREVSX0NCKShEQ0xfREVWIGRldiwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKK3R5cGVkZWYgc3RydWN0IAoreworCVNJT19UWVBFX1QgRGV2VHlwZTsKKwlTZXJpUG9ydF9IQU5MREVSX0NCIFNlcmlwb3J0SGFuZGxlckNiOworfVNlcmlwb3J0X0hBTkRMRVJfVDsKKworLyohCisgKglAYnJpZWYJVFRZIGZsYWcKKyAqLwordHlwZWRlZiBlbnVtIF90dHlfZmxhZyB7CisgICAvKiEKKwkqICBAYnJpZWYgIHVzZSBuZXcgVFRZIFR4IHBhdGgKKwkqLworICAgVFRZX0ZMQUdfTkVXX1RYCQk9ICgxIDw8IDApLAorICAgLyohCisJKiAgQGJyaWVmICB1c2UgbmV3IFRUWSBSeCBwYXRoCisJKi8gICAKKyAgIFRUWV9GTEFHX05FV19SWAkJPSAoMSA8PCAxKSwKK30gdHR5X2ZsYWdfZTsKKwordHlwZWRlZiBEQ0xfU1RBVFVTKCp0dHlfdHhkb25lX2NiKShEQ0xfSEFORExFIGhhbmRsZSwgbW9kdWxlX3R5cGUgc291cmNlX2lkLCB0dHlfaW9fcmVxdWVzdF90ICp0eF9pb3IpOwordHlwZWRlZiBEQ0xfU1RBVFVTKCp0dHlfcnhfY2IpKERDTF9IQU5ETEUgaGFuZGxlLCBtb2R1bGVfdHlwZSBzb3VyY2VfaWQsIHR0eV9pb19yZXF1ZXN0X3QgKnJ4X2lvcik7Cit0eXBlZGVmIERDTF9TVEFUVVMoKnR0eV9kcnZfc3RhdGVfY2hhbmdlX2NiKShEQ0xfSEFORExFIGhhbmRsZSwgdHR5X2Rydl9zdGF0ZV9lIHN0YXRlKTsKKworCisKKy8qIQorKiAJQGZ1bmN0aW9uCURjbFNlcmlhbFBvcnRfT3BlbgorKglAYnJpZWYJCVRoaXMgZnVuY3Rpb24gaXMgdG8gb3BlbiB0aGUgVUFSVCBtb2R1bGUgYW5kIGdldCBhIGhhbmRsZS4KKyoJQHBhcmFtCQlkZXYJCQlQb3J0IG51bWJlci4gaXQgY2FuIHRha2UgRENMX1VBUlRfREVWIGFzIHJlZmVyZW5jZQorKglAcGFyYW0JCWZsYWdzCQltb2R1bGVfdHlwZSB8IEZMQUdTX1VBUlRfVVNFX1ZGSUZPCisqCQkJCQkJCW1vZHVsZV90eXBlOiBLQUwgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZQorKgkJCQkJCQlGTEFHU19VQVJUX1VTRV9WRklGTzogZmxhZ3MgdGhhdCBzcGVjaWZpZXMgdG8gdXNlIFZpcnR1YWwgRklGTyBvciBub3QgZm9yIFVBUlQgZGV2aWNlLiBOb3RlIHRoYXQgaXQncyBvbmx5IHZhbGlkZSBmb3IgZURldiB3aXRoIERDTF9VQVJUMSwgRENMX1VBUlQyLCBEQ0xfVUFSVDMoaWYgZXhpc3RzKQorKgkJCQkJCQlbTm90ZV0gQ3VycmVudGx5IFRUWSBkb2Vzbid0IGhhbmRsZSBmbGFncyEhIFRoaXMgcGFyYW1ldGVyIGlzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGlibGUuCisqCUByZXN1bHQJCVNUQVRVU19GQUlMCQkJCU9wZW4gZmFpbGVkLgorKglAcmVzdWx0CQlTVEFUVVNfQUxSRUFEWV9PUEVORUQJVGhpcyBkZXZpY2UgaGFzIGFscmVhZHkgYmVlbiBvcGVuZWQuCisqCUByZXN1bHQJCVNUQVRVU19JTlZBTElEX0RFVklDRQlUaGUgZGV2aWNlIGlzIG5vdCB2YWxpZC4KKyoJQHJlc3VsdAkJU1RBVFVTX1NFVF9WRklGT19GQUlMCUZhaWwgdG8gdXNlIFZpdHVhbCBGSUZPIGZvciB0aGUgVUFSVCBwb3J0LgorKglAcmVzdWx0CQlvdGhlciB2YWx1ZQkJCQlhIHZhbGlkIGhhbmRsZQorKgorKi8KK2V4dGVybiBEQ0xfSEFORExFIERjbFNlcmlhbFBvcnRfT3BlbihEQ0xfREVWIGRldiwgRENMX0ZMQUdTIGZsYWdzKTsKKyAKKy8qIQorKiAJQGZ1bmN0aW9uCURjbFNlcmlhbFBvcnRfQ29uZmlndXJlCisqCUBicmllZgkJVGhpcyBmdW5jdGlvbiBpcyB0byBjb25maWd1cmUgZm9yIHRoZSBVQVJUIG1vZHVsZS4gW05vdGVdIEN1cnJlbmx0eSB0aGlzIGZ1bmN0aW9uIGlzIG5vdCB1c2VkLgorKglAcGFyYW0JCWhhbmRsZQkJYSB2YWxpZCBoYW5kbGUgcmV0dXJuIGJ5IERjbFNlcmlhbFBvcnRfT3BlbigpCisqCUBwYXJhbQkJY29uZmlndXJlCWEgcG9udGVyIHRvIFVBUlRfQ09ORklHX1Qgc3RydWN0dXJlIHdoaWNoIGlzIGEgbWVtYmVyIG9mIHVuaW9uIERDTF9DT05GSUdVUkVfVAorKglAcmVzdWx0CQlTVEFUVVNfT0sJCQkJc3VjY2Vzc2Z1bGx5IGNvbmZpZ3VyZS4KKyoJQHJlc3VsdAkJU1RBVFVTX0lOVkFMSURfSEFORExFCUl0J3MgYSBpbnZhbGlkIGhhbmRsZS4KKyoJQHJlc3VsdAkJU1RBVFVTX05PVF9PUEVORUQJCVRoZSBtb2R1bGUgaGFzIG5vdCBiZWVuIG9wZW5lZC4KKyoJQHJlc3VsdAkJU1RBVFVTX0lOVkFMSURfQ09ORklHVVJBVElPTgl0aGUgY29uZmlndXJhdGlvbiBpcyBub3QgdmFsaWQuIAorKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNlcmlhbFBvcnRfQ29uZmlndXJlKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQ09ORklHVVJFX1QgKmNvbmZpZ3VyZSk7CisgCisvKiEKKyoJQGZ1bmN0aW9uCURjbFNlcmlhbFBvcnRfQ29udHJvbAorKglAYnJpZWYJCVRoaXMgZnVuY3Rpb24gaXMgc3VwcG9ydCBVQVJUIG1vZHVsZSBjb21tYW5kcy4gSXQgaXMgY2FsbGVkIHRvIHNlbmQgY29tbWFuZCB0byBjb250cm9sIHRoZSBVQVJUIG1vZHVsZS4KKyoJQHBhcmFtCQloYW5kbGUgCQlhIHZhbGlkIGhhbmRsZSByZXR1cm4gYnkgRGNsU2VyaWFsUG9ydF9PcGVuKCkKKyoJQHBhcmFtCQljbWQgCQlkY2wgdWFydCBjb21tYW5kcworKglAcGFyYW0JCWRhdGEgCQlwb2ludGVyIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEgc3RydWN0dXJlIG9mIGNvbW1hbmQKKyoJQHJlc3VsdCAJU1RBVFVTX09LIAkJCQljb21tYW5kIGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyoJQHJlc3VsdCAJU1RBVFVTX0lOVkFMSURfQ01ECQlJdCdzIGEgaW52YWxpZCBjb21tYW5kLgorKglAcmVzdWx0IAlTVEFUVVNfSU5WQUxJRF9IQU5ETEUJSXQncyBhIGludmFsaWQgaGFuZGxlLgorKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNlcmlhbFBvcnRfQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKKyAKKy8qIQorKglAZnVuY3Rpb24JRGNsU2VyaWFsUG9ydF9DbG9zZQorKglAYnJpZWYJCVRoaXMgZnVuY3Rpb24gaXMgdG8gY2xvc2UgdGhlIFVBUlQgbW9kdWxlLgorKglAcGFyYW0JCWhhbmRsZSAJCWhhbmxkZSBwcmV2aW91cyBnb3QgZnJvbSBEY2xTZXJpYWxQb3J0X09wZW4oKQorKglAcmVzdWx0IAlTVEFUVVNfT0sgCQkJCVN1Y2Nlc3NmdWxseSBjbG9zZSB0aGUgVUFSVCBtb2R1bGUuCisqCUByZXN1bHQgCVNUQVRVU19JTlZBTElEX0hBTkRMRQlJdCdzIGludmFsaWQgaGFuZGxlLgorKglAcmVzdWx0IAlTVEFUVVNfTk9UX09QRU5FRAkJVGhlIFVBUlQgbW9kdWxlIGhhc24ndCBiZWVuIG9wZW5lZCB5ZXQuCisqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU2VyaWFsUG9ydF9DbG9zZShEQ0xfSEFORExFIGhhbmRsZSk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2VuZXJhbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8gCisvKiEKKyoJQGZ1bmN0aW9uCURjbFNlcmlhbFBvcnRfSW5pdGlhbGl6ZQorKglAYnJpZWYJCVRoaXMgZnVuY3Rpb24gaXMgdG8gaW5pdGlhbGl6ZSBUVFkgbW9kdWxlLi4KKyoJQHBhcmFtCQlub25lCisqCUByZXN1bHQgCVNUQVRVU19PSyAJCQkJc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemUgVFRZIG1vZHVsZS4KKyoJQHJlc3VsdCAJU1RBVFVTX0ZBSUwJCQkJaW5pdGlhbGl6ZWQgZmFpbGVkLi4KKyovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTZXJpYWxQb3J0X0luaXRpYWxpemUodm9pZCk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEV4cG9ydCB0byB1cHBlciBsYXllciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8gCisvKiEKKyoJQGZ1bmN0aW9uCVtOZXcgVFRZIEFQSV0gRGNsU2VyaWFsUG9ydF9VcE1vZHVsZUluaXQKKyoJQGJyaWVmCQlUaGlzIGZ1bmN0aW9uIGlzIHRvIGluaXRpYWxpemUvc3RhcnQgZGVzaWduYXRlZCBDT00gUG9ydCBmb3IgdXBwZXIgbW9kdWxlLgorKglAcGFyYW0JCWhhbmRsZQkJCQkJYSB2YWxpZCBoYW5kbGUgcmV0dXJuIGJ5IERjbFNlcmlhbFBvcnRfT3BlbigpCisqCUBwYXJhbQkJbW9kdWxlX2lkCQkJCXVwcGVyIG1vZHVsZSBpZAorKglAcGFyYW0JCWZsYWcJCQkJCVRUWSBDT00gUG9ydCBhdHRyaWJ1dGUuIEN1cnJlbnRseSB0aGV5IGFyZSBUVFlfRkxBR19ORVdfVFggb3IgVFRZX0ZMQUdfTkVXX1JYLgorKgkJCQkJCQkJCQlVcHBlciBtb2R1bGUgY2FuIGluaXRpYWxpemUgZmxhZyB3aXRoIG5ldyBUeC9SeCBmbG93IChncGQgYmFzZWQpIG9yIGNvbnZlbnRpb25hbCBUeC9SeCAoYnVmZmVyL2xlbmd0aCBiYXNlZCkgZmxvdy4KKyoJCQkJCQkJCQkJZXguIE5ldyBUeCBhbmQgQ29udmVudGlvbmFsIFJ4IC0gRGNsU2VyaWFsUG9ydF9VcE1vZHVsZVJlaW5pdChoYW5kbGUsIG1vZHVsZV9pZCwgVFRZX0ZMQUdfTkVXX1RYKTsKKyoJQHJlc3VsdCAJU1RBVFVTX09LCQkJCUluaXQgQ09NIFBvcnQgZGV2aWNlIHN1Y2Nlc3NmdWxseS4KKyoJQHJlc3VsdCAJU1RBVFVTX0lOVkFMSURfSEFORExFCUl0J3MgYSBpbnZhbGlkIGhhbmRsZS4KKyoJQHJlc3VsdCAJU1RBVFVTX0FMUkVBRFlfT1BFTkVECVRoZSBDT00gUG9ydCBoYXMgYmVlbiBpbml0aWFsaXplZCBieSBvdGhlciBtb2R1bGUuCisqCUByZXN1bHQgCVNUQVRVU19ERVZJQ0VfTk9UX0VYSVNUIFRoZSBjb3JyZXNwb25kaW5nIGRldmljZSBkcml2ZXIgb2YgQ09NIFBvcnQgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLgorKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNlcmlhbFBvcnRfVXBNb2R1bGVJbml0KERDTF9IQU5ETEUgaGFuZGxlLCBtb2R1bGVfdHlwZSBtb2R1bGVfaWQsIGludCBmbGFnKTsKKyAKKy8qIQorKglAZnVuY3Rpb24JW05ldyBUVFkgQVBJXSBEY2xTZXJpYWxQb3J0X1VwTW9kdWxlUmVpbml0CisqCUBicmllZgkJVGhpcyBmdW5jdGlvbiBpcyB0byByZS1pbml0IFRUWSBDT00gUG9ydCBzZXR0aW5nLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIG93bmVyIGlzIGNoYW5nZWQuCisqCUBwYXJhbQkJaGFuZGxlCQkJCQlhIHZhbGlkIGhhbmRsZSByZXR1cm4gYnkgRGNsU2VyaWFsUG9ydF9PcGVuKCkKKyoJQHBhcmFtCQltb2R1bGVfaWQJCQkJdXBwZXIgbW9kdWxlIGlkCisqCUBwYXJhbQkJZmxhZwkJCQkJVFRZIENPTSBQb3J0IGF0dHJpYnV0ZS4gQ3VycmVudGx5IHRoZXkgYXJlIFRUWV9GTEFHX05FV19UWCBvciBUVFlfRkxBR19ORVdfUlguCisqCQkgCQkJCQkJCQlVcHBlciBtb2R1bGUgY2FuIHJlLWluaXQgZmxhZyB3aXRoIG5ldyBUeC9SeCBmbG93IChncGQgYmFzZWQpIG9yIGNvbnZlbnRpb25hbCBUeC9SeCAoYnVmZmVyL2xlbmd0aCBiYXNlZCkgZmxvdy4KKyoJCSAJCQkJCQkJCWV4LiBSZWluaXQgdG8gTmV3IFR4IGFuZCBDb252ZW50aW9uYWwgUnggLSBEY2xTZXJpYWxQb3J0X1VwTW9kdWxlUmVpbml0KGhhbmRsZSwgbW9kdWxlX2lkLCBUVFlfRkxBR19ORVdfVFgpOworKglAcmVzdWx0IAlTVEFUVVNfT0sJCQkJUmUtSW5pdCBDT00gUG9ydCBkZXZpY2Ugc3VjY2Vzc2Z1bGx5LgorKglAcmVzdWx0IAlTVEFUVVNfSU5WQUxJRF9IQU5ETEUJSXQncyBhIGludmFsaWQgaGFuZGxlLgorKglAcmVzdWx0IAlTVEFUVVNfTk9UX09QRU5FRAkJVGhlIENPTSBQb3J0IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4KKyoJQHJlc3VsdCAJU1RBVFVTX0RFVklDRV9OT1RfRVhJU1QgVGhlIGNvcnJlc3BvbmRpbmcgZGV2aWNlIGRyaXZlciBvZiBDT00gUG9ydCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuCisqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU2VyaWFsUG9ydF9VcE1vZHVsZVJlaW5pdChEQ0xfSEFORExFIGhhbmRsZSwgbW9kdWxlX3R5cGUgbW9kdWxlX2lkLCBpbnQgZmxhZyk7CisgCisvKiEKKyoJQGZ1bmN0aW9uCVtOZXcgVFRZIEFQSV0gRGNsU2VyaWFsUG9ydF9VcE1vZHVsZURlaW5pdAorKglAYnJpZWYJCVRoaXMgZnVuY3Rpb24gaXMgdG8gZGUtaW5pdC9kZS1yZWdpc3RlciBDT00gUG9ydC4KKyoJQHBhcmFtCQloYW5kbGUJCQkJCWEgdmFsaWQgaGFuZGxlIHJldHVybiBieSBEY2xTZXJpYWxQb3J0X09wZW4oKQorKglAcmVzdWx0IAlTVEFUVVNfT0sJCQkJRGVpbml0IENPTSBQb3J0IGRldmljZSBzdWNjZXNzZnVsbHkuCisqCUByZXN1bHQgCVNUQVRVU19JTlZBTElEX0hBTkRMRQlJdCdzIGEgaW52YWxpZCBoYW5kbGUuCisqCUByZXN1bHQgCVNUQVRVU19OT1RfT1BFTkVECQlUaGUgQ09NIFBvcnQgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLgorKglAcmVzdWx0IAlTVEFUVVNfREVWSUNFX05PVF9FWElTVCBUaGUgY29ycmVzcG9uZGluZyBkZXZpY2UgZHJpdmVyIG9mIENPTSBQb3J0IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4KKyovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTZXJpYWxQb3J0X1VwTW9kdWxlRGVpbml0KERDTF9IQU5ETEUgaGFuZGxlKTsKKyAKKy8qIQorKglAZnVuY3Rpb24JW05ldyBUVFkgQVBJXSBEY2xTZXJpYWxQb3J0X1VwTW9kdWxlUmVnaXN0ZXJDYgorKglAYnJpZWYJCVRoaXMgZnVuY3Rpb24gaXMgZm9yIHVwcGVyIGxheWVyIG1vZHVsZSB0byByZWdpc3RlciBjYWxsYmFjayBmdW5jdGlvbi4KKyoJQHBhcmFtCQloYW5kbGUJCQkJYSB2YWxpZCBoYW5kbGUgcmV0dXJuIGJ5IERjbFNlcmlhbFBvcnRfT3BlbigpCisqCUBwYXJhbQkJcnhfY2IgCQkJCXJ4IGNhbGxiYWNrIGZ1bmN0aW9uLCBkcml2ZXIgc2VuZCByZWNlaXZpbmcgZGF0YSB0byB1cHBlciBsYXllciB0aHJvdWdoIHRoaXMgcnggY2FsbGJhY2sgZnVuY3Rpb24KKyoJQHBhcmFtCQl0eF9kb25lX2NiIAkJCXR4IGRvbmUgY2FsbGJhY2sgZnVuY3Rpb24sIHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiBkYXRhIGhhcyBiZWVuIHNlbnQKKyoJQHBhcmFtCQlkcnZfc3RhdGVfY2hhbmdlX2NiCWRyaXZlciBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2sgZnVuY3Rpb24sIGl0IG5vdGlmeSB0aGUgdXBwZXIgbGF5ZXIgbW9kdWxlIHdoZW4gZHJpdmVyIHN0YXRlIGlzIGNoYW5nZWQsIGV4LiBVU0IgZGlzY29ubmVjdAorKglAcmVzdWx0IAlTVEFUVVNfT0sJCQkJUmVnaXN0ZXIgY2FsbGJhY2sgZnVuY3Rpb24gc3VjY2Vzc2Z1bGx5LgorKglAcmVzdWx0IAlTVEFUVVNfSU5WQUxJRF9IQU5ETEUJSXQncyBhIGludmFsaWQgaGFuZGxlLgorKglAcmVzdWx0IAlTVEFUVVNfTk9UX09QRU5FRCAJCVRoZSBDT00gUG9ydCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuCisqCUByZXN1bHQgCVNUQVRVU19ERVZJQ0VfTk9UX0VYSVNUIFRoZSBjb3JyZXNwb25kaW5nIGRldmljZSBkcml2ZXIgb2YgQ09NIFBvcnQgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLgorKglAcmVzdWx0IAlTVEFUVVNfRkFJTCAJCQlGYWlsZWQgZm9yIG90aGVyIHJlYXNvbnMuCisqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU2VyaWFsUG9ydF9VcE1vZHVsZVJlZ2lzdGVyQ2IoRENMX0hBTkRMRSBoYW5kbGUsIHR0eV9yeF9jYiByeF9jYiwgdHR5X3R4ZG9uZV9jYiB0eF9kb25lX2NiLCB0dHlfZHJ2X3N0YXRlX2NoYW5nZV9jYiBkcnZfc3RhdGVfY2hhbmdlX2NiKTsKKyAKKy8qIQorKglAZnVuY3Rpb24JW05ldyBUVFkgQVBJXSBEY2xTZXJpYWxQb3J0X1VwTW9kdWxlVHJhbnNtaXQKKyoJQGJyaWVmCQlUaGlzIGZ1bmN0aW9uIGlzIHRvIHRyYW5zbWl0IGRhdGEgdG8gQ09NIFBvcnQgaW4gaW9yIGZvcm1hdC4KKyoJQHBhcmFtCQloYW5kbGUJCWEgdmFsaWQgaGFuZGxlIHJldHVybiBieSBEY2xTZXJpYWxQb3J0X09wZW4oKQorKglAcGFyYW0JCWlvcgkJCXBvaW50ZXIgdG8gdHggaW8gcmVxdWVzdCB3aGljaCBpcyBzZW50IHRvIENPTSBQb3J0IGRyaXZlcgorKglAcmVzdWx0IAlTVEFUVVNfT0sJCQkJVHJhbnNtaXQgaW9yIHN1Y2Nlc3NmdWxseS4KKyoJQHJlc3VsdCAJU1RBVFVTX0lOVkFMSURfSEFORExFCUl0J3MgYSBpbnZhbGlkIGhhbmRsZS4KKyoJQHJlc3VsdCAJU1RBVFVTX0ZBSUwgCQkJRmFpbGVkIGZvciBvdGhlciByZWFzb25zLgorKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNlcmlhbFBvcnRfVXBNb2R1bGVUcmFuc21pdChEQ0xfSEFORExFIGhhbmRsZSwgdHR5X2lvX3JlcXVlc3RfdCAqaW9yKTsKKworLyohCisqCUBmdW5jdGlvbglbTmV3IFRUWSBBUEldIERjbFNlcmlhbFBvcnRfVXBNb2R1bGVUcmFuc21pdExpZ2h0CisqCUBicmllZgkJVGhpcyBmdW5jdGlvbiBpcyB0byB0cmFuc21pdCBkYXRhIHRvIENPTSBQb3J0IGluIGlvciBmb3JtYXQgYW5kIGxpZ2h0LXdlaWdodC4KKyoJCQkJQmVmb3JlIHVzZXIgdXNlIHRoaXMgVHggZnVuY3Rpb24sIGl0IG11c3QgY2FsY3VsYXRlIHR4IGNoZWNrc3VtIGFuZCBmbHVzaCBHUEQgaW4gYWR2YW5jZS4KKyoJQHBhcmFtCQloYW5kbGUJCWEgdmFsaWQgaGFuZGxlIHJldHVybiBieSBEY2xTZXJpYWxQb3J0X09wZW4oKQorKglAcGFyYW0JCWlvcgkJCXBvaW50ZXIgdG8gdHggaW8gcmVxdWVzdCB3aGljaCBpcyBzZW50IHRvIENPTSBQb3J0IGRyaXZlcgorKglAcmVzdWx0IAlTVEFUVVNfT0sJCQkJVHJhbnNtaXQgaW9yIHN1Y2Nlc3NmdWxseS4KKyoJQHJlc3VsdCAJU1RBVFVTX0lOVkFMSURfSEFORExFCUl0J3MgYSBpbnZhbGlkIGhhbmRsZS4KKyoJQHJlc3VsdCAJU1RBVFVTX0ZBSUwgCQkJRmFpbGVkIGZvciBvdGhlciByZWFzb25zLgorKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNlcmlhbFBvcnRfVXBNb2R1bGVUcmFuc21pdExpZ2h0KERDTF9IQU5ETEUgaGFuZGxlLCB0dHlfaW9fcmVxdWVzdF90ICppb3IpOworCisvKiEKKyoJQGZ1bmN0aW9uCVtOZXcgVFRZIEFQSV0gRGNsU2VyaWFsUG9ydF9VcE1vZHVsZUFzc2lnblJ4SW9yCisqCUBicmllZgkJVGhpcyBmdW5jdGlvbiBpcyB0byBhc3NpZ24gZW1wdHkgUnggaW9yIHRvIGRyaXZlciBmb3IgZGF0YSByZWNlaXZpbmcuCisqCUBwYXJhbQkJaGFuZGxlCQlhIHZhbGlkIGhhbmRsZSByZXR1cm4gYnkgRGNsU2VyaWFsUG9ydF9PcGVuKCkKKyoJQHBhcmFtCQlyeF9pb3IJCXBvaW50ZXIgdG8gcnggaW8gcmVxdWVzdCBmb3IgZGF0YSByZWNlaXZpbmcKKyoJQHJlc3VsdCAJU1RBVFVTX09LCQkJCUFzc2lnbiBSeCBpb3Igc3VjY2Vzc2Z1bGx5LgorKglAcmVzdWx0IAlTVEFUVVNfSU5WQUxJRF9IQU5ETEUJSXQncyBhIGludmFsaWQgaGFuZGxlLgorKglAcmVzdWx0IAlTVEFUVVNfRkFJTAkJCQlGYWlsZWQgZm9yIG90aGVyIHJlYXNvbnMuCisqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsU2VyaWFsUG9ydF9VcE1vZHVsZUFzc2lnblJ4SW9yKERDTF9IQU5ETEUgaGFuZGxlLCB0dHlfaW9fcmVxdWVzdF90ICpyeF9pb3IpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXhwb3J0IHRvIGRyaXZlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovIAorLyohCisqCUBmdW5jdGlvbglEY2xTZXJpYWxQb3J0X0RydlJlZ2lzdGVyQ2IKKyoJQGJyaWVmCQlUaGlzIGZ1bmN0aW9uIGlzIHRvIHJlZ2lzdGVyIGNhbGxiYWNrIGZ1bnRpb24gZm9yIHRoZSBVQVJUIG1vZHVsZSBvciBDT00gUG9ydCBjbGFzcyBkcml2ZXIuCisqCUBwYXJhbQkJaGFuZGxlIAkJICAgICAgICBhIHZhbGlkIGhhbmRsZSByZXR1cm4gYnkgRGNsU2VyaWFsUG9ydF9PcGVuKCkKKyoJQHBhcmFtCQlzZXJpcG9ydF9oYW5kbGVyCXRoZSBzdHJ1Y3R1cmUgY29udGFpbnMgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIGRldmljZSB0eXBlLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUWSB3b3VsZCBzZW5kIGNvbW1hbmRzIChTSU8vVUFSVC9VU0IvVFRZLy4uLikgdG8gZHJpdmVyIHRocm91Z2ggdGhpcyBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50IGhhcHBlbnMuCisqCUByZXN1bHQgCVNUQVRVU19PSyAJCQkJc3VjY2Vzc2Z1bC4KKyoJQHJlc3VsdCAJU1RBVFVTX0lOVkFMSURfSEFORExFCUl0J3MgYSBpbnZhbGlkIGhhbmRsZS4KKyoJQHJlc3VsdCAJU1RBVFVTX0FMUkVBRFlfT1BFTkVECVRoaXMgZGV2aWNlIGhhcyBhbHJlYWR5IGJlZW4gb3BlbmVkLgorKglAcmVzdWx0IAlTVEFUVVNfSU5WQUxJRF9BUkdVTUVOVAlUaGUgcGFyYW1ldGVyIGlzIGludmFsaWQsIGV4LiB1YXJ0X2hhbmRsZXJfY2IgaXMgTlVMTC4KKyovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTZXJpYWxQb3J0X0RydlJlZ2lzdGVyQ2IoRENMX0hBTkRMRSBoYW5kbGUsIFNlcmlwb3J0X0hBTkRMRVJfVCogc2VyaXBvcnRfaGFuZGxlcik7CisKKy8qIQorKglAZnVuY3Rpb24JRGNsU2VyaWFsUG9ydF9EcnZEZVJlZ2lzdGVyQ2IKKyoJQGJyaWVmCQlUaGlzIGZ1bmN0aW9uIGlzIHRvIERlLXJlZ2lzdGVyIGNhbGxiYWNrIGZ1bnRpb24gZm9yIHRoZSBVQVJUIG1vZHVsZSBvciBDT00gUG9ydCBjbGFzcyBkcml2ZXIuCisqCUBwYXJhbQkJaGFuZGxlIAkJICAgICAgICBhIHZhbGlkIGhhbmRsZSByZXR1cm4gYnkgRGNsU2VyaWFsUG9ydF9PcGVuKCkKKyoJCisqCUByZXN1bHQgCVNUQVRVU19PSyAJCQkJIHN1Y2Nlc3NmdWwuCisqCUByZXN1bHQgCVNUQVRVU19JTlZBTElEX0hBTkRMRQkgSXQncyBhIGludmFsaWQgaGFuZGxlLgorKglAcmVzdWx0IAlTVEFUVVNfSU5WQUxJRF9PUEVSQVRJT04gVGhpcyBkZXZpY2UgaGFzIGFscmVhZHkgYmVlbiBkZS1yZWdpc3RlcmVkIG9yIGRyaXZlciBzdGF0ZSBpcyBhdHRhY2hlZC4KKyovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTZXJpYWxQb3J0X0RydkRlUmVnaXN0ZXJDYihEQ0xfSEFORExFIGhhbmRsZSk7CisKKy8qIQorKglAZnVuY3Rpb24JW05ldyBUVFkgQVBJXSBEY2xTZXJpYWxQb3J0X0RydkF0dGFjaAorKglAYnJpZWYJCVRoaXMgZnVuY3Rpb24gaXMgZm9yIGRyaXZlciB0byBpbmZvcm0gVFRZIHRoYXQgdGhlIGRldmljZSBpcyBhdHRhY2hlZC9jb25uZWN0ZWQuCisqCUBwYXJhbQkJaGFuZGxlCQlhIHZhbGlkIGhhbmRsZSByZXR1cm4gYnkgRGNsU2VyaWFsUG9ydF9PcGVuKCkKKyoJQHJlc3VsdCAJU1RBVFVTX09LCQkJCXN1Y2Nlc3NmdWwuCisqCUByZXN1bHQgCVNUQVRVU19JTlZBTElEX0hBTkRMRQlJdCdzIGEgaW52YWxpZCBoYW5kbGUuCisqCUByZXN1bHQgCVNUQVRVU19ERVZJQ0VfTk9UX0VYSVNUIFRoZSBjb3JyZXNwb25kaW5nIGRldmljZSBkcml2ZXIgb2YgQ09NIFBvcnQgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLgorKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNlcmlhbFBvcnRfRHJ2QXR0YWNoKERDTF9IQU5ETEUgaGFuZGxlKTsKKyAKKy8qIQorKglAZnVuY3Rpb24JW05ldyBUVFkgQVBJXSBEY2xTZXJpYWxQb3J0X0RydkRldGFjaAorKglAYnJpZWYJCVRoaXMgZnVuY3Rpb24gaXMgZm9yIGRyaXZlciB0byBpbmZvcm0gVFRZIHRoYXQgdGhlIGRldmljZSBpcyBkZXRhY2hlZC9kaXNjb25uZWN0ZWQuCisqCUBwYXJhbQkJaGFuZGxlCQlhIHZhbGlkIGhhbmRsZSByZXR1cm4gYnkgRGNsU2VyaWFsUG9ydF9PcGVuKCkKKyoJQHJlc3VsdCAJU1RBVFVTX09LCQkJCXN1Y2Nlc3NmdWwuCisqCUByZXN1bHQgCVNUQVRVU19JTlZBTElEX0hBTkRMRQlJdCdzIGEgaW52YWxpZCBoYW5kbGUuCisqCUByZXN1bHQgCVNUQVRVU19ERVZJQ0VfTk9UX0VYSVNUCVRoZSBjb3JyZXNwb25kaW5nIGRldmljZSBkcml2ZXIgb2YgQ09NIFBvcnQgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLgorKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFNlcmlhbFBvcnRfRHJ2RGV0YWNoKERDTF9IQU5ETEUgaGFuZGxlKTsKKyAKKy8qIQorKglAZnVuY3Rpb24JW05ldyBUVFkgQVBJXSBEY2xTZXJpYWxQb3J0X0RydlJ4CisqCUBicmllZgkJVGhpcyBmdW5jdGlvbiBpcyBmb3IgZHJpdmVyIHRvIHNlbmQgYmFjayB0aGUgcmVjZWl2ZWQgZGF0YSB0byBUVFkvdXBwZXIgbGF5ZXIuCisqCUBwYXJhbQkJaGFuZGxlCQlhIHZhbGlkIGhhbmRsZSByZXR1cm4gYnkgRGNsU2VyaWFsUG9ydF9PcGVuKCkKKyoJQHBhcmFtCQlzb3VyY2VfaWQJZHJpdmVyIG1vZHVsZSBpZAorKglAcGFyYW0JCXJ4X2lvcgkJcmVjZWl2ZWQgZGF0YSB3aXRoIGlvciBmb3JtYXQKKyoJQHJlc3VsdCAJU1RBVFVTX09LCQkJCXN1Y2Nlc3NmdWxseSByZWdpc3RlciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisqCUByZXN1bHQgCVNUQVRVU19JTlZBTElEX0hBTkRMRQlJdCdzIGEgaW52YWxpZCBoYW5kbGUuCisqCUByZXN1bHQgCVNUQVRVU19OT1RfT1BFTkVECQlUaGUgQ09NIFBvcnQgaXMgbm90IG9wZW5lZCBieSB1cHBlciBsYXllci4KKyovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTZXJpYWxQb3J0X0RydlJ4KERDTF9IQU5ETEUgaGFuZGxlLCBtb2R1bGVfdHlwZSBzb3VyY2VfaWQsIHZvaWQgKnJ4X2lvcik7CisgCisvKiEKKyoJQGZ1bmN0aW9uCVtOZXcgVFRZIEFQSV0gRGNsU2VyaWFsUG9ydF9EcnZUeERvbmUKKyoJQGJyaWVmCQlUaGlzIGZ1bmN0aW9uIGlzIGZvciBkcml2ZXIgdG8gc2VuZCBiYWNrIHRoZSB0cmFuc21pdHRlZCAodHggZG9uZSkgZGF0YSB0byBUVFkvdXBwZXIgbGF5ZXIuCisqCQkJCVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGlmICJuZWVkIHR4IGRvbmUgY2FsbGJhY2siIGlzIGNvbmZpZ3VyZWQgWUVTLgorKglAcGFyYW0JCWhhbmRsZSAJCWEgdmFsaWQgaGFuZGxlIHJldHVybiBieSBEY2xTZXJpYWxQb3J0X09wZW4oKQorKglAcGFyYW0JCXNvdXJjZV9pZAlkcml2ZXIgbW9kdWxlIGlkCisqCUBwYXJhbQkJdHhfaW9yCQl0cmFuc21pdHRlZCBkYXRhIHdpdGggaW9yIGZvcm1hdAorKglAcmVzdWx0IAlTVEFUVVNfT0sgCQkJCXN1Y2Nlc3NmdWwuCisqCUByZXN1bHQgCVNUQVRVU19JTlZBTElEX0hBTkRMRQlJdCdzIGEgaW52YWxpZCBoYW5kbGUuCisqCUByZXN1bHQgCVNUQVRVU19OT1RfT1BFTkVECQlUaGUgQ09NIFBvcnQgaXMgbm90IG9wZW5lZCBieSB1cHBlciBsYXllci4KKyovCitleHRlcm4gRENMX1NUQVRVUyBEY2xTZXJpYWxQb3J0X0RydlR4RG9uZShEQ0xfSEFORExFIGhhbmRsZSwgbW9kdWxlX3R5cGUgc291cmNlX2lkLCB2b2lkICp0eF9pb3IpOworCisKKyNlbmRpZiAvLyAjaWZuZGVmIF9fRENMX1VBUlRfSF9QUk9UT1RZUEVfXworI2VuZGlmIC8vICNpZmRlZiBEQ0xfREVGSU5JVElPTl9QUk9UT1RZUEUKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfd2R0LmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RjbF93ZHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTg2NTAzCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kY2xfd2R0LmgKQEAgLTAsMCArMSwzOTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGRjbF93ZHQuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgSGVhZGVyIGZpbGUgb2YgRENMIChEcml2ZXIgQ29tbW9uIExheWVyKSBmb3IgV0RULgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBEQ0xfREVGSU5JVElPTl9TVFJVQ1QKKyNpZm5kZWYgX19EQ0xfV0RUX0hfU1RSVUNUX18KKyNkZWZpbmUgX19EQ0xfV0RUX0hfU1RSVUNUX18KKworCisjZGVmaW5lIERDTF9XRFRfUlNUSU5URVJWQUxfVkFMVUUgICAgMHhmZmEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9PUFRJT05TIGZvciBXRFQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBXRFRfT1BUSU9OUworCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DT05GSUdVUkVfVCBmb3IgV0RUCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBXRFRfQ09ORklHUworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENMX0VWRU5UIGZvciBXRFQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIF9fQlVJTERfRE9NX18KKy8qVGhlIFdEVCBFVkVOVCBpcyBwYXJ0IG9mIERDTF9FVkVOVF9UIEVudW0gb2YgZGNsLmgqLworLypXRFRfRVZFTlRTX1QgRGVmaW5lIHRoZSBldmVudCB0eXBlIHRoYXQgd2R0IHN1cHBvcnQgdG8gcmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiovCit0eXBlZGVmIGVudW0KK3sKKwlFVkVOVF9XRFRfVElNRU9VVCA9ICAgICAgICAgMHgwMDAwMDAwMQorfURDTF9FVkVOVF9UOworI2Vsc2UKKyNkZWZpbmUgV0RUX0VWRU5UUyBcCisgICBFVkVOVF9XRFRfVElNRU9VVCA9ICAgICAgICAgMHgwMDAwMDAwMSwKKyNlbmRpZgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0NNRCBmb3IgV0RUCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBfX0JVSUxEX0RPTV9fCisvKlRoZSBXRFQgQ29tbWFuZCB2YWx1ZXMgaXMgcGFydCBvZiBEQ0xfQ1RSTF9DTURfVCBFbnVtIG9mIGRjbC5oKi8KKy8qRENMX0NUUkxfREFUQV9UIERlZmluZSB0aGUgQ29udHJvbCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBtb2R1bGUncyBjb21tYW5kKi8KK3R5cGVkZWYgZW51bQoreworCSBXRFRfQ01EX0VOQUJMRSAsICAvKnRvIGVuYWJsZS9kaXNhYmxlIFdEVCovCisgICBXRFRfQ01EX1NFVF9FWFRfUE9MLCAvKnRvIHNldCBwbG9hcml0eSBvZiBleHRlcm5hbCBwaW4gd2hlbiBXRFQgZXhwaXJlZCAqLworICAgV0RUX0NNRF9TRVRfRVhUX1JFU0VULCAvKnRvIGdlbmVyYXRlIGFuIGV4dGVybmFsIHdhdGNoZG9nIHJlc2V0IHNpZ25hbCB3aGVuIFdEVCBleHBpcmVkKi8KKyAgIFdEVF9DTURfU0VUX1ZBTFVFLCAvKnRvIHNldCBXRFQgY291bnQgdmFsdWUqLworICAgV0RUX0NNRF9SRVNUQVJULCAvKnRvIHJlc3RhcnQgY291bnRlciovCisgICBXRFRfQ01EX0RSVl9SRVNFVCwgLyp0byByZXNldCBkZXZpY2UqLworICAgV0RUX0NNRF9BQk5fUkVTRVQsIC8qdG8gcmVzZXQgZGV2aWNlIHdpdGggYWJub3JtYWwgZmxhZyBzZXQgdG8gaW5kaWNhdGUgaXQgaXMgYSBhYm5vcm1hbCByZXNldCovCisgICBXRFRfQ01EX0lSUSwgLyp0byBnZW5lcmF0ZSBpbnRlcnJ1cHQgaW5zdGVhZCBvZiByZXNldHRpbmcgZGV2aWNlKi8KKyAgIFdEVF9DTURfSVJRX0FVWCwKKyAgIFdEVF9DTURfR0VUX1JTVElOVEVSVkFMLCAKKyAgIFdEVF9DTURfR0VUX1JTVElOVEVSVkFMX0FVWCwKKyAgIFdEVF9DTURfRU5BQkxFX0RFQlVHLAorICAgV0RUX0NNRF9DTFJfQ0hFQ0ssIAorICAgV0RUX0NNRF9TRVRfQ0hFQ0ssIAorICAgV0RUX0NNRF9DTFJfS0lDSywgCisgICBXRFRfQ01EX1NFVF9LSUNLLAorfURDTF9DVFJMX0NNRF9UOworI2Vsc2UKKyNkZWZpbmUgV0RUX0NNRFMgXAorICAgV0RUX0NNRF9FTkFCTEUgLCBcCisgICBXRFRfQ01EX1NFVF9FWFRfUE9MLCBcCisgICBXRFRfQ01EX1NFVF9FWFRfUkVTRVQsIFwKKyAgIFdEVF9DTURfU0VUX1ZBTFVFLCBcCisgICBXRFRfQ01EX1JFU1RBUlQsIFwKKyAgIFdEVF9DTURfRFJWX1JFU0VULCBcCisgICBXRFRfQ01EX0FCTl9SRVNFVCwgXAorICAgV0RUX0NNRF9JUlEsIFwKKyAgIFdEVF9DTURfSVJRX0FVWCwgXAorICAgV0RUX0NNRF9HRVRfUlNUSU5URVJWQUwsIFwKKyAgIFdEVF9DTURfR0VUX1JTVElOVEVSVkFMX0FVWCwgXAorICAgV0RUX0NNRF9FTkFCTEVfREVCVUcsIFwKKyAgIFdEVF9DTURfQ0xSX0NIRUNLLCBcCisgICBXRFRfQ01EX1NFVF9DSEVDSywgXAorICAgV0RUX0NNRF9DTFJfS0lDSywgXAorICAgV0RUX0NNRF9TRVRfS0lDSywKKyNlbmRpZgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDTF9DVFJMX0RBVEFfVDogRGVmaW5lIHRoZSBDb250cm9sIGRhdGEgc3RydWN0dXJlIGZvciBlYWNoIG1vZHVsZSdzIGNvbW1hbmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIHR5cGVkZWYgc3RydWN0CisgeworIAlEQ0xfVUlOVDMyIHJzdEludGVydmFsOworIH1XRFRfQ1RSTF9HRVRfUlNUSU5URVJWQUxfVDsKKworLyogRm9yIFdEVF9DTURfRU5BQkxFIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX0JPT0wgZmdFbmFibGU7CQkvLyBUUlVFOiBFbmFibGUgV0RULCBGQUxTRTogRGlzYWJsZSBXRFQKK30gV0RUX0NUUkxfRU5BQkxFX1Q7CisvKiBGb3IgV0RUX0NNRF9TRVRfRVhUX1BPTCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9CT09MIGZnSU9IaWdoOwkJLy8gVFJVRTogSU8gaGlnaCwgRkFMU0U6IElPIGxvdworfSBXRFRfQ1RSTF9TRVRfRVhUX1BPTF9UOworLyogRm9yIFdEVF9DTURfU0VUX0VYVF9SRVNFVCBjb21tYW5kLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9CT09MIGZnRW5hYmxlOwkJLy8gVFJVRTogR2VuZXJhdGUgcmVzZXQgc2lnbmFsLCBGQUxTRTogRG8gTk9UIGdlbmVyYXRlIHJlc2V0IHNpZ25hbAorfSBXRFRfQ1RSTF9TRVRfRVhUX1JFU0VUX1Q7CisvKiBGb3IgV0RUX0NNRF9TRVRfVkFMVUUgY29tbWFuZC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBEQ0xfVUlOVDE2IHUyVmFsdWU7CQkvLyBTZXQgV0RUIGNvdW50IGRvd24gdmFsdWUsIHRoZSB1bml0IGlzIDE1LjZtcworfSBXRFRfQ1RSTF9TRVRfVkFMVUVfVDsKKy8qIEZvciBXRFRfQ01EX1JFU1RBUlQgY29tbWFuZC4gKi8KKy8vIFdEVF9DTURfUkVTVEFSVCBkb2VzIE5PVCBuZWVkIHBhcmFtZXRlcnMKKy8qIEZvciBXRFRfQ01EX0RSVl9SRVNFVCBjb21tYW5kLiAqLworLy8gV0RUX0NNRF9EUlZfUkVTRVQgZG9lcyBOT1QgbmVlZCBwYXJhbWV0ZXJzCisvKiBGb3IgV0RUX0NNRF9BQk5fUkVTRVQgY29tbWFuZC4gKi8KKy8vIFdEVF9DTURfQUJOX1JFU0VUIGRvZXMgTk9UIG5lZWQgcGFyYW1ldGVycworLyogRm9yIFdEVF9DTURfSVJRIGNvbW1hbmQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgRENMX0JPT0wgZmdFbmFibGU7CQkvLyBUUlVFOiBFbmFibGUgaW50ZXJydXB0IGluc3RyZWFkIG9mIGdlbmVyYXRpbmcgcmVzZXQsIEZBTFNFOiBEbyBOT1QgZW5hYmxlIGludGVycnVwdAorfSBXRFRfQ1RSTF9JUlFfVDsKKy8qRm9yIFdEVF9DTURfRU5BQkxFX0RFQlVHIGNvbW1hbmQqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIERDTF9CT09MIGZnRW5hYmxlOwkvL2VuYWJsZSBvciBkaXNhYmxlIGRlYnVnCit9V0RUX0NUUkxfREVCVUdfVDsKKworI2lmZGVmIF9fQlVJTERfRE9NX18KKy8qVGhlIEdQSU8gY29tbWFuZCBwcmFybWV0ZXIgZGF0YSBzdHJ1Y3R1cmUgZm9yIGVhY2ggY29tbWFuZC4gdGhhdCdzIGVudW0gaW4gaW4gRENMX0NUUkxfREFUQV9UKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBXRFRfQ1RSTF9FTkFCTEVfVCByV0RURW5hYmxlOyAgCQkJCQkgLypkYXRhIHN0cnVjdHVyZSBmb3IgV0RUX0NNRF9FTkFCTEUgY29udHJvbCBjb21tYW5kICovCisgICBXRFRfQ1RSTF9TRVRfRVhUX1BPTF9UIHJXRFRTZXRFeHRQb2w7IAkJIC8qZGF0YSBzdHJ1Y3R1cmUgZm9yIFdEVF9DTURfU0VUX0VYVF9QT0wgY29udHJvbCBjb21tYW5kICovCisgICBXRFRfQ1RSTF9TRVRfRVhUX1JFU0VUX1QgcldEVFNldEV4dFJlc2V0OyAvKmRhdGEgc3RydWN0dXJlIGZvciBXRFRfQ01EX1NFVF9FWFRfUkVTRVQgY29udHJvbCBjb21tYW5kICovCisgICBXRFRfQ1RSTF9TRVRfVkFMVUVfVCByV0RUU2V0VmFsdWU7IAkJCSAvKmRhdGEgc3RydWN0dXJlIGZvciBXRFRfQ01EX1NFVF9WQUxVRSBjb250cm9sIGNvbW1hbmQgKi8KKyAgIFdEVF9DVFJMX0lSUV9UIHJXRFRJUlE7CQkJCQkJCQkJIC8qZGF0YSBzdHJ1Y3R1cmUgZm9yIFdEVF9DTURfSVJRIGNvbnRyb2wgY29tbWFuZCAqLworICAgV0RUX0NUUkxfREVCVUdfVCByV0RURGVidWc7CQkJCQkJCSAvKmRhdGEgc3RydWN0dXJlIGZvciBXRFRfQ01EX0VOQUJMRV9ERUJVRyBjb250cm9sIGNvbW1hbmQgKi8KK31EQ0xfQ1RSTF9EQVRBX1Q7CisjZWxzZQorI2RlZmluZSBXRFRfQ1RSTFMgXAorICAgV0RUX0NUUkxfRU5BQkxFX1QgcldEVEVuYWJsZTsgXAorICAgV0RUX0NUUkxfU0VUX0VYVF9QT0xfVCByV0RUU2V0RXh0UG9sOyBcCisgICBXRFRfQ1RSTF9TRVRfRVhUX1JFU0VUX1QgcldEVFNldEV4dFJlc2V0OyBcCisgICBXRFRfQ1RSTF9TRVRfVkFMVUVfVCByV0RUU2V0VmFsdWU7IFwKKyAgIFdEVF9DVFJMX0lSUV9UIHJXRFRJUlE7CVwKKyAgIFdEVF9DVFJMX0RFQlVHX1QgcldEVERlYnVnOyBcCisgICBXRFRfQ1RSTF9HRVRfUlNUSU5URVJWQUxfVCByUnN0VmFsdWU7CisjZW5kaWYKKworI2VuZGlmIC8vICNpZm5kZWYgX19EQ0xfSTJDX0hfU1RSVUNUX18KKyNlbmRpZiAvLyAjaWZkZWYgRENMX0RFRklOSVRJT05fU1RSVUNUCisKKworI2lmZGVmIERDTF9ERUZJTklUSU9OX1BST1RPVFlQRQorI2lmbmRlZiBfX0RDTF9XRFRfSF9QUk9UT1RZUEVfXworI2RlZmluZSBfX0RDTF9XRFRfSF9QUk9UT1RZUEVfXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsV0RUX0luaXRpYWxpemUKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gaW5pdGlhbGl6ZSBXRFQgbW9kdWxlCisqCisqIFBBUkFNRVRFUlMKKyogIE5vbmUKKyoKKyogUkVUVVJOIFZBTFVFUworKiAgU1RBVFVTX09LCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsV0RUX0luaXRpYWxpemUodm9pZCk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsV0RUX09wZW4KKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gb3BlbiB0aGUgV0RUIG1vZHVsZSBhbmQgcmV0dXJuIGEgaGFuZGxlCisqCisqIFBBUkFNRVRFUlMKKyogIGRldjogb25seSB2YWxpZCBmb3IgRENMX1dEVAorKiAgZmxhZ3M6IG5vIHNlcGNpYWwgZmxhZ3MgaXMgbmVlZGVkLiBQbGVhc2UgdXNlIEZMQUdTX05PTkUKKyoKKyogUkVUVVJOIFZBTFVFUworKiAgRENMX0hBTkRMRV9JTlZBTElEOiBPcGVuIGZhaWxlZC4KKyogIG90aGVyIHZhbHVlOiBhIHZhbGlkIGhhbmRsZQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfSEFORExFIERjbFdEVF9PcGVuKERDTF9ERVYgZGV2LCBEQ0xfRkxBR1MgZmxhZ3MpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFdEVF9SZWFkRGF0YQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgV0RUIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTiBWQUxVRVMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsV0RUX1JlYWREYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOIGJ1Zl9sZW4sIERDTF9PUFRJT05TIG9wdGlvbnMpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFdEVF9Xcml0ZURhdGEKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlIFdEVCBtb2R1bGUgbm93LgorKgorKiBQQVJBTUVURVJTCisqCU4vQQorKgorKiBSRVRVUk4gVkFMVUVTCisqCVNUQVRVU19VTlNVUFBPUlRFRAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFdEVF9Xcml0ZURhdGEoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9CVUZGICpidWZmLCBEQ0xfQlVGRl9MRU4gYnVmX2xlbiwgRENMX09QVElPTlMgb3B0aW9ucyk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsV0RUX0NvbmZpZ3VyZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgV0RUIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTiBWQUxVRVMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIERDTF9TVEFUVVMgRGNsV0RUX0NvbmZpZ3VyZShEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NPTkZJR1VSRV9UICpjb25maWd1cmUpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFdEVF9SZWdpc3RlckNhbGxiYWNrCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIHNldCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIFdEVCBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogdGhlIHJldHVybmVkIGhhbmRsZSB2YWx1ZSBvZiBEY2xXRFRfT3BlbgorKiAgZXZlbnQ6IFN1cHBvcnRlZCBldmVudHM6CisqICAgICAgICAgRVZFTlRfV0RUX1RJTUVPVVQ6IFdhdGNoIGRvZyB0aW1lIG91dCBpbnRlcnJ1cHQKKyogIGNhbGxiYWNrOiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHJlZ2lzdGVyZWQgZXZlbnRzCisqCisqIFJFVFVSTiBWQUxVRVMKKyogIFNUQVRVU19PSzogU3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4KKyogIFNUQVRVU19JTlZBTElEX0RDTF9IQU5ETEU6IEl0J3MgYSBpbnZhbGlkIGhhbmRsZS4KKyogIFNUQVRVU19OT1RfT1BFTkVEOiBUaGUgbW9kdWxlIGhhcyBub3QgYmVlbiBvcGVuZWQuCisqICBTVEFUVVNfSU5WQUxJRF9FVkVOVDogVGhlIGV2ZW50IHBhcmFtZXRlciBpcyBpbnZhbGlkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBEQ0xfU1RBVFVTIERjbFdEVF9SZWdpc3RlckNhbGxiYWNrKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfRVZFTlQgZXZlbnQsIFBGTl9EQ0xfQ0FMTEJBQ0sgY2FsbGJhY2spOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFdEVF9Db250cm9sCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIHNlbmQgY29tbWFuZCB0byBjb250cm9sIHRoZSBXRFQgbW9kdWxlLgorKgorKiBQQVJBTUVURVJTCisqICBoYW5kbGU6IFRoZSBoYW5kbGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBEY2xXRFRfT3BlbgorKiAgY21kOiBhIGNvbnRyb2wgY29tbWFuZCBmb3IgV0RUIG1vZHVsZQorKiAgICAgICAgICAxLiBXRFRfQ01EX0VOQUJMRTogdG8gZW5hYmxlL2Rpc2FibGUgV0RUCisqICAgICAgICAgIDIuIFdEVF9DTURfU0VUX0VYVF9QT0w6IHRvIHNldCBwbG9hcml0eSBvZiBleHRlcm5hbCBwaW4gd2hlbiBXRFQgZXhwaXJlZAorKiAgICAgICAgICAzLiBXRFRfQ01EX1NFVF9FWFRfUkVTRVQ6IHRvIGdlbmVyYXRlIGFuIGV4dGVybmFsIHdhdGNoZG9nIHJlc2V0IHNpZ25hbCB3aGVuIFdEVCBleHBpcmVkCisqICAgICAgICAgIDQuIFdEVF9DTURfU0VUX1ZBTFVFOiB0byBzZXQgV0RUIGNvdW50IHZhbHVlCisqICAgICAgICAgIDUgIFdEVF9DTURfUkVTVEFSVDogdG8gcmVzdGFydCBjb3VudGVyCisqICAgICAgICAgIDYuIFdEVF9DTURfRFJWX1JFU0VUOiB0byByZXNldCBkZXZpY2UKKyogICAgICAgICAgNy4gV0RUX0NNRF9BQk5fUkVTRVQ6IHRvIHJlc2V0IGRldmljZSB3aXRoIGFibm9ybWFsIGZsYWcgc2V0IHRvIGluZGljYXRlIGl0IGlzIGEgYWJub3JtYWwgcmVzZXQKKyogICAgICAgICAgOC4gV0RUX0NNRF9JUlE6IHRvIGdlbmVyYXRlIGludGVycnVwdCBpbnN0ZWFkIG9mIHJlc2V0aW5nIGRldmljZQorKiAgZGF0YTogVGhlIGRhdGEgb2YgdGhlIGNvbnRyb2wgY29tbWFuZAorKiAgICAgICAgICAxLiBXRFRfQ01EX0VOQUJMRTogcG9pbnRlciB0byBhIFdEVF9DVFJMX0VOQUJMRV9UIHN0cnVjdHVyZQorKiAgICAgICAgICAyLiBXRFRfQ01EX1NFVF9FWFRfUE9MOiBwb2ludGVyIHRvIGEgV0RUX0NUUkxfU0VUX0VYVF9QT0xfVCBzdHJ1Y3R1cmUKKyogICAgICAgICAgMy4gV0RUX0NNRF9TRVRfRVhUX1JFU0VUOiBwb2ludGVyIHRvIGEgV0RUX0NUUkxfU0VUX0VYVF9SRVNFVF9UIHN0cnVjdHVyZQorKiAgICAgICAgICA0LiBXRFRfQ01EX1NFVF9WQUxVRTogcG9pbnRlciB0byBhIFdEVF9DVFJMX1NFVF9WQUxVRV9UIHN0cnVjdHVyZQorKiAgICAgICAgICA1ICBXRFRfQ01EX1JFU1RBUlQ6IEEgbnVsbCBwb2ludGVyCisqICAgICAgICAgIDYuIFdEVF9DTURfRFJWX1JFU0VUOiBBIG51bGwgcG9pbnRlcgorKiAgICAgICAgICA3LiBXRFRfQ01EX0FCTl9SRVNFVDogQSBudWxsIHBvaW50ZXIKKyogICAgICAgICAgOC4gV0RUX0NNRF9JUlE6IHBvaW50ZXIgdG8gYSBXRFRfQ1RSTF9JUlFfVCBzdHJ1Y3R1cmUKKyoKKyogUkVUVVJOIFZBTFVFUworKiAgU1RBVFVTX09LOiBjb21tYW5kIGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyogIFNUQVRVU19GQUlMOiBjb21tYW5kIGlzIGZhaWxlZC4KKyogIFNUQVRVU19JTlZBTElEX0NNRDogSXQncyBhIGludmFsaWQgY29tbWFuZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xXRFRfQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xXRFRfQ2xvc2UKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gY2xvc2UgdGhlIFdEVCBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogdGhlIHJldHVybmVkIGhhbmRsZSB2YWx1ZSBvZiBEY2xXRFRfT3BlbgorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0sKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gRENMX1NUQVRVUyBEY2xXRFRfQ2xvc2UoRENMX0hBTkRMRSBoYW5kbGUpOworCisKKyNlbmRpZiAvLyAjaWZuZGVmIF9fRENMX1dEVF9IX1BST1RPVFlQRV9fCisjZW5kaWYgLy8gI2lmZGVmIERDTF9ERUZJTklUSU9OX1BST1RPVFlQRQorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kcnZfY29tbS5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kcnZfY29tbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMzE5YjEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2Rydl9jb21tLmgKQEAgLTAsMCArMSwxMTI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgZHJ2X2NvbW0uaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpX1NvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGludGVuZHMgZm9yIGRyaXZlciBjb21tb24gaW50ZXJmYWNlLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgQ2xlYXJDYXNlLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAkTG9nJAorICoKKyAqIDA3IDE3IDIwMTkgd2VpLWRlLmNoZW4KKyAqIFtNT0xZMDA0MjI4MDBdIFtCdWlsZCBFcnJvcl1bTUVSQ1VSWV0gQWRkIE1lcmN1cnkgcmVsYXRlZCBkZWZpbml0aW9uCisgKiBBZGQgZGVmaW5pdGlvbiBvZiBNRVJDVVJZIGFuZCBNVDYyOTdQIHRvIHNvbHZlIGJ1aWxkIGVycm9yIG9uIE1FUkNVUlkuREVWCisgKgorICogMDUgMDIgMjAxOSB3ZWktZGUuY2hlbgorICogW01PTFkwMDM5Njg2OV0gW01PRElTIEhXIENvcHJvXSBXb3JrIG9uIG1ha2luZyBNb2RpcyB0byBydW4gd2l0aCBFU0wgSFcgbW9kZWxzIGFuZCBVcGxhbmUgd2l0aCBFU0wKKyAqIE1lcmdlIGNvZGUgb2YgRVNMX01BU0VfR0VOOTcgYWNjb3JkaW5nIHRvIE1VSy9XQ1MvQ1REL01UQTQgSXJlbmV1c3ogWmllJ3MgcmVxdWVzdAorICoKKyAqIDA2IDIwIDIwMTggc3RldmVuLXl4Lmh1CisgKiBbTU9MWTAwMzMzNzc1XVtVTU9MWUVdIDk1IHhMMVNpbSBidWlsZCB3YXJuaW5nIGZpeC4KKyAqCisgKiAwMyAxNCAyMDE4IHdlaS1kZS5jaGVuCisgKiBbTU9MWTAwMzA5MjQ0XSBbNjI5N10gQWRkIE1UNjI5NyByZWxhdGVkIGRlZmluaXRpb24KKyAqIEFkZCBNVDYyOTcgcmVsYXRlZCBkZWZpbml0aW9uCisgKgorICogMDIgMjIgMjAxOCB3ZWktZGUuY2hlbgorICogW01PTFkwMDMwOTI0NF0gWzYyOTddIEFkZCBNVDYyOTcgcmVsYXRlZCBkZWZpbml0aW9uCisgKiAJCisgKiAJQWRkIE1UNjI5NyByZWxhdGVkIGRlZmluaXRpb24KKyAqCisgKiAwMiAyMiAyMDE4IHdlaS1kZS5jaGVuCisgKiBbTU9MWTAwMzA5MjQ0XSBbNjI5N10gQWRkIE1UNjI5NyByZWxhdGVkIGRlZmluaXRpb24KKyAqIEFkZCBNVDYyOTcgcmVsYXRlZCBkZWZpbml0aW9uCisgKgorICogMTIgMTUgMjAxNyB3ZWktZGUuY2hlbgorICogW01PTFkwMDI5NjU4MV0gW0dlbjk1XSBhZGQgTVQzOTY3IHJlbGF0ZWQgZGVmaW5pdGlvbgorICogQWRkIE1UMzk2NyByZWxhdGVkIGRlZmluaXRpb24KKyAqCisgKiAxMiAxNSAyMDE3IHdlaS1kZS5jaGVuCisgKiBbTU9MWTAwMjk2NTgxXSBbR2VuOTVdIGFkZCBNVDM5NjcgcmVsYXRlZCBkZWZpbml0aW9uCisgKiBBZGQgTVQzOTY3IHJlbGF0ZWQgZGVmaW5pdGlvbgorICoKKyAqIDEwIDMwIDIwMTcgd2VpLWRlLmNoZW4KKyAqIFtNT0xZMDAyODYwMzhdIFtNVDY3NjVdIEFkZCBkZWZpbml0aW9uIG9mIE1UNjc2NQorICogQWRkIE1UNjc2NSAoQ2VydmlubykgRGVmaW5pdGlvbgorICoKKyAqIDA4IDI0IDIwMTcgd2VpLWRlLmNoZW4KKyAqIFtNT0xZMDAyNzM0OTNdIFtVTU9MWUFdIEFkZCBkZWZpbml0aW9uIG9mIE1UNjc3MQorICogQWRkIE1UNjc3MSAoU3lsdmlhKSBEZWZpbml0aW9uCisgKgorICogMDYgMDggMjAxNyB3ZWktZGUuY2hlbgorICogW01PTFkwMDI0MzgwMl0gW01UNjczOV0gQWRkIGRlZmluaXRpb24gb2YgTVQ2NzM5CisgKiBBZGQgTVQ2NzM5IHJlbGF0ZWQgZGVmaW5pdGlvbgorICoKKyAqIDA1IDI2IDIwMTcgd2VpLWRlLmNoZW4KKyAqIFtNT0xZMDAyNTMwODZdIFtOZWVkIFBhdGNoXShMVEUgZG9tYWluKSBVTU9MWUEgYnVpbGQgZXJyb3IgZm9yIE1UNjI5NU1fRlBHQShMMVNfTDFESVNBQkxFKQorICogQWRkIE1UNjI5NU0gZGVmaW5pdGlvbgorICoKKyAqIDA0IDIwIDIwMTcgd2VpLWRlLmNoZW4KKyAqIFtNT0xZMDAyNDM3MDZdIFtNVDYyOTVNXSBBZGQgTVQ2Mjk1TSByZWxhdGVkIGRlZmluaXRpb24KKyAqIEFkZCBNVDYyOTUgcmVsYXRlZCBkZWZpbml0aW9uCisgKgorICogMDYgMTYgMjAxNiB3ZWktZGUuY2hlbgorICogW01PTFkwMDE4NDcyNV0gVU1PTFlBIEVTTC9NQVNFIHBvcnRpbmcKKyAqIGFkZCBfX0VTTF9NQVNFX18gZGVmaW5pdGlvbiBkdWUgdG8gRVNMIGxvYWQKKyAqIAlSZXF1ZXN0IGJ5IFNTRV9TUzMgQ2hpbi1DaGllaCBIdW5nCisgKgorICogMDMgMjkgMjAxNiB3ZWktZGUuY2hlbgorICogW01PTFkwMDE3MTY2NF0gW1VNT0xZQV0gQWRkIGRlZmluaXRpb24gb2YgTVQ2NzYzCisgKiBBZGQgZGVmaW5pdGlvbiBvZiBNVDY3NjMKKyAqCisgKiAwMSAwNiAyMDE2IHdlaS1kZS5jaGVuCisgKiBbTU9MWTAwMTU2MTMyXSBbRUxCUlVTXSBBZGQgRVNMIGRlZmluaXRpb24gdG8gRFJWX1dyaXRlUmVnMzJfTlBXX1JCCisgKiBBZGQgRVNMIGRlZmluaXRpb24gdG8gRFJWX1dyaXRlUmVnMzJfTlBXX1JCIGZvciBmYWtlIEhXIGluIEVTTAorICoKKyAqIDEyIDA5IDIwMTUgd2VpLWRlLmNoZW4KKyAqIFtNT0xZMDAxNTEwMTFdIFs2MjkyXSBNb2RpZnkgTlBXX3dyaXRlIEFQSSB0byBmaXQgbmV3IENQVSAmIGJ1cyBhcmNoaXRlY3R1cmUKKyAqIE1vZGlmeSBOUFdfd3JpdGUgQVBJIG9mIEVsYnJ1cyB0byBmaXQgbmV3IENQVSAmIGJ1cyBhcmNoaXRlY3R1cmUKKyAqCisgKiAxMSAzMCAyMDE1IHdlaS1kZS5jaGVuCisgKiBbTU9MWTAwMTUxMDExXSBbNjI5Ml0gTW9kaWZ5IE5QV193cml0ZSBBUEkgdG8gZml0IG5ldyBDUFUgJiBidXMgYXJjaGl0ZWN0dXJlCisgKiBNb2RpZnkgTlBXX3dyaXRlIEFQSSBvZiBFbGJydXMgdG8gZml0IG5ldyBDUFUgJiBidXMgYXJjaGl0ZWN0dXJlCisgKgorICogMDkgMjIgMjAxNSB3ZWktZGUuY2hlbgorICogW01PTFkwMDEzNzEzNF0gW1VNT0xZXSBBZGQgZHJpdmVyIGZlYXR1cmUgZmlsZXMgZm9yIEVsYnJ1cworICogVGVtcCBhZGQgRUxCUlVTIGRlZmluaXRpb24gZm9yIE5QVyByZWxhdGVkIGZ1bmN0aW9uIGZvciBicmluZy11cCAoc3RpbGwgbmVlZCBvcHRpbWl6ZSBpbiBmdXR1cmUpCisgKgorICogMDYgMjMgMjAxNSB3ZWktZGUuY2hlbgorICogW01PTFkwMDEyMjkxOF0gW01UNjc1NV1bQlJJTkdVUF9GSVJTVENBTExdW1NTXQorICogQWRkIE1UNjc1NSAmIE1UNjc5NyBkZWZpbml0aW9uIG9uIGRydl9jb21tLmgKKyAqCisgKiAwMiAwNiAyMDE1IHdlaS1kZS5jaGVuCisgKiBbTU9MWTAwMDk0OTM5XSBNQVNFIFVNT0xZIGNoZWNrIGluCisgKiBNZXJnZSAzRyBNQVNFIGNoYW5nZSB0byBVTU9MWSB0cnVuayBkdWUgdG8gSkwgSHNpYW8ncyByZXF1ZXN0CisgKgorICogMTAgMDEgMjAxNCB3ZWktZGUuY2hlbgorICogW01PTFkwMDA4MDE0MV0gQ2hhbmdlIG1hY3JvIG9mIERSVl9Xcml0ZVJlZzMyX05QV19SQiBvZiBUSzYyOTEKKyAqIAlDaGFuZ2UgbWFjcm8gb2YgRFJWX1dyaXRlUmVnMzJfTlBXX1JCIGJ5IFRLNjI5MSBkdWUgdG8gbWVtb3J5IG1hcCBvZiBUSzYyOTEKKyAqIAl1MXJ3ZHV1YHdocW52cGdobHFnfHJgbChhYCtmbWBrCisgKgorICogMTIgMTEgMjAxMyBjaGluLWNoaWVoLmh1bmcKKyAqIFtNT0xZMDAwNDU3MDRdIEluaXQgTVQ2NTk1IGNvbW1vbiBkcml2ZXIKKyAqIHVwZGF0ZSBOUFcgRHJpdmVyIEFQSSBmb3IgTVQ2NTk1CisgKgorICogMTIgMTAgMjAxMiBwby5odQorICogW01PTFkwMDAwNzI1N10gW01vZGlzXSBNb2Rpcz8/Pz9KTWluR1c/QD9jb21waWVyP0g/P2xpbnV4IGJ1aWxkCisgKiAuCisgKgorICogMTEgMzAgMjAxMiBhbnNlbC5saWFvCisgKiBbTU9MWTAwMDA2NTc1XSBBZGQgVUFSVC9IRE1BIERyaXZlcgorICogYWRkIGRiZ19mbHVzaCBhbmQgY29ycmVzcG9uZGluZyBkcnZ0ZXN0CisgKiAKKyAqIDExIDAyIDIwMTIgY2hpbi1jaGllaC5odW5nCisgKiBbTU9MWTAwMDA1MzIyXSBUQVRBS0EgbWVyZ2UgdG8gTU9MWQorICogSW50ZWdyYXRpb24gY2hhbmdlKG5vbi1kZXZkcnYvbm9uLXN5c19kcnYgZHJpdmVyIHBhcnQtMikKKyAqCisgKiAwNiAxMSAyMDEyIGp5LmxhbgorICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAwNSAyNCAyMDEyIHdjcHVzZXJfaW50ZWdyYXRvcgorICogcmVtb3ZlZCEKKyAqIFFpbmdodWEgWXUgY2hlY2sgaW4gZ2xvYmFsIGVudW0gKE1TRyAmIFNBUCkgYXQgbW9kZW1fZGV2LgorICoKKyAqIDA1IDI0IDIwMTIgd2NwdXNlcl9pbnRlZ3JhdG9yCisgKiByZW1vdmVkIQorICogUWluZ2h1YSBZdSBjaGVjayBpbiBnbG9iYWwgZW51bSAoTVNHICYgU0FQKSBhdCBtb2RlbV9kZXYuCisgKgorICogMDUgMjQgMjAxMiB3Y3B1c2VyX2ludGVncmF0b3IKKyAqIHJlbW92ZWQhCisgKiBRaW5naHVhIFl1IGNoZWNrIGluIGdsb2JhbCBlbnVtIChNU0cgJiBTQVApIGF0IG1vZGVtX2Rldi4KKyAqCisgKiAwMyAxNSAyMDEyIGFyZ3VzLmxpbgorICogcmVtb3ZlZCEKKyAqIGZpeCBidWlsZCBlcnJvcgorICoKKyAqIDAzIDE1IDIwMTIgYXJndXMubGluCisgKiByZW1vdmVkIQorICogZml4IGJ1aWxkIGVycm9yCisgKgorICogMTEgMTEgMjAxMSBqeS5sYW4KKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDIgMTYgMjAxMSBndW94aW4uaG9uZworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAxMiAyMyAyMDEwIGFuZGVyc29uLnRzYWkKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTIgMTYgMjAxMCBzaW1vbi5zaGloCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDExIDI1IDIwMTAgc2ltb24uc2hpaAorICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAxMCAxOCAyMDEwIHNpbW9uLnNoaWgKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDkgMjQgMjAxMCBzaW1vbi5zaGloCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiBhZGQgTkZJIGJ1cyBtdXRleAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqICAgIFJldiAxLjI0ICAgSnVsIDExIDIwMDUgMTc6NDE6NDggICBtdGswMDI4OAorICogYWRkIERFVklDRV9JRAorICogUmVzb2x1dGlvbiBmb3IgMTE5MjE6IFtMUFdSXVtBZGQgZmVhdHVyZV1BZGQgTFBXUiBtb2R1bGUKKyAqCisgKiAgICBSZXYgMS4yMyAgIDIwIEp1biAyMDA1IDIwOjAwOjMyICAgbXRrMDA1MDIKKyAqIGFkZCBNVDYyMjYvTVQ2MjI3IGNvbXBpbGUgb3B0aW9uCisgKiBSZXNvbHV0aW9uIGZvciAxMTYxNzogW0RSVl1bTmV3IEZlYXR1cmVdQWRkIE1UNjIyNi9NNjIyNyBjb21waWxlIG9wdGlvbgorICoKKyAqICAgIFJldiAxLjIyICAgTWF5IDE3IDIwMDUgMDA6Mjk6MTAgICBCTV9UcnVuaworICogS2FybG9zOgorICogYWRkIGNvcHlyaWdodCBhbmQgZGlzY2xhaW1lciBzdGF0ZW1lbnQKKyAqCisgKiAgICBSZXYgMS4yMSAgIE1hciAxOSAyMDA1IDE0OjQ5OjM0ICAgbXRrMDA1MDIKKyAqIGFkZCA2MjI4IGNvbXBpbGUgb3B0aW9uCisgKiBSZXNvbHV0aW9uIGZvciAxMDMwNDogW0RyaXJ2ZXJdW05ldyBGZWFydHVyZV1TdXBwb3J0IE1UNjIyOAorICoKKyAqICAgIFJldiAxLjIwICAgSmFuIDE4IDIwMDUgMDA6MzQ6MjIgICBCTQorICogYXBwZW5kIG5ldyBsaW5lIGluIFcwNS4wNAorICoKKyAqICAgIFJldiAxLjE5ICAgRGVjIDEwIDIwMDQgMTI6MTI6MTggICBtdGswMDQ3OQorICogQWRkIHBhcmVudGhlc2VzIGZvciB0aGUgcGFyYW1ldGVycyBvZiBtYWNybyAoKQorICogUmVzb2x1dGlvbiBmb3IgOTA4OTogW0Rydl1bT3B0aW1pemF0aW9uXUFkZCBwYXJlbnRoZXNlcyBmb3IgdGhlIHBhcmFtZXRlcnMgb2YgbWFjcm8KKyAqCisgKiAgICBSZXYgMS4xOCAgIE9jdCAxMiAyMDA0IDExOjM0OjEyICAgbXRrMDA0NzkKKyAqIEFkZCBjb21waWxlIG9wdGlvbiBvZiBNVDYyMTcKKyAqIFJlc29sdXRpb24gZm9yIDgxOTU6IFtEcnZdW05ld0ZlYXR1cmVdQWRkIGNvbXBpbGUgb3B0aW9uIG9mIE1UNjIxNworICoKKyAqICAgIFJldiAxLjE3ICAgTWF5IDEzIDIwMDQgMjI6MTU6NDAgICBtdGswMDQ3OQorICogQWRkIGZvciBVU0IgY2hhcmdpbmcKKyAqIFJlc29sdXRpb24gZm9yIDU0MTk6IFtEcnZdW0FkZEZlYXR1cmVdQWRkIFVTQiBjaGFyZ2luZyBmdW5jdGlvbgorICoKKyAqICAgIFJldiAxLjE2ICAgTWFyIDI1IDIwMDQgMTU6MDE6MTYgICBtdGswMDI4OAorICogQWRkIGRyaXZlciB0aW1pbmcgZGVidWcgZnVuY3Rpb25zLgorICogUmVzb2x1dGlvbiBmb3IgNDQ5NjogW0RSVl1bQWRkIEZlYXR1cmVdYWRkIGRyaXZlciB0aW1pbmcgZGVidWcgZnVuY3Rpb25zCisgKgorICogICAgUmV2IDEuMTUgICBNYXIgMTIgMjAwNCAxNDowMDozMCAgIG10azAwNTAyCisgKiBkZWZpbmUgYSBtYWNybyB0byBzZW5kIG1zZworICogUmVzb2x1dGlvbiBmb3IgNDIzMTogW0JNVF1bTmV3IEZlYXR1cmVdYWRkIGEgZnVuY3Rpb24gdG8gdHJhbnNsYXRlIHZvbHRhZ2UgdG8gdGVtcGVyYXR1cmUKKyAqCisgKiAgICBSZXYgMS4xNCAgIEZlYiAyNyAyMDA0IDIwOjE0OjUyICAgbXRrMDA1MDIKKyAqIGFkZCA2MjE5IGNvbXBpbHQgb3B0aW9uCisgKiBSZXNvbHV0aW9uIGZvciA0MDA1OiBbRHJpdmVyXVtOZXcgRmVhdHVyZV1hZGQgNjIxOSBjb21waWxlIG9wdGlvbgorICoKKyAqICAgIFJldiAxLjEzICAgRmViIDE5IDIwMDQgMTk6NTE6MzAgICBtdGswMDUwMgorICogdG8gc29sdmUgYXNzZXJ0IGR1cmluZyBSVEMgcG93ZXIgb24KKyAqIFJlc29sdXRpb24gZm9yIDM5NTY6IFtEcml2ZXJdW05ldyBmZWF0dXJlXXNvbHZlIGFzc2VydCBkdXJpbmcgUlRDIHBvd2VyIG9uCisgKgorICogICAgUmV2IDEuMTIgICBGZWIgMDUgMjAwNCAxODo1NzoyOCAgIG10azAwMjg4CisgKiBhZGQgRFJWX0NPTU1fUkVHMl9VU0JNU19QV1JPTiBkZWZpbml0aW9uCisgKiBSZXNvbHV0aW9uIGZvciAzODM5OiBbTU1JIFVTQiBEUlYgTDQgVUVNIFRTVCBCTVRdIFtOZXcgRmVhdHVyZV0gVVNCIGRldmljZSBpbnRlZ3JhdGlvbgorICoKKyAqICAgIFJldiAxLjExICAgRGVjIDI1IDIwMDMgMTA6MDM6MzYgICBtdGswMDQ3OQorICogUmVtb3ZlIGNvbXBpbGUgb3B0aW9uIG9mIE1UNjIwNUIgZm9yIERSVl9DT01NX1JFRzJfTk9STUFMX1JFU0VUIGFuZCBEUlZfQ09NTV9SRUcyX0NIUlBXUk9OLgorICogUmVzb2x1dGlvbiBmb3IgMzU4ODogW0Rydl1bQnVnRml4XVJlbW92ZSBjb21waWxlIG9wdGlvbiBvZiBNVDYyMDVCIGZvciBEUlZfQ09NTV9SRUcyX05PUk1BTF9SRVNFVCBhbmQgRFJWX0NPTU1fUkVHMl9DSFJQV1JPTi4KKyAqCisgKiAgICBSZXYgMS4xMCAgIE9jdCAzMSAyMDAzIDE1OjI3OjI0ICAgbXRrMDA1MDIKKyAqIGFkZCA2MjE4QiBjb21waWxlIG9wdGlvbgorICogUmVzb2x1dGlvbiBmb3IgMzIzMzogW0RyaXZlcl1bTmV3IEZlYXR1cmVdIEFkZCA2MjE4QiBjb21waWxlIG9wdGlvbgorICoKKyAqICAgIFJldiAxLjggICBPY3QgMDIgMjAwMyAyMTowMToyNiAgIG10azAwMjg4CisgKiBhZGQgdGhlIHBvd2VyIG9uIGNhdXNlIGJpdCBpbiBEUlZfQ09NTV9SRUcyIHJlZ2lzdGVyCisgKiBSZXNvbHV0aW9uIGZvciAzMDQ1OiBbRFJWXVtCdWdmaXhdQWRqdXN0IHRoZSBwcmlvcml0eSBvZiBwb3dlciBvbiBjYXVzZQorICoKKyAqICAgIFJldiAxLjcgICBKdW4gMTggMjAwMyAyMjozNzoyOCAgIG10azAwMjg4CisgKiBEcml2ZXIgY3VzdG9taXplCisgKiBSZXNvbHV0aW9uIGZvciAyMDUyOiBbRFJWXVtDdXN0b21pemVdRHJpdmVyIGN1c3RvbWl6ZSBmb3IgZGlmZmVyZW50IHJlcXVpcmVtZW50cworICoKKyAqICAgIFJldiAxLjYgICBKdW4gMTIgMjAwMyAxNjoxMDoyMiAgIG10azAwMjg4CisgKiBhZGQgTVQ2MjE4IGRlZmluaXRpb25zCisgKiBSZXNvbHV0aW9uIGZvciAxOTUyOiBbRHJpdmVyc11bYWRkIEZlYXR1cmVdTVQ2MjE4IFBlcmlwaGVyYWxzIGRyaXZlcgorICoKKyAqICAgIFJldiAxLjUgICBBcHIgMTYgMjAwMyAyMTo0MzoyNCAgIG10azAwMjg4CisgKiBhZGQgIigpIiBpbiBEUlZfUmVnJkRSVl9Xcml0ZVJlZyBtYWNybworICogUmVzb2x1dGlvbiBmb3IgMTU0NzogW0RyaXZlcnNdW0FkZCBGZWF0dXJlXUFkZCBNVDYyMDVCIGRyaXZlcnMKKyAqCisgKiAgICBSZXYgMS40ICAgRmViIDI3IDIwMDMgMTY6NDE6NDggICBtdGswMDI4OAorICogYWRkIGEgbWFjcm8oRFJWX0J1aWxkUHJpbWl0aXZlKSB0byBzZW5kIHByaW1pdGl2ZSBmb3IgZHJpdmVyLgorICogUmVzb2x1dGlvbiBmb3IgMTA5ODogQWRkIEFjY2Vzc29yeShBVVgpIFRhc2sgdG8gTUFVSSBwcm9qZWN0CisgKgorICogICAgUmV2IDEuMyAgIEZlYiAyMSAyMDAzIDE1OjQwOjAyICAgbXRrMDAyODgKKyAqIGV4dGVybiBkYmdfcHJpbnQgZnVuY3Rpb24sIHdoZW4gRFJWX0RFQlVHIGRlZmluZQorICogUmVzb2x1dGlvbiBmb3IgMTAxMTogQ3JlYXRlIEFEQyBzY2hlZHVsZXIKKyAqCisgKiAgICBSZXYgMS4yICAgSmFuIDIzIDIwMDMgMjI6MDM6NDAgICBtdGswMDI4OAorICogcmVtb3ZlIHVubmVjZXNzYXJ5IGNvbW1lbnRzLgorICogUmVzb2x1dGlvbiBmb3IgNDkxOiBCTVQgdGFzayBhbmQgUE1JQyBkcml2ZXIKKyAqCisgKiAgICBSZXYgMS4xICAgRGVjIDE2IDIwMDIgMTE6Mzg6MjggICBtdGswMDI4OAorICogYWRkIGthbF91aW50MTYgaW50byBEUlZfV3JpdGVSZWcgbWFjcm8KKyAqIFJlc29sdXRpb24gZm9yIDk6IFJlYWQvV3JpdGUgUmVnaXN0ZXIgYWNjZXNzCisgKgorICogICAgUmV2IDEuMCAgIE5vdiAzMCAyMDAyIDE5OjQ5OjU4ICAgYWRtaW4KKyAqIEluaXRpYWwgcmV2aXNpb24uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBDbGVhckNhc2UuIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKKyNpZm5kZWYgX19EUlZfQ09NTV9IX18KKyNkZWZpbmUgX19EUlZfQ09NTV9IX18KKworI2lmbmRlZiBfX0NBVEVHT1JZX01PREVNX18KKyNpbmNsdWRlICJkcnZfZmVhdHVyZXMuaCIKKyNlbmRpZiAKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorI2luY2x1ZGUgIm1kX2Rydl9zYXAuaCIKKyNpZm5kZWYgX19DQVRFR09SWV9NT0RFTV9fCisjaW5jbHVkZSAicmVnX2Jhc2UuaCIKKyNlbmRpZiAKKworI2luY2x1ZGUgImthbF90cmFjZS5oIgorI2luY2x1ZGUgInN5bmNfZGF0YS5oIgorCisjaWYgZGVmaW5lZChEUlZfTUlTQ19MT1dfQ09TVF9QUk9KKQorICAgI2RlZmluZSBfX0xPV19DT1NUX1BST0pFQ1RfXworI2VuZGlmCisKKworCit0eXBlZGVmIGVudW0geworICAgIAlpb19sb3c9MCwKKwkgICBpb19oaWdoCit9IElPX2xldmVsOworCisKKwordHlwZWRlZiBlbnVtIHsKKyAgICAJREVWX0RNQT0wLAorICAgIAlERVZfVVNCLAorICAgIAlERVZfR0NVLAorICAgIAlERVZfQ0hFLAorICAgIAlERVZfUFBQLAorICAgIAlERVZfR1BULAorICAgIAlERVZfS1AsCisgICAgCURFVl9HUElPLAorICAgIAlERVZfVUFSVDEsCisgICAgCURFVl9VQVJUMiwKKyAgICAJREVWX1VBUlQzLAorICAgIAlERVZfU0lNLAorICAgIAlERVZfUFdNLAorICAgIAlERVZfUFdNMiwKKyAgICAJREVWX0FMVEVSLAorICAgIAlERVZfTENELAorICAgIAlERVZfTVNEQywKKyAgICAJREVWX1RSQywKKyAgICAJREVWX05GSSwKKyAgICAJREVWX0IyU1BJLAorICAgIAlERVZfSVJEQSwKKyAgICAJREVWX0FEQywKKyAgICAJREVWX1JUQywKKyAgICAJREVWX0RJViwKKyAgICAJREVWX0ZDUywKKyAgICAJREVWX1JaTEIsCisgICAgCURFVl9DUlosCisgICAgCURFVl9UVl9PVVQsCisgICAgCURFVl9JUFAsCisgICAgCURFVl9QTkcsCisgICAgCURFVl9HSUYsCisgICAgCURFVl9HQ01RLAorICAgIAlERVZfRzJELAorICAgIAlERVZfTVA0LAorICAgIAlERVZfSlBFRywKKyAgICAJREVWX1BSWiwKKyAgICAJREVWX1JFU1osCisgICAgCURFVl9JU1AsCisgICAgCURFVl9EQ1QsCisgICAgCURFVl9JTUdETUEsCisgICAgCURFVl9EUlosCisgICAgCURFVl9NU0RDMiwKKyAgICAJREVWX1NJTTIsCisgICAgICBERVZfUk9URE1BLAorICAgICAgREVWX0NBTTEwNE0sCisgICAgICBERVZfTENEMTA0TSwKKyAgICAJREVWX01BWF9JRCwKKwkJREVWX05VTExfSUQgPSAweGZlCit9IERFVklDRV9JRF9FTlVNOworCisKKwordHlwZWRlZiB2b2lkICgqIFZPSURfRlVOQykodm9pZCk7CisKKy8vI2RlZmluZSBfX0RSVl9DT01NX1JFR19EQkdfXworI2lmZGVmIF9fRFJWX0NPTU1fUkVHX0RCR19fCisKKyNkZWZpbmUgTUFYX0RSVl9DT01NX1JFR19EQkdfSU5GT19TSVpFIDIwNDgJLyptdXN0IGJlIDJebiovCisKK3R5cGVkZWYgc3RydWN0eworICAga2FsX3VpbnQ4ICAgICAgIHdyaXRlX2ZsYWc7CisgICBrYWxfdWludDE2ICAgICAgbGluZV9udW1iZXI7CisgICBrYWxfdWludDMyICAgICAgcmVnX2FkZHI7CisgICBrYWxfdWludDMyICAgICAgcmVnX3ZhbHVlOworICAga2FsX3VpbnQzMiAgICAgIHRpbWVfbG9nOworfURSVl9DT01NX1JFR19EQkdfREFUQTsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICBEUlZfQ09NTV9SRUdfREJHX0RBVEEgICAJZGJnX2RhdGFbTUFYX0RSVl9DT01NX1JFR19EQkdfSU5GT19TSVpFXTsKKyAgIGthbF91aW50MTYgICAgIAkJICAgICAgZGJnX2RhdGFfaWR4OworfURSVl9SRUdfREJHX1NUUlVDVDsKKworI2RlZmluZSBEUlZfREJHX1dyaXRlUmVnKGFkZHIsZGF0YSkgICAgZHJ2X3JlZ19kYmdfdHJhY2Vfd3JpdGUxNihfX0xJTkVfXywgYWRkciwgZGF0YSkKKworI2RlZmluZSBEUlZfREJHX1JlZyhhZGRyKSAgICAgIGRydl9yZWdfZGJnX3RyYWNlX3JlYWQxNihfX0xJTkVfXywgYWRkcikKKworI2RlZmluZSBEUlZfREJHX1dyaXRlUmVnMzIoYWRkcixkYXRhKSAgZHJ2X3JlZ19kYmdfdHJhY2Vfd3JpdGUzMihfX0xJTkVfXywgYWRkciwgZGF0YSkKKworI2RlZmluZSBEUlZfREJHX1JlZzMyKGFkZHIpICAgICBkcnZfcmVnX2RiZ190cmFjZV9yZWFkMzIoX19MSU5FX18sIGFkZHIpCisKKyNkZWZpbmUgRFJWX0RCR19Xcml0ZVJlZzgoYWRkcixkYXRhKSAgIGRydl9yZWdfZGJnX3RyYWNlX3dyaXRlOChfX0xJTkVfXywgYWRkciwgZGF0YSkKKworI2RlZmluZSBEUlZfREJHX1JlZzgoYWRkcikgICAgICBkcnZfcmVnX2RiZ190cmFjZV9yZWFkOChfX0xJTkVfXywgYWRkcikKKworI2RlZmluZSBEUlZfREJHX0NsZWFyQml0cyhhZGRyLGRhdGEpICAgICB7XAorICAga2FsX3VpbnQxNiB0ZW1wO1wKKyAgIHRlbXAgPSBEUlZfREJHX1JlZyhhZGRyKTtcCisgICB0ZW1wICY9fihkYXRhKTtcCisgICBEUlZfREJHX1dyaXRlUmVnKGFkZHIsdGVtcCk7XAorfQorCisjZGVmaW5lIERSVl9EQkdfU2V0Qml0cyhhZGRyLGRhdGEpICAgICB7XAorICAga2FsX3VpbnQxNiB0ZW1wO1wKKyAgIHRlbXAgPSBEUlZfREJHX1JlZyhhZGRyKTtcCisgICB0ZW1wIHw9IChkYXRhKTtcCisgICBEUlZfREJHX1dyaXRlUmVnKGFkZHIsdGVtcCk7XAorfQorCisjZGVmaW5lIERSVl9EQkdfU2V0RGF0YShhZGRyLCBiaXRtYXNrLCB2YWx1ZSkgICAgIHtcCisgICBrYWxfdWludDE2IHRlbXA7XAorICAgdGVtcCA9ICh+KGJpdG1hc2spKSAmIERSVl9EQkdfUmVnKGFkZHIpO1wKKyAgIHRlbXAgfD0gKCh2YWx1ZSkgJiAoYml0bWFzaykpO1wKKyAgIERSVl9EQkdfV3JpdGVSZWcoYWRkcix0ZW1wKTtcCit9CisKKyNkZWZpbmUgRFJWX0RCR19DbGVhckJpdHMzMihhZGRyLGRhdGEpICAgICB7XAorICAga2FsX3VpbnQzMiB0ZW1wO1wKKyAgIHRlbXAgPSBEUlZfREJHX1JlZzMyKGFkZHIpO1wKKyAgIHRlbXAgJj1+KGRhdGEpO1wKKyAgIERSVl9EQkdfV3JpdGVSZWczMihhZGRyLHRlbXApO1wKK30KKworI2RlZmluZSBEUlZfREJHX1NldEJpdHMzMihhZGRyLGRhdGEpICAgICB7XAorICAga2FsX3VpbnQzMiB0ZW1wO1wKKyAgIHRlbXAgPSBEUlZfREJHX1JlZzMyKGFkZHIpO1wKKyAgIHRlbXAgfD0gKGRhdGEpO1wKKyAgIERSVl9EQkdfV3JpdGVSZWczMihhZGRyLHRlbXApO1wKK30KKworI2RlZmluZSBEUlZfREJHX1NldERhdGEzMihhZGRyLCBiaXRtYXNrLCB2YWx1ZSkgICAgIHtcCisgICBrYWxfdWludDMyIHRlbXA7XAorICAgdGVtcCA9ICh+KGJpdG1hc2spKSAmIERSVl9EQkdfUmVnMzIoYWRkcik7XAorICAgdGVtcCB8PSAoKHZhbHVlKSAmIChiaXRtYXNrKSk7XAorICAgRFJWX0RCR19Xcml0ZVJlZzMyKGFkZHIsdGVtcCk7XAorfQorCisjZGVmaW5lIERSVl9EQkdfQ2xlYXJCaXRzOChhZGRyLGRhdGEpICAgICB7XAorICAga2FsX3VpbnQ4IHRlbXA7XAorICAgdGVtcCA9IERSVl9EQkdfUmVnOChhZGRyKTtcCisgICB0ZW1wICY9fihkYXRhKTtcCisgICBEUlZfREJHX1dyaXRlUmVnOChhZGRyLHRlbXApO1wKK30KKworI2RlZmluZSBEUlZfREJHX1NldEJpdHM4KGFkZHIsZGF0YSkgICAgIHtcCisgICBrYWxfdWludDggdGVtcDtcCisgICB0ZW1wID0gRFJWX0RCR19SZWc4KGFkZHIpO1wKKyAgIHRlbXAgfD0gKGRhdGEpO1wKKyAgIERSVl9EQkdfV3JpdGVSZWc4KGFkZHIsdGVtcCk7XAorfQorCisjZGVmaW5lIERSVl9EQkdfU2V0RGF0YTgoYWRkciwgYml0bWFzaywgdmFsdWUpICAgICB7XAorICAga2FsX3VpbnQ4IHRlbXA7XAorICAgdGVtcCA9ICh+KGJpdG1hc2spKSAmIERSVl9EQkdfUmVnOChhZGRyKTtcCisgICB0ZW1wIHw9ICgodmFsdWUpICYgKGJpdG1hc2spKTtcCisgICBEUlZfREJHX1dyaXRlUmVnOChhZGRyLHRlbXApO1wKK30KKworZXh0ZXJuIHZvaWQgZHJ2X3JlZ19kYmdfdHJhY2Vfd3JpdGUxNihrYWxfdWludDE2IGxpbmUsIGthbF91aW50MzIgYWRkciwga2FsX3VpbnQzMiBkYXRhKTsKK2V4dGVybiB2b2lkIGRydl9yZWdfZGJnX3RyYWNlX3dyaXRlMzIoa2FsX3VpbnQxNiBsaW5lLCBrYWxfdWludDMyIGFkZHIsIGthbF91aW50MzIgZGF0YSk7CitleHRlcm4gdm9pZCBkcnZfcmVnX2RiZ190cmFjZV93cml0ZTgoa2FsX3VpbnQxNiBsaW5lLCBrYWxfdWludDMyIGFkZHIsIGthbF91aW50MzIgZGF0YSk7CitleHRlcm4ga2FsX3VpbnQxNiBkcnZfcmVnX2RiZ190cmFjZV9yZWFkMTYoa2FsX3VpbnQxNiBsaW5lLCBrYWxfdWludDMyIGFkZHIpOworZXh0ZXJuIGthbF91aW50MzIgZHJ2X3JlZ19kYmdfdHJhY2VfcmVhZDMyKGthbF91aW50MTYgbGluZSwga2FsX3VpbnQzMiBhZGRyKTsKK2V4dGVybiBrYWxfdWludDMyIGRydl9yZWdfZGJnX3RyYWNlX3JlYWQ4KGthbF91aW50MTYgbGluZSwga2FsX3VpbnQzMiBhZGRyKTsKKworI2VuZGlmIC8vX19EUlZfQ09NTV9SRUdfREJHX18KKworI2lmIGRlZmluZWQoX19FU0xfTUFTRV9HRU45N19fKSAmJiAhZGVmaW5lZChfX01US19UQVJHRVRfXykKK3ZvaWQgd3JpdGVfcmVnaXN0ZXIodW5zaWduZWQgcmVnT2ZzdCwgdW5zaWduZWQgdmFsdWUpOwordW5zaWduZWQgcmVhZF9yZWdpc3RlciAodW5zaWduZWQgcmVnT2ZzdCk7CisjZGVmaW5lIERSVl9Xcml0ZVJlZyhhZGRyLGRhdGEpICAgICB3cml0ZV9yZWdpc3RlcihhZGRyLCBkYXRhKQorI2RlZmluZSBEUlZfV3JpdGVSZWczMihhZGRyLGRhdGEpICAgd3JpdGVfcmVnaXN0ZXIoYWRkciwgZGF0YSkKKyNkZWZpbmUgRFJWX1JlZzMyKGFkZHIpICAgICAgICAgICAgIHJlYWRfcmVnaXN0ZXIoYWRkcikKKyNlbHNlIC8qIF9fRVNMX01BU0VfR0VOOTdfXyAmJiAhX19NVEtfVEFSR0VUX18gKi8KKyNkZWZpbmUgRFJWX1dyaXRlUmVnKGFkZHIsZGF0YSkgICAgICgoKih2b2xhdGlsZSBrYWxfdWludDE2ICopKGFkZHIpKSA9IChrYWxfdWludDE2KShkYXRhKSkKKyNkZWZpbmUgRFJWX1JlZyhhZGRyKSAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIGthbF91aW50MTYgKikoYWRkcikpCisjZGVmaW5lIERSVl9Xcml0ZVJlZzMyKGFkZHIsZGF0YSkgICAgICgoKih2b2xhdGlsZSBrYWxfdWludDMyICopKGFkZHIpKSA9IChrYWxfdWludDMyKShkYXRhKSkKKyNkZWZpbmUgRFJWX1JlZzMyKGFkZHIpICAgICAgICAgICAgICAgKCoodm9sYXRpbGUga2FsX3VpbnQzMiAqKShhZGRyKSkKKyNkZWZpbmUgRFJWX1dyaXRlUmVnOChhZGRyLGRhdGEpICAgICAoKCoodm9sYXRpbGUga2FsX3VpbnQ4ICopKGFkZHIpKSA9IChrYWxfdWludDgpKGRhdGEpKQorI2RlZmluZSBEUlZfUmVnOChhZGRyKSAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIGthbF91aW50OCAqKShhZGRyKSkKKyNlbmRpZiAvKiBlbHNlIF9fRVNMX01BU0VfR0VOOTdfXyAmJiAhX19NVEtfVEFSR0VUX18gKi8KKworI2RlZmluZSBEUlZfU2V0UmVnOChhZGRyLCBkYXRhKSAgICAgKERSVl9Xcml0ZVJlZzgoYWRkciwgRFJWX1JlZzgoYWRkcil8KGRhdGEpKSkKKyNkZWZpbmUgRFJWX0NsclJlZzgoYWRkciwgZGF0YSkgICAgIChEUlZfV3JpdGVSZWc4KGFkZHIsIERSVl9SZWc4KGFkZHIpJn4oZGF0YSkpKQorI2RlZmluZSBEUlZfU2V0UmVnKGFkZHIsIGRhdGEpICAgICAgKERSVl9Xcml0ZVJlZyhhZGRyLCBEUlZfUmVnKGFkZHIpfChkYXRhKSkpCisjZGVmaW5lIERSVl9DbHJSZWcoYWRkciwgZGF0YSkgICAgICAoRFJWX1dyaXRlUmVnKGFkZHIsIERSVl9SZWcoYWRkcikmfihkYXRhKSkpCisjZGVmaW5lIERSVl9TZXRSZWczMihhZGRyLCBkYXRhKSAgICAoRFJWX1dyaXRlUmVnMzIoYWRkciwgRFJWX1JlZzMyKGFkZHIpfChkYXRhKSkpCisjZGVmaW5lIERSVl9DbHJSZWczMihhZGRyLCBkYXRhKSAgICAoRFJWX1dyaXRlUmVnMzIoYWRkciwgRFJWX1JlZzMyKGFkZHIpJn4oZGF0YSkpKQorCisKKworLyogRFJWX1dyaXRlUmVnMzJfTlBXLCBEUlZfV3JpdGVSZWczMl9OUFdfUkIgcHJvdmlkZSBub24tcG9zdC13cml0ZSBvcGVyYXRpb24KKyAgIEFiYnJldmlhdGlvbjoKKyAgICAgICBOUFc6IE5vbiBQb3N0IFdyaXRlCisgICAgICAgUkIgOiBSZWFkIEJhY2sKKyAgIERlc2NyaXB0aW9uOgorICAgICAgIDEuIERSVl9Xcml0ZVJlZzMyX05QVzogSW4gU3lzdGVtIHdpdGggc3Ryb25nbHkgb3JkZXIgbWVtb3J5IGF0dHJpYnV0ZQorICAgICAgICAgICh3cml0ZSByZXNwb25zZSBmcm9tIHRhcmdldCBoYXJkd2FyZSBJUCksIHdlIGp1c3Qgd3JpdGUgdGhlIGRhdGEKKyAgICAgICAgICBpbnRvIHRoZSBzdHJvbmdseSBvcmRlciByZWdpb24gKHdyaXRlX2FkZHIgfCAweEYwMDBfMDAwMCkKKyAgICAgICAyLiBEUlZfV3JpdGVSZWczMl9OUFc6IEluIFN5c3RlbSB3aXRob3V0IHN0cm9uZ2x5IG9yZGVyIG1lbW9yeSBhdHRyaWJ1dGUsCisgICAgICAgICAgd2Ugd3JpdGUgdGhlIGRhdGEgaW50byB0aGUgd3JpdGVfYWRkciBhbmQgcmVhZCB0aGUgd3JpdGVfYWRkcgorICAgICAgICAgIGJhY2sgdG8gYXZvaWQgdGhlIHdyaXRlIGRhdGEgaXMgYnVmZmVyZWQgaW4gYnVzIGZhYnJpYworICAgICAgIDMuIERSVl9Xcml0ZVJlZzMyX05QV19SQjogSW4gc29tZSBoYXJkd2FyZSBJUCBkZXNpZ24sIHJlYWRpbmcgdGhlIAorICAgICAgICAgIHdyaXRlX2FkZHIgaGFzIHNvbWUgc2lkZS1lZmZlY3RzLCBpbiBvcmRlciB0byBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgCisgICAgICAgICAgRFJWX1dyaXRlUmVnMzJfTlBXX1JCIGlzIHByb3ZpZGVkIGFuZCB0aGUgcmVhZF9hZGRyIG9mIAorICAgICAgICAgIERSVl9Xcml0ZVJlZzMyX05QV19SQiBpcyBhc3NpZ25lZCBieSB0aGUgdXNlci4KKyAgICAgICAgICBVc2VyIG11c3QgY29uZmlybSB0aGF0IGFsbCBwcmV2aW91cyB3cml0ZSBvcGVyYXRpb25zIGFyZSBmaW5pc2hlZCAKKyAgICAgICAgICBiZWZvcmUgdGhlIGRhdGEgb2YgcmVhZF9hZGRyIHJlYWR5LgorICAgICAgICAgIEZvciBleGFtcGxlLCB3cml0ZV9hZGRyIGluIElQLUEsIHJlYWRfYWRkciBpbiBJUC1CIGNhbid0IG1ha2Ugc3VyZSB0aGUKKyAgICAgICAgICBJUC1BIHdyaXRlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZC4gd3JpdGVfYWRkci9yZWFkX2FkZHIgbXVzdCBiZSBpbiB0aGUgCisgICAgICAgICAgc2FtZSBJUC4KKyAgICAgICA0LiBEUlZfV3JpdGVSZWczMl9OUFdfUkI6IEZvciBzeXN0ZW0gd2l0aCBzdHJvbmdseSBvcmRlciBtZW1vcnkKKyAgICAgICAgICBhdHRyaWJ1dGUsIERSVl9Xcml0ZVJlZzMyX05QV19SQiBkb2VzIE5PVCByZWFkIHRoZSByZWFkX2FkZHIKKyAgICAgICAgICAodGhlIHNhbWUgYmVoYXZpb3Igd2l0aCBEUlZfV3JpdGVSZWczMl9OUFcpLgorICAgICAgIDUuIE1lbW9yeSBiYXJyaWVyIG9wZXJhdGlvbnMgKERNQi9EU0IgaW4gQVJNIEFyY2guKSBhcmUgbm90IGluY2x1ZGVkIGluIAorICAgICAgICAgIERSVl9Xcml0ZVJlZzMyX05QV19SQiBhbmQgRFJWX1dyaXRlUmVnMzJfTlBXLgorICAgICAgIDYuIChGb3IgNjI5MiBNSVBTIENQVSBhcmNoKSBEdWUgdG8gTUlQUyBoYXMgbm8gc3Ryb25nbHkgb3JkZXIgbWVtb3J5CisgICAgICAgICAgYXR0cmlidXRlLCB3ZSB1c2Ugbm9uLWJ1ZmZlcmFibGUgYmFuayB3cml0ZSArIE1PX3N5bmMgdG8gcmVhY2gKKyAgICAgICAgICB0aGlzIGZlYXR1cmUuCisgICAgICAgICAgICAgIC0tIE1PX3N5bmMgaXMgYSBzZXJpZXMgb2Ygci93IGFjY2VzcyBzcGVjaWFsIGFkZHJlc3MgCisgICAgICAgICAgICAgICAgIHRocm91Z2ggTU8gcG9ydC4gSXQgaGFzIHNhbWUgZWZmZWN0IGFzIG1lbW9yeSBiYXJyaWVyIG9mIAorICAgICAgICAgICAgICAgICBvdGhlciBNTyBwb3J0IGFjY2VzcywgYnV0IE5PIGVmZmVjdCB0byBvdGhlciBNTSBwb3J0IGFjY2Vzcy4KKyAgICAgICAgICAgICAgICAgU28gc3RyaWN0bHkgaXQgaXMgbm90IGNvbmZsaWN0IHRvIGRlc2NyaXB0aW9uICM1LiAKKyAqLworCisjaWYgZGVmaW5lZChfX0VTTF9DT1NJTV9MVEVfXykKKyAgICAjZGVmaW5lIERSVl9Xcml0ZVJlZzMyX05QV19SQih3cml0ZV9hZGRyLCBkYXRhLCByZWFkX2FkZHIpICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIERSVl9Xcml0ZVJlZzMyKHdyaXRlX2FkZHIsIGRhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRFJWX1JlZzMyKHJlYWRfYWRkcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCk7CisgICAgCisgICAgI2RlZmluZSBEUlZfV3JpdGVSZWczMl9OUFcod3JpdGVfYWRkciwgZGF0YSkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRFJWX1dyaXRlUmVnMzJfTlBXX1JCKHdyaXRlX2FkZHIsIGRhdGEsIHdyaXRlX2FkZHIpCisgICAgI2RlZmluZSBEUlZfU2V0UmVnMzJfTlBXKHdyaXRlX2FkZHIsIGRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBEUlZfV3JpdGVSZWczMl9OUFcoKChrYWxfdWludDMyKSh3cml0ZV9hZGRyKSksIERSVl9SZWczMih3cml0ZV9hZGRyKSB8IChkYXRhKSkKKyAgICAjZGVmaW5lIERSVl9DbHJSZWczMl9OUFcod3JpdGVfYWRkciwgZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIERSVl9Xcml0ZVJlZzMyX05QVygoKGthbF91aW50MzIpKHdyaXRlX2FkZHIpKSwgRFJWX1JlZzMyKHdyaXRlX2FkZHIpICYgKH4oZGF0YSkpKQorCisjZWxpZiBkZWZpbmVkKF9fTUQ5M19fKSB8fCBkZWZpbmVkKF9fTUQ5NV9fKSB8fCBkZWZpbmVkKE1UNjI5NykgfHwgZGVmaW5lZChfX01EOTdfXykgfHwgZGVmaW5lZChfX01EOTdQX18pCisKKyAgICAjaWYgZGVmaW5lZChfX0VTTF9FTkFCTEVfXyl8fGRlZmluZWQoX19FU0xfTUFTRV9fKQorICAgICAgICAjZGVmaW5lIEVMQlJVU19VS05PV05fQkFOS19BQ0NFU1Mod3JpdGVfYWRkciwgZGF0YSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBEUlZfV3JpdGVSZWczMigod3JpdGVfYWRkciksIChkYXRhKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1PX1N5bmMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlKDApOworICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgRUxCUlVTX1VLTk9XTl9CQU5LX0FDQ0VTUyh3cml0ZV9hZGRyLCBkYXRhKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEFTU0VSVCgwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlKDApOworICAgICNlbmRpZgorCisjaWYgZGVmaW5lZChfX0VTTF9NQVNFX0dFTjk3X18pICYmICFkZWZpbmVkKF9fTVRLX1RBUkdFVF9fKQorICAgICNkZWZpbmUgRFJWX1dyaXRlUmVnMzJfTlBXX1JCKHdyaXRlX2FkZHIsIGRhdGEsIHJlYWRfYWRkcikgIERSVl9Xcml0ZVJlZzMyKHdyaXRlX2FkZHIsIHJlYWRfYWRkcikKKyNlbHNlIC8qIF9fRVNMX01BU0VfR0VOOTdfXyAmJiAhX19NVEtfVEFSR0VUX18gKi8KKyAgICAjZGVmaW5lIERSVl9Xcml0ZVJlZzMyX05QV19SQih3cml0ZV9hZGRyLCBkYXRhLCByZWFkX2FkZHIpICAgICAgICAgICAgICAgXAorICAgIGRveyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC8qIEZvciBub24tYnVmZmVyYWJsZSBIVyBCQU5LICovICBcCisgICAgICAgIGlmKCAoKChrYWxfdWludDMyKXdyaXRlX2FkZHIpPj4yOCk9PTB4QSB8fCAoKChrYWxfdWludDMyKXdyaXRlX2FkZHIpPj4yOCk9PTB4QyB8fCAoKChrYWxfdWludDMyKXdyaXRlX2FkZHIpPj4yOCk9PTB4RSApICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBEUlZfV3JpdGVSZWczMigod3JpdGVfYWRkciksIChkYXRhKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIE1PX1N5bmMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogRm9yIE1ESFcgYnVmZmVyYWJsZSBhY2Nlc3MsIGNoYW5nZSB0byBNREhXIG5vbi1idWZmZXJhYmxlIEJBTksgKi8gICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlbHNlIGlmKCAoKChrYWxfdWludDMyKXdyaXRlX2FkZHIpPj4yOCk9PTB4QiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBEUlZfV3JpdGVSZWczMigoKCgoa2FsX3VpbnQzMil3cml0ZV9hZGRyKSA8PCA0KSA+PiA0KXwweEEwMDAwMDAwLCAoZGF0YSkpOyAgICAgXAorICAgICAgICAgICAgICAgIE1PX1N5bmMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogRm9yIEFQSFcgYnVmZmVyYWJsZSBhY2Nlc3MsIGNoYW5nZSB0byBBUEhXIG5vbi1idWZmZXJhYmxlIEJBTksgKi8gICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlbHNlIGlmKCAoKCgoa2FsX3VpbnQzMil3cml0ZV9hZGRyKT4+MjgpPT0weEQpICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBEUlZfV3JpdGVSZWczMigoKCgoa2FsX3VpbnQzMil3cml0ZV9hZGRyKSA8PCA0KSA+PiA0KXwweEMwMDAwMDAwLCAoZGF0YSkpOyAgICAgXAorICAgICAgICAgICAgICAgIE1PX1N5bmMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgRUxCUlVTX1VLTk9XTl9CQU5LX0FDQ0VTUyh3cml0ZV9hZGRyLCBkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH13aGlsZSgwKTsKKyNlbmRpZiAvKiBlbHNlIF9fRVNMX01BU0VfR0VOOTdfXyAmJiAhX19NVEtfVEFSR0VUX18gKi8KKworICAgICNkZWZpbmUgRFJWX1dyaXRlUmVnMzJfTlBXKHdyaXRlX2FkZHIsIGRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRFJWX1dyaXRlUmVnMzJfTlBXX1JCKHdyaXRlX2FkZHIsIGRhdGEsIHdyaXRlX2FkZHIpCisgICAgI2RlZmluZSBEUlZfU2V0UmVnMzJfTlBXKHdyaXRlX2FkZHIsIGRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBEUlZfV3JpdGVSZWczMl9OUFcoKChrYWxfdWludDMyKSh3cml0ZV9hZGRyKSksIERSVl9SZWczMih3cml0ZV9hZGRyKSB8IChkYXRhKSkKKyAgICAjZGVmaW5lIERSVl9DbHJSZWczMl9OUFcod3JpdGVfYWRkciwgZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIERSVl9Xcml0ZVJlZzMyX05QVygoKGthbF91aW50MzIpKHdyaXRlX2FkZHIpKSwgRFJWX1JlZzMyKHdyaXRlX2FkZHIpICYgKH4oZGF0YSkpKQorCisKKyNlbGlmIGRlZmluZWQoQ09NTU9OX1BMQVRGT1JNX01BUCkKKyAgICAjZGVmaW5lIERSVl9Xcml0ZVJlZzMyX05QV19SQih3cml0ZV9hZGRyLCBkYXRhLCByZWFkX2FkZHIpICAgICAgICAgXAorICAgIGRveyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKCh3cml0ZV9hZGRyKT49MHg4ODAwMDAwMFUgJiYgKHdyaXRlX2FkZHIpPD0weDhGRkZGRkZGVSkgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRFJWX1dyaXRlUmVnMzIoKHdyaXRlX2FkZHIpJih+KDB4MDgwMDAwMDApKSwgKGRhdGEpKTsgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZWxzZSBpZiggKCh3cml0ZV9hZGRyKT4+MjgpPT0weEIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBEUlZfV3JpdGVSZWczMigod3JpdGVfYWRkcikmKH4oMHgxMDAwMDAwMCkpLCAoZGF0YSkpOyAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAvKiBTdHJvbmdseSBPcmRlcjogMHg4MDAwMDAwMH4weDg3RkZGRkZGLzB4QTAwMDAwMDAgKi8gICAgICAgICBcCisgICAgICAgIGVsc2UgaWYoICgoKHdyaXRlX2FkZHIpPj4yOCk9PTgpIHx8ICgoKHdyaXRlX2FkZHIpPj4yOCk9PTB4QSkgKSAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIERSVl9Xcml0ZVJlZzMyKCh3cml0ZV9hZGRyKSwgKGRhdGEpKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgQVNTRVJUKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9d2hpbGUoMCk7CisKKyAgICAjZGVmaW5lIERSVl9Xcml0ZVJlZzMyX05QVyh3cml0ZV9hZGRyLCBkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBEUlZfV3JpdGVSZWczMl9OUFdfUkIod3JpdGVfYWRkciwgZGF0YSwgd3JpdGVfYWRkcikKKyAgICAjZGVmaW5lIERSVl9TZXRSZWczMl9OUFcod3JpdGVfYWRkciwgZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBEUlZfV3JpdGVSZWczMl9OUFcoKChrYWxfdWludDMyKSh3cml0ZV9hZGRyKSksIERSVl9SZWczMih3cml0ZV9hZGRyKSB8IChkYXRhKSkKKyAgICAjZGVmaW5lIERSVl9DbHJSZWczMl9OUFcod3JpdGVfYWRkciwgZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBEUlZfV3JpdGVSZWczMl9OUFcoKChrYWxfdWludDMyKSh3cml0ZV9hZGRyKSksIERSVl9SZWczMih3cml0ZV9hZGRyKSAmICh+KGRhdGEpKSkKKyNlbHNlCisJLyogVEJDICovCisJI2Vycm9yICJOUFcgQVBJOiB1bnN1cHBvcnRlZCBDSElQIgorI2VuZGlmIC8qIGVuZCBvZiBUSzYyODAvTVQ2MjkwL290aGVycyAqLworCisjZGVmaW5lIERSVl9DbGVhckJpdHMoYWRkcixkYXRhKSAgICAge1wKKyAgIGthbF91aW50MTYgdGVtcDtcCisgICB0ZW1wID0gRFJWX1JlZyhhZGRyKTtcCisgICB0ZW1wICY9fihkYXRhKTtcCisgICBEUlZfV3JpdGVSZWcoYWRkcix0ZW1wKTtcCit9CisKKyNkZWZpbmUgRFJWX1NldEJpdHMoYWRkcixkYXRhKSAgICAge1wKKyAgIGthbF91aW50MTYgdGVtcDtcCisgICB0ZW1wID0gRFJWX1JlZyhhZGRyKTtcCisgICB0ZW1wIHw9IChkYXRhKTtcCisgICBEUlZfV3JpdGVSZWcoYWRkcix0ZW1wKTtcCit9CisKKyNkZWZpbmUgRFJWX1NldERhdGEoYWRkciwgYml0bWFzaywgdmFsdWUpICAgICB7XAorICAga2FsX3VpbnQxNiB0ZW1wO1wKKyAgIHRlbXAgPSAofihiaXRtYXNrKSkgJiBEUlZfUmVnKGFkZHIpO1wKKyAgIHRlbXAgfD0gKCh2YWx1ZSkgJiAoYml0bWFzaykpO1wKKyAgIERSVl9Xcml0ZVJlZyhhZGRyLHRlbXApO1wKK30KKworI2RlZmluZSBEUlZfQ2xlYXJCaXRzMzIoYWRkcixkYXRhKSAgICAge1wKKyAgIGthbF91aW50MzIgdGVtcDtcCisgICB0ZW1wID0gRFJWX1JlZzMyKGFkZHIpO1wKKyAgIHRlbXAgJj1+KGRhdGEpO1wKKyAgIERSVl9Xcml0ZVJlZzMyKGFkZHIsdGVtcCk7XAorfQorCisjZGVmaW5lIERSVl9TZXRCaXRzMzIoYWRkcixkYXRhKSAgICAge1wKKyAgIGthbF91aW50MzIgdGVtcDtcCisgICB0ZW1wID0gRFJWX1JlZzMyKGFkZHIpO1wKKyAgIHRlbXAgfD0gKGRhdGEpO1wKKyAgIERSVl9Xcml0ZVJlZzMyKGFkZHIsdGVtcCk7XAorfQorCisjZGVmaW5lIERSVl9TZXREYXRhMzIoYWRkciwgYml0bWFzaywgdmFsdWUpICAgICB7XAorICAga2FsX3VpbnQzMiB0ZW1wO1wKKyAgIHRlbXAgPSAofihiaXRtYXNrKSkgJiBEUlZfUmVnMzIoYWRkcik7XAorICAgdGVtcCB8PSAoKHZhbHVlKSAmIChiaXRtYXNrKSk7XAorICAgRFJWX1dyaXRlUmVnMzIoYWRkcix0ZW1wKTtcCit9CisKKyNkZWZpbmUgRFJWX0NsZWFyQml0czgoYWRkcixkYXRhKSAgICAge1wKKyAgIGthbF91aW50OCB0ZW1wO1wKKyAgIHRlbXAgPSBEUlZfUmVnOChhZGRyKTtcCisgICB0ZW1wICY9fihkYXRhKTtcCisgICBEUlZfV3JpdGVSZWc4KGFkZHIsdGVtcCk7XAorfQorCisjZGVmaW5lIERSVl9TZXRCaXRzOChhZGRyLGRhdGEpICAgICB7XAorICAga2FsX3VpbnQ4IHRlbXA7XAorICAgdGVtcCA9IERSVl9SZWc4KGFkZHIpO1wKKyAgIHRlbXAgfD0gKGRhdGEpO1wKKyAgIERSVl9Xcml0ZVJlZzgoYWRkcix0ZW1wKTtcCit9CisKKyNkZWZpbmUgRFJWX1NldERhdGE4KGFkZHIsIGJpdG1hc2ssIHZhbHVlKSAgICAge1wKKyAgIGthbF91aW50OCB0ZW1wO1wKKyAgIHRlbXAgPSAofihiaXRtYXNrKSkgJiBEUlZfUmVnOChhZGRyKTtcCisgICB0ZW1wIHw9ICgodmFsdWUpICYgKGJpdG1hc2spKTtcCisgICBEUlZfV3JpdGVSZWc4KGFkZHIsdGVtcCk7XAorfQorCisjZGVmaW5lIERSVl9CdWlsZFByaW1pdGl2ZShfaWxtLF9zcmNpZCxfZHN0aWQsX21zZ2lkLF9kYXRhKSBcCit7XAorICAgX2lsbS0+c3JjX21vZF9pZCA9IF9zcmNpZDtcCisgICBfaWxtLT5zYXBfaWQgPSBEUklWRVJfUFNfU0FQO1wKKyAgIF9pbG0tPmRlc3RfbW9kX2lkID0gX2RzdGlkO1wKKyAgIF9pbG0tPm1zZ19pZCA9IF9tc2dpZDtcCisgICBfaWxtLT5sb2NhbF9wYXJhX3B0ciA9IChsb2NhbF9wYXJhX3N0cnVjdCAqKV9kYXRhO1wKKyAgIF9pbG0tPnBlZXJfYnVmZl9wdHIgPSBOVUxMO1wKK30KKworI2RlZmluZSBEUlZfU2VuZFByaW1pdGl2ZShfaWxtLF9zcmNpZCxfZHN0aWQsX21zZ2lkLF9kYXRhLCBfc2FwX2lkKSBcCit7XAorICAgX2lsbS0+c3JjX21vZF9pZCA9IF9zcmNpZDtcCisgICBfaWxtLT5zYXBfaWQgPSBfc2FwX2lkO1wKKyAgIF9pbG0tPmRlc3RfbW9kX2lkID0gX2RzdGlkO1wKKyAgIF9pbG0tPm1zZ19pZCA9IF9tc2dpZDtcCisgICBfaWxtLT5sb2NhbF9wYXJhX3B0ciA9IChsb2NhbF9wYXJhX3N0cnVjdCAqKV9kYXRhO1wKKyAgIF9pbG0tPnBlZXJfYnVmZl9wdHIgPSBOVUxMO1wKK30KKworZXh0ZXJuIHZvaWQgRmFzdF9NZW1jcHkodm9pZCAqc3JjYWRkciwgdm9pZCAqZHN0YWRkciwga2FsX3VpbnQzMiBsZW5nKTsKK2V4dGVybiB2b2lkIEZhc3RfU2hlcmlmV3JpdGUodm9pZCAqc3JjYWRkcix2b2lkICpkc3RhZGRyLGthbF91aW50MzIgbGVuKTsKK2V4dGVybiB2b2lkIEZhc3RfU2hlcmlmUmVhZCh2b2lkICpzcmNhZGRyLHZvaWQgKmRzdGFkZHIsa2FsX3VpbnQzMiBsZW4pOworLy8gTW9ESVMgcGFyc2VyIHNraXAgc3RhcnQKK2V4dGVybiBrYWxfdWludDMyIFNhdmVBbmRTZXRJUlFNYXNrKHZvaWQpOworZXh0ZXJuIHZvaWQgUmVzdG9yZUlSUU1hc2soa2FsX3VpbnQzMik7CitleHRlcm4gYm9vdF9tb2RlX3R5cGUgRHJ2X3F1ZXJ5X2Jvb3RfbW9kZSh2b2lkKTsKKy8vIE1vRElTIHBhcnNlciBza2lwIGVuZAorZXh0ZXJuIGthbF91aW50MzIgZHJ2X2dldF9jdXJyZW50X3RpbWUodm9pZCk7CitleHRlcm4ga2FsX3VpbnQzMiBkcnZfZ2V0X2R1cmF0aW9uX3RpY2soa2FsX3VpbnQzMiBwcmV2aW91c190aW1lLCBrYWxfdWludDMyIGN1cnJlbnRfdGltZSk7CitleHRlcm4ga2FsX3VpbnQzMiBkcnZfZ2V0X2R1cmF0aW9uX21zKGthbF91aW50MzIgcHJldmlvdXNfdGltZSk7CisKKy8vIE1vRElTIHBhcnNlciBza2lwIHN0YXJ0CisvLy8gTkZJIGJ1cyBtdXRleAordm9pZCBnZXRfTkZJX2J1cyh2b2lkKTsKK3ZvaWQgZnJlZV9ORklfYnVzKHZvaWQpOworCisjaWYgZGVmaW5lZChEUlZfREVCVUcpIHx8IGRlZmluZWQoQVRFU1RfRFJWX0VOQUJMRSkKK2V4dGVybiB2b2lkIGRiZ19wcmludChjaGFyICpmbXQsLi4uKTsKK2V4dGVybiB2b2lkIGRiZ19wcmludFdpdGhUaW1lKGNoYXIgKmZtdCwuLi4pOworZXh0ZXJuIHZvaWQgZGJnX2ZsdXNoKHZvaWQpOworI2VuZGlmICAgLypEUlZfREVCVUcqLworLy8gTW9ESVMgcGFyc2VyIHNraXAgZW5kCisKKyNpZmRlZiBEUlZfTUVNT1JZX1RSQUNFX0RFQlVHCisKKyAgICNkZWZpbmUgTUFYX0RSVl9EQkdfSU5GT19TSVpFIDIwNDgKKyAgIHR5cGVkZWYgZW51bSB7CisgICAgICBOQU5EX1JFQURfU1RBUlQsCisgICAgICBOQU5EX1JFQURfU1RPUCwKKyAgICAgIERSVl9EQkdfTUFYX0lECisgICB9IERSVl9EQkdfSUQ7CisKKyAgIHR5cGVkZWYgc3RydWN0eworICAgICAga2FsX3VpbnQxNiAgICAgIHRhZzsKKyAgICAgIGthbF91aW50MzIgICAgICB0aW1lOworICAgICAga2FsX3VpbnQzMiAgICAgIGRhdGExOworICAgICAga2FsX3VpbnQzMiAgICAgIGRhdGEyOworICAgfURSVl9EQkdfREFUQTsKKworICAgdHlwZWRlZiBzdHJ1Y3R7CisgICAgICBEUlZfREJHX0RBVEEgICBkYmdfZGF0YVtNQVhfRFJWX0RCR19JTkZPX1NJWkVdOworICAga2FsX3VpbnQxNiAgICAgZGJnX2RhdGFfaWR4OworICAgfURSVl9EQkdfU1RSVUNUOworCitleHRlcm4gdm9pZCBkcnZfZGJnX3RyYWNlKGthbF91aW50MTYgaW5kZXgsIGthbF91aW50MzIgdGltZSwga2FsX3VpbnQzMiBkYXRhMSwga2FsX3VpbnQzMiBkYXRhMik7CisjZW5kaWYgICAvKkRSVl9NRU1PUllfVFJBQ0VfREVCVUcqLworCisjaWYgZGVmaW5lZChfX01US19UQVJHRVRfXykKKyNpZiBkZWZpbmVkKF9fUlZDVF9fKQorLyogVGhpcyBtYXJjbyBpcyB0byBnZXQgdGhlIHJldHVyZSBhZGRyZXNzIG9mIHRoZSBjYWxsZXIgZnVuY3Rpb24uICovCisjZGVmaW5lIERSVl9HRVRfUkVUX0FERFIocmV0QWRkcikgIHtcCisgICByZXRBZGRyID0gX19yZXR1cm5fYWRkcmVzcygpO1wKK30KKworLyogVGhpcyBtYXJjbyBpcyB0byBwcm92aWRlIGEgZm9yIGxvb3AgZGVsYXkgd2l0aCB0aGUgY291bnQgYXMgdGhlIHBhcmFtZXRlci4gCisgICBUbyBhZGQgTk9QIGlzIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBvcHRpbWl6ZWQuICovCisjZGVmaW5lIERSVl9GT1JfTE9PUChfY291bnQpIFwKK3tcCisgICBrYWxfdWludDMyIGxvb3A7XAorICAgZm9yIChsb29wPTA7bG9vcDxfY291bnQ7bG9vcCsrKVwKKyAgIHtcCisgICAgICBfX25vcCgpO1wKKyAgICAgIH1cCisgICB9XAorfVwKKworI2VsaWYgZGVmaW5lZChfX0dOVUNfXykKKworLyogVGhpcyBtYXJjbyBpcyB0byBnZXQgdGhlIHJldHVyZSBhZGRyZXNzIG9mIHRoZSBjYWxsZXIgZnVuY3Rpb24uICovCisvKiBHQ0MgaGFzIGZ1bmN0aW9uIHRvIHN1cHBvcnQgdGhpcyAqLworI2RlZmluZSBEUlZfR0VUX1JFVF9BRERSKHJldEFkZHIpICB7XAorICAgcmV0QWRkciA9IF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyAoMCk7XAorfQorCisvKiBUaGlzIG1hcmNvIGlzIHRvIHByb3ZpZGUgYSBmb3IgbG9vcCBkZWxheSB3aXRoIHRoZSBjb3VudCBhcyB0aGUgcGFyYW1ldGVyLiAKKyAgIFRvIGFkZCBOT1AgaXMgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIG9wdGltaXplZC4gKi8KKyNkZWZpbmUgRFJWX0ZPUl9MT09QKF9jb3VudCkgXAore1wKKyAgIGthbF91aW50MzIgbG9vcDtcCisgICBmb3IgKGxvb3A9MDtsb29wPF9jb3VudDtsb29wKyspXAorICAge1wKKyAgICAgIF9fbm9wKCk7XAorICAgICAgfVwKKyAgIH1cCit9XAorICAgICAgICAKKyNlbHNlICAgLyogX19SVkNUX18gKi8KKworLyogVGhpcyBtYXJjbyBpcyB0byBnZXQgdGhlIHJldHVyZSBhZGRyZXNzIG9mIHRoZSBjYWxsZXIgZnVuY3Rpb24uICovCisjZGVmaW5lIERSVl9HRVRfUkVUX0FERFIocmV0QWRkcikgIHtcCisgICAgICAgICAgIF9fYXNtIHtcCisgICAgICAgICAgICBNT1YgcmV0QWRkcixsclwKKyAgICAgICAgfVwKK30KKworLyogVGhpcyBtYXJjbyBpcyB0byBwcm92aWRlIGEgZm9yIGxvb3AgZGVsYXkgd2l0aCB0aGUgY291bnQgYXMgdGhlIHBhcmFtZXRlci4gCisgICBUbyBhZGQgTk9QIGlzIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBvcHRpbWl6ZWQuICovCisjZGVmaW5lIERSVl9GT1JfTE9PUChfY291bnQpIFwKK3tcCisgICBrYWxfdWludDMyIGxvb3A7XAorICAgZm9yIChsb29wPTA7bG9vcDxfY291bnQ7bG9vcCsrKVwKKyAgIHtcCisgICAgICBfX2FzbSB7XAorICAgICAgICBOT1BcCisgICAgICB9XAorICAgfVwKK31cCisKKyNlbmRpZiAgLyogX19SVkNUX18gKi8KKworI2Vsc2UgLy8jaWYgZGVmaW5lZChfX01US19UQVJHRVRfXykKKworI2RlZmluZSBEUlZfR0VUX1JFVF9BRERSKHJldEFkZHIpCisKKyNkZWZpbmUgRFJWX0ZPUl9MT09QKF9jb3VudCkKKworI2VuZGlmIC8vI2lmIGRlZmluZWQoX19NVEtfVEFSR0VUX18pCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgQVBJcyBmb3IgZHJpdmVyIGRlYnVnZ2luZyAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBNb0RJUyBwYXJzZXIgc2tpcCBzdGFydAorI2lmIGRlZmluZWQoX19UU1RfTU9EVUxFX18pfHwgZGVmaW5lZChMMV9TSU0pCisjaWYgZGVmaW5lZChNVEtfS0FMX01OVCkgfHwgZGVmaW5lZChLQUxfT05fT1NDQVIpIHx8IGRlZmluZWQoTUNEX0RMTF9FWFBPUlQpIHx8IGRlZmluZWQoTDFfU0lNKQorSU5MSU5FX01PRElGSUVSIElOTElORSB2b2lkIGRydl90cmFjZTAodHJhY2VfY2xhc3NfZW51bSB0cmNfY2xhc3MsIGthbF91aW50MzIgbXNnX2luZGV4LCBjb25zdCBjaGFyICphcmdfdHlwZSkKK3sKKyAgICh2b2lkKXRyY19jbGFzczsKKyAgICh2b2lkKW1zZ19pbmRleDsKKyAgICh2b2lkKWFyZ190eXBlOworICAgcmV0dXJuOworfQorSU5MSU5FX01PRElGSUVSIElOTElORSB2b2lkIGRydl90cmFjZTEodHJhY2VfY2xhc3NfZW51bSB0cmNfY2xhc3MsIGthbF91aW50MzIgbXNnX2luZGV4LCBjb25zdCBjaGFyICphcmdfdHlwZSwga2FsX3VpbnQzMiBkYXRhMSkKK3sKKyAgICh2b2lkKXRyY19jbGFzczsKKyAgICh2b2lkKW1zZ19pbmRleDsKKyAgICh2b2lkKWFyZ190eXBlOworICAgKHZvaWQpZGF0YTE7CisgICByZXR1cm47Cit9CitJTkxJTkVfTU9ESUZJRVIgSU5MSU5FIHZvaWQgZHJ2X3RyYWNlMih0cmFjZV9jbGFzc19lbnVtIHRyY19jbGFzcywga2FsX3VpbnQzMiBtc2dfaW5kZXgsIGNvbnN0IGNoYXIgKmFyZ190eXBlLCBrYWxfdWludDMyIGRhdGExLCBrYWxfdWludDMyIGRhdGEyKQoreworICAgKHZvaWQpdHJjX2NsYXNzOworICAgKHZvaWQpbXNnX2luZGV4OworICAgKHZvaWQpYXJnX3R5cGU7CisgICAodm9pZClkYXRhMTsKKyAgICh2b2lkKWRhdGEyOworICAgcmV0dXJuOworfQorSU5MSU5FX01PRElGSUVSIElOTElORSB2b2lkIGRydl90cmFjZTQodHJhY2VfY2xhc3NfZW51bSB0cmNfY2xhc3MsIGthbF91aW50MzIgbXNnX2luZGV4LCBjb25zdCBjaGFyICphcmdfdHlwZSwga2FsX3VpbnQzMiBkYXRhMSwga2FsX3VpbnQzMiBkYXRhMiwga2FsX3VpbnQzMiBkYXRhMywga2FsX3VpbnQzMiBkYXRhNCkKK3sKKyAgICh2b2lkKXRyY19jbGFzczsKKyAgICh2b2lkKW1zZ19pbmRleDsKKyAgICh2b2lkKWFyZ190eXBlOworICAgKHZvaWQpZGF0YTE7CisgICAodm9pZClkYXRhMjsKKyAgICh2b2lkKWRhdGEzOworICAgKHZvaWQpZGF0YTQ7CisgICByZXR1cm47Cit9CitJTkxJTkVfTU9ESUZJRVIgSU5MSU5FIHZvaWQgZHJ2X3RyYWNlOCh0cmFjZV9jbGFzc19lbnVtIHRyY19jbGFzcywga2FsX3VpbnQzMiBtc2dfaW5kZXgsIGNvbnN0IGNoYXIgKmFyZ190eXBlLCBrYWxfdWludDMyIGRhdGExLCBrYWxfdWludDMyIGRhdGEyLCBrYWxfdWludDMyIGRhdGEzLCBrYWxfdWludDMyIGRhdGE0LAorICAgICAgICAgICAgICAgIGthbF91aW50MzIgZGF0YTUsIGthbF91aW50MzIgZGF0YTYsIGthbF91aW50MzIgZGF0YTcsIGthbF91aW50MzIgZGF0YTgpCit7CisgICAodm9pZCl0cmNfY2xhc3M7CisgICAodm9pZCltc2dfaW5kZXg7CisgICAodm9pZClhcmdfdHlwZTsKKyAgICh2b2lkKWRhdGExOworICAgKHZvaWQpZGF0YTI7CisgICAodm9pZClkYXRhMzsKKyAgICh2b2lkKWRhdGE0OworICAgKHZvaWQpZGF0YTU7CisgICAodm9pZClkYXRhNjsKKyAgICh2b2lkKWRhdGE3OworICAgKHZvaWQpZGF0YTg7CisgICByZXR1cm47Cit9CisjZWxzZSAgLyojaWYgZGVmaW5lZChNVEtfS0FMX01OVCkgfHwgZGVmaW5lZChLQUxfT05fT1NDQVIpIHx8IGRlZmluZWQoTUNEX0RMTF9FWFBPUlQpIHx8IGRlZmluZWQoTDFfU0lNKSovCitleHRlcm4gdm9pZCBkcnZfdHJhY2UwKHRyYWNlX2NsYXNzX2VudW0gdHJjX2NsYXNzLCBrYWxfdWludDMyIG1zZ19pbmRleCwgY29uc3QgY2hhciAqYXJnX3R5cGUpOworZXh0ZXJuIHZvaWQgZHJ2X3RyYWNlMSh0cmFjZV9jbGFzc19lbnVtIHRyY19jbGFzcywga2FsX3VpbnQzMiBtc2dfaW5kZXgsIGNvbnN0IGNoYXIgKmFyZ190eXBlLCBrYWxfdWludDMyIGRhdGExKTsKK2V4dGVybiB2b2lkIGRydl90cmFjZTIodHJhY2VfY2xhc3NfZW51bSB0cmNfY2xhc3MsIGthbF91aW50MzIgbXNnX2luZGV4LCBjb25zdCBjaGFyICphcmdfdHlwZSwga2FsX3VpbnQzMiBkYXRhMSwga2FsX3VpbnQzMiBkYXRhMik7CitleHRlcm4gdm9pZCBkcnZfdHJhY2U0KHRyYWNlX2NsYXNzX2VudW0gdHJjX2NsYXNzLCBrYWxfdWludDMyIG1zZ19pbmRleCwgY29uc3QgY2hhciAqYXJnX3R5cGUsIGthbF91aW50MzIgZGF0YTEsIGthbF91aW50MzIgZGF0YTIsIGthbF91aW50MzIgZGF0YTMsIGthbF91aW50MzIgZGF0YTQpOworZXh0ZXJuIHZvaWQgZHJ2X3RyYWNlOCh0cmFjZV9jbGFzc19lbnVtIHRyY19jbGFzcywga2FsX3VpbnQzMiBtc2dfaW5kZXgsIGNvbnN0IGNoYXIgKmFyZ190eXBlLCBrYWxfdWludDMyIGRhdGExLCBrYWxfdWludDMyIGRhdGEyLCBrYWxfdWludDMyIGRhdGEzLCBrYWxfdWludDMyIGRhdGE0LAorICAgICAgICAgICAgICAgIGthbF91aW50MzIgZGF0YTUsIGthbF91aW50MzIgZGF0YTYsIGthbF91aW50MzIgZGF0YTcsIGthbF91aW50MzIgZGF0YTgpOworI2VuZGlmIC8qI2lmIGRlZmluZWQoTVRLX0tBTF9NTlQpIHx8IGRlZmluZWQoS0FMX09OX09TQ0FSKSB8fCBkZWZpbmVkKE1DRF9ETExfRVhQT1JUKSB8fCBkZWZpbmVkKEwxX1NJTSkqLworI2Vsc2UgLy8gI2lmIGRlZmluZWQoX19UU1RfTU9EVUxFX18pfHwgZGVmaW5lZChMMV9TSU0pCisvKiNkZWZpbmUgZHJ2X3RyYWNlMCguLi4pKi8KKy8qI2RlZmluZSBkcnZfdHJhY2UxKC4uLikqLworLyojZGVmaW5lIGRydl90cmFjZTIoLi4uKSovCisvKiNkZWZpbmUgZHJ2X3RyYWNlNCguLi4pKi8KKy8qI2RlZmluZSBkcnZfdHJhY2U4KC4uLikqLworI2VuZGlmIC8vICNpZiBkZWZpbmVkKF9fVFNUX01PRFVMRV9fKXx8IGRlZmluZWQoTDFfU0lNKQorCitleHRlcm4ga2FsX3VpbnQ4IGRydl9kdW1teV9yZXR1cm4odm9pZCk7CisvLyBNb0RJUyBwYXJzZXIgc2tpcCBlbmQKKyNlbmRpZiAgIC8qX19EUlZfQ09NTV9IX18qLwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kcnZfaGlzci5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kcnZfaGlzci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YjI2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2Rydl9oaXNyLmgKQEAgLTAsMCArMSw0NDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqCWRydl9oaXNyLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgQUxMCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGludGVuZHMgZm9yIGNlbnRyYWwgZHJpdmVyIEhJU1IuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0RSVl9ISVNSX0gKKyNkZWZpbmUgX0RSVl9ISVNSX0gKKworI2luY2x1ZGUgImRydl9jb21tLmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKK3R5cGVkZWYgZW51bSB7CisgICBEUlZfQ0NJRl9ISVNSX0lEID0gMCwKKyAgIERSVl9NRElGX0hJU1JfSUQsCisgICBEUlZfUlRfTURJRl9ISVNSX0lELAorICAgRFJWX0JUSUZfSElTUl9JRCwKKyAgIERSVl9QRkNfSElTUl9JRCwKKyAgIERSVl9QRkNfREVDT0RFX0hJU1JfSUQsCisgICBEUlZfUEZDX0VOQ09ERV9ISVNSX0lELAorICAgRFJWX1VTSU1fSFNJUl9JRCwKKyAgIERSVl9VU0lNMl9IU0lSX0lELAorICAgRFJWX0ZNSUZfSElTUl9JRCwKKyAgIERSVl9FSU5UX0hJU1JfSUQsCisgICBEUlZfREVJTlRfSElTUl9JRCwKKyAgIERSVl9XRFRfSElTUl9JRCwKKyAgIERSVl9VU0JfSElTUl9JRCwKKyAgIERSVl9VU0JETUFfSElTUl9JRCwKKyAgIERSVl9HRE1BX0hJU1JfSUQsCisgICBEUlZfUENNT05fSElTUl9JRCwKKyAgIERSVl9VU0JfTE9HR0lOR18zR19ISVNSX0lELAorICAgRFJWX1VTQl9MT0dHSU5HX0RTUDFfSElTUl9JRCwKKyAgIERSVl9VU0JfTE9HR0lOR19EU1AyX0hJU1JfSUQsCisgICBEUlZfTkZJX0hJU1JfSUQsCisgICBEUlZfTVNEQ19ISVNSX0lELAorICAgRFJWX01TREMyX0hJU1JfSUQsCisgICBEUlZfU0lNX0hJU1JfSUQsCisgICBEUlZfU0lNMl9ISVNSX0lELAorICAgRFJWX1VBUlQxX0hJU1JfSUQsCisgICBEUlZfVUFSVDJfSElTUl9JRCwKKyAgIERSVl9VQVJUM19ISVNSX0lELAorICAgRFJWX0RNQV9ISVNSX0lELAorICAgRFJWX0dQVDFfSElTUl9JRCwKKyAgIERSVl9HUFQyX0hJU1JfSUQsCisgICBEUlZfR1BUM19ISVNSX0lELAorICAgRFJWX0dQVDRfSElTUl9JRCwKKyAgIERSVl9HUFQ1X0hJU1JfSUQsCisgICBEUlZfR1BUNl9ISVNSX0lELAorICAgRFJWX1BXTV9ISVNSX0lELAorICAgRFJWX0xDRF9XRkNfSElTUl9JRCwKKyAgIERSVl9MQ0RfSElTUl9JRCwKKyAgIERSVl9HT1ZMX0hJU1JfSUQsCisgICBEUlZfSElGMF9ISVNSX0lELAorICAgRFJWX0hJRjFfSElTUl9JRCwKKyAgIERSVl9CVElGX1NMRUVQX1dBS0VVUF9PVVRfSElTUl9JRCwKKyAgIERSVl9BQ0NERVRfSElTUl9JRCwKKyAgIERSVl9LUF9ISVNSX0lELAorICAgRFJWX0FVWEFEQ19ISVNSX0lELAorICAgRFJWX1JUQ19ISVNSX0lELAorICAgRFJWX0ZQR0FfRE1BX0hJU1JfSUQsCisgICBEUlZfSVJEQV9ISVNSX0lELAorICAgRFJWX0NIRV9ISVNSX0lELAorICAgRFJWX1NQSV9ISVNSX0lELAorICAgRFJWX05JUlFfSElTUl9JRCwKKyAgIERSVl9ORklRX0hJU1JfSUQsCisgICBEUlZfRE1BMl9ISVNSX0lELAorICAgRFJWX0dST1RfSElTUl9JRCwKKyAgIERSVl9MWk1BX0hJU1JfSUQsCisgICBEUlZfSURDX0hJU1JfSUQsCisgICBEUlZfQlVTTU9OX0hJU1JfSUQsCisgICBEUlZfRUJDX0hJU1JfSUQsCisgICBEUlZfR0RNQTJfSElTUl9JRCwKKyAgIERSVl9ERU1fSElTUl9JRCwKKyAgIERSVl9NVEFEX0hJU1JfSUQsCisgICBNQVhfRFJWX0hJU1JfREVWSUNFLAorICAgRFJWX1VOS05PV05fSElTUl9JRCA9IDB4ZmUKK30gRFJWX0hJU1JfSUQ7CisKKyNpZiBNQVhfRFJWX0hJU1JfREVWSUNFID4gKDMyKjIpCisjZXJyb3IgRFJWIEhJU1IgSUQgb3V0IG9mIHJhbmdlISEKKyNlbmRpZgorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIFZPSURfRlVOQyAgIGhpc3JfZnVuYzsKKyAgIGthbF91aW50MTYgIGhpc3JfY291bnQ7Cit9IERSVl9ISVNSX1NUUlVDVDsKKworI2lmICFkZWZpbmVkKF9fRlVFX18pICYmICFkZWZpbmVkKF9fVUJMX18pCitleHRlcm4gdm9pZCBkcnZfYWN0aXZlX2hpc3IoRFJWX0hJU1JfSUQgaWQpOworI2Vsc2UgLyogX19GVUVfXyAqLworI2RlZmluZSBkcnZfYWN0aXZlX2hpc3IoX2lkKSAgCisjZW5kaWYgLyogX19GVUVfXyAqLworCisKKy8vdHlwZWRlZiB2b2lkICgqIFZPSURfRlVOQ1RJT04pKHZvaWQpOworZXh0ZXJuIGthbF9oaXNyaWQgZHJ2X2hpc3I7CitleHRlcm4ga2FsX3VpbnQzMiBkcnZfaGlzcl9zdGF0dXMxOworZXh0ZXJuIGthbF91aW50MzIgZHJ2X2hpc3Jfc3RhdHVzMjsKK2V4dGVybiBEUlZfSElTUl9TVFJVQ1QgRFJWX0hJU1JfVEFCTEVbTUFYX0RSVl9ISVNSX0RFVklDRV07CisKKy8vIE1vRElTIHBhcnNlciBza2lwIHN0YXJ0CitleHRlcm4gdm9pZCBEUlZfUmVnaXN0ZXJfSElTUihEUlZfSElTUl9JRCBoaXNyX2lkLCBWT0lEX0ZVTkMgaGlzcl9mdW5jKTsKK2V4dGVybiB2b2lkIERSVl9ISVNSKHZvaWQpOworZXh0ZXJuIHZvaWQgRFJWX0VSUk9SX0hJU1Iodm9pZCk7CitleHRlcm4gdm9pZCBkcnZfaGlzcl9pbml0KHZvaWQpOworLy8gTW9ESVMgcGFyc2VyIHNraXAgZW5kCisjZW5kaWYgICAvKl9EUlZfSElTUl9IKi8KKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kcnZzaWduYWxzLmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2RydnNpZ25hbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGVkOGIxCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9kcnZzaWduYWxzLmgKQEAgLTAsMCArMSw1MzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgZHJ2c2lnbmFscy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1hdWlfU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgaXMgaW50ZW5kcyBmb3IgZHJpdmVyIHByaW1pdGl2ZXMuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0RSVlNJR05BTFNfSAorI2RlZmluZSBfRFJWU0lHTkFMU19ICisKKyNpbmNsdWRlICJibXQuaCIKKyNpbmNsdWRlICJ1c2JfY29tbS5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiIC8vI2luY2x1ZGUgInN0YWNrX2x0bGNvbS5oIiAvL01TQkIgY2hhbmdlICNpbmNsdWRlICJhcHBfbHRsY29tLmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJkY2wuaCIKKworCisvKlJUQyBkcml2ZXIqLworI2RlZmluZSBSVENfVENfSU5ECQkJMAorI2RlZmluZSBSVENfQUxfSU5ECQkJMQordHlwZWRlZiBzdHJ1Y3QgeworCUxPQ0FMX1BBUkFfSERSCisJa2FsX3VpbnQ4IAkJcnRjX2luZDsKK30gUlRDX1ByaW1pdGl2ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUxPQ0FMX1BBUkFfSERSCisgICAgRENMX1JUQ19EQVRBX1QgICAgICBwcmV2aW91c19ydGM7CisgICAgRENMX1JUQ19EQVRBX1QgICAgICBuZXdfcnRjOyAgICAgICAgCit9IFJUQ19UaW1lX0NoYW5nZV9JTkRfU3RydWN0OworCisvKktiZCBkcml2ZXIqLworI2RlZmluZSBLYmRfS2V5UHJlc3MJCQkwCisjZGVmaW5lIEtiZF9LZXlSZWxlYXNlCQkxCit0eXBlZGVmIHN0cnVjdCB7CisJTE9DQUxfUEFSQV9IRFIKKwlrYWxfdWludDggCQlrcF9zdGF0dXM7CisJa2FsX3VpbnQ4IAkJa2V5OworfSBLYmRfUHJpbWl0aXZlOworCisvKkNvbW11bmljYXRlZCB3aXRoIE1NSSwgY2hhcmdpbmcgc3RhdHVzKi8KK3R5cGVkZWYgZW51bSAKK3sKKyAgIEJNVF9DSEFSR0VSX0lOID0gMCwKKyAgIEJNVF9DSEFSR0VSX09VVCwKKyAgIEJNVF9PVkVSVk9MUFJPVEVDVCwKKyAgIEJNVF9PVkVSQkFUVEVNUCwKKyAgIEJNVF9MT1dCQVRURU1QLAorICAgQk1UX09WRVJDSEFSR0VDVVJSRU5ULAorICAgQk1UX0NIQVJHRV9DT01QTEVURSwKKyAgIEJNVF9JTlZBTElEX0JBVCwKKyAgIEJNVF9JTlZBTElEX0NIQVJHRVIsCisgICBCTVRfQ0hBUkdFX1RJTUVPVVQsCisgICBCTVRfTE9XQ0hBUkdFQ1VSUkVOVCwKKyAgIEJNVF9DSEFSR0VfQkFEX0NPTlRBQ1QsCisgICBCTVRfQkFUVEVSWV9CQURfQ09OVEFDVCwKKyAgIEJNVF9VU0JfQ0hBUkdFUl9JTiwKKyAgIEJNVF9VU0JfQ0hBUkdFUl9PVVQsCisgICBCTVRfVVNCX05PX0NIQVJHSU5HX0lOLAorICAgQk1UX1VTQl9OT19DSEFSR0lOR19PVVQsCisgICBCTVRfQkFUVF9JTiwKKyAgIEJNVF9CQVRUX09VVAorfUJNVF9DSFJfU1RBVDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUxPQ0FMX1BBUkFfSERSCisJQk1UX0NIUl9TVEFUIAkJc3RhdHVzOworfSBkcnZ1ZW1fcG1pY19pbmRfc3RydWN0OworCisvKkFEQyBzY2hlZHVsZXIqLwordHlwZWRlZiBzdHJ1Y3QgeworCUxPQ0FMX1BBUkFfSERSCisJZG91YmxlICAgICAgICAgYWRjX3ZhbHVlOworCWthbF9pbnQzMiAJCWFkY19oYW5kbGU7CisJa2FsX2ludDMyIAkJdm9sdDsKKwlrYWxfdWludDggCQlhZGNfc2NoZV9pZDsKK30gYm10X2FkY19tZWFzdXJlX2RvbmVfY29uZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlMT0NBTF9QQVJBX0hEUgorCWthbF9pbnQzMiBhZGNfaGFuZGxlOworCWthbF91aW50OCBhZGNfc2NoZV9pZDsKK30gYm10X2FkY19hZGRfaXRlbV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisJTE9DQUxfUEFSQV9IRFIKKwlrYWxfaW50MzIgYWRjX2hhbmRsZTsKKwlrYWxfdWludDggYWRjX3NjaGVfaWQ7Cit9IGJtdF9hZGNfcmVtb3ZlX2l0ZW1fcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUxPQ0FMX1BBUkFfSERSCisJa2FsX2ludDMyICAgYWRjX2hhbmRsZTsKKwlrYWxfdWludDMyICBwZXJpb2Q7CisJa2FsX3VpbnQ4ICAgZXZhbHVhdGVfY291bnQ7CisJa2FsX3VpbnQ4ICAgYWRjX3NjaGVfaWQ7Cit9IGJtdF9hZGNfbW9kaWZ5X3BhcmFtZXRlcnNfcmVxX3N0cnVjdDsKKworLypBVVggdGFzayovCit0eXBlZGVmIGVudW0gCit7CisgICBBVVhfSURfUExVR09VVD0wLAorICAgQVVYX0lEX1RWT1VULAorICAgQVVYX0lEX0VBUlBIT05FLAorICAgQVVYX0lEX0tFWV9QUkVTUywKKyAgIEFVWF9JRF9LRVlfUkVMRUFTRSwKKyAgIEFVWF9JRF9VQVJULAorICAgQVVYX0lEX0NMQU1fT1BFTiwKKyAgIEFVWF9JRF9DTEFNX0NMT1NFLAorICAgQVVYX0lEX1RWT1VUX09VVCwKKyAgIEFVWF9JRF9UVk9VVF9JTklUMSwKKyAgIEFVWF9JRF9ERVRFQ1RJT05fRE9ORSwKKyAgIEFVWF9JRF9QTFVHSU4sCisgICBBVVhfSURfVFJBTlNNSVRURVJfSE9MRF9PTiwKKyAgIEFVWF9JRF9UUkFOU01JVFRFUl9QVVRfRE9XTiwKKyAgIEFVWF9NQVhfSUQKK31BVVhfSUQ7Cit0eXBlZGVmIHN0cnVjdCB7CisJTE9DQUxfUEFSQV9IRFIKKwlBVVhfSUQgICBhdXhfaWQ7Cit9IGF1eF9pZF9zdHJ1Y3Q7CisKKy8qRW5naW5lZXJpbmcgbW9kZSovCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAga2FsX2ludDMyIAkJdmJhdDsJLypCYXR0ZXJ5IFZvbHRhZ2UobWljcm8tdm9sdGFnZSkqLworICAga2FsX2ludDMyICAgICBiYXRfdGVtcDsJLypCYXR0ZXJ5IFRlbXBlcmF0dXJlKKJKKSovCisgICBrYWxfaW50MzIgCQl2YXV4OwkJLypBVVggVm9sdGFnZShtaWNyby12b2x0YWdlKSovCisgICBrYWxfaW50MzIgCQljaGFyZ2VfY3VycmVudDsJLypDaGFyZ2UgY3VycmVudChtaWNyby1BKSovCisgICBrYWxfaW50MzIgCQl2Y2hhcmdlcjsJLypDaGFyZ2VyIFZvbHRhZ2UobWljcm8tdm9sdGFnZSkqLworfSBhZGNfYWxsX2NoYW5uZWxfc3RydWN0OworCisvKlVTQiBkcml2ZXIqLwordHlwZWRlZiBzdHJ1Y3QgeworCUxPQ0FMX1BBUkFfSERSCisgICB2b2lkICAgICAgICAgICAgICAgICAqcERhdGE7IC8qIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKi8KKyAgIGthbF9pbnQzMiAgICAgICAgICAgICBuQnVmZkxlbjsgLyogTGVuZ3RoIG9mIGRhdGEgYnVmZmVyICovCisJa2FsX2ludDMyICAgICAgICAgICAgIG5CeXRlc1JlY3Y7IC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCAqLworfSB1c2JfbXNfcmVjX2RvbmVfY29uZl9zdHJ1Y3Q7CisKKy8qTDQtPlVTQiovCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgVVNCX0RFVklDRV9UWVBFICAgICAgICAgbW9kZTsKKyAgIGthbF91aW50MzIgICAgICAgICpwYXJhbWV0ZXI7Cit9IGRydnVlbV91c2JjZmdfcmVxX3N0cnVjdDsKKworLypVU0ItPlVTQiovCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgVVNCX0RFVklDRV9UWVBFICAgICAgICAgbW9kZTsKKyAgIGthbF91aW50MzIgICAgICAgICpwYXJhbWV0ZXI7CisgICBrYWxfdWludDMyIGRldmljZV9jb2RlOworICAga2FsX3VpbnQzMiBzdWJjbGFzc19jb2RlOworICAga2FsX3VpbnQzMiBwcm90b2NvbF9jb2RlOworICAga2FsX3VpbnQzMiBwcm9kdWN0X2NvZGU7Cit9IGRydnVzYl91c2JjZmdfcmVxX3N0cnVjdDsKKworLypVU0ItPkw0Ki8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSCisgICBVU0JfREVWSUNFX1RZUEUgICAgICAgICBtb2RlOworICAga2FsX3VpbnQzMiAgICAgICAgcmVzZXJ2ZWQ7CisgICBrYWxfYm9vbCAgICAgICAgICByZXN1bHQ7Cit9IGRydnVlbV91c2JjZmdfY25mX3N0cnVjdDsKKworLypVU0ItPkw0Ki8KK3R5cGVkZWYgZW51bSAKK3sKKyAgIERFVEVDVF9BQ1RJT05fVU5LTk9XTj0wLAorICAgREVURUNUX0FDVElPTl9QTFVHSU4sCisgICBERVRFQ1RfQUNUSU9OX1BMVUdPVVQsCisgICBERVRFQ1RfQUNUSU9OX1VTQl9TVVNQRU5ELAorICAgREVURUNUX0FDVElPTl9NQVhfSUQKK31VU0JfREVURUNUX0FDVElPTl9JRDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIKKyAgIFVTQl9ERVRFQ1RfQUNUSU9OX0lEICAgICAgICAgYWN0aW9uOyAgLyoxOiBQbHVnaW4sIDA6UGx1Z091dCovCit9ZHJ2dWVtX3VzYmRldGVjdF9pbmRfc3RydWN0OworCisvLyBhZGQgZm9yIHVzYiBjaGFyZ2luZwordHlwZWRlZiBlbnVteworCUJNVF9VU0JfMTAwLAorCUJNVF9VU0JfNTAwCit9Ym10X3VzYl9pbmRfZW51bTsKKwordHlwZWRlZiBzdHJ1Y3R7CisJTE9DQUxfUEFSQV9IRFIKKwlQTVVfQ0hSX0NVUlJFTlRfRU5VTSAgdXNiX2luZDsKK31ibXRfdXNiX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworCUxPQ0FMX1BBUkFfSERSCisJUFdfQ1RSTF9QT1dFUl9PTl9SRUFTT04gcG93ZXJfb247CisJa2FsX3VpbnQzMiAJcG93ZXJvbl90aW1lX2xlZnQ7Cit9ZHJ2dWVtX3Bvd2VyX29uX2luZF9zdHJ1Y3Q7CisKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAga2FsX3VpbnQ4IHVzYl9pcF9wb3J0OworICAga2FsX3VpbnQ4IGZlYXR1cmVfaW5kZXg7CisvLyAgVVNCX0hDRF9TVEFUVVMgcmVzdWx0OworICAga2FsX3VpbnQ4IHJlc3VsdDsKKyAgIGthbF91aW50MzIgcGFyYW07Cit9dXNiX2hvc3RfdXNiYXR0YWNoX2luZF9zdHJ1Y3Q7CisKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAga2FsX2Jvb2wgY29uZmlybTsKK31ybmRpc191c2JfY29uZmlnX2NuZl9zdHJ1Y3Q7CisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tTVRQLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIE1hY3JvCisgKi8KKyNkZWZpbmUgTVRQX1BBUkFNX01BWCAgIDUKKyNkZWZpbmUgTVRQX0VWRU5UX01BWCAgIDMKKworLyoKKyAqIEVudW0KKyAqLworCit0eXBlZGVmIGVudW0geworICAgVVNCX01UUF9SRVNVTFRfT0sgPSAwLAorICAgVVNCX01UUF9SRVNVTFRfQ09OVElOVUUsCisgICBVU0JfTVRQX1JFU1VMVF9BQk9SVEVELAorICAgVVNCX01UUF9SRVNVTFRfREVWSUNFX0JVU1ksCisgICBVU0JfTVRQX1JFU1VMVF9OT1RfRU5BQkxFLAorICAgVVNCX01UUF9SRVNVTFRfQUxSRUFEWV9FTkFCTEUsCisgICBVU0JfTVRQX1JFU1VMVF9VTktOT1dOX0VSUk9SCit9dXNiX210cF9yZXN1bHRfZW51bTsKKworCit0eXBlZGVmIGVudW0geworICAgVVNCX01UUF9FVkVOVF9OT1JNQUwgPSAwLAorICAgVVNCX01UUF9FVkVOVF9BQk9SVAorfXVzYl9tdHBfZXZlbnRfZW51bTsKKworCisvKgorICogU3RydWN0CisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGthbF9pbnQzMiAgcmVzdWx0X2NvZGU7IC8qIDwgIDA6IEZTIGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID49IDA6IHVzYl9tdHBfcmVzdWx0X2VudW0gKi8KK311c2JfbXRwX2VuYWJsZV9yc3Bfc3RydWN0LCB1c2JfbXRwX2Rpc2FibGVfcnNwX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAga2FsX3VpbnQxNiBvcF9jb2RlOyAgICAgICAgICAgICAgICAgICAgIC8qIG9wZXJhdGlvbiAqLworICAga2FsX3VpbnQzMiBvcF9wYXJhbXNbTVRQX1BBUkFNX01BWF07ICAgIC8qIG9wZXJhdGlvbiAqLworICAgICAgICAgICAgICAgCisvLyAgIGthbF91aW50MTYgb3Bfc2VyaWFsX25vOyAgICAgICAgICAgICAgICAvKiBzdGFydCBmcm9tIDAgKi8KKworICAgLyogRGF0YSBwaGFzZSAqLworICAga2FsX3VpbnQzMiBkYXRhX3RvdGFsX3NpemU7ICAgICAgICAgICAgIC8qIHNpemUgb2YgdG90YWwgZGF0YSwgMCBtZWFucyBubyBEYXRhIHBoYXNlICovCisgICBrYWxfdWludDggICpkYXRhX3Bvb2xfcHRyOyAgICAgICAgICAgICAgLyogZGF0YSBwb29sICovCisgICBrYWxfdWludDMyIGRhdGFfcG9vbF9zaXplOyAgICAgICAgICAgICAgLyogc2l6ZSBvZiBkYXRhIHBvb2wgKi8KKyAgIGthbF91aW50MzIgZGF0YV9zaXplOyAgICAgICAgICAgICAgICAgICAvKiBzaXplIG9mIHJlYWwgZGF0YSwgc2lnbmxlIGRpcmVjdGlvbiAqLworfXVzYl9tdHBfb3BlcmF0aW9uX3JlcV9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIKKyAgICAKKyAgIGthbF9pbnQzMiAgcmVzdWx0X2NvZGU7IC8qIDwgIDA6IEZTIGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj0gMDogdXNiX210cF9yZXN1bHRfZW51bSAqLyAgICAgICAgICAgICAgICAKKyAgIGthbF91aW50MTYgcnNwX2NvZGU7CisgICBrYWxfdWludDMyIHJzcF9wYXJhbXNbTVRQX1BBUkFNX01BWF07CisKKyAgIGthbF91aW50MTYgb3BfY29kZTsKKy8vICAga2FsX3VpbnQxNiBvcF9zZXJpYWxfbm87ICAgICAgICAgICAgICAgIC8qIHN0YXJ0IGZyb20gMCAqLworCisgICAvKiBEYXRhIHBoYXNlICovCisgICBrYWxfdWludDMyIGRhdGFfdG90YWxfc2l6ZTsgICAgICAgICAgICAgLyogc2l6ZSBvZiB0b3RhbCBkYXRhLCAwIG1lYW5zIG5vIERhdGEgcGhhc2UgKi8KKyAgIGthbF91aW50OCAgKmRhdGFfcG9vbF9wdHI7ICAgICAgICAgICAgICAvKiBkYXRhIHBvb2wgKi8KKyAgIGthbF91aW50MzIgZGF0YV9wb29sX3NpemU7ICAgICAgICAgICAgICAvKiBzaXplIG9mIGRhdGEgcG9vbCAqLworICAga2FsX3VpbnQzMiBkYXRhX3NpemU7ICAgICAgICAgICAgICAgICAgIC8qIHNpemUgb2YgcmVhbCBkYXRhICovCit9dXNiX210cF9vcGVyYXRpb25fcnNwX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAga2FsX3VpbnQxNiBldmVudDsgICAgICAgLy8gc2VlIHVzYl9tdHBfZXZlbnRfZW51bQorICAga2FsX3VpbnQxNiBldmVudF9jb2RlOworICAga2FsX3VpbnQzMiBwYXJhbXNbTVRQX0VWRU5UX01BWF07Cit9dXNiX210cF9ldmVudF9pbmRfc3RydWN0OworCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2dwaW9fc3cuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvZ3Bpb19zdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOGRmYTIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2dwaW9fc3cuaApAQCAtMCwwICsxLDM3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICBncGlvX2h3LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aV9Tb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCBmb3IgR1BJTyBkcml2ZXIuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0dQSU9fU1dfSAorI2RlZmluZSBfR1BJT19TV19ICisKKyNpbmNsdWRlICJkcnZfZmVhdHVyZXNfZ3Bpby5oIgorI2luY2x1ZGUgImRjbC5oIgorI2luY2x1ZGUgImRydl9jb21tLmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKworCisjaWYgIWRlZmluZWQoRFJWX0dQSU9fT0ZGKQorLy8jZGVmaW5lIF9fRFJWX0dQSU9fUkVHX0RCR19fCisKKyNkZWZpbmUgIEdQSU9fNjI4MF9JTlZBSUxEX0lOREVYICAyMDAKKyNkZWZpbmUgIEdQSU9fNjI4MF9NSU5fUElOX0EgICAgICA2MAorI2RlZmluZSAgR1BJT182MjgwX01BWF9QSU5fQSAgICAgIDY3CisjZGVmaW5lICBHUElPXzYyODBfTUlOX1BJTl9CICAgICAgODMKKyNkZWZpbmUgIEdQSU9fNjI4MF9NQVhfUElOX0IgICAgICA5MAorCisjaWYgZGVmaW5lZChEUlZfR1BJT182MjgwX1NQRUNJQUxfU0VUX1JFRykKK3R5cGVkZWYgc3RydWN0IE1UNjI4MF9HUElPX1BVTExfRU5fU0VMTF9NQVBfVEFCTEVfVEFHCit7CisKKwlrYWxfdWludDE2ICAgICAgICAgIHB1bGxlbl9zZWxfaW5kZXg7CisJa2FsX3VpbnQxNiAgICAgICAgIHB1bGxlbl9yZWdfbnVtOyAgICAgIC8vIHdoaWNoICByZWdpc3RlcgorICAgIGthbF91aW50MTYgICAgICAgIHB1bGxlbl9yZW1haW5kZXI7ICAgLy8gd2hpY2ggYml0IGluIHJlZ2lzdGVyCisgICAga2FsX3VpbnQxNiAgICAgICAgcHVsbHNlbF9yZW1haW5kZXI7ICAgLy8gd2hpY2ggYml0IGluIHJlZ2lzdGVyCit9TVQ2MjgwX0dQSU9fUFVMTF9FTl9TRUxMX01BUF9UYWJsZV9UOworCisjZW5kaWYKKworI2lmZGVmIF9fRFJWX0dQSU9fUkVHX0RCR19fCisKKyNkZWZpbmUgRFJWX0dQSU9fV3JpdGVSZWcoYWRkcixkYXRhKSAgICBEUlZfREJHX1dyaXRlUmVnKGFkZHIsZGF0YSkKKyNkZWZpbmUgRFJWX0dQSU9fUmVnKGFkZHIpICAgICAgICAgICAgICBEUlZfREJHX1JlZyhhZGRyKQorI2RlZmluZSBEUlZfR1BJT19Xcml0ZVJlZzMyKGFkZHIsZGF0YSkgIERSVl9EQkdfV3JpdGVSZWczMihhZGRyLGRhdGEpCisjZGVmaW5lIERSVl9HUElPX1JlZzMyKGFkZHIpICAgICAgICAgICAgRFJWX0RCR19SZWczMihhZGRyKQorI2RlZmluZSBEUlZfR1BJT19Xcml0ZVJlZzgoYWRkcixkYXRhKSAgIERSVl9EQkdfV3JpdGVSZWc4KGFkZHIsZGF0YSkKKyNkZWZpbmUgRFJWX0dQSU9fUmVnOChhZGRyKSAgICAgICAgICAgICBEUlZfREJHX1JlZzgoYWRkcikKKworCisjZGVmaW5lIERSVl9HUElPX0NsZWFyQml0cyhhZGRyLGRhdGEpICAgRFJWX0RCR19DbGVhckJpdHMoYWRkcixkYXRhKQorI2RlZmluZSBEUlZfR1BJT19TZXRCaXRzKGFkZHIsZGF0YSkgICAgIERSVl9EQkdfU2V0Qml0cyhhZGRyLGRhdGEpCisjZGVmaW5lIERSVl9HUElPX0NsZWFyQml0czMyKGFkZHIsZGF0YSkgRFJWX0RCR19DbGVhckJpdHMzMihhZGRyLGRhdGEpCisjZGVmaW5lIERSVl9HUElPX1NldEJpdHMzMihhZGRyLGRhdGEpICAgRFJWX0RCR19TZXRCaXRzMzIoYWRkcixkYXRhKQorI2RlZmluZSBEUlZfR1BJT19DbGVhckJpdHM4KGFkZHIsZGF0YSkgIERSVl9EQkdfQ2xlYXJCaXRzOChhZGRyLGRhdGEpCisjZGVmaW5lIERSVl9HUElPX1NldEJpdHM4KGFkZHIsZGF0YSkgICAgRFJWX0RCR19TZXRCaXRzOChhZGRyLGRhdGEpCisKKyNkZWZpbmUgRFJWX0dQSU9fU2V0RGF0YShhZGRyLCBiaXRtYXNrLCB2YWx1ZSkgICAgIERSVl9EQkdfU2V0RGF0YShhZGRyLCBiaXRtYXNrLCB2YWx1ZSkKKyNkZWZpbmUgRFJWX0dQSU9fU2V0RGF0YTMyKGFkZHIsIGJpdG1hc2ssIHZhbHVlKSAgIERSVl9EQkdfU2V0RGF0YTMyKGFkZHIsIGJpdG1hc2ssIHZhbHVlKQorI2RlZmluZSBEUlZfR1BJT19TZXREYXRhOChhZGRyLCBiaXRtYXNrLCB2YWx1ZSkgICAgRFJWX0RCR19TZXREYXRhOChhZGRyLCBiaXRtYXNrLCB2YWx1ZSkKKworI2Vsc2UgLy9fX0RSVl9HUElPX1JFR19EQkdfXworCisjZGVmaW5lIERSVl9HUElPX1dyaXRlUmVnKGFkZHIsZGF0YSkgICAgRFJWX1dyaXRlUmVnKGFkZHIsZGF0YSkKKyNkZWZpbmUgRFJWX0dQSU9fUmVnKGFkZHIpICAgICAgICAgICAgICBEUlZfUmVnKGFkZHIpCisjZGVmaW5lIERSVl9HUElPX1dyaXRlUmVnMzIoYWRkcixkYXRhKSAgRFJWX1dyaXRlUmVnMzIoYWRkcixkYXRhKQorI2RlZmluZSBEUlZfR1BJT19SZWczMihhZGRyKSAgICAgICAgICAgIERSVl9SZWczMihhZGRyKQorI2RlZmluZSBEUlZfR1BJT19Xcml0ZVJlZzgoYWRkcixkYXRhKSAgIERSVl9Xcml0ZVJlZzgoYWRkcixkYXRhKQorI2RlZmluZSBEUlZfR1BJT19SZWc4KGFkZHIpICAgICAgICAgICAgIERSVl9SZWc4KGFkZHIpCisKKworI2RlZmluZSBEUlZfR1BJT19DbGVhckJpdHMoYWRkcixkYXRhKSAgIERSVl9DbGVhckJpdHMoYWRkcixkYXRhKQorI2RlZmluZSBEUlZfR1BJT19TZXRCaXRzKGFkZHIsZGF0YSkgICAgIERSVl9TZXRCaXRzKGFkZHIsZGF0YSkKKyNkZWZpbmUgRFJWX0dQSU9fQ2xlYXJCaXRzMzIoYWRkcixkYXRhKSBEUlZfQ2xlYXJCaXRzMzIoYWRkcixkYXRhKQorI2RlZmluZSBEUlZfR1BJT19TZXRCaXRzMzIoYWRkcixkYXRhKSAgIERSVl9EQkdEX1NldEJpdHMzMihhZGRyLGRhdGEpCisjZGVmaW5lIERSVl9HUElPX0NsZWFyQml0czgoYWRkcixkYXRhKSAgRFJWX0NsZWFyQml0czgoYWRkcixkYXRhKQorI2RlZmluZSBEUlZfR1BJT19TZXRCaXRzOChhZGRyLGRhdGEpICAgIERSVl9TZXRCaXRzOChhZGRyLGRhdGEpCisKKyNkZWZpbmUgRFJWX0dQSU9fU2V0RGF0YShhZGRyLCBiaXRtYXNrLCB2YWx1ZSkgICAgIERSVl9TZXREYXRhKGFkZHIsIGJpdG1hc2ssIHZhbHVlKQorI2RlZmluZSBEUlZfR1BJT19TZXREYXRhMzIoYWRkciwgYml0bWFzaywgdmFsdWUpICAgRFJWX1NldERhdGEzMihhZGRyLCBiaXRtYXNrLCB2YWx1ZSkKKyNkZWZpbmUgRFJWX0dQSU9fU2V0RGF0YTgoYWRkciwgYml0bWFzaywgdmFsdWUpICAgIERSVl9TZXREYXRhOChhZGRyLCBiaXRtYXNrLCB2YWx1ZSkKKworI2VuZGlmIC8vX19EUlZfR1BJT19SRUdfREJHX18KKworI2Vsc2UgLy8jaWYgIWRlZmluZWQoRFJWX0dQSU9fT0ZGKQorCisjZGVmaW5lIERSVl9HUElPX1dyaXRlUmVnKGFkZHIsZGF0YSkgIAorI2RlZmluZSBEUlZfR1BJT19SZWcoYWRkcikgICAgICAgICAgICAgICBkcnZfZHVtbXlfcmV0dXJuKCkKKyNkZWZpbmUgRFJWX0dQSU9fV3JpdGVSZWczMihhZGRyLGRhdGEpCisjZGVmaW5lIERSVl9HUElPX1JlZzMyKGFkZHIpICAgICAgICAgICAgIGRydl9kdW1teV9yZXR1cm4oKQorI2RlZmluZSBEUlZfR1BJT19Xcml0ZVJlZzgoYWRkcixkYXRhKSAKKyNkZWZpbmUgRFJWX0dQSU9fUmVnOChhZGRyKSAgICAgICAgICAgICAgZHJ2X2R1bW15X3JldHVybigpCisKKworI2RlZmluZSBEUlZfR1BJT19DbGVhckJpdHMoYWRkcixkYXRhKSAKKyNkZWZpbmUgRFJWX0dQSU9fU2V0Qml0cyhhZGRyLGRhdGEpICAgCisjZGVmaW5lIERSVl9HUElPX0NsZWFyQml0czMyKGFkZHIsZGF0YSkKKyNkZWZpbmUgRFJWX0dQSU9fU2V0Qml0czMyKGFkZHIsZGF0YSkgCisjZGVmaW5lIERSVl9HUElPX0NsZWFyQml0czgoYWRkcixkYXRhKQorI2RlZmluZSBEUlZfR1BJT19TZXRCaXRzOChhZGRyLGRhdGEpICAKKworI2RlZmluZSBEUlZfR1BJT19TZXREYXRhKGFkZHIsIGJpdG1hc2ssIHZhbHVlKQorI2RlZmluZSBEUlZfR1BJT19TZXREYXRhMzIoYWRkciwgYml0bWFzaywgdmFsdWUpCisjZGVmaW5lIERSVl9HUElPX1NldERhdGE4KGFkZHIsIGJpdG1hc2ssIHZhbHVlKQorCisjZW5kaWYgLy8jaWYgIWRlZmluZWQoRFJWX0dQSU9fT0ZGKQorCitleHRlcm4gCSBrYWxfYm9vbCAgSXNfNjI4MF9TUEVDX0dQSU8oIGthbF91aW50MTYgcGluKTsKK2V4dGVybiAga2FsX3VpbnQxNiAgZ2V0XzYyODBfc3BlY19pbmRleCgga2FsX3VpbnQxNglwaW5fbnVtKTsKK2V4dGVybiB2b2lkIEdQSU9fTURfSW5pdElPKGNoYXIgZGlyZWN0aW9uLCBjaGFyIHBvcnQpOworZXh0ZXJuIHZvaWQgR1BJT19NRF9Nb2RlU2V0dXAoa2FsX3VpbnQxNiBwaW4sIGthbF91aW50MTYgY29uZl9kYWRhKTsKK2V4dGVybiBEQ0xfVUlOVDMyIE1EX2dldF9ncGlvX3Bpbl9udW1iZXIoRENMX1VJTlQzMiBmbGFncyk7CisKKworCitleHRlcm4gdm9pZCBHUElPX0luaXRJTyhjaGFyIGRpcmVjdGlvbiwgY2hhciBwb3J0KTsKK2V4dGVybiBjaGFyIEdQSU9fUmVhZElPKGNoYXIgcG9ydCk7CitleHRlcm4ga2FsX3VpbnQxNiBHUElPX1JlYWRBbGwodm9pZCk7CitleHRlcm4gdm9pZCBHUElPX1dyaXRlSU8oY2hhciBkYXRhLCBjaGFyIHBvcnQpOworZXh0ZXJuIHZvaWQgR1BJT19Xcml0ZUFsbChrYWxfdWludDE2IHdyaXRlX2RhdGEpOworZXh0ZXJuIGNoYXIgR1BJT19SZXR1cm5Nb2RlKGNoYXIgcG9ydCk7CitleHRlcm4gY2hhciBHUE9fUmV0dXJuTW9kZShjaGFyIHBvcnQpOworZXh0ZXJuIGNoYXIgR1BJT19SZXR1cm5EaXIoY2hhciBwb3J0KTsKK2V4dGVybiBjaGFyIEdQSU9fUmV0dXJuRG91dChjaGFyIHBvcnQpOworZXh0ZXJuIGNoYXIgR1BPX1JldHVybkRvdXQoY2hhciBwb3J0KTsKK2V4dGVybiB2b2lkIEdQT19Xcml0ZUlPKGNoYXIgZGF0YSxjaGFyIHBvcnQpOworZXh0ZXJuIHZvaWQgR1BPX1dyaXRlQWxsKGthbF91aW50MTYgd3JpdGVfZGF0YSk7CitleHRlcm4gdm9pZCBHUElPX01vZGVTZXR1cChrYWxfdWludDE2IHBpbiwga2FsX3VpbnQxNiBjb25mX2RhZGEpOworZXh0ZXJuIHZvaWQgR1BPX01vZGVTZXR1cChrYWxfdWludDE2IHBpbiwga2FsX3VpbnQxNiBjb25mX2RhZGEpOworZXh0ZXJuIHZvaWQgaW5pdEdQSU8odm9pZCk7CisvL2V4dGVybiB2b2lkIEdQSU9faW5pdF8odm9pZCk7CitleHRlcm4gdm9pZCBHUElPX0FMTElPKHZvaWQpOworZXh0ZXJuIHZvaWQgR1BJT19QdWxsZW5TZXR1cChrYWxfdWludDE2IHBpbiwga2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIEdQSU9fRGludlNldHVwKGthbF91aW50MTYgcGluLCBrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgR1BJT19TZXREZWJ1Z01vZGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIEdQSU9fU2V0Q2xrT3V0KGNoYXIgY2xrX251bSwgZ3Bpb19jbGtfbW9kZSBtb2RlKTsKK2V4dGVybiB2b2lkIEdQSU9fU2V0Q2xrRGl2KGNoYXIgY2xrX251bSwgZ3Bpb19jbGtfZGl2IGRpdik7ICAgCitleHRlcm4gdm9pZCBHUElPX1B1bGxTZWxTZXR1cChrYWxfdWludDE2IHBpbiwga2FsX2Jvb2wgcHVsbF91cCk7CitleHRlcm4gdm9pZCBHUElPX1RNRGlyKGthbF9ib29sIHBhZF9vZSk7CisjaWZkZWYgX19DVVNUX05FV19fCitleHRlcm4gdm9pZCBHUElPX01vZGVTZXR1cF9GQVNUKGthbF91aW50MTYgcGluLCBrYWxfdWludDE2IGNvbmZfZGFkYSk7CitleHRlcm4gdm9pZCBHUElPX0luaXRJT19GQVNUKGNoYXIgZGlyZWN0aW9uLCBjaGFyIHBvcnQpOworZXh0ZXJuIGNoYXIgR1BJT19SZWFkSU9fRkFTVChjaGFyIHBvcnQpOworZXh0ZXJuIHZvaWQgR1BJT19Xcml0ZUlPX0ZBU1QoY2hhciBkYXRhLCBjaGFyIHBvcnQpOworI2VuZGlmLyogX19DVVNUX05FV19fICovCitleHRlcm4gdm9pZCBHUElPX0NoZWNrX011bHRpUGlucyhHUElPQ2hlY2tTdHJ1Y3QgKmNoZWNrX3B0ciwga2FsX3VpbnQzMiBwaW5fY250KTsKK2V4dGVybiB2b2lkIEdQSU9fV3JpdGVJT19Gb3JjZShjaGFyIGRhdGEsIGNoYXIgcG9ydCk7CitleHRlcm4gdm9pZCBHUElPX1dyaXRlSU9fRkFTVDIoY2hhciBkYXRhLCBrYWxfdWludDE2IG5vLCBrYWxfdWludDE2IHJlbWFpbmRlcl9zaGlmdCk7CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9oaWZfaGFsLmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2hpZl9oYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjhlY2ZjCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9oaWZfaGFsLmgKQEAgLTAsMCArMSwzOTMgQEAKKyNpZm5kZWYgX19ISUZfSEFMX0hfXworLyogIWlnbm9yZSBtZSEgKi8KKyNkZWZpbmUgX19ISUZfSEFMX0hfXworCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJkcnZfZmVhdHVyZXMuaCIKKworI2lmZGVmIERSVl9ISUZfU1VQUE9SVAorCisvKiA8R1JPVVAgQ2FsbEJhY2tGdW5jdGlvbnM+CisgICBGVU5DVElPTgorICAgSElGX0NBTExCQUNLCisgICBERVNDUklQVElPTgorICAgSElGIGNhbGxiYWNrIGZ1bmN0aW9uCisgICBISUYgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gSElGIGludGVycnVwdCBoYXMgYXJyaXZlZC4gSXQgaW5kaWNhdGVzIEhJRiBoYXMgZmluaXNoZWQgdGhlIGxhc3QgZGF0YSB0cmFuc2Zlci4KKyAgIEhJRiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gdGhlIGNvbnRleHQgb2YgSElTUi4KKyovCit0eXBlZGVmIHZvaWQgKCpISUZfQ0FMTEJBQ0spKHZvaWQpOworCisvKiBISUYgSGFuZGxlLgorICAgSElGIGhhbmRsZSBjYW4gYmUgcmV0cmlldmVkIGZyb20gaGlmX29wZW4oKS4gSXQgaXMgdXNlZCBmb3IgbW9zdCBISUYgQVBJcy4KKyovCit0eXBlZGVmIGthbF91aW50MzIgSElGX0hBTkRMRTsKKworLyogSElGIHRyYW5zZmVyIHR5cGUuIAorICAgRGVmaW5lcyB0aGUgdHJhbnNmZXIgdHlwZSBvZiBISUYgaW50ZXJmYWNlLgorKi8KK3R5cGVkZWYgZW51bQoreworICAgIC8qIEhJRiB0cmFuc2ZlciB3aXRoIEEwPTEuIFVzZSBDUFUgdG8gbW92ZSBkYXRhLiAqLworICAgIEhJRl9UWVBFX0EwSF9DUFUsCisgICAgLyogSElGIHRyYW5zZmVyIHdpdGggQTA9MS4gVXNlIERNQSB0byB0cmFuc2ZlciBkYXRhLiAqLworICAgIEhJRl9UWVBFX0EwSF9ETUEsCisgICAgLyogSElGIHRyYW5zZmVyIHdpdGggQTA9MC4gVXNlIENQVSB0byBtb3ZlIGRhdGEuICovCisgICAgSElGX1RZUEVfQTBMX0NQVSwKKyAgICAvKiBISUYgdHJhbnNmZXIgd2l0aCBBMD0wLiBVc2UgRE1BIHRvIHRyYW5zZmVyIGRhdGEuICovCisgICAgSElGX1RZUEVfQTBMX0RNQSwKK30gSElGX1RZUEU7CisKKy8qIEhJRiByZXN1bHQgZW51bS4KKyovCit0eXBlZGVmIGVudW0KK3sKKyAgICAvKiBJbmRpY2F0ZXMgbm8gZXJyb3Igb2NjdXJzIGluIHRoZSBsYXN0IG9wZXJhdGlvbi4gKi8KKyAgICBISUZfUkVTVUxUX09LLAorICAgIC8qIEluZGljYXRlcyBzb21lIGVycm9ycyBoYXZlIG9jY3VyZWQgaW4gdGhlIGxhc3Qgb3BlcmF0aW9uLiAqLworICAgIEhJRl9SRVNVTFRfRVJST1IsCisgICAgLyogSW5kaWNhdGVzIHRoZSBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLiAqLworICAgIEhJRl9SRVNVTFRfTk9UX1NVUFBPUlRFRCwKKyAgICAvKiBJbmRpY2F0ZXMgdGhlIEhJRiBoYW5kbGUgaXMgbm90IHZhbGlkLiAqLworICAgIEhJRl9SRVNVTFRfSU5WQUxJRF9IQU5ETEUsCisgICAgLyogSW5kaWNhdGVzIHRoZSBpbnB1dCBhcmd1bWVudCBpcyBub3QgdmFsaWQuICovCisgICAgSElGX1JFU1VMVF9JTlZBTElEX0FSR1VNRU5ULAorICAgIC8qIEluZGljYXRlcyB0aGF0IHRoZSBISUYgcG93ZXIgd2FzIG5vdCB0dXJuZWQgb24gd2hlbiBtYWtpbmcgSElGIHRyYW5zYWN0aW9ucy4gKi8KKyAgICBISUZfUkVTVUxUX0hJRl9OT1RfUE9XRVJfT04sCisgICAgLyogSW5kaWNhdGVzIHRoYXQgdGhlIEhJRiBwb3dlciB3YXMgbm90IHR1cm5lZCBvbiB3aGVuIG1ha2luZyBISUYgdHJhbnNhY3Rpb25zLiAqLworICAgIEhJRl9SRVNVTFRfRE1BX0lTX0JVU1kKK30gSElGX1JFU1VMVDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBISUYgSU9DVEwgY29kZSBkZWZpbml0aW9uLgorICAqIEZvciBkZXRhaWwgZGVzY3JpcHRpb24gYW5kIHVzYWdlIG9mIEhJRiBjb250cm9sIGNvZGVzLCBwbGVhc2UgcmVmZXIgdG8gPHhyZWYgdGFyZ2V0PSJISUYgSEFMIElPQ1RMIENvZGUiIHRleHQ9IkhJRiBJT0NUTCBDb2RlIiAvPi4KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgZW51bQoreworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqIEdldCB0aGUgY3VycmVudCBISUYgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgKiBGb3IgZGV0YWlsIGRlc2NyaXB0aW9uIGFuZCB1c2FnZSBvZiB0aGlzIGNvbnRyb2wgY29kZSwgcGxlYXNlIHJlZmVyIHRvIDx4cmVmIHRhcmdldD0iSElGX0lPQ1RMX0dFVF9QQVJBTSIgLz4uCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIEhJRl9JT0NUTF9HRVRfUEFSQU0sCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICogU2V0IHVsdHJhIGhpZ2ggY29udHJvbCBmb3IgSElGLgorICAgICAgKiBGb3IgZGV0YWlsIGRlc2NyaXB0aW9uIGFuZCB1c2FnZSBvZiB0aGlzIGNvbnRyb2wgY29kZSwgcGxlYXNlIHJlZmVyIHRvIDx4cmVmIHRhcmdldD0iSElGX0lPQ1RMX1VMVFJBX0hJR0hfQ1RSTCIgLz4uCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIEhJRl9JT0NUTF9VTFRSQV9ISUdIX0NUUkwsCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICogUXVlcnkgSElGIHRpbWluZyBzdXBwb3J0LgorICAgICAgKiBGb3IgZGV0YWlsIGRlc2NyaXB0aW9uIGFuZCB1c2FnZSBvZiB0aGlzIGNvbnRyb2wgY29kZSwgcGxlYXNlIHJlZmVyIHRvIDx4cmVmIHRhcmdldD0iSElGX0lPQ1RMX1FVRVJZX1RJTUlOR19TVVBQT1JUIiAvPi4KKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgSElGX0lPQ1RMX1FVRVJZX1RJTUlOR19TVVBQT1JULAorICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqIFF1ZXJ5IEhJRiBjYXBhYmlsaXRpZXMuCisgICAgICAqIEZvciBkZXRhaWwgZGVzY3JpcHRpb24gYW5kIHVzYWdlIG9mIHRoaXMgY29udHJvbCBjb2RlLCBwbGVhc2UgcmVmZXIgdG8gPHhyZWYgdGFyZ2V0PSJISUZfSU9DVExfUVVFUllfQ0FQQUJJTElUWSIgLz4uCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIEhJRl9JT0NUTF9RVUVSWV9DQVBBQklMSVRZLAorICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqIFF1ZXJ5IEhJRiBjbG9jayBzdXBwb3J0LgorICAgICAgKiBGb3IgZGV0YWlsIGRlc2NyaXB0aW9uIGFuZCB1c2FnZSBvZiB0aGlzIGNvbnRyb2wgY29kZSwgcGxlYXNlIHJlZmVyIHRvIDx4cmVmIHRhcmdldD0iSElGX0lPQ1RMX1FVRVJZX0NMT0NLX1NVUFBPUlQiIC8+LgorICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICBISUZfSU9DVExfUVVFUllfQ0xPQ0tfU1VQUE9SVCwKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgKiBRdWVyeSBISUYgcG93ZXIgc3RhdGUuCisgICAgICAqIEZvciBkZXRhaWwgZGVzY3JpcHRpb24gYW5kIHVzYWdlIG9mIHRoaXMgY29udHJvbCBjb2RlLCBwbGVhc2UgcmVmZXIgdG8gPHhyZWYgdGFyZ2V0PSJISUZfSU9DVExfUVVFUllfUE9XRVJfU1RBVEUiIC8+LgorICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICBISUZfSU9DVExfUVVFUllfUE9XRVJfU1RBVEUsCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICogVEQgcmVhbHRpbWUgc3VwcG9ydC4KKyAgICAgICogRm9yIGRldGFpbCBkZXNjcmlwdGlvbiBhbmQgdXNhZ2Ugb2YgdGhpcyBjb250cm9sIGNvZGUsIHBsZWFzZSByZWZlciB0byA8eHJlZiB0YXJnZXQ9IkhJRl9JT0NUTF9SRUFMVElNRV9SRVFVRVNUIiAvPi4KKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgSElGX0lPQ1RMX1JFQUxUSU1FX0NBTExCQUNLCit9IEhJRl9JT0NUTF9DT0RFOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEhJRiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCisgICogCisgICogUmVtYXJrcworICAqIDxpbWcgbmFtZT0iaGlmX3dyaXRlX3RpbWluZyIgLz4KKyAgKiAKKyAgKiA8aW1nIG5hbWU9ImhpZl9yZWFkX3RpbWluZyIgLz4gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qIENoaXAgU2VsZWN0IChMUENFIykgdG8gV3JpdGUgU3Ryb2JlIChMV1IjKSBzZXR1cCB0aW1lLiAqLworICAgIGthbF91aW50MzIgaGlmX3RpbWVfYzJ3czsKKyAgICAvKiBDaGlwIFNlbGVjdCAoTFBDRSMpIHRvIFdyaXRlIFN0cm9iZSAoTFdSIykgaG9sZCB0aW1lLiAqLworICAgIGthbF91aW50MzIgaGlmX3RpbWVfYzJ3aDsKKyAgICAvKiBXcml0ZSB3YWl0IHN0YXRlIHRpbWUuICovCisgICAga2FsX3VpbnQzMiBoaWZfdGltZV93c3Q7CisgICAgLyogQ2hpcCBTZWxlY3QgKExQQ0UjKSB0byBSZWFkIFN0cm9iZSAoTFJEIykgc2V0dXAgdGltZS4gKi8KKyAgICBrYWxfdWludDMyIGhpZl90aW1lX2MycnM7CisgICAgLyogQ2hpcCBTZWxlY3QgKExQQ0UjKSB0byBSZWFkIFN0cm9iZSAoTFJEIykgaG9sZCB0aW1lLiAqLworICAgIGthbF91aW50MzIgaGlmX3RpbWVfYzJyaDsKKyAgICAvKiBSZWFkIGxhdGVuY3kgdGltZS4gKi8KKyAgICBrYWxfdWludDMyIGhpZl90aW1lX3JsdDsKKyAgICAvKiBDaGlwIFNlbGVjdCBoaWdoIHdpZHRoLiAqLworICAgIGthbF91aW50MzIgaGlmX3RpbWVfY2h3OworICAgIC8qIEhJRiBiYXNlIGNsb2NrLiBVbml0IGluIE1Iei4gKi8KKyAgICBrYWxfdWludDMyIGhpZl9iYXNlX2NsazsKKyAgICAvKiBISUYgYnVzIHdpZHRoLiAqLworICAgIGthbF91aW50MzIgaGlmX2J1c193aWR0aDsKK30gSElGX0NPTkZJR19UOworCisvKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGFzIHRoZSBwYXJhbWV0ZXIgb2YgSElGX0lPQ1RMX1FVRVJZX1RJTUlOR19TVVBQT1JULgorKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyogSW5kaWNhdGVzIHdoZXRoZXIgQzJXUyBpcyBzdXBwb3J0ZWQuICovCisgICAga2FsX2Jvb2wgYzJ3c19zdXBwb3J0OworICAgIC8qIEluZGljYXRlcyB3aGV0aGVyIEMyV0ggaXMgc3VwcG9ydGVkLiAqLworICAgIGthbF9ib29sIGMyd2hfc3VwcG9ydDsKKyAgICAvKiBJbmRpY2F0ZXMgd2hldGhlciBXU1QgaXMgc3VwcG9ydGVkLiAqLworICAgIGthbF9ib29sIHdzdF9zdXBwb3J0OworICAgIC8qIEluZGljYXRlcyB3aGV0aGVyIEMyUlMgaXMgc3VwcG9ydGVkLiAqLworICAgIGthbF9ib29sIGMycnNfc3VwcG9ydDsKKyAgICAvKiBJbmRpY2F0ZXMgd2hldGhlciBDMlJIIGlzIHN1cHBvcnRlZC4gKi8KKyAgICBrYWxfYm9vbCBjMnJoX3N1cHBvcnQ7CisgICAgLyogSW5kaWNhdGVzIHdoZXRoZXIgQ0hXIGlzIHN1cHBvcnRlZC4gKi8KKyAgICBrYWxfYm9vbCBjaHdfc3VwcG9ydDsKKyAgICAvKiBJbmRpY2F0ZXMgd2hldGhlciBSTFQgaXMgc3VwcG9ydGVkLiAqLworICAgIGthbF9ib29sIHJsdF9zdXBwb3J0OworfSBISUZfUVVFUllfVElNSU5HX1NVUFBPUlRfVDsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBhcyB0aGUgcGFyYW1ldGVyIG9mIEhJRl9JT0NUTF9RVUVSWV9DTE9DS19TVVBQT1JULgorKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyogVGhpcyBhcnJheSBjb250YWlucyB0aGUgc3VwcG9ydGVkIGNsb2NrIGZyZXF1ZW5jaWVzLiBVbml0IGluIE1Iei4gVmFsdWUgMCBpbmRpY2F0ZXMgaW52YWxpZCBjbG9jayBmcmVxdWVuY3kuKi8KKyAgICBrYWxfdWludDMyIGNsb2NrWzRdOworfSBISUZfUVVFUllfQ0xPQ0tfU1VQUE9SVF9UOworCisvKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGFzIHRoZSBwYXJhbWV0ZXIgb2YgSElGX0lPQ1RMX1FVRVJZX0NBUEFCSUxJVFkuCisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiBNaW5pbXVtIHZhbHVlIGZvciBISUYgdHJhbnNmZXIgbGVuZ3RoLiAqLworICAgIGthbF91aW50MzIgdHJhbnNmZXJfbGVuZ3RoX21pbjsKKyAgICAvKiBNYXhpbXVtIHZhbHVlIGZvciBISUYgdHJhbnNmZXIgbGVuZ3RoLiAqLworICAgIGthbF91aW50MzIgdHJhbnNmZXJfbGVuZ3RoX21heDsKK30gSElGX0NBUEFCSUxJVFlfVDsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBhcyB0aGUgcGFyYW1ldGVyIG9mIEhJRl9JT0NUTF9VTFRSQV9ISUdIX0NUUkwuCisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiBFbmFibGUgdWx0cmEgaGlnaCBzaWduYWwgZHVyaW5nIEhJRiB0cmFuc2FjdGlvbi4gKi8KKyAgICBrYWxfYm9vbCB1bHRyYV9oaWdoX2VuOworfSBISUZfVUxUUkFfSElHSF9DVFJMX1Q7CisKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBhcyB0aGUgcGFyYW1ldGVyIG9mIEhJRl9JT0NUTF9RVUVSWV9QT1dFUl9TVEFURS4KKyovCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qIEhJRiBwb3dlciBzdGF0ZS4gKi8KKyAgICBrYWxfYm9vbCBoaWZfcG93ZXJfb247Cit9IEhJRl9QT1dFUl9TVEFURV9UOworCisvKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGFzIHRoZSBwYXJhbWV0ZXIgb2YgSElGX0lPQ1RMX1JFQUxUSU1FX0NBTExCQUNLLgorKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyogRW5hYmxlIHJlYWx0aW1lIHJlcXVlc3QsQ2FsbCBISUYgY2FsbGJhY2sgZnVuY3Rpb24oaGlmX2hpc3IpIGF0IExJU1IgbGV2ZWwuICovCisgICAga2FsX2Jvb2wgcmVhbHRpbWVfY2FsbGJhY2tfZW47Cit9IEhJRl9SRUFMVElNRV9DQUxMQkFDS19UOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBGdW5jdGlvbgorICAqIGhpZl9pbml0CisgICogRGVzY3JpcHRpb24KKyAgKiBJbml0aWFsaXplIEhJRiBoYXJkd2FyZSBhbmQgc3RydWN0dXJlcy4KKyAgKiBSZXR1cm5zCisgICogTm9uZS4KKyAgKiBSZW1hcmtzCisgICogPGNvbG9yIFJlZD5UaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBzeXN0ZW0gaW5pdGlhbGl6YXRpb24uIEhJRiB1c2VyIGRvZXMgbm90IG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLjwvY29sb3I+CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBoaWZfaW5pdCh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogRnVuY3Rpb24KKyAgKiBoaWZfb3BlbgorICAqIERlc2NyaXB0aW9uCisgICogT3BlbiBhbmQgZ2V0IEhJRiBoYW5kbGUuCisgICogUGFyYW1ldGVycworICAqIHBvcnQgOiAgW0lOXSBISUYgcG9ydC4gWmVybyBiYXNlZCBwb3J0IGluZGV4LgorICAqIFJldHVybnMKKyAgKiBSZXR1cm4gYSBISUYgaGFuZGxlLgorICAqIEV4YW1wbGUKKyAgKiA8Y29kZT4KKyAgKiBISUZfSEFORExFIGhhbmRsZTsKKyAgKiBoYW5kbGUgPSBoaWZfb3BlbigwKTsKKyAgKiA8L2NvZGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0hJRl9IQU5ETEUgaGlmX29wZW4oa2FsX3VpbnQzMiBwb3J0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogRnVuY3Rpb24KKyAgKiBoaWZfY2xvc2UKKyAgKiBEZXNjcmlwdGlvbgorICAqIFJlbGVhc2UgYSBISUYgaGFuZGxlLgorICAqIFBhcmFtZXRlcnMKKyAgKiBoYW5kbGUgOiAgW0lOXSBISUYgaGFuZGxlLiBSZXRyaWV2ZWQgZnJvbSBoaWZfb3BlbigpLgorICAqIFJldHVybnMKKyAgKiBSZXR1cm4gYSBISUYgcmVzdWx0IGNvZGUuCisgICogRXhhbXBsZQorICAqIDxjb2RlPgorICAqIEhJRl9IQU5ETEUgaGFuZGxlOworICAqIGhhbmRsZSA9IGhpZl9vcGVuKDApOworICAqIC8vIEhJRiBvcGVyYXRpb25zLgorICAqIGhpZl9jbG9zZShoYW5kbGUpOworICAqIDwvY29kZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworSElGX1JFU1VMVCBoaWZfY2xvc2UoSElGX0hBTkRMRSBoYW5kbGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBGdW5jdGlvbgorICAqIGhpZl9jb25maWcKKyAgKiBEZXNjcmlwdGlvbgorICAqIENvbmZpZ3VyZSBISUYgdGltaW5nIHBhcmFtZXRlcnMuCisgICogSElGIHBhcmFtZXRlcnMgbXVzdCBiZSBzZXQgYmVmb3JlIGFueSBISUYgdHJhbnNtaXNzaW9ucy4KKyAgKiBQYXJhbWV0ZXJzCisgICogaGFuZGxlIDogICAgICAgIFtJTl0gSElGIGhhbmRsZS4gUmV0cmlldmVkIGZyb20gaGlmX29wZW4oKS4KKyAgKiBwQ29uZmlnUGFyYW0gOiAgW0lOXSBISUYgcGFyYW1ldGVycy4gUmVmZXIgdG8gSElGX0NPTkZJR19UIGZvciBkZXRhaWxzLgorICAqIFJldHVybnMKKyAgKiBSZXR1cm4gYSBISUYgcmVzdWx0IGNvZGUuCisgICogRXhhbXBsZQorICAqIDxjb2RlPgorICAqIEhJRl9IQU5ETEUgaGFuZGxlOworICAqIEhJRl9DT05GSUdfVCBoaWZfY29uZmlnX3BhcmFtOworICAqIGhhbmRsZSA9IGhpZl9vcGVuKDApOworICAqIGhpZl9jb25maWdfcGFyYW0uaGlmX3RpbWVfYzJ3cyA9IDM7CisgICogaGlmX2NvbmZpZ19wYXJhbS5oaWZfdGltZV9jMndoID0gMjsKKyAgKiBoaWZfY29uZmlnX3BhcmFtLmhpZl90aW1lX3dzdCA9IDE1OyAKKyAgKiBoaWZfY29uZmlnX3BhcmFtLmhpZl90aW1lX2MycnMgPSA0OworICAqIGhpZl9jb25maWdfcGFyYW0uaGlmX3RpbWVfYzJyaCA9IDA7CisgICogaGlmX2NvbmZpZ19wYXJhbS5oaWZfdGltZV9ybHQgPSAweDFmOyAKKyAgKiBoaWZfY29uZmlnX3BhcmFtLmhpZl9iYXNlX2NsayA9IDEyMjsgCisgICogaGlmX2NvbmZpZ19wYXJhbS5oaWZfYnVzX3dpZHRoID0gMTY7CisgICogaGlmX2NvbmZpZyhoYW5kbGUsICZoaWZfY29uZmlnX3BhcmFtKTsgICAgIAorICAqIC8vIC4uLgorICAqIGhpZl9jbG9zZShoYW5kbGUpOworICAqIDwvY29kZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworSElGX1JFU1VMVCBoaWZfY29uZmlnKEhJRl9IQU5ETEUgaGFuZGxlLCBISUZfQ09ORklHX1QqIHBDb25maWdQYXJhbSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogRnVuY3Rpb24KKyAgKiBoaWZfd3JpdGUKKyAgKiBEZXNjcmlwdGlvbgorICAqIEZpcmUgYSBISUYgdHJhbnNtaXNzaW9uIGZvciBvdXRwdXQuCisgICogUGFyYW1ldGVycworICAqIGhhbmRsZSA6ICAgW0lOXSBISUYgaGFuZGxlLiBSZXRyaWV2ZWQgZnJvbSBoaWZfb3BlbigpLgorICAqIHR5cGUgOiAgICAgW0lOXSBISUYgdHJhbnNmZXIgdHlwZS4gUmVmZXIgdG8gSElGX1RZUEUgZm9yIGRldGFpbHMuCisgICogYWRkciA6ICAgICBbSU5dIERhdGEgYnVmZmVyIGFkZHJlc3MgZm9yIG91dHB1dC4KKyAgKiBzaXplIDogICAgIFtJTl0gRGF0YSBsZW5ndGggZm9yIEhJRiB0cmFuc2Zlci4gVW5pdCBpbiBieXRlcy4KKyAgKiBmQ0IgOiAgICAgIFtJTl0gU3BlY2lmaWVzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHRoZSB0cmFuc21pc3Npb24gY29tcGxldGVzLgorICAqIElmIGZDQiBpcyBzcGVjaWZpZWQsIEhJRiBkcml2ZXIgdXNlcyBpbnRlcnJ1cHQgbW9kZS4gVGhpcyBBUEkgaXMgYXN5bmNocm9ub3VzLgorICAqIElmIGZDQiBpcyBOVUxMLCBISUYgZHJ2aWVyIHVzZXMgcG9sbGluZyBtb2RlLiBUaGlzIEFQSSBiZWNvbWVzIHN5bmNocm9ub3VzLgorICAqIFJldHVybnMKKyAgKiBSZXR1cm4gYSBISUYgcmVzdWx0IGNvZGUuCisgICogUmVtYXJrcworICAqIElmIHR5cGUgaXMgc2V0IHRvIEhJRl9UWVBFX0EwSF9DUFUgb3IgSElGX1RZUEVfQTBMX0NQVSwgZkNCIGlzIGlnbm9yZWQuIEhJRiBkcml2ZXIgd29ya3Mgc3luY2hyb25vdXMgaW4gQ1BVIG1vZGUuCisgICogRXhhbXBsZQorICAqIDxjb2RlPgorICAqIEhJRl9IQU5ETEUgaGFuZGxlOworICAqIGhhbmRsZSA9IGhpZl9vcGVuKDApOworICAqIC8vIC4uLgorICAqIAorICAqIC8vIFN5bmNocm9ub3VzIGNhbGwuCisgICogaGlmX3dyaXRlKGhhbmRsZSwgSElGX1RZUEVfQTBIX0NQVSwgaGlmX3Rlc3RfYnVmZmVyLCAxMDI0LCBOVUxMKTsKKyAgKiAKKyAgKiAvLyBBc3luY2hyb25vdXMgY2FsbC4KKyAgKiBoaWZfd3JpdGUoaGFuZGxlLCBISUZfVFlQRV9BMEhfRE1BLCBoaWZfdGVzdF9idWZmZXIsIDEwMjQsIGhpZl90ZXN0X2NiKTsKKyAgKiAvLyBXYWl0IGZvciBhIGV2ZW50IHdoaWNoIGlzIHNldCBpbiBjYWxsYmFjayBmdW5jdGlvbi4KKyAgKiAvLyAuLi4KKyAgKiBoaWZfY2xvc2UoaGFuZGxlKTsKKyAgKiA8L2NvZGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitISUZfUkVTVUxUIGhpZl93cml0ZShISUZfSEFORExFIGhhbmRsZSwgSElGX1RZUEUgdHlwZSwga2FsX3VpbnQzMiBhZGRyLCBrYWxfdWludDMyIHNpemUsIEhJRl9DQUxMQkFDSyBmQ0IpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEZ1bmN0aW9uCisgICogaGlmX3JlYWQKKyAgKiBEZXNjcmlwdGlvbgorICAqIEZpcmUgYSBISUYgdHJhbnNtaXNzaW9uIGZvciBpbnB1dC4KKyAgKiBQYXJhbWV0ZXJzCisgICogaGFuZGxlIDogICBbSU5dIEhJRiBoYW5kbGUuIFJldHJpZXZlZCBmcm9tIGhpZl9vcGVuKCkuCisgICogdHlwZSA6ICAgICBbSU5dIEhJRiB0cmFuc2ZlciB0eXBlLiBSZWZlciB0byBISUZfVFlQRSBmb3IgZGV0YWlscy4KKyAgKiBhZGRyIDogICAgIFtJTl0gRGF0YSBidWZmZXIgYWRkcmVzcyBmb3IgaW5wdXQuCisgICogc2l6ZSA6ICAgICBbSU5dIERhdGEgbGVuZ3RoIGZvciBISUYgdHJhbnNmZXIuIFVuaXQgaW4gYnl0ZXMuCisgICogZkNCIDogICAgICBbSU5dIFNwZWNpZmllcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiB0aGUgdHJhbnNtaXNzaW9uIGNvbXBsZXRlcy4KKyAgKiBJZiBmQ0IgaXMgc3BlY2lmaWVkLCBISUYgZHJpdmVyIHVzZXMgaW50ZXJydXB0IG1vZGUuIFRoaXMgQVBJIGlzIGFzeW5jaHJvbm91cy4KKyAgKiBJZiBmQ0IgaXMgTlVMTCwgSElGIGRydmllciB1c2VzIHBvbGxpbmcgbW9kZS4gVGhpcyBBUEkgYmVjb21lcyBzeW5jaHJvbm91cy4KKyAgKiBSZXR1cm5zCisgICogUmV0dXJuIGEgSElGIHJlc3VsdCBjb2RlLgorICAqIFJlbWFya3MKKyAgKiBJZiB0eXBlIGlzIHNldCB0byBISUZfVFlQRV9BMEhfQ1BVIG9yIEhJRl9UWVBFX0EwTF9DUFUsIGZDQiBpcyBpZ25vcmVkLiBISUYgZHJpdmVyIHdvcmtzIHN5bmNocm9ub3VzIGluIENQVSBtb2RlLgorICAqIEV4YW1wbGUKKyAgKiA8Y29kZT4KKyAgKiBISUZfSEFORExFIGhhbmRsZTsKKyAgKiBoYW5kbGUgPSBoaWZfb3BlbigwKTsKKyAgKiAvLyAuLi4KKyAgKiAKKyAgKiAvLyBTeW5jaHJvbm91cyBjYWxsLgorICAqIGhpZl9yZWFkKGhhbmRsZSwgSElGX1RZUEVfQTBIX0NQVSwgaGlmX3Rlc3RfYnVmZmVyLCAxMDI0LCBOVUxMKTsKKyAgKiAKKyAgKiAvLyBBc3luY2hyb25vdXMgY2FsbC4KKyAgKiBoaWZfcmVhZChoYW5kbGUsIEhJRl9UWVBFX0EwSF9ETUEsIGhpZl90ZXN0X2J1ZmZlciwgMTAyNCwgaGlmX3Rlc3RfY2IpOworICAqIC8vIFdhaXQgZm9yIGEgZXZlbnQgd2hpY2ggaXMgc2V0IGluIGNhbGxiYWNrIGZ1bmN0aW9uLgorICAqIC8vIC4uLgorICAqIGhpZl9jbG9zZShoYW5kbGUpOworICAqIDwvY29kZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0hJRl9SRVNVTFQgaGlmX3JlYWQoSElGX0hBTkRMRSBoYW5kbGUsIEhJRl9UWVBFIHR5cGUsIGthbF91aW50MzIgYWRkciwga2FsX3VpbnQzMiBzaXplLCBISUZfQ0FMTEJBQ0sgZkNCKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogRnVuY3Rpb24KKyAgKiBoaWZfcG93ZXJfY3RybAorICAqIERlc2NyaXB0aW9uCisgICogRW5hYmxlIG9yIGRpc2FibGUgSElGIGhhcmR3YXJlIHBvd2VyLgorICAqIFBhcmFtZXRlcnMKKyAgKiBoYW5kbGUgOiAgICBbSU5dIEhJRiBoYW5kbGUuIFJldHJpZXZlZCBmcm9tIGhpZl9vcGVuKCkuCisgICogYlBvd2VyT24gOiAgW0lOXSBTZXQgS0FMX1RSVUUgdG8gcG93ZXIgb24gSElGIGhhcmR3YXJlLiBTZXQgS0FMX0ZBTFNFIHRvIHBvd2VyIG9mZiBISUYgaGFyZHdhcmUuCisgICogUmV0dXJucworICAqIFJldHVybiBhIEhJRiByZXN1bHQgY29kZS4KKyAgKiBFeGFtcGxlCisgICogPGNvZGU+CisgICogSElGX0hBTkRMRSBoYW5kbGU7CisgICogaGFuZGxlID0gaGlmX29wZW4oMCk7CisgICogaGlmX3Bvd2VyX2N0cmwoaGFuZGxlLCBLQUxfVFJVRSk7CisgICogLy8gSElGIG9wZXJhdGlvbnMuCisgICogaGlmX3Bvd2VyX2N0cmwoaGFuZGxlLCBLQUxfRkFMU0UpOworICAqIGhpZl9jbG9zZShoYW5kbGUpOworICAqIDwvY29kZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworSElGX1JFU1VMVCBoaWZfcG93ZXJfY3RybChISUZfSEFORExFIGhhbmRsZSwga2FsX2Jvb2wgYlBvd2VyT24pOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBGdW5jdGlvbgorICAqIGhpZl9pb2N0bAorICAqIERlc2NyaXB0aW9uCisgICogSU8gQ29udHJvbCBmb3IgSElGIGRyaXZlci4KKyAgKiBBIHNlcmllcyBvZiBISUYgY29udHJvbCBjb2RlIGlzIGRlZmluZWQgZm9yIGV4dGVuc2lvbiB1c2FnZS4gUmVmZXIgdG8gSElGX0lPQ1RMX0NPREUuCisgICogUGFyYW1ldGVycworICAqIGhhbmRsZSA6ICBbSU5dIEhJRiBoYW5kbGUuIFJldHJpZXZlZCBmcm9tIGhpZl9vcGVuKCkuCisgICogY29kZSA6ICAgIFtJTl0gSElGIGNvbnRyb2wgY29kZS4gUmVmZXIgdG8gSElGX0lPQ1RMX0NPREUuCisgICogcFBhcmFtIDogIFtJTi9PVVRdIFBhcmFtZXRlciBmb3IgSElGIElPIENvbnRyb2wuIFRoZSBkZWZpbml0aW9uIGRlcGVuZHMgb24gdGhlIHNwZWNpZmllZCBjb250cm9sIGNvZGUuIFJlZmVyIHRvIEhJRl9JT0NUTF9DT0RFLgorICAqIFJldHVybnMKKyAgKiBSZXR1cm4gYSBISUYgcmVzdWx0IGNvZGUuCisgICogVGhlIHJldHVybiB2YWx1ZSBpcyBISUZfUkVTVUxUX05PVF9TVVBQT1JURUQgaWYgdGhlIGN1cnJlbnQgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2VwY2lmaWMgY29udHJvbCBjb2RlLgorICAqIEV4YW1wbGUKKyAgKiA8Y29kZT4KKyAgKiBISUZfSEFORExFIGhhbmRsZTsKKyAgKiBISUZfQ09ORklHX1QgY29uZmlnOworICAqIGhhbmRsZSA9IGhpZl9vcGVuKDApOworICAqIGhpZl9pb2N0bChoYW5kbGUsIEhJRl9JT0NUTF9HRVRfUEFSQU0sICZhbXA7Y29uZmlnKTsKKyAgKiBoaWZfY2xvc2UoaGFuZGxlKTsKKyAgKiA8L2NvZGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0hJRl9SRVNVTFQgaGlmX2lvY3RsKEhJRl9IQU5ETEUgaGFuZGxlLCBISUZfSU9DVExfQ09ERSBjb2RlLCB2b2lkKiBwUGFyYW0pOworCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2lyZGFfc3cuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvaXJkYV9zdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MDVjMGQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2lyZGFfc3cuaApAQCAtMCwwICsxLDc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgIGlyZGFfc3cuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpX1NvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGludGVuZHMgZm9yIGlyZGEgZHJpdmVyIGFuZCBjdXN0b21pemF0aW9uLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lSREFfU1dfSAorI2RlZmluZSBfSVJEQV9TV19ICisKKy8qQ3VzdG9taXphZSBJUkRBKi8KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgIAorICAgdm9pZCAoKmlyZGFfc3dpdGNoX3RvX3Npcikodm9pZCk7ICAgICAgCisgICB2b2lkICgqaXJkYV9zd2l0Y2hfdG9fbWlyKSh2b2lkKTsgICAgICAKKyAgIHZvaWQgKCppcmRhX3N3aXRjaF90b19maXIpKHZvaWQpOyAgICAgIAorfWlyZGFfY3VzdG9taXplX2Z1bmN0aW9uX3N0cnVjdDsgIAorCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL2tiZF90YWJsZS5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9rYmRfdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTg1YjYxCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9rYmRfdGFibGUuaApAQCAtMCwwICsxLDE5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICBrYmRfdGFibGUuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpX1NvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIHRvIGRlZmluZSBrYXlwYWQgZGVmaW5pdGlvbgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfS0JEX1RBQkxFX0gKKyNkZWZpbmUgX0tCRF9UQUJMRV9IICAKKyAgCisgIAorICAgI2RlZmluZSAgIERFVklDRV9LRVlfMCAgICAgICAgICAgMAorICAgI2RlZmluZSAgIERFVklDRV9LRVlfMSAgICAgICAgICAgMQorICAgI2RlZmluZSAgIERFVklDRV9LRVlfMiAgICAgICAgICAgMgorICAgI2RlZmluZSAgIERFVklDRV9LRVlfMyAgICAgICAgICAgMworICAgI2RlZmluZSAgIERFVklDRV9LRVlfNCAgICAgICAgICAgNAorICAgI2RlZmluZSAgIERFVklDRV9LRVlfNSAgICAgICAgICAgNQorICAgI2RlZmluZSAgIERFVklDRV9LRVlfNiAgICAgICAgICAgNgorICAgI2RlZmluZSAgIERFVklDRV9LRVlfNyAgICAgICAgICAgNworICAgI2RlZmluZSAgIERFVklDRV9LRVlfOCAgICAgICAgICAgOAorICAgI2RlZmluZSAgIERFVklDRV9LRVlfOSAgICAgICAgICAgOQorICAgI2RlZmluZSAgIERFVklDRV9LRVlfU1RBUiAgICAgICAgMTAKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0hBU0ggICAgICAgIDExCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9WT0xfVVAgICAgICAxMgorICAgI2RlZmluZSAgIERFVklDRV9LRVlfVk9MX0RPV04gICAgMTMKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX1VQICAgICAgICAgIDE0CisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9ET1dOICAgICAgICAxNQorICAgI2RlZmluZSAgIERFVklDRV9LRVlfTEVGVCAgICAgICAgMTYKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX1JJR0hUICAgICAgIDE3CisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9NRU5VICAgICAgICAxOC8qV0FQLCBJUCovCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9GVU5DVElPTiAgICAxOS8qdm9sX2MqLy8qQ2FtZXJhKi8KKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX1NLX0xFRlQgICAgIDIwCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9TS19SSUdIVCAgICAyMQorICAgI2RlZmluZSAgIERFVklDRV9LRVlfU0VORCAgICAgICAgMjIKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0VORCAgICAgICAgIDIzCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9QT1dFUiAgICAgICAyNAorICAgI2RlZmluZSAgIERFVklDRV9LRVlfQ0xFQVIgICAgICAgMjUvKnNvZnRfYyovCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9FWFRfRlVOQzEgICAyNi8qZm9yICAiZ28gdG8geHh4IEFQKGV4LCBDYWxlbmRhcikgc2hvcnRjdXQiKi8KKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0VYVF9GVU5DMiAgIDI3Lypmb3IgICJnbyB0byB4eHggQVAoZXgsIENhbGVuZGFyKSBzaG9ydGN1dCIqLworICAgI2RlZmluZSAgIERFVklDRV9LRVlfTVAzX1BMQVlfU1RPUCAgIDI4CisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9NUDNfRldEICAgICAyOQorICAgI2RlZmluZSAgIERFVklDRV9LRVlfTVAzX0JBQ0sgICAgMzAKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0VYVF9BICAgICAgIDMxCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9FWFRfQiAgICAgICAzMgorICAgI2RlZmluZSAgIERFVklDRV9LRVlfQSAgICAgICAgICAgMzMKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0IgICAgICAgICAgIDM0CisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9DICAgICAgICAgICAzNQorICAgI2RlZmluZSAgIERFVklDRV9LRVlfRCAgICAgICAgICAgMzYKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0UgICAgICAgICAgIDM3CisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9GICAgICAgICAgICAzOAorICAgI2RlZmluZSAgIERFVklDRV9LRVlfRyAgICAgICAgICAgMzkKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0ggICAgICAgICAgIDQwCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9JICAgICAgICAgICA0MQorICAgI2RlZmluZSAgIERFVklDRV9LRVlfSiAgICAgICAgICAgNDIKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0sgICAgICAgICAgIDQzCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9MICAgICAgICAgICA0NAorICAgI2RlZmluZSAgIERFVklDRV9LRVlfTSAgICAgICAgICAgNDUKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX04gICAgICAgICAgIDQ2CisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9PICAgICAgICAgICA0NworICAgI2RlZmluZSAgIERFVklDRV9LRVlfUCAgICAgICAgICAgNDgKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX1EgICAgICAgICAgIDQ5CisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9SICAgICAgICAgICA1MAorICAgI2RlZmluZSAgIERFVklDRV9LRVlfUyAgICAgICAgICAgNTEKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX1QgICAgICAgICAgIDUyCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9VICAgICAgICAgICA1MworICAgI2RlZmluZSAgIERFVklDRV9LRVlfViAgICAgICAgICAgNTQKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX1cgICAgICAgICAgIDU1CisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9YICAgICAgICAgICA1NgorICAgI2RlZmluZSAgIERFVklDRV9LRVlfWSAgICAgICAgICAgNTcKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX1ogICAgICAgICAgIDU4CisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9FTlRFUiAgICAgICAgIDU5CisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9TUEFDRSAgICAgICAgIDYwIAorICAgI2RlZmluZSAgIERFVklDRV9LRVlfVEFCICAgICAgICAgICA2MQorICAgI2RlZmluZSAgIERFVklDRV9LRVlfREVMICAgICAgICAgICA2MgorICAgI2RlZmluZSAgIERFVklDRV9LRVlfQUxUICAgICAgICAgICA2MworICAgI2RlZmluZSAgIERFVklDRV9LRVlfQ1RSTCAgICAgICAgICA2NAorICAgI2RlZmluZSAgIERFVklDRV9LRVlfV0lOICAgICAgICAgICA2NQorICAgI2RlZmluZSAgIERFVklDRV9LRVlfU0hJRlQgICAgICAgICA2NgorICAgI2RlZmluZSAgIERFVklDRV9LRVlfUVVFU1RJT04gICAgICA2NyAgICAgCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9QRVJJT0QgICAgICAgIDY4ICAgIC8qIC4gKi8KKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0NPTU1BICAgICAgICAgNjkgICAgLyogLCAqLworICAgI2RlZmluZSAgIERFVklDRV9LRVlfRVhDTEFNQVRJT04gICA3MCAgICAvKiAhICovCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9BUE9TVFJPUEhFICAgIDcxICAgIC8qICcgKi8KKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0FUICAgICAgICAgICAgNzIgICAgLyogQCAqLworICAgI2RlZmluZSAgIERFVklDRV9LRVlfU0VORDIJICAgICAgNzMKKworICAgLy9iZWxvdyBrZXlzIGFyZSBkZWZpbmUgZm9yIHF3ZXJ0eQorICAgI2RlZmluZSAgIERFVklDRV9LRVlfQkFDS1FVT1RFICAgICA3NCAgICAvKiBgICovCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9EQVNIICAgICAgICAgIDc1ICAgIC8qIC0gKi8KKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0VRVUFMICAgICAgICAgNzYgICAgLyogPSAqLworICAgI2RlZmluZSAgIERFVklDRV9LRVlfQkFDS1NQQUNFICAgICA3NyAgICAvKiA8LSAqLworICAgI2RlZmluZSAgIERFVklDRV9LRVlfT1BFTl9QQVJFTlMgICA3OCAgICAvKiAoICovCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9DTE9TRV9QQVJFTlMgIDc5ICAgIC8qICkgKi8KKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX09QRU5fU1FVQVJFICAgODAgICAgLyogWyAqLworICAgI2RlZmluZSAgIERFVklDRV9LRVlfQ0xPU0VfU1FVQVJFICA4MSAgICAvKiBdICovCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9PUEVOX0JSQUNFICAgIDgyICAgIC8qIHsgKi8KKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0NMT1NFX0JSQUNFICAgODMgICAgLyogfSAqLworICAgI2RlZmluZSAgIERFVklDRV9LRVlfQkFDS1NMQVNIICAgICA4NCAgICAvKiBcICovCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9TRU1JQ09MT04gICAgIDg1ICAgIC8qIDsgKi8KKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX1NMQVNIICAgICAgICAgODYgICAgLyogLyAqLworICAgI2RlZmluZSAgIERFVklDRV9LRVlfRE9MTEFSICAgICAgICA4NyAgICAvKiAkICovCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9QRVJDRU5UICAgICAgIDg4ICAgIC8qICUgKi8KKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0NBUkVUICAgICAgICAgODkgICAgLyogXiAqLworICAgI2RlZmluZSAgIERFVklDRV9LRVlfQU5EICAgICAgICAgICA5MCAgICAvKiAmICovCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9RVU9URSAgICAgICAgIDkxICAgIC8qICIgKi8KKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX1BMVVMgICAgICAgICAgOTIgICAgLyogKyAqLworICAgI2RlZmluZSAgIERFVklDRV9LRVlfTEVTU19USEFOICAgICA5MyAgICAvKiA8ICovCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9HUkVBVF9USEFOICAgIDk0ICAgIC8qID4gKi8KKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX1VOREVSU0NPUkUgICAgOTUgICAgLyogXyAqLworICAgI2RlZmluZSAgIERFVklDRV9LRVlfUElQRSAgICAgICAgICA5NiAgICAvKiB8ICovCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9USUxERSAgICAgICAgIDk3ICAgIC8qIH4gKi8KKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0NBUFNfTE9DSyAgICAgOTgKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX05VTV9MT0NLICAgICAgOTkKKyAgIAorICAgI2RlZmluZSAgIERFVklDRV9LRVlfRk4gICAgICAgICAgICAxMDAKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX1NZTUJPTCAgICAgICAgMTAxCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9FTUFJTCAgICAgICAgIDEwMgorICAgI2RlZmluZSAgIERFVklDRV9LRVlfTUVTU0FHRSAgICAgICAxMDMKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0NBTUVSQSAgICAgICAgMTA0CisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9FU0MgICAgICAgICAgIDEwNQorICAgI2RlZmluZSAgIERFVklDRV9LRVlfUVdFUlRZX01FTlUgICAxMDYKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX09LICAgICAgICAgICAgMTA3CisKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0YxICAgICAgICAgICAgMTExCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9GMiAgICAgICAgICAgIDExMgorICAgI2RlZmluZSAgIERFVklDRV9LRVlfRjMgICAgICAgICAgICAxMTMKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0Y0ICAgICAgICAgICAgMTE0CisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9GNSAgICAgICAgICAgIDExNQorICAgI2RlZmluZSAgIERFVklDRV9LRVlfRjYgICAgICAgICAgICAxMTYKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0Y3ICAgICAgICAgICAgMTE3CisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9GOCAgICAgICAgICAgIDExOAorICAgI2RlZmluZSAgIERFVklDRV9LRVlfRjkgICAgICAgICAgICAxMTkKKyAgICNkZWZpbmUgICBERVZJQ0VfS0VZX0YxMCAgICAgICAgICAgMTIwCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9GMTEgICAgICAgICAgIDEyMQorICAgI2RlZmluZSAgIERFVklDRV9LRVlfRjEyICAgICAgICAgICAxMjIKKwkJI2RlZmluZSBERVZJQ0VfS0VZX0JBQ0sgICAJCQkJMTIzCisJI2RlZmluZSBERVZJQ0VfS0VZX0hPTUUgIAkJCQkJCTEyNAorCSNkZWZpbmUgTUFYX0RFVklDRV9LRVlTICAgCQkJCQkxMjUKKworCisgICAjZGVmaW5lICAgREVWSUNFX0tFWV9OT05FCQkweEZFCisKKyNlbmRpZiAKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9rZXlwYWRfaHcuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwva2V5cGFkX2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU5MjIyNQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwva2V5cGFkX2h3LmgKQEAgLTAsMCArMSwyNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAga2V5cGFkX2h3LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aV9Tb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBpcyBpbnRlbmRzIGZvciBrZXlwYWQgZHJpdmVyLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBLRVlQQURfSFdfSAorI2RlZmluZSBLRVlQQURfSFdfSAorI2luY2x1ZGUgImRydl9mZWF0dXJlcy5oIgorI2luY2x1ZGUgInJlZ19iYXNlLmgiCisjaWYgZGVmaW5lZChEUlZfS0JEXzMyS0VZU19FUV9CRUxPVykgfHwgZGVmaW5lZChGUEdBKQorI2lmbmRlZiBEUlZfS1BfT0ZGCisgICAjZGVmaW5lIAlLUF9TVFMJCQkoS1BfYmFzZSsweDAwKQorICAgI2RlZmluZSAJS1BfTE9XX0tFWQkJKEtQX2Jhc2UrMHgwNCkKKyAgICNkZWZpbmUgCUtQX0hJX0tFWQkJKEtQX2Jhc2UrMHgwOCkKKyAgICNkZWZpbmUgCUtQX0RFQk9VTkNFCQkoS1BfYmFzZSsweDBDKQorICAgI2RlZmluZSAJS1BfU0NBTgkJCShLUF9iYXNlKzB4MTApCisjZW5kaWYgIC8vIERSVl9LUF9PRkYKKyAgIAorICAgLy9rcF9zdHMKKyAgICNkZWZpbmUgCUtQX1NUU19LRVlQUkVTUwkJMHgwMDAxCisgICAjZGVmaW5lIAlLUF9TVFNfSURMRQkJICAgICAgMHgwMDAwCisgICAjZGVmaW5lIAlLUF9TVFNfTUFTSwkJICAgICAgMHgwMDAxCisgICAKKyAgIC8vS1BfTE9XX0tFWQorICAgI2RlZmluZSAJS1BfTE9XX0tFWV9NQVNLCQkweGZmZmYKKyAgIAorICAgLy9LUF9ISV9LRVkKKyAgICNkZWZpbmUgCUtQX0hJX0tFWV9NQVNLCQkgICAweDAxZmYKKyAgIAorICAgLy9LUF9ERUJPVU5DRQorICAgI2RlZmluZSAJS1BfREVCT1VOQ0VfVElNRQkgICAweDA0MDAKKyAgIAorICAgLy9LUF9TQ0FOCisgICAjZGVmaW5lIAlLUF9TQ0FOXzRLSFoJCTB4MDAwNworI2Vsc2UgICAvKkRSVl9LQkRfMzJLRVlTX0VRX0JFTE9XLEZQR0EqLworCisjaWZuZGVmIERSVl9LUF9PRkYKKyAgICNkZWZpbmUgCUtQX1NUUwkJCShLUF9iYXNlKzB4MDApCisgICAjZGVmaW5lIAlLUF9MT1dfS0VZCQkoS1BfYmFzZSsweDA0KQorICAgI2RlZmluZSAJS1BfTUlEX0tFWQkJKEtQX2Jhc2UrMHgwOCkKKworI2lmIGRlZmluZWQoRFJWX0tCRF8zMktFWVNfQUJPVkUpCisgICAjZGVmaW5lIAlLUF9ISV9LRVkJCShLUF9iYXNlKzB4MGMpCisgICAjZGVmaW5lIAlLUF9ERUJPVU5DRQkJKEtQX2Jhc2UrMHgxMCkKKyNlbGlmIGRlZmluZWQoRFJWX0tCRF80OEtFWVNfQUJPVkUpCisgICAjZGVmaW5lIAlLUF9NSUQxX0tFWQkJKEtQX2Jhc2UrMHgwYykKKyAgICNkZWZpbmUgCUtQX0hJX0tFWQkJKEtQX2Jhc2UrMHgxMCkKKyAgICNkZWZpbmUgCUtQX0RFQk9VTkNFCQkoS1BfYmFzZSsweDE4KQorICAgCisgICAjZGVmaW5lIAlLUF9NSUQxX0tFWV9NQVNLCTB4ZmZmZgorI2VsaWYgZGVmaW5lZChEUlZfS0JEXzY0S0VZU19BQk9WRSkKKyAgICNkZWZpbmUgCUtQX01JRDFfS0VZCQkoS1BfYmFzZSsweDBjKQorICAgI2RlZmluZSAJS1BfTUlEMl9LRVkJCShLUF9iYXNlKzB4MTApCisgICAjZGVmaW5lIAlLUF9ISV9LRVkJCShLUF9iYXNlKzB4MTQpCisgICAjZGVmaW5lIAlLUF9ERUJPVU5DRQkJKEtQX2Jhc2UrMHgxOCkKKyAgIAorICAgI2RlZmluZSAJS1BfTUlEMV9LRVlfTUFTSwkweGZmZmYKKyAgICNkZWZpbmUgCUtQX01JRDJfS0VZX01BU0sJMHhmZmZmCisjZW5kaWYgICAvKkRSVl9LQkRfMzJLRVlTX0FCT1ZFKi8KKyNlbmRpZiAgLy8gRFJWX0tQX09GRgorCisgICAjZGVmaW5lIAlLUF9TVFNfS0VZUFJFU1MJCTB4MDAwMQorICAgI2RlZmluZSAJS1BfU1RTX0lETEUJCTB4MDAwMAorICAgI2RlZmluZSAJS1BfU1RTX01BU0sJCTB4MDAwMQorICAgCisgICAjZGVmaW5lIAlLUF9MT1dfS0VZX01BU0sJCTB4ZmZmZgorICAgI2RlZmluZSAJS1BfTUlEX0tFWV9NQVNLCQkweGZmZmYKKworICAgI2RlZmluZSAJS1BfREVCT1VOQ0VfVElNRQkgICAweDAyMDAKKyNlbmRpZiAgIC8qRFJWX0tCRF8zMktFWVNfRVFfQkVMT1csRlBHQSovCisKKyNpZiBkZWZpbmVkKERSVl9LQkRfMzZfS0VZUykKKyAgICNkZWZpbmUgCUtQX0hJX0tFWV9NQVNLCQkgICAweDAwZmYKKyNlbGlmIGRlZmluZWQoRFJWX0tCRF80Ml9LRVlTKQorICAgI2RlZmluZSAJS1BfSElfS0VZX01BU0sJCSAgIDB4MDdmZgorI2VsaWYgZGVmaW5lZChEUlZfS0JEXzM1X0tFWVMpCisgICAjZGVmaW5lICBLUF9ISV9LRVlfTUFTSyAgICAgICAweDAwMDcKKyNlbGlmIGRlZmluZWQoRFJWX0tCRF81NF9LRVlTKQorICAgI2RlZmluZSAJS1BfSElfS0VZX01BU0sJCSAgIDB4MDAzRgorI2VsaWYgZGVmaW5lZChEUlZfS0JEXzcyX0tFWVMpCisgICAjZGVmaW5lICBLUF9ISV9LRVlfTUFTSyAgICAgICAweDAwZmYKKyNlbmRpZgorI2VuZGlmICAgLypLRVlQQURfSFdfSCovCisKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9rZXlwYWRfc3cuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwva2V5cGFkX3N3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5ZWQyZQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwva2V5cGFkX3N3LmgKQEAgLTAsMCArMSw1NDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAga2V5cGFkX3N3LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aV9Tb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBpcyBpbnRlbmRzIGZvciBrZXlwYWQgZHJpdmVyIGFuZCBhZGFwdGlvbi4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfS0VZUEFEX1NXX0gKKyNkZWZpbmUgX0tFWVBBRF9TV19ICisKKyNpbmNsdWRlICJpbnRyQ3RybC5oIgorI2luY2x1ZGUgImRydl9mZWF0dXJlc19rYmQuaCIKKyNpbmNsdWRlICJkcnZfY29tbS5oIgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKworCisjaWYgZGVmaW5lZChEUlZfS0JEXzI1X0tFWVMpIHx8IGRlZmluZWQoRlBHQSkKKyAgICNkZWZpbmUgIGtiZF9hbGxrZXlzICAgICAgICAgIDI1CisgICAjZGVmaW5lICBLQkRfUk9XICAgICAgICAgICAgICA1CisgICAjZGVmaW5lICBLQkRfQ09MVU1OX01BU0sgICAgICAweDFGIC8vNSBiaXRzIG1hc2sKKyAgICNkZWZpbmUgIEtCRF9DT0xVTU4gICAgICAgICAgIDUKKyNlbGlmIGRlZmluZWQoRFJWX0tCRF8zNl9LRVlTKQorICAgI2RlZmluZSAga2JkX2FsbGtleXMgICAgICAgICAgMzYKKyAgICNkZWZpbmUgIEtCRF9ST1cgICAgICAgICAgICAgIDYKKyAgICNkZWZpbmUgIEtCRF9DT0xVTU5fTUFTSyAgICAgIDB4M0YgLy82IGJpdHMgbWFzaworICAgI2RlZmluZSAgS0JEX0NPTFVNTiAgICAgICAgICAgNgorI2VsaWYgZGVmaW5lZChEUlZfS0JEXzQyX0tFWVMpCisgICAjZGVmaW5lICBrYmRfYWxsa2V5cyAgICAgICAgICA0MiAgIAorICAgI2RlZmluZSAgS0JEX1JPVyAgICAgICAgICAgICAgNgorICAgI2RlZmluZSAgS0JEX0NPTFVNTl9NQVNLICAgICAgMHgzRiAvLzYgYml0cyBtYXNrCisgICAjZGVmaW5lICBLQkRfQ09MVU1OICAgICAgICAgICA3CisjZWxpZiBkZWZpbmVkKERSVl9LQkRfMzVfS0VZUykKKyAgICNkZWZpbmUgIGtiZF9hbGxrZXlzICAgICAgICAgIDM1CisgICAjZGVmaW5lICBLQkRfUk9XICAgICAgICAgICAgICA1CisgICAjZGVmaW5lICBLQkRfQ09MVU1OX01BU0sgICAgICAweDFGIC8vNSBiaXRzIG1hc2sKKyAgICNkZWZpbmUgIEtCRF9DT0xVTU4gICAgICAgICAgIDcKKyNlbGlmIGRlZmluZWQoRFJWX0tCRF81NF9LRVlTKQorICAgI2RlZmluZSAga2JkX2FsbGtleXMgICAgICAgICAgNTQKKyAgICNkZWZpbmUgIEtCRF9ST1cgICAgICAgICAgICAgIDYKKyAgICNkZWZpbmUgIEtCRF9DT0xVTU5fTUFTSyAgICAgIDB4M0YgLy82IGJpdHMgbWFzaworICAgI2RlZmluZSAgS0JEX0NPTFVNTiAgICAgICAgICAgOQorI2VsaWYgZGVmaW5lZChEUlZfS0JEXzYzX0tFWVMpCisgICAjZGVmaW5lICBrYmRfYWxsa2V5cyAgICAgICAgICA2MworICAgI2RlZmluZSAgS0JEX1JPVyAgICAgICAgICAgICAgNworICAgI2RlZmluZSAgS0JEX0NPTFVNTl9NQVNLICAgICAgMHgzRiAvLzYgYml0cyBtYXNrCisgICAjZGVmaW5lICBLQkRfQ09MVU1OICAgICAgICAgICA5IAorI2VsaWYgZGVmaW5lZChEUlZfS0JEXzcyX0tFWVMpCisgICAjZGVmaW5lICBrYmRfYWxsa2V5cyAgICAgICAgICA3MgorICAgI2RlZmluZSAgS0JEX1JPVyAgICAgICAgICAgICAgOAorICAgI2RlZmluZSAgS0JEX0NPTFVNTl9NQVNLICAgICAgMHhGRiAvLzggYml0cyBtYXNrCisgICAjZGVmaW5lICBLQkRfQ09MVU1OICAgICAgICAgICA5CisjZWxpZiBkZWZpbmVkKERSVl9LQkRfTk9UX0VYSVNUKQorICAgI2RlZmluZSAga2JkX2FsbGtleXMgICAgICAgICAgMQorICAgI2RlZmluZSAgS0JEX1JPVyAgICAgICAgICAgICAgMQorICAgI2RlZmluZSAgS0JEX0NPTFVNTl9NQVNLICAgICAgMHgxIC8vMSBiaXRzIG1hc2sKKyAgICNkZWZpbmUgIEtCRF9DT0xVTU4gICAgICAgICAgIDEKKyNlbmRpZiAgIC8qRFJWX0tCRF8yNV9LRVlTLEZQR0EqLworCisKKy8qa2V5cGFkKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICBrYmRfb25la2V5X3ByZXNzPTAsCisgICAgICBrYmRfb25la2V5X3JlbGVhc2UsCisjaWZkZWYgVFdPX0tFWV9FTkFCTEUKKyAgICAgIGtiZF90d29rZXlfcHJlc3MsCisgICAgICBrYmRfdHdva2V5X3JlbGVhc2UsCisjZW5kaWYgICAvKlRXT19LRVlfRU5BQkxFKi8KKyAgICAgIGtiZF9vbmVrZXlfbG9uZ3ByZXNzLAorICAgICAga2JkX29uZWtleV9yZXBlYXRlZCwKKyAgICAgIGtiZF9vbmVrZXlfZnVsbHByZXNzLAorICAgICAga2JkX3R3b2tleV9kZXRlY3Rpb25fZW5hYmxlLAorICAgICAga2JkX3RocmVla2V5X2RldGVjdGlvbl9lbmFibGUsCisgICAgICBrYmRfbXVsdGlrZXlfZGV0ZWN0aW9uX2Rpc2FibGUKK30ga2JkX2V2ZW50OworCisjZGVmaW5lICBrYmRfYnVmZmVyX3NpemUgICAgICAgICAzMgorCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYmRfZXZlbnQgICBLZXlldmVudDsKKyNpZmRlZiBUV09fS0VZX0VOQUJMRQorICAga2FsX3VpbnQ4ICAgS2V5ZGF0YVsyXTsKKyNlbHNlIC8qIVRXT19LRVlfRU5BQkxFKi8KKyAgIGthbF91aW50OCAgIEtleWRhdGFbMV07CisjZW5kaWYgICAvKlRXT19LRVlfRU5BQkxFKi8KKyNpZiBkZWZpbmVkKF9fVEMwMV9fKQorICAga2FsX3VpbnQzMiAga2V5dGltZXN0YW1wOworI2VuZGlmCit9IGtiZF9kYXRhOworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYmRfZGF0YSAgICAgICBrYmRfZGF0YV9idWZmZXJba2JkX2J1ZmZlcl9zaXplXTsKKyAgIGthbF91aW50OCAgICAgIGtiZF9kYXRhX2J1ZmZlcl9yaW5kZXg7CisgICBrYWxfdWludDggICAgICBrYmRfZGF0YV9idWZmZXJfd2luZGV4OworfSBrYmRfYnVmZmVyX3N0cnVjdDsKKworLypDdXN0b21pemFlIEtleXBhZCovCit0eXBlZGVmIHN0cnVjdCB7CisJLyprZXlwYWQgbWFwcGluZyovCisjaWYgZGVmaW5lZChEUlZfS0JEX0RSVlRPT0xfRVhURU5EXzcyX0tFWVMpCisgICBrYWxfdWludDgga2V5cGFkWzcyXTsvL2tiZF9hbGxrZXlzK0tCRF9DT0xVTU4qMl07IC8vcmVzZXJ2ZSBvbmUgR05EIHJvdyBhbmQgR1BPIHJvdy4gICAKKyNlbHNlCisgICBrYWxfdWludDgga2V5cGFkW2tiZF9hbGxrZXlzXTsKKyNlbmRpZi8vI2lmIGRlZmluZWQoRFJWX0tCRF9EUlZUT09MX0VYVEVORF83Ml9LRVlTKQorI2lmIGRlZmluZWQoX19FWFRFTkRfUVdFUlRZX0tFWVBBRF9fKQorICAga2FsX3VpbnQxNiBrYmRfZXh0ZW5kX3Jvd19HUE87ICAvL2V4dGVuZCByb3cgdXNlIHdoaWNoIEdQTworI2VuZGlmIC8vI2lmIGRlZmluZWQoX19FWFRFTkRfUVdFUlRZX0tFWVBBRF9fKQorCS8qcG93ZXIgb24gcGVyaW9kKi8KKyAgIGthbF91aW50MzIgQ3VzdG9tX0tleXByZXNzX1BlcmlvZDsKKyAgIC8qcG93ZXIga2V5ICBwb3NpdGlvbiovCisgICBrYWxfdWludDggcG93ZXJrZXlfcG9zaXRpb247ICAgCit9IGtleXBhZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsgIAorICAgY29uc3Qga2V5cGFkX3N0cnVjdCAqICgqa2V5cGFkX0dldF9EYXRhKSh2b2lkKTsKKyAgICNpZmRlZiBfX0tCRF8yU1RFUF9LRVlfU1VQUE9SVF9fICAgCisgICBrYWxfYm9vbCAoKmtleXBhZF9pc19mdWxscHJlc3MpKGthbF91aW50OCBrZXkpOworICAga2FsX2Jvb2wgKCprZXlwYWRfY2hlY2tfZnVsbHByZXNzKSh2b2lkKTsgICAKKyAgICNlbmRpZiAKK31rZXlwYWRfY3VzdG9taXplX2Z1bmN0aW9uX3N0cnVjdDsgCisKKy8qa2V5cGFkKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICBsb3dfa2V5PTAsCisjaWYgZGVmaW5lZChEUlZfS0JEXzMyS0VZU19BQk9WRSkKKyAgICAgIG1lZGl1bV9rZXksCisjZWxpZiBkZWZpbmVkKERSVl9LQkRfNDhLRVlTX0FCT1ZFKQorICAgICAgbWVkaXVtX2tleSwKKyAgICAgIG1lZGl1bV9rZXkxLAorI2VsaWYgZGVmaW5lZChEUlZfS0JEXzY0S0VZU19BQk9WRSkKKyAgICAgIG1lZGl1bV9rZXksCisgICAgICBtZWRpdW1fa2V5MSwKKyAgICAgIG1lZGl1bV9rZXkyLAorI2VuZGlmICAgICAgCisgICAgICBoaWdoX2tleQorCit9IGtiZF90eXBlOworCisKKyAKKy8qCitleHRlcm4gdm9pZCBLYmRfSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGtleXBhZF9jdXN0b21pemVfaW5pdCh2b2lkKTsKKwora2FsX2Jvb2wga2JkX2tleV9kZXRfbW9kZV9zd2l0Y2goa2JkX2tleV9kZXRfbW9kZSBtb2RlKTsKKyBrYWxfYm9vbCBrYmRfSXNLZXlCdXR0b25TdXBwb3J0ZWQoa2FsX3VpbnQ4IGtleSk7CisKK2V4dGVybiBrYWxfYm9vbCBQb3dlcktleV9QcmVzc2VkKHZvaWQpOworZXh0ZXJuIGthbF9ib29sIGtiZF9pc19tdXRpcGxlX2tleShrYWxfdWludDgga2V5KTsKK2V4dGVybiBrYWxfYm9vbCBrYmRfSXNLZXlQcmVzc2VkKGthbF91aW50OCBrZXkpOworCitleHRlcm4ga2FsX3VpbnQzMiBLYmRfR2V0S2V5RXZlbnRDb3VudCh2b2lkKTsKK2V4dGVybiBrYWxfYm9vbCBLYmRfR2V0S2V5RGF0YShrYmRfZGF0YSAqa2V5ZGF0YSk7CitleHRlcm4ga2FsX2Jvb2wgS2JkX1BlZWtCdWZmZXIoa2JkX2RhdGEgKmtleWRhdGEsIGthbF9ib29sIHNwZWNpZnlfcmVhZCwgCisJCQkJCQkJCQkJCWthbF91aW50MzIgcmVhZF9wb2ludGVyLGthbF91aW50MzIqIGN1cnJlbnRfcmVhZF9wb2ludGVyKTsKK2V4dGVybiBrYWxfdWludDMyIGtiZF9QdXRLZXlEYXRhKGthbF91aW50OCBrZXkpOworCitleHRlcm4gdm9pZCBLYmRfU2V0TG9uZ1ByZXNzVGltZShrYWxfdWludDMyIHRpY2tzKTsKK2V4dGVybiB2b2lkIEtiZF9TZXRSZXBlYXRUaW1lKGthbF91aW50MzIgdGlja3MpOworKi8KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvbHB3ci5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9scHdyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ2N2E3MQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvbHB3ci5oCkBAIC0wLDAgKzEsMjEzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgIGxwd3IuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpX1NvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGludGVuZHMgZm9yIGxvdyBwb3dlciBjb250cm9sCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xQV1JfSF9fCisjZGVmaW5lIF9fTFBXUl9IX18KKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAiZHJ2X2NvbW0uaCIKKyNpbmNsdWRlICJkcnZwZG4uaCIKKworI2RlZmluZSBNQUlOX01BWF9NT0RVTEUgICAgMzIKKyNkZWZpbmUgU1VCX01BWF9NT0RVTEUgICAgIDMyCisKK3R5cGVkZWYgZW51bSB7CisgICAgICBMUFdSX0RSVjBfTU9EVUxFX0dST1VQPTAsCisgICAgICBMUFdSX0RSVjFfTU9EVUxFX0dST1VQLAorICAgICAgTFBXUl9NTV9NT0RVTEVfR1JPVVAsCisgICAgICBMUFdSX01BWF9NT0RVTEVfR1JPVVAsCisJICBMUFdSX05VTExfTU9EVUxFX0dST1VQID0gMHhmZQorfSBMUFdSX01PRFVMRV9HUk9VUDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgREVWSUNFX0lEX0VOVU0gICAgICAgICAgbW9kdWxlX2lkOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgbHB3cl9tYWluX3NtX2hhbmRsZTsKKyAgIGthbF91aW50MzIgICAgICAgICAgICAgIGxwd3Jfc3ViX2dsYl9oYW5sZGU7IC8vY2VudHJhbCBoYW5kbGUgdG8gbWFpbnRhaW4gc3ViIG1vZHVsZQorICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgbHB3cl9zdWJfc2xlZXBEaXNhYmxlOworICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKCpwZG5fZW5hYmxlX2N0cmxfY2FsbGJhY2spKHZvaWQgKnBhcmFtZXRlcik7CisgICB2b2lkICAgICAgICAgICAgICAgICAgICAoKnBkbl9kaXNhYmxlX2N0cmxfY2FsbGJhY2spKHZvaWQgKnBhcmFtZXRlcik7Cit9IExQV1JfTUFJTl9TVFJVQ1Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExQV1JfTU9EVUxFX0dST1VQICAgICAgIGdyb3VwX2lkOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgbHB3cl9ncm91cF9zbV9oYW5kbGU7ICAgLy9mcm9tIGwxIHNtIG1vZHVsZQorICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgbHB3cl9tYWluX2hhbmRsZV9jbnQ7ICAgICAgICAvL2NlbnRyYWwgaGFuZGxlIHRvIG1haW50YWluIG1haW4gbW9kdWxlCisgICBrYWxfdWludDMyICAgICAgICAgICAgICBscHdyX21haW5fc2xlZXBEaXNhYmxlOworICAgTFBXUl9NQUlOX1NUUlVDVCAgICAgICAgbWFpbl9pbmZvW01BSU5fTUFYX01PRFVMRV07Cit9IExQV1JfSU5GT19TVFJVQ1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBERVZJQ0VfSURfRU5VTSAgICAgICAgICBpZDsKKyAgIExQV1JfTU9EVUxFX0dST1VQICAgICAgIGdyb3VwOworfSBMUFdSX0dST1VQX01BUF9TVFJVQ1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBMUFdSX01PRFVMRV9HUk9VUCAgICAgICAgICBncm91cF9pZDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgIG1haW5faGFuZGxlOworICAgREVWSUNFX0lEX0VOVU0gICAgICAgICAgICAgbW9kdWxlX2lkOworfSBMUFdSX1NUUlVDVDsKKworI2lmIGRlZmluZWQgKF9fT0xEX1BETl9BUkNIX18pCisjaWYgZGVmaW5lZChfX05FV19EUlZQRE5fRlVOQ1RJT05fXykKKyAgICNkZWZpbmUgRFJWUEROX0VOQUJMRTIoYWRkcixjb2RlLHBkbl9pZCkgXAorICAgICAgRFJWUEROX0VuYWJsZTIoYWRkcixjb2RlLHBkbl9pZCkKKyAgICNkZWZpbmUgRFJWUEROX0RJU0FCTEUyKGFkZHIsY29kZSxwZG5faWQpIFwKKyAgICAgIERSVlBETl9EaXNhYmxlMihhZGRyLGNvZGUscGRuX2lkKQorI2Vsc2UKKworICAgI2RlZmluZSBEUlZQRE5fRU5BQkxFMihhZGRyLGNvZGUscGRuX2lkKSBcCisgICAgICBEUlZQRE5fRW5hYmxlKGFkZHIsY29kZSxwZG5faWQpCisgICAjZGVmaW5lIERSVlBETl9ESVNBQkxFMihhZGRyLGNvZGUscGRuX2lkKSBcCisgICAgICBEUlZQRE5fRGlzYWJsZShhZGRyLGNvZGUscGRuX2lkKQorI2VuZGlmCisjZWxzZSAvL2RlZmluZWQgKF9fT0xEX1BETl9BUkNIX18pCisgICAjZGVmaW5lIERSVlBETl9FTkFCTEUyKHBkbl9pZCkgXAorICAgICAgRFJWUEROX0VuYWJsZTIocGRuX2lkKQorICAgI2RlZmluZSBEUlZQRE5fRElTQUJMRTIocGRuX2lkKSBcCisgICAgICBEUlZQRE5fRGlzYWJsZTIocGRuX2lkKQorI2VuZGlmIC8vZGVmaW5lZCAoX19PTERfUEROX0FSQ0hfXykKKy8vIE1vRElTIHBhcnNlciBza2lwIHN0YXJ0CisvKkNvbW1vbiBtb2R1bGUqLworZXh0ZXJuIHZvaWQgbHB3cl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbHB3cl9tb2R1bGVfb3BlbihMUFdSX1NUUlVDVCAgICAgICpscHdyX2hhbmRsZSwgCisgICAgICAgICAgICAgICAgICAgICAgREVWSUNFX0lEX0VOVU0gICBtb2R1bGVfaWQsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnBkbl9lbmFibGVfY3RybF9jYWxsYmFjaykodm9pZCAqcGFyYW1ldGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcGRuX2Rpc2FibGVfY3RybF9jYWxsYmFjaykodm9pZCAqcGFyYW1ldGVyKQorICAgICAgICAgICAgICAgICAgICAgICk7CisvKk1haW4gbW9kdWxlKi8KK2V4dGVybiB2b2lkIGxwd3JfbWFpbl9kaXNhYmxlKExQV1JfU1RSVUNUICpscHdyX2hhbmRsZSwgCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICpwYXJhbWV0ZXIpOworZXh0ZXJuIHZvaWQgbHB3cl9tYWluX2VuYWJsZShMUFdSX1NUUlVDVCAqbHB3cl9oYW5kbGUsIAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICpwYXJhbWV0ZXIpOworZXh0ZXJuIHZvaWQgbHB3cl9tYWluX2Zhc3RfZGlzYWJsZShMUFdSX1NUUlVDVCAqbHB3cl9oYW5kbGUpOworZXh0ZXJuIHZvaWQgbHB3cl9tYWluX2Zhc3RfZW5hYmxlKExQV1JfU1RSVUNUICpscHdyX2hhbmRsZSk7CitleHRlcm4gdm9pZCBscHdyX21haW5fZmFzdF9kaXNhYmxlMihMUFdSX1NUUlVDVCAqbHB3cl9oYW5kbGUsIAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAqcGFyYW1ldGVyKTsKK2V4dGVybiB2b2lkIGxwd3JfbWFpbl9mYXN0X2VuYWJsZTIoTFBXUl9TVFJVQ1QgKmxwd3JfaGFuZGxlLCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAqcGFyYW1ldGVyKTsKKy8qU3ViIG1vZHVsZSovCitleHRlcm4ga2FsX3VpbnQ4IGxwd3JfZ2V0X3N1Yl9oYW5kbGUoTFBXUl9TVFJVQ1QgKmxwd3JfaGFuZGxlKTsKK2V4dGVybiB2b2lkIGxwd3JfZnJlZV9zdWJfaGFuZGxlKExQV1JfU1RSVUNUICpscHdyX2hhbmRsZSwga2FsX3VpbnQ4IHN1Yl9oYW5kbGUpOworZXh0ZXJuIHZvaWQgbHB3cl9zdWJfZGlzYWJsZShMUFdSX1NUUlVDVCAgICpscHdyX2hhbmRsZSwgCisgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICBzdWJfaGFuZGxlLCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICgqcGRuX2Rpc2FibGVfY3RybF9jYWxsYmFjaykodm9pZCAqcGFyYW1ldGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICpwYXJhbWV0ZXIpOworZXh0ZXJuIHZvaWQgbHB3cl9zdWJfZW5hYmxlKExQV1JfU1RSVUNUICpscHdyX2hhbmRsZSwgCisgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICBzdWJfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgKCpwZG5fZW5hYmxlX2N0cmxfY2FsbGJhY2spKHZvaWQgKnBhcmFtZXRlciksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAqcGFyYW1ldGVyKTsKKyNpZiBkZWZpbmVkIChfX09MRF9QRE5fQVJDSF9fKQorI2lmIGRlZmluZWQoX19ORVdfRFJWUEROX0ZVTkNUSU9OX18pCitleHRlcm4gdm9pZCBEUlZQRE5fRW5hYmxlMihrYWxfdWludDMyIGFkZHIsa2FsX3VpbnQxNiBjb2RlLFBETl9ERVZJQ0UgaGFuZGxlKTsKK2V4dGVybiB2b2lkIERSVlBETl9EaXNhYmxlMihrYWxfdWludDMyIGFkZHIsa2FsX3VpbnQxNiBjb2RlLFBETl9ERVZJQ0UgaGFubGRlKTsKKyNlbmRpZgorI2Vsc2UKKyAgIGV4dGVybiB2b2lkIERSVlBETl9FbmFibGUyKFBETl9ERVZJQ0UgaGFuZGxlKTsKKyAgIGV4dGVybiB2b2lkIERSVlBETl9EaXNhYmxlMihQRE5fREVWSUNFIGhhbmxkZSk7CisjZW5kaWYKKy8vIE1vRElTIHBhcnNlciBza2lwIGVuZAorI2VuZGlmCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvbW90aW9uX3NlbnNvci5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9tb3Rpb25fc2Vuc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjODE1MQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvbW90aW9uX3NlbnNvci5oCkBAIC0wLDAgKzEsMjgzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgIG1vdGlvbl9zZW5zb3IuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpX1NvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBNb2R1bGUgaXMgZm9yIG1vdGlvbiBzZW5zb3IgZHJpdmVyLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9NT1RJT05TRU5TT1JfSAorI2RlZmluZSBfTU9USU9OU0VOU09SX0gKKworI2RlZmluZSBTSU5fSU5URVJWQUxfTlVNIDkxCisjZGVmaW5lIFNJTl8wICAgMCAgIAorI2RlZmluZSBTSU5fMSAgIDkgICAKKyNkZWZpbmUgU0lOXzIgICAxOCAgCisjZGVmaW5lIFNJTl8zICAgMjcgIAorI2RlZmluZSBTSU5fNCAgIDM2ICAKKyNkZWZpbmUgU0lOXzUgICA0NSAgCisjZGVmaW5lIFNJTl82ICAgNTMgIAorI2RlZmluZSBTSU5fNyAgIDYyICAKKyNkZWZpbmUgU0lOXzggICA3MSAgCisjZGVmaW5lIFNJTl85ICAgODAgIAorI2RlZmluZSBTSU5fMTAgIDg5ICAKKyNkZWZpbmUgU0lOXzExICA5OCAgCisjZGVmaW5lIFNJTl8xMiAgMTA2IAorI2RlZmluZSBTSU5fMTMgIDExNSAKKyNkZWZpbmUgU0lOXzE0ICAxMjQgCisjZGVmaW5lIFNJTl8xNSAgMTMyIAorI2RlZmluZSBTSU5fMTYgIDE0MSAKKyNkZWZpbmUgU0lOXzE3ICAxNTAgCisjZGVmaW5lIFNJTl8xOCAgMTU4IAorI2RlZmluZSBTSU5fMTkgIDE2NyAKKyNkZWZpbmUgU0lOXzIwICAxNzUgCisjZGVmaW5lIFNJTl8yMSAgMTgzIAorI2RlZmluZSBTSU5fMjIgIDE5MiAKKyNkZWZpbmUgU0lOXzIzICAyMDAgCisjZGVmaW5lIFNJTl8yNCAgMjA4IAorI2RlZmluZSBTSU5fMjUgIDIxNiAKKyNkZWZpbmUgU0lOXzI2ICAyMjQgCisjZGVmaW5lIFNJTl8yNyAgMjMyIAorI2RlZmluZSBTSU5fMjggIDI0MCAKKyNkZWZpbmUgU0lOXzI5ICAyNDggCisjZGVmaW5lIFNJTl8zMCAgMjU2IAorI2RlZmluZSBTSU5fMzEgIDI2NCAKKyNkZWZpbmUgU0lOXzMyICAyNzEgCisjZGVmaW5lIFNJTl8zMyAgMjc5IAorI2RlZmluZSBTSU5fMzQgIDI4NiAKKyNkZWZpbmUgU0lOXzM1ICAyOTQgCisjZGVmaW5lIFNJTl8zNiAgMzAxIAorI2RlZmluZSBTSU5fMzcgIDMwOCAKKyNkZWZpbmUgU0lOXzM4ICAzMTUgCisjZGVmaW5lIFNJTl8zOSAgMzIyIAorI2RlZmluZSBTSU5fNDAgIDMyOSAKKyNkZWZpbmUgU0lOXzQxICAzMzYgCisjZGVmaW5lIFNJTl80MiAgMzQyIAorI2RlZmluZSBTSU5fNDMgIDM0OSAKKyNkZWZpbmUgU0lOXzQ0ICAzNTYgCisjZGVmaW5lIFNJTl80NSAgMzYyIAorI2RlZmluZSBTSU5fNDYgIDM2OCAKKyNkZWZpbmUgU0lOXzQ3ICAzNzQgCisjZGVmaW5lIFNJTl80OCAgMzgwIAorI2RlZmluZSBTSU5fNDkgIDM4NiAKKyNkZWZpbmUgU0lOXzUwICAzOTIgCisjZGVmaW5lIFNJTl81MSAgMzk4IAorI2RlZmluZSBTSU5fNTIgIDQwMyAKKyNkZWZpbmUgU0lOXzUzICA0MDkgCisjZGVmaW5lIFNJTl81NCAgNDE0IAorI2RlZmluZSBTSU5fNTUgIDQxOSAKKyNkZWZpbmUgU0lOXzU2ICA0MjQgCisjZGVmaW5lIFNJTl81NyAgNDI5IAorI2RlZmluZSBTSU5fNTggIDQzNCAKKyNkZWZpbmUgU0lOXzU5ICA0MzkgCisjZGVmaW5lIFNJTl82MCAgNDQzIAorI2RlZmluZSBTSU5fNjEgIDQ0OCAKKyNkZWZpbmUgU0lOXzYyICA0NTIgCisjZGVmaW5lIFNJTl82MyAgNDU2IAorI2RlZmluZSBTSU5fNjQgIDQ2MCAKKyNkZWZpbmUgU0lOXzY1ICA0NjQgCisjZGVmaW5lIFNJTl82NiAgNDY4IAorI2RlZmluZSBTSU5fNjcgIDQ3MSAKKyNkZWZpbmUgU0lOXzY4ICA0NzUgCisjZGVmaW5lIFNJTl82OSAgNDc4IAorI2RlZmluZSBTSU5fNzAgIDQ4MSAKKyNkZWZpbmUgU0lOXzcxICA0ODQgCisjZGVmaW5lIFNJTl83MiAgNDg3IAorI2RlZmluZSBTSU5fNzMgIDQ5MCAKKyNkZWZpbmUgU0lOXzc0ICA0OTIgCisjZGVmaW5lIFNJTl83NSAgNDk0IAorI2RlZmluZSBTSU5fNzYgIDQ5NyAKKyNkZWZpbmUgU0lOXzc3ICA0OTkgCisjZGVmaW5lIFNJTl83OCAgNTAxIAorI2RlZmluZSBTSU5fNzkgIDUwMyAKKyNkZWZpbmUgU0lOXzgwICA1MDQgCisjZGVmaW5lIFNJTl84MSAgNTA2IAorI2RlZmluZSBTSU5fODIgIDUwNyAKKyNkZWZpbmUgU0lOXzgzICA1MDggCisjZGVmaW5lIFNJTl84NCAgNTA5IAorI2RlZmluZSBTSU5fODUgIDUxMCAKKyNkZWZpbmUgU0lOXzg2ICA1MTEgCisjZGVmaW5lIFNJTl84NyAgNTExIAorI2RlZmluZSBTSU5fODggIDUxMiAKKyNkZWZpbmUgU0lOXzg5ICA1MTIgCisjZGVmaW5lIFNJTl85MCAgNTEyIAorCisvKiBNdXN0IGJlIGEgcG93ZXIgb2YgMi4gKi8KKyNkZWZpbmUgTU9USU9OX1NFTlNPUl9CVUZGRVJfU0laRSAxMjgKKwordHlwZWRlZiBlbnVtIHsKKyAgICAgIEJVRkZfRU1QVFksCisgICAgICBCVUZGX0RBVEFfRVhJU1QsCisgICAgICBCVUZGX0ZVTEwKK30gTW90aW9uX1NlbnNvcl9CdWZmU3RhdGVfZW51bTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9pbnQxNgl4X2FjYzsKKyAgIGthbF9pbnQxNiAJeV9hY2M7CisgICBrYWxfaW50MTYgCXpfYWNjOworfU1vdGlvblNlbnNvckRhdGFTdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfaW50MTYJeF9nYWluOworICAga2FsX2ludDE2IAl5X2dhaW47CisgICBrYWxfaW50MTYgCXpfZ2FpbjsKKyAgIGthbF9pbnQxNgl4X29mZnNldDsKKyAgIGthbF9pbnQxNiAJeV9vZmZzZXQ7CisgICBrYWxfaW50MTYgCXpfb2Zmc2V0OworfU1vdGlvblNlbnNvckNhbGlTdHJ1Y3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAKK3R5cGVkZWYgdm9pZCAoKk1TX0RBVEFfRlVOQykodm9pZCAqcGFyYW1ldGVyLCBNb3Rpb25fU2Vuc29yX0J1ZmZTdGF0ZV9lbnVtIHN0YXRlKTsgCit0eXBlZGVmIHZvaWQgKCpNU19JTlRfQ0JfRlVOQykodm9pZCk7IAorCit0eXBlZGVmIHN0cnVjdAoreworICAgTW90aW9uU2Vuc29yQ2FsaVN0cnVjdCBjYWxpOworICAgTW90aW9uU2Vuc29yRGF0YVN0cnVjdCBwcmU7ICAgCisgICBrYWxfdWludDggICAgICAgICAgICAgIHNhbXBsZV9wZXJpb2Q7CisgICBrYWxfdWludDggICAgICAgICAgICAgIGdwdF9oYW5kbGU7CisgICBrYWxfdGltZXJpZAkJICBtb3Rpb25zZW5zb3JfdGltZXJpZDsKKyAgIGthbF91aW50MzIgICAgICAgICAgICAgYWNjX29mZnNldDsgICAKKyAgIGthbF91aW50MzIgICAgICAgICAgICAgbG93X2dfbGV2ZWw7IAorICAga2FsX3VpbnQzMiAgICAgICAgICAgICBoaWdoX2dfbGV2ZWw7ICAgCisgICBrYWxfdWludDMyICAgICAgICAgICAgIGxvd19nX2RlYm91bmNlOyAKKyAgIGthbF91aW50MzIgICAgICAgICAgICAgaGlnaF9nX2RlYm91bmNlOyAgIAorICAgTVNfREFUQV9GVU5DICAgICAgICAgICBjYl9mdW5jOworICAgTVNfSU5UX0NCX0ZVTkMgICAgICAgICBsb3dfZ19jYjsKKyAgIE1TX0lOVF9DQl9GVU5DICAgICAgICAgaGlnaF9nX2NiOworCXZvaWQgICAgICAgICAgICAgICAgICAgKnBhcmE7CQkKK31Nb3Rpb25TZW5zb3JTdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBNb3Rpb25TZW5zb3JEYXRhU3RydWN0ICBtb3Rpb25fc2Vuc29yX2RhdGFbTU9USU9OX1NFTlNPUl9CVUZGRVJfU0laRV07CisgICBrYWxfdWludDE2ICAgICBtb3Rpb25fc2Vuc29yX3JpbmRleDsKKyAgIGthbF91aW50MTYgICAgIG1vdGlvbl9zZW5zb3Jfd2luZGV4OworfU1vdGlvblNlbnNvckJ1ZmZlclN0cnVjdDsKKworLypjdXN0b21pemF0aW9uIHBhcnQqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgLypBREMqLworCWthbF91aW50MTYgeF8wZ19hZGM7CisJa2FsX3VpbnQxNiB4XzFnX2FkYzsKKwlrYWxfdWludDE2IHhfbWludXMxZ19hZGM7CisJa2FsX3VpbnQxNiB5XzBnX2FkYzsKKwlrYWxfdWludDE2IHlfMWdfYWRjOworCWthbF91aW50MTYgeV9taW51czFnX2FkYzsKKwlrYWxfdWludDE2IHpfMGdfYWRjOworCWthbF91aW50MTYgel8xZ19hZGM7CisJa2FsX3VpbnQxNiB6X21pbnVzMWdfYWRjOwkJCisJCisJa2FsX2Jvb2wgICBpbnRfc3VwcG9ydDsJCisJa2FsX3VpbnQ4ICBpbnRfbGV2ZWw7CisJa2FsX3VpbnQ4ICBpbnRfY2hhbjsKK30gTW90aW9uU2Vuc29yX2N1c3RvbV9kYXRhX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeyAgCisgICBNb3Rpb25TZW5zb3JfY3VzdG9tX2RhdGFfc3RydWN0ICogKCptc19nZXRfZGF0YSkodm9pZCk7CisgICB2b2lkICgqbXNfcmVhZF9hZGMpKGthbF91aW50MTYgKngsIGthbF91aW50MTYgKnksIGthbF91aW50MTYgKnopOworICAgdm9pZCAoKm1zX2N1c3RvbV9pbml0KSh2b2lkKTsKKyAgIHZvaWQgKCptc19wb3dlcl91cCkodm9pZCk7CisgICB2b2lkICgqbXNfcG93ZXJfZG93bikodm9pZCk7CisgICAvKnJlYWQgaW50ZXJydXB0Ki8KKyAgIHZvaWQgKCptc19yZWFkX2ludF9zdGF0dXMpKGthbF9ib29sICpsb3dfZywga2FsX2Jvb2wgKmhpZ2hfZyk7ICAgCisgICAvKmNsZWFyIGludGVycnVwdCovCisgICB2b2lkICgqbXNfY2xlYXJfaW50X3N0YXR1cykodm9pZCk7ICAgCisgICB2b2lkICgqbXNfY29uZmlndXJlX2xvd19nKShrYWxfdWludDMyIGRlYm91bmNlLCBrYWxfdWludDMyIHRocmVzaG9sZCk7CisgICB2b2lkICgqbXNfY29uZmlndXJlX2hpZ2hfZykoa2FsX3VpbnQzMiBkZWJvdW5jZSwga2FsX3VpbnQzMiB0aHJlc2hvbGQpOworfU1vdGlvblNlbnNvcl9jdXN0b21pemVfZnVuY3Rpb25fc3RydWN0OworCisvKkZvciBNTUkgKi8KK2V4dGVybiB2b2lkIG1vdGlvbl9zZW5zb3JfY29tcGxldGVfY2FsaSh2b2lkKTsKK2V4dGVybiB2b2lkIG1vdGlvbl9zZW5zb3JfY2FuY2VsX2NhbGkodm9pZCk7CitleHRlcm4gdm9pZCBtb3Rpb25fc2Vuc29yX3N0YXJ0X2NhbGkodm9pZCk7CitleHRlcm4gdm9pZCBtb3Rpb25fc2Vuc29yX3JlYWRfY2FsaShNb3Rpb25TZW5zb3JDYWxpU3RydWN0ICpjYWxpKTsKK2V4dGVybiB2b2lkIG1vdGlvbl9zZW5zb3Jfc2V0X2NhbGkoTW90aW9uU2Vuc29yQ2FsaVN0cnVjdCBjYWxpKTsKK2V4dGVybiBrYWxfYm9vbCBtb3Rpb25fc2Vuc29yX3Bvd2VyKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBtb3Rpb25fc2Vuc29yX2NvbmZfc2FtcGxlX3BlcmlvZChrYWxfdWludDMyIHBlcmlvZCk7CitleHRlcm4gdm9pZCBtb3Rpb25fc2Vuc29yX2ZsdXNoX2J1ZmYodm9pZCk7CitleHRlcm4gdm9pZCBtb3Rpb25fc2Vuc29yX2NiX3JlZ2lzdHJhdGlvbihNU19EQVRBX0ZVTkMgY2JfZnVuLCB2b2lkICpwYXJhKTsKK2V4dGVybiB2b2lkIG1vdGlvbl9zZW5zb3Jfc2FtcGxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBtb3Rpb25fc2Vuc29yX2NvbmZfZmlsdGVyKGthbF91aW50MzIgYWNjX29mZnNldCk7CitleHRlcm4ga2FsX2Jvb2wgbW90aW9uX3NlbnNvcl9nZXRfZGF0YShNb3Rpb25TZW5zb3JEYXRhU3RydWN0ICAqbXNfZGF0YSk7CitleHRlcm4gdm9pZCBtb3Rpb25fc2Vuc29yX2ludF9jYl9yZWdpc3RyYXRpb24oTVNfSU5UX0NCX0ZVTkMgbG93X2dfY2JfZnVuLCBNU19JTlRfQ0JfRlVOQyBoaWdoX2dfY2JfZnVuKTsKK2V4dGVybiB2b2lkIG1vdGlvbl9zZW5zb3JfaW50X2NvbmZpZyhrYWxfdWludDMyIGxvd19nX2xldmVsLCBrYWxfdWludDMyIGhpZ2hfZ19sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50MzIgbG93X2dfZGVib3VuY2UsIGthbF91aW50MzIgaGlnaF9nX2RlYm91bmNlKTsKK2V4dGVybiB2b2lkIG1vdGlvbl9zZW5zb3JfaW50X2VuYWJsZShrYWxfYm9vbCBlbmFibGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCisvLyBNb0RJUyBwYXJzZXIgc2tpcCBzdGFydAorLy8gUHJpdmF0ZSBBUElzCisvKkZvciBkcml2ZXIgKi8KK2V4dGVybiB2b2lkIG1vdGlvbl9zZW5zb3JfZWludF9oaXNyKHZvaWQpOworZXh0ZXJuIGthbF9ib29sIG1vdGlvbl9zZW5zb3JfZmlsdGVyKE1vdGlvblNlbnNvckRhdGFTdHJ1Y3QgZGF0YSk7CitleHRlcm4gdm9pZCBtb3Rpb25fc2Vuc29yX3NhbXBsZV9jYih2b2lkICpwYXJhbWV0ZXIpOworZXh0ZXJuIHZvaWQgbW90aW9uX3NlbnNvcl9jaGVja19jYWxpKGthbF9pbnQxNiB4LCBrYWxfaW50MTYgeSwga2FsX2ludDE2IHopOworZXh0ZXJuIHZvaWQgbW90aW9uX3NlbnNvcl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbW90aW9uX3NlbnNvcl9nZXRfYWNjKE1vdGlvblNlbnNvckRhdGFTdHJ1Y3QgKmFjY19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQxNiB4X2FkYywga2FsX3VpbnQxNiB5X2FkYywga2FsX3VpbnQxNiB6X2FkYyk7CitleHRlcm4gdm9pZCBtb3Rpb25fc2Vuc29yX3NhbXBsZV9jYih2b2lkICpwYXJhbWV0ZXIpOworZXh0ZXJuIHZvaWQgbW90aW9uX3NlbnNvcl9yZXNldCh2b2lkKTsKKyNpZmRlZiBfX01PVElPTl9TRU5TT1JfVElMVF9TVVBQT1JUX18KK2V4dGVybiB2b2lkIG1vdGlvbl9zZW5zb3JfZ2V0X3RpbHQoa2FsX3VpbnQxNiB4LCBrYWxfdWludDE2IHksIGthbF91aW50MTYgeik7CitleHRlcm4ga2FsX3VpbnQxNiBtb3Rpb25fc2Vuc29yX2dldF9hbmdsZShrYWxfdWludDE2IHZhbHVlKTsKKyNlbmRpZgorCisvLyBNb0RJUyBwYXJzZXIgc2tpcCBlbmQKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvbW90aW9uX3NlbnNvcl9idWZmLmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL21vdGlvbl9zZW5zb3JfYnVmZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYjRkNmQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL21vdGlvbl9zZW5zb3JfYnVmZi5oCkBAIC0wLDAgKzEsMTE2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgIG1vdGlvbl9zZW5zb3JfYnVmZi5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1hdWlfU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIE1vZHVsZSBpcyBmb3IgbW90aW9uIHNlbnNvciBkcml2ZXIuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIE1PVElPTl9TRU5TT1JfQlVGRl9ICisjZGVmaW5lIE1PVElPTl9TRU5TT1JfQlVGRl9ICisKKyNkZWZpbmUgbXNfZ2V0X2J1Zl9yb29tbGVmdChfbGVmdCkgICBcCit7XAorICAgaWYgKCBtb3Rpb25fc2Vuc29yX2J1ZmYubW90aW9uX3NlbnNvcl9yaW5kZXggPD0gbW90aW9uX3NlbnNvcl9idWZmLm1vdGlvbl9zZW5zb3Jfd2luZGV4ICkgXAorCXtcCisgICAgICBfbGVmdCA9IE1PVElPTl9TRU5TT1JfQlVGRkVSX1NJWkUgLSBtb3Rpb25fc2Vuc29yX2J1ZmYubW90aW9uX3NlbnNvcl93aW5kZXggKyBtb3Rpb25fc2Vuc29yX2J1ZmYubW90aW9uX3NlbnNvcl9yaW5kZXggLSAxO1wKKwl9XAorCWVsc2VcCisJe1wKKwkJX2xlZnQgPSBtb3Rpb25fc2Vuc29yX2J1ZmYubW90aW9uX3NlbnNvcl9yaW5kZXggLSBtb3Rpb25fc2Vuc29yX2J1ZmYubW90aW9uX3NlbnNvcl93aW5kZXggLSAxO1wKKwl9XAorfQorI2RlZmluZSBtc19nZXRfYnVmX2F2YWlsKF9sZWZ0KSAgIFwKK3tcCisgICBpZiAoIG1vdGlvbl9zZW5zb3JfYnVmZi5tb3Rpb25fc2Vuc29yX3dpbmRleCA+PSBtb3Rpb25fc2Vuc29yX2J1ZmYubW90aW9uX3NlbnNvcl9yaW5kZXggKSBcCisJe1wKKyAgICAgIF9sZWZ0ID1tb3Rpb25fc2Vuc29yX2J1ZmYubW90aW9uX3NlbnNvcl93aW5kZXggLSBtb3Rpb25fc2Vuc29yX2J1ZmYubW90aW9uX3NlbnNvcl9yaW5kZXg7XAorCX1cCisJZWxzZVwKKwl7XAorCQlfbGVmdCA9IE1PVElPTl9TRU5TT1JfQlVGRkVSX1NJWkUgLSBtb3Rpb25fc2Vuc29yX2J1ZmYubW90aW9uX3NlbnNvcl9yaW5kZXggKyBtb3Rpb25fc2Vuc29yX2J1ZmYubW90aW9uX3NlbnNvcl93aW5kZXg7XAorCX1cCit9CisjZGVmaW5lIG1vdGlvbl9wdXNoX2RhdGFfdG9fYnVmZmVyKF9kYXRhKSAgIFwKK3tcCisgICBrYWxfdWludDE2IHJvb209MDtcCisgICBtc19nZXRfYnVmX3Jvb21sZWZ0KHJvb20pO1wKKyAgIEFTU0VSVChyb29tIT0wKTtcCisgICBtb3Rpb25fc2Vuc29yX2J1ZmYubW90aW9uX3NlbnNvcl9kYXRhW21vdGlvbl9zZW5zb3JfYnVmZi5tb3Rpb25fc2Vuc29yX3dpbmRleF09IF9kYXRhO1wKKyAgIG1vdGlvbl9zZW5zb3JfYnVmZi5tb3Rpb25fc2Vuc29yX3dpbmRleCsrO1wKKyAgIG1vdGlvbl9zZW5zb3JfYnVmZi5tb3Rpb25fc2Vuc29yX3dpbmRleCAmPSAoTU9USU9OX1NFTlNPUl9CVUZGRVJfU0laRS0xKTtcCisgICBpZihyb29tPT0xKVwKKyAgICAgIG1vdGlvbl9zZW5zb3JfZGF0YS5jYl9mdW5jKG1vdGlvbl9zZW5zb3JfZGF0YS5wYXJhLCBCVUZGX0ZVTEwpO1wKKyAgIGVsc2VcCisgICAgICBtb3Rpb25fc2Vuc29yX2RhdGEuY2JfZnVuYyhtb3Rpb25fc2Vuc29yX2RhdGEucGFyYSwgQlVGRl9EQVRBX0VYSVNUKTtcCit9CisjZGVmaW5lIG1vdGlvbl9wb3BfZGF0YV9mcm9tX2J1ZmZlcihfZGF0YSkgICBcCit7XAorICAgaWYobW90aW9uX3NlbnNvcl9idWZmLm1vdGlvbl9zZW5zb3JfcmluZGV4PT1tb3Rpb25fc2Vuc29yX2J1ZmYubW90aW9uX3NlbnNvcl93aW5kZXgpXAorICAgICAgQVNTRVJUKDApO1wKKyAgIChfZGF0YSkgPSBtb3Rpb25fc2Vuc29yX2J1ZmYubW90aW9uX3NlbnNvcl9kYXRhW21vdGlvbl9zZW5zb3JfYnVmZi5tb3Rpb25fc2Vuc29yX3JpbmRleF07XAorICAgbW90aW9uX3NlbnNvcl9idWZmLm1vdGlvbl9zZW5zb3JfcmluZGV4Kys7XAorICAgbW90aW9uX3NlbnNvcl9idWZmLm1vdGlvbl9zZW5zb3JfcmluZGV4ICY9IChNT1RJT05fU0VOU09SX0JVRkZFUl9TSVpFLTEpO1wKK30KKworCisjZGVmaW5lIG1vdGlvbl9mbHVzaF9kYXRhX2J1ZmZlcigpICAgXAore1wKKyAgIG1vdGlvbl9zZW5zb3JfYnVmZi5tb3Rpb25fc2Vuc29yX3JpbmRleD0wO1wKKyAgIG1vdGlvbl9zZW5zb3JfYnVmZi5tb3Rpb25fc2Vuc29yX3dpbmRleD0wO1wKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL3BtaWM2MzE4X3N3LmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL3BtaWM2MzE4X3N3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRiNTZkOQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG1pYzYzMThfc3cuaApAQCAtMCwwICsxLDIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3BtaWM2MzE4X3N3LmgKK3BtaWM2MzI2X2NjY2lfc3cuaAorcG1pYzYzMjZfc3cuaAorcG11NjIzNl9zdy5oCitwbXU2MjUxX3N3LmgKK3BtdTYyNTJfc3cuaAorcG11NjI1M19zdy5oCitwbXU2MjUzZWxfc3cuaAorcG11NjI1NV9zdy5oCitwbXU2Mjc2X3N3LmgKK3BtdTY1NzNfc3cuaAorcHdpYy5oCitwbWljX2ZlYXR1cmUKK3BtdV9zdy5oCisKKyAgIGFyZSByZW1vdmVkIC4KKyAgIHBseiBjaGVjayBcXGdsYmZzMTRcV0NQXHN3X3JlbGVhc2VzXFZhbGlkX0JlZm9yZV8yMDExMDIwMVxQTVUgZm9yIGRldGFpbCAuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9wbWljX01UNjIzNlBNVV9kcnYuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG1pY19NVDYyMzZQTVVfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2ZjhkMwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG1pY19NVDYyMzZQTVVfZHJ2LmgKQEAgLTAsMCArMSwxNjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgcG1pY19NVDYyMzZQTVVfZHJ2LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aV9Tb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCBmb3IgUE1VIDYyMzYKKyAqICAgVGhlIFBNSUMvUE1VIGRyaXZlciBBUElzIGV4cG9ydGVkIGZvciBjdXN0b20gdG9vbAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUE1JQ19NVDYyMzZQTVVfRFJWX0hfXworI2RlZmluZSBfX1BNSUNfTVQ2MjM2UE1VX0RSVl9IX18KKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorCisjaWYgZGVmaW5lZChQTUlDXzYyMzZfUkVHX0FQSSkKKworLy8gVkNPUkUKK2V4dGVybiB2b2lkIHBtaWNNVDYyMzZQTVVfVkNPUkVfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZDT1JFX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZDT1JFX0NhbChrYWxfdWludDMyIHN0ZXApOworLy8gVklPCitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZJT19FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyMzZQTVVfVklPX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZJT19DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKy8vIFZSRgorZXh0ZXJuIHZvaWQgcG1pY01UNjIzNlBNVV9WUkZfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZSRl9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjIzNlBNVV9WUkZfQ2FsKGthbF91aW50MzIgc3RlcCk7CisvLyBWQQorZXh0ZXJuIHZvaWQgcG1pY01UNjIzNlBNVV9WQV9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyMzZQTVVfVkFfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyMzZQTVVfVkFfQ2FsKGthbF91aW50MzIgc3RlcCk7CisvLyBWVENYTworZXh0ZXJuIHZvaWQgcG1pY01UNjIzNlBNVV9WVENYT19FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyMzZQTVVfVlRDWE9fU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyMzZQTVVfVlRDWE9fQ2FsKGthbF91aW50MzIgc3RlcCk7CisvLyBWUlRDCitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZSVENfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZSVENfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyMzZQTVVfVlJUQ19DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKy8vIFZNCitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZNX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjIzNlBNVV9WTV9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjIzNlBNVV9WTV9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKy8vIFZTSU0KK2V4dGVybiB2b2lkIHBtaWNNVDYyMzZQTVVfVlNJTV9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyMzZQTVVfVlNJTV9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjIzNlBNVV9WU0lNX0NhbChrYWxfdWludDMyIHN0ZXApOworLy8gVlNJTTIKK2V4dGVybiB2b2lkIHBtaWNNVDYyMzZQTVVfVlNJTTJfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZTSU0yX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZTSU0yX0NhbChrYWxfdWludDMyIHN0ZXApOworLy8gVk1DCitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZNQ19FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyMzZQTVVfVk1DX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZNQ19DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKy8vIFZCVAorZXh0ZXJuIHZvaWQgcG1pY01UNjIzNlBNVV9WQlRfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZCVF9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjIzNlBNVV9WQlRfQ2FsKGthbF91aW50MzIgc3RlcCk7CisvLyBWVVNCCitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZVU0JfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZVU0JfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyMzZQTVVfVlVTQl9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKy8vIFZDQU1ECitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZDQU1EX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjIzNlBNVV9WQ0FNRF9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjIzNlBNVV9WQ0FNRF9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKy8vIFZDQU1BCitleHRlcm4gdm9pZCBwbWljTVQ2MjM2UE1VX1ZDQU1BX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjIzNlBNVV9WQ0FNQV9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjIzNlBNVV9WQ0FNQV9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKy8vIFZJQlIKK2V4dGVybiB2b2lkIHBtaWNNVDYyMzZQTVVfVklCUl9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyMzZQTVVfVklCUl9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjIzNlBNVV9WSUJSX0NhbChrYWxfdWludDMyIHN0ZXApOworCisKKworI2VuZGlmICAvLyBQTUlDXzYyMzZfUkVHX0FQSQorCisjZW5kaWYgLy8gI2lmbmRlZiBfX1BNSUNfTVQ2MjM2UE1VX0RSVl9IX18KKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9wbWljX01UNjI1MVBNVU5PTk1QX2Rydi5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9wbWljX01UNjI1MVBNVU5PTk1QX2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMjdjZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL3BtaWNfTVQ2MjUxUE1VTk9OTVBfZHJ2LmgKQEAgLTAsMCArMSw4NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgIHBtaWNfTVQ2MjUxUE1VTk9OTVBfZHJ2LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTWF1aV9Tb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCBmb3IgUE1VIDYyNTEKKyAqICAgVGhlIFBNSUMvUE1VIGRyaXZlciBBUElzIGV4cG9ydGVkIGZvciBjdXN0b20gdG9vbAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8vIFRoaXMgaXMgb25seSBhbiBhZHB0IGhlYWRlciBmaWxlCisvLyBUbyBhZGFwdCB0aGUgTm9uLU1QIHZlcnNpb24gUE1VIGhlYWRlciBmaWxlCisKKyNpZm5kZWYgX19QTUlDX05PTk1QX0RSVl9fSU5URVJGQUNFX18KKyNkZWZpbmUgX19QTUlDX05PTk1QX0RSVl9fSU5URVJGQUNFX18KKyNlbmRpZiAvLyAjaWZuZGVmIF9fUE1JQ19OT05NUF9EUlZfX0lOVEVSRkFDRV9fCisKKyNpbmNsdWRlICJwbWljX01UNjI1MVBNVV9kcnYuaCIKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9wbWljX01UNjI1MVBNVV9kcnYuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG1pY19NVDYyNTFQTVVfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwZTNhYgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG1pY19NVDYyNTFQTVVfZHJ2LmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICBwbWljX01UNjI1MVBNVV9kcnYuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpX1NvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGludGVuZGVkIGZvciBQTVUgNjI1MQorICogICBUaGUgUE1JQy9QTVUgZHJpdmVyIEFQSXMgZXhwb3J0ZWQgZm9yIGN1c3RvbSB0b29sCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19QTUlDX01UNjI1MVBNVV9EUlZfSF9fCisjZGVmaW5lIF9fUE1JQ19NVDYyNTFQTVVfRFJWX0hfXworI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisKKyNpZiBkZWZpbmVkKFBNSUNfNjI1MV9SRUdfQVBJKQorCisvLyBWUkYKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVfVlJGX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVV9WUkZfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVfVlJGX0NhbChrYWxfdWludDMyIHN0ZXApOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVU5PTk1QX1ZSRl9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVOT05NUF9WUkZfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVOT05NUF9WUkZfQ2FsKGthbF91aW50MzIgc3RlcCk7CisKKy8vIFZUQ1hPCitleHRlcm4gdm9pZCBwbWljTVQ2MjUxUE1VX1ZUQ1hPX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVV9WVENYT19TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVV9WVENYT19DYWwoa2FsX3VpbnQzMiBzdGVwKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVOT05NUF9WVENYT19FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVOT05NUF9WVENYT19TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVU5PTk1QX1ZUQ1hPX0NhbChrYWxfdWludDMyIHN0ZXApOworCisvLyBWU0YKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVfVlNGX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVV9WU0ZfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVfVlNGX0NhbChrYWxfdWludDMyIHN0ZXApOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVU5PTk1QX1ZTRl9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVOT05NUF9WU0ZfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVOT05NUF9WU0ZfQ2FsKGthbF91aW50MzIgc3RlcCk7CisKKy8vIFZTSU0KK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVfVlNJTV9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVfVlNJTV9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVV9WU0lNX0NhbChrYWxfdWludDMyIHN0ZXApOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVU5PTk1QX1ZTSU1fRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjUxUE1VTk9OTVBfVlNJTV9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVU5PTk1QX1ZTSU1fQ2FsKGthbF91aW50MzIgc3RlcCk7CisKKy8vIFZTSU0yCitleHRlcm4gdm9pZCBwbWljTVQ2MjUxUE1VX1ZTSU0yX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVV9WU0lNMl9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVV9WU0lNMl9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVOT05NUF9WU0lNMl9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVOT05NUF9WU0lNMl9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVU5PTk1QX1ZTSU0yX0NhbChrYWxfdWludDMyIHN0ZXApOworCisvLyBWSUJSCitleHRlcm4gdm9pZCBwbWljTVQ2MjUxUE1VX1ZJQlJfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjUxUE1VX1ZJQlJfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVfVklCUl9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVOT05NUF9WSUJSX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVU5PTk1QX1ZJQlJfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVOT05NUF9WSUJSX0NhbChrYWxfdWludDMyIHN0ZXApOworCisvLyBWRk0KK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVfVkZNX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVV9WRk1fU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTFQTVVfVkZNX0NhbChrYWxfdWludDMyIHN0ZXApOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVU5PTk1QX1ZJQlJfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjUxUE1VTk9OTVBfVklCUl9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1MVBNVU5PTk1QX1ZJQlJfQ2FsKGthbF91aW50MzIgc3RlcCk7CisKKyNlbmRpZiAgLy8gUE1JQ182MjUxX1JFR19BUEkKKworI2VuZGlmIC8vICNpZm5kZWYgX19QTUlDX01UNjI1MVBNVV9EUlZfSF9fCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG1pY19NVDYyNTVQTVVOT05NUF9kcnYuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG1pY19NVDYyNTVQTVVOT05NUF9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGMxZGVkCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9wbWljX01UNjI1NVBNVU5PTk1QX2Rydi5oCkBAIC0wLDAgKzEsODggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICBwbWljX01UNjI1NVBNVU5PTk1QX2Rydi5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1hdWlfU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgZm9yIFBNVSA2MjU1CisgKiAgIFRoZSBQTUlDL1BNVSBkcml2ZXIgQVBJcyBleHBvcnRlZCBmb3IgY3VzdG9tIHRvb2wKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLy8gVGhpcyBpcyBvbmx5IGFuIGFkcHQgaGVhZGVyIGZpbGUKKy8vIFRvIGFkYXB0IHRoZSBOb24tTVAgdmVyc2lvbiBQTVUgaGVhZGVyIGZpbGUKKyNpZm5kZWYgX19QTUlDX05PTk1QX0RSVl9fSU5URVJGQUNFX18KKyNkZWZpbmUgX19QTUlDX05PTk1QX0RSVl9fSU5URVJGQUNFX18KKyNlbmRpZiAvLyAjaWZuZGVmIF9fUE1JQ19OT05NUF9EUlZfX0lOVEVSRkFDRV9fCisKKyNpbmNsdWRlICJwbWljX01UNjI1NVBNVV9kcnYuaCIKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9wbWljX01UNjI1NVBNVV9kcnYuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG1pY19NVDYyNTVQTVVfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNjZWNiMwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG1pY19NVDYyNTVQTVVfZHJ2LmgKQEAgLTAsMCArMSwxNTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICBwbWljX01UNjI1NVBNVV9kcnYuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpX1NvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGludGVuZGVkIGZvciBQTVUgNjI1NQorICogICBUaGUgUE1JQy9QTVUgZHJpdmVyIEFQSXMgZXhwb3J0ZWQgZm9yIGN1c3RvbSB0b29sCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19QTUlDX01UNjI1NVBNVV9EUlZfSF9fCisjZGVmaW5lIF9fUE1JQ19NVDYyNTVQTVVfRFJWX0hfXworI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisKKyNpZiBkZWZpbmVkKFBNSUNfNjI1NV9SRUdfQVBJKQorCisvLyBWUkYKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTVQTVVfVlJGX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1NVBNVV9WUkZfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTVQTVVfVlJGX0NhbChrYWxfdWludDMyIHN0ZXApOworCisvLyBWVENYTworZXh0ZXJuIHZvaWQgcG1pY01UNjI1NVBNVV9WVENYT19FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTVQTVVfVlRDWE9fU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTVQTVVfVlRDWE9fQ2FsKGthbF91aW50MzIgc3RlcCk7CisKKy8vIFZDQU1BCitleHRlcm4gdm9pZCBwbWljTVQ2MjU1UE1VX1ZDQU1BX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1NVBNVV9WQ0FNQV9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1NVBNVV9WQ0FNQV9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKworLy8gVkNBTUQKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTVQTVVfVkNBTURfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjU1UE1VX1ZDQU1EX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjU1UE1VX1ZDQU1EX0NhbChrYWxfdWludDMyIHN0ZXApOworCisvLyBWVVNCCitleHRlcm4gdm9pZCBwbWljTVQ2MjU1UE1VX1ZVU0JfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjU1UE1VX1ZVU0JfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTVQTVVfVlVTQl9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKworLy8gVkJUCitleHRlcm4gdm9pZCBwbWljTVQ2MjU1UE1VX1ZCVF9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNTVQTVVfVkJUX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjU1UE1VX1ZCVF9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKworLy8gVlNJTQorZXh0ZXJuIHZvaWQgcG1pY01UNjI1NVBNVV9WU0lNX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1NVBNVV9WU0lNX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjU1UE1VX1ZTSU1fQ2FsKGthbF91aW50MzIgc3RlcCk7CisKKy8vIFZTSU0yCitleHRlcm4gdm9pZCBwbWljTVQ2MjU1UE1VX1ZTSU0yX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1NVBNVV9WU0lNMl9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1NVBNVV9WU0lNMl9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKworLy8gVklCUgorZXh0ZXJuIHZvaWQgcG1pY01UNjI1NVBNVV9WSUJSX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1NVBNVV9WSUJSX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjU1UE1VX1ZJQlJfQ2FsKGthbF91aW50MzIgc3RlcCk7CisKKy8vIFZNQworZXh0ZXJuIHZvaWQgcG1pY01UNjI1NVBNVV9WTUNfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjU1UE1VX1ZNQ19TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1NVBNVV9WTUNfQ2FsKGthbF91aW50MzIgc3RlcCk7CisKKy8vIFZGTQorZXh0ZXJuIHZvaWQgcG1pY01UNjI1NVBNVV9WRk1fRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2MjU1UE1VX1ZGTV9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI1NVBNVV9WRk1fQ2FsKGthbF91aW50MzIgc3RlcCk7CisKKyNlbmRpZiAgLy8gUE1JQ182MjU1X1JFR19BUEkKKworI2VuZGlmIC8vICNpZm5kZWYgX19QTUlDX01UNjI1NVBNVV9EUlZfSF9fCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG1pY19NVDYyNzZNUE1VTk9OTVBfZHJ2LmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL3BtaWNfTVQ2Mjc2TVBNVU5PTk1QX2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NzM0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL3BtaWNfTVQ2Mjc2TVBNVU5PTk1QX2Rydi5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICBwbWljX01UNjI3NlBNVU5PTk1QX2Rydi5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1hdWlfU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgZm9yIFBNVSA2Mjc2CisgKiAgIFRoZSBQTUlDL1BNVSBkcml2ZXIgQVBJcyBleHBvcnRlZCBmb3IgY3VzdG9tIHRvb2wKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBUaGlzIGlzIG9ubHkgYW4gYWRwdCBoZWFkZXIgZmlsZQorLy8gVG8gYWRhcHQgdGhlIE5vbi1NUCB2ZXJzaW9uIFBNVSBoZWFkZXIgZmlsZQorI2lmbmRlZiBfX1BNSUNfTk9OTVBfRFJWX19JTlRFUkZBQ0VfXworI2RlZmluZSBfX1BNSUNfTk9OTVBfRFJWX19JTlRFUkZBQ0VfXworI2VuZGlmIC8vICNpZm5kZWYgX19QTUlDX05PTk1QX0RSVl9fSU5URVJGQUNFX18KKworI2luY2x1ZGUgInBtaWNfTVQ2Mjc2UE1VX2Rydi5oIgorCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL3BtaWNfTVQ2Mjc2UE1VTk9OTVBfZHJ2LmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL3BtaWNfTVQ2Mjc2UE1VTk9OTVBfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYyYTI3ZAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG1pY19NVDYyNzZQTVVOT05NUF9kcnYuaApAQCAtMCwwICsxLDg3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgcG1pY19NVDYyNzZQTVVOT05NUF9kcnYuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpX1NvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGludGVuZGVkIGZvciBQTVUgNjI3NgorICogICBUaGUgUE1JQy9QTVUgZHJpdmVyIEFQSXMgZXhwb3J0ZWQgZm9yIGN1c3RvbSB0b29sCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBUaGlzIGlzIG9ubHkgYW4gYWRwdCBoZWFkZXIgZmlsZQorLy8gVG8gYWRhcHQgdGhlIE5vbi1NUCB2ZXJzaW9uIFBNVSBoZWFkZXIgZmlsZQorI2lmbmRlZiBfX1BNSUNfTk9OTVBfRFJWX19JTlRFUkZBQ0VfXworI2RlZmluZSBfX1BNSUNfTk9OTVBfRFJWX19JTlRFUkZBQ0VfXworI2VuZGlmIC8vICNpZm5kZWYgX19QTUlDX05PTk1QX0RSVl9fSU5URVJGQUNFX18KKworI2luY2x1ZGUgInBtaWNfTVQ2Mjc2UE1VX2Rydi5oIgorCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL3BtaWNfTVQ2Mjc2UE1VX2Rydi5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9wbWljX01UNjI3NlBNVV9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTNiMjRjCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9wbWljX01UNjI3NlBNVV9kcnYuaApAQCAtMCwwICsxLDIyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgIHBtaWNfTVQ2Mjc2UE1VX2Rydi5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1hdWlfU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgZm9yIFBNVSA2Mjc2CisgKiAgIFRoZSBQTUlDL1BNVSBkcml2ZXIgQVBJcyBleHBvcnRlZCBmb3IgY3VzdG9tIHRvb2wKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19QTUlDX01UNjI3NlBNVV9EUlZfSF9fCisjZGVmaW5lIF9fUE1JQ19NVDYyNzZQTVVfRFJWX0hfXworI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisKKyNpZiBkZWZpbmVkKFBNSUNfNjI3Nl9SRUdfQVBJKQorCisKKy8vIFZSRgorZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVV9WUkZfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZSRl9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVV9WUkZfQ2FsKGthbF91aW50MzIgc3RlcCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVlJGX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVU5PTk1QX1ZSRl9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVU5PTk1QX1ZSRl9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKworLy8gVlRDWE8KK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVfVlRDWE9fRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZUQ1hPX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZUQ1hPX0NhbChrYWxfdWludDMyIHN0ZXApOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVU5PTk1QX1ZUQ1hPX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVU5PTk1QX1ZUQ1hPX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVlRDWE9fQ2FsKGthbF91aW50MzIgc3RlcCk7CisKKy8vIFZDQU1BCitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZDQU1BX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVV9WQ0FNQV9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVV9WQ0FNQV9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVOT05NUF9WQ0FNQV9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVOT05NUF9WQ0FNQV9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVU5PTk1QX1ZDQU1BX0NhbChrYWxfdWludDMyIHN0ZXApOworCisvLyBWQ0FNRAorZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVV9WQ0FNRF9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVfVkNBTURfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVfVkNBTURfQ2FsKGthbF91aW50MzIgc3RlcCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVkNBTURfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVkNBTURfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVOT05NUF9WQ0FNRF9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKworLy8gVlVTQgorZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVV9WVVNCX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVV9WVVNCX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZVU0JfQ2FsKGthbF91aW50MzIgc3RlcCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVlVTQl9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVOT05NUF9WVVNCX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVlVTQl9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKworLy8gVkJUCitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZCVF9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVfVkJUX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZCVF9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVOT05NUF9WQlRfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVkJUX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVkJUX0NhbChrYWxfdWludDMyIHN0ZXApOworCisvLyBWU0lNCitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZTSU1fRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZTSU1fU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVfVlNJTV9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVOT05NUF9WU0lNX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVU5PTk1QX1ZTSU1fU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVOT05NUF9WU0lNX0NhbChrYWxfdWludDMyIHN0ZXApOworCisvLyBWU0lNMgorZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVV9WU0lNMl9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVfVlNJTTJfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVfVlNJTTJfQ2FsKGthbF91aW50MzIgc3RlcCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVlNJTTJfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVlNJTTJfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVOT05NUF9WU0lNMl9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKworLy8gVklCUgorZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVV9WSUJSX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVV9WSUJSX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZJQlJfQ2FsKGthbF91aW50MzIgc3RlcCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVklCUl9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVOT05NUF9WSUJSX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVklCUl9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKworLy8gVk1DCitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZNQ19FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVfVk1DX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZNQ19DYWwoa2FsX3VpbnQzMiBzdGVwKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVOT05NUF9WTUNfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVk1DX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVk1DX0NhbChrYWxfdWludDMyIHN0ZXApOworCisvLyBWQ0FNQTIKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVfVkNBTUEyX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVV9WQ0FNQTJfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVfVkNBTUEyX0NhbChrYWxfdWludDMyIHN0ZXApOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVU5PTk1QX1ZDQU1BMl9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVOT05NUF9WQ0FNQTJfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVOT05NUF9WQ0FNQTJfQ2FsKGthbF91aW50MzIgc3RlcCk7CisKKy8vIFZDQU1EMgorZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVV9WQ0FNRDJfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZDQU1EMl9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVV9WQ0FNRDJfQ2FsKGthbF91aW50MzIgc3RlcCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVkNBTUQyX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVU5PTk1QX1ZDQU1EMl9TZXRfVm9sdChrYWxfdWludDMyIHZvbHQpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVU5PTk1QX1ZDQU1EMl9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKKworLy8gVkZNCitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZGTV9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVfVkZNX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZGTV9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVOT05NUF9WRk1fRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVkZNX1NldF9Wb2x0KGthbF91aW50MzIgdm9sdCk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVkZNX0NhbChrYWxfdWludDMyIHN0ZXApOworCisvLyBWTTEyCitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZNMTJfRW5hYmxlKGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZNMTJfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVfVk0xMl9DYWwoa2FsX3VpbnQzMiBzdGVwKTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVOT05NUF9WTTEyX0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVU5PTk1QX1ZNMTJfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKK2V4dGVybiB2b2lkIHBtaWNNVDYyNzZQTVVOT05NUF9WTTEyX0NhbChrYWxfdWludDMyIHN0ZXApOworCisvLy8vIFZSRl8xVjgKKy8vZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVV9WUkZfMVY4X0VuYWJsZShrYWxfYm9vbCBlbmFibGUpOworLy9leHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VX1ZSRl8xVjhfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKKy8vZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVV9WUkZfMVY4X0NhbChrYWxfdWludDMyIHN0ZXApOworLy9leHRlcm4gdm9pZCBwbWljTVQ2Mjc2UE1VTk9OTVBfVlJGXzFWOF9FbmFibGUoa2FsX2Jvb2wgZW5hYmxlKTsKKy8vZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVU5PTk1QX1ZSRl8xVjhfU2V0X1ZvbHQoa2FsX3VpbnQzMiB2b2x0KTsKKy8vZXh0ZXJuIHZvaWQgcG1pY01UNjI3NlBNVU5PTk1QX1ZSRl8xVjhfQ2FsKGthbF91aW50MzIgc3RlcCk7CisKKworI2VuZGlmICAvLyBQTUlDXzYyNzZfUkVHX0FQSQorCisjZW5kaWYgLy8gI2lmbmRlZiBfX1BNSUNfTVQ2Mjc2UE1VX0RSVl9IX18KKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9wbWljX2ZlYXR1cmVzLmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL3BtaWNfZmVhdHVyZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGI1NmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9wbWljX2ZlYXR1cmVzLmgKQEAgLTAsMCArMSwyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitwbWljNjMxOF9zdy5oCitwbWljNjMyNl9jY2NpX3N3LmgKK3BtaWM2MzI2X3N3LmgKK3BtdTYyMzZfc3cuaAorcG11NjI1MV9zdy5oCitwbXU2MjUyX3N3LmgKK3BtdTYyNTNfc3cuaAorcG11NjI1M2VsX3N3LmgKK3BtdTYyNTVfc3cuaAorcG11NjI3Nl9zdy5oCitwbXU2NTczX3N3LmgKK3B3aWMuaAorcG1pY19mZWF0dXJlCitwbXVfc3cuaAorCisgICBhcmUgcmVtb3ZlZCAuCisgICBwbHogY2hlY2sgXFxnbGJmczE0XFdDUFxzd19yZWxlYXNlc1xWYWxpZF9CZWZvcmVfMjAxMTAyMDFcUE1VIGZvciBkZXRhaWwgLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG1pZi5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9wbWlmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdhYmY3OAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG1pZi5oCkBAIC0wLDAgKzEsODQgQEAKKy8qIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisgKgorICogVGhpcyBzb2Z0d2FyZS9maXJtd2FyZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uICgiTWVkaWFUZWsgU29mdHdhcmUiKSBhcmUKKyAqIHByb3RlY3RlZCB1bmRlciByZWxldmFudCBjb3B5cmlnaHQgbGF3cy4gVGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gaXMKKyAqIGNvbmZpZGVudGlhbCBhbmQgcHJvcHJpZXRhcnkgdG8gTWVkaWFUZWsgSW5jLiBhbmQvb3IgaXRzIGxpY2Vuc29ycy4gV2l0aG91dAorICogdGhlIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBNZWRpYVRlayBpbmMuIGFuZC9vciBpdHMgbGljZW5zb3JzLCBhbnkKKyAqIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLCB1c2Ugb3IgZGlzY2xvc3VyZSBvZiBNZWRpYVRlayBTb2Z0d2FyZSwgYW5kCisgKiBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBzaGFsbCBiZSBzdHJpY3RseQorICogcHJvaGliaXRlZC4KKyAqCisgKiBNZWRpYVRlayBJbmMuIChDKSAyMDE5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBSRUNFSVZFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworICogVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyAqIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIFJFQ0VJVkVSCisgKiBPTiBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwKKyAqIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SCisgKiBOT05JTkZSSU5HRU1FTlQuIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEgKKyAqIFJFU1BFQ1QgVE8gVEhFIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwKKyAqIElOQ09SUE9SQVRFRCBJTiwgT1IgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBSRUNFSVZFUiBBR1JFRVMKKyAqIFRPIExPT0sgT05MWSBUTyBTVUNIIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4KKyAqIFJFQ0VJVkVSIEVYUFJFU1NMWSBBQ0tOT1dMRURHRVMgVEhBVCBJVCBJUyBSRUNFSVZFUidTIFNPTEUgUkVTUE9OU0lCSUxJVFkgVE8KKyAqIE9CVEFJTiBGUk9NIEFOWSBUSElSRCBQQVJUWSBBTEwgUFJPUEVSIExJQ0VOU0VTIENPTlRBSU5FRCBJTiBNRURJQVRFSworICogU09GVFdBUkUuIE1FRElBVEVLIFNIQUxMIEFMU08gTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUKKyAqIFJFTEVBU0VTIE1BREUgVE8gUkVDRUlWRVInUyBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSCisgKiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLiBSRUNFSVZFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MKKyAqIEVOVElSRSBBTkQgQ1VNVUxBVElWRSBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRQorICogUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUKKyAqIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLCBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFCisgKiBDSEFSR0UgUEFJRCBCWSBSRUNFSVZFUiBUTyBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIHNvZnR3YXJlL2Zpcm13YXJlIGFuZC9vciByZWxhdGVkIGRvY3VtZW50YXRpb24gKCJNZWRpYVRlaworICogU29mdHdhcmUiKSBoYXZlIGJlZW4gbW9kaWZpZWQgYnkgTWVkaWFUZWsgSW5jLiBBbGwgcmV2aXNpb25zIGFyZSBzdWJqZWN0IHRvCisgKiBhbnkgcmVjZWl2ZXIncyBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyB3aXRoIE1lZGlhVGVrIEluYy4KKyAqLworI2lmbmRlZiBfX1BNSUZfSF9fCisjZGVmaW5lIF9fUE1JRl9IX18KKworI2luY2x1ZGUgImRydl9jb21tLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisKKyNkZWZpbmUgUE1JRl9DTURfUkVHXzAJCTAKKyNkZWZpbmUgUE1JRl9DTURfUkVHCQkxCisjZGVmaW5lIFBNSUZfQ01EX0VYVF9SRUcJMgorI2RlZmluZSBQTUlGX0NNRF9FWFRfUkVHX0xPTkcJMworCitzdHJ1Y3QgcG1pZiB7CisJdm9pZCAqYmFzZTsKKwlpbnQgKnJlZ3M7CisJaW50ICpkYmdyZWdzOworCXZvaWQgKnNwbWltc3RfYmFzZTsKKwlpbnQgKnNwbWltc3RfcmVnczsKKwlpbnQgc3dpbmZfY2hfc3RhcnQ7CisJaW50IHN3aW5mX25vOworCWludCB3cml0ZTsKKwlpbnQgbXN0aWQ7CisJaW50IHBtaWZpZDsKKwlpbnQgKCpjbWQpKHN0cnVjdCBwbWlmICphcmIsIHVuc2lnbmVkIGludCBvcGNvZGUpOworCWludCAoKnJlYWRfY21kKShzdHJ1Y3QgcG1pZiAqYXJiLCB1bnNpZ25lZCBjaGFyIG9wYywKKwkJdW5zaWduZWQgY2hhciBzaWQsIHVuc2lnbmVkIHNob3J0IGFkZHIsCisJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgc2hvcnQgbGVuKTsKKwlpbnQgKCp3cml0ZV9jbWQpKHN0cnVjdCBwbWlmICphcmIsIHVuc2lnbmVkIGNoYXIgb3BjLAorCQl1bnNpZ25lZCBjaGFyIHNpZCwgdW5zaWduZWQgc2hvcnQgYWRkciwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBzaG9ydCBsZW4pOworCXZvaWQgKCpwbWlmX2VuYWJsZV9jbGtfc2V0KShpbnQgbXN0aWQpOworCXZvaWQgKCpwbWlmX2ZvcmNlX25vcm1hbF9tb2RlKShpbnQgbXN0aWQpOworCXZvaWQgKCpwbWlmX2VuYWJsZV9zd2luZikoaW50IG1zdGlkLCB1bnNpZ25lZCBpbnQgY2hhbl9ubywKKwkJCQkJCQl1bnNpZ25lZCBpbnQgc3dpbmZfbm8pOworCXZvaWQgKCpwbWlmX2VuYWJsZV9jbWRJc3N1ZSkoaW50IG1zdGlkLCBrYWxfYm9vbCBlbik7CisJdm9pZCAoKnBtaWZfZW5hYmxlKShpbnQgbXN0aWQpOworCWludCAoKmlzX3BtaWZfaW5pdF9kb25lKShpbnQgbXN0aWQpOworfTsKKworZW51bSB7CisJUE1JRl9TUE1JLAorCVBNSUZfU1BJCit9OworLyogc3RhcnQgZXh0ZXJuYWwgQVBJICovCitleHRlcm4gc3RydWN0IHBtaWYgKmdldF9wbWlmX2NvbnRyb2xsZXIoaW50IGluZiwgaW50IG1zdGlkKTsKK2V4dGVybiBpbnQgaXNfcG1pZl9zcG1pX2luaXRfZG9uZShpbnQgbXN0aWQpOworZXh0ZXJuIGludCBwbWlmX3NwbWlfaW5pdChpbnQgbXN0aWQpOworCisjZW5kaWYgLypfX1BNSUZfSF9fKi8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG11NjI1M19zdy5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9wbXU2MjUzX3N3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRiNTZkOQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG11NjI1M19zdy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorcG1pYzYzMThfc3cuaAorcG1pYzYzMjZfY2NjaV9zdy5oCitwbWljNjMyNl9zdy5oCitwbXU2MjM2X3N3LmgKK3BtdTYyNTFfc3cuaAorcG11NjI1Ml9zdy5oCitwbXU2MjUzX3N3LmgKK3BtdTYyNTNlbF9zdy5oCitwbXU2MjU1X3N3LmgKK3BtdTYyNzZfc3cuaAorcG11NjU3M19zdy5oCitwd2ljLmgKK3BtaWNfZmVhdHVyZQorcG11X3N3LmgKKworICAgYXJlIHJlbW92ZWQgLgorICAgcGx6IGNoZWNrIFxcZ2xiZnMxNFxXQ1Bcc3dfcmVsZWFzZXNcVmFsaWRfQmVmb3JlXzIwMTEwMjAxXFBNVSBmb3IgZGV0YWlsIC4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL3BtdTYyNTNlbF9zdy5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9wbXU2MjUzZWxfc3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGI1NmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9wbXU2MjUzZWxfc3cuaApAQCAtMCwwICsxLDIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3BtaWM2MzE4X3N3LmgKK3BtaWM2MzI2X2NjY2lfc3cuaAorcG1pYzYzMjZfc3cuaAorcG11NjIzNl9zdy5oCitwbXU2MjUxX3N3LmgKK3BtdTYyNTJfc3cuaAorcG11NjI1M19zdy5oCitwbXU2MjUzZWxfc3cuaAorcG11NjI1NV9zdy5oCitwbXU2Mjc2X3N3LmgKK3BtdTY1NzNfc3cuaAorcHdpYy5oCitwbWljX2ZlYXR1cmUKK3BtdV9zdy5oCisKKyAgIGFyZSByZW1vdmVkIC4KKyAgIHBseiBjaGVjayBcXGdsYmZzMTRcV0NQXHN3X3JlbGVhc2VzXFZhbGlkX0JlZm9yZV8yMDExMDIwMVxQTVUgZm9yIGRldGFpbCAuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9wbXVfc3cuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG11X3N3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRiNTZkOQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcG11X3N3LmgKQEAgLTAsMCArMSwyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitwbWljNjMxOF9zdy5oCitwbWljNjMyNl9jY2NpX3N3LmgKK3BtaWM2MzI2X3N3LmgKK3BtdTYyMzZfc3cuaAorcG11NjI1MV9zdy5oCitwbXU2MjUyX3N3LmgKK3BtdTYyNTNfc3cuaAorcG11NjI1M2VsX3N3LmgKK3BtdTYyNTVfc3cuaAorcG11NjI3Nl9zdy5oCitwbXU2NTczX3N3LmgKK3B3aWMuaAorcG1pY19mZWF0dXJlCitwbXVfc3cuaAorCisgICBhcmUgcmVtb3ZlZCAuCisgICBwbHogY2hlY2sgXFxnbGJmczE0XFdDUFxzd19yZWxlYXNlc1xWYWxpZF9CZWZvcmVfMjAxMTAyMDFcUE1VIGZvciBkZXRhaWwgLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcHdpYy5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9wd2ljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhODMwMwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvcHdpYy5oCkBAIC0wLDAgKzEsMyBAQAorLyoKK0R1bW15IEZpbGUKKyovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9zcGlfaGFsLmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL3NwaV9oYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWQxYmRkCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC9zcGlfaGFsLmgKQEAgLTAsMCArMSw1MzMgQEAKKworI2lmbmRlZiBfX1NQSV9EUlZfSEFMX0hfXworLyogIWlnbm9yZSBtZSEgKi8KKyNkZWZpbmUgX19TUElfRFJWX0hBTF9IX18KKworI2luY2x1ZGUgInNwaS5oIgorI2luY2x1ZGUgImRydl9mZWF0dXJlcy5oIgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisKKy8qICFpZ25vcmUgbWUhICovCisjaWYgZGVmaW5lZChEUlZfU1BJX1NVUFBPUlQpICYmIGRlZmluZWQoRFJWX1NQSV9IQUwpCisKKy8qIFNQSSBwb3J0cyBudW1iZXIuICovCisjZGVmaW5lIFNQSV9NQVhfUE9SVF9OVU0gMgorCisvKiBTUEkgSGFuZGxlLgorICAgU1BJIGhhbmRsZSBjYW4gYmUgcmV0cmlldmVkIGZyb20gc3BpX29wZW4oKS4gSXQgaXMgdXNlZCBmb3IgbW9zdCBTUEkgQVBJcy4KKyovCit0eXBlZGVmIGthbF91aW50MzIgU1BJX0hBTkRMRTsKKworLyogPEdST1VQIENhbGxCYWNrRnVuY3Rpb25zPgorICAgRlVOQ1RJT04KKyAgIFNQSV9DQUxMQkFDSworICAgREVTQ1JJUFRJT04KKyAgIFNQSSBjYWxsYmFjayBmdW5jdGlvbgorICAgU1BJIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFNQSSBpbnRlcnJ1cHQgaGFzIGFycml2ZWQuIEl0IGluZGljYXRlcyBTUEkgaGFzIGZpbmlzaGVkIHRoZSBsYXN0IGRhdGEgdHJhbnNmZXIuCisgICBTUEkgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIEhJU1IuCisqLwordHlwZWRlZiB2b2lkICgqU1BJX0NBTExCQUNLKSh2b2lkKTsKKworLyogU1BJIHJlc3VsdCBlbnVtLgorKi8KK3R5cGVkZWYgZW51bQoreworICAgIC8qIEluZGljYXRlcyBubyBlcnJvciBvY2N1cnMgaW4gdGhlIGxhc3Qgb3BlcmF0aW9uLiAqLworICAgIFNQSV9SRVNVTFRfT0ssCisgICAgCisgICAgLyogSW5kaWNhdGVzIHNvbWUgZXJyb3JzIGhhdmUgb2NjdXJlZCBpbiB0aGUgbGFzdCBvcGVyYXRpb24uICovCisgICAgU1BJX1JFU1VMVF9FUlJPUiwKKworICAgIC8qIEluZGljYXRlcyBzb21lIGVycm9ycyBoYXZlIG9jY3VyZWQgaW4gdGhlIGxhc3Qgb3BlcmF0aW9uLiAqLworICAgIFNQSV9SRVNVTFRfSU5WQUxJRF9BUkdVTUVOVCwgIAorICAgIAorICAgIC8qIEluZGljYXRlcyB0aGUgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4gKi8KKyAgICBTUElfUkVTVUxUX05PVF9TVVBQT1JURUQKK30gU1BJX1JFU1VMVDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBTUEkgSU9DVEwgY29kZSBkZWZpbml0aW9uLgorICAqIEZvciBkZXRhaWwgZGVzY3JpcHRpb24gYW5kIHVzYWdlIG9mIFNQSSBjb250cm9sIGNvZGVzLCBwbGVhc2UgcmVmZXIgdG8gPHhyZWYgdGFyZ2V0PSJTUEkgSEFMIElPQ1RMIENvZGUiIHRleHQ9IlNQSSBJT0NUTCBDb2RlIiAvPi4KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgZW51bQoreworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqIEdldCB0aGUgY3VycmVudCBTUEkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgKiBGb3IgZGV0YWlsIGRlc2NyaXB0aW9uIGFuZCB1c2FnZSBvZiB0aGlzIGNvbnRyb2wgY29kZSwgcGxlYXNlIHJlZmVyIHRvIDx4cmVmIHRhcmdldD0iU1BJX0lPQ1RMX0dFVF9QQVJBTSIgLz4uCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIFNQSV9JT0NUTF9HRVRfUEFSQU0sCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICogR2V0IHRoZSBjYXBhYmlsaXR5IG9mIGN1cnJlbnQgU1BJIGhhcmR3YXJlLgorICAgICAgKiBGb3IgZGV0YWlsIGRlc2NyaXB0aW9uIGFuZCB1c2FnZSBvZiB0aGlzIGNvbnRyb2wgY29kZSwgcGxlYXNlIHJlZmVyIHRvIDx4cmVmIHRhcmdldD0iU1BJX0lPQ1RMX1FVRVJZX0NBUEFCSUxJVFkiIC8+LgorICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICBTUElfSU9DVExfUVVFUllfQ0FQQUJJTElUWSwKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgKiBRdWVyeSBzdXBwb3J0ZWQgU1BJIG1vZGVzLgorICAgICAgKiBGb3IgZGV0YWlsIGRlc2NyaXB0aW9uIGFuZCB1c2FnZSBvZiB0aGlzIGNvbnRyb2wgY29kZSwgcGxlYXNlIHJlZmVyIHRvIDx4cmVmIHRhcmdldD0iU1BJX0lPQ1RMX1FVRVJZX01PREVfU1VQUE9SVCIgLz4uCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIFNQSV9JT0NUTF9RVUVSWV9NT0RFX1NVUFBPUlQsCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgKiBRdWVyeSBTUEkgYmFzZSBjbG9jay4KKyAgICAgICogRm9yIGRldGFpbCBkZXNjcmlwdGlvbiBhbmQgdXNhZ2Ugb2YgdGhpcyBjb250cm9sIGNvZGUsIHBsZWFzZSByZWZlciB0byA8eHJlZiB0YXJnZXQ9IlNQSV9JT0NUTF9RVUVSWV9DTE9DSyIgLz4uCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgU1BJX0lPQ1RMX1FVRVJZX0NMT0NLLAorICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICogU2V0IGFuZCBjb25maWd1cmUgU1BJIG1vZGUuCisgICAgICAqIEZvciBkZXRhaWwgZGVzY3JpcHRpb24gYW5kIHVzYWdlIG9mIHRoaXMgY29udHJvbCBjb2RlLCBwbGVhc2UgcmVmZXIgdG8gPHhyZWYgdGFyZ2V0PSJTUElfSU9DVExfU0VUX01PREUiIC8+LgorICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIFNQSV9JT0NUTF9TRVRfTU9ERSwKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqIEdldCBTUEkgbW9kZSBzZXR0aW5ncy4KKyAgICAgICogRm9yIGRldGFpbCBkZXNjcmlwdGlvbiBhbmQgdXNhZ2Ugb2YgdGhpcyBjb250cm9sIGNvZGUsIHBsZWFzZSByZWZlciB0byA8eHJlZiB0YXJnZXQ9IlNQSV9JT0NUTF9HRVRfTU9ERSIgLz4uCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgU1BJX0lPQ1RMX0dFVF9NT0RFLAorICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICogR2V0IFNQSSBkcml2aW5nIGN1cnJlbnQuCisgICAgICAqIEZvciBkZXRhaWwgZGVzY3JpcHRpb24gYW5kIHVzYWdlIG9mIHRoaXMgY29udHJvbCBjb2RlLCBwbGVhc2UgcmVmZXIgdG8gPHhyZWYgdGFyZ2V0PSJTUElfSU9DVExfR0VUX0RSSVZJTkdfQ1VSUkVOVCIgLz4uCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgU1BJX0lPQ1RMX0dFVF9EUklWSU5HX0NVUlJFTlQsCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgKiBTZXQgU1BJIGRyaXZpbmcgY3VycmVudC4KKyAgICAgICogRm9yIGRldGFpbCBkZXNjcmlwdGlvbiBhbmQgdXNhZ2Ugb2YgdGhpcyBjb250cm9sIGNvZGUsIHBsZWFzZSByZWZlciB0byA8eHJlZiB0YXJnZXQ9IlNQSV9JT0NUTF9TRVRfRFJJVklOR19DVVJSRU5UIiAvPi4KKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICBTUElfSU9DVExfU0VUX0RSSVZJTkdfQ1VSUkVOVAorfSBTUElfSU9DVExfQ09ERTsKKworLyogU1BJIG1vZGUuIEluY2x1ZGluZyBzcGVjaWFsIG1vZGVzIHByb3ZpZGVkIGJ5IFNQSSBjb250cm9sbGVyLgorKi8KK3R5cGVkZWYgZW51bQoreworICAgIC8qIERlYXNzZXJ0IG1vZGUuIFNQSSBDUyBwaW4gd2lsbCBiZSBwdWxsZWQgbG93IGFuZCBoaWdoIGZvciBlYWNoIGJ5dGUgZHVyaW5nIHRyYW5zbWlzc2lvbi4gKi8KKyAgICBTUElfTU9ERV9ERUFTU0VSVCwKKyAgICAvKiBQYXVzZSBtb2RlLiBTUEkgQ1MgcGluIGlzIHB1bGxlZCBsb3cgYW5kIGtlZXBzIHVudGlsIHNwZWNpZmljIGFtb3VudCBvZiB0cmFuc2ZlcnMgaGF2ZSBiZWVuIGZpbmlzaGVkLiAqLworICAgIFNQSV9NT0RFX1BBVVNFLAorICAgIC8qIFVsdHJhIGhpZ2ggbW9kZS4gUmFpc2UgRE1BIHByaW9yaXR5IGR1cmluZyBETUEgdHJhbnNtaXNzaW9uLiAqLworICAgIFNQSV9NT0RFX1VMVFJBX0hJR0gsCisgICAgLyogU2xvdyBkb3duIG1vZGUuIFNsb3cgZG93biBTUEkgRE1BIHNwZWVkIGR1cmluZyBETUEgdHJhbnNtaXNzaW9uLiAqLworICAgIFNQSV9NT0RFX1NMT1dfRE9XTiwKKyAgICAvKiBHZXQgdGljayBkZWxheSBtb2RlLiBUaGlzIG1vZGUgaXMgdXNlZCB0byB0dW5pbmcgU1BJIHRpbWluZy4gKi8KKyAgICBTUElfTU9ERV9HRVRfVElDSworfSBTUElfSEFMX01PREU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBTUEkgZ2V0IHRpY2sgZGVsYXkgbW9kZSBlbnVtcy4KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtCit7CisgICAgLyogRGVsYXkgU0NLIGZvciBvbmUgY2xvY2suICovCisgICAgU1BJX0dFVF9USUNLX0RFTEFZMSA9IDEsCisgICAgLyogRGVsYXkgU0NLIGZvciB0d28gY2xvY2tzLiAqLworICAgIFNQSV9HRVRfVElDS19ERUxBWTIgPSAyCit9IFNQSV9HRVRfVElDS19FOworCisvKiBTUEkgdHJhbnNpbXNzaW9uIGJpdCBvcmRlciBkZWZpbml0aW9uLiAqLwordHlwZWRlZiBlbnVtCit7CisgICAgLyogVHJhbnNmZXIgTFNCIGZpcnN0LiAqLworICAgIFNQSV9NU0JGX0xTQiA9IDAsCisgICAgLyogVHJhbnNmZXIgTVNCIGZpcnN0LiAqLworICAgIFNQSV9NU0JGX01TQiA9IDEKK30gU1BJX01TQkZfRTsKKworLyogU1BJIGNsb2NrIHBvbGFyaXR5IGRlZmluaXRpb24uICovCit0eXBlZGVmIGVudW0KK3sKKyAgICAvKiBDUE9MID0gMC4gKi8KKyAgICBTUElfQ1BPTF9CMCA9IDAsCisgICAgLyogQ1BPTCA9IDEuICovCisgICAgU1BJX0NQT0xfQjEgPSAxCit9IFNQSV9DUE9MX0U7CisKKy8qIFNQSSBjbG9jayBmb3JtYXQgZGVmaW5pdGlvbi4gKi8KK3R5cGVkZWYgZW51bQoreworICAgIC8qIENQSEEgPSAwLiAqLworICAgIFNQSV9DUEhBX0IwID0gMCwKKyAgICAvKiBDUEhBID0gMS4gKi8KKyAgICBTUElfQ1BIQV9CMSA9IDEKK30gU1BJX0NQSEFfRTsKKworLyogU1BJIGRhdGEgdHJhbnNmZXIgYnl0ZSBvcmRlciBkZWZpbml0aW9uLiAqLwordHlwZWRlZiBlbnVtCit7CisgICAgLyogVXNlIGxpdHRsZSBlbmRpYW4uICovCisgICAgU1BJX0VORElBTl9MSVRUTEUgPSAwLAorICAgIC8qIFVzZSBiaWcgZW5kaWFuLiAqLworICAgIFNQSV9FTkRJQU5fQklHID0gMQorfSBTUElfRU5ESUFOX0U7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBTUEkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorICAqIAorICAqIFJlbWFya3MKKyAgKiA8aW1nIG5hbWU9InNwaV90aW1pbmdfZGlhZ3JhbSIgLz4KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiBDUyBzZXR1cCB0aW1lLiBVbml0IGluIGNvdW50IG9mIFNQSSBiYXNlIGNsb2NrLiBSYW5nZSgwLTI1NSkuCisgICAgICAgVGhlIGNoaXAgc2VsZWN0IHNldHVwIHRpbWUgPSAoY3Nfc2V0dXBfdGltZSsxKSpDTEtfUEVSSU9ELCB3aGVyZSBDTEtfUEVSSU9EIGlzIHRoZSBjeWNsZSB0aW1lIG9mIHRoZSBjbG9jayB0aGUgU1BJIGVuZ2luZSBhZG9wdHMuICovCisgICAga2FsX3VpbnQzMiBjc19zZXR1cF90aW1lOworICAgIC8qIENTIGhvbGQgdGltZS4gVW5pdCBpbiBjb3VudCBvZiBTUEkgYmFzZSBjbG9jay4gUmFuZ2UoMC0yNTUpLgorICAgICAgIFRoZSBjaGlwIHNlbGVjdCBob2xkIHRpbWUgPSAoY3NfaG9sZF90aW1lKzEpKkNMS19QRVJJT0QuICovCisgICAga2FsX3VpbnQzMiBjc19ob2xkX3RpbWU7CisgICAgLyogQ1MgaWRsZSB0aW1lLiBVbml0IGluIGNvdW50IG9mIFNQSSBiYXNlIGNsb2NrLiBSYW5nZSgwLTI1NSkuCisgICAgICAgVGhlIGNoaXAgc2VsZWN0IGlkbGUgdGltZSBiZXR3ZWVuIGNvbnNlY3V0aXZlIHRyYW5zYWN0aW9uID0gKGNzX2lkbGVfdGltZSsxKSpDTEtfUEVSSU9ELiAqLworICAgIGthbF91aW50MzIgY3NfaWRsZV90aW1lOworICAgIC8qIFNDSyBjbG9jayBsb3cgdGltZS4gVW5pdCBpbiBjb3VudCBvZiBTUEkgYmFzZSBjbG9jay4gUmFuZ2UoMC0yNTUpLgorICAgICAgIFRoZSBTQ0sgY2xvY2sgbG93IHRpbWUgPSAoY2xrX2xvd190aW1lKzEpKkNMS19QRVJJT0QuICovCisgICAga2FsX3VpbnQzMiBjbGtfbG93X3RpbWU7CisgICAgLyogU0NLIGNsb2NrIGhpZ2ggdGltZS4gVW5pdCBpbiBjb3VudCBvZiBTUEkgYmFzZSBjbG9jay4gUmFuZ2UoMC0yNTUpLgorICAgICAgIFRoZSBTQ0sgY2xvY2sgaGlnaCB0aW1lID0gKGNsa19oaWdoX3RpbWUrMSkqQ0xLX1BFUklPRC4gKi8KKyAgICBrYWxfdWludDMyIGNsa19oaWdoX3RpbWU7CisgICAgLyogQml0IG9yZGVyIHNldHRpbmcgZm9yIFNQSSBvdXRwdXQuICovCisgICAgU1BJX01TQkZfRSB0eF9tc2JmOworICAgIC8qIEJpdCBvcmRlciBzZXR0aW5nIGZvciBTUEkgaW5wdXQuICovCisgICAgU1BJX01TQkZfRSByeF9tc2JmOworICAgIC8qIEJ5dGUgb3JkZXIgc2V0dGluZyBmb3IgU1BJIG91dHB1dC4gKi8KKyAgICBTUElfRU5ESUFOX0UgdHhfZW5kaWFuOworICAgIC8qIEJ5dGUgb3JkZXIgc2V0dGluZyBmb3IgU1BJIGlucHV0LiAqLworICAgIFNQSV9FTkRJQU5fRSByeF9lbmRpYW47CisgICAgLyogU1BJIGNsb2NrIHBvbGFyaXR5LiAqLworICAgIFNQSV9DUE9MX0UgY2xrX3BvbGFyaXR5OworICAgIC8qIFNQSSBjbG9jayBmb3JtYXQuICovCisgICAgU1BJX0NQSEFfRSBjbGtfZm10OworfSBTUElfQ09ORklHX1BBUkFNX1Q7CisKKy8qIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgYXMgdGhlIHBhcmFtZXRlciBvZiBTUElfSU9DVExfUVVFUllfQ0FQQUJJTElUWS4KKyovCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qIE1pbmltdW0gdmFsdWUgZm9yIGNzIHNldHVwIHRpbWUuICovCisgICAga2FsX3VpbnQzMiBjc19zZXR1cF90aW1lX21pbjsKKyAgICAvKiBNYXhpbXVtIHZhbHVlIGZvciBjcyBzZXR1cCB0aW1lLiAqLworICAgIGthbF91aW50MzIgY3Nfc2V0dXBfdGltZV9tYXg7CisgICAgLyogTWluaW11bSB2YWx1ZSBmb3IgY3MgaG9sZCB0aW1lLiAqLworICAgIGthbF91aW50MzIgY3NfaG9sZF90aW1lX21pbjsKKyAgICAvKiBNYXhpbXVtIHZhbHVlIGZvciBjcyBob2xkIHRpbWUuICovCisgICAga2FsX3VpbnQzMiBjc19ob2xkX3RpbWVfbWF4OworICAgIC8qIE1pbmltdW0gdmFsdWUgZm9yIGNzIGlkbGUgdGltZS4gKi8KKyAgICBrYWxfdWludDMyIGNzX2lkbGVfdGltZV9taW47CisgICAgLyogTWF4aW11bSB2YWx1ZSBmb3IgY3MgaWRsZSB0aW1lLiAqLworICAgIGthbF91aW50MzIgY3NfaWRsZV90aW1lX21heDsKKyAgICAvKiBNaW5pbXVtIHZhbHVlIGZvciBjbG9jayBsb3cgdGltZS4gKi8KKyAgICBrYWxfdWludDMyIGNsa19sb3dfdGltZV9taW47CisgICAgLyogTWF4aW11bSB2YWx1ZSBmb3IgY2xvY2sgbG93IHRpbWUuICovCisgICAga2FsX3VpbnQzMiBjbGtfbG93X3RpbWVfbWF4OworICAgIC8qIE1pbmltdW0gdmFsdWUgZm9yIGNsb2NrIGhpZ2ggdGltZS4gKi8KKyAgICBrYWxfdWludDMyIGNsa19oaWdoX3RpbWVfbWluOworICAgIC8qIE1heGltdW0gdmFsdWUgZm9yIGNsb2NrIGhpZ2ggdGltZS4gKi8KKyAgICBrYWxfdWludDMyIGNsa19oaWdoX3RpbWVfbWF4OworICAgIC8qIE1pbmltdW0gdmFsdWUgZm9yIHRyYW5zZmVyIGxlbmd0aC4gKi8KKyAgICBrYWxfdWludDMyIHRyYW5zZmVyX2xlbmd0aF9taW47CisgICAgLyogTWF4aW11bSB2YWx1ZSBmb3IgdHJhbnNmZXIgbGVuZ3RoLiAqLworICAgIGthbF91aW50MzIgdHJhbnNmZXJfbGVuZ3RoX21heDsKKyAgICAvKiBNaW5pbXVtIHZhbHVlIGZvciB0cmFuc2ZlciBjb3VudC4gKi8KKyAgICBrYWxfdWludDMyIHRyYW5zZmVyX2NvdW50X21pbjsKKyAgICAvKiBNYXhpbXVtIHZhbHVlIGZvciB0cmFuc2ZlciBjb3VudC4gKi8KKyAgICBrYWxfdWludDMyIHRyYW5zZmVyX2NvdW50X21heDsKKyAgICAvKiBNaW5pbXVtIHZhbHVlIGZvciBzbG93IGRvd24gdGhyZXNob2xkLiAqLworICAgIGthbF91aW50MzIgc2xvd19kb3duX3RocmVzaF9taW47CisgICAgLyogTWF4aW11bSB2YWx1ZSBmb3Igc2xvdyBkb3duIHRocmVzaG9sZC4gKi8KKyAgICBrYWxfdWludDMyIHNsb3dfZG93bl90aHJlc2hfbWF4OworICAgIC8qIE1pbmltdW0gdmFsdWUgZm9yIHVsdHJhIGhpZ2ggdGhyZXNob2xkLiAqLworICAgIGthbF91aW50MzIgdWx0cmFfaGlnaF90aHJlc2hfbWluOworICAgIC8qIE1heGltdW0gdmFsdWUgZm9yIHVsdHJhIGhpZ2ggdGhyZXNob2xkLiAqLworICAgIGthbF91aW50MzIgdWx0cmFfaGlnaF90aHJlc2hfbWF4OworICAgIC8qIE1pbmltdW0gdmFsdWUgZm9yIGRyaXZpbmcgY3VycmVudC4gKi8KKyAgICBrYWxfdWludDMyIGRyaXZpbmdfY3VycmVudF9taW47CisgICAgLyogTWF4aW11bSB2YWx1ZSBmb3IgZHJpdmluZyBjdXJyZW50LiAqLworICAgIGthbF91aW50MzIgZHJpdmluZ19jdXJyZW50X21heDsKK30gU1BJX0NBUEFCSUxJVFlfVDsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBhcyB0aGUgcGFyYW1ldGVyIG9mIFNQSV9JT0NUTF9RVUVSWV9NT0RFX1NVUFBPUlQuCisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiBbSU5dIFNwZWNpZnkgYSBTUEkgbW9kZS4gKi8KKyAgICBTUElfSEFMX01PREUgbW9kZTsKKyAgICAvKiBbT1VUXSBSZXR1cm4gd2hldGhlciB0aGUgc3BlY2lmaWMgbW9kZSBpcyBzdXBwb3J0ZWQuICovCisgICAga2FsX2Jvb2wgYlN1cHBvcnQ7Cit9IFNQSV9RVUVSWV9NT0RFX1Q7CisKKy8qIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgYXMgdGhlIHBhcmFtZXRlciBvZiBTUElfSU9DVExfUVVFUllfQ0xPQ0suCisgICBJdCBjb250YWlucyB0aGUgY2xvY2sgZnJlcXVlbmN5IHdoaWNoIGlzIHVzZWQgdG8gY2FsY3VsYXRlIFNQSSB0aW1pbmcgcGFyYW1ldGVycy4KKyovCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qIFtPVVRdIFNQSSBiYXNlIGNsb2NrLiBVbml0IGluIE1Iei4gKi8KKyAgICBrYWxfdWludDMyIGNsb2NrOworfSBTUElfUVVFUllfQ0xPQ0tfVDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBhcyB0aGUgcGFyYW1ldGVyIG9mIFNQSV9JT0NUTF9TRVRfTU9ERSBhbmQgU1BJX0lPQ1RMX0dFVF9NT0RFLgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyogW0lOXSBTcGVjaWZ5IGEgU1BJIG1vZGUuICovCisgICAgU1BJX0hBTF9NT0RFIG1vZGU7CisgICAgLyogW0lOL09VVF0gU3BlY2lmeSB3aGV0aGVyIHRoZSBtb2RlIGlzIGVuYWJsZWQuCisgICAgICAgRm9yIFNQSV9JT0NUTF9TRVRfTU9ERSwgaXQgaXMgYW4gaW5wdXQgcGFyYW1ldGVyLgorICAgICAgIEZvciBTUElfSU9DVExfR0VUX01PREUsIGl0IGlzIGFuIG91dHB1dCBwYXJhbWV0ZXIuCisgICAgKi8KKyAgICBrYWxfYm9vbCBiRW5hYmxlOworICAgIC8qIFtJTi9PVVRdIFRoZSBwYXJhbWV0ZXIgZm9yIHRoZSBzcGVjaWZpYyBtb2RlLgorICAgICAgIFRoZSBtZWFuaW5nIG9mIHRoaXMgcGFyYW1ldGVyIGRlcGVuZHMgb24gdGhlIG1vZGUgdG8gYmUgc2V0L2dldC4KKyAgICAqLworICAgIGthbF91aW50MzIgUGFyYW07Cit9IFNQSV9NT0RFX1Q7CisKKy8qIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgYXMgdGhlIHBhcmFtZXRlciBvZiBTUElfTU9ERV9UIGZvciBTUElfTU9ERV9TTE9XX0RPV04uCisgICBJZiB1c2VyIHVzZXMgU1BJX0lPQ1RMX1NFVF9NT0RFIG9yIFNQSV9JT0NUTF9HRVRfTU9ERSB0byBzZXQvZ2V0IFNQSSBETUEgc2xvdyBkb3duIG1vZGUsIHRoZSBQYXJhbSBpbiBTUElfTU9ERV9UIGlzIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZS4gCisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiBUaGlzIHBhcmFtZXRlciBkZWNpZGVzIHdoZXRoZXIgdG8gZW5hYmxlIHNwbGl0dGluZyBidXJzdCBvbmUgNC1iZWF0IHJlYWQvd3JpdGUgYWNjZXNzIGludG8gZm91ciBzaW5nbGUgcmVhZC93cml0ZSBhY2Nlc3Nlcy4qLworICAgIGthbF9ib29sIHNwbGl0X2J1cnN0X2VuYWJsZTsKKyAgICAvKiBUaGlzIHBhcmFtZXRlciBpcyBhIGNvdW50ZXIgdG8gY29uZmlndXJlIGhvdyBtYW55IHRpbWUgdW5pdHMgdG8gc2VuZCBvbmUgcmVxdWVzdCB0byBHTUMuKi8KKyAgICBrYWxfdWludDMyIHNsb3dfZG93bl90aHJlc2g7Cit9IFNQSV9TTE9XRE9XTl9QQVJBTV9UOworCisvKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGFzIHRoZSBwYXJhbWV0ZXIgb2YgU1BJX0lPQ1RMX0dFVF9EUklWSU5HX0NVUlJFTlQgYW5kIFNQSV9JT0NUTF9TRVRfRFJJVklOR19DVVJSRU5ULgorKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyogSW5kaWNhdGVzIHdoZXRoZXIgc2xldyByYXRlIGNvbnRyb2wgaXMgZW5hYmxlZC4gKi8KKyAgICBrYWxfYm9vbCBiRW5hYmxlU2xld1JhdGU7CisgICAgLyogRHJpdmluZyBjdXJyZW50IHZhbHVlLgorICAgICAgIDxiPiA8Y29sb3IgUmVkPk5vdGU6IFRoaXMgdmFyaWFibGUganVzdCBpbmRpY2F0ZXMgdGhlIHZhbHVlIHRoYXQgaXMgc2V0IGluIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLiBJdCBkb2VzIG5vdCBzdGFuZHMgZm90IHRoZSBhY3R1YWwgZHJpdmluZyBjdXJyZW50LgorICAgICAgIFJlZmVyIHRvIHJlbGF0ZWQgaGFyZHdhcmUgc3BlYyBmb3IgZGV0YWlsIGluZm9ybWF0aW9uLjwvYj48L2NvbG9yPgorICAgICovCisgICAga2FsX3VpbnQzMiBkcml2aW5nX2N1cnJlbnQ7Cit9IFNQSV9EUklWSU5HX0NVUlJFTlRfVDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogRnVuY3Rpb24KKyAgKiBzcGlfb3BlbgorICAqIERlc2NyaXB0aW9uCisgICogT3BlbiBhbmQgZ2V0IFNQSSBoYW5kbGUuCisgICogUGFyYW1ldGVycworICAqIHBvcnQgOiAgW0lOXSBTUEkgcG9ydC4gWmVybyBiYXNlZCBwb3J0IGluZGV4LgorICAqIEZvciA8Y29sb3IgQmx1ZT5NVDYyMzg8L2NvbG9yPi88Y29sb3IgQmx1ZT5NVDYyNjg8L2NvbG9yPi88Y29sb3IgQmx1ZT5NVDYyMzY8L2NvbG9yPiwgb25seSBvbmUgcG9ydCBpcyBzdXBwb3J0ZWQuIAorICAqIFJldHVybnMKKyAgKiBSZXR1cm4gYSBTUEkgaGFuZGxlLgorICAqIEV4YW1wbGUKKyAgKiA8Y29kZT4KKyAgKiBTUElfSEFORExFIGhhbmRsZTsKKyAgKiBoYW5kbGUgPSBzcGlfb3BlbigwKTsKKyAgKiA8L2NvZGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK1NQSV9IQU5ETEUgc3BpX29wZW4oa2FsX3VpbnQzMiBwb3J0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogRnVuY3Rpb24KKyAgKiBzcGlfY2xvc2UKKyAgKiBEZXNjcmlwdGlvbgorICAqIFJlbGVhc2UgYSBTUEkgaGFuZGxlLgorICAqIFBhcmFtZXRlcnMKKyAgKiBoYW5kbGUgOiAgW0lOXSBTUEkgaGFuZGxlLiBSZXRyaWV2ZWQgZnJvbSBzcGlfb3BlbigpLgorICAqIFJldHVybnMKKyAgKiBSZXR1cm4gYSBTUEkgcmVzdWx0IGNvZGUuCisgICogRXhhbXBsZQorICAqIDxjb2RlPgorICAqIFNQSV9IQU5ETEUgaGFuZGxlOworICAqIGhhbmRsZSA9IHNwaV9vcGVuKDApOworICAqIC8vIFNQSSBvcGVyYXRpb25zLgorICAqIHNwaV9jbG9zZShoYW5kbGUpOworICAqIDwvY29kZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworU1BJX1JFU1VMVCBzcGlfY2xvc2UoU1BJX0hBTkRMRSBoYW5kbGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBGdW5jdGlvbgorICAqIHNwaV9jb25maWd1cmUKKyAgKiBEZXNjcmlwdGlvbgorICAqIENvbmZpZ3VyZSBTUEkgcGFyYW1ldGVycyBpbmNsdWRpbmcgdGltaW5nIHBhcmFtZXRlcnMgYW5kIHdhdmVmb3JtIHBhcmFtZXRlcnMuCisgICogU1BJIHBhcmFtZXRlcnMgbXVzdCBiZSBzZXQgYmVmb3JlIGFueSBTUEkgdHJhbnNtaXNzaW9ucy4KKyAgKiBQYXJhbWV0ZXJzCisgICogaGFuZGxlIDogICAgICAgIFtJTl0gU1BJIGhhbmRsZS4gUmV0cmlldmVkIGZyb20gc3BpX29wZW4oKS4KKyAgKiBwQ29uZmlnUGFyYW0gOiAgW0lOXSBTUEkgcGFyYW1ldGVycy4gUmVmZXIgdG8gU1BJX0NPTkZJR19QQVJBTV9UIGZvciBkZXRhaWxzLgorICAqIFJldHVybnMKKyAgKiBSZXR1cm4gYSBTUEkgcmVzdWx0IGNvZGUuCisgICogRXhhbXBsZQorICAqIDxjb2RlPgorICAqIFNQSV9IQU5ETEUgaGFuZGxlOworICAqIFNQSV9DT05GSUdfUEFSQU1fVCBwYXJhbTsKKyAgKiBoYW5kbGUgPSBzcGlfb3BlbigwKTsKKyAgKiBwYXJhbS5jc19zZXR1cF90aW1lID0gNTsKKyAgKiBwYXJhbS5jc19ob2xkX3RpbWUgPSA1OworICAqIHBhcmFtLmNzX2lkbGVfdGltZSA9IDU7CisgICogcGFyYW0uY2xrX2xvd190aW1lID0gNTsKKyAgKiBwYXJhbS5jbGtfaGlnaF90aW1lID0gNTsKKyAgKiBwYXJhbS50eF9tbHNiID0gU1BJX0xTQjsKKyAgKiBwYXJhbS5yeF9tbHNiID0gU1BJX0xTQjsKKyAgKiBwYXJhbS5jbGtfcG9sYXJpdHkgPSBTUElfQ1BPTF8wOworICAqIHBhcmFtLmNsa19mbXQgPSBTUElfQ1BIQV8wOworICAqIHNwaV9jb25maWd1cmUoaGFuZGxlLCAmYW1wO3BhcmFtKTsKKyAgKiAvLyAuLi4KKyAgKiBzcGlfY2xvc2UoaGFuZGxlKTsKKyAgKiA8L2NvZGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK1NQSV9SRVNVTFQgc3BpX2NvbmZpZ3VyZShTUElfSEFORExFIGhhbmRsZSwgU1BJX0NPTkZJR19QQVJBTV9UKiBwQ29uZmlnUGFyYW0pOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEZ1bmN0aW9uCisgICogc3BpX3dyaXRlCisgICogRGVzY3JpcHRpb24KKyAgKiBGaXJlIGEgU1BJIHRyYW5zbWlzc2lvbiBmb3Igb3V0cHV0LgorICAqIFBhcmFtZXRlcnMKKyAgKiBoYW5kbGUgOiAgIFtJTl0gU1BJIGhhbmRsZS4gUmV0cmlldmVkIGZyb20gc3BpX29wZW4oKS4KKyAgKiBwQnVmZmVyIDogIFtJTl0gRGF0YSBidWZmZXIgZm9yIG91dHB1dC4KKyAgKiBsZW5ndGggOiAgIFtJTl0gRGF0YSBsZW5ndGggZm9yIG9uZSBwYWNrYWdlLiBVbml0IGluIGJ5dGVzLiA8Y29sb3IgUmVkPjxiPklmIGNvdW50ICZndDsgMSwgbGVuZ3RoIG11c3QgYmUgNFguPC9iPjwvY29sb3I+CisgICogY291bnQgOiAgICBbSU5dIFBhY2thZ2UgY291bnQuPGI+IDxjb2xvciBSZWQ+SWYgY291bnQgJmd0OyAxLCBsZW5ndGggbXVzdCBiZSA0WC48L2I+PC9jb2xvcj4KKyAgKiBmQ0IgOiAgICAgIFtJTl0gU3BlY2lmaWVzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHRoZSB0cmFuc21pc3Npb24gY29tcGxldGVzLgorICAqIElmIGZDQiBpcyBzcGVjaWZpZWQsIFNQSSBkcml2ZXIgdXNlcyBpbnRlcnJ1cHQgbW9kZS4gVGhpcyBBUEkgaXMgYXN5bmNocm9ub3VzLgorICAqIElmIGZDQiBpcyBOVUxMLCBTUEkgZHJ2aWVyIHVzZXMgcG9sbGluZyBtb2RlLiBUaGlzIEFQSSBiZWNvbWVzIHN5bmNocm9ub3VzLgorICAqIFJldHVybnMKKyAgKiBSZXR1cm4gYSBTUEkgcmVzdWx0IGNvZGUuCisgICogRXhhbXBsZQorICAqIDxjb2RlPgorICAqIFNQSV9IQU5ETEUgaGFuZGxlOworICAqIFNQSV9DT05GSUdfUEFSQU1fVCBwYXJhbTsKKyAgKiBoYW5kbGUgPSBzcGlfb3BlbigwKTsKKyAgKiAvLyAuLi4KKyAgKiBzcGlfY29uZmlndXJlKGhhbmRsZSwgJmFtcDtwYXJhbSk7CisgICogCisgICogLy8gU3luY2hyb25vdXMgY2FsbC4KKyAgKiBzcGlfd3JpdGUoaGFuZGxlLCBzcGlfdGVzdF9idWZmZXIxLCAxMDI0LCAxLCBOVUxMKTsKKyAgKiAKKyAgKiAvLyBBc3luY2hyb25vdXMgY2FsbC4KKyAgKiBzcGlfd3JpdGUoaGFuZGxlLCBzcGlfdGVzdF9idWZmZXIxLCAxMDI0LCAxLCBzcGlfdGVzdF9jYik7CisgICogLy8gV2FpdCBmb3IgYSBldmVudCB3aGljaCBpcyBzZXQgaW4gY2FsbGJhY2sgZnVuY3Rpb24uCisgICogLy8gLi4uCisgICogc3BpX2Nsb3NlKGhhbmRsZSk7CisgICogPC9jb2RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworU1BJX1JFU1VMVCBzcGlfd3JpdGUoU1BJX0hBTkRMRSBoYW5kbGUsIHZvaWQqIHBCdWZmZXIsIGthbF91aW50MzIgbGVuZ3RoLCBrYWxfdWludDMyIGNvdW50LCBTUElfQ0FMTEJBQ0sgZkNCKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBGdW5jdGlvbgorICAqIHNwaV9yZWFkCisgICogRGVzY3JpcHRpb24KKyAgKiBGaXJlIGEgU1BJIHRyYW5zbWlzc2lvbiBmb3IgaW5wdXQuCisgICogUGFyYW1ldGVycworICAqIGhhbmRsZSA6ICAgW0lOXSBTUEkgaGFuZGxlLiBSZXRyaWV2ZWQgZnJvbSBzcGlfb3BlbigpLgorICAqIHBCdWZmZXIgOiAgW09VVF0gRGF0YSBidWZmZXIgZm9yIGlucHV0LgorICAqIGxlbmd0aCA6ICAgW0lOXSBEYXRhIGxlbmd0aCBmb3Igb25lIHBhY2thZ2UuIFVuaXQgaW4gYnl0ZXMuIDxjb2xvciBSZWQ+PGI+SWYgY291bnQgJmd0OyAxLCBsZW5ndGggbXVzdCBiZSA0WC48L2I+PC9jb2xvcj4KKyAgKiBjb3VudCA6ICAgIFtJTl0gUGFja2FnZSBjb3VudC4gPGNvbG9yIFJlZD48Yj5JZiBjb3VudCAmZ3Q7IDEsIGxlbmd0aCBtdXN0IGJlIDRYLjwvYj48L2NvbG9yPgorICAqIGZDQiA6ICAgICAgW0lOXSBTcGVjaWZpZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gdGhlIHRyYW5zbWlzc2lvbiBjb21wbGV0ZXMuCisgICogSWYgZkNCIGlzIHNwZWNpZmllZCwgU1BJIGRyaXZlciB1c2VzIGludGVycnVwdCBtb2RlLiBUaGlzIEFQSSBpcyBhc3luY2hyb25vdXMuCisgICogSWYgZkNCIGlzIE5VTEwsIFNQSSBkcnZpZXIgdXNlcyBwb2xsaW5nIG1vZGUuIFRoaXMgQVBJIGJlY29tZXMgc3luY2hyb25vdXMuCisgICogUmV0dXJucworICAqIFJldHVybiBhIFNQSSByZXN1bHQgY29kZS4KKyAgKiBFeGFtcGxlCisgICogPGNvZGU+CisgICogU1BJX0hBTkRMRSBoYW5kbGU7CisgICogU1BJX0NPTkZJR19QQVJBTV9UIHBhcmFtOworICAqIGhhbmRsZSA9IHNwaV9vcGVuKDApOworICAqIC8vIC4uLgorICAqIHNwaV9jb25maWd1cmUoaGFuZGxlLCAmYW1wO3BhcmFtKTsKKyAgKiAKKyAgKiAvLyBTeW5jaHJvbm91cyBjYWxsLgorICAqIHNwaV9yZWFkKGhhbmRsZSwgc3BpX3Rlc3RfYnVmZmVyMiwgMTAyNCwgMSwgTlVMTCk7CisgICogCisgICogLy8gQXN5bmNocm9ub3VzIGNhbGwuCisgICogc3BpX3JlYWQoaGFuZGxlLCBzcGlfdGVzdF9idWZmZXIyLCAxMDI0LCAxLCBzcGlfdGVzdF9jYik7CisgICogLy8gV2FpdCBmb3IgYSBldmVudCB3aGljaCBpcyBzZXQgaW4gY2FsbGJhY2sgZnVuY3Rpb24uCisgICogLy8gLi4uCisgICogc3BpX2Nsb3NlKGhhbmRsZSk7CisgICogPC9jb2RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworU1BJX1JFU1VMVCBzcGlfcmVhZChTUElfSEFORExFIGhhbmRsZSwgdm9pZCogcEJ1ZmZlciwga2FsX3VpbnQzMiBsZW5ndGgsIGthbF91aW50MzIgY291bnQsIFNQSV9DQUxMQkFDSyBmQ0IpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBGdW5jdGlvbgorICAqIHNwaV9yZWFkd3JpdGUKKyAgKiBEZXNjcmlwdGlvbgorICAqIEZpcmUgYSBTUEkgdHJhbnNtaXNzaW9uIGZvciBpbnB1dCBhbmQgb3V0cHV0LiBUaGlzIHRyYW5zYWN0aW9uIHVzZXMKKyAgKiBkdXBsZXggbW9kZSBvZiBTUEkuCisgICogUGFyYW1ldGVycworICAqIGhhbmRsZSA6ICAgICAgW0lOXSBTUEkgaGFuZGxlLiBSZXRyaWV2ZWQgZnJvbSBzcGlfb3BlbigpLgorICAqIHBPdXRCdWZmZXIgOiAgW0lOXSBEYXRhIGJ1ZmZlciBmb3Igb3V0cHV0LgorICAqIHBJbkJ1ZmZlciA6ICAgW09VVF0gRGF0YSBidWZmZXIgZm9yIGlucHV0LgorICAqIGxlbmd0aCA6ICAgICAgW0lOXSBEYXRhIGxlbmd0aCBmb3Igb25lIHBhY2thZ2UuIFVuaXQgaW4gYnl0ZXMuIDxjb2xvciBSZWQ+PGI+SWYgY291bnQgJmd0OyAxLCBsZW5ndGggbXVzdCBiZSA0WC48L2I+PC9jb2xvcj4KKyAgKiBjb3VudCA6ICAgICAgIFtJTl0gUGFja2FnZSBjb3VudC4gPGNvbG9yIFJlZD48Yj5JZiBjb3VudCAmZ3Q7IDEsIGxlbmd0aCBtdXN0IGJlIDRYLjwvYj48L2NvbG9yPgorICAqIGZDQiA6ICAgICAgICAgW0lOXSBTcGVjaWZpZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gdGhlIHRyYW5zbWlzc2lvbiBjb21wbGV0ZXMuCisgICogSWYgZkNCIGlzIHNwZWNpZmllZCwgU1BJIGRyaXZlciB1c2VzIGludGVycnVwdCBtb2RlLiBUaGlzIEFQSSBpcyBhc3luY2hyb25vdXMuCisgICogSWYgZkNCIGlzIE5VTEwsIFNQSSBkcnZpZXIgdXNlcyBwb2xsaW5nIG1vZGUuIFRoaXMgQVBJIGJlY29tZXMgc3luY2hyb25vdXMuCisgICogUmV0dXJucworICAqIFJldHVybiBhIFNQSSByZXN1bHQgY29kZS4KKyAgKiBFeGFtcGxlCisgICogPGNvZGU+CisgICogU1BJX0hBTkRMRSBoYW5kbGU7CisgICogU1BJX0NPTkZJR19QQVJBTV9UIHBhcmFtOworICAqIGhhbmRsZSA9IHNwaV9vcGVuKDApOworICAqIC8vIC4uLgorICAqIHNwaV9jb25maWd1cmUoaGFuZGxlLCAmYW1wO3BhcmFtKTsKKyAgKiAKKyAgKiAvLyBTeW5jaHJvbm91cyBjYWxsLgorICAqIHNwaV9yZWFkd3JpdGUoaGFuZGxlLCBzcGlfdGVzdF9idWZmZXIxLCBzcGlfdGVzdF9idWZmZXIyLCAxMDI0LCAxLCBOVUxMKTsKKyAgKiAKKyAgKiAvLyBBc3luY2hyb25vdXMgY2FsbC4KKyAgKiBzcGlfcmVhZHdyaXRlKGhhbmRsZSwgc3BpX3Rlc3RfYnVmZmVyMSwgc3BpX3Rlc3RfYnVmZmVyMiwgMTAyNCwgMSwgc3BpX3Rlc3RfY2IpOworICAqIC8vIFdhaXQgZm9yIGEgZXZlbnQgd2hpY2ggaXMgc2V0IGluIGNhbGxiYWNrIGZ1bmN0aW9uLgorICAqIC8vIC4uLgorICAqIHNwaV9jbG9zZShoYW5kbGUpOworICAqIDwvY29kZT4KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitTUElfUkVTVUxUIHNwaV9yZWFkd3JpdGUoU1BJX0hBTkRMRSBoYW5kbGUsIHZvaWQqIHBPdXRCdWZmZXIsIHZvaWQqIHBJbkJ1ZmZlciwga2FsX3VpbnQzMiBsZW5ndGgsIGthbF91aW50MzIgY291bnQsIFNQSV9DQUxMQkFDSyBmQ0IpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBGdW5jdGlvbgorICAqIHNwaV9wb3dlcl9jdHJsCisgICogRGVzY3JpcHRpb24KKyAgKiBFbmFibGUgb3IgZGlzYWJsZSBTUEkgQ29udHJvbGxlciBwb3dlci4KKyAgKiA8dGV4dGF0dHIgY29sb3I9IlJlZCI+VGhpcyBBUEkgaXMgY3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZC4gU1BJIHBvd2VyIHdpbGwgYmUgdHVybmVkIG9uIHdoZW4gY2FsbGluZyBzcGlfb3BlbigpIGFuZCB0dXJuZWQgb2ZmIHdoZW4gY2FsbGluZzwvdGV4dGF0dHI+IHNwaV9jbG9zZSgpLgorICAqIFBhcmFtZXRlcnMKKyAgKiBoYW5kbGUgOiAgICBbSU5dIFNQSSBoYW5kbGUuIFJldHJpZXZlZCBmcm9tIHNwaV9vcGVuKCkuCisgICogYlBvd2VyT24gOiAgW0lOXSBTZXQgS0FMX1RSVUUgdG8gcG93ZXIgb24gU1BJIENvbnRyb2xsZXIuIFNldCBLQUxfRkFMU0UgdG8gcG93ZXIgb2ZmIFNQSSBDb250cm9sbGVyLgorICAqIFJldHVybnMKKyAgKiBSZXR1cm4gYSBTUEkgcmVzdWx0IGNvZGUuCisgICogRXhhbXBsZQorICAqIDxjb2RlPgorICAqIFNQSV9IQU5ETEUgaGFuZGxlOworICAqIGhhbmRsZSA9IHNwaV9vcGVuKDApOworICAqIHNwaV9wb3dlcl9jdHJsKGhhbmRsZSwgS0FMX1RSVUUpOworICAqIC8vIFNQSSBvcGVyYXRpb25zLgorICAqIHNwaV9wb3dlcl9jdHJsKGhhbmRsZSwgS0FMX0ZBTFNFKTsKKyAgKiBzcGlfY2xvc2UoaGFuZGxlKTsKKyAgKiA8L2NvZGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK1NQSV9SRVNVTFQgc3BpX3Bvd2VyX2N0cmwoU1BJX0hBTkRMRSBoYW5kbGUsIGthbF9ib29sIGJQb3dlck9uKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogRnVuY3Rpb24KKyAgKiBzcGlfaW9jdGwKKyAgKiBEZXNjcmlwdGlvbgorICAqIElPIENvbnRyb2wgZm9yIFNQSSBkcml2ZXIuCisgICogQSBzZXJpZXMgb2YgU1BJIGNvbnRyb2wgY29kZSBpcyBkZWZpbmVkIGZvciBleHRlbnNpb24gdXNhZ2UuIFJlZmVyIHRvIFNQSV9JT0NUTF9DT0RFLgorICAqIFBhcmFtZXRlcnMKKyAgKiBoYW5kbGUgOiAgW0lOXSBTUEkgaGFuZGxlLiBSZXRyaWV2ZWQgZnJvbSBzcGlfb3BlbigpLgorICAqIGNvZGUgOiAgICBbSU5dIFNQSSBjb250cm9sIGNvZGUuIFJlZmVyIHRvIFNQSV9JT0NUTF9DT0RFLgorICAqIHBQYXJhbSA6ICBbSU4vT1VUXSBQYXJhbWV0ZXIgZm9yIFNQSSBJTyBDb250cm9sLiBUaGUgZGVmaW5pdGlvbiBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpZWQgY29udHJvbCBjb2RlLiBSZWZlciB0byBTUElfSU9DVExfQ09ERS4KKyAgKiBSZXR1cm5zCisgICogUmV0dXJuIGEgU1BJIHJlc3VsdCBjb2RlLgorICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgU1BJX1JFU1VMVF9OT1RfU1VQUE9SVEVEIGlmIHRoZSBjdXJyZW50IHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgdGhlIHNlcGNpZmljIGNvbnRyb2wgY29kZS4KKyAgKiBFeGFtcGxlCisgICogPGNvZGU+CisgICogU1BJX0hBTkRMRSBoYW5kbGU7CisgICogU1BJX01PREVfVCBTZXRNb2RlOworICAqIGhhbmRsZSA9IHNwaV9vcGVuKDApOworICAqIC8vIFRlc3QgZm9yIGRlYXNzZXJ0IG1vZGUuCisgICogU2V0TW9kZS5tb2RlID0gU1BJX01PREVfREVBU1NFUlQ7CisgICogU2V0TW9kZS5iRW5hYmxlID0gS0FMX1RSVUU7CisgICogc3BpX2lvY3RsKGhhbmRsZSwgU1BJX0lPQ1RMX1NFVF9NT0RFLCAmYW1wO1NldE1vZGUpOworICAqIHNwaV9yZWFkd3JpdGUoaGFuZGxlLCBzcGlfdGVzdF9idWZmZXIxLCBzcGlfdGVzdF9idWZmZXIyLCAxMDI0LCAxLCBOVUxMKTsKKyAgKiBTZXRNb2RlLmJFbmFibGUgPSBLQUxfRkFMU0U7CisgICogc3BpX2lvY3RsKGhhbmRsZSwgU1BJX0lPQ1RMX1NFVF9NT0RFLCAmYW1wO1NldE1vZGUpOworICAqIHNwaV9jbG9zZShoYW5kbGUpOworICAqIDwvY29kZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworU1BJX1JFU1VMVCBzcGlfaW9jdGwoU1BJX0hBTkRMRSBoYW5kbGUsIFNQSV9JT0NUTF9DT0RFIGNvZGUsIHZvaWQqIHBQYXJhbSk7CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL3NwbWkuaCBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvc3BtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZTEwMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL3NwbWkuaApAQCAtMCwwICsxLDE1MSBAQAorLyogQ29weXJpZ2h0IFN0YXRlbWVudDoKKyAqCisgKiBUaGlzIHNvZnR3YXJlL2Zpcm13YXJlIGFuZCByZWxhdGVkIGRvY3VtZW50YXRpb24gKCJNZWRpYVRlayBTb2Z0d2FyZSIpIGFyZQorICogcHJvdGVjdGVkIHVuZGVyIHJlbGV2YW50IGNvcHlyaWdodCBsYXdzLiBUaGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbiBpcworICogY29uZmlkZW50aWFsIGFuZCBwcm9wcmlldGFyeSB0byBNZWRpYVRlayBJbmMuIGFuZC9vciBpdHMgbGljZW5zb3JzLiBXaXRob3V0CisgKiB0aGUgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIGluYy4gYW5kL29yIGl0cyBsaWNlbnNvcnMsIGFueQorICogcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIHVzZSBvciBkaXNjbG9zdXJlIG9mIE1lZGlhVGVrIFNvZnR3YXJlLCBhbmQKKyAqIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4sIGluIHdob2xlIG9yIGluIHBhcnQsIHNoYWxsIGJlIHN0cmljdGx5CisgKiBwcm9oaWJpdGVkLgorICoKKyAqIE1lZGlhVGVrIEluYy4gKEMpIDIwMTkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQlkgT1BFTklORyBUSElTIEZJTEUsIFJFQ0VJVkVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisgKiBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorICogUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gUkVDRUlWRVIKKyAqIE9OIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTAorICogV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IKKyAqIE5PTklORlJJTkdFTUVOVC4gTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSAorICogUkVTUEVDVCBUTyBUSEUgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLAorICogSU5DT1JQT1JBVEVEIElOLCBPUiBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIFJFQ0VJVkVSIEFHUkVFUworICogVE8gTE9PSyBPTkxZIFRPIFNVQ0ggVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLgorICogUkVDRUlWRVIgRVhQUkVTU0xZIEFDS05PV0xFREdFUyBUSEFUIElUIElTIFJFQ0VJVkVSJ1MgU09MRSBSRVNQT05TSUJJTElUWSBUTworICogT0JUQUlOIEZST00gQU5ZIFRISVJEIFBBUlRZIEFMTCBQUk9QRVIgTElDRU5TRVMgQ09OVEFJTkVEIElOIE1FRElBVEVLCisgKiBTT0ZUV0FSRS4gTUVESUFURUsgU0hBTEwgQUxTTyBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRQorICogUkVMRUFTRVMgTUFERSBUTyBSRUNFSVZFUidTIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIKKyAqIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uIFJFQ0VJVkVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUworICogRU5USVJFIEFORCBDVU1VTEFUSVZFIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFCisgKiBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRQorICogTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UKKyAqIENIQVJHRSBQQUlEIEJZIFJFQ0VJVkVSIFRPIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgc29mdHdhcmUvZmlybXdhcmUgYW5kL29yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiAoIk1lZGlhVGVrCisgKiBTb2Z0d2FyZSIpIGhhdmUgYmVlbiBtb2RpZmllZCBieSBNZWRpYVRlayBJbmMuIEFsbCByZXZpc2lvbnMgYXJlIHN1YmplY3QgdG8KKyAqIGFueSByZWNlaXZlcidzIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHdpdGggTWVkaWFUZWsgSW5jLgorICovCisjaWZuZGVmIF9fU1BNSV9IX18KKyNkZWZpbmUgX19TUE1JX0hfXworI2RlZmluZSBTUE1JX0dST1VQX0lECQkJMHhCCisKKy8qIE1heGltdW0gc2xhdmUgaWRlbnRpZmllciAqLworI2RlZmluZSBTUE1JX01BWF9TTEFWRV9JRAkJMTYKKworLyogU1BNSSBDb21tYW5kcyAqLworI2RlZmluZSBTUE1JX0NNRF9FWFRfV1JJVEUJCTB4MDAKKyNkZWZpbmUgU1BNSV9DTURfUkVTRVQJCQkweDEwCisjZGVmaW5lIFNQTUlfQ01EX1NMRUVQCQkJMHgxMQorI2RlZmluZSBTUE1JX0NNRF9TSFVURE9XTgkJMHgxMgorI2RlZmluZSBTUE1JX0NNRF9XQUtFVVAJCQkweDEzCisjZGVmaW5lIFNQTUlfQ01EX0FVVEhFTlRJQ0FURQkJMHgxNAorI2RlZmluZSBTUE1JX0NNRF9NU1RSX1JFQUQJCTB4MTUKKyNkZWZpbmUgU1BNSV9DTURfTVNUUl9XUklURQkJMHgxNgorI2RlZmluZSBTUE1JX0NNRF9UUkFOU0ZFUl9CVVNfT1dORVJTSElQCTB4MUEKKyNkZWZpbmUgU1BNSV9DTURfRERCX01BU1RFUl9SRUFECTB4MUIKKyNkZWZpbmUgU1BNSV9DTURfRERCX1NMQVZFX1JFQUQJCTB4MUMKKyNkZWZpbmUgU1BNSV9DTURfRVhUX1JFQUQJCTB4MjAKKyNkZWZpbmUgU1BNSV9DTURfRVhUX1dSSVRFTAkJMHgzMAorI2RlZmluZSBTUE1JX0NNRF9FWFRfUkVBREwJCTB4MzgKKyNkZWZpbmUgU1BNSV9DTURfV1JJVEUJCQkweDQwCisjZGVmaW5lIFNQTUlfQ01EX1JFQUQJCQkweDYwCisjZGVmaW5lIFNQTUlfQ01EX1pFUk9fV1JJVEUJCTB4ODAKKworLyogZW51bSBtYXJjbyBmb3IgY21kL2NoYW5uZWwgKi8KK2VudW0KK3sKKwlTUE1JX01BU1RFUl8wID0gMCwKKwlTUE1JX01BU1RFUl8xLAorCVNQTUlfTUFTVEVSX1BfMSwKKwlTUE1JX01BU1RFUl9NQVgKK307CisKK2VudW0KK3sKKwlTUE1JX1NMQVZFXzAgPSAwLAorCVNQTUlfU0xBVkVfMSwKKwlTUE1JX1NMQVZFXzIsCisJU1BNSV9TTEFWRV8zLAorCVNQTUlfU0xBVkVfNCwKKwlTUE1JX1NMQVZFXzUsCisJU1BNSV9TTEFWRV82LAorCVNQTUlfU0xBVkVfNywKKwlTUE1JX1NMQVZFXzgsCisJU1BNSV9TTEFWRV85LAorCVNQTUlfU0xBVkVfMTAsCisJU1BNSV9TTEFWRV8xMSwKKwlTUE1JX1NMQVZFXzEyLAorCVNQTUlfU0xBVkVfMTMsCisJU1BNSV9TTEFWRV8xNCwKKwlTUE1JX1NMQVZFXzE1Cit9OworCitlbnVtIHNsdl90eXBlCit7CisJQlVDS19DUFUsCisJQlVDS19HUFUsCisJQlVDS19NRCwKKwlCVUNLX1JGLAorCU1BSU5fUE1JQywKKwlCVUNLX1ZQVSwKKwlTVUJfUE1JQywKKwlTTFZfVFlQRV9NQVgKK307CisKK2VudW0gc2x2X3R5cGVfaWQKK3sKKwlCVUNLX1JGX0lEID0gMSwKKwlCVUNLX01EX0lEID0gMywKKwlNQUlOX1BNSUNfSUQgPSA1LAorCUJVQ0tfQ1BVX0lEID0gNiwKKwlCVUNLX0dQVV9JRCA9IDcsCisJQlVDS19WUFVfSUQsCisJU1VCX1BNSUNfSUQgPSAxMCwKKwlTTFZfVFlQRV9JRF9NQVgKK307CisKK3N0cnVjdCBzcG1pX2RldmljZSB7CisJaW50IHNsdmlkOworCWludCBncnBpZGVuOworCWVudW0gc2x2X3R5cGUgdHlwZTsKKwllbnVtIHNsdl90eXBlX2lkIHR5cGVfaWQ7CisJaW50IG1zdGlkOworCXVuc2lnbmVkIHNob3J0IGh3Y2lkX2FkZHI7CisJdW5zaWduZWQgY2hhciBod2NpZF92YWw7CisJdW5zaWduZWQgc2hvcnQgc3djaWRfYWRkcjsKKwl1bnNpZ25lZCBjaGFyIHN3Y2lkX3ZhbDsKKwlzdHJ1Y3QgcG1pZiAqcG1pZl9hcmI7Cit9OworCisvKiBleHRlcm5hbCBBUEkgKi8KK2ludCBzcG1pX3JlZ2lzdGVyX3plcm9fd3JpdGUoc3RydWN0IHNwbWlfZGV2aWNlICpkZXYsCisJdW5zaWduZWQgaW50IGFkZHIsIHVuc2lnbmVkIGNoYXIgZGF0YSk7CitpbnQgc3BtaV9yZWdpc3Rlcl9yZWFkKHN0cnVjdCBzcG1pX2RldmljZSAqZGV2LAorCXVuc2lnbmVkIGludCBhZGRyLCB1bnNpZ25lZCBjaGFyICpidWYpOworaW50IHNwbWlfcmVnaXN0ZXJfd3JpdGUoc3RydWN0IHNwbWlfZGV2aWNlICpkZXYsCisJdW5zaWduZWQgaW50IGFkZHIsIHVuc2lnbmVkIGNoYXIgZGF0YSk7CitpbnQgc3BtaV9leHRfcmVnaXN0ZXJfcmVhZChzdHJ1Y3Qgc3BtaV9kZXZpY2UgKmRldiwKKwl1bnNpZ25lZCBpbnQgYWRkciwgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBzaG9ydCBsZW4pOworaW50IHNwbWlfZXh0X3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBzcG1pX2RldmljZSAqZGV2LAorCXVuc2lnbmVkIGludCBhZGRyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIHNob3J0IGxlbik7CitpbnQgc3BtaV9leHRfcmVnaXN0ZXJfcmVhZGwoc3RydWN0IHNwbWlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBhZGRyLAorCQl1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIHNob3J0IGxlbik7CitpbnQgc3BtaV9leHRfcmVnaXN0ZXJfd3JpdGVsKHN0cnVjdCBzcG1pX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYWRkciwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBzaG9ydCBsZW4pOworaW50IHNwbWlfZXh0X3JlZ2lzdGVyX3JlYWRsX2ZpZWxkKHN0cnVjdCBzcG1pX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYWRkciwKKwl1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIHNob3J0IGxlbiwgdW5zaWduZWQgc2hvcnQgbWFzaywKKwl1bnNpZ25lZCBzaG9ydCBzaGlmdCk7CitpbnQgc3BtaV9leHRfcmVnaXN0ZXJfd3JpdGVsX2ZpZWxkKHN0cnVjdCBzcG1pX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYWRkciwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIHNob3J0IGxlbiwgdW5zaWduZWQgc2hvcnQgbWFzaywKKwl1bnNpZ25lZCBzaG9ydCBzaGlmdCk7CisKKyNlbmRpZiAvKl9fU1BNSV9IX18qLwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC91YXJ0X3N3LmggYi9tY3UvaW50ZXJmYWNlL2RyaXZlci9wZXJpcGhlcmFsL3VhcnRfc3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjRjNGY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC91YXJ0X3N3LmgKQEAgLTAsMCArMSw2NjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgdWFydF9zdy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1hdWlfU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgaXMgaW50ZW5kcyBmb3IgVUFSVCBkcml2ZXIuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIFVBUlRfU1dfSAorI2RlZmluZSBVQVJUX1NXX0gKKworI2luY2x1ZGUgImRydl9mZWF0dXJlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIiAvL01TQkIgY2hhbmdlICNpbmNsdWRlICJzdGFja19jb25maWcuaCIKKyNpbmNsdWRlICJibWQuaCIKKyNpbmNsdWRlICJkcnZfY29tbS5oIgorI2luY2x1ZGUgImRjbC5oIgorCisgI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisgI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCisjaWYgMAorI2lmZGVmIF9fVUFSVDNfU1VQUE9SVF9fCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZWxzZSAvKl9fVUFSVDNfU1VQUE9SVF9fKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZiAgIC8qX19VQVJUM19TVVBQT1JUX18qLworI2VuZGlmCisjZGVmaW5lICBNQVhfVUFSVF9QT1JUX05VTQkJIDIKKyNkZWZpbmUgIE1BWF9VQVJUX1RVTk5FTF9OVU0JIDQKKworCit0eXBlZGVmIGVudW0geyAvL3RveSBhZGQgZm9yIHNpbmdsZSB0dW5uZWwgdmZpZm8uCisgIHVhcnQxX3J4X3R1bm5lbD0wLAorICB1YXJ0MV90eF90dW5uZWwsCisgIHVhcnQyX3J4X3R1bm5lbCwKKyAgdWFydDJfdHhfdHVubmVsLAorICB1YXJ0M19yeF90dW5uZWwsCisgIHVhcnQzX3R4X3R1bm5lbCwKKyAgdWFydF9udWxsX3R1bm5lbD05OQkvKiBhIGR1bW15IHR1bm5lbCBmb3IgdGhvc2Ugd2hvIGRvZXNuJ3QgdXNlIHBoeXNpY2FsIHBvcnQgKi8KK30gVUFSVF9UVU5ORUw7CisKKworLypVQVJUIEN1c3RvbWl6YXRpb24gKi8KK3R5cGVkZWYgc3RydWN0eworCWthbF91aW50OCoJcnhfYWRyczsKKwlrYWxfdWludDgqCXR4X2FkcnM7CQorCWthbF91aW50OCoJdHhpc3JfYWRyczsJCisJa2FsX3VpbnQxNglyeF9sZW47CisJa2FsX3VpbnQxNgl0eF9sZW47CQorCWthbF91aW50MTYJdHhpc3JfbGVuOwkKKwltb2R1bGVfdHlwZQlvd2VyaWQ7CQkvLyBvbmx5IHRoZSBzcGVjaWZpZWQgb3duZXIgY2FuIHVzZSBpdAorfVVBUlRfcmluZ19idWZmZXJfc3RydWN0OworCisjaWYgZGVmaW5lZChfX0RNQV9VQVJUX1ZGSUZPX1NJTkdMRV9UVU5ORUxfXykKK3R5cGVkZWYgc3RydWN0IHsgLy8gdG95IG1vZGlmeSBmb3IgVkZJRk8gc2luZ2xlIHR1bm5lbAorCVVBUlRfcmluZ19idWZmZXJfc3RydWN0IHJpbmdbTUFYX1VBUlRfUE9SVF9OVU1dOworCSNpZm5kZWYgX19VQVJUX1NVUFBPUlRfNl9WRklGT19DSEFOTkVMX18KKwlVQVJUX1RVTk5FTCAgICAgICAgICAgICAgIG5vdF9zdXBwb3J0X1ZGSUZPX1RVTk5FTDE7CisJVUFSVF9UVU5ORUwgICAgICAgICAgICAgICBub3Rfc3VwcG9ydF9WRklGT19UVU5ORUwyOworCSNlbmRpZgorfSBVQVJUX3JpbmdzX3N0cnVjdDsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCB7CisJVUFSVF9yaW5nX2J1ZmZlcl9zdHJ1Y3QgcmluZ1tNQVhfVUFSVF9QT1JUX05VTV07CisJa2FsX3VpbnQxNiAgICAgICAgICAgICAgIG5vdF9zdXBwb3J0X1ZGSUZPOworfSBVQVJUX3JpbmdzX3N0cnVjdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7ICAKKyAgIGNvbnN0IFVBUlRfcmluZ3Nfc3RydWN0ICogKCpVQVJUX0dldF9EYXRhKSh2b2lkKTsKK31VQVJUX2N1c3RvbWl6ZV9mdW5jdGlvbl9zdHJ1Y3Q7IAorCisKKy8qVUFSVCBjdXN0b21pemUqLworZXh0ZXJuIHZvaWQgdWFydF9jdXN0b21pemVfaW5pdCh2b2lkKTsKKy8qZm9yIFZGSUZPKi8KKworI2VuZGlmICAgLypVQVJUX1NXX0gqLworCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvd2R0X2h3X3B1YmxpYy5oIGIvbWN1L2ludGVyZmFjZS9kcml2ZXIvcGVyaXBoZXJhbC93ZHRfaHdfcHVibGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRmNGU1OAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvZHJpdmVyL3BlcmlwaGVyYWwvd2R0X2h3X3B1YmxpYy5oCkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgV0RUX1BVQkxJQ19ICisjZGVmaW5lIFdEVF9QVUJMSUNfSAorCisjaW5jbHVkZSAiZHJ2X2ZlYXR1cmVzX3dkdC5oIgorI2luY2x1ZGUgInJlZ19iYXNlLmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKworCitleHRlcm4gY29uc3Qga2FsX3VpbnQzMiBnX1dBVENIRE9HX1JFU1RBUlRfUkVHOworZXh0ZXJuIGNvbnN0IGthbF91aW50MzIgZ19XQVRDSERPR19SRVNUQVJUX1ZBTFVFOworZXh0ZXJuIGNvbnN0IGthbF91aW50MzIgZ19BQk5PUk1BTF9SU1RfUkVHOworZXh0ZXJuIGNvbnN0IGthbF91aW50MzIgZ19BQk5PUk1BTF9SU1RfVkFMOworCisvL1dEVF9SRVNJTlRFUlZBTCB3aWxsIGJlIDB4ZmZmKGRlZmF1bHQpIHdoZW4gdGhlIGZpcnN0IGJvb3R1cCwgdGhlbiBXRFRfUkVTSU5URVJWQUwgd2lsbCBiZSAweGZmYSB3aGVuIHdkdF9pbml0KCkKKy8vaWYgdGhlIHZhbHVlIGlzIDB4ZmZmIHdoZW4gYm9vdHVwLHdlIHdpbGwga293biB0aGlzIGlzIHRoZSBmaXJzdCBib290dXAgb3Igbm9ybWFsIHJlc2V0CisvL2lmIHRoZSB2YWx1ZSBpcyAwZmZhIHdoZW4gYm9vdHVwLHdlIHdpbGwga293biB0aGlzIGlzIGFibm9ybWFsIHJlc2V0CitleHRlcm4ga2FsX2Jvb2wgSXNfV0RUX0luaXQodm9pZCk7CisKK2V4dGVybiBrYWxfdWludDMyIEdldF9XQVRDSERPR19CQVNFKHZvaWQpOworCitleHRlcm4ga2FsX3VpbnQzMiBHZXRfV0FUQ0hET0dfUkVTVEFSVF9DTUQodm9pZCk7CisKKworI2VuZGlmCisKKwo=