ZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9nZW5lcmFsL1RWVF9jYWxsYmFjay5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2dlbmVyYWwvVFZUX2NhbGxiYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2YWNjYQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9nZW5lcmFsL1RWVF9jYWxsYmFjay5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX1RWVF9DQUxMQkFDS19ICisjZGVmaW5lIF9UVlRfQ0FMTEJBQ0tfSAorCisvL2V4dGVybiB2dF9jc3JfUV9zdHJ1Y3QgVlRfQ1NSX291dHB1dF9xdWV1ZTsKK2V4dGVybiB2b2lkIHZ0X2Nzcl9nZXRfdXBsaW5rX2RhdGFfaW5kKAorICAgICAgICBrYWxfdWludDE2IHJlcV9sZW4sCisgICAgICAgIGthbF91aW50OCAqKnBkdV9wdHIsCisgICAgICAgIGthbF91aW50MTYgKnBkdV9sZW4sCisgICAgICAgIGthbF91aW50MTYgKmZyYW1lX2luZGV4LAorICAgICAgICBrYWxfdWludDggdGlja19jb3VudCwKKyAgICAgICAga2FsX3VpbnQ4IHNpbV9pbmRleAorICAgICk7CisKK2V4dGVybiB2b2lkIHZ0X2Nzcl9wdXRfZG93bmxpbmtfZGF0YV9pbmQoa2FsX3VpbnQ4ICpwZHVfcHRyLCBrYWxfdWludDE2IHBkdV9sZW4sIGthbF91aW50OCBzaW1faW5kZXgpOworCitleHRlcm4gdm9pZCB2dF9jc3JfY29uc3VtZV91cGxpbmtfZGF0YV9pbmQoa2FsX3VpbnQxNiByZXFfbGVuKTsKKworI2VuZGlmIC8qIF9UVlRfQ0FMTEJBQ0tfSCAqLyAKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2dlbmVyYWwvY29kZWNfZGVmLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvZ2VuZXJhbC9jb2RlY19kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjE5ZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2dlbmVyYWwvY29kZWNfZGVmLmgKQEAgLTAsMCArMSw3NyBAQAorI2lmbmRlZiBfX0lNU19TRFBfQ09ERUNfREVGX0hfXworI2RlZmluZSBfX0lNU19TRFBfQ09ERUNfREVGX0hfXworCisKK3R5cGVkZWYgZW51bSAKK3sKKyAgICBWT0lQX0NPREVDX05PTkUgICAgID0gMCwKKyAgICBWT0lQX0NPREVDX0FNUiwKKyAgICBWT0lQX0NPREVDX0FNUl9XQiwKKyAgICBWT0lQX0NPREVDX0gyNjQsCisgICAgVk9JUF9URUxFUEhPTkVfRVZFTlQsCisgICAgVk9JUF9DT0RFQ19HNzI5LAorICAgIFZPSVBfQ09ERUNfUENNQSwKKyAgICBWT0lQX0NPREVDX1BDTVUsCisgICAgVk9JUF9DT0RFQ19HNzIzMSwKKyAgICBWT0lQX0NPREVDX0c3MjZfMTYsCisgICAgVk9JUF9DT0RFQ19HNzI2XzI0LAorICAgIFZPSVBfQ09ERUNfRzcyNl8zMiwKKyAgICBWT0lQX0NPREVDX0c3MjZfNDAsCisgICAgVk9JUF9DT0RFQ19UMTQwLAorICAgIFZPSVBfQ09ERUNfUkVELAorICAgIFZPSVBfQ09ERUNfQ04sCisgICAgVk9JUF9DT0RFQ19IMjY1LAorICAgIFZPSVBfQ09ERUNfRVZTLAorI2lmIDAgLy8gbm90IHN1cHBvcnQgaUxCQyAgICAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZiAvLyBub3Qgc3VwcG9ydCBpTEJDCit9IHZvaXBfY29kZWNfZW51bTsKKworCit0eXBlZGVmIGVudW0gZV92Y29kZWNfcHRfdHlwZQoreworICAgIFBUX0NPREVDX1BDTVUgPSAwLAorICAgIFBUX0NPREVDX1BDTUEgPSA4LAorICAgIFBUX0NPREVDX0NOID0gMTMsCisgICAgUFRfQ09ERUNfRzcyOSA9IDE4LAorICAgIFBUX0NPREVDX0c3MjMxID0gNCwKKyAgICBQVF9URUxFUEhPTkVfRVZFTlQgPSAxMDEsCisjaWYgMCAvLyBub3Qgc3VwcG9ydCBpTEJDICAgIAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmIC8vIG5vdCBzdXBwb3J0IGlMQkMgICAgCisgICAgUFRfQ09ERUNfRzcyNl8xNiA9IDEwNSwgLyogUjEgZGVmaW5pdGlvbiB0aGlzIGlzIDk2Ki8KKyAgICBQVF9DT0RFQ19HNzI2XzI0ID0gMTA2LAorICAgIFBUX0NPREVDX0c3MjZfMzIgPSAxMDcsCisgICAgUFRfQ09ERUNfRzcyNl80MCA9IDEwOCwKKworfSB2b2lwX2NvZGVjX3B0X3R5cGU7CisKKworLyoqCisgKiBAYnJpZWYgRGVmaW5lIHRoZSB0eXBlIGluIFNDX0FDQ1RfTUVESUFfRzcyM19SQVRFCisgKi8KK3R5cGVkZWYgZW51bSB2b2lwX2NvbmZfZzcyM18xX3JhdGV7CisgICAgY29kZWNfZzcyM18xXzVfM2s9MCwKKyAgICBjb2RlY19nNzIzXzFfNl8zaywKK31lX3ZvaXBfY29uZl9nNzIzXzFfcmF0ZTsKKworCisvKioKKyAqIEBicmllZiBEZWZpbmUgdGhlIHR5cGUgaW4gU0NfQUNDVF9NRURJQV9JTEJDX1JBVEUKKyAqLwordHlwZWRlZiBlbnVtIHZvaXBfY29uZl9pbGJjX3JhdGV7CisgICAgY29kZWNfaWxiY18yMG1zPTAsCisgICAgY29kZWNfaWxiY18zMG1zLAorfWVfdm9pcF9jb25mX2lsYmNfcmF0ZTsKKworCisvKioKKyAqIEBicmllZiBEZWZpbmUgdGhlIHR5cGUgaW4gU0NfQUNDVF9BRFZfRFRNRl9UWVBFCisgKi8KK3R5cGVkZWYgZW51bSB2b2lwX2NvbmZfZHRtZnsKKyAgICBkdG1mX3JmYzI4MzM9MCwKKyAgICBkdG1mX2luYmFuZD0xLAorfWVfdm9pcF9jb25mX2R0bWY7CisKKyAgICAgICAgICAgICAgICAKKyNlbmRpZiAvKiBfX0lNU19TRFBfQ09ERUNfREVGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2dlbmVyYWwvbDRjMnBwcF9zdHJ1Y3QuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9nZW5lcmFsL2w0YzJwcHBfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkwZDA4MgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9nZW5lcmFsL2w0YzJwcHBfc3RydWN0LmgKQEAgLTAsMCArMSwxODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogTDRDMlBQUF9TVFJVQ1QuSAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgY29tbW9uIHN0cnVjdCBvZiBUQ00gYW5kIFBQUC4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfTDRDMlBQUF9TVFJVQ1RfSAorI2RlZmluZSBfTDRDMlBQUF9TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKy8vI2luY2x1ZGUgImthbF9ub25fc3BlY2lmaWNfZ2VuZXJhbF90eXBlcy5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IHJlZl9jb3VudDsKKyAgICBrYWxfdWludDE2IG1zZ19sZW47CisgICAga2FsX3VpbnQ4IHNyY19pZDsKKyAgICBrYWxfdWludDggY29udGV4dF9pZDsKKyAgICBrYWxfdWludDggYXV0aF90eXBlOworICAgIGthbF91aW50OCBwZHBfdHlwZTsKKyAgICBrYWxfdWludDggcG9ydDsKK30gbDRjcHBwX2FjdGl2YXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggcmVmX2NvdW50OworICAgIGthbF91aW50MTYgbXNnX2xlbjsKKyAgICBrYWxfdWludDggY29udGV4dF9pZDsgCisgICAga2FsX3VpbnQ4IHNyY19pZDsKKyAgICBrYWxfdWludDggcG9ydDsKKyAgICAjaWZkZWYgX19MT0NBTF9ERUFDVElWQVRFX1BEUF9TVVBQT1JUX18KKyAgICBrYWxfYm9vbCBsb2NhbF9kZWFjdGl2YXRlX3BkcDsgLyogX19MT0NBTF9ERUFDVElWQVRFX1BEUF9TVVBQT1JUX18gKi8KKyAgICAjZW5kaWYgLy8gfiBfX0xPQ0FMX0RFQUNUSVZBVEVfUERQX1NVUFBPUlRfXworfSBsNGNwcHBfZGVhY3RpdmF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IHJlZl9jb3VudDsKKyAgICBrYWxfdWludDE2IG1zZ19sZW47CisgICAga2FsX3VpbnQ4IHVzZXJuYW1lWzMyXTsKKyAgICBrYWxfdWludDggcGFzc3dvcmRbMzJdOworICAgIGthbF91aW50OCBjc2RfbW9kX2lkOworICAgIGthbF91aW50OCBkZWZhdWx0X3ByaV9kbnNfYWRkcls0XTsgLyogX19QUFBfREVGQVVMVF9ETlNfU1VQUE9SVEVEX18gICovCisgICAga2FsX3VpbnQ4IGRlZmF1bHRfc2VjX2Ruc19hZGRyWzRdOyAvKiBfX1BQUF9ERUZBVUxUX0ROU19TVVBQT1JURURfXyAgKi8KK30gbDRjcHBwX2NzZF9hY3RpdmF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IHJlZl9jb3VudDsKKyAgICBrYWxfdWludDE2IG1zZ19sZW47ICAgIAorICAgIGthbF91aW50OCBkZWFjdF9jYXVzZTsKK30gbDRjcHBwX2NzZF9kZWFjdGl2YXRlX3JlcV9zdHJ1Y3Q7CisKKy8vbXRrMDE2MTZfMDgwOTEyCisvKiBfX0dQUlNfRElBTFVQX0VTQ0FQRV9BVE9fU1VQUE9SVF9fICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IHJlZl9jb3VudDsKKyAgICBrYWxfdWludDE2IG1zZ19sZW47ICAgIAorICAgIGthbF91aW50OCBwb3J0OworfSBsNGNwcHBfcmVzdW1lX3JlcV9zdHJ1Y3Q7CisvKiB+IF9fR1BSU19ESUFMVVBfRVNDQVBFX0FUT19TVVBQT1JUX18gKi8KKworLy8gUFBQIFR5cGUgUERQIERpYWx1cCBGZWF0dXJlCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IHJlZl9jb3VudDsKKyAgICBrYWxfdWludDE2IG1zZ19sZW47ICAgIAorICAgIGthbF91aW50OCBzcmNfaWQ7CisgICAga2FsX3VpbnQ4IGNvbnRleHRfaWQ7CisgICAga2FsX3VpbnQ4IHBvcnQ7Cit9IGw0Y3BwcF9wcHB0eXBlcGRwX3VhcnRfdHJhbnNmZXJfaW5kX3N0cnVjdDsKKworLy9fX0lQVjRWNl9fCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4ICByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiBtc2dfbGVuOyAgICAKKyAgICAvL01VU1QgYmUgdmFsaWQgYWxsIHRoZSB0aW1lIC0tCisgICAga2FsX3VpbnQ4ICBhY3RpdmF0ZV9wb3J0OyAgICAgLy9tdGswMjI4NSwgTUFVSV8wMzEyNzAyNSwgSVBWNFY2IGZhbGxiYWNrOiBjaWQyIHZzLiBwc19kaWFsdXBfcG9ydFtdICAgIAorICAgIGthbF9ib29sICAgYWN0aXZhdGVfbmV4dF9wZHA7CisgICAgLy8tLSBNVVNUIGJlIHZhbGlkIGFsbCB0aGUgdGltZQorCisgICAgLy9PTkxZIHZhbGlkIHdoZW4gYWN0aXZhdGVfbmV4dF9wZHA9PUtBTF9UUlVFIC0tCisgICAga2FsX3VpbnQ4ICBhY3RpdmF0ZV9wZHBfY2lkOworICAgIGthbF91aW50OCAgYWN0aXZhdGVfcGRwX3R5cGU7CisgICAgLy8tLSBPTkxZIHZhbGlkIHdoZW4gYWN0aXZhdGVfbmV4dF9wZHA9PUtBTF9UUlVFICAgIAorfSBsNGNwcHBfaXB2NHY2X2ZhbGxiYWNrX3JzcF9zdHJ1Y3Q7CisjZW5kaWYgCisKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2dlbmVyYWwvbW1pX2NvbW1vbl9lbnVtLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvZ2VuZXJhbC9tbWlfY29tbW9uX2VudW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjI4YWU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2dlbmVyYWwvbW1pX2NvbW1vbl9lbnVtLmgKQEAgLTAsMCArMSwyODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisgKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyAqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyAqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDEKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBtbWlfY29tbW9uX2VudW0uaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgbW1pIGNvbW1vbiBlbnVtCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAJCQkJSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfTU1JX0NPTU1PTl9FTlVNX0gKKyNkZWZpbmUgX01NSV9DT01NT05fRU5VTV9ICisKK3R5cGVkZWYgZW51bQoreworICAgQ0JTMF9HRVJNQU4gPSAwLAorICAgQ0JTMF9FTkdMSVNILAorICAgQ0JTMF9JVEFMSUFOLAorICAgQ0JTMF9GUkVOQ0gsCisgICBDQlMwX1NQQU5JU0gsCisgICBDQlMwX0RVVENILAorICAgQ0JTMF9TV0VESVNILAorICAgQ0JTMF9EQU5JU0gsCisgICBDQlMwX1BPUlRVR1VFU0UsCisgICBDQlMwX0ZJTk5JU0gsCisgICBDQlMwX05PUldFR0lBTiwKKyAgIENCUzBfR1JFRUssCisgICBDQlMwX1RVUktJU0gsCisgICBDQlMwX0hVTkdBUklBTiwKKyAgIENCUzBfUE9MSVNILAorICAgQ0JTMF9MQU5HX1VOU1BFQ0lGSUVELAorCisgICBDQlMxX0NaRUNIID0gMTYsCisgICBDQlMxX0hFQlJFVywKKyAgIENCUzFfQVJBQklDLAorICAgQ0JTMV9SVVNTSUFOLAorCisKKyAgIENCUzJfQUEsIC8vIEFGQVIsIDIwCisgICBDQlMyX0FCLCAvLyBBQktIQVpJQU4KKyAgIENCUzJfQUYsIC8vIEFGUklLQUFOUworICAgQ0JTMl9BTSwgLy8gQU1IQVJJQworICAgLy9DQlMyX0FSLCAvLyBBUkFCSUMKKyAgIENCUzJfQVMsIC8vIEFTU0FNRVNFCisgICBDQlMyX0FZLCAvLyBBWU1BUkEKKyAgIENCUzJfQVosIC8vIEFaRVJCQUlKQU5JCisKKyAgIENCUzJfQkEsIC8vIEJBU0hLSVIKKyAgIENCUzJfQkUsIC8vIEJZRUxPUlVTU0lBTgorICAgQ0JTMl9CRywgLy8gQlVMR0FSSUFOLCAzMAorICAgQ0JTMl9CSCwgLy8gQklIQVJJCisgICBDQlMyX0JJLCAvLyBCSVNMQU1BCisgICBDQlMyX0JOLCAvLyBCRU5HQUxJOyBCQU5HTEEKKyAgIENCUzJfQk8sIC8vIFRJQkVUQU4KKyAgIENCUzJfQlIsIC8vIEJSRVRPTgorCisgICBDQlMyX0NBLCAvLyBDQVRBTEFOCisgICBDQlMyX0NPLCAvLyBDT1JTSUNBTgorICAgLy9DQlMyX0NTLCAvLyBDWkVDSAorICAgQ0JTMl9DWSwgLy8gV0VMU0gKKworICAgLy9DQlMyX0RBLCAvLyBEQU5JU0gsIDQwCisgICAvL0NCUzJfREUsIC8vIEdFUk1BTgorICAgQ0JTMl9EWiwgLy8gQkhVVEFOSQorCisgICAvL0NCUzJfRUwsIC8vIEdSRUVLCisgICAvL0NCUzJfRU4sIC8vIEVOR0xJU0gKKyAgIENCUzJfRU8sIC8vIEVTUEVSQU5UTworICAgLy9DQlMyX0VTLCAvLyBTUEFOSVNICisgICBDQlMyX0VULCAvLyBFU1RPTklBTgorICAgQ0JTMl9FVSwgLy8gQkFTUVVFCisKKyAgIENCUzJfRkEsIC8vIFBFUlNJQU4KKyAgIC8vQ0JTMl9GSSwgLy8gRklOTklTSCwgNTAKKyAgIENCUzJfRkosIC8vIEZJSkkKKyAgIENCUzJfRk8sIC8vIEZBUk9FU0UKKyAgIC8vQ0JTMl9GUiwgLy8gRlJFTkNICisgICBDQlMyX0ZZLCAvLyBGUklTSUFOCisKKyAgIENCUzJfR0EsIC8vIElSSVNICisgICBDQlMyX0dELCAvLyBTQ09UUyBHQUVMSUMKKyAgIENCUzJfR0wsIC8vIEdBTElDSUFOCisgICBDQlMyX0dOLCAvLyBHVUFSQU5JCisgICBDQlMyX0dVLCAvLyBHVUpBUkFUSQorCisgICBDQlMyX0hBLCAvLyBIQVVTQSwgNjAKKyAgIC8vQ0JTMl9IRSwgLy8gSEVCUkVXIChGT1JNRVJMWSBJVykKKyAgIENCUzJfSEksIC8vIEhJTkRJCisgICBDQlMyX0hSLCAvLyBDUk9BVElBTgorICAgLy9DQlMyX0hVLCAvLyBIVU5HQVJJQU4KKyAgIENCUzJfSFksIC8vIEFSTUVOSUFOCisKKyAgIENCUzJfSUEsIC8vIElOVEVSTElOR1VBCisgICBDQlMyX0lELCAvLyBJTkRPTkVTSUFOIChGT1JNRVJMWSBJTikKKyAgIENCUzJfSUUsIC8vIElOVEVSTElOR1VFCisgICBDQlMyX0lLLCAvLyBJTlVQSUFLCisgICBDQlMyX0lTLCAvLyBJQ0VMQU5ESUMsIDcwCisgICAvL0NCUzJfSVQsIC8vIElUQUxJQU4KKyAgIENCUzJfSVUsIC8vIElOVUtUSVRVVAorCisgICBDQlMyX0pBLCAvLyBKQVBBTkVTRQorICAgQ0JTMl9KVywgLy8gSkFWQU5FU0UKKworICAgQ0JTMl9LQSwgLy8gR0VPUkdJQU4KKyAgIENCUzJfS0ssIC8vIEtBWkFLSAorICAgQ0JTMl9LTCwgLy8gR1JFRU5MQU5ESUMKKyAgIENCUzJfS00sIC8vIENBTUJPRElBTgorICAgQ0JTMl9LTiwgLy8gS0FOTkFEQQorICAgQ0JTMl9LTywgLy8gS09SRUFOLCA4MAorICAgQ0JTMl9LUywgLy8gS0FTSE1JUkkKKyAgIENCUzJfS1UsIC8vIEtVUkRJU0gKKyAgIENCUzJfS1ksIC8vIEtJUkdISVoKKworICAgQ0JTMl9MQSwgLy8gTEFUSU4KKyAgIENCUzJfTE4sIC8vIExJTkdBTEEKKyAgIENCUzJfTE8sIC8vIExBT1RISUFOCisgICBDQlMyX0xULCAvLyBMSVRIVUFOSUFOCisgICBDQlMyX0xWLCAvLyBMQVRWSUFOLCBMRVRUSVNICisKKyAgIENCUzJfTUcsIC8vIE1BTEFHQVNZCisgICBDQlMyX01JLCAvLyBNQU9SSSwgOTAKKyAgIENCUzJfTUssIC8vIE1BQ0VET05JQU4KKyAgIENCUzJfTUwsIC8vIE1BTEFZQUxBTQorICAgQ0JTMl9NTiwgLy8gTU9OR09MSUFOCisgICBDQlMyX01PLCAvLyBNT0xEQVZJQU4KKyAgIENCUzJfTVIsIC8vIE1BUkFUSEkKKyAgIENCUzJfTVMsIC8vIE1BTEFZCisgICBDQlMyX01ULCAvLyBNQUxURVNFCisgICBDQlMyX01ZLCAvLyBCVVJNRVNFCisKKyAgIENCUzJfTkEsIC8vIE5BVVJVCisgICBDQlMyX05FLCAvLyBORVBBTEksIDEwMAorICAgLy9DQlMyX05MLCAvLyBEVVRDSAorICAgLy9DQlMyX05PLCAvLyBOT1JXRUdJQU4KKworICAgQ0JTMl9PQywgLy8gT0NDSVRBTgorICAgQ0JTMl9PTSwgLy8gKEFGQU4pIE9ST01PCisgICBDQlMyX09SLCAvLyBPUklZQQorCisgICBDQlMyX1BBLCAvLyBQVU5KQUJJCisgICAvL0NCUzJfUEwsIC8vIFBPTElTSAorICAgQ0JTMl9QUywgLy8gUEFTSFRPLCBQVVNIVE8KKyAgIC8vQ0JTMl9QVCwgLy8gUE9SVFVHVUVTRQorCisgICBDQlMyX1FVLCAvLyBRVUVDSFVBLCAxMTAKKworICAgQ0JTMl9STSwgLy8gUkhBRVRPLVJPTUFOQ0UKKyAgIENCUzJfUk4sIC8vIEtJUlVOREkKKyAgIENCUzJfUk8sIC8vIFJPTUFOSUFOCisgICAvL0NCUzJfUlUsIC8vIFJVU1NJQU4KKyAgIENCUzJfUlcsIC8vIEtJTllBUldBTkRBCisKKyAgIENCUzJfU0EsIC8vIFNBTlNLUklUCisgICBDQlMyX1NELCAvLyBTSU5ESEkKKyAgIENCUzJfU0csIC8vIFNBTkdITworICAgQ0JTMl9TSCwgLy8gU0VSQk8tQ1JPQVRJQU4KKyAgIENCUzJfU0ksIC8vIFNJTkhBTEVTRSwgMTIwCisgICBDQlMyX1NLLCAvLyBTTE9WQUsKKyAgIENCUzJfU0wsIC8vIFNMT1ZFTklBTgorICAgQ0JTMl9TTSwgLy8gU0FNT0FOCisgICBDQlMyX1NOLCAvLyBTSE9OQQorICAgQ0JTMl9TTywgLy8gU09NQUxJCisgICBDQlMyX1NRLCAvLyBBTEJBTklBTgorICAgQ0JTMl9TUiwgLy8gU0VSQklBTgorICAgQ0JTMl9TUywgLy8gU0lTV0FUSQorICAgQ0JTMl9TVCwgLy8gU0VTT1RITworICAgQ0JTMl9TVSwgLy8gU1VOREFORVNFLCAxMzAKKyAgIC8vQ0JTMl9TViwgLy8gU1dFRElTSAorICAgQ0JTMl9TVywgLy8gU1dBSElMSQorCisgICBDQlMyX1RBLCAvLyBUQU1JTAorICAgQ0JTMl9URSwgLy8gVEVMVUdVCisgICBDQlMyX1RHLCAvLyBUQUpJSworICAgQ0JTMl9USCwgLy8gVEhBSQorICAgQ0JTMl9USSwgLy8gVElHUklOWUEKKyAgIENCUzJfVEssIC8vIFRVUktNRU4KKyAgIENCUzJfVEwsIC8vIFRBR0FMT0cKKyAgIENCUzJfVE4sIC8vIFNFVFNXQU5BLCAxNDAKKyAgIENCUzJfVE8sIC8vIFRPTkdBCisgICAvL0NCUzJfVFIsIC8vIFRVUktJU0gKKyAgIENCUzJfVFMsIC8vIFRTT05HQQorICAgQ0JTMl9UVCwgLy8gVEFUQVIKKyAgIENCUzJfVFcsIC8vIFRXSQorCisgICBDQlMyX1VHLCAvLyBVSUdIVVIKKyAgIENCUzJfVUssIC8vIFVLUkFJTklBTgorICAgQ0JTMl9VUiwgLy8gVVJEVQorICAgQ0JTMl9VWiwgLy8gVVpCRUsKKworICAgQ0JTMl9WSSwgLy8gVklFVE5BTUVTRSwgMTUwCisgICBDQlMyX1ZPLCAvLyBWT0xBUFVLCisKKyAgIENCUzJfV08sIC8vIFdPTE9GCisKKyAgIENCUzJfWEgsIC8vIFhIT1NBCisKKyAgIENCUzJfWUksIC8vIFlJRERJU0ggKEZPUk1FUkxZIEpJKQorICAgQ0JTMl9ZTywgLy8gWU9SVUJBCisKKyAgIENCUzJfWkEsIC8vIFpIVUFORworICAgQ0JTMl9aSCwgLy8gQ0hJTkVTRQorICAgQ0JTMl9aVSwgLy8gWlVMVSwgMTU4CisgICBDQlNfSU5WQUxJRCA9IDI1NQorfSBtbWlfcGhuc2V0X2xhbmd1YWdlX2VudW07CisKKyNlbmRpZiAvKiBfTU1JX0NPTU1PTl9FTlVNX0ggKi8KKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2dlbmVyYWwvbjNzYW1fd3Rfc3RydWN0LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvZ2VuZXJhbC9uM3NhbV93dF9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzMzYzgwCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2dlbmVyYWwvbjNzYW1fd3Rfc3RydWN0LmgKQEAgLTAsMCArMSw2MiBAQAorI2lmbmRlZiBfX0lOQ19OM1NBTV9TVFJVQ1RfSAorI2RlZmluZSBfX0lOQ19OM1NBTV9TVFJVQ1RfSAorCisjaW5jbHVkZSAibmV0d29ya19kZXZfaW5mb19zdHJ1Y3QuaCIKKworI2RlZmluZSBOM1NBTV9XVF9CRUFSRVJfTElTVF9TSVpFIDE2CisKKy8vIE1TR19JRF9OM1NBTV9XVF9XSUZJX0ZJTFRFUl9BRERfUkVRICYgTVNHX0lEX04zU0FNX1dUX1dJRklfRklMVEVSX0RFTEVURV9SRVEsCit0eXBlZGVmIHN0cnVjdCBfbjNzYW1fd3Rfd2lmaV9maWx0ZXJfdXBkYXRlX3N0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIGthbF91aW50OCBwYXRoOyAgICAgLy8gV1RVTk5FTF9EQVRBX09WRVJfV0lGSSwgV1RVTk5FTF9EQVRBX09WRVJfQ0VMTFVMRVIKKyAgICBrYWxfdWludDggaXBfdHlwZTsgIC8vIFdUVU5ORUxfQUREUl9GQU1JTFlfSVBWNCwgV1RVTk5FTF9BRERSX0ZBTUlMWV9JUFY2CisgICAga2FsX3VpbnQ4IHBhZGRpbmdbMl07CisgICAga2FsX3VpbnQzMiBtYWluX2ZpbHRlcl9pZDsKKyAgICBrYWxfdWludDMyIGlwX2FkZHJbNF07Cit9IG4zc2FtX3d0X3dpZmlfZmlsdGVyX3VwZGF0ZV9zdHJ1Y3Q7CisKKy8vIE1TR19JRF9OM1NBTV9XVF9TQV9BRERfUkVRICYgTVNHX0lEX04zU0FNX1dUX1NBX01PRElGWV9SRVEKK3R5cGVkZWYgc3RydWN0IF9uM3NhbV93dF93aWZpX3NhX2FkZF9zdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICBrYWxfYm9vbCBkaXJfdWw7CisgICAga2FsX3VpbnQzMiBzYV9pZDsKKyAgICBud19kZXZpY2VfaWRfZW51bSBkZXZfaWQ7ICAgLy8gTldfREVWX1dMQU4gLCBOV19ERVZfREFUQV8xLDIsMyw0CisgICAga2FsX3VpbnQ4IHBzX2lkOworICAgIGthbF91aW50OCBiZWFyX2lkX251bTsKKyAgICBrYWxfdWludDggcGF0aDsgICAgIC8vIFdUVU5ORUxfREFUQV9PVkVSX1dJRkksIFdUVU5ORUxfREFUQV9PVkVSX0NFTExVTEVSCisgICAga2FsX3VpbnQ4IGlwX3R5cGU7ICAvLyBXVFVOTkVMX0FERFJfRkFNSUxZX0lQVjQsIFdUVU5ORUxfQUREUl9GQU1JTFlfSVBWNgorICAgIGthbF91aW50OCBiZWFyZXJfaWRbMTZdOworfSBuM3NhbV93dF93aWZpX3NhX2FkZF9zdHJ1Y3Q7CisKKy8vIE1TR19JRF9OM1NBTV9XVF9TQV9ERUxFVEVfUkVRCit0eXBlZGVmIHN0cnVjdCBfbjNzYW1fd3Rfd2lmaV9zYV9kZWxldGVfc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAga2FsX2Jvb2wgZGlyX3VsOworICAgIGthbF91aW50MzIgc2FfaWQ7CisgICAga2FsX3VpbnQ4IHBhdGg7ICAgICAvLyBXVFVOTkVMX0RBVEFfT1ZFUl9XSUZJLCBXVFVOTkVMX0RBVEFfT1ZFUl9DRUxMVUxFUgorICAgIGthbF91aW50OCBpcF90eXBlOyAgLy8gV1RVTk5FTF9BRERSX0ZBTUlMWV9JUFY0LCBXVFVOTkVMX0FERFJfRkFNSUxZX0lQVjYKKyAgICBrYWxfdWludDggcGFkZGluZ1syXTsKK30gbjNzYW1fd3Rfd2lmaV9zYV9kZWxldGVfc3RydWN0OworCisvLyBNU0dfSURfTjNTQU1fV1RfU0FfQUREX0NORiwgTVNHX0lEX04zU0FNX1dUX1NBX01PRElGWV9DTkYsICYgTVNHX0lEX04zU0FNX1dUX1NBX0RFTEVURV9DTkYKK3R5cGVkZWYgc3RydWN0IF9uM3NhbV93dF93aWZpX3NhX3JzcF9zdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICBrYWxfdWludDMyIHNhX2lkOworICAgIGthbF9ib29sIHJlc3VsdDsKK30gbjNzYW1fd3Rfd2lmaV9zYV9yc3Bfc3RydWN0OworCisvKiBGb3IgREhMIGxvZ2dpbmcgc3RydWN0ICovCit0eXBlZGVmIG4zc2FtX3d0X3dpZmlfZmlsdGVyX3VwZGF0ZV9zdHJ1Y3QgbjNzYW1fd3Rfd2lmaV9maWx0ZXJfYWRkX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIG4zc2FtX3d0X3dpZmlfZmlsdGVyX3VwZGF0ZV9zdHJ1Y3QgbjNzYW1fd3Rfd2lmaV9maWx0ZXJfZGVsZXRlX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIG4zc2FtX3d0X3dpZmlfc2FfYWRkX3N0cnVjdCBuM3NhbV93dF9zYV9hZGRfcmVxX3N0cnVjdDsKK3R5cGVkZWYgbjNzYW1fd3Rfd2lmaV9zYV9hZGRfc3RydWN0IG4zc2FtX3d0X3NhX21vZGlmeV9yZXFfc3RydWN0OwordHlwZWRlZiBuM3NhbV93dF93aWZpX3NhX2RlbGV0ZV9zdHJ1Y3QgbjNhc21fd3Rfc2FfZGVsZXRlX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIG4zc2FtX3d0X3dpZmlfc2FfcnNwX3N0cnVjdCBuM3NhbV93dF9zYV9hZGRfY25mX3N0cnVjdDsKK3R5cGVkZWYgbjNzYW1fd3Rfd2lmaV9zYV9yc3Bfc3RydWN0IG4zc2FtX3d0X3NhX21vZGlmeV9jbmZfc3RydWN0OwordHlwZWRlZiBuM3NhbV93dF93aWZpX3NhX3JzcF9zdHJ1Y3QgbjNzYW1fd3Rfc2FfZGVsZXRlX2NuZl9zdHJ1Y3Q7CisKKyNlbmRpZiAgLy8gX19JTkNfTjNTQU1fU1RSVUNUX0gKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9nZW5lcmFsL3RjbTJwcHBfc3RydWN0LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvZ2VuZXJhbC90Y20ycHBwX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMDE5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvZ2VuZXJhbC90Y20ycHBwX3N0cnVjdC5oCkBAIC0wLDAgKzEsMjQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqIFRDTTJQUFBfU1RSVUNULkgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGNvbW1vbiBzdHJ1Y3Qgb2YgVENNIGFuZCBQUFAuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9UQ00yUFBQX1NUUlVDVF9ICisjZGVmaW5lIF9UQ00yUFBQX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorLy8jaW5jbHVkZSAia2FsX25vbl9zcGVjaWZpY19nZW5lcmFsX3R5cGVzLmgiICAgIAorLy8jaW5jbHVkZSAibW1pX3NtX2VudW1zLmgiICAgIAorLy8jaW5jbHVkZSAidGNtMnNtX3N0cnVjdC5oIgorI2luY2x1ZGUgInBzX3B1YmxpY19lbnVtLmgiCisjaW5jbHVkZSAicHNfcHVibGljX3N0cnVjdC5oIgorCisvLyNpbmNsdWRlICJtbWlfbDNfZW51bXMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiBtc2dfbGVuOworICAgIGthbF91aW50OCBjb250ZXh0X2lkOworICAgIHBkcF9hZGRyX3R5cGVfZW51bSBwZHBfYWRkcl90eXBlOyAvKiBwZHBfYWRkcl90eXBlX2VudW0gKi8KKyAgICBrYWxfdWludDggcGRwX2FkZHJfbGVuOyAvKiBwZHAgYWRkcmVzcyBsZW5ndGgqLworICAgIGthbF91aW50OCBwZHBfYWRkcltNQVhJTVVNX1BPU1NJQkxFX0FERFJfTEVOXTsgLy8gQXJyYXkgc2l6ZSBpcyAyMDsgSWYgSVB2NHY2IGFkZHJlc3MgaXMgYXNzaWduZWQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwZHBfYWRkclswXX5bM10gaXMgSVB2NCBhZGRyZXNzLCBwZHBfYWRkcls0XX5bMTldIGlzIElQdjYKKyAgICBrYWxfdWludDggY29uZmlnX3Byb3RvY29sOworICAgIGthbF91aW50OCBjb25maWdfb3B0aW9uX2xlbjsgLyogY29uZmlnIG9wdGlvbiBsZW5ndGgqLworICAgIGNvbmZpZ19vcHRpb25fc3RydWN0IGNvbmZpZ19vcHRpb25bTUFYX05VTV9DT05GSUdfT1BUSU9OX1BBQ0tFVFNdOworICAgIGthbF91aW50OCBkbnNbNF07CisgICAga2FsX3VpbnQ4IHNyY19pZDsKKyAgICBrYWxfYm9vbCBwZHBfYWN0X2NhdXNlXzJfcHJlc2VudCA7IC8vIGlmIG5ldHdvcmsgaGFzIGNhdXNlXzIgdmFsdWUgaW4gQUNUSVZBVEVfUERQX0NPTlRFWFRfQUNDRVBUCisgICAgcHNfY2F1c2VfZW51bSBwZHBfYWN0X2NhdXNlXzIgOyAvLyBqdXN0IHJlbGF5IHRoZSBQRFAgYWNjZXB0IGNhdXNlXzIgdmFsdWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVhbmluZ2Z1bCBwb3NzaWJsZSB2YWx1ZXMgYXJlOiBQRFBfVFlQRV9JUFY0X09OTFlfQUxMT1dFRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBEUF9UWVBFX0lQVjZfT05MWV9BTExPV0VELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lOR0xFX0FERFJfQkVBUkVSU19PTkxZX0FMTE9XRUQKK30gbW1pX2V4dF9wZHBfYWN0aXZhdGVfYWNrX3JzcF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggcmVmX2NvdW50OworICAgIGthbF91aW50MTYgbXNnX2xlbjsKKyAgICBrYWxfdWludDggY29udGV4dF9pZDsKKyAgICBrYWxfdWludDggY29uZmlnX3Byb3RvY29sOworICAgIGthbF91aW50OCBjb25maWdfb3B0aW9uX2xlbjsgLyogY29uZmlnIG9wdGlvbiBsZW5ndGgqLworICAgIGNvbmZpZ19vcHRpb25fc3RydWN0IGNvbmZpZ19vcHRpb25bTUFYX05VTV9DT05GSUdfT1BUSU9OX1BBQ0tFVFNdOworICAgIGthbF91aW50OCBzcmNfaWQ7CisgICAga2FsX2Jvb2wgaXNfcmVqZWN0ZWRfYnlfbnc7IC8vIGlmIHRoaXMgUERQIGlzIHJlamVjdGVkIGJ5IE5XIHVzaW5nIFNNIHBlZXIgbXNnLCBLQUxfVFJVRSwgZWxzZSwgS0FMX0ZBTFNFCisgICAga2FsX2Jvb2wgcGRwX2FjdF9jYXVzZV9wcmVzZW50IDsgLy8gaWYgbmV0d29yayBoYXMgY2F1c2VfMiB2YWx1ZSBpbiBwcmV2aW91cyBBQ1RJVkFURV9QRFBfQ09OVEVYVF9BQ0NFUFQKKyAgICBwc19jYXVzZV9lbnVtIHBkcF9hY3RfY2F1c2UgOyAvLyB0aGUgcHJldmlvdXMgUERQIGFjY2VwdCBjYXVzZV8yIHZhbHVlLCBleDogUERQX1RZUEVfSVBWNF9PTkxZX0FMTE9XRUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUERQX1RZUEVfSVBWNl9PTkxZX0FMTE9XRUQsIFNJTkdMRV9BRERSX0JFQVJFUlNfT05MWV9BTExPV0VECisgICAgcHNfY2F1c2VfZW51bSBjYXVzZTsgLy8gKHBzX2NhdXNlX2VudW0pLCB0aGlzIGlzIHVzZWQgYnkgUkFUX1RDTSB3aGVuIHZhbHVlID09IFJBVF9UQ01fUkVUUllfTkVFREVEX0FGVEVSX0lSQVQKK30gbW1pX2V4dF9wZHBfYWN0aXZhdGVfcmVqX3JzcF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggcmVmX2NvdW50OworICAgIGthbF91aW50MTYgbXNnX2xlbjsKKyAgICBrYWxfdWludDggY29udGV4dF9pZDsKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGw0Y19yZXN1bHRfZW51bSByZXN1bHQ7IC8vIGRlYWN0aXZhdGUgc3VjY2VzcyBvciBmYWlsCisgICAgcHNfY2F1c2VfZW51bSBjYXVzZTsgLy8gKHBzX2NhdXNlX2VudW0pLCB0aGlzIGlzIHVzZWQgYnkgUkFUX1RDTSB3aGVuIHZhbHVlID09IFJBVF9UQ01fUkVUUllfTkVFREVEX0FGVEVSX0lSQVQKK30gbW1pX2V4dF9wZHBfZGVhY3RpdmF0ZV9hY2tfcnNwX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiBtc2dfbGVuOworICAgIGthbF91aW50OCBjb250ZXh0X2lkOworfSBtbWlfZXh0X3BkcF9kZWFjdGl2YXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggcmVmX2NvdW50OworICAgIGthbF91aW50MTYgbXNnX2xlbjsKKyAgICBrYWxfdWludDggY29udGV4dF9pZDsKKyAgICBrYWxfdWludDggZGxfcG9vbF9pZDsKK30gbW1pX2V4dF9kYXRhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggcmVmX2NvdW50OworICAgIGthbF91aW50MTYgbXNnX2xlbjsKKyAgICBrYWxfdWludDggY29udGV4dF9pZDsKKyAgICBwZHBfYWRkcl90eXBlX2VudW0gcGRwX2FkZHJfdHlwZTsKKyAgICBrYWxfdWludDggcGRwX2FkZHJfbGVuOworICAgIGthbF91aW50OCBwZHBfYWRkclsxNl07Cit9IG1taV9leHRfdXBkYXRlX3BkcF9hZGRyX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggcmVmX2NvdW50OworICAgIGthbF91aW50MTYgbXNnX2xlbjsKKyAgICBrYWxfdWludDggY29udGV4dF9pZDsgLyogZm9yIF9fQVBQX1NFQ09OREFSWV9QRFBfU1VQUE9SVF9fICovCisgICAga2FsX3VpbnQ4IHByb2ZpbGVfaWQ7Cit9IG1taV9kYXRhX3JlcV9zdHJ1Y3Q7CisKKy8vIFBQUCBUeXBlIFBEUCBEaWFsdXAgRmVhdHVyZQordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiBtc2dfbGVuOworICAgIGthbF91aW50OCBzZXJpYWxfbnVtYmVyOyAvLyBmb3IgbWF0Y2hpbmcgcmVxdWVzdCBhbmQgY29uZmlybQorfSBtbWlfZXh0X3BkcF9zZXRfaXBfYW5kX2Ruc19pbmZvX2NuZl9zdHJ1Y3Q7CisKKy8vbXRrMDQxMjEKKy8qIFBQUCBEaWFsLXVwICovCit0eXBlZGVmIHN0cnVjdCB7CisJa2FsX3VpbnQ4IHJlZl9jb3VudDsKKwlrYWxfdWludDE2IG1zZ19sZW47CisJa2FsX3VpbnQ4IHNyY19pZDsKKwlrYWxfdWludDggY29udGV4dF9pZDsKKwlrYWxfdWludDggcmVzdWx0OworCXBzX2NhdXNlX2VudW0gZXJyb3JfY2F1c2U7Cit9IHBwcHRjbV9lbnRlcl9kYXRhX21vZGVfY25mX3N0cnVjdDsKKwordHlwZWRlZiBtbWlfZXh0X3BkcF9hY3RpdmF0ZV9hY2tfcnNwX3N0cnVjdCB0YWZfZXh0X3BkcF9hY3RpdmF0ZV9hY2tfcnNwX3N0cnVjdDsKK3R5cGVkZWYgbW1pX2V4dF9wZHBfYWN0aXZhdGVfcmVqX3JzcF9zdHJ1Y3QgdGFmX2V4dF9wZHBfYWN0aXZhdGVfcmVqX3JzcF9zdHJ1Y3Q7Cit0eXBlZGVmIG1taV9leHRfcGRwX2RlYWN0aXZhdGVfYWNrX3JzcF9zdHJ1Y3QgdGFmX2V4dF9wZHBfZGVhY3RpdmF0ZV9hY2tfcnNwX3N0cnVjdDsKK3R5cGVkZWYgbW1pX2V4dF9wZHBfZGVhY3RpdmF0ZV9yZXFfc3RydWN0IHRhZl9leHRfcGRwX2RlYWN0aXZhdGVfcmVxX3N0cnVjdDsKK3R5cGVkZWYgbW1pX2V4dF9kYXRhX3JlcV9zdHJ1Y3QgdGFmX2RhdGFfcmVxX3N0cnVjdDsKK3R5cGVkZWYgbW1pX2RhdGFfcmVxX3N0cnVjdCB0Y3BpcF90Y21fZGF0YV9pbmRfc3RydWN0OwordHlwZWRlZiBtbWlfZXh0X3VwZGF0ZV9wZHBfYWRkcl9yZXFfc3RydWN0IHRhZl9leHRfdXBkYXRlX3BkcF9hZGRyX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIG1taV9leHRfcGRwX3NldF9pcF9hbmRfZG5zX2luZm9fY25mX3N0cnVjdCB0YWZfZXh0X3BkcF9zZXRfaXBfYW5kX2Ruc19pbmZvX2NuZl9zdHJ1Y3Q7CisKKy8vbXRrMDQxMjEKKy8qIFBQUCBEaWFsLXVwICovCit0eXBlZGVmIHBwcHRjbV9lbnRlcl9kYXRhX21vZGVfY25mX3N0cnVjdCB0YWZfZXh0X2VudGVyX2RhdGFfbW9kZV9jbmZfc3RydWN0OworCisjZW5kaWYgCisKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2dlbmVyYWwvdWFydF9zaW1fc3RydWN0LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvZ2VuZXJhbC91YXJ0X3NpbV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzU4NTdiCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2dlbmVyYWwvdWFydF9zaW1fc3RydWN0LmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorICogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisgKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisgKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDAxCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgdWFydF9zaW1fc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFVBUlQgc2ltdWxhdGlvbiBmb3IgdW5pdHRlc3QgU0FQIHN0cnVjdHVyZQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9VQVJUX1NJTV9TVFJVQ1RfSAorI2RlZmluZSBfVUFSVF9TSU1fU1RSVUNUX0gKKwordHlwZWRlZiBzdHJ1Y3QgCit7CitMT0NBTF9QQVJBX0hEUgorIFVBUlRfUE9SVCBwb3J0OworIG1vZHVsZV90eXBlIG93bmVyOworfXVhcnRfcHV0Ynl0ZXNfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBVQVJUX1BPUlQgcG9ydDsKKyAgICBrYWxfYm9vbCAgc2VuZFJlYWR5VG9SZWFkOworfXVhcnRfZGF0YV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgICBVQVJUX1BPUlQgcG9ydDsKKyAgICAgbW9kdWxlX3R5cGUgb3duZXI7CisgICAgIGthbF9ib29sICAgICAgaXNfV3JpdGVTdXNwZW5kOworICAgICBrYWxfdWludDE2ICAgbWF4V3JpdGVMZW5ndGg7Cit9dWFydF9zZXRfY29uZmlnX2luZF9zdHJ1Y3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2dlbmVyYWwvdXBzX3N0cnVjdC5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2dlbmVyYWwvdXBzX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NDAwOGUKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvZ2VuZXJhbC91cHNfc3RydWN0LmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICB1cHNfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFVQU19TVFJVQ1RfSAorI2RlZmluZSBVUFNfU1RSVUNUX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCisjaW5jbHVkZSAicHNfcHVibGljX3Vwc19lbnVtLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vTVNHX0lEX1VQU19CVVNZX01PREVfSU5ECisKKy8vTVNHX0lEX1VQU19VVF9VQVJUX0RBVEFfSU5ECit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKwlrYWxfdWludDggaW5kZXg7CisJa2FsX3VpbnQ4IHN0cmluZ1sxMjhdOworfSB1cHNfdXRfdWFydF9kYXRhX2luZF9zdHJ1Y3Q7CisKKy8vTVNHX0lEX1VQU19VVF9VQVJUX0RBVEFfUkVRCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKwlrYWxfdWludDE2IHBvcnQ7Cit9IHVwc191dF91YXJ0X2RhdGFfcmVxX3N0cnVjdDsKKworLy8gTVNHX0lEX1VQU19GTENfREFUQV9SRVNVTUVfSU5ECit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcG9vbF9pZDsKK30gdXBzX2ZsY19kYXRhX3Jlc3VtZV9pbmRfc3RydWN0OworCisvLyBNU0dfSURfVVBTX0ZMQ19EQVRBX1NVU1BFTkRfSU5ECit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcG9vbF9pZDsKK30gdXBzX2ZsY19kYXRhX3N1c3BlbmRfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNyY19pZDsKKyAgICBrYWxfdWludDggcG9ydDsKKyAgICBrYWxfdWludDggY29udGV4dF9pZDsKK30gbDRjdXBzX3BvcnRfYWN0aXZhdGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNyY19pZDsKKyAgICBrYWxfdWludDggcG9ydDsKKyAgICBrYWxfdWludDggY29udGV4dF9pZDsKKyAgICBrYWxfYm9vbCByZXN1bHQ7Cit9IGw0Y3Vwc19wb3J0X2FjdGl2YXRlX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBwb3J0OworICAgIGthbF91aW50OCBjb250ZXh0X2lkOworfSBsNGN1cHNfcG9ydF9kZWFjdGl2YXRlX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIG1iaW1fdGVybWluYXRlX2VudW0gdHlwZTsKKyAgICBrYWxfdWludDMyIHRpZDsKK30gbWJpbV9jbG9zZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBtYmltX3Rlcm1pbmF0ZV9lbnVtIHR5cGU7CisgICAga2FsX3VpbnQzMiB0aWQ7Cit9IG1iaW1fY2xvc2VfY25mX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2dlbmVyYWwvdnVhcnRfc3RydWN0LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvZ2VuZXJhbC92dWFydF9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTUwMTgwCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2dlbmVyYWwvdnVhcnRfc3RydWN0LmgKQEAgLTAsMCArMSwyMyBAQAordHlwZWRlZiBzdHJ1Y3QgCit7CitMT0NBTF9QQVJBX0hEUgorIFVBUlRfUE9SVCBwb3J0OworIG1vZHVsZV90eXBlIG93bmVyOworfXVhcnRfcHV0Ynl0ZXNfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBVQVJUX1BPUlQgcG9ydDsKKyAgICBrYWxfYm9vbCAgc2VuZFJlYWR5VG9SZWFkOworfXVhcnRfZ2V0Ynl0ZXNfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICAgVUFSVF9QT1JUIHBvcnQ7CisgICAgIG1vZHVsZV90eXBlIG93bmVyOworICAgICBrYWxfYm9vbCAgICAgIGlzX1dyaXRlU3VzcGVuZDsKKyAgICAga2FsX3VpbnQxNiAgIG1heFdyaXRlTGVuZ3RoOworfXVhcnRfc2V0X2NvbmZpZ19pbmRfc3RydWN0OworCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvZ2VuZXJhbC93dHVubmVsX2FwaS5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2dlbmVyYWwvd3R1bm5lbF9hcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDQ2ZTZlCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2dlbmVyYWwvd3R1bm5lbF9hcGkuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9XVFVOTkVMX0FQSV9ICisjZGVmaW5lIF9XVFVOTkVMX0FQSV9ICisKKyNpbmNsdWRlICJ1cGNtX2RpZC5oIgorI2luY2x1ZGUgInFtdV9ibS5oIgorI2luY2x1ZGUgInFtdV9ibV91dGlsLmgiCisKK3R5cGVkZWYgZW51bSB7CisgICAgV1RVTk5FTF9BRERSX0ZBTUlMWV9JUFY0ICAgID0gICAwLAorICAgIFdUVU5ORUxfQUREUl9GQU1JTFlfSVBWNiAgICA9ICAgMQorfSB3dHVubmVsX2FkZHJfZmFtaWx5X2U7CisKK3R5cGVkZWYgZW51bSB7CisgICAgV1RVTk5FTF9EQVRBX09WRVJfV0lGSSAgICAgICAgICA9ICAgMCwKKyAgICBXVFVOTkVMX0RBVEFfT1ZFUl9DRUxMVUxFUiAgICAgID0gICAxCit9IHd0dW5uZWxfZGF0YV9vdmVyX3JhdF9lOworCitrYWxfYm9vbCB3dHVubmVsX3VwcF9kbF9yZWdfY2JrKHZvaWQgKCpkbF9jYWxsYmFjaykoa2FsX3VpbnQ4LCB1cGNtX2RpZCosIHVwY21fZGlkKiwga2FsX3VpbnQ4KSk7CitrYWxfYm9vbCB3dHVubmVsX3VwcF91bF9zZW5kKGthbF91aW50OCBiZWFyZXJfaWQsIHFibV9ncGQqIHBfaGVhZCwgcWJtX2dwZCogcF90YWlsLCBrYWxfdWludDggcHJvdG9jb2xfaWR4KTsKKworI2VuZGlmIC8vIF9XVFVOTkVMX0FQSV9ICmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2FvbWdyX2VudW1zLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2FvbWdyX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgyNGQwYwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvYW9tZ3JfZW51bXMuaApAQCAtMCwwICsxLDc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGFvbWdyX2VudW1zLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgVEFUQUtBCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgQU9NR1IgcHVibGljIGVudW1lcmF0aW9uIGRlZmluaXRpb24uCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fSU5DX0FPTUdSX0VOVU1TX0gKKyNkZWZpbmUgX19JTkNfQU9NR1JfRU5VTVNfSAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGF0YSBzdHJ1Y3R1cmUgZGVmaW50aW9uLgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBBUE1PRF9ESENQICAgICAgICAgICAgICAweDA0MDIgIC8qIEFQIHNpZGUsIERIQ1AgbW9kdWxlIElEICovCisjZGVmaW5lIElQQ19ORVRJRl9JRF9DQ01OSV8yICAgIDEgICAgICAgLyogQ0NNTkkgbmV0d29yayBpbnRlcmZhY2UgSUQgKi8KKworCisKKyNlbmRpZiAvKiBfX0lOQ19BT01HUl9FTlVNU19IICovCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2FvbWdyX3N0cnVjdC5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9hb21ncl9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTllOWI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9hb21ncl9zdHJ1Y3QuaApAQCAtMCwwICsxLDgzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGFvbWdyX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIFRBVEFLQQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIEFPTUdSIElMTSBzdHJ1Y3R1cmUgYW5kIGludGVyZmFjZSBkZWZpbml0aW9uLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0lOQ19BT01HUl9TVFJVQ1RfSAorI2RlZmluZSBfX0lOQ19BT01HUl9TVFJVQ1RfSAorCisjaW5jbHVkZSAiaGlmX2lvci5oIgorI2luY2x1ZGUgImhpZl9td19tc2dpZC5oIgorI2luY2x1ZGUgImlwY19zdHJ1Y3QuaCIKKworLyoKKyAqIExvY2FsIHBhcmFtZXRlciBzdHJ1Y3R1cmUgZm9yIE1TR19JRF9BT01HUl9MSU5LX0RPV05fSU5ECisgKi8KK3R5cGVkZWYgc3RydWN0IF9hb21ncl9pcGNfbnRmeV90IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGlwY19udGZ5X3BhcmFtX3QgaXBjX250ZnlfcGFyYTsKK30gYW9tZ3JfaXBjX250ZnlfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERITCBsb2dnaW5nIHN0cnVjdHVyZQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgYW9tZ3JfaXBjX250ZnlfdCBhb21ncl9saW5rX2Rvd25faW5kX3N0cnVjdDsgICAgLyogTVNHX0lEX0FPTUdSX0xJTktfRE9XTl9JTkQgKi8KKworI2VuZGlmIC8qIF9fSU5DX0FPTUdSX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2NjY2lfdHR5X2lmLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2NjY2lfdHR5X2lmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc3OTdmMAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvY2NjaV90dHlfaWYuaApAQCAtMCwwICsxLDE5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEyCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGNjY2lfdHR5X2lmLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgVU1PTFlBCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgTW92ZSBlbnVtL3N0cnVjdCB0byBpbnRlcmZhY2UgZm9sZGVyCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAkTG9nJAorICoKKyAqIDAxIDI1IDIwMjEgYWRlbC5saWFvCisgKiBbTU9MWTAwNjA3OTI0XSBbTm9raWFdW09EVV1bTW9kdWxlIFN0YXJ0dXAgYmxvY2tpbmddIG1pcGNfaW5pdCBzcGVuZCAzMHMKKyAqIAkKKyAqIAlhZGQgbWlwYyAxMC0xNCBpbnRlcmZhY2UuCisgKgorICogMTIgMTQgMjAyMCBhZGVsLmxpYW8KKyAqIFtNT0xZMDA2MDU3NzZdIHN1cHBvcnQgTUJJTV9DSURfRFNTX0NPTk5FQ1QKKyAqIAkKKyAqIAlhZGQgRFNTIGNoYW5uZWxzLgorICoKKyAqIDA5IDE4IDIwMjAgbGktY2hlbmcudHNhaQorICogW01PTFkwMDU2OTY0N10gW01QNy5QUkVDSEVDS0lOLkRFVl1bQ29kZSBzeW5jXSBzeW5jIGNvZGUgZnJvbSBUNzAwCisgKiBbUjMuTVBdW09BXVtDQ0NJXWNvZGUgc3luYyBmcm9tIFQ3MDAKKyAqCisgKiAwOSAxNSAyMDIwIGxpLWNoZW5nLnRzYWkKKyAqIFtNT0xZMDA1Njk2NDddIFtNUDcuUFJFQ0hFQ0tJTi5ERVZdW0NvZGUgc3luY10gc3luYyBjb2RlIGZyb20gVDcwMAorICogW01QNy5QUkVDSEVDS0lOLkRFVl1bT0FdW0NDQ0ldY29kZSBzeW5jIGZyb20gVDcwMAorICoKKyAqIDA4IDA0IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTU0NTM0XSBbQ29sZ2luXVtDb2RlIHN5bmNdIHN5bmMgY29kZSBmcm9tIE1UNjg4MC5NUAorICogW1Q3MDBdW09BXSBhZGQgZXBkZyBwb3J0cworICoKKyAqIDA4IDA0IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTU0NTM0XSBbQ29sZ2luXVtDb2RlIHN5bmNdIHN5bmMgY29kZSBmcm9tIE1UNjg4MC5NUAorICogW1Q3MDBdW09BXVtDQ0NJXSBzeW5jIGZyb20gTVQ2ODgwCisgKgorICogMDcgMDcgMjAyMCBhY3Rvcnkub3UKKyAqIFtNT0xZMDA1NDMxODZdIFtDb2xnaW5dIGNvZGUgc3luYyB0byBOUjE1LlIzLk1UNjg4MC5NUAorICogW1IzLk1UNjg4MC5NUF1bT0FdW0NDQ0ldIHN5bmMgZnJvbSBDT0xHSU4uU0IuU01ULkRFVgorICoKKyAqIDA1IDE5IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTI1NTk5XSBjb2RlIHN5bmMgZm9yIENvbGdpbgorICogW05SMTUuUjMuQ09MR0lOLlNCLlNNVC5ERVZdW09BXVtDQ0NJXSBjb2RlIHN5bmMgZnJvbSAxOU5PVgorICoKKyAqIDA0IDE0IDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTEwNjgxXSBbQ29sZ2luXSBhZGQgTUQgbWV0YSBwb3J0CisgKiBbMTlOT1ZdW09BXSBhZGQgbWV0YSBlYXAgcG9ydAorICoKKyAqIDAzIDIzIDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTAyODU4XSBbR2VuOTddW0dlbjk4XSBtZXJnZSBjY2NpIGNoYW5uZWwgaWQvcnVudGltZSBkYXRhIGlkCisgKiBbMTlOT1ZdW09BXVtOQ0NDSURFVl0gc3luYyBUVFkvTkNDTU5JIHBvcnQgdGFibGUKKyAqCisgKiAwMiAyNiAyMDIwIGFjdG9yeS5vdQorICogW01PTFkwMDUwMjEwNl0gW0NDQ0ldIGFkZCBtYmltIHBvcnQKKyAqIFsxOU5PVi5ERVZdW09BXSBhZGQgTUJJTSBwb3J0CisgKgorICogMTIgMTggMjAxOSBhY3Rvcnkub3UKKyAqIFtNT0xZMDA0NjU3NDJdIFtHZW45N10gYWRkIEw1IGNoYW5uZWxzIGFuZCBjaGFuZ2UgQ0NJRiBTSE0gbGF5b3V0CisgKiBbMTlOT1YuREVWXVtPQV0gYWRkIEw1IGNoYW5uZWxzCisgKgorICogMTIgMDMgMjAxOSBhY3Rvcnkub3UKKyAqIFtNT0xZMDA0NTc1NzVdIKXTP3BhdGNooUen4kFMUFMwNDQxNTIyMKSkqro/qkeyvrTTqOxNVDY4ODWlraV4pFcKKyAqIFtWTU9MWV1bT0FdIGFkZCBtaXBpIHBvcnQgJiBzeXNtc2cKKyAqCisgKiAxMSAxMiAyMDE5IGFjdG9yeS5vdQorICogW01PTFkwMDQ1NzU3NV0gpdM/cGF0Y2ihR6fiQUxQUzA0NDE1MjIwpKSquj+qR7K+tNOo7E1UNjg4NaWtpXikVworICogWzEwMDEuREVWXVtPQV0gYWRkIG1pcGkgcG9ydCAmIFNZU01TRworICoKKyAqIDA3IDI1IDIwMTkgYWN0b3J5Lm91CisgKiBbTU9MWTAwNDIyNjQ5XSBbR2VuOTddW0VNQUNdW1BhdGNoIGJhY2sgZnJvbSBHZW45NV0gY2hhbmdlIHVhcnQvY2NjaSBuYW1lIGZvciBuZXR3b3JrIGxhdGVuY3kgb3B0aW1pemF0aW9uCisgKiBbVk1PTFldW09BXSBzeW5jIGNoYW5uZWwKKyAqCisgKiAwNiAyNSAyMDE5IGFjdG9yeS5vdQorICogW01PTFkwMDQxNTgzNF0goWlCaW5nb6FqU0NQut0/qPqzcT8/PworICogW1ZNT0xZXVtPQV0gYWRkICBuZXcgU0NQIGNoYW5uZWwgZm9yIENDIHN0YXRlCisgKgorICogMDUgMDcgMjAxOSBhY3Rvcnkub3UKKyAqIFtNT0xZMDA0MDQyMzldIFtWTU9MWV0gc3luYyBsYXRlc3QgY2hhbm5lbCBzZXR0aW5nIGZyb20gVU1PTFlFCisgKiBbVk1PTFldW09BXSBzeW5jIHR0eSBjaGFubmVsIGZyb20gVU1PTFlFCisgKgorICogMDcgMjQgMjAxOCBhY3Rvcnkub3UKKyAqIFtNT0xZMDAzNDE3OTBdIFtNVDYyOTVdIFVEQyBmZWF0dXJlIHBhdGNoIGJhY2sKKyAqIGFkZCBVREMgZmVhdHVyZSBJRCBhbmQgdHR5IGNoYW5uZWwgLyByZXBsYWNlIGNjY2kgc3BpbmxvY2sgd2l0aCBIV0lUQworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQ0NDSV9UVFlfSUZfSAorI2RlZmluZSBfQ0NDSV9UVFlfSUZfSAorCisvKiEKKyAqICBAYnJpZWYgQ0NDSV9UVFlfREVWX0NOVCBkZWZpbmVzIHRoZSB0b3RhbCBudW1iZXIgb2YgQ0NDSV9UVFkgZGV2aWNlcworICovCit0eXBlZGVmIGVudW0gX2NjY2l0dHlfZGV2aWNlX2lkIHsKKyAgICBDQ0NJX1RUWV9ERVZfTUlOICAgICAgICAgICA9IDAsCisgICAgQ0NDSV9UVFlfREVWX0RITCAgICAgICAgICAgPSAwLCAgLy80IDxjY2NpIGNoPiBDQ0NJX0RITF9DSEFOTkVMCisgICAgQ0NDSV9UVFlfREVWX1RTVCAgICAgICAgICAgPSAxLCAgLy80IDxjY2NpIGNoPiBDQ0NJX1RTVF9DSEFOTkVMCisgICAgQ0NDSV9UVFlfREVWX0FUICAgICAgICAgICAgPSAyLCAgLy80IDxjY2NpIGNoPiBDQ0NJX0FUX0NIQU5ORUxfVFgKKyAgICBDQ0NJX1RUWV9ERVZfR1BEICAgICAgICAgICA9IDMsICAvLzQgPGNjY2kgY2g+IENDQ0lfR1BTX0NIQU5ORUxfVFgKKyAgICBDQ0NJX1RUWV9ERVZfU0lNICAgICAgICAgICA9IDQsICAvLzQgPGNjY2kgY2g+IENDQ0lfU0lNX0NIQU5ORUxfVFgKKyAgICBDQ0NJX1RUWV9ERVZfREhMMiAgICAgICAgICA9IDUsICAvLzQgPGNjY2kgY2g+IENDQ0lfREhMMl9DSEFOTkVMCisgICAgQ0NDSV9UVFlfREVWX0FUQ1AgICAgICAgICAgPSA2LAorICAgIENDQ0lfVFRZX0RFVl9DMktfUFBQICAgICAgID0gNywKKyAgICBDQ0NJX1RUWV9ERVZfQzJLX0FHUFMgICAgICA9IDgsCisgICAgQ0NDSV9UVFlfREVWX0NFTExJTkZPICAgICAgPSA5LCAgLy8gIDxjY2NpIGNoPiBDQ0NJX0NFTExJTkZPX0NIQU5ORUwKKyAgICBDQ0NJX1RUWV9ERVZfSU1TTSAgICAgICAgICA9IDEwLCAgLy8gIDxjY2NpIGNoPiBDQ0NJX0lNU01fQ0hBTk5FTAorICAgIENDQ0lfVFRZX0RFVl9XT0EgICAgICAgICAgID0gMTEsICAvLyAgPGNjY2kgY2g+IENDQ0lfV09BX0NIQU5ORUwKKyAgICBDQ0NJX1RUWV9ERVZfWFVJICAgICAgICAgICA9IDEyLCAgLy8gIDxjY2NpIGNoPiBDQ0NJX1hVSV9DSEFOTkVMCisgICAgQ0NDSV9UVFlfREVWX0JJUCAgICAgICAgICAgPSAxMywgIC8vICA8Y2NjaSBjaD4gQ0NDSV9CSVBfQ0hBTk5FTAorICAgIENDQ0lfVFRZX0RFVl9VREMgICAgICAgICAgID0gMTQsICAvLyAgPGNjY2kgY2g+IENDQ0lfVURDX0NIQU5ORUwKKyAgICBDQ0NJX1RUWV9ERVZfTkxPUFQgICAgICAgICA9IDE1LCAvLyA8Y2NjaSBjaD4gQ0NDSV9OTE9QVF9DSEFOTkVMCisgICAgQ0NDSV9UVFlfREVWX05MT1BQICAgICAgICAgPSAxNiwgLy8gPGNjY2kgY2g+IENDQ0lfTkxPUFBfQ0hBTk5FTAorICAgIENDQ0lfVFRZX0RFVl9TQVIgICAgICAgICAgID0gMTcsICAvLyAgPGNjY2kgY2g+IENDQ0lfU0FSX0NIQU5ORUwKKyAgICBDQ0NJX1RUWV9ERVZfQ0lRICAgICAgICAgICA9IDE4LCAgLy8gIDxjY2NpIGNoPiBDQ0NJX0NJUV9DSEFOTkVMCisgICAgQ0NDSV9UVFlfREVWX0lLRVJBVyAgICAgICAgPSAxOSwgIC8vICA8Y2NjaSBjaD4gQ0NDSV9JS0VSQVdfQ0hBTk5FTAorICAgIENDQ0lfVFRZX0RFVl9SSUxfSVBDMCAgICAgID0gMjAsICAvLyAgPGNjY2kgY2g+IENDQ0lfUklMX0lQQzBfQ0hBTk5FTAorICAgIENDQ0lfVFRZX0RFVl9SSUxfSVBDMSAgICAgID0gMjEsICAvLyAgPGNjY2kgY2g+IENDQ0lfUklMX0lQQzFfQ0hBTk5FTAorICAgIENDQ0lfVFRZX0RFVl8zR19WVCAgICAgICAgID0gMjIsICAvLyAgPGNjY2kgY2g+IENDQ0lfM0dfVlRfQ0hBTk5FTAorICAgIENDQ0lfVFRZX0RFVl9DQ19TVEFURSAgICAgID0gMjMsICAvLyAgPGNjY2kgY2g+IENDQ0lfQ0NfU1RBVEVfQ0hBTk5FTAorICAgIENDQ0lfVFRZX0RFVl9NSVBJICAgICAgICAgID0gMjQsICAvLyAgPGNjY2kgY2g+IENDQ0lfTUlQSV9DSEFOTkVMCisgICAgQ0NDSV9UVFlfREVWX01JUENfQVAwICAgICAgPSAyNSwgLy8gIDxjY2NpIGNoPiBDQ0NJX01JUENfQVAwX0NIQU5ORUwKKyAgICBDQ0NJX1RUWV9ERVZfTUlQQ19BUDEgICAgICA9IDI2LCAvLyAgPGNjY2kgY2g+IENDQ0lfTUlQQ19BUDFfQ0hBTk5FTAorICAgIENDQ0lfVFRZX0RFVl9NSVBDX0FQMiAgICAgID0gMjcsIC8vICA8Y2NjaSBjaD4gQ0NDSV9NSVBDX0FQMl9DSEFOTkVMCisgICAgQ0NDSV9UVFlfREVWX01JUENfQVAzICAgICAgPSAyOCwgLy8gIDxjY2NpIGNoPiBDQ0NJX01JUENfQVAzX0NIQU5ORUwKKyAgICBDQ0NJX1RUWV9ERVZfTUlQQ19BUDQgICAgICA9IDI5LCAvLyAgPGNjY2kgY2g+IENDQ0lfTUlQQ19BUDRfQ0hBTk5FTAorICAgIENDQ0lfVFRZX0RFVl9NSVBDX0FQNSAgICAgID0gMzAsIC8vICA8Y2NjaSBjaD4gQ0NDSV9NSVBDX0FQNV9DSEFOTkVMCisgICAgQ0NDSV9UVFlfREVWX01JUENfQVA2ICAgICAgPSAzMSwgLy8gIDxjY2NpIGNoPiBDQ0NJX01JUENfQVA2X0NIQU5ORUwKKyAgICBDQ0NJX1RUWV9ERVZfTUlQQ19BUDcgICAgICA9IDMyLCAvLyAgPGNjY2kgY2g+IENDQ0lfTUlQQ19BUDdfQ0hBTk5FTAorICAgIENDQ0lfVFRZX0RFVl9NSVBDX0FQOCAgICAgID0gMzMsIC8vICA8Y2NjaSBjaD4gQ0NDSV9NSVBDX0FQOF9DSEFOTkVMCisgICAgQ0NDSV9UVFlfREVWX01JUENfQVA5ICAgICAgPSAzNCwgLy8gIDxjY2NpIGNoPiBDQ0NJX01JUENfQVA5X0NIQU5ORUwKKyAgICBDQ0NJX1RUWV9ERVZfTUlQQ19FQVAwICAgICA9IDM1LCAvLyAgPGNjY2kgY2g+IENDQ0lfTUlQQ19FQVAwX0NIQU5ORUwKKyAgICBDQ0NJX1RUWV9ERVZfTUJJTV9FQVAwICAgICA9IDM2LCAvLyAgPGNjY2kgY2g+IENDQ0lfTUJJTV9FQVAwX0NIQU5ORUwKKyAgICBDQ0NJX1RUWV9ERVZfTE9HX0VBUCAgICAgICA9IDM3LCAvLyAgPGNjY2kgY2g+IENDQ0lfTURfTE9HX0VBUCBmb3IgTUQgTE9HCisgICAgQ0NDSV9UVFlfREVWX01FVEFfRUFQICAgICAgPSAzOCwgLy8gIDxjY2NpIGNoPiBDQ0NJX1RTVF9DSEFOTkVMX0VBUCBmb3IgTUQgTUVUQQorICAgIENDQ0lfVFRZX0RFVl9FUERHICAgICAgICAgID0gMzksICAvLyA8Y2NjaSBjaD4gQ0NDSV9FUERHX0NIQU5ORUwKKyAgICBDQ0NJX1RUWV9ERVZfRVBERzIgICAgICAgICA9IDQwLCAgLy8gPGNjY2kgY2g+IENDQ0lfRVBERzJfQ0hBTk5FTAorICAgIENDQ0lfVFRZX0RFVl9FUERHMyAgICAgICAgID0gNDEsICAvLyA8Y2NjaSBjaD4gQ0NDSV9FUERHM19DSEFOTkVMCisgICAgQ0NDSV9UVFlfREVWX0VQREc0ICAgICAgICAgPSA0MiwgIC8vIDxjY2NpIGNoPiBDQ0NJX0VQREc0X0NIQU5ORUwKKwlDQ0NJX1RUWV9ERVZfTUJJTV9EU1MwX0VBUCA9IDQzLCAgLy8gPGNjY2kgY2g+IENDQ0lfTUJJTV9EU1MwX0VBUF9DSEFOTkVMCisJQ0NDSV9UVFlfREVWX01CSU1fRFNTMV9FQVAgPSA0NCwgIC8vIDxjY2NpIGNoPiBDQ0NJX01CSU1fRFNTMV9FQVBfQ0hBTk5FTAorCUNDQ0lfVFRZX0RFVl9NQklNX0RTUzJfRUFQID0gNDUsICAvLyA8Y2NjaSBjaD4gQ0NDSV9NQklNX0RTUzJfRUFQX0NIQU5ORUwKKwlDQ0NJX1RUWV9ERVZfTUJJTV9EU1MzX0VBUCA9IDQ2LCAgLy8gPGNjY2kgY2g+IENDQ0lfTUJJTV9EU1MzX0VBUF9DSEFOTkVMCisJQ0NDSV9UVFlfREVWX01CSU1fRFNTNF9FQVAgPSA0NywgIC8vIDxjY2NpIGNoPiBDQ0NJX01CSU1fRFNTNF9FQVBfQ0hBTk5FTAorCUNDQ0lfVFRZX0RFVl9NQklNX0RTUzVfRUFQID0gNDgsICAvLyA8Y2NjaSBjaD4gQ0NDSV9NQklNX0RTUzVfRUFQX0NIQU5ORUwKKwlDQ0NJX1RUWV9ERVZfTUJJTV9EU1M2X0VBUCA9IDQ5LCAgLy8gPGNjY2kgY2g+IENDQ0lfTUJJTV9EU1M2X0VBUF9DSEFOTkVMCisJQ0NDSV9UVFlfREVWX01CSU1fRFNTN19FQVAgPSA1MCwgIC8vIDxjY2NpIGNoPiBDQ0NJX01CSU1fRFNTN19FQVBfQ0hBTk5FTAorCUNDQ0lfVFRZX0RFVl9NSVBDX0FQMTAJICAgPSA1MSwgLy8gIDxjY2NpIGNoPiBDQ0NJX01JUENfQVAxMF9DSEFOTkVMCisJQ0NDSV9UVFlfREVWX01JUENfQVAxMQkgICA9IDUyLCAvLyAgPGNjY2kgY2g+IENDQ0lfTUlQQ19BUDExX0NIQU5ORUwKKwlDQ0NJX1RUWV9ERVZfTUlQQ19BUDEyCSAgID0gNTMsIC8vICA8Y2NjaSBjaD4gQ0NDSV9NSVBDX0FQMTJfQ0hBTk5FTAorCUNDQ0lfVFRZX0RFVl9NSVBDX0FQMTMJICAgPSA1NCwgLy8gIDxjY2NpIGNoPiBDQ0NJX01JUENfQVAxM19DSEFOTkVMCisJQ0NDSV9UVFlfREVWX01JUENfQVAxNAkgICA9IDU1LCAvLyAgPGNjY2kgY2g+IENDQ0lfTUlQQ19BUDE0X0NIQU5ORUwKKyAgICBDQ0NJX1RUWV9ERVZfQ05UICAgICAgICAgICA9IDU2Cit9Y2NjaXR0eV9kZXZpY2VfaWQ7CisKKyNlbmRpZiAvLyNpZm5kZWYgX0NDQ0lfVFRZX0lGX0gKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvY2RjZWNtX3N0cnVjdC5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9jZGNlY21fc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4OGJlYwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvY2RjZWNtX3N0cnVjdC5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxNAorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgY2RjZWNtX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBDRENFQ00gSUxNIHN0cnVjdHVyZSBkZWZpbml0aW9uLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0lOQ19DRENFQ01fU1RSVUNUX0gKKyNkZWZpbmUgX19JTkNfQ0RDRUNNX1NUUlVDVF9ICisKKyNpbmNsdWRlICJoaWZfaW9yLmgiCisjaW5jbHVkZSAiaGlmX213X21zZ2lkLmgiCisKKy8qCisgKiBMb2NhbCBwYXJhbWV0ZXIgc3RydWN0dXJlIGZvciBNU0dfSURfQ0RDRUNNX1NUQVJUX0RBVEFfUEFUSF9SRVEKKyAqLwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggY2xhc3NfaWQ7Cit9IGNkY2VjbV9zdGFydF9kYXRhX3BhdGhfcmVxX3N0cnVjdDsKKworLyoKKyAqIExvY2FsIHBhcmFtZXRlciBzdHJ1Y3R1cmUgZm9yIE1TR19JRF9DRENFQ01fU1RPUF9EQVRBX1BBVEhfUkVRCisgKi8KK3R5cGVkZWYgc3RydWN0IAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGNsYXNzX2lkOworfSBjZGNlY21fc3RvcF9kYXRhX3BhdGhfcmVxX3N0cnVjdDsKKworLyoKKyAqIExvY2FsIHBhcmFtZXRlciBzdHJ1Y3R1cmUgZm9yIE1TR19JRF9DRENFQ01fUkVMT0FEX1VQTElOS19SRVEKKyAqLwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggY2xhc3NfaWQ7Cit9IGNkY2VjbV9yZWxvYWRfdXBsaW5rX3JlcV9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBfX0lOQ19DRENFQ01fU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvZGhjcDRjX3N0cnVjdC5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9kaGNwNGNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhZTFlMAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvZGhjcDRjX3N0cnVjdC5oCkBAIC0wLDAgKzEsMjYwIEBACisvKiEKKyAqICBAZmlsZSBkaGNwNGNfc3RydWN0LmgKKyAqICBAYXV0aG9yIFJvZ2VyIEh1YW5nIDxjaGFvbWluLmhhdW5nQG1lZGlhdGVrLmNvbT4KKyAqICBAdmVyc2lvbiAxLjAKKyAqICBAc2VjdGlvbiBMSUNFTlNFCisgKgorICogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorICogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisgKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisgKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisgKgorICogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworICogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisgKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyAqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyAqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorICogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyAqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyAqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorICogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworICogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworICogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyAqCisgKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorICogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorICogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisgKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworICogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorICoKKyAqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorICogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorICogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorICogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorICogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorICoKKyAqICBAc2VjdGlvbiBERVNDUklQVElPTgorICogIFRoaXMgZmlsZSBwcm92aWRlcyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBvZiBkaGNwNGMgKCBESENQdjQgQ2xpZW50ICkKKyAqLworCisjaWZuZGVmIF9ESENQNENfU1RSVUNUX0gKKyNkZWZpbmUgX0RIQ1A0Q19TVFJVQ1RfSAorCisKKy8qIQorICogIEBicmllZiBkaGNwNGNfY2F1c2VfZSBlbnVtZXJhdGUgcG9zc2libGUgY2F1c2Ugb2YgREhDUHY0IENsaWVudAorICogIEBwYXJhbSBESENQNENfQ0FVU0VfTUlOICAgICAgICAgICAgICAgICBwc2V1ZG8gc3RhdGUKKyAqICBAcGFyYW0gREhDUDRDX0NBVVNFX1NVQ0NFU1MgICAgICAgICAgICAgc3VjY2VzcworICogIEBwYXJhbSBESENQNENfQ0FVU0VfTk9fSU5TVEFOQ0UgICAgICAgICBubyBpbnN0YW5jZSBhdmFpbGFibGUKKyAqICBAcGFyYW0gREhDUDRDX0NBVVNFX0lOVkFMSURfUEFSQU1FVEVSICAgcGFyYW1ldGVyIGlzIGludmFsaWQKKyAqICBAcGFyYW0gREhDUDRDX0NBVVNFX0lOVkFMSURfU1RBVEUgICAgICAgbm90IGFsbG93IGluIHRoaXMgc3RhdGUKKyAqICBAcGFyYW0gREhDUDRDX0NBVVNFX01BWCAgICAgICAgICAgICAgICAgcHNldWRvIHN0YXRlCisgKi8KK3R5cGVkZWYgZW51bSBfZGhjcDRjX2NhdXNlIHsKKyAgICBESENQNENfQ0FVU0VfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgREhDUDRDX0NBVVNFX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxLAorICAgIERIQ1A0Q19DQVVTRV9OT19JTlNUQU5DRSAgICAgICAgICAgICAgICAgICAgICAgID0gMiwKKyAgICBESENQNENfQ0FVU0VfSU5WQUxJRF9QQVJBTUVURVIgICAgICAgICAgICAgICAgICA9IDMsCisgICAgREhDUDRDX0NBVVNFX0lOVkFMSURfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgPSA0LAorICAgIERIQ1A0Q19DQVVTRV9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gNSwKK30gZGhjcDRjX2NhdXNlX2U7CisKKworLyohCisgKiAgQGJyaWVmIGRoY3A0Y19oYXJkd2FyZV9hZGRyZXNzX3R5cGVfZSBlbnVtZXJhdGUgcG9zc2libGUgaGFyZHdhcmQgYWRkcmVzcworICogICAgICAgICB0eXBlIG9mIERIQ1B2NCBDbGllbnQKKyAqICBAcGFyYW0gREhDUDRDX0hUWVBFX01JTiAgICAgICAgICAgICAgICAgcHNldWRvIHN0YXRlCisgKiAgQHBhcmFtIERIQ1A0Q19IVFlQRV9FVEhFUk5FVCAgICAgICAgICAgIGV0aGVybmV0IHR5cGUKKyAqICBAcGFyYW0gREhDUDRDX0hUWVBFX01BWCAgICAgICAgICAgICAgICAgcHNldWRvIHN0YXRlCisgKi8KK3R5cGVkZWYgZW51bSBfZGhjcDRjX2hhcmR3YXJlX2FkZHJlc3NfdHlwZSB7CisgICAgREhDUDRDX0hUWVBFX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIERIQ1A0Q19IVFlQRV9FVEhFUk5FVCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSwKKyAgICBESENQNENfSFRZUEVfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDIsCit9IGRoY3A0Y19oYXJkd2FyZV9hZGRyZXNzX3R5cGVfZTsKKworCisjZGVmaW5lIERIQ1A0Q19NQVhfSEFSRFdBUkVfQUREUkVTU19TSVpFICAgICAgICAgICAgMTYKKy8qIQorICogIEBicmllZiBkaGNwNGNfYWN0aXZhZ3RlX3JlcV9zdHJ1Y3QgZGVzY3JpYmUgYWN0aXZhdGUgcmVxdWVzdCBpbmZvcm1hdGlvbgorICogICAgICAgICBvZiBESENQdjQgQ2xpZW50CisgKi8KK3R5cGVkZWYgc3RydWN0IF9kaGNwNGNfYWN0aXZhdGVfcmVxX3N0cnVjdCB7CisgICAgLyohCisgICAgICogIEBicmllZiBJTE0gbG9jYWwgcGFyYW1ldGVyIGhlYWRlcgorICAgICAqLworICAgIExPQ0FMX1BBUkFfSERSCisgICAgLyohCisgICAgICogIEBicmllZiBpcCBpbnN0YW5jZSBpZGVudGlmaWVyCisgICAgICovCisgICAga2FsX3VpbnQ4ICAgICAgIGlwX2lkOworICAgIC8qIQorICAgICAqICBAYnJpZWYgaGFyZHdhcmUgYWRkcmVzcyB0eXBlCisgICAgICovCisgICAgZGhjcDRjX2hhcmR3YXJlX2FkZHJlc3NfdHlwZV9lICBoYXJkd2FyZV9hZGRyZXNzX3R5cGU7CisgICAgLyohCisgICAgICogIEBicmllZiBoYXJkd2FyZSBhZGRyZXNzCisgICAgICovCisgICAga2FsX3VpbnQ4ICAgICAgIGhhcmR3YXJlX2FkZHJlc3NbREhDUDRDX01BWF9IQVJEV0FSRV9BRERSRVNTX1NJWkVdOworfSBkaGNwNGNfYWN0aXZhdGVfcmVxX3N0cnVjdDsKKworCisvKiEKKyAqICBAYnJpZWYgZGhjcDRjX2FjdGl2YXRlX3JzcF9zdHJ1Y3QgZGVzY3JpYmUgYWN0aXZhdGUgcmVzcG9uc2UgaW5mb3JtYXRpb24KKyAqICAgICAgICAgb2YgREhDUHY0IENsaWVudAorICovCit0eXBlZGVmIHN0cnVjdCBfZGhjcDRjX2FjdGl2YXRlX3JzcF9zdHJ1Y3QgeworICAgIC8qIQorICAgICAqICBAYnJpZWYgSUxNIGxvY2FsIHBhcmFtZXRlciBoZWFkZXIKKyAgICAgKi8KKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIC8qIQorICAgICAqICBAYnJpZWYgaXAgaW5zdGFuY2UgaWRlbnRpZmllcgorICAgICAqLworICAgIGthbF91aW50OCAgICAgICBpcF9pZDsKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIERIQ1B2NCBDbGllbnQgaW5zdGFuY2UgaWRlbnRpZmllcgorICAgICAqLworICAgIGthbF91aW50OCAgICAgICBkaGNwX2lkOworICAgIC8qIQorICAgICAqICBAYnJpZWYgcmVzcG9uc2UgY2F1c2UKKyAgICAgKi8KKyAgICBkaGNwNGNfY2F1c2VfZSAgY2F1c2U7Cit9IGRoY3A0Y19hY3RpdmF0ZV9yc3Bfc3RydWN0OworCisKKy8qIQorICogIEBicmllZiBkaGNwNGNfZGVhY3RpdmF0ZV9yZXFfc3RydWN0IGRlc2NyaWJlIGRlYWN0aXZhdGUgcmVxdWVzdCBpbmZvcm1hdGlvbgorICogICAgICAgICBvZiBESENQdjQgQ2xpZW50CisgKi8KK3R5cGVkZWYgc3RydWN0IF9kaGNwNGNfZGVhY3RpdmF0ZV9yZXFfc3RydWN0IHsKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIElMTSBsb2NhbCBwYXJhbWV0ZXIgaGVhZGVyCisgICAgICovCisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIGlwIGluc3RhbmNlIGlkZW50aWZpZXIKKyAgICAgKi8KKyAgICBrYWxfdWludDggICAgICAgaXBfaWQ7CisgICAgLyohCisgICAgICogIEBicmllZiBESENQdjQgQ2xpZW50IGluc3RhbmNlIGlkZW50aWZpZXIKKyAgICAgKi8KKyAgICBrYWxfdWludDggICAgICAgZGhjcF9pZDsKK30gZGhjcDRjX2RlYWN0aXZhdGVfcmVxX3N0cnVjdDsKKworCisvKiEKKyAqICBAYnJpZWYgZGhjcDRjX2RlYWN0aXZhdGVfcnNwX3N0cnVjdCBkZXNjcmliZSBkZWFjdGl2YXRlIHJlc3BvbnNlIGluZm9ybWF0aW9uCisgKiAgICAgICAgIG9mIERIQ1B2NCBDbGllbnQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2RoY3A0Y19kZWFjdGl2YXRlX3JzcF9zdHJ1Y3QgeworICAgIC8qIQorICAgICAqICBAYnJpZWYgSUxNIGxvY2FsIHBhcmFtZXRlciBoZWFkZXIKKyAgICAgKi8KKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIC8qIQorICAgICAqICBAYnJpZWYgaXAgaW5zdGFuY2UgaWRlbnRpZmllcgorICAgICAqLworICAgIGthbF91aW50OCAgICAgICBpcF9pZDsKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIERIQ1B2NCBDbGllbnQgaW5zdGFuY2UgaWRlbnRpZmllcgorICAgICAqLworICAgIGthbF91aW50OCAgICAgICBkaGNwX2lkOworICAgIC8qIQorICAgICAqICBAYnJpZWYgcmVzcG9uc2UgY2F1c2UKKyAgICAgKi8KKyAgICBkaGNwNGNfY2F1c2VfZSAgY2F1c2U7Cit9IGRoY3A0Y19kZWFjdGl2YXRlX3JzcF9zdHJ1Y3Q7CisKKworLyohCisgKiAgQGJyaWVmIGRoY3A0Y19wYWNrZXRfcmVxX3N0cnVjdCBkZXNjcmliZSBwYWNrZXQgcmVxdWVzdCBpbmZvcm1hdGlvbgorICogICAgICAgICBvZiBESENQdjQgQ2xpZW50CisgKi8KK3R5cGVkZWYgc3RydWN0IF9kaGNwNGNfcGFja2V0X3JlcV9zdHJ1Y3QgeworICAgIC8qIQorICAgICAqICBAYnJpZWYgSUxNIGxvY2FsIHBhcmFtZXRlciBoZWFkZXIKKyAgICAgKi8KKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIC8qIQorICAgICAqICBAYnJpZWYgaXAgaW5zdGFuY2UgaWRlbnRpZmllcgorICAgICAqLworICAgIGthbF91aW50OCAgICAgICBpcF9pZDsKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIERIQ1B2NCBDbGllbnQgaW5zdGFuY2UgaWRlbnRpZmllcgorICAgICAqLworICAgIGthbF91aW50OCAgICAgICBkaGNwX2lkOworICAgIC8qIQorICAgICAqICBAYnJpZWYgcmVxdWVzdCBncGQgcGFja2V0IGJ1ZmZlcgorICAgICAqLworICAgIHZvaWQqICAgICAgICAgICBncGQ7Cit9IGRoY3A0Y19wYWNrZXRfcmVxX3N0cnVjdDsKKworCisvKiEKKyAqICBAYnJpZWYgZGhjcDRjX3BhY2tldF9pbmRfc3RydWN0IGRlc2NyaWJlIHBhY2tldCBpbmRpY2F0ZSBpbmZvcm1hdGlvbgorICogICAgICAgICBvZiBESENQdjQgQ2xpZW50CisgKi8KK3R5cGVkZWYgc3RydWN0IF9kaGNwNGNfcGFja2V0X2luZF9zdHJ1Y3QgeworICAgIC8qIQorICAgICAqICBAYnJpZWYgSUxNIGxvY2FsIHBhcmFtZXRlciBoZWFkZXIKKyAgICAgKi8KKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIC8qIQorICAgICAqICBAYnJpZWYgaXAgaW5zdGFuY2UgaWRlbnRpZmllcgorICAgICAqLworICAgIGthbF91aW50OCAgICAgICBpcF9pZDsKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIERIQ1B2NCBDbGllbnQgaW5zdGFuY2UgaWRlbnRpZmllcgorICAgICAqLworICAgIGthbF91aW50OCAgICAgICBkaGNwX2lkOworICAgIC8qIQorICAgICAqICBAYnJpZWYgaW5kaWNhdGUgZ3BkIHBhY2tldCBidWZmZXIKKyAgICAgKi8KKyAgICB2b2lkKiAgICAgICAgICAgZ3BkOworfSBkaGNwNGNfcGFja2V0X2luZF9zdHJ1Y3Q7CisKKworLyohCisgKiAgQGJyaWVmIGRoY3A0Y19pcF91cF9pbmRfc3RydWN0IGRlc2NyaWJlIGlwIHVwIGluZGljYXRlIGluZm9ybWF0aW9uCisgKiAgICAgICAgIG9mIERIQ1B2NCBDbGllbnQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2RoY3A0Y19pcF91cF9pbmRfc3RydWN0IHsKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIElMTSBsb2NhbCBwYXJhbWV0ZXIgaGVhZGVyCisgICAgICovCisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIGlwIGluc3RhbmNlIGlkZW50aWZpZXIKKyAgICAgKi8KKyAgICBrYWxfdWludDggICAgICAgaXBfaWQ7CisgICAgLyohCisgICAgICogIEBicmllZiBESENQdjQgQ2xpZW50IGluc3RhbmNlIGlkZW50aWZpZXIKKyAgICAgKi8KKyAgICBrYWxfdWludDggICAgICAgZGhjcF9pZDsKK30gZGhjcDRjX2lwX3VwX2luZF9zdHJ1Y3Q7CisKKworLyohCisgKiAgQGJyaWVmIGRoY3A0Y19pcF9kb3duX2luZF9zdHJ1Y3QgZGVzY3JpYmUgaXAgZG93biBpbmRpY2F0ZSBpbmZvcm1hdGlvbgorICogICAgICAgICBvZiBESENQdjQgQ2xpZW50CisgKi8KK3R5cGVkZWYgc3RydWN0IF9kaGNwNGNfaXBfZG93bl9pbmRfc3RydWN0IHsKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIElMTSBsb2NhbCBwYXJhbWV0ZXIgaGVhZGVyCisgICAgICovCisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIGlwIGluc3RhbmNlIGlkZW50aWZpZXIKKyAgICAgKi8KKyAgICBrYWxfdWludDggICAgICAgaXBfaWQ7CisgICAgLyohCisgICAgICogIEBicmllZiBESENQdjQgQ2xpZW50IGluc3RhbmNlIGlkZW50aWZpZXIKKyAgICAgKi8KKyAgICBrYWxfdWludDggICAgICAgZGhjcF9pZDsKK30gZGhjcDRjX2lwX2Rvd25faW5kX3N0cnVjdDsKKworCisjZW5kaWYgIC8vIF9ESENQNENfU1RSVUNUX0gKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9kcGZtX2FwaS5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9kcGZtX2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZmRjOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2RwZm1fYXBpLmgKQEAgLTAsMCArMSwyNjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBkcGZtX2FwaS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIFVNT0xZCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0RQRk1fQVBJX0gKKyNkZWZpbmUgX19EUEZNX0FQSV9ICisKKyNpbmNsdWRlICJoaWZfaW9yLmgiCisjaW5jbHVkZSAiaGlmX213X21zZ2lkLmgiCisjaW5jbHVkZSAiaXBjX2FwaS5oIgorI2luY2x1ZGUgImlwY19kZWZzX3B1YmxpYy5oIgorI2luY2x1ZGUgImlwY19lbnVtcy5oIgorCisjaW5jbHVkZSAiZHBmbV9lbnVtcy5oIgorI2luY2x1ZGUgImRwZm1fc3RydWN0LmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb25zdGFudCBkZWZpbml0aW9uLgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRFBGTV9WRVJTSU9OICAgICAgICAgICAgIDIKKyNkZWZpbmUgRFBGTV9NQVhfQ1RfVEFCTEVfTlVNICAgIDY0CisKKyNkZWZpbmUgRFBGTV9QS1RfVFlQRV9GSUxURVJfREVMX0FDSyAgICAweDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEdsb2JhbCB2YXJpYWJsZXMuCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSGVscGVyIE1hY3JvLgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRFBGTV9HRVRfUEtUX1RZUEVfRlJPTV9QU04oX3BzbikgKCgoX3BzbikgJiAweDBGMDApID4+IDgpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQdWJsaWMgZnVjbnRpb25zLgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2thbF9ib29sIGRwZm1faW5pdCh2b2lkKTsKK2thbF9ib29sIGRwZm1fcmVzZXQodm9pZCk7Cit2b2lkIGRwZm1fb25faWxtKGlsbV9zdHJ1Y3QgKmlsbSk7CitrYWxfaW50MzIgZHBmbV9lbmFibGUodm9pZCAqaW5mbyk7CitrYWxfaW50MzIgZHBmbV9kaXNhYmxlKHZvaWQgKmluZm8pOwora2FsX2ludDMyIGRwZm1fYWN0aXZhdGUodm9pZCAqaW5mbyk7CitrYWxfaW50MzIgZHBmbV9kZWFjdGl2YXRlKHZvaWQgKmluZm8pOworCisvKiEKKyAqIFVwZGF0ZSBnbG9iYWwgYWxlcnQgZGF0YSB1c2FnZSBiYXNlIG9uIHRoZSByZWNlaXZlZCBwYWNrZXQuCisgKgorICogQHBhcmFtICAgcGFja2V0X2xlbiBbSU5dIExlbmd0aCBvZiB0aGUgcGFja2V0CisgKiBAcGFyYW0gICBuZXRpZl9pZCBbSU5dIG5ldGlmX2lkIGZvciB0aGUgcGFja2V0LgorICovCit2b2lkIGRwZm1fdXBkYXRlX2dsb2JhbF9hbGVydF9kYXRhX3VzYWdlKGthbF91aW50MzIgcGFja2V0X2xlbiwga2FsX3VpbnQzMiBuZXRpZl9pZCk7CisKKy8qIQorICogVXBkYXRlIGlxdW90YSBkYXRhIHVzYWdlIGJhc2Ugb24gdGhlIHJlY2VpdmVkIHBhY2tldC4KKyAqCisgKiBAcGFyYW0gICB1cGxpbmsgW0lOXSBJcyB1cGxpbmsgdHJhZmZpYy4gZmFsc2UgZm9yIGRvd25saW5rIHRyYWZmaWMuCisgKiBAcGFyYW0gICBpbl9uZXRpZl9pZCBbSU5dIFNvdXJjZSBuZXRpZl9pZCBmb3IgdGhlIHBhY2tldC4KKyAqIEBwYXJhbSAgIG91dF9uZXRpZl9pZCBbSU5dIERlc3RpbmF0aW9uIG5ldGlmX2lkIGZvciB0aGUgcGFja2V0LgorICogQHBhcmFtICAgcHJvdG9jb2wgW0lOXSBQcm90b2NvbCBvZiB0aGUgcGFja2V0CisgKiBAcGFyYW0gICBwYWNrZXRfbGVuIFtJTl0gTGVuZ3RoIG9mIHRoZSBwYWNrZXQKKyAqLwordm9pZCBkcGZtX3VwZGF0ZV9pcXVvdGFfZGF0YV91c2FnZShrYWxfYm9vbCB1cGxpbmssIGthbF91aW50MzIgaW5fbmV0aWZfaWQsIGthbF91aW50MzIgb3V0X25ldGlmX2lkLCBrYWxfdWludDggcHJvdG9jb2wsIGthbF91aW50MzIgcGFja2V0X2xlbik7CisKKy8qIQorICogQ2hlY2sgdGhlIHBhY2tldCBzaG91bGQgYmUgc2VudCB0byB3aGljaCBuZXRpZi4KKyAqCisgKiBAcGFyYW0gICB1cGxpbmsgW0lOXSBJcyB1cGxpbmsgdHJhZmZpYy4gZmFsc2UgZm9yIGRvd25saW5rIHRyYWZmaWMuCisgKiBAcGFyYW0gICBpcF90eXBlIFtJTl0gSVAgdHlwZSBvZiB0aGUgcGFja2V0LgorICogQHBhcmFtICAgcGt0X2RlcyBbSU5dIERlc2NyaXB0b3Igb2YgdGhlIHBhY2tldC4KKyAqIEBwYXJhbSAgIGluX25ldGlmX2lkIFtJTl0gU291cmNlIG5ldGlmX2lkIGZvciB0aGUgcGFja2V0LgorICogQHBhcmFtICAgb3V0X25ldGlmX2lkIFtPVVRdIERlc3RpbmF0aW9uIG5ldGlmX2lkIGZvciB0aGUgcGFja2V0LgorICoKKyAqIEByZXR1cm4gIEtBTF9UUlVFIGlmIG1hdGNoIERQRk0gU1cgZmlsdGVyLiBLQUxfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitrYWxfYm9vbCBkcGZtX2NoZWNrX3JvdXRlKGthbF9ib29sIHVwbGluaywga2FsX3VpbnQ4IGlwX3R5cGUsIGlwY19wa3RfZGVzX3QgKnBrdF9kZXMsIGthbF91aW50MzIgaW5fbmV0aWZfaWQsIGthbF91aW50MzIgKm91dF9uZXRpZl9pZCk7CisKKy8qIQorICogQ2hlY2sgaWYgdGhlIHBhY2tldCBuZWVkZWQgdG8gYWRkIGZpbHRlci4KKyAqCisgKiBAcGFyYW0gICB1cGxpbmsgW0lOXSBJcyB1cGxpbmsgdHJhZmZpYy4gZmFsc2UgZm9yIGRvd25saW5rIHRyYWZmaWMuCisgKiBAcGFyYW0gICBwa3RfZGVzIFtJTl0gRGVzY3JpcHRvciBvZiB0aGUgcGFja2V0LgorICogQHBhcmFtICAgaW5fbmV0aWZfaWQgW0lOXSBTb3VyY2UgbmV0aWZfaWQgZm9yIHRoZSBwYWNrZXQuCisgKi8KK3ZvaWQgZHBmbV90cmFja19wYWNrZXQoa2FsX2Jvb2wgdXBsaW5rLCBpcGNfcGt0X2Rlc190ICpwa3RfZGVzLCBrYWxfdWludDMyIGluX25ldGlmX2lkKTsKKworLyohCisgKiBQcm9jZXNzIFNXIGZpbHRlciBhY2NvcmRpbmcgdG8gSFcgZmlsdGVyIGNvbW1hbmQgcmVzdWx0LgorICoKKyAqIEBwYXJhbSAgIHBrdF9kZXMgW0lOXSBEZXNjcmlwdG9yIG9mIHRoZSBwYWNrZXQuCisgKi8KK3ZvaWQgZHBmbV9wcm9jZXNzX2ZpbHRlcl9jbWRfcmVzdWx0KGlwY19wa3RfZGVzX3QgKnBrdF9kZXMpOworCisvKiEKKyAqIFJlZ2lzdGVyIHRvIERQRk0gTEFOIGRldmljZS4KKyAqCisgKiBAcGFyYW0gICBsYW5fZGV2X2lkIFtJTl0gRFBGTSBMQU4gZGV2aWNlIGlkLgorICogQHBhcmFtICAgZGV2X2luZm8gW0lOXSBsYW4gZGV2aWNlIGluZm9ybWF0aW9uLgorICoKKyAqIEByZXR1cm4gIEtBTF9UUlVFIGlmIHJlZ2lzdGVyIHN1Y2Nlc3NmdWxseS4gS0FMX0ZBTFNFIG90aGVyd2lzZS4KKyAqLwora2FsX2Jvb2wgZHBmbV9sYW5fZGV2X3JlZ2lzdGVyKGthbF91aW50OCBsYW5fZGV2X2lkLCBkcGZtX2xhbl9kZXZfaW5mb190ICpkZXZfaW5mbyk7CisKKy8qIQorICogUXVlcnkgRFBGTSBpcyBhY3RpdmF0ZWQuCisgKgorICogQHJldHVybiAgS0FMX1RSVUUgaWYgRFBGTSBpcyBhY3RpdmF0ZWQuIEtBTF9GQUxTRSBvdGhlcndpc2UuCisgKi8KK2thbF9ib29sIGRwZm1faXNfYWN0aXZlKHZvaWQpOworCisvKiEKKyAqIEdldCBEUEZNIFNXIGZpbHRlciBhY2NvcmRpbmcgdG8gZmlsdGVyIGlkLgorICoKKyAqIEBwYXJhbSAgIGZpbHRlcl9pZCBbSU5dIERQRk0gU1cgZmlsdGVyIGlkLgorICoKKyAqIEByZXR1cm4gIFNXIGZpbHRlciBpZiBmb3VuZC4gTlVMTCBvdGhlcndpc2UuCisgKi8KK2RwZm1fZmlsdGVyX3QqIGRwZm1fZmluZF9maWx0ZXJfYnlfaWQoa2FsX2ludDE2IGZpbHRlcl9pZCk7CisKKy8qIQorICogUmVtb3ZlIERQRk0gc2Vuc2l0aXZlIGRhdGEuCisgKi8KK3ZvaWQgZHBmbV9tb2R1bGVfY2xlYW4odm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9kcGZtX2VudW1zLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2RwZm1fZW51bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDY5YWZjCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9kcGZtX2VudW1zLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxOAorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBkcGZtX2VudW1zLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgVU1PTFlBCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fRFBGTV9FTlVNU19ICisjZGVmaW5lIF9fRFBGTV9FTlVNU19ICisKK3R5cGVkZWYgZW51bSBfZHBmbV9hY3Rpb25fZSB7CisgICAgRFBGTV9BQ1RJT05fQURELAorICAgIERQRk1fQUNUSU9OX0RFTEVURSwKK30gZHBmbV9hY3Rpb25fZTsKKwordHlwZWRlZiBlbnVtIF9kcGZtX3J1bGVfdGFnX2luZm9fZSB7CisgICAgRFBGTV9SVUxFX1RBR19OT1JNQUxfUEFDS0VUID0gMCwKKyAgICBEUEZNX1JVTEVfVEFHX0ZBS0VfRExfTkFUX1BBQ0tFVCwKK30gZHBmbV9ydWxlX3RhZ19pbmZvX2U7CisKK3R5cGVkZWYgZW51bSBfZHBmbV9sYW5fZGV2X2UgeworICAgIERQRk1fTEFOX0RFVl9VU0IgICA9IDAsCisgICAgRFBGTV9MQU5fREVWX1dJRkkgID0gMSwKKyAgICBEUEZNX0xBTl9ERVZfQ05ULAorICAgIERQRk1fTEFOX0RFVl9EVU1NWSA9IDB4RkYsCit9IGRwZm1fbGFuX2Rldl9lOworCit0eXBlZGVmIGVudW0gX2RwZm1fY3RfcHJvdG9jb2xfZSB7CisgICAgRFBGTV9DVF9QUk9UT0NPTF9UQ1AgPSAwLAorICAgIERQRk1fQ1RfUFJPVE9DT0xfVURQLAorICAgIERQRk1fQ1RfUFJPVE9DT0xfQ05ULAorfSBkcGZtX2N0X3Byb3RvY29sX2U7CisKK3R5cGVkZWYgZW51bSBfZHBmbV9maWx0ZXJfc3RhdGVfZSB7CisgICAgRFBGTV9GX1NUQVRFX1VOSU5JVCAgICAgICAgICAgICA9IDAsCisgICAgRFBGTV9GX1NUQVRFX0FDVElWRSAgICAgICAgICAgICA9IDEsCisgICAgRFBGTV9GX1NUQVRFX0xBTl9ERVZfREVMRVRJTkcgICA9IDIsCisgICAgRFBGTV9GX1NUQVRFX0hXX0RFTEVUSU5HICAgICAgICA9IDMsCit9IGRwZm1fZmlsdGVyX3N0YXRlX2U7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2RwZm1fbWRmcG1fc3RydWN0LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2RwZm1fbWRmcG1fc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMzZjljNQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvZHBmbV9tZGZwbV9zdHJ1Y3QuaApAQCAtMCwwICsxLDEwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE4CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGRwZm1fbWRmcG1fc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgVk1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICAKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0RQRk1fTURGUE1fU1RSVUNUX0gKKyNkZWZpbmUgX19EUEZNX01ERlBNX1NUUlVDVF9ICisKKyNpbmNsdWRlICJtZGZwbV9wdWJsaWNfYXBpLmgiCisjaW5jbHVkZSAiZHBmbV9zdHJ1Y3QuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbnN0YW50IGRlZmluaXRpb24uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBEUEZNX1BBUlRJQUxfQ1RfVEFCTEVfTlVNICAgICgoTURGUE1fVFRZX0JVRl9TWiAtIDgpIC8gc2l6ZW9mKGRwZm1fY3RfbmF0X3RhYmxlX2VudHJ5X3QpKQorI2RlZmluZSBEUEZNX01BWF9DVF9UQUJMRV9OVU0gICAgICAgIDY0CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEYXRhIFN0cnVjdHVyZS4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZkZWYgX19URU1QX01ERFBfV0hfU1VQUE9SVF9fCisvKiBQYXJ0aWFsIENUIE5VTSA9IChNREZQTV9CVUZfU1ogLSBIRFIpIC8gc2l6ZW9mKGRwZm1fY3RfbmF0X3RhYmxlX2VudHJ5X3QpICovCit0eXBlZGVmIHN0cnVjdCBfZHBmbV9ub3RpZnlfY3RfdGltZW91dF9pbmRfc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MTYgZW50cnlfbnVtOworICAgIGRwZm1fY3RfbmF0X3RhYmxlX2VudHJ5X3QgY3RfbmF0X3RhYmxlX2VudHJ5W0RQRk1fUEFSVElBTF9DVF9UQUJMRV9OVU1dOworfSBkcGZtX25vdGlmeV9jdF90aW1lb3V0X2luZF9zdHJ1Y3Q7CisjZWxzZSAKK3R5cGVkZWYgc3RydWN0IF9kcGZtX25vdGlmeV9jdF90aW1lb3V0X2luZF9zdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQxNiBlbnRyeV9udW07CisgICAgZHBmbV9jdF9uYXRfdGFibGVfZW50cnlfdCBjdF9uYXRfdGFibGVfZW50cnlbRFBGTV9NQVhfQ1RfVEFCTEVfTlVNXTsKK30gZHBmbV9ub3RpZnlfY3RfdGltZW91dF9pbmRfc3RydWN0OworI2VuZGlmIAorCit0eXBlZGVmIHN0cnVjdCBfZHBmbV9zZXRfZ2xvYmFsX2FsZXJ0X3JlcV9zdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiBjbWQ7CisgICAgZHBmbV9nbG9iYWxfYWxlcnRfdCBnYTsKK30gZHBmbV9zZXRfZ2xvYmFsX2FsZXJ0X3JlcV9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBfX0RQRk1fTURGUE1fU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvZHBmbV9zdHJ1Y3QuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvZHBmbV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzE3MTZmCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9kcGZtX3N0cnVjdC5oCkBAIC0wLDAgKzEsMzU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTgKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgZHBmbV9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBWTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0RQRk1fU1RSVUNUX0gKKyNkZWZpbmUgX19EUEZNX1NUUlVDVF9ICisKKyNpbmNsdWRlICJoaWZfbGhpZi5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29uc3RhbnQgZGVmaW5pdGlvbi4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIERQRk1fTUFYX0ZJTFRFUl9DTlQgICAgICAgICAgMTI4CisjZGVmaW5lIERQRk1fTUFYX0xBTl9ERVZfVVNFUl9OVU0gICAgMTYKKyNkZWZpbmUgRFBGTV9IQVNIX1RBQkxFX1NJWkUgICAgICAgICAxMjgKKyNkZWZpbmUgRFBGTV9NQVhfSFdfRklMVEVSX0NOVCAgICAgICAxMjgKKyNkZWZpbmUgRFBGTV9NQVhfSFdfQ01EX0NOVCAgICAgICAgICAxMjgKKworI2RlZmluZSBEUEZNX0RFQ0xBUkVfT0JKRUNUIFwKKyAgICAgICAgICAgIGthbF9pbnQzMiAgICAgICByZWZfY291bnQ7IFwKKyAgICAgICAgICAgIGthbF9pbnQzMiAgICAgICByZWFkZXJfY250OyBcCisgICAgICAgICAgICBrYWxfaW50MzIgICAgICAgd3JpdGVyX2NudDsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEYXRhIFN0cnVjdHVyZS4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCBfZHBmbV9pcHY0X3J1bGVfdCB7CisgICAga2FsX3VpbnQzMiAgICAgIHByaXZhdGVfaXA7CisgICAga2FsX3VpbnQzMiAgICAgIHB1YmxpY19pcDsKKyAgICBrYWxfdWludDMyICAgICAgcmVtb3RlX2lwOworICAgIGthbF91aW50MTYgICAgICBwcml2YXRlX3BvcnQ7CisgICAga2FsX3VpbnQxNiAgICAgIHB1YmxpY19wb3J0OworICAgIGthbF91aW50MTYgICAgICByZW1vdGVfcG9ydDsKKyAgICBrYWxfdWludDggICAgICAgcHJvdG9jb2w7CisgICAga2FsX3VpbnQ4ICAgICAgIHJlc2VydmVkOworICAgIGthbF91aW50MzIgICAgICBsYW5fbmV0aWZfaWQ7CisgICAga2FsX3VpbnQzMiAgICAgIHdhbl9uZXRpZl9pZDsKK30gZHBmbV9pcHY0X3J1bGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RwZm1faXB2Nl9ydWxlX3QgeworICAgIGthbF91aW50MzIgICAgICBwcml2YXRlX2lwWzRdOworICAgIGthbF91aW50MzIgICAgICByZW1vdGVfaXBbNF07CisgICAga2FsX3VpbnQxNiAgICAgIHByaXZhdGVfcG9ydDsKKyAgICBrYWxfdWludDE2ICAgICAgcmVtb3RlX3BvcnQ7CisgICAga2FsX3VpbnQ4ICAgICAgIHByb3RvY29sOworICAgIGthbF91aW50OCAgICAgICByZXNlcnZlZFszXTsKKyAgICBrYWxfdWludDMyICAgICAgbGFuX25ldGlmX2lkOworICAgIGthbF91aW50MzIgICAgICB3YW5fbmV0aWZfaWQ7Cit9IGRwZm1faXB2Nl9ydWxlX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9kcGZtX3RhZ19wYWNrZXRfdCB7CisgICAga2FsX3VpbnQxNiAgZ3VhcmRfcGF0dGVybjsKKyAgICBrYWxfdWludDggICB2ZXJzaW9uOworICAgIGthbF91aW50OCAgIHRhZ19sZW47CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAga2FsX3VpbnQ4ICAgaW5fbmV0aWZfaWQ7CisgICAgICAgICAgICBrYWxfdWludDggICBvdXRfbmV0aWZfaWQ7CisgICAgICAgICAgICBrYWxfdWludDE2ICBwb3J0OworICAgICAgICB9IHYxOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAga2FsX3VpbnQ4ICAgdGFnX2luZm87CisgICAgICAgICAgICBrYWxfdWludDggICByZXNlcnZlZDsKKyAgICAgICAgICAgIGthbF91aW50MTYgIHBvcnQ7CisgICAgICAgICAgICBrYWxfdWludDMyICBsYW5fbmV0aWZfaWQ7CisgICAgICAgICAgICBrYWxfdWludDMyICBpcDsKKyAgICAgICAgfSB2MjsKKyAgICB9IHR5cGU7Cit9IGRwZm1fdGFnX3BhY2tldF90OworCit0eXBlZGVmIHN0cnVjdCBfZHBmbV9sYW5fZGV2X2luZm9fdCB7CisgICAga2FsX3VpbnQzMiAgbmV0aWZfaWQ7CisgICAga2FsX3VpbnQ4ICAgbmV0X3R5cGU7CisgICAga2FsX2Jvb2wgICAgKCpub3RpZnlfYWRkX3J1bGUpKGthbF9pbnQxNiBmaWx0ZXJfaWQsIGthbF91aW50OCAqdGFnKTsKKyAgICBrYWxfYm9vbCAgICAoKm5vdGlmeV9tYXRjaF9ydWxlKShrYWxfYm9vbCBpc191cGxpbmssIGthbF9pbnQxNiBmaWx0ZXJfaWQpOworICAgIGthbF9ib29sICAgICgqbm90aWZ5X2RlbF9ydWxlKShrYWxfaW50MTYgZmlsdGVyX2lkKTsKK30gZHBmbV9sYW5fZGV2X2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RwZm1fZmlsdGVyX3QgeworICAgIERQRk1fREVDTEFSRV9PQkpFQ1QKKworICAgIGthbF9pbnQxNiAgICAgICAgICAgICAgIGlkOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgIGlwX3R5cGU7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CisgICAgdW5pb24geworICAgICAgICBkcGZtX2lwdjRfcnVsZV90ICAgICBpcHY0X3J1bGU7CisgICAgICAgIGRwZm1faXB2Nl9ydWxlX3QgICAgIGlwdjZfcnVsZTsKKyAgICB9IHJ1bGU7CisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgbGFuX25ldGlmX2lkOworICAgIGthbF91aW50MzIgICAgICAgICAgICAgIHdhbl9uZXRpZl9pZDsKKyAgICBzdHJ1Y3QgX2RwZm1fZmlsdGVyX3QgICAqbmV4dF9maWx0ZXJbMl07CisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgbGFzdF9hY2Nlc3NfdGltZTsKKyAgICBkcGZtX2ZpbHRlcl9zdGF0ZV9lICAgICBzdGF0ZTsKK30gZHBmbV9maWx0ZXJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RwZm1faXB2Nl9maWx0ZXJfdCB7CisgICAgRFBGTV9ERUNMQVJFX09CSkVDVAorCisgICAga2FsX3VpbnQzMiAgICAgIGlwWzRdOworICAgIGthbF91aW50OCAgICAgICBpc192YWxpZDsKKyAgICBrYWxfdWludDggICAgICAgcmVzZXJ2ZWRbM107CisgICAga2FsX3VpbnQzMiAgICAgIG5ldGlmX2lkOworfSBkcGZtX2lwdjZfZmlsdGVyX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9kcGZtX2ZpbHRlcl9saXN0X3QgeworICAgIERQRk1fREVDTEFSRV9PQkpFQ1QKKworICAgIGRwZm1fZmlsdGVyX3QgICAgKmZpbHRlcjsKK30gZHBmbV9maWx0ZXJfbGlzdF90OworCit0eXBlZGVmIHN0cnVjdCBfZHBmbV9pcHY2X2RsX2ZpbHRlcl9jYmtfY29udGV4dF90IHsKKyAgICBrYWxfdWludDggICAgICAgbGFuX2Rldl9pZDsKKyAgICBrYWxfdWludDggICAgICAgcmVzZXJ2ZWRbM107CisgICAga2FsX3VpbnQzMiAgICAgIGxhbl9kZXZfdXNlcl9pZDsKK30gZHBmbV9pcHY2X2RsX2ZpbHRlcl9jYmtfY29udGV4dF90OworCit0eXBlZGVmIHN0cnVjdCBfZHBmbV9sYW5fZGV2X3QgeworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2FjdGl2YXRlZDsKKyAgICBkcGZtX2xhbl9kZXZfaW5mb190ICAgICAgICAgICAgICAgICAgaW5mbzsKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlX2lwOworICAgIGthbF9pbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZfZGxfZmlsdGVyX2lkW0RQRk1fTUFYX0xBTl9ERVZfVVNFUl9OVU1dW0RQRk1fQ1RfUFJPVE9DT0xfQ05UXTsKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2X2RsX2ZpbHRlcl9jbnRbRFBGTV9NQVhfTEFOX0RFVl9VU0VSX05VTV07CisgICAgZHBmbV9pcHY2X2ZpbHRlcl90ICAgICAgICAgICAgICAgICAgIGlwdjZfZGxfZmlsdGVyc1tEUEZNX01BWF9MQU5fREVWX1VTRVJfTlVNXTsKKyAgICBkcGZtX2lwdjZfZGxfZmlsdGVyX2Nia19jb250ZXh0X3QgICAgaXB2Nl9kbF9maWx0ZXJfY2JrX2NvbnRleHRbRFBGTV9NQVhfTEFOX0RFVl9VU0VSX05VTV07Cit9IGRwZm1fbGFuX2Rldl90OworCit0eXBlZGVmIHN0cnVjdCBfZHBmbV9jdF90aW1lb3V0X3QgeworICAgIGthbF91aW50MzIgICAgICAgICAgdmFsdWU7CisgICAga2FsX3VpbnQzMiAgICAgICAgICBjbnQ7Cit9IGRwZm1fY3RfdGltZW91dF90OworCit0eXBlZGVmIHN0cnVjdCBfZHBmbV9od19jbWRfcV90IHsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgaXNfc2VuZF9pbG07CisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgIHJlYWRfaWR4OworICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICB3cml0ZV9pZHg7CisgICAga2FsX2ludDE2ICAgICAgICAgICAgICAgICAgIGZpbHRlcl9pZFtEUEZNX01BWF9GSUxURVJfQ05UXTsKKyAgICBsaGlmX3VsX25hdF9pbmJhbmRfZGF0YV90ICAgY21kW0RQRk1fTUFYX0ZJTFRFUl9DTlRdOworfSBkcGZtX2h3X2NtZF9xX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9kcGZtX3QgeworICAgIGthbF9ib29sICAgICAgICAgICAgaXNfYWN0aXZhdGVkOworICAgIGthbF91aW50MzIgICAgICAgICAgdXNlcl9jbnQ7CisgICAga2FsX3VpbnQzMiAgICAgICAgICBjY21uaV9sYW5fbmV0aWZfaWQ7CisgICAga2FsX2ludDE2ICAgICAgICAgICBmaWx0ZXJfY21kX3JlYWRfaW5kZXg7CisgICAga2FsX2ludDE2ICAgICAgICAgICBmaWx0ZXJfY21kX3dyaXRlX2luZGV4OworICAgIGthbF9pbnQxNiAgICAgICAgICAgZmlsdGVyX2lkX2J5X2NtZF9pZFtEUEZNX01BWF9IV19DTURfQ05UXTsKKyAgICBrYWxfaW50MTYgICAgICAgICAgIGZpbHRlcl9pZF9ieV9pbmRleFtEUEZNX01BWF9IV19GSUxURVJfQ05UXTsKKyAgICBrYWxfdWludDMyICAgICAgICAgIGZpbHRlcl9jbnQ7CisgICAgZHBmbV9maWx0ZXJfdCAgICAgICBmaWx0ZXJzW0RQRk1fTUFYX0ZJTFRFUl9DTlRdOworICAgIGRwZm1fZmlsdGVyX2xpc3RfdCAgaGFzaF90YWJsZVsyXVtEUEZNX0hBU0hfVEFCTEVfU0laRV07IC8vIHVwbGluayAmIGRvd25saW5rCisgICAgZHBmbV9sYW5fZGV2X3QgICAgICBsYW5fZGV2W0RQRk1fTEFOX0RFVl9DTlRdOworICAgIGRwZm1fY3RfdGltZW91dF90ICAgY3RfdGltZW91dFtEUEZNX0NUX1BST1RPQ09MX0NOVF07CisgICAga2FsX2Jvb2wgICAgICAgICAgICBpc19maWx0ZXJfc2VuZF9od19jbWRbRFBGTV9NQVhfRklMVEVSX0NOVF07CisgICAgZHBmbV9od19jbWRfcV90ICAgICBod19jbWRfcTsKK30gZHBmbV90OworCisjaWZkZWYgX19URU1QX01ERFBfV0hfU1VQUE9SVF9fCit0eXBlZGVmIHN0cnVjdCBfZHBmbV9jdF9uYXRfdGFibGVfZW50cnlfdCB7CisgICAga2FsX3VpbnQzMiAgICAgIHByaXZhdGVfaXA7CisgICAga2FsX3VpbnQzMiAgICAgIHRhcmdldF9pcDsKKyAgICBrYWxfdWludDMyICAgICAgcHVibGljX2lwOworICAgIGthbF91aW50MTYgICAgICBwcml2YXRlX3BvcnQ7CisgICAga2FsX3VpbnQxNiAgICAgIHRhcmdldF9wb3J0OworICAgIGthbF91aW50MTYgICAgICBwdWJsaWNfcG9ydDsKKyAgICBrYWxfdWludDggICAgICAgcHJvdG9jb2w7CisgICAga2FsX3VpbnQ4ICAgICAgIHJlc2VydmVkOworICAgIGthbF91aW50MzIgICAgICB0aW1lc3RhbXA7CisgICAga2FsX2Jvb2wgICAgICAgIGRzdF9uYXQ7Cit9IGRwZm1fY3RfbmF0X3RhYmxlX2VudHJ5X3Q7CisjZWxzZSAKK3R5cGVkZWYgc3RydWN0IF9kcGZtX2N0X25hdF90YWJsZV9lbnRyeV90IHsKKyAgICBrYWxfdWludDMyICAgICAgcHJpdmF0ZV9pcDsKKyAgICBrYWxfdWludDE2ICAgICAgcHJpdmF0ZV9wb3J0OworICAgIGthbF91aW50MzIgICAgICB0YXJnZXRfaXA7CisgICAga2FsX3VpbnQxNiAgICAgIHRhcmdldF9wb3J0OworICAgIGthbF91aW50MzIgICAgICBwdWJsaWNfaXA7CisgICAga2FsX3VpbnQxNiAgICAgIHB1YmxpY19wb3J0OworICAgIGthbF91aW50OCAgICAgICBwcm90b2NvbDsKKyAgICBrYWxfdWludDggICAgICAgcmVzZXJ2ZWQ7CisgICAga2FsX3VpbnQzMiAgICAgIHRpbWVzdGFtcDsKKyAgICBrYWxfYm9vbCAgICAgICAgZHN0X25hdDsKK30gZHBmbV9jdF9uYXRfdGFibGVfZW50cnlfdDsKKyNlbmRpZiAKKworLyogSUxNIHN0cnVjdHVyZXMgZGVmaW5pdGlvbiBmb3IgRGF0YSBVc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX2RwZm1fZ2xvYmFsX2FsZXJ0X3QgeworICAgIGthbF91aW50MzIgICAgIHRyYW5zX2lkOworICAgIGthbF91aW50MzIgICAgIHN0YXR1czsgICAgICAgICAgICAgICAgIC8vdW51c2VkCisgICAga2FsX3VpbnQ2NCAgICAgbWVhc3VyZV9idWZmZXJfc2l6ZTsKKyAgICBrYWxfaW50OCAgICAgICBkcGZtX2lkOworICAgIGthbF91aW50OCAgICAgIHJlc2VydmVkWzNdOworfSBkcGZtX2dsb2JhbF9hbGVydF90OworCit0eXBlZGVmIHN0cnVjdCBfZHBmbV9pcXVvdGFfdCB7CisgICAga2FsX3VpbnQzMiAgICAgdHJhbnNfaWQ7CisgICAga2FsX3VpbnQzMiAgICAgc3RhdHVzOyAgICAgICAgICAgICAgICAgLy91bnVzZWQKKyAgICBrYWxfdWludDY0ICAgICBsaW1pdF9idWZmZXJfc2l6ZTsKKyAgICBrYWxfaW50OCAgICAgICBkcGZtX2lkOworICAgIGthbF91aW50OCAgICAgIHJlc2VydmVkWzNdOworfSBkcGZtX2lxdW90YV90OworCit0eXBlZGVmIHN0cnVjdCBfZHBmbV9kYXRhX3VzYWdlX2NtZF9zdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiBjbWQ7Cit9IGRwZm1fZGF0YV91c2FnZV9jbWRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfZHBmbV9hbGVydF9nbG9iYWxfYWxlcnRfaW5kX3N0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIGNtZDsKKyAgICBkcGZtX2dsb2JhbF9hbGVydF90IGdhOworfSBkcGZtX2FsZXJ0X2dsb2JhbF9hbGVydF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfZHBmbV9zZXRfaXF1b3RhX3JlcV9zdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiBjbWQ7CisgICAgZHBmbV9pcXVvdGFfdCBpcTsKK30gZHBmbV9zZXRfaXF1b3RhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF9kcGZtX2FsZXJ0X2lxdW90YV9pbmRfc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgY21kOworICAgIGRwZm1faXF1b3RhX3QgaXE7Cit9IGRwZm1fYWxlcnRfaXF1b3RhX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF9kcGZtX2RlbF9pcXVvdGFfcmVxX3N0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIGNtZDsKKyAgICBkcGZtX2lxdW90YV90IGlxOworfSBkcGZtX2RlbF9pcXVvdGFfcmVxX3N0cnVjdDsKKworI2lmZGVmIF9fVEVNUF9NRERQX1dIX1NVUFBPUlRfXwordHlwZWRlZiBzdHJ1Y3QgX2RwZm1fc2V0X2N0X3RpbWVvdXRfcmVxX3N0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIHVkcF90aW1lb3V0X3ZhbHVlOworICAgIGthbF91aW50MzIgdGNwX3RpbWVvdXRfdmFsdWU7CisgICAga2FsX3VpbnQ4ICByZXNlcnZlZFs0XTsKK30gZHBmbV9zZXRfY3RfdGltZW91dF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfZHBmbV9zZXRfY3RfdGltZW91dF9yc3Bfc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgdWRwX3RpbWVvdXRfdmFsdWU7CisgICAga2FsX3VpbnQzMiB0Y3BfdGltZW91dF92YWx1ZTsKKyAgICBrYWxfdWludDggIHJlc3VsdDsgLy9ib29sCisgICAga2FsX3VpbnQ4ICByZXNlcnZlZFszXTsKK30gZHBmbV9zZXRfY3RfdGltZW91dF9yc3Bfc3RydWN0OworCisjZWxzZSAKK3R5cGVkZWYgc3RydWN0IF9kcGZtX3NldF9jdF90aW1lb3V0X3JlcV9zdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiB0Y3BfdGltZW91dF92YWx1ZTsKKyAgICBrYWxfdWludDMyIHVkcF90aW1lb3V0X3ZhbHVlOworICAgIGthbF91aW50OCAgcmVzZXJ2ZWRbNF07Cit9IGRwZm1fc2V0X2N0X3RpbWVvdXRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2RwZm1fc2V0X2N0X3RpbWVvdXRfcnNwX3N0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIHRjcF90aW1lb3V0X3ZhbHVlOworICAgIGthbF91aW50MzIgdWRwX3RpbWVvdXRfdmFsdWU7CisgICAga2FsX3VpbnQ4ICByZXN1bHQ7IC8vYm9vbAorICAgIGthbF91aW50OCAgcmVzZXJ2ZWRbM107Cit9IGRwZm1fc2V0X2N0X3RpbWVvdXRfcnNwX3N0cnVjdDsKKworI2VuZGlmIAordHlwZWRlZiBzdHJ1Y3QgX2RwZm1fbGFuX2Rldl9kZWxfZmlsdGVyX2luZF9zdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2ludDE2IGZpbHRlcl9pZDsKKyAgICBrYWxfdWludDggcmVzZXJ2ZWRbMl07Cit9IGRwZm1fbGFuX2Rldl9kZWxfZmlsdGVyX2luZF9zdHJ1Y3Q7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2V0aGVyY29yZV9zdHJ1Y3QuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvZXRoZXJjb3JlX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDgzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2V0aGVyY29yZV9zdHJ1Y3QuaApAQCAtMCwwICsxLDc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0VUSEVSQ09SRV9TVFJVQ1RfSAorI2RlZmluZSBfRVRIRVJDT1JFX1NUUlVDVF9ICisKKworLyohCisgKiAgQGJyaWVmIGV0aGNfZGV2aWNlX2luc3RhbmNlX3QgZGVzY3JpYmUgaW5zdGFuY2Ugb2YgYSBnZW5lcmljIGV0aGVyIGRldmljZQorICovCit0eXBlZGVmIHN0cnVjdCBfZXRoY19kZXZpY2VfaW5zdGFuY2UgeworICAgIC8qIQorICAgICAqICBAYnJpZWYgaW5zdGFuY2UgaWQgb2YgdGhpcyBkZXZpY2UKKyAgICAgKi8KKyAgICBrYWxfdWludDggICBldGhfaWQ7Cit9IGV0aGNfZGV2aWNlX2luc3RhbmNlX3Q7CisKKy8qIQorICogQGJyaWVmIGV0aGNfbGlua19yZXFfdHlwZV9lIGxpbmsgcmVxdWVzdCB0eXBlCisgKi8KK3R5cGVkZWYgZW51bSBfZXRoY19saW5rX3JlcV90eXBlX2UgeworICAgIEVUSENfTElOS19SRVFfVFlQRV9OT1JNQUwsCisgICAgRVRIQ19MSU5LX1JFUV9UWVBFX0RQRk0sCit9IGV0aGNfbGlua19yZXFfdHlwZV9lOworCisvKiEKKyAqICBAYnJpZWYgZXRoY19kZXZpY2VfbGlua19tc2dfdCBkZXNjcmliZSBsaW5rIG1lc3NhZ2UgdXNlZCB0byBub3RpZnkgbGluayB1cAorICogICAgICAgICBhbmQgdXAgdG8gZXRoZXIgZGV2aWNlCisgKi8KK3R5cGVkZWYgc3RydWN0IF9ldGhjX2RldmljZV9saW5rX21zZyB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIGluc3RhbmNlIG9mIGV0aGVyIGRldmljZQorICAgICAqLworICAgIGV0aGNfZGV2aWNlX2luc3RhbmNlX3QqIGluc3RhbmNlOworICAgIGV0aGNfbGlua19yZXFfdHlwZV9lIHJlcV90eXBlOworfSBldGhjX2RldmljZV9saW5rX21zZ190OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBESEwgbG9nZ2luZyBzdHJ1Y3R1cmUKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIGV0aGNfZGV2aWNlX2xpbmtfbXNnX3QgZXRoZXJjb3JlX2xpbmtfdXBfcmVxX3N0cnVjdDsKK3R5cGVkZWYgZXRoY19kZXZpY2VfbGlua19tc2dfdCBldGhlcmNvcmVfbGlua19kb3duX3JlcV9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBfRVRIRVJDT1JFX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2hpZl9lc2xfY29tbW9uLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2hpZl9lc2xfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmZjU3MQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvaGlmX2VzbF9jb21tb24uaApAQCAtMCwwICsxLDc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgIGhpZl9lc2xfY29tbW9uLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgVU1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICAgVGhpcyBmaWxlIGludGVuZHMgZm9yIEVTTCBjb21tb24gZGVmaW5pdGlvbgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0hJRl9FU0xfQ09NTU9OX0hfCisjZGVmaW5lIF9ISUZfRVNMX0NPTU1PTl9IXworCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKworI2RlZmluZSBkZWZhdWx0X2NjbW5pX25ldGlmIDB4MDAKKyNkZWZpbmUgZGVmYXVsdF9tYmltX25ldGlmICAweDIwMAorI2RlZmluZSBkZWZhdWx0X3JuZGlzX25ldGlmIDB4MTAwCisjZGVmaW5lIGRlZmF1bHRfZWNtX25ldGlmICAgMHgxMDAKKwordHlwZWRlZiBzdHJ1Y3QgX2hpZl9lc2xfbmV0aWZfcGFybSB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIG5ldGlmX2lkOworfSBoaWZfZXNsX25ldGlmX3Bhcm07CisKKyNlbmRpZiAvKiBfSElGX0VTTF9DT01NT05fSF8gKi8KKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9oaWZfaW9yLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2hpZl9pb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTQ5YmI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9oaWZfaW9yLmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qIQorICogIEBmaWxlIGhpZl9pb3IuaAorICogIEBhdXRob3IgUm9nZXIgSHVhbmcgPGNoYW9taW4uaGF1bmdAbWVkaWF0ZWsuY29tPgorICogIEB2ZXJzaW9uIDEuMAorICogIEBzZWN0aW9uIExJQ0VOU0UKKyAqCisgKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisgKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyAqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyAqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyAqCisgKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisgKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyAqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorICogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorICogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisgKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorICogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisgKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisgKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisgKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorICoKKyAqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisgKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisgKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyAqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisgKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisgKgorICogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisgKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisgKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisgKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisgKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisgKgorICogIEBzZWN0aW9uIERFU0NSSVBUSU9OCisgKiAgVGhpcyBmaWxlIHByb3ZpZGVzIGdlbmVyaWMgSElGIElPIFJlcXVlc3QgaW50ZXJmYWNlIG9mIGFsbCBISUYgbW9kdWxlCisgKi8KKworI2lmbmRlZiBfX0hJRl9JT1JfSF9fCisjZGVmaW5lIF9fSElGX0lPUl9IX18KKworI2luY2x1ZGUgInFtdV9ibS5oIgorCisvKiEKKyAqICBAYnJpZWYgaGlmX2lvX3JlcXVlc3RfdCBpcyBhIHR5cGVkZWYgb2Ygc3RydWN0IF9oaWZfaW9fcmVxdWVzdAorICovCit0eXBlZGVmIHN0cnVjdCBfaGlmX2lvX3JlcXVlc3QgaGlmX2lvX3JlcXVlc3RfdDsKKy8qIQorICogIEBicmllZiBzdHJ1Y3QgX2hpZl9pb19yZXF1ZXN0IGRlc2NyaWJlIGlvIHJlcXVlc3QgdXNlZCB0byBjb21tdW5pY2F0ZQorICogICAgICAgICBiZXR3ZWVuIGhpZiBtb2R1bGVzCisgKi8KK3N0cnVjdCBfaGlmX2lvX3JlcXVlc3QgeworICAgIC8qIQorICAgICAqICBAYnJpZWYgbmV4dCBpbyByZXF1ZXN0CisgICAgICovCisgICAgaGlmX2lvX3JlcXVlc3RfdCogICAgICAgbmV4dF9yZXF1ZXN0OworICAgIC8qIQorICAgICAqICBAYnJpZWYgcG9pbnRlciB0byBjdXJyZW50IGdwZCBvZiB0aGlzIGlvIHJlcXVlc3QKKyAgICAgKi8KKyAgICBxYm1fZ3BkKiAgICAgICAgICAgICAgICBmaXJzdF9ncGQ7CisgICAgLyohCisgICAgICogIEBicmllZiBwb2ludGVyIHRvIGxhc3QgZ3BkIG9mIHRoaXMgaW8gcmVxdWVzdAorICAgICAqLworICAgIHFibV9ncGQqICAgICAgICAgICAgICAgIGxhc3RfZ3BkOworfTsKKworCisvKiEKKyAqICBAYnJpZWYgaGlmX2lvX3JlcXVlc3RfbGlzdF90IGlzIGEgdHlwZWRlZiBvZiBzdHJ1Y3QgX2hpZl9pb19yZXF1ZXN0X2xpc3QKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2hpZl9pb19yZXF1ZXN0X2xpc3QgaGlmX2lvX3JlcXVlc3RfbGlzdF90OworLyohCisgKiAgQGJyaWVmIHN0cnVjdCBfaGlmX2lvX3JlcXVlc3RfbGlzdCBkZXNjcmliZSBpbyByZXF1ZXN0IGxpc3QgdXNlZCB0bworICogICAgICAgICAgICAgICAgc3RvcmUgaW8gcmVxdWVzdAorICovCitzdHJ1Y3QgX2hpZl9pb19yZXF1ZXN0X2xpc3QgeworICAgIC8qIQorICAgICAqICBAYnJpZWYgcG9pbnRlciB0byBoZWFkIG9mIHRoaXMgaW8gcmVxdWVzdCBsaXN0CisgICAgICovCisgICAgaGlmX2lvX3JlcXVlc3RfdCogICAgICAgaGVhZDsKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIHBvaW50ZXIgdG8gdGFpbCBvZiB0aGlzIGlvIHJlcXVlc3QgbGlzdAorICAgICAqLworICAgIGhpZl9pb19yZXF1ZXN0X3QqICAgICAgIHRhaWw7Cit9OworCisKKyNkZWZpbmUgSElGX0xJU1RfSU5JVChfbGlzdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKF9saXN0KS0+aGVhZCA9IChfbGlzdCktPnRhaWwgPSBOVUxMKQorCisKKyNkZWZpbmUgSElGX0xJU1RfSVNfRU1QVFkoX2xpc3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKF9saXN0KS0+aGVhZCA9PSBOVUxMKQorCisKKyNkZWZpbmUgSElGX0xJU1RfR0VUX0hFQUQoX2xpc3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKF9saXN0KS0+aGVhZCkKKworCisjZGVmaW5lIEhJRl9MSVNUX0dFVF9UQUlMKF9saXN0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChfbGlzdCktPnRhaWwpCisKKworI2RlZmluZSBISUZfTElTVF9QT1BfSEVBRChfbGlzdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoX2xpc3QpLT5oZWFkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB2b2lkKiBuZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBuZXh0ID0gKF9saXN0KS0+aGVhZC0+bmV4dF9yZXF1ZXN0OyAgICAgICAgICAgICAgICAgXAorICAgICAgICAoX2xpc3QpLT5oZWFkID0gbmV4dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAobmV4dCA9PSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKF9saXN0KS0+dGFpbCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworCisjZGVmaW5lIEhJRl9MSVNUX1BVU0hfVEFJTChfbGlzdCwgX2VudHJ5KSAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChfZW50cnkpLT5uZXh0X3JlcXVlc3QgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICgoX2xpc3QpLT50YWlsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAoX2xpc3QpLT50YWlsLT5uZXh0X3JlcXVlc3QgPSAoX2VudHJ5KTsgICAgICAgICBcCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAoX2xpc3QpLT5oZWFkID0gKF9lbnRyeSk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChfbGlzdCktPnRhaWwgPSAoX2VudHJ5KTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisjZW5kaWYgIC8vIF9fSElGX0lPUl9IX18KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvaXBjX2FwaS5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9pcGNfYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJhMzIzNwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvaXBjX2FwaS5oCkBAIC0wLDAgKzEsMTU0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGlwY19hcGkuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBUQVRBS0EKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBJUCBDb3JlIHB1YmxpYyBzdHJ1Y3R1cmUgYW5kIGludGVyZmFjZSBkZWZpbml0aW9uLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fSU5DX0lQQ19BUElfSAorI2RlZmluZSBfX0lOQ19JUENfQVBJX0gKKworI2luY2x1ZGUgImhpZl9pb3IuaCIKKyNpbmNsdWRlICJoaWZfbXdfbXNnaWQuaCIgLyo8IGV4cGVjdGVkIHRvIHJlbW92ZSBpdCB3aGVuIG90aGVyIG90aGVyIG1vZHVsZSBpbmNsdWRlIHRoZSBoZWFkZXIgZmlsZSAqLworI2luY2x1ZGUgImxoaWZfaWYuaCIKKworI2luY2x1ZGUgImlwY19kZWZzX3B1YmxpYy5oIgorI2luY2x1ZGUgImlwY19lbnVtcy5oIgorI2luY2x1ZGUgImlwY19zdHJ1Y3QuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERhdGEgc3RydWN0dXJlIGRlZmluaXRpb24uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3QgX2lwY19wa3RfZGVzX3QgeworICAgIGlwY19wa3RfZGVzX3R5cGVfZSAgICAgICAgICBkZXNfdHlwZTsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAqcGFja2V0OworICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICBwYWNrZXRfbGVuOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHFibV9ncGQgICAgICAgICAgICAqZ3BkOworICAgICAgICAgICAgcWJtX2dwZCAgICAgICAgICAgICpiZDsKKyAgICAgICAgfTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVwY21fZGlkICAgICAgICAgICAqZGlkOworICAgICAgICAgICAga2FsX3VpbnQzMiAgICAgICAgICBwa3Rfc3RhcnRfaWR4OworICAgICAgICAgICAga2FsX3VpbnQxNiAgICAgICAgICBwc247CisgICAgICAgIH07CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBsaGlmX21ldGFfdGJsX3QgICAgKm1ldGE7CisgICAgICAgIH07CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB2b2lkICAgICAgICAgICAgICAgKmlwZl9tZXRhOworICAgICAgICB9OworICAgIH07CisgICAgaXBjX2ZpbHRlcl90ICAgICAgICAgICAgICAqKm1hdGNoZWRfZmlsdGVyOworICAgIGlwY19maWx0ZXJfaW5mb190ICAgICAgICAgICpmaWx0ZXJfaW5mbzsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgaXNfcGFja2V0X2luZm87ICAgICAvKio8IEtBTF9UUlVFIDogQWxyZWFkeSBwYXJzZWQgcGFja2V0X2luZm8sIEtBTF9GQUxTRSA6IE5vdCBwYXJzZWQgcGFja2V0X2luZm8geWV0ICovCisgICAgaXBjX3BhY2tldF9pbmZvX3QgICAgICAgICAgKnBhY2tldF9pbmZvOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBpcF90eXBlOworfSBpcGNfcGt0X2Rlc190OworCit0eXBlZGVmIHN0cnVjdCBfaXBjX3BrdF90IHsKKyAgICB1bmlvbiB7CisgICAgICAgIGthbF9ib29sICAgICAgICAgICAgaXNHUEQ7ICAgICAgLyoqPCBLQUxfVFJVRSA6IERlc2NyaWJlIEdQRCBsaXN0ICh3aXRoIGhlYWQvdGFpbCksIEtBTF9GQUxTRSA6IERlc2NyaWJlIHNpbmdsZSBkYXRhIGJ1ZmZlciAod2l0aCBwb2ludGVyL2xlbmd0aCkgKi8KKyAgICAgICAgaXBjX3BrdF9kZXNfdHlwZV9lICBidWZfdHlwZTsgICAvKio8IEJ1ZmZlciB0eXBlICovCisgICAgfTsKKworICAgIHVuaW9uIHsKKyAgICAgICAgLyogVXNlZCBpZiBidWZfdHlwZSA9PSBJUENfUEtUX0RFU19UWVBFX0dQRCAqLworICAgICAgICAvKiBVc2VkIGlmIGlzR1BEID09IEtBTF9GQUxTRSAqLworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgcWJtX2dwZCAgICAqaGVhZDsgICAgICAvKio8IEhlYWQgb2YgR1BEIExpc3QuIFVzZWQgaWYgaXNHUEQgPT0gS0FMX1RSVUUgKi8KKyAgICAgICAgICAgIHFibV9ncGQgICAgKnRhaWw7ICAgICAgLyoqPCBUYWlsIG9mIEdQRCBMaXN0LiBVc2VkIGlmIGlzR1BEID09IEtBTF9UUlVFICovCisgICAgICAgIH07CisKKyAgICAgICAgLyogVXNlZCBpZiBidWZfdHlwZSA9PSBJUENfUEtUX0RFU19UWVBFX0RJRCAqLworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdXBjbV9kaWQgICAqZGlkX2hlYWQ7ICAgICAgLyoqPCBIZWFkIG9mIERJRCBMaXN0LiBVc2VkIGlmIGJ1Zl90eXBlID09IElQQ19QS1RfREVTX1RZUEVfRElEICovCisgICAgICAgICAgICB1cGNtX2RpZCAgICpkaWRfdGFpbDsgICAgICAvKio8IFRhaWwgb2YgRElEIExpc3QuIFVzZWQgaWYgYnVmX3R5cGUgPT0gSVBDX1BLVF9ERVNfVFlQRV9ESUQgKi8KKyAgICAgICAgfTsKKworICAgICAgICAvKiBVc2VkIGlmIGJ1Zl90eXBlID09IElQQ19QS1RfREVTX1RZUEVfTUVUQSAqLworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAga2FsX3VpbnQzMiAgIHN0YXJ0X2lkeDsgICAgLyoqPCBTdGFydCBvZiBtZXRhIExpc3QuIFVzZWQgaWYgYnVmX3R5cGUgPT0gSVBDX1BLVF9ERVNfVFlQRV9NRVRBICovCisgICAgICAgICAgICBrYWxfdWludDMyICAgZW5kX2lkeDsgICAgICAvKio8IEVuZCBvZiBESUQgTGlzdC4gVXNlZCBpZiBidWZfdHlwZSA9PSBJUENfUEtUX0RFU19UWVBFX01FVEEgKi8KKyAgICAgICAgfTsKKyAgICB9OworCisgICAgLyogVXNlZCBpZiBidWZfdHlwZSA9PSBJUENfUEtUX0RFU19UWVBFX05PX0RFU0MgKi8KKyAgICAvKiBVc2VkIGlmIGlzR1BEID09IEtBTF9GQUxTRSAqLworICAgIGthbF91aW50OCAgICpkYXRhOyAgICAgIC8qKjwgRGF0YSBwb2ludGVyIG9mIGJ1ZmZlci4gVXNlZCBpZiBpc0dQRCA9PSBLQUxfRkFMU0UgKi8KKyAgICBrYWxfdWludDMyICBkYXRhX2xlbjsgICAvKio8IERhdGEgcG9pbnRlciBvZiBidWZmZXIuIFVzZWQgaWYgaXNHUEQgPT0gS0FMX0ZBTFNFICovCisKK30gaXBjX3BrdF90OworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEhlbHBlciBNYWNyby4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogSVB2NC9JUHY2IGNvbW1vbi4KKyAqLworI2RlZmluZSBJUENfTkVfR0VUXzFCKF9idWYpIFwKKyAgICAgICAgICAgICgoa2FsX3VpbnQ4KSooKGthbF91aW50OCAqKShfYnVmKSkpCisjZGVmaW5lIElQQ19ORV9TRVRfMUIoX2J1ZiwgX3ZhbHVlKSBcCisgICAgICAgICAgICBkbyB7IFwKKyAgICAgICAgICAgICAgICAqKChrYWxfdWludDggKikoX2J1ZikpID0gKGthbF91aW50OCkoX3ZhbHVlKTsgXAorICAgICAgICAgICAgfSB3aGlsZSAoMCkKKworI2lmbmRlZiBJUENfT05fQklHX0VORElBTl9QTEFURk9STSAvKiBsaXR0bGUtZW5kaWFuIHBsYXRmb3JtICovCisgICAgI2RlZmluZSBJUENfTkVfR0VUXzJCKF9idWYpIFwKKyAgICAgICAgICAgICggKCgoa2FsX3VpbnQxNikqKChrYWxfdWludDggKikoX2J1ZikgKyAwKSkgPDwgOCkgfCBcCisgICAgICAgICAgICAgICgoKGthbF91aW50MTYpKigoa2FsX3VpbnQ4ICopKF9idWYpICsgMSkpIDw8IDApICkKKworICAgICNkZWZpbmUgSVBDX05FX1NFVF8yQihfYnVmLCBfdmFsdWUpIFwKKyAgICAgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgICAgICooKGthbF91aW50OCAqKShfYnVmKSArIDApID0gKGthbF91aW50OCkoKF92YWx1ZSkgPj4gOCk7IFwKKyAgICAgICAgICAgICAgICAqKChrYWxfdWludDggKikoX2J1ZikgKyAxKSA9IChrYWxfdWludDgpKChfdmFsdWUpID4+IDApOyBcCisgICAgICAgICAgICB9IHdoaWxlICgwKQorCisgICAgI2RlZmluZSBJUENfTkVfR0VUXzRCKF9idWYpIFwKKyAgICAgICAgICAgICggKCgoa2FsX3VpbnQzMikqKChrYWxfdWludDggKikoX2J1ZikgKyAwKSkgPDwgMjQpIHwgXAorICAgICAgICAgICAgICAoKChrYWxfdWludDMyKSooKGthbF91aW50OCAqKShfYnVmKSArIDEpKSA8PCAxNikgfCBcCisgICAgICAgICAgICAgICgoKGthbF91aW50MzIpKigoa2FsX3VpbnQ4ICopKF9idWYpICsgMikpIDw8IDgpIHwgXAorICAgICAgICAgICAgICAoKChrYWxfdWludDMyKSooKGthbF91aW50OCAqKShfYnVmKSArIDMpKSA8PCAwKSApCisKKyAgICAjZGVmaW5lIElQQ19ORV9TRVRfNEIoX2J1ZiwgX3ZhbHVlKSBcCisgICAgICAgICAgICBkbyB7IFwKKyAgICAgICAgICAgICAgICAqKChrYWxfdWludDggKikoX2J1ZikgKyAwKSA9IChrYWxfdWludDgpKChfdmFsdWUpID4+IDI0KTsgXAorICAgICAgICAgICAgICAgICooKGthbF91aW50OCAqKShfYnVmKSArIDEpID0gKGthbF91aW50OCkoKF92YWx1ZSkgPj4gMTYpOyBcCisgICAgICAgICAgICAgICAgKigoa2FsX3VpbnQ4ICopKF9idWYpICsgMikgPSAoa2FsX3VpbnQ4KSgoX3ZhbHVlKSA+PiA4KTsgXAorICAgICAgICAgICAgICAgICooKGthbF91aW50OCAqKShfYnVmKSArIDMpID0gKGthbF91aW50OCkoKF92YWx1ZSkgPj4gMCk7IFwKKyAgICAgICAgICAgIH0gd2hpbGUgKDApCisKKyAgICAjZGVmaW5lIElQQ19IMk5fMkIoX3ZhbHVlKSBcCisgICAgICAgICAgICAoKChrYWxfdWludDE2KShfdmFsdWUpID4+IDgpIHwgKCgoa2FsX3VpbnQxNikoX3ZhbHVlKSAmIDB4ZmYpIDw8IDgpKQorCisjZWxzZSAvKiBiaWctZW5kaWFuIHBsYXRmb3JtICovCisgICAgI2RlZmluZSBJUENfTkVfR0VUXzJCKF9idWYpIFwKKyAgICAgICAgKCAoKChrYWxfdWludDE2KSooKGthbF91aW50OCAqKShfYnVmKSArIDApKSA8PCAwKSB8IFwKKyAgICAgICAgICAoKChrYWxfdWludDE2KSooKGthbF91aW50OCAqKShfYnVmKSArIDEpKSA8PCA4KSApCisKKyAgICAjZGVmaW5lIElQQ19ORV9TRVRfMkIoX2J1ZiwgX3ZhbHVlKSBcCisgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgKigoa2FsX3VpbnQ4ICopKF9idWYpICsgMCkgPSAoa2FsX3VpbnQ4KSgoX3ZhbHVlKSA+PiAwKTsgXAorICAgICAgICAgICAgKigoa2FsX3VpbnQ4ICopKF9idWYpICsgMSkgPSAoa2FsX3VpbnQ4KSgoX3ZhbHVlKSA+PiA4KTsgXAorICAgICAgICB9IHdoaWxlICgwKQorCisgICAgI2RlZmluZSBJUENfTkVfR0VUXzRCKF9idWYpIFwKKyAgICAgICAgKCAoKChrYWxfdWludDMyKSooKGthbF91aW50OCAqKShfYnVmKSArIDApKSA8PCAwKSB8IFwKKyAgICAgICAgICAoKChrYWxfdWludDMyKSooKGthbF91aW50OCAqKShfYnVmKSArIDEpKSA8PCA4KSB8IFwKKyAgICAgICAgICAoKChrYWxfdWludDMyKSooKGthbF91aW50OCAqKShfYnVmKSArIDIpKSA8PCAxNikgfCBcCisgICAgICAgICAgKCgoa2FsX3VpbnQzMikqKChrYWxfdWludDggKikoX2J1ZikgKyAzKSkgPDwgMjQpICkKKworICAgICNkZWZpbmUgSVBDX05FX1NFVF80QihfYnVmLCBfdmFsdWUpIFwKKyAgICAgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgICAgICooKGthbF91aW50OCAqKShfYnVmKSArIDApID0gKGthbF91aW50OCkoKF92YWx1ZSkgPj4gMCk7IFwKKyAgICAgICAgICAgICAgICAqKChrYWxfdWludDggKikoX2J1ZikgKyAxKSA9IChrYWxfdWludDgpKChfdmFsdWUpID4+IDgpOyBcCisgICAgICAgICAgICAgICAgKigoa2FsX3VpbnQ4ICopKF9idWYpICsgMikgPSAoa2FsX3VpbnQ4KSgoX3ZhbHVlKSA+PiAxNik7IFwKKyAgICAgICAgICAgICAgICAqKChrYWxfdWludDggKikoX2J1ZikgKyAzKSA9IChrYWxfdWludDgpKChfdmFsdWUpID4+IDI0KTsgXAorICAgICAgICAgICAgfSB3aGlsZSAoMCkKKworICAgICNkZWZpbmUgSVBDX0gyTl8yQihfdmFsdWUpIFwKKyAgICAgICAgICAgICgoa2FsX3VpbnQxNikoX3ZhbHVlKSkKKyNlbmRpZgorCisjZGVmaW5lIElQQ19IRFJfSVNfVjQoX2lwX2hkcikgXAorICAgICAgICAoMHg0MCA9PSAoKigoa2FsX3VpbnQ4ICopKF9pcF9oZHIpKSAmIDB4ZjApKQorCisjZGVmaW5lIElQQ19IRFJfSVNfVjYoX2lwX2hkcikgXAorICAgICAgICAoMHg2MCA9PSAoKigoa2FsX3VpbnQ4ICopKF9pcF9oZHIpKSAmIDB4ZjApKQorCisKKyNkZWZpbmUgSVBDX0NQX0FERFIoX2RzdCwgX3NyYywgX2xlbikgXAorICAgICAgICBrYWxfbWVtX2NweSgoX2RzdCksIChfc3JjKSwgKF9sZW4pKQorCisjZGVmaW5lIElQQ19FUV9BRERSKF9hZGRyMSwgX2FkZHIyLCBfbGVuKSBcCisgICAgICAgICgwID09IGthbF9tZW1fY21wKChfYWRkcjEpLCAoX2FkZHIyKSwgKF9sZW4pKSkKKworI2RlZmluZSBJUENfRVFfMkJZVEUoX3B0cjEsIF9wdHIyKSBcCisgICAgICAgICggICAoKCooa2FsX3VpbnQ4ICopKF9wdHIxKSkgPT0gKCooKGthbF91aW50OCAqKShfcHRyMikpKSkgJiYgXAorICAgICAgICAgICAgKCgqKChrYWxfdWludDggKikoX3B0cjEpICsgMSkpID09ICgqKCgoa2FsX3VpbnQ4ICopKF9wdHIyKSArIDEpKSkpICAgICkKKworI2RlZmluZSBJUENfRVFfMUJZVEUoX3B0cjEsIF9wdHIyKSBcCisgICAgICAgICgoKihrYWxfdWludDggKikoX3B0cjEpKSA9PSAoKigoa2FsX3VpbnQ4ICopKF9wdHIyKSkpKQorCisKKy8qCisgKiBJQU5BIElQIFByb3RvY29sIE51bWJlcnMuCisgKiBSZWY6IGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvcHJvdG9jb2wtbnVtYmVycy9wcm90b2NvbC1udW1iZXJzLnhtbAorICovCisjZGVmaW5lIElQQ19IRFJfUFJPVF9JUFY2X0hPUCAgICAgICAgICAgMCAvKiBJUHY2IEhvcC1ieS1Ib3AgT3B0aW9uICovCisjZGVmaW5lIElQQ19IRFJfUFJPVF9JQ01QICAgICAgICAgICAgICAgMSAvKiBJbnRlcm5ldCBDb250cm9sIE1lc3NhZ2UgKi8KKyNkZWZpbmUgSVBDX0hEUl9QUk9UX0lHTVAgICAgICAgICAgICAgICAyIC8qIEludGVybmV0IEdyb3VwIE1lc3NhZ2UgKi8KKyNkZWZpbmUgSVBDX0hEUl9QUk9UX0lQVjRfRU5DICAgICAgICAgICA0IC8qIElQdjQgZW5jYXBzdWxhdGlvbiAqLworI2RlZmluZSBJUENfSERSX1BST1RfVENQICAgICAgICAgICAgICAgIDYgLyogVHJhbnNtaXNzaW9uIENvbnRyb2wgKi8KKyNkZWZpbmUgSVBDX0hEUl9QUk9UX1VEUCAgICAgICAgICAgICAgICAxNyAvKiBVc2VyIERhdGFncmFtICovCisjZGVmaW5lIElQQ19IRFJfUFJPVF9JUFY2X0VOQyAgICAgICAgICAgNDEgLyogSVB2NiBlbmNhcHN1bGF0aW9uICovCisjZGVmaW5lIElQQ19IRFJfUFJPVF9JUFY2X1JPVVRFICAgICAgICAgNDMgLyogUm91dGluZyBIZWFkZXIgZm9yIElQdjYgKi8KKyNkZWZpbmUgSVBDX0hEUl9QUk9UX0lQVjZfRlJBRyAgICAgICAgICA0NCAvKiBGcmFnbWVudCBIZWFkZXIgZm9yIElQdjYgKi8KKyNkZWZpbmUgSVBDX0hEUl9QUk9UX0VTUCAgICAgICAgICAgICAgICA1MCAvKiBFbmNhcCBTZWN1cml0eSBQYXlsb2FkICovCisjZGVmaW5lIElQQ19IRFJfUFJPVF9BSCAgICAgICAgICAgICAgICAgNTEgLyogQXV0aGVudGljYXRpb24gSGVhZGVyICovCisjZGVmaW5lIElQQ19IRFJfUFJPVF9JQ01QVjYgICAgICAgICAgICAgNTggLyogSUNNUCBmb3IgSVB2NiAqLworI2RlZmluZSBJUENfSERSX1BST1RfSVBWNl9OT05FWFQgICAgICAgIDU5IC8qIE5vIE5leHQgSGVhZGVyIGZvciBJUHY2ICovCisjZGVmaW5lIElQQ19IRFJfUFJPVF9JUFY2X0RFU1QgICAgICAgICAgNjAgLyogRGVzdGluYXRpb24gT3B0aW9ucyBmb3IgSVB2NiAqLworCisvKgorICogSVB2NC4KKyAqLworI2RlZmluZSBJUENfSERSX1Y0X0FERFJfU0laRSAgICAgICAgKDQpCisjZGVmaW5lIElQQ19IRFJfVjRfSEVBREVSX1NJWkUgICAgICAoMjApCisKKyNkZWZpbmUgSVBDX0hEUl9WNF9HRVRfSUhMKF9pcF9oZWFkZXIpIFwKKyAgICAgICAgKChJUENfTkVfR0VUXzFCKF9pcF9oZWFkZXIpICYgMHgwZikgPDwgMikKKworI2RlZmluZSBJUENfSERSX1Y0X1NFVF9JSEwoX2lwX2hlYWRlciwgX2lobCkgXAorICAgICAgICBkbyB7IFwKKyAgICAgICAgICAgIElQQ19ORV9TRVRfMUIoX2lwX2hlYWRlciwgKElQQ19ORV9HRVRfMUIoX2lwX2hlYWRlcikgJiAweEYwKSB8ICgoKGthbF91aW50OCkoX2lobCk+PjIpICYgMHgwRikpOyBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKy8qCisgKiAyMDE2LzAyLzI0IFBldGVyLkhzdQorICogVG8gc3VwcG9ydCBFQ04sIHdlIGV4dGVuZCBleGlzdGluZyBEU0NQIEFQSSB0byBjb3ZlciBFQ04gZHVlIHRvIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgKi8KKworLyogR2V0L1NldCBib3RoIERTQ1AgJiBFQ04gKHRvdGFsIDggYml0cykgKi8KKyNkZWZpbmUgSVBDX0hEUl9WNF9HRVRfRFNDUChfaXBfaGVhZGVyKSBcCisgICAgICAgIChJUENfTkVfR0VUXzFCKCgoa2FsX3VpbnQ4KikoX2lwX2hlYWRlcikpICsgMSkpCisKKyNkZWZpbmUgSVBDX0hEUl9WNF9TRVRfRFNDUChfaXBfaGVhZGVyLCBfZHNjcF9lY24pIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICBJUENfTkVfU0VUXzFCKCgoa2FsX3VpbnQ4KikoX2lwX2hlYWRlcikpICsgMSwgSVBDX05FX0dFVF8xQigoKGthbF91aW50OCopKF9pcF9oZWFkZXIpKSArIDEpIHwgKGthbF91aW50OCkoX2RzY3BfZWNuKSk7IFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBJUENfSERSX1Y0X1JFU0VUX1ZFUl9JSExfRFNDUF9FQ04oX2lwX2hlYWRlcikgXAorICAgICAgICBkbyB7IFwKKyAgICAgICAgICAgIElQQ19ORV9TRVRfMUIoX2lwX2hlYWRlciwgMHg0NSk7IFwKKyAgICAgICAgICAgIElQQ19ORV9TRVRfMUIoKChrYWxfdWludDggKikoX2lwX2hlYWRlcikpICsgMSwgMHgwMCk7IFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBJUENfSERSX1Y0X0dFVF9UT1RBTF9MRU5HVEgoX2lwX2hlYWRlcikgXAorICAgICAgICBJUENfTkVfR0VUXzJCKCgoa2FsX3VpbnQ4ICopKF9pcF9oZWFkZXIpKSArIDIpCisKKyNkZWZpbmUgSVBDX0hEUl9WNF9TRVRfVE9UQUxfTEVOR1RIKF9pcF9oZWFkZXIsIF9sZW5ndGgpIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICBJUENfTkVfU0VUXzJCKCgoa2FsX3VpbnQ4ICopKF9pcF9oZWFkZXIpKSArIDIsIF9sZW5ndGgpOyBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSVBDX0hEUl9WNF9HRVRfSURFTlRJVFkoX2lwX2hlYWRlcikgXAorICAgICAgICBJUENfTkVfR0VUXzJCKCgoa2FsX3VpbnQ4ICopKF9pcF9oZWFkZXIpKSArIDQpCisKKyNkZWZpbmUgSVBDX0hEUl9WNF9TRVRfSURFTlRJVFkoX2lwX2hlYWRlciwgX2lkKSBcCisgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgSVBDX05FX1NFVF8yQigoKGthbF91aW50OCAqKShfaXBfaGVhZGVyKSkgKyA0LCBfaWQpOyBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSVBDX0hEUl9WNF9HRVRfRkxBR1MoX2lwX2hlYWRlcikgXAorICAgICAgICAoKCooKChrYWxfdWludDggKikoX2lwX2hlYWRlcikgKyA2KSkpID4+IDUpCisKKyNkZWZpbmUgSVBDX0hEUl9WNF9TRVRfRkxBR1MoX2lwX2hlYWRlciwgX2ZsYWdzKSBcCisgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgSVBDX05FX1NFVF8xQigoKGthbF91aW50OCopKF9pcF9oZWFkZXIpKSArIDYsIChJUENfTkVfR0VUXzFCKCgoa2FsX3VpbnQ4KikoX2lwX2hlYWRlcikpICsgNikgJiAweDFGKSB8ICgoa2FsX3VpbnQ4KShfZmxhZ3MpIDw8IDUpKTtcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSVBDX0hEUl9WNF9JU19NRihfaXBfaGVhZGVyKSBcCisgICAgICAgIChJUENfSERSX1Y0X0dFVF9GTEFHUyhfaXBfaGVhZGVyKSAmIDB4MDQpCisKKyNkZWZpbmUgSVBDX0hEUl9WNF9HRVRfRlJBR19PRkZTRVQoX2lwX2hlYWRlcikgXAorICAgICAgICAoSVBDX05FX0dFVF8yQigoKGthbF91aW50OCAqKShfaXBfaGVhZGVyKSkgKyA2KSAmIDB4MWZmZikKKworI2RlZmluZSBJUENfSERSX1Y0X1NFVF9GUkFHX09GRlNFVChfaXBfaGVhZGVyLCBfb2Zmc2V0KSBcCisgICAgICAgIGRvIHsgXAorICAgICAgICBJUENfTkVfU0VUXzJCKCgoKGthbF91aW50OCAqKShfaXBfaGVhZGVyKSkgKyA2KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAoKElQQ19ORV9HRVRfMkIoKChrYWxfdWludDggKikoX2lwX2hlYWRlcikpICsgNikgJiAweGUwMDApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICgoa2FsX3VpbnQxNikoX29mZnNldCkgJiAweDFmZmYpKSApOyBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSVBDX0hEUl9WNF9JU19GUkFHKF9pcF9oZWFkZXIpIFwKKyAgICAgICAgKElQQ19IRFJfVjRfSVNfTUYoX2lwX2hlYWRlcikgfHwgKDAgIT0gSVBDX0hEUl9WNF9HRVRfRlJBR19PRkZTRVQoX2lwX2hlYWRlcikpKQorCisjZGVmaW5lIElQQ19IRFJfVjRfR0VUX1RUTChfaXBfaGVhZGVyKSBcCisgICAgICAgIElQQ19ORV9HRVRfMUIoKChrYWxfdWludDggKikoX2lwX2hlYWRlcikpICsgOCkKKworI2RlZmluZSBJUENfSERSX1Y0X1NFVF9UVEwoX2lwX2hlYWRlciwgX3R0bCkgXAorICAgICAgICBkbyB7IFwKKyAgICAgICAgICAgIElQQ19ORV9TRVRfMUIoKChrYWxfdWludDggKikoX2lwX2hlYWRlcikpICsgOCwgKGthbF91aW50OCkoX3R0bCkpOyBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSVBDX0hEUl9WNF9HRVRfUFJPVE9DT0woX2lwX2hlYWRlcikgXAorICAgICAgICBJUENfTkVfR0VUXzFCKCgoa2FsX3VpbnQ4ICopKF9pcF9oZWFkZXIpKSArIDkpCisKKyNkZWZpbmUgSVBDX0hEUl9WNF9TRVRfUFJPVE9DT0woX2lwX2hlYWRlciwgX3Byb3RvY29sKSBcCisgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgSVBDX05FX1NFVF8xQigoKGthbF91aW50OCAqKShfaXBfaGVhZGVyKSkgKyA5LCAoa2FsX3VpbnQ4KShfcHJvdG9jb2wpKTsgXAorICAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIElQQ19IRFJfVjRfRVFfUFJPVE9DT0woX2lwX2hlYWRlciwgX3Byb3RvY29sKSAgIFwKKyAgICAgICAgKElQQ19IRFJfVjRfR0VUX1BST1RPQ09MKF9pcF9oZWFkZXIpID09IChfcHJvdG9jb2wpKQorCisjZGVmaW5lIElQQ19IRFJfVjRfR0VUX0hFQURFUl9DSEVDS1NVTShfaXBfaGVhZGVyKSBcCisgICAgICAgIElQQ19ORV9HRVRfMkIoKGthbF91aW50OCAqKShfaXBfaGVhZGVyKSArIDEwKQorCisjZGVmaW5lIElQQ19IRFJfVjRfU0VUX0hFQURFUl9DSEVDS1NVTShfaXBfaGVhZGVyLCBfY2hlY2tzdW0pIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICBJUENfTkVfU0VUXzJCKChrYWxfdWludDggKikoX2lwX2hlYWRlcikgKyAxMCwgX2NoZWNrc3VtKTsgXAorICAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIElQQ19IRFJfVjRfR0VUX1NSQ19BRERSKF9pcF9oZWFkZXIpIFwKKyAgICAgICAgKChrYWxfdWludDggKikoX2lwX2hlYWRlcikgKyAxMikKKworI2RlZmluZSBJUENfSERSX1Y0X1NFVF9TUkNfQUREUihfaXBfaGVhZGVyLCBfc3JjX2lwX2FkZHIpIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICBJUENfQ1BfVjRfQUREUihJUENfSERSX1Y0X0dFVF9TUkNfQUREUihfaXBfaGVhZGVyKSwgX3NyY19pcF9hZGRyKTsgXAorICAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIElQQ19IRFJfVjRfR0VUX0RTVF9BRERSKF9pcF9oZWFkZXIpIFwKKyAgICAgICAgKChrYWxfdWludDggKikoX2lwX2hlYWRlcikgKyAxNikKKworI2RlZmluZSBJUENfSERSX1Y0X1NFVF9EU1RfQUREUihfaXBfaGVhZGVyLCBfZHN0X2lwX2FkZHIpIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICBJUENfQ1BfVjRfQUREUihJUENfSERSX1Y0X0dFVF9EU1RfQUREUihfaXBfaGVhZGVyKSwgX2RzdF9pcF9hZGRyKTsgXAorICAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIElQQ19IRFJfVjRfR0VUX05IUFRSKF9pcF9oZWFkZXIpIFwKKyAgICAgICAgKChrYWxfdWludDggKikoX2lwX2hlYWRlcikgKyBJUENfSERSX1Y0X0dFVF9JSEwoX2lwX2hlYWRlcikpCisKKyNkZWZpbmUgSVBDX0NQX1Y0X0FERFIoX2RzdCwgX3NyYykgXAorICAgICAgICBkbyB7IFwKKyAgICAgICAgSVBDX0NQX0FERFIoX2RzdCwgX3NyYywgSVBDX0hEUl9WNF9BRERSX1NJWkUpOyBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSVBDX0VRX1Y0X0FERFIoX2FkZHIxLCBfYWRkcjIpIFwKKyAgICAgICAgSVBDX0VRX0FERFIoX2FkZHIxLCBfYWRkcjIsIElQQ19IRFJfVjRfQUREUl9TSVpFKQorCisjZGVmaW5lIElQQ19JU19WNF9DTEFTU0FfQUREUihfYWRkcikgXAorICAgICAgICAoIDB4MDAgPT0gKCooKGthbF91aW50OCAqKShfYWRkcikpICYgMHhmMCkgKQorCisjZGVmaW5lIElQQ19JU19WNF9DTEFTU0JfQUREUihfYWRkcikgXAorICAgICAgICAoIDB4ODAgPT0gKCooKGthbF91aW50OCAqKShfYWRkcikpICYgMHhmMCkgKQorCisjZGVmaW5lIElQQ19JU19WNF9DTEFTU0NfQUREUihfYWRkcikgXAorICAgICAgICAoIDB4YzAgPT0gKCooKGthbF91aW50OCAqKShfYWRkcikpICYgMHhmMCkgKQorCisjZGVmaW5lIElQQ19JU19WNF9DTEFTU0RfQUREUihfYWRkcikgXAorICAgICAgICAoIDB4ZTAgPT0gKCooKGthbF91aW50OCAqKShfYWRkcikpICYgMHhmMCkgKQorCisjZGVmaW5lIElQQ19JU19WNF9VTlNQRUNJRklFRF9BRERSKF9hZGRyKSBcCisgICAgICAgICggMCA9PSAqKChrYWxfdWludDgqKShfYWRkcikpICYmIFwKKyAgICAgICAgICAwID09ICooKGthbF91aW50OCopKF9hZGRyKSsxKSAmJiBcCisgICAgICAgICAgMCA9PSAqKChrYWxfdWludDgqKShfYWRkcikrMikgJiYgXAorICAgICAgICAgIDAgPT0gKigoa2FsX3VpbnQ4KikoX2FkZHIpKzMpICkKKworLyoKKyAqIElQdjYuCisgKi8KKyNkZWZpbmUgSVBDX0hEUl9WNl9BRERSX1NJWkUgICAgICAgICgxNikKKyNkZWZpbmUgSVBDX0hEUl9WNl9IRUFERVJfU0laRSAgICAgICg0MCkKKyNkZWZpbmUgSVBDX0hEUl9WNl9NQVhfSE9QICAgICAgICAgICgyNTUpCisKKyNkZWZpbmUgSVBDX0hEUl9WNl9MRU5HVEhfT0ZGU0VUICAgICg0KQorI2RlZmluZSBJUENfSERSX1Y2X05IX1RZUEVfT0ZGU0VUICAgKDYpCisjZGVmaW5lIElQQ19IRFJfVjZfSE9QX0xJTUlUX09GRlNFVCAoNykKKyNkZWZpbmUgSVBDX0hEUl9WNl9TUkNfQUREUl9PRkZTRVQgICg4KQorI2RlZmluZSBJUENfSERSX1Y2X0RTVF9BRERSX09GRlNFVCAgKDI0KQorCisjZGVmaW5lIElQQ19IRFJfVjZfR0VUX1RDKF9pcF9oZWFkZXIpIFwKKyAgICAgICAgKChJUENfTkVfR0VUXzJCKF9pcF9oZWFkZXIpID4+IDQpICYgMHhmZikKKworI2RlZmluZSBJUENfSERSX1Y2X1NFVF9UQyhfaXBfaGVhZGVyLCBfdGMpIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICBJUENfTkVfU0VUXzJCKF9pcF9oZWFkZXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChJUENfTkVfR0VUXzJCKF9pcF9oZWFkZXIpICYgMHhmMDBmKSB8ICgoKGthbF91aW50MTYpKF90YykgJiAweGZmKSA8PCA0KSkpOyBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSVBDX0hEUl9WNl9HRVRfRkxPV19MQUJFTChfaXBfaGVhZGVyKSBcCisgICAgICAgIChJUENfTkVfR0VUXzRCKF9pcF9oZWFkZXIpICYgMHhmZmZmZikKKworI2RlZmluZSBJUENfSERSX1Y2X1NFVF9GTE9XX0xBQkVMKF9pcF9oZWFkZXIsIF9mbG93X2xhYmVsKSBcCisgICAgICAgIGRvIHsgXAorICAgICAgICBJUENfTkVfU0VUXzRCKF9pcF9oZWFkZXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAoKElQQ19ORV9HRVRfNEIoX2lwX2hlYWRlcikgJiAweGZmZjAwMDAwKSB8ICgoa2FsX3VpbnQzMikoX2Zsb3dfbGFiZWwpICYgMHhmZmZmZikpKTsgXAorICAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIElQQ19IRFJfVjZfUkVTRVRfVkVSX1RDX0ZMKF9pcF9oZWFkZXIpIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICBrYWxfbWVtX3NldCgoa2FsX3VpbnQ4ICopKF9pcF9oZWFkZXIpLCAwLCA0KTsgXAorICAgICAgICAgICAgKigoa2FsX3VpbnQ4ICopKF9pcF9oZWFkZXIpKSB8PSAweDYwOyBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSVBDX0hEUl9WNl9HRVRfTEVOR1RIKF9pcF9oZWFkZXIpIFwKKyAgICAgICAgSVBDX05FX0dFVF8yQigoa2FsX3VpbnQ4ICopKF9pcF9oZWFkZXIpICsgSVBDX0hEUl9WNl9MRU5HVEhfT0ZGU0VUKQorCisjZGVmaW5lIElQQ19IRFJfVjZfU0VUX0xFTkdUSChfaXBfaGVhZGVyLCBfbGVuZ3RoKSBcCisgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgSVBDX05FX1NFVF8yQigoa2FsX3VpbnQ4ICopKF9pcF9oZWFkZXIpICsgSVBDX0hEUl9WNl9MRU5HVEhfT0ZGU0VULCBfbGVuZ3RoKTsgXAorICAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIElQQ19IRFJfVjZfR0VUX05IX1RZUEUoX2lwX2hlYWRlcikgXAorICAgICAgICBJUENfTkVfR0VUXzFCKCgoa2FsX3VpbnQ4ICopKF9pcF9oZWFkZXIpKSArIElQQ19IRFJfVjZfTkhfVFlQRV9PRkZTRVQpCisKKyNkZWZpbmUgSVBDX0hEUl9WNl9TRVRfTkhfVFlQRShfaXBfaGVhZGVyLCBfdHlwZSkgXAorICAgICAgICBkbyB7IFwKKyAgICAgICAgICAgIElQQ19ORV9TRVRfMUIoKChrYWxfdWludDggKikoX2lwX2hlYWRlcikpICsgSVBDX0hEUl9WNl9OSF9UWVBFX09GRlNFVCwgKGthbF91aW50OCkoX3R5cGUpKTsgXAorICAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIElQQ19IRFJfVjZfR0VUX0hPUF9MSU1JVChfaXBfaGVhZGVyKSBcCisgICAgICAgIElQQ19ORV9HRVRfMUIoKGthbF91aW50OCAqKShfaXBfaGVhZGVyKSArIElQQ19IRFJfVjZfSE9QX0xJTUlUX09GRlNFVCkKKworI2RlZmluZSBJUENfSERSX1Y2X1NFVF9IT1BfTElNSVQoX2lwX2hlYWRlciwgX2hvcF9saW1pdCkgXAorICAgICAgICBkbyB7IFwKKyAgICAgICAgICAgIElQQ19ORV9TRVRfMUIoKChrYWxfdWludDggKikoX2lwX2hlYWRlcikpICsgSVBDX0hEUl9WNl9IT1BfTElNSVRfT0ZGU0VULCAoa2FsX3VpbnQ4KShfaG9wX2xpbWl0KSk7IFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBJUENfSERSX1Y2X0dFVF9TUkNfQUREUihfaXBfaGVhZGVyKSBcCisgICAgICAgICgoa2FsX3VpbnQ4ICopKF9pcF9oZWFkZXIpICsgSVBDX0hEUl9WNl9TUkNfQUREUl9PRkZTRVQpCisKKyNkZWZpbmUgSVBDX0hEUl9WNl9TRVRfU1JDX0FERFIoX2lwX2hlYWRlciwgX3NyY19pcF9hZGRyKSBcCisgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgSVBDX0NQX1Y2X0FERFIoSVBDX0hEUl9WNl9HRVRfU1JDX0FERFIoX2lwX2hlYWRlciksIF9zcmNfaXBfYWRkcik7IFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBJUENfSERSX1Y2X0dFVF9EU1RfQUREUihfaXBfaGVhZGVyKSBcCisgICAgICAgICgoa2FsX3VpbnQ4ICopKF9pcF9oZWFkZXIpICsgSVBDX0hEUl9WNl9EU1RfQUREUl9PRkZTRVQpCisKKyNkZWZpbmUgSVBDX0hEUl9WNl9TRVRfRFNUX0FERFIoX2lwX2hlYWRlciwgX2RzdF9pcF9hZGRyKSBcCisgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgSVBDX0NQX1Y2X0FERFIoSVBDX0hEUl9WNl9HRVRfRFNUX0FERFIoX2lwX2hlYWRlciksIF9kc3RfaXBfYWRkcik7IFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBJUENfSERSX1Y2X0dFVF9OSFBUUihfaXBfaGVhZGVyKSBcCisgICAgICAgICgoa2FsX3VpbnQ4ICopKF9pcF9oZWFkZXIpICsgSVBDX0hEUl9WNl9IRUFERVJfU0laRSkKKworI2RlZmluZSBJUENfSERSX1Y2X1NFVF9EU1RfU09MX01DU1RfQUREUihfaXBfaGVhZGVyLCBfZHN0X2lwX2FkZHIpIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICAqKElQQ19IRFJfVjZfR0VUX0RTVF9BRERSKF9pcF9oZWFkZXIpKSA9IDB4ZmY7IFwKKyAgICAgICAgICAgICooSVBDX0hEUl9WNl9HRVRfRFNUX0FERFIoX2lwX2hlYWRlcikgKyAxKSA9IDB4MDI7IFwKKyAgICAgICAgICAgIGthbF9tZW1fc2V0KElQQ19IRFJfVjZfR0VUX0RTVF9BRERSKF9pcF9oZWFkZXIpICsgMiwgMCwgOSk7IFwKKyAgICAgICAgICAgICooSVBDX0hEUl9WNl9HRVRfRFNUX0FERFIoX2lwX2hlYWRlcikgKyAxMSkgPSAweDAxOyBcCisgICAgICAgICAgICAqKElQQ19IRFJfVjZfR0VUX0RTVF9BRERSKF9pcF9oZWFkZXIpICsgMTIpID0gMHhmZjsgXAorICAgICAgICAgICAga2FsX21lbV9jcHkoSVBDX0hEUl9WNl9HRVRfRFNUX0FERFIoX2lwX2hlYWRlcikgKyAxMywgKGthbF91aW50OCAqKShfZHN0X2lwX2FkZHIpICsgMTMsIDMpOyBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSVBDX0hEUl9WNkVYVF9HRVRfTkhfVFlQRShfZXh0X2hlYWRlcikgXAorICAgICAgICBJUENfTkVfR0VUXzFCKF9leHRfaGVhZGVyKQorCisjZGVmaW5lIElQQ19IRFJfVjZFWFRfR0VUX0hEUl9FWFRfTEVOKF9leHRfaGVhZGVyKSBcCisgICAgICAgICgoSVBDX05FX0dFVF8xQigoKGthbF91aW50OCopKF9leHRfaGVhZGVyKSkrMSkgKyAxKSA8PCAzKQorCisjZGVmaW5lIElQQ19JU19WNl9MSU5LX0xPQ0FMX0FERFIoX2FkZHIpIFwKKyAgICAgICAgKCAgICgweGZlID09IElQQ19ORV9HRVRfMUIoX2FkZHIpKSAmJiBcCisgICAgICAgICAgICAoMHg4MCA9PSBJUENfTkVfR0VUXzFCKCgoa2FsX3VpbnQ4KikoX2FkZHIpKSArIDEpKSkKKworI2RlZmluZSBJUENfSVNfVjZfR0xPQkFMX0FERFIoX2FkZHIpIFwKKyAgICAgICAgKCAweDIwID09IChJUENfTkVfR0VUXzFCKF9hZGRyKSAmIDB4ZTApICkKKworI2RlZmluZSBJUENfSVNfVjZfVU5TUEVDSUZJRURfQUREUihfYWRkcikgXAorICAgICAgICAoIDB4MDAgPT0gKigoa2FsX3VpbnQ4ICopKF9hZGRyKSkgJiYgXAorICAgICAgICAgIDB4MDAgPT0gKigoa2FsX3VpbnQ4ICopKF9hZGRyKSArICAxKSAmJiBcCisgICAgICAgICAgMHgwMCA9PSAqKChrYWxfdWludDggKikoX2FkZHIpICsgIDIpICYmIFwKKyAgICAgICAgICAweDAwID09ICooKGthbF91aW50OCAqKShfYWRkcikgKyAgMykgJiYgXAorICAgICAgICAgIDB4MDAgPT0gKigoa2FsX3VpbnQ4ICopKF9hZGRyKSArICA0KSAmJiBcCisgICAgICAgICAgMHgwMCA9PSAqKChrYWxfdWludDggKikoX2FkZHIpICsgIDUpICYmIFwKKyAgICAgICAgICAweDAwID09ICooKGthbF91aW50OCAqKShfYWRkcikgKyAgNikgJiYgXAorICAgICAgICAgIDB4MDAgPT0gKigoa2FsX3VpbnQ4ICopKF9hZGRyKSArICA3KSAmJiBcCisgICAgICAgICAgMHgwMCA9PSAqKChrYWxfdWludDggKikoX2FkZHIpICsgIDgpICYmIFwKKyAgICAgICAgICAweDAwID09ICooKGthbF91aW50OCAqKShfYWRkcikgKyAgOSkgJiYgXAorICAgICAgICAgIDB4MDAgPT0gKigoa2FsX3VpbnQ4ICopKF9hZGRyKSArIDEwKSAmJiBcCisgICAgICAgICAgMHgwMCA9PSAqKChrYWxfdWludDggKikoX2FkZHIpICsgMTEpICYmIFwKKyAgICAgICAgICAweDAwID09ICooKGthbF91aW50OCAqKShfYWRkcikgKyAxMikgJiYgXAorICAgICAgICAgIDB4MDAgPT0gKigoa2FsX3VpbnQ4ICopKF9hZGRyKSArIDEzKSAmJiBcCisgICAgICAgICAgMHgwMCA9PSAqKChrYWxfdWludDggKikoX2FkZHIpICsgMTQpICYmIFwKKyAgICAgICAgICAweDAwID09ICooKGthbF91aW50OCAqKShfYWRkcikgKyAxNSkpCisKKyNkZWZpbmUgSVBDX0lTX1Y2X01DU1RfQUREUihfYWRkcikgXAorICAgICAgICAoIDB4ZmYgPT0gSVBDX05FX0dFVF8xQihfYWRkcikgKQorCisjZGVmaW5lIElQQ19DUF9WNl9BRERSKF9kc3QsIF9zcmMpIFwKKyAgICAgICAgSVBDX0NQX0FERFIoX2RzdCwgX3NyYywgSVBDX0hEUl9WNl9BRERSX1NJWkUpCisKKyNkZWZpbmUgSVBDX0VRX1Y2X0FERFIoX2FkZHIxLCBfYWRkcjIpIFwKKyAgICAgICAgSVBDX0VRX0FERFIoX2FkZHIxLCBfYWRkcjIsIElQQ19IRFJfVjZfQUREUl9TSVpFKQorCisvKgorICogSVB2NiBmcmFnbWVudCBoZWFkZXIKKyAqLworI2RlZmluZSBJUENfSERSX1Y2X0ZSQUdNRU5UX0hFQURFUl9TSVpFICg4KQorCisvKgorICogVURQLgorICovCisjZGVmaW5lIElQQ19IRFJfVURQX0hFQURFUl9TSVpFICAgICAoOCkKKworI2RlZmluZSBJUENfSERSX1VEUF9HRVRfU1JDX1BPUlQoX3VkcCkgXAorICAgICAgICBJUENfTkVfR0VUXzJCKF91ZHApCisKKyNkZWZpbmUgSVBDX0hEUl9VRFBfU0VUX1NSQ19QT1JUKF91ZHAsIF9zcmNfcG9ydCkgXAorICAgICAgICBJUENfTkVfU0VUXzJCKChrYWxfdWludDggKikoX3VkcCksIF9zcmNfcG9ydCkKKworI2RlZmluZSBJUENfSERSX1VEUF9FUV9TUkNfUE9SVChfdWRwLCBfc3JjX3BvcnQpICAgIFwKKyAgICAgICAgKElQQ19IRFJfVURQX0dFVF9TUkNfUE9SVChfdWRwKSA9PSAoX3NyY19wb3J0KSkKKworI2RlZmluZSBJUENfSERSX1VEUF9HRVRfRFNUX1BPUlQoX3VkcCkgXAorICAgICAgICBJUENfTkVfR0VUXzJCKChrYWxfdWludDggKikoX3VkcCkgKyAyKQorCisjZGVmaW5lIElQQ19IRFJfVURQX1NFVF9EU1RfUE9SVChfdWRwLCBfZHN0X3BvcnQpIFwKKyAgICAgICAgSVBDX05FX1NFVF8yQigoa2FsX3VpbnQ4ICopKF91ZHApICsgMiwgX2RzdF9wb3J0KQorCisjZGVmaW5lIElQQ19IRFJfVURQX0VRX0RTVF9QT1JUKF91ZHAsIF9kc3RfcG9ydCkgICAgXAorICAgICAgICAoSVBDX0hEUl9VRFBfR0VUX0RTVF9QT1JUKF91ZHApID09IChfZHN0X3BvcnQpKQorCisjZGVmaW5lIElQQ19IRFJfVURQX0dFVF9MRU5HVEgoX3VkcCkgXAorICAgICAgICBJUENfTkVfR0VUXzJCKChrYWxfdWludDggKikoX3VkcCkgKyA0KQorCisjZGVmaW5lIElQQ19IRFJfVURQX1NFVF9MRU5HVEgoX3VkcCwgX2xlbmd0aCkgXAorICAgICAgICBJUENfTkVfU0VUXzJCKChrYWxfdWludDggKikoX3VkcCkgKyA0LCBfbGVuZ3RoKQorCisjZGVmaW5lIElQQ19IRFJfVURQX0dFVF9DSEVDS1NVTShfdWRwKSBcCisgICAgICAgIElQQ19ORV9HRVRfMkIoKGthbF91aW50OCAqKShfdWRwKSArIDYpCisKKyNkZWZpbmUgSVBDX0hEUl9VRFBfU0VUX0NIRUNLU1VNKF91ZHAsIF9jaGVja3N1bSkgXAorICAgICAgICBJUENfTkVfU0VUXzJCKChrYWxfdWludDggKikoX3VkcCkgKyA2LCBfY2hlY2tzdW0pCisKKy8qCisgKiBUQ1AuCisgKi8KKyNkZWZpbmUgSVBDX0hEUl9UQ1BfRkxBR19GSU4gICAgMHgwMQorI2RlZmluZSBJUENfSERSX1RDUF9GTEFHX1NZTiAgICAweDAyCisjZGVmaW5lIElQQ19IRFJfVENQX0ZMQUdfUlNUICAgIDB4MDQgICAgLy8gUmVzZXQKKyNkZWZpbmUgSVBDX0hEUl9UQ1BfRkxBR19QVVNIICAgMHgwOAorI2RlZmluZSBJUENfSERSX1RDUF9GTEFHX0FDSyAgICAweDEwCisjZGVmaW5lIElQQ19IRFJfVENQX0ZMQUdfVVJHICAgIDB4MjAgICAgLy8gVXJnZW50CisjZGVmaW5lIElQQ19IRFJfVENQX0ZMQUdfRUNFICAgIDB4NDAgICAgLy8gRUNOIEVjaG8KKyNkZWZpbmUgSVBDX0hEUl9UQ1BfRkxBR19DV1IgICAgMHg4MCAgICAvLyBDb25nZXN0aW9uIFdpbmRvdyBSZWR1Y2VkCisjZGVmaW5lIElQQ19IRFJfVENQX0ZMQUdfTlMgICAgIDB4MTAwICAgLy8gRUNOLW5vbmNlIGNvbmNlYWxtZW50IHByb3RlY3Rpb24gKGFkZGVkIHRvIGhlYWRlciBieSBSRkMgMzU0MCkKKworCisjZGVmaW5lIElQQ19IRFJfVENQX0hFQURFUl9TSVpFICAgICAoMjApCisKKyNkZWZpbmUgSVBDX0hEUl9UQ1BfR0VUX1NSQ19QT1JUKF90Y3ApIFwKKyAgICAgICAgSVBDX05FX0dFVF8yQihfdGNwKQorCisjZGVmaW5lIElQQ19IRFJfVENQX1NFVF9TUkNfUE9SVChfdGNwLCBfc3JjX3BvcnQpIFwKKyAgICAgICAgSVBDX05FX1NFVF8yQihfdGNwLCBfc3JjX3BvcnQpCisKKyNkZWZpbmUgSVBDX0hEUl9UQ1BfRVFfU1JDX1BPUlQoX3RjcCwgX3NyY19wb3J0KSAgICBcCisgICAgICAgIChJUENfSERSX1RDUF9HRVRfU1JDX1BPUlQoX3RjcCkgPT0gKF9zcmNfcG9ydCkpCisKKyNkZWZpbmUgSVBDX0hEUl9UQ1BfR0VUX0RTVF9QT1JUKF90Y3ApIFwKKyAgICAgICAgSVBDX05FX0dFVF8yQigoa2FsX3VpbnQ4ICopKF90Y3ApICsgMikKKworI2RlZmluZSBJUENfSERSX1RDUF9TRVRfRFNUX1BPUlQoX3RjcCwgX2RzdF9wb3J0KSBcCisgICAgICAgIElQQ19ORV9TRVRfMkIoKGthbF91aW50OCAqKShfdGNwKSArIDIsIF9kc3RfcG9ydCkKKworI2RlZmluZSBJUENfSERSX1RDUF9FUV9EU1RfUE9SVChfdGNwLCBfZHN0X3BvcnQpICAgIFwKKyAgICAgICAgKElQQ19IRFJfVENQX0dFVF9EU1RfUE9SVChfdGNwKSA9PSAoX2RzdF9wb3J0KSkKKworI2RlZmluZSBJUENfSERSX1RDUF9HRVRfU0VRX05VTShfdGNwKSBcCisgICAgICAgIElQQ19ORV9HRVRfNEIoKGthbF91aW50OCAqKShfdGNwKSArIDQpCisKKyNkZWZpbmUgSVBDX0hEUl9UQ1BfU0VUX1NFUV9OVU0oX3RjcCwgX3NlcV9udW0pIFwKKyAgICAgICAgSVBDX05FX1NFVF80Qigoa2FsX3VpbnQ4ICopKF90Y3ApICsgNCwgX3NlcV9udW0pCisKKyNkZWZpbmUgSVBDX0hEUl9UQ1BfRVFfU0VRX05VTShfdGNwLCBfc2VxX251bSkgICAgXAorICAgICAgICAoSVBDX0hEUl9UQ1BfR0VUX1NFUV9OVU0oX3RjcCkgPT0gKF9zZXFfbnVtKSkKKworI2RlZmluZSBJUENfSERSX1RDUF9HRVRfQUNLX05VTShfdGNwKSBcCisgICAgICAgIElQQ19ORV9HRVRfNEIoKGthbF91aW50OCAqKShfdGNwKSArIDgpCisKKyNkZWZpbmUgSVBDX0hEUl9UQ1BfU0VUX0FDS19OVU0oX3RjcCwgX2Fja19udW0pIFwKKyAgICAgICAgSVBDX05FX1NFVF80Qigoa2FsX3VpbnQ4ICopKF90Y3ApICsgOCwgX2Fja19udW0pCisKKyNkZWZpbmUgSVBDX0hEUl9UQ1BfRVFfQUNLX05VTShfdGNwLCBfYWNrX251bSkgICAgXAorICAgICAgICAoSVBDX0hEUl9UQ1BfR0VUX0FDS19OVU0oX3RjcCkgPT0gKF9hY2tfbnVtKSkKKworI2RlZmluZSBJUENfSERSX1RDUF9HRVRfT0ZGU0VUKF90Y3ApIFwKKyAgICAgICAgKChJUENfTkVfR0VUXzFCKChrYWxfdWludDggKikoX3RjcCkgKyAxMikgJiAweEYwKSA+PiAyKQorCisjZGVmaW5lIElQQ19IRFJfVENQX1NFVF9PRkZTRVQoX3RjcCwgX29mZnNldCkgXAorICAgICAgICBkbyB7IFwKKyAgICAgICAgICAgIElQQ19ORV9TRVRfMUIoKGthbF91aW50OCAqKShfdGNwKSArIDEyLCAoSVBDX05FX0dFVF8xQigoa2FsX3VpbnQ4ICopKF90Y3ApICsgMTIpICYgMHgwRikgfCAoKCgoa2FsX3VpbnQ4KShfb2Zmc2V0KT4+Mik8PDQpICYgMHhGMCkpOyBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSVBDX0hEUl9UQ1BfR0VUX1JFU0VSVkVEKF90Y3ApIFwKKyAgICAgICAgKChJUENfTkVfR0VUXzFCKChrYWxfdWludDggKikoX3RjcCkgKyAxMikgPj4gMSkgJiAweDA3KQorCisjZGVmaW5lIElQQ19IRFJfVENQX1NFVF9SRVNFUlZFRChfdGNwLCBfcmVzZXJ2ZWQpIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICBJUENfTkVfU0VUXzFCKChrYWxfdWludDggKikoX3RjcCkgKyAxMiwgKElQQ19ORV9HRVRfMUIoKGthbF91aW50OCAqKShfdGNwKSArIDEyKSAmIDB4RjEpIHwgKCgoa2FsX3VpbnQ4KShfcmVzZXJ2ZWQpIDw8IDEpICYgMHgwRSkpOyBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSVBDX0hEUl9UQ1BfR0VUX0ZMQUdTKF90Y3ApIFwKKyAgICAgICAgKElQQ19ORV9HRVRfMkIoKGthbF91aW50OCAqKShfdGNwKSArIDEyKSAmIDB4MDFGRikKKworI2RlZmluZSBJUENfSERSX1RDUF9TRVRfRkxBR1MoX3RjcCwgX2ZsYWdzKSBcCisgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgSVBDX05FX1NFVF8yQigoa2FsX3VpbnQ4ICopKF90Y3ApICsgMTIsIChJUENfTkVfR0VUXzJCKChrYWxfdWludDggKikoX3RjcCkgKyAxMikgJiAweEZFMDApIHwgKChfZmxhZ3MpICYgMHgwMUZGKSk7IFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBJUENfSERSX1RDUF9HRVRfV0lORE9XKF90Y3ApIFwKKyAgICAgICAgSVBDX05FX0dFVF8yQigoa2FsX3VpbnQ4ICopKF90Y3ApICsgMTQpCisKKyNkZWZpbmUgSVBDX0hEUl9UQ1BfU0VUX1dJTkRPVyhfdGNwLCBfd2luZG93KSBcCisgICAgICAgIElQQ19ORV9TRVRfMkIoKGthbF91aW50OCAqKShfdGNwKSArIDE0LCBfd2luZG93KQorCisjZGVmaW5lIElQQ19IRFJfVENQX0dFVF9DSEVDS1NVTShfdGNwKSBcCisgICAgICAgIElQQ19ORV9HRVRfMkIoKGthbF91aW50OCAqKShfdGNwKSArIDE2KQorCisjZGVmaW5lIElQQ19IRFJfVENQX1NFVF9DSEVDS1NVTShfdGNwLCBfY2hlY2tzdW0pIFwKKyAgICAgICAgSVBDX05FX1NFVF8yQigoa2FsX3VpbnQ4ICopKF90Y3ApICsgMTYsIF9jaGVja3N1bSkKKworI2RlZmluZSBJUENfSERSX1RDUF9HRVRfVVJHRU5UX1BUUihfdGNwKSBcCisgICAgICAgIElQQ19ORV9HRVRfMkIoKGthbF91aW50OCAqKShfdGNwKSArIDE4KQorCisjZGVmaW5lIElQQ19IRFJfVENQX1NFVF9VUkdFTlRfUFRSKF90Y3AsIF91cnApIFwKKyAgICAgICAgSVBDX05FX1NFVF8yQigoa2FsX3VpbnQ4ICopKF90Y3ApICsgMTgsIF91cnApCisvKgorICogSUNNUC4KKyAqLworI2RlZmluZSBJUENfSERSX0lDTVBfSEVBREVSX1NJWkUgICAgICg4KQorCisjZGVmaW5lIElQQ19IRFJfSUNNUF9UWVBFX0VDSE9fUkVRVUVTVCAgICAoOCkKKyNkZWZpbmUgSVBDX0hEUl9JQ01QX1RZUEVfRUNIT19SRVBMWSAgICAgICgwKQorI2RlZmluZSBJUENfSERSX0lDTVBfVFlQRV9SUyAgICAgICAgICAgICAgKDEwKQorI2RlZmluZSBJUENfSERSX0lDTVBfVFlQRV9SQSAgICAgICAgICAgICAgKDkpCisKKyNkZWZpbmUgSVBDX0hEUl9JQ01QVjZfVFlQRV9FQ0hPX1JFUVVFU1QgICgxMjgpCisjZGVmaW5lIElQQ19IRFJfSUNNUFY2X1RZUEVfRUNIT19SRVBMWSAgICAoMTI5KQorI2RlZmluZSBJUENfSERSX0lDTVBWNl9UWVBFX1JTICAgICAgICAgICAgKDEzMykKKyNkZWZpbmUgSVBDX0hEUl9JQ01QVjZfVFlQRV9SQSAgICAgICAgICAgICgxMzQpCisKKyNkZWZpbmUgSVBDX0hEUl9JQ01QX0dFVF9UWVBFKF9pY21wKSBcCisgICAgICAgIElQQ19ORV9HRVRfMUIoX2ljbXApCisKKyNkZWZpbmUgSVBDX0hEUl9JQ01QX1NFVF9UWVBFKF9pY21wLCBfdHlwZSkgXAorICAgICAgICBJUENfTkVfU0VUXzFCKF9pY21wLCBfdHlwZSkKKworI2RlZmluZSBJUENfSERSX0lDTVBfRVFfVFlQRShfaWNtcCwgX3R5cGUpICBcCisgICAgICAgIChJUENfSERSX0lDTVBfR0VUX1RZUEUoX2ljbXApID09IChfdHlwZSkpCisKKyNkZWZpbmUgSVBDX0hEUl9JQ01QX0dFVF9DT0RFKF9pY21wKSBcCisgICAgICAgIElQQ19ORV9HRVRfMUIoKGthbF91aW50OCAqKShfaWNtcCkgKyAxKQorCisjZGVmaW5lIElQQ19IRFJfSUNNUF9TRVRfQ09ERShfaWNtcCwgX2NvZGUpIFwKKyAgICAgICAgSVBDX05FX1NFVF8xQigoa2FsX3VpbnQ4ICopKF9pY21wKSArIDEsIChfY29kZSkpCisKKyNkZWZpbmUgSVBDX0hEUl9JQ01QX0VRX0NPREUoX2ljbXAsIF9jb2RlKSAgXAorICAgICAgICAoSVBDX0hEUl9JQ01QX0dFVF9DT0RFKF9pY21wKSA9PSAoX2NvZGUpKQorCisjZGVmaW5lIElQQ19IRFJfSUNNUF9HRVRfQ0hFQ0tTVU0oX2ljbXApIFwKKyAgICAgICAgSVBDX05FX0dFVF8yQigoa2FsX3VpbnQ4ICopKF9pY21wKSArIDIpCisKKyNkZWZpbmUgSVBDX0hEUl9JQ01QX1NFVF9DSEVDS1NVTShfaWNtcCwgX2NoZWNrc3VtKSBcCisgICAgICAgIElQQ19ORV9TRVRfMkIoKGthbF91aW50OCAqKShfaWNtcCkgKyAyLCBfY2hlY2tzdW0pCisKKyNkZWZpbmUgSVBDX0hEUl9JQ01QX1NFVF9VTlVTRUQoX2ljbXAsIF92YWx1ZSkgXAorICAgICAgICBJUENfTkVfU0VUXzRCKChrYWxfdWludDggKikoX2ljbXApICsgNCwgX3ZhbHVlKQorLyoKKyAqIFBvcnRzLgorICovCisjZGVmaW5lIElQQ19QT1JUX0JPT1RQUyAoNjcpCisjZGVmaW5lIElQQ19QT1JUX0JPT1RQQyAoNjgpCisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zCisgKi8KKyNkZWZpbmUgaXBjX2dldF9uZXRpZl9pZF9mcm9tX2wycF9jaGlkKF9pcGNfbDJwX2VudW0sIF9jaGlkKSAoKGthbF91aW50MzIpKF9pcGNfbDJwX2VudW0gfCBfY2hpZCkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQdWJsaWMgZnVuY3Rpb25zLgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICogQWxsb3cgSElGIHNpZGUgbW9kdWxlLCBzdWNoIGFzIGV0aGVyY29yZSBvciBwcHAsIHRvIHJlZ2lzdGVyIGNhbGxiYWNrIGZ1bmN0aW9ucywKKyAqIGNhbGxiYWNrIGNvbnRleHQsIGFuZCBtb2R1bGUgaWQgZm9yIGEgbmV0d29yayBpbnRlcmZhY2UuCisgKgorICogQHBhcmFtICAgY29uZmlnIFtJTl0gVGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIHJlZ2Vyc3RlciBhIG5ldHdvcmsgaW50ZXJmYWNlLgorICogQHBhcmFtICAgaGFuZGxlIFtPVVRdIENhbGxlciBhbGxvY2F0ZWQgc3BhY2UgdG8gc3RvcmUgYSBoYW5kbGUgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGF0dGFjaGVkLgorICogICAgICAgICAgICAgICAgICAgICAgIEl0IHJldHVybnMgYSBJUENfSU5WQUxJRF9IQU5ETEUgaWYgZmFpbGVkLgorICoKKyAqIEByZXR1cm4gS0FMX1RSVUUgaWYgc3VjY2Vzc2Z1bCwgS0FMX0ZBTFNFIG90aGVyd2lzZS4KKyAqLwora2FsX2Jvb2wgaXBjX2F0dGFjaChpcGNfY29uZl90ICpjb25maWcsIGlwY19oYW5kbGVfdCAqaGFuZGxlKTsKKworLyoqCisgKiBEZXRhY2ggdGhlIG5ldHdvcmsgaW50ZXJmYWNlLgorICoKKyAqIEBwYXJhbSAgIGhhbmRsZSBbSU5dIEhhbmRsZSB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UgdG8gZGV0YWNoLgorICoKKyAqIEByZXR1cm4gS0FMX1RSVUUgaWYgc3VjY2Vzc2Z1bCwgS0FMX0ZBTFNFIG90aGVyd2lzZS4KKyAqLwora2FsX2Jvb2wgaXBjX2RldGFjaChpcGNfaGFuZGxlX3QgaGFuZGxlKTsKKworLyoqCisgKiBTZW5kIGEgbGlzdCBvZiBJUCBkYXRhZ3JhbXMgdG8gd2lyZWxlc3MgbmV0d29yay4KKyAqCisgKiBAcGFyYW0gICBoYW5kbGUgW0lOXSBIYW5kbGUgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGF0dGFjaGVkLgorICogQHBhcmFtICAgaW9yIFtJTl0gSXQgd3JhcHMgdXAgYSBzZXQgb2YgdXBsaW5rIEdQRCB0byBzZW5kLgorICoKKyAqIEByZXR1cm4gS0FMX1RSVUUgaWYgc3VjY2Vzc2Z1bCwgS0FMX0ZBTFNFIG90aGVyd2lzZS4KKyAqLwora2FsX2Jvb2wgaXBjX3VwbGluayhpcGNfaGFuZGxlX3QgaGFuZGxlLCBpcGNfaW9fcmVxdWVzdF90ICppb3IpOworCisvKioKKyAqIFJldHJpZXZlIGluZGV4IG9mIGEgc2V0IG9mIElQdjQvSVB2NiBhZGRyZXNzZXMuCisgKgorICogQHBhcmFtICAgaGFuZGxlIFtJTl0gSGFuZGxlIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZSBhdHRhY2hlZC4KKyAqCisgKiBAcmV0dXJuIE5vbi1uZWd0aXZlIHZhbHVlIGFzIGEgdmFsaWQgaW5kZXgsIG5ldGdhdGl2ZSB2YWx1ZSBmb3IgYW4gaW52YWxpZCBvbmUgKGUuZy4gYmVmb3JlIHNlc3Npb24gZXN0YWJsaXNoZWQuKS4KKyAqLwora2FsX2ludDMyIGlwY19nZXRfaXBfaWQoaXBjX2hhbmRsZV90IGhhbmRsZSk7CisKKy8qKgorICogRm9yY2UgcmVsb2FkaW5nIGJ1ZmZlcnMgZm9yIHRoZSBuZXR3b3JrIGludGVyZmFjZSB0byByZWNlaXZlIHVwbGluayB0cmFmZmljLgorICoKKyAqIEBwYXJhbSAgIGhhbmRsZSBbSU5dIEhhbmRsZSB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UgYXR0YWNoZWQuCisgKi8KK3ZvaWQgaXBjX25lZWRfdWxfcmVsb2FkKGlwY19oYW5kbGVfdCBoYW5kbGUpOworCisvKioKKyAqIENoZWNrIGlmIGFueSBuZXR3b3JrIGludGVyZmFjZXMgbmVlZCB1cGxpbmsgcmVsb2FkIHJldHJ5LAorICogaWYgc28sIHNlbmQgYW4gSUxNIHRvIElQQ09SRSB0byBkbyB1cGxpbmsgcmVsb2FkLgorICovCit2b2lkIGlwY19jaGVja191bF9yZWxvYWRfcmV0cnkodm9pZCk7CisKKy8qKgorICogTWFudWFsbHkgbm90aWZ5IHRoZSBISUYgbmV0d29yayBpbnRlcmZhY2UgbGluay9JUCBzdGF0dXMgY2hhbmdlZC4gKFRoaXMgQVBJIGRvZXMgTk9UIGNoYW5nZSBJUCBDb3JlIGludGVybmFsIEZTTSAhKQorICoKKyAqIEBwYXJhbSAgIG5ldGlmX2lkIFtJTl0gVGhlIG5ldHdvcmsgaW50ZXJmYWNlIElELgorICogQHBhcmFtICAgaXBfdHlwZSBbSU5dIFR5cGUgb2YgdGhlIFBETiwgSVBDX0lQX1RZUEVfSVBWNCwgSVBDX0lQX1RZUEVfSVBWNiwgb3IgSVBDX0lQX1RZUEVfTUlYRUQuCisgKiBAcGFyYW0gICBsaW5rX3VwZGF0ZVtJTl0gS0FMX1RSVUUgaWYgYW4gSVAgc2Vzc2lvbiBpcyBlc3RhYmxpc2hlZC9kZWFjdGl2ZWQgYW5kIGxpbmsgc3RhdHVzIGlzIGNoYW5nZWQuIEtBTF9GQUxTRSBpZiBhbiBJUCBpbmZvcm1hdGlvbiBpcyB1cGRhdGVkIGZvciBhbiBhY3RpdmF0ZWQgSVAgc2Vzc2lvbi4KKyAqIEBwYXJhbSAgIGxpbmtfdXAgW0lOXSAoSWYgbGlua191cGRhdGUgaXMgS0FMX1RSVUUpIEtBTF9UUlVFIGlmIGFuIElQIHNlc3Npb24gaXMgZXN0YWJsaXNoZWQsIEtBTF9GQUxTRSBpZiBhbiBJUCBzZXNzaW9uIGlzIGRlYWN0aXZlZCA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSWYgbGlua191cGRhdGUgaXMgS0FMX0ZBTFNFKSBLQUxfVFJVRSBpZiBuZXcgSVAgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLCBLQUxfRkFMU0UgaWYgb3JpZ2luYWwgSVAgaW5mb3JtYXRpb24gaXMgb2Jzb2xldGVkCisgKi8KK3ZvaWQgaXBjX25vdGlmeV9saW5rX2NoYW5nZShrYWxfdWludDMyIG5ldGlmX2lkLCBrYWxfdWludDggaXBfdHlwZSwga2FsX2Jvb2wgbGlua191cGRhdGUsIGthbF9ib29sIGlzX3VwKTsKKworLyoqCisgKiBJbnN0YWxsIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBmaWx0ZXJpbmcgcnVsZXMgZm9yIHVwbGluayB0cmFmZmljLgorICoKKyAqIEBwYXJhbSAgIHJ1bGVzIFtJTl0gUnVsZXMgdG8gZmlsdGVyIG9mIHVwbGluayBJUCBkYXRhZ3JhbXMuCisgKiBAcGFyYW0gICBjYWxsYmFja19mdW5jIFtJTl0gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGEgdXBsaW5rIElQIGRhdGFncmFtIG1hdGNoZWQgdGhlIHJ1bGVzLgorICogQHBhcmFtICAgY2FsbGJhY2tfY29udGV4dCBbSU5dIENvbnRleHQgdG8gcGFzcyBpbiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisgKgorICogQHJldHVybiBaZXJvIG9yIHBvc3RpdmUgdmFsdWUgYXMgZmlsdGVyIElEIGlmIHJlZ2lzdHJhdGlvbiBzdWNjZWVkZWQsIG5lZ2F0aXZlIHZhbHVlIGlmIGl0IGZhaWxlZC4KKyAqLwora2FsX2ludDMyIGlwY19yZWdpc3Rlcl91bF9maWx0ZXJfY2JrKGlwY19maWx0ZXJfcnVsZXNfdCAqcnVsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBjX2ZpbHRlcl9jYWxsYmFja190IGNhbGxiYWNrX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2FsbGJhY2tfY29udGV4dCk7CisKKy8qKgorICogSW5zdGFsbCBjYWxsYmFjayBmdW5jdGlvbiBhbmQgZmlsdGVyaW5nIHJ1bGVzIGZvciBkb3dubGluayB0cmFmZmljLgorICoKKyAqIEBwYXJhbSAgIHJ1bGVzIFtJTl0gUnVsZXMgdG8gZmlsdGVyIG9mIGRvd25saW5rIElQIGRhdGFncmFtcy4KKyAqIEBwYXJhbSAgIGNhbGxiYWNrX2Z1bmMgW0lOXSBDYWxsYmFjayBmdW5jdGlvbiBmb3IgYSBkb3dubGluayBJUCBkYXRhZ3JhbSBtYXRjaGVkIHRoZSBydWxlcy4KKyAqIEBwYXJhbSAgIGNhbGxiYWNrX2NvbnRleHQgW0lOXSBDb250ZXh0IHRvIHBhc3MgaW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorICoKKyAqIEByZXR1cm4gWmVybyBvciBwb3N0aXZlIHZhbHVlIGFzIGZpbHRlciBJRCBpZiByZWdpc3RyYXRpb24gc3VjY2VlZGVkLCBuZWdhdGl2ZSB2YWx1ZSBpZiBpdCBmYWlsZWQuCisgKi8KK2thbF9pbnQzMiBpcGNfcmVnaXN0ZXJfZGxfZmlsdGVyX2NiayhpcGNfZmlsdGVyX3J1bGVzX3QgKnJ1bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwY19maWx0ZXJfY2FsbGJhY2tfdCBjYWxsYmFja19mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNhbGxiYWNrX2NvbnRleHQpOworCisvKioKKyAqIEluc3RhbGwgbW9kdWxlIElEIGFuZCBmaWx0ZXJpbmcgcnVsZXMgZm9yIHVwbGluayB0cmFmZmljLgorICoKKyAqIEBwYXJhbSAgIHJ1bGVzIFtJTl0gUnVsZXMgdG8gZmlsdGVyIG9mIHVwbGluayBJUCBkYXRhZ3JhbXMuCisgKiBAcGFyYW0gICBjYWxsYmFja19tb2R1bGUgW0lOXSBEZXN0aW5hdGlvbiBtb2R1bGUgb2YgdGhlIE1TRyBNU0dfSURfSVBDT1JFX1VMX1BBQ0tFVF9GSUxURVJFRF9SRVEgZm9yIGEgdXBsaW5rIElQIGRhdGFncmFtIG1hdGNoZWQgdGhlIHJ1bGVzLgorICogQHBhcmFtICAgY2FsbGJhY2tfY29udGV4dCBbSU5dIENvbnRleHQgdG8gcGFzcyBpbiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisgKgorICogQHJldHVybiBaZXJvIG9yIHBvc3RpdmUgdmFsdWUgYXMgZmlsdGVyIElEIGlmIHJlZ2lzdHJhdGlvbiBzdWNjZWVkZWQsIG5lZ2F0aXZlIHZhbHVlIGlmIGl0IGZhaWxlZC4KKyAqLwora2FsX2ludDMyIGlwY19yZWdpc3Rlcl91bF9maWx0ZXJfbXNnKGlwY19maWx0ZXJfcnVsZXNfdCAqcnVsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX3R5cGUgY2FsbGJhY2tfbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNhbGxiYWNrX2NvbnRleHQpOworCisvKioKKyAqIEluc3RhbGwgbW9kdWxlIElEIGFuZCBmaWx0ZXJpbmcgcnVsZXMgZm9yIGRvd25saW5rIHRyYWZmaWMuCisgKgorICogQHBhcmFtICAgcnVsZXMgW0lOXSBSdWxlcyB0byBmaWx0ZXIgb2YgZG93bmxpbmsgSVAgZGF0YWdyYW1zLgorICogQHBhcmFtICAgY2FsbGJhY2tfbW9kdWxlIFtJTl0gRGVzdGluYXRpb24gbW9kdWxlIG9mIHRoZSBNU0cgTVNHX0lEX0lQQ09SRV9ETF9QQUNLRVRfRklMVEVSRURfUkVRIGZvciBhIGRvd25saW5rIElQIGRhdGFncmFtIG1hdGNoZWQgdGhlIHJ1bGVzLgorICogQHBhcmFtICAgY2FsbGJhY2tfY29udGV4dCBbSU5dIENvbnRleHQgdG8gcGFzcyBpbiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisgKgorICogQHJldHVybiBaZXJvIG9yIHBvc3RpdmUgdmFsdWUgYXMgZmlsdGVyIElEIGlmIHJlZ2lzdHJhdGlvbiBzdWNjZWVkZWQsIG5lZ2F0aXZlIHZhbHVlIGlmIGl0IGZhaWxlZC4KKyAqLwora2FsX2ludDMyIGlwY19yZWdpc3Rlcl9kbF9maWx0ZXJfbXNnKGlwY19maWx0ZXJfcnVsZXNfdCAqcnVsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX3R5cGUgY2FsbGJhY2tfbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNhbGxiYWNrX2NvbnRleHQpOworCisvKioKKyAqIEluc3RhbGwgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIGZpbHRlcmluZyBydWxlcyBmb3IgdXBsaW5rIHRyYWZmaWMuIChjYWxsYmFjayBmdW5jdGlvbiB3aXRoIGluZm9ybWF0aW9uIGFzIHBhcmFtZXRlcikKKyAqCisgKiBAcGFyYW0gICBydWxlcyBbSU5dIFJ1bGVzIHRvIGZpbHRlciBvZiB1cGxpbmsgSVAgZGF0YWdyYW1zLgorICogQHBhcmFtICAgY2FsbGJhY2tfZnVuYyBbSU5dIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBhIHVwbGluayBJUCBkYXRhZ3JhbSBtYXRjaGVkIHRoZSBydWxlcyAod2l0aCBpbmZvcm1hdGlvbiBhcyBwYXJhbWV0ZXIpLgorICogQHBhcmFtICAgY2FsbGJhY2tfY29udGV4dCBbSU5dIENvbnRleHQgdG8gcGFzcyBpbiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisgKgorICogQHJldHVybiBaZXJvIG9yIHBvc2l0aXZlIHZhbHVlIGFzIGZpbHRlciBJRCBpZiByZWdpc3RyYXRpb24gc3VjY2VlZGVkLCBuZWdhdGl2ZSB2YWx1ZSBpZiBpdCBmYWlsZWQuCisgKi8KK2thbF9pbnQzMiBpcGNfcmVnaXN0ZXJfdWxfZmlsdGVyX3dpdGhfaW5mb19jYmsoaXBjX2ZpbHRlcl9ydWxlc190ICpydWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBjX2ZpbHRlcl93aXRoX2luZm9fY2FsbGJhY2tfdCBjYWxsYmFja19mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYWxsYmFja19jb250ZXh0KTsKKworLyoqCisgKiBJbnN0YWxsIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBmaWx0ZXJpbmcgcnVsZXMgZm9yIGRvd25saW5rIHRyYWZmaWMuIChjYWxsYmFjayBmdW5jdGlvbiB3aXRoIGluZm9ybWF0aW9uIGFzIHBhcmFtZXRlcikKKyAqCisgKiBAcGFyYW0gICBydWxlcyBbSU5dIFJ1bGVzIHRvIGZpbHRlciBvZiBkb3dubGluayBJUCBkYXRhZ3JhbXMuCisgKiBAcGFyYW0gICBjYWxsYmFja19mdW5jIFtJTl0gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGEgZG93bmxpbmsgSVAgZGF0YWdyYW0gbWF0Y2hlZCB0aGUgcnVsZXMgKHdpdGggaW5mb3JtYXRpb24gYXMgcGFyYW1ldGVyKS4KKyAqIEBwYXJhbSAgIGNhbGxiYWNrX2NvbnRleHQgW0lOXSBDb250ZXh0IHRvIHBhc3MgaW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorICoKKyAqIEByZXR1cm4gWmVybyBvciBwb3N0aXZlIHZhbHVlIGFzIGZpbHRlciBJRCBpZiByZWdpc3RyYXRpb24gc3VjY2VlZGVkLCBuZWdhdGl2ZSB2YWx1ZSBpZiBpdCBmYWlsZWQuCisgKi8KK2thbF9pbnQzMiBpcGNfcmVnaXN0ZXJfZGxfZmlsdGVyX3dpdGhfaW5mb19jYmsoaXBjX2ZpbHRlcl9ydWxlc190ICpydWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBjX2ZpbHRlcl93aXRoX2luZm9fY2FsbGJhY2tfdCBjYWxsYmFja19mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYWxsYmFja19jb250ZXh0KTsKKworLyoqCisgKiBJbnN0YWxsIG1vZHVsZSBJRCBhbmQgZmlsdGVyaW5nIHJ1bGVzIGZvciB1cGxpbmsgdHJhZmZpYy4gKGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggaW5mb3JtYXRpb24gYXMgcGFyYW1ldGVyKQorICoKKyAqIEBwYXJhbSAgIHJ1bGVzIFtJTl0gUnVsZXMgdG8gZmlsdGVyIG9mIHVwbGluayBJUCBkYXRhZ3JhbXMuCisgKiBAcGFyYW0gICBjYWxsYmFja19tb2R1bGUgW0lOXSBEZXN0aW5hdGlvbiBtb2R1bGUgb2YgdGhlIE1TRyBNU0dfSURfSVBDT1JFX1VMX1BBQ0tFVF9GSUxURVJFRF9XSVRIX0lORk9fUkVRIGZvciBhIHVwbGluayBJUCBkYXRhZ3JhbSBtYXRjaGVkIHRoZSBydWxlcy4KKyAqIEBwYXJhbSAgIGNhbGxiYWNrX2NvbnRleHQgW0lOXSBDb250ZXh0IHRvIHBhc3MgaW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorICoKKyAqIEByZXR1cm4gWmVybyBvciBwb3N0aXZlIHZhbHVlIGFzIGZpbHRlciBJRCBpZiByZWdpc3RyYXRpb24gc3VjY2VlZGVkLCBuZWdhdGl2ZSB2YWx1ZSBpZiBpdCBmYWlsZWQuCisgKi8KK2thbF9pbnQzMiBpcGNfcmVnaXN0ZXJfdWxfZmlsdGVyX3dpdGhfaW5mb19tc2coaXBjX2ZpbHRlcl9ydWxlc190ICpydWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX3R5cGUgY2FsbGJhY2tfbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYWxsYmFja19jb250ZXh0KTsKKworLyoqCisgKiBJbnN0YWxsIG1vZHVsZSBJRCBhbmQgZmlsdGVyaW5nIHJ1bGVzIGZvciBkb3dubGluayB0cmFmZmljLiAoY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBpbmZvcm1hdGlvbiBhcyBwYXJhbWV0ZXIpCisgKgorICogQHBhcmFtICAgcnVsZXMgW0lOXSBSdWxlcyB0byBmaWx0ZXIgb2YgZG93bmxpbmsgSVAgZGF0YWdyYW1zLgorICogQHBhcmFtICAgY2FsbGJhY2tfbW9kdWxlIFtJTl0gRGVzdGluYXRpb24gbW9kdWxlIG9mIHRoZSBNU0cgTVNHX0lEX0lQQ09SRV9ETF9QQUNLRVRfRklMVEVSRURfV0lUSF9JTkZPX1JFUSBmb3IgYSBkb3dubGluayBJUCBkYXRhZ3JhbSBtYXRjaGVkIHRoZSBydWxlcy4KKyAqIEBwYXJhbSAgIGNhbGxiYWNrX2NvbnRleHQgW0lOXSBDb250ZXh0IHRvIHBhc3MgaW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorICoKKyAqIEByZXR1cm4gWmVybyBvciBwb3N0aXZlIHZhbHVlIGFzIGZpbHRlciBJRCBpZiByZWdpc3RyYXRpb24gc3VjY2VlZGVkLCBuZWdhdGl2ZSB2YWx1ZSBpZiBpdCBmYWlsZWQuCisgKi8KK2thbF9pbnQzMiBpcGNfcmVnaXN0ZXJfZGxfZmlsdGVyX3dpdGhfaW5mb19tc2coaXBjX2ZpbHRlcl9ydWxlc190ICpydWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX3R5cGUgY2FsbGJhY2tfbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYWxsYmFja19jb250ZXh0KTsKKworLyoqCisgKiBVbmluc3RhbGwgdGhlIGZpbHRlciBmb3IgdXBsaW5rIHRyYWZmaWMuCisgKgorICogQHBhcmFtICAgZmlsdGVyX2lkIFtJTl0gZmlsdGVyIElEIHRvIHVucmVnaXN0ZXIuCisgKi8KK3ZvaWQgaXBjX2RlcmVnaXN0ZXJfdWxfZmlsdGVyKGthbF9pbnQzMiBmaWx0ZXJfaWQpOworCisvKioKKyAqIFVuaW5zdGFsbCB0aGUgZmlsdGVyIGZvciBkb253bGluayB0cmFmZmljLgorICoKKyAqIEBwYXJhbSAgIGZpbHRlcl9pZCBbSU5dIGZpbHRlciBJRCB0byB1bnJlZ2lzdGVyLgorICovCit2b2lkIGlwY19kZXJlZ2lzdGVyX2RsX2ZpbHRlcihrYWxfaW50MzIgZmlsdGVyX2lkKTsKKworLyoqCisgKiBDb3B5IGJ1ZmZlcnMgaW4gdGhlIEdQRCBsaXN0IHRvIHRoZSBidWZmZXIgcHJlcGFyZWQgYnkgY2FsbGVyLgorICoKKyAqIEBwYXJhbSAgIGRzdF9idWZmZXIgW09VVF0gRGVzdGluYXRpb24gYnVmZmVyIHRvIGNvcHkgdG8sIHdoaWNoIGlzIHByZXBhcmVkIGJ5IGNhbGxlci4KKyAqIEBwYXJhbSAgIGRzdF9tYXhfbGVuIFtJTl0gU2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIHByZXBhcmVkIGJ5IGNhbGxlciBpbiBieXRlcy4KKyAqIEBwYXJhbSAgIGRzdF9sZW5fY29waWVkIFtPVVRdIE51bWJlciBvZiBieXRlcyBjb3BpZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKyAqIEBwYXJhbSAgIHNyY19oZWFkX2dwZCBbSU5dIEhlYWQgb2YgdGhlIEdQRCBsaXN0IHdpdGggc291cmNlIGJ1ZmZlcnMgdG8gY29weSBmcm9tLgorICogQHBhcmFtICAgc3JjX3RhaWxfZ3BkIFtJTl0gVGFpbCBvZiB0aGUgR1BEIGxpc3Qgd2l0aCBzb3VyY2UgYnVmZmVycyB0byBjb3B5IGZyb20uCisgKgorICogQHJldHVybiAgS0FMX1RSVUUgaWYgc3VjY2VlZGVkLCBLQUxfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitrYWxfYm9vbCBpcGNfZ3BkX2NvcHkoa2FsX3VpbnQ4ICpkc3RfYnVmZmVyLCBrYWxfdWludDMyIGRzdF9tYXhfbGVuLCBrYWxfdWludDMyICpkc3RfbGVuX2NvcGllZCwgcWJtX2dwZCAqc3JjX2hlYWRfZ3BkLCBxYm1fZ3BkICpzcmNfdGFpbF9ncGQpOworCisvKioKKyAqIFBhY2sgZGF0YWdyYW0gaW4gR1BEIGZvcm1hdCBhbmQgc2VsZWN0aXZlbHkgZmlsbCBMNChVRFApIGFuZCBJUCBoZWFkZXIuCisgKgorICogQHBhcmFtICAgdXBsaW5rIFtJTl0gVXBsaW5rIG9yIGRvd25saW5rIHBhY2tldC4KKyAqIEBwYXJhbSAgIHBrdCBbSU5dIERhdGFncmFtIG9yIEdQRCBsaXN0IHRvIHNlbnQuCisgKiBAcGFyYW0gICBoZHIgW0lOXSBVRFAvSVAgaGVhZGVyIGluZm9ybWF0aW9uIHdoaWNoIHdpbGwgYmUgZmlsbGVkIHRvIHNlbnQgcGFja2V0KHMpLiBOVUxMIHBvaW50ZXIgbWVhbnMgIk5vIHBhY2tldCBtb2RpZmljYXRpb24gaXMgbmVlZGVkIgorICogQHBhcmFtICAgaGVhZF9ncGQgW09VVF0gSGVhZCBvZiBHUEQgbGlzdCByZXR1cm4KKyAqIEBwYXJhbSAgIHRhaWxfZ3BkIFtPVVRdIFRhaWwgb2YgR1BEIGxpc3QgcmV0dXJuCisgKgorICogQHJldHVybiAgS0FMX1RSVUUgaWYgc3VjY2VlZGVkLCBLQUxfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitrYWxfYm9vbCBpcGNfcGFja19wa3RfcHVibGljKGthbF9ib29sIHVwbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBjX3BrdF90ICpwa3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwY19oZHJfdCAqaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxYm1fZ3BkICoqaGVhZF9ncGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFibV9ncGQgKip0YWlsX2dwZCk7CisKKy8qKgorICogU2VuZCBkYXRhZ3JhbSBpbiBidWZmZXIgb3IgR1BEIGxpc3QgdG8gdGhlIHdpcmVsZXNzIG5ldG93cmsgYW5kIHNlbGVjdGl2ZWx5IGZpbGwgTDQoVURQKSBhbmQgSVAgaGVhZGVyIG9uIGVhY2ggb2YgdGhlbS4KKyAqCisgKiBAcGFyYW0gICBwa3QgW0lOXSBEYXRhZ3JhbSBvciBHUEQgbGlzdCB0byBzZW50LgorICogQHBhcmFtICAgaGRyIFtJTl0gVURQL0lQIGhlYWRlciBpbmZvcm1hdGlvbiB3aGljaCB3aWxsIGJlIGZpbGxlZCB0byBzZW50IHBhY2tldChzKS4gTlVMTCBwb2ludGVyIG1lYW5zICJObyBwYWNrZXQgbW9kaWZpY2F0aW9uIGlzIG5lZWRlZCIKKyAqIEBwYXJhbSAgIGViaSBbSU5dIEVCSS9OU0FQSS4KKyAqCisgKiBAcmV0dXJuICBLQUxfVFJVRSBpZiBzdWNjZWVkZWQsIEtBTF9GQUxTRSBvdGhlcndpc2UuCisgKi8KK2thbF9ib29sIGlwY19zZW5kX3VsX3BrdChpcGNfcGt0X3QgKnBrdCwgaXBjX2hkcl90ICpoZHIsIGthbF91aW50MzIgZWJpKTsKKworLyoqCisgKiBTZW5kIGRhdGFncmFtIGluIGJ1ZmZlciBvciBHUEQgbGlzdCB0byB0aGUgd2lyZWxlc3MgbmV0b3dyayBhbmQgc2VsZWN0aXZlbHkgZmlsbCBMNChVRFApIGFuZCBJUCBoZWFkZXIgb24gZWFjaCBvZiB0aGVtLgorICoKKyAqIEBwYXJhbSAgIHBrdCBbSU5dIERhdGFncmFtIG9yIEdQRCBsaXN0IHRvIHNlbnQuCisgKiBAcGFyYW0gICBoZHIgW0lOXSBVRFAvSVAgaGVhZGVyIGluZm9ybWF0aW9uIHdoaWNoIHdpbGwgYmUgZmlsbGVkIHRvIHNlbnQgcGFja2V0KHMpLiBOVUxMIHBvaW50ZXIgbWVhbnMgIk5vIHBhY2tldCBtb2RpZmljYXRpb24gaXMgbmVlZGVkIgorICogQHBhcmFtICAgcGRuIFtJTl0gUEROIElECisgKiBAcGFyYW0gICBpcF90eXBlIFtJTl0gVHlwZSBvZiBJUCBkYXRhZ3JhbXMsIHNlZSBJUENfSVBfVFlQRV9YWFggZGVmaW5lZCBmb3IgdmFsaWQgdmFsdWVzLiBOb3RlIHRoYXQgb25seSBvbmUgb2YgSVB2NC9JUHY2IGNhbiBiZSBzZWxlY3RlZCBhbmQgTUlYIHR5cGUgaXMgTk9UIGFsbG93ZWQuCisgKgorICogQHJldHVybiAgS0FMX1RSVUUgaWYgc3VjY2VlZGVkLCBLQUxfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitrYWxfYm9vbCBpcGNfc2VuZF91bF9wa3RfYnlfcGRuKGlwY19wa3RfdCAqcGt0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGNfaGRyX3QgKmhkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQzMiBwZG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCBpcF90eXBlKTsKKworLyoqCisgKiBTZW5kIGRhdGFncmFtIGluIGJ1ZmZlciBvciBHUEQgbGlzdCB0byB0aGUgd2lyZWxlc3MgbmV0b3dyayBhbmQgc2VsZWN0aXZlbHkgZmlsbCBMNChVRFApIGFuZCBJUCBoZWFkZXIgb24gZWFjaCBvZiB0aGVtLgorICoKKyAqIEBwYXJhbSAgIHBrdCBbSU5dIERhdGFncmFtIG9yIEdQRCBsaXN0IHRvIHNlbnQuCisgKiBAcGFyYW0gICBoZHIgW0lOXSBVRFAvSVAgaGVhZGVyIGluZm9ybWF0aW9uIHdoaWNoIHdpbGwgYmUgZmlsbGVkIHRvIHNlbnQgcGFja2V0KHMpLiBOVUxMIHBvaW50ZXIgbWVhbnMgIk5vIHBhY2tldCBtb2RpZmljYXRpb24gaXMgbmVlZGVkIgorICogQHBhcmFtICAgbmV0aWZfaWQgW0lOXSBOZXR3b3JrIGludGVyZmFjZSBJRAorICogQHBhcmFtICAgaXBfdHlwZSBbSU5dIFR5cGUgb2YgSVAgZGF0YWdyYW1zLCBzZWUgSVBDX0lQX1RZUEVfWFhYIGRlZmluZWQgZm9yIHZhbGlkIHZhbHVlcy4gTm90ZSB0aGF0IG9ubHkgb25lIG9mIElQdjQvSVB2NiBjYW4gYmUgc2VsZWN0ZWQgYW5kIE1JWCB0eXBlIGlzIE5PVCBhbGxvd2VkLgorCisgKgorICogQHJldHVybiAgS0FMX1RSVUUgaWYgc3VjY2VlZGVkLCBLQUxfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitrYWxfYm9vbCBpcGNfc2VuZF91bF9wa3RfYnlfbmV0aWZfaWQoaXBjX3BrdF90ICpwa3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBjX2hkcl90ICpoZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQzMiBuZXRpZl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggaXBfdHlwZSk7CisKKy8qKgorICogU2VuZCBkYXRhZ3JhbSBpbiBidWZmZXIgb3IgR1BEIGxpc3QgdG8gdGhlIHdpcmVsZXNzIG5ldG93cmsgYW5kIHNlbGVjdGl2ZWx5IGZpbGwgTDQoVURQKSBhbmQgSVAgaGVhZGVyIG9uIGVhY2ggb2YgdGhlbS4KKyAqCisgKiBAcGFyYW0gICBwa3QgW0lOXSBEYXRhZ3JhbSBvciBHUEQgbGlzdCB0byBzZW50LgorICogQHBhcmFtICAgaGRyIFtJTl0gVURQL0lQIGhlYWRlciBpbmZvcm1hdGlvbiB3aGljaCB3aWxsIGJlIGZpbGxlZCB0byBzZW50IHBhY2tldChzKS4gTlVMTCBwb2ludGVyIG1lYW5zICJObyBwYWNrZXQgbW9kaWZpY2F0aW9uIGlzIG5lZWRlZCIKKyAqIEBwYXJhbSAgIGViaSBbSU5dIEVCSS9OU0FQSS4KKyAqIEBwYXJhbSAgIHByb3RvX2lkeCBbSU5dIFRoZSBpbmRleCB0byBkaXN0aW5xdWlzaCBmcm9tIGRpZmZlcmVudCBTSU0gQ2FyZC4KKyAqCisgKiBAcmV0dXJuICBLQUxfVFJVRSBpZiBzdWNjZWVkZWQsIEtBTF9GQUxTRSBvdGhlcndpc2UuCisgKi8KK2thbF9ib29sIGlwY19zZW5kX3VsX3BrdF9tdWx0aXBsZV9wcyhpcGNfcGt0X3QgKnBrdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGNfaGRyX3QgKmhkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDMyIGViaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggcHJvdG9faWR4KTsKKworLyoqCisgKiBTZW5kIGRhdGFncmFtIGluIGJ1ZmZlciBvciBHUEQgbGlzdCB0byB0aGUgd2lyZWxlc3MgbmV0b3dyayBhbmQgc2VsZWN0aXZlbHkgZmlsbCBMNChVRFApIGFuZCBJUCBoZWFkZXIgb24gZWFjaCBvZiB0aGVtLgorICoKKyAqIEBwYXJhbSAgIHBrdCBbSU5dIERhdGFncmFtIG9yIEdQRCBsaXN0IHRvIHNlbnQuCisgKiBAcGFyYW0gICBoZHIgW0lOXSBVRFAvSVAgaGVhZGVyIGluZm9ybWF0aW9uIHdoaWNoIHdpbGwgYmUgZmlsbGVkIHRvIHNlbnQgcGFja2V0KHMpLiBOVUxMIHBvaW50ZXIgbWVhbnMgIk5vIHBhY2tldCBtb2RpZmljYXRpb24gaXMgbmVlZGVkIgorICogQHBhcmFtICAgcGRuIFtJTl0gUEROIElECisgKiBAcGFyYW0gICBpcF90eXBlIFtJTl0gVHlwZSBvZiBJUCBkYXRhZ3JhbXMsIHNlZSBJUENfSVBfVFlQRV9YWFggZGVmaW5lZCBmb3IgdmFsaWQgdmFsdWVzLiBOb3RlIHRoYXQgb25seSBvbmUgb2YgSVB2NC9JUHY2IGNhbiBiZSBzZWxlY3RlZCBhbmQgTUlYIHR5cGUgaXMgTk9UIGFsbG93ZWQuCisgKiBAcGFyYW0gICBwcm90b19pZHggW0lOXSBUaGUgaW5kZXggdG8gZGlzdGlucXVpc2ggZnJvbSBkaWZmZXJlbnQgU0lNIENhcmQuCisgKgorICogQHJldHVybiAgS0FMX1RSVUUgaWYgc3VjY2VlZGVkLCBLQUxfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitrYWxfYm9vbCBpcGNfc2VuZF91bF9wa3RfYnlfcGRuX211bHRpcGxlX3BzKGlwY19wa3RfdCAqcGt0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGNfaGRyX3QgKmhkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQzMiBwZG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCBpcF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggcHJvdG9faWR4KTsKKworLyoqCisqIFNlbmQgZGF0YWdyYW0gaW4gYnVmZmVyIG9yIEdQRCBsaXN0IHRvIHRoZSB3aXJlbGVzcyBuZXRvd3JrIGFmdGVyIGZpbHRlcmluZyBhbmQgc2VsZWN0aXZlbHkgZmlsbCBMNChVRFApIGFuZCBJUCBoZWFkZXIgb24gZWFjaCBvZiB0aGVtLgorKgorKiBAcGFyYW0gcGt0IFtJTl0gRGF0YWdyYW0gb3IgR1BEIGxpc3QgdG8gc2VudC4KKyogQHBhcmFtIGhkciBbSU5dIFVEUC9JUCBoZWFkZXIgaW5mb3JtYXRpb24gd2hpY2ggd2lsbCBiZSBmaWxsZWQgdG8gc2VudCBwYWNrZXQocykuIE5VTEwgcG9pbnRlciBtZWFucyAiTm8gcGFja2V0IG1vZGlmaWNhdGlvbiBpcyBuZWVkZWQiCisqIEBwYXJhbSBwZG4gW0lOXSBQRE4gSUQKKyogQHBhcmFtIGlwX3R5cGUgW0lOXSBUeXBlIG9mIElQIGRhdGFncmFtcywgc2VlIElQQ19JUF9UWVBFX1hYWCBkZWZpbmVkIGZvciB2YWxpZCB2YWx1ZXMuIE5vdGUgdGhhdCBvbmx5IG9uZSBvZiBJUHY0L0lQdjYgY2FuIGJlIHNlbGVjdGVkIGFuZCBNSVggdHlwZSBpcyBOT1QgYWxsb3dlZC4KKyogQHBhcmFtIHByb3RvX2lkeCBbSU5dIFRoZSBpbmRleCB0byBkaXN0aW5xdWlzaCBmcm9tIGRpZmZlcmVudCBTSU0gQ2FyZC4KKyoKKyogQHJldHVybiBLQUxfVFJVRSBpZiBzdWNjZWVkZWQsIEtBTF9GQUxTRSBvdGhlcndpc2UuCisqLwora2FsX2Jvb2wgaXBjX3NlbmRfdWxfcGt0X29uX25vcm1hbF9wYXRoX2J5X3Bkbl9tdWx0aXBsZV9wcyhpcGNfcGt0X3QgKnBrdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGNfaGRyX3QgKmhkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDMyIHBkbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggaXBfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggcHJvdG9faWR4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKioKKyAqIFNlbmQgZGF0YWdyYW0gaW4gYnVmZmVyIG9yIEdQRCBsaXN0IHRvIHRoZSBuZXRvd3JrIGludGVyZmFjZSBhbmQgc2VsZWN0aXZlbHkgZmlsbCBMNChVRFApIGFuZCBJUCBoZWFkZXIgb24gZWFjaCBvZiB0aGVtLgorICoKKyAqIEBwYXJhbSAgIHBrdCBbSU5dIERhdGFncmFtIG9yIEdQRCBsaXN0IHRvIHNlbnQuCisgKiBAcGFyYW0gICBoZHIgW0lOXSBVRFAvSVAgaGVhZGVyIGluZm9ybWF0aW9uIHdoaWNoIHdpbGwgYmUgZmlsbGVkIHRvIHNlbnQgcGFja2V0KHMpLiBOVUxMIHBvaW50ZXIgbWVhbnMgIk5vIHBhY2tldCBtb2RpZmljYXRpb24gaXMgbmVlZGVkIgorICogQHBhcmFtICAgbmV0aWZfaWQgW0lOXSBOZXR3b3JrIGludGVyZmFjZSBJRC4KKyAqCisgKiBAcmV0dXJuICBLQUxfVFJVRSBpZiBzdWNjZWVkZWQsIEtBTF9GQUxTRSBvdGhlcndpc2UuCisgKi8KK2thbF9ib29sIGlwY19zZW5kX2RsX3BrdChpcGNfcGt0X3QgKnBrdCwgaXBjX2hkcl90ICpoZHIsIGthbF91aW50MzIgbmV0aWZfaWQpOworCisvKioKKyAqIFJlZ2lzdGVyIGEgbm90aWZpY2F0aW9uLgorICoKKyAqIEBwYXJhbSAgIGNhbGxiYWNrX2Z1bmMgW0lOXSBDYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyLgorICogQHBhcmFtICAgY2FsbGJhY2tfY29udGV4dCBbSU5dIENvbnRleHQgdG8gcGFzcyBpbiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisgKgorICogQHJldHVybiBaZXJvIG9yIHBvc2l0aXZlIHZhbHVlIGFzIG5vdGlmaWNhdGlvbiBJRCBpZiByZWdpc3RyYXRpb24gc3VjY2VlZGVkLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2thbF9pbnQzMiBpcGNfcmVnaXN0ZXJfbnRmeShpcGNfbnRmeV9jYWxsYmFja190IGNhbGxiYWNrX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2FsbGJhY2tfY29udGV4dCk7CisKKy8qKgorICogVW5pbnN0YWxsIHRoZSByZWdpc3RlcmVkIG5vdGlmaWNhdGlvbi4KKyAqCisgKiBAcGFyYW0gICBudGZ5X2lkIFtJTl0gbm90aWZpY2F0aW9uIElEIGdvdHRlbiBmcm9tIGlwY19yZWdpc3Rlcl9udGZ5KCkgdG8gdW5pbnN0YWxsLgorICovCit2b2lkIGlwY19kZXJlZ2lzdGVyX250Znkoa2FsX2ludDMyIG50ZnlfaWQpOworCisvKioKKyAqIFJlZ2lzdGVyIGxpbmsgdXAgaW5kaWNhdGlvbiBoYW5kbGVyCisgKgorICogQHBhcmFtICAgbW9kdWxlX2lkIFtJTl0gIE1vZHVsZSBJRCB0byBoYW5kbGUgSUxNIE1TR19JRF9JUENPUkVfTElOS19VUF9JTkQuCisgKgorICogQHJldHVybiAgS0FMX1RSVUUgaWYgc3VjY2VlZGVkLCBLQUxfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitrYWxfYm9vbCBpcGNfcmVnaXN0ZXJfbGlua191cF9pbmRfaGFuZGxlcihtb2R1bGVfdHlwZSBtb2R1bGVfaWQpOworCisvKioKKyAqIFVuaW5zdGFsbCB0aGUgcmVnaXN0ZXJlZCBsaW5rIHVwIGluZGljYXRpb24gaGFuZGxlcgorICovCit2b2lkIGlwY19kZXJlZ2lzdGVyX2xpbmtfdXBfaW5kX2hhbmRsZXIodm9pZCk7CisKKy8qKgorICogUmVnaXN0ZXIgSVAgdXAgaW5kaWNhdGlvbiBoYW5kbGVyCisgKgorICogQHBhcmFtICAgbW9kdWxlX2lkIFtJTl0gIE1vZHVsZSBJRCB0byBoYW5kbGUgSUxNIE1TR19JRF9JUENPUkVfSVBfVVBfSU5ELgorICoKKyAqIEByZXR1cm4gIEtBTF9UUlVFIGlmIHN1Y2NlZWRlZCwgS0FMX0ZBTFNFIG90aGVyd2lzZS4KKyAqLwora2FsX2Jvb2wgaXBjX3JlZ2lzdGVyX2lwX3VwX2luZF9oYW5kbGVyKG1vZHVsZV90eXBlIG1vZHVsZV9pZCk7CisKKy8qKgorICogVW5pbnN0YWxsIHRoZSByZWdpc3RlcmVkIGxpbmsgdXAgaW5kaWNhdGlvbiBoYW5kbGVyCisgKi8KK3ZvaWQgaXBjX2RlcmVnaXN0ZXJfaXBfdXBfaW5kX2hhbmRsZXIodm9pZCk7CisKKy8qKgorICogQmluZCB0d28gbGFuIG5ldGlmIHRvIG9uZSBhbm90aGVyIChmb3IgTUQgRGlyZWN0IFRldGhlcmluZykKKyAqCisgKiBAcGFyYW0gICBuZXRpZl9pZF8xIFtJTl0gbGFuIG5ldGlmIElELgorICogQHBhcmFtICAgbmV0aWZfaWRfMiBbSU5dIGxhbiBuZXRpZiBJRC4KKyAqLwordm9pZCBpcGNfYmluZF9sYW5fbmV0aWYoa2FsX3VpbnQzMiBuZXRpZl9pZF8xLCBrYWxfdWludDMyIG5ldGlmX2lkXzIpOworCisvKioKKyAqIFVuYmluZCB0d28gbGFuIG5ldGlmIGZyb20gb25lIGFub3RoZXIgKGZvciBNRCBEaXJlY3QgVGV0aGVyaW5nKQorICoKKyAqIEBwYXJhbSAgIG5ldGlmX2lkXzEgW0lOXSBsYW4gbmV0aWYgSUQuCisgKiBAcGFyYW0gICBuZXRpZl9pZF8yIFtJTl0gbGFuIG5ldGlmIElELgorICovCit2b2lkIGlwY191bmJpbmRfbGFuX25ldGlmKGthbF91aW50MzIgbmV0aWZfaWRfMSwga2FsX3VpbnQzMiBuZXRpZl9pZF8yKTsKKworLyoqCisgKiBTZW5kIGEgbGlzdCBvZiBJUCBkYXRhZ3JhbXMgdG8gd2lyZWxlc3MgbmV0d29yay4gKEdlbjkzKQorICoKKyAqIEBwYXJhbSAgIHN0YXJ0X2lkeCBbSU5dIFN0YXJ0IGlkeCBvZiB0aGUgTWV0YSBsaXN0LgorICogQHBhcmFtICAgZW5kX2lkeCBbSU5dIFN0YXJ0IGlkeCBvZiB0aGUgTWV0YSBsaXN0LgorICogQHBhcmFtICAgcXVldWVfdHlwZSBbSU5dIFR5cGUgb2YgdGhlIE1ldGEgcXVldWUuCisgKgorICogQHJldHVybiBLQUxfVFJVRSBpZiBzdWNjZXNzZnVsLCBLQUxfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitrYWxfYm9vbCBpcGNfbWV0YV91cGxpbmsoa2FsX3VpbnQxNiBzdGFydF9pZHgsIGthbF91aW50MTYgZW5kX2lkeCwgTEhJRl9RVUVVRV9UWVBFIHF1ZXVlX3R5cGUpOworCisvKioKKyAqIEdldCBwZG5faWQgJiBwcm90b2NvbCBpbmRleCBieSBnaXZlbiBuZXRpZiBJRAorICoKKyAqIEBwYXJhbSAgIG5ldGlmX2lkIFtJTl0gVGhlIG5ldHdvcmsgaW50ZXJmYWNlIElELgorICogQHBhcmFtICAgaXBfdHlwZSBbSU5dIFRoZSBJUCB0eXBlIG9mIHRoZSBxdWVyaWVkIFBETi4KKyAqIEBwYXJhbSAgIHBfcGRuX2lkIFtPVVRdIFRoZSByZXN1bHQgb2YgdGhlIFBETiBJRC4KKyAqIEBwYXJhbSAgIHBfcHJvdG9faWR4IFtPVVRdIFRoZSByZXN1bHQgb2YgdGhlIHByb3RvY29sIGluZGV4LgorICoKKyAqIEByZXR1cm4gS0FMX1RSVUUgaWYgc3VjY2Vzc2Z1bCwgS0FMX0ZBTFNFIG90aGVyd2lzZS4KKyAqLwora2FsX2Jvb2wgaXBjX2ZpbmRfcGRuX2lkX2J5X25ldGlmX2lkKGthbF91aW50MzIgbmV0aWZfaWQsIGthbF91aW50OCBpcF90eXBlLCBrYWxfdWludDMyICpwX3Bkbl9pZCwga2FsX3VpbnQ4ICpwX3Byb3RvX2lkeCk7CisKKy8qKgorICogU2VuZCBkYXRhZ3JhbSBpbiBidWZmZXIgb3IgRElEIGxpc3QgdG8gdGhlIG5ldG93cmsgaW50ZXJmYWNlIGFuZCBzZWxlY3RpdmVseSBmaWxsIEw0KFVEUCkgYW5kIElQIGhlYWRlciBvbiBlYWNoIG9mIHRoZW0uIChHZW45MykKKyAqCisgKiBAcGFyYW0gICBwa3QgW0lOXSBEYXRhZ3JhbSBvciBESUQgbGlzdCB0byBzZW50LgorICogQHBhcmFtICAgaGRyIFtJTl0gVURQL0lQIGhlYWRlciBpbmZvcm1hdGlvbiB3aGljaCB3aWxsIGJlIGZpbGxlZCB0byBzZW50IHBhY2tldChzKS4gTlVMTCBwb2ludGVyIG1lYW5zICJObyBwYWNrZXQgbW9kaWZpY2F0aW9uIGlzIG5lZWRlZCIKKyAqIEBwYXJhbSAgIG5ldGlmX2lkIFtJTl0gTmV0d29yayBpbnRlcmZhY2UgSUQuCisgKgorICogQHJldHVybiAgS0FMX1RSVUUgaWYgc3VjY2VlZGVkLCBLQUxfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitrYWxfYm9vbCBpcGNfc2VuZF9kbF9wa3RfaW5fZGlkKGlwY19wa3RfdCAqcGt0LCBpcGNfaGRyX3QgKmhkciwga2FsX3VpbnQzMiBuZXRpZl9pZCk7CisKKy8qKgorICogUmUtZmlsdGVyaW5nIEFQSSBmb3IgaXBjX2ZyYWdtZW50IHN1Ym1vdWxlIHRvIGNoZWNrIHRoZSBmaWx0ZXJpbmcgcmVzdWx0IG9mIHRoZSBmcmFnbWVudCBwYWNrZXRzLiAoR2VuOTMpCisgKgorICogQHBhcmFtICAgaXBfdHlwZSBbSU5dIFR5cGUgb2YgdGhlIHBhY2tldCwgZWl0aGVyIElQQ19JUF9UWVBFX0lQVjQgb3IgSVBDX0lQX1RZUEVfSVBWNi4KKyAqIEBwYXJhbSAgIGluZm8gW0lOXSBJbmZvcm1hdGlvbiBmb3IgcmUtZmlsdGVyaW5nLgorICogQHBhcmFtICAgcF9oZWFkIFtPVVRdIEhlYWQgb2YgR1BEIGxpc3QgcmV0dXJuCisgKiBAcGFyYW0gICBwX3RhaWwgW09VVF0gVGFpbCBvZiBHUEQgbGlzdCByZXR1cm4KKyAqLwordm9pZCBpcGNfZnJhZ19yZWZpbHRlcihrYWxfdWludDggaXBfdHlwZSwgaXBjX2ZyYWdfcmVmaWx0ZXJfaW5mb190ICppbmZvLCBxYm1fZ3BkICpwX2hlYWQsIHFibV9ncGQgKnBfdGFpbCk7CisKKy8qKgorICogUmUtZmlsdGVyaW5nIEFQSSBmb3IgaXBjX2ZyYWdtZW50IHN1Ym1vdWxlIHRvIHNlbmQgZnJhZ21lbnQgcGFja2V0cyB0byBBUCB3aGVuIGZyYWdtZW50IGNvbGxlY3Rpb24gdGltZW91dCBvciBleGNlcHRpb24uIChHZW45MykKKyAqCisgKiBAcGFyYW0gICBpcF90eXBlIFtJTl0gVHlwZSBvZiB0aGUgcGFja2V0LCBlaXRoZXIgSVBDX0lQX1RZUEVfSVBWNCBvciBJUENfSVBfVFlQRV9JUFY2LgorICogQHBhcmFtICAgaW5mbyBbSU5dIEluZm9ybWF0aW9uIGZvciByZS1maWx0ZXJpbmcuCisgKiBAcGFyYW0gICBwX2hlYWQgW09VVF0gSGVhZCBvZiBHUEQgbGlzdCByZXR1cm4KKyAqIEBwYXJhbSAgIHBfdGFpbCBbT1VUXSBUYWlsIG9mIEdQRCBsaXN0IHJldHVybgorICovCit2b2lkIGlwY19mcmFnX3NlbmRfcGt0KGthbF91aW50OCBpcF90eXBlLCBpcGNfZnJhZ19yZWZpbHRlcl9pbmZvX3QgKmluZm8sIHFibV9ncGQgKnBfaGVhZCwgcWJtX2dwZCAqcF90YWlsKTsKKworLyoKKyAqIExvb2sgaW50byBwYWNrZXQgdG8gZ2F0aGVyIG5lY2Vzc2FyeSBJUCBoZWFkZXIgJiB0aGUgdXBwZXIgbGF5ZXIgcHJvdG9jb2wgaGVhZGVyIGluZm9ybWF0aW9uLgorICogTm90ZSB0aGF0LCBmb3IgSVB2NidzIHBhY2tldCwgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb24ndCBoYW5kbGUgdGhlIGZvbGxvd2luZyBjYXNlcyBhbmQgdGFrZSB0aGVtICBhcyBub3QgZm91bmQ6CisgKiAgICAgIzEuIElQdjYgcGFja2V0IHdpdGggRVNQIGhlYWRlcjoKKyAqICAgICAgICBBY2NvcmRpbmcgdG8gUkZDIDQzMDMgc2VjdGlvbiAzLjEsIGV2ZXJ5dGhpbmcgYWZ0ZXIgRVNQIGhlYWRlciBpcyBlbmNyeXB0ZWQuCisgKiAgICAgICAgU2luY2Ugd2UgY2Fubm90IGRlY3J5cHQgaXQsIHdlIGNhbm5vdCBhY3R1cmFsbHkgbG9vayBpbnRvIHRoZSB1cHBlciBsYXllciBwcm90b2NvbC4KKyAqCisgKiAgICAgIzIuIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBub3QgZGVmaW5lZCBpbiBSRkMgMjQ2MDoKKyAqICAgICAgICBJZiBuZWNlc3NhcnksIHdlIHdpbGwgaGFuZGxlIHRoZW0gaGVyZSBhY2NvcmRpbmcgdG8gY29ycmVzcG9uZGluZyBSRkMuCisgKgorICogICAgICMzLiBmcmFnbWVudGF0aW9uOgorICogICAgICAgIE5vIGFwcGxpY2F0aW9uIG5lZWRzIElQdjYgZnJhZ21lbnRhdGlvbiBvbiBhIG1vZGVtIHBsYXRmb3JtIHNvIGZhci4KKyAqCisgKiBAcGFyYW0gICBpcHY2X3BhY2tldCBbSU5dIFRoZSBwYWNrZXQuCisgKiBAcGFyYW0gICBwYWNrZXRfbGVuIFtJTl0gTGVuZ3RoIG9mIHRoZSBwYWNrZXQuCisgKiBAcGFyYW0gICBwX2luZm8gW09VVF0gVGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBnYXRoZXJlZCBmb3IgbGF0ZXIgcGFja2V0ZSBmaWx0ZXJpbmcuCisgKgorICogQHJldHVybiBLQUxfVFJVRSBpZiB0aGUgcGFja2V0J3MgaW5mb3JtYXRpb24gd2FzIGdhdGhlcmVkIHN1Y2Vzc2Z1bGx5LCBLQUxfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitrYWxfYm9vbCBpcGNfZ2V0X3BhY2tldF9pbmZvKGthbF91aW50OCAqcF9wYWNrZXQsIGthbF91aW50MTYgcGFja2V0X2xlbiwgaXBjX3BhY2tldF9pbmZvX3QgKnBfaW5mbyk7CisKKy8qKgorICogU2VuZCBhIGxpc3Qgb2YgSVAgZGF0YWdyYW1zIGZpbHRlci1vdXQgYnkgSVBGLiAoR2VuOTUpCisgKgorICogQHBhcmFtICAgc3RhcnRfaWR4IFtJTl0gU3RhcnQgaWR4IG9mIHRoZSBNZXRhIGxpc3QuCisgKiBAcGFyYW0gICBlbmRfaWR4IFtJTl0gU3RhcnQgaWR4IG9mIHRoZSBNZXRhIGxpc3QuCisgKiBAcGFyYW0gICBxdWV1ZV90eXBlIFtJTl0gVHlwZSBvZiB0aGUgTWV0YSBxdWV1ZS4KKyAqCisgKi8KK3ZvaWQgIGlwY19tZXRhX2Rvd25saW5rKGthbF91aW50MTYgc3RhcnRfaWR4LCBrYWxfdWludDE2IGVuZF9pZHgsIGthbF91aW50MzIgcXVldWVfdHlwZSk7CisKKy8qKgorICogUXVlcnkgYm91bmQgUEROIGlkIGFjY29yZGluZyB0byBuZXRpZl9pZCBhbmQgaXBfdHlwZQorICoKKyAqIEBwYXJhbSAgIG5ldGlmX2lkIFtJTl0gbmV0d29yayBpbnRlcmZhY2UgSUQuCisgKiBAcGFyYW0gICBpcF90eXBlIFtJTl0gSVBDX0lQX1RZUEVfSVBWNCAvIElQQ19JUF9UWVBFX0lQVjYuIChpcGNfZW51bXMuaCkKKyAqIEBwYXJhbSAgIHBkbl9pZCBbT1VUXSByZXR1cm4gdGhlIGJvdW5kIFBETiBJRC4KKyAqCisgKiBAcmV0dXJuIEtBTF9UUlVFIGlmIHN1Y2Nlc3NmdWwsIEtBTF9GQUxTRSBvdGhlcndpc2UuCisgKi8KK2thbF9ib29sIGlwY19xdWVyeV9wZG5fYnlfbmV0aWYoa2FsX3VpbnQzMiBuZXRpZl9pZCwga2FsX3VpbnQ4IGlwX3R5cGUsIGthbF9pbnQzMiAqcGRuX2lkKTsKKworLyoqCisgKiBjYWxjdWxhdGUgVENQIGNoZWNrc3VtCisgKgorICogQHBhcmFtICAgaXNfaXB2NCAgICBpcHY0IG9yIGlwdjYKKyAqIEBwYXJhbSAgIHNyY19hZGRyICAgc291cmNlIGFkZHJlc3MKKyAqIEBwYXJhbSAgIGRzdF9hZGRyICAgZGVzdGluYXRpb24gYWRkcmVzcworICogQHBhcmFtICAgdGNwX2hlYWRlciB0Y3AgaGVhZGVyIHBvaW50ZXIKKyAqIEBwYXJhbSAgIHRjcF9sZW4gICAgdGNwIGxlbmd0aAorICovCitrYWxfdWludDE2IGlwY19jYWxjX3RjcF9jaGVja3N1bShrYWxfYm9vbCBpc19pcHY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICpzcmNfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCAqZHN0X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggKnRjcF9oZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDMyIHRjcF9sZW4pOworCisvKioKKyAqIGNhbGN1bGF0ZSBVRFAgY2hlY2tzdW0KKyAqCisgKiBAcGFyYW0gICBpc19pcHY0ICAgIGlwdjQgb3IgaXB2NgorICogQHBhcmFtICAgc3JjX2FkZHIgICBzb3VyY2UgYWRkcmVzcworICogQHBhcmFtICAgZHN0X2FkZHIgICBkZXN0aW5hdGlvbiBhZGRyZXNzCisgKiBAcGFyYW0gICB1ZHBfaGVhZGVyIHVkcCBoZWFkZXIgcG9pbnRlcgorICogQHBhcmFtICAgdWRwX2xlbiAgICB1ZHAgbGVuZ3RoCisgKi8KK2thbF91aW50MTYgaXBjX2NhbGNfdWRwX2NoZWNrc3VtKGthbF9ib29sIGlzX2lwdjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggKnNyY19hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICpkc3RfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCAqdWRwX2hlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50MzIgdWRwX2xlbik7CisKKy8qKgorICogY2FsY3VsYXRlIElQdjQgY2hlY2tzdW0KKyAqCisgKiBAcGFyYW0gICBpcF9oZWFkZXIgSVAgaGVhZGVyIHBvaW50ZXIKKyAqLwora2FsX3VpbnQxNiBpcGNfY2FsY19pcHY0X2NoZWNrc3VtKGthbF91aW50OCAqaXBfaGVhZGVyKTsKKworLyoqCisgKiBzZW5kIERMIGRpZCBieSBjaGFubmVsX2lkCisgKgorICogQHBhcmFtICAgbmV0X3R5cGUgICAgbmV0d29yayB0eXBlCisgKiBAcGFyYW0gICBjaF9pZCAgICAgICBjaGFubmVsIGlkCisgKiBAcGFyYW0gICBwX2RpZF9oZWFkICBkaWQgaGVhZAorICogQHBhcmFtICAgcF9kaWRfdGFpbCAgZGlkIHRhaWwKKyAqLwora2FsX2Jvb2wgaXBjX3NlbmRfZGxfZGlkX2J5X2NoX2lkKGthbF91aW50OCBuZXRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggY2hfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBjbV9kaWQgKnBfZGlkX2hlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBjbV9kaWQgKnBfZGlkX3RhaWwpOworCisKKy8qKgorICogU2VuZCBkYXRhZ3JhbSBpbiBRQk0gR1BEIHRvIHRoZSBuZXRvd3JrIGludGVyZmFjZSBhZnRlciB1bndpbmRpbmcgY2FsbCBzdGFjaworICoKKyAqIEBwYXJhbSAgIHBrdCAgICAgICAgICAgUGFja2V0IEdQRAorICogQHBhcmFtICAgbmV0aWZfaWQgICAgICBOZXR3b3JrIGludGVyZmFjZSBJRC4KKyAqIEBwYXJhbSAgIHNlc3Npb25fdHlwZSAgSVBWNC9WNiBzZXNzaW9uIHR5cGUKKyAqLwora2FsX2Jvb2wgaXBjX3NlbmRfZGxfcGt0X2VucXVldWUocWJtX2dwZCAqcGt0LCBrYWxfdWludDMyIG5ldGlmX2lkLCBrYWxfdWludDMyIHNlc3Npb25fdHlwZSk7CisKKy8qKgorICogcmVnaXN0ZXIgaXBjIGZpbHRlcgorICoKKyAqIEBwYXJhbSAgIGRhdGFfcGF0aF9kaXJlY3Rpb24gIERMX0RBVEFfUEFUSCBvciBVTF9EQVRBX1BBVEgKKyAqIEBwYXJhbSAgIHBfcnVsZXMgICAgICAgICAgICAgIGZpbHRlciBydWxlcworICogQHBhcmFtICAgcF9udGZ5X2N0eHQgICAgICAgICAgZmlsdGVyIG1hdGNoIG5vdGlmaWNhdGlvbiBjb250ZXh0CisgKgorICogQHJldHVybiAgbm9uIG5lZ2F0aXZlIGZpbHRlciBpZCBmb3Igc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIElQQ19JTlZBTElEX0ZJTFRFUl9JRAorICovCitrYWxfaW50MzIgaXBjX3JlZ19maWx0ZXIoaXBjX2RhdGFfcGF0aF9kaXJlY3Rpb25fZSBkYXRhX3BhdGhfZGlyZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwY19maWx0ZXJfcnVsZXNfdCAqcF9ydWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGNfZmlsdGVyX250ZnlfY3R4dF90ICpwX250ZnlfY3R4dCk7CisKKy8qKgorICogZGVyZWdpc3RlciBpcGMgZmlsdGVyCisgKgorICogQHBhcmFtICAgZmlsdGVyX2lkICB0aGUgZmlsdGVyX2lkIHdoaWNoIHdhbnQgdG8gYmUgZGVyZWdpc3RlcmVkCisgKgorICogQHJldHVybiAgS0FMX1RSVUUgaWYgc3VjY2Vzc2Z1bCwgS0FMX0ZBTFNFIG90aGVyd2lzZS4KKyAqLwora2FsX2Jvb2wgaXBjX2RlcmVnX2ZpbHRlcihrYWxfaW50MzIgZmlsdGVyX2lkKTsKKworLyoqCisgKiBHZXQgZGF0YSB1c2FnZSBieSBOZXRpZl9pZAorICoKKyAqIEBwYXJhbSBuZXRpZl9pZCBbSU5dIHRoZSBuZXRpZl9pZCBmb3Igd2hpY2ggd2FudCB0byBrbm93IGRhdGEgdXNnYWUKKyAqIEBwYXJhbSBkYXRhX3VzYWdlIFtPVVRdIGRhdGEgdXNhZ2Ugb2YgdXBsaW5rIGFuZCBkb3dubGluayBwYXRoCisgKgorICogQHJldHVybiBLQUxfVFJVRSBpZiBzdWNjZXNzZnVsLCBLQUxfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitrYWxfYm9vbCBpcGNfZ2V0X2RhdGFfdXNhZ2VfYnlfbmV0aWZfaWQoa2FsX3VpbnQzMiBuZXRpZl9pZCwgaXBjX2RhdGFfdXNhZ2VfaW5mb190ICpkYXRhX3VzYWdlKTsKKworLyoqCisgKiBHZXQgZGF0YSB1c2FnZSBieSBwZG5faWQKKyAqCisgKiBAcGFyYW0gIHBkbl9pZCBbSU5dICB0aGUgcGRuX2lkIGZvciB3aGljaCB3YW50IHRvIGtub3cgZGF0YSB1c2dhZQorICogQHBhcmFtICBwcm90b19pZHggW0lOXSAgdGhlIHNpbV9pZHggZm9yIHdoaWNoIHdhbnQgdG8ga25vdyBkYXRhIHVzZ2FlCisgKiBAcGFyYW0gIGRhdGFfdXNhZ2UgW09VVF0gIGRhdGEgdXNhZ2Ugb2YgdXBsaW5rIGFuZCBkb3dubGluayBwYXRoCisgKgorICogQHJldHVybiAgS0FMX1RSVUUgaWYgc3VjY2Vzc2Z1bCwgS0FMX0ZBTFNFIG90aGVyd2lzZS4KKyAqLwora2FsX2Jvb2wgaXBjX2dldF9kYXRhX3VzYWdlX2J5X3Bkbl9pZChrYWxfdWludDMyIHBkbl9pZCwga2FsX3VpbnQ4IHByb3RvX2lkeCwgaXBjX2RhdGFfdXNhZ2VfaW5mb190ICpkYXRhX3VzYWdlKTsKKworI2VuZGlmIC8qIF9fSU5DX0lQQ19BUElfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9pcGNfZGVmc19wdWJsaWMuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvaXBjX2RlZnNfcHVibGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODliNDAxYQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvaXBjX2RlZnNfcHVibGljLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgaXBjX2RlZnNfcHVibGljLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgVEFUQUtBCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgSVAgQ29yZSBwdWJsaWMgZGVmaW5pdGlvbi4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fSU5DX0lQQ19ERUZTX1BVQkxJQ19ICisjZGVmaW5lIF9fSU5DX0lQQ19ERUZTX1BVQkxJQ19ICisKKy8qIDIwMTEvMTIvMTY6IFNEMS9Nb2phIGd1YXJhbnRlZXMgcGRuX2lkIGZhbGxzIGluIFswLDE1XS4gKi8KKy8qIDIwMTYvMDMvMTU6IFRvIHN1cHBvcnQgbXVsdGktUFMsIG5lZWQgdG8gZW5sYXJnZSBtYXhpbXVtIG5ldGlmL3Nlc3Npb24gbnVtYmVyLiAqLworI2RlZmluZSBJUENfTUFYX1NFU1NJT05fQ05UICAgICAgICAgICAgIDI1NgorI2RlZmluZSBJUENfTUFYX05FVElGX0NOVCAgICAgICAgICAgICAgIDY0IC8qKjwgTWF4aW1hbCBudW1iZXIgb2YgaG9zdCBuZXR3b3JrIGludGVyZmFjZXMgc3VwcG9ydGVkLiBOb3RlIHRoYXQsIGl0IG11c3QgPD0gNjQuICovCisjZGVmaW5lIElQQ19NQVhfSVBfSURfQ05UICAgICAgICAgICAgICAgSVBDX01BWF9ORVRJRl9DTlQKKyNkZWZpbmUgSVBDX0lNU19GSUxURVJfQ05UICAgICAgICAgICAgICAyCisjZGVmaW5lIElQQ19BT01HUl9GSUxURVJfQ05UICAgICAgICAgICAgKElQQ19NQVhfTkVUSUZfQ05UICogMikgLyogREhDUHY0IGFuZCBESENQdjYgKi8KKyNkZWZpbmUgSVBDX01BWF9ETF9GSUxURVJfQ05UICAgICAgICAgICAoSVBDX01BWF9TRVNTSU9OX0NOVCArIElQQ19JTVNfRklMVEVSX0NOVCkKKyNkZWZpbmUgSVBDX01BWF9VTF9GSUxURVJfQ05UICAgICAgICAgICAoSVBDX0FPTUdSX0ZJTFRFUl9DTlQpCisjZGVmaW5lIElQQ19QRk1fTUFYX0ZJTFRFUl9DTlQgICAgICAgICAgMjU2CisjZGVmaW5lIElQQ19NQVhfRklMVEVSX0NOVCAgICAgICAgICAgICAgKElQQ19NQVhfRExfRklMVEVSX0NOVCArIElQQ19NQVhfVUxfRklMVEVSX0NOVCArIElQQ19QRk1fTUFYX0ZJTFRFUl9DTlQpCisjZGVmaW5lIElQQ19ERUxfT0JKRUNUX1NMRUVQX1RJQ0tTICAgICAgS0FMX1RJQ0tTXzEwX01TRUMKKyNkZWZpbmUgSVBDX1dfTE9DS19PQkpFQ1RfU0xFRVBfVElDS1MgICAxIAorI2RlZmluZSBJUENfREVGX1RUTCAgICAgICAgICAgICAgICAgICAgIDEyOAorI2RlZmluZSBJUENfTUFYX05URllfQ05UICAgICAgICAgICAgICAgIDQKKworI2VuZGlmIC8qIF9fSU5DX0lQQ19ERUZTX1BVQkxJQ19IICovCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2lwY19lbnVtcy5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9pcGNfZW51bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTE2NTk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9pcGNfZW51bXMuaApAQCAtMCwwICsxLDM4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGlwY19lbnVtcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIFRBVEFLQQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIElQIENvcmUgcHVibGljIGVudW1lcmF0aW9uIGRlZmluaXRpb24uCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19JTkNfSVBDX0VOVU1TX0gKKyNkZWZpbmUgX19JTkNfSVBDX0VOVU1TX0gKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERhdGEgc3RydWN0dXJlIGRlZmluaXRpb24uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBJUENfSVBfVFlQRV9NSVhFRCAgICAgICAgICAgMAorI2RlZmluZSBJUENfSVBfVFlQRV9JUFY0ICAgICAgICAgICAgMQorI2RlZmluZSBJUENfSVBfVFlQRV9JUFY2ICAgICAgICAgICAgMgorI2RlZmluZSBJUENfSVBfVFlQRV9JTlZBTElEICAgICAgICAgMworCisvKiogZXh0cmEgZmxhZ3MgKi8KKyNkZWZpbmUgSVBDX0RSUF9BTExXX1BLVCAgICAgICAgICAgICgweDAwMDEgPDwgMCkKKworLyoqIE5ldHdvcmsgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgSVBDX0ZfREhDUDRDICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8qKiBESENQdjQgQ2xpZW50ICovCisjZGVmaW5lIElQQ19GX0RZTkFNSUNfUV9NQVBQSU5HICAgICAweDAwMDAwMDA4ICAvKiogQ0NNTkkgRHluYW1pYyBRdWV1ZSBNYXBwaW5nICovCisjZGVmaW5lIElQQ19GX1RFVEhFUklOR19ST1VURSAgICAgICAweDAwMDAwMDAyICAvKiogRGlyZWN0IFRldGhlcmluZyByb3V0aW5nIHJlcXVpcmVkICovCisjZGVmaW5lIElQQ19GX0xBTiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0ICAvKiogTEFOIG5ldGlmLCB3aGljaCBiaW5kcyB0byBvdGhlciBuZXRpZiAqLworI2RlZmluZSBJUENfRl9MQVRFTkNZX0NPTkNFUk4gICAgICAgMHgwMDAxMDAwMCAgLyoqIExhdGVuY3kgQ29uY2VybiBNb2R1bGUgKi8KKyNkZWZpbmUgSVBDX0ZfVEVTVF9MT09QQkFDS19BICAgICAgIDB4MTAwMDAwMDAgIC8qKiBUZXN0IExvb3BiYWNrIG1vZGUgQSAqLworI2RlZmluZSBJUENfRl9URVNUX0xPT1BCQUNLX0IgICAgICAgMHgyMDAwMDAwMCAgLyoqIFRlc3QgTG9vcGJhY2sgbW9kZSBCICovCisjZGVmaW5lIElQQ19GX0tFRVBfUEROX01BUFBJTkcgICAgICAweDAwMDAwMDEwICAvKiogS2VlcCBwcmV2aW91cyBQRE4gbWFwcGluZyBzdGF0ZSAqLworCisjZGVmaW5lIElQQ19JTlZBTElEX0hBTkRMRSAgICAgICAgICBOVUxMCisKKy8qKiBGaWx0ZXIgZmVhdHVyZSBvcHRpb24gKi8KKyNkZWZpbmUgSVBDX0ZJTFRFUl9GRUFUVVJFX1dDICAgICAgICAgICAgICAgICAgICgweDAxIDw8IDApICAvKiogV2lsZCBjYXJkIGZpbHRlcjogcmVwb3J0IG1hdGNoZWQgdG8gYWxsIHBhY2tldHMgKi8KKyNkZWZpbmUgSVBDX0ZJTFRFUl9GRUFUVVJFX0JXTSAgICAgICAgICAgICAgICAgICgweDAxIDw8IDEpICAvKiogQnlwYXNzIHdoZW4gbWF0Y2hlZCBmaWx0ZXI6IGJ5cGFzcyB0aGUgbWF0Y2hlZCBwYWNrZXRzICovCisjZGVmaW5lIElQQ19GSUxURVJfRkVBVFVSRV9JUFY2X0RQRk0gICAgICAgICAgICAoMHgwMSA8PCAzKSAgLyoqIFNwZWNpYWwgZmVhdHVyZSBmb3IgSVBWNiBNRFQobm8gR1BEIGNhbGxiYWNrKSBbR2VuOTUgb25seV0qLworI2RlZmluZSBJUENfRklMVEVSX0ZFQVRVUkVfRlJBRyAgICAgICAgICAgICAgICAgKDB4MDEgPDwgMikgIC8qKiBTdXBwb3J0IHRvIGZpbHRlciBmcmFnbWVudCBwYWNrZXQgKi8KKyNkZWZpbmUgSVBDX0ZJTFRFUl9GRUFUVVJFX0NMT05FICAgICAgICAgICAgICAgICgweDAxIDw8IDYpICAvKiogTWF0Y2hlZCBmaWx0ZXIgYWN0aW9uIDogY2xvbmUgaXQgKi8KKyNkZWZpbmUgSVBDX0ZJTFRFUl9GRUFUVVJFX1BGTV9ETCAgICAgICAgICAgICAgICgweDAxIDw8IDcpICAvKiogRmlsdGVyIHJlZ2lzdGVyZWQgdGhyb3VnaCBQRk0gKi8KKyNkZWZpbmUgSVBDX0ZJTFRFUl9GRUFUVVJFX0NVU1RfRklMVEVSICAgICAgICAgICgweDAxIDw8IDQpICAvKiogQWRkIGN1c3RvbWl6ZWQgZmlsdGVyIGZsb3cgKi8KKyNkZWZpbmUgSVBDX0ZJTFRFUl9GRUFUVVJFX0NVU1RfRklMVEVSX1dfSU5GTyAgICgweDAxIDw8IDUpICAvKiogQWRkIGN1c3RvbWl6ZWQgZmlsdGVyIGZsb3cgYW5kIGNhbGxiYWNrIHdpdGggSVBDX0lORk8gaW5zdGVhZCBvZiB1c2VyIGFyZ3VtZW50cyAqLworI2RlZmluZSBJUENfRklMVEVSX0ZFQVRVUkVfSUdfUE4gICAgICAgICAgICAgICAgKDB4MDEgPDwgOCkgIC8qKiBJZ25vcmUgUEROICYgTkVUSUYgKi8KKworLyoqIEZpbHRlciBydWxlICovCisjZGVmaW5lIElQQ19GSUxURVJfQllfUFJPVE9DT0wgICAgICAoMHgwMDAxIDw8IDApCisjZGVmaW5lIElQQ19GSUxURVJfQllfU1JDX1BPUlQgICAgICAoMHgwMDAxIDw8IDEpCisjZGVmaW5lIElQQ19GSUxURVJfQllfRFNUX1BPUlQgICAgICAoMHgwMDAxIDw8IDIpCisjZGVmaW5lIElQQ19GSUxURVJfQllfU1JDX0lQVjQgICAgICAoMHgwMDAxIDw8IDMpCisjZGVmaW5lIElQQ19GSUxURVJfQllfRFNUX0lQVjQgICAgICAoMHgwMDAxIDw8IDQpCisjZGVmaW5lIElQQ19GSUxURVJfQllfU1JDX0lQVjYgICAgICAoMHgwMDAxIDw8IDUpCisjZGVmaW5lIElQQ19GSUxURVJfQllfRFNUX0lQVjYgICAgICAoMHgwMDAxIDw8IDYpCisjZGVmaW5lIElQQ19GSUxURVJfQllfSUNNUFY0X1RZUEUgICAoMHgwMDAxIDw8IDcpCisjZGVmaW5lIElQQ19GSUxURVJfQllfSUNNUFY2X1RZUEUgICAoMHgwMDAxIDw8IDgpCisjZGVmaW5lIElQQ19GSUxURVJfQllfRUJJICAgICAgICAgICAoMHgwMDAxIDw8IDkpCisjZGVmaW5lIElQQ19GSUxURVJfQllfUEROX0lEICAgICAgICAoMHgwMDAxIDw8IDEwKQorI2RlZmluZSBJUENfRklMVEVSX0JZX05FVElGX0lEICAgICAgKDB4MDAwMSA8PCAxMSkKKyNkZWZpbmUgSVBDX0ZJTFRFUl9CWV9UQ1BfRkxBR1MgICAgICgweDAwMDEgPDwgMTIpCisjZGVmaW5lIElQQ19GSUxURVJfQllfU1BJICAgICAgICAgICAoMHgwMDAxIDw8IDEzKQorCisvKiogTmV0d29yayBpbnRlcmZhY2UgSUQuICovCit0eXBlZGVmIGVudW0gX2lwY19uZXRpZl9pZF9lIHsKKyAgICBJUENfTkVUSUZfSURfQ0NNTklfQkVHSU4gPSAweDAwMDAwMDAwLAorICAgIElQQ19ORVRJRl9JRF9DQ01OSV9FTkQgICA9IDB4MDAwMDAwZmYsCisgICAgSVBDX05FVElGX0lEX0VUSF9CRUdJTiAgID0gMHgwMDAwMDEwMCwKKyAgICBJUENfTkVUSUZfSURfRVRIX0VORCAgICAgPSAweDAwMDAwMWZmLAorICAgIElQQ19ORVRJRl9JRF9NQklNX0JFR0lOICA9IDB4MDAwMDAyMDAsCisgICAgSVBDX05FVElGX0lEX01CSU1fRU5EICAgID0gMHgwMDAwMDJmZiwKKyAgICBJUENfTkVUSUZfSURfUFBQX0JFR0lOICAgPSAweDAwMDAwMzAwLAorICAgIElQQ19ORVRJRl9JRF9QUFBfRU5EICAgICA9IDB4MDAwMDAzZmYsCisgICAgSVBDX05FVElGX0lEX0xISUZfQkVHSU4gID0gMHgwMDAwMDQwMCwKKyAgICBJUENfTkVUSUZfSURfTEhJRl9FTkQgICAgPSAweDAwMDAwNGZmLAorICAgIElQQ19ORVRJRl9JRF9NQ0lGX0JFR0lOICA9IDB4MDAwMDA1MDAsCisgICAgSVBDX05FVElGX0lEX01DSUZfRU5EICAgID0gMHgwMDAwMDVmZiwKKyAgICBJUENfTkVUSUZfSURfVk5JRl9CRUdJTiAgPSAweDAwMDAwNjAwLAorICAgIElQQ19ORVRJRl9JRF9WTklGX0VORCAgICA9IDB4MDAwMDA2ZmYsCit9IGlwY19uZXRpZl9pZF9lOworCisvKiogSVBDb3JlIGRlZmluZXMgbmV0aWYgdHlwZSBmb3IgQ0NNTkkgUXVldWUgTWFwcGluZyAqLwordHlwZWRlZiBlbnVtIF9pcGNfbmV0aWZfdHlwZV9lIHsKKyAgICBJUENfTkVUSUZfVFlQRV9OT1JNQUwsCisgICAgSVBDX05FVElGX1RZUEVfTEFURU5DWV9DT05DRVJOLAorfSBpcGNfbmV0aWZfdHlwZV9lOworCisvKiogVUwgRGF0YSBUaHJvdHRsaW5nIGZlYXR1cmUgb3B0aW9uICovCisjZGVmaW5lIElQQ19USFJPVFRMRV9GRUFUVVJFX0JMT0NLX0xBTlRFTkNZX0NPTkNFUk4gMHgwMQorCisvKiogR2VuOTMgREwgRElEIEhJRiBUeXBlIEVudW0gZGVmaW5pdGlvbiAqLwordHlwZWRlZiBlbnVtIF9pcGNfc2lfaGlmX3R5cGVfZSB7CisgICAgSVBDX1NJX0hJRl9UWVBFX0xISUYgPSAwLAorICAgIElQQ19TSV9ISUZfVFlQRV9VU0IgID0gMSwKKyAgICBJUENfU0lfSElGX1RZUEVfTUNJRiA9IDIsCisgICAgSVBDX1NJX0hJRl9UWVBFX1ZOSUYgPSAzLAorICAgIElQQ19TSV9ISUZfVFlQRV9JR1IgID0gMHg3LAorICAgIElQQ19TSV9ISUZfVFlQRV9NQVgsCit9IGlwY19zaV9oaWZfdHlwZV9lOworCisvKiogR2V0IFBhY2tldCBJbmZvIEVycm9yIENvZGUgKi8KK3R5cGVkZWYgZW51bSBfaXBjX3BhY2tldF9pbmZvX3BhcnNlcl9lcnJvcl9jb2RlIHsKKyAgICBWNF9JUFY0X0hEUl9GQUlMRUQgPSAwLAorICAgIFY0X1VEUF9IRFJfRkFJTEVELAorICAgIFY0X1RDUF9IRFJfRkFJTEVELAorICAgIFY0X0lDTVBfSERSX0ZBSUxFRCwKKyAgICBWNF9BSF9IRFJfRkFJTEVELAorICAgIFY0X0VTUF9IRFJfRkFJTEVELAorICAgIFY2X0lQVjZfSERSX0ZBSUxFRCwKKyAgICBWNl9VRFBfSERSX0ZBSUxFRCwKKyAgICBWNl9UQ1BfSERSX0ZBSUxFRCwKKyAgICBWNl9JQ01QX0hEUl9GQUlMRUQsCisgICAgVjZfRVhUX0hEUl9GQUlMRUQsCisgICAgVjZfRVNQX0hEUl9GQUlMRUQsCisgICAgRklORF9WNl9FWFRfSERSX0ZBSUxFRCwKKyAgICBGSU5EX1Y2X0VYVF9IRFJfU0hJRlRfRkFJTEVELAorICAgIElQQ19QQUNLRVRfSU5GT19QQVJTRVJfRVJST1JfQ09ERV9NQVggPSAweDdmZmZmZmZmLAorfSBpcGNfcGFja2V0X2luZm9fcGFyc2VyX2Vycm9yX2NvZGU7CisKKy8qKiBJUENvcmUgZmlsdGVyX2luZm8gc291cmNlIGRlc2NyaXB0b3IgdHlwZSAqLwordHlwZWRlZiBlbnVtIF9pcGNfZmlfZGVzY190eXBlX2UgeworICAgIElQQ19GSV9ERVNDX1RZUEVfRElELAorICAgIElQQ19GSV9ERVNDX1RZUEVfTk9ORSwKKyAgICBJUENfRklfREVTQ19UWVBFX01BWCA9IDB4ZmZmZmZmZmYsCit9IGlwY19maV9kZXNjX3R5cGVfZTsKKworLyoqIElQQ09SRSBVTCB0aHJvdHRsZSBzdGF0ZSBlbnVtICovCit0eXBlZGVmIGVudW0gX2lwY191bF90aHJvdHRsZV9zdGF0ZV9lIHsKKyAgICBJUENfVUxfVEhST1RUTEVfU1RBVEVfTk9ORSwKKyAgICBJUENfVUxfVEhST1RUTEVfU1RBVEVfQUNUSVZFLAorICAgIElQQ19VTF9USFJPVFRMRV9TVEFURV9TVVNQRU5ELAorfSBpcGNfdWxfdGhyb3R0bGVfc3RhdGVfZTsKKworLyoqIElQQ29yZSBub3RpZmljYXRpb24gdHlwZSBkZWZpbml0aW9uICovCit0eXBlZGVmIGVudW0gX2lwY19udGZ5X3R5cGVfZSB7CisgICAgSVBDX05URllfVFlQRV9JTlZBTElELAorICAgIElQQ19OVEZZX1RZUEVfTUlOLAorICAgIElQQ19OVEZZX1RZUEVfQVRUQUNILAorICAgIElQQ19OVEZZX1RZUEVfREVUQUNILAorICAgIElQQ19OVEZZX1RZUEVfSVBfRE9XTiwKKyAgICBJUENfTlRGWV9UWVBFX0lQX1VQLAorICAgIElQQ19OVEZZX1RZUEVfTElOS19ET1dOLAorICAgIElQQ19OVEZZX1RZUEVfTElOS19VUCwKKyAgICBJUENfTlRGWV9UWVBFX01BWCwKK30gaXBjX250ZnlfdHlwZV9lOworCisvKiogSVBDb3JlIGlvIHJlcXVlc3QgdHlwZSAqLwordHlwZWRlZiBlbnVtIF9pcGNfaW9fcmVxX2RhdGFfcGF0aF9lIHsKKyAgICBJUENfTk9STUFMX0RBVEFfUEFUSCA9IDAsCisgICAgSVBDX0lOVEVSTkFMX0RBVEFfUEFUSCwKK30gaXBjX2lvX3JlcV9kYXRhX3BhdGhfZTsKKworLyoqCisgKiBCYWNrd2FyZCBjb21wYXRpYmxlIHRvIGthbF9ib29sIGlzR1BEIGluIGlwY19wa3RfdC4KKyAqIE5vdGUgdGhhdCBOT19ERVNDIE1VU1QgYmUgMCBhbmQgR1BEIE1VU1QgYmUgMS4KKyAqLwordHlwZWRlZiBlbnVtIF9pcGNfcGt0X2Rlc190eXBlX2UgeworICAgIElQQ19QS1RfREVTX1RZUEVfTk9fREVTQyA9IDAsCisgICAgSVBDX1BLVF9ERVNfVFlQRV9HUEQgPSAxLAorICAgIElQQ19QS1RfREVTX1RZUEVfU1BELAorICAgIElQQ19QS1RfREVTX1RZUEVfTUVUQSwKKyAgICBJUENfUEtUX0RFU19UWVBFX0RJRCwKKyAgICBJUENfUEtUX0RFU19UWVBFX01BWCwKK30gaXBjX3BrdF9kZXNfdHlwZV9lOworCisvKiogSVBDb3JlIGxpbmsgcmVxIHR5cGUgZGVmaW5pdGlvbiAqLwordHlwZWRlZiBlbnVtIF9pcGNfbGlua19yZXFfdHlwZV9lIHsKKyAgICBJUENfTElOS19SRVFfVFlQRV9OT1JNQUwsCisgICAgSVBDX0xJTktfUkVRX1RZUEVfRFBGTSwKK30gaXBjX2xpbmtfcmVxX3R5cGVfZTsKKworLyoqIElQQ29yZSBkYXRhIHBhdGggZGVmaW5pdGlvbiAqLwordHlwZWRlZiBlbnVtIF9pcGNfZGF0YV9wYXRoX2RpcmVjdGlvbl9lIHsKKyAgICBETF9ESVJFQ1QgPSAwLAorICAgIFVMX0RJUkVDVAorfSBpcGNfZGF0YV9wYXRoX2RpcmVjdGlvbl9lOworCisvKiogSVBDb3JlIGZpbHRlciBub3RpZmljYXRpb24gdHlwZSAqLwordHlwZWRlZiBlbnVtIF9pcGNfZmlsdGVyX250ZnlfdHlwZV9lIHsKKyAgICBJUENfRklMVEVSX05URllfQ0JLX0ZVTkMsCisgICAgSVBDX0ZJTFRFUl9OVEZZX0lMTSwKKyAgICBJUENfRklMVEVSX05URllfQ0JLX0ZVTkNfV0lUSF9GSUxURVJfSU5GTywKKyAgICBJUENfRklMVEVSX05URllfSUxNX1dJVEhfRklMVEVSX0lORk8KK30gaXBjX2ZpbHRlcl9udGZ5X3R5cGVfZTsKKwordHlwZWRlZiBlbnVtIF9pcGNfZGF0YV9lbnFfcG9zaXRpb25fZSB7CisgICAgSVBDX0RBVEFfRElEX0hFQUQgPSAwLAorICAgIElQQ19EQVRBX0RJRF9UQUlMCit9IGlwY19kYXRhX2VucV9wb3NpdGlvbl9lOworCisjZW5kaWYgLyogX19JTkNfSVBDX0VOVU1TX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvaXBjX2ZpbHRlcl9wcmlvcml0eS5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9pcGNfZmlsdGVyX3ByaW9yaXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwYTdlOQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvaXBjX2ZpbHRlcl9wcmlvcml0eS5oCkBAIC0wLDAgKzEsMTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTQKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgaXBjX2ZpbHRlcl9wcmlvcml0eS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBJUCBDb3JlIGZpbHRlciBwcmlvcml0eSBkZWZpbml0aW9uLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSU5DX0lQQ19GSUxURVJfUFJJT1JJVFlfSAorI2RlZmluZSBfX0lOQ19JUENfRklMVEVSX1BSSU9SSVRZX0gKKworI2RlZmluZSBJUENfVUxfRklMVEVSX1BSSU9SSVRZKF9uYW1lLCBfbnVtKSBJUENfVUxfRklMVEVSX1BSSU9SSVRZXyAjIyBfbmFtZSAjIyBfQkVHSU4sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBDX1VMX0ZJTFRFUl9QUklPUklUWV8gIyMgX25hbWUgIyMgX0VORCA9IElQQ19VTF9GSUxURVJfUFJJT1JJVFlfICMjIF9uYW1lICMjIF9CRUdJTiArIF9udW0sCisKKyNkZWZpbmUgSVBDX0RMX0ZJTFRFUl9QUklPUklUWShfbmFtZSwgX251bSkgSVBDX0RMX0ZJTFRFUl9QUklPUklUWV8gIyMgX25hbWUgIyMgX0JFR0lOLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQQ19ETF9GSUxURVJfUFJJT1JJVFlfICMjIF9uYW1lICMjIF9FTkQgPSBJUENfRExfRklMVEVSX1BSSU9SSVRZXyAjIyBfbmFtZSAjIyBfQkVHSU4gKyBfbnVtLAorCisvKiBQcmlvcml0eSBmb3IgVUwgZmlsdGVycyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBJUENfVUxfRklMVEVSX1BSSU9SSVRZX0JFR0lOID0gMCwKKworICAgIElQQ19VTF9GSUxURVJfUFJJT1JJVFkoQU9NR1IsIDIwKQorICAgIElQQ19VTF9GSUxURVJfUFJJT1JJVFkoTkRQQywgNCkKKworICAgIE1BWF9JUENfVUxfRklMVEVSX1BSSU9SSVRZLAorfSBJUENfVUxfRklMVEVSX1BSSU9SSVRZOworCisvKiBQcmlvcml0eSBmb3IgREwgZmlsdGVycyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBJUENfRExfRklMVEVSX1BSSU9SSVRZX0JFR0lOID0gMCwKKworICAgIElQQ19ETF9GSUxURVJfUFJJT1JJVFkoSVBDX0RIQ1AsIDE2KQorICAgIElQQ19ETF9GSUxURVJfUFJJT1JJVFkoQU9NR1IsIDQpCisgICAgSVBDX0RMX0ZJTFRFUl9QUklPUklUWShMVEVDU1IsIDQpCisgICAgSVBDX0RMX0ZJTFRFUl9QUklPUklUWShUQ1BJUF9TVEFDSywgMSkKKworICAgIElQQ19ETF9GSUxURVJfUFJJT1JJVFkoUEZNX0dBUkJBR0VfRklMVEVSLCAxMjgpCisKKyAgICBNQVhfSVBDX0RMX0ZJTFRFUl9QUklPUklUWSwKK30gSVBDX0RMX0ZJTFRFUl9QUklPUklUWTsKKworI2VuZGlmIC8qIF9fSU5DX0lQQ19GSUxURVJfUFJJT1JJVFlfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9pcGNfc3RydWN0LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2lwY19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjM2MjViCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9pcGNfc3RydWN0LmgKQEAgLTAsMCArMSw2OTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGlwY19zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBUQVRBS0EKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBJUCBDb3JlIElMTSBzdHJ1Y3R1cmUgYW5kIGludGVyZmFjZSBkZWZpbml0aW9uLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19JTkNfSVBDX1NUUlVDVF9ICisjZGVmaW5lIF9fSU5DX0lQQ19TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJpcGNvcmVfdXBjbV9zdHJ1Y3QuaCIKKyNpbmNsdWRlICJ1cGNtX2RpZC5oIgorI2luY2x1ZGUgImlwY19kZWZzX3B1YmxpYy5oIgorI2luY2x1ZGUgImlwY19lbnVtcy5oIgorI2luY2x1ZGUgInFtdV9ibV9jb21tb24uaCIKKyNpbmNsdWRlICJoaWZfbGhpZi5oIgorCit0eXBlZGVmIHN0cnVjdCBfaXBjX3BhY2tldF9pbmZvX3QgeworICAgIGthbF91aW50MzIgaW5mb192YWxpZF9maWVsZHM7CisgICAga2FsX3VpbnQzMiBzcmNfYWRkcls0XTsKKyAgICBrYWxfdWludDMyIGRzdF9hZGRyWzRdOworICAgIGthbF91aW50MTYgaXB2NF9jaGVja3N1bTsKKyAgICBrYWxfdWludDE2IHNyY19wb3J0OworICAgIGthbF91aW50MTYgZHN0X3BvcnQ7CisgICAga2FsX3VpbnQxNiB0Y3BfZmxhZ3M7CisgICAga2FsX3VpbnQxNiBsNF9jaGVja3N1bTsKKyAgICBrYWxfdWludDggcmVzZXJ2ZWRbMl07CisgICAga2FsX3VpbnQ4IGljbXB2NF90eXBlOworICAgIGthbF91aW50OCBpY21wdjZfdHlwZTsKKyAgICBrYWxfdWludDggcHJvdG9jb2w7CisgICAgLyogVGhlIGZvbGxvd2luZyBhcmUgTk9UIGluY2x1ZGVkIGluIHZhbGlkX2ZpZWxkcyAqLworICAgIGthbF9ib29sIGZyYWdtZW50OworICAgIGthbF9ib29sIG5lZWRfcmVhc3NlbWJsZTsKKyAgICBrYWxfdWludDMyIGw0X29mZnNldDsKKyAgICBrYWxfdWludDMyIGRhdGFfb2Zmc2V0OworICAgIGthbF91aW50MzIgbmV0aWZfaWQ7CisgICAga2FsX3VpbnQzMiBvdXRfbmV0aWZfaWQ7CisgICAga2FsX3VpbnQzMiBpcF9pZDsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSVB2NC9JUHY2IElQIElEICovCisgICAga2FsX3VpbnQxNiBmcmFnX3BheWxvYWRfb2Zmc2V0OyAgICAgICAgIC8qKjwgZnJhZ21lbnQgb2Zmc2V0ICovCisgICAga2FsX3VpbnQxNiBmcmFnX3BheWxvYWRfbGVuOyAgICAgICAgICAgIC8qKjwgUGF5bG9hZCBsZW5ndGg6IElQdjQgZnJhZyBwYXlsb2FkIGxlbmdodCA9IHRvdGFsIGxlbmd0aCAtIElQdjQgSERSIGxlbmd0aCwgSVB2NiBmcmFnIHBheWxvYWQgbGVuZ2h0ID0gcGF5bG9hZCBsZW5ndGggLSBhbGwgZXh0IEhEUiBsZWhndGggYmVmb3JlIGZyYWdtZW50ICAgPj4gSERSIC0gZnJhZ21lbnQgSERSIGxlbmdodCAqLworICAgIGthbF91aW50OCBmcmFnX2ZsYWc7ICAgICAgICAgICAgICAgICAgICAvKio8IGZyYWdtZW50IGZsYWc6IG1vcmUgZnJhZ21lbnQgKi8KKyAgICBrYWxfdWludDE2IGZyYWdfYnVmZmVyX3BheWxvYWRfb2Zmc2V0OyAgLyoqPCBidWZmZXIgb2Zmc2V0IHdoaWNoIGlzIHVzZWQgdG8gaW5pZGNhdGUgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgZnJhZ21lbnRlZCBwYXlsb2FkIGluIEdQRCAqLworICAgIGthbF91aW50MzIgc3BpOworfSBpcGNfcGFja2V0X2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2lwY19pb19yZXF1ZXN0X3QgeworICAgIHN0cnVjdCBfaXBjX2lvX3JlcXVlc3RfdCAgICAqbmV4dF9yZXF1ZXN0OworICAgIHFibV9ncGQqICAgICAgICAgICAgICAgICAgICBmaXJzdF9ncGQ7CisgICAgcWJtX2dwZCogICAgICAgICAgICAgICAgICAgIGxhc3RfZ3BkOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBpcF90eXBlOyAgICAgICAgLyoqPCBUeXBlIG9mIElQIGRhdGFncmFtcywgc2VlIElQQ19JUF9UWVBFX1hYWCBkZWZpbmVkIGZvciB2YWxpZCB2YWx1ZXMuICovCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIHFvc19wcmlvcml0eTsgICAvKio8IFByaW9yaXR5LCB2YWxpZCBmcm9tIDB+Ny4gKi8KKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgZGF0YV9wYXRoX3R5cGU7IC8qKjwgcmVmZXJlbmNlIGlwY19pb19yZXFfZGF0YV9wYXRoX2UgKi8KKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Cit9IGlwY19pb19yZXF1ZXN0X3Q7CisKK3R5cGVkZWYgc3RydWN0IF9pcGNfY29uZl90IHsKKyAgICBtb2R1bGVfdHlwZSAgICAgbW9kdWxlX2lkOyAvKio8IFRoZSBtb2R1bGUgcmVnaXN0ZXJpbmcgd2l0aCBJUCBDT1JFLiAqLworICAgIGthbF91aW50MzIgICAgICBuZXRpZl9pZDsgIC8qKjwgQW4gaW5kZXggdG8gaWRlbnRpZnkgaW5zdGFuY2Ugb2YgYSBzcGVjaWZpYyBtb2R1bGUuIEZvciBleGFtcGxlLCBpZiBtb2R1bGVfaWQgaXMgTU9EX0VUSEVSQ09SRSwgbmV0aWZfaWQgaXMgMCwgaXQgcmVwcmVudHMgZm9yIGV0aDAuICovCisgICAga2FsX3VpbnQzMiAgICAgIGZlYXR1cmVzOyAgLyoqPCBFYWNoIGJpdCBpcyBzZXQgdG8gZW5hYmxlIGFuIG9wdGlvbmFsIGZlYXR1cmUsIHNlZSBJUENfRl9YWFggZm9yIGRldGFpbHMuICovCisKKyAgICB2b2lkICAgICAgICAgICAqdWxfcmVsb2FkX2NvbnRleHQ7IC8qKjwgQ29udGV4dCB0byBiZSBwYXNzZWQgaW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlwY191bF9yZWxvYWRfY2FsbGJhY2tfdC4gKi8KKyAgICBrYWxfYm9vbCAgICAgICAgKCppcGNfdWxfcmVsb2FkX2NhbGxiYWNrX3QpKHZvaWQgKmNvbnRleHQpOyAvKio8IFVwbGluayByZWxvYWRpbmcgY2FsbGJhY2sgZnVuY3Rpb24uICovCisKKyAgICB2b2lkICAgICAgICAgICAqY2FsbGJhY2tfY29udGV4dDsgLyoqPCBDb250ZXh0IHRvIGJlIHBhc3NlZCBpbiB0aGUgZm9sbG93IGNhbGxiYWNrIGZ1bmN0aW9ucy4gKi8KKyAgICBrYWxfYm9vbCAgICAgICAgKCppcGNfZGxpbmtfY2FsbGJhY2tfdCkodm9pZCAqY29udGV4dCwgaXBjX2lvX3JlcXVlc3RfdCAqaW9yKTsgLyoqIERvd25saW5rIGNhbGxiYWNrIGZ1bmN0aW9uLiAqLworICAgIGthbF9ib29sICAgICAgICAoKmlwY19kbGlua19kaWRfY2JfdCkodm9pZCAqY29udGV4dCwgdXBjbV9kaWQgKmRpZCk7IC8qKiBbR2VuOTNdIERvd25saW5rIGNhbGxiYWNrIGZ1bmN0aW9uLiAqLworfSBpcGNfY29uZl90OworCit0eXBlZGVmIHN0cnVjdCBfaXBjX2ZyYWdfcmVmaWx0ZXJfaW5mb190IHsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICB1cGxpbms7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgaXNfcGt0X2luZm87CisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgbmV0aWZfaWQ7CisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgcGRuX2lkOworICAgIGlwY19wYWNrZXRfaW5mb190ICAgICAgKnBhY2tldF9pbmZvOworICAgIGthbF9pbnQzMiAgICAgICAgICAgICAgIGZpbHRlcl9pZDsKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICBmaWx0ZXJfbWFnaWNfbnVtYmVyOworfSBpcGNfZnJhZ19yZWZpbHRlcl9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9pcGNfZmlsdGVyX2luZm9fdCB7CisgICAga2FsX3VpbnQzMiAgICAgIG5ldGlmX2lkOyAgICAgLyoqPCBTb3VyY2UgTmV0d29yayBpbnRlcmZhY2UgSUQgKi8KKyAgICBrYWxfaW50MzIgICAgICAgaXBfaWQ7ICAgICAgICAvKio8IElEIHRvIHF1ZXJ5IGNvcnJlc3BvbmRpbmcgTk1VIElQIGRhdGFiYXNlICovCisgICAga2FsX2ludDE2ICAgICAgIGViaTsgICAgICAgICAgLyoqPCBFQkkgdGhhdCB0aGUgcGFja2V0cyBjYW1lIGZyb20gKG9ubHkgdmFsaWQgZm9yIERMKSAqLworICAgIGthbF91aW50OCAgICAgICBwcm90b19pZHg7ICAgIC8qKjwgSW5kZXggZm9yIGRpc3RpbnF1aXNoIGRpZmZlcmVudCBTSU0gY2FyZCAob25seSB2YWxpZCB3aGVuIHN1cHBvcnRpbmcgTXVsdGlwbGUgUFMgZmVhdHVyZSAqLworICAgIGthbF91aW50OCAgICAgICByc3ZkOworICAgIGthbF91aW50MzIgICAgICBkYXRhX29mZnNldDsgICAgLyoqPCBUaGUgZGF0YSBvZmZzZXQgdG8gcGF5bG9hZC4gKFRoZSBsZW5ndGggb2YgSVAgVENQL1VEUCBoZWFkZXIpIFJlcXVpcmVtZW50IGZyb20gVEguQ2hlbmcgTFRFQ1NSIDIwMTQvMTEvMTEgKi8KKyAgICB2b2lkICAgICAgICAgICAqc3JjX2Rlc2NfcHRyOyAgIC8qKjwgRGVzY3JpcHRvciBwb2ludGVyICovCisgICAga2FsX3VpbnQzMiAgICAgIHNyY19kZXNjX3R5cGU7ICAvKio8IERlc2NyaXB0b3IgdHlwZSAocGxlYXNlIHJlZmVyIHRvIGlwY19maV9kZXNjX3R5cGVfZSkqLworICAgIGthbF91aW50MzIgICAgICBzcmNfZGVzY19pbmR4OyAgLyoqPCBEZXNjcmlwdG9yIGludGVybmFsIGluZGV4LCBmb3Igb25lIGRlc2NyaXB0b3IgY29udGFpbmluZyBtb3JlIHRoYW4gb25lIHBhY2tldHMgY2FzZS4gKi8KK30gaXBjX2ZpbHRlcl9pbmZvX3Q7CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBJUCBkYXRhZ3JhbSBmaWx0ZXJlZC4KKyAqCisgKiBAcGFyYW0gICBjb250ZXh0IFtJTl0gQSBjb250ZXh0IHNwZWNpZmllZCB3aGlsZSByZWdpc3RlcmluZyB0aGUgZmlsdGVyLgorICogQHBhcmFtICAgZmlsdGVyX2lkIFtJTl0gQ29ycmVzcG9uZGluZyByZWdpc3RlcmVkIGZpbHRlciBJRC4KKyAqIEBwYXJhbSAgIGhlYWRfZ3BkIFtJTl0gUG9pbnRlciBoZWFkIG9mIHRoZSBHUEQgbGlzdCBmb3IgdGhlIElQIGRhdGFncmFtIGZpbHRlcmVkLgorICogQHBhcmFtICAgdGFpbF9ncGQgW0lOXSBQb2ludGVyIHRhaWwgb2YgdGhlIEdQRCBsaXN0IGZvciB0aGUgSVAgZGF0YWdyYW0gZmlsdGVyZWQuCisgKiBAcGFyYW0gICBsZW5ndGggW0lOXSBCeXRlcyBvZiBidWZmZXJzIHVzZWQgaW4gdGhlIEdQRCBsaXN0LgorICovCit0eXBlZGVmIHZvaWQgKCppcGNfZmlsdGVyX2NhbGxiYWNrX3QpKHZvaWQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF9pbnQzMiBmaWx0ZXJfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFibV9ncGQgKmhlYWRfZ3BkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxYm1fZ3BkICp0YWlsX2dwZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQzMiBsZW5ndGgpOworCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBwYWNrZXQgaW5mb3JtYXRpb24gdG8gcHJvY2VzcyB0aGUgSVAgZGF0YWdyYW0gZmlsdGVyZWQuCisgKgorICogQHBhcmFtICAgaW5mb19wIFtJTl0gUmVsYXRlZCBpbmZvcm1hdGlvbiBvZiBmaWx0ZXJlZCBvdXQgR1BEcy4KKyAqIEBwYXJhbSAgIGNvbnRleHQgW0lOXSBBIGNvbnRleHQgc3BlY2lmaWVkIHdoaWxlIHJlZ2lzdGVyaW5nIHRoZSBmaWx0ZXIuCisgKiBAcGFyYW0gICBmaWx0ZXJfaWQgW0lOXSBDb3JyZXNwb25kaW5nIHJlZ2lzdGVyZWQgZmlsdGVyIElELgorICogQHBhcmFtICAgaGVhZF9ncGQgW0lOXSBQb2ludGVyIGhlYWQgb2YgdGhlIEdQRCBsaXN0IGZvciB0aGUgSVAgZGF0YWdyYW0gZmlsdGVyZWQuCisgKiBAcGFyYW0gICB0YWlsX2dwZCBbSU5dIFBvaW50ZXIgdGFpbCBvZiB0aGUgR1BEIGxpc3QgZm9yIHRoZSBJUCBkYXRhZ3JhbSBmaWx0ZXJlZC4KKyAqIEBwYXJhbSAgIGxlbmd0aCBbSU5dIEJ5dGVzIG9mIGJ1ZmZlcnMgdXNlZCBpbiB0aGUgR1BEIGxpc3QuCisgKi8KK3R5cGVkZWYgdm9pZCAoKmlwY19maWx0ZXJfd2l0aF9pbmZvX2NhbGxiYWNrX3QpKGlwY19maWx0ZXJfaW5mb190ICppbmZvX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX2ludDMyIGZpbHRlcl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFibV9ncGQgKmhlYWRfZ3BkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWJtX2dwZCAqdGFpbF9ncGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDMyIGxlbmd0aCk7CisKKy8qKgorICogQ3VzdG9taXplZCBDYWxsYmFjayBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBJUCBkYXRhZ3JhbSBmaWx0ZXJlZC4KKyAqCisgKiBAcGFyYW0gICBwX3BrdCAgICAgbWF0Y2hlZCBmaWx0ZXIgcGFja2V0IGNvbnRlbnQKKyAqIEBwYXJhbSAgIHBrdF9sZW4gICBwYWNrZXQgbGVuZ3RoCisgKiBAcGFyYW0gICBmaWx0ZXJfaWQgdGhlIGZpbHRlciBpZCB3aGljaCB3YXMgcmVnaXN0ZXJlZCBiZWZvcmUKKyAqIEBwYXJhbSAgIHBfYXJncyAgICBjdXN0b21pemVkIGZpbHRlciBjYWxsYmFjayBmdW5jdGlvbiBhcmd1bWVudHMKKyAqCisgKiBAcmV0dXJuICBLQUxfVFJVRSBtZWFucyBwYWNrZXQgd2FzIG1hdGNoZWQ7IG90aGVyd2lzZSBLQUxfRkFMU0UKKyAqLworCit0eXBlZGVmIGthbF9ib29sICgqaXBjX2ZpbHRlcl9jdXN0X2NiaykoY29uc3Qga2FsX3VpbnQ4ICpwX3BrdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfaW50MzIgICAgICAgIHBrdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX2ludDMyICAgICAgICBmaWx0ZXJfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgICAgICpwX2FyZ3MpOworCit0eXBlZGVmIHN0cnVjdCBfaXBjX2ZpbHRlcl9ydWxlc190IHsKKyAgICBrYWxfdWludDE2ICAgICAgZmVhdHVyZXM7ICAgICAvKio8IFVuaW9uIG9mICB0byBpbmRpY2F0ZSB3aGljaCB0eXBlIG9mIGZpbHRlciBpdCBpcy4gKi8KKyAgICBrYWxfdWludDE2ICAgICAgcHJpb3JpdHk7ICAgICAvKio8IFByaW9yaXR5IHdpbGwgYWZmZWN0IHRoZSBvcmRlciBvZiBmaWx0ZXIgcnVsZXMgd2hlbiBwZXJmb3JtaW5nIGZpbHRlcmluZy4gKi8KKyAgICBrYWxfdWludDMyICAgICAgdmFsaWRfZmllbGRzOyAvKio8IFVuaW9uIG9mIElQQ19GSUxURVJfQllfWFhYIHRvIGluZGljYXRlIHdoaWNoIGZpZWxkcyBpbiB0aGlzIHN0cnVjdHVyZSBhcmUgdmFsaWQuICovCisgICAga2FsX3VpbnQzMiAgICAgIG5ldGlmX2lkOyAgICAgLyoqPCBOZXR3b3JrIGludGVyZmFjZSBJRCB0byBmaWx0ZXIuICovCisgICAga2FsX3VpbnQzMiAgICAgIHBkbl9pZDsgICAgICAgLyoqPCBbZG93bmxpbmsgZmlsdGVyIE9OTFldIFBETiBJRCB0byBmaWx0ZXIuICovCisgICAga2FsX3VpbnQzMiAgICAgIGViaTsgICAgICAgICAgLyoqPCBbZG93bmxpbmsgZmlsdGVyIE9OTFldIEVCSS9OU0FQSSB0byBmaWx0ZXIuICovCisgICAga2FsX3VpbnQ4ICAgICAgIHByb3RvX2lkeDsgICAgLyoqPCBbZG93bmxpbmsgZmlsdGVyIE9OTFldIE11bHRpcGxlIFBTIHVzZSBvbmx5LiAqLworICAgIGthbF91aW50OCAgICAgICBwcm90b2NvbDsgICAgIC8qKjwgVGhlIHByb3RvY29sIHVzZWQgaW4gdGhlIGRhdGEgcG9ydGlvbiBvZiB0aGUgSVAgZGF0YWdyYW0gdG8gZmlsdGVyLiAqLworCisgICAga2FsX3VpbnQxNiAgICAgIHNyY19wb3J0OyAgICAgLyoqPCBTb3VyY2UgcG9ydCBudW1iZXIgdG8gZmlsdGVyLiAqLworICAgIGthbF91aW50MTYgICAgICBkc3RfcG9ydDsgICAgIC8qKjwgRGVzdGluYXRpb24gcG9ydCBudW1iZXIgdG8gZmlsdGVyLiAqLworICAgIGthbF91aW50MTYgICAgICB0Y3BfZmxhZ3M7ICAgIC8qKjwgVENQIGZsYWdzIG9mIFRDUCB0byBmaWx0ZXIuICovCisgICAga2FsX3VpbnQzMiAgICAgIHNwaTsgICAgICAgICAgLyoqPCBTZWN1cml0eSBQYXJhbWV0ZXIgSW5kZXguICovCisKKyAgICB1bmlvbiB7CisgICAgICAgIGthbF91aW50OCBhZGRyOFs0XTsKKyAgICAgICAga2FsX3VpbnQzMiBhZGRyMzI7CisgICAgfSBzcmNfaXB2NDsgLyoqPCBTb3VyY2UgSVB2NCBhZGRyZXNzIHRvIGZpbHRlci4gKi8KKyAgICB1bmlvbiB7CisgICAgICAgIGthbF91aW50OCBhZGRyOFs0XTsKKyAgICAgICAga2FsX3VpbnQzMiBhZGRyMzI7CisgICAgfSBkc3RfaXB2NDsgLyoqPCBEZXN0aW5hdGlvbiBJUHY0IGFkZHJlc3MgdG8gZmlsdGVyLiAqLworCisgICAgdW5pb24geworICAgICAgICBrYWxfdWludDggYWRkcjhbMTZdOworICAgICAgICBrYWxfdWludDMyIGFkZHIzMls0XTsKKyAgICB9IHNyY19pcHY2OyAvKio8IFNvdXJjZSBJUHY2IGFkZHJlc3MgdG8gZmlsdGVyLiAqLworICAgIHVuaW9uIHsKKyAgICAgICAga2FsX3VpbnQ4IGFkZHI4WzE2XTsKKyAgICAgICAga2FsX3VpbnQzMiBhZGRyMzJbNF07CisgICAgfSBkc3RfaXB2NjsgLyoqPCBEZXN0aW5hdGlvbiBJUHY2IGFkZHJlc3MgdG8gZmlsdGVyLiAqLworCisgICAga2FsX3VpbnQ4ICAgICAgIGlwX3R5cGU7ICAgICAgLyoqPCBUeXBlIG9mIElQIHRyYWZmaWMgdGhlIGZpbHRlciB0byBhcHBseSwgc2VlIElQQ19JUF9UWVBFX1hYWCBkZWZpbmVkIGZvciB2YWxpZCB2YWx1ZXMuICovCisgICAga2FsX3VpbnQ4ICAgICAgIGljbXB2NF90eXBlOyAgICAvKio8IFR5cGUgZmllbGQgb2YgSUNNUHY0IGhlYWRlciB0byBmaWx0ZXIuICovCisgICAga2FsX3VpbnQ4ICAgICAgIGljbXB2Nl90eXBlOyAgICAvKio8IFR5cGUgZmllbGQgb2YgSUNNUHY2IGhlYWRlciB0byBmaWx0ZXIuICovCisgICAga2FsX3VpbnQ4ICAgICAgIHJlc2VydmVkOworICAgIGlwY19maWx0ZXJfY3VzdF9jYmsgIGN1c3RfY2JrX2Z1bmM7CisgICAgdm9pZCAgICAgICAgICAgICAgICAqcF9jdXN0X2Nia19hcmdzOworfSBpcGNfZmlsdGVyX3J1bGVzX3Q7CisKKyNkZWZpbmUgSVBDX05FWFRfRklMVEVSX01BUF9TSVpFICAgIDIKK3R5cGVkZWYgc3RydWN0IF9pcGNfZmlsdGVyX3QgaXBjX2ZpbHRlcl90OwordHlwZWRlZiBzdHJ1Y3QgX2lwY19maWx0ZXJfdCB7CisgICAga2FsX2ludDMyICAgICAgICAgICAgICAgZmlsdGVyX2lkOworICAgIGlwY19maWx0ZXJfcnVsZXNfdCAgICAgIHJ1bGVzOworICAgIGthbF9ib29sICAgICAgICAgICAgICAgIGNhbGxiYWNrX3dpdGhfaW5mbzsKKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICpjYWxsYmFja19mdW5jOworICAgIHZvaWQgICAgICAgICAgICAgICAgICAgKmNhbGxiYWNrX2NvbnRleHQ7CisgICAgbW9kdWxlX3R5cGUgICAgICAgICAgICAgbW9kdWxlX2lkOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgIGlzX3VwZGF0ZWRfdG9fbGlzdDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICByc3ZkWzFdOworICAgIHZvaWQgICAgICAgICAgICAgICAgICAgKm1vZHVsZV9jb250ZXh0OworICAgIGlwY19maWx0ZXJfdCAgICAgICAgICAgKm5leHRfZmlsdGVyX21hcFtJUENfTkVYVF9GSUxURVJfTUFQX1NJWkVdOworICAgIGlwY19maWx0ZXJfY3VzdF9jYmsgICAgIGN1c3RfY2JrX2Z1bmM7CisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAqcF9jdXN0X2Nia19hcmdzOworICAgIGthbF9ib29sICAgICAgICAgICAgICAgIGlzX2J5cGFzc19zeW5jX2h3OworfSBpcGNfZmlsdGVyX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9pcGNfaGRyX3QgeworICAgIGthbF91aW50OCAgICAgICBpcF90eXBlOyAgICAvKio8IFR5cGUgb2YgSVAgZGF0YWdyYW1zLCBzZWUgSVBDX0lQX1RZUEVfWFhYIGRlZmluZWQgZm9yIHZhbGlkIHZhbHVlcy4gTm90ZSB0aGF0IG9ubHkgb25lIG9mIElQdjQvSVB2NiBjYW4gYmUgc2VsZWN0ZWQgYW5kIE1JWCB0eXBlIGlzIE5PVCBhbGxvd2VkICovCisgICAga2FsX3VpbnQ4ICAgICAgKnNyY19hZGRyOyAgIC8qKjwgU291cmNlIElQIEFkZHJlc3MsIGxlbmd0aCBvZiB0aGlzIHBvaW50ZXIgaXMgZGVjaWRlZCBieSBpcF90eXBlIGZpZWxkICovCisgICAga2FsX3VpbnQ4ICAgICAgKmRzdF9hZGRyOyAgIC8qKjwgRGVzdGluYXRpb24gSVAgQWRkcmVzcywgbGVuZ3RoIG9mIHRoaXMgcG9pbnRlciBpcyBkZWNpZGVkIGJ5IGlwX3R5cGUgZmllbGQgKi8KKyAgICBrYWxfdWludDE2ICAgICAgc3JjX3BvcnQ7ICAgLyoqPCBTb3VyY2UgUG9ydCBOdW1iZXIgKi8KKyAgICBrYWxfdWludDE2ICAgICAgZHN0X3BvcnQ7ICAgLyoqPCBEZXN0aW5hdGlvbiBQb3J0IE51bWJlciAqLworICAgIGthbF91aW50OCAgICAgICBkc2NwX3RjOyAgICAvKio8IERTQ1AgJiBFQ04oSVB2NCkgb3IgVHJhZmZpYyBDbGFzcyhJUHY2KSBmaWVsZCAqLworfSBpcGNfaGRyX3Q7CisKK3R5cGVkZWYgdm9pZCAqIGlwY19oYW5kbGVfdDsKKworLyoqCisgKiBVUENNIHdpbGwgZmlsbCBETCBpbmZvIG9ubHkgb24gaGVhZCBHUEQncyBTVyBjb250cm9sIEluZm8uCisgKiB1c2VyIHVzZSAgUUJNX0RFU19HRVRfU1dfQ1RSTF9GSUVMRChfcCkgdG8gZ2V0IHRoaXMgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgICAgIGViaTsKKyAgICBrYWxfdWludDggICAgICAgZmxvdzo0OworICAgIGthbF91aW50OCAgICAgICByZXNlcnZlZDo0OworICAgIGthbF91aW50MTYgICAgICBwc247Cit9aXBjX2dwZF9leHRyYV9pbmZvX3Q7CisKKy8qKiBMb2NhbCBwYXJhbWV0ZXIgc3RydWN0dXJlIGZvciBNU0dfSURfSVBDT1JFX0xJTktfVVBfSU5EIC8gTVNHX0lEX0lQQ09SRV9JUF9VUF9JTkQgLyBNU0dfSURfSVBDT1JFX0xJTktfVVBfUlNQIC8gTVNHX0lEX0lQQ09SRV9JUF9VUF9SU1AuICovCit0eXBlZGVmIHN0cnVjdCBfaXBjX2xpbmtfaGFuZHNoYWtlX21zZ190IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICBuZXRpZl9pZDsgICAvKio8IFVuaXF1ZSBJRCB0byBpZGVudGlmaWVkIGNvcnJlc3BvbmRpbmcgaG9zdCBuZXR3b3JrIGludGVyZmFjZSAqLworICAgIGthbF9pbnQzMiAgICAgICBpcF9pZDsgICAgICAvKio8IElEIHRvIHF1ZXJ5IGNvcnJlc3BvbmRpbmcgTk1VIElQIGRhdGFiYXNlICovCisgICAga2FsX3VpbnQ4ICAgICAgIGlwX3R5cGU7ICAgIC8qKjwgVHlwZSBvZiBJUCBkYXRhZ3JhbXMsIHNlZSBJUENfSVBfVFlQRV9YWFggZGVmaW5lZCBmb3IgdmFsaWQgdmFsdWVzLiAqLworICAgIGthbF91aW50OCAgICAgICByc3ZkWzNdOworfSBpcGNfbGlua19oYW5kc2hha2VfbXNnX3Q7CisKKy8qKiBMb2NhbCBwYXJhbWV0ZXIgc3RydWN0dXJlIGZvciBNU0dfSURfSVBDT1JFX0xJTktfVVBfUkVRIC8gTVNHX0lEX0lQQ09SRV9MSU5LX0RPV05fUkVRIC8gTVNHX0lEX0lQQ09SRV9JUF9VUF9SRVEgLyBNU0dfSURfSVBDT1JFX0lQX0RPV05fUkVRLiAqLwordHlwZWRlZiBzdHJ1Y3QgX2lwY19saW5rX3JlcV90IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHZvaWQgICAgICAgICAgICpjYWxsYmFja19jb250ZXh0OyAgIC8qKjwgQ29udGV4dCByZWdpc3RlcmVkIGluIHRvIGlwY19hdHRhY2goKS4gKi8KKyAgICBrYWxfdWludDggICAgICAgaXBfdHlwZTsgICAgICAgICAgICAvKio8IFR5cGUgb2YgSVAgZGF0YWdyYW1zLCBzZWUgSVBDX0lQX1RZUEVfWFhYIGRlZmluZWQgZm9yIHZhbGlkIHZhbHVlcy4gKi8KKyAgICBrYWxfdWludDggICAgICAgcnN2ZFszXTsKKyAgICBpcGNfbGlua19yZXFfdHlwZV9lIHJlcV90eXBlOworfSBpcGNfbGlua19yZXFfdDsKKworLyoqIExvY2FsIHBhcmFtZXRlciBzdHJ1Y3R1cmUgZm9yIE1TR19JRF9JUENPUkVfTEhJRkNPUkVfUVVFVUVfTUFQUElOR19SRVEvUlNQLiAqLwordHlwZWRlZiBzdHJ1Y3QgX2lwY19saGlmY29yZV9xX21hcHBpbmdfbXNnX3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgaXBjb3JlX3VwY21fcGRuX2JpbmRfaW5kX3N0cnVjdCBiaW5kX2luZDsgICAgICAgICAgIC8qKjwgUEROIGJpbmRpbmcgaW5mb3JtYXRpb24gKi8KKyAgICBtb2R1bGVfdHlwZSAgICAgICAgICAgICAgICAgICAgIGJpbmRfc3JjX21vZF9pZDsgICAgLyoqPCBQRE4gYmluZGluZyBJTE0gc3JjIG1vZHVsZSBJRCAqLworICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgbmV0aWZfZmVhdHVyZXM7ICAgICAvKio8IEJpbmRpbmcgbmV0aWYgZmVhdHVyZXMgKi8KKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNhbGxiYWNrX2NvbnRleHQ7ICAgLyoqPCBDb250ZXh0IHJlZ2lzdGVyZWQgaW4gdG8gaXBjX2F0dGFjaCgpLiAqLworICAgIGlwY19uZXRpZl90eXBlX2UgICAgICAgICAgICAgICAgbmV0aWZfdHlwZTsgICAgICAgICAvKio8IFR5cGUgb2YgbmV0aWYgZm9yIGNjbW5pIHF1ZXVlIG1hcHBpbmcsIHNlZSBpcGNfbmV0aWZfdHlwZV9lIGRlZmluZWQgZm9yIHZhbGlkIHZhbHVlcyAqLworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAvKio8IFRoZSByZXN1bHQgb2YgZHluYW1pYyBxdWV1ZSBtYXBwaW5nICovCit9IGlwY19saGlmY29yZV9xX21hcHBpbmdfbXNnX3Q7CisKKy8qKiBMb2NhbCBwYXJhbWV0ZXIgc3RydWN0dXJlIGZvciBNU0dfSURfSVBDT1JFX0RMX1BBQ0tFVF9GSUxURVJFRF9SRVEgYW5kIE1TR19JRF9JUENPUkVfVUxfUEFDS0VUX0ZJTFRFUkVEX1JFUS4gKi8KK3R5cGVkZWYgc3RydWN0IF9pcGNfcGFja2V0X2ZpbHRlcmVkX3JlcV90Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICB2b2lkICAgICAgICpjb250ZXh0OworICAgIGthbF9pbnQzMiAgIGZpbHRlcl9pZDsKKyAgICB2b2lkICAgICAgICpoZWFkX2dwZDsKKyAgICB2b2lkICAgICAgICp0YWlsX2dwZDsKKyAgICBrYWxfdWludDMyICBsZW5ndGg7Cit9IGlwY19wYWNrZXRfZmlsdGVyZWRfcmVxX3Q7CisKKy8qKiBMb2NhbCBwYXJhbWV0ZXIgc3RydWN0dXJlIGZvciBNU0dfSURfSVBDT1JFX0RMX1BBQ0tFVF9GSUxURVJFRF9XSVRIX0lORk9fUkVRIGFuZCBNU0dfSURfSVBDT1JFX1VMX1BBQ0tFVF9GSUxURVJFRF9XSVRIX0lORk9fUkVRLiAqLwordHlwZWRlZiBzdHJ1Y3QgX2lwY19wYWNrZXRfZmlsdGVyZWRfd2l0aF9pbmZvX3JlcV90Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBpcGNfZmlsdGVyX2luZm9fdCAgICBpbmZvOworICAgIHZvaWQgICAgICAgICAgICAgICAgKmNvbnRleHQ7CisgICAga2FsX2ludDMyICAgICAgICAgICAgIGZpbHRlcl9pZDsKKyAgICB2b2lkICAgICAgICAgICAgICAgICpoZWFkX2dwZDsKKyAgICB2b2lkICAgICAgICAgICAgICAgICp0YWlsX2dwZDsKKyAgICBrYWxfdWludDMyICAgICAgICAgICBsZW5ndGg7Cit9IGlwY19wYWNrZXRfZmlsdGVyZWRfd2l0aF9pbmZvX3JlcV90OworCisvKiogTG9jYWwgcGFyYW1ldGVyIHN0cnVjdHVyZSBmb3IgTVNHX0lEX0lQQ09SRV9RVUVSWV9JTkZPX0NORi4gKi8KK3R5cGVkZWYgc3RydWN0IF9pcGNfbmV0aWZfaW5mb190Cit7CisgICAga2FsX3VpbnQzMiBuZXRpZl9pZDsgICAgLyoqIFVuaXF1ZSBJRCBmb3IgY29ycmVzcG9uZGluZyBob3N0IG5ldHdvcmsgaW50ZXJmYWNlICovCit9IGlwY19uZXRpZl9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9pcGNfbmV0aWZfbGlzdF90Cit7CisgICAga2FsX3VpbnQzMiBuZXRpZl9jbnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IEF0dGFjaGVkIG5ldGlmIGNvdW50ICovCisgICAgaXBjX25ldGlmX2luZm9fdCBsaXN0W0lQQ19NQVhfTkVUSUZfQ05UXTsgICAvKio8IEluZm9ybWF0aW9uIG9mIGVhY2ggYXR0YWNoZWQgbmV0aWYgKi8KK30gaXBjX25ldGlmX2xpc3RfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2lwY19xdWVyeV9pbmZvX3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGlwY19uZXRpZl9saXN0X3QgbmV0aWY7IC8qKiBOZXR3b3JrIGludGVyZmFjZSBpbmZvcm1hdGlvbiAqLworfSBpcGNfcXVlcnlfaW5mb190OworCisvKiogUGFyYW1ldGVyIGZvciBJUCBDT1JFIHN0YXR1cyBjaGFuZ2Ugbm90aWZpY2F0aW9ucyAqLwordHlwZWRlZiBzdHJ1Y3QgX2lwY19udGZ5X3BhcmFtX3QKK3sKKyAgICBpcGNfbnRmeV90eXBlX2UgbnRmeV90eXBlOyAgLyoqPCBOb3RpZnkgdHlwZSB0byBpbmRpY2F0ZSAqLworICAgIGthbF9pbnQzMiAgICAgICBudGZ5X2lkOyAgICAvKio8IE5vdGlmeSBJRCBhbGxvY2F0ZWQgaW4gaXBjX3JlZ2lzdGVyX250ZnkoKS4gKi8KKyAgICB2b2lkICAgICAgICAgICAgKmNvbnRleHQ7ICAgLyoqPCBDb250ZXh0IHJlZ2lzdGVyZWQgaW4gaXBjX3JlZ2lzdGVyX250ZnkoKS4gKi8KKyAgICBrYWxfdWludDMyICAgICAgbmV0aWZfaWQ7ICAgLyoqPCBVbmlxdWUgSUQgdG8gaWRlbnRpZmllZCBjb3JyZXNwb25kaW5nIGhvc3QgbmV0d29yayBpbnRlcmZhY2UgKi8KKyAgICBrYWxfaW50MzIgICAgICAgaXBfaWQ7ICAgICAgLyoqPCBJRCB0byBxdWVyeSBjb3JyZXNwb25kaW5nIE5NVSBJUCBkYXRhYmFzZSAqLworfSBpcGNfbnRmeV9wYXJhbV90OworCisvKiogTG9jYWwgcGFyYW1ldGVyIHN0cnVjdHVyZSBmb3IgTVNHX0lEX0xNU19ORVRJRl9BVFRBQ0ggKi8KK3R5cGVkZWYgc3RydWN0IF9sbXNfaXBjX250ZnlfdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBpcGNfbnRmeV9wYXJhbV90IGlwY19udGZ5X3BhcmE7Cit9IGxtc19pcGNfbnRmeV90OworCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gbm90aWZ5IElQQ29yZSBub3RpZmljYXRpb24uCisgKgorICogQHBhcmFtICAgcGFyYW0gW0lOXSBQYXJhbWV0ZXIgdG8gbm90aWZ5IHJlZ2lzdGVyZWQgbW9kdWxlLgorICovCit0eXBlZGVmIHZvaWQgKCppcGNfbnRmeV9jYWxsYmFja190KShpcGNfbnRmeV9wYXJhbV90ICpwYXJhbSk7CisKKy8qKiBQYXJhbWV0ZXIgZm9yIElQQ29yZSBVTCB0aHJvdHRsZSBjb25maWd1cmF0aW9uICovCit0eXBlZGVmIHN0cnVjdCBfaXBjX3VsX3Rocm90dGxlX2NvbmZfdAoreworICAgIGthbF91aW50OCAgICAgICBlbmFibGVkOyAgICAgICAgICAgICAgICAgICAgLyoqPCAwIHRvIGRpc2FibGUgSVBDT1JFIFVMIHRocm90dGxlIG1lY2hhbmlzbTsgb3RoZXJ3aXNlLCBvdGhlcnMgdG8gZW5hYmxlLiAqLworICAgIGthbF91aW50OCAgICAgICBhY3RpdmVfcGVyaW9kXzEwMG1zOyAgICAgICAgLyoqPCBhY3RpdmUgcGVyaW9kIG9mIFVMIHRocm90dGxlLCBtaW5pbXVtIHVuaXQ6IDEwMG1zLiovCisgICAga2FsX3VpbnQ4ICAgICAgIHN1c3BlbmRfcGVyaW9kXzEwMG1zOyAgICAgICAvKio8IHN1c3BlbmQgcGVyaW9kIG9mIFVMIHRocm90dGxlLCBtaW5pbXVtIHVuaXQ6IDEwMG1zLiovCisgICAga2FsX3VpbnQ4ICAgICAgIGZlYXR1cmVzOyAgICAgICAgICAgICAgICAgICAvKio8IGZlYXR1cmUgb3B0aW9uIG9mIFVMIHRocm90dGxlLCBwbGVhc2UgcmVmZXIgSVBDX1RIUk9UVExFX0ZFQVRVUkVfWFggKi8KK30gaXBjX3VsX3Rocm90dGxlX2NvbmZfdDsKKworLyoqIExvY2FsIHBhcmFtZXRlciBzdHJ1Y3R1cmUgZm9yIE1TR19JRF9JUENPUkVfU0VUX1VMX1RIUk9UVExFICovCit0eXBlZGVmIHN0cnVjdCBfaXBjX3NldF91bF90aHJvdHRsZV9wYXJhbV90IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGlwY191bF90aHJvdHRsZV9jb25mX3QgY29uZjsKK30gaXBjX3NldF91bF90aHJvdHRsZV9wYXJhbV90OworCisvKiogTG9jYWwgRU0gc3RydWN0dXJlIGZvciBNU0dfSURfRU1fSVBDX1VMX1RIUk9UVExFX1NUQVRVU19JTkQgKi8KK3R5cGVkZWYgc3RydWN0IF9lbV9pcGNfdWxfdGhyb3R0bGVfc3RhdHVzX2luZF9zdHJ1Y3RfdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgaXBjX3VsX3Rocm90dGxlX3N0YXRlX2UgdGhyb3R0bGVfc3RhdGU7CisgICAgaXBjX3VsX3Rocm90dGxlX2NvbmZfdCB0aHJvdHRsZV9jb25mOworfSBlbV9pcGNfdWxfdGhyb3R0bGVfc3RhdHVzX2luZF9zdHJ1Y3RfdDsKKworLyoqIExvY2FsIHBhcmFtZXRlciBzdHJ1Y3R1cmUgZm9yIE1TR19JRF9JUENPUkVfVkRNX0lNU19FTUVSR0VOQ1lfQ0FMTF9JTkQgKi8KK3R5cGVkZWYgc3RydWN0IF9pcGNfdmRtX2ltc19lbWVyZ2VuY3lfY2FsbF9pbmRfc3RydWN0X3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX2NhbGxpbmc7Cit9IGlwY192ZG1faW1zX2VtZXJnZW5jeV9jYWxsX2luZF9zdHJ1Y3RfdDsKKworLyoqIExvY2FsIHBhcmFtZXRlciBzdHJ1Y3R1cmUgZm9yIE1TR19JRF9JUENPUkVfUkVHSVNURVJfRklMVEVSX1JFUSAqLwordHlwZWRlZiBzdHJ1Y3QgX2lwY19yZWdpc3Rlcl9maWx0ZXJfcmVxX3N0cnVjdF90Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfaW50MzIgICAgICAgICAgICAgICBmaWx0ZXJfaWQ7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgZGF0YV9wYXRoX2RpcmVjdDsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICBjYWxsYmFja193aXRoX2luZm87CisgICAgaXBjX2ZpbHRlcl9ydWxlc190ICAgICAgcnVsZXM7CisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAqY2FsbGJhY2tfZnVuYzsKKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICpjYWxsYmFja19jb250ZXh0OworICAgIG1vZHVsZV90eXBlICAgICAgICAgICAgIG1vZHVsZV9pZDsKK30gaXBjX3JlZ2lzdGVyX2ZpbHRlcl9yZXFfc3RydWN0X3Q7CisKKy8qKiBMb2NhbCBwYXJhbWV0ZXIgc3RydWN0dXJlIGZvciBNU0dfSURfSVBDT1JFX0RFUkVHSVNURVJfRklMVEVSX1JFUSAqLwordHlwZWRlZiBzdHJ1Y3QgX2lwY19kZXJlZ2lzdGVyX2ZpbHRlcl9yZXFfc3RydWN0X3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9pbnQzMiAgICAgICAgICAgICAgIGZpbHRlcl9pZDsKK30gaXBjX2RlcmVnaXN0ZXJfZmlsdGVyX3JlcV9zdHJ1Y3RfdDsKKworLyoqIFJRIHJ1bGVzIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgX2lwY19ycV9pbmZvX3QgeworICAgIGthbF9ib29sIGlzX2lwdjQ7CisgICAga2FsX3VpbnQxNiBzcmNfcG9ydDsKKyAgICBrYWxfdWludDE2IGRzdF9wb3J0OworICAgIGthbF91aW50MzIgc3BpOworCisjZGVmaW5lIElQQ19SUV9JTkZPXzNfVFVQTEUgKDB4MSA8PCAwKQorI2RlZmluZSBJUENfUlFfSU5GT181X1RVUExFICgweDEgPDwgMSkKKyNkZWZpbmUgSVBDX1JRX0lORk9fU1BJICAgICAoMHgxIDw8IDIpCisgICAga2FsX3VpbnQ4IHZhbGlkX2ZpZWxkOworICAgIGthbF91aW50OCBxZmk7CisgICAga2FsX3VpbnQ4IHByb3RvY29sOworICAgIGthbF91aW50OCBwc2k7CisKKyAgICB1bmlvbiB7CisgICAgICAgIGthbF91aW50OCBhZGRyOFs0XTsKKyAgICAgICAga2FsX3VpbnQzMiBhZGRyMzI7CisgICAgfSBzcmNfaXB2NDsKKyAgICB1bmlvbiB7CisgICAgICAgIGthbF91aW50OCBhZGRyOFs0XTsKKyAgICAgICAga2FsX3VpbnQzMiBhZGRyMzI7CisgICAgfSBkc3RfaXB2NDsKKworICAgIHVuaW9uIHsKKyAgICAgICAga2FsX3VpbnQ4IGFkZHI4WzE2XTsKKyAgICAgICAga2FsX3VpbnQzMiBhZGRyMzJbNF07CisgICAgfSBzcmNfaXB2NjsKKyAgICB1bmlvbiB7CisgICAgICAgIGthbF91aW50OCBhZGRyOFsxNl07CisgICAgICAgIGthbF91aW50MzIgYWRkcjMyWzRdOworICAgIH0gZHN0X2lwdjY7Cit9IGlwY19ycV9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9pcGNfcnFfaW5mb19pbmRfdCB7CisgICAgUEVFUl9CVUZGX0hEUgorICAgIHZvaWQgKnBfcnFfaW5mbzsKK30gaXBjX3JxX2luZm9faW5kX3Q7CisKKy8qIElQQ29yZSBmaWx0ZXIgbm90aWZpY2F0aW9uIGNvbnRleHQgKi8KK3R5cGVkZWYgc3RydWN0IF9pcGNfZmlsdGVyX250ZnlfbW9kZV90IHsKKyAgICBtb2R1bGVfdHlwZSAgICAgICAgICAgICAgICAgICAgIGNia19tb2Q7CisgICAgaXBjX2ZpbHRlcl9jYWxsYmFja190ICAgICAgICAgICBjYmtfZnVuYzsKKyAgICBpcGNfZmlsdGVyX3dpdGhfaW5mb19jYWxsYmFja190IHdpdGhfaW5mb19jYmtfZnVuYzsKK30gaXBjX2ZpbHRlcl9udGZ5X21vZGVfdDsKKworLyogSVBDb3JlIGZpbHRlciBub3RpZmljYXRpb24gY29udGV4dCAqLwordHlwZWRlZiBzdHJ1Y3QgX2lwY19maWx0ZXJfbnRmeV9jdHh0X3QgeworICAgIGlwY19maWx0ZXJfbnRmeV90eXBlX2UgbnRmeV90eXBlOworICAgIGlwY19maWx0ZXJfbnRmeV9tb2RlX3QgbnRmeV9tb2Q7CisgICAgdm9pZCAqcF9udGZ5X2FyZ3M7Cit9IGlwY19maWx0ZXJfbnRmeV9jdHh0X3Q7CisKK3R5cGVkZWYgc3RydWN0IF9pcGNfcmVzdG9yZV9uZXRpZl9zdHJ1Y3RfdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIGthbF91aW50MzIgbmV0aWZfaWQ7CisgICAga2FsX3VpbnQ4IGlwX3R5cGU7CisgICAga2FsX2Jvb2wgaXNfbGlua191cGRhdGU7CisgICAga2FsX2Jvb2wgaXNfdXA7Cit9IGlwY19yZXN0b3JlX25ldGlmX3N0cnVjdF90OworCit0eXBlZGVmIHN0cnVjdCBfZDJjbV9pcGNvcmVfaW5mb19pbmRfc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfaW50MzIgbmV0aWZfaWQ7CisgICAga2FsX2Jvb2wga2VlcF9yYTsKK30gZDJjbV9pcGNvcmVfaW5mb19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfaXBjX2RhdGFfdXNhZ2VfaW5mb190IHsKKyAgICBrYWxfdWludDMyIHVwbGlua19ieXRlczsKKyAgICBrYWxfdWludDMyIGRvd25saW5rX2J5dGVzOworICAgIGthbF91aW50MzIgdXBsaW5rX3BhY2tldHM7CisgICAga2FsX3VpbnQzMiBkb3dubGlua19wYWNrZXRzOworfSBpcGNfZGF0YV91c2FnZV9pbmZvX3Q7CisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogREhMIGxvZ2dpbmcgc3RydWN0dXJlCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIHR5cGVkZWYgdm9pZCBpcGNvcmVfY29kZV9iZWdpbl9zdHJ1Y3Q7ICovCit0eXBlZGVmIGlwY19saW5rX3JlcV90IGlwY29yZV9saW5rX3VwX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIGlwY19saW5rX3JlcV90IGlwY29yZV9saW5rX2Rvd25fcmVxX3N0cnVjdDsKK3R5cGVkZWYgaXBjX2xoaWZjb3JlX3FfbWFwcGluZ19tc2dfdCBpcGNvcmVfbGhpZmNvcmVfcXVldWVfbWFwcGluZ19yZXFfc3RydWN0OwordHlwZWRlZiBpcGNfbGhpZmNvcmVfcV9tYXBwaW5nX21zZ190IGlwY29yZV9saGlmY29yZV9xdWV1ZV9tYXBwaW5nX3JzcF9zdHJ1Y3Q7CisvKiogdHlwZWRlZiB2b2lkIGxtc19kbF9zZHVfc3RydWN0OyAqLwordHlwZWRlZiBsbXNfaXBjX250ZnlfdCBsbXNfbmV0aWZfYXR0YWNoX3N0cnVjdDsKKy8qKiB0eXBlZGVmIHZvaWQgaXBjb3JlX3Byb2Nlc3NfdWxfcXVldWVfcmVxX3N0cnVjdDsgKi8KKy8qKiB0eXBlZGVmIHZvaWQgaXBjb3JlX3JldHJ5X3VsX3JlbG9hZF9yZXFfc3RydWN0OyAqLwordHlwZWRlZiBpcGNfcGFja2V0X2ZpbHRlcmVkX3JlcV90IGlwY29yZV9kbF9wYWNrZXRfZmlsdGVyZWRfcmVxX3N0cnVjdDsKK3R5cGVkZWYgaXBjX3BhY2tldF9maWx0ZXJlZF9yZXFfdCBpcGNvcmVfdWxfcGFja2V0X2ZpbHRlcmVkX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIGlwY19saW5rX3JlcV90IGlwY29yZV9pcF91cF9yZXFfc3RydWN0OwordHlwZWRlZiBpcGNfbGlua19yZXFfdCBpcGNvcmVfaXBfZG93bl9yZXFfc3RydWN0OwordHlwZWRlZiBpcGNfbGlua19oYW5kc2hha2VfbXNnX3QgaXBjb3JlX2xpbmtfdXBfaW5kX3N0cnVjdDsKK3R5cGVkZWYgaXBjX2xpbmtfaGFuZHNoYWtlX21zZ190IGlwY29yZV9pcF91cF9pbmRfc3RydWN0OwordHlwZWRlZiBpcGNfbGlua19oYW5kc2hha2VfbXNnX3QgaXBjb3JlX2xpbmtfdXBfcnNwX3N0cnVjdDsKK3R5cGVkZWYgaXBjX2xpbmtfaGFuZHNoYWtlX21zZ190IGlwY29yZV9pcF91cF9yc3Bfc3RydWN0OworLyoqIHR5cGVkZWYgdm9pZCBpcGNvcmVfcXVlcnlfaW5mb19yZXFfc3RydWN0OyAqLwordHlwZWRlZiBpcGNfcXVlcnlfaW5mb190IGlwY29yZV9xdWVyeV9pbmZvX2NuZl9zdHJ1Y3Q7Cit0eXBlZGVmIGlwY19wYWNrZXRfZmlsdGVyZWRfd2l0aF9pbmZvX3JlcV90IGlwY29yZV9kbF9wYWNrZXRfZmlsdGVyZWRfd2l0aF9pbmZvX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIGlwY19wYWNrZXRfZmlsdGVyZWRfd2l0aF9pbmZvX3JlcV90IGlwY29yZV91bF9wYWNrZXRfZmlsdGVyZWRfd2l0aF9pbmZvX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIGlwY19zZXRfdWxfdGhyb3R0bGVfcGFyYW1fdCBpcGNvcmVfc2V0X3VsX3Rocm90dGxlX3N0cnVjdDsKK3R5cGVkZWYgZW1faXBjX3VsX3Rocm90dGxlX3N0YXR1c19pbmRfc3RydWN0X3QgZW1faXBjX3VsX3Rocm90dGxlX3N0YXR1c19pbmRfc3RydWN0OwordHlwZWRlZiBpcGNfdmRtX2ltc19lbWVyZ2VuY3lfY2FsbF9pbmRfc3RydWN0X3QgaXBjb3JlX3ZkbV9pbXNfZW1lcmdlbmN5X2NhbGxfaW5kX3N0cnVjdDsKK3R5cGVkZWYgaXBjX3JlZ2lzdGVyX2ZpbHRlcl9yZXFfc3RydWN0X3QgaXBjb3JlX3JlZ2lzdGVyX2ZpbHRlcl9yZXFfc3RydWN0OwordHlwZWRlZiBpcGNfZGVyZWdpc3Rlcl9maWx0ZXJfcmVxX3N0cnVjdF90IGlwY29yZV9kZXJlZ2lzdGVyX2ZpbHRlcl9yZXFfc3RydWN0OworCisjZW5kaWYgLyogX19JTkNfSVBDX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2lwZmNfZW51bXMuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvaXBmY19lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1Yzk4MjQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2lwZmNfZW51bXMuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9fSU5DX0lQRkNfRU5VTVNfSAorI2RlZmluZSBfX0lOQ19JUEZDX0VOVU1TX0gKKwordHlwZWRlZiBlbnVtIF9pcGZjX2RiZ19mdW5jX2NvZGUgeworICAgIElQRkNfQ09SRV9NQUtFX1JFU0VSVkFUSU9OID0gMCwKKyAgICBJUEZDX0NPUkVfQ0FOQ0VMX1JFU0VSVkFUSU9OLAorICAgIElQRkNfQ09SRV9XQUlUX0lOX0xJTkUsCisgICAgSVBGQ19DT1JFX1NFUlZFX09SREVSLAorICAgIElQRkNfR09VUk1FVF9ETF9GSUxURVJfUVVFU1RfVE9fVVBEQVRFX0hXX0ZJTFRFUiwKKyAgICBJUEZDX0dPVVJNRVRfRExfRklMVEVSX1BFTkRfVE9fVVBEQVRFX0hXX0ZJTFRFUiwKKyAgICBJUEZDX0dPVVJNRVRfRExfRklMVEVSX1VQREFURV9IV19GSUxURVIsCisgICAgSVBGQ19EQkdfRlVOQ19DT0RFX01BWCA9IDB4N2ZmZmZmZmYsCit9IGlwZmNfZGJnX2Z1bmNfY29kZTsKKworI2VuZGlmIC8qIF9fSU5DX0lQRkNfRU5VTVNfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9pcGZjX2V4cG9ydF9jb3JlLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2lwZmNfZXhwb3J0X2NvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWFiNDkzCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9pcGZjX2V4cG9ydF9jb3JlLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiAgX0lQRkNPUkVfRVhQT1JUX0lOQworI2RlZmluZSAgX0lQRkNPUkVfRVhQT1JUX0lOQworCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKwora2FsX2Jvb2wgICAgaXBmY19jb3JlX2VuYWJsZV9tZXRhX2NoZWNrKGthbF91aW50MzIgbWV0YV9pZCwgdm9pZCAoKmhkbHJfcCkoa2FsX3VpbnQxNiwga2FsX3VpbnQxNiwga2FsX3VpbnQzMikpOwordm9pZCAgICAgICAgaXBmY19jb3JlX3F1ZXJ5X21ldGFfaW5mbyh2b2lkKiogYmFzZSwga2FsX3VpbnQxNiogZW50cnlfbnVtLCBrYWxfdWludDMyIGlwZl9tZXRhX3FfdHlwZSk7Cit2b2lkICAgICAgICBpcGZjX2NvcmVfcmVsZWFzZV9tZXRhX2VudHJ5KGthbF91aW50MTYgcmVsX251bSwga2FsX3VpbnQzMiBpcGZfbWV0YV9xX3R5cGUpOworCisjZW5kaWYgLy9fSVBGQ09SRV9FWFBPUlRfSU5DCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2lwZmNfZXhwb3J0X3BsdWdpbl9ycW9zLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2lwZmNfZXhwb3J0X3BsdWdpbl9ycW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVlZWMxZAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvaXBmY19leHBvcnRfcGx1Z2luX3Jxb3MuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9fSU5DX0lQRkNfUExVR0lOX1JRT1MKKyNkZWZpbmUgX19JTkNfSVBGQ19QTFVHSU5fUlFPUworCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJpcGZjX2V4cG9ydF9wbHVnaW5fcnFvc190eXBlLmgiCisKK2thbF9ib29sIGlwZmNfcGx1Z2luX3Jxb3Nfc2V0X3RocmVzaG9sZChrYWxfdWludDggcGRuX3NpbV9pZCwga2FsX2Jvb2wgdG9fZW5hYmxlLCBrYWxfdWludDE2IHRocmVzaG9sZCk7CitrYWxfYm9vbCBpcGZjX2dvdXJtZXRfcnFvc19uYXNfZW5hYmxlKGthbF91aW50MTYgdF91bml0KTsKKworI2VuZGlmIC8vX19JTkNfSVBGQ19QTFVHSU5fUlFPUwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9pcGZjX2V4cG9ydF9wbHVnaW5fcnFvc190eXBlLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL2lwZmNfZXhwb3J0X3BsdWdpbl9ycW9zX3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTkxNGVmCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9pcGZjX2V4cG9ydF9wbHVnaW5fcnFvc190eXBlLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBfX0lOQ19JUEZDX1BMVUdJTl9SUU9TX1RZUEUKKyNkZWZpbmUgX19JTkNfSVBGQ19QTFVHSU5fUlFPU19UWVBFCisKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCisjaW5jbHVkZSAiaXBjX3N0cnVjdC5oIgorCisjZGVmaW5lIFJRT1NfUFJPVE9DT0xfVENQIDB4MDYKKyNkZWZpbmUgUlFPU19QUk9UT0NPTF9VRFAgMHgxMQorI2RlZmluZSBSUU9TX1BST1RPQ09MX0VTUCAweDMyCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcnVsZV9pZHg7CisKKyAgICBpcGNfcnFfaW5mb190IHJxX2luZm87CisKK30gdGZ0bGliX3Jxb3NfYWRkX3J1bGVfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgZGVsZXRlX2JpdG1hc2s7CisKK30gdGZ0bGliX3Jxb3NfZGVsX3J1bGVzX2luZF9zdHJ1Y3Q7CisKKyNlbmRpZiAvL19fSU5DX0lQRkNfUExVR0lOX1JRT1NfVFlQRQpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9sbXNfZW51bXMuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvbG1zX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAwODQxZAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvbG1zX2VudW1zLmgKQEAgLTAsMCArMSw3MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBsbXNfZW51bXMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBUQVRBS0EKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBMTVMgcHVibGljIGVudW1lcmF0aW9uIGRlZmluaXRpb24uCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fSU5DX0xNU19FTlVNU19ICisjZGVmaW5lIF9fSU5DX0xNU19FTlVNU19ICisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEYXRhIHN0cnVjdHVyZSBkZWZpbnRpb24uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZW5kaWYgLyogX19JTkNfTE1TX0VOVU1TX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvbG1zX3N0cnVjdC5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9sbXNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY0MjM2OAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvbG1zX3N0cnVjdC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgbG1zX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIFRBVEFLQQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIExNUyBJTE0gc3RydWN0dXJlIGFuZCBpbnRlcmZhY2UgZGVmaW5pdGlvbi4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fSU5DX0xNU19TVFJVQ1RfSAorI2RlZmluZSBfX0lOQ19MTVNfU1RSVUNUX0gKKworI2luY2x1ZGUgImhpZl9pb3IuaCIKKyNpbmNsdWRlICJoaWZfbXdfbXNnaWQuaCIKKyNpbmNsdWRlICJpcGNfc3RydWN0LmgiCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERITCBsb2dnaW5nIHN0cnVjdHVyZQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2VuZGlmIC8qIF9fSU5DX0xNU19TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9tYmltX2RlZnNfcHVibGljLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL21iaW1fZGVmc19wdWJsaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTgyMzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9tYmltX2RlZnNfcHVibGljLmgKQEAgLTAsMCArMSw3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIAorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgbWJpbV9kZWZzX3B1YmxpYy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBNQklNIHB1YmxpYyBkZWZpbml0aW9uLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqICAgCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fSU5DX01CSU1fREVGU19QVUJMSUNfSAorI2RlZmluZSBfX0lOQ19NQklNX0RFRlNfUFVCTElDX0gKKwordHlwZWRlZiBzdHJ1Y3R7CisJTE9DQUxfUEFSQV9IRFIKKwlrYWxfdWludDMyIHJlbW90ZV93YWtldXBfdHlwZTsKK30gdXNiX2w1aW9fcmVtb3RlX3dha2V1cF9pbmRfc3RydWN0OworCit0eXBlZGVmIGludCAoKm1iaW1fc3VzcGVuZF9jYWxsYmFjaykodm9pZCAqcGFyYW0pOwordm9pZCBtYmltX3JlZ2lzdGVyX3N1c3BlbmRfY2FsbGJhY2sobWJpbV9zdXNwZW5kX2NhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpwYXJhbSk7CisKKyNlbmRpZiAvKiBfX0lOQ19NQklNX0RFRlNfUFVCTElDX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvbXNfYWRhcHRlci5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9tc19hZGFwdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlkN2IzYgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvbXNfYWRhcHRlci5oCkBAIC0wLDAgKzEsODMgQEAKKyNpZm5kZWYgX19NU19BREFQVEVSX0gKKyNkZWZpbmUgX19NU19BREFQVEVSX0gKKworI2luY2x1ZGUgImZzX2Z1bmMuaCIKKworI2RlZmluZSBNQVhfRElTS19EUlZFUiAgICAgICAgICAgICAgCTQKKyNkZWZpbmUJVVNCTVNfSU5WQUxJRF9NQVhfTFVOCQkJMHhGRgorI2RlZmluZSBERUZBVUxUX01BWF9HUERfT0ZfTFVOCQkJNjQKKyNkZWZpbmUgTkFORF9SRUFEX1NaCQkJCQkoMTAyNCoxNikKKyNkZWZpbmUgTkFORF9XUklURV9TWgkJCQkJKDEwMjQqMzIpCisKK3R5cGVkZWYgZW51bSAKK3sKKwlVU0JfU1RPUkFHRV9ERVZfU1RBVFVTX09LID0gMCwKKwlVU0JfU1RPUkFHRV9ERVZfU1RBVFVTX01FRElBX0NIQU5HRSwKKwlVU0JfU1RPUkFHRV9ERVZfU1RBVFVTX05PTUVESUEsCisJVVNCX1NUT1JBR0VfREVWX1NUQVRVU19XUCwKKwlVU0JfU1RPUkFHRV9ERVZfU1RBVFVTX01BWAorfSBVU0JfU1RPUkFHRV9ERVZfU1RBVFVTOworCisKK3R5cGVkZWYgZW51bQoreworCVVTQl9TVE9SQUdFX0RFVl9OT1IsCisJVVNCX1NUT1JBR0VfREVWX05BTkQsCisJVVNCX1NUT1JBR0VfREVWX0NBUkQsCisJVVNCX1NUT1JBR0VfREVWX0NEUk9NLAorCVVTQl9TVE9SQUdFX0RFVl9OT05FCit9VVNCX1NUT1JBR0VfREVWX1RZUEU7CisKKy8qIHJlYWQgY2FwYWNpdHkgY29tbWFuZCBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJa2FsX3VpbnQzMiBMYXN0QkE7CS8qZGVwZW5kIG9uIHRoZSB0YXJnZXQqLworCWthbF91aW50MzIgQmxrTGVuOwkvKjUxMiovCit9IFJlYWRfQ2FwYWNpdHlfSW5mbzsgICAgIAorCit0eXBlZGVmIHN0cnVjdAoreworCWthbF9ib29sICgqIHVzYm1zX3JlYWQpKHZvaWQgKmRhdGEsIGthbF91aW50MzIgbGJhLCBrYWxfdWludDE2IGxiYV9udW0pOworCWthbF9ib29sICgqIHVzYm1zX3dyaXRlKSh2b2lkICpkYXRhLCBrYWxfdWludDMyIGxiYSwga2FsX3VpbnQxNiBsYmFfbnVtKTsKKwlrYWxfYm9vbCAoKiB1c2Jtc19yZWFkX2dwZCkocWJtX2dwZCAqaGVhZCxxYm1fZ3BkICp0YWlsLCBrYWxfdWludDMyIGxiYSwga2FsX3VpbnQxNiBsYmFfbnVtKTsgLy9yZWFkIHdpdGggR1BECisJa2FsX2Jvb2wgKCogdXNibXNfd3JpdGVfZ3BkKShxYm1fZ3BkICpoZWFkLHFibV9ncGQgKnRhaWwsIGthbF91aW50MzIgbGJhLCBrYWxfdWludDE2IGxiYV9udW0pOyAvL3dyaXRlIHdpdGggR1BECisJa2FsX2Jvb2wgKCogdXNibXNfcXVlcnlfbWF4X2JkX251bSkoa2FsX3VpbnQxNiAgKm1heF9iZF9udW0pOyAvL3F1ZXJ5IHRoZSBtYXggQkQgbnVtYmVyLCB0aGUgZHJpdmVyIGNhbiByZWNlaXZlCisJa2FsX2Jvb2wgKCogdXNibXNfZm9ybWF0KSh2b2lkKTsKKwlVU0JfU1RPUkFHRV9ERVZfU1RBVFVTICgqIHVzYm1zX2NoZWNrbWVkaWFfZXhpc3QpKHZvaWQpOworCWthbF9ib29sICgqIHVzYm1zX3ByZXZtZWRpYV9yZW1vdmFsKShrYWxfYm9vbCBlbmFibGUpOworCWthbF9ib29sICgqIHVzYm1zX3JlYWRfY2FwYWNpdHkpKGthbF91aW50MzIgKm1heF9sYmEsIGthbF91aW50MzIgKmxiYV9sZW4pOworLy8Ja2FsX2Jvb2wgKCogdXNibXNfcmVhZF9mb3JtYXRjYXBhY2l0eSkoa2FsX3VpbnQzMiAqbm9fb2ZfYmxrcywga2FsX3VpbnQzMiAqYmxrX2xlbik7CisJVVNCX1NUT1JBR0VfREVWX1RZUEUJKCogdXNibXNfZGV2X3R5cGUpKHZvaWQpOworfVVTQl9EaXNrRHJpdmVyX1NUUlVDVDsKKwordHlwZWRlZiBlbnVtIAoreworCU1TX1JFQUQgPSAwLAorCU1TX1dSSVRFCit9IE1TX0RJUkVDVElPTjsKKworZXh0ZXJuIEZTX0hBTkRMRQkJCWdfY2Ryb21fZHJpdmVfaGFuZGxlOworLyogdHJhbnNsYXRlIGZkIHR5cGUgdG8gdXNiIGRldiB0eXBlKi8KK2V4dGVybiBVU0JfU1RPUkFHRV9ERVZfVFlQRSBNU19UcmFuc19Gc19UeXBlKEZTX0RFVklDRV9UWVBFX0VOVU0gdHlwZSk7CitleHRlcm4ga2FsX3VpbnQ4IE1TX0dldF9NYXhfTFVOKHZvaWQpOworZXh0ZXJuIHZvaWQgTVNfRGVSZWdpc3Rlcl9EaXNrRHJpdmVyKGthbF91aW50OCBkaXNrX2luZGV4KTsKK2V4dGVybiB2b2lkIE1TX0NoYW5nZV9SZWdpc3Rlcl9EaXNrRHJpdmVyKGthbF91aW50OCBkaXNrX2luZGV4LCBVU0JfRGlza0RyaXZlcl9TVFJVQ1QgKmRpc2tfYXBpKTsKK2V4dGVybiBVU0JfU1RPUkFHRV9ERVZfU1RBVFVTIE1TX0NoZWNrbWVkaWFfRXhpc3Qoa2FsX3VpbnQ4IExVTik7CitleHRlcm4ga2FsX2Jvb2wgTVNfRm9ybWF0KGthbF91aW50OCBMVU4pOworZXh0ZXJuIGthbF9ib29sIE1TX1JlYWRfQ2FwYWNpdHkoa2FsX3VpbnQ4IExVTiwga2FsX3VpbnQzMiAqbWF4X2xiYSwga2FsX3VpbnQzMiAqbGJhX2xlbik7CisvL2V4dGVybiBrYWxfYm9vbCBNU19SZWFkX0Zvcm1hdENhcGFjaXR5KGthbF91aW50OCBMVU4sIGthbF91aW50MzIgKm1heF9sYmEsIGthbF91aW50MzIgKnNlY19sZW4pOworZXh0ZXJuIGthbF9ib29sIE1TX1JlYWRfV3JpdGUoTVNfRElSRUNUSU9OIGRpcmVjdCwgdm9pZCAqZGV2X3QscWJtX2dwZCAqaGVhZCxxYm1fZ3BkICp0YWlsLCBrYWxfdWludDE2IGxiYV9udW0pOworZXh0ZXJuIGthbF9ib29sIE1TX1ByZXZtZWRpYV9SZW1vdmFsKGthbF91aW50OCBMVU4sIGthbF9ib29sIGVuYWJsZSk7CitleHRlcm4gVVNCX1NUT1JBR0VfREVWX1RZUEUgTVNfRGV2X1R5cGUoa2FsX3VpbnQ4IExVTik7CitleHRlcm4ga2FsX3VpbnQ4IE1TX1JlZ2lzdGVyX0Rpc2tEcml2ZXIoVVNCX0Rpc2tEcml2ZXJfU1RSVUNUICpkaXNrX2FwaSk7CitleHRlcm4ga2FsX3VpbnQ4IE1TX1NldF9DdXJyZW50X0RyaXZlcihrYWxfdWludDMyIGRydik7CitleHRlcm4ga2FsX3VpbnQzMiBNU19HZXRfQ3VycmVudF9Ecml2ZXIodm9pZCk7CitleHRlcm4gdm9pZCBNU19BZGFwdGVyX0RlaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIE1TX0luaXRfTm9ybWFsX01vZGUodm9pZCk7CitleHRlcm4gdm9pZCBNU19FbmRfTm9ybWFsX01vZGUodm9pZCk7CitleHRlcm4ga2FsX3VpbnQxNiBNU19RdWVyeV9NYXhfQkRfTnVtKGthbF91aW50OCBMVU4pOworZXh0ZXJuIHZvaWQgRkFUX0luaXQodm9pZCk7CisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvbmNjbW5pX2lmLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL25jY21uaV9pZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZjhkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL25jY21uaV9pZi5oCkBAIC0wLDAgKzEsMjc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTIKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgbmNjbW5pLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgVk1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBOQ0NNTkkgaW50ZXJmYWNlIGhlYWRlciBmaWxlCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAkTG9nJAorICoKKyAqIDAzIDIzIDIwMjAgYWN0b3J5Lm91CisgKiBbTU9MWTAwNTAyODU4XSBbR2VuOTddW0dlbjk4XSBtZXJnZSBjY2NpIGNoYW5uZWwgaWQvcnVudGltZSBkYXRhIGlkCisgKiBbMTlOT1ZdW09BXVtOQ0NDSURFVl0gc3luYyBUVFkvTkNDTU5JIHBvcnQgdGFibGUKKyAqCisgKiAwMiAyNCAyMDIwIGFjdG9yeS5vdQorICogW01PTFkwMDQ3NDU3Nl0gW0dlbjk3XSBOQ0NNTkkgZGV2ZWxvcG1lbnQKKyAqIFsxOU5PVi5ERVZdW09BXSBhZGQgc2VuZGluZyBBUEkgZm9yIHByb3h5IHRvIHNlbmQgcGFja2V0IHRvIHNBUAorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX05DQ01OSV9JRl9ICisjZGVmaW5lIF9OQ0NNTklfSUZfSAorCisjaW5jbHVkZSAidGNwaXBfc3RydWN0LmgiCisjaW5jbHVkZSAiaXdsYW5fcHVibGljX2RlZnMuaCIKKwordHlwZWRlZiBlbnVteworICAgIE5DQ01OSV9ORVRfSUZfTUlOID0gMCwKKyAgICBOQ0NNTklfTkVUX0lGXzAgPSBOQ0NNTklfTkVUX0lGX01JTiwKKyAgICBOQ0NNTklfTkVUX0lGXzEsCisgICAgTkNDTU5JX05FVF9JRl8yLAorICAgIE5DQ01OSV9ORVRfSUZfMywKKyAgICBOQ0NNTklfTkVUX0lGXzQsCisgICAgTkNDTU5JX05FVF9JRl81LAorICAgIE5DQ01OSV9ORVRfSUZfNiwKKyAgICBOQ0NNTklfTkVUX0lGXzcsCisgICAgTkNDTU5JX05FVF9JRl84LAorICAgIE5DQ01OSV9ORVRfSUZfOSwKKyAgICBOQ0NNTklfTkVUX0lGXzEwLAorICAgIE5DQ01OSV9ORVRfSUZfMTEsCisgICAgTkNDTU5JX05FVF9JRl8xMiwKKyAgICBOQ0NNTklfTkVUX0lGXzEzLAorICAgIE5DQ01OSV9ORVRfSUZfMTQsCisgICAgTkNDTU5JX05FVF9JRl8xNSwKKyAgICBOQ0NNTklfTkVUX0lGXzE2LAorICAgIE5DQ01OSV9ORVRfSUZfMTcsCisgICAgTkNDTU5JX05FVF9JRl8xOCwKKyAgICBOQ0NNTklfTkVUX0lGXzE5LAorICAgIE5DQ01OSV9ORVRfSUZfMjAsCisgICAgTkNDTU5JX05FVF9JRl9NQVgsCisgICAgTkNDTU5JX05FVF9JRl9NQVhCSVQgPSAweEZGLAorfSBOQ0NNTklfTkVUX0lGX0U7CisKK3R5cGVkZWYgZW51bXsKKyAgICBOQ0NNTklfUEFDS0VUX1RZUEVfQlVGRkVSID0gMCwgLy9zdXBwb3J0IGJ1ZmZlciBtb2RlIG9ubHkKKyAgICBOQ0NNTklfUEFDS0VUX1RZUEVfTUFYLAorfSBOQ0NNTklfUEFDS0VUX1RZUEVfRTsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTkNDTU5JX1BBQ0tFVF9UWVBFX0UgcGt0X3R5cGU7CisgICAgCisgICAgLy9pZiBwa3QgdHlwZT09TkNDTU5JX1BBQ0tFVF9UWVBFX0JVRkZFUgorICAgIGthbF91aW50OCAqcF9kYXRhOworICAgIGthbF91aW50MzIgZGF0YV9sZW47Cit9IE5DQ01OSV9TRU5EX1BBQ0tFVF9UOworCitrYWxfYm9vbCBuY2Ntbmlfc2VuZF9kbF9wa3QoTkNDTU5JX1NFTkRfUEFDS0VUX1QgKnBfcGt0LCBOQ0NNTklfTkVUX0lGX0UgbmV0aWZfaWQpOworCisvL0w1IC0+IE5DQ01OSQorCisjcHJhZ21hIHBhY2socHVzaCkKKyNwcmFnbWEgcGFjayg0KQorLy8gTVNHX0lEX0w1X05DQ01OSV9SRUdGSUxURVJfUkVRCit0eXBlZGVmIHN0cnVjdHsKKyAgICBOQ0NNTklfTkVUX0lGX0UgbmNjbW5pX25ldF9pZjsgLy9rYWxfdWludDgKKyAgICBrYWxfdWludDE2IG5jY21uaV9zZXE7CisgICAga2FsX3VpbnQ4IHJlc2VydmUxOworICAgIGthbF91aW50MzIgdmFsaWRfZmllbGQ7IC8vbWFuZGF0b3J5LCBhIGJpdG1hcCwgcmVmZXIgdG8gSVBDX0ZJTFRFUl9CWV9YWFgKKyAgICBrYWxfdWludDggaXBfdHlwZTsgLy9JUENfSVBfVFlQRV9JUFY0IG9yIElQQ19JUF9UWVBFX0lQVjYKKyAgICBrYWxfdWludDggY3RybF9wcm90b2NvbDsgLy9JUENfSERSX1BST1RfWFhYCisgICAga2FsX3VpbnQxNiBzcmNfcG9ydDsKKyAgICBrYWxfdWludDE2IGRzdF9wb3J0OworICAgIGthbF91aW50MTYgdGNwX2ZsYWdzOyAvL0lQQ19IRFJfVENQX0ZMQUdfWFhYCisgICAga2FsX3VpbnQzMiBzcGk7IC8vCisgICAgdW5pb257CisgICAgICAgIGthbF91aW50OCBhZGRyOFs0XTsKKyAgICAgICAga2FsX3VpbnQzMiBhZGRyMzI7CisgICAgfSBzcmNfaXB2NDsgLy8gU291cmNlIElQdjQgYWRkcmVzcyB0byBmaWx0ZXIuCisgICAgdW5pb257CisgICAgICAgIGthbF91aW50OCBhZGRyOFs0XTsKKyAgICAgICAga2FsX3VpbnQzMiBhZGRyMzI7CisgICAgfSBkc3RfaXB2NDsgLy8gRGVzdGluYXRpb24gSVB2NCBhZGRyZXNzIHRvIGZpbHRlci4KKworICAgIHVuaW9ueworICAgICAgICBrYWxfdWludDggYWRkcjhbMTZdOworICAgICAgICBrYWxfdWludDMyIGFkZHIzMls0XTsKKyAgICB9IHNyY19pcHY2OyAvLyBTb3VyY2UgSVB2NiBhZGRyZXNzIHRvIGZpbHRlci4KKyAgICB1bmlvbnsKKyAgICAgICAga2FsX3VpbnQ4IGFkZHI4WzE2XTsKKyAgICAgICAga2FsX3VpbnQzMiBhZGRyMzJbNF07CisgICAgfSBkc3RfaXB2NjsgLy8gRGVzdGluYXRpb24gSVB2NiBhZGRyZXNzIHRvIGZpbHRlci4gCisgICAgCisgICAga2FsX3VpbnQ4IGljbXB2NF90eXBlOyAgICAvLyBUeXBlIGZpZWxkIG9mIElDTVB2NCBoZWFkZXIgdG8gZmlsdGVyLgorICAgIGthbF91aW50OCBpY21wdjZfdHlwZTsgICAgLy8gVHlwZSBmaWVsZCBvZiBJQ01QdjYgaGVhZGVyIHRvIGZpbHRlci4KKyAgICBrYWxfdWludDE2IHJlc2VydmUyOworfSBsNV9uY2NtbmlfcmVnZmlsdGVyX3JlcV9zdHJ1Y3Q7CisjcHJhZ21hIHBhY2socG9wKQorCisKKyNwcmFnbWEgcGFjayhwdXNoKQorI3ByYWdtYSBwYWNrKDQpCisvLyBNU0dfSURfTDVfTkNDTU5JX1JFR0ZJTFRFUl9DTkYKK3R5cGVkZWYgc3RydWN0eworICAgIE5DQ01OSV9ORVRfSUZfRSBuY2NtbmlfbmV0X2lmOyAvL2thbF91aW50OAorICAgIGthbF91aW50MTYgbmNjbW5pX3NlcTsKKyAgICBrYWxfdWludDggcmVzZXJ2ZTsKKyAgICBrYWxfaW50MzIgZmlsdGVyX2lkOyAvLz49MDogZmlsdGVyIGlkLCA8MDogc2V0IGZhaWxlZAorfSBsNV9uY2NtbmlfcmVnZmlsdGVyX2NuZl9zdHJ1Y3Q7CisjcHJhZ21hIHBhY2socG9wKQorCisKKyNwcmFnbWEgcGFjayhwdXNoKQorI3ByYWdtYSBwYWNrKDQpCisvLyBNU0dfSURfTDVfTkNDTU5JX0RFUkVHRklMVEVSX1JFUQordHlwZWRlZiBzdHJ1Y3R7CisgICAgTkNDTU5JX05FVF9JRl9FIG5jY21uaV9uZXRfaWY7IC8va2FsX3VpbnQ4CisgICAga2FsX3VpbnQxNiBuY2Ntbmlfc2VxOworICAgIGthbF91aW50OCByZXNlcnZlOworICAgIGthbF9pbnQzMiBpc19kZXJlZ2lzdGVyX2FsbF9maWx0ZXI7IC8vMDogZGVyZWdpc3RlciB0aGUgZmlsdGVyIGlkIG9ubHksIDE6IGRlcmVnaXN0ZXIgYWxsIGZpbHRlcgorICAgIGthbF9pbnQzMiBmaWx0ZXJfaWQ7IC8vZmlsdGVyIGlkIHRvIGRlcmVnaXN0ZXIKK30gbDVfbmNjbW5pX2RlcmVnZmlsdGVyX3JlcV9zdHJ1Y3Q7CisjcHJhZ21hIHBhY2socG9wKQorCisKKyNwcmFnbWEgcGFjayhwdXNoKQorI3ByYWdtYSBwYWNrKDQpCisvLyBNU0dfSURfTDVfTkNDTU5JX0RFUkVHRklMVEVSX0NORgordHlwZWRlZiBzdHJ1Y3R7CisgICAgTkNDTU5JX05FVF9JRl9FIG5jY21uaV9uZXRfaWY7IC8va2FsX3VpbnQ4CisgICAga2FsX3VpbnQxNiBuY2Ntbmlfc2VxOworICAgIGthbF91aW50OCByZXNlcnZlOworICAgIGthbF9pbnQzMiBpc19zdWNjZXNzOyAvLzE6IHN1Y2Nlc3MKK30gbDVfbmNjbW5pX2RlcmVnZmlsdGVyX2NuZl9zdHJ1Y3Q7CisjcHJhZ21hIHBhY2socG9wKQorCisKKy8vIEQyIC0tPiBOQ0NNTkkKKworI2RlZmluZSBEMl9OQ0NNTklfUkVRX0xPQ0FMX1BBUkFfSERSIFwKKyAgICBMT0NBTF9QQVJBX0hEUiBcCisgICAga2FsX3VpbnQzMiAgICAgIGludGVyZmFjZV9pZDsgLyogdHJhbnNhY3Rpb24gaWQgKyBjaGFubmVsIGlkICovIFwKKyAgICBpd2xhbl9yYW5fZSAgICAgcmFuX3R5cGU7ICAgICAvKiBpd2xhbl9yYW5fZSAqLworCisvLyBNU0dfSURfRDJfTkNDTU5JX0VTVEFCTElTSFBETl9SRVEKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRDJfTkNDTU5JX1JFUV9MT0NBTF9QQVJBX0hEUgorCisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgbmV0aWZfaWQ7ICAgICAvKiBuZXR3b3JrX2ludGVyZmFjZV9pZCBpbiBuZXRfaW5mbyAqLworICAgIG5ld19pcF9pbmZvX3N0cnVjdCAgICAgIGlwX2luZm87CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgbmV0X2luZm9fcHJlc2VudDsKKyAgICB0Y3BpcF9uZXRfaW5mb19zdHJ1Y3RfdCBuZXRfaW5mbzsKK30gZDJfbmNjbW5pX2VzdGFibGlzaHBkbl9yZXFfc3RydWN0OworCisvLyBNU0dfSURfRDJfTkNDTU5JX0RJU0NPTk5FQ1RQRE5fUkVRCit0eXBlZGVmIHN0cnVjdAoreworICAgIEQyX05DQ01OSV9SRVFfTE9DQUxfUEFSQV9IRFIKK30gZDJfbmNjbW5pX2Rpc2Nvbm5lY3RwZG5fcmVxX3N0cnVjdDsKKworLy8gTVNHX0lEX0QyX05DQ01OSV9JRkNIQU5HRV9SRVEKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRDJfTkNDTU5JX1JFUV9MT0NBTF9QQVJBX0hEUgorCisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgZXZlbnQ7CisgICAgbmV3X2lwX2luZm9fc3RydWN0ICAgICAgaXBfaW5mbzsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICBuZXRfaW5mb19wcmVzZW50OworICAgIHRjcGlwX25ldF9pbmZvX3N0cnVjdF90IG5ldF9pbmZvOworfSBkMl9uY2NtbmlfaWZjaGFuZ2VfcmVxX3N0cnVjdDsKKworCisvLyBOQ0NNTkkgLS0+IEQyCit0eXBlZGVmIGVudW0KK3sKKyAgICBOQ0NNTklfUkVTX1NVQ0MgPSAwLAorICAgIE5DQ01OSV9SRVNfTk9ORSA9IDEsCisgICAgTkNDTU5JX1JFU19GQUlMID0gMiwKKyAgICBOQ0NNTklfUkVTX01BWCAgPSAweDdGRkZGRkZGLAorfSBuY2NtbmlfcmVzX2VudW07CisKKworI2RlZmluZSBEMl9OQ0NNTklfQ05GX0xPQ0FMX1BBUkFfSERSIFwKKyAgICBMT0NBTF9QQVJBX0hEUiBcCisgICAga2FsX3VpbnQzMiAgICAgIGludGVyZmFjZV9pZDsgXAorICAgIG5jY21uaV9yZXNfZW51bSByZXM7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRDJfTkNDTU5JX0NORl9MT0NBTF9QQVJBX0hEUgorfSBkMl9uY2NtbmlfY25mX3N0cnVjdDsKKworCisvLyBNU0dfSURfRDJfTkNDTU5JX0VTVEFCTElTSFBETl9DTkYKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRDJfTkNDTU5JX0NORl9MT0NBTF9QQVJBX0hEUgorCisgICAgLy8ga2FsX3VpbnQzMiAgICAgICAgICAgICAgc3RraWZfaWQ7CisgICAgLy8gaXBzdGtfaXBfaW5mb19zdHJ1Y3QgICAgaXBzdGtfaXBfaW5mbzsKK30gZDJfbmNjbW5pX2VzdGFibGlzaHBkbl9jbmZfc3RydWN0OworCisvLyBNU0dfSURfRDJfTkNDTU5JX0RJU0NPTk5FQ1RQRE5fQ05GCit0eXBlZGVmIHN0cnVjdAoreworICAgIEQyX05DQ01OSV9DTkZfTE9DQUxfUEFSQV9IRFIKKworICAgIC8vIGthbF91aW50MzIgICAgICAgICAgICAgIHN0a2lmX2lkOworfSBkMl9uY2NtbmlfZGlzY29ubmVjdHBkbl9jbmZfc3RydWN0OworCisvLyBNU0dfSURfRDJfTkNDTU5JX0lGQ0hBTkdFX0NORgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBEMl9OQ0NNTklfQ05GX0xPQ0FMX1BBUkFfSERSCisKKyAgICAvLyBrYWxfdWludDMyICAgICAgICAgICAgICBzdGtpZl9pZDsKKyAgICAvLyBpcHN0a19pcF9pbmZvX3N0cnVjdCAgICBpcHN0a19pcF9pbmZvOworfSBkMl9uY2NtbmlfaWZjaGFuZ2VfY25mX3N0cnVjdDsKKworI2VuZGlmIC8vI2lmbmRlZiBfTkNDTU5JX0lGX0gKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvbmRwY19zdHJ1Y3QuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvbmRwY19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDAyMjhjCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9uZHBjX3N0cnVjdC5oCkBAIC0wLDAgKzEsMjU4IEBACisvKiEKKyAqICBAZmlsZSBuZHBjX3N0cnVjdC5oCisgKiAgQGF1dGhvciBSb2dlciBIdWFuZyA8Y2hhb21pbi5oYXVuZ0BtZWRpYXRlay5jb20+CisgKiAgQHZlcnNpb24gMS4wCisgKiAgQHNlY3Rpb24gTElDRU5TRQorICoKKyAqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyAqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorICogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorICogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorICoKKyAqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyAqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorICogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisgKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisgKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyAqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisgKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisgKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyAqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyAqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyAqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisgKgorICogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyAqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyAqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorICogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyAqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyAqCisgKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyAqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyAqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyAqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyAqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyAqCisgKiAgQHNlY3Rpb24gREVTQ1JJUFRJT04KKyAqICBUaGlzIGZpbGUgcHJvdmlkZXMgc3RydWN0dXJlIGRlZmluaXRpb24gb2YgbmRwYyAoIE5EUCBDbGllbnQgKQorICovCisKKyNpZm5kZWYgX05EUENfU1RSVUNUX0gKKyNkZWZpbmUgX05EUENfU1RSVUNUX0gKKworLyohCisgKiAgQGJyaWVmIG5kcGNfY2F1c2VfZSBlbnVtZXJhdGUgcG9zc2libGUgY2F1c2Ugb2YgTkRQIENsaWVudAorICogIEBwYXJhbSBORFBDX0NBVVNFX01JTiAgICAgICAgICAgICAgICAgICBwc2V1ZG8gc3RhdGUKKyAqICBAcGFyYW0gTkRQQ19DQVVTRV9TVUNDRVNTICAgICAgICAgICAgICAgc3VjY2VzcworICogIEBwYXJhbSBORFBDX0NBVVNFX05PX0lOU1RBTkNFICAgICAgICAgICBubyBpbnN0YW5jZSBhdmFpbGFibGUKKyAqICBAcGFyYW0gTkRQQ19DQVVTRV9JTlZBTElEX1BBUkFNRVRFUiAgICAgcGFyYW1ldGVyIGlzIGludmFsaWQKKyAqICBAcGFyYW0gTkRQQ19DQVVTRV9NQVggICAgICAgICAgICAgICAgICAgcHNldWRvIHN0YXRlCisgKi8KK3R5cGVkZWYgZW51bSBfbmRwY19jYXVzZSB7CisgICAgTkRQQ19DQVVTRV9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIE5EUENfQ0FVU0VfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSwKKyAgICBORFBDX0NBVVNFX05PX0lOU1RBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICA9IDIsCisgICAgTkRQQ19DQVVTRV9JTlZBTElEX1BBUkFNRVRFUiAgICAgICAgICAgICAgICAgICAgPSAzLAorICAgIE5EUENfQ0FVU0VfSU5WQUxJRF9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgID0gNCwKKyAgICBORFBDX0NBVVNFX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDUsCit9IG5kcGNfY2F1c2VfZTsKKworCisvKiEKKyAqICBAYnJpZWYgbmRwY19saW5rX2xheWVyX3R5cGVfZSBlbnVtZXJhdGUgcG9zc2libGUgbGluayBsYXllciB0eXBlIG9mCisgKiAgICAgICAgIE5EUCBDbGllbnQKKyAqICBAcGFyYW0gTkRQQ19MSU5LX01JTiAgICAgICAgICAgICAgICAgICAgcHNldWRvIHN0YXRlCisgKiAgQHBhcmFtIE5EUENfTElOS19FVEhFUk5FVCAgICAgICAgICAgICAgIGV0aGVybmV0IHR5cGUKKyAqICBAcGFyYW0gTkRQQ19MSU5LX01BWCAgICAgICAgICAgICAgICAgICAgcHNldWRvIHN0YXRlCisgKi8KK3R5cGVkZWYgZW51bSBfbmRwY19saW5rX2xheWVyX3R5cGUgeworICAgIE5EUENfTElOS19NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICBORFBDX0xJTktfRVRIRVJORVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEsCisgICAgTkRQQ19MSU5LX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAyLAorfSBuZHBjX2xpbmtfbGF5ZXJfdHlwZV9lOworCisKKyNkZWZpbmUgTkRQQ19NQVhfTElOS19BRERSRVNTX1NJWkUgICAgICAgICAgICAgICAgICA4CisvKiEKKyAqICBAYnJpZWYgbmRwY19hY3RpdmFndGVfcmVxX3N0cnVjdCBkZXNjcmliZSBhY3RpdmF0ZSByZXF1ZXN0IGluZm9ybWF0aW9uCisgKiAgICAgICAgIG9mIE5EUCBDbGllbnQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX25kcGNfYWN0aXZhdGVfcmVxX3N0cnVjdCB7CisgICAgLyohCisgICAgICogIEBicmllZiBJTE0gbG9jYWwgcGFyYW1ldGVyIGhlYWRlcgorICAgICAqLworICAgIExPQ0FMX1BBUkFfSERSCisgICAgLyohCisgICAgICogIEBicmllZiBpcCBpbnN0YW5jZSBpZGVudGlmaWVyCisgICAgICovCisgICAga2FsX3VpbnQ4ICAgICAgIGlwX2lkOworICAgIC8qIQorICAgICAqICBAYnJpZWYgbGluayBsYXllciB0eXBlCisgICAgICovCisgICAgbmRwY19saW5rX2xheWVyX3R5cGVfZSAgICAgIGxpbmtfbGF5ZXJfdHlwZTsKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIGxpbmsgbGF5ZXIgYWRkcmVzcworICAgICAqLworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBsaW5rX2xheWVyX2FkZHJlc3NbTkRQQ19NQVhfTElOS19BRERSRVNTX1NJWkVdOworfSBuZHBjX2FjdGl2YXRlX3JlcV9zdHJ1Y3Q7CisKKworLyohCisgKiAgQGJyaWVmIG5kcGNfYWN0aXZhdGVfcnNwX3N0cnVjdCBkZXNjcmliZSBhY3RpdmF0ZSByZXNwb25zZSBpbmZvcm1hdGlvbgorICogICAgICAgICBvZiBORFAgQ2xpZW50CisgKi8KK3R5cGVkZWYgc3RydWN0IF9uZHBjX2FjdGl2YXRlX3JzcF9zdHJ1Y3QgeworICAgIC8qIQorICAgICAqICBAYnJpZWYgSUxNIGxvY2FsIHBhcmFtZXRlciBoZWFkZXIKKyAgICAgKi8KKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIC8qIQorICAgICAqICBAYnJpZWYgaXAgaW5zdGFuY2UgaWRlbnRpZmllcgorICAgICAqLworICAgIGthbF91aW50OCAgICAgICBpcF9pZDsKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIE5EUCBDbGllbnQgaW5zdGFuY2UgaWRlbnRpZmllcgorICAgICAqLworICAgIGthbF91aW50OCAgICAgICBuZHBfaWQ7CisgICAgLyohCisgICAgICogIEBicmllZiByZXNwb25zZSBjYXVzZQorICAgICAqLworICAgIG5kcGNfY2F1c2VfZSAgICBjYXVzZTsKK30gbmRwY19hY3RpdmF0ZV9yc3Bfc3RydWN0OworCisKKy8qIQorICogIEBicmllZiBuZHBjX2RlYWN0aXZhdGVfcmVxX3N0cnVjdCBkZXNjcmliZSBkZWFjdGl2YXRlIHJlcXVlc3QgaW5mb3JtYXRpb24KKyAqICAgICAgICAgb2YgTkRQIENsaWVudAorICovCit0eXBlZGVmIHN0cnVjdCBfbmRwY19kZWFjdGl2YXRlX3JlcV9zdHJ1Y3QgeworICAgIC8qIQorICAgICAqICBAYnJpZWYgSUxNIGxvY2FsIHBhcmFtZXRlciBoZWFkZXIKKyAgICAgKi8KKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIC8qIQorICAgICAqICBAYnJpZWYgaXAgaW5zdGFuY2UgaWRlbnRpZmllcgorICAgICAqLworICAgIGthbF91aW50OCAgICAgICBpcF9pZDsKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIE5EUCBDbGllbnQgaW5zdGFuY2UgaWRlbnRpZmllcgorICAgICAqLworICAgIGthbF91aW50OCAgICAgICBuZHBfaWQ7Cit9IG5kcGNfZGVhY3RpdmF0ZV9yZXFfc3RydWN0OworCisKKy8qIQorICogIEBicmllZiBuZHBjX2RlYWN0aXZhdGVfcnNwX3N0cnVjdCBkZXNjcmliZSBkZWFjdGl2YXRlIHJlc3BvbnNlIGluZm9ybWF0aW9uCisgKiAgICAgICAgIG9mIE5EUCBDbGllbnQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX25kcGNfZGVhY3RpdmF0ZV9yc3Bfc3RydWN0IHsKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIElMTSBsb2NhbCBwYXJhbWV0ZXIgaGVhZGVyCisgICAgICovCisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIGlwIGluc3RhbmNlIGlkZW50aWZpZXIKKyAgICAgKi8KKyAgICBrYWxfdWludDggICAgICAgaXBfaWQ7CisgICAgLyohCisgICAgICogIEBicmllZiBORFAgQ2xpZW50IGluc3RhbmNlIGlkZW50aWZpZXIKKyAgICAgKi8KKyAgICBrYWxfdWludDggICAgICAgbmRwX2lkOworICAgIC8qIQorICAgICAqICBAYnJpZWYgcmVzcG9uc2UgY2F1c2UKKyAgICAgKi8KKyAgICBuZHBjX2NhdXNlX2UgICAgY2F1c2U7Cit9IG5kcGNfZGVhY3RpdmF0ZV9yc3Bfc3RydWN0OworCisKKy8qIQorICogIEBicmllZiBuZHBjX3BhY2tldF9yZXFfc3RydWN0IGRlc2NyaWJlIHBhY2tldCByZXF1ZXN0IGluZm9ybWF0aW9uCisgKiAgICAgICAgIG9mIE5EUCBDbGllbnQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX25kcGNfcGFja2V0X3JlcV9zdHJ1Y3QgeworICAgIC8qIQorICAgICAqICBAYnJpZWYgSUxNIGxvY2FsIHBhcmFtZXRlciBoZWFkZXIKKyAgICAgKi8KKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIC8qIQorICAgICAqICBAYnJpZWYgaXAgaW5zdGFuY2UgaWRlbnRpZmllcgorICAgICAqLworICAgIGthbF91aW50OCAgICAgICBpcF9pZDsKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIE5EUCBDbGllbnQgaW5zdGFuY2UgaWRlbnRpZmllcgorICAgICAqLworICAgIGthbF91aW50OCAgICAgICBuZHBfaWQ7CisgICAgLyohCisgICAgICogIEBicmllZiByZXF1ZXN0IGdwZCBwYWNrZXQgYnVmZmVyCisgICAgICovCisgICAgdm9pZCogICAgICAgICAgIGdwZDsKK30gbmRwY19wYWNrZXRfcmVxX3N0cnVjdDsKKworCisvKiEKKyAqICBAYnJpZWYgbmRwY19wYWNrZXRfaW5kX3N0cnVjdCBkZXNjcmliZSBwYWNrZXQgaW5kaWNhdGUgaW5mb3JtYXRpb24KKyAqICAgICAgICAgb2YgTkRQIENsaWVudAorICovCit0eXBlZGVmIHN0cnVjdCBfbmRwY19wYWNrZXRfaW5kX3N0cnVjdCB7CisgICAgLyohCisgICAgICogIEBicmllZiBJTE0gbG9jYWwgcGFyYW1ldGVyIGhlYWRlcgorICAgICAqLworICAgIExPQ0FMX1BBUkFfSERSCisgICAgLyohCisgICAgICogIEBicmllZiBpcCBpbnN0YW5jZSBpZGVudGlmaWVyCisgICAgICovCisgICAga2FsX3VpbnQ4ICAgICAgIGlwX2lkOworICAgIC8qIQorICAgICAqICBAYnJpZWYgTkRQIENsaWVudCBpbnN0YW5jZSBpZGVudGlmaWVyCisgICAgICovCisgICAga2FsX3VpbnQ4ICAgICAgIG5kcF9pZDsKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIGluZGljYXRlIGdwZCBwYWNrZXQgYnVmZmVyCisgICAgICovCisgICAgdm9pZCogICAgICAgICAgIGdwZDsKK30gbmRwY19wYWNrZXRfaW5kX3N0cnVjdDsKKworCisvKiEKKyAqICBAYnJpZWYgbmRwY19pcF91cF9pbmRfc3RydWN0IGRlc2NyaWJlIGlwIHVwIGluZGljYXRlIGluZm9ybWF0aW9uCisgKiAgICAgICAgIG9mIE5EUCBDbGllbnQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX25kcGNfaXBfdXBfaW5kX3N0cnVjdCB7CisgICAgLyohCisgICAgICogIEBicmllZiBJTE0gbG9jYWwgcGFyYW1ldGVyIGhlYWRlcgorICAgICAqLworICAgIExPQ0FMX1BBUkFfSERSCisgICAgLyohCisgICAgICogIEBicmllZiBpcCBpbnN0YW5jZSBpZGVudGlmaWVyCisgICAgICovCisgICAga2FsX3VpbnQ4ICAgICAgIGlwX2lkOworICAgIC8qIQorICAgICAqICBAYnJpZWYgTkRQIENsaWVudCBpbnN0YW5jZSBpZGVudGlmaWVyCisgICAgICovCisgICAga2FsX3VpbnQ4ICAgICAgIG5kcF9pZDsKK30gbmRwY19pcF91cF9pbmRfc3RydWN0OworCisKKy8qIQorICogIEBicmllZiBuZHBjX2lwX2Rvd25faW5kX3N0cnVjdCBkZXNjcmliZSBpcCBkb3duIGluZGljYXRlIGluZm9ybWF0aW9uCisgKiAgICAgICAgIG9mIE5EUCBDbGllbnQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX25kcGNfaXBfZG93bl9pbmRfc3RydWN0IHsKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIElMTSBsb2NhbCBwYXJhbWV0ZXIgaGVhZGVyCisgICAgICovCisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICAvKiEKKyAgICAgKiAgQGJyaWVmIGlwIGluc3RhbmNlIGlkZW50aWZpZXIKKyAgICAgKi8KKyAgICBrYWxfdWludDggICAgICAgaXBfaWQ7CisgICAgLyohCisgICAgICogIEBicmllZiBORFAgQ2xpZW50IGluc3RhbmNlIGlkZW50aWZpZXIKKyAgICAgKi8KKyAgICBrYWxfdWludDggICAgICAgbmRwX2lkOworfSBuZHBjX2lwX2Rvd25faW5kX3N0cnVjdDsKKworCisjZW5kaWYgIC8vIF9ORFBDX1NUUlVDVF9ICisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvbm11LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL25tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MmE0ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL25tdS5oCkBAIC0wLDAgKzEsMTc3IEBACisvKiEKKyAqICBAZmlsZSBubXUuaAorICogIEBhdXRob3IgUm9nZXIgSHVhbmcgPGNoYW9taW4uaGF1bmdAbWVkaWF0ZWsuY29tPgorICogIEB2ZXJzaW9uIDEuMAorICogIEBzZWN0aW9uIExJQ0VOU0UKKyAqCisgKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisgKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyAqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyAqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyAqCisgKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisgKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyAqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorICogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorICogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisgKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorICogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisgKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisgKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisgKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorICoKKyAqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisgKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisgKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyAqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisgKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisgKgorICogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisgKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisgKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisgKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisgKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisgKgorICogIEBzZWN0aW9uIERFU0NSSVBUSU9OCisgKiAgVGhpcyBmaWxlIHByb3ZpZGVzIGludGVyZmFjZSBvZiBubXUgKCBuZXR3b3JrIG1hbmFnZW1lbnQgdW5pdCApCisgKi8KKworI2lmbmRlZiBfTk1VX0gKKyNkZWZpbmUgX05NVV9ICisKKyNkZWZpbmUgREVDTEFSRV9OTVVfRVRIX0VOVU0oX3ByZWZpeCkgXAorICAgIE5NVV8gIyMgX3ByZWZpeCAjIyBfVVAsIFwKKyAgICBOTVVfICMjIF9wcmVmaXggIyMgX0hPU1RfTUFDLCBcCisgICAgTk1VXyAjIyBfcHJlZml4ICMjIF9HQVRFV0FZX01BQywgXAorICAgIE5NVV8gIyMgX3ByZWZpeCAjIyBfVFhfUEtUX0NOVCwgXAorICAgIE5NVV8gIyMgX3ByZWZpeCAjIyBfUlhfUEtUX0NOVCwgXAorICAgIE5NVV8gIyMgX3ByZWZpeCAjIyBfVFhfQllURV9DTlQsIFwKKyAgICBOTVVfICMjIF9wcmVmaXggIyMgX1JYX0JZVEVfQ05ULCBcCisgICAgTk1VXyAjIyBfcHJlZml4ICMjIF9UWF9FUlJPUl9QS1RfQ05ULCBcCisgICAgTk1VXyAjIyBfcHJlZml4ICMjIF9SWF9FUlJPUl9QS1RfQ05ULCBcCisgICAgTk1VXyAjIyBfcHJlZml4ICMjIF9UWF9EUk9QX1BLVF9DTlQsIFwKKyAgICBOTVVfICMjIF9wcmVmaXggIyMgX1JYX0RST1BfUEtUX0NOVCwgXAorICAgIE5NVV8gIyMgX3ByZWZpeCAjIyBfUlhfRlJBTUVfQUxJR05fRVJST1JfQ05ULAorCisjZGVmaW5lIERFQ0xBUkVfTk1VX0lQX0VOVU0oX3ByZWZpeCkgXAorICAgIE5NVV8gIyMgX3ByZWZpeCAjIyBfVVAsIFwKKyAgICBOTVVfICMjIF9wcmVmaXggIyMgX0FERFIsIFwKKyAgICBOTVVfICMjIF9wcmVmaXggIyMgX01BU0ssIFwKKyAgICBOTVVfICMjIF9wcmVmaXggIyMgX0dBVEVXQVksIFwKKyAgICBOTVVfICMjIF9wcmVmaXggIyMgX01UVV9TSVpFLCBcCisgICAgTk1VXyAjIyBfcHJlZml4ICMjIF9ETlNfTlVNLCBcCisgICAgTk1VXyAjIyBfcHJlZml4ICMjIF9ETlMxLCBcCisgICAgTk1VXyAjIyBfcHJlZml4ICMjIF9ETlMyLCBcCisgICAgTk1VXyAjIyBfcHJlZml4ICMjIF9JUDZfVVAsIFwKKyAgICBOTVVfICMjIF9wcmVmaXggIyMgX0lQNl9QUkVGSVgsIFwKKyAgICBOTVVfICMjIF9wcmVmaXggIyMgX0lQNl9QUkVGSVhfTEVOLCBcCisgICAgTk1VXyAjIyBfcHJlZml4ICMjIF9JUDZfSUlELCBcCisgICAgTk1VXyAjIyBfcHJlZml4ICMjIF9JUDZfSUlEX0xFTiwgXAorICAgIE5NVV8gIyMgX3ByZWZpeCAjIyBfSVA2X01UVV9TSVpFLCBcCisgICAgTk1VXyAjIyBfcHJlZml4ICMjIF9JUDZfRE5TX05VTSwgXAorICAgIE5NVV8gIyMgX3ByZWZpeCAjIyBfSVA2X0ROUzEsIFwKKyAgICBOTVVfICMjIF9wcmVmaXggIyMgX0lQNl9ETlMyLAorCisvKiEKKyAqICBAYnJpZWYgbm11X2VudHJ5X2UgZW51bWJlcmF0ZSBhbGwgaW5mb3JtYXRpb24gZW50cnkgc3VwcG9ydCBpbiBubXUKKyAqLwordHlwZWRlZiBlbnVtIF9ubXVfZW50cnlfZSB7CisgICAgTk1VX01UVV9TSVpFLCAgICAgICAgICAgLyogTWF4aW1hbCB0cmFuc21pc3Npb24gdW5pdCBpbiBieXRlcy4gIkRvd25saW5rID0gaG9zdCBSeCA9IGRldmljZSBUeCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IHZhbHVlIGlzIDkwMDAuIE9yaWdpbmFsIHZhbHVlIGlzIDE1MDAuICovCisgICAgTk1VX01SVV9TSVpFLCAgICAgICAgICAgLyogTWF4aW1hbCByZWNlaXZlIHVuaXQgaW4gYnl0ZXMuICJVcGxpbmsgPSBob3N0IFR4ID0gZGV2aWNlIFJ4IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgMTUwMC4gKi8KKyAgICBOTVVfVUxfU1BFRUQsICAgICAgICAgICAvKiBVcGxpbmsgc3BlZWQgaW4gdW5pdCBvZiBicHMuICovCisgICAgTk1VX0RMX1NQRUVELCAgICAgICAgICAgLyogRG93bmxpbmsgc3BlZWQgaW4gdW5pdCBvZiBicHMuICovCisKKyAgICBERUNMQVJFX05NVV9FVEhfRU5VTShFVEgwKQorICAgIERFQ0xBUkVfTk1VX0VUSF9FTlVNKEVUSDEpCisgICAgREVDTEFSRV9OTVVfRVRIX0VOVU0oRVRIMikKKyAgICBERUNMQVJFX05NVV9FVEhfRU5VTShFVEgzKQorICAgIERFQ0xBUkVfTk1VX0VUSF9FTlVNKEVUSDQpCisgICAgREVDTEFSRV9OTVVfRVRIX0VOVU0oRVRINSkKKyAgICBERUNMQVJFX05NVV9FVEhfRU5VTShFVEg2KQorICAgIERFQ0xBUkVfTk1VX0VUSF9FTlVNKEVUSDcpCisgICAgREVDTEFSRV9OTVVfRVRIX0VOVU0oRVRIOCkKKyAgICBERUNMQVJFX05NVV9FVEhfRU5VTShFVEg5KQorICAgIERFQ0xBUkVfTk1VX0VUSF9FTlVNKEVUSDEwKQorICAgIERFQ0xBUkVfTk1VX0VUSF9FTlVNKEVUSDExKQorICAgIERFQ0xBUkVfTk1VX0VUSF9FTlVNKEVUSDEyKQorICAgIERFQ0xBUkVfTk1VX0VUSF9FTlVNKEVUSDEzKQorICAgIERFQ0xBUkVfTk1VX0VUSF9FTlVNKEVUSDE0KQorICAgIERFQ0xBUkVfTk1VX0VUSF9FTlVNKEVUSDE1KQorCisgICAgREVDTEFSRV9OTVVfSVBfRU5VTShJUDApCisgICAgREVDTEFSRV9OTVVfSVBfRU5VTShJUDEpCisgICAgREVDTEFSRV9OTVVfSVBfRU5VTShJUDIpCisgICAgREVDTEFSRV9OTVVfSVBfRU5VTShJUDMpCisgICAgREVDTEFSRV9OTVVfSVBfRU5VTShJUDQpCisgICAgREVDTEFSRV9OTVVfSVBfRU5VTShJUDUpCisgICAgREVDTEFSRV9OTVVfSVBfRU5VTShJUDYpCisgICAgREVDTEFSRV9OTVVfSVBfRU5VTShJUDcpCisgICAgREVDTEFSRV9OTVVfSVBfRU5VTShJUDgpCisgICAgREVDTEFSRV9OTVVfSVBfRU5VTShJUDkpCisgICAgREVDTEFSRV9OTVVfSVBfRU5VTShJUDEwKQorICAgIERFQ0xBUkVfTk1VX0lQX0VOVU0oSVAxMSkKKyAgICBERUNMQVJFX05NVV9JUF9FTlVNKElQMTIpCisgICAgREVDTEFSRV9OTVVfSVBfRU5VTShJUDEzKQorICAgIERFQ0xBUkVfTk1VX0lQX0VOVU0oSVAxNCkKKyAgICBERUNMQVJFX05NVV9JUF9FTlVNKElQMTUpCisKKyAgICAvKiBhbHdheXMgYmUgdGhlIGxhc3QgbGluZSAqLworICAgIE5NVV9NQVhfRU5UUlksCit9IG5tdV9lbnRyeV9lOworCit0eXBlZGVmIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBubXVfZXRoX2FkZHJfdFs2XTsKK3R5cGVkZWYga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgIG5tdV9pbl9hZGRyX3Q7Cit0eXBlZGVmIGthbF91aW50MzIgICAgICAgICAgICAgICAgICBubXVfaW42X2FkZHJfdFs0XTsKK3R5cGVkZWYga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIG5tdV9zdGF0dXNfdDsKK3R5cGVkZWYga2FsX3VpbnQ2NCAgICAgICAgICAgICAgICAgIG5tdV9zdGF0X3Q7CisKKy8qIQorICogIEBicmllZiBubXVfbnZyYW1fdGFibGVfdCBpcyBhIGNvbGxlY3Rpb24gb2YgbmV0d29yayBpbmZvcm1hdGlvbiBzdG9yZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gbnZyYW0KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX25tdV9udnJhbV90YWJsZSB7CisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgY29tcGlsZXJfcmVzdjsKKyAgICBubXVfZXRoX2FkZHJfdCAgICAgICAgICBldGgwX2hvc3RfbWFjOworCit9IG5tdV9udnJhbV90YWJsZV90OworCisvKiEKKyAqICBAYnJpZWYgIG5tdSBpbml0IGZ1bmN0aW9uCisgKi8KK3ZvaWQgbm11X2luaXQodm9pZCk7CisKKworLyohCisgKiAgQGJyaWVmICB3cml0ZSBlbnRyeSB2YWx1ZSB0byBubXUKKyAqICBAcGFyYW0gIGVudHJ5IGVudHJ5IGVudW0gdmFsdWUKKyAqICBAcGFyYW0gIGxlbiAgIHRoZSBsZW5ndGggdG8gd3JpdGUKKyAqICBAcGFyYW0gIGRhdGEgIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgZW50cnkgZGF0YQorICogIEByZXR1cm4gS0FMX1RSVUUgaWYgc3VjY2VzcywgS0FMX0ZBTFNFIGlmIGVudHJ5IG5vdCBleGlzdCwgb3IgUmVhZCBPbmx5CisgKiAgICAgICAgICBhdHRyaWJ1dGUgaXMgc2V0CisgKi8KK2thbF9ib29sIG5tdV9zZXRfcHJvcGVydHkobm11X2VudHJ5X2UgZW50cnksIGthbF91aW50MzIgbGVuLCB2b2lkKiBkYXRhKTsKKworCisvKiEKKyAqICBAYnJpZWYgIHJlYWQgZW50cnkgdmFsdWUgZnJvbSBubXUKKyAqICBAcGFyYW0gIGVudHJ5IGVudHJ5IGVudW0gdmFsdWUKKyAqICBAcGFyYW0gIGxlbiAgIHRoZSBsZW5ndGggdG8gcmVhZAorICogIEBwYXJhbSAgZGF0YSAgcG9pbnRlciB0byB0aGUgc3RhcnQgYWRkcmVzcyBvZiBlbnRyeSBkYXRhCisgKiAgQHJldHVybiBLQUxfVFJVRSBpZiBzdWNjZXNzLCBLQUxfRkFMU0UgaWYgZW50cnkgbm90IGV4aXN0LCBvcgorICogICAgICAgICAgZGF0YSBidWZmZXIgaXMgbm90IGJpZyBlbm91Z2gKKyAqLwora2FsX2Jvb2wgbm11X2dldF9wcm9wZXJ0eShubXVfZW50cnlfZSBlbnRyeSwga2FsX3VpbnQzMiBsZW4sIHZvaWQqIGRhdGEpOworCisKKy8qIQorICogIEBicmllZiAgY2xlYW4gYWxsIGVudHJ5IHZhbHVlCisgKi8KK3ZvaWQgbm11X2NsZWFuX2RiKHZvaWQpOworCisKKyNlbmRpZiAgLy8gX05NVV9ICisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvbm11X3V0aWwuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvbm11X3V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjgwOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9ubXVfdXRpbC5oCkBAIC0wLDAgKzEsNTgyIEBACisvKiEKKyAqICBAZmlsZSBubXVfdXRpbC5oCisgKiAgQGF1dGhvciBSb2dlciBIdWFuZyA8Y2hhb21pbi5oYXVuZ0BtZWRpYXRlay5jb20+CisgKiAgQHZlcnNpb24gMS4wCisgKiAgQHNlY3Rpb24gTElDRU5TRQorICoKKyAqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyAqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorICogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorICogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorICoKKyAqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyAqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorICogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisgKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisgKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyAqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisgKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisgKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyAqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyAqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyAqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisgKgorICogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyAqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyAqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorICogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyAqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyAqCisgKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyAqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyAqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyAqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyAqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyAqCisgKiAgQHNlY3Rpb24gREVTQ1JJUFRJT04KKyAqICBUaGlzIGZpbGUgcHJvdmlkZXMgdXRpbGl0eSBpbnRlcmZhY2Ugb2Ygbm11ICggbmV0d29yayBtYW5hZ2VtZW50IHVuaXQgKQorICovCisKKyNpZm5kZWYgX05NVV9VVElMX0gKKyNkZWZpbmUgX05NVV9VVElMX0gKKworI2luY2x1ZGUgIm5tdS5oIgorCisKKy8qIQorICogIEBicmllZiAgc2V0IGV0aGVybmV0IGludGVyZmFjZSB1cAorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICovCit2b2lkIG5tdV9zZXRfZXRoX3VwKGthbF91aW50OCBldGhfaWQpOworCisKKy8qCisgKiAgQGJyaWVmICBzZXQgZXRoZXJuZXQgaW50ZXJmYWNlIGRvd24KKyAqICBAcGFyYW0gIGV0aF9pZCBldGhlcm5ldCBpbnRlcmZhY2UgaWQKKyAqLwordm9pZCBubXVfc2V0X2V0aF9kb3duKGthbF91aW50OCBldGhfaWQpOworCisKKy8qCisgKiAgQGJyaWVmICBjaGVjayBpZiBldGhlcm5ldCBpbnRlcmZhY2UgaXMgdXAgb3Igbm90CisgKiAgQHBhcmFtICBldGhfaWQgZXRoZXJuZXQgaW50ZXJmYWNlIGlkCisgKiAgQHJldHVybiBLQUxfVFJVRSBpZiBldGhlcm5ldCBpbnRlcmZhY2UgaXMgdXAsIEtBTF9GQUxTRSBpZiBpdCdzIGRvd24KKyAqICAgICAgICAgIGF0dHJpYnV0ZSBpcyBzZXQKKyAqLwora2FsX2Jvb2wgbm11X2NoZWNrX2V0aF91cChrYWxfdWludDggZXRoX2lkKTsKKworCisvKgorICogIEBicmllZiAgc2V0IGhvc3QgbWFjIGFkZHJlc3Mgb2YgZXRoZXJuZXQgaW50ZXJmYWNlCisgKiAgQHBhcmFtICBldGhfaWQgZXRoZXJuZXQgaW50ZXJmYWNlIGlkCisgKiAgQHBhcmFtICBtYWNfYWRkcmVzcyBtYWMgYWRkcmVzcyB0byBiZSB3cml0dGVuCisgKi8KK3ZvaWQgbm11X3NldF9ob3N0X21hYyhrYWxfdWludDggZXRoX2lkLCB2b2lkKiBtYWNfYWRkcmVzcyk7CisKKworLyoKKyAqICBAYnJpZWYgIGdldCBob3N0IG1hYyBhZGRyZXNzIG9mIGV0aGVybmV0IGludGVyZmFjZQorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICogIEBwYXJhbSAgbWFjX2FkZHJlc3MgbWFjIGFkZHJlc3MgdG8gYmUgcmVhZAorICovCit2b2lkIG5tdV9nZXRfaG9zdF9tYWMoa2FsX3VpbnQ4IGV0aF9pZCwgdm9pZCogbWFjX2FkZHJlc3MpOworCisKKy8qCisgKiAgQGJyaWVmICBzZXQgZ2F0ZXdheSBtYWMgYWRkcmVzcyBvZiBldGhlcm5ldCBpbnRlcmZhY2UKKyAqICBAcGFyYW0gIGV0aF9pZCBldGhlcm5ldCBpbnRlcmZhY2UgaWQKKyAqICBAcGFyYW0gIG1hY19hZGRyZXNzIG1hYyBhZGRyZXNzIHRvIGJlIHdyaXR0ZW4KKyAqLwordm9pZCBubXVfc2V0X2dhdGV3YXlfbWFjKGthbF91aW50OCBldGhfaWQsIHZvaWQqIG1hY19hZGRyZXNzKTsKKworCisvKgorICogIEBicmllZiAgZ2V0IGdhdGV3YXkgbWFjIGFkZHJlc3Mgb2YgZXRoZXJuZXQgaW50ZXJmYWNlCisgKiAgQHBhcmFtICBldGhfaWQgZXRoZXJuZXQgaW50ZXJmYWNlIGlkCisgKiAgQHBhcmFtICBtYWNfYWRkcmVzcyBtYWMgYWRkcmVzcyB0byBiZSByZWFkCisgKi8KK3ZvaWQgbm11X2dldF9nYXRld2F5X21hYyhrYWxfdWludDggZXRoX2lkLCB2b2lkKiBtYWNfYWRkcmVzcyk7CisKKworLyoKKyAqICBAYnJpZWYgIHNldCB0cmFuc21pdCBwYWNrZXQgY291bnRzIG9mIGV0aGVybmV0IGludGVyZmFjZQorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICogIEBwYXJhbSAgdmFsdWUgdmFsdWUgdG8gYmUgd3JpdHRlbgorICovCit2b2lkIG5tdV9zZXRfZXRoX3R4X3BrdF9jbnQoa2FsX3VpbnQ4IGV0aF9pZCwgbm11X3N0YXRfdCB2YWx1ZSk7CisKKworLyoKKyAqICBAYnJpZWYgIGFkZCB0cmFuc21pdCBwYWNrZXQgY291bnRzIG9mIGV0aGVybmV0IGludGVyZmFjZQorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICogIEBwYXJhbSAgdmFsdWUgdmFsdWUgdG8gYmUgYWRkZWQKKyAqLwordm9pZCBubXVfYWRkX2V0aF90eF9wa3RfY250KGthbF91aW50OCBldGhfaWQsIG5tdV9zdGF0X3QgdmFsdWUpOworCisKKy8qCisgKiAgQGJyaWVmICBnZXQgdHJhbnNtaXQgcGFja2V0IGNvdW50cyBvZiBldGhlcm5ldCBpbnRlcmZhY2UKKyAqICBAcGFyYW0gIGV0aF9pZCBldGhlcm5ldCBpbnRlcmZhY2UgaWQKKyAqICBAcGFyYW0gIHZhbHVlIHZhbHVlIHRvIGJlIHJlYWQKKyAqLwordm9pZCBubXVfZ2V0X2V0aF90eF9wa3RfY250KGthbF91aW50OCBldGhfaWQsIG5tdV9zdGF0X3QqIHZhbHVlKTsKKworCisvKgorICogIEBicmllZiAgc2V0IHJlY2VpdmUgcGFja2V0IGNvdW50cyBvZiBldGhlcm5ldCBpbnRlcmZhY2UKKyAqICBAcGFyYW0gIGV0aF9pZCBldGhlcm5ldCBpbnRlcmZhY2UgaWQKKyAqICBAcGFyYW0gIHZhbHVlIHZhbHVlIHRvIGJlIHdyaXR0ZW4KKyAqLwordm9pZCBubXVfc2V0X2V0aF9yeF9wa3RfY250KGthbF91aW50OCBldGhfaWQsIG5tdV9zdGF0X3QgdmFsdWUpOworCisKKy8qCisgKiAgQGJyaWVmICBhZGQgcmVjZWl2ZSBwYWNrZXQgY291bnRzIG9mIGV0aGVybmV0IGludGVyZmFjZQorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICogIEBwYXJhbSAgdmFsdWUgdmFsdWUgdG8gYmUgYWRkZWQKKyAqLwordm9pZCBubXVfYWRkX2V0aF9yeF9wa3RfY250KGthbF91aW50OCBldGhfaWQsIG5tdV9zdGF0X3QgdmFsdWUpOworCisKKy8qCisgKiAgQGJyaWVmICBnZXQgcmVjZWl2ZSBwYWNrZXQgY291bnRzIG9mIGV0aGVybmV0IGludGVyZmFjZQorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICogIEBwYXJhbSAgdmFsdWUgdmFsdWUgdG8gYmUgcmVhZAorICovCit2b2lkIG5tdV9nZXRfZXRoX3J4X3BrdF9jbnQoa2FsX3VpbnQ4IGV0aF9pZCwgbm11X3N0YXRfdCogdmFsdWUpOworCisKKy8qCisgKiAgQGJyaWVmICBzZXQgdHJhbnNtaXQgcGFja2V0IGJ5dGVzIG9mIGV0aGVybmV0IGludGVyZmFjZQorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICogIEBwYXJhbSAgdmFsdWUgdmFsdWUgdG8gYmUgd3JpdHRlbgorICovCit2b2lkIG5tdV9zZXRfZXRoX3R4X2J5dGVfY250KGthbF91aW50OCBldGhfaWQsIG5tdV9zdGF0X3QgdmFsdWUpOworCisKKy8qCisgKiAgQGJyaWVmICBhZGQgdHJhbnNtaXQgcGFja2V0IGJ5dGVzIG9mIGV0aGVybmV0IGludGVyZmFjZQorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICogIEBwYXJhbSAgdmFsdWUgdmFsdWUgdG8gYmUgYWRkZWQKKyAqLwordm9pZCBubXVfYWRkX2V0aF90eF9ieXRlX2NudChrYWxfdWludDggZXRoX2lkLCBubXVfc3RhdF90IHZhbHVlKTsKKworCisvKgorICogIEBicmllZiAgZ2V0IHRyYW5zbWl0IHBhY2tldCBieXRlcyBvZiBldGhlcm5ldCBpbnRlcmZhY2UKKyAqICBAcGFyYW0gIGV0aF9pZCBldGhlcm5ldCBpbnRlcmZhY2UgaWQKKyAqICBAcGFyYW0gIHZhbHVlIHZhbHVlIHRvIGJlIHJlYWQKKyAqLwordm9pZCBubXVfZ2V0X2V0aF90eF9ieXRlX2NudChrYWxfdWludDggZXRoX2lkLCBubXVfc3RhdF90KiB2YWx1ZSk7CisKKworLyoKKyAqICBAYnJpZWYgIHNldCByZWNlaXZlIHBhY2tldCBieXRlcyBvZiBldGhlcm5ldCBpbnRlcmZhY2UKKyAqICBAcGFyYW0gIGV0aF9pZCBldGhlcm5ldCBpbnRlcmZhY2UgaWQKKyAqICBAcGFyYW0gIHZhbHVlIHZhbHVlIHRvIGJlIHdyaXR0ZW4KKyAqLwordm9pZCBubXVfc2V0X2V0aF9yeF9ieXRlX2NudChrYWxfdWludDggZXRoX2lkLCBubXVfc3RhdF90IHZhbHVlKTsKKworCisvKgorICogIEBicmllZiAgYWRkIHJlY2VpdmUgcGFja2V0IGJ5dGVzIG9mIGV0aGVybmV0IGludGVyZmFjZQorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICogIEBwYXJhbSAgdmFsdWUgdmFsdWUgdG8gYmUgYWRkZWQKKyAqLwordm9pZCBubXVfYWRkX2V0aF9yeF9ieXRlX2NudChrYWxfdWludDggZXRoX2lkLCBubXVfc3RhdF90IHZhbHVlKTsKKworCisvKgorICogIEBicmllZiAgZ2V0IHJlY2VpdmUgcGFja2V0IGJ5dGVzIG9mIGV0aGVybmV0IGludGVyZmFjZQorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICogIEBwYXJhbSAgdmFsdWUgdmFsdWUgdG8gYmUgcmVhZAorICovCit2b2lkIG5tdV9nZXRfZXRoX3J4X2J5dGVfY250KGthbF91aW50OCBldGhfaWQsIG5tdV9zdGF0X3QqIHZhbHVlKTsKKworCisvKgorICogIEBicmllZiAgc2V0IHJlY2VpdmUgcGFja2V0IGJ5dGVzIG9mIGV0aGVybmV0IGludGVyZmFjZQorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICogIEBwYXJhbSAgdmFsdWUgdmFsdWUgdG8gYmUgd3JpdHRlbgorICovCit2b2lkIG5tdV9zZXRfZXRoX3R4X2Vycm9yX3BrdF9jbnQoa2FsX3VpbnQ4IGV0aF9pZCwgbm11X3N0YXRfdCB2YWx1ZSk7CisKKworLyoKKyAqICBAYnJpZWYgIGFkZCByZWNlaXZlIHBhY2tldCBieXRlcyBvZiBldGhlcm5ldCBpbnRlcmZhY2UKKyAqICBAcGFyYW0gIGV0aF9pZCBldGhlcm5ldCBpbnRlcmZhY2UgaWQKKyAqICBAcGFyYW0gIHZhbHVlIHZhbHVlIHRvIGJlIGFkZGVkCisgKi8KK3ZvaWQgbm11X2FkZF9ldGhfdHhfZXJyb3JfcGt0X2NudChrYWxfdWludDggZXRoX2lkLCBubXVfc3RhdF90IHZhbHVlKTsKKworCisvKgorICogIEBicmllZiAgZ2V0IHJlY2VpdmUgcGFja2V0IGJ5dGVzIG9mIGV0aGVybmV0IGludGVyZmFjZQorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICogIEBwYXJhbSAgdmFsdWUgdmFsdWUgdG8gYmUgcmVhZAorICovCit2b2lkIG5tdV9nZXRfZXRoX3R4X2Vycm9yX3BrdF9jbnQoa2FsX3VpbnQ4IGV0aF9pZCwgbm11X3N0YXRfdCogdmFsdWUpOworCisKKy8qCisgKiAgQGJyaWVmICBzZXQgcmVjZWl2ZSBwYWNrZXQgYnl0ZXMgb2YgZXRoZXJuZXQgaW50ZXJmYWNlCisgKiAgQHBhcmFtICBldGhfaWQgZXRoZXJuZXQgaW50ZXJmYWNlIGlkCisgKiAgQHBhcmFtICB2YWx1ZSB2YWx1ZSB0byBiZSB3cml0dGVuCisgKi8KK3ZvaWQgbm11X3NldF9ldGhfcnhfZXJyb3JfcGt0X2NudChrYWxfdWludDggZXRoX2lkLCBubXVfc3RhdF90IHZhbHVlKTsKKworCisvKgorICogIEBicmllZiAgYWRkIHJlY2VpdmUgcGFja2V0IGJ5dGVzIG9mIGV0aGVybmV0IGludGVyZmFjZQorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICogIEBwYXJhbSAgdmFsdWUgdmFsdWUgdG8gYmUgYWRkZWQKKyAqLwordm9pZCBubXVfYWRkX2V0aF9yeF9lcnJvcl9wa3RfY250KGthbF91aW50OCBldGhfaWQsIG5tdV9zdGF0X3QgdmFsdWUpOworCisKKy8qCisgKiAgQGJyaWVmICBnZXQgcmVjZWl2ZSBwYWNrZXQgYnl0ZXMgb2YgZXRoZXJuZXQgaW50ZXJmYWNlCisgKiAgQHBhcmFtICBldGhfaWQgZXRoZXJuZXQgaW50ZXJmYWNlIGlkCisgKiAgQHBhcmFtICB2YWx1ZSB2YWx1ZSB0byBiZSByZWFkCisgKi8KK3ZvaWQgbm11X2dldF9ldGhfcnhfZXJyb3JfcGt0X2NudChrYWxfdWludDggZXRoX2lkLCBubXVfc3RhdF90KiB2YWx1ZSk7CisKKy8qCisgKiAgQGJyaWVmICBzZXQgdHJhbnNtaXQgZHJvcHBlZCBwYWNrZXQgY291bnRzIG9mIGV0aGVybmV0IGludGVyZmFjZQorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICogIEBwYXJhbSAgdmFsdWUgdmFsdWUgdG8gYmUgd3JpdHRlbgorICovCit2b2lkIG5tdV9zZXRfZXRoX3R4X2Ryb3BfcGt0X2NudChrYWxfdWludDggZXRoX2lkLCBubXVfc3RhdF90IHZhbHVlKTsKKworCisvKgorICogIEBicmllZiAgYWRkIHRyYW5zbWl0IGRyb3BwZWQgcGFja2V0IGNvdW50cyBvZiBldGhlcm5ldCBpbnRlcmZhY2UKKyAqICBAcGFyYW0gIGV0aF9pZCBldGhlcm5ldCBpbnRlcmZhY2UgaWQKKyAqICBAcGFyYW0gIHZhbHVlIHZhbHVlIHRvIGJlIGFkZGVkCisgKi8KK3ZvaWQgbm11X2FkZF9ldGhfdHhfZHJvcF9wa3RfY250KGthbF91aW50OCBldGhfaWQsIG5tdV9zdGF0X3QgdmFsdWUpOworCisKKy8qCisgKiAgQGJyaWVmICBnZXQgdHJhbnNtaXQgZHJvcHBlZCBwYWNrZXQgY291bnRzIG9mIGV0aGVybmV0IGludGVyZmFjZQorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICogIEBwYXJhbSAgdmFsdWUgdmFsdWUgdG8gYmUgcmVhZAorICovCit2b2lkIG5tdV9nZXRfZXRoX3R4X2Ryb3BfcGt0X2NudChrYWxfdWludDggZXRoX2lkLCBubXVfc3RhdF90KiB2YWx1ZSk7CisKKworLyoKKyAqICBAYnJpZWYgIHNldCByZWNlaXZlIGRyb3BwZWQgcGFja2V0IGNvdW50cyBvZiBldGhlcm5ldCBpbnRlcmZhY2UKKyAqICBAcGFyYW0gIGV0aF9pZCBldGhlcm5ldCBpbnRlcmZhY2UgaWQKKyAqICBAcGFyYW0gIHZhbHVlIHZhbHVlIHRvIGJlIHdyaXR0ZW4KKyAqLwordm9pZCBubXVfc2V0X2V0aF9yeF9kcm9wX3BrdF9jbnQoa2FsX3VpbnQ4IGV0aF9pZCwgbm11X3N0YXRfdCB2YWx1ZSk7CisKKworLyoKKyAqICBAYnJpZWYgIGFkZCByZWNlaXZlIGRyb3BwZWQgcGFja2V0IGNvdW50cyBvZiBldGhlcm5ldCBpbnRlcmZhY2UKKyAqICBAcGFyYW0gIGV0aF9pZCBldGhlcm5ldCBpbnRlcmZhY2UgaWQKKyAqICBAcGFyYW0gIHZhbHVlIHZhbHVlIHRvIGJlIGFkZGVkCisgKi8KK3ZvaWQgbm11X2FkZF9ldGhfcnhfZHJvcF9wa3RfY250KGthbF91aW50OCBldGhfaWQsIG5tdV9zdGF0X3QgdmFsdWUpOworCisKKy8qCisgKiAgQGJyaWVmICBnZXQgcmVjZWl2ZSBkcm9wcGVkIHBhY2tldCBjb3VudHMgb2YgZXRoZXJuZXQgaW50ZXJmYWNlCisgKiAgQHBhcmFtICBldGhfaWQgZXRoZXJuZXQgaW50ZXJmYWNlIGlkCisgKiAgQHBhcmFtICB2YWx1ZSB2YWx1ZSB0byBiZSByZWFkCisgKi8KK3ZvaWQgbm11X2dldF9ldGhfcnhfZHJvcF9wa3RfY250KGthbF91aW50OCBldGhfaWQsIG5tdV9zdGF0X3QqIHZhbHVlKTsKKworCisvKgorICogIEBicmllZiAgc2V0IHJlY2VpdmUgZHJvcHBlZCBwYWNrZXQgY291bnRzIG9mIGV0aGVybmV0IGludGVyZmFjZQorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICogIEBwYXJhbSAgdmFsdWUgdmFsdWUgdG8gYmUgd3JpdHRlbgorICovCit2b2lkIG5tdV9zZXRfZXRoX3J4X2ZyYW1lX2FsaWduX2Vycm9yX2NudChrYWxfdWludDggZXRoX2lkLCBubXVfc3RhdF90IHZhbHVlKTsKKworCisvKgorICogIEBicmllZiAgYWRkIHJlY2VpdmUgZHJvcHBlZCBwYWNrZXQgY291bnRzIG9mIGV0aGVybmV0IGludGVyZmFjZQorICogIEBwYXJhbSAgZXRoX2lkIGV0aGVybmV0IGludGVyZmFjZSBpZAorICogIEBwYXJhbSAgdmFsdWUgdmFsdWUgdG8gYmUgYWRkZWQKKyAqLwordm9pZCBubXVfYWRkX2V0aF9yeF9mcmFtZV9hbGlnbl9lcnJvcl9jbnQoa2FsX3VpbnQ4IGV0aF9pZCwgbm11X3N0YXRfdCB2YWx1ZSk7CisKKworLyoKKyAqICBAYnJpZWYgIGdldCByZWNlaXZlIHBhY2tldCBieXRlcyBvZiBldGhlcm5ldCBpbnRlcmZhY2UKKyAqICBAcGFyYW0gIGV0aF9pZCBldGhlcm5ldCBpbnRlcmZhY2UgaWQKKyAqICBAcGFyYW0gIHZhbHVlIHZhbHVlIHRvIGJlIHJlYWQKKyAqLwordm9pZCBubXVfZ2V0X2V0aF9yeF9mcmFtZV9hbGlnbl9lcnJvcl9jbnQoa2FsX3VpbnQ4IGV0aF9pZCwgbm11X3N0YXRfdCogdmFsdWUpOworCisKKy8qCisgKiAgQGJyaWVmICBzZXQgaXB2NCBpbnN0YW5jZSBJUHY0IHVwCisgKiAgQHBhcmFtICBpcF9pZCBpcCBpbnN0YW5jZSBpZAorICovCit2b2lkIG5tdV9zZXRfaXA0X3VwKGthbF91aW50OCBpcF9pZCk7CisKKworLyoKKyAqICBAYnJpZWYgIHNldCBpcCBpbnN0YW5jZSBJUHY0IGRvd24KKyAqICBAcGFyYW0gIGlwX2lkIGlwIGluc3RhbmNlIGlkCisgKi8KK3ZvaWQgbm11X3NldF9pcDRfZG93bihrYWxfdWludDggaXBfaWQpOworCisKKy8qCisgKiAgQGJyaWVmICBjaGVjayBpcCBpbnN0YW5jZSBJUHY0IGlzIHVwIG9yIG5vdAorICogIEBwYXJhbSAgaXBfaWQgaXAgaW5zdGFuY2UgaWQKKyAqICBAcmV0dXJuIEtBTF9UUlVFIGlmIElQdjQgaXMgdXAsIEtBTF9GQUxTRSBpZiBub3QKKyAqLwora2FsX2Jvb2wgbm11X2NoZWNrX2lwNF91cChrYWxfdWludDggaXBfaWQpOworCisKKy8qCisgKiAgQGJyaWVmICBzZXQgSVB2NCBhZGRyZXNzIG9mIGlwIGluc3RhbmNlCisgKiAgQHBhcmFtICBpcF9pZCBpcCBpbnN0YW5jZSBpZAorICogIEBwYXJhbSAgaXBfYWRkcmVzcyBJUHY0IGFkZHJlc3MgdG8gYmUgd3JpdHRlbgorICovCit2b2lkIG5tdV9zZXRfaXA0X2lwKGthbF91aW50OCBpcF9pZCwgdm9pZCogaXBfYWRkcmVzcyk7CisKKworLyoKKyAqICBAYnJpZWYgIGdldCBJUHY0IGFkZHJlc3Mgb2YgaXAgaW5zdGFuY2UKKyAqICBAcGFyYW0gIGlwX2lkIGlwIGluc3RhbmNlIGlkCisgKiAgQHBhcmFtICBpcF9hZGRyZXNzIElQdjQgYWRkcmVzcyB0byBiZSByZWFkCisgKi8KK3ZvaWQgbm11X2dldF9pcDRfaXAoa2FsX3VpbnQ4IGlwX2lkLCB2b2lkKiBpcF9hZGRyZXNzKTsKKworCisvKgorICogIEBicmllZiAgc2V0IElQdjQgbmV0bWFzayBvZiBpcCBpbnN0YW5jZQorICogIEBwYXJhbSAgaXBfaWQgaXAgaW5zdGFuY2UgaWQKKyAqICBAcGFyYW0gIG1hc2sgSVB2NCBuZXRtYXNrIHRvIGJlIHdyaXR0ZW4KKyAqLwordm9pZCBubXVfc2V0X2lwNF9tYXNrKGthbF91aW50OCBpcF9pZCwgdm9pZCogbWFzayk7CisKKworLyoKKyAqICBAYnJpZWYgIHNldCBJUHY0IG5ldG1hc2sgb2YgaXAgaW5zdGFuY2UKKyAqICBAcGFyYW0gIGlwX2lkIGlwIGluc3RhbmNlIGlkCisgKiAgQHBhcmFtICBtYXNrIElQdjQgbmV0bWFzayB0byBiZSB3cml0dGVuCisgKi8KK3ZvaWQgbm11X2dldF9pcDRfbWFzayhrYWxfdWludDggaXBfaWQsIHZvaWQqIG1hc2spOworCisKKy8qCisgKiAgQGJyaWVmICBzZXQgSVB2NCBnYXRld2F5IGFkZHJlc3Mgb2YgaXAgaW5zdGFuY2UKKyAqICBAcGFyYW0gIGlwX2lkIGlwIGluc3RhbmNlIGlkCisgKiAgQHBhcmFtICBnYXRld2F5IElQdjQgYWRkcmVzcyB0byBiZSB3cml0dGVuCisgKi8KK3ZvaWQgbm11X3NldF9pcDRfZ2F0ZXdheShrYWxfdWludDggaXBfaWQsIHZvaWQqIGdhdGV3YXkpOworCisKKy8qCisgKiAgQGJyaWVmICBnZXQgSVB2NCBnYXRld2F5IGFkZHJlc3Mgb2YgaXAgaW5zdGFuY2UKKyAqICBAcGFyYW0gIGlwX2lkIGlwIGluc3RhbmNlIGlkCisgKiAgQHBhcmFtICBnYXRld2F5IElQdjQgYWRkcmVzcyB0byBiZSByZWFkCisgKi8KK3ZvaWQgbm11X2dldF9pcDRfZ2F0ZXdheShrYWxfdWludDggaXBfaWQsIHZvaWQqIGdhdGV3YXkpOworCisKKy8qCisgKiAgQGJyaWVmICBzZXQgSVB2NCBtdHUgc2l6ZSBvZiBpcCBpbnN0YW5jZQorICogIEBwYXJhbSAgaXBfaWQgaXAgaW5zdGFuY2UgaWQKKyAqICBAcGFyYW0gIG10dV9zaXplIG10dSBzaXplIHRvIGJlIHdyaXR0ZW4KKyAqLwordm9pZCBubXVfc2V0X2lwNF9tdHVfc2l6ZShrYWxfdWludDggaXBfaWQsIGthbF91aW50MTYgbXR1X3NpemUpOworCisKKy8qCisgKiAgQGJyaWVmICBnZXQgSVB2NCBtdHUgc2l6ZSBvZiBpcCBpbnN0YW5jZQorICogIEBwYXJhbSAgaXBfaWQgaXAgaW5zdGFuY2UgaWQKKyAqICBAcGFyYW0gIG10dV9zaXplIG10dSBzaXplIHRvIGJlIHJlYWQKKyAqLwordm9pZCBubXVfZ2V0X2lwNF9tdHVfc2l6ZShrYWxfdWludDggaXBfaWQsIGthbF91aW50MTYqIG10dV9zaXplKTsKKworCisvKgorICogIEBicmllZiAgc2V0IHRvdGFsIG51bWJlciBvZiBJUHY0IEROUyBzZXJ2ZXJzIG9mIGlwIGluc3RhbmNlCisgKiAgQHBhcmFtICBpcF9pZCBpcCBpbnN0YW5jZSBpZAorICogIEBwYXJhbSAgZG5zX251bSB0b3RhbCBudW1iZXIgdG8gYmUgd3JpdHRlbgorICovCit2b2lkIG5tdV9zZXRfaXA0X2Ruc19udW0oa2FsX3VpbnQ4IGlwX2lkLCBrYWxfdWludDggZG5zX251bSk7CisKKworLyoKKyAqICBAYnJpZWYgIGdldCB0b3RhbCBudW1iZXIgb2YgSVB2NCBETlMgc2VydmVycyBvZiBpcCBpbnN0YW5jZQorICogIEBwYXJhbSAgaXBfaWQgaXAgaW5zdGFuY2UgaWQKKyAqICBAcGFyYW0gIGRuc19udW0gdG90YWwgbnVtYmVyIHRvIGJlIHJlYWQKKyAqLwordm9pZCBubXVfZ2V0X2lwNF9kbnNfbnVtKGthbF91aW50OCBpcF9pZCwga2FsX3VpbnQ4KiBkbnNfbnVtKTsKKworCisvKgorICogIEBicmllZiAgc2V0IEROUyBzZXJ2ZXIgSVB2NCBhZGRyZXNzIG9mIGlwIGluc3RhbmNlCisgKiAgQHBhcmFtICBpcF9pZCBpcCBpbnN0YW5jZSBpZAorICogIEBwYXJhbSAgZG5zX2lkIGRucyBzZXJ2ZXIgbm8KKyAqICBAcGFyYW0gIGRucyBJUHY0IGFkZHJlc3MgdG8gYmUgd3JpdHRlbgorICovCit2b2lkIG5tdV9zZXRfaXA0X2RucyhrYWxfdWludDggaXBfaWQsIGthbF91aW50OCBkbnNfaWQsIHZvaWQqIGRucyk7CisKKworLyoKKyAqICBAYnJpZWYgIGdldCBETlMgc2VydmVyIElQdjQgYWRkcmVzcyBvZiBpcCBpbnN0YW5jZQorICogIEBwYXJhbSAgaXBfaWQgaXAgaW5zdGFuY2UgaWQKKyAqICBAcGFyYW0gIGRuc19pZCBkbnMgc2VydmVyIG5vCisgKiAgQHBhcmFtICBkbnMgSVB2NCBhZGRyZXNzIHRvIGJlIHJlYWQKKyAqLwordm9pZCBubXVfZ2V0X2lwNF9kbnMoa2FsX3VpbnQ4IGlwX2lkLCBrYWxfdWludDggZG5zX2lkLCB2b2lkKiBkbnMpOworCisKKy8qCisgKiAgQGJyaWVmICBzZXQgaXAgaW5zdGFuY2UgSVB2NiB1cAorICogIEBwYXJhbSAgaXBfaWQgaXAgaW5zdGFuY2UgaWQKKyAqLwordm9pZCBubXVfc2V0X2lwNl91cChrYWxfdWludDggaXBfaWQpOworCisKKy8qCisgKiAgQGJyaWVmICBzZXQgaXAgaW5zdGFuY2UgSVB2NiBkb3duCisgKiAgQHBhcmFtICBpcF9pZCBpcCBpbnN0YW5jZSBpZAorICovCit2b2lkIG5tdV9zZXRfaXA2X2Rvd24oa2FsX3VpbnQ4IGlwX2lkKTsKKworCisvKgorICogIEBicmllZiAgY2hlY2sgaXAgaW5zdGFuY2UgSVB2NiBpcyB1cCBvciBub3QKKyAqICBAcGFyYW0gIGlwX2lkIGlwIGluc3RhbmNlIGlkCisgKiAgQHJldHVybiBLQUxfVFJVRSBpZiBJUHY2IGlzIHVwLCBLQUxfRkFMU0UgaWYgbm90CisgKi8KK2thbF9ib29sIG5tdV9jaGVja19pcDZfdXAoa2FsX3VpbnQ4IGlwX2lkKTsKKworCisvKgorICogIEBicmllZiAgc2V0IElQdjYgbXR1IHNpemUgb2YgaXAgaW5zdGFuY2UKKyAqICBAcGFyYW0gIGlwX2lkIGlwIGluc3RhbmNlIGlkCisgKiAgQHBhcmFtICBtdHVfc2l6ZSBtdHUgc2l6ZSB0byBiZSB3cml0dGVuCisgKi8KK3ZvaWQgbm11X3NldF9pcDZfbXR1X3NpemUoa2FsX3VpbnQ4IGlwX2lkLCBrYWxfdWludDMyIG10dV9zaXplKTsKKworCisvKgorICogIEBicmllZiAgZ2V0IElQdjYgbXR1IHNpemUgb2YgaXAgaW5zdGFuY2UKKyAqICBAcGFyYW0gIGlwX2lkIGlwIGluc3RhbmNlIGlkCisgKiAgQHBhcmFtICBtdHVfc2l6ZSBtdHUgc2l6ZSB0byBiZSByZWFkCisgKi8KK3ZvaWQgbm11X2dldF9pcDZfbXR1X3NpemUoa2FsX3VpbnQ4IGlwX2lkLCBrYWxfdWludDMyKiBtdHVfc2l6ZSk7CisKKworLyoKKyAqICBAYnJpZWYgIHNldCBJUHY2IHByZWZpeCBsZW5ndGggb2YgaXAgaW5zdGFuY2UKKyAqICBAcGFyYW0gIGlwX2lkIGlwIGluc3RhbmNlIGlkCisgKiAgQHBhcmFtICBwcmVmaXhfbGVuIHByZWZpeCBsZW5ndGggdG8gYmUgd3JpdHRlbgorICovCit2b2lkIG5tdV9zZXRfaXA2X3ByZWZpeF9sZW4oa2FsX3VpbnQ4IGlwX2lkLCBrYWxfdWludDggcHJlZml4X2xlbik7CisKKworLyoKKyAqICBAYnJpZWYgIGdldCBJUHY2IHByZWZpeCBsZW5ndGggb2YgaXAgaW5zdGFuY2UKKyAqICBAcGFyYW0gIGlwX2lkIGlwIGluc3RhbmNlIGlkCisgKiAgQHBhcmFtICBwcmVmaXhfbGVuIHByZWZpeCBsZW5ndGggdG8gYmUgcmVhZAorICovCit2b2lkIG5tdV9nZXRfaXA2X3ByZWZpeF9sZW4oa2FsX3VpbnQ4IGlwX2lkLCBrYWxfdWludDgqIHByZWZpeF9sZW4pOworCisKKy8qCisgKiAgQGJyaWVmICBzZXQgSVB2NiBwcmVmaXggb2YgaXAgaW5zdGFuY2UKKyAqICBAcGFyYW0gIGlwX2lkIGlwIGluc3RhbmNlIGlkCisgKiAgQHBhcmFtICBwcmVmaXhfbGVuIHByZWZpeCB0byBiZSB3cml0dGVuCisgKi8KK3ZvaWQgbm11X3NldF9pcDZfcHJlZml4KGthbF91aW50OCBpcF9pZCwgdm9pZCogcHJlZml4KTsKKworCisvKgorICogIEBicmllZiAgZ2V0IElQdjYgcHJlZml4IG9mIGlwIGluc3RhbmNlCisgKiAgQHBhcmFtICBpcF9pZCBpcCBpbnN0YW5jZSBpZAorICogIEBwYXJhbSAgcHJlZml4X2xlbiBwcmVmaXggdG8gYmUgcmVhZAorICovCit2b2lkIG5tdV9nZXRfaXA2X3ByZWZpeChrYWxfdWludDggaXBfaWQsIHZvaWQqIHByZWZpeCk7CisKKworLyoKKyAqICBAYnJpZWYgIHNldCBJUHY2IGludGVyZmFjZSBpZGVudGlmaWVyIGxlbmd0aCBvZiBpcCBpbnN0YW5jZQorICogIEBwYXJhbSAgaXBfaWQgaXAgaW5zdGFuY2UgaWQKKyAqICBAcGFyYW0gIGlpZF9sZW4gaW50ZXJmYWNlIGlkZW50aWZpZXIgbGVuZ3RoIHRvIGJlIHdyaXR0ZW4KKyAqLwordm9pZCBubXVfc2V0X2lwNl9paWRfbGVuKGthbF91aW50OCBpcF9pZCwga2FsX3VpbnQ4IGlpZF9sZW4pOworCisKKy8qCisgKiAgQGJyaWVmICBnZXQgSVB2NiBpbnRlcmZhY2UgaWRlbnRpZmllciBsZW5ndGggb2YgaXAgaW5zdGFuY2UKKyAqICBAcGFyYW0gIGlwX2lkIGlwIGluc3RhbmNlIGlkCisgKiAgQHBhcmFtICBpaWRfbGVuIGludGVyZmFjZSBpZGVudGlmaWVyIGxlbmd0aCB0byBiZSByZWFkCisgKi8KK3ZvaWQgbm11X2dldF9pcDZfaWlkX2xlbihrYWxfdWludDggaXBfaWQsIGthbF91aW50OCogaWlkX2xlbik7CisKKworLyoKKyAqICBAYnJpZWYgIHNldCBJUHY2IGludGVyZmFjZSBpZGVudGlmaWVyIG9mIGlwIGluc3RhbmNlCisgKiAgQHBhcmFtICBpcF9pZCBpcCBpbnN0YW5jZSBpZAorICogIEBwYXJhbSAgaWlkX2xlbiBpbnRlcmZhY2UgaWRlbnRpZmllciB0byBiZSB3cml0dGVuCisgKi8KK3ZvaWQgbm11X3NldF9pcDZfaWlkKGthbF91aW50OCBpcF9pZCwgdm9pZCogaWlkKTsKKworCisvKgorICogIEBicmllZiAgZ2V0IElQdjYgaW50ZXJmYWNlIGlkZW50aWZpZXIgb2YgaXAgaW5zdGFuY2UKKyAqICBAcGFyYW0gIGlwX2lkIGlwIGluc3RhbmNlIGlkCisgKiAgQHBhcmFtICBpaWRfbGVuIGludGVyZmFjZSBpZGVudGlmaWVyIHRvIGJlIHJlYWQKKyAqLwordm9pZCBubXVfZ2V0X2lwNl9paWQoa2FsX3VpbnQ4IGlwX2lkLCB2b2lkKiBpaWQpOworCisKKy8qCisgKiAgQGJyaWVmICBzZXQgdG90YWwgbnVtYmVyIG9mIElQdjYgRE5TIHNlcnZlcnMgb2YgaXAgaW5zdGFuY2UKKyAqICBAcGFyYW0gIGlwX2lkIGlwIGluc3RhbmNlIGlkCisgKiAgQHBhcmFtICBkbnNfbnVtIHRvdGFsIG51bWJlciB0byBiZSB3cml0dGVuCisgKi8KK3ZvaWQgbm11X3NldF9pcDZfZG5zX251bShrYWxfdWludDggaXBfaWQsIGthbF91aW50OCBkbnNfbnVtKTsKKworCisvKgorICogIEBicmllZiAgZ2V0IHRvdGFsIG51bWJlciBvZiBJUHY2IEROUyBzZXJ2ZXJzIG9mIGlwIGluc3RhbmNlCisgKiAgQHBhcmFtICBpcF9pZCBpcCBpbnN0YW5jZSBpZAorICogIEBwYXJhbSAgZG5zX251bSB0b3RhbCBudW1iZXIgdG8gYmUgcmVhZAorICovCit2b2lkIG5tdV9nZXRfaXA2X2Ruc19udW0oa2FsX3VpbnQ4IGlwX2lkLCBrYWxfdWludDgqIGRuc19udW0pOworCisKKy8qCisgKiAgQGJyaWVmICBzZXQgRE5TIHNlcnZlciBJUHY2IGFkZHJlc3Mgb2YgaXAgaW5zdGFuY2UKKyAqICBAcGFyYW0gIGlwX2lkIGlwIGluc3RhbmNlIGlkCisgKiAgQHBhcmFtICBkbnNfaWQgZG5zIHNlcnZlciBubworICogIEBwYXJhbSAgZG5zIElQdjYgYWRkcmVzcyB0byBiZSB3cml0dGVuCisgKi8KK3ZvaWQgbm11X3NldF9pcDZfZG5zKGthbF91aW50OCBpcF9pZCwga2FsX3VpbnQ4IGRuc19pZCwgdm9pZCogZG5zKTsKKworCisvKgorICogIEBicmllZiAgZ2V0IEROUyBzZXJ2ZXIgSVB2NiBhZGRyZXNzIG9mIGlwIGluc3RhbmNlCisgKiAgQHBhcmFtICBpcF9pZCBpcCBpbnN0YW5jZSBpZAorICogIEBwYXJhbSAgZG5zX2lkIGRucyBzZXJ2ZXIgbm8KKyAqICBAcGFyYW0gIGRucyBJUHY2IGFkZHJlc3MgdG8gYmUgcmVhZAorICovCit2b2lkIG5tdV9nZXRfaXA2X2RucyhrYWxfdWludDggaXBfaWQsIGthbF91aW50OCBkbnNfaWQsIHZvaWQqIGRucyk7CisKKworLyoKKyAqICBAYnJpZWYgIHNldCBmYWtlIG5ldG1hc2sgYW5kIGdhdGV3YXkgdGhyb3VnaCByZWFsIGlwIGFkZHJlc3MKKyAqICBAcGFyYW0gIGlwX2lkIGlwIGluc3RhbmNlIGlkCisgKiAgQHBhcmFtICBpcF9hZGRyZXNzIElQdjQgYWRkcmVzcyB1c2VkIHRvIGNhbGN1bGF0ZWQgZmFrZSBuZXRtYXNrIGFuZCBnYXRld2F5CisgKi8KK3ZvaWQgbm11X3NldF9pcDRfZmFrZV9tYXNrX2FuZF9nYXRld2F5KGthbF91aW50OCBpcF9pZCwgdm9pZCAqaXBfYWRkcmVzcyk7CisKKworI2VuZGlmICAvLyBfTk1VX1VUSUxfSAorCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3BmbV9hcGkuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvcGZtX2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZDIxNDQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3BmbV9hcGkuaApAQCAtMCwwICsxLDExOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE0CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHBmbV9hcGkuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNT0xZCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgUGFja2V0IEZpbHRlciBNYW5hZ2VyIHB1YmxpYyBzdHJ1Y3R1cmUgYW5kIGludGVyZmFjZSBkZWZpbml0aW9uLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0lOQ19QRk1fQVBJX0gKKyNkZWZpbmUgX19JTkNfUEZNX0FQSV9ICisKKyNpbmNsdWRlICJwZm1fc3RydWN0LmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQdWJsaWMgZnVjbnRpb25zLgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyohCisgKiBIYW5kbGUgSUxNIG1lc3NhZ2UuCisgKgorICogQHBhcmFtICAgaWxtIFtJTl0gIElMTSBkYXRhIHN0cnVjdHVyZQorICovCit2b2lkIHBmbV9vbl9pbG0oaWxtX3N0cnVjdCAqaWxtKTsKKworLyohCisgKiBQYWNrZXQgRmlsdGVyIE1hbmFnZXIgaW5pdCBmdW5jdGlvbi4KKyAqCisgKiBAcmV0dXJuICBLQUxfVFJVRSBpZiBzdWNjZWVkZWQsIEtBTF9GQUxTRSBvdGhlcndpc2UuCisgKi8KK2thbF9ib29sIHBmbV9pbml0KHZvaWQpOworCisvKiEKKyAqIFBhY2tldCBGaWx0ZXIgTWFuYWdlciByZXNldCBmdW5jdGlvbi4KKyAqCisgKiBAcmV0dXJuICBLQUxfVFJVRSBpZiBzdWNjZWVkZWQsIEtBTF9GQUxTRSBvdGhlcndpc2UuCisgKi8KK2thbF9ib29sIHBmbV9yZXNldCh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgcGZtX3JlZ19jYmtfd2FrZV90eXBlX3BrdAorICogUmVnaXN0ZXIgY2FsbGJhY2sgZm9yIE1CSU0gV0FLRSBSRUFTT04gd2FrZSB0eXBlIHBrdAorICoKKyAqIEBwYXJhbSBbSU5dcGZfd2FrZV90eXBlX3BrdAorICogICAgICAgIFtJTl1wcml2X2RhdGEKKyAqLwordm9pZCBwZm1fcmVnX2Nia193YWtlX3R5cGVfcGt0KHBmbV9nYXJiYWdlX3N0cl93YWtlX3R5cGVfcGt0X2YgcGZfd2FrZV90eXBlX3BrdCwgdm9pZCogcHJpdl9kYXRhKTsKKworLyohCisgKiBAYnJpZWYgcGZtX2RlcmVnX2Nia193YWtlX3R5cGVfcGt0CisgKiBEZS1yZWdpc3RlciBjYWxsYmFjayBmb3IgTUJJTSBXQUtFIFJFQVNPTiB3YWtlIHR5cGUgcGt0CisgKgorICovCit2b2lkIHBmbV9kZXJlZ19jYmtfd2FrZV90eXBlX3BrdCgpOworCisjZW5kaWYgLyogX19JTkNfUEZNX0FQSV9IICovCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3BmbV9jb25maWcuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvcGZtX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyODJmZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3BmbV9jb25maWcuaApAQCAtMCwwICsxLDEwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE0CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHBmbV9jb25maWcuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNT0xZCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIHByb3ZpZGVzIHRoZSBmaWx0ZXIgc2V0IGluZGV4IGZvciBkaWZmZXJlbnQgZmVhdHVyZXMuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBGTV9GSUxURVJfU0VUX1BSRUZJWChwcmVmaXgpICAgICAgICAgICAgRmlsdGVyIFNldCBJRCAqLworUEZNX0ZJTFRFUl9TRVRfRkVBVFVSRV9OQU1FKEdBUkJBR0VfRklMVEVSKSAgLyogMCAqLworUEZNX0ZJTFRFUl9TRVRfUFJFRklYKGdhcmJhZ2VfZmlsdGVyKSAgICAgICAgLyogMCAqLworUEZNX0ZJTFRFUl9TRVRfRkVBVFVSRV9OQU1FKEZJTl9BQ0tfRklMVEVSKSAgLyogMSAqLworUEZNX0ZJTFRFUl9TRVRfUFJFRklYKGZpbl9hY2tfZmlsdGVyKSAgICAgICAgLyogMSAqLworUEZNX0ZJTFRFUl9TRVRfRkVBVFVSRV9OQU1FKFVEUF9JR01QX0ZJTFRFUikgLyogMiAqLworUEZNX0ZJTFRFUl9TRVRfUFJFRklYKHVkcF9pZ21wX2ZpbHRlcikgICAgICAgLyogMiAqLworUEZNX0ZJTFRFUl9TRVRfRkVBVFVSRV9OQU1FKEdBUkJBR0VfU1RSX0ZJTFRFUikgLyogMyAqLworUEZNX0ZJTFRFUl9TRVRfUFJFRklYKGdhcmJhZ2Vfc3RyX2ZpbHRlcikgICAgICAgLyogMyAqLworUEZNX0ZJTFRFUl9TRVRfRkVBVFVSRV9OQU1FKElDTVBfUElOR19GSUxURVIpIC8qIDQgKi8KK1BGTV9GSUxURVJfU0VUX1BSRUZJWChpY21wX3BpbmdfZmlsdGVyKSAgICAgICAvKiA0ICovCitQRk1fRklMVEVSX1NFVF9GRUFUVVJFX05BTUUoVUxfRElTQUJMRV9BTExfUEFDS0VUU19GSUxURVIpIC8qIDUgKi8KK1BGTV9GSUxURVJfU0VUX1BSRUZJWCh1bF9kaXNhYmxlX2FsbF9wYWNrZXRzX2ZpbHRlcikgICAgICAgLyogNSAqLworUEZNX0ZJTFRFUl9TRVRfRkVBVFVSRV9OQU1FKFVMX0lDTVBfUElOR19XSElURUxJU1RfRklMVEVSKSAvKiA2ICovCitQRk1fRklMVEVSX1NFVF9QUkVGSVgodWxfaWNtcF9waW5nX3doaXRlbGlzdF9maWx0ZXIpICAgICAgIC8qIDYgKi8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvcGZtX2VudW1zLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3BmbV9lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMDY1MmIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3BmbV9lbnVtcy5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxNAorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBwZm1fZW51bXMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNT0xZCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgUGFja2V0IEZpbHRlciBNYW5hZ2VyIHB1YmxpYyBlbnVtZXJhdGlvbiBkZWZpbml0aW9uLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0lOQ19QRk1fRU5VTVNfSAorI2RlZmluZSBfX0lOQ19QRk1fRU5VTVNfSAorCit0eXBlZGVmIGVudW0gX3BmbV9maWx0ZXJfc2V0X2lkX2UgeworICAgICN1bmRlZiBQRk1fRklMVEVSX1NFVF9GRUFUVVJFX05BTUUKKyAgICAjdW5kZWYgUEZNX0ZJTFRFUl9TRVRfUFJFRklYCisgICAgI2RlZmluZSBQRk1fRklMVEVSX1NFVF9GRUFUVVJFX05BTUUoX25hbWUpIFBGTV8gIyMgX25hbWUgIyMgX1NFVF9JRCwKKyAgICAjZGVmaW5lIFBGTV9GSUxURVJfU0VUX1BSRUZJWChfcHJlZml4KSAKKyAgICAjaW5jbHVkZSAicGZtX2NvbmZpZy5oIgorCisgICAgTlVNX09GX1BGTV9GSUxURVJfU0VUX0lELAorfSBwZm1fZmlsdGVyX3NldF9pZF9lOworCisjZW5kaWYgLyogX19JTkNfUEZNX0VOVU1TX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvcGZtX3N0cnVjdC5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi9wZm1fc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2YjFlYwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvcGZtX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTQKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgcGZtX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBQYWNrZXQgRmlsdGVyIE1hbmFnZXIgSUxNIHN0cnVjdHVyZSBhbmQgaW50ZXJmYWNlIGRlZmluaXRpb24uCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19JTkNfUEZNX1NUUlVDVF9ICisjZGVmaW5lIF9fSU5DX1BGTV9TVFJVQ1RfSAorCisjaW5jbHVkZSAiaGlmX2lvci5oIgorCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgSVAgZGF0YWdyYW0gZmlsdGVyZWQuCisgKgorICogQHBhcmFtICAgcGFja2V0IFtJTl0gUGFja2V0IGJ1ZmZlci4KKyAqIEBwYXJhbSAgIHBhY2tldF9sZW4gW0lOXSBQYWNrZXQgbGVuLgorICogQHBhcmFtICAgcGZtX2ZpbHRlcl9pZCBbSU5dIFBGTSBGaWx0ZXIgaWQgb2YgbWF0Y2hlZCBwYWNrZXQuCisgKiBAcGFyYW0gICBwcml2X2RhdGEgW0lOXSBvcHRpb25hbCBkYXRhLgorICovCit0eXBlZGVmIHZvaWQgKCpwZm1fZ2FyYmFnZV9zdHJfd2FrZV90eXBlX3BrdF9mKShjb25zdCBrYWxfdWludDggKnBhY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF9pbnQzMiBwYWNrZXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX2ludDMyIHBmbV9maWx0ZXJfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBwcml2X2RhdGEpOworCisvKgorICogTG9jYWwgcGFyYW1ldGVyIHN0cnVjdHVyZSBmb3IgTVNHX0lEX1BGTV9SRUdJU1RFUl9GSUxURVJfUkVRICYgTVNHX0lEX1BGTV9ERVJFR0lTVEVSX0ZJTFRFUl9SRVEKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3BmbV9maWx0ZXJfc2V0X3QgeworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICBrYWxfdWludDMyICBmaWx0ZXJfc2V0X2lkOworICAgIGthbF9pbnQzMiAgIGZpbHRlcl9jbnQ7CisgICAga2FsX3VpbnQzMiAgdXBsaW5rOworfSBwZm1fZmlsdGVyX3NldF90OworCisjZGVmaW5lIFBGTV9TVFJfRklMVEVSX01BWF9TSVpFICAgICAxOTIKKyNkZWZpbmUgUEZNX1NUUl9GSUxURVJfTUFYX05VTSAgICAgIDE2CisKK3R5cGVkZWYgc3RydWN0IF9wZm1fc3RyX2ZpbHRlcl90IHsKKyAgICBrYWxfaW50MzIgICBmaWx0ZXJfaWQ7CisgICAga2FsX3VpbnQzMiAgbmV0aWZfaWQ7CisgICAga2FsX3VpbnQxNiAgZmlsdGVyX2xlbjsKKyAgICBrYWxfdWludDE2ICBtYXNrX2xlbjsKKyAgICBrYWxfdWludDggICBmaWx0ZXJbUEZNX1NUUl9GSUxURVJfTUFYX1NJWkVdOworICAgIGthbF91aW50OCAgIG1hc2tbUEZNX1NUUl9GSUxURVJfTUFYX1NJWkVdOworICAgIGthbF91aW50MzIgIG1hZ2ljX2NvZGU7Cit9IHBmbV9zdHJfZmlsdGVyX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9wZm1fcGNpZV9zdGF0ZV9jaGFuZ2VfaW5kX3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiAgaXNfc3VzcGVuZDsKK30gcGZtX3BjaWVfc3RhdGVfY2hhbmdlX2luZF9zdHJ1Y3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBESEwgbG9nZ2luZyBzdHJ1Y3R1cmUKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHBmbV9maWx0ZXJfc2V0X3QgcGZtX3JlZ2lzdGVyX2ZpbHRlcl9yZXFfc3RydWN0OwordHlwZWRlZiBwZm1fZmlsdGVyX3NldF90IHBmbV9kZXJlZ2lzdGVyX2ZpbHRlcl9yZXFfc3RydWN0OworCisjZW5kaWYgLyogX19JTkNfUEZNX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3N5c190ZXN0LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3N5c190ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ2YTU2MAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvc3lzX3Rlc3QuaApAQCAtMCwwICsxLDg5IEBACisvKiEKKyAqICBAZmlsZSBzeXNfdGVzdC5oCisgKiAgQGF1dGhvciBUSiBDaGFuZyA8dGouY2hhbmdAbWVkaWF0ZWsuY29tPgorICogIEB2ZXJzaW9uIDEuMAorICogIEBzZWN0aW9uIExJQ0VOU0UKKyAqCisgKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisgKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyAqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyAqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyAqCisgKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisgKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyAqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorICogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorICogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisgKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorICogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisgKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisgKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisgKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorICoKKyAqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisgKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisgKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyAqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisgKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisgKgorICogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisgKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisgKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisgKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisgKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisgKgorICogIEBzZWN0aW9uIERFU0NSSVBUSU9OCisgKiAgCisgKi8KKyNpZm5kZWYgX1NZU19URVNUX0gKKyNkZWZpbmUgX1NZU19URVNUX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gRGF0YSBTdHJ1Y3R1cmUgRGVmaW5pdGlvbgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLyohCisgKiAgc3RydWN0IF9TVF9UQ0FTRV9UCisgKiAgCisgKiAgQGJyaWVmIHJlZ2lzdGVyIGluZm9ybWF0aW9uIG9mIGEgdGVzdCBtb2R1bGUuCisgKgorICogIEBwYXJhbSAgcF9wYXJhbSAgICAgICAgICAgdGhlIHBhcmFtZXRlciBvZiB0ZXN0IGZ1bmN0aW9uLgorICogIEBwYXJhbSAgcF9yZXRfZXJyX3N0ciAgICAgcmV0dXJuZWQgc3RyaW5nIG9mIGVycm9yIGRlc2NyaXB0aW9uLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzdHJpbmcgYnVmZmVyIGlzIGFsbG9jYXRlZCBieSBjYWxsZXIgKHN5c190ZXN0KSBtb2R1bGUsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIGNhbGxlZSBtb2R1bGUgZmlsbHMgaW4gZXJyb3IgZGVzY3JpcHRpb24gaW4gdGhpcyBidWZmZXIuCisgKiAgICAgICAgICAgICAgICAgICAKKyAqICBAcGFyYW0gIHBfcmV0X2Vycl9zdHJfc3ogIFRoZSBjYWxsZXIgKHN5c190ZXN0KSBtb2R1bGUgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIGRlZmluZSB0aGUgbWF4IHNpemUgb2YgZXJyb3Igc3RyaW5nIGJ1ZmZlciwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgY2FsbGVlIG1vZHVsZSBmaWxscyBpbiB0aGUgYWN0dWFsIHNpemUgb2YgZXJyb3Igc3RyaW5nIGJ1ZmZlciB3aGVuIHJldHVybmluZy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGU6IFRoZSBjYWxsZWUgbW9kdWxlIENBTiBOT1QgZmlsbCBpbnRvICdwX3JldF9lcnJfc3RyJyB3aXRoIGV4Y2VlZGluZyBzaXplIGxpbWl0LgorICovCit0eXBlZGVmIGthbF9ib29sICgqc3RfZm4pKHZvaWQgKnBfcGFyYW0sIGthbF9jaGFyICpwX3JldF9lcnJfc3RyLCBrYWxfdWludDMyICpwX3JldF9lcnJfc3RyX3N6KTsKK3R5cGVkZWYgc3RydWN0IF9TVF9UQ0FTRV9UIHsKKyAgICBrYWxfY2hhciAgICAqdGVzdF9mdW5jX25hbWU7IC8qIHN0cmluZyBkZXNjcmlwdGlvbiBvZiB0ZXN0IGZ1bmN0aW9uICovIAorICAgIHN0X2ZuICAgICAgIHRlc3RfZnVuYzsgLyogZW50cnkgcG9pbnQgb2YgdGVzdCBmdW5jdGlvbiAqLworICAgIHZvaWQgICAgICAgICp0ZXN0X3BhcmFtOyAvKiBwYXJhbWV0ZXIgb2YgdGVzdCBmdW5jdGlvbiAqLworfSBTVF9UQ0FTRV9UOworCisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNZU19URVNUIEFQSQorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLyohCisgKiAgc3RfcmVnX3Rlc3QKKyAqICAKKyAqICBAYnJpZWYgcmVnaXN0ZXIgdGVzdCBmdW5jdGlvbiB0byBTWVNfVEVTVCBtb2R1bGUuCisgKgorICogIEBwYXJhbSAgcF9tb2RfbmFtZSAgICAgICAgdGVzdCBtb2R1bGUgbmFtaW5nLgorICogIEBwYXJhbSAgcF90Y2FzZSAgICAgICAgICAgdGVzdCBmdW5jdGlvbiBpbmZvcm1hdGlvbiB1c2VkIHRvIHJlZ2lzdGVyLgorICogIEBwYXJhbSAgdGNhc2VfbnVtICAgICAgICAgbnVtYmVyIG9mIHRlc3QgZnVuY3Rpb24gc3RydWN0LgorICoKKyAqICBAcmV0dXJuIGthbF9ib29sICAgICAgICAgIEtBTF9UUlVFIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBLQUxfRkFMU0UgaWYgZmFpbC4KKyAqLwora2FsX2Jvb2wgc3RfcmVnX3Rlc3Qoa2FsX2NoYXIgKnBfbW9kX25hbWUsIFNUX1RDQVNFX1QgKnBfdGNhc2UsIGthbF91aW50MzIgdGNhc2VfbnVtKTsKKworCisjZW5kaWYgIC8qIF9TWVNfVEVTVF9IICovCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvdG1jX2FwaS5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi90bWNfYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVhOTAzYgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvdG1jX2FwaS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxOQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICB0bWNfYXBpLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgVk1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGVybWFsIE1hbmFnZW1lbnQgQ29udHJvbGxlciBwdWJsaWMgYXBwbGljYXRpb24gaW50ZXJmYWNlLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSU5DX1RNQ19BUElfSF9fCisjZGVmaW5lIF9fSU5DX1RNQ19BUElfSF9fCisKKy8qKgorICogUmVnaXN0ZXJlZCBtb2R1bGUgSUQgdG8gVE1DCisgKgorICogQHBhcmFtIG1vZHVsZV9pZCAgVE1DIHdpbGwgc2VuZCB0aGVybWFsIHNlc3Npb24gbm90aWZpY2F0aW9uIHRvIHRoZSBtb2RfaWQuCisgKgorICogQHJldHVybiBLQUxfVFJVRSBpZiBzdWNjZXNzZnVsLCBLQUxfRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqLwora2FsX2Jvb2wgdG1jX3JlZ19tb2RfaWQobW9kdWxlX3R5cGUgbW9kdWxlX2lkKTsKKworLyoqCisgKiBEZXJlZ2lzdGVyZWQgbW9kdWxlIElEIHRvIFRNQworICoKKyAqIEBwYXJhbSBtb2R1bGVfaWQgIFRNQyB3aWxsIHN0b3Agc2VuZCB0aGVybWFsIG5vdGlmaWNhdGlvbiB0byB0aGUgbW9kX2lkLgorICoKKyAqIEByZXR1cm4gS0FMX1RSVUUgaWYgc3VjY2Vzc2Z1bCwgS0FMX0ZBTFNFIG90aGVyd2lzZS4KKyAqCisgKi8KK2thbF9ib29sIHRtY19kZXJlZ19tb2RfaWQobW9kdWxlX3R5cGUgbW9kdWxlX2lkKTsKKworI2VuZGlmIC8qIF9fSU5DX1RNQ19BUElfSF9fICovCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3RtY19lbnVtcy5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi90bWNfZW51bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGYyZTYxCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi90bWNfZW51bXMuaApAQCAtMCwwICsxLDcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgdG1jX2VudW1zLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgVU1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGVybWFsIE1hbmFnZW1lbnQgQ29udHJvbGxlciBwdWJsaWMgZW51bWVyYXRpb24gZGVmaW5pdGlvbi4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSU5DX1RNQ19FTlVNU19ICisjZGVmaW5lIF9fSU5DX1RNQ19FTlVNU19ICisKKyNlbmRpZiAvKiBfX0lOQ19UTUNfRU5VTVNfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi90bWNfbDFfc3RydWN0LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3RtY19sMV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmJkMjU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi90bWNfbDFfc3RydWN0LmgKQEAgLTAsMCArMSw2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE5CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBUTUNfTDFfU1RSVUNUX0gKKyNkZWZpbmUgVE1DX0wxX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCisjZGVmaW5lIE5SX01BWF9UWF9QV1JfUkVRX0FOVF9OVU0gMTYKKworLyogcmVmZXJlbmNlIHN0cnVjdHVyZSBlbDFfbHRlX21heF90eF9wd3JfcmVkX3JlcV9zdHJ1Y3QgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICAvKgorICAgICAqICBvcCAxOiBmb3IgYWxsIGJhbmQsIG9wIDMsNTogb25seSBmb3IgYmFuZCwgb3AgNDogcmVzZXQsIG4gPSAxCisgICAgICogIG9wIDk6IGZvciBhbGwgYmFuZCAoMiBhbnRlbm5hcyksIG9wIDEwOiBvbmUgYmFuZCAoMiBhbnRlbm5hcyksIG4gPSAyCisgICAgICogIG9wIDExOiBmb3IgYWxsIGJhbmQgKG4gYW50ZW5uYXMpLCBvcCAxMjogb25lIGJhbmQgKG4gYW50ZW5uYXMpLCAxIDwgbiA8PSBOUl9NQVhfVFhfUFdSX1JFUV9BTlRfTlVNCisgICAgICovCisgICAga2FsX3VpbnQ4ICAgb3A7CisgICAga2FsX3VpbnQxNiAgYmFuZDsgIC8qPCBCYW5kIGluIGludGVnZXIgZm9ybWF0ICgxIC0gMjU1KSAqLworCisgICAga2FsX3VpbnQ4ICAgcGFyYTE7IC8qPCAwfjI1NSwgdW5pdDogMS84IGRCLCAoMH4zMiBkQikgKi8KKyAgICBrYWxfdWludDggICBwYXJhMjsgLyo8IHJlc2VydmVkICovCisgICAga2FsX3VpbnQ4ICAgcGFyYTM7IC8qPCByZXNlcnZlZCAqLworICAgIGthbF91aW50OCAgIG47ICAgICAvKjwgMX5OUl9NQVhfVFhfUFdSX1JFUV9BTlRfTlVNLCBudW1iZXIgb2YgdmFsaWQgcGFyYW1ldGVycyBpbiBwYXJhbVtdICovCisgICAga2FsX3VpbnQ4ICAgcGFyYW1bTlJfTUFYX1RYX1BXUl9SRVFfQU5UX05VTV07IC8qPCAwfjI1NSwgdW5pdDogMS84IGRCLCAoMH4zMiBkQikgKi8KK30gbmwxX25yX21heF90eF9wd3JfcmVkX3JlcV9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBUTUNfTDFfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvdG1jX2w1X3N0cnVjdC5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi90bWNfbDVfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYwMGVmYwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvdG1jX2w1X3N0cnVjdC5oCkBAIC0wLDAgKzEsMTI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgdG1jX2w1X3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIFZNT0xZCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhlcm1hbCBNYW5hZ2VtZW50IENvbnRyb2xsZXIgSUxNIHN0cnVjdHVyZSBhbmQgaW50ZXJmYWNlIGRlZmluaXRpb24uCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19JTkNfVE1DX0w1X1NUUlVDVF9ICisjZGVmaW5lIF9fSU5DX1RNQ19MNV9TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAidG1jX3N0cnVjdC5oIgorCisvKiBNYWNybyAmIEVudW0gZGVmaW5pdGlvbiAqLworI2RlZmluZSBUTUNfQUNUVUFUT1JfTkFNRV9MRU4gICAgICAgICAgIDQwCisjZGVmaW5lIFRNQ19BQ1RVQVRPUl9VTF9USFJPVFRMRSAgICAgICAgIlVMIFRocm90dGxlXDAiCisjZGVmaW5lIFRNQ19BQ1RVQVRPUl9SRURVQ0VfVFhfUE9XRVIgICAgIjNHNEcgUEFcMCIKKyNkZWZpbmUgVE1DX0FDVFVBVE9SX1JFRFVDRV9OUl9UWF9QT1dFUiAiTlIgUEFcMCIKKyNkZWZpbmUgVE1DX0FDVFVBVE9SX0NDX0NPTlRST0wgICAgICAgICAiQ0MgQ29udHJvbFwwIgorI2RlZmluZSBUTUNfQUNUVUFUT1JfU1dfU0hVVERPV04gICAgICAgICJTVyBTaHV0ZG93blwwIgorI2RlZmluZSBUTUNfQUNUVUFUT1JfRkxJR0hUX01PREUgICAgICAgICJGbGlnaHQgTW9kZVwwIgorCit0eXBlZGVmIHN0cnVjdCBsNWlvX3RtY19hY3R1YXRvcl9udW1fcmVxX3N0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIHN0YXR1c19pZDsKK30gbDVpb190bWNfYWN0dWF0b3JfbnVtX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IGw1aW9fdG1jX2FjdHVhdG9yX251bV9jbmZfc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgc3RhdHVzX2lkOworICAgIGthbF91aW50MzIgYWN0dWF0b3JfbnVtOworICAgIHRtY19yZXFfcmVzdWx0X2VudW0gcmVzdWx0OworfSBsNWlvX3RtY19hY3R1YXRvcl9udW1fY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgbDVpb190bWNfYWN0dWF0b3Jfc3RhdGVfcXVlcnlfcmVxX3N0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIHN0YXR1c19pZDsKKyAgICBrYWxfdWludDMyIGFjdHVhdG9yX2lkOworfSBsNWlvX3RtY19hY3R1YXRvcl9zdGF0ZV9xdWVyeV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBsNWlvX3RtY19hY3R1YXRvcl9zdGF0ZV9xdWVyeV9jbmZfc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgc3RhdHVzX2lkOworICAgIGthbF91aW50MzIgYWN0dWF0b3JfaWQ7CisgICAga2FsX2NoYXIgICBhY3R1YXRvcl9uYW1lW1RNQ19BQ1RVQVRPUl9OQU1FX0xFTl07CisgICAga2FsX3VpbnQzMiB6b25lX2lkOworICAgIGthbF91aW50MzIgbWF4X2x2OworICAgIGthbF91aW50MzIgY3VycmVudF9sdjsKKyAgICBrYWxfdWludDMyIHVzZXJfaW1wYWN0OworICAgIGthbF91aW50MzIgZWZmaWNpZW5jeTsKKyAgICB0bWNfcmVxX3Jlc3VsdF9lbnVtIHJlc3VsdDsKK30gbDVpb190bWNfYWN0dWF0b3Jfc3RhdGVfcXVlcnlfY25mX3N0cnVjdDsKKwordHlwZWRlZiB0bWNfY3RybF9yZXFfc3RydWN0IGw1aW9fdG1jX2FjdHVhdG9yX3NldF9yZXFfc3RydWN0OwordHlwZWRlZiB0bWNfY3RybF9yc3Bfc3RydWN0IGw1aW9fdG1jX2FjdHVhdG9yX3NldF9jbmZfc3RydWN0OworCisjZW5kaWYgLyogX19JTkNfVE1DX0w1X1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3RtY19ucnJjX3N0cnVjdC5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi90bWNfbnJyY19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMThiZWY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi90bWNfbnJyY19zdHJ1Y3QuaApAQCAtMCwwICsxLDEzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE5CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBUTUNfTlJSQ19TVFJVQ1RfSAorI2RlZmluZSBUTUNfTlJSQ19TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgIE1BQ1JPUyAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgVFlQRSBERUZJTklUSU9OUyAmIEVOVU1TICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEVudW1lcmF0aW9uIGlkZW50aWZpZXMgbWF4aW11bSBudW1iZXIgb2YgZG93bmxpbmsgTUlNTyBsYXllcnMgdmFsdWVzLgorICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBOUlJDX01BWF9NSU1PX0xBWUVSU19ETDIgICAgICAgPSAwLAorICAgIE5SUkNfTUFYX01JTU9fTEFZRVJTX0RMNCAgICAgICA9IDEsCisgICAgTlJSQ19NQVhfTUlNT19MQVlFUlNfREw4ICAgICAgID0gMgorfSBucnJjX21heF9taW1vX2xheWVyc19kbF9lbnVtOworCisvKioKKyAqIEVudW1lcmF0aW9uIGlkZW50aWZpZXMgbWF4aW11bSBudW1iZXIgb2YgdXBsaW5rIE1JTU8gbGF5ZXJzIHZhbHVlcy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgTlJSQ19NQVhfTUlNT19MQVlFUlNfVUwxICAgICAgID0gMCwKKyAgICBOUlJDX01BWF9NSU1PX0xBWUVSU19VTDIgICAgICAgPSAxLAorICAgIE5SUkNfTUFYX01JTU9fTEFZRVJTX1VMNCAgICAgICA9IDIKK30gbnJyY19tYXhfbWltb19sYXllcnNfdWxfZW51bTsKKworLyogTVNHX0lEX1RNQ19OUlJDX0FTU0lTVEFOQ0VfSU5GT19TVVBQT1JUX0lORCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgIGlzX3N1cHBvcnRlZDsKK30gdG1jX25ycmNfYXNzaXN0YW5jZV9pbmZvX3N1cHBvcnRfaW5kX3N0cnVjdDsKKworLyogTVNHX0lEX1RNQ19OUlJDX0FTU0lTVEFOQ0VfSU5GT19TRU5EX1JFUSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgIGlzX3NjZWxsc19yZWR1Y3Rpb25fcHJlZmVycmVkOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICBtYXhfc2NlbGxzX2RsOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICBtYXhfc2NlbGxzX3VsOworCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgIGlzX2FnZ3JlZ2F0ZWRfYndfZnIxX3JlZHVjdGlvbl9wcmVmZXJyZWQ7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgICAgIG1heF9hZ2dyZWdhdGVkX2J3X2ZyMV9kbDsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgbWF4X2FnZ3JlZ2F0ZWRfYndfZnIxX3VsOworCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgIGlzX2FnZ3JlZ2F0ZWRfYndfZnIyX3JlZHVjdGlvbl9wcmVmZXJyZWQ7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgICAgIG1heF9hZ2dyZWdhdGVkX2J3X2ZyMl9kbDsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgbWF4X2FnZ3JlZ2F0ZWRfYndfZnIyX3VsOworCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgIGlzX21pbW9fbGF5ZXJzX2ZyMV9yZWR1Y3Rpb25fcHJlZmVycmVkOworICAgIG5ycmNfbWF4X21pbW9fbGF5ZXJzX2RsX2VudW0gICBtYXhfbWltb19sYXllcnNfYndfZnIxX2RsOworICAgIG5ycmNfbWF4X21pbW9fbGF5ZXJzX3VsX2VudW0gICBtYXhfbWltb19sYXllcnNfYndfZnIxX3VsOworCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgIGlzX21pbW9fbGF5ZXJzX2ZyMl9yZWR1Y3Rpb25fcHJlZmVycmVkOworICAgIG5ycmNfbWF4X21pbW9fbGF5ZXJzX2RsX2VudW0gICBtYXhfbWltb19sYXllcnNfYndfZnIyX2RsOworICAgIG5ycmNfbWF4X21pbW9fbGF5ZXJzX3VsX2VudW0gICBtYXhfbWltb19sYXllcnNfYndfZnIyX3VsOworfSB0bWNfbnJyY19hc3Npc3RhbmNlX2luZm9fc2VuZF9yZXFfc3RydWN0OworCisvKiBNU0dfSURfVE1DX05SUkNfQVNTSVNUQU5DRV9JTkZPX1NFTkRfQ05GICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczsKK30gdG1jX25ycmNfYXNzaXN0YW5jZV9pbmZvX3NlbmRfY25mX3N0cnVjdDsKKworLyogTVNHX0lEX1RNQ19OUlJDX0FTU0lTVEFOQ0VfSU5GT19TRU5ESU5HX0FMTE9XRURfSU5EICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCit9IHRtY19ucnJjX2Fzc2lzdGFuY2VfaW5mb19zZW5kaW5nX2FsbG93ZWRfaW5kX3N0cnVjdDsKKworLyogTVNHX0lEX05SUkNfVE1DX05PX09WRVJIRUFUSU5HX0lORCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorfSBucnJjX3RtY19ub19vdmVyaGVhdGluZ19pbmRfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIFZBUklBQkxFUyAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEZVTkNUSU9OIERFQ0xBUkFUSU9OUyAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2VuZGlmIC8qIFRNQ19OUlJDX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3RtY19zdHJ1Y3QuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvdG1jX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3Y2JhZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3RtY19zdHJ1Y3QuaApAQCAtMCwwICsxLDUwNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHRtY19zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBVTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoZXJtYWwgTWFuYWdlbWVudCBDb250cm9sbGVyIElMTSBzdHJ1Y3R1cmUgYW5kIGludGVyZmFjZSBkZWZpbml0aW9uLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19JTkNfVE1DX1NUUlVDVF9ICisjZGVmaW5lIF9fSU5DX1RNQ19TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisKKy8qIE1hY3JvICYgRW51bSBkZWZpbml0aW9uIGZvciBHZW45NyAqLworI2RlZmluZSBNQVhfU1VQUE9SVEVEX0NDX05CICA1CisjZGVmaW5lIE1BWF9CQU5EX05CICAgICAgICAgIE1BWF9TVVBQT1JURURfQ0NfTkIgLyogbWF4LiBzdXBwb3J0ZWQgYmFuZCBudW1iZXIgYXQgc2FtZSB0aW1lIHNob3VsZCBiZSBhbGdpbiBtYXggc3VwcG9ydGVkIENDIG51bWJlciAqLworI2RlZmluZSBNQVhfQ0VMTF9OQiAgICAgICAgICA4CisjZGVmaW5lIFRNQ19DVFJMX01BWF9DR19OVU0gIDIKKworLyogRGVmaW5lIGludmFsaWQgdmFsdWUgKi8KKyNkZWZpbmUgSU5WQUxJRF9TVVBQT1JURURfQ0NfSU5ERVggIE1BWF9TVVBQT1JURURfQ0NfTkIKKyNkZWZpbmUgSU5WQUxJRF9DRUxMX0lOREVYICAgICAgICAgIDB4RkYKKyNkZWZpbmUgSU5WQUxJRF9CQU5EX0lOREVYICAgICAgICAgIDAKKyNkZWZpbmUgVE1DX0lOVkFMSURfTldfU1RBVFVTX0lEICAgIDB4RkYKKwordHlwZWRlZiBlbnVtIHRtY19jdHJsX2NnX2VudW0geworICAgIFRNQ19DVFJMX0NHX05BLCAgICAgLyogbm9uZSAqLworICAgIFRNQ19DVFJMX0NHX01DRywgICAgLyogcmVmZXIgYXMgTUNHICovCisgICAgVE1DX0NUUkxfQ0dfU0NHICAgICAvKiByZWZlciBhcyBTQ0cgKi8KK30gdG1jX2N0cmxfY2dfZW51bTsKKwordHlwZWRlZiBlbnVtIHRtY19jdHJsX2NtZF9lbnVtIHsKKyAgICBUTUNfQ1RSTF9DTURfVEhST1RUTElORyA9IDAsCisgICAgVE1DX0NUUkxfQ01EX0NBX0NUUkwsCisgICAgVE1DX0NUUkxfQ01EX1BBX0NUUkwsCisgICAgVE1DX0NUUkxfQ01EX0NPT0xFUl9MViwKKyAgICBUTUNfQ1RSTF9DTURfQ0VMTCwgICAgICAgICAgICAvKiBNRCBpbnRlcm5hbCB1c2UgOiByZWZlciBhcyBkZWxfY2VsbCAqLworICAgIFRNQ19DVFJMX0NNRF9CQU5ELCAgICAgICAgICAgIC8qIE1EIGludGVybmFsIHVzZSA6IHJlZmVyIGFzIGRlbF9iYW5kICovCisgICAgVE1DX0NUUkxfQ01EX0lOVEVSX0JBTkRfT0ZGLCAgLyogTUQgaW50ZXJuYWwgdXNlIDogc2ltaWxhciB0byBQQV9PRkYgb24gR2VuOTUgKi8KKyAgICBUTUNfQ1RSTF9DTURfQ0FfT0ZGLCAgICAgICAgICAvKiBNRCBpbnRlcm5hbCB1c2UgOiBzaW1pbGFyIHRvIENBX09GRiBvbiBHZW45NSAqLworICAgIFRNQ19DVFJMX0NNRF9TQ0dfT0ZGLCAgICAgICAgIC8qIEZhbGwgYmFjayB0byA0RyAqLworICAgIFRNQ19DVFJMX0NNRF9TQ0dfT04sICAgICAgICAgIC8qIEVuYWJsZWQgNUcgKi8KKyAgICBUTUNfQ1RSTF9DTURfVFhfUE9XRVIsCisgICAgVE1DX0NUUkxfQ01EX0xPV19QT1dFUl9JTkQsCisgICAgVE1DX0NUUkxfQ01EX1NFTEZfQ0NfQ1RSTCwKKyAgICBUTUNfQ1RSTF9DTURfREVGQVVMVAorfSB0bWNfY3RybF9jbWRfZW51bTsKKwordHlwZWRlZiBlbnVtIHRtY19jdHJsX3Jlc3VsdF9lbnVtIHsKKyAgICBUTUNfQ1RSTF9SRVNVTFRfU1VDQ0VTUyA9IDAsCisgICAgVE1DX0NUUkxfUkVTVUxUX1NUQVRVU19JTkRfSURfTUlTTUFUQ0gsCisgICAgVE1DX0NUUkxfUkVTVUxUX01BQ19SRVNFVF9PTkdPSU5HLAorICAgIFRNQ19DVFJMX1JFU1VMVF9GQUlMX0lOQ09SUkVDVF9DTUQsCisgICAgVE1DX0NUUkxfUkVTVUxUX1JFSkVDVCwKKyAgICBUTUNfQ1RSTF9SRVNVTFRfT1RIRVJTCit9IHRtY19jdHJsX3Jlc3VsdF9lbnVtOworCit0eXBlZGVmIGVudW0gdG1jX2N0cmxfbndfc3RhdHVzX2VudW0geworICAgIFRNQ19DVFJMX1NUQVRVU19TRVNTSU9OX0VTVEFCTElTSCA9IDAsCisgICAgVE1DX0NUUkxfU1RBVFVTX1VQREFURSwKKyAgICBUTUNfQ1RSTF9TVEFUVVNfU1BDRUxMX0NIQU5HRSwKKyAgICBUTUNfQ1RSTF9TVEFUVVNfT1RIRVJTCit9IHRtY19jdHJsX253X3N0YXR1c19lbnVtOworCit0eXBlZGVmIGVudW0gdG1jX3Rocm90X2N0cmxfZW51bSB7CisgICAgVE1DX1RIUk9UX0VOQUJMRV9JTVNfRU5BQkxFID0gMCwKKyAgICBUTUNfVEhST1RfRU5BQkxFX0lNU19ESVNBQkxFLAorICAgIFRNQ19USFJPVF9ESVNBQkxFLAorfSB0bWNfdGhyb3RfY3RybF9lbnVtOworCit0eXBlZGVmIGVudW0gdG1jX2NhX2N0cmxfZW51bSB7CisgICAgVE1DX0NBX09OID0gMCwgLyogbGVhdmUgdGhlcm1hbCBjb250cm9sICovCisgICAgVE1DX0NBX09GRiwKK30gdG1jX2NhX2N0cmxfZW51bTsKKwordHlwZWRlZiBlbnVtIHRtY19wYV9jdHJsX2VudW0geworICAgIFRNQ19QQV9BTExfT04gPSAwLCAvKiBsZWF2ZSB0aGVybWFsIGNvbnRyb2wgKi8KKyAgICBUTUNfUEFfT0ZGXzFQQSwKK30gdG1jX3BhX2N0cmxfZW51bTsKKwordHlwZWRlZiBlbnVtIHRtY19jY19jdHJsX2VudW0geworICAgIFRNQ19TRUxGX0NDX0NUUkxfRU5BQkxFRCA9IDAsIC8qIHN0ZXAgYnkgc3RlcCByZW1vdmUgY2MgKi8KKyAgICBUTUNfU0VMRl9DQ19DVFJMX0VOQUJMRURfTUNHX0NBX09GRiwKKyAgICBUTUNfU0VMRl9DQ19DVFJMX0VOQUJMRURfU0NHX0NBX09GRiwKKyAgICBUTUNfU0VMRl9DQ19DVFJMX0VOQUJMRURfQUxMX0NBX09GRiwKKyAgICBUTUNfU0VMRl9DQ19DVFJMX0VOQUJMRURfU0NHX09GRiwKKyAgICBUTUNfU0VMRl9DQ19DVFJMX0VOQUJMRURfTUNHX0NBX09GRl9TQ0dfT0ZGLAorICAgIFRNQ19TRUxGX0NDX0NUUkxfRU5BQkxFRF9MVEVfT05MWSwKKyAgICBUTUNfU0VMRl9DQ19DVFJMX0RJU0FCTEVELAorfSB0bWNfY2NfY3RybF9lbnVtOworCit0eXBlZGVmIGVudW0gdG1jX2Nvb2xlcl9sdl9jdHJsX2VudW0geworICAgIFRNQ19DT09MRVJfTFZfRU5BQkxFID0gMCwKKyAgICBUTUNfQ09PTEVSX0xWX0RJU0FCTEUsCit9IHRtY19jb29sZXJfbHZfY3RybF9lbnVtOworCit0eXBlZGVmIGVudW0gdG1jX2Nvb2xlcl9sdl9lbnVtIHsKKyAgICBUTUNfQ09PTEVSX0xWMCA9IDAsCisgICAgVE1DX0NPT0xFUl9MVjEsCisgICAgVE1DX0NPT0xFUl9MVjIsCisgICAgVE1DX0NPT0xFUl9MVjMsCisgICAgVE1DX0NPT0xFUl9MVjQsCisgICAgVE1DX0NPT0xFUl9MVjUsCisgICAgVE1DX0NPT0xFUl9MVjYsCisgICAgVE1DX0NPT0xFUl9MVjcsCisgICAgVE1DX0NPT0xFUl9MVjgsCisgICAgVE1DX0NPT0xFUl9NQVgKK30gdG1jX2Nvb2xlcl9sdl9lbnVtOworCit0eXBlZGVmIGVudW0gdG1jX253X3N0YXRfZW51bSB7CisgICAgVE1DX05XX1NUQVRfTUNHID0gMCwKKyAgICBUTUNfTldfU1RBVF9TQ0csCisgICAgVE1DX05XX1NUQVRfTUFYX05VTQorfSB0bWNfbndfc3RhdF9lbnVtOworCit0eXBlZGVmIGVudW0gdG1jX2N0cmxfbmwxX2ZycV9lbnVtIHsKKyAgICBUTUNfTlJfRlJFX0ZSMSA9IDAsCisgICAgVE1DX05SX0ZSRV9GUjIsCisgICAgVE1DX05SX0ZSRV9NQVhfTlVNCit9IHRtY19jdHJsX25sMV9mcnFfZW51bTsKKwordHlwZWRlZiBlbnVtIHRtY190eF9wd3JfZXZlbnRfZW51bSB7CisgICAgVE1DX1RXX1BXUl9WT0xUQUdFX0xPV19FVkVOVCA9IDAsCisgICAgVE1DX1RXX1BXUl9MT1dfQkFUVEVSWV9FVkVOVCwKKyAgICBUTUNfVFdfUFdSX09WRVJfQ1VSUkVOVF9FVkVOVCwKKyAgICBUTUNfVFdfUFdSX1JFRFVDRV9PVEhFUl9NQVhfVFhfRVZFTlQsIC8qIHJlc2VydmVkIGZvciByZWR1Y2UgMkcvM0cvNEcvQzJLIG1heCBUWCBwb3dlciBmb3IgY2VydGFpbiB2YWx1ZSAqLworICAgIFRNQ19UV19QV1JfUkVEVUNFX05SX01BWF9UWF9FVkVOVCwgICAgLyogcmVzZXJ2ZWQgZm9yIHJlZHVjZSA1RyBtYXggVFggcG93ZXIgZm9yIGNlcnRhaW4gdmFsdWUgKi8KKyAgICBUTUNfVFdfUFdSX0VWRU5UX01BWF9OVU0KK30gdG1jX2xwb3dlcl9ldmVudF9lbnVtOworCit0eXBlZGVmIGVudW0gdG1jX3R4X3B3cl9zdGF0dXNfbHZfZW51bSB7CisgICAgVE1DX1RYX1BXUl9TVEFUVVNfTFYwID0gMCwKKyAgICBUTUNfVFhfUFdSX1NUQVRVU19MVjEsCisgICAgVE1DX1RYX1BXUl9TVEFUVVNfTFYyLAorICAgIFRNQ19UWF9QV1JfU1RBVFVTX01BWAorfSB0bWNfdHhfcHdyX3N0YXR1c19sdl9lbnVtOworCit0eXBlZGVmIGVudW0gdG1jX292ZXJoZWF0ZWRfcmF0X2VudW0geworICAgIFRNQ19PVkVSSEVBVEVEX0xURSA9IDAsCisgICAgVE1DX09WRVJIRUFURURfTlIsCisgICAgVE1DX09WRVJIRUFURURfTkEsCisgICAgVE1DX09WRVJIRUFURURfTUFYCit9IHRtY19vdmVyaGVhdGVkX3JhdF9lbnVtOworCit0eXBlZGVmIGVudW0gdG1jX2Nvb2xlcl90YmxfZW51bSB7CisgICAgVE1DX1VMX1RIUk9UVExFX0NPT0xFUiA9IDAsCisgICAgVE1DX09USEVSX1JBVF9SRURVQ0VfVFhfQ09PTEVSLAorICAgIFRNQ19OUl9SRURVQ0VfVFhfQ09PTEVSLAorICAgIFRNQ19DQ19DT05UUk9MX0NPT0xFUiwKKyAgICBUTUNfU1dfU0hVVERPV05fQ09PTEVSLAorICAgIFRNQ19GTElIVF9NT0RFX0NPT0xFUiwKKyAgICBUTUNfTUFYX0NPT0xFUgorfSB0bWNfY29vbGVyX3RibF9lbnVtOworCit0eXBlZGVmIGVudW0gdG1jX2N0cmxfcmVxX2VudW0geworICAgIFRNQ19DVFJMX1JFUV9TRVRfQUNUVUFUT1IgPSAwLAorICAgIFRNQ19DVFJMX1JFUV9TRVRfQ09PTEVSLAorICAgIFRNQ19DVFJMX1JFUV9NQVhfTlVNCit9IHRtY19jdHJsX3JlcV9lbnVtOworCit0eXBlZGVmIGVudW0gdG1jX3JlcV9yZXN1bHRfZW51bSB7CisgICAgVE1DX1JFU1VMVF9TVUNDRVNTLAorICAgIFRNQ19SRVNVTFRfRkFJTEVELAorICAgIFRNQ19SRVNVTFRfVU5TVVBQT1JURURfTFYsCisgICAgVE1DX1JFU1VMVF9VTlNVUFBPUlRFRF9BQ1RVQVRPUl9JRCwKKyAgICBUTUNfUkVTVUxUX0w1X0FDVElPTl9TV19TSFVURE9XTl9FTkFCTEVELAorICAgIFRNQ19SRVNVTFRfTDVfQUNUSU9OX1NXX1NIVVRET1dOX0RJU0FCTEVELAorICAgIFRNQ19SRVNVTFRfTDVfQUNUSU9OX0ZMSUdIVF9NT0RFX0VOQUJMRUQsCisgICAgVE1DX1JFU1VMVF9MNV9BQ1RJT05fRkxJR0hUX01PREVfRElTQUJMRUQsCisgICAgVE1DX1JFU1VMVF9NQVgKK30gdG1jX3JlcV9yZXN1bHRfZW51bTsKKwordHlwZWRlZiBlbnVtIHRtY19jdHJsX2xvd19wd3JfZW51bSB7CisgICAgVE1DX0NUUkxfTE9XX1BPV0VSX0xPV19CQVRURVJZX0VWRU5UID0gMCwgIC8qIGJhdHRlcnkgbGVzcyB0aGFuIHRocmVzaG9sZCAoZXggOiAyMCUpICovCisgICAgVE1DX0NUUkxfTE9XX1BPV0VSX1JFQ0hBUkdFX0JBVFRFUllfRVZFTlQsIC8qIGJhdHRlcnkgcmVjaGFyZ2Ugb3ZlciB0aHJlc2hvbGQgKGV4IDogMjUlKSAqLworICAgIFRNQ19DVFJMX0xPV19QT1dFUl9NQVgKK30gdG1jX2N0cmxfbG93X3B3cl9lbnVtOworCit0eXBlZGVmIGVudW0gdG1jX3JlcV9yZWFzb25fZW51bSB7CisgICAgVE1DX09WRVJIRUFURURfU1RBUlQgPSAwLAorICAgIFRNQ19PVkVSSEVBVEVEX0VORCwKKyAgICBUTUNfTE9XX1BPV0VSLAorICAgIFRNQ19SRUNIQVJHRSwKKyAgICBUTUNfUkVRX1JFQVNPTl9NQVgKK30gdG1jX3JlcV9yZWFzb25fZW51bTsKKworLyogU3RydWN0dXJlIGRlZmluaXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IHRtY19jdHJsX2NlbGxfcnRfaW5mb19zdHJ1Y3QgeworICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgZGxfdGhyb3VnaHB1dDsKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgIHVsX3Rocm91Z2hwdXQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBkbF9iYW5kd2lkdGg7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICB1bF9iYW5kd2lkdGg7Cit9IHRtY19jdHJsX2NlbGxfcnRfaW5mb19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHRtY19jdHJsX2NlbGxfaW5mb19zdHJ1Y3QgeworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgY2VsbF9pZHg7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICBpc19zcGVjbGw7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICBpc19ETG9ubHk7Cit9IHRtY19jdHJsX2NlbGxfaW5mb19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHRtY19jdHJsX2JhbmRfaW5mb19zdHJ1Y3QgeworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgYmFuZF9pZDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGNlbGxfaW5mb19pZHhbTUFYX1NVUFBPUlRFRF9DQ19OQl07Cit9IHRtY19jdHJsX2JhbmRfaW5mb19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHRtY19jdHJsX2NnX2luZm9fc3RydWN0IHsKKyAgICB0bWNfY3RybF9jZ19lbnVtICAgICAgICAgICAgICAgIGNnX3R5cGU7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBiYW5kX251bTsKKyAgICB0bWNfY3RybF9iYW5kX2luZm9fc3RydWN0ICAgICAgIGJhbmRbTUFYX0JBTkRfTkJdOworICAgIHRtY19jdHJsX2NlbGxfaW5mb19zdHJ1Y3QgICAgICAgY2VsbFtNQVhfU1VQUE9SVEVEX0NDX05CXTsKKyAgICB0bWNfY3RybF9jZWxsX3J0X2luZm9fc3RydWN0ICAgIGNlbGxfaW5mb1tNQVhfQ0VMTF9OQl07Cit9IHRtY19jdHJsX2NnX2luZm9fc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB0bWNfZW1hY19ud19zdGF0dXNfc3RydWN0IHsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c19pbmRfaWQ7CisgICAgdG1jX2N0cmxfbndfc3RhdHVzX2VudW0gICAgICAgICBzdGF0dXNfY2F1c2U7CisgICAgdG1jX2N0cmxfY2dfaW5mb19zdHJ1Y3QgICAgICAgICBjZWxsX2dyb3VwW1RNQ19DVFJMX01BWF9DR19OVU1dOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfY2VsbDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHNpbV9pZHg7Cit9IHRtY19lbWFjX253X3N0YXR1c19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHRtY19lbWFjX253X3N0YXR1c19pbmRfc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHRtY19lbWFjX253X3N0YXR1c19zdHJ1Y3QgICAgICAgbndfc3RhdHVzOworfSB0bWNfZW1hY19ud19zdGF0dXNfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgdG1jX2VtYWNfdGhlcm1hbF9jb250cm9sX3JlcV9zdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfaW5kX2lkOworICAgIHRtY19jdHJsX2NtZF9lbnVtICAgICAgICAgICAgICAgY3RybF9jbWQ7CisgICAgdG1jX2N0cmxfY2dfZW51bSAgICAgICAgICAgICAgICBjZ190eXBlOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgYmFuZF9udW07CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBmb3JiaWRkZW5fYmFuZFtNQVhfQkFORF9OQl07CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBjZWxsX251bTsKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgIGZvcmJpZGRlbl9jZWxsX2JpdG1hcDsKK30gdG1jX2VtYWNfdGhlcm1hbF9jb250cm9sX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHRtY19lbWFjX3RoZXJtYWxfY29udHJvbF9jbmZfc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHRtY19jdHJsX3Jlc3VsdF9lbnVtICAgICAgICAgICAgcmVzdWx0OworICAgIHRtY19lbWFjX253X3N0YXR1c19zdHJ1Y3QgICAgICAgbndfc3RhdHVzOworfSB0bWNfZW1hY190aGVybWFsX2NvbnRyb2xfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgdG1jX25tYWNfbndfc3RhdHVzX3N0cnVjdHsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c19pbmRfaWQ7CisgICAgdG1jX2N0cmxfbndfc3RhdHVzX2VudW0gICAgICAgICBzdGF0dXNfY2F1c2U7CisgICAgdG1jX2N0cmxfY2dfaW5mb19zdHJ1Y3QgICAgICAgICBjZWxsX2dyb3VwW1RNQ19DVFJMX01BWF9DR19OVU1dOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfY2VsbDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHNpbV9pZHg7Cit9dG1jX25tYWNfbndfc3RhdHVzX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgdG1jX25tYWNfbndfc3RhdHVzX2luZF9zdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICB0bWNfbm1hY19ud19zdGF0dXNfc3RydWN0ICAgICAgIG53X3N0YXR1czsKK30gdG1jX25tYWNfbndfc3RhdHVzX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHRtY19ubWFjX3RoZXJtYWxfY29udHJvbF9yZXFfc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX2luZF9pZDsKKyAgICB0bWNfY3RybF9jbWRfZW51bSAgICAgICAgICAgICAgIGN0cmxfY21kOworICAgIHRtY19jdHJsX2NnX2VudW0gICAgICAgICAgICAgICAgY2dfdHlwZTsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGJhbmRfbnVtOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgZm9yYmlkZGVuX2JhbmRbTUFYX0JBTkRfTkJdOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgY2VsbF9udW07CisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgICAgICBmb3JiaWRkZW5fY2VsbF9iaXRtYXA7Cit9IHRtY19ubWFjX3RoZXJtYWxfY29udHJvbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB0bWNfbm1hY190aGVybWFsX2NvbnRyb2xfY25mX3N0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICB0bWNfY3RybF9yZXN1bHRfZW51bSAgICAgICAgICAgIHJlc3VsdDsKKyAgICB0bWNfbm1hY19ud19zdGF0dXNfc3RydWN0ICAgICAgIG53X3N0YXR1czsKK30gdG1jX25tYWNfdGhlcm1hbF9jb250cm9sX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHRtY19jdHJsX2NvbmZpZworeworICAgIGthbF91aW50OCAgY3RybF9jbWQ7ICAvKiB0bWNfY3RybF9jbWRfZW51bSAqLworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHRtY190aHJvdHRsaW5nIHsKKyAgICAgICAgICAgIGthbF91aW50OCAgdGhyb3R0X2N0cmw7IC8qIHRtY190aHJvdF9jdHJsX2VudW0gKi8KKyAgICAgICAgICAgIGthbF91aW50OCAgYWN0aXZlX3BlcmlvZF8xMDBtczsKKyAgICAgICAgICAgIGthbF91aW50OCAgc3VzcGVuZF9wZXJpb2RfMTAwbXM7CisgICAgICAgIH0gdG1jX3Rocm90dGxpbmc7CisKKyAgICAgICAgc3RydWN0IHRtY19jYV9jdHJsIHsKKyAgICAgICAgICAgIGthbF91aW50OCAgY2FfY3RybDsgICAgLyogdG1jX2NhX2N0cmxfZW51bSAqLworICAgICAgICAgICAga2FsX3VpbnQ4ICByZXNlcnZlZDE7CisgICAgICAgICAgICBrYWxfdWludDggIHJlc2VydmVkMjsKKyAgICAgICAgfSB0bWNfY2FfY3RybDsKKworICAgICAgICBzdHJ1Y3QgdG1jX3BhX2N0cmwgeworICAgICAgICAgICAga2FsX3VpbnQ4ICBwYV9jdHJsOyAgICAvKiB0bWNfcGFfY3RybF9lbnVtICovCisgICAgICAgICAgICBrYWxfdWludDggIHJlc2VydmVkMTsKKyAgICAgICAgICAgIGthbF91aW50OCAgcmVzZXJ2ZWQyOworICAgICAgICB9IHRtY19wYV9jdHJsOworCisgICAgICAgIHN0cnVjdCB0bWNfY29vbGVyX2x2IHsKKyAgICAgICAgICAgIGthbF91aW50OCAgZW5hYmxlOyAgICAgICAgIC8qIHRtY19jb29sZXJfbHZfY3RybF9lbnVtICovCisgICAgICAgICAgICBrYWxfdWludDggIGNvb2xlcl9sdjsgICAgICAvKiB0bWNfY29vbGVyX2x2X2VudW0gKi8KKyAgICAgICAgICAgIGthbF91aW50OCAgb3ZlcmhlYXRlZF9yYXQ7IC8qIHRtY19vdmVyaGVhdGVkX3JhdF9lbnVtICovCisgICAgICAgIH0gdG1jX2Nvb2xlcl9sdjsKKworICAgICAgICBzdHJ1Y3QgdG1jX3R4X3Bvd2VyIHsKKyAgICAgICAgICAgIGthbF91aW50OCAgc3RhdHVzOyAgICAgICAgICAgIC8qIHRtY190eF9wd3Jfc3RhdHVzX2x2X2VudW0gKi8KKyAgICAgICAgICAgIGthbF91aW50OCAgZXZlbnQ7ICAgICAgICAgICAgIC8qIHRtY190eF9wd3JfZXZlbnRfZW51bSAqLworICAgICAgICAgICAga2FsX3VpbnQ4ICByZWR1Y2VfbWF4X3R4X3B3cjsgLyogcmVzZXJ2ZWQgZm9yIHJlZHVjZSBtYXggdHhfcHdlciB2YWx1ZSAodW5pdCA6IDEvOCBkYikgKi8KKyAgICAgICAgfSB0bWNfdHhfcG93ZXI7CisKKyAgICAgICAgc3RydWN0IHRtY19jY19jdHJsIHsKKyAgICAgICAgICAgIGthbF91aW50OCAgY2NfY3RybDsgICAgICAgICAvKiB0bWNfY2NfY3RybF9lbnVtICovCisgICAgICAgICAgICBrYWxfdWludDggIG92ZXJoZWF0ZWRfcmF0OyAgLyogdG1jX292ZXJoZWF0ZWRfcmF0X2VudW0gKi8KKyAgICAgICAgICAgIGthbF91aW50OCAgcmVzZXJ2ZWQxOworICAgICAgICB9IHRtY19jY19jdHJsOworCisgICAgICAgIHN0cnVjdCB0bWNfbG93X3Bvd2VyIHsKKyAgICAgICAgICAgIGthbF91aW50OCAgZXZlbnQ7CS8qIHRtY19jdHJsX2xvd19wd3JfZW51bSAqLworICAgICAgICAgICAga2FsX3VpbnQ4ICByZXNlcnZlZDE7CisgICAgICAgICAgICBrYWxfdWludDggIHJlc2VydmVkMjsKKyAgICAgICAgfSB0bWNfbG93X3Bvd2VyOworICAgIH0gdTsKK30gdG1jX2N0cmxfY29uZmlnOworCit0eXBlZGVmIHN0cnVjdCB0bWNfbndfc3RhdF9zdHJ1Y3QgeworICAgIG1vZHVsZV90eXBlICAgICAgICAgICAgICAgbW9kX2lkOworICAgIHRtY19lbWFjX253X3N0YXR1c19zdHJ1Y3Qgbndfc3RhdDsKK30gdG1jX253X3N0YXRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB0bWNfY29udHJvbF9yZXFfc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgYXBfcmVxX2NtZDsKK30gdG1jX2NvbnRyb2xfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgdG1jX25sMV9ud19zdGF0dXNfaW5kX3N0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIG1heF9kbF9id1tUTUNfTlJfRlJFX01BWF9OVU1dOworICAgIGthbF91aW50MzIgbWF4X2RsX21pbW9fbGF5ZXJbVE1DX05SX0ZSRV9NQVhfTlVNXTsKKyAgICBrYWxfdWludDMyIG1heF91bF9id1tUTUNfTlJfRlJFX01BWF9OVU1dOworICAgIGthbF91aW50MzIgbWF4X3VsX21pbW9fbGF5ZXIgW1RNQ19OUl9GUkVfTUFYX05VTV07Cit9IHRtY19ubDFfbndfc3RhdHVzX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHRtY19sdl9jZmcgeworICAgIGthbF91aW50MzIgem9uZV9pZDsKKyAgICBrYWxfdWludDMyIHVzZXJfaW1wYWN0OworICAgIGthbF91aW50MzIgZWZmaWNpZW5jeTsKKyAgICBrYWxfdWludDMyIHZhbHVlMTsKKyAgICBrYWxfdWludDMyIHZhbHVlMjsKK30gdG1jX2x2X2NmZzsKKwordHlwZWRlZiBzdHJ1Y3QgdG1jX2x2X3RibCB7CisgICAgdG1jX2x2X2NmZyBsdl9jZmdbVE1DX0NPT0xFUl9NQVhdOworfSB0bWNfbHZfdGJsOworCit0eXBlZGVmIHN0cnVjdCB0bWNfY3RybF9yZXFfc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgc3RhdHVzX2lkOworICAgIHRtY19jdHJsX3JlcV9lbnVtIGN0cmxfY21kOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIGthbF91aW50MzIgYWN0dWF0b3JfaWQ7CisgICAgICAgICAgICBrYWxfdWludDMyIGx2OworICAgICAgICB9IHRtY19hY3R1YXRvcl9jZmc7CisKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHRtY19jdHJsX2NvbmZpZyB0bWNfY3RybF9yZXE7CisgICAgICAgIH0gdG1jX2Nvb2xlcl9jZmc7CisgICAgfSB1OworfSB0bWNfY3RybF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB0bWNfY3RybF9yc3Bfc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgc3RhdHVzX2lkOworICAgIHRtY19yZXFfcmVzdWx0X2VudW0gcmVzdWx0OworfSB0bWNfY3RybF9yc3Bfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB0bWNfbDRicHdyX2JhdHRlcnlfc3RhdHVzX3JlcV9zdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfbG93X2JhdHRlcnk7Cit9IHRtY19sNGJwd3JfYmF0dGVyeV9zdGF0dXNfcmVxX3N0cnVjdDsKKworLyoKKyAqIEJpdG1hcCBmb3IgdG1jX2VtYWNfdGhlcm1hbF9jb250cm9sX3JlcSBlbmhhbmNlIGZ1bmN0aW9ucy4KKyAqIE5lZWQgdG8gc3luYyB3aXRoIFdDVC9TRTMvUFMyIFlLLkxpdSBiZWZvcmUgbW9kaWZpY2F0aW9uLgorICovCisjZGVmaW5lIFRNQ19FTkhBTkNFX0ZVTkNfRElTQUJMRV9DQSAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFRNQ19FTkhBTkNFX0ZVTkNfVFhfUE9XRVJfQkFDS09GRiAgICAgICAweDAwMDAwMDAyCisKKy8qCisgKiBMb2NhbCBwYXJhbWV0ZXIgc3RydWN0dXJlIGZvciBNU0dfSURfVE1DX0VNQUNfVEhFUk1BTF9DT05UUk9MX1JFUSBmb3IgR2VuOTMKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorI2lmIGRlZmluZWQoX19NRDkzX18pCisgICAga2FsX2Jvb2wgICAgIG92ZXJoZWF0X2ZsZzsgICAgLyogVE1DIG5vdGlmeSBtb2JpbGUgcGhvbmUgdGVtcGVyYXR1cmUgaXMgdG9vIGhpZ2gsIG5lZWQgdG8gY29vbCBkb3duICovCisgICAga2FsX3VpbnQ4ICAgIGVuaGFuY2VfZnVuY19iaXRtYXA7CisjZWxzZQorICAgIHRtY19jdHJsX2NvbmZpZyB0bWNfY3RybF9jZmc7CisjZW5kaWYKK30gdG1jX2VtYWNfdGhlcm1hbF9jb250cm9sX3JlcTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERITCBsb2dnaW5nIHN0cnVjdHVyZQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8vdHlwZWRlZiB0bWNfZW1hY190aGVybWFsX2NvbnRyb2xfcmVxIHRtY19lbWFjX3RoZXJtYWxfY29udHJvbF9yZXFfc3RydWN0OworCisjZW5kaWYgLyogX19JTkNfVE1DX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3VmcG1fZW1fc3RydWN0LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3VmcG1fZW1fc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYyYTRiNQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvdWZwbV9lbV9zdHJ1Y3QuaApAQCAtMCwwICsxLDcyIEBACisvKiEKKyAqICBAZmlsZSB1ZnBtX3N0cnVjdC5oCisgKiAgQGF1dGhvciBCby1LYWkgSHVhbmcgPGJvLWthaS5oYXVuZ0BtZWRpYXRlay5jb20+CisgKiAgQHZlcnNpb24gMS4wCisgKiAgQHNlY3Rpb24gTElDRU5TRQorICoKKyAqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyAqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorICogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorICogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorICoKKyAqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyAqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorICogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisgKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisgKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyAqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisgKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisgKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyAqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyAqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyAqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisgKgorICogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyAqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyAqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorICogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyAqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyAqCisgKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyAqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyAqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyAqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyAqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyAqCisgKiAgQHNlY3Rpb24gREVTQ1JJUFRJT04KKyAqICBUaGlzIGZpbGUgcHJvdmlkZXMgbWFpbiBkZWZpbml0aW9ucyBvZiB1c2Jjb3JlCisgKi8KKworI2lmbmRlZiBfVUZQTV9FTV9TVFJVQ1RfSAorI2RlZmluZSBfVUZQTV9FTV9TVFJVQ1RfSAorCisjaW5jbHVkZSAidWZwbV9zdHJ1Y3QuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVRlBNIEVOVU0gYW5kIFR5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdWZwbV9lbmFibGVfbWRfZnVuY19yZXFfdCAgICAgICB1ZnBtX2VuYWJsZV9tZF9mYXN0X3BhdGhfcmVxX3N0cnVjdDsKK3R5cGVkZWYgdWZwbV9tZF9mYXN0X3BhdGhfY29tbW9uX3JlcV90ICB1ZnBtX2Rpc2FibGVfbWRfZmFzdF9wYXRoX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIHVmcG1fbWRfZmFzdF9wYXRoX2NvbW1vbl9yZXFfdCAgdWZwbV9kZWFjdGl2YXRlX21kX2Zhc3RfcGF0aF9yZXFfc3RydWN0OwordHlwZWRlZiB1ZnBtX2FjdGl2YXRlX21kX2Z1bmNfcmVxX3QgICAgIHVmcG1fYWN0aXZhdGVfbWRfZmFzdF9wYXRoX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIHVmcG1fbWRfZmFzdF9wYXRoX2NvbW1vbl9yc3BfdCAgdWZwbV9lbmFibGVfbWRfZmFzdF9wYXRoX3JzcF9zdHJ1Y3Q7Cit0eXBlZGVmIHVmcG1fbWRfZmFzdF9wYXRoX2NvbW1vbl9yc3BfdCAgdWZwbV9kaXNhYmxlX21kX2Zhc3RfcGF0aF9yc3Bfc3RydWN0OwordHlwZWRlZiB1ZnBtX2RlYWN0aXZhdGVfbWRfZnVuY19yc3BfdCAgIHVmcG1fZGVhY3RpdmF0ZV9tZF9mYXN0X3BhdGhfcnNwX3N0cnVjdDsKK3R5cGVkZWYgdWZwbV9tZF9mYXN0X3BhdGhfY29tbW9uX3JzcF90ICB1ZnBtX2FjdGl2YXRlX21kX2Zhc3RfcGF0aF9yc3Bfc3RydWN0OwordHlwZWRlZiB1ZnBtX25vdGlmeV9tZF9idXNfZXZlbnRfcmVxX3QgIHVmcG1fbm90aWZ5X21kX2J1c19ldmVudF9yZXFfc3RydWN0OwordHlwZWRlZiB1ZnBtX21kX2Zhc3RfcGF0aF9jb21tb25fcnNwX3QgIHVmcG1fbm90aWZ5X21kX2J1c19ldmVudF9yc3Bfc3RydWN0OwordHlwZWRlZiB1ZnBtX3NlbmRfbWRfZXAwX21zZ190ICAgICAgICAgIHVmcG1fc2VuZF9tZF91c2JfZXAwX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIHVmcG1fc2VuZF9hcF9lcDBfbXNnX3QgICAgICAgICAgdWZwbV9zZW5kX21kX3VzYl9lcDBfcnNwX3N0cnVjdDsKK3R5cGVkZWYgdWZwbV9zZW5kX21kX2VwMF9tc2dfdCAgICAgICAgICB1ZnBtX3NlbmRfbWRfdXNiX2VwMF9pbmRfc3RydWN0OwordHlwZWRlZiB1ZnBtX3NlbmRfYXBfZXAwX21zZ190ICAgICAgICAgIHVmcG1fc2VuZF9hcF91c2JfZXAwX2luZF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgX3VmcG1fZW1fZHVtcF9jdHhfc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHVmcG1fdCB1ZnBtX3Rhc2tfY3R4OworfSB1ZnBtX2VtX2R1bXBfY3R4X3N0cnVjdDsKKworI2VuZGlmICAvLyBfVUZQTV9NQUlOX0gKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi91ZnBtX2VudW0uaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvdWZwbV9lbnVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyZDNkZAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvdWZwbV9lbnVtLmgKQEAgLTAsMCArMSw4NCBAQAorLyohCisgKiAgQGZpbGUgdWZwbV9lbnVtLmgKKyAqICBAYXV0aG9yIEJvLUthaSBIdWFuZyA8Ym8ta2FpLmhhdW5nQG1lZGlhdGVrLmNvbT4KKyAqICBAdmVyc2lvbiAxLjAKKyAqICBAc2VjdGlvbiBMSUNFTlNFCisgKgorICogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorICogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisgKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisgKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisgKgorICogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworICogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisgKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyAqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyAqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorICogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyAqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyAqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorICogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworICogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworICogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyAqCisgKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorICogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorICogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisgKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworICogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorICoKKyAqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorICogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorICogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorICogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorICogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorICoKKyAqICBAc2VjdGlvbiBERVNDUklQVElPTgorICogIFRoaXMgZmlsZSBwcm92aWRlcyBtYWluIGRlZmluaXRpb25zIG9mIHVzYmNvcmUKKyAqLworCisjaWZuZGVmIF9VRlBNX0VOVU1fSAorI2RlZmluZSBfVUZQTV9FTlVNX0gKKworI2luY2x1ZGUgImhpZl9td19tc2dpZC5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVUZQTSBFTlVNIGFuZCBUeXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBVRlBNIHN0YXRlIG1hY2hpbmUgCit0eXBlZGVmIGVudW0gX3VmcG1fZnVuY19zdGF0ZSB7CisgICAgVUZQTV9GVU5DX1NNX1VOSU5JVCAgICA9ICAgMCwKKyAgICBVRlBNX0ZVTkNfU01fREVBQ1RJVkFURSwKKyAgICBVRlBNX0ZVTkNfU01fQUNUSVZBVEUsCit9IHVmcG1fZnVuY19zdGF0ZV9lOworCit0eXBlZGVmIGVudW0gX3VmcG1fdXNiX3N0YXRlIHsKKyAgICBVRlBNX1VTQl9TTV9SRVNFVCAgID0gICAwLAorICAgIFVGUE1fVVNCX1NNX0NPTkZJRywKK30gdWZwbV91c2Jfc3RhdGVfZTsKKworLy8gVUZQTSBmdW5jdGlvbiBldmVudHMKK3R5cGVkZWYgZW51bSB1ZnBtX3VzYmNsYXNzX25vdGlmeSB7CisgICAgVUZQTV9VU0JDTEFTU19OT1RJRllfTk9ORUVEID0gICAwLAorICAgIFVGUE1fVVNCQ0xBU1NfTk9USUZZX1RPX1JFU0VULAorICAgIFVGUE1fVVNCQ0xBU1NfTk9USUZZX1RPX0RFVEFDSEVELAorICAgIFVGUE1fVVNCQ0xBU1NfTk9USUZZX1RPX0NPTkZJRywKK30gdWZwbV91c2JjbGFzc19ub3RpZnlfZTsKKwordHlwZWRlZiBlbnVtIF91ZnBtX2Z1bmNfbW9kZSB7CisgICAgVUZQTV9GVU5DX01PREVfVEVUSEVSICAgPSAgIDAsCisgICAgVUZQTV9GVU5DX01PREVfTE9HLAorICAgIFVGUE1fRlVOQ19NT0RFX01BWF9OVU0sCit9IHVmcG1fZnVuY19tb2RlX2U7CisKK3R5cGVkZWYgZW51bSBfdWZwbV9idXNfc3RhdGUgeworICAgIFVGUE1fQlVTX1NUQVRFX1NVU1BFTkQgID0gICAwLAorICAgIFVGUE1fQlVTX1NUQVRFX1JFU1VNRSwKKyAgICBVRlBNX0JVU19TVEFURV9SRVNFVCwKK30gdWZwbV9idXNfc3RhdGVfZTsKKworI2VuZGlmICAvLyBfVUZQTV9FTlVNX0gKKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi91ZnBtX2lmLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3VmcG1faWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmRiOWIzCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi91ZnBtX2lmLmgKQEAgLTAsMCArMSw0NyBAQAorLyohCisgKiAgQGZpbGUgdWZwbV9pZi5oCisgKiAgQGF1dGhvciBCby1LYWkgSHVhbmcgPGJvLWthaS5oYXVuZ0BtZWRpYXRlay5jb20+CisgKiAgQHZlcnNpb24gMS4wCisgKiAgQHNlY3Rpb24gTElDRU5TRQorICoKKyAqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyAqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorICogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorICogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorICoKKyAqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyAqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorICogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisgKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisgKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyAqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisgKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisgKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyAqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyAqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyAqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisgKgorICogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyAqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyAqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorICogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyAqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyAqCisgKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyAqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyAqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyAqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyAqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyAqCisgKiAgQHNlY3Rpb24gREVTQ1JJUFRJT04KKyAqICBUaGlzIGZpbGUgcHJvdmlkZXMgaW50ZXJmYWNlIG9mIG5tdSAoIG5ldHdvcmsgbWFuYWdlbWVudCB1bml0ICkKKyAqLworCisjaWZuZGVmIF9VRlBNX0lGX0gKKyNkZWZpbmUgX1VGUE1fSUZfSAorCitrYWxfYm9vbCB1ZnBtX2RobF9xdWVyeV9zdXBwb3J0KCk7CisKKyNlbmRpZiAgLy8gX1VGUE1fSUZfSAorCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3VmcG1fc3RydWN0LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3VmcG1fc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzNTRlYgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvdWZwbV9zdHJ1Y3QuaApAQCAtMCwwICsxLDI0MSBAQAorLyohCisgKiAgQGZpbGUgdWZwbV9zdHJ1Y3QuaAorICogIEBhdXRob3IgQm8tS2FpIEh1YW5nIDxiby1rYWkuaGF1bmdAbWVkaWF0ZWsuY29tPgorICogIEB2ZXJzaW9uIDEuMAorICogIEBzZWN0aW9uIExJQ0VOU0UKKyAqCisgKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisgKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyAqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyAqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyAqCisgKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisgKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyAqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorICogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorICogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisgKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorICogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisgKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisgKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisgKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorICoKKyAqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisgKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisgKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyAqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisgKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisgKgorICogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisgKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisgKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisgKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisgKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisgKgorICogIEBzZWN0aW9uIERFU0NSSVBUSU9OCisgKiAgVGhpcyBmaWxlIHByb3ZpZGVzIG1haW4gZGVmaW5pdGlvbnMgb2YgdXNiY29yZQorICovCisKKyNpZm5kZWYgX1VGUE1fU1RSVUNUX0gKKyNkZWZpbmUgX1VGUE1fU1RSVUNUX0gKKworI2luY2x1ZGUgImhpZl9td19tc2dpZC5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisjaW5jbHVkZSAidWZwbV9lbnVtLmgiCisjaW5jbHVkZSAiaXBjX21zZ3N2Y19tc2dpZC5oIgorI2luY2x1ZGUgImNjY2lfaXBjX2lmLmgiCisjaW5jbHVkZSAibXdfc2FwLmgiCisjaW5jbHVkZSAidWZwbV91c2Jfc3RydWN0LmgiCisKKyNkZWZpbmUgVUZQTV9VU0JfTUFQX01BWF9TSVpFIDgKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVRlBNIEVOVU0gYW5kIFR5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHVuaW9uIF91ZnBtX2Z1bmNfYWN0aXZhdGlvbl9pbmZvIHsKKyAgICB0ZXRoZXJpbmdfYWN0aXZhdGVfbWV0YV9pbmZvX3QgdGV0aGVyaW5nX2luZm87CisgICAgbG9nZ2luZ19hY3RpdmF0ZV9tZXRhX2luZm9fdCBsb2dnaW5nX2luZm87Cit9IHVmcG1fZnVuY19hY3RpdmF0aW9uX2luZm9fdDsKKwordHlwZWRlZiB1bmlvbiBfdWZwbV9mdW5jX2RlYWN0aXZhdGlvbl9pbmZvIHsKKyAgICB0ZXRoZXJpbmdfZGVhY3RpdmF0ZV9tZXRhX2luZm9fdCB0ZXRoZXJpbmdfaW5mbzsKKyAgICBsb2dnaW5nX2RlYWN0aXZhdGVfbWV0YV9pbmZvX3QgbG9nZ2luZ19pbmZvOworfSB1ZnBtX2Z1bmNfZGVhY3RpdmF0aW9uX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3VmcG1fdXNiX3Byb3BlcnR5IHsKKyAgICBrYWxfYm9vbCBpc1N1cHBvcnQ7CisgICAgdWZwbV9mdW5jX3N0YXRlX2Ugc3RhdGU7CisgICAgdWZwbV91c2JfbWFwcGluZ190IG1hcFRhYmxlW1VGUE1fVVNCX01BUF9NQVhfU0laRV07CisgICAgdWZwbV9mdW5jX2FjdGl2YXRpb25faW5mb190IGFjdGl2YXRlX21ldGFfaW5mbzsKKyAgICB1ZnBtX2Z1bmNfZGVhY3RpdmF0aW9uX2luZm9fdCBkZWFjdGl2YXRlX21ldGFfaW5mbzsKK30gdWZwbV91c2JfcHJvcGVydHlfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3VmcG1fbXB1X2luZm8geworICAgIGthbF91aW50OCBhcFVzYkRvbWFpbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFQIFVTQiBNUFUgZG9tYWluIElECisgICAga2FsX3VpbnQ4IG1kQ2xkbWFEb21haW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTUQgQ0xETUEgTVBVIGRvbWFpbiBJRAorICAgIGthbF91aW50OCByZXNlcnZlZFs2XTsKKyAgICBrYWxfdWludDY0IG1lbUJhbmswQmFzZUFkZHI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNZW1vcnkgYmFuazAgYmFzZSBhZGRyZXNzCisgICAga2FsX3VpbnQ2NCBtZW1CYW5rMFNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWVtb3J5IGJhbmswIHNpemUKKyAgICBrYWxfdWludDY0IG1lbUJhbms0QmFzZUFkZHI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNZW1vcnkgYmFuazQgYmFzZSBhZGRyZXNzCisgICAga2FsX3VpbnQ2NCBtZW1CYW5rNFNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWVtb3J5IGJhbms0IHNpemUKK30gdWZwbV9tcHVfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBfdWZwbV9tZF9mYXN0X3BhdGhfY29tbW9uX3JlcSB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbW9kZTsKKyAgICBrYWxfdWludDggcmVzZXJ2ZWRbM107Cit9IHVmcG1fbWRfZmFzdF9wYXRoX2NvbW1vbl9yZXFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3VmcG1fbWRfZmFzdF9wYXRoX2NvbW1vbl9yc3AgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG1vZGU7CisgICAga2FsX3VpbnQ4IHJlc3VsdDsgLy8gYm9vbAorICAgIGthbF91aW50OCByZXNlcnZlZFsyXTsKK30gdWZwbV9tZF9mYXN0X3BhdGhfY29tbW9uX3JzcF90OworCit0eXBlZGVmIHN0cnVjdCBfdWZwbV9tZF9mYXN0X3BhdGhfY29tbW9uX2luZCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbW9kZTsKKyAgICBrYWxfdWludDggcmVzZXJ2ZWRbM107Cit9IHVmcG1fbWRfZmFzdF9wYXRoX2NvbW1vbl9pbmRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3VmcG1fbm90aWZ5X21kX2J1c19ldmVudF9yZXEgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHN0YXRlOworICAgIGthbF91aW50OCByZXNlcnZlZFszXTsKK30gdWZwbV9ub3RpZnlfbWRfYnVzX2V2ZW50X3JlcV90OworCit0eXBlZGVmIHN0cnVjdCBfdWZwbV9hY3RpdmF0ZV9tZF9mdW5jX3JlcSB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbW9kZTsKKyAgICBrYWxfdWludDggYWRkcmVzczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVU0IgYWRkcmVzcworICAgIGthbF91aW50OCBjb25maWd1cmF0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVTQiBjb25maWd1cmF0b24gbnVtYmVyCisgICAga2FsX3VpbnQ4IHNwZWVkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVVNCIDIuMC8zLjAKKyAgICB1ZnBtX3VzYl9tYXBwaW5nX3QgYXBfdXNiX21hcFtVRlBNX1VTQl9NQVBfTUFYX1NJWkVdOyAgICAgICAvLyBBUCByZWxlYXNlZCBJRi9FUAorICAgIHRldGhlcmluZ19hY3RpdmF0ZV9tZXRhX2luZm9fdCB0ZXRoZXJpbmdfbWV0YV9pbmZvOyAgICAgICAgIC8vIHRldGhlcmluZyBtZXRhIGRhdGEKKyAgICBsb2dnaW5nX2FjdGl2YXRlX21ldGFfaW5mb190IGxvZ2dpbmdfbWV0YV9pbmZvOyAgICAgICAgICAgICAvLyBsb2dnaW5nIG1ldGEgZGF0YQorfSB1ZnBtX2FjdGl2YXRlX21kX2Z1bmNfcmVxX3Q7CisKK3R5cGVkZWYgc3RydWN0IF91ZnBtX2VuYWJsZV9tZF9mdW5jX3JlcSB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbW9kZTsKKyAgICBrYWxfdWludDggdmVyc2lvbjsKKyAgICBrYWxfdWludDggcmVzZXJ2ZWRbMl07CisgICAgdWZwbV9tcHVfaW5mb190IG1wdUluZm87Cit9IHVmcG1fZW5hYmxlX21kX2Z1bmNfcmVxX3Q7CisKK3R5cGVkZWYgc3RydWN0IF91ZnBtX3NlbmRfbWRfZXAwX21zZyB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbW9kZTsKKyAgICBrYWxfdWludDggcmVzZXJ2ZWRbM107CisgICAga2FsX3VpbnQ4IHBCdWZmZXJbMTAyNF07IC8vaGlmdXNiX3NldHVwX3BhY2tldF90IHBhY2tldDsKK30gdWZwbV9zZW5kX21kX2VwMF9tc2dfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3VmcG1fZW5hYmxlX21kX2Z1bmNfcnNwIHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBtb2RlOworICAgIGthbF91aW50OCByZXN1bHQ7IC8vIGJvb2wKKyAgICBrYWxfdWludDggdmVyc2lvbjsKKyAgICBrYWxfdWludDggcmVzZXJ2ZWQ7Cit9IHVmcG1fZW5hYmxlX21kX2Z1bmNfcnNwX3Q7CisKK3R5cGVkZWYgc3RydWN0IF91ZnBtX2RlYWN0aXZhdGVfbWRfZnVuY19yc3AgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG1vZGU7CisgICAga2FsX3VpbnQ4IHJlc3VsdDsgLy8gYm9vbAorICAgIGthbF91aW50OCByZXNlcnZlZFsyXTsKKyAgICB0ZXRoZXJpbmdfZGVhY3RpdmF0ZV9tZXRhX2luZm9fdCB0ZXRoZXJpbmdfbWV0YV9pbmZvOworICAgIGxvZ2dpbmdfZGVhY3RpdmF0ZV9tZXRhX2luZm9fdCBsb2dnaW5nX21ldGFfaW5mbzsKK30gdWZwbV9kZWFjdGl2YXRlX21kX2Z1bmNfcnNwX3Q7CisKK3R5cGVkZWYgc3RydWN0IF91ZnBtX3QgeworICAgIC8vIFVTQiBwcm9wZXJ0aWVzCisgICAgdWZwbV91c2JfcHJvcGVydHlfdCB1ZnBtX3VzYl9wcm9wZXJ0eVtVRlBNX0ZVTkNfTU9ERV9NQVhfTlVNXTsKKworICAgIC8vIEZTTSBmb3IgVVNCIGRhdGEgcGF0aAorICAgIHVmcG1fdXNiX3N0YXRlX2UgdWZwbV91c2Jfc207CisKKyAgICAvLyBVU0IgYnVzIHN0YXRlCisgICAgdWZwbV9idXNfc3RhdGVfZSB1ZnBtX2J1c19zdGF0ZTsKKworICAgIC8vIE1QVSBpbmZvcm1hdGlvbgorICAgIHVmcG1fbXB1X2luZm9fdCB1ZnBtX21wdV9pbmZvOworCisgICAgLy8gVVNCIEVQIGNhY2hlIHRhYmxlIGZvciBtYXBwaW5nIHNwZWVkLXVwLiB1ZnBtX2VwX21hcHBpbmdfY2FjaGVfdGxiWzBdW2ldIGZvciBFUCBJTiwgdWZwbV9lcF9tYXBwaW5nX2NhY2hlX3RsYlsxXVtpXSBmb3IgRVAgT1VUCisgICAga2FsX3VpbnQ4IHVmcG1fZXBfbWFwcGluZ19jYWNoZV90bGJbMl1bVUZQTV9VU0JfTUFQX01BWF9TSVpFXTsKKworICAgIC8vIEw0QyBNU0cgZmxhZworICAgIGthbF9ib29sIGlzX2w0Y19tc2c7CisKKyAgICAvLyBMNEMgTVNHIHNvdXJjZSBJRAorICAgIGthbF91aW50OCBsNGNfc3JjX2lkOworCit9IHVmcG1fdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMNEMgYW5kIFVGUE0gU3RydWN0dXJlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdCBfbDRjX3VmcG1fYWN0aXZhdGVfbWRfZmFzdF9wYXRoX3JlcSB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbW9kZTsKKyAgICBrYWxfdWludDggc3JjX2lkOyAvLyBsNGMgc291cmNlIElECisgICAga2FsX3VpbnQ4IHJlc2VydmVkWzJdOworfSBsNGNfdWZwbV9hY3RpdmF0ZV9tZF9mYXN0X3BhdGhfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2w0Y191ZnBtX2VuYWJsZV9tZF9mYXN0X3BhdGhfcmVxIHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBtb2RlOworICAgIGthbF91aW50OCBzcmNfaWQ7IC8vIGw0YyBzb3VyY2UgSUQKKyAgICBrYWxfdWludDggcmVzZXJ2ZWRbMl07Cit9IGw0Y191ZnBtX2VuYWJsZV9tZF9mYXN0X3BhdGhfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2w0Y191ZnBtX2RlYWN0aXZhdGVfbWRfZmFzdF9wYXRoX3JlcSB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbW9kZTsKKyAgICBrYWxfdWludDggc3JjX2lkOyAvLyBsNGMgc291cmNlIElECisgICAga2FsX3VpbnQ4IHJlc2VydmVkWzJdOworfSBsNGNfdWZwbV9kZWFjdGl2YXRlX21kX2Zhc3RfcGF0aF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfbDRjX3VmcG1fZGlzYWJsZV9tZF9mYXN0X3BhdGhfcmVxIHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBtb2RlOworICAgIGthbF91aW50OCBzcmNfaWQ7IC8vIGw0YyBzb3VyY2UgSUQKKyAgICBrYWxfdWludDggcmVzZXJ2ZWRbMl07Cit9IGw0Y191ZnBtX2Rpc2FibGVfbWRfZmFzdF9wYXRoX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF9sNGNfdWZwbV9kZWFjdGl2YXRlX21kX2Zhc3RfcGF0aF9jbmZ7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbW9kZTsKKyAgICBrYWxfdWludDggcmVzdWx0OyAvLyBib29sCisgICAga2FsX3VpbnQ4IHNyY19pZDsgLy8gbDRjIHNvdXJjZSBJRAorICAgIGthbF91aW50OCByZXNlcnZlZFsxXTsKK30gbDRjX3VmcG1fZGVhY3RpdmF0ZV9tZF9mYXN0X3BhdGhfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2w0Y191ZnBtX2FjdGl2YXRlX21kX2Zhc3RfcGF0aF9jbmZ7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbW9kZTsKKyAgICBrYWxfdWludDggcmVzdWx0OyAvLyBib29sCisgICAga2FsX3VpbnQ4IHNyY19pZDsgLy8gbDRjIHNvdXJjZSBJRAorICAgIGthbF91aW50OCByZXNlcnZlZFsxXTsKK30gbDRjX3VmcG1fYWN0aXZhdGVfbWRfZmFzdF9wYXRoX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF9sNGNfdWZwbV9kaXNhYmxlX21kX2Zhc3RfcGF0aF9jbmZ7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbW9kZTsKKyAgICBrYWxfdWludDggcmVzdWx0OyAvLyBib29sCisgICAga2FsX3VpbnQ4IHNyY19pZDsgLy8gbDRjIHNvdXJjZSBJRAorICAgIGthbF91aW50OCByZXNlcnZlZFsxXTsKK30gbDRjX3VmcG1fZGlzYWJsZV9tZF9mYXN0X3BhdGhfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2w0Y191ZnBtX2VuYWJsZV9tZF9mYXN0X3BhdGhfY25meworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG1vZGU7CisgICAga2FsX3VpbnQ4IHJlc3VsdDsgLy8gYm9vbAorICAgIGthbF91aW50OCBzcmNfaWQ7IC8vIGw0YyBzb3VyY2UgSUQKKyAgICBrYWxfdWludDggcmVzZXJ2ZWRbMV07Cit9IGw0Y191ZnBtX2VuYWJsZV9tZF9mYXN0X3BhdGhfY25mX3N0cnVjdDsKKworI2VuZGlmICAvLyBfVUZQTV9TVFJVQ1RfSAorCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvaGlmL3VmcG1fdXNiX3N0cnVjdC5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi91ZnBtX3VzYl9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGJmNmU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi91ZnBtX3VzYl9zdHJ1Y3QuaApAQCAtMCwwICsxLDEyNCBAQAorLyohCisgKiAgQGZpbGUgdWZwbV9zdHJ1Y3QuaAorICogIEBhdXRob3IgQm8tS2FpIEh1YW5nIDxiby1rYWkuaGF1bmdAbWVkaWF0ZWsuY29tPgorICogIEB2ZXJzaW9uIDEuMAorICogIEBzZWN0aW9uIExJQ0VOU0UKKyAqCisgKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisgKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyAqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyAqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyAqCisgKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisgKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyAqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorICogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorICogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisgKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorICogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisgKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisgKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisgKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorICoKKyAqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisgKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisgKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyAqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisgKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisgKgorICogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisgKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisgKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisgKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisgKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisgKgorICogIEBzZWN0aW9uIERFU0NSSVBUSU9OCisgKiAgVGhpcyBmaWxlIHByb3ZpZGVzIG1haW4gZGVmaW5pdGlvbnMgb2YgdXNiY29yZQorICovCisKKyNpZm5kZWYgX1VGUE1fVVNCX1NUUlVDVF9ICisjZGVmaW5lIF9VRlBNX1VTQl9TVFJVQ1RfSAorCisjaW5jbHVkZSAiaGlmX213X21zZ2lkLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJpcGNfbXNnc3ZjX21zZ2lkLmgiCisjaW5jbHVkZSAibXdfc2FwLmgiCisjaW5jbHVkZSAidWZwbV9lbnVtLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGVodGVyaW5nIFJORElTIERhdGEgU3RydWN0dXJlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdCBfdGV0aGVyaW5nX25ldF9zdGF0c19zIHsKKyAgICBrYWxfdWludDY0IHJ4X3BhY2tldHM7ICAgICAgLy8gVG90YWwgcGFja2V0cyByZWNlaXZlZAorICAgIGthbF91aW50NjQgdHhfcGFja2V0czsgICAgICAvLyBUb3RhbCBwYWNrZXRzIHRyYW5zbWl0dGVkCisgICAga2FsX3VpbnQ2NCByeF9lcnJvcnM7ICAgICAgIC8vIEJhZCBwYWNrZXRzIHJlY2VpdmVkCisgICAga2FsX3VpbnQ2NCB0eF9lcnJvcnM7ICAgICAgIC8vIFBhY2tldCB0cmFuc21pdCBwcm9ibGVtcworICAgIGthbF91aW50NjQgcnhfZHJvcHBlZDsgICAgICAvLyBObyBzcGFjZSBpbiBMaW51eCBidWZmZXJzCisgICAga2FsX3VpbnQ2NCB0eF9kcm9wcGVkOyAgICAgIC8vIE5vIHNwYWNlIGF2YWlsYWJsZSBpbiBMaW51eAorICAgIGthbF91aW50NjQgcnhfZnJhbWVfZXJyb3JzOyAvLyBSZWN2J2QgZnJhbWUgYWxpZ25tZW50IGVycm9yCit9IHRldGhlcmluZ19uZXRfc3RhdHNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3RldGhlcmluZ19hY3RpdmF0ZV9tZXRhX2luZm8geworICAgIGthbF91aW50MzIgaW5pdF9tc2dfbWF4X3RyYW5zZmVyX3NpemU7CisgICAga2FsX3VpbnQzMiBpbml0X2NtcGx0X21heF9wYWNrZXRzX3Blcl90cmFuc2ZlcjsKKyAgICBrYWxfdWludDMyIGluaXRfY21wbHRfbWF4X3RyYW5zZmVyX3NpemU7CisgICAga2FsX3VpbnQzMiBpbml0X2NtcGx0X3BhY2tldF9hbGlnbm1lbnRfZmFjdG9yOworICAgIGthbF91aW50OCBob3N0X21hY19hZGRyWzZdOworICAgIGthbF91aW50OCByZXNlcnZlZDFbMl07CisgICAga2FsX3VpbnQ4IGRldmljZV9tYWNfYWRkcls2XTsKKyAgICBrYWxfdWludDggcmVzZXJ2ZWQyWzJdOworICAgIHRldGhlcmluZ19uZXRfc3RhdHNfdCBuZXRfc3RhdHM7Cit9IHRldGhlcmluZ19hY3RpdmF0ZV9tZXRhX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3RldGhlcmluZ19kZWFjdGl2YXRlX21ldGFfaW5mb190IHsKKyAgICB0ZXRoZXJpbmdfbmV0X3N0YXRzX3QgbmV0X3N0YXRzOworfSB0ZXRoZXJpbmdfZGVhY3RpdmF0ZV9tZXRhX2luZm9fdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMb2dnaW5nIEFDTSBEYXRhIFN0cnVjdHVyZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCBfbG9nZ2luZ19hY3RpdmF0ZV9tZXRhX2luZm8geworICAgIGthbF91aW50OCByZXNlcnZlZDFbOF07ICAKK30gbG9nZ2luZ19hY3RpdmF0ZV9tZXRhX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2xvZ2dpbmdfZGVhY3RpdmF0ZV9tZXRhX2luZm9fdCB7CisgICAga2FsX3VpbnQ4IHJlc2VydmVkMVs4XTsKK30gbG9nZ2luZ19kZWFjdGl2YXRlX21ldGFfaW5mb190OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVGUE0gRnVuY3Rpb24gQ29tbW9uIERhdGEgU3RydWN0dXJlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIDAgCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKworI2RlZmluZSBFUDBfTVNHX0RBVEFfQlVGX1NJWkUgIDEwMjQKKyNkZWZpbmUgRVAwX01TR19JTlRSX0JVRl9TSVpFICA2NAordHlwZWRlZiBzdHJ1Y3QgX3VmcG1fc2VuZF9hcF9lcDBfbXNnIHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBtb2RlOworICAgIGthbF91aW50OCByZXNlcnZlZFszXTsKKyAgICBrYWxfdWludDMyIGVwMF9kYXRhX2xlbjsKKyAgICBrYWxfdWludDggZXAwQnVmZmVyW0VQMF9NU0dfREFUQV9CVUZfU0laRV07CisgICAga2FsX3VpbnQzMiBpbnRfZGF0YV9sZW47CisgICAga2FsX3VpbnQ4IGludEJ1ZmZlcltFUDBfTVNHX0lOVFJfQlVGX1NJWkVdOworfSB1ZnBtX3NlbmRfYXBfZXAwX21zZ190OworCit0eXBlZGVmIHN0cnVjdCBfdWZwbV91c2JfbWFwcGluZyB7CisgICAga2FsX3VpbnQ4IHR5cGU7CisgICAga2FsX3VpbnQ4IG1hcDsKKyAgICBrYWxfdWludDE2IG1heFBrdFNpemU7ICAvLyBNYXggcGFja2V0IHNpemUgb2YgdGhlIGVuZHBvaW50CisgICAga2FsX3VpbnQzMiBxdWV1ZV9jb25maWc7ICAgIC8vIFFNVSBxdWV1ZSBjb25maWd1cmF0aW9uIGZvciBNRCBVU0IgZHJpdmVyCisgICAga2FsX3VpbnQ4IGZpZm9fbjsKK30gdWZwbV91c2JfbWFwcGluZ190OworCisjZW5kaWYgIC8vIF9VRlBNX1VTQl9ICisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvdXNiY19jdXN0b20uaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvdXNiY19jdXN0b20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGU5MjkxCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi91c2JjX2N1c3RvbS5oCkBAIC0wLDAgKzEsMzQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgIHVzYmNfY3VzdG9tLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgICBUaGlzIGZpbGUgaW50ZW5kcyBmb3IgdXNiIGN1c3RvbWl6YXRpb24gcGFyYW1ldGVyIGRlZmluaXRpb24KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9VU0JDX0NVU1RPTV9IXworI2RlZmluZSBfVVNCQ19DVVNUT01fSF8KKworI2luY2x1ZGUgInVzYmNfY3VzdG9tX2RlZi5oIgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisKKy8qICAgICAKKyAgICAgICBTYW1wbGUgRGlhZ3JhbSB0byBpbGx1c3RyYXRlIHRoZSBjb21iaW5hdGlvbiBvZiBVU0IgRGV2IFBhcmFtCisKKyAgICAgICBVU0IgRGV2IFBhcmFtCisgICAgICAgICAgICAgfAorICAgICAgICAgICAgIHwtLSBVU0IgTW9kZSAxIChNU0QpCisgICAgICAgICAgICAgfCAgICAgIHwKKyAgICAgICAgICAgICB8ICAgICAgfC0tIFVTQiBDZmcxCisgICAgICAgICAgICAgfCAgICAgICAgICAgICB8CisgICAgICAgICAgICAgfCAgICAgICAgICAgICB8LS0gVVNCIGNsYXNzIDEgKE1TKQorICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICB8LS0gVVNCIE1vZGUgMgorICAgICAgICAgICAgIHwgICAgIC4uLgorICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICB8LS0gVVNCIE1vZGUgMworICAgICAgICAgICAgIHwgICAgICB8CisgICAgICAgICAgICAgfCAgICAgIHwtLSBVU0IgQ2ZnIDEKKyAgICAgICAgICAgICB8ICAgICAgfCAgICAgIHwKKyAgICAgICAgICAgICB8ICAgICAgfCAgICAgIHwtLSBVU0IgY2xhc3MgMSAoTVMpCisgICAgICAgICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgICAgCisgICAgICAgICAgICAgfCAgICAgIHwgICAgICB8LS0gVVNCIGNsYXNzIDIgKEFDTTIpCisgICAgICAgICAgICAgfCAgICAgIHwgICAgICB8CisgICAgICAgICAgICAgfCAgICAgIHwgICAgICB8LS0gVVNCIGNsYXNzIDMgKFJORElTKQorICAgICAgICAgICAgIHwgICAgICB8CisgICAgICAgICAgICAgfCAgICAgIHwtLSBVU0IgQ2ZnIDIKKyAgICAgICAgICAgICB8ICAgICAgfAorICAgICAgICAgICAgIHwgICAgICB8LS0gVVNCIENmZyAzCisgICAgICAgICAgICAgfAorICAgICAgICAgICAgIHwtLSBVU0IgTW9kZSA0CisgICAgICAgICAgICAgfAorICAgICAgICAgICAgIHwtLSBVU0IgTW9kZSA1CisgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgICAgICAKKyAqLworCisjZGVmaW5lIFVTQl9NQVhfQ0xBU1NfTlVNICAgICAgICAgIDE2CisjZGVmaW5lIFVTQl9NQVhfQ0ZHX05VTSAgICAgICAgICAgIDgKKworCit0eXBlZGVmIGVudW0geworICAgIFVTQl9PU19XSU44ID0gMCwKKyAgICBVU0JfT1NfV0lOLCAgLy8gbm9uLXdpbjggd2luZG93cworICAgIFVTQl9PU19MSU5VWCwKKyAgICBVU0JfT1NfTUFDLAorICAgIFVTQl9PU19PVEhFUlMsCisKKyAgICBVU0JfT1NfTlVNCit9IHVzYl9vc190eXBlX2U7CisKK3R5cGVkZWYgZW51bSB7CisgICAgVVNCX0NMQVNTX01TID0gMCwKKyNpZmRlZiBfX1VTQl9BQ01fU1VQUE9SVF9fCisgICAgVVNCX0NMQVNTX0FDTTEsICAvKiAxVDFSLCAxIGludGVyZmFjZSAqLworICAgIFVTQl9DTEFTU19BQ00yLCAgLyogMlQxUiwgMiBpbnRlcmZhY2UsIElBRCAqLworICAgIFVTQl9DTEFTU19BQ00zLCAgLyogMlQxUiwgMSBpbnRlcmZhY2UgKi8KKyNlbmRpZgorI2lmZGVmIF9fVVNCX01CSU1fU1VQUE9SVF9fCisgICAgVVNCX0NMQVNTX01CSU0sCisjZW5kaWYKKyNpZmRlZiBfX1VTQl9STkRJU19TVVBQT1JUX18KKyAgICBVU0JfQ0xBU1NfUk5ESVMsCisjZW5kaWYKKyNpZmRlZiBfX1VTQl9FQ01fU1VQUE9SVF9fCisgICAgVVNCX0NMQVNTX0VDTSwKKyNlbmRpZgorICAgIFVTQl9DTEFTU19BREIsCisgICAgVVNCX0NMQVNTX05VTQorfSB1c2JfY2xhc3NfdHlwZV9lOworCit0eXBlZGVmIGVudW17CisJVVNCX0NMQVNTX09XTkVSX01EID0gMCwKKwlVU0JfQ0xBU1NfT1dORVJfQVAsCisJVVNCX0NMQVNTX09XTkVSX05PTkUsCisJVVNCX0NMQVNTX09XTkVSX05VTQorfXVzYl9jbGFzc19vd25lcl9lOworCit0eXBlZGVmIGVudW17CisgICAgVVNCX05FVFdPUktfQ0xBU1NfUk5ESVMgPSAwLAorICAgIFVTQl9ORVRXT1JLX0NMQVNTX01CSU0sCisgICAgVVNCX05FVFdPUktfQ0xBU1NfRUNNLAorICAgIFVTQl9ORVRXT1JLX0NMQVNTX01BWAorfXVzYl9uZXR3b3JrX2NsYXNzX3R5cGVfZTsKKworLy8gZGVmaW5pdGlvbiBmb3IgZG91YmxlIEZJRk8gZW5hYmxpbmcgb2YgYnVsayBlbmRwb2ludAorI2RlZmluZSBVU0JfQ0xBU1NfR0VUX0RBVEFfSU5fRklGT19OKG4pIChuICYgMHhmKQorI2RlZmluZSBVU0JfQ0xBU1NfR0VUX0RBVEFfT1VUX0ZJRk9fTihuKSAoKG4gJiAweGYwKSA+PiA0KQorCisjZGVmaW5lIFVTQl9NT0RFX01PUlBISU5HX0NGRzEJMQorI2RlZmluZSBVU0JfTU9ERV9NT1JQSElOR19DRkcyCTIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50MzIgICAgICAgICAgICAgY2xhc3NfbnVtOworICAgIHVzYl9jbGFzc190eXBlX2UgICAgICAgY2xhc3NfdHlwZVtVU0JfTUFYX0NMQVNTX05VTV07CisgICAgLyogZGV2aWNlIG1hcHBpbmcgZm9yIGVhY2ggZnVuY3Rpb24uIGV4LiBBQ00tPnBvcnQsIFJORElTL01CSU0tPm5ldHdvcmsgaW50ZXJmYWNlIGlkICovCisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAqY2xhc3NfY3R4dFtVU0JfTUFYX0NMQVNTX05VTV07CisKKyAgICAvKiBUaGUgOC1iaXQgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUgbnVtIG9mIEJ1bGsgRklGTywgWzAuLi4zXUlOLCBbNC4uN11PVVQuICovCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICBidWxrX2ZpZm9fbltVU0JfTUFYX0NMQVNTX05VTV07CisJLyp1c2IgcG9ydCBvd25lcnNoaXAsIDAgZm9yIG1vZGVtLCAxIGZvciBBUCwgLi4uKi8KKwl1c2JfY2xhc3Nfb3duZXJfZSAgICAgIGNsYXNzX293bmVyW1VTQl9NQVhfQ0xBU1NfTlVNXTsKK30gdXNiX2NmZ19wYXJhbV90OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICB2ZW5kb3JfaWQ7ICAgICAgICAgIC8qIGlkVmVuZG9yICovCisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICBwcm9kdWN0X2lkOyAgICAgICAgIC8qIGlkUHJvZHVjdCAqLworICAgIGthbF91aW50OCAgICAgICAgICAgICAgZGV2aWNlX2NsYXNzOyAgICAgICAvKiBiRGV2aWNlQ2xhc3MgKi8KKyAgICBrYWxfdWludDggICAgICAgICAgICAgIGRldmljZV9zdWJfY2xhc3M7ICAgLyogYkRldmljZVN1YkNsYXNzICovCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICBkZXZpY2VfcHJvdG9jb2w7ICAgIC8qIGJEZXZpY2VQcm90b2NvbCAqLworICAgIGthbF91aW50OCAgICAgICAgICAgICAgY2ZnX251bTsKKyAgICB1c2JfY2ZnX3BhcmFtX3QgICAgICAgIGNmZ19wYXJhbVtVU0JfTUFYX0NGR19OVU1dOworICAgIHVzYl9tb2RlX293bmVyX2UgICAgICAgbW9kZV9vd25lcjsKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgIG1vZGVfaW5kZXg7Cit9IHVzYl9tb2RlX3BhcmFtX3Q7CisKKy8qIGN1c3RvbSBwYXJhbWV0ZXIgZm9yIHVzYiBkZXZpY2UgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgIGJjZF9kZXZpY2U7ICAgICAgICAgLyogYmNkRGV2aWNlICovCisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAqbWFudWZhY3R1cmVfc3RyaW5nOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgbWFudWZhY3R1cmVfc3RyaW5nX3NpemU7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAqcHJvZHVjdF9zdHJpbmc7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICBwcm9kdWN0X3N0cmluZ19zaXplOworICAgIGthbF91aW50MTYgICAgICAgICAgICAgKnNlcmlhbF9udW1iZXI7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICBzZXJpYWxfbnVtYmVyX3NpemU7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICBtb3JwaGluZ19zdWJfaWQ7CisgICAgdXNiX21vZGVfcGFyYW1fdCAgICAgICBtb2RlX3BhcmFtW1VTQl9NT0RFX01BWF07CisgICAgLyogVVNCIE1vZGUgd2hpY2ggZWFjaCBVU0IgT1MgY29ycmVzcG9uZHMgdG8gKi8KKyAgICB1c2JfbW9kZV9lICAgICAgICAgICAgIHVzYl9tb2RlW1VTQl9PU19OVU1dOworfSB1c2JfZGV2X3BhcmFtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1c2JfY2xhc3NfdHlwZV9lIGNsYXNzX3R5cGU7CisgICAga2FsX3VpbnQzMiB1YXJ0X3BvcnQ7CisgICAga2FsX3VpbnQzMiBidWxrX2ZpZm9fbjsKKyAgICB1c2JfY2xhc3Nfb3duZXJfZSAgY2xhc3Nfb3duZXI7Cit9IHVzYl9jdXJyZW50X2NmZ19wYXJhbV90OworCisvKiBjdXN0b20gcGFyYW1ldGVyIGZvciBlYWNoIGNsYXNzIHR5cGUgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAqaW50ZXJmYWNlX3N0cmluZzsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgIGludGVyZmFjZV9zdHJpbmdfc2l6ZTsKK30gdXNiX2NsYXNzX2FjbTFfcGFyYW1fdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICpjb21tX2ludGVyZmFjZV9zdHJpbmc7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICBjb21tX2ludGVyZmFjZV9zdHJpbmdfc2l6ZTsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICpkYXRhX2ludGVyZmFjZV9zdHJpbmc7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICBkYXRhX2ludGVyZmFjZV9zdHJpbmdfc2l6ZTsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICppYWRfc3RyaW5nOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgaWFkX3N0cmluZ19zaXplOworfSB1c2JfY2xhc3NfYWNtMl9wYXJhbV90OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgICAgICAgICAgICAgKmludGVyZmFjZV9zdHJpbmc7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICBpbnRlcmZhY2Vfc3RyaW5nX3NpemU7Cit9IHVzYl9jbGFzc19hY20zX3BhcmFtX3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAqY29tbV9pbnRlcmZhY2Vfc3RyaW5nOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgY29tbV9pbnRlcmZhY2Vfc3RyaW5nX3NpemU7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAqbnVsbF9kYXRhX2ludGVyZmFjZV9zdHJpbmc7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICBudWxsX2RhdGFfaW50ZXJmYWNlX3N0cmluZ19zaXplOworICAgIGthbF91aW50MTYgICAgICAgICAgICAgKmRhdGFfaW50ZXJmYWNlX3N0cmluZzsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgIGRhdGFfaW50ZXJmYWNlX3N0cmluZ19zaXplOworICAgIGthbF91aW50MTYgICAgICAgICAgICAgKmlhZF9zdHJpbmc7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICBpYWRfc3RyaW5nX3NpemU7Cit9IHVzYl9jbGFzc19tYmltX3BhcmFtX3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAqY29tbV9pbnRlcmZhY2Vfc3RyaW5nOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgY29tbV9pbnRlcmZhY2Vfc3RyaW5nX3NpemU7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAqZGF0YV9pbnRlcmZhY2Vfc3RyaW5nOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgZGF0YV9pbnRlcmZhY2Vfc3RyaW5nX3NpemU7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAqaWFkX3N0cmluZzsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgIGlhZF9zdHJpbmdfc2l6ZTsKK30gdXNiX2NsYXNzX3JuZGlzX3BhcmFtX3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAqY29tbV9pbnRlcmZhY2Vfc3RyaW5nOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgY29tbV9pbnRlcmZhY2Vfc3RyaW5nX3NpemU7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAqbnVsbF9kYXRhX2ludGVyZmFjZV9zdHJpbmc7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICBudWxsX2RhdGFfaW50ZXJmYWNlX3N0cmluZ19zaXplOyAgICAKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICpkYXRhX2ludGVyZmFjZV9zdHJpbmc7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICBkYXRhX2ludGVyZmFjZV9zdHJpbmdfc2l6ZTsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICppYWRfc3RyaW5nOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgaWFkX3N0cmluZ19zaXplOworICAgIGthbF91aW50MTYgICAgICAgICAgICAgKm1hY19hZGRyX3N0cmluZ1szXTsvLyBtYXggaXMgMworICAgIGthbF91aW50OCAgICAgICAgICAgICAgbWFjX2FkZHJfc3RyaW5nX3NpemVbM107Ly8gbWF4IGlzIDMKK30gdXNiX2NsYXNzX2VjbV9wYXJhbV90OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgICAgICAgICAgICAgKmludGVyZmFjZV9zdHJpbmc7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICBpbnRlcmZhY2Vfc3RyaW5nX3NpemU7Cit9IHVzYl9jbGFzc19hZGJfcGFyYW1fdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICppbnRlcmZhY2Vfc3RyaW5nOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgaW50ZXJmYWNlX3N0cmluZ19zaXplOworfSB1c2JfY2xhc3NfbXNfcGFyYW1fdDsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisvKiBnZXQgcGFyYW1ldGVyIGZ1bmN0aW9uIHBvaW50ZXIgKi8KK3R5cGVkZWYgY29uc3QgdXNiX2Rldl9wYXJhbV90KiAgICAgICAgICAgKCp1c2JfZ2V0X2RldmljZV9wYXJhbV9mKSh2b2lkKTsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgordHlwZWRlZiBjb25zdCB1c2JfY2xhc3NfbXNfcGFyYW1fdCogICAgICgqdXNiX2dldF9tc19wYXJhbV9mKSh2b2lkKTsKKwordHlwZWRlZiBjb25zdCB1c2JfY2xhc3NfYWNtMV9wYXJhbV90KiAgICAoKnVzYl9nZXRfYWNtMV9wYXJhbV9mKSh2b2lkKTsKK3R5cGVkZWYgY29uc3QgdXNiX2NsYXNzX2FjbTJfcGFyYW1fdCogICAgKCp1c2JfZ2V0X2FjbTJfcGFyYW1fZikodm9pZCk7Cit0eXBlZGVmIGNvbnN0IHVzYl9jbGFzc19hY20zX3BhcmFtX3QqICAgICgqdXNiX2dldF9hY20zX3BhcmFtX2YpKHZvaWQpOwordHlwZWRlZiBjb25zdCB1c2JfY2xhc3NfbWJpbV9wYXJhbV90KiAgICAoKnVzYl9nZXRfbWJpbV9wYXJhbV9mKSh2b2lkKTsKK3R5cGVkZWYgY29uc3QgdXNiX2NsYXNzX3JuZGlzX3BhcmFtX3QqICAgKCp1c2JfZ2V0X3JuZGlzX3BhcmFtX2YpKHZvaWQpOwordHlwZWRlZiBjb25zdCB1c2JfY2xhc3NfZWNtX3BhcmFtX3QqICAgICAoKnVzYl9nZXRfZWNtX3BhcmFtX2YpKHZvaWQpOwordHlwZWRlZiBjb25zdCB1c2JfY2xhc3NfYWRiX3BhcmFtX3QqICAgICAoKnVzYl9nZXRfYWRiX3BhcmFtX2YpKHZvaWQpOworCisvKiBnZXQgcGFyYW1ldGVyIGZ1bmN0aW9ucyovCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICB1c2JfZ2V0X2RldmljZV9wYXJhbV9mICAgICAgIGdldF9kZXZpY2VfcGFyYW1fZnVuYzsKKyAgICB1c2JfZ2V0X21zX3BhcmFtX2YgICAgICAgICAgIGdldF9tc19wYXJhbV9mdW5jOworICAgIHVzYl9nZXRfYWNtMV9wYXJhbV9mICAgICAgICAgZ2V0X2FjbTFfcGFyYW1fZnVuYzsKKyAgICB1c2JfZ2V0X2FjbTJfcGFyYW1fZiAgICAgICAgIGdldF9hY20yX3BhcmFtX2Z1bmM7CisgICAgdXNiX2dldF9hY20zX3BhcmFtX2YgICAgICAgICBnZXRfYWNtM19wYXJhbV9mdW5jOworICAgIHVzYl9nZXRfbWJpbV9wYXJhbV9mICAgICAgICAgZ2V0X21iaW1fcGFyYW1fZnVuYzsKKyAgICB1c2JfZ2V0X3JuZGlzX3BhcmFtX2YgICAgICAgIGdldF9ybmRpc19wYXJhbV9mdW5jOworICAgIHVzYl9nZXRfZWNtX3BhcmFtX2YgICAgICAgICAgZ2V0X2VjbV9wYXJhbV9mdW5jOyAgICAKKyAgICB1c2JfZ2V0X2FkYl9wYXJhbV9mICAgICAgICAgIGdldF9hZGJfcGFyYW1fZnVuYzsKK30gdXNiX2N1c3RvbV9mdW5jX3Q7CisKKworZXh0ZXJuIGNvbnN0IHVzYl9jdXN0b21fZnVuY190KiB1c2JfZ2V0X2N1c3RvbV9mdW5jKHZvaWQpOwordm9pZCB1c2JfcmVnaXN0ZXJfbW9kZV9wYXJhbSh1c2JfbW9kZV9wYXJhbV90ICptb2RlX3BhcmFtKTsKK3ZvaWQgdXNiX3JlcGxhY2VfbW9kZV9wYXJhbSh1c2JfbW9kZV9wYXJhbV90ICptb2RlX3BhcmFtLCBrYWxfdWludDggaW5kZXgpOwordm9pZCB1c2JfbW9kZV9xZXpua19yZWdpc3RlcigpOwordm9pZCB1c2JfbW9kZV9pbnVzal9yZWdpc3RlcigpOwordm9pZCB1c2JfbW9kZV91ZnBtX3JlZ2lzdGVyKCk7Cit2b2lkIHVzYl9tb2RlX2Jhc2VfcmVnaXN0ZXIoKTsKK3ZvaWQgdXNiX21vZGVfY3VzdG9taXphdGlvbl9yZWdpc3RlcigpOwordm9pZCB1c2JfbW9kZV9yZXBsYWNlX21ldGFkYmdfbW9kZShrYWxfdWludDggaW5kZXgpOwordm9pZCB1c2JfbW9kZV9mYWN0b3J5X3JlZ2lzdGVyKCk7CitrYWxfdWludDE2IHVzYl9nZXRfZmFjdG9yeV9tb2RlX3BpZCgpOwora2FsX2Jvb2wgdXNiX2dldF9mYWN0b3J5X21vZGVfc3VwcG9ydCgpOwordXNiX25ldHdvcmtfY2xhc3NfdHlwZV9lIHVzYmNfZ2V0X25ldHdvcmtfdHlwZSgpOworCisKKyNlbmRpZiAvKiBfVVNCQ19DVVNUT01fSF8gKi8KKwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL2hpZi91c2Jvc2QuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvdXNib3NkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzliOThiZgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9oaWYvdXNib3NkLmgKQEAgLTAsMCArMSw2NiBAQAorLyohCisgKiAgQGZpbGUgdXNib3NkLmgKKyAqICBAYXV0aG9yIFF1ZW50aW4gTGkgPHF1ZW50aW4ubGlAbWVkaWF0ZWsuY29tPgorICogIEB2ZXJzaW9uIDEuMAorICogIEBzZWN0aW9uIExJQ0VOU0UKKyAqCisgKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisgKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyAqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyAqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyAqCisgKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisgKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyAqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorICogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorICogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisgKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorICogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorICogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisgKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisgKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisgKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorICoKKyAqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisgKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisgKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyAqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisgKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisgKgorICogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisgKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisgKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisgKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisgKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisgKgorICogIEBzZWN0aW9uIERFU0NSSVBUSU9OCisgKiAgVGhpcyBmaWxlIHByb3ZpZGVzIGRlZmluaXRpb25zIG9mIG9zZCBBUEkKKyAqLworCisjaWZuZGVmIF9VU0JPU0RfSAorI2RlZmluZSBfVVNCT1NEX0gKKworI2RlZmluZSBWRU5ET1JfQ09ERV8xCTB4NjYKKyNkZWZpbmUgVkVORE9SX0NPREVfMgkweDk5CisKK2VudW0geworCU9TRF9VTktOT1dOID0gMCwJLy8gVW5rbm93biBPUywgcmV0cnkgT1NEIHVudGlsIG1heC4gcmV0cnkgY291bnQKKwlPU0RfV0lOX1hQX1dPX0RSViwJLy8gV2luIFhQIE9TIHdpdGggaG9zdCBkcml2ZXIKKwlPU0RfV0lOX1hQX1dfRFJWLAkvLyBXaW4gWFAgT1Mgd2l0aG91dCBob3N0IGRyaXZlcgorCU9TRF9XSU5fVklTVEEsCQkvLyBXaW4gVmlzdGEgT1MKKwlPU0RfV0lOXzcsCQkJLy8gV2luIDcgT1MKKwlPU0RfV0lOXzgsCQkJLy8gV2luIDgvOC4xIE9TCisJT1NEX0xJTlVYLAkJCS8vIExpbnV4IE9TCisJT1NEX01BQywJCQkvLyBNYWMgT1MKK307CisKK2thbF91aW50MzIgZ2V0X2hvc3Rfb3NfdHlwZSh2b2lkKTsKKwordm9pZCBvc2RfcmV0cnlfcmVxdWlyZV9jaGVjayh2b2lkKTsKKwordm9pZCB1cGRhdGVfaG9zdF9vc190eXBlKGthbF91aW50MzIgbmV3X29zX3R5cGUpOworCitrYWxfYm9vbCBvc2Rfc2V0dXAodm9pZCk7CisKKyNlbmRpZiAgLy8gX1VTQklETEVfTUFJTl9ICmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUva3BhbHYva3BhbHZfc3RydWN0LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUva3BhbHYva3BhbHZfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhiYWIwMwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9rcGFsdi9rcGFsdl9zdHJ1Y3QuaApAQCAtMCwwICsxLDE0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorICogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisgKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisgKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEyCisgKgorICogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworICogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisgKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyAqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyAqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorICogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyAqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyAqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorICogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworICogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworICogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyAqCisgKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorICogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorICogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisgKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworICogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorICoKKyAqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorICogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorICogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorICogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorICogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGtwYWx2X3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIAorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgS2VlcCBhbGl2ZSBnbG9iYWwgc3RydWN0dXJlIGRlZmluaXRpb24KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0lOQ19LUEFMVl9TVFJVQ1RfSAorI2RlZmluZSBfX0lOQ19LUEFMVl9TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKworLyoqIE1BWCBLRUVQQUxJVkUgQ09OTiBUUkFDSyBCWSBNRCAqLworI2RlZmluZSBLUEFMVl9NQVhfS0VFUF9BTElWRV9DT05OICAgICAgIDIKKworI2RlZmluZSBLUEFMVl9JUFY0X0FERFJfTEVOICAgICAgICA0CisjZGVmaW5lIEtQQUxWX0lQVjZfQUREUl9MRU4gICAgICAgMTYKKy8qCisgKiBLUEFMViBpcHR5cGUgZW51bQorICovCit0eXBlZGVmIGVudW0gX2twYWx2X3JlcV9pcF90eXBlX2UgeworICAgIEtQQUxWX1JFUV9JUFRZUEVfSVBWNFRDUCwKKyAgICBLUEFMVl9SRVFfSVBUWVBFX0lQVjRVRFAsCisgICAgS1BBTFZfUkVRX0lQVFlQRV9JUFY2VENQLAorICAgIEtQQUxWX1JFUV9JUFRZUEVfSVBWNlVEUCwKK30ga3BhbHZfcmVxX2lwX3R5cGVfZTsKKworLyoKKyAqIEtQQUxWIGF0IGNtZCByZXEgZW51bQorICovCit0eXBlZGVmIGVudW0gX2twYWx2X2F0X3JlcV90eXBlX2UgeworICAgIEtQQUxWX1JFUV9ESVNBQkxFLAorICAgIEtQQUxWX1JFUV9FTkFCTEUsCisgICAgS1BBTFZfUkVRX1FVRVJZLAorICAgIEtQQUxWX1JFUV9JTlZBTElELAorfSBrcGFsdl9hdF9yZXFfdHlwZV9lOworCisvKgorICogS1BBTFYgY29ubiBzdGF0ZSBlbnVtCisgKi8KK3R5cGVkZWYgZW51bSBfa3BhbHZfbWRfa3BhbGl2ZV9zdGF0ZV9lIHsKKyAgICBLUEFMVl9NRF9LRUVQQUxJVkVfU1RBVEVfQUNUSVZFLAorICAgIEtQQUxWX01EX0tFRVBBTElWRV9TVEFURV9JTkFDVElWRSwKKyAgICBLUEFMVl9NRF9LRUVQQUxJVkVfU1RBVEVfUEVORElORworfSBrcGFsdl9tZF9rcGFsaXZlX3N0YXRlX2U7CisKKy8qCisgKiBMb2NhbCBwYXJhbWV0ZXIgc3RydWN0dXJlIGZvciBNU0dfSURfQVRQX0tQQUxWX0tFRVBBTElWRV9SRVEuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9hdHBfa3BhbHZfa2VlcGFsaXZlX2VuYWJsZV9yZXFfc3RydWN0X3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga3BhbHZfYXRfcmVxX3R5cGVfZSAgICAgcmVxX3R5cGU7CisgICAga3BhbHZfcmVxX2lwX3R5cGVfZSAgICAgaXBfdHlwZTsKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICBuZXRpZl9pZDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICBzcmNfaXB2NF9hZGRyW0tQQUxWX0lQVjRfQUREUl9MRU5dOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgIGRzdF9pcHY0X2FkZHJbS1BBTFZfSVBWNF9BRERSX0xFTl07CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgc3JjX2lwdjZfYWRkcltLUEFMVl9JUFY2X0FERFJfTEVOXTsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICBkc3RfaXB2Nl9hZGRyW0tQQUxWX0lQVjZfQUREUl9MRU5dOworICAgIGthbF91aW50MTYgICAgICAgICAgICAgIHNyY19wb3J0OworICAgIGthbF91aW50MTYgICAgICAgICAgICAgIGRzdF9wb3J0OworICAgIGthbF91aW50MTYgICAgICAgICAgICAgIGlkbGVfdGltZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IGluIHNlYyAqLworICAgIGthbF91aW50MTYgICAgICAgICAgICAgIHByb2JlX2ludGVydmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IGluIHNlYyAqLworICAgIGthbF91aW50OCAgICAgICAgICAgICAgIHJldHJ5X2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IHJldHJ5IGNvdW50ICovCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgY29ubl9pZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgZm9yIGRpc2FibGUgcmVxICovCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgcGFyc2luZ19yZXN1bHQ7Cit9IGF0cF9rcGFsdl9rZWVwYWxpdmVfcmVxX3N0cnVjdF90OworCisvKgorICogTG9jYWwgcGFyYW1ldGVyIHN0cnVjdHVyZSBmb3IgTVNHX0lEX0FUUF9LUEFMVl9LRUVQQUxJVkVfQ05GLgorICovCit0eXBlZGVmIHN0cnVjdCBfYXRwX2twYWx2X2tlZXBhbGl2ZV9jbmZfc3RydWN0X3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgICAgICAgIHJlc3VsdDsKKyAgICBrYWxfYm9vbCAgICAgICAgaXNfYXBfZGlzYWJsZV9yc3A7IC8qKjwgYXAgcmVxdWVzdGVkIHRvIGRpc2FibGUga2VlcC1hbGl2ZSAqLworICAgIGthbF91aW50OCAgICAgICBjb25uX2lkOworICAgIGthbF91aW50OCAgICAgICBzdGF0dXM7Cit9IGF0cF9rcGFsdl9rZWVwYWxpdmVfY25mX3N0cnVjdF90OworCisvKgorICogTG9jYWwgcGFyYW1ldGVyIHN0cnVjdHVyZSBmb3IgTVNHX0lEX0FUUF9LUEFMVl9DT05ORUNUSU9OX1NUQVRVU19JTkQuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9hdHBfa3BhbHZfY29ubmVjdGlvbl9zdGF0dXNfaW5kX3N0cnVjdF90IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgICAgICBjb25uX2lkOworICAgIGthbF91aW50OCAgICAgICBzdGF0dXM7Cit9IGF0cF9rcGFsdl9jb25uZWN0aW9uX3N0YXR1c19pbmRfc3RydWN0X3Q7CisKKwordHlwZWRlZiBhdHBfa3BhbHZfa2VlcGFsaXZlX3JlcV9zdHJ1Y3RfdCBhdHBfa3BhbHZfa2VlcGFsaXZlX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIGF0cF9rcGFsdl9jb25uZWN0aW9uX3N0YXR1c19pbmRfc3RydWN0X3QgYXRwX2twYWx2X2Nvbm5lY3Rpb25fc3RhdHVzX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGF0cF9rcGFsdl9rZWVwYWxpdmVfY25mX3N0cnVjdF90IGF0cF9rcGFsdl9rZWVwYWxpdmVfY25mX3N0cnVjdDsKKyNlbmRpZiAvKiBfX0lOQ19LUEFMVl9TVFJVQ1RfSCAqLworCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWVkaWEvbWVkX3N0cnVjdC5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21lZGlhL21lZF9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjJmMjc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21lZGlhL21lZF9zdHJ1Y3QuaApAQCAtMCwwICsxLDc0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIG1lZF9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHByaW1hcnkgZ2xvYmFsIHZhcmlhYmxlcyBvZiBtZWRpYSB0YXNrLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8va21vbHkKKyNpZm5kZWYgX01FRF9TVFJVQ1RfSAorI2RlZmluZSBfTUVEX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisKKyNkZWZpbmUgTUFYX01FRElBX0ZJTEVfTkFNRSA1MTIKKworI2RlZmluZSBXQl9TUEVFQ0hfRklSX0NPRUZGX05VTSA5MAorI2RlZmluZSBTUEVFQ0hfRklSX0NPRUZGX05VTSA0NQorI2RlZmluZSBNRUxPRFlfRklSX0NPRUZGX05VTSAyNQorI2RlZmluZSBBVURJT19DT01QX0NPRUZGX05VTSA0NQorCisjZGVmaW5lIEVNU0RfREFUQV9MRU4gMTQwCisKKworLyogc3RhcnQgdXAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKK30KK21lZF9zdGFydHVwX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcmVzdWx0OworfQorbWVkX3N0YXJ0dXBfY25mX3N0cnVjdDsKKworCit0eXBlZGVmIHZvaWQgKCptZWRpYV9pbl9wcm9jX2NhbGxfdHlwZSkgKGthbF91aW50MzIgYXJnMSwgdm9pZCAqYXJnMik7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBtZWRpYV9pbl9wcm9jX2NhbGxfdHlwZSBmdW5jOworICAgIGthbF91aW50MzIgZnVuY19hcmcxOworICAgIHZvaWQgKmZ1bmNfYXJnMjsKK30KK21lZGlhX2luX3Byb2NfY2FsbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiByZXN1bHQ7CisgICAgdm9pZCAqcmVzdWx0X3A7Cit9CittZWRpYV9pbl9wcm9jX2NhbGxfY25mX3N0cnVjdDsKKworLyogYXVkaW8gKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzcmNfaWQ7CisgICAga2FsX3VpbnQ4IG1vZGU7Cit9CittZWRpYV9hdWRfc2V0X2F1ZGlvX21vZGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzcmNfaWQ7CisgICAga2FsX2Jvb2wgcmVzdWx0OworICAgIGthbF91aW50MTYgY2F1c2U7Cit9CittZWRpYV9hdWRfc2V0X2F1ZGlvX21vZGVfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggbW9kZTsKKyAgICBrYWxfdWludDggbWVsb2R5WzddOworICAgIGthbF91aW50OCBzb3VuZFs3XTsKKyAgICBrYWxfdWludDgga2V5dG9uZVs3XTsKKyAgICBrYWxfdWludDggc3BlZWNoWzddOworICAgIGthbF91aW50OCBtaWNbN107CisgICAga2FsX3VpbnQ4IHNpZGV0b25lOworICAgIGthbF91aW50OCBtYXhfbWVsb2R5X3ZvbHVtZV9nYWluOworICAgIGthbF91aW50OCBtZWxvZHlfdm9sdW1lX2dhaW5fc3RlcDsKKyAgICBrYWxfdWludDggdHZfb3V0X3ZvbHVtZV9nYWluWzddOworfQorYXVkaW9fcHJvZmlsZV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGthbF9ib29sIHVwZGF0ZV9udnJhbTsKKyAgICBhdWRpb19wcm9maWxlX3N0cnVjdCBhdWRpb19wcm9maWxlOworfQorbWVkaWFfYXVkX3NldF9hdWRpb19wcm9maWxlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGthbF9ib29sIHJlc3VsdDsKKyAgICBrYWxfdWludDE2IGNhdXNlOworfQorbWVkaWFfYXVkX3NldF9hdWRpb19wcm9maWxlX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGthbF91aW50OCBtb2RlOworfQorbWVkaWFfYXVkX2dldF9hdWRpb19wcm9maWxlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGthbF9ib29sIHJlc3VsdDsKKyAgICBhdWRpb19wcm9maWxlX3N0cnVjdCBhdWRpb19wcm9maWxlOworfQorbWVkaWFfYXVkX2dldF9hdWRpb19wcm9maWxlX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2ludDE2IGNvZWZmWzZdW1dCX1NQRUVDSF9GSVJfQ09FRkZfTlVNXTsKK30KK2F1ZGlvX3diX3NwZWVjaF9maXJfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9pbnQxNiBwYXJhbVs4XVsxNl07Cit9CithdWRpb193Yl9zcGVlY2hfbW9kZV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2ludDE2IHNwZWVjaF9pbnB1dF9GSVJfY29lZmZzWzZdW1NQRUVDSF9GSVJfQ09FRkZfTlVNXTsKKyAgICBrYWxfaW50MTYgc3BlZWNoX291dHB1dF9GSVJfY29lZmZzWzZdW1NQRUVDSF9GSVJfQ09FRkZfTlVNXTsKKyAgICBrYWxfdWludDE2IHNlbGVjdGVkX0ZJUl9vdXRwdXRfaW5kZXg7CisgICAga2FsX3VpbnQxNiBzcGVlY2hfY29tbW9uX3BhcmFbMTJdOworICAgIGthbF91aW50MTYgc3BlZWNoX21vZGVfcGFyYVs4XVsxNl07CisgICAga2FsX3VpbnQxNiBzcGVlY2hfdm9sdW1lX3BhcmFbM11bN11bNF07CisgICAga2FsX3VpbnQxNiBtYXhfc3dpbmc7CisgICAga2FsX2ludDE2IE1lbG9keV9GSVJfQ29lZmZfVGJsW01FTE9EWV9GSVJfQ09FRkZfTlVNXTsKKyAgICBrYWxfaW50MTYgYXVkaW9fY29tcGVuc2F0aW9uX2NvZWZmWzNdW0FVRElPX0NPTVBfQ09FRkZfTlVNXTsgLyogTE9VRFNQRUFLRVIvRUFSUEhPTkUvTE9VRFNQRUFLRVJfUklOR1RPTkUgKi8KK30KK2F1ZGlvX3BhcmFtX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNyY19pZDsKKyAgICBrYWxfYm9vbCB1cGRhdGVfbnZyYW07CisgICAgYXVkaW9fcGFyYW1fc3RydWN0IGF1ZGlvX3BhcmFtOworfQorbWVkaWFfYXVkX3NldF9hdWRpb19wYXJhbV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNyY19pZDsKKyAgICBrYWxfYm9vbCByZXN1bHQ7CisgICAga2FsX3VpbnQxNiBjYXVzZTsKK30KK21lZGlhX2F1ZF9zZXRfYXVkaW9fcGFyYW1fY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzcmNfaWQ7Cit9CittZWRpYV9hdWRfZ2V0X2F1ZGlvX3BhcmFtX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGthbF9ib29sIHJlc3VsdDsKKyAgICBhdWRpb19wYXJhbV9zdHJ1Y3QgYXVkaW9fcGFyYW07Cit9CittZWRpYV9hdWRfZ2V0X2F1ZGlvX3BhcmFtX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGthbF9ib29sIHVwZGF0ZV9udnJhbTsKKyAgICBhdWRpb193Yl9zcGVlY2hfZmlyX3N0cnVjdCBmaXJfcGFyYW07Cit9CittZWRpYV9hdWRfc2V0X2F1ZGlvX3diX2lucHV0X2Zpcl9wYXJhbV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNyY19pZDsKKyAgICBrYWxfYm9vbCByZXN1bHQ7CisgICAga2FsX3VpbnQxNiBjYXVzZTsKK30KK21lZGlhX2F1ZF9zZXRfYXVkaW9fd2JfaW5wdXRfZmlyX3BhcmFtX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGthbF9ib29sIHVwZGF0ZV9udnJhbTsKKyAgICBhdWRpb193Yl9zcGVlY2hfZmlyX3N0cnVjdCBmaXJfcGFyYW07Cit9CittZWRpYV9hdWRfc2V0X2F1ZGlvX3diX291dHB1dF9maXJfcGFyYW1fcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzcmNfaWQ7CisgICAga2FsX2Jvb2wgcmVzdWx0OworICAgIGthbF91aW50MTYgY2F1c2U7Cit9CittZWRpYV9hdWRfc2V0X2F1ZGlvX3diX291dHB1dF9maXJfcGFyYW1fY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzcmNfaWQ7CisgICAga2FsX2Jvb2wgdXBkYXRlX252cmFtOworICAgIGF1ZGlvX3diX3NwZWVjaF9tb2RlX3N0cnVjdCBtb2RlOworfQorbWVkaWFfYXVkX3NldF9hdWRpb193Yl9tb2RlX3BhcmFtX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGthbF9ib29sIHJlc3VsdDsKKyAgICBrYWxfdWludDE2IGNhdXNlOworfQorbWVkaWFfYXVkX3NldF9hdWRpb193Yl9tb2RlX3BhcmFtX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworfQorbWVkaWFfYXVkX2dldF9hdWRpb193Yl9pbnB1dF9maXJfcGFyYW1fcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzcmNfaWQ7CisgICAga2FsX2Jvb2wgcmVzdWx0OworICAgIGF1ZGlvX3diX3NwZWVjaF9maXJfc3RydWN0IGZpcl9wYXJhbTsKK30KK21lZGlhX2F1ZF9nZXRfYXVkaW9fd2JfaW5wdXRfZmlyX3BhcmFtX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworfQorbWVkaWFfYXVkX2dldF9hdWRpb193Yl9vdXRwdXRfZmlyX3BhcmFtX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGthbF9ib29sIHJlc3VsdDsKKyAgICBhdWRpb193Yl9zcGVlY2hfZmlyX3N0cnVjdCBmaXJfcGFyYW07Cit9CittZWRpYV9hdWRfZ2V0X2F1ZGlvX3diX291dHB1dF9maXJfcGFyYW1fY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzcmNfaWQ7Cit9CittZWRpYV9hdWRfZ2V0X2F1ZGlvX3diX21vZGVfcGFyYW1fcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzcmNfaWQ7CisgICAga2FsX2Jvb2wgcmVzdWx0OworICAgIGF1ZGlvX3diX3NwZWVjaF9tb2RlX3N0cnVjdCBmaXJfcGFyYW07Cit9CittZWRpYV9hdWRfZ2V0X2F1ZGlvX3diX21vZGVfcGFyYW1fY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzcmNfaWQ7CisgICAga2FsX3VpbnQ4IHZvbHVtZV90eXBlOworfQorbWVkaWFfYXVkX2dldF92b2x1bWVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzcmNfaWQ7CisgICAga2FsX2Jvb2wgcmVzdWx0OworICAgIGthbF91aW50OCB2b2x1bWVfdHlwZTsKKyAgICBrYWxfdWludDggdm9sdW1lOworfQorbWVkaWFfYXVkX2dldF92b2x1bWVfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBhdWRpb190eXBlOworICAgIGthbF91aW50OCBkZXZpY2U7Cit9CittZWRpYV9hdWRfc2V0X2RldmljZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHJlc3VsdDsKK30KK21lZGlhX2F1ZF9zZXRfZGV2aWNlX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDY0IHZvbHVtZTsgICAgICAvKiB2b2x1bWUgZGF0YSAqLworICAgIGthbF91aW50OCBhdWRpb190eXBlOyAgIC8qIHZvbHVtZSB0eXBlICovCisgICAga2FsX3VpbnQ4IGF1eF92b2x1bWU7ICAgLyogbm8gdXNlICovCisgICAga2FsX3VpbnQ4IG1vZGU7ICAgICAgICAgLyogbm8gdXNlICovCisgICAga2FsX2Jvb2wgYXBwbHk7ICAgICAgICAgLyogdXNlIGZvciBtZWRpYSB0eXBlIG9ubHkgKi8KKyAgICBrYWxfYm9vbCBibG9ja2luZzsKK30KK21lZGlhX2F1ZF9zZXRfdm9sdW1lX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcmVzdWx0OworfQorbWVkaWFfYXVkX3NldF92b2x1bWVfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzcmNfaWQ7CisgICAga2FsX2Jvb2wgbW9uaXRvcjsgLyogS0FMX1RSVUU6IG9wZW4gbW9uaXRvciwgS0FMX0ZBTFNFOiBjbG9zZSBtb25pdG9yICovCit9CittZWRpYV9hdWRfZW1zZF9tb25pdG9yX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGthbF9ib29sIHJlc3VsdDsKKyAgICBrYWxfYm9vbCBjYXVzZV9wcmVzZW50OworICAgIGthbF91aW50OCBjYXVzZTsKK30KK21lZGlhX2F1ZF9lbXNkX21vbml0b3JfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzcmNfaWQ7CisgICAga2FsX3VpbnQ4IGRhdGFbRU1TRF9EQVRBX0xFTl07Cit9CittZWRpYV9hdWRfZW1zZF9zZXRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzcmNfaWQ7CisgICAga2FsX2Jvb2wgcmVzdWx0OworICAgIGthbF9ib29sIGNhdXNlX3ByZXNlbnQ7CisgICAga2FsX3VpbnQ4IGNhdXNlOworfQorbWVkaWFfYXVkX2Vtc2Rfc2V0X2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworfQorbWVkaWFfYXVkX2Vtc2RfcHVzaF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNyY19pZDsKKyAgICBrYWxfYm9vbCByZXN1bHQ7CisgICAga2FsX2Jvb2wgY2F1c2VfcHJlc2VudDsKKyAgICBrYWxfdWludDggY2F1c2U7Cit9CittZWRpYV9hdWRfZW1zZF9wdXNoX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKK30KK21lZGlhX2F1ZF9lbXNkX3B1bGxfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIHJlc3VsdDsKKyAgICBrYWxfYm9vbCBjYXVzZV9wcmVzZW50OworICAgIGthbF91aW50OCBjYXVzZTsKK30KK21lZGlhX2F1ZF9lbXNkX2hhY2tfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorfQorbWVkaWFfYXVkX2Vtc2RfbGFja19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCit9CittZWRpYV9hdWRfZW1zZF9zeW5jX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGthbF9ib29sIG1vbml0b3I7IC8qIEtBTF9UUlVFOiBvcGVuIG1vbml0b3IsIEtBTF9GQUxTRTogY2xvc2UgbW9uaXRvciAqLworfQorbWVkaWFfYXVkX2Vtc2RfcHNhcF9tb25pdG9yX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGthbF9ib29sIHJlc3VsdDsKKyAgICBrYWxfYm9vbCBjYXVzZV9wcmVzZW50OworICAgIGthbF91aW50OCBjYXVzZTsKK30KK21lZGlhX2F1ZF9lbXNkX3BzYXBfbW9uaXRvcl9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNyY19pZDsKK30KK21lZGlhX2F1ZF9lbXNkX3BzYXBfcHVsbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNyY19pZDsKKyAgICBrYWxfYm9vbCByZXN1bHQ7CisgICAga2FsX2Jvb2wgY2F1c2VfcHJlc2VudDsKKyAgICBrYWxfdWludDggY2F1c2U7Cit9CittZWRpYV9hdWRfZW1zZF9wc2FwX3B1bGxfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBkYXRhW0VNU0RfREFUQV9MRU5dOworfQorbWVkaWFfYXVkX2Vtc2RfcHNhcF9kYXRhX2luZF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50NjQgdm9sdW1lOworICAgIGthbF91aW50MTYgaWRlbnRpZmllcjsKKyAgICBrYWxfdWludDggYXVkaW9faWQ7CisgICAga2FsX3VpbnQ4IHBsYXlfc3R5bGU7CisgICAga2FsX3VpbnQ4IG91dHB1dF9wYXRoOworfQorbWVkaWFfYXVkX3BsYXlfYnlfaWRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCByZXN1bHQ7Cit9CittZWRpYV9hdWRfcGxheV9ieV9pZF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGF1ZGlvX2lkOworfQorbWVkaWFfYXVkX3N0b3BfYnlfaWRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCByZXN1bHQ7Cit9CittZWRpYV9hdWRfc3RvcF9ieV9pZF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ2NCB2b2x1bWU7CisgICAgLyogc2V0IGJvdGggc3RhcnRfb2Zmc2V0IGFuZCBlbmRfb2Zmc2V0IHRvIDAgZm9yIGJhY2t3YXJkIGNvbXBhdGlibGUgKi8KKyAgICBrYWxfdWludDMyIHN0YXJ0X29mZnNldDsgICAgLyogMCA6IGZpbGUgYmVnaW5pbmcgKi8KKyAgICBrYWxfdWludDMyIGVuZF9vZmZzZXQ7ICAgICAgLyogMCBvciBmaWxlIGRhdGEgbGVuLTE6IGZpbGUgZW5kICovCisgICAgdm9pZCogY2FjaGVfcDsgICAgICAgICAgICAgIC8qIGNhY2hlICovCisgICAga2FsX3djaGFyIGZpbGVfbmFtZVtNQVhfTUVESUFfRklMRV9OQU1FXTsKKyAgICBrYWxfdWludDE2IGlkZW50aWZpZXI7CisgICAga2FsX3VpbnQ4IHNyY19pZDsKKyAgICBrYWxfdWludDggcGxheV9zdHlsZTsKKyAgICBrYWxfdWludDggb3V0cHV0X3BhdGg7Cit9CittZWRpYV9hdWRfcGxheV9ieV9maWxlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGthbF91aW50OCByZXN1bHQ7Cit9CittZWRpYV9hdWRfcGxheV9ieV9maWxlX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworfQorbWVkaWFfYXVkX3N0b3BfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzcmNfaWQ7CisgICAga2FsX3VpbnQ4IHJlc3VsdDsKK30KK21lZGlhX2F1ZF9zdG9wX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDY0IHZvbHVtZTsKKyAgICBjb25zdCBrYWxfdWludDggKm1lbG9keTsKKyAgICBrYWxfdWludDMyIGxlbjsKKyAgICBrYWxfdWludDMyIHN0YXJ0X29mZnNldDsKKyAgICBrYWxfdWludDMyIGVuZF9vZmZzZXQ7CisgICAga2FsX3VpbnQxNiBpZGVudGlmaWVyOworICAgIGthbF91aW50OCBzcmNfaWQ7CisgICAga2FsX3VpbnQ4IGZvcm1hdDsKKyAgICBrYWxfdWludDggcGxheV9zdHlsZTsKKyAgICBrYWxfdWludDggb3V0cHV0X3BhdGg7CisgICAga2FsX3VpbnQ4IGJsb2NraW5nOworfQorbWVkaWFfYXVkX3BsYXlfYnlfc3RyaW5nX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGthbF91aW50OCByZXN1bHQ7Cit9CittZWRpYV9hdWRfcGxheV9ieV9zdHJpbmdfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzcmNfaWQ7Cit9CittZWRpYV9hdWRfc3RvcF9ieV9zdHJpbmdfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzcmNfaWQ7CisgICAga2FsX3VpbnQ4IHJlc3VsdDsKK30KK21lZGlhX2F1ZF9zdG9wX2J5X3N0cmluZ19jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQxNiBpZGVudGlmaWVyOworICAgIGthbF91aW50OCByZXN1bHQ7Cit9CittZWRpYV9hdWRfcGxheV9maW5pc2hfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBkZXZpY2U7CisgICAga2FsX2Jvb2wgbXV0ZTsKK30KK21lZGlhX2F1ZF9tdXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcmVzdWx0OworfQorbWVkaWFfYXVkX211dGVfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9pbnQxNiBpbnB1dF9pZHg7CisgICAga2FsX2ludDE2IG91dHB1dF9pZHg7Cit9CittZWRpYV9hdWRfc3Bfc2V0X2Zpcl9jb2VmZl9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG1vZGU7CisgICAga2FsX2Jvb2wgaXNfd2l0aF9wYXJhbTsKKyAgICBrYWxfdWludDE2IHBhcmFtWzE2XTsKKyAgICBrYWxfdWludDE2IHdiX3BhcmFtWzE2XTsKK30KK21lZGlhX2F1ZF9zcF9zZXRfZW5oYW5jZV9tb2RlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBzcGVlY2hfb247CisgICAga2FsX3VpbnQ4IHJhdF9tb2RlOworfQorbWVpZGFfYXVkX3NwX3NldF9tb2RlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcmVzdWx0OworfQorbWVkaWFfYXVkX3NwX3NldF9tb2RlX2NuZl9zdHJ1Y3Q7CisKKyNpZm5kZWYgTDRfTk9UX1BSRVNFTlQKKworI2luY2x1ZGUgImRldmljZS5oIgorCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCB2b2x1bWVfZ2FpbltNQVhfVk9MX0NBVEVdW01BWF9WT0xfVFlQRV1bTUFYX1ZPTF9MRVZFTF07CisgICAga2FsX3VpbnQ4IHZvbHVtZVtNQVhfVk9MX0NBVEVdW01BWF9WT0xfVFlQRV07CisgICAga2FsX3VpbnQ4IG1heF9tZWxvZHlfdm9sdW1lX2dhaW5bTUFYX1ZPTF9DQVRFICsgMV07CisgICAga2FsX3VpbnQ4IG1lbG9keV92b2x1bWVfZ2Fpbl9zdGVwW01BWF9WT0xfQ0FURSArIDFdOworICAgIGthbF91aW50OCB0dl9vdXRfdm9sdW1lX2dhaW5bTUFYX1ZPTF9MRVZFTF07Cit9IGN1c3RvbV9hY291c3RpY19zdHJ1Y3Q7CisjZW5kaWYKKworI2VuZGlmIC8qIF9NRURfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZy5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRfbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAyOWQzMAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZy5oCkBAIC0wLDAgKzEsMTQzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgTW9kaWZpY2F0aW9uIE5vdGljZToKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IE1lZGlhVGVrIEluYy4gYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGZ0X21zZy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBNZXNzYWdlcyBkZWZpbml0aW9uIG9mIEZUIHRhc2sKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIEZUX01TR19ICisjZGVmaW5lIEZUX01TR19ICisKKworI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisjaWZuZGVmIEwxX1NJTQorI2luY2x1ZGUgIm1lZF9zdHJ1Y3QuaCIKKyNpbmNsdWRlICJmc190eXBlLmgiCisjZW5kaWYgLy8gI2lmbmRlZiBMMV9TSU0KKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImZ0X21zZ19jb21tb24uaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogIE1lc3NhZ2Ugc3RydWN0dXJlcyBkZWZpbmVkIGZvciBOVlJBTSBJbnRlcmZhY2UKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIEwxX1NJTQordHlwZWRlZiBzdHJ1Y3QgeworICAgRlRfSERSCisgICBrYWxfdWludDMyCWR1bW15OworfSBGVF9OVlJBTV9HRVRfRElTS19JTkZPX1JFUTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgRlRfSERSCisgICBrYWxfdWludDgJc3RhdHVzOworICAga2FsX3VpbnQzMglkaXNrZmlsZXNpemU7CisgICBrYWxfdWludDMyCWZyZWVzcGFjZTsKKyAgIGthbF91aW50MzIJb3ZlcmhlYWQ7Cit9IEZUX05WUkFNX0dFVF9ESVNLX0lORk9fQ05GOworCit0eXBlZGVmIHN0cnVjdAoreworICAgRlRfSERSCisgICBrYWxfdWludDggICAgICAgcG93ZXJvbl9tb2RlOworfWZ0X252cmFtX3N0YXJ0dXBfcmVxX3N0cnVjdF9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgRlRfSERSCisgICBrYWxfdWludDggICAgICAgc3RhdHVzOworfWZ0X252cmFtX3N0YXJ0dXBfY25mX3N0cnVjdF9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgRlRfSERSCisgICBrYWxfdWludDggICAgICAgcmVzZXRfY2F0ZWdvcnk7CisgICBrYWxfdWludDE2ICAgICAgZmlsZV9pZHg7Cit9ZnRfbnZyYW1fcmVzZXRfcmVxX3N0cnVjdF9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgRlRfSERSCisgICBrYWxfdWludDggICAgICAgc3RhdHVzOworfWZ0X252cmFtX3Jlc2V0X2NuZl9zdHJ1Y3RfVDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEdlbmVyaWMgUHJpbWl0aXZlcyBmb3IgUkVBRC9XUklURSBOVlJBTQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgRlRfSERSCisgICBrYWxfdWludDE2ICAgICAgZmlsZV9pZHg7CisgICBrYWxfdWludDE2ICAgICAgcGFyYTsKKyAgIGthbF91aW50OCAgICAgICBzdGF0dXM7IAorfSBmdF9udnJhbV9yZWFkX2NuZl9zdHJ1Y3RfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIEZUX0hEUgorICAga2FsX3VpbnQxNiAgICAgIGZpbGVfaWR4OworICAga2FsX3VpbnQxNiAgICAgIHBhcmE7CisgICBrYWxfdWludDggICAgICAgY2lwaGVyZWRfZGF0YV92YWxpZDsKKyAgIGthbF91aW50OCAgICAgICBjaXBoZXJlZF9kYXRhWzRdOworfSBmdF9udnJhbV9yZWFkX3JlcV9zdHJ1Y3RfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIEZUX0hEUgorICAga2FsX3VpbnQxNiAgICAgIGZpbGVfaWR4OworICAga2FsX3VpbnQxNiAgICAgIHBhcmE7CisgICBrYWxfdWludDE2ICAgICAgcmVjX2Ftb3VudDsgICAgICAgICAvKiAgdG90YWwgcmVjb3JkIHRvIHJlYWQgKi8KKyAgIGthbF91aW50OCAgICAgICAqYnVmZmVyOyAgICAgICAgICAgIC8qICBidWZmZXIgdG8gZmlsbCBpbiBkYXRhICovCisgICBrYWxfdWludDMyICAgICAgYnVmX3NpemU7ICAgICAgICAgICAvKiAgYnVmZmVyIHNpemUgKi8KKworfSBmdF9udnJhbV9yZWFkX3NtX3JlcV9zdHJ1Y3RfVDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgRlRfSERSCisgICBrYWxfdWludDE2ICAgICAgZmlsZV9pZHg7CisgICBrYWxfdWludDE2ICAgICAgcGFyYTsKKyAgIGthbF91aW50OCAgICAgICBzdGF0dXM7Cit9IGZ0X252cmFtX3dyaXRlX2NuZl9zdHJ1Y3RfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIEZUX0hEUgorICAga2FsX3VpbnQxNiAgICAgIGZpbGVfaWR4OworICAga2FsX3VpbnQxNiAgICAgIHBhcmE7CisgICBrYWxfdWludDggICAgICAgbXNnX251bTsKKyAgIGthbF91aW50OCAgICAgICBtc2dfaWR4OworfSBmdF9udnJhbV93cml0ZV9yZXFfc3RydWN0X1Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlGVF9IRFIKKwlrYWxfdWludDgJCWxvY2tfZW47Cit9IGZ0X252cmFtX2xvY2tfcmVxX3N0cnVjdF9UOworCit0eXBlZGVmIHN0cnVjdCB7CisJRlRfSERSCisJa2FsX3VpbnQ4CQlzdGF0dXM7Cit9IGZ0X252cmFtX2xvY2tfY25mX3N0cnVjdF9UOworICAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICBNZXNzYWdlIHN0cnVjdHVyZXMgZGVmaW5lZCBmb3IgQmFzZUJhbmQgSW50ZXJmYWNlCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtCit7CisgICAgIEZUX01UX1VOS05PV04gPTAsCisgICAgIEZUX01UNjMwNSwKKyAgICAgRlRfTVQ2MzE4LAorICAgICBGVF9NVDYzMjYsCisgICAgIEZUX1BNSUNfRU5ECit9ZnRfUE1JQ1R5cGU7CisKK3R5cGVkZWYgZW51bQoreworCUZUX0Jhc2VCYW5kUmVnID0gMCwKKwlGVF9QTUlDUmVnCQorfWZ0X1JlZ2lzdGVyVHlwZTsKK3R5cGVkZWYgc3RydWN0Cit7CisgIEZUX0hEUgorICBrYWxfdWludDMyICAgICAgICAgICAgYWRkcjsKK30gZnRfUmVnaXN0ZXJSZWFkX3JlcV9UOworCit0eXBlZGVmIHN0cnVjdAoreworICBGVF9IRFIKKyAga2FsX3VpbnQxNiAgICAgICAgICAgIHZhbHVlOworICBrYWxfdWludDggICAgICAgICAgICAgc3RhdHVzOworfSBmdF9SZWdpc3RlclJlYWRfY25mX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEZUX0hEUgorICBrYWxfdWludDMyICAgICAgICAgICAgYWRkcjsKKyAga2FsX3VpbnQxNiAgICAgICAgICAgIHZhbHVlOworfSBmdF9SZWdpc3RlcldyaXRlX3JlcV9UOworCit0eXBlZGVmIHN0cnVjdAoreworICBGVF9IRFIKKyAga2FsX3VpbnQ4ICAgICAgICAgICAgIHN0YXR1czsKK30gZnRfUmVnaXN0ZXJXcml0ZV9jbmZfVDsKK3R5cGVkZWYgc3RydWN0Cit7CisgIEZUX0hEUgorICBrYWxfdWludDMyICAgICAgICAgICAgYWRkcjsKK30gZnRfUE1JQ1JlZ2lzdGVyUmVhZF9yZXFfVDsKK3R5cGVkZWYgc3RydWN0Cit7CisgIEZUX0hEUgorICBrYWxfdWludDE2ICAgICAgICAgICAgdmFsdWU7CisgIGthbF91aW50OCAgICAgICAgICAgICBzdGF0dXM7Cit9IGZ0X1BNSUNSZWdpc3RlclJlYWRfY25mX1Q7Cit0eXBlZGVmIHN0cnVjdAoreworICBGVF9IRFIKKyAga2FsX3VpbnQzMiAgICAgICAgICAgIGFkZHI7CisgIGthbF91aW50MTYgICAgICAgICAgICB2YWx1ZTsKK30gZnRfUE1JQ1JlZ2lzdGVyV3JpdGVfcmVxX1Q7Cit0eXBlZGVmIHN0cnVjdAoreworICBGVF9IRFIKKyAga2FsX3VpbnQ4ICAgICAgICAgICAgIHN0YXR1czsKK30gZnRfUE1JQ1JlZ2lzdGVyV3JpdGVfY25mX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEZUX0hEUgorICBrYWxfdWludDggICAgICAgICAgICAgU2VsOworICBrYWxfdWludDE2ICAgICAgICAgICAgTWVhY291bnQ7IAorfSBmdF9GdEFEQ19HZXRNZWFEYXRhX3JlcV9UOwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgRlRfSERSCisgIGthbF91aW50MzIgICAgICAgICAgICB2YWx1ZTsKKyAga2FsX3VpbnQ4ICAgICAgICAgICAgIHN0YXR1czsKK30gZnRfRnRBRENfR2V0TWVhRGF0YV9jbmZfVDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogIE1lc3NhZ2Ugc3RydWN0dXJlcyBkZWZpbmVkIGZvciBGQVQgSW50ZXJmYWNlCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEZUX0ZBVF9FUlJfUEFUSF9UT09fTE9ORwktNTAwCisjZGVmaW5lIEZUX0ZBVF9FUlJfUEFUSF9SRVNUUklDVElPTgktNTAxCisjZGVmaW5lIEZUX0ZBVF9FUlJfRElSX05PVF9FWElTVAktNTAyCisjZGVmaW5lIEZUX0ZBVF9FUlJfQUNUSU9OX05PVF9TVVBQT1JUIC0gNTAzCisKK3R5cGVkZWYgZW51bSB7CisJIEZUX0ZBVF9PUF9PUEVOID0gMQorCSxGVF9GQVRfT1BfUkVBRCA9IDIKKwksRlRfRkFUX09QX1dSSVRFID0gNAorCSxGVF9GQVRfT1BfQ0xPU0UgPSA4CisJLEZUX0ZBVF9PUF9GSUxFU0laRQorCSxGVF9GQVRfT1BfREVMRVRFCisJLEZUX0ZBVF9PUF9NT1ZFCisJLEZUX0ZBVF9PUF9GSU5EX0ZJTEUKKwksRlRfRkFUX09QX0ZJTkRfRklMRV9SRUNVUlNJVkUKKwksRlRfRkFUX09QX0ZJTkRfRElSX1JFQ1VSU0lWRQorCSxGVF9GQVRfT1BfR0VUX0RJU0tfSU5GTworCSxGVF9GQVRfT1BfUk1ESVIKKwksRlRfRkFUX09QX0dFVF9EUklWRV9UWVBFCisJLEZUX0ZBVF9PUF9FTkQKK31GVF9GQVRfT1A7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJRlRfSERSCisJRlRfRkFUX09QCWZhdF9vcDsKKwlGU19IQU5ETEUJZnNfaGFuZGxlOworCWthbF9pbnQzMglvZmZzZXQ7CisJa2FsX3VpbnQ4CWxhc3RfZnJhbWU7CisJa2FsX2ludDMyCXN0YXR1czsKKworfUZUX0ZBVF9PUEVSQVRJT047CisKK3R5cGVkZWYgc3RydWN0IHsKKwlrYWxfdWludDMyCVR5cGU7CisJa2FsX3VpbnQzMglTZWN0b3JzUGVyQ2x1c3RlcjsKKwlrYWxfdWludDMyCVRvdGFsQ2x1c3RlcnM7CisJa2FsX3VpbnQzMglGcmVlQ2x1c3RlcnM7Cit9RlRfRkFUX0Rpc2tJbmZvX1Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlrYWxfaW50MzIJZmlsZXNpemU7Cit9RlRfRkFUX0ZJTEVTSVpFOworI2VuZGlmIC8vICNpZm5kZWYgTDFfU0lNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgTWVzc2FnZSBzdHJ1Y3R1cmVzIGRlZmluZWQgZm9yIFZlcnNpb24gSW5mbyBJbnRlcmZhY2UKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlGVF9IRFIKK31GVF9WRVJfSU5GT19SRVE7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlGVF9IRFIKKwlrYWxfdWludDgJYmJfY2hpcFs2NF07CisJa2FsX3VpbnQ4CWVjb192ZXJbNF07CisJa2FsX3VpbnQ4CWRzcF9md1s2NF07CisJa2FsX3VpbnQ4CWRzcF9wYXRjaFs2NF07CisJa2FsX3VpbnQ4CXN3X3Zlcls2NF07CisJa2FsX3VpbnQ4CWh3X3Zlcls2NF07CisJa2FsX3VpbnQ4CW1lbG9keV92ZXJbNjRdOworCWthbF91aW50OAlzd19mbGF2b3JbNjRdOworfUZUX1ZFUl9JTkZPX0NORjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogIE1lc3NhZ2Ugc3RydWN0dXJlcyBkZWZpbmVkIGZvciByZWFkeSBjb25maXJtCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCB7CisJRlRfSERSCisJa2FsX3VpbnQzMgkJZHVtbXk7CQkvLyBleHRlbmQgYWxpZ25tZW50IHRvIDQgYnl0ZXMKK31GVF9JU19BTElWRV9SRVE7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlGVF9IRFIKKwlrYWxfdWludDMyCQlkdW1teTsJCS8vIGV4dGVuZCBhbGlnbm1lbnQgdG8gNCBieXRlcworfUZUX0lTX0FMSVZFX0NORjsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgTWVzc2FnZSBzdHJ1Y3R1cmVzIGRlZmluZWQgZm9yIFNMQQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCUZUX0hEUgorCWthbF91aW50MzIJCWR1bW15OwkJLy8gZXh0ZW5kIGFsaWdubWVudCB0byA0IGJ5dGVzCit9RlRfR0VUX1NMQV9TVEFUVVNfUkVROworCit0eXBlZGVmIHN0cnVjdCB7CisJRlRfSERSCisJa2FsX3VpbnQxNgkJc2xhX2NvbmZpZzsKKyAgICBrYWxfdWludDE2ICAgICAgc2xhX3ZlcmlmaWVkOworfUZUX0dFVF9TTEFfU1RBVFVTX0NORjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUZUX0hEUgorCWthbF91aW50MzIgICAgICBzbGFfdmVyX2Zyb21fcGM7Cit9RlRfQ0hFQ0tfU0xBX1ZFUl9SRVE7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlGVF9IRFIKKwlrYWxfdWludDMyICAgICAgc3RhdHVzOworfUZUX0NIRUNLX1NMQV9WRVJfQ05GOworCisjZGVmaW5lIFJORF9CVUZfTEVOCSAgICAxNgordHlwZWRlZiBzdHJ1Y3QgeworCUZUX0hEUgorCWthbF91aW50OCAgICAgICByYW5kX251bVtSTkRfQlVGX0xFTl07CisgICAga2FsX3VpbnQzMiAgICAgIHJhbmRfbnVtX2xlbjsKKyAgICBrYWxfdWludDggICAgICAgY3VzdF9wYXJhWzI1Nl07CisgICAga2FsX2ludDMyICAgICAgIHN0YXR1czsKK31GVF9HRVRfU0xBX1BBUkFfQ05GOworCit0eXBlZGVmIHN0cnVjdCB7CisJRlRfSERSCisJa2FsX3VpbnQ4CWVuY3J5cHRlZFsyNTZdOworICAgIGthbF91aW50MzIgIGVuY3J5cHRlZF9sZW47Cit9RlRfVkVSSUZZX1NMQV9STkRfUkVROworCit0eXBlZGVmIHN0cnVjdCB7CisJRlRfSERSCisgICAga2FsX2ludDMyCXN0YXR1czsKK31GVF9WRVJJRllfU0xBX1JORF9DTkY7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlGVF9IRFIKKyAgICBrYWxfdWludDE2CWRlbmllZE1zZ0lkOworICAgIGthbF91aW50MzIJc3RhdHVzOworfUZUX0RFTklFRF9NU0dfSURfQ05GOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgTWVzc2FnZSBzdHJ1Y3R1cmVzIGRlZmluZWQgZm9yIHBvd2VyIG9mZiBjb21tYW5kCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBMMV9TSU0KK3R5cGVkZWYgc3RydWN0IHsKKwlGVF9IRFIKKwlrYWxfdWludDMyCQlkdW1teTsJCQkvLyBleHRlbmQgYWxpZ25tZW50IHRvIDQgYnl0ZXMKK31GVF9QT1dFUl9PRkZfUkVROworI2VuZGlmIC8vICNpZm5kZWYgTDFfU0lNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgTWVzc2FnZSBzdHJ1Y3R1cmVzIGRlZmluZWQgZm9yIGNoZWNraW5nIE1FVEFfRExMIHZlcnNpb24gCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCB7CisJRlRfSERSCisJa2FsX3VpbnQzMgkJbWV0YV92ZXJfZnJvbV9wYzsKKwlrYWxfdWludDgJCWR1bW15WzI1Nl07Cit9RlRfQ0hFQ0tfTUVUQV9WRVJfUkVROworCit0eXBlZGVmIHN0cnVjdCB7CisJRlRfSERSCisJa2FsX3VpbnQzMgkJbWV0YV92ZXJfcmVxdWlyZWRfYnlfdGFyZ2V0OworCWthbF91aW50OAkJZHVtbXlbMjU2XTsKK31GVF9DSEVDS19NRVRBX1ZFUl9DTkY7CisjaWZuZGVmIEwxX1NJTQordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICBrYWxfdWludDggbGlkX2NvdW50OworfWZ0X2NhbF9kYXRhX2FkZF9vbmVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICBrYWxfdWludDggc3RhdHVzOworfWZ0X2NhbF9kYXRhX2FkZF9vbmVfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50MTYgbGlkOworICAgIGthbF91aW50MTYgcmlkOworfUZUX0NBTF9EQVRBX0NIRUNLX1JFUV9UOworI2VuZGlmIC8vICNpZm5kZWYgTDFfU0lNCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICBNZXNzYWdlIHN0cnVjdHVyZXMgZGVmaW5lZCBmb3IgTDQgQVQgY29tbWFuZCBJbnRlcmZhY2UKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlGVF9IRFIKKwlrYWxfdWludDMyCQl0eXBlOwkKK31GVF9MNF9BVENNRF9SRVE7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlGVF9IRFIKKwlrYWxfdWludDMyCQl0eXBlOworCWthbF91aW50MzIgICAgICAgICAgICAgc3RhdHVzOworfUZUX0w0X0FUQ01EX0NORjsKKyNpZm5kZWYgTDFfU0lNCisjaW5jbHVkZSAiZnRfbXNnX2Z0YS5oIgorI2luY2x1ZGUgImZ0X21zZ19mdGMuaCIKKyNpbmNsdWRlICJmdF9tc2dfbWlzYy5oIgorI2luY2x1ZGUgImZ0X21zZ19taXNjX2V4LmgiCisjZW5kaWYgLy8gI2lmbmRlZiBMMV9TSU0KKyNpbmNsdWRlICJmdF9tc2dfdXRpbC5oIgorI2luY2x1ZGUgImZ0X21zZ19sMXJmLmgiCisjaW5jbHVkZSAiZnRfbXNnX3VsMXJmLmgiCisjaW5jbHVkZSAiZnRfbXNnX2x0ZXJmLmgiCisjaW5jbHVkZSAiZnRfbXNnX21tcmYuaCIKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdF9tc2dfY29tbW9uLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdF9tc2dfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMyZjE4ZQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZ19jb21tb24uaApAQCAtMCwwICsxLDMyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgTW9kaWZpY2F0aW9uIE5vdGljZToKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IE1lZGlhVGVrIEluYy4gYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGZ0X21zZ19jb21tb24uaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgQ29tbW9uIGRlZmluaXRpb24gZm9yIE1FVEEgY29tbW51aWNhdGlvbgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9GVF9NU0dfQ09NTU9OX0hfCisjZGVmaW5lIF9GVF9NU0dfQ09NTU9OX0hfCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKK3R5cGVkZWYgZW51bQoreworICAvKiBSRiAqLworICBGVF9SRl9URVNUX1JFUV9JRCA9IDAgICAgICAgICAgICAgICAgICAgICAgICwvKjAqLworICBGVF9SRl9URVNUX0NORl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICwKKyAgLyogQmFzZUJhbmQgKi8KKyAgRlRfUkVHX1JFQURfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsCisgIEZUX1JFR19SRUFEX0NORl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgLAorICBGVF9SRUdfV1JJVEVfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwKKyAgRlRfUkVHX1dSSVRFX0NORl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAsLyo1Ki8KKyAgRlRfQURDX0dFVE1FQURBVEFfSUQgICAgICAgICAgICAgICAgICAgICAgICAsCisgIEZUX0FEQ19HRVRNRUFEQVRBX0NORl9JRCAgICAgICAgICAgICAgICAgICAgLAorICAvKiB0ZXN0IGFsaXZlICovCisgIEZUX0lTX0FMSVZFX1JFUV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgLAorICBGVF9JU19BTElWRV9DTkZfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICwKKyAgLyogcG93ZXIgb2ZmICovCisgIEZUX1BPV0VSX09GRl9SRVFfSUQgICAgICAgICAgICAgICAgICAgICAgICAgLC8qMTAqLworICAvKiB1bnVzZWQgKi8KKyAgRlRfUkVTRVJWRUQwNF9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsCisgIC8qIHJlcXVpcmVkIE1FVEFfRExMIHZlcnNpb24gKi8KKyAgRlRfQ0hFQ0tfTUVUQV9WRVJfUkVRX0lEICAgICAgICAgICAgICAgICAgICAsCisgIEZUX0NIRUNLX01FVEFfVkVSX0NORl9JRCAgICAgICAgICAgICAgICAgICAgLAorICAvKiB1dGlsaXR5IGNvbW1hbmQgKi8KKyAgRlRfVVRJTElUWV9DT01NQU5EX1JFUV9JRCAgICAgICAgICAgICAgICAgICAsCisgIEZUX1VUSUxJVFlfQ09NTUFORF9DTkZfSUQgICAgICAgICAgICAgICAgICAgLC8qMTUqLworICAvKiBmb3IgTlZSQU0gKi8KKyAgRlRfTlZSQU1fR0VUX0RJU0tfSU5GT19SRVFfSUQgICAgICAgICAgICAgICAsCisgIEZUX05WUkFNX0dFVF9ESVNLX0lORk9fQ05GX0lEICAgICAgICAgICAgICAgLAorICBGVF9OVlJBTV9SRVNFVF9SRVFfSUQgICAgICAgICAgICAgICAgICAgICAgICwKKyAgRlRfTlZSQU1fUkVTRVRfQ05GX0lEICAgICAgICAgICAgICAgICAgICAgICAsCisgIEZUX05WUkFNX0xPQ0tfQ05GX0lEICAgICAgICAgICAgICAgICAgICAgICAgLC8qMjAqLworICBGVF9OVlJBTV9MT0NLX1JFUV9JRCAgICAgICAgICAgICAgICAgICAgICAgICwKKyAgRlRfTlZSQU1fUkVBRF9SRVFfSUQgICAgICAgICAgICAgICAgICAgICAgICAsCisgIEZUX05WUkFNX1JFQURfQ05GX0lEICAgICAgICAgICAgICAgICAgICAgICAgLAorICBGVF9OVlJBTV9XUklURV9SRVFfSUQgICAgICAgICAgICAgICAgICAgICAgICwKKyAgRlRfTlZSQU1fV1JJVEVfQ05GX0lEICAgICAgICAgICAgICAgICAgICAgICAsLyoyNSovCisgIC8qIEZBVCAqLworICBGVF9GQVRfT1BFUkFUSU9OX0lEID0gMjYgICAgICAgICAgICAgICAgICAgICwvKiAyNiB+IDQwICovCisgIC8qIEw0IEF1ZGlvICovCisgIEZUX0w0QVVEX1JFUV9JRCA9IDQxICAgICAgICAgICAgICAgICAgICAgICAgLC8qIDQxIH4gNTAgKi8KKyAgRlRfTDRBVURfQ05GX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsCisgIC8qIFZlcnNpb24gSW5mbyAqLworICBGVF9WRVJfSU5GT19SRVFfSUQgPSA1MSAgICAgICAgICAgICAgICAgICAgICwvKiA1MSAqLworICBGVF9WRVJfSU5GT19DTkZfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICwKKyAgLyogQ0NUICovCisgIEZUX0NDVF9SRVFfSUQgPSA1MyAgICAgICAgICAgICAgICAgICAgICAgICAgLC8qIDUzICovCisgIEZUX0NDVF9DTkZfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLAorICAvKiBXaUZpICovCisgIEZUX1dJRklfV05EUlZfU0VUX1JFUV9JRCA9IDU1ICAgICAgICAgICAgICAgLC8qIDU1ICovCisgIEZUX1dJRklfV05EUlZfU0VUX0NORl9JRCAgICAgICAgICAgICAgICAgICAgLAorICBGVF9XSUZJX1dORFJWX1FVRVJZX1JFUV9JRCA9IDU3ICAgICAgICAgICAgICwvKiA1NyAqLworICBGVF9XSUZJX1dORFJWX1FVRVJZX0NORl9JRCAgICAgICAgICAgICAgICAgICwKKyAgRlRfV0lGSV9SRVFfSUQgPSA1OSAgICAgICAgICAgICAgICAgICAgICAgICAsLyogNTkgKi8KKyAgRlRfV0lGSV9DTkZfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsCisgIEZUX0JUX1JFUV9JRCA9IDYxICAgICAgICAgICAgICAgICAgICAgICAgICAgLAorICBGVF9CVF9DTkZfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwKKyAgRlRfUE1JQ19SRUdfUkVBRF9JRCA9IDYzICAgICAgICAgICAgLAorICBGVF9QTUlDX1JFR19SRUFEX0NORl9JRCAgICAgICAgICAgICAsCisgIEZUX1BNSUNfUkVHX1dSSVRFX0lEID0gNjUgICAgICAgICAgICwKKyAgRlRfUE1JQ19SRUdfV1JJVEVfQ05GX0lEICAgICAgICAgICAgICAgICwKKyAgRlRfVVJGX1RFU1RfUkVRX0lEID0gNjcgICAgICAgICAgICAgICAgICAgLCAgIC8qIDY3ICovCisgIEZUX1VSRl9URVNUX0NORl9JRCAgICAgICAgICAgICAgICAgICwKKyAgRlRfRk1fUkVRX0lEID0gNjkgICAgICAgICAgICAgICAgICAgICAgICAgICwgICAvKiA2OSAqLworICBGVF9GTV9DTkZfSUQgPSA3MCAgICAgICAgICAgICAgICAgICAgICAgICAgLAorICBGVF9URE1CX1JFUV9JRCA9IDcxICAgICAgICAgICAgICAgICwgLyogNzEgKi8KKyAgRlRfVERNQl9DTkZfSUQgPSA3MiAgICAgICAgICAgICAgICAsIC8qIDcyICovCisgIEZUX01JU0NfQ01EX1JFUV9JRCA9IDczICAgICAgICAgICAgLAorICBGVF9NSVNDX0NNRF9DTkZfSUQgPSA3NCAgICAgICAgICAgICwKKyAgRlRfQ01NQl9SRVFfSUQgPSA3NSAgICAgICAgICAgICAgICAsCisgIEZUX0NNTUJfQ05GX0lEID0gNzYgICAgICAgICAgICAgICAgLAorICBGVF9DVVNUT01fUkVRX0lEID0gNzcgICAgICAgICAgICAgICwKKyAgRlRfQ1VTVE9NX0NORl9JRCA9IDc4ICAgICAgICAgICAgICAsCisgIEZUX01JU0NfRVhfQ01EX1JFUV9JRCA9IDc5ICAgICAgICAgICAgLAorICBGVF9NSVNDX0VYX0NNRF9DTkZfSUQgPSA4MCAgICAgICAgICAgICwKKyAgRlRfQVVYX1JFUV9JRCA9IDgxICAgICAgICAgICAgICAgICAsCisgIEZUX0FVWF9DTkZfSUQgPSA4MiAgICAgICAgICAgICAgICAgLAorICBGVF9NQVRWX0NNRF9SRVFfSUQgPSA4MyAgICAgICAgICAgICwKKyAgRlRfTUFUVl9DTURfQ05GX0lEID0gODQgICAgICAgICAgICAsCisgICAvKiBMNCBBdWRpbyBFWCBhZnRlciBhbGwgYXVkaW8gZGV2ZWxvcGVkIGluIHcxMC4xMCAqLworICBGVF9MNEFVRF9SRVFfRVhfSUQgPSA4NSAgICAgICAgICAgICAgICAgICwKKyAgRlRfTDRBVURfQ05GX0VYX0lEID0gODYgICAgICAgICAgICAgICAgICAgLAorICAvKiBORkMgdGVzdCBjb21tYW5kIGNhdGVnb3J5ICovCisgIEZUX05GQ19DTURfUkVRX0lEID0gODcsCisgIEZUX05GQ19DTURfQ05GX0lEID0gODgsCisgIC8qIExURSBjb21tYW5kICovCisgIEZUX0VSRl9URVNUX1JFUV9JRCA9IDkxLAorICBGVF9FUkZfVEVTVF9DTkZfSUQgPSA5MiwKKyAgRlRfUEhZX1RPT0xfUkVRX0lEID0gOTMsCisgIEZUX1BIWV9UT09MX0NORl9JRCA9IDk0LAorICAvKiBNTVJGIGNvbW1hbmQgKi8KKyAgRlRfTU1SRl9URVNUX1JFUV9JRCA9IDk1LAorICBGVF9NTVJGX1RFU1RfQ05GX0lEID0gOTYsICAKKyAgLyogQzJLIGNvbW1hbmQgKi8KKyAgRlRfQ1JGX1RFU1RfUkVRX0lEID0gOTcsCisgIEZUX0NSRl9URVNUX0NORl9JRCA9IDk4LCAKKyAgLyogVGhpcyBpcyBhIHNwZWNpYWwgbWVzc2FnZSBkZWZpbmVkIHRvIGhhbmRsZSBMMSByZXBvcnQuICovCisgIC8qIEw0X0FUX2NvbW1hbmQgICovCisgIEZUX0w0X0FUQ01EX1JFUV9JRCA9IDk5LAorICBGVF9MNF9BVENNRF9DTkZfSUQgPSAxMDAsCisgIC8qIE5SIGNvbW1hbmQgKi8KKyAgRlRfTlJGX1RFU1RfUkVRX0lEICA9IDEwMSwKKyAgRlRfTlJGX1RFU1RfQ05GX0lEID0gMTAyLAorICAvKiBTTEEgY29tbWFuZCovCisgIEZUX0dFVF9TTEFfU1RBVFVTX1JFUV9JRCA9IDEwMywKKyAgRlRfR0VUX1NMQV9TVEFUVVNfQ05GX0lEID0gMTA0LAorICBGVF9HRVRfU0xBX1BBUkFfUkVRX0lEID0gMTA1LAorICBGVF9HRVRfU0xBX1BBUkFfQ05GX0lEID0gMTA2LAorICBGVF9WRVJJRllfU0xBX1JORF9SRVFfSUQgPSAxMDcsCisgIEZUX1ZFUklGWV9TTEFfUk5EX0NORl9JRCA9IDEwOCwKKyAgRlRfQ0hFQ0tfU0xBX1ZFUl9SRVFfSUQgPSAxMDksCisgIEZUX0NIRUNLX1NMQV9WRVJfQ05GX0lEID0gMTEwLAorICBGVF9DTURfREVOSUVEX1JFUV9JRCA9IDExMSwKKyAgRlRfQ01EX0RFTklFRF9DTkZfSUQgPSAxMTIsCisgIEZUX0RJU1BBVENIX1JFUE9SVF9JRCAgICAgICAgICAgICAgICAgICAgICAgLAorICBGVF9NU0dfTEFTVF9JRCAgID0gIEZUX0RJU1BBVENIX1JFUE9SVF9JRAorfUZUX01FU1NBR0VfSUQ7CisKKy8qIEhlYWRlciBvZiBldmVyeSBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgRlRfSERSIFwKKyAgICBMT0NBTF9QQVJBX0hEUiBcCisgICAgc3RydWN0IHsgXAorICAgICAgICBrYWxfdWludDE2IHRva2VuO1wKKyAgICAgICAga2FsX3VpbnQxNiBmdF9tc2dfaWQ7XAorICAgIH0gaGVhZGVyOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQxNiB0b2tlbjsKKyAgICBrYWxfdWludDE2IGZ0X21zZ19pZDsKK30gRlRfSDsKKworLyogc3RydWN0IGRlZmluaXRpb24gZm9yIEZUIHJlcXVlc3QgJiBjb25maXJtICovCit0eXBlZGVmIEZUX0ggdHN0X3RvX2Z0X3N0cnVjdDsKK3R5cGVkZWYgRlRfSCBmdF90b190c3Rfc3RydWN0OworCisjZGVmaW5lIEZUX0NORl9PSyAgIDAKKyNkZWZpbmUgRlRfQ05GX0ZBSUwgMQorI2RlZmluZSBGVF9DTkZfTk9UX1NVUFBPUlRFRCAyCisjZGVmaW5lIEZUX0NORl9OT1RfQUxMT1dFRCAgIDMKKyNkZWZpbmUgRlRfQ05GX1JFVFJZICAgICAgICAgNAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogIFV0aWxpdHkgRnVuY3Rpb25zCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBfRlRfQUxMT0NfTVNHKGlsbV9zdHJ1Y3QqIHB0cl9pbG0sIGthbF91aW50MTYgc2l6ZSwga2FsX2Jvb2wgSXNGdE1zZywga2FsX2Jvb2wgSXNDY01zZyk7Cit2b2lkIF9GVF9DT05TVFJVQ1RfQ0NfTVNHKGNvbnN0IGlsbV9zdHJ1Y3QqIGlsbV9wdHIsIGlsbV9zdHJ1Y3QqIGlsbV9jY19wdHIpOwordm9pZCBfRlRfU2VuZEZ0TXNnQnlUb2tlbihtb2R1bGVfdHlwZSAgc3JjX21vZCwgbW9kdWxlX3R5cGUgIGRlc3RfbW9kLCBzYXBfdHlwZSAgc2FwLCBtc2dfdHlwZSAgbXNnLCBpbG1fc3RydWN0ICAqaWxtX3B0ciwga2FsX3VpbnQxNiAgdG9rZW4pOwordm9pZCBfRlRfU2VuZEZ0TXNnVG9QY0J5VG9rZW4oaWxtX3N0cnVjdCAgKmlsbV9wdHIsIGthbF91aW50MTYgIHRva2VuKTsKK2thbF91aW50MTYgICBGVF9HZXRHb2xiYWxUb2tlbih2b2lkKTsKK3ZvaWQgRlRfU2VuZERlbmllZE1zZ0lkQ25mKGthbF91aW50MTYgZGVuaWVkTXNnSWQsIGthbF91aW50MzIgc3RhdHVzKTsKKy8qIGFsbG9jYXRlIG1lc3NhZ2Ugd2l0aCBsb2NhbCBwYXJhbWV0ZXIgd2l0aCBGVF9IIGhlYWRlciAqLworI2RlZmluZSBGVF9BTExPQ19NU0cocHRyX2lsbSxzaXplKSBfRlRfQUxMT0NfTVNHKHB0cl9pbG0sIHNpemUsIEtBTF9UUlVFLCAgS0FMX0ZBTFNFKQorLyogYWxsb2NhdGUgbWVzc2FnZSBhcyBvcmRpbmFyeSBJTE0gbWVzc2FnZSAqLworI2RlZmluZSBGVF9BTExPQ19PVEhFUl9NU0cocHRyX2lsbSxzaXplKSBfRlRfQUxMT0NfTVNHKHB0cl9pbG0sIHNpemUsIEtBTF9GQUxTRSwgS0FMX0ZBTFNFKQorLyogYWxsb2NhdGUgQ3Jvc3MtQ29yZSBtZXNzYWdlIHdpdGggbG9jYWwgcGFyYW1ldGVyIHdpdGggRlRfSCBoZWFkZXIgKi8KKyNkZWZpbmUgRlRfQUxMT0NfQ0NfTVNHKHB0cl9pbG0sc2l6ZSkgX0ZUX0FMTE9DX01TRyhwdHJfaWxtLCBzaXplLCBLQUxfVFJVRSAsIEtBTF9UUlVFKQorLyogYWxsb2NhdGUgQ3Jvc3MtQ29yZSBtZXNzYWdlIGFzIG9yZGluYXJ5IElMTSBtZXNzYWdlICovCisjZGVmaW5lIEZUX0FMTE9DX09USEVSX0NDX01TRyhwdHJfaWxtLHNpemUpIF9GVF9BTExPQ19NU0cocHRyX2lsbSwgc2l6ZSwgS0FMX0ZBTFNFLCBLQUxfVFJVRSkKKyNkZWZpbmUgRlRfQ09OU1RSVUNUX0NDX01TRyhpbG1fcHRyLCBpbG1fY2NfcHRyKSAgICAgICAgICAgICAgX0ZUX0NPTlNUUlVDVF9DQ19NU0coaWxtX3B0ciwgaWxtX2NjX3B0cikKKyNkZWZpbmUgRlRfU0VORF9NU0coc3JjX21vZCwgZGVzdF9tb2QsIHNhcCwgbXNnLCBpbG1fcHRyKSAgICAgX0ZUX1NlbmRGdE1zZ0J5VG9rZW4oc3JjX21vZCwgZGVzdF9tb2QsIHNhcCwgbXNnLCBpbG1fcHRyLCBGVF9HZXRHb2xiYWxUb2tlbigpKQorI2RlZmluZSBGVF9TRU5EX01TR19UT19QQyhpbG1fcHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRlRfU2VuZEZ0TXNnVG9QY0J5VG9rZW4oaWxtX3B0ciwgRlRfR2V0R29sYmFsVG9rZW4oKSkKKyNkZWZpbmUgRlRfU0VORF9NU0dfVE9fUENfQllfVE9LRU4oaWxtX3B0ciwgdG9rZW4pICAgICAgICAgICAgX0ZUX1NlbmRGdE1zZ1RvUGNCeVRva2VuKGlsbV9wdHIsIHRva2VuKQorI2VuZGlmIC8vIF9GVF9NU0dfQ09NTU9OX0hfCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdF9tc2dfZnRhLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdF9tc2dfZnRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1ZDg4NgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZ19mdGEuaApAQCAtMCwwICsxLDEyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBNb2RpZmljYXRpb24gTm90aWNlOgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgTWVkaWFUZWsgSW5jLiBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDAxCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgZnRfbXNnX2Z0YS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBNZXNzYWdlcyBkZWZpbml0aW9uIG9mIEZUQSBjYXRlZ29yeSBvZiBGVCBMaWJyYXJ5CisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0ZUX01TR19GVEFfSF9fCisjZGVmaW5lIF9fRlRfTVNHX0ZUQV9IX18KKyNpbmNsdWRlICJmdF9tc2dfY29tbW9uLmgiCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgTWVzc2FnZSBzdHJ1Y3R1cmVzIGRlZmluZWQgZm9yIEF1eGlsaWFyeSBJbnRlcmZhY2UKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0KK3sKKyAgICBGVF9BVVhfT1BfQkFTSUMgPSAwCisgICAsRlRfQVVYX09QX0VORAorCit9TUVUQV9BVVhfQ01EX1RZUEU7CisKK3R5cGVkZWYgdW5pb24KK3sKKyAgICBrYWxfdWludDggICBtX3UxRHVtbXk7Cit9TUVUQV9BVVhfQ01EX1U7CisKK3R5cGVkZWYgdW5pb24KK3sKKyAgICBrYWxfdWludDggIG1fdTFEdW1teTsKK31NRVRBX0FVWF9DTkZfVTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVF9IRFIKKyAgICBNRVRBX0FVWF9DTURfVFlQRSAgIHR5cGU7CisgICAgTUVUQV9BVVhfQ01EX1UgICAgICBjbWQ7Cit9RlRfQVVYX1JFUTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVF9IRFIKKyAgICBNRVRBX0FVWF9DTURfVFlQRSAgIHR5cGU7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICBzdGF0dXM7CisgICAgTUVUQV9BVVhfQ05GX1UgICAgICByZXN1bHQ7Cit9RlRfQVVYX0NORjsKKwordHlwZWRlZiBGVF9BVVhfUkVRIGZ0X3RvX2Z0YV9yZXFfc3RydWN0OwordHlwZWRlZiBGVF9BVVhfQ05GIGZ0YV90b19mdF9jbmZfc3RydWN0OworI2VuZGlmIC8vICNpZm5kZWYgX19GVF9NU0dfRlRBX0hfXwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRfbXNnX2Z0Yy5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRfbXNnX2Z0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNmU3ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdF9tc2dfZnRjLmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgTW9kaWZpY2F0aW9uIE5vdGljZToKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IE1lZGlhVGVrIEluYy4gYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGZ0X21zZ19mdGMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgTWVzc2FnZXMgZGVmaW5pdGlvbiBvZiBGVEMgY2F0ZWdvcnkgb2YgRlQgTGlicmFyeQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19GVF9NU0dfRlRDX0hfXworI2RlZmluZSBfX0ZUX01TR19GVENfSF9fCisjaW5jbHVkZSAiZnRfbXNnX2NvbW1vbi5oIgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogIE1lc3NhZ2Ugc3RydWN0dXJlcyBkZWZpbmVkIGZvciBDdXN0b21lciBJbnRlcmZhY2UKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0KK3sKKyAgICBGVF9DVVNUT01FUl9PUF9CQVNJQyA9IDAKKyAgICxGVF9DVVNUT01FUl9PUF9FTkQKKworfU1FVEFfQ1VTVE9NRVJfQ01EX1RZUEU7CisKK3R5cGVkZWYgdW5pb24KK3sKKyAgICBrYWxfdWludDggICBtX3UxRHVtbXk7Cit9TUVUQV9DVVNUT01FUl9DTURfVTsKKwordHlwZWRlZiB1bmlvbgoreworICAgIGthbF91aW50OCAgbV91MUR1bW15OworfU1FVEFfQ1VTVE9NRVJfQ05GX1U7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRfSERSCisgICAgTUVUQV9DVVNUT01FUl9DTURfVFlQRSAgIHR5cGU7CisgICAgTUVUQV9DVVNUT01FUl9DTURfVSAgICAgIGNtZDsKK31GVF9DVVNUT01FUl9SRVE7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRfSERSCisgICAgTUVUQV9DVVNUT01FUl9DTURfVFlQRSAgIHR5cGU7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgIHN0YXR1czsKKyAgICBNRVRBX0NVU1RPTUVSX0NORl9VICAgICAgcmVzdWx0OworfUZUX0NVU1RPTUVSX0NORjsKKworI2VuZGlmIC8vICNpZm5kZWYgX19GVF9NU0dfRlRDX0hfXwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRfbXNnX2wxcmYuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZ19sMXJmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhMWE5MwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZ19sMXJmLmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgTW9kaWZpY2F0aW9uIE5vdGljZToKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IE1lZGlhVGVrIEluYy4gYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGZ0X21zZ19sMXJmLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIE1lc3NhZ2VzIGRlZmluaXRpb24gb2YgTDFSRiBjYXRlZ29yeSBvZiBGVCBMaWJyYXJ5CisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fRlRfTVNHX0wxUkZfSF9fCisjZGVmaW5lIF9fRlRfTVNHX0wxUkZfSF9fCisjaW5jbHVkZSAiZnRfbXNnX2NvbW1vbi5oIgorI2lmICghZGVmaW5lZChfX0xURV9TTV9fKSYmZGVmaW5lZChfX01US19HTDFfR1NNX18pKSB8fCBkZWZpbmVkKF9fTDFTSU1fTlJfU01fXykgfHwgZGVmaW5lZChfX05SX0wxU0lNX18pCisjaW5jbHVkZSAibDF0c3RfZnRfbXNnX3N0cnVjdC5oIgorI2VuZGlmIC8vICNpZiAhZGVmaW5lZChfX0xURV9TTV9fKSYmZGVmaW5lZChfX01US19HTDFfR1NNX18pCisjZW5kaWYgLy8gI2lmbmRlZiBfX0ZUX01TR19MMVJGX0hfXwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRfbXNnX2w0LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdF9tc2dfbDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjUwODUyCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRfbXNnX2w0LmgKQEAgLTAsMCArMSw5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgTW9kaWZpY2F0aW9uIE5vdGljZToKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IE1lZGlhVGVrIEluYy4gYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGZ0X21zZ19sNC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBNZXNzYWdlcyBkZWZpbml0aW9uIG9mIEw0IG1vZGUgc3dpdGNoIG1lY2hhbmlzbSBvZiBGVCBMaWJyYXJ5CisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAJCQkJSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfRlRfTVNHX0w0X0hfCisjZGVmaW5lIF9GVF9NU0dfTDRfSF8KKyNpbmNsdWRlICJmdF9tc2dfY29tbW9uLmgiCisKK3R5cGVkZWYgZW51bSB7CisJRlRfTU9ERV9TV0lUQ0hfU1VDQ0VTUyA9IDAsCisJRlRfTU9ERV9TV0lUQ0hfRkFJTCwKKwlGVF9NT0RFX1NXSVRDSF9SRVRSWQorfUZUX01PREVfU1dJVENIX1JFU1VMVDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUxPQ0FMX1BBUkFfSERSCisJRlRfTU9ERV9TV0lUQ0hfUkVTVUxUIHJlc3VsdDsKK31mdF9lbnRlcl9mYWN0b3J5X21vZGVfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUxPQ0FMX1BBUkFfSERSCisJRlRfTU9ERV9TV0lUQ0hfUkVTVUxUIHJlc3VsdDsKK31mdF9lbnRlcl9ub3JtYWxfbW9kZV9jbmZfc3RydWN0OworCisjZW5kaWYgLy8gX0ZUX01TR19MNF9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZ19sdGVyZi5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRfbXNnX2x0ZXJmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkZTNhZgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZ19sdGVyZi5oCkBAIC0wLDAgKzEsMTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBNb2RpZmljYXRpb24gTm90aWNlOgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgTWVkaWFUZWsgSW5jLiBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDAxCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgZnRfbXNnX2x0ZXJmLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIE1lc3NhZ2VzIGRlZmluaXRpb24gb2YgRVJGIHRlc3QgY2F0ZWdvcnkgb2YgRlQgTGlicmFyeQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fRlRfTVNHX0VSRl9IX18KKyNkZWZpbmUgX19GVF9NU0dfRVJGX0hfXworI2lmIGRlZmluZWQoX19MVEVfUkFUX18pCisjaW5jbHVkZSAiZWwxZF9tZXRhX2lmLmgiCisjZW5kaWYgLy8gI2lmIGRlZmluZWQoX19MVEVfUkFUX18pCisjZW5kaWYgLy8gI2lmbmRlZiBfX0ZUX01TR19FUkZfSF9fCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdF9tc2dfbWlzYy5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRfbXNnX21pc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmE3YWY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRfbXNnX21pc2MuaApAQCAtMCwwICsxLDI4NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgTW9kaWZpY2F0aW9uIE5vdGljZToKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IE1lZGlhVGVrIEluYy4gYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGZ0X21zZ19taXNjLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIE1lc3NhZ2VzIGRlZmluaXRpb24gb2YgTUlTQyBjYXRlZ29yeSBvZiBGVCBMaWJyYXJ5CisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAJCQkJSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fRlRfTVNHX01JU0NfSF9fCisjZGVmaW5lIF9fRlRfTVNHX01JU0NfSF9fCisjaW5jbHVkZSAiZnRfbXNnX2NvbW1vbi5oIgorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogIE1lc3NhZ2Ugc3RydWN0dXJlcyBkZWZpbmVkIGZvciBNSVNDIENvbW1hbmQgCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3R5cGVkZWYgZW51bQoreworICAgIEZUX01JU0NfT1BfR0VUX0lNRUlfTE9DID0gMCwKKyAgICBGVF9NSVNDX09QX0dFVF9JTUVJX1ZBTFVFID0gMSwKKyAgICBGVF9NSVNDX09QX0dFVF9DQUxfSU5GTyA9IDIsCisgICAgRlRfTUlTQ19PUF9WRVJJRllfVEVNUF9TTUxfRklMRSA9IDMsCisgICAgRlRfTUlTQ19PUF9RVUVSWV9OVlJBTV9GT0xERVIgPSA0LAorICAgIEZUX01JU0NfT1BfVkVSSUZZX05WUkFNX0FUVFJfU0VUVElOR19DT01QTEVURSA9IDUsCisgICAgRlRfTUlTQ19PUF9FTkFCTEVfUEFUSF9MSU1JVElPTiA9IDYsCisgICAgRlRfTUlTQ19PUF9ESVNBQkxFX1BBVEhfTElNSVRJT04gPSA3LAorICAgIEZUX01JU0NfT1BfR0VUX0lNRUlfUkVDX05VTSA9IDgsCisgICAgRlRfTUlTQ19PUF9TRVRfSU1FSV9WQUxVRSA9IDksCisgICAgRlRfTUlTQ19PUF9HRVRfTlZSQU1fRk9MREVSX0FNT1VOVCA9IDEwLAorICAgIEZUX01JU0NfT1BfQ0hFQ0tfU0lNMV9JTlNFUlRFRCA9IDExLAorICAgIEZUX01JU0NfT1BfQ0hFQ0tfU0lNMl9JTlNFUlRFRCA9IDEyLAorICAgIEZUX01JU0NfT1BfU0VUX01VSUNfQ0hBUkdFUl9NT0RFID0gMTMsCisgICAgRlRfTUlTQ19PUF9DQUxEQVRBX0lOVEVHUklUWV9TVEFSVF9SRUMgPSAxNCwKKyAgICBGVF9NSVNDX09QX0NBTERBVEFfSU5URUdSSVRZX1NUT1BfUkVDID0gMTUsCisgICAgRlRfTUlTQ19PUF9DQUxEQVRBX0lOVEVHUklUWV9BRERfT05FID0gMTYsCisgICAgRlRfTUlTQ19PUF9DQUxEQVRBX0lOVEVHUklUWV9ERUxfT05FID0gMTcsCisgICAgRlRfTUlTQ19PUF9DQUxEQVRBX0lOVEVHUklUWV9ERUxfQUxMID0gMTgsCisgICAgRlRfTUlTQ19PUF9DQUxEQVRBX0lOVEVHUklUWV9DSEVDS19PTkUgPSAxOSwKKyAgICBGVF9NSVNDX09QX0NBTERBVEFfSU5URUdSSVRZX0NIRUNLX0FMTCA9IDIwLAorICAgIEZUX01JU0NfT1BfR0VUX0FEQ19GUk9NX0VGVVNFID0gMjEsCisgICAgRlRfTUlTQ19PUF9HRVRfQ0FMRkxBR19FTlVNID0gMjIsCisgICAgRlRfTUlTQ19PUF9HRVRfUkZfQ0FMX0VOVl9FTlVNID0gMjMsCisgICAgRlRfTUlTQ19PUF9HRVRfUkZfQ0FMX0xPU1NfU0VUVElOR19FTlVNID0gMjQsCisgICAgRlRfTUlTQ19PUF9HRVRfUkZfVEVTVF9QT1dFUl9SRVNVTFRfRU5VTSA9IDI1LAorICAgIEZUX01JU0NfT1BfR0VUX0FEQ19NQVhfQ0hBTk5FTCA9IDI2LAorICAgIEZUX01JU0NfT1BfR0VUX1RBRENfSU5ERVggPSAyNywKKyAgICBGVF9NSVNDX09QX0dFVF9SSUQgPSAyOCwKKyAgICBGVF9NSVNDX09QX0NIRUNLX0dFTUlOSV9QTFVTX1NJTV9JTlNFUlRFRCA9IDI5LAorICAgIEZUX01JU0NfT1BfR0VUX01NSV9DQUNIRV9FTlVNX0lOREVYID0gMzAsCisgICAgRlRfTUlTQ19PUF9TRVRfV0lGSV9NQUNfQUREUiA9IDMxLAorICAgIEZUX01JU0NfT1BfR0VUX0JBUkNPREVfVkFMVUUgPSAzMiwKKyAgICBGVF9NSVNDX09QX0NIRUNLX1NJTV9IV19URVNUID0gMzMsCisgICAgRlRfTUlTQ19PUF9DQUxEQVRBX0lOVEVHUklUWV9TVEFSVF9SRUNfRVggPSAzNCwKKyAgICBGVF9NSVNDX09QX0NBTERBVEFfSU5URUdSSVRZX1NUT1BfUkVDX0VYID0gMzUsCisgICAgRlRfTUlTQ19PUF9DQUxEQVRBX0lOVEVHUklUWV9BRERfT05FX0VYID0gMzYsCisgICAgRlRfTUlTQ19PUF9DQUxEQVRBX0lOVEVHUklUWV9ERUxfT05FX0VYID0gMzcsCisgICAgRlRfTUlTQ19PUF9DQUxEQVRBX0lOVEVHUklUWV9ERUxfQUxMX0VYID0gMzgsCisgICAgRlRfTUlTQ19PUF9FTkQKK31GVF9NSVNDX0NNRF9UWVBFOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgICAgICAgICAgICAgICAgICByZWNvcmRfaW5kZXg7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBpbWVpWzhdOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgc3ZuOworfUZUX01JU0NfU0VUX0lNRUlfVkFMVUVfUkVRX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiAgICAgICAgIHUyTGlkRW51bTsKKyAgICBrYWxfdWludDE2ICAgICAgICAgdTJSSUQ7Cit9RlRfTUlTQ19DQUxfREFUQV9JTlRFR1JJVFlfRU5UUlk7CisKK3R5cGVkZWYgdW5pb24KK3sKKyAgICBrYWxfYm9vbCAgIG1fYmNoZWNrSW1laUZsYWc7CisgICAgRlRfTUlTQ19TRVRfSU1FSV9WQUxVRV9SRVFfVCBtX3JJTUVJRGF0YTsKKyAgICBrYWxfdWludDE2IG1fdTFSZWNvcmRJbmRleDsKKyAgICBrYWxfdWludDggICAgICBtX3UxQ2hhcmdlck1vZGU7CisgICAgRlRfTUlTQ19DQUxfREFUQV9JTlRFR1JJVFlfRU5UUlkgIG1fckNhbERhdGFPbmU7CisgICAgLy8vIFtJTl0gcmVxdWVzdGVkIFJJRCBsZW5ndGggZm9yIHRoZSBSSUQgcXVlcnkgb3BlcmF0aW9uCisgICAga2FsX3VpbnQ4IG1fUklETGVuZ3RoOworICAgIC8vLyBbSU5dIHJlcXVlc3RlZCBTSU0gaW5kZXggZm9yIHRoZSBTSU0gaW5zZXJ0aW9uIHRlc3Qgb3BlcmF0aW9uCisgICAga2FsX3VpbnQ4IG1fdTFTaW1JbmRleDsKKyAgICAvLy8gW0lOXSBNTUkgY2FjaGUgZW51bSB2YWx1ZSBxdWVyeQorICAgIGthbF91aW50MTYgICAgICAgICAgICAgICAgICAgICAgICBtX3UyTW1pQ2FjaGVFbnVtVmFsdWU7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcls2XTsKK31GVF9NSVNDX0NNRF9VOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCBidWZbMjBdOyAgIC8vIGRlZmF1bHQ6IDEwIGRpZ2l0cworICAgIGthbF91aW50OCBidWZfbGVuOworCit9RlRfSU1FSV9EQVRBX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiBtX3N0b3BfZW51bV92YWx1ZTsKKyAgICBrYWxfdWludDE2IG1fdG90YWxfbGlkX251bTsKKyAgICBrYWxfdWludDE2IG1fc3RvcF9pbmRleDsKKworfUZUX05WUkFNX1NFVFRJTkdTX1ZFUklGWV9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgICAgICAgbV91MUxhc3RGcmFtZTsgIC8vIHRvIG1hcmsgaXQgaXMgdGhlIGxhc3QgZnJhbWUgZm9yIEZUX01JU0NfT1BfR0VUX0NBTF9JTkZPCisgICAga2FsX3VpbnQxNiAgICAgICBtX3UyVG90YWxOdW07ICAvLyBvbmx5IHZhbGlkIHdoZW4gbGFzdGZyYW1lID0gMTsKKworfUZUX0NBTF9JTkZPX1Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCBiQWxsUGFzczsKKyAgICBrYWxfdWludDE2IHUyTGFzdExJRDsKKyAgICBrYWxfdWludDE2IHUyTGFzdFJJRDsKK31GVF9NSVNDX0NBTF9EQVRBX0lOVEVHUklUWV9DSEVDS19DTkZfVDsKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgICBiQURDU3RvcmVkSW5FZnVzZTsKKyAgICBrYWxfdWludDE2ICAgICB1MkFEQ0Nobk51bTsKK31GVF9NSVNDX0dFVF9BRENfRlJPTV9FRlVTRV9DTkZfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvLy8gW09VVF0gcmVxdWVzdGVkIFJJRCBsZW5ndGggKHVuaXQ6IGJ5dGVzKQorICAgIGthbF91aW50OCBidWZfbGVuOworICAgIC8vLyBbT1VUXSBSSUQgcmF3IGJ1ZmZlciByZXR1cm5lZCBmcm9tIHRoZSB0YXJnZXQgc2lkZQorICAgIGthbF91aW50OCBidWZbMTZdOworfU1FVEFfUklEX0RBVEFfVDsKKy8qKgorICogUGxlYXNlIGRvIG5vdCBjaGFuZ2UgYWxpZ25tZW50ICh0aGlzIGlzIGEgMi1ieXRlIGFsaWduZWQgc3RydWN0dXJlKQorICovCit0eXBlZGVmIHVuaW9uCit7CisgICAga2FsX2Jvb2wgIG1fYkNoZWNrUmVzdWx0OworICAgIGthbF91aW50OCBtX3UxSU1FSUxvYzsKKyAgICBrYWxfdWludDggbV91MUxhc3RGcmFtZTsKKyAgICBrYWxfdWludDggbV91MVZlcmlmeVJlc3VsdDsKKyAgICBrYWxfdWludDggbV91MU5WUkFNRm9sZGVyQW1vdW50OworICAgIGthbF91aW50OCBtX3UxU0lNSW5zZXJ0ZWQ7CisgICAga2FsX3VpbnQxNiBtX3UxQ3VyUmVjTnVtOworICAgIGthbF91aW50OCBtX3UxQURDTWF4Q2hhbm5lbDsKKyAgICBrYWxfdWludDggbV91MVRBRENDaGFubmVsSW5kZXg7CisgICAga2FsX3VpbnQ4IG1faTRTaW1Id1N0YXR1c1s0XTsgLy8vPCBIVyBzdGF0dXMgKDQgYnl0ZXMpIHRvIGtlZXAgdGhlIGFsaWdubWVudCwgdGhlIHZhcmlhYmxlIGlzIGRlY2xhcmVkIGFzIGFycmF5CisgICAga2FsX3VpbnQxNiBtX3UySU1FSVJlY29yZHM7CisgICAga2FsX3VpbnQxNiBtX3UyUmVjb3JkSW5kZXg7CisgICAgLy8vIFtPVVRdIE1NSSBjYWNoZSBlbnVtIHZhbHVlIGluZGV4IG9mIHRoZSBOVlJBTSBjYWNoZSBieXRlCisgICAga2FsX3VpbnQxNiBtX3UyTnZyYW1EYXRhSW5kZXhPZk1taUNhY2hlRW51bVZhbHVlOworICAgIGthbF91aW50MTYgbV91MkNhbEZsYWdFbnVtOworICAgIGthbF91aW50MTYgbV91MkVudW07CisgICAgRlRfSU1FSV9EQVRBX1QgICAgICAgICAgICAgIG1fcklNRUlEYXRhOworICAgIC8vLyBbT1VUXSBSSUQgZGF0YSBzdHJ1Y3R1cmUgY29udGFpbnMgUklEIGxlbmd0aCBhbmQgYnVmZmVyIGZyb20gdGFyZ2V0IHNpZGUKKyAgICBNRVRBX1JJRF9EQVRBX1QgICAgICAgICAgICAgbV9yUklERGF0YTsKKyAgICBGVF9OVlJBTV9TRVRUSU5HU19WRVJJRllfVCAgbV9yTnZyYW1WZXJpZnlSZXN1bHQ7CisgICAgRlRfTUlTQ19HRVRfQURDX0ZST01fRUZVU0VfQ05GX1QgICAgICAgIG1fckdldEFkY0Zyb21FZnVzZTsKKyAgICBGVF9NSVNDX0NBTF9EQVRBX0lOVEVHUklUWV9DSEVDS19DTkZfVCAgbV9yQ2FsQ2hlY2tBbGw7Cit9RlRfTUlTQ19DTkZfVTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVF9IRFIKKyAgICBGVF9NSVNDX0NNRF9UWVBFICAgdHlwZTsKKyAgICBGVF9NSVNDX0NNRF9VICAgICAgY21kOworCit9RlRfTUlTQ19SRVE7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRfSERSCisgICAgRlRfTUlTQ19DTURfVFlQRSAgICB0eXBlOworICAgIEZUX01JU0NfQ05GX1UgICAgICAgcmVzdWx0OworICAgIGthbF91aW50MzIgICAgICAgICAgc3RhdHVzOworfUZUX01JU0NfQ05GOworCisjZW5kaWYgLy8gI2lmbmRlZiBfX0ZUX01TR19NSVNDX0hfXwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRfbXNnX21pc2NfZXguaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZ19taXNjX2V4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcyNjU4YQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZ19taXNjX2V4LmgKQEAgLTAsMCArMSwxODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgTW9kaWZpY2F0aW9uIE5vdGljZToKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IE1lZGlhVGVrIEluYy4gYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGZ0X21zZ19taXNjX2V4LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIE1lc3NhZ2VzIGRlZmluaXRpb24gb2YgTUlTQ19FWCBjYXRlZ29yeSBvZiBGVCBMaWJyYXJ5CisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fRlRfTVNHX01JU0NfRVhfSF9fCisjZGVmaW5lIF9fRlRfTVNHX01JU0NfRVhfSF9fCisjaW5jbHVkZSAiZnRfbXNnX2NvbW1vbi5oIgorCit0eXBlZGVmIGVudW0KK3sKKyAgICAgRlRfTUlTQ19FWF9PUF9HRVRfRVJTX1NJWkUgPSAwCisgICAgLEZUX01JU0NfRVhfT1BfR0VUX0VSU19EQVRBCisgICAgLEZUX01JU0NfRVhfT1BfR0VUX0VSU19DT1VOVAorICAgICxGVF9NSVNDX0VYX09QX0dFVF9FUlNfREFUQV9JTkZPX0JZX0lOREVYCisgICAgLEZUX01JU0NfRVhfT1BfQ09QWV9OVlJBTV9UT19CUF9BUkVBCisgICAgLEZUX01JU0NfRVhfT1BfVkVSSUZZX0JQX0FSRUEKKyAgICAsRlRfTUlTQ19FWF9PUF9PQlNPTEVURUQxCisgICAgLEZUX01JU0NfRVhfT1BfT0JTT0xFVEVEMgorICAgICxGVF9NSVNDX0VYX09QX0JBQ0tVUF9UT19TRFMKKyAgICAsRlRfTUlTQ19FWF9PUF9SQU1ESVNLX0NIRUNLX0VYSVNUICAgLyoqPCBcYnJpZWYgY2hlY2sgcmFtIGRpc2sgaXMgZXhpc3Rpbmcgb3Igbm90ICovCisgICAgLEZUX01JU0NfRVhfT1BfUkFNRElTS19HRVRfU0laRSAgICAgIC8qKjwgXGJyaWVmIGdldCByYW0gZGlzayBzaXplICovCisgICAgLEZUX01JU0NfRVhfT1BfUkFNRElTS19SRUFEICAgICAgICAgIC8qKjwgXGJyaWVmIHJlYWQgZnJvbSByYW0gZGlzayAqLworICAgICxGVF9NSVNDX0VYX09QX1NFVF9DT01NQU5EX1RPX1NZU1RFTSAvKio8IFxicmllZiBzZXQvY2xyIGRvd25sb2FkIGZsYWcgKi8gICAgCisgICAgLEZUX01JU0NfRVhfT1BfRU5ECit9RlRfTUlTQ19FWF9DTURfVFlQRTsKKworCisKK3R5cGVkZWYgdW5pb24KK3sKKyAgICBrYWxfdWludDMyIER1bW15OworICAgIGthbF9pbnQzMiAgbV9pNEVyc0RhdGFJbmRleDsKKyAgICBrYWxfdWludDggIHUxQlBBcmVhRmFzdENoZWNrOworICAgIGthbF91aW50MzIgbW9kZTsKKyAgICBrYWxfdWludDMyIG1fdTRSYW1EaXNrUmVxT2Zmc2V0OworICAgIGthbF91aW50MzIgbV91NFNldENtZDJTeXN0ZW07Cit9RlRfTUlTQ19FWF9DTURfVTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCBzZWM7CisgICBrYWxfdWludDggbWluOworICAga2FsX3VpbnQ4IGhvdXI7CisgICBrYWxfdWludDggZGF5OworICAga2FsX3VpbnQ4IG1vbjsKKyAgIGthbF91aW50OCB3ZGF5OworICAga2FsX3VpbnQ4IHllYXI7Cit9RlRfTUlTQ19FWF9SQ1RfSU5GT19UOworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGthbF91aW50MzIgbV91NFRvdGFsU2l6ZTsKKyAgICBrYWxfdWludDMyIG1fdTRDdXJPZmZzZXQ7CisgICAga2FsX2Jvb2wgICBtX2JMYXN0RnJtOworCisKK31GVF9NSVNDX0VYX0dFVF9FUlNfREFUQV9DTkZfVDsKKwordHlwZWRlZiB1bmlvbgoreworCisgICBrYWxfdWludDMyIG1fdTRFcnNEYXRhU2l6ZTsKKyAgIGthbF9pbnQzMiAgIG1faTRFcnNEYXRhQ291bnQ7CisgICBGVF9NSVNDX0VYX0dFVF9FUlNfREFUQV9DTkZfVCAgbV9yRXJzRGF0YUZybTsKKyAgIEZUX01JU0NfRVhfUkNUX0lORk9fVCAgICBtX3JFcnNEYXRhVGltZTsKKyAgIGthbF91aW50MzIgIG1fdTRCUFN0YXR1czsKKyAgIGthbF91aW50MzIgIG1fdTRTRFNTdGF0dXM7CisgICBrYWxfdWludDMyICBtX3U0UmFtRGlza1NpemU7CisgICBGVF9NSVNDX0VYX0dFVF9FUlNfREFUQV9DTkZfVCAgbV9yUmFtRGlza0ZybTsgICAKKyAgIGthbF9pbnQ4ICAgIG1fY1JhbURpc2tFeGlzdDsgICAKK31GVF9NSVNDX0VYX0NORl9VOworCisKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUX0hEUgorICAgIEZUX01JU0NfRVhfQ01EX1RZUEUgICAgIHR5cGU7CisgICAgRlRfTUlTQ19FWF9DTURfVSAgICAgY21kOworCit9RlRfTUlTQ19FWF9SRVE7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRfSERSCisgICAgRlRfTUlTQ19FWF9DTURfVFlQRSAgIHR5cGU7CisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICBzdGF0dXM7CisgICAgRlRfTUlTQ19FWF9DTkZfVSAgICAgIHJlc3VsdDsKK31GVF9NSVNDX0VYX0NORjsKKworI2VuZGlmIC8vICNpZm5kZWYgX19GVF9NU0dfTUlTQ19FWF9IX18KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZ19tbXJmLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdF9tc2dfbW1yZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MjlmMjMKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdF9tc2dfbW1yZi5oCkBAIC0wLDAgKzEsNzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIE1vZGlmaWNhdGlvbiBOb3RpY2U6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBNZWRpYVRlayBJbmMuIGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDEKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBmdF9tc2dfbW1yZi5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBNZXNzYWdlcyBkZWZpbml0aW9uIG9mIE1NUkYgdGVzdCBjYXRlZ29yeSBvZiBGVCBMaWJyYXJ5CisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAJCQkJSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0ZUX01TR19NTVJGX0hfXworI2RlZmluZSBfX0ZUX01TR19NTVJGX0hfXworI2luY2x1ZGUgIm1tbDFfbWV0YV9pZi5oIgorI2VuZGlmIC8vICNpZm5kZWYgX19GVF9NU0dfTU1SRl9IX18KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZ191bDFyZi5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRfbXNnX3VsMXJmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3YTMzOQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZ191bDFyZi5oCkBAIC0wLDAgKzEsOSBAQAorI2lmIChkZWZpbmVkIF9fTUQ5M19fKQorI2luY2x1ZGUgImZ0X21zZ191bDFyZl9nZW45My5oIgorI2VsaWYgKGRlZmluZWQgX19NRDk1X18pCisjaW5jbHVkZSAiZnRfbXNnX3VsMXJmX2dlbjk1LmgiCisjZWxpZiAoZGVmaW5lZCBfX01EOTdfXykgfHwgKGRlZmluZWQgX19NRDk3UF9fKQorI2luY2x1ZGUgImZ0X21zZ191bDFyZl9nZW45Ny5oIgorI2Vsc2UKKyNlcnJvciAiW0VSUk9SXSBJbnZhbGlkIE1EIGdlbmVyYXRpb24iCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdF9tc2dfdWwxcmZfZ2VuOTMuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZ191bDFyZl9nZW45My5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNmNlMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdF9tc2dfdWwxcmZfZ2VuOTMuaApAQCAtMCwwICsxLDIxMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgTW9kaWZpY2F0aW9uIE5vdGljZToKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IE1lZGlhVGVrIEluYy4gYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGZ0X21zZ191bDFyZi5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBNZXNzYWdlcyBkZWZpbml0aW9uIG9mIFVMMSBSRiBjYXRlZ29yeSBvZiBGVCBMaWJyYXJ5CisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fRlRfTVNHX1VMMVJGX0hfXworI2RlZmluZSBfX0ZUX01TR19VTDFSRl9IX18KKyNpbmNsdWRlICJmdF9tc2dfY29tbW9uLmgiCisjaW5jbHVkZSAidWwxZF9yZl9wdWJsaWMuaCIKKworI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCisKKyNkZWZpbmUgVUwxVFNUX0xOQV9NT0RFX05VTUJFUl9FWFQgNgorCisjZGVmaW5lIFVMMV9EUERfRkRCX05VTSAgICAgICAgICAgICAgICAgICAgKENBTF9VQVJGQ05fU0VDVElPTiAqIFVMMV9EUERfTUFYX1BBX0xFVkVMX05VTSkgLyogcmVmZXIgdG8gZl9kYiBpbiBVX3NEUERfQ09NTU9OX0NBTCAqLworI2RlZmluZSBVTDFfRFBEX01BWF9QVEFSX1RIX05VTSAgICAgICAgICAgIChDQUxfVUFSRkNOX1NFQ1RJT04gKiBVTDFfRFBEX01BWF9QQV9MRVZFTF9OVU0pIC8qIHJlZmVyIHRvIHBhX2lkeF90aCBpbiBVX3NEUERfQ09NTU9OX0NBTCAqLworI2RlZmluZSBVTDFfRFBEX01BWF9JTVBMSUNJVF9SU1ZfTlVNICAgICAgIDAKKyNkZWZpbmUgVUwxX0RQRF9NQVhfSU1QTElDSVRfTlVNICAgICAgICAgICAoVUwxX0RQRF9GREJfTlVNICsgVUwxX0RQRF9NQVhfUFRBUl9USF9OVU0gKyBVTDFfRFBEX01BWF9JTVBMSUNJVF9SU1ZfTlVNKQorI2RlZmluZSBVTDFfRFBEX01BWF9TRVRfQUxMX0RBVEFfTlVNICAgICAgICg3KSAgLyogZmxvb3IoTU1SRl9NQVhfVE9PTF9QRUVSX1NJWkVfUEVSX0NNRCAvIHNpemVvZihVUmZUZXN0Q21kX1NldERwZFBhQW5kRHBkRmFjQ2FsQWxsX09uZUJhbmQpKSAqLworI2RlZmluZSBVTDFfRFBEX01BWF9HRVRfQUxMX0RBVEFfTlVNICAgICAgIChVTDFfRFBEX01BWF9TRVRfQUxMX0RBVEFfTlVNKQorI2RlZmluZSBVTDFfRFBEX01BWF9TRVRfUEFSVElBTF9EQVRBX05VTSAgICgyMzkpIC8qIGZsb29yKE1NUkZfTUFYX1RPT0xfUEVFUl9TSVpFX1BFUl9DTUQgLyBzaXplb2YoVVJmVGVzdENtZF9TZXREcGRQYUFuZERwZEZhY0NhbFBhcnRpYWxfT25lQmFuZCkpICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICBNZXNzYWdlIHN0cnVjdHVyZXMgZGVmaW5lZCBmb3IgVUwxIFRTVCBJbnRlcmZhY2UKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChfX1VNVFNfUkFUX18pICYmIGRlZmluZWQoX19NVEtfVUwxX0ZERF9fKQorCisvL3R5cGUxOiBjb21tdW5pY2F0ZSB3aXRoIHVsMXRzdCBtb2R1bGUsIGFuZCBzZW5kIHRoZSBjb25maXJtIHdpdGhvdXQgd2FpdGluZyEKKy8vdHlwZTI6IGNvbW11bmljYXRlIHdpdGggdTFsdHN0IG1vZHVsZSwgYW5kIHdhaXQgdGhlaXIgY29uZmlybSwgdGhlbiBzZW5kIGJhY2sgdG8gUEMKKy8vdHlwZTM6IGludm9rZSBVTDFEJ3MgQVBJLCB0aGVuIHNlbmQgY29uZmlybSB0byBQQyBzaWRlLgorLy90eXBlNDogbm8gb3BlcmF0aW9uLCBvbmx5IGdldCBGVCB0YXNrJ3MgY3VycmVudCBzdGF0dXMsIGFuZCByZXBseSB0byBQQyBzaWRlCisKK3R5cGVkZWYgZW51bQoreworICAgVVJGX1RFU1RfQ01EX1RYQUNDRVNTID0gMCwKKyAgIFVSRl9URVNUX0NNRF9TVE9QID0gMSwKKyAgIFVSRl9URVNUX0NNRF9UWF9EUENIID0gMiwKKyAgIFVSRl9URVNUX0NNRF9SWF9EUENIID0gMywKKyAgIFVSRl9URVNUX0NNRF9SU1NJID0gNCwKKyAgIFVSRl9URVNUX0NNRF9SU0NQID0gNSwKKyAgIFVSRl9URVNUX0NNRF9BRkMgPSA2LAorICAgVVJGX1RFU1RfQ01EX1RYX1BBQVBDID0gNywKKyAgIFVSRl9URVNUX0NNRF9HRVRfUkZJRCA9IDgsCisgICBVUkZfVEVTVF9DTURfQ09ORklHX0hXVFBDID0gOSwKKyAgIFVSRl9URVNUX0NNRF9HRVRfUFdSX0RUX1NURVAgPSAxMCwKKyAgIFVSRl9URVNUX0NNRF9HRVRfUFdSX0RUX0RBQyA9IDExLAorICAgVVJGX1RFU1RfQ01EX0dFVF9QV1JfRFRfREVGQVVMVF9USFIgPSAxMiwKKyAgIFVSRl9URVNUX0NNRF9TRVRfSU1NRURJQVRFX0JTSSA9IDEzLAorICAgVVJGX1RFU1RfQ01EX0dFVF9JTU1FRElBVEVfQlNJID0gMTQsCisgICBVUkZfVEVTVF9DTURfQ09OVElOVU9VU19SWCA9IDE1LAorICAgVVJGX1RFU1RfQ01EX1NUQVJUX0ZIQyA9IDE2LAorICAgVVJGX1RFU1RfQ01EX1NFVF9UWERBQ19EQVRBID0gMTcsCisgICBVUkZfVEVTVF9DTURfR0VUX1BXUl9ERVRfTUVBU1VSRV9SRVMgPSAxOCwKKyAgIFVSRl9URVNUX0NNRF9TRVRfUFdSX0NUUkxfTU9ERSA9IDE5LAorICAgVVJGX1RFU1RfQ01EX1JFUExBQ0VfR0FJTl9UQUJMRV9GT1JfQ0FMID0gMjAsCisgICBVUkZfVEVTVF9DTURfU1RBUlRfRkhDX05PX1dBSVQgPSAyMSwKKyAgIFVSRl9URVNUX0NNRF9HRVRfRkhDX1JFU1VMVCA9IDIyLAorICAgVVJGX1RFU1RfQ01EX1FVRVJZX1RBUkdFVF9DQVBBQklMSVRZID0gMjMsCisgICBVUkZfVEVTVF9DTURfU1RBUlRfTlNGVCA9IDI0LAorICAgVVJGX1RFU1RfQ01EX0dFVF9CSVRfQ09VTlRfRk9SX1NJTkdMRV9FTkRFRF9CRVIgPSAyNSwKKyAgIFVSRl9URVNUX0NNRF9OU0ZUX1NFVF9JTFBDX1NURVAgPSAyNiwKKyAgIFVSRl9URVNUX0NNRF9TVEFSVF9OU0ZUX0VYID0gMjcsCisgICBVUkZfVEVTVF9DTURfU0VUX1BBX09DVF9MRVZFTF9EQVRBID0gMjgsCisgICBVUkZfVEVTVF9DTURfU1RBUlRfSFNEUEFfTlNGVCA9IDI5LAorICAgVVJGX1RFU1RfQ01EX1NUQVJUX0hTVVBBX05TRlQgPSAzMCwKKyAgIFVSRl9URVNUX0NNRF9TVEFSVF9GSENfRVggPSAzMSwKKyAgIFVSRl9URVNUX0NNRF9HRVRfRkhDX0VYX1JFU1VMVCA9IDMyLAorICAgVVJGX1RFU1RfQ01EX0dFVF9DVVJSRU5UX0xOQV9NT0RFID0gMzMsCisgICBVUkZfVEVTVF9DTURfU0VUX0NBUElEID0gMzQsCisgICBVUkZfVEVTVF9DTURfR0VUX01BWF9DQVBJRCA9IDM1LAorICAgVVJGX1RFU1RfQ01EX0FGQ19FWCA9IDM2LAorICAgVVJGX1RFU1RfQ01EX1JTU0lfUlhEID0gMzcsCisgICBVUkZfVEVTVF9DTURfR0VUX0NVUlJFTlRfUlhEX0xOQV9NT0RFID0gMzgsCisgICBVUkZfVEVTVF9DTURfU0VUX1JYX0JBTkRXSURUSCA9IDM5LAorICAgVVJGX1RFU1RfQ01EX1NFVF9SWF9BTlRFTk5BID0gNDAsCisgICBVUkZfVEVTVF9DTURfU0VUX1RYX1BBX0RSSUZUX0NPTVBFTlNBVElPTiA9IDQxLAorICAgVVJGX1RFU1RfQ01EX1NFVF9JQ1NfQ0VMTF9QT1dFUiA9IDQyLAorICAgVVJGX1RFU1RfQ01EX0dFVF9SRl9URU1QX0JTSSA9IDQzLAorICAgVVJGX1RFU1RfQ01EX0dFVF9SRl9DQVBBQklMSVRZID0gNDQsCisgICBVUkZfVEVTVF9DTURfU1RBUlRfTlNGVF9MSVNUX01PREUgID0gNDUsCisgICBVUkZfVEVTVF9DTURfU0VUX1JGX01JUElfQ09ERVdPUkQgPSA0NiwKKyAgIFVSRl9URVNUX0NNRF9HRVRfUkZfTUlQSV9DT0RFV09SRCA9IDQ3LAorICAgVVJGX1RFU1RfQ01EX0dFVF9URU1QRVJBVFVSRV9JTkZPID0gNDgsCisgICBVUkZfVEVTVF9DTURfUlhfR0FJTl9TV0VFUCA9IDQ5LAorICAgVVJGX1RFU1RfQ01EX1JFTE9BRF9OVlJBTSA9IDUwLAorICAgVVJGX1RFU1RfQ01EX0NIRUNLX0lGX0ZVTkNfRVhJU1QgPSA1MSwKKyAgIFVSRl9URVNUX0NNRF9VQklOX01PREVfU0VUVVAgPSA1MiwKKyAgIFVSRl9URVNUX0NNRF9TRVRfUlhfUEFUSF9MT1NTID0gNTMsCisgICBVUkZfVEVTVF9DTURfR0VUX1JYX1BBVEhfTE9TUyA9IDU0LAorICAgVVJGX1RFU1RfQ01EX1JTU0lfTFBNID0gNTUsCisgICBVUkZfVEVTVF9DTURfUlNTSV9SWERfTFBNID0gNTYsCisgICBVUkZfVEVTVF9DTURfQ09OVElOVU9VU19SWF9MUE0gPSA1NywKKyAgIFVSRl9URVNUX0NNRF9OU0ZUX0dFVF9SU1NJID0gNTgsCisgICBVUkZfVEVTVF9DTURfU0VUX1JYX0NBTElCUkFUSU9OX0RBVEEgPSA1OSwKKyAgIFVSRl9URVNUX0NNRF9HRVRfUlhfQ0FMSUJSQVRJT05fREFUQSA9IDYwLAorICAgVVJGX1RFU1RfQ01EX1NFVF9UWF9DQUxJQlJBVElPTl9EQVRBID0gNjEsCisgICBVUkZfVEVTVF9DTURfR0VUX1RYX0NBTElCUkFUSU9OX0RBVEEgPSA2MiwKKyAgIFVSRl9URVNUX0NNRF9OU0ZUX1JFU0VUX0JFUl9SRVNVTFQgPSA2NiwKKyAgIFVSRl9URVNUX0NNRF9GSENfRUxOQSA9IDY3LAorICAgVVJGX1RFU1RfQ01EX0dFVF9SU1NJX0VMTkEgPSA2OCwKKyAgIFVSRl9URVNUX0NNRF9HRVRfQ09OVElOVU9VU19SU1NJX0VMTkEgPSA2OSwKKyAgIFVSRl9URVNUX0NNRF9UWF9EUENIX0ZJWF9QR0FfR0FJTiA9IDcwLAorICAgVVJGX1RFU1RfQ01EX0dFVF9DQUxJQlJBVElPTl9JTkZPX1YzID0gNzEsCisgICBVUkZfVEVTVF9DTURfU1RBUlRfRkhDX1YzID0gNzIsCisgICBVUkZfVEVTVF9DTURfR0VUX0ZIQ19SRVNVTFRfVjMgPSA3MywKKyAgIFVSRl9URVNUX0NNRF9HRVRfUlNTSV9WMyA9IDc0LAorICAgVVJGX1RFU1RfQ01EX0dBSU5fU0VMRUNUX1BXUl9WMyA9IDc1LAorICAgVVJGX1RFU1RfQ01EX0dBSU5fU0VMRUNUX0xOQV9WMyA9IDc2LAorICAgVVJGX1RFU1RfQ01EX0dFVF9SWFRYX0NBTElCUkFUSU9OX0RBVEFfVjMgPSA3NywgICAgICAgICAgLy9hZnRlciA2MjkzCisgICBVUkZfVEVTVF9DTURfU0VUX1JYVFhfQ0FMSUJSQVRJT05fREFUQV9WMyA9IDc4LCAgICAgICAgICAvL2FmdGVyIDYyOTMKKyAgIFVSRl9URVNUX0NNRF9SU0NQX1YzID0gNzksCisgICBVUkZfVEVTVF9DTURfQUZDX1YzID0gODAsCisgICBVUkZfVEVTVF9DTURfQUZDX0NBUElEX1YzID0gODEsCisgICBVUkZfVEVTVF9DTURfTE9XX1BPV0VSX0NBTF9WMyA9IDgyLAorICAgVVJGX1RFU1RfQ01EX1RSSUdHRVJfSVFfRFVNUF9NT0RFX1YzID0gODgsCisgICBVUkZfVEVTVF9DTURfR0VUX0lRX0RVTVBfUkVTVUxUX1YzID0gODksCisgICBVUkZfVEVTVF9DTURfU0VUX1JGRVFfU1VCQkFORF9SRVNVTFRfVjMgPSA5MCwKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICBVUkZfVEVTVF9DTURfR1BfVE9PTF9DT01NQU5EX1NUQVJULAorICAgVVJGX1RFU1RfQ01EX0VORCwKKyAgIFVSRl9URVNUX0NNRF9NQVggICAgICAgICAgICAgICAgICAgICA9IDB4N0ZGRkZGRkYKK30gVVJmVGVzdENtZFR5cGU7Cit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgIHVsX3VhcmZjbjsgICAgICAvKiBVTCB1YXJmY24gcmFuZ2U6Pz8/P1JlYWQgZnJvbSBOVlJBTT8/ICg5NjEyIH4gOTg4OCkgKi8KKyAgICBrYWxfdWludDE2ICBkbF9wc2M7ICAgICAgICAgLyogMH41MTEuICovCisgICAga2FsX3VpbnQxNiAgc2lnbmF0dXJlOyAgICAgIC8qIDB+MTUsIGZvciBzaW5nbGUgc2lnbmF0dXJlIGRlY2lzaW9uLiAqLworICAgIGthbF91aW50OCAgIHBhX21vZGU7ICAgICAgICAvKiAwOiBIaWdoIDE6IE1pZGRsZSAyOiBMb3cgKi8KKyAgICBrYWxfaW50OCAgICBpbml0X3Bvd2VyOyAgICAgLyogQXNzdW1lIGNwaWNoX3JzY3A9MCwgdWxfaW50ZXJmZXJlbmNlPTAuICovCisgICAga2FsX3VpbnQ4ICAgcG93ZXJfc3RlcDsgICAgIC8qIFByZWFtYmxlIHBvd2VyIHJhbXBpbmcgc3RlcC4gMSB+IDhkQiAqLworICAgIGthbF91aW50OCAgIG1heF9yZXRyYW5zOyAgICAvKiAxfjY0LiAqLworICAgIGthbF91aW50MTYgIGRsX3VhcmZjbjsKKyAgICBrYWxfdWludDggICBhc2M7Cit9IFVSZlRlc3RDbWRUeEFjY2VzczsKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiAgdWxfZnJlcTsKKyAgICBrYWxfaW50MTYgICBwc2M7ICAgICAgICAvKiAwfjUxMS4gKi8KKyAgICBrYWxfdWludDMyICBzY19jb2RlOyAgICAvKiBTY3JhbWJsaW5nIGNvZGUgIy4gMCB+IDE2Nzc3MjE1ICovCisgICAga2FsX3VpbnQ4ICAgcG93ZXJfY3RybF9tb2RlOworICAgIGthbF91aW50OCAgIHBhX21vZGU7CisgICAga2FsX3VpbnQxNiAgaWR4OworICAgIGthbF91aW50MTYgIGFmY19kYWM7CisgICAga2FsX3VpbnQ4ICAgZHBjY2hfcHdyOworICAgIGthbF91aW50OCAgIGRwZGNoX3B3cjsKKworICAgIC8qIEJlbG93IGZvciBVTDFEX1JGX01ldGFfU2V0VHhJbmZvLiAqLworICAgIGthbF9ib29sICAgIG5vX2xvb3BfY3RybDsKKworICAgIC8qIEJlbG93IGZvciBzZXRQYUFwY0RhYy4gKi8KKyAgICBrYWxfdWludDggICByZl9iYW5kOworICAgIGthbF91aW50OCAgIHZtMTsKKyAgICBrYWxfdWludDggICB2bTI7CisgICAga2FsX3VpbnQxNiAgZGMyZGNfZGFjOworICAgIGthbF91aW50MTYgIHZiaWFzX2RhYzsKKyAgICBrYWxfYm9vbCAgICBwd3JfZGV0OworICAgIGthbF91aW50MTYgIGFwY19kYWM7CisgICAga2FsX2Jvb2wgICAgcGFfb2N0bGV2X2N0cmxfdXNlZDsKK30gVVJmVGVzdENtZFR4RFBDaDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2ICBkbF9mcmVxOworICAgIGthbF9pbnQxNiAgIHBzYzsgICAgICAgIC8qIDB+NTExLiAqLworICAgIGthbF91aW50OCAgIHNzYzsgICAgICAgIC8qIDB+MTUuICovCisgICAga2FsX2ludDE2ICAgb3ZzZjsgICAgICAgLyogMH5zZi0xLiAqLworICAgIGthbF91aW50MTYgIGFmY19kYWM7CisKKyAgICAvKiBCZWxvdyBmb3IgUkZfU2V0QkJSeFBhcmFtcy4gKi8KKyAgICBrYWxfYm9vbCAgICBod0FHQzsKKyAgICBrYWxfdWludDggICBtb2RlOyAgICAgICAvKiAwOiBtb2RlMCwgMTogbW9kZTEuICovCisgICAga2FsX2ludDE2ICAgZ2FpbjsgICAgICAgLyogbW9kZTAuICovCisgICAga2FsX3VpbnQ4ICAgTE5BbW9kZTsgICAgLyogbW9kZTEuIDA6IExOQSBsb3csIDE6IExOQSBtaWQsIDI6IExOQSBoaWdoLiAqLworICAgIGthbF91aW50MTYgIHBnYTsgICAgICAgIC8qIG1vZGUxLiAqLworfSBVUmZUZXN0Q21kUnhEUENoOworI2RlZmluZSBGRERfTUFYX0ZSRVFfTElTVCAzNgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggICBudW1fZnJlcTsKKyAgICBrYWxfdWludDE2ICBkbF9mcmVxWyBGRERfTUFYX0ZSRVFfTElTVCBdOworICAgIGthbF91aW50OCAgIHRlbXBlcmF0dXJlOworCisgICAgLyogQmVsb3cgZm9yIFJGX1NldEJCUnhQYXJhbXMuICovCisgICAga2FsX2Jvb2wgICAgaHdBR0M7CisgICAga2FsX3VpbnQ4ICAgbW9kZTsgICAgICAgLyogMDogbW9kZTAsIDE6IG1vZGUxLiAqLworICAgIGthbF9pbnQxNiAgIGdhaW47ICAgICAgIC8qIG1vZGUwLiAqLworICAgIGthbF91aW50OCAgIExOQW1vZGU7ICAgIC8qIG1vZGUxLiAwOiBMTkEgbG93LCAxOiBMTkEgbWlkLCAyOiBMTkEgaGlnaC4gKi8KKyAgICBrYWxfdWludDE2ICBwZ2E7ICAgICAgICAvKiBtb2RlMS4gKi8KK30gVVJmVGVzdENtZFJTU0k7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgbnVtX2ZyZXE7CisgICAga2FsX3VpbnQxNiAgZGxfZnJlcVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKyAgICBrYWxfdWludDggICB0ZW1wZXJhdHVyZTsKKworICAgIC8qIEJlbG93IGZvciBSRl9TZXRCQlJ4UGFyYW1zLiAqLworICAgIGthbF9ib29sICAgIGh3QUdDOworICAgIGthbF91aW50OCAgIG1vZGU7ICAgICAgIC8qIDA6IG1vZGUwLCAxOiBtb2RlMS4gKi8KKyAgICBrYWxfaW50MTYgICBnYWluOyAgICAgICAvKiBtb2RlMC4gKi8KKyAgICBrYWxfdWludDggICBMTkFtb2RlOyAgICAvKiBtb2RlMS4gMDogTE5BIGxvdywgMTogTE5BIG1pZCwgMjogTE5BIGhpZ2guICovCisgICAga2FsX3VpbnQxNiAgcGdhOyAgICAgICAgLyogbW9kZTEuICovCisgICAga2FsX3VpbnQ4ICAgbHBtX21vZGU7ICAgLyogMDogbm9ybWFsIExOQSBnYWluIG1vZGUgLCAxOiBsb3cgcG93ZXIgTE5BIGdhaW4gbW9kZS4gKi8KK30gVVJmVGVzdENtZExQTVJTU0k7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgbnVtX2ZyZXE7CisgICAga2FsX3VpbnQxNiAgZGxfZnJlcVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKyAgICBrYWxfdWludDE2ICBzY2NfZGxfZnJlcVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKyAgICBrYWxfaW50MTYgICBzZXR0aW5nczsgICAgLy8gIFBDQyAgU1JYL0xOQSBTZXR0aW5ncworICAgIGthbF91aW50OCAgIHNyeGNmZzsKKyAgICBrYWxfdWludDggICB2Y29jZmc7CisgICAga2FsX3VpbnQ4ICAgbG5hcG9ydDsKKyAgICBrYWxfdWludDggICB0ZW1wZXJhdHVyZTsKKworICAgIC8qIEJlbG93IGZvciBSRl9TZXRCQlJ4UGFyYW1zLiAqLworICAgIGthbF9ib29sICAgIGh3QUdDOworICAgIGthbF91aW50OCAgIG1vZGU7ICAgICAgIC8qIDA6IG1vZGUwLCAxOiBtb2RlMS4gKi8KKyAgICBrYWxfaW50MTYgICBnYWluOyAgICAgICAvKiBtb2RlMC4gKi8KKyAgICBrYWxfdWludDggICBMTkFtb2RlOyAgICAvKiBtb2RlMS4gMDogTE5BIGxvdywgMTogTE5BIG1pZCwgMjogTE5BIGhpZ2guICovCisgICAga2FsX3VpbnQxNiAgcGdhOyAgICAgICAgLyogbW9kZTEuICovCit9IFVSZlRlc3RDbWRDQVJTU0k7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgbnVtX2ZyZXE7CisgICAga2FsX3VpbnQxNiAgZGxfZnJlcVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKyAgICBrYWxfdWludDggICB0ZW1wZXJhdHVyZTsKKworICAgIC8qIEJlbG93IGZvciBSRl9TZXRCQlJ4UGFyYW1zLiAqLworICAgIGthbF9ib29sICAgIGh3QUdDOworICAgIGthbF91aW50OCAgIG1vZGU7ICAgICAgIC8qIDA6IG1vZGUwLCAxOiBtb2RlMS4gKi8KKyAgICBrYWxfaW50MTYgICBnYWluOyAgICAgICAvKiBtb2RlMC4gKi8KKyAgICBrYWxfdWludDggICBMTkFtb2RlOyAgICAvKiBtb2RlMS4gMDogTE5BIGxvdywgMTogTE5BIG1pZCwgMjogTE5BIGhpZ2guICovCisgICAga2FsX3VpbnQxNiAgcGdhOyAgICAgICAgLyogbW9kZTEuICovCit9IFVSZlRlc3RDbWRSeEdhaW5Td2VlcDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICBwc2Nhbl9iZWZvcmVfY2VsbF9zZWFyY2g7ICAgLyogVHJ1ZSBpZiBVTDFUU1QgbmVlZHMgcG93ZXIgc2NhbiBiZWZvcmUgY2VsbCBzZWFyY2gvUlNDUC4gKi8KKyAgICBrYWxfdWludDE2ICBkbF9mcmVxOyAgICAvKiBTcGVjaWZpYyBkbF9mcmVxIHRvIGRvIGNlbGwgc2VhcmNoLiBWYWxpZCBpZiBwc2Nhbl9iZWZvcmVfY2VsbF9zZWFyY2g9Ri4gKi8KKyAgICBrYWxfdWludDggICBzYW1wbGVfbnVtX3Blcl9jZWxsOworICAgIGthbF9ib29sICAgIHJlYWRfc2ZuOyAgIC8qIFRydWUgaWYgd2UgbmVlZCB0byBkbyBTRk4gbWVhc3VyZW1lbnQgZm9yIHRoZSBmb3VuZCBjZWxsLiAqLworCisgICAgLyogQmVsb3cgZm9yIFJGX1NldEJCUnhQYXJhbXMuICovCisgICAga2FsX2Jvb2wgICAgaHdBR0M7CisgICAga2FsX3VpbnQ4ICAgbW9kZTsgICAgICAgLyogMDogbW9kZTAsIDE6IG1vZGUxLiAqLworICAgIGthbF9pbnQxNiAgIGdhaW47ICAgICAgIC8qIG1vZGUwLiAqLworICAgIGthbF91aW50OCAgIExOQW1vZGU7ICAgIC8qIG1vZGUxLiAwOiBMTkEgbG93LCAxOiBMTkEgbWlkLCAyOiBMTkEgaGlnaC4gKi8KKyAgICBrYWxfdWludDE2ICBwZ2E7ICAgICAgICAvKiBtb2RlMS4gKi8KK30gVVJmVGVzdENtZFJTQ1A7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiAgZGxfZnJlcTsgICAgLyogU3BlY2lmaWMgZGxfZnJlcSB0byBkbyBjZWxsIHNlYXJjaC4gVmFsaWQgaWYgcHNjYW5fYmVmb3JlX2NlbGxfc2VhcmNoPUYuICovCit9IFVUU1RDbWRSU0NQVjNscDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9pbnQxNiAgICBkbF9mcmVxOyAgICAgLyogU3BlY2lmaWMgZGxfZnJlcSB0byBkbyBjZWxsIHNlYXJjaC4gVmFsaWQgaWYgcHNjYW5fYmVmb3JlX2NlbGxfc2VhcmNoPUYuICovCisgICAga2FsX2ludDE2ICAgIGFmY19kYWM7CisgICAgLyogQmVsb3cgZm9yIFJGX1NldEJCUnhQYXJhbXMuICovCisgICAga2FsX2Jvb2wgICAgIGh3QUdDOworICAgIGthbF91aW50OCAgICBtb2RlOyAgICAgICAgLyogMDogbW9kZTAsIDE6IG1vZGUxLiAqLworICAgIGthbF9pbnQxNiAgICBnYWluOyAgICAgICAgLyogbW9kZTAuICovCisgICAga2FsX3VpbnQ4ICAgIExOQW1vZGU7ICAgICAvKiBtb2RlMS4gMDogTE5BIGxvdywgMTogTE5BIG1pZCwgMjogTE5BIGhpZ2guICovCisgICAga2FsX3VpbnQxNiAgIHBnYTsgICAgICAgICAvKiBtb2RlMS4gKi8KK30gVVJmVGVzdENtZEFGQzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfaW50MTYgICAgZGxfZnJlcTsgICAgIC8qIFNwZWNpZmljIGRsX2ZyZXEgdG8gZG8gY2VsbCBzZWFyY2guIFZhbGlkIGlmIHBzY2FuX2JlZm9yZV9jZWxsX3NlYXJjaD1GLiAqLworICAgIGthbF9pbnQxNiAgICBhZmNfZGFjOworfSBVVFNUQ21kQUZDVjNscDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9pbnQ4ICAgICBtX2NSZkJhbmQ7CisgICAga2FsX3VpbnQxNiAgIG1fdTJJZHg7CisgICAga2FsX3VpbnQ4ICAgIG1fdWNQYU1vZGU7CisgICAga2FsX3VpbnQ4ICAgIG1fdWNWbTE7CisgICAga2FsX3VpbnQ4ICAgIG1fdWNWbTI7CisgICAga2FsX3VpbnQxNiAgIG1fdTJEQzJEQ19EYWM7CisgICAga2FsX3VpbnQxNiAgIG1fdTJWYmlhc19EYWM7CisgICAga2FsX3VpbnQxNiAgIG1fdTJBcGNEYWM7CisKK31VTDFEX1JGX1RYX1BBX0FQQ19SRVFfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvL3Nob3VsZCBiZSBleGFjdGx5IHRoZSBzYW1lIGFzIE1FVEFfSFdUUENfRlJBTUVfSU5GTyBpbiB1bDFkX3JmX2dlbmVyYWwuaAorICAgIGthbF91aW50OCB0cGNfc3RlcDsKKyAgICBrYWxfdWludDggaXRwOworICAgIGthbF91aW50OCBycHA7CisgICAga2FsX3VpbnQ4IGZtdF9pZHg7CisgICAga2FsX3VpbnQ4IGRsX2ZyYW1lX3R5cGU7CisgICAga2FsX3VpbnQxNiBzbG90X21hc2s7CisgICAga2FsX2ludDggICB0cGNfY21kWzE1XTsKKyAgICBrYWxfdWludDggIGJldGFfYzsKKyAgICBrYWxfdWludDggIGJldGFfZDsKKworfVVMMURfUkZfSFdUUENfRlJBTUVfSU5GTzsKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IHBjX2FsZ287CisgICAga2FsX3VpbnQ4IHRwY191c2VkX2ZyYW1lOyAvLyBzcGVjaWZ5IHRoZSBmcmFtZSBudW1iZXIKKyAgICBrYWxfaW50MTYgcF9pbmk7CisKKyAgICBVTDFEX1JGX0hXVFBDX0ZSQU1FX0lORk8gZnJhbWVfaW5mb1s4XTsKKworfVVMMURfUkZfSFdUUENfQ09ORklHX1JFUV9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCByZl9iYW5kOworCit9VUwxRF9SRl9HRVRfUFdSX1RIUl9SRVFfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MzIgICAgICAgICAgbGlkOyAgICAgIC8vIHRoZSBsaWQgaXMgbmVlZGVkIHRvIHVwZGF0ZSBydW4tdGltZSB2YWx1ZQorICAga2FsX3VpbnQzMiAgICAgICAgICBlZ19wdHI7ICAgLy8gdGhlIGV2ZW50IGdyb3VwIHBvaW50ZXIgdXNlZCB0byBub3RpZnkgcnVudC10aW1lIHVwZGF0ZSBmaW5pc2gKK30gVVJGVGVzdENtZFJlbG9hZE5WUkFNOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgbm9fbG9vcF9jdHJsOworICAgIGthbF91aW50MTYgICAgYWZjX2RhYzsKKyAgICBrYWxfYm9vbCAgICAgIHB3cl9kZXQ7CisgICAga2FsX3VpbnQ4ICAgICBwb3dlcl9jdHJsX21vZGU7CisgICAga2FsX3VpbnQ4ICAgICB2bTFbMTBdWzNdOworICAgIGthbF91aW50OCAgICAgdm0yWzEwXVszXTsKKyAgICBrYWxfdWludDE2ICAgIGRjMmRjX2RhY1sxMF1bM107CisgICAga2FsX3VpbnQxNiAgICB2Ymlhc19kYWNbMTBdWzNdOworICAgIGthbF9ib29sICAgICAgaW5pdF90eF9vbm9mZjsKKyAgICBrYWxfYm9vbCAgICAgIHJlYWR5X3R4X29ub2ZmOworICAgIGthbF91aW50OCAgICAgaW5pdF9wYV9tb2RlOworICAgIGthbF91aW50OCAgICAgcmVhZHlfcGFfbW9kZTsKKyAgICBrYWxfdWludDE2ICAgIGluaXRfcGFfZ2FpbjsKKyAgICBrYWxfdWludDE2ICAgIHJlYWR5X3BhX2dhaW47CisgICAga2FsX3VpbnQxNiAgICBpbml0X3ZnYV9kYWNfdHBjX2lkeDsKKyAgICBrYWxfdWludDE2ICAgIHJlYWR5X3ZnYV9kYWNfdHBjX2lkeDsKKyAgICBrYWxfdWludDggICAgIHRlbXBlcmF0dXJlOworICAgIGthbF9ib29sICAgICAgaHdBR0M7CisgICAga2FsX2ludDE2ICAgICBnYWluX2luaXQ7CisgICAga2FsX2Jvb2wgICAgICBpbml0X2NvbmRpdGlvbjsKKyAgICBrYWxfdWludDggICAgIHN0ZXBfZHVyYXRpb247CisgICAga2FsX3VpbnQ4ICAgICByZWFkeV9kdXJhdGlvbjsKKyAgICBrYWxfdWludDggICAgIHJldHVuZV9kdXJhdGlvbjsKKyAgICBrYWxfdWludDggICAgIGdhaW5fc3RhYmxlX3RpbWU7CisgICAga2FsX3VpbnQxNiAgICBtYXhfdmdhX2RhYzsKKyAgICBrYWxfdWludDE2ICAgIG1pbl92Z2FfZGFjOworICAgIGthbF91aW50MTYgICAganVtcF92Z2FfZGFjOworICAgIGthbF91aW50OCAgICAgZnJlcV9jb3VudDsKKyAgICBrYWxfdWludDggICAgIHB3cl9jb3VudDsKKyAgICBrYWxfdWludDggICAgIGZyZXFfc3RhcnRfaWR4OworICAgIGthbF91aW50OCAgICAgcHdyX3N0YXJ0X2lkeDsKKyAgICBrYWxfdWludDggICAgIG9kZF9yZWNvcmQ7CisgICAga2FsX3VpbnQ4ICAgICBwYV9nYWluX3N0YXJ0X2lkeDsKKyAgICBrYWxfdWludDggICAgIHBkX2dhaW5fc3RhcnRfaWR4OworICAgIGthbF91aW50OCAgICAgZGxfYmFuZFs0MF07CisgICAga2FsX3VpbnQ4ICAgICB1bF9iYW5kWzQwXTsKKyAgICBrYWxfdWludDE2ICAgIGRsX2ZyZXFbNDBdOworICAgIGthbF91aW50MTYgICAgdWxfZnJlcVs0MF07CisgICAga2FsX3VpbnQ4ICAgICBwYV9tb2RlWzQwXTsKKyAgICBrYWxfdWludDE2ICAgIHZnYV9kYWNfdHBjX2lkeFs0MF07CisgICAga2FsX3VpbnQxNiAgICBwYV9nYWluWzQwXTsKKyAgICBrYWxfdWludDggICAgIHBkX2dhaW5bNDBdOworfVVMMURfUkZfRkhDX1JFUV9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgbm9fbG9vcF9jdHJsOworICAgIGthbF91aW50MTYgICAgYWZjX2RhYzsKKyAgICBrYWxfYm9vbCAgICAgIHB3cl9kZXQ7CisgICAga2FsX3VpbnQ4ICAgICBwb3dlcl9jdHJsX21vZGU7CisgICAga2FsX3VpbnQ4ICAgICB2bTFbMTBdWzNdOworICAgIGthbF91aW50OCAgICAgdm0yWzEwXVszXTsKKyAgICBrYWxfdWludDE2ICAgIGRjMmRjX2RhY1sxMF1bM107CisgICAga2FsX3VpbnQxNiAgICB2Ymlhc19kYWNbMTBdWzNdOworICAgIGthbF9ib29sICAgICAgaW5pdF90eF9vbm9mZjsKKyAgICBrYWxfYm9vbCAgICAgIHJlYWR5X3R4X29ub2ZmOworICAgIGthbF91aW50OCAgICAgaW5pdF9wYV9tb2RlOworICAgIGthbF91aW50OCAgICAgcmVhZHlfcGFfbW9kZTsKKyAgICBrYWxfdWludDE2ICAgIGluaXRfcGFfZ2FpbjsKKyAgICBrYWxfdWludDE2ICAgIHJlYWR5X3BhX2dhaW47CisgICAga2FsX3VpbnQxNiAgICBpbml0X3ZnYV9kYWNfdHBjX2lkeDsKKyAgICBrYWxfdWludDE2ICAgIHJlYWR5X3ZnYV9kYWNfdHBjX2lkeDsKKyAgICBrYWxfdWludDggICAgIHRlbXBlcmF0dXJlOworICAgIGthbF9ib29sICAgICAgaHdBR0M7CisgICAga2FsX2ludDE2ICAgICBnYWluX2luaXQ7CisgICAga2FsX2Jvb2wgICAgICBpbml0X2NvbmRpdGlvbjsKKyAgICBrYWxfdWludDggICAgIHN0ZXBfZHVyYXRpb247CisgICAga2FsX3VpbnQ4ICAgICByZWFkeV9kdXJhdGlvbjsKKyAgICBrYWxfdWludDggICAgIHJldHVuZV9kdXJhdGlvbjsKKyAgICBrYWxfdWludDggICAgIGdhaW5fc3RhYmxlX3RpbWU7CisgICAga2FsX3VpbnQxNiAgICBtYXhfdmdhX2RhYzsKKyAgICBrYWxfdWludDE2ICAgIG1pbl92Z2FfZGFjOworICAgIGthbF91aW50MTYgICAganVtcF92Z2FfZGFjOworICAgIGthbF91aW50OCAgICAgZnJlcV9jb3VudDsKKyAgICBrYWxfdWludDggICAgIHB3cl9jb3VudDsKKyAgICBrYWxfdWludDggICAgIGZyZXFfc3RhcnRfaWR4OworICAgIGthbF91aW50OCAgICAgcHdyX3N0YXJ0X2lkeDsKKyAgICBrYWxfdWludDggICAgIG9kZF9yZWNvcmQ7CisgICAga2FsX3VpbnQ4ICAgICBwYV9nYWluX3N0YXJ0X2lkeDsKKyAgICBrYWxfdWludDggICAgIHBkX2dhaW5fc3RhcnRfaWR4OworICAgIGthbF91aW50OCAgICAgZGxfYmFuZFs0MF07CisgICAga2FsX3VpbnQ4ICAgICB1bF9iYW5kWzQwXTsKKyAgICBrYWxfdWludDE2ICAgIGRsX2ZyZXFbNDBdOworICAgIGthbF91aW50MTYgICAgdWxfZnJlcVs0MF07CisgICAga2FsX3VpbnQ4ICAgICBwYV9tb2RlWzQwXTsKKyAgICBrYWxfdWludDE2ICAgIHZnYV9kYWNfdHBjX2lkeFs0MF07CisgICAga2FsX3VpbnQxNiAgICBwYV9nYWluWzQwXTsKKyAgICBrYWxfdWludDggICAgIHBkX2dhaW5bNDBdOworICAgIGthbF91aW50OCAgICAgcGFfc2VjdGlvbls0MF07CisgICAga2FsX3VpbnQxNiAgICBsbmFfZ2Fpbls0MF07Cit9VUwxRF9SRl9GSENfRVhfUkVRX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgICBub19sb29wX2N0cmw7CisgICAga2FsX3VpbnQxNiAgICBhZmNfZGFjOworICAgIGthbF9ib29sICAgICAgcHdyX2RldDsKKyAgICBrYWxfdWludDggICAgIHBvd2VyX2N0cmxfbW9kZTsKKyAgICBrYWxfdWludDggICAgIHZtMVsxMF1bM107CisgICAga2FsX3VpbnQ4ICAgICB2bTJbMTBdWzNdOworICAgIGthbF91aW50MTYgICAgZGMyZGNfZGFjWzEwXVszXTsKKyAgICBrYWxfdWludDE2ICAgIHZiaWFzX2RhY1sxMF1bM107CisgICAga2FsX2Jvb2wgICAgICBpbml0X3R4X29ub2ZmOworICAgIGthbF9ib29sICAgICAgcmVhZHlfdHhfb25vZmY7CisgICAga2FsX3VpbnQ4ICAgICBpbml0X3BhX21vZGU7CisgICAga2FsX3VpbnQ4ICAgICByZWFkeV9wYV9tb2RlOworICAgIGthbF91aW50MTYgICAgaW5pdF9wYV9nYWluOworICAgIGthbF91aW50MTYgICAgcmVhZHlfcGFfZ2FpbjsKKyAgICBrYWxfdWludDE2ICAgIGluaXRfdmdhX2RhY190cGNfaWR4OworICAgIGthbF91aW50MTYgICAgcmVhZHlfdmdhX2RhY190cGNfaWR4OworICAgIGthbF91aW50OCAgICAgdGVtcGVyYXR1cmU7CisgICAga2FsX2Jvb2wgICAgICBod0FHQzsKKyAgICBrYWxfaW50MTYgICAgIGdhaW5faW5pdDsKKyAgICBrYWxfYm9vbCAgICAgIGluaXRfY29uZGl0aW9uOworICAgIGthbF91aW50OCAgICAgc3RlcF9kdXJhdGlvbjsKKyAgICBrYWxfdWludDggICAgIHJlYWR5X2R1cmF0aW9uOworICAgIGthbF91aW50OCAgICAgcmV0dW5lX2R1cmF0aW9uOworICAgIGthbF91aW50OCAgICAgZ2Fpbl9zdGFibGVfdGltZTsKKyAgICBrYWxfdWludDE2ICAgIG1heF92Z2FfZGFjOworICAgIGthbF91aW50MTYgICAgbWluX3ZnYV9kYWM7CisgICAga2FsX3VpbnQxNiAgICBqdW1wX3ZnYV9kYWM7CisgICAga2FsX3VpbnQ4ICAgICBmcmVxX2NvdW50OworICAgIGthbF91aW50OCAgICAgcHdyX2NvdW50OworICAgIGthbF91aW50OCAgICAgZnJlcV9zdGFydF9pZHg7CisgICAga2FsX3VpbnQ4ICAgICBwd3Jfc3RhcnRfaWR4OworICAgIGthbF91aW50OCAgICAgb2RkX3JlY29yZDsKKyAgICBrYWxfdWludDggICAgIHBhX2dhaW5fc3RhcnRfaWR4OworICAgIGthbF91aW50OCAgICAgcGRfZ2Fpbl9zdGFydF9pZHg7CisgICAga2FsX3VpbnQ4ICAgICBkbF9iYW5kWzQwXTsKKyAgICBrYWxfdWludDggICAgIHVsX2JhbmRbNDBdOworICAgIGthbF91aW50MTYgICAgZGxfZnJlcVs0MF07CisgICAga2FsX3VpbnQxNiAgICB1bF9mcmVxWzQwXTsKKyAgICBrYWxfdWludDggICAgIHBhX21vZGVbNDBdOworICAgIGthbF91aW50MTYgICAgdmdhX2RhY190cGNfaWR4WzQwXTsKKyAgICBrYWxfdWludDE2ICAgIHBhX2dhaW5bNDBdOworICAgIGthbF91aW50OCAgICAgcGRfZ2Fpbls0MF07CisgICAga2FsX3VpbnQ4ICAgICBwYV9zZWN0aW9uWzQwXTsKKyAgICBrYWxfdWludDE2ICAgIGxuYV9nYWluWzQwXTsKKyAgICBrYWxfdWludDggICAgIGNhbF9udW07CisgICAga2FsX3VpbnQ4ICAgICByb3V0ZV9zZXR0aW5nWzNdOworfVVMMURfUkZfRkhDX0VYX0NBX1JFUV9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgICBvazsKKyAgICBrYWxfdWludDggICAgICAgZnJlcV9jb3VudDsKKyAgICBrYWxfdWludDggICAgICAgcHdyX2NvdW50OworICAgIGthbF91aW50OCAgICAgICBmcmVxX3N0YXJ0X2lkeDsKKyAgICBrYWxfdWludDggICAgICAgcHdyX3N0YXJ0X2lkeDsKKyAgICBrYWxfaW50MTYgICAgICAgcnNzaVs0MDBdOworICAgIGthbF91aW50MTYgICAgICBwd3JfZGV0X3ZhbHVlWzQwXTsKK31VTDFEX1JGX0ZIQ19DTkZfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICAgb2s7CisgICAga2FsX3VpbnQ4ICAgIGZyZXFfY291bnQ7CisgICAga2FsX3VpbnQ4ICAgIHB3cl9jb3VudDsKKyAgICBrYWxfdWludDggICAgZnJlcV9zdGFydF9pZHg7CisgICAga2FsX3VpbnQ4ICAgIHB3cl9zdGFydF9pZHg7CisgICAga2FsX3VpbnQ4ICAgIHJ4X2xuYV9tb2RlWzQwMF07CisgICAga2FsX2ludDE2ICAgIHJzc2lbNDAwXTsKKyAgICBrYWxfdWludDE2ICAgcHdyX2RldF92YWx1ZVs0MF1bM107CisvKipWIFI4IG5ldyBmZWF0dXJlcyAqLworICAgIGthbF9pbnQxNiAgICBHYmJfT2Zmc2V0WzQwMF07ICAgLyoqPCBcYnJpZWYgVFggR2JiIHBvd2VyIGNvbXBlbnNhdGlvbiAqLworICAgIGthbF91aW50OCAgICByeGRfbG5hX21vZGVbNDAwXTsgLyoqPCBcYnJpZWYgUnggZGl2ZXJzaXR5IHBhdGggbG5hIG1vZGUgKi8KKyAgICBrYWxfaW50MTYgICAgcnhkX3Jzc2lbNDAwXTsgICAgIC8qKjwgXGJyaWVmIFJ4IGRpdmVyc2l0eSBwYXRoIFJTU0kgKi8gICAgCit9VUwxRF9SRl9GSENfRVhfQ05GX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisKKyAgIGthbF9ib29sICAgICAgYl9hZmNfZGFjX3ZhbGlkOworICAga2FsX3VpbnQxNiAgICB1Ml9hZmNfZGFjOworICAga2FsX3VpbnQ4ICAgICB1MV9sb29wYmFja1R5cGU7CisgICBrYWxfdWludDggICAgIHUxX2ZyYW1lX3NoaWZ0OworICAga2FsX3VpbnQ4ICAgICB1MV9ybWNfdHlwZTsKKyAgIGthbF91aW50OCAgICAgdTFfY3RmY1s0XTsKKyAgIGthbF91aW50OCAgICAgdTFfYml0X3BhdHRlcm47CisKKyAgIGthbF9pbnQxNiAgICAgaTJfZGxfZnJlcTsKKyAgIGthbF9pbnQxNiAgICAgaTJfZGxfcHNjOworICAga2FsX2ludDE2ICAgICBpMl9kbF9vdnNmOworCisgICBrYWxfaW50MTYgICAgIGkyX3VsX2ZyZXE7CisgICBrYWxfdWludDE2ICAgIHUyX3VsX3RmY2k7CisgICBrYWxfdWludDMyICAgIHU0X3VsX3NjX2NvZGU7CisgICBrYWxfYm9vbCAgICAgIGJfaXFfcHdyX3ZhbGlkOworICAga2FsX3VpbnQ4ICAgICB1MV9kcGNjaF9wd3I7CisgICBrYWxfdWludDggICAgIHUxX2RwZGNoX3B3cjsKKworfVVMMURfUkZfTlNGVF9SRVFfVDsKKy8qKgorICogTlNGVCBMaXN0IE1vZGUgY29tbWFuZCBwYXJhbWV0ZXIKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgIGFmY19kYWNfdmFsaWQ7CisgICBrYWxfdWludDE2ICBhZmNfZGFjOworICAga2FsX3VpbnQ4ICAgbG9vcGJhY2tUeXBlOworICAga2FsX3VpbnQ4ICAgZnJhbWVfc2hpZnQ7CisgICBrYWxfdWludDggICBybWNfdHlwZTsKKyAgIGthbF91aW50OCAgIGN0ZmNbNF07CisgICBrYWxfdWludDggICBiaXRfcGF0dGVybjsKKy8qIERMIHBhcmFtZXRlcnMgKi8KKyAgIGthbF9pbnQxNiAgIGRsX2ZyZXFbNTBdOworICAga2FsX2ludDE2ICAgZGxfcHNjOworICAga2FsX2ludDE2ICAgZGxfb3ZzZjsKKy8qIFVMIHBhcmFtZXRlcnMgKi8KKyAgIGthbF9pbnQxNiAgIHVsX2ZyZXFbNTBdOworICAga2FsX3VpbnQxNiAgdWxfdGZjaTsKKyAgIGthbF91aW50MzIgIHVsX3NjX2NvZGU7CisgICBrYWxfYm9vbCAgICBpcV9wd3JfdmFsaWQ7CisgICBrYWxfdWludDggICBkcGNjaF9wd3I7CisgICBrYWxfdWludDggICBkcGRjaF9wd3I7CisvKiBjb21tb24gcGFyYW1ldGVycyAqLworICAga2FsX3VpbnQ4ICAgdmFsaWRfZnJlcTsKKyAgIGthbF91aW50MTYgIHRlc3RfaXRlbVs1MF07CisvKiB0aGUgdGltZSBzZXR0aW5ncywgdW5pdCA9IGZyYW1lICovCisgICBrYWxfdWludDE2ICBmdWxsX3Rlc3RfdGltZTsKKyAgIGthbF91aW50OCAgIHJlYWR5X3RpbWU7CisgICBrYWxfdWludDggICBzeW5jX3RpbWU7CisgICBrYWxfdWludDggICByZXRyaWFsOyAgIAorICAga2FsX3VpbnQxNiAgdGVzdF90aW1lOworICAga2FsX3VpbnQxNiAgcnhfcnNzaV9zdGFydF90aW1lWzNdOworICAga2FsX3VpbnQ4ICAgcnhfcnNzaV9kdXJhdGlvblszXTsKKyAgIGthbF91aW50MTYgIHJ4X2Jlcl9zdGFydF90aW1lOworICAga2FsX3VpbnQ4ICAgcnhfYmVyX2R1cmF0aW9uOworICAga2FsX3VpbnQxNiAgSUxQQ19BQkNfdGltZTsKKyAgIGthbF91aW50MTYgIElMUENfRUZfdGltZTsKKyAgIGthbF91aW50MTYgIElMUENfR0hfdGltZTsKKyAgIGthbF91aW50MTYgIHRyYW5zaXRpb25fdGltZTsKK30gVVJmTnNmdExpc3RNb2RlUmVxOworLyoqCisgKiBIU1BBIGNvbW1hbmQgcGFyYW1ldGVyCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICAgIGJfYWZjX2RhY192YWxpZDsKKyAgIGthbF91aW50MTYgICAgdTJfYWZjX2RhYzsKKyAgIGthbF91aW50OCAgICAgdTFfbG9vcGJhY2tUeXBlOworICAga2FsX3VpbnQ4ICAgICB1MV9mcmFtZV9zaGlmdDsKKyAgIGthbF91aW50OCAgICAgdTFfcm1jX3R5cGU7CisgICBrYWxfdWludDggICAgIHUxX2N0ZmNbNF07CisgICBrYWxfdWludDggICAgIHUxX2JpdF9wYXR0ZXJuOworCisgICBrYWxfaW50MTYgICAgIGkyX2RsX2ZyZXE7CisgICBrYWxfaW50MTYgICAgIGkyX2RsX3BzYzsKKyAgIGthbF9pbnQxNiAgICAgaTJfZGxfb3ZzZjsKKworICAga2FsX2ludDE2ICAgICBpMl91bF9mcmVxOworICAga2FsX3VpbnQxNiAgICB1Ml91bF90ZmNpOworICAga2FsX3VpbnQzMiAgICB1NF91bF9zY19jb2RlOworICAga2FsX2Jvb2wgICAgICBiX2lxX3B3cl92YWxpZDsKKyAgIGthbF91aW50OCAgICAgdTFfZHBjY2hfcHdyOworICAga2FsX3VpbnQ4ICAgICB1MV9kcGRjaF9wd3I7CisgICBrYWxfdWludDggICAgIHN1YlRlc3Q7Cit9VVJmVGVzdENtZEhzcGFOc2Z0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgbWVhc3VyZV9jb3VudDsKK30gVVJmVGVzdENtZEdldFJmVGVtcFNlbnNvcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICBiRGF0YVZhbGlkOworICAgIGthbF91aW50MzIgIHU0VG90YWxCaXRzOworICAgIGthbF91aW50MzIgIHU0RXJyb3JCaXRzOworfVVMMURfUkZfTlNGVF9CRVRfQklUX0NOVF9GT1JfQkVSX0NORl9UOworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgb2s7CisgICAga2FsX3VpbnQ4ICAgbnVtX2ZyZXE7CisgICAga2FsX2ludDE2ICAgZGxfZnJlcVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKyAgICBrYWxfaW50MzIgICByc3NpWyBGRERfTUFYX0ZSRVFfTElTVCBdOworfSBVUmZUZXN0UmVzdWx0UlNTSTsKKworLy8gUjggYm90aCByeCBwYXRoIFJTU0kgcmVzdWx0Cit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgb2s7CisgICBrYWxfdWludDggICBudW1fZnJlcTsKKyAgIGthbF9pbnQxNiAgIGRsX2ZyZXFbIEZERF9NQVhfRlJFUV9MSVNUIF07CisgICBrYWxfaW50MzIgICByc3NpWyBGRERfTUFYX0ZSRVFfTElTVCBdOworICAga2FsX2ludDMyICAgcnNzaV9yeGRbIEZERF9NQVhfRlJFUV9MSVNUIF07Cit9IFVSZlRlc3RSZXN1bHRSU1NJUnhEOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgb2s7CisgICBrYWxfaW50MzIgICBOU0ZUX1JTU0k7CisgICBrYWxfaW50MzIgICBOU0ZUX1JTU0lfUlhEOworICAga2FsX2ludDMyICAgY21kX2xvY2F0aW9uOworfVVSZlRlc3RSZXN1bHROU0ZUUlNTSTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICBvazsKKyAgICBrYWxfdWludDggICBudW1fZnJlcTsKKyAgICBrYWxfaW50MTYgICBkbF9mcmVxWyBGRERfTUFYX0ZSRVFfTElTVCBdOworICAgIGthbF9pbnQzMiAgIGluYmFuZF9wb3dbIEZERF9NQVhfRlJFUV9MSVNUIF07Cit9IFVSZlRlc3RSZXN1bHRSeEdhaW5Td2VlcDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2ICBwc2M7ICAgICAgICAvKiBQcmltYXJ5IHNjcmFtYmxpbmcgY29kZSAqLworICAgIGthbF9pbnQzMiAgIHRtOyAgICAgICAgIC8qIENlbGwgZnJhbWUgYm91bmRhcnkgb2Zmc2V0IHRvIExTVCAqLworICAgIGthbF9pbnQxNiAgIG9mZjsgICAgICAgIC8qIENlbGwgZnJhbWUgbnVtYmVyIG9mZnNldCB0byBMU1QgKi8KKyAgICBrYWxfYm9vbCAgICBzdHRkOyAgICAgICAvKiBUcnVlIGZvciBTVFREIHVzZWQuICovCisgICAga2FsX3VpbnQ4ICAgc2FtcGxlX251bTsKKyAgICBrYWxfaW50MTYgICByc2NwX3N1bTsKKyAgICBrYWxfaW50MTYgICBmcmVxX2Vycm9yOworfSBVUmZUZXN0X2NwaWNoX3Jlc3VsdF9UOworCisjZGVmaW5lIE1BWF9OVU1fTUVBU19DRUxMIDMyCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgICAgIG9rOworICAgIGthbF91aW50OCAgICAgICBudW1fY2VsbDsKKyAgICBVUmZUZXN0X2NwaWNoX3Jlc3VsdF9UICBjcGljaF9yZXN1bHRbIE1BWF9OVU1fTUVBU19DRUxMIF07Cit9IFVSZlRlc3RSZXN1bHRSU0NQOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgICBvazsKKyAgICBrYWxfdWludDggICAgICAgbnVtX2NlbGw7CisgICAgVVJmVGVzdF9jcGljaF9yZXN1bHRfVCAgY3BpY2hfcmVzdWx0WyBNQVhfTlVNX01FQVNfQ0VMTCBdOworfSBVVFNUZXN0UmVzdWx0UlNDUFYzbHA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgICAgb2s7CisgICAga2FsX3VpbnQxNiAgICAgcHNjOworICAgIGthbF9pbnQzMiAgICAgIHRtOworICAgIGthbF9ib29sICAgICAgIHN0dGQ7CisgICAga2FsX3VpbnQ4ICAgICAgcnNjcF9zdW07CisgICAga2FsX2ludDE2ICAgICAgZnJlcV9lcnJvcjsKKworfVVSZlRlc3RSZXN1bHRBRkM7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgICAgb2s7CisgICAga2FsX3VpbnQxNiAgICAgcHNjOworICAgIGthbF9pbnQzMiAgICAgIHRtOworICAgIGthbF9ib29sICAgICAgIHN0dGQ7CisgICAga2FsX3VpbnQ4ICAgICAgcnNjcF9zdW07CisgICAga2FsX2ludDE2ICAgICAgZnJlcV9lcnJvcjsKK31VVFNUZXN0UmVzdWx0QUZDVjNscDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICAgICBvazsKKyAgICBrYWxfdWludDE2ICAgICBwc2M7CisgICAga2FsX2ludDMyICAgICAgdG07CisgICAga2FsX2Jvb2wgICAgICAgc3R0ZDsKKyAgICBrYWxfdWludDggICAgICByc2NwX3N1bTsKKyAgICBrYWxfaW50MzIgICAgICBmcmVxX2Vycm9yOworfVVSZlRlc3RSZXN1bHRBRkNfRXg7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgb2s7CisgICAga2FsX3VpbnQzMiAgYmVyOyAgICAvKiBTcGVjIHJlcXVpcmVtZW50PTEwXi0zLiBXZSB3aWxsIGNvdW50IDEwXjUgZnJhbWVzKDEwMCB0aW1lcyBzcGVjIHJlcXVpcmVtZW50KSBmb3IgQkVSIGNhbGN1bGF0aW9uLiBPbmx5IGNvdW50IGZvciB0aGUgb25seSBUUkNoIGZvciBEUERDaC4gKi8KK30gVVJmVGVzdFJlc3VsdFJ4RFBDaDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyIG1fdTRSZmlkOworfVVSZlRlc3RSZXN1bHRSRklEOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCBtX3UxUmVzdWx0OworCit9VVJmVGVzdFJlc3VsdFB3ckR0U3RlcDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2IG1fdTJSZXN1bHQ7CisKK31VUmZUZXN0UmVzdWx0UHdyRHREYWM7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IG1fdTFSZXN1bHQ7CisKK31VUmZUZXN0UmVzdWx0UHdyRHREZWZhdWx0VGhyOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgb2s7CisgICAga2FsX2ludDggICAgICBtX2kxQ3VyR2FpblRhYmxlU3RhdGU7CisKK31VUmZUZXN0UmVzdWx0UmVwbGFjZUdhaW5UYWJsZTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MzIgICAgICBjYXBhYmlsaXR5OworICAga2FsX3VpbnQzMiAgICAgIGJhbmRfc3VwcG9ydDsKKyAgIGthbF91aW50MzIgICAgICByeGRfYmFuZF9zdXBwb3J0OyAgIAorICAga2FsX3VpbnQzMiAgICAgIHBhZHJpZnRfYmFuZF9zdXBwb3J0OworICAga2FsX3VpbnQzMiAgICAgIHdjZG1hX2RwZF9iYW5kX3N1cHBvcnQ7Cit9RlRfVU1UU19Nc0NhcGFiaWxpdHlFeDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgIG9rOworICAgIGthbF91aW50OCAgbGlua19zdGF0dXM7Cit9RlRfVU1UU19OU0ZUTGlua1N0YXR1c1JlcG9ydDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAga2FsX2Jvb2wgICAgb2s7ICAgIC8qPCEgb2sgaW5kaWNhdG9yICovCisgICAga2FsX3VpbnQzMiAgc3VtOyAgIC8qPCEgdGhlIHN1bSBvZiBtZWFzdXJlX2NvdW50IHRpbWVzIG9mIHRlbXAgc2Vuc29yIHJlc3VsdCAqLworfSBVUmZUZXN0UmVzdWx0R2V0UmZUZW1wU2Vuc29yOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgb2s7CisgICAga2FsX3VpbnQ4ICBsaW5rX3N0YXR1czsKK30gVVJmTnNmdExpc3RNb2RlQ25mOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgcmZfYmFuZF9pZHg7CisgICAga2FsX3VpbnQxNiBwb3dlcl9sZXZlbF9udW07CisgICAga2FsX3VpbnQxNiBjb2RlX3dvcmRfbnVtOworfSBVUmZUZXN0Q21kU2V0TUlQSUNvZGVXb3JkOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgc3RhdHVzOworICAgIGthbF91aW50MTYgcG93ZXJfbGV2ZWxfbnVtOworICAgIGthbF91aW50MTYgY29kZV93b3JkX251bTsKK30gVVJmVGVzdFJlc3VsdEdldE1JUElDb2RlV29yZDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfaW50MTYgc3RhdHVzOworICAgIGthbF9pbnQxNiB0YWRjX2RhYzsKKyAgICBrYWxfaW50MTYgdGVtcGVyYXR1cmU7CisgICAga2FsX2ludDE2IHRlbXBfaWR4OworfSBVUmZUZXN0UmVzdWx0UmZUZW1wZXJhdHVyZUluZm87CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIGthbF91aW50MzIgICAgICByZXN1bHQ7ICAgICAgICAgLy8gMTogc3VwcG9ydCAwOiBub3Qgc3VwcG9ydAorICAgIGthbF91aW50MzIgICAgICBxdWVyeV9vcF9jb2RlOyAgLy8gcXVlcnkgb3AgY29kZQorfVVSZkNoZWNrSWZGdW5jRXhpc3Q7CisKK3R5cGVkZWYgIGVudW0KK3sKKyAgIENORl9TVUNDRVNTID0gMCwKKyAgIENORl9HRU5FUkFMX0ZBSUwgPSAxLAorICAgQ05GX05WUkFNX1JFQURfRkFJTCA9IDIsCisgICBDTkZfRlJFUV9JTlZBTElEID0gMywKKyAgIENORl9DTURfSU5WQUxJRCA9IDQsCisgICBDTkZfTlZSQU1fU0VUX0ZBSUwgPSA1LAorICAgQ05GX1RYX0RBVEFfQ0hFQ0tfRkFJTCA9IDYsCisgICBDTkZfVFhfU1RSVUNUVVJFX0VSUk9SID0gNywKKyAgIENORl9SWF9TVFJVQ1RVUkVfRVJST1IgPSA4LAorICAgQ05GX1RYX1ZHQV9GUkVRX0NIRUNLX0ZBSUw9OSwKKyAgIENORl9UWF9QV1JfRFRfRlJFUV9DSEVDS19GQUlMPTEwLAorICAgQ05GX0dFVF9SWFRYX1BFRVJfQlVGX09WRVJGTE9XPTExLCAgICAgLy9hZnRlciA2MjkzCisgICBDTkZfQUREUkVDT1JEX0ZBSUw9MTIsICAgICAgICAgICAgICAgICAvL2FmdGVyIDYyOTMKKyAgIENORl9HRVRfUlhUWF9QRUVSX0JVRl9aRVJPPTEzICAgICAgICAgIC8vYWZ0ZXIgNjI5NQorfSAgTlZSQU1fQUNDRVNTX1JFU1VMVF9NU0c7CisKKy8qVFgvUlggY2FsaWJyYXRpb24gZGF0YS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+Ki8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICBvazsKKyAgIGthbF91aW50OCAgIGVycm9yX2NoZWNrOyAgICAgICAgIC8vZm9yIGNhbGlicmF0aW9uIGRhdGEgY2hlY2tpbmcKKyAgIGthbF91aW50OCAgIHZlcnNpb25fbnVtYmVyOworfSBVUmZUZXN0UmVzdWx0Q2FsRGF0YVByb2Nlc3M7ICAgICAgLy9hZnRlciA2MjkyIGdldC9zZXQgIGNhbGlicmF0aW9uIGRhdGEgKGNvbmZpcm0gOiBsb2NhbCBwYXJhbWV0ZXIpIAorLyo5MyBnZXQvc2V0IGNvbW1hbmQgb3B0aW1pemF0aW9uIENuZi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICBvazsKKyAgIE5WUkFNX0FDQ0VTU19SRVNVTFRfTVNHICAgZXJyb3JfY2hlY2s7ICAgICAgICAgIC8vZm9yIGNhbGlicmF0aW9uIGRhdGEgY2hlY2tpbmcKKyAgIGthbF91aW50OCAgIHJ4bV9yZXN1bHRfbnVtOyAgICAgICAgICAgICAgICAgICAgIC8vdGhlIG51bWJlciBvZiBiYW5kcyB0byBTRVQKKyAgIGthbF91aW50OCAgIHJ4ZF9yZXN1bHRfbnVtOworICAga2FsX3VpbnQ4ICAgdHhfcmVzdWx0X251bTsKKyAgIE5WUkFNX0FDQ0VTU19SRVNVTFRfTVNHICByeG1fcmVzdWx0WzVdOyAgICAgICAgIC8vcmVzdWx0IHN0YXR1cyBvZiBTRVQgY29tbWFuZCBmb3IgZWFjaCBiYW5kCisgICBOVlJBTV9BQ0NFU1NfUkVTVUxUX01TRyAgcnhkX3Jlc3VsdFs1XTsKKyAgIE5WUkFNX0FDQ0VTU19SRVNVTFRfTVNHICB0eF9yZXN1bHRbNV07Cit9IFVSZlRlc3RDbWRfU2V0UnhUeENhbERhdGFfQ25mUGFyYW1fVjM7ICAgICAgICAgICAvL0xvY2FsIHBhcmFtZXRlciBvZiBjb25maXJtIGFmdGVyIDYyOTMgc2V0IFJ4L1R4IGNhbCBkYXRhIGNvbW1hbmQKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgIG9rOworICAgTlZSQU1fQUNDRVNTX1JFU1VMVF9NU0cgICBlcnJvcl9jaGVjazsgICAgICAgICAgLy9mb3IgY2FsaWJyYXRpb24gZGF0YSBjaGVja2luZworICAga2FsX3VpbnQ4ICAgcnhtX2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgbnVtYmVyIG9mIGJhbmRzIHRvIEdFVAorICAga2FsX3VpbnQ4ICAgcnhkX2NvdW50OworICAga2FsX3VpbnQ4ICAgdHhfY291bnQ7CisgICBrYWxfdWludDggICBwYWRkaW5nOworICAga2FsX3VpbnQxNiAgcnhtX29mZnNldDsgICAgICAgICAgICAgICAgICAgICAgICAgLy9vZmZzZXQgb2YgZGF0YSBpbiBwZWVyIGJ1ZmZlcgorICAga2FsX3VpbnQxNiAgcnhkX29mZnNldDsKKyAgIGthbF91aW50MTYgIHR4X29mZnNldDsKK30gVVJmVGVzdENtZF9HZXRSeFR4Q2FsRGF0YV9DbmZQYXJhbV9WMzsgICAgICAgICAgIC8vTG9jYWwgcGFyYW1ldGVyIG9mIGNvbmZpcm0gIGFmdGVyIDYyOTMgZ2V0IFJ4L1R4IGNhbCBkYXRhIGNvbW1hbmQKKy8qOTMgZ2V0L3NldCBjb21tYW5kIG9wdGltaXphdGlvbiBDbmYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgdmVyc2lvbl9udW1iZXI7CisgICBrYWxfYm9vbCAgICBpc191cGxhdGVfdG9fTlZSQU07ICAvL3RvIG1lbW9yeSBvciBOVlJBTQorfSBVUmZUZXN0Q21kU2V0Q2FsRGF0YSA7ICAgICAgICAgICAgLy9hZnRlciA2MjkyIGdldC9zZXQgIGNhbGlicmF0aW9uIGRhdGEgKGNvbW1hbmQgOiBsb2NhbCBwYXJhbWV0ZXIpCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICB2ZXJzaW9uX251bWJlcjsgCit9IFVSZlRlc3RDbWRHZXRDYWxEYXRhIDsgICAgICAvL2FmdGVyIDYyOTIgZ2V0L3NldCAgY2FsaWJyYXRpb24gZGF0YSAoY29tbWFuZCA6IGxvY2FsIHBhcmFtZXRlcikKKy8qOTMgZ2V0L3NldCBjb21tYW5kIG9wdGltaXphdGlvbiBSZXEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgcnhtX2JhbmRfbnVtOyAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgbnVtYmVyIG9mIGJhbmRzIHRvIEdFVAorICAga2FsX3VpbnQ4ICAgcnhkX2JhbmRfbnVtOworICAga2FsX3VpbnQ4ICAgdHhfYmFuZF9udW07CisgICBrYWxfdWludDggICByeG1fYmFuZF9pbmRleFs1XTsgICAgICAgICAgICAgICAgICAvL0JhbmQgaW5kZXggCisgICBrYWxfdWludDggICByeGRfYmFuZF9pbmRleFs1XTsKKyAgIGthbF91aW50OCAgIHR4X2JhbmRfaW5kZXhbNV07Cit9IFVSZlRlc3RDbWRfR2V0UnhUeENhbERhdGFfUmVxUGFyYW1fVjM7ICAgICAgICAgICAvL0xvY2FsIHBhcmFtZXRlciBvZiByZXF1ZXN0ICBhZnRlciA2MjkzIGdldCBSeC9UeCBjYWwgZGF0YSBjb21tYW5kCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICBpc191cGxhdGVfdG9fTlZSQU07ICAgICAgICAgICAgICAgICAvL3dyaXRlIHRvIE5WUkFNIG9yIG5vdAorICAga2FsX3VpbnQ4ICAgcnhtX2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgbnVtYmVyIG9mIGJhbmRzIHRvIFNFVAorICAga2FsX3VpbnQ4ICAgcnhkX2NvdW50OworICAga2FsX3VpbnQ4ICAgdHhfY291bnQ7CisgICBrYWxfdWludDE2ICByeG1fb2Zmc2V0OworICAga2FsX3VpbnQxNiAgcnhkX29mZnNldDsKKyAgIGthbF91aW50MTYgIHR4X29mZnNldDsKK30gVVJmVGVzdENtZF9TZXRSeFR4Q2FsRGF0YV9SZXFQYXJhbV9WMzsgICAgICAgICAgIC8vTG9jYWwgcGFyYW1ldGVyIG9mIHJlcXVlc3QgIGFmdGVyIDYyOTMgc2V0IFJ4L1R4IGNhbCBkYXRhIGNvbW1hbmQKKy8qOTMgZ2V0L3NldCBjb21tYW5kIG9wdGltaXphdGlvbiBSZXEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKlRYL1JYIGNhbGlicmF0aW9uIGRhdGE8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qUlggY2FsaWJyYXRpb24gZGF0YS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+Ki8KK3R5cGVkZWYgIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgdWFyZmNuOworICAga2FsX2ludDggICAgcGF0aF9sb3NzX0hQTVtVTDFUU1RfTE5BX01PREVfTlVNQkVSX0VYVF07CisgICBrYWxfaW50OCAgICBwYXRoX2xvc3NfTFBNW1VMMVRTVF9MTkFfTU9ERV9OVU1CRVJfRVhUXTsKK30gVUwxRF9SRl9MTkFfUEFUSExPU1M7ICAgICAgIC8vYWZ0ZXIgNjI5MiBMTkEgcGF0aGxvc3MgZm9ybWF0CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICAgICAgICAgICAgICBiYW5kOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgcnhhbnRwYXRoOyAgLy8gMTogbWFpbiBwYXRoICAsICAyIDogZGl2ZXJzaXR5IHBhdGgKKyAgIGthbF9pbnQ4ICAgICAgICAgICAgICAgIHRlbXBlcl9vZmZzZXRbQ0FMX1RFTVBfU0VDVElPTl07CisgICBVTDFEX1JGX0xOQV9QQVRITE9TUyAgICBsb3NzX29mX3VhcmZjbltDQUxfVUFSRkNOX1NFQ1RJT05dOworfSBVUmZUZXN0UGF0aGxvc3NJdGVtOyAgICAgICAvL2FmdGVyIDYyOTIgZ2V0L3NldCBSWCBwYXRobG9zcyAgKGNvbmZpcm0vY29tbWFuZCA6IHBlZXIgYnVmZmVyKQorLypSWCBjYWxpYnJhdGlvbiBkYXRhPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLypSWCBjYWxpYnJhdGlvbiBkYXRhLS0tLS0tLS0tLTYyOTMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiovCisjZGVmaW5lIFVUU1RfTlZSQU1fU0laRV9WMyA3CisKK3R5cGVkZWYgIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgdWFyZmNuOworICAga2FsX2ludDE2ICAgIHBhdGhfbG9zc19IUE1bVVRTVF9OVlJBTV9TSVpFX1YzXTsKKyAgIGthbF9pbnQxNiAgICBwYXRoX2xvc3NfTFBNW1VUU1RfTlZSQU1fU0laRV9WM107Cit9IFVUU1RfTE5BX1BBVEhMT1NTOyAgICAgICAvL2FmdGVyIDYyOTMgTE5BIHBhdGhsb3NzIGZvcm1hdAorCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgYmFuZDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgIHJ4YW50cGF0aDsgIC8vIDE6IG1haW4gcGF0aCAgLCAgMiA6IGRpdmVyc2l0eSBwYXRoCisgICBrYWxfaW50OCAgICAgICAgICAgICAgICB0ZW1wZXJfb2Zmc2V0W0NBTF9URU1QX1NFQ1RJT05dOworICAgVVRTVF9MTkFfUEFUSExPU1MgICAgbG9zc19vZl91YXJmY25bQ0FMX1VBUkZDTl9TRUNUSU9OXTsKK30gVVRTVFBhdGhsb3NzVjM7ICAgICAgIC8vYWZ0ZXIgNjI5MyBnZXQvc2V0IFJYIHBhdGhsb3NzICAoY29uZmlybS9jb21tYW5kIDogcGVlciBidWZmZXIpCisKKy8qVFggY2FsaWJyYXRpb24gZGF0YS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+Ki8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICBzdGFydDsKKyAgIGthbF91aW50MTYgIGVuZDsKK30gVUwxRF9zSFlTVEVSRVNJU0RBVEE7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICBsZXZlbF8wOworICAga2FsX3VpbnQxNiAgbGV2ZWxfMTsKK30gVUwxRF9zREMyREM7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICBtYXhfdWFyZmNuOworICAga2FsX2ludDE2ICAgcHdyX29mZnNldF9kQjsKKyAgIGthbF9pbnQxNiAgIHB3cl9vZmZzZXRfdHhkYWM7Cit9IFVMMURfc0FSRkNOX1NFQ1RJT047CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICBkYzJkY19sZXZlbDsKKyAgIGthbF91aW50MTYgIHZiaWFzX2RhYzsKKyAgIGthbF91aW50OCAgIHZtMTsKKyAgIGthbF91aW50OCAgIHZtMjsKK30gVUwxRF9zUEFEQVRBOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgcGFfbW9kZTsKKyAgIGthbF9pbnQ4ICAgIHByZjsKKyAgIGthbF91aW50OCAgIGRjMmRjX2x2bDsKKyAgIGthbF91aW50OCAgIHZtMTsKKyAgIGthbF91aW50OCAgIHZtMjsKKyAgIGthbF91aW50MTYgIHZiaWFzX2RhYzsKKyAgIGthbF91aW50MTYgIHBhX2dhaW47Cit9IFVMMURfc1BNVUxFVkhBTkRMRTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgICAgICAgICAgIG9jdGxldl9udW1fc2VjdGlvbjsKKyAgIGthbF91aW50OCAgICAgICAgICAgIHJlc2VydmVkX2J5dGU7CisgICBrYWxfdWludDMyICAgICAgICAgICBwYV9waGFzZV9jb21wZW5zYXRpb25bM107CisgICBVTDFEX3NQTVVMRVZIQU5ETEUgICBwbXVfbGV2ZWxfaGFuZGxlWzhdOy8vOAorICAga2FsX3VpbnQxNiAgICAgICAgICAgcGFfZ2Fpbl9nMTJhOworICAga2FsX3VpbnQxNiAgICAgICAgICAgcGFfZ2Fpbl9nMTJiOworfVVMMURfc1BBT0NUTFZMU0VUVElORzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFVMMURfc1BBREFUQSAgICAgICAgIHBhX2RhdGE7CisgICBrYWxfdWludDE2ICAgICAgICAgICB2Z2FfZGFjW05VTUJFUl9PRl9WR0FfREFDXTsKKyAgIFVMMURfc0FSRkNOX1NFQ1RJT04gIHZnYV9jb21wX2J5X3N1YmJhbmRbQ0FMX1VBUkZDTl9TRUNUSU9OXTsKKyAgIGthbF9pbnQxNiAgICAgICAgICAgIHZnYV9jb21wX2J5X3RlbXBlcmF0dXJlWzhdWzJdOworfSBVTDFEX3NUWFBPV0VSREFUQTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgICAgICAgICAgIHB3cl9kdF90aHI7CisgICBrYWxfdWludDggICAgICAgICAgICBwd3JfZHRfc2VjdGlvbjsKKyAgIGthbF91aW50MTYgICAgICAgICAgIHB3cl9kdF9kYWNbQ0FMX1BXUl9ERVRFQ1RPUl9TRUNUSU9OXTsKKyAgIGthbF9pbnQxNiAgICAgICAgICAgIHB3cl9kdF92YWx1ZVtDQUxfUFdSX0RFVEVDVE9SX1NFQ1RJT05dOworICAgVUwxRF9zQVJGQ05fU0VDVElPTiAgcHdyX2R0X2NvbXBfYnlfc3ViYmFuZFtDQUxfVUFSRkNOX1NFQ1RJT05dOworICAga2FsX2ludDE2ICAgICAgICAgICAgcHdyX2R0X2NvbXBfYnlfdGVtcGVyYXR1cmVbOF1bMl07Cit9IFVMMURfc1BXVERUREFUQTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFVMMURfc0RDMkRDICAgICAgICAgICAgIHBhX2RjMmRjOworICAgVUwxRF9zVFhQT1dFUkRBVEEgICAgICAgcG93ZXJfZGFjWzNdOworICAgVUwxRF9zSFlTVEVSRVNJU0RBVEEgICAgdHhfaHZzdGVyZXNpc1syXTsKKyAgIFVMMURfc1BXVERUREFUQSAgICAgICAgIHB3cl9kdF9kYXRhOworfSBVTDFEX3NSQU1QREFUQTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgIGJhbmQ7CisgICBVTDFEX3NSQU1QREFUQSAgICAgICAgICB0eGRhY0RhdGE7CisgICBVTDFEX3NQQU9DVExWTFNFVFRJTkcgICB0eFBBT0NUTGV2ZWxEYXRhOworfSBVUmZUZXN0VFhEYVRhSXRlbTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFdDRE1BIERQRCBjb21tb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0KK3sKKyAgIFVSRl9URVNUX1dDRE1BX0RQRF85MSA9IDAsCisgICBVUkZfVEVTVF9XQ0RNQV9EUERfOTIgPSAxLAorICAgVVJGX1RFU1RfV0NETUFfRFBEXzkzID0gMgorICAgCit9VVJmVGVzdF9XY2RtYV9EcGRfR2VuZXJhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1NUkZfVEVTVF9DTURfU1RBUlRfRFBEX0ZBQ19DQUxfVjMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0KK3sKKyAgIFVSRl9URVNUX1NUQVJUX0RQRF9JTlZBTElEICAgICAgICAgICAgICAgPSAwLAorICAgVVJGX1RFU1RfU1RBUlRfRFBEX09LICAgICAgICAgICAgICAgICAgICA9IDEsCisgICBVUkZfVEVTVF9TVEFSVF9EUERfUEVFUl9TSVpFX01JU01BVENIICAgID0gMiwKKyAgIFVSRl9URVNUX1NUQVJUX0RQRF9FWENFRURfVFRHX0xJTUlUX0lOSVQgPSAzLAorICAgVVJGX1RFU1RfU1RBUlRfRFBEX0VYQ0VFRF9UVEdfTElNSVQgICAgICA9IDQsCisgICBVUkZfVEVTVF9TVEFSVF9EUERfTkVHQVRJVkVfUEFfR0FJTiAgICAgID0gNSwKKyAgIFVSRl9URVNUX1NUQVJUX0RQRF9MQVJHRV9QQV9HQUlOX0RJRkYgICAgPSA2ICAgCisKK31VUmZUZXN0X1N0YXJ0RHBkRmFjQ2FsX1N0YXR1czsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgbnVtX29mX2JhbmQ7CisgICBrYWxfdWludDE2IGNhbF9iYW5kW01BWF9TVVBQT1JURURfQkFORF9JTkRFWF07CisKK31VUmZUZXN0Q21kX1N0YXJ0RHBkX1JlcUluZm87CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggIHN0YXR1czsgLyogVVJmVGVzdF9TdGFydERwZFBhQW5kRHBkRmFjQ2FsX1N0YXR1cyAqLworICAga2FsX3VpbnQxNiBjdXJyX2JhbmRfaWR4OyAgICAKKyAgIGthbF91aW50MzIgY3Vycl9zdWJiYW5kX2lkeDsKKyAgIGthbF91aW50MzIgY3Vycl9nYWluX2lkeDsgICAKKyAgIGthbF9pbnQxNiAgY3Vycl9wYV9nYWluOworICAgCit9VVJmVGVzdENtZF9TdGFydERwZF9DbmZJbmZvOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiBiYW5kX2lkeDsKKyAgIGthbF91aW50MTYgYXB0X3JlZl9jaGFubmVsOworICAga2FsX2ludDE2ICB0cGNfd2FudGVkX3Bfb2Zmc2V0OworICAgCit9VVJmVGVzdF9BcHRSZWZDaGFubmVsX09uZUJhbmQ7CisKKy8qIHN0cnVjdCBmb3IgR1AgdG9vbCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFVSZlRlc3RfQXB0UmVmQ2hhbm5lbF9PbmVCYW5kIHdjZG1hX2FwdF9jaGFubmVsX2luZm9bTUFYX1NVUFBPUlRFRF9CQU5EX0lOREVYXTsKKworfVVSZlRlc3RDbWRfU3RhcnREcGRQYUFuZERwZEZhY0NhbF9SZXFQZHU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNTVJGX1RFU1RfQ01EX1NFVF9EUERfRkFDX1JFU1VMVF9WMyBhbmQgTU1SRl9URVNUX0NNRF9HRVRfRFBEX0ZBQ19SRVNVTFRfVjMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0KK3sKKyAgIFVSRl9URVNUX1NFVF9EUERfSU5WQUxJRCAgICAgICAgICAgID0gMCwKKyAgIFVSRl9URVNUX1NFVF9EUERfT0sgICAgICAgICAgICAgICAgID0gMSwKKyAgIFVSRl9URVNUX1NFVF9EUERfUEVFUl9TSVpFX01JU01BVENIID0gMiwKKyAgIFVSRl9URVNUX1NFVF9EUERfSU5WQUxJRF9CQU5EICAgICAgID0gMworICAgCit9VVJmVGVzdF9TZXREcGRGYWNDYWxfU3RhdHVzOworCit0eXBlZGVmIGVudW0KK3sKKyAgIFVSRl9URVNUX0dFVF9EUERfSU5WQUxJRCAgICAgICAgICAgID0gMCwKKyAgIFVSRl9URVNUX0dFVF9EUERfT0sgICAgICAgICAgICAgICAgID0gMSwKKyAgIFVSRl9URVNUX0dFVF9EUERfSU5WQUxJRF9CQU5EICAgICAgID0gMiAgIAorICAgCit9VVJmVGVzdF9HZXREcGRGYWNDYWxfU3RhdHVzOworCit0eXBlZGVmIHN0cnVjdAoreworICAgLyogVG9vbCBjYW4gc2V0IHNldmVyYWwgYmFuZCBpbiBvbmUgc2V0IGNvbW1hbmQgKi8KKyAgIGthbF91aW50MTYgbnVtX29mX2JhbmQ7CisKK31VUmZUZXN0Q21kX1NldERwZEFsbF9SZXFJbmZvOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiBudW1fb2ZfYmFuZDsKKyAgIGthbF91aW50OCAgc3RhdHVzOyAvKiBVUmZUZXN0X1NldERwZEZhY0NhbF9TdGF0dXMgKi8KKworfVVSZlRlc3RDbWRfU2V0RHBkQWxsX0NuZkluZm87CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2IG51bV9vZl9iYW5kOworCit9VVJmVGVzdENtZF9TZXREcGRQYXJ0aWFsX1JlcUluZm87CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2IG51bV9vZl9iYW5kOworICAga2FsX3VpbnQ4ICBzdGF0dXM7IC8qIFVSZlRlc3RfU2V0RHBkUGFBbmREcGRGYWNDYWxfU3RhdHVzICovCisKK31VUmZUZXN0Q21kX1NldERwZFBhcnRpYWxfQ25mSW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sgICAKKyAgIGthbF91aW50MTYgICAgICAgICAgIGJhbmRfaWR4OworICAga2FsX3VpbnQ4ICAgICAgICAgICAgZHBkX2NhbF9kb25lOworICAga2FsX2ludDE2ICAgICAgICAgICAgZHBkX3RyW0NBTF9VQVJGQ05fU0VDVElPTl07CisKKyAgIC8qIHJhbXAgKi8gICAKKyAgIGthbF9pbnQxNiAgICAgICAgICAgIHZnYV9jb21wX3N1YmJhbmRbVUwxRF9EUERfTUFYX1BBX01PREVfTlVNXVtDQUxfVUFSRkNOX1NFQ1RJT05dOworICAga2FsX2ludDE2ICAgICAgICAgICAgdmdhX2NvbXBfdGVtcGVyYXR1cmVbVUwxRF9EUERfTUFYX1BBX01PREVfTlVNXVtVTDFfRFBEX01BWF9QQV9MRVZFTF9OVU1dOworICAgVUwxRF9zSFlTVEVSRVNJU0RBVEEgdHhfaHlzdGVyZXNpc1tVTDFEX0RQRF9NQVhfUEFfSFlTVF9OVU1dOworCisgICAvKiBwYW9jdCAqLworICAga2FsX3VpbnQ4ICAgICAgICAgICAgb2N0bGV2X251bV9zZWN0aW9uOworICAga2FsX3VpbnQzMiAgICAgICAgICAgcGFfcGhhc2VfY29tcGVuc2F0aW9uW1VMMURfRFBEX01BWF9QQV9NT0RFX05VTV07CisgICBVTDFEX3NQTVVMRVZIQU5ETEUgICBwbXVfbGV2ZWxfaGFuZGxlW1VMMV9EUERfTUFYX1BBX0xFVkVMX05VTV07CisKK31VUmZUZXN0X1NldEdldERwZF9UcGNQZWVyOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICBsdXRbVUwxX0RQRF9NQVhfQU1fTFVUX0dBSU5fTlVNXVtNTURQRF9NQVhfQU1fTFVUX1BXUl9OVU1dOworCit9VVJmVGVzdF9EUERBTUx1dFN1YkJhbmQ7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfaW50OCAgbHV0W1VMMV9EUERfTUFYX1BNX0xVVF9HQUlOX05VTV1bTU1EUERfTUFYX1BNX0xVVF9QV1JfTlVNXTsKKworfVVSZlRlc3RfRFBEUE1MdXRTdWJCYW5kOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2ludDE2ICAgICAgICAgICAgICAgZHBkSW1wbGljaXRBcnJheVtVTDFfRFBEX01BWF9JTVBMSUNJVF9OVU1dOyAvKiBGb3IgdGhlIHBhcmFtZXRlcnMgd2hvc2UgbmFtZSB3aWxsIG5vdCBiZSBzaG93biBpbiBjYWwgZmlsZSAqLwkKKyAgIFVSZlRlc3RfRFBEQU1MdXRTdWJCYW5kIGFtX2x1dF9zdWJiYW5kW0NBTF9VQVJGQ05fU0VDVElPTl07CisgICBVUmZUZXN0X0RQRFBNTHV0U3ViQmFuZCBwbV9sdXRfc3ViYmFuZFtDQUxfVUFSRkNOX1NFQ1RJT05dOworCit9VVJmVGVzdF9TZXRHZXREcGRfRHBkUGVlcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sgICAKKyAgIFVSZlRlc3RfU2V0R2V0RHBkX1RwY1BlZXIgZHBkdHBjX3BlZXI7CisgICBVUmZUZXN0X1NldEdldERwZF9EcGRQZWVyIGRwZF9wZWVyOworCit9VVJmVGVzdENtZF9TZXREcGRGYWNDYWxBbGxfT25lQmFuZCwgVVJmVGVzdENtZF9HZXREcGRGYWNDYWxBbGxfT25lQmFuZDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFVSZlRlc3RfU2V0R2V0RHBkX1RwY1BlZXIgZHBkdHBjX3BlZXI7CisKK31VUmZUZXN0Q21kX1NldERwZEZhY0NhbFBhcnRpYWxfT25lQmFuZDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sgICAgICAgICAgICAgCisgICBrYWxfdWludDE2IG51bV9vZl9iYW5kOworICAga2FsX3VpbnQxNiBiYW5kX2lkeFtNQVhfU1VQUE9SVEVEX0JBTkRfSU5ERVhdOworICAgICAgICAgICAgIAorfVVSZlRlc3RDbWRfR2V0RHBkQWxsX1JlcUluZm87CisKK3R5cGVkZWYgc3RydWN0Cit7ICAgICAgICAgICAgIAorICAga2FsX3VpbnQxNiBudW1fb2ZfYmFuZDsKKyAgIGthbF91aW50OCAgZ2V0X3N0YXR1czsgLyogVVJmVGVzdF9HZXREcGRQYUFuZERwZEZhY0NhbF9TdGF0dXMgKi8KKyAgICAgICAgICAgICAgICAKK31VUmZUZXN0Q21kX0dldERwZEFsbF9DbmZJbmZvOworCisvKiBzdHJ1Y3QgZm9yIEdQIHRvb2wgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBVUmZUZXN0Q21kX0dldERwZEZhY0NhbEFsbF9PbmVCYW5kIGdldF9wZWVyW01BWF9TVVBQT1JURURfQkFORF9JTkRFWF07CisKK31VUmZUZXN0Q21kX0dldERwZEZhY0NhbEFsbF9DbmZQZHU7CisKK3R5cGVkZWYgc3RydWN0Cit7ICAKKyAgIFVSZlRlc3RDbWRfU2V0RHBkRmFjQ2FsQWxsX09uZUJhbmQgc2V0X2FsbF9wZWVyW01BWF9TVVBQT1JURURfQkFORF9JTkRFWF07CisgICAKK31VUmZUZXN0Q21kX1NldERwZEZhY0NhbEFsbF9SZXFQZHU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBVUmZUZXN0Q21kX1NldERwZEZhY0NhbFBhcnRpYWxfT25lQmFuZCBzZXRfcGFydGlhbF9wZWVyW01BWF9TVVBQT1JURURfQkFORF9JTkRFWF07CisKK31VUmZUZXN0Q21kX1NldERwZEZhY0NhbFBhcnRpYWxfUmVxUGR1OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTU1SRl9URVNUX0NNRF9TRVRfRFBEX1BBVEhfREVMQVlfU0VBUkNIX1YzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtCit7CisgICBVUkZfVEVTVF9TRVRfRFBEX0RFTEFZX0lOVkFMSUQgICAgICAgICAgICA9IDAsCisgICBVUkZfVEVTVF9TRVRfRFBEX0RFTEFZX1ZBTElEICAgICAgICAgICAgICA9IDEsCisgICBVUkZfVEVTVF9TRVRfRFBEX0RFTEFZX1BFRVJfU0laRV9NSVNNQVRDSCA9IDIKKyAgIAorfVVSZlRlc3RfU2V0RHBkUGF0aERlbGF5U2VhcmNoVjNfU3RhdHVzOworCit0eXBlZGVmIHN0cnVjdAoreworICAgLyogVG9vbCBjYW4gc2V0IHNldmVyYWwgYmFuZCBpbiBvbmUgc2V0IGNvbW1hbmQgKi8KKyAgIGthbF91aW50MTYgYmFuZF9udW07CisKK31VUmZUZXN0Q21kX1NldERwZFBhdGhEZWxheVNlYXJjaFYzX1JlcUluZm87CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgcmZfYmFuZDsKKyAgIGthbF91aW50MTYgICBzdWJiYW5kX2ZyZXFbQ0FMX1VBUkZDTl9TRUNUSU9OXTsKKyAgIGthbF9pbnQxNiAgICBkcGRfdHJbQ0FMX1VBUkZDTl9TRUNUSU9OXTsKKworfVVSZlRlc3RfU2V0RHBkUGF0aERlbGF5U2VhcmNoVjNfUmVxUGVlcl9PbmVCYW5kOworCisvKiBzdHJ1Y3QgZm9yIEdQIHRvb2wgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBVUmZUZXN0X1NldERwZFBhdGhEZWxheVNlYXJjaFYzX1JlcVBlZXJfT25lQmFuZCBkcGRfb25lX2JhbmRbTUFYX1NVUFBPUlRFRF9CQU5EX0lOREVYXTsKKworfVVSZlRlc3RDbWRfU2V0RHBkUGF0aERlbGF5U2VhcmNoVjNfUmVxUGR1OworCisvKiBDb25maXJtICovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiBiYW5kX251bTsKKyAgIGthbF91aW50MTYgc3RhdHVzOworCit9VVJmVGVzdENtZF9TZXREcGRQYXRoRGVsYXlTZWFyY2hWM19DbmZJbmZvOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTU1SRl9URVNUX0NNRF9TVEFSVF9EUERfUEFUSF9ERUxBWV9TRUFSQ0hfVjMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0KK3sKKyAgIFVSRl9URVNUX1NUQVJUX0RQRF9ERUxBWV9JTlZBTElEICAgICAgID0gMCwKKyAgIFVSRl9URVNUX1NUQVJUX0RQRF9ERUxBWV9WQUxJRCAgICAgICAgID0gMSwKKyAgIFVSRl9URVNUX1NUQVJUX0RQRF9ERUxBWV9USU1FT1VUICAgICAgID0gMiwKKyAgIFVSRl9URVNUX1NUQVJUX0RQRF9ERUxBWV9TRUFSQ0hfRkFJTEVEID0gMworfVVSZlRlc3RfU3RhcnREcGRQYXRoRGVsYXlTZWFyY2hWM19TdGF0dXM7CisKKy8qIFJlcXVlc3QgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2IHRlc3RfdGltZXM7CisgICBrYWxfdWludDE2IHNlYXJjaF9iYW5kW01BWF9TVVBQT1JURURfQkFORF9JTkRFWF07Cit9VVJmVGVzdENtZF9TdGFydERwZFBhdGhEZWxheVNlYXJjaFYzX1JlcUluZm87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNTVJGX1RFU1RfQ01EX0dFVF9EUERfUEFUSF9ERUxBWV9TRUFSQ0hfVjMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCisvKiBSZXF1ZXN0ICovCit0eXBlZGVmIHN0cnVjdAoreyAgICAgICAgICAgICAKKyAgIGthbF91aW50MTYgICAgICAgIGJhbmRfbnVtOworICAga2FsX3VpbnQxNiAgICAgICAgcmZfYmFuZF9pbmZvW01BWF9TVVBQT1JURURfQkFORF9JTkRFWF07CisgICAKK31VUmZUZXN0Q21kX0dldERwZFBhdGhEZWxheVNlYXJjaFYzX1JlcUluZm87CisKKworLyogQ29uZmlybSAqLworCit0eXBlZGVmIGVudW0KK3sKKyAgIFVSRl9URVNUX0dFVF9EUERfREVMQVlfSU5WQUxJRCA9IDAsCisgICBVUkZfVEVTVF9HRVRfRFBEX0RFTEFZX1ZBTElEICAgPSAxICAgCisgICAKK31VUmZUZXN0X0dldERwZFBhdGhEZWxheVNlYXJjaFYzX1N0YXR1czsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgYmFuZF9udW07CisgICBrYWxfdWludDE2IGdldF9zdGF0dXM7IC8qIFVSZlRlc3RfR2V0RHBkUGF0aERlbGF5U2VhcmNoVjNfU3RhdHVzICovCisKK31VUmZUZXN0Q21kX0dldERwZFBhdGhEZWxheVNlYXJjaFYzX0NuZkluZm87CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgcmZfYmFuZDsKKyAgIGthbF9pbnQxNiAgICBkcGRfdHJbQ0FMX1VBUkZDTl9TRUNUSU9OXTsKKworfVVSZlRlc3RfR2V0RHBkUGF0aERlbGF5U2VhcmNoVjNfQ25mUGVlcl9PbmVCYW5kOworCisvKiBzdHJ1Y3QgZm9yIEdQIHRvb2wgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBVUmZUZXN0X0dldERwZFBhdGhEZWxheVNlYXJjaFYzX0NuZlBlZXJfT25lQmFuZCBkcGRfZGVsYXlfb25lX2JhbmRbTUFYX1NVUFBPUlRFRF9CQU5EX0lOREVYXTsKKworfVVSZlRlc3RDbWRfR2V0RHBkUGF0aERlbGF5U2VhcmNoVjNfQ25mUGR1OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTU1SRl9URVNUX0NNRF9TRVRfRFBEX0ZBQ19SRVNVTFRfVjMgYW5kIE1NUkZfVEVTVF9DTURfR0VUX0RQRF9GQUNfUkVTVUxUX1YzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUmV1cWVzdCAqLwordHlwZWRlZiBlbnVtCit7CisgICBVUkZfVEVTVF9UUkFEX0NBTF9FWEVfSU5WQUxJRCA9IDAsCisgICBVUkZfVEVTVF9UUkFEX0NBTF9FWEVfU1RBUlQgICA9IDEsCisgICBVUkZfVEVTVF9UUkFEX0NBTF9FWEVfRU5EICAgICA9IDIKKyAgIAorfVVSZlRlc3RfVHJhZENhbF9FeGVfU3RhdHVzOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQzMiBleGVfc3RhdHVzOyAvKiBVUmZUZXN0X1RyYWRDYWxfRXhlX1N0YXR1cyAqLworICAgCit9VVJmVGVzdENtZF9UcmFkQ2FsX1JlcUluZm87CisKKy8qIENvbmZpcm0gKi8KK3R5cGVkZWYgZW51bQoreworICAgVVJGX1RFU1RfVFJBRF9DQUxfQ01EX0lOVkFMSUQgPSAwLAorICAgVVJGX1RFU1RfVFJBRF9DQUxfQ01EX09LICAgICAgPSAxCisgICAKK31VUmZUZXN0X1RyYWRDYWxfQ21kX1N0YXR1czsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MzIgY21kX3N0YXR1czsgLyogVVJmVGVzdF9UcmFkQ2FsX0NtZF9TdGF0dXMgKi8KKyAgIAorfVVSZlRlc3RDbWRfVHJhZENhbF9DbmZJbmZvOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLypUWCBjYWxpYnJhdGlvbiBkYXRhPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBlZGVmICBlbnVtCit7CisgICBTRVRVUF9GQUlMX0dFTkVSQUwgPSAwLAorICAgU0VUVVBfRkFJTF9UQ01fTUlTTUFUQ0ggPSAxLAorICAgU0VUVVBfRkFJTF9URERfVElNRVJfU1RJTExfUlVOTklORyA9IDIsCit9ICBVQklOX01PREVfU0VUVVBfRkFJTF9NU0c7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgb2s7CisgICAga2FsX2ludDggICAgICAgICAgICAgICAgc2V0dXBfcmVzdWx0OworfSBVUmZUZXN0UmVzdWx0VWJpbk1vZGVTZXR1cDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgTmV3IEZIQyBDb21tYW5kIHdoZW4gaW50cm9kdWNlIGVMTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICBVUkZfVEVTVF9DTURfRkhDX0VMTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgbm9fbG9vcF9jdHJsOworICAga2FsX3VpbnQxNiAgYWZjX2RhYzsKKyAgIGthbF9ib29sICAgIHB3cl9kZXQ7CisgICBrYWxfdWludDggICBwb3dlcl9jdHJsX21vZGU7CisgICBrYWxfdWludDggICB2bTFbMTBdWzNdOworICAga2FsX3VpbnQ4ICAgdm0yWzEwXVszXTsKKyAgIGthbF91aW50MTYgIGRjMmRjX2RhY1sxMF1bM107CisgICBrYWxfdWludDE2ICB2Ymlhc19kYWNbMTBdWzNdOworICAga2FsX3VpbnQ4ICAgdGVtcGVyYXR1cmU7CisgICBrYWxfYm9vbCAgICBod0FHQzsKKyAgIGthbF91aW50OCAgIHN0ZXBfZHVyYXRpb247CisgICBrYWxfdWludDggICBmcmVxX2NvdW50OworICAga2FsX3VpbnQ4ICAgcHdyX2NvdW50OworICAga2FsX3VpbnQ4ICAgZnJlcV9zdGFydF9pZHg7CisgICBrYWxfdWludDggICBwd3Jfc3RhcnRfaWR4OworICAga2FsX3VpbnQ4ICAgcGFfZ2Fpbl9zdGFydF9pZHg7CisgICBrYWxfdWludDggICBwZF9nYWluX3N0YXJ0X2lkeDsKKyAgIGthbF91aW50OCAgIGxuYV9nYWluX3N0YXJ0X2lkeDsKKyAgIGthbF91aW50OCAgIGRsX2JhbmRbNDBdOworICAga2FsX3VpbnQ4ICAgdWxfYmFuZFs0MF07CisgICBrYWxfdWludDE2ICBkbF9mcmVxWzQwXTsKKyAgIGthbF91aW50MTYgIHVsX2ZyZXFbNDBdOworICAga2FsX3VpbnQ4ICAgcGRfZ2Fpbls0MF07CisgICBrYWxfdWludDggICBwYV9tb2RlWzQwXTsKKyAgIGthbF91aW50MTYgIHZnYV9kYWNfdHBjX2lkeFs0MF07CisgICBrYWxfdWludDE2ICBwYV9nYWluWzQwXTsKKyAgIGthbF91aW50OCAgIHBhX3NlY3Rpb25bNDBdOworICAga2FsX3VpbnQxNiAgcnhfbG5hX2dhaW5bNDBdOworICAga2FsX3VpbnQxNiAgcnhkX2xuYV9nYWluWzQwXTsKKyAgIGthbF91aW50OCAgIGZpeF9wZ2FfZ2Fpbls0MF07CisgICBrYWxfdWludDggICBpc19scG1bNDBdOworfVVSZlRlc3RDbWRGSENlTE5BUEI7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgb2s7Cit9IFVSZlRlc3RSZXN1bHRGSENlTE5BTFA7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgIE5ldyBSU1NJIENvbW1hbmQgd2hlbiBpbnRyb2R1Y2UgZUxOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICBVUkZfVEVTVF9DTURfR0VUX1JTU0lfRUxOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICBudW1fZnJlcTsKKyAgIGthbF91aW50MTYgIGRsX2ZyZXFbMzZdOworICAga2FsX3VpbnQ4ICAgdGVtcGVyYXR1cmU7CisgICBrYWxfYm9vbCAgICBod0FHQzsKKyAgIGthbF91aW50OCAgIG1vZGU7CisgICBrYWxfaW50MTYgICByeF9nYWluOworICAga2FsX3VpbnQ4ICAgcnhfTE5BbW9kZTsKKyAgIGthbF91aW50MTYgIHJ4X3BnYTsKKyAgIGthbF9pbnQxNiAgIHJ4ZF9nYWluOworICAga2FsX3VpbnQ4ICAgcnhkX0xOQW1vZGU7CisgICBrYWxfdWludDE2ICByeGRfcGdhOworICAga2FsX3VpbnQ4ICAgYW50ZW5uYV9wYXRoOworICAga2FsX2Jvb2wgICAgaXNfY2FsOworICAga2FsX3VpbnQ4ICAgbHBtX21vZGU7Cit9VVJmVGVzdENtZFJTU0llTE5BUEI7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgb2s7Cit9IFVSZlRlc3RSZXN1bHRSU1NJZUxOQUxQOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgbnVtX2ZyZXE7CisgICBrYWxfdWludDE2ICBkbF9mcmVxWzM2XTsKKyAgIGthbF9pbnQzMiAgIHJ4X3Jzc2lbMzZdOworICAga2FsX2ludDMyICAgcnhkX3Jzc2lbMzZdOworICAga2FsX3VpbnQ4ICAgcnhfTE5BbW9kZVszNl07CisgICBrYWxfdWludDggICByeGRfTE5BbW9kZVszNl07Cit9VVJmVGVzdFJlc3VsdFJTU0llTE5BUEI7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICBUWCBTVVBQT1JUIENvbW1hbmQgRklYIFJGIFBHQSBHQUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICBVUkZfVEVTVF9DTURfVFhfRFBDSF9GSVhfUEdBX0dBSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtCit7CisgICBVTDFUU1RfTk9fUEdBX0FCSUxJVFkgPSAwLCAKKyAgIFVMMVRTVF9GSVhfUEdBX0dBSU5fMTJCID0gMSwgCisgICBVTDFUU1RfRklYX1BHQV9HQUlOXzEyQSA9IDIsIAorICAgVUwxVFNUX1BHQV9BTEdPX0VOQUJMRSA9IDMsCisgICBVTDFUU1RfUEdBX0ZFQVRVUkVfREVGQVVMVF9TVEFURSA9IFVMMVRTVF9QR0FfQUxHT19FTkFCTEUKK31VTDFUU1RfRklYX1BHQV9HQUlOX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBVTDFUU1RfRklYX1BHQV9HQUlOX1QgICB1bDF0c3RfZml4X3BnYV9nYWluOworLyogICAgCisgICAgICAgICAwIDogbm8gbmVlZCBmaXgKKyAgICAgICAgIDEgOiBmaXggUEdBIDEyQQorICAgICAgICAgMiA6IGZpeCBQR0EgMTJCCisgKi8KK31VUmZUZXN0Q21kRFBDSFRYRklYUEdBUEI7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgb2s7Cit9VVJmVGVzdFJlc3VsdERQQ0hUWEZJWFBHQUxQOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS02MjkzIEdldCBGSEMgSW5mb3JtYXRpb24gZnJvbSBUU1QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBVTDFUU1RfSFBNX1BPSU5UX1YzIDcKKyNkZWZpbmUgVUwxVFNUX0xQTV9QT0lOVF9WMyA0CisjZGVmaW5lIFVMMVRTVF9XQ0RNQV9CQU5EX1NVUFBPUlQgNQorCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4IGNhbGlicmF0aW9uX2JhbmRfbnVtYmVyOworICAga2FsX3VpbnQ4IGNhbGlicmF0aW9uX2JhbmRbVUwxVFNUX1dDRE1BX0JBTkRfU1VQUE9SVF07ICAgICAgICAgLy8gYmFuZCAxIDogYmFuZCBpbmRleCA9IDAKK30gVVRTVFJlcUdldENhbEluZm9WM2xwOyAgLy8gcmVxdWVzdCBsb2NhbCBwYXJhbWV0ZXIKKwordHlwZWRlZiBlbnVtCit7CisgICBVVFNUX0VMTkFfT0ZGPTAsCisgICBVVFNUX0VMTkFfQUxXQVlTX09OLAorICAgVVRTVF9FTE5BX0FMV0FZU19PTl8yTkRfU0FXLAorICAgVVRTVF9FTE5BX0JZUEFTUywKKyAgIFVUU1RfRUxOQV9CWVBBU1NfMk5EX1NBVworfVVUU1RfRUxOQV9FOworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICBiYW5kOworICAga2FsX3VpbnQ4ICAgcnhfZWxuYV9tb2RlOworICAga2FsX3VpbnQ4ICAgcnhkX2VsbmFfbW9kZTsKKyAgIGthbF91aW50OCAgIGNhbF9wb2ludF9ocG07CisgICBrYWxfdWludDggICBjYWxfcG9pbnRfbHBtOworICAga2FsX3VpbnQ4ICAgcnhfY2FsX3NlcXVlbmN5W1VMMVRTVF9IUE1fUE9JTlRfVjMrVUwxVFNUX0xQTV9QT0lOVF9WM107CisgICBrYWxfdWludDggICByeF9lbG5hX2J5cGFzc1tVTDFUU1RfSFBNX1BPSU5UX1YzK1VMMVRTVF9MUE1fUE9JTlRfVjNdOworICAga2FsX3VpbnQ4ICAgcnhkX2VsbmFfYnlwYXNzW1VMMVRTVF9IUE1fUE9JTlRfVjMrVUwxVFNUX0xQTV9QT0lOVF9WM107CisgICBrYWxfaW50MTYgICByeF9jYWxfZGxfcG93ZXJfbWluW1VMMVRTVF9IUE1fUE9JTlRfVjMrVUwxVFNUX0xQTV9QT0lOVF9WM107ICAvL3MuNQorICAga2FsX2ludDE2ICAgcnhfY2FsX2RsX3Bvd2VyX21heFtVTDFUU1RfSFBNX1BPSU5UX1YzK1VMMVRTVF9MUE1fUE9JTlRfVjNdOyAgLy9zLjUKKyAgIGthbF9pbnQxNiAgIHJ4X2NhbF9kbF9wb3dlcltVTDFUU1RfSFBNX1BPSU5UX1YzK1VMMVRTVF9MUE1fUE9JTlRfVjNdOyAgICAgIC8vcy41Cit9VVRTVENuZkdldENhbEluZm9WM3BiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iYW5kIHVuaXQgOiBkeW5hbWljIHNpemUKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggc3VwcG9ydF9iYW5kX251bWJlcjsKK31VVFNUQ25mR2V0Q2FsSW5mb1YzbHA7IC8vIGNvbmZvcm0gbG9jYWwgcGFyYW1ldGVyCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNjI5MyBTVEFSVCBGSEMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBVTDFUU1RfRkhDX0ZSRVFVRU5DWV9OVU1CRVIgIDE1CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICBvazsKKyAgIGthbF91aW50OCAgIGVycm9yX2NvZGU7Cit9VVRTVENuZkZIQ2VMTkFWM2xwOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgY2FsX2JhbmRfbnVtYmVyOworICAga2FsX3VpbnQ4ICAgY2FsX2JhbmRbVUwxVFNUX1dDRE1BX0JBTkRfU1VQUE9SVF07CisgICBrYWxfdWludDggICBhbnRlbm5hX3NldHRpbmc7CisgICBrYWxfdWludDggICBzdGVwX2R1cmF0aW9uOworfVVUU1RSZXFGSENlTE5BVjNscDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKy8qY29tbW9uKi8KKyAgIGthbF91aW50OCAgIGJhbmQ7CisgICBrYWxfdWludDggICBmcmVxX2NvdW50OworICAga2FsX3VpbnQ4ICAgcHdyX2NvdW50OworICAga2FsX3VpbnQ4ICAgaHBtX2NhbF9wb2ludDsKKyAgIGthbF91aW50OCAgIGxwbV9jYWxfcG9pbnQ7CisvKlJYKi8KKyAgIGthbF91aW50OCAgIHJ4X2VsbmFfbW9kZTsKKyAgIGthbF91aW50OCAgIHJ4ZF9lbG5hX21vZGU7CisgICBrYWxfdWludDggICBpc19scG1bVUwxVFNUX0hQTV9QT0lOVF9WMytVTDFUU1RfTFBNX1BPSU5UX1YzKzJdOworICAga2FsX3VpbnQ4ICAgcnhfZWxuYV9ieXBhc3NbVUwxVFNUX0hQTV9QT0lOVF9WMytVTDFUU1RfTFBNX1BPSU5UX1YzKzJdOworICAga2FsX3VpbnQ4ICAgcnhkX2VsbmFfYnlwYXNzW1VMMVRTVF9IUE1fUE9JTlRfVjMrVUwxVFNUX0xQTV9QT0lOVF9WMysyXTsKKyAgIGthbF91aW50OCAgIHJ4X2NhbF9zZXF1ZW5jeVtVTDFUU1RfSFBNX1BPSU5UX1YzK1VMMVRTVF9MUE1fUE9JTlRfVjMrMl07CisvKlRYKi8KKyAgIGthbF91aW50OCAgIGZpeF9wZ2FfZ2FpbltVTDFUU1RfSFBNX1BPSU5UX1YzK1VMMVRTVF9MUE1fUE9JTlRfVjMrMl07CisgICBrYWxfdWludDggICBwYV9tb2RlW1VMMVRTVF9IUE1fUE9JTlRfVjMrVUwxVFNUX0xQTV9QT0lOVF9WMysyXTsKKyAgIGthbF91aW50OCAgIHZnYV9kYWNfdHBjX2lkeFtVTDFUU1RfSFBNX1BPSU5UX1YzK1VMMVRTVF9MUE1fUE9JTlRfVjMrMl07CisgICBrYWxfdWludDggICBwYV9zZWN0aW9uW1VMMVRTVF9IUE1fUE9JTlRfVjMrVUwxVFNUX0xQTV9QT0lOVF9WMysyXTsKKyAgIGthbF91aW50MTYgIHBhX2dhaW5bVUwxVFNUX0hQTV9QT0lOVF9WMytVTDFUU1RfTFBNX1BPSU5UX1YzKzJdOworLypSWCovCisgICBrYWxfaW50MTYgIHJ4X2NhbF9kbF9wb3dlcltVTDFUU1RfSFBNX1BPSU5UX1YzK1VMMVRTVF9MUE1fUE9JTlRfVjMrMl07CisvKlVBUkZDTiovCisgICBrYWxfdWludDE2ICBkbF91YXJmY25bVUwxVFNUX0ZIQ19GUkVRVUVOQ1lfTlVNQkVSXTsKKyAgIGthbF91aW50MTYgIHVsX3VhcmZjbltVTDFUU1RfRkhDX0ZSRVFVRU5DWV9OVU1CRVJdOworLypJbml0aWFsIGZpbGUgZGF0YSovCisgICBVUmZUZXN0VFhEYVRhSXRlbSAgICB0eF9jYWxfZGF0YV9pbmZvOworICAgVVRTVFBhdGhsb3NzVjMgICAgICAgcnhfY2FsX2RhdGFfaW5mbzsKKyAgIFVUU1RQYXRobG9zc1YzICAgICAgIHJ4ZF9jYWxfZGF0YV9pbmZvOworfVVUU1RSZXFGSENlTE5BVjNwYjsgICAgLy9iYW5kIHVuaXQgIGl0IGRlcGVuZHMgb24gbG9jYWwgcGFyYW1ldGVyIGNhbCBiYW5kIG51bWJlciBleHBlbmQgdG8gYXJyYXkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS02MjkzIEdFVCBGSEMgUkVTVUxULS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgICAgdWxfdWFyZmNuOworICAga2FsX2ludDE2ICAgICAgcGRfdmFsdWVfaDsKKyAgIGthbF9pbnQxNiAgICAgIHBkX3ZhbHVlX207CisgICBrYWxfaW50MTYgICAgICBwZF92YWx1ZV9sOworfSBVTDFUU1RfRkhDX1BEX1JFU1VMVF9JTkZPIDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgIGRsX3VhcmZjbjsKKyAgIGthbF9pbnQxNiAgIGhwbV9yc3NpW1VMMVRTVF9IUE1fUE9JTlRfVjNdOworICAga2FsX2ludDE2ICAgbHBtX3Jzc2lbVUwxVFNUX0xQTV9QT0lOVF9WM107Cit9IFVMMVRTVF9GSENfUEFUSExPU1NfUkVTVUxUX0lORk8gOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgYmFuZDsKKyAgIFVMMVRTVF9GSENfUERfUkVTVUxUX0lORk8gICAgICAgIHBkX3Jlc3VsdFtVTDFUU1RfRkhDX0ZSRVFVRU5DWV9OVU1CRVJdOworICAgVUwxVFNUX0ZIQ19QQVRITE9TU19SRVNVTFRfSU5GTyAgcnhfcnNzaV9yZXN1bHRbVUwxVFNUX0ZIQ19GUkVRVUVOQ1lfTlVNQkVSXTsKKyAgIFVMMVRTVF9GSENfUEFUSExPU1NfUkVTVUxUX0lORk8gIHJ4ZF9yc3NpX3Jlc3VsdFtVTDFUU1RfRkhDX0ZSRVFVRU5DWV9OVU1CRVJdOworfSBVVFNUQ25mR2V0RkhDUmVzdWx0VjNwYiA7ICAgICAvL2JhbmQgdW5pdAorCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgb2s7CisgICBrYWxfdWludDggICBiYW5kX251bWJlcjsgICAgICAvLyBpbmRpY2F0ZSBob3cgbWFueSBiYW5kJ3MgcmVwb3J0IGluIHBlZXIgYnVmZmVyCit9IFVUU1RDbmZHZXRGSENSZXN1bHRWM2xwOworLypmb3IgOTMtOTUgY28tZmlsZSAsICJHZW4iOnN0YW5kIGZvciBhbnkgZ2VuZXJhdGlvbiovCit0eXBlZGVmIFVUU1RDbmZHZXRGSENSZXN1bHRWM3BiIFVUU1RDbmZHZXRGSENSZXN1bHRHZW5wYjsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS02MjkzIEdFVCBSU1NJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgIGh3QUdDOworICAga2FsX2Jvb2wgICAgcnhfZWxuYV9ieXBhc3M7CisgICBrYWxfYm9vbCAgICByeGRfZWxuYV9ieXBhc3M7CisgICBrYWxfYm9vbCAgICBjb250aV9yc3NpOworICAga2FsX3VpbnQ4ICAgcnhfZWxuYV9tb2RlOworICAga2FsX3VpbnQ4ICAgcnhkX2VsbmFfbW9kZTsKKyAgIGthbF91aW50OCAgIHRlbXBlcmF0dXJlOworICAga2FsX3VpbnQ4ICAgYW50ZW5uYV9wYXRoOworICAga2FsX3VpbnQ4ICAgbHBtX21vZGU7CisgICBrYWxfdWludDE2ICB1YXJmY247CisgICBrYWxfdWludDE2ICByeF9yZl9nYWluOworICAga2FsX3VpbnQxNiAgcnhkX3JmX2dhaW47CisgICBrYWxfdWludDE2ICByeF9kaWdpdGFsX2dhaW47CisgICBrYWxfdWludDE2ICByeGRfZGlnaXRhbF9nYWluOworfSBVVFNUUmVxR2V0UlNTSVYzbHA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICBvazsKKyAgIGthbF91aW50OCAgIHJ4X2VsbmFfYnlwYXNzOworICAga2FsX3VpbnQ4ICAgcnhkX2VsbmFfYnlwYXNzOworICAga2FsX3VpbnQ4ICAgcnhfbG5hX21vZGU7CisgICBrYWxfdWludDggICByeGRfbG5hX21vZGU7CisgICBrYWxfdWludDE2ICB1YXJmY247CisgICBrYWxfaW50MTYgICByeF9yc3NpOworICAga2FsX2ludDE2ICAgcnhkX3Jzc2k7CisgICBrYWxfdWludDE2ICByeF91c2VkX2dhaW47CisgICBrYWxfdWludDE2ICByeGRfdXNlZF9nYWluOworfSBVVFNUQ25mR2V0UlNTSVYzbHA7CisvKmZvciA5My05NSBjby1maWxlICwgIkdlbiI6c3RhbmQgZm9yIGFueSBnZW5lcmF0aW9uKi8KK3R5cGVkZWYgVVRTVENuZkdldFJTU0lWM2xwIFVUU1RDbmZHZXRSU1NJR2VubHA7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNjI5MyBwb3dlciB0byBnYWluLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgIHJ4X2VsbmFfYnlwYXNzOworICAga2FsX2Jvb2wgICAgcnhkX2VsbmFfYnlwYXNzOworICAga2FsX3VpbnQ4ICAgYW50ZW5uYV9wYXRoOworICAga2FsX3VpbnQ4ICAgbHBtX21vZGU7CisgICBrYWxfdWludDggICByeF9lbG5hX21vZGU7CisgICBrYWxfdWludDggICByeGRfZWxuYV9tb2RlOworICAga2FsX3VpbnQ4ICAgcnhfY2FsX3NlcXVlbmN5OworICAga2FsX2ludDE2ICAgcnhfZGxfcG93ZXI7Cit9IFVUU1RSZXFQd3J0b0dhaW5WM2xwOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgb2s7CisgICBrYWxfdWludDE2ICByeF9kaWdpdGFsX2dhaW47CisgICBrYWxfdWludDE2ICByeGRfZGlnaXRhbF9nYWluOworICAga2FsX3VpbnQxNiAgcnhfcmZfZ2FpbjsKKyAgIGthbF91aW50MTYgIHJ4ZF9yZl9nYWluOworfVVUU1RDbmZQd3J0b0dhaW5WM2xwOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNjI5MyBsbmEgdG8gZ2Fpbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICByeF9lbG5hX2J5cGFzczsKKyAgIGthbF9ib29sICAgIHJ4ZF9lbG5hX2J5cGFzczsKKyAgIGthbF91aW50OCAgIGJhbmQ7CisgICBrYWxfdWludDggICBhbnRlbm5hX3BhdGg7CisgICBrYWxfdWludDggICBscG1fbW9kZTsKKyAgIGthbF91aW50OCAgIHJ4X2xuYV9tb2RlOworICAga2FsX3VpbnQ4ICAgcnhkX2xuYV9tb2RlOworICAga2FsX3VpbnQ4ICAgcnhfZWxuYV9tb2RlOworICAga2FsX3VpbnQ4ICAgcnhkX2VsbmFfbW9kZTsKK30gVVRTVFJlcUxuYXRvR2FpblYzbHA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICBvazsKKyAgIGthbF91aW50MTYgIHJ4X2RpZ2l0YWxfZ2FpbjsKKyAgIGthbF91aW50MTYgIHJ4ZF9kaWdpdGFsX2dhaW47CisgICBrYWxfdWludDE2ICByeF9yZl9nYWluOworICAga2FsX3VpbnQxNiAgcnhkX3JmX2dhaW47CisgICBrYWxfaW50MTYgICBkbF9wb3dlcjsKK31VVFNUQ25mTG5hdG9HYWluVjNscDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS02MjkzIFBHQSBBQiBDQUwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdAoreworICAgVUwxVFNUX0ZJWF9QR0FfR0FJTl9UICAgdWwxdHN0X2ZpeF9wZ2FfZ2FpbjsKKyAgIGthbF9ib29sICAgICAgICAgICAgICAgIGlzX2NhbGlicmF0aW9uOworfVVUU1RDbWRMUENhbDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgIG9rOworfVVUU1RSZXN1bHRMUENhbDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS02MjkzIEFURSB0b29sIFQtcHV0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLy90cmlnZ2VyIElRIGR1bXAKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgZW5hYmxlX2lxX2R1bXA7ICAgICAgICAgICAgICAvL2VuYWJsZSBvciBkaXNhYmxlIElRIGR1bXAgbW9kZS4KKyAgIGthbF91aW50MTYgICBhbnRfaWR4OyAgICAgICAgICAgICAgICAgLy8wPVJYIG1haW4gYW50ZW5uYSwgMT1SWCBkaXZlcnNpdHkgYW50ZW5uYS4KK31VVFNUUmVxVHJpZ2dlcklxRHVtcE1vZGVWM2xwOyAgLy8gcmVxdWVzdCBsb2NhbCBwYXJhbWV0ZXIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICBkdW1wX3N0YXR1czsgICAgICAgICAgICAgLy8xPWVuYWJsZSBJUSBkdW1wIG1vZGUgc3VjY2Vzc2Z1bGx5Cit9VVRTVENuZlRyaWdnZXJJcUR1bXBNb2RlVjNscDsgLy8gY29uZm9ybSBsb2NhbCBwYXJhbWV0ZXIKKworLy9nZXQgSVEgZHVtcCByZXN1bHQKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgaXNfZGF0YV9yZWFkeTsgICAgICAgICAgIC8vMT1JUSByYXcgZGF0YSBpcyByZWFkeQorICAga2FsX3VpbnQxNiAgIGRhdGFfc2VjdGlvbl9sZW5ndGg7ICAgICAvL2xlbmd0aCBvZiBJUSByYXcgZGF0YSBpbiBjb3JyZXNwb25kaW5nIHBlZXIgYnVmZmVyCit9VVRTVENuZkdldElxRHVtcFJlc3VsdFYzbHA7IC8vIGNvbmZpcm0gbG9jYWwgcGFyYW1ldGVyCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfaW50MTYgICBpX2RhdGE7CisgICBrYWxfaW50MTYgICBxX2RhdGE7Cit9VVRTVENuZkdldElxRHVtcFJlc3VsdFYzcGI7Ly8gY29uZmlybSBwZWVyIGJ1ZmZlciA6UkZFUSB1bml0IAorLy9zZXQgUkZFUQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICByZmVxX3NldF9udW07IC8vbnVtYmVyIG9mIHN1YmJhbmQgUkZFUSB0byB1cGRhdGUKK31VVFNUUmVxU2V0UmZlcVN1YmJhbmRWM2xwOyAgIC8vIHJlcXVlc3QgbG9jYWwgcGFyYW1ldGVyCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgIGJhbmQ7ICAgICAgICAgICAgICAgICAgIC8vVU1UUyBiYW5kCisgICBrYWxfdWludDE2ICAgIHN1YmJhbmRfaWR4OyAgICAgICAgICAgIC8vd2hpY2ggc3ViLWJhbmQgdGhhdCB1c2VyIHdhbnQgdG8gZmlsbAorICAga2FsX3VpbnQxNiAgICBtYXhfdWFyZmNuOyAgICAgICAgICAgICAvL21heCB1YXJmY24gb2YgdGhpcyBzdWJiYW5kCisgICBrYWxfdWludDggICAgIGFudF9pZHg7ICAgICAgICAgICAgICAgIC8vd2hpY2ggYW50ZW5uYSBzaG91bGQgYmUgd3JpdGUgaW4gdGhpcyBjb21tYW5kLiAwOiBSWCBNYWluLCAxOlJYIERpdgorICAga2FsX2Jvb2wgICAgICByZmVxX2VuYWJsZTsgICAgICAgICAgICAvL1JGRVEgZW5hYmxlIG9yIG5vdC4gCisgICBrYWxfaW50MTYgICAgIHJmZXFfY29lZl9yZWFsWzddOyAgICAgIC8vUkZFUSByZWFsIHBhcnQgY29lZmZpY2llbnQuIDcgdGFwcy4KKyAgIGthbF9pbnQxNiAgICAgcmZlcV9jb2VmX2ltYWdbN107ICAgICAgLy9SRkVRIGltYWdlIHBhcnQgY29lZmZpY2llbnQuIDcgdGFwcy4gCQorfVVUU1RSZXFTZXRSZmVxU3ViYmFuZFYzcGI7ICAvLyByZXF1ZXN0IHBlZXIgYnVmZmVyIDogc3ViYmFuZCB1bml0CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgaXNfcmZlcV9zZXQ7ICAgICAgICAgICAgIC8vMT1SRkVRIGlzIHNldCB0byBOVlJBTSBzdWNjZXNzZnVsbHkKK31VVFNUQ25mU2V0UmZlcVN1YmJhbmRWM2xwOyAvLyBjb25maXJtIGxvY2FsIHBhcmFtZXRlcgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBVUmZUZXN0Q21kVHlwZSAgIHVyZl90ZXN0X2NtZF90eXBlOworICAgdm9pZCAgICAgICAgICAgKCpoYW5kbGVyKSggaWxtX3N0cnVjdCogKTsKK31VTDFUU1RfUkZfVEVTVF9IQU5ETEVSX1Q7CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICpcCit8KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVfUkVTRVRfQklUX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqfAorXCogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQzMiAgbWVhbmluZ2xlc3M7Cit9IFVSRlRlc3RDbWRSZXNldEJFUlJlc3VsdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sIG9rOworICAga2FsX3VpbnQzMiAgdTRUb3RhbEJpdHM7CisgICBrYWxfdWludDMyICB1NEVycm9yQml0czsKK30gVVJGVGVzdFJlc3VsdFJlc2V0QkVSUmVzdWx0OworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiB1bmlvbgoreworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91MVJmQmFuZDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdTFQd3JDdHJsTW9kZTsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdTFUYWJsZVR5cGU7ICAgICAgICAgICAgICAgIC8vIDE6IHNwZWNpYWwgdGFibGUgZm9yIGNhbGlicmF0aW9uLCAyOiBub3JtYWwgdGFibGUKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdTFJTFBDU3RlcDsKKyAgIGthbF91aW50MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdTJUeFBjbEluZGV4OworICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmZfYmFuZF9pZHg7CisvKiBQQSBkcmlmdCBjb21wZW5zYXRpb24gKi8KKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX1BhRHJpZnQ7ICAgICAgICAgICAgICAgICAgIC8qUjg8IFxicmllZiB0aGUgcGFyYW1ldGVyIHRvIFVMMSBmb3IgUEEgZHJpZnQgY29tcGVuc2F0aW9uIHNldHRpbmcgKDE6IHR1cm4gb24sIDA6IHR1cm4gb2ZmKSAqLworLyogUjggUkYgdG9vbCAqLworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfNW1oejsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX21haW47CisgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3JCU0lEYXRhOworICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yQlNJQWRkcjsKKy8qIERDWE8gZGV2ZWxvcG1lbnQgKi8KKyAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdTRDYXBJZDsKKy8qIFdNIFN3aXRjaCAqLworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWJpbl9mZGRfbW9kZV9pbml0OyAgICAgICAgICAgLy8gIDEgOiBVQklOIG1vZGUgSW5pdCAzRyBGREQgLCAgICAgIDAgOiBVQklOIG1vZGUgZGUtaW5pdCAzRyBGREQKKyAgIFVSZlRlc3RDbWRBRkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmYzsKKyAgIFVSZlRlc3RDbWRSU0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzY3A7CisgICBVUmZUZXN0Q21kVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeV9vcF9jb2RlOworICAgVVJmVGVzdENtZFR4RFBDaCAgICAgICAgICAgICAgICAgICAgICAgICAgdHhkcGNoOworICAgVVJmVGVzdENtZFJ4RFBDaCAgICAgICAgICAgICAgICAgICAgICAgICAgcnhkcGNoOworICAgVVJmVGVzdENtZFR4QWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgdHhhY2Nlc3M7CisgICBVUkZUZXN0Q21kUmVsb2FkTlZSQU0gICAgICAgICAgICAgICAgICAgICByZWxvYWQ7CisgICBVUmZUZXN0Q21kU2V0TUlQSUNvZGVXb3JkICAgICAgICAgICAgICAgICBzZXRfbWlwaV9jd19wYXJhbTsKKyAgIFVSZlRlc3RDbWRHZXRSZlRlbXBTZW5zb3IgICAgICAgICAgICAgICAgIHJmVGVtcGVyYXR1cmU7CisgICBVTDFEX1JGX1RYX1BBX0FQQ19SRVFfVCAgICAgICAgICAgICAgICAgICBtX3JUeFBhQXBjOworICAgVUwxRF9SRl9HRVRfUFdSX1RIUl9SRVFfVCAgICAgICAgICAgICAgICAgbV9yR2V0UHdyVGhyOworICAga2FsX2ludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pNEljc0NlbGxQb3dlcjsgICAgICAgICAgICAgLyoqPCBcYnJpZWYgcGFzcyBjZWxsIHBvd2VyIHRvIFVMMSB0byBjaG9vc2UgdGhlIGJlc3QgaW5pdGlhbCBnYWluIGZvciBJQ1MgKi8KKyAgIFVSRlRlc3RDbWRSZXNldEJFUlJlc3VsdCAgICAgICAgICAgICAgICAgIHJlc2V0QkVSUmVzdWx0OworICAgVVJmVGVzdENtZFNldENhbERhdGEgICAgICAgICAgICAgICAgICAgICAgc2V0X2NhbF9kYXRhX2NvbW1hbmRfbHA7ICAgICAgLy9hZnRlciA2MjkyCisgICBVUmZUZXN0Q21kR2V0Q2FsRGF0YSAgICAgICAgICAgICAgICAgICAgICBnZXRfY2FsX2RhdGFfY29tbWFuZF9scDsgICAgICAvL2FmdGVyIDYyOTIKKyAgIFVUU1RSZXFHZXRDYWxJbmZvVjNscCAgICAgICAgICAgICAgICAgICAgIGdldF9jYWxfaW5mb192M19scDsgICAgICAgICAgIC8vNjI5MyBnZXQgRkhDIGluZm9tYXRpb24gZnJvbSBSRkQgJiBGRUMKKyAgIFVUU1RSZXFGSENlTE5BVjNscCAgICAgICAgICAgICAgICAgICAgICAgIGZoY19jb250cm9sX3YzX2xwOyAgICAgICAgICAgIC8vNjI5MyBGSEMgZmxvdyBjb250cm9sIGluZm9tYXRpb24KKyAgIFVUU1RSZXFHZXRSU1NJVjNscCAgICAgICAgICAgICAgICAgICAgICAgIGdldF9yc3NpX3YzX2xwOyAgICAgICAgICAgICAgIC8vNjI5MyBSRiB0b29sIFJTU0kKKyAgIFVUU1RSZXFQd3J0b0dhaW5WM2xwICAgICAgICAgICAgICAgICAgICAgIHB3cl90b19nYWluX3YzX2xwOyAgICAgICAgICAgIC8vNjI5MyBUcmFkaywgTlNGVAorICAgVVRTVFJlcUxuYXRvR2FpblYzbHAgICAgICAgICAgICAgICAgICAgICAgbG5hX3RvX2dhaW5fdjNfbHA7ICAgICAgICAgICAgLy82MjkzIFJGIHRvb2wgZ2V0IFJTU0kgY2FsY3VsYXRvcgorICAgVVJmVGVzdENtZF9TZXRSeFR4Q2FsRGF0YV9SZXFQYXJhbV9WMyAgICAgc2V0X1J4VHhfY2FsX2RhdGFfY29tbWFuZF9scDsgIC8vYWZ0ZXI2MjkzCisgICBVUmZUZXN0Q21kX0dldFJ4VHhDYWxEYXRhX1JlcVBhcmFtX1YzICAgICBnZXRfUnhUeF9jYWxfZGF0YV9jb21tYW5kX2xwOyAgLy9hZnRlcjYyOTMKKyAgIFVUU1RDbWRSU0NQVjNscCAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzY3BfdjNfbHA7CisgICBVVFNUQ21kQUZDVjNscCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmNfdjNfbHA7CisgICBVVFNUQ21kTFBDYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ2FfdHlwZV92M19scDsKKyAgIFVUU1RSZXFUcmlnZ2VySXFEdW1wTW9kZVYzbHAgICAgICAgICAgICAgIHRyaWdnZXJfaXFfZHVtcF92M19scDsgICAgLy9UcmlnZ2VyIElRIGR1bXAKKyAgIFVUU1RSZXFTZXRSZmVxU3ViYmFuZFYzbHAgICAgICAgICAgICAgICAgIHNldF9yZmVxX3N1YmJhbmRfdjNfbHA7ICAgLy9TZXQgUkZFUSBzdWJiYW5kIHJlc3VsdAorfVVSZlRlc3RDbWRQYXJhbTsKKwordHlwZWRlZiB1bmlvbgoreworICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2s7CisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudnJhbUFjY2Vzc1Jlc3VsdDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMbmFNb2RlOworICAga2FsX2ludDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91MlB3ckRldFJlc3VsdDsKKyAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJzaV9kYXRhOworICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91NE1heENhcElkOworICAgRlRfVU1UU19Nc0NhcGFiaWxpdHlFeCAgICAgICAgICAgICAgICAgICAgbV9yVGFyZ2V0Q2FwYWJpbGl0eTsKKyAgIEZUX1VNVFNfTlNGVExpbmtTdGF0dXNSZXBvcnQgICAgICAgICAgICAgIG1fck5TRlRMaW5rU3RhdHVzUmVwb3J0OworICAgVVJmTnNmdExpc3RNb2RlQ25mICAgICAgICAgICAgICAgICAgICAgICAgbV9yTlNGVExpc3RNb2RlTGlua1N0YXR1c1JlcG9ydDsKKyAgIFVMMURfUkZfTlNGVF9CRVRfQklUX0NOVF9GT1JfQkVSX0NORl9UICAgIG1fck5TRlRCRVJSZXN1bHQ7CisgICBVUmZUZXN0UmVzdWx0QUZDICAgICAgICAgICAgICAgICAgICAgICAgICBhZmM7CisgICBVUmZUZXN0UmVzdWx0UkZJRCAgICAgICAgICAgICAgICAgICAgICAgICByZmlkOworICAgVVJmQ2hlY2tJZkZ1bmNFeGlzdCAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tJZkZ1bmNFeGlzdDsKKyAgIFVSZlRlc3RSZXN1bHRBRkNfRXggICAgICAgICAgICAgICAgICAgICAgIGFmY19leDsKKyAgIFVSZlRlc3RSZXN1bHRSeERQQ2ggICAgICAgICAgICAgICAgICAgICAgIHJ4X2RwY2g7CisgICBVUmZUZXN0UmVzdWx0UHdyRHREYWMgICAgICAgICAgICAgICAgICAgICBwd3JfZHRfZGFjOworICAgVVJmVGVzdFJlc3VsdFB3ckR0U3RlcCAgICAgICAgICAgICAgICAgICAgcHdyX2R0X3N0ZXA7CisgICBVUmZUZXN0UmVzdWx0R2V0UmZUZW1wU2Vuc29yICAgICAgICAgICAgICByZlRlbXBlcmF0dXJlOworICAgVVJmVGVzdFJlc3VsdEdldE1JUElDb2RlV29yZCAgICAgICAgICAgICAgZ2V0X21pcGlfY3dfcGFyYW07CisgICBVUmZUZXN0UmVzdWx0UHdyRHREZWZhdWx0VGhyICAgICAgICAgICAgICBwd3JfZHRfZGVmYXVsdF90aHI7CisgICBVUmZUZXN0UmVzdWx0UmVwbGFjZUdhaW5UYWJsZSAgICAgICAgICAgICByZXBsYWNlX2dhaW5fdGFibGU7CisgICBVUmZUZXN0UmVzdWx0UmZUZW1wZXJhdHVyZUluZm8gICAgICAgICAgICByZlRlbXBlcmF0dXJlSW5mbzsKKyAgIFVSZlRlc3RSZXN1bHRVYmluTW9kZVNldHVwICAgICAgICAgICAgICAgIHViaW5fbW9kZV9zZXR1cF9yZXN1bHQ7CisgICBVUmZUZXN0UmVzdWx0TlNGVFJTU0kgICAgICAgICAgICAgICAgICAgICBmdF9ycHRfbnNmdF9yc3NpOyAgICAgICAgICAgICAgICAgICAvKmZvciBnZXR0aW5nIFJTU0kgdmFsdWUgZHVyaW5nIE5TRlQqLworICAgVVJGVGVzdFJlc3VsdFJlc2V0QkVSUmVzdWx0ICAgICAgICAgICAgICAgcmVzZXRCRVJSZXN1bHQ7CisgICBVUmZUZXN0UmVzdWx0Q2FsRGF0YVByb2Nlc3MgICAgICAgICAgICAgICBjYWxfZGF0YV9wcm9jZXNzX3Jlc3VsdF9scDsgICAgICAgICAvL2FmdGVyIDYyOTIKKyAgIFVSZlRlc3RSZXN1bHREUENIVFhGSVhQR0FMUCAgICAgICAgICAgICAgIGRwY2hfdHhfZml4X3BnYV9nYWluX2xwOworICAgVVJmVGVzdFJlc3VsdEZIQ2VMTkFMUCAgICAgICAgICAgICAgICAgICAgZmhjX2VsbmFfcmVzdWx0X2xwOworICAgVVJmVGVzdFJlc3VsdFJTU0llTE5BTFAgICAgICAgICAgICAgICAgICAgcnNzaV9lbG5hOworICAgVVRTVENuZkdldENhbEluZm9WM2xwICAgICAgICAgICAgICAgICAgICAgY25mX2dldF9jYWxfaW5mb192M19scDsgICAgICAgICAgLy82MjkzIGdldCBjYWxpYnJhdGlvbiBpbmZvcm1hdGlvbgorICAgVVRTVENuZkZIQ2VMTkFWM2xwICAgICAgICAgICAgICAgICAgICAgICAgY25mX2ZoY19jb250cm9sX3YzX2xwOyAgICAgICAgICAgLy82MjkzIEZIQyBmbG93IGNvbnRyb2wgaW5mb21hdGlvbgorICAgVVRTVENuZkdldEZIQ1Jlc3VsdFYzbHAgICAgICAgICAgICAgICAgICAgY25mX2ZoY19yZXBvcnRfdjNfbHA7ICAgICAgICAgICAgLy82MjkzIGZoYyByZXBvcnQKKyAgIFVUU1RDbmZHZXRSU1NJVjNscCAgICAgICAgICAgICAgICAgICAgICAgIGNuZl9nZXRfcnNzaV92M19scDsgICAgICAgICAgICAgIC8vNjI5MyBSRiB0b29sIFJTU0kKKyAgIFVUU1RDbmZQd3J0b0dhaW5WM2xwICAgICAgICAgICAgICAgICAgICAgIGNuZl9wd3JfdG9fZ2Fpbl92M19scDsgICAgICAgICAgIC8vNjI5MyBUcmFkaywgTlNGVAorICAgVVRTVENuZkxuYXRvR2FpblYzbHAgICAgICAgICAgICAgICAgICAgICAgY25mX2xuYV90b19nYWluX3YzX2xwOyAgICAgICAgICAgLy82MjkzIFJGIHRvb2wgZ2V0IFJTU0kgY2FsY3VsYXRvcgorICAgVVJmVGVzdENtZF9TZXRSeFR4Q2FsRGF0YV9DbmZQYXJhbV9WMyAgICAgc2V0X1J4VHhfY2FsX2RhdGFfcHJvY2Vzc19yZXN1bHRfbHA7IC8vYWZ0ZXIgNjI5MworICAgVVJmVGVzdENtZF9HZXRSeFR4Q2FsRGF0YV9DbmZQYXJhbV9WMyAgICAgZ2V0X1J4VHhfY2FsX2RhdGFfcHJvY2Vzc19yZXN1bHRfbHA7IC8vYWZ0ZXIgNjI5MworICAgVVRTVFJlc3VsdExQQ2FsICAgICAgICAgICAgICAgICAgICAgICAgICAgY25mX3BnYV90eXBlX3YzX2xwOworICAgVVRTVENuZlRyaWdnZXJJcUR1bXBNb2RlVjNscCAgICAgICAgICAgICAgY25mX3RyaWdnZXJfaXFfZHVtcF92M19scDsgICAgIC8vVHJpZ2dlciBJUSBkdW1wCisgICBVVFNUQ25mR2V0SXFEdW1wUmVzdWx0VjNscCAgICAgICAgICAgICAgICBjbmZfZ2V0X2lxX2RhdGFfdjNfbHA7ICAgICAgICAgLy9HZXQgSVEgZHVtcCByZXN1bHQKKyAgIFVUU1RDbmZTZXRSZmVxU3ViYmFuZFYzbHAgICAgICAgICAgICAgICAgIGNuZl9zZXRfcmZlcV9zdWJiYW5kX3YzX2xwOyAgICAvL1NldCBSRkVRIHN1YmJhbmQgcmVzdWx0Cit9IFVSZlRlc3RSZXN1bHRQYXJhbTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVF9IRFIKKyAgICBVUmZUZXN0Q21kVHlwZSAgICAgdHlwZTsKKyAgICBVUmZUZXN0Q21kUGFyYW0gICAgcGFyYW07Cit9IGZ0X3VyZl90ZXN0X3JlcV9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUX0hEUgorICAgIFVSZlRlc3RDbWRUeXBlICAgICB0eXBlOworICAgIFVSZlRlc3RSZXN1bHRQYXJhbSBwYXJhbTsKK30gZnRfdXJmX3Rlc3RfY25mX1Q7CisKK3R5cGVkZWYgZnRfdXJmX3Rlc3RfcmVxX1QgZnRfdG9fdWwxdHN0X3N0cnVjdDsKK3R5cGVkZWYgZnRfdXJmX3Rlc3RfY25mX1QgdWwxdHN0X3RvX2Z0X3N0cnVjdDsKKwordHlwZWRlZiBmdF91cmZfdGVzdF9yZXFfVCBmdF91cmZfdGVzdF9yZXFfaWRfc3RydWN0OwordHlwZWRlZiBmdF91cmZfdGVzdF9jbmZfVCBmdF91cmZfdGVzdF9jbmZfaWRfc3RydWN0OworCisjZW5kaWYgIC8vICNpZiBkZWZpbmVkKF9fVU1UU19SQVRfXykgJiYgZGVmaW5lZChfX01US19VTDFfRkREX18pCisKKyNlbmRpZiAvLyAjaWZuZGVmIF9fRlRfTVNHX1VMMVJGX0hfXwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRfbXNnX3VsMXJmX2dlbjk1LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdF9tc2dfdWwxcmZfZ2VuOTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTE5YmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRfbXNnX3VsMXJmX2dlbjk1LmgKQEAgLTAsMCArMSwyMzQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIE1vZGlmaWNhdGlvbiBOb3RpY2U6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBNZWRpYVRlayBJbmMuIGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDEKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBmdF9tc2dfdWwxcmYuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgTWVzc2FnZXMgZGVmaW5pdGlvbiBvZiBVTDEgUkYgY2F0ZWdvcnkgb2YgRlQgTGlicmFyeQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fRlRfTVNHX1VMMVJGX0hfXworI2RlZmluZSBfX0ZUX01TR19VTDFSRl9IX18KKyNpbmNsdWRlICJmdF9tc2dfY29tbW9uLmgiCisjaW5jbHVkZSAidWwxZF9yZl9wdWJsaWMuaCIKKworI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCisKKyNkZWZpbmUgVUwxVFNUX0xOQV9NT0RFX05VTUJFUl9FWFQgNgorCisjZGVmaW5lIFVMMV9EUERfRkRCX05VTSAgICAgICAgICAgICAgICAgICAgKENBTF9VQVJGQ05fU0VDVElPTiAqIFVMMV9EUERfTUFYX1BBX0xFVkVMX05VTSkgLyogcmVmZXIgdG8gZl9kYiBpbiBVX3NEUERfQ09NTU9OX0NBTCAqLworI2RlZmluZSBVTDFfRFBEX01BWF9QVEFSX1RIX05VTSAgICAgICAgICAgIChDQUxfVUFSRkNOX1NFQ1RJT04gKiBVTDFfRFBEX01BWF9QQV9MRVZFTF9OVU0pIC8qIHJlZmVyIHRvIHBhX2lkeF90aCBpbiBVX3NEUERfQ09NTU9OX0NBTCAqLworI2RlZmluZSBVTDFfRFBEX01BWF9JTVBMSUNJVF9SU1ZfTlVNICAgICAgIDAKKyNkZWZpbmUgVUwxX0RQRF9NQVhfSU1QTElDSVRfTlVNICAgICAgICAgICAoVUwxX0RQRF9GREJfTlVNICsgVUwxX0RQRF9NQVhfUFRBUl9USF9OVU0gKyBVTDFfRFBEX01BWF9JTVBMSUNJVF9SU1ZfTlVNKQorI2RlZmluZSBVTDFfRFBEX01BWF9TRVRfQUxMX0RBVEFfTlVNICAgICAgICg3KSAgLyogZmxvb3IoTU1SRl9NQVhfVE9PTF9QRUVSX1NJWkVfUEVSX0NNRCAvIHNpemVvZihVUmZUZXN0Q21kX1NldERwZFBhQW5kRHBkRmFjQ2FsQWxsX09uZUJhbmQpKSAqLworI2RlZmluZSBVTDFfRFBEX01BWF9HRVRfQUxMX0RBVEFfTlVNICAgICAgIChVTDFfRFBEX01BWF9TRVRfQUxMX0RBVEFfTlVNKQorI2RlZmluZSBVTDFfRFBEX01BWF9TRVRfUEFSVElBTF9EQVRBX05VTSAgICgyMzkpIC8qIGZsb29yKE1NUkZfTUFYX1RPT0xfUEVFUl9TSVpFX1BFUl9DTUQgLyBzaXplb2YoVVJmVGVzdENtZF9TZXREcGRQYUFuZERwZEZhY0NhbFBhcnRpYWxfT25lQmFuZCkpICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICBNZXNzYWdlIHN0cnVjdHVyZXMgZGVmaW5lZCBmb3IgVUwxIFRTVCBJbnRlcmZhY2UKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChfX1VNVFNfUkFUX18pICYmIGRlZmluZWQoX19NVEtfVUwxX0ZERF9fKQorCisvL3R5cGUxOiBjb21tdW5pY2F0ZSB3aXRoIHVsMXRzdCBtb2R1bGUsIGFuZCBzZW5kIHRoZSBjb25maXJtIHdpdGhvdXQgd2FpdGluZyEKKy8vdHlwZTI6IGNvbW11bmljYXRlIHdpdGggdTFsdHN0IG1vZHVsZSwgYW5kIHdhaXQgdGhlaXIgY29uZmlybSwgdGhlbiBzZW5kIGJhY2sgdG8gUEMKKy8vdHlwZTM6IGludm9rZSBVTDFEJ3MgQVBJLCB0aGVuIHNlbmQgY29uZmlybSB0byBQQyBzaWRlLgorLy90eXBlNDogbm8gb3BlcmF0aW9uLCBvbmx5IGdldCBGVCB0YXNrJ3MgY3VycmVudCBzdGF0dXMsIGFuZCByZXBseSB0byBQQyBzaWRlCisKK3R5cGVkZWYgZW51bQoreworICAgVVJGX1RFU1RfQ01EX1RYQUNDRVNTID0gMCwKKyAgIFVSRl9URVNUX0NNRF9TVE9QID0gMSwKKyAgIFVSRl9URVNUX0NNRF9UWF9EUENIID0gMiwKKyAgIFVSRl9URVNUX0NNRF9SWF9EUENIID0gMywKKyAgIFVSRl9URVNUX0NNRF9SU1NJID0gNCwKKyAgIFVSRl9URVNUX0NNRF9SU0NQID0gNSwKKyAgIFVSRl9URVNUX0NNRF9BRkMgPSA2LAorICAgVVJGX1RFU1RfQ01EX1RYX1BBQVBDID0gNywKKyAgIFVSRl9URVNUX0NNRF9HRVRfUkZJRCA9IDgsCisgICBVUkZfVEVTVF9DTURfQ09ORklHX0hXVFBDID0gOSwKKyAgIFVSRl9URVNUX0NNRF9HRVRfUFdSX0RUX1NURVAgPSAxMCwKKyAgIFVSRl9URVNUX0NNRF9HRVRfUFdSX0RUX0RBQyA9IDExLAorICAgVVJGX1RFU1RfQ01EX0dFVF9QV1JfRFRfREVGQVVMVF9USFIgPSAxMiwKKyAgIFVSRl9URVNUX0NNRF9TRVRfSU1NRURJQVRFX0JTSSA9IDEzLAorICAgVVJGX1RFU1RfQ01EX0dFVF9JTU1FRElBVEVfQlNJID0gMTQsCisgICBVUkZfVEVTVF9DTURfQ09OVElOVU9VU19SWCA9IDE1LAorICAgVVJGX1RFU1RfQ01EX1NUQVJUX0ZIQyA9IDE2LAorICAgVVJGX1RFU1RfQ01EX1NFVF9UWERBQ19EQVRBID0gMTcsCisgICBVUkZfVEVTVF9DTURfR0VUX1BXUl9ERVRfTUVBU1VSRV9SRVMgPSAxOCwKKyAgIFVSRl9URVNUX0NNRF9TRVRfUFdSX0NUUkxfTU9ERSA9IDE5LAorICAgVVJGX1RFU1RfQ01EX1JFUExBQ0VfR0FJTl9UQUJMRV9GT1JfQ0FMID0gMjAsCisgICBVUkZfVEVTVF9DTURfU1RBUlRfRkhDX05PX1dBSVQgPSAyMSwKKyAgIFVSRl9URVNUX0NNRF9HRVRfRkhDX1JFU1VMVCA9IDIyLAorICAgVVJGX1RFU1RfQ01EX1FVRVJZX1RBUkdFVF9DQVBBQklMSVRZID0gMjMsCisgICBVUkZfVEVTVF9DTURfU1RBUlRfTlNGVCA9IDI0LAorICAgVVJGX1RFU1RfQ01EX0dFVF9CSVRfQ09VTlRfRk9SX1NJTkdMRV9FTkRFRF9CRVIgPSAyNSwKKyAgIFVSRl9URVNUX0NNRF9OU0ZUX1NFVF9JTFBDX1NURVAgPSAyNiwKKyAgIFVSRl9URVNUX0NNRF9TVEFSVF9OU0ZUX0VYID0gMjcsCisgICBVUkZfVEVTVF9DTURfU0VUX1BBX09DVF9MRVZFTF9EQVRBID0gMjgsCisgICBVUkZfVEVTVF9DTURfU1RBUlRfSFNEUEFfTlNGVCA9IDI5LAorICAgVVJGX1RFU1RfQ01EX1NUQVJUX0hTVVBBX05TRlQgPSAzMCwKKyAgIFVSRl9URVNUX0NNRF9TVEFSVF9GSENfRVggPSAzMSwKKyAgIFVSRl9URVNUX0NNRF9HRVRfRkhDX0VYX1JFU1VMVCA9IDMyLAorICAgVVJGX1RFU1RfQ01EX0dFVF9DVVJSRU5UX0xOQV9NT0RFID0gMzMsCisgICBVUkZfVEVTVF9DTURfU0VUX0NBUElEID0gMzQsCisgICBVUkZfVEVTVF9DTURfR0VUX01BWF9DQVBJRCA9IDM1LAorICAgVVJGX1RFU1RfQ01EX0FGQ19FWCA9IDM2LAorICAgVVJGX1RFU1RfQ01EX1JTU0lfUlhEID0gMzcsCisgICBVUkZfVEVTVF9DTURfR0VUX0NVUlJFTlRfUlhEX0xOQV9NT0RFID0gMzgsCisgICBVUkZfVEVTVF9DTURfU0VUX1JYX0JBTkRXSURUSCA9IDM5LAorICAgVVJGX1RFU1RfQ01EX1NFVF9SWF9BTlRFTk5BID0gNDAsCisgICBVUkZfVEVTVF9DTURfU0VUX1RYX1BBX0RSSUZUX0NPTVBFTlNBVElPTiA9IDQxLAorICAgVVJGX1RFU1RfQ01EX1NFVF9JQ1NfQ0VMTF9QT1dFUiA9IDQyLAorICAgVVJGX1RFU1RfQ01EX0dFVF9SRl9URU1QX0JTSSA9IDQzLAorICAgVVJGX1RFU1RfQ01EX0dFVF9SRl9DQVBBQklMSVRZID0gNDQsCisgICBVUkZfVEVTVF9DTURfU1RBUlRfTlNGVF9MSVNUX01PREUgID0gNDUsCisgICBVUkZfVEVTVF9DTURfU0VUX1JGX01JUElfQ09ERVdPUkQgPSA0NiwKKyAgIFVSRl9URVNUX0NNRF9HRVRfUkZfTUlQSV9DT0RFV09SRCA9IDQ3LAorICAgVVJGX1RFU1RfQ01EX0dFVF9URU1QRVJBVFVSRV9JTkZPID0gNDgsCisgICBVUkZfVEVTVF9DTURfUlhfR0FJTl9TV0VFUCA9IDQ5LAorICAgVVJGX1RFU1RfQ01EX1JFTE9BRF9OVlJBTSA9IDUwLAorICAgVVJGX1RFU1RfQ01EX0NIRUNLX0lGX0ZVTkNfRVhJU1QgPSA1MSwKKyAgIFVSRl9URVNUX0NNRF9VQklOX01PREVfU0VUVVAgPSA1MiwKKyAgIFVSRl9URVNUX0NNRF9TRVRfUlhfUEFUSF9MT1NTID0gNTMsCisgICBVUkZfVEVTVF9DTURfR0VUX1JYX1BBVEhfTE9TUyA9IDU0LAorICAgVVJGX1RFU1RfQ01EX1JTU0lfTFBNID0gNTUsCisgICBVUkZfVEVTVF9DTURfUlNTSV9SWERfTFBNID0gNTYsCisgICBVUkZfVEVTVF9DTURfQ09OVElOVU9VU19SWF9MUE0gPSA1NywKKyAgIFVSRl9URVNUX0NNRF9OU0ZUX0dFVF9SU1NJID0gNTgsCisgICBVUkZfVEVTVF9DTURfU0VUX1JYX0NBTElCUkFUSU9OX0RBVEEgPSA1OSwKKyAgIFVSRl9URVNUX0NNRF9HRVRfUlhfQ0FMSUJSQVRJT05fREFUQSA9IDYwLAorICAgVVJGX1RFU1RfQ01EX1NFVF9UWF9DQUxJQlJBVElPTl9EQVRBID0gNjEsCisgICBVUkZfVEVTVF9DTURfR0VUX1RYX0NBTElCUkFUSU9OX0RBVEEgPSA2MiwKKyAgIFVSRl9URVNUX0NNRF9OU0ZUX1JFU0VUX0JFUl9SRVNVTFQgPSA2NiwKKyAgIFVSRl9URVNUX0NNRF9GSENfRUxOQSA9IDY3LAorICAgVVJGX1RFU1RfQ01EX0dFVF9SU1NJX0VMTkEgPSA2OCwKKyAgIFVSRl9URVNUX0NNRF9HRVRfQ09OVElOVU9VU19SU1NJX0VMTkEgPSA2OSwKKyAgIFVSRl9URVNUX0NNRF9UWF9EUENIX0ZJWF9QR0FfR0FJTiA9IDcwLAorICAgVVJGX1RFU1RfQ01EX0dFVF9DQUxJQlJBVElPTl9JTkZPX1YzID0gNzEsCisgICBVUkZfVEVTVF9DTURfU1RBUlRfRkhDX1YzID0gNzIsCisgICBVUkZfVEVTVF9DTURfR0VUX0ZIQ19SRVNVTFRfVjMgPSA3MywKKyAgIFVSRl9URVNUX0NNRF9HRVRfUlNTSV9WMyA9IDc0LAorICAgVVJGX1RFU1RfQ01EX0dBSU5fU0VMRUNUX1BXUl9WMyA9IDc1LAorICAgVVJGX1RFU1RfQ01EX0dBSU5fU0VMRUNUX0xOQV9WMyA9IDc2LAorICAgVVJGX1RFU1RfQ01EX0dFVF9SWFRYX0NBTElCUkFUSU9OX0RBVEFfVjMgPSA3NywgICAgICAgICAgLy9hZnRlciA2MjkzCisgICBVUkZfVEVTVF9DTURfU0VUX1JYVFhfQ0FMSUJSQVRJT05fREFUQV9WMyA9IDc4LCAgICAgICAgICAvL2FmdGVyIDYyOTMKKyAgIFVSRl9URVNUX0NNRF9SU0NQX1YzID0gNzksCisgICBVUkZfVEVTVF9DTURfQUZDX1YzID0gODAsCisgICBVUkZfVEVTVF9DTURfQUZDX0NBUElEX1YzID0gODEsCisgICBVUkZfVEVTVF9DTURfTE9XX1BPV0VSX0NBTF9WMyA9IDgyLAorICAgVVJGX1RFU1RfQ01EX0dFVF9DQUxJQlJBVElPTl9JTkZPX1Y1ID0gODMsICAgICAgICAgICAgICAgLy9hZnRlciA2Mjk1CisgICBVUkZfVEVTVF9DTURfU1RBUlRfRkhDX1Y1ID0gODQsICAgICAgICAgICAgICAgICAgICAgICAgICAvL2FmdGVyIDYyOTUKKyAgIFVSRl9URVNUX0NNRF9HRVRfRkhDX1JFU1VMVF9WNSA9IDg1LCAgICAgICAgICAgICAgICAgICAgIC8vYWZ0ZXIgNjI5NQorICAgVVJGX1RFU1RfQ01EX0dFVF9SWFRYX0NBTElCUkFUSU9OX0RBVEFfVjUgPSA4NiwgICAgICAgICAgLy9hZnRlciA2Mjk1CisgICBVUkZfVEVTVF9DTURfU0VUX1JYVFhfQ0FMSUJSQVRJT05fREFUQV9WNSA9IDg3LCAgICAgICAgICAvL2FmdGVyIDYyOTUKKyAgIFVSRl9URVNUX0NNRF9UUklHR0VSX0lRX0RVTVBfTU9ERV9WMyA9IDg4LCAgICAgICAgICAgICAgIC8vc3VwcG9ydCA2MjkzIEF1dG8gSVEgZHVtcAorICAgVVJGX1RFU1RfQ01EX0dFVF9JUV9EVU1QX1JFU1VMVF9WMyA9IDg5LCAgICAgICAgICAgICAgICAgLy9zdXBwb3J0IDYyOTMgQXV0byBJUSBkdW1wCisgICBVUkZfVEVTVF9DTURfU0VUX1JGRVFfU1VCQkFORF9SRVNVTFRfVjMgPSA5MCwgICAgICAgICAgICAvL3N1cHBvcnQgNjI5MyBBdXRvIElRIGR1bXAKKyAgIFVSRl9URVNUX0NNRF9HRVRfUlNTSV9WNSA9IDkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYWZ0ZXIgNjI5NQorICAgVVJGX1RFU1RfQ01EX0dBSU5fU0VMRUNUX1BXUl9WNSA9IDkyLCAgICAgICAgICAgICAgICAgICAgLy9hZnRlciA2Mjk1CisgICBVUkZfVEVTVF9DTURfR0FJTl9TRUxFQ1RfTE5BX1Y1ID0gOTMsICAgICAgICAgICAgICAgICAgICAvL2FmdGVyIDYyOTUKKyAgIFVSRl9URVNUX0NNRF9HRVRfVFhfUE9XRVJfT0ZGU0VUX1Y1ID05NCwgICAgICAgICAgICAgICAgIC8vYWZ0ZXIgNjI5NQorICAgVVJGX1RFU1RfQ01EX1NFVF9UWF9QT1dFUl9PRkZTRVRfVjUgPTk1LCAgICAgICAgICAgICAgICAgLy9hZnRlciA2Mjk1CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgVVJGX1RFU1RfQ01EX0dQX1RPT0xfQ09NTUFORF9TVEFSVCwKKyAgIFVSRl9URVNUX0NNRF9FTkQsCisgICBVUkZfVEVTVF9DTURfTUFYICAgICAgICAgICAgICAgICAgICAgPSAweDdGRkZGRkZGCit9IFVSZlRlc3RDbWRUeXBlOwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2ICB1bF91YXJmY247ICAgICAgLyogVUwgdWFyZmNuIHJhbmdlOj8/Pz9SZWFkIGZyb20gTlZSQU0/PyAoOTYxMiB+IDk4ODgpICovCisgICAga2FsX3VpbnQxNiAgZGxfcHNjOyAgICAgICAgIC8qIDB+NTExLiAqLworICAgIGthbF91aW50MTYgIHNpZ25hdHVyZTsgICAgICAvKiAwfjE1LCBmb3Igc2luZ2xlIHNpZ25hdHVyZSBkZWNpc2lvbi4gKi8KKyAgICBrYWxfdWludDggICBwYV9tb2RlOyAgICAgICAgLyogMDogSGlnaCAxOiBNaWRkbGUgMjogTG93ICovCisgICAga2FsX2ludDggICAgaW5pdF9wb3dlcjsgICAgIC8qIEFzc3VtZSBjcGljaF9yc2NwPTAsIHVsX2ludGVyZmVyZW5jZT0wLiAqLworICAgIGthbF91aW50OCAgIHBvd2VyX3N0ZXA7ICAgICAvKiBQcmVhbWJsZSBwb3dlciByYW1waW5nIHN0ZXAuIDEgfiA4ZEIgKi8KKyAgICBrYWxfdWludDggICBtYXhfcmV0cmFuczsgICAgLyogMX42NC4gKi8KKyAgICBrYWxfdWludDE2ICBkbF91YXJmY247CisgICAga2FsX3VpbnQ4ICAgYXNjOworfSBVUmZUZXN0Q21kVHhBY2Nlc3M7Cit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgIHVsX2ZyZXE7CisgICAga2FsX2ludDE2ICAgcHNjOyAgICAgICAgLyogMH41MTEuICovCisgICAga2FsX3VpbnQzMiAgc2NfY29kZTsgICAgLyogU2NyYW1ibGluZyBjb2RlICMuIDAgfiAxNjc3NzIxNSAqLworICAgIGthbF91aW50OCAgIHBvd2VyX2N0cmxfbW9kZTsKKyAgICBrYWxfdWludDggICBwYV9tb2RlOworICAgIGthbF91aW50MTYgIGlkeDsKKyAgICBrYWxfdWludDE2ICBhZmNfZGFjOworICAgIGthbF91aW50OCAgIGRwY2NoX3B3cjsKKyAgICBrYWxfdWludDggICBkcGRjaF9wd3I7CisKKyAgICAvKiBCZWxvdyBmb3IgVUwxRF9SRl9NZXRhX1NldFR4SW5mby4gKi8KKyAgICBrYWxfYm9vbCAgICBub19sb29wX2N0cmw7CisKKyAgICAvKiBCZWxvdyBmb3Igc2V0UGFBcGNEYWMuICovCisgICAga2FsX3VpbnQ4ICAgcmZfYmFuZDsKKyAgICBrYWxfdWludDggICB2bTE7CisgICAga2FsX3VpbnQ4ICAgdm0yOworICAgIGthbF91aW50MTYgIGRjMmRjX2RhYzsKKyAgICBrYWxfdWludDE2ICB2Ymlhc19kYWM7CisgICAga2FsX2Jvb2wgICAgcHdyX2RldDsKKyAgICBrYWxfdWludDE2ICBhcGNfZGFjOworICAgIGthbF9ib29sICAgIHBhX29jdGxldl9jdHJsX3VzZWQ7Cit9IFVSZlRlc3RDbWRUeERQQ2g7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiAgZGxfZnJlcTsKKyAgICBrYWxfaW50MTYgICBwc2M7ICAgICAgICAvKiAwfjUxMS4gKi8KKyAgICBrYWxfdWludDggICBzc2M7ICAgICAgICAvKiAwfjE1LiAqLworICAgIGthbF9pbnQxNiAgIG92c2Y7ICAgICAgIC8qIDB+c2YtMS4gKi8KKyAgICBrYWxfdWludDE2ICBhZmNfZGFjOworCisgICAgLyogQmVsb3cgZm9yIFJGX1NldEJCUnhQYXJhbXMuICovCisgICAga2FsX2Jvb2wgICAgaHdBR0M7CisgICAga2FsX3VpbnQ4ICAgbW9kZTsgICAgICAgLyogMDogbW9kZTAsIDE6IG1vZGUxLiAqLworICAgIGthbF9pbnQxNiAgIGdhaW47ICAgICAgIC8qIG1vZGUwLiAqLworICAgIGthbF91aW50OCAgIExOQW1vZGU7ICAgIC8qIG1vZGUxLiAwOiBMTkEgbG93LCAxOiBMTkEgbWlkLCAyOiBMTkEgaGlnaC4gKi8KKyAgICBrYWxfdWludDE2ICBwZ2E7ICAgICAgICAvKiBtb2RlMS4gKi8KK30gVVJmVGVzdENtZFJ4RFBDaDsKKyNkZWZpbmUgRkREX01BWF9GUkVRX0xJU1QgMzYKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgbnVtX2ZyZXE7CisgICAga2FsX3VpbnQxNiAgZGxfZnJlcVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKyAgICBrYWxfdWludDggICB0ZW1wZXJhdHVyZTsKKworICAgIC8qIEJlbG93IGZvciBSRl9TZXRCQlJ4UGFyYW1zLiAqLworICAgIGthbF9ib29sICAgIGh3QUdDOworICAgIGthbF91aW50OCAgIG1vZGU7ICAgICAgIC8qIDA6IG1vZGUwLCAxOiBtb2RlMS4gKi8KKyAgICBrYWxfaW50MTYgICBnYWluOyAgICAgICAvKiBtb2RlMC4gKi8KKyAgICBrYWxfdWludDggICBMTkFtb2RlOyAgICAvKiBtb2RlMS4gMDogTE5BIGxvdywgMTogTE5BIG1pZCwgMjogTE5BIGhpZ2guICovCisgICAga2FsX3VpbnQxNiAgcGdhOyAgICAgICAgLyogbW9kZTEuICovCit9IFVSZlRlc3RDbWRSU1NJOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgIG51bV9mcmVxOworICAgIGthbF91aW50MTYgIGRsX2ZyZXFbIEZERF9NQVhfRlJFUV9MSVNUIF07CisgICAga2FsX3VpbnQ4ICAgdGVtcGVyYXR1cmU7CisKKyAgICAvKiBCZWxvdyBmb3IgUkZfU2V0QkJSeFBhcmFtcy4gKi8KKyAgICBrYWxfYm9vbCAgICBod0FHQzsKKyAgICBrYWxfdWludDggICBtb2RlOyAgICAgICAvKiAwOiBtb2RlMCwgMTogbW9kZTEuICovCisgICAga2FsX2ludDE2ICAgZ2FpbjsgICAgICAgLyogbW9kZTAuICovCisgICAga2FsX3VpbnQ4ICAgTE5BbW9kZTsgICAgLyogbW9kZTEuIDA6IExOQSBsb3csIDE6IExOQSBtaWQsIDI6IExOQSBoaWdoLiAqLworICAgIGthbF91aW50MTYgIHBnYTsgICAgICAgIC8qIG1vZGUxLiAqLworICAgIGthbF91aW50OCAgIGxwbV9tb2RlOyAgIC8qIDA6IG5vcm1hbCBMTkEgZ2FpbiBtb2RlICwgMTogbG93IHBvd2VyIExOQSBnYWluIG1vZGUuICovCit9IFVSZlRlc3RDbWRMUE1SU1NJOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgIG51bV9mcmVxOworICAgIGthbF91aW50MTYgIGRsX2ZyZXFbIEZERF9NQVhfRlJFUV9MSVNUIF07CisgICAga2FsX3VpbnQxNiAgc2NjX2RsX2ZyZXFbIEZERF9NQVhfRlJFUV9MSVNUIF07CisgICAga2FsX2ludDE2ICAgc2V0dGluZ3M7ICAgIC8vICBQQ0MgIFNSWC9MTkEgU2V0dGluZ3MKKyAgICBrYWxfdWludDggICBzcnhjZmc7CisgICAga2FsX3VpbnQ4ICAgdmNvY2ZnOworICAgIGthbF91aW50OCAgIGxuYXBvcnQ7CisgICAga2FsX3VpbnQ4ICAgdGVtcGVyYXR1cmU7CisKKyAgICAvKiBCZWxvdyBmb3IgUkZfU2V0QkJSeFBhcmFtcy4gKi8KKyAgICBrYWxfYm9vbCAgICBod0FHQzsKKyAgICBrYWxfdWludDggICBtb2RlOyAgICAgICAvKiAwOiBtb2RlMCwgMTogbW9kZTEuICovCisgICAga2FsX2ludDE2ICAgZ2FpbjsgICAgICAgLyogbW9kZTAuICovCisgICAga2FsX3VpbnQ4ICAgTE5BbW9kZTsgICAgLyogbW9kZTEuIDA6IExOQSBsb3csIDE6IExOQSBtaWQsIDI6IExOQSBoaWdoLiAqLworICAgIGthbF91aW50MTYgIHBnYTsgICAgICAgIC8qIG1vZGUxLiAqLworfSBVUmZUZXN0Q21kQ0FSU1NJOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgIG51bV9mcmVxOworICAgIGthbF91aW50MTYgIGRsX2ZyZXFbIEZERF9NQVhfRlJFUV9MSVNUIF07CisgICAga2FsX3VpbnQ4ICAgdGVtcGVyYXR1cmU7CisKKyAgICAvKiBCZWxvdyBmb3IgUkZfU2V0QkJSeFBhcmFtcy4gKi8KKyAgICBrYWxfYm9vbCAgICBod0FHQzsKKyAgICBrYWxfdWludDggICBtb2RlOyAgICAgICAvKiAwOiBtb2RlMCwgMTogbW9kZTEuICovCisgICAga2FsX2ludDE2ICAgZ2FpbjsgICAgICAgLyogbW9kZTAuICovCisgICAga2FsX3VpbnQ4ICAgTE5BbW9kZTsgICAgLyogbW9kZTEuIDA6IExOQSBsb3csIDE6IExOQSBtaWQsIDI6IExOQSBoaWdoLiAqLworICAgIGthbF91aW50MTYgIHBnYTsgICAgICAgIC8qIG1vZGUxLiAqLworfSBVUmZUZXN0Q21kUnhHYWluU3dlZXA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgcHNjYW5fYmVmb3JlX2NlbGxfc2VhcmNoOyAgIC8qIFRydWUgaWYgVUwxVFNUIG5lZWRzIHBvd2VyIHNjYW4gYmVmb3JlIGNlbGwgc2VhcmNoL1JTQ1AuICovCisgICAga2FsX3VpbnQxNiAgZGxfZnJlcTsgICAgLyogU3BlY2lmaWMgZGxfZnJlcSB0byBkbyBjZWxsIHNlYXJjaC4gVmFsaWQgaWYgcHNjYW5fYmVmb3JlX2NlbGxfc2VhcmNoPUYuICovCisgICAga2FsX3VpbnQ4ICAgc2FtcGxlX251bV9wZXJfY2VsbDsKKyAgICBrYWxfYm9vbCAgICByZWFkX3NmbjsgICAvKiBUcnVlIGlmIHdlIG5lZWQgdG8gZG8gU0ZOIG1lYXN1cmVtZW50IGZvciB0aGUgZm91bmQgY2VsbC4gKi8KKworICAgIC8qIEJlbG93IGZvciBSRl9TZXRCQlJ4UGFyYW1zLiAqLworICAgIGthbF9ib29sICAgIGh3QUdDOworICAgIGthbF91aW50OCAgIG1vZGU7ICAgICAgIC8qIDA6IG1vZGUwLCAxOiBtb2RlMS4gKi8KKyAgICBrYWxfaW50MTYgICBnYWluOyAgICAgICAvKiBtb2RlMC4gKi8KKyAgICBrYWxfdWludDggICBMTkFtb2RlOyAgICAvKiBtb2RlMS4gMDogTE5BIGxvdywgMTogTE5BIG1pZCwgMjogTE5BIGhpZ2guICovCisgICAga2FsX3VpbnQxNiAgcGdhOyAgICAgICAgLyogbW9kZTEuICovCit9IFVSZlRlc3RDbWRSU0NQOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgIGRsX2ZyZXE7ICAgIC8qIFNwZWNpZmljIGRsX2ZyZXEgdG8gZG8gY2VsbCBzZWFyY2guIFZhbGlkIGlmIHBzY2FuX2JlZm9yZV9jZWxsX3NlYXJjaD1GLiAqLworfSBVVFNUQ21kUlNDUFYzbHA7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfaW50MTYgICAgZGxfZnJlcTsgICAgIC8qIFNwZWNpZmljIGRsX2ZyZXEgdG8gZG8gY2VsbCBzZWFyY2guIFZhbGlkIGlmIHBzY2FuX2JlZm9yZV9jZWxsX3NlYXJjaD1GLiAqLworICAgIGthbF9pbnQxNiAgICBhZmNfZGFjOworICAgIC8qIEJlbG93IGZvciBSRl9TZXRCQlJ4UGFyYW1zLiAqLworICAgIGthbF9ib29sICAgICBod0FHQzsKKyAgICBrYWxfdWludDggICAgbW9kZTsgICAgICAgIC8qIDA6IG1vZGUwLCAxOiBtb2RlMS4gKi8KKyAgICBrYWxfaW50MTYgICAgZ2FpbjsgICAgICAgIC8qIG1vZGUwLiAqLworICAgIGthbF91aW50OCAgICBMTkFtb2RlOyAgICAgLyogbW9kZTEuIDA6IExOQSBsb3csIDE6IExOQSBtaWQsIDI6IExOQSBoaWdoLiAqLworICAgIGthbF91aW50MTYgICBwZ2E7ICAgICAgICAgLyogbW9kZTEuICovCit9IFVSZlRlc3RDbWRBRkM7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2ludDE2ICAgIGRsX2ZyZXE7ICAgICAvKiBTcGVjaWZpYyBkbF9mcmVxIHRvIGRvIGNlbGwgc2VhcmNoLiBWYWxpZCBpZiBwc2Nhbl9iZWZvcmVfY2VsbF9zZWFyY2g9Ri4gKi8KKyAgICBrYWxfaW50MTYgICAgYWZjX2RhYzsKK30gVVRTVENtZEFGQ1YzbHA7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfaW50OCAgICAgbV9jUmZCYW5kOworICAgIGthbF91aW50MTYgICBtX3UySWR4OworICAgIGthbF91aW50OCAgICBtX3VjUGFNb2RlOworICAgIGthbF91aW50OCAgICBtX3VjVm0xOworICAgIGthbF91aW50OCAgICBtX3VjVm0yOworICAgIGthbF91aW50MTYgICBtX3UyREMyRENfRGFjOworICAgIGthbF91aW50MTYgICBtX3UyVmJpYXNfRGFjOworICAgIGthbF91aW50MTYgICBtX3UyQXBjRGFjOworCit9VUwxRF9SRl9UWF9QQV9BUENfUkVRX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLy9zaG91bGQgYmUgZXhhY3RseSB0aGUgc2FtZSBhcyBNRVRBX0hXVFBDX0ZSQU1FX0lORk8gaW4gdWwxZF9yZl9nZW5lcmFsLmgKKyAgICBrYWxfdWludDggdHBjX3N0ZXA7CisgICAga2FsX3VpbnQ4IGl0cDsKKyAgICBrYWxfdWludDggcnBwOworICAgIGthbF91aW50OCBmbXRfaWR4OworICAgIGthbF91aW50OCBkbF9mcmFtZV90eXBlOworICAgIGthbF91aW50MTYgc2xvdF9tYXNrOworICAgIGthbF9pbnQ4ICAgdHBjX2NtZFsxNV07CisgICAga2FsX3VpbnQ4ICBiZXRhX2M7CisgICAga2FsX3VpbnQ4ICBiZXRhX2Q7CisKK31VTDFEX1JGX0hXVFBDX0ZSQU1FX0lORk87Cit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCBwY19hbGdvOworICAgIGthbF91aW50OCB0cGNfdXNlZF9mcmFtZTsgLy8gc3BlY2lmeSB0aGUgZnJhbWUgbnVtYmVyCisgICAga2FsX2ludDE2IHBfaW5pOworCisgICAgVUwxRF9SRl9IV1RQQ19GUkFNRV9JTkZPIGZyYW1lX2luZm9bOF07CisKK31VTDFEX1JGX0hXVFBDX0NPTkZJR19SRVFfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggcmZfYmFuZDsKKworfVVMMURfUkZfR0VUX1BXUl9USFJfUkVRX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDMyICAgICAgICAgIGxpZDsgICAgICAvLyB0aGUgbGlkIGlzIG5lZWRlZCB0byB1cGRhdGUgcnVuLXRpbWUgdmFsdWUKKyAgIGthbF91aW50MzIgICAgICAgICAgZWdfcHRyOyAgIC8vIHRoZSBldmVudCBncm91cCBwb2ludGVyIHVzZWQgdG8gbm90aWZ5IHJ1bnQtdGltZSB1cGRhdGUgZmluaXNoCit9IFVSRlRlc3RDbWRSZWxvYWROVlJBTTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICAgIG5vX2xvb3BfY3RybDsKKyAgICBrYWxfdWludDE2ICAgIGFmY19kYWM7CisgICAga2FsX2Jvb2wgICAgICBwd3JfZGV0OworICAgIGthbF91aW50OCAgICAgcG93ZXJfY3RybF9tb2RlOworICAgIGthbF91aW50OCAgICAgdm0xWzEwXVszXTsKKyAgICBrYWxfdWludDggICAgIHZtMlsxMF1bM107CisgICAga2FsX3VpbnQxNiAgICBkYzJkY19kYWNbMTBdWzNdOworICAgIGthbF91aW50MTYgICAgdmJpYXNfZGFjWzEwXVszXTsKKyAgICBrYWxfYm9vbCAgICAgIGluaXRfdHhfb25vZmY7CisgICAga2FsX2Jvb2wgICAgICByZWFkeV90eF9vbm9mZjsKKyAgICBrYWxfdWludDggICAgIGluaXRfcGFfbW9kZTsKKyAgICBrYWxfdWludDggICAgIHJlYWR5X3BhX21vZGU7CisgICAga2FsX3VpbnQxNiAgICBpbml0X3BhX2dhaW47CisgICAga2FsX3VpbnQxNiAgICByZWFkeV9wYV9nYWluOworICAgIGthbF91aW50MTYgICAgaW5pdF92Z2FfZGFjX3RwY19pZHg7CisgICAga2FsX3VpbnQxNiAgICByZWFkeV92Z2FfZGFjX3RwY19pZHg7CisgICAga2FsX3VpbnQ4ICAgICB0ZW1wZXJhdHVyZTsKKyAgICBrYWxfYm9vbCAgICAgIGh3QUdDOworICAgIGthbF9pbnQxNiAgICAgZ2Fpbl9pbml0OworICAgIGthbF9ib29sICAgICAgaW5pdF9jb25kaXRpb247CisgICAga2FsX3VpbnQ4ICAgICBzdGVwX2R1cmF0aW9uOworICAgIGthbF91aW50OCAgICAgcmVhZHlfZHVyYXRpb247CisgICAga2FsX3VpbnQ4ICAgICByZXR1bmVfZHVyYXRpb247CisgICAga2FsX3VpbnQ4ICAgICBnYWluX3N0YWJsZV90aW1lOworICAgIGthbF91aW50MTYgICAgbWF4X3ZnYV9kYWM7CisgICAga2FsX3VpbnQxNiAgICBtaW5fdmdhX2RhYzsKKyAgICBrYWxfdWludDE2ICAgIGp1bXBfdmdhX2RhYzsKKyAgICBrYWxfdWludDggICAgIGZyZXFfY291bnQ7CisgICAga2FsX3VpbnQ4ICAgICBwd3JfY291bnQ7CisgICAga2FsX3VpbnQ4ICAgICBmcmVxX3N0YXJ0X2lkeDsKKyAgICBrYWxfdWludDggICAgIHB3cl9zdGFydF9pZHg7CisgICAga2FsX3VpbnQ4ICAgICBvZGRfcmVjb3JkOworICAgIGthbF91aW50OCAgICAgcGFfZ2Fpbl9zdGFydF9pZHg7CisgICAga2FsX3VpbnQ4ICAgICBwZF9nYWluX3N0YXJ0X2lkeDsKKyAgICBrYWxfdWludDggICAgIGRsX2JhbmRbNDBdOworICAgIGthbF91aW50OCAgICAgdWxfYmFuZFs0MF07CisgICAga2FsX3VpbnQxNiAgICBkbF9mcmVxWzQwXTsKKyAgICBrYWxfdWludDE2ICAgIHVsX2ZyZXFbNDBdOworICAgIGthbF91aW50OCAgICAgcGFfbW9kZVs0MF07CisgICAga2FsX3VpbnQxNiAgICB2Z2FfZGFjX3RwY19pZHhbNDBdOworICAgIGthbF91aW50MTYgICAgcGFfZ2Fpbls0MF07CisgICAga2FsX3VpbnQ4ICAgICBwZF9nYWluWzQwXTsKK31VTDFEX1JGX0ZIQ19SRVFfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICAgIG5vX2xvb3BfY3RybDsKKyAgICBrYWxfdWludDE2ICAgIGFmY19kYWM7CisgICAga2FsX2Jvb2wgICAgICBwd3JfZGV0OworICAgIGthbF91aW50OCAgICAgcG93ZXJfY3RybF9tb2RlOworICAgIGthbF91aW50OCAgICAgdm0xWzEwXVszXTsKKyAgICBrYWxfdWludDggICAgIHZtMlsxMF1bM107CisgICAga2FsX3VpbnQxNiAgICBkYzJkY19kYWNbMTBdWzNdOworICAgIGthbF91aW50MTYgICAgdmJpYXNfZGFjWzEwXVszXTsKKyAgICBrYWxfYm9vbCAgICAgIGluaXRfdHhfb25vZmY7CisgICAga2FsX2Jvb2wgICAgICByZWFkeV90eF9vbm9mZjsKKyAgICBrYWxfdWludDggICAgIGluaXRfcGFfbW9kZTsKKyAgICBrYWxfdWludDggICAgIHJlYWR5X3BhX21vZGU7CisgICAga2FsX3VpbnQxNiAgICBpbml0X3BhX2dhaW47CisgICAga2FsX3VpbnQxNiAgICByZWFkeV9wYV9nYWluOworICAgIGthbF91aW50MTYgICAgaW5pdF92Z2FfZGFjX3RwY19pZHg7CisgICAga2FsX3VpbnQxNiAgICByZWFkeV92Z2FfZGFjX3RwY19pZHg7CisgICAga2FsX3VpbnQ4ICAgICB0ZW1wZXJhdHVyZTsKKyAgICBrYWxfYm9vbCAgICAgIGh3QUdDOworICAgIGthbF9pbnQxNiAgICAgZ2Fpbl9pbml0OworICAgIGthbF9ib29sICAgICAgaW5pdF9jb25kaXRpb247CisgICAga2FsX3VpbnQ4ICAgICBzdGVwX2R1cmF0aW9uOworICAgIGthbF91aW50OCAgICAgcmVhZHlfZHVyYXRpb247CisgICAga2FsX3VpbnQ4ICAgICByZXR1bmVfZHVyYXRpb247CisgICAga2FsX3VpbnQ4ICAgICBnYWluX3N0YWJsZV90aW1lOworICAgIGthbF91aW50MTYgICAgbWF4X3ZnYV9kYWM7CisgICAga2FsX3VpbnQxNiAgICBtaW5fdmdhX2RhYzsKKyAgICBrYWxfdWludDE2ICAgIGp1bXBfdmdhX2RhYzsKKyAgICBrYWxfdWludDggICAgIGZyZXFfY291bnQ7CisgICAga2FsX3VpbnQ4ICAgICBwd3JfY291bnQ7CisgICAga2FsX3VpbnQ4ICAgICBmcmVxX3N0YXJ0X2lkeDsKKyAgICBrYWxfdWludDggICAgIHB3cl9zdGFydF9pZHg7CisgICAga2FsX3VpbnQ4ICAgICBvZGRfcmVjb3JkOworICAgIGthbF91aW50OCAgICAgcGFfZ2Fpbl9zdGFydF9pZHg7CisgICAga2FsX3VpbnQ4ICAgICBwZF9nYWluX3N0YXJ0X2lkeDsKKyAgICBrYWxfdWludDggICAgIGRsX2JhbmRbNDBdOworICAgIGthbF91aW50OCAgICAgdWxfYmFuZFs0MF07CisgICAga2FsX3VpbnQxNiAgICBkbF9mcmVxWzQwXTsKKyAgICBrYWxfdWludDE2ICAgIHVsX2ZyZXFbNDBdOworICAgIGthbF91aW50OCAgICAgcGFfbW9kZVs0MF07CisgICAga2FsX3VpbnQxNiAgICB2Z2FfZGFjX3RwY19pZHhbNDBdOworICAgIGthbF91aW50MTYgICAgcGFfZ2Fpbls0MF07CisgICAga2FsX3VpbnQ4ICAgICBwZF9nYWluWzQwXTsKKyAgICBrYWxfdWludDggICAgIHBhX3NlY3Rpb25bNDBdOworICAgIGthbF91aW50MTYgICAgbG5hX2dhaW5bNDBdOworfVVMMURfUkZfRkhDX0VYX1JFUV9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgbm9fbG9vcF9jdHJsOworICAgIGthbF91aW50MTYgICAgYWZjX2RhYzsKKyAgICBrYWxfYm9vbCAgICAgIHB3cl9kZXQ7CisgICAga2FsX3VpbnQ4ICAgICBwb3dlcl9jdHJsX21vZGU7CisgICAga2FsX3VpbnQ4ICAgICB2bTFbMTBdWzNdOworICAgIGthbF91aW50OCAgICAgdm0yWzEwXVszXTsKKyAgICBrYWxfdWludDE2ICAgIGRjMmRjX2RhY1sxMF1bM107CisgICAga2FsX3VpbnQxNiAgICB2Ymlhc19kYWNbMTBdWzNdOworICAgIGthbF9ib29sICAgICAgaW5pdF90eF9vbm9mZjsKKyAgICBrYWxfYm9vbCAgICAgIHJlYWR5X3R4X29ub2ZmOworICAgIGthbF91aW50OCAgICAgaW5pdF9wYV9tb2RlOworICAgIGthbF91aW50OCAgICAgcmVhZHlfcGFfbW9kZTsKKyAgICBrYWxfdWludDE2ICAgIGluaXRfcGFfZ2FpbjsKKyAgICBrYWxfdWludDE2ICAgIHJlYWR5X3BhX2dhaW47CisgICAga2FsX3VpbnQxNiAgICBpbml0X3ZnYV9kYWNfdHBjX2lkeDsKKyAgICBrYWxfdWludDE2ICAgIHJlYWR5X3ZnYV9kYWNfdHBjX2lkeDsKKyAgICBrYWxfdWludDggICAgIHRlbXBlcmF0dXJlOworICAgIGthbF9ib29sICAgICAgaHdBR0M7CisgICAga2FsX2ludDE2ICAgICBnYWluX2luaXQ7CisgICAga2FsX2Jvb2wgICAgICBpbml0X2NvbmRpdGlvbjsKKyAgICBrYWxfdWludDggICAgIHN0ZXBfZHVyYXRpb247CisgICAga2FsX3VpbnQ4ICAgICByZWFkeV9kdXJhdGlvbjsKKyAgICBrYWxfdWludDggICAgIHJldHVuZV9kdXJhdGlvbjsKKyAgICBrYWxfdWludDggICAgIGdhaW5fc3RhYmxlX3RpbWU7CisgICAga2FsX3VpbnQxNiAgICBtYXhfdmdhX2RhYzsKKyAgICBrYWxfdWludDE2ICAgIG1pbl92Z2FfZGFjOworICAgIGthbF91aW50MTYgICAganVtcF92Z2FfZGFjOworICAgIGthbF91aW50OCAgICAgZnJlcV9jb3VudDsKKyAgICBrYWxfdWludDggICAgIHB3cl9jb3VudDsKKyAgICBrYWxfdWludDggICAgIGZyZXFfc3RhcnRfaWR4OworICAgIGthbF91aW50OCAgICAgcHdyX3N0YXJ0X2lkeDsKKyAgICBrYWxfdWludDggICAgIG9kZF9yZWNvcmQ7CisgICAga2FsX3VpbnQ4ICAgICBwYV9nYWluX3N0YXJ0X2lkeDsKKyAgICBrYWxfdWludDggICAgIHBkX2dhaW5fc3RhcnRfaWR4OworICAgIGthbF91aW50OCAgICAgZGxfYmFuZFs0MF07CisgICAga2FsX3VpbnQ4ICAgICB1bF9iYW5kWzQwXTsKKyAgICBrYWxfdWludDE2ICAgIGRsX2ZyZXFbNDBdOworICAgIGthbF91aW50MTYgICAgdWxfZnJlcVs0MF07CisgICAga2FsX3VpbnQ4ICAgICBwYV9tb2RlWzQwXTsKKyAgICBrYWxfdWludDE2ICAgIHZnYV9kYWNfdHBjX2lkeFs0MF07CisgICAga2FsX3VpbnQxNiAgICBwYV9nYWluWzQwXTsKKyAgICBrYWxfdWludDggICAgIHBkX2dhaW5bNDBdOworICAgIGthbF91aW50OCAgICAgcGFfc2VjdGlvbls0MF07CisgICAga2FsX3VpbnQxNiAgICBsbmFfZ2Fpbls0MF07CisgICAga2FsX3VpbnQ4ICAgICBjYWxfbnVtOworICAgIGthbF91aW50OCAgICAgcm91dGVfc2V0dGluZ1szXTsKK31VTDFEX1JGX0ZIQ19FWF9DQV9SRVFfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICAgICAgb2s7CisgICAga2FsX3VpbnQ4ICAgICAgIGZyZXFfY291bnQ7CisgICAga2FsX3VpbnQ4ICAgICAgIHB3cl9jb3VudDsKKyAgICBrYWxfdWludDggICAgICAgZnJlcV9zdGFydF9pZHg7CisgICAga2FsX3VpbnQ4ICAgICAgIHB3cl9zdGFydF9pZHg7CisgICAga2FsX2ludDE2ICAgICAgIHJzc2lbNDAwXTsKKyAgICBrYWxfdWludDE2ICAgICAgcHdyX2RldF92YWx1ZVs0MF07Cit9VUwxRF9SRl9GSENfQ05GX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgIG9rOworICAgIGthbF91aW50OCAgICBmcmVxX2NvdW50OworICAgIGthbF91aW50OCAgICBwd3JfY291bnQ7CisgICAga2FsX3VpbnQ4ICAgIGZyZXFfc3RhcnRfaWR4OworICAgIGthbF91aW50OCAgICBwd3Jfc3RhcnRfaWR4OworICAgIGthbF91aW50OCAgICByeF9sbmFfbW9kZVs0MDBdOworICAgIGthbF9pbnQxNiAgICByc3NpWzQwMF07CisgICAga2FsX3VpbnQxNiAgIHB3cl9kZXRfdmFsdWVbNDBdWzNdOworLyoqViBSOCBuZXcgZmVhdHVyZXMgKi8KKyAgICBrYWxfaW50MTYgICAgR2JiX09mZnNldFs0MDBdOyAgIC8qKjwgXGJyaWVmIFRYIEdiYiBwb3dlciBjb21wZW5zYXRpb24gKi8KKyAgICBrYWxfdWludDggICAgcnhkX2xuYV9tb2RlWzQwMF07IC8qKjwgXGJyaWVmIFJ4IGRpdmVyc2l0eSBwYXRoIGxuYSBtb2RlICovCisgICAga2FsX2ludDE2ICAgIHJ4ZF9yc3NpWzQwMF07ICAgICAvKio8IFxicmllZiBSeCBkaXZlcnNpdHkgcGF0aCBSU1NJICovICAgIAorfVVMMURfUkZfRkhDX0VYX0NORl9UOworCit0eXBlZGVmIHN0cnVjdAoreworCisgICBrYWxfYm9vbCAgICAgIGJfYWZjX2RhY192YWxpZDsKKyAgIGthbF91aW50MTYgICAgdTJfYWZjX2RhYzsKKyAgIGthbF91aW50OCAgICAgdTFfbG9vcGJhY2tUeXBlOworICAga2FsX3VpbnQ4ICAgICB1MV9mcmFtZV9zaGlmdDsKKyAgIGthbF91aW50OCAgICAgdTFfcm1jX3R5cGU7CisgICBrYWxfdWludDggICAgIHUxX2N0ZmNbNF07CisgICBrYWxfdWludDggICAgIHUxX2JpdF9wYXR0ZXJuOworCisgICBrYWxfaW50MTYgICAgIGkyX2RsX2ZyZXE7CisgICBrYWxfaW50MTYgICAgIGkyX2RsX3BzYzsKKyAgIGthbF9pbnQxNiAgICAgaTJfZGxfb3ZzZjsKKworICAga2FsX2ludDE2ICAgICBpMl91bF9mcmVxOworICAga2FsX3VpbnQxNiAgICB1Ml91bF90ZmNpOworICAga2FsX3VpbnQzMiAgICB1NF91bF9zY19jb2RlOworICAga2FsX2Jvb2wgICAgICBiX2lxX3B3cl92YWxpZDsKKyAgIGthbF91aW50OCAgICAgdTFfZHBjY2hfcHdyOworICAga2FsX3VpbnQ4ICAgICB1MV9kcGRjaF9wd3I7CisKK31VTDFEX1JGX05TRlRfUkVRX1Q7CisvKioKKyAqIE5TRlQgTGlzdCBNb2RlIGNvbW1hbmQgcGFyYW1ldGVyCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICBhZmNfZGFjX3ZhbGlkOworICAga2FsX3VpbnQxNiAgYWZjX2RhYzsKKyAgIGthbF91aW50OCAgIGxvb3BiYWNrVHlwZTsKKyAgIGthbF91aW50OCAgIGZyYW1lX3NoaWZ0OworICAga2FsX3VpbnQ4ICAgcm1jX3R5cGU7CisgICBrYWxfdWludDggICBjdGZjWzRdOworICAga2FsX3VpbnQ4ICAgYml0X3BhdHRlcm47CisvKiBETCBwYXJhbWV0ZXJzICovCisgICBrYWxfaW50MTYgICBkbF9mcmVxWzUwXTsKKyAgIGthbF9pbnQxNiAgIGRsX3BzYzsKKyAgIGthbF9pbnQxNiAgIGRsX292c2Y7CisvKiBVTCBwYXJhbWV0ZXJzICovCisgICBrYWxfaW50MTYgICB1bF9mcmVxWzUwXTsKKyAgIGthbF91aW50MTYgIHVsX3RmY2k7CisgICBrYWxfdWludDMyICB1bF9zY19jb2RlOworICAga2FsX2Jvb2wgICAgaXFfcHdyX3ZhbGlkOworICAga2FsX3VpbnQ4ICAgZHBjY2hfcHdyOworICAga2FsX3VpbnQ4ICAgZHBkY2hfcHdyOworLyogY29tbW9uIHBhcmFtZXRlcnMgKi8KKyAgIGthbF91aW50OCAgIHZhbGlkX2ZyZXE7CisgICBrYWxfdWludDE2ICB0ZXN0X2l0ZW1bNTBdOworLyogdGhlIHRpbWUgc2V0dGluZ3MsIHVuaXQgPSBmcmFtZSAqLworICAga2FsX3VpbnQxNiAgZnVsbF90ZXN0X3RpbWU7CisgICBrYWxfdWludDggICByZWFkeV90aW1lOworICAga2FsX3VpbnQ4ICAgc3luY190aW1lOworICAga2FsX3VpbnQ4ICAgcmV0cmlhbDsgICAKKyAgIGthbF91aW50MTYgIHRlc3RfdGltZTsKKyAgIGthbF91aW50MTYgIHJ4X3Jzc2lfc3RhcnRfdGltZVszXTsKKyAgIGthbF91aW50OCAgIHJ4X3Jzc2lfZHVyYXRpb25bM107CisgICBrYWxfdWludDE2ICByeF9iZXJfc3RhcnRfdGltZTsKKyAgIGthbF91aW50OCAgIHJ4X2Jlcl9kdXJhdGlvbjsKKyAgIGthbF91aW50MTYgIElMUENfQUJDX3RpbWU7CisgICBrYWxfdWludDE2ICBJTFBDX0VGX3RpbWU7CisgICBrYWxfdWludDE2ICBJTFBDX0dIX3RpbWU7CisgICBrYWxfdWludDE2ICB0cmFuc2l0aW9uX3RpbWU7Cit9IFVSZk5zZnRMaXN0TW9kZVJlcTsKKy8qKgorICogSFNQQSBjb21tYW5kIHBhcmFtZXRlcgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgICBiX2FmY19kYWNfdmFsaWQ7CisgICBrYWxfdWludDE2ICAgIHUyX2FmY19kYWM7CisgICBrYWxfdWludDggICAgIHUxX2xvb3BiYWNrVHlwZTsKKyAgIGthbF91aW50OCAgICAgdTFfZnJhbWVfc2hpZnQ7CisgICBrYWxfdWludDggICAgIHUxX3JtY190eXBlOworICAga2FsX3VpbnQ4ICAgICB1MV9jdGZjWzRdOworICAga2FsX3VpbnQ4ICAgICB1MV9iaXRfcGF0dGVybjsKKworICAga2FsX2ludDE2ICAgICBpMl9kbF9mcmVxOworICAga2FsX2ludDE2ICAgICBpMl9kbF9wc2M7CisgICBrYWxfaW50MTYgICAgIGkyX2RsX292c2Y7CisKKyAgIGthbF9pbnQxNiAgICAgaTJfdWxfZnJlcTsKKyAgIGthbF91aW50MTYgICAgdTJfdWxfdGZjaTsKKyAgIGthbF91aW50MzIgICAgdTRfdWxfc2NfY29kZTsKKyAgIGthbF9ib29sICAgICAgYl9pcV9wd3JfdmFsaWQ7CisgICBrYWxfdWludDggICAgIHUxX2RwY2NoX3B3cjsKKyAgIGthbF91aW50OCAgICAgdTFfZHBkY2hfcHdyOworICAga2FsX3VpbnQ4ICAgICBzdWJUZXN0OworfVVSZlRlc3RDbWRIc3BhTnNmdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2IG1lYXN1cmVfY291bnQ7Cit9IFVSZlRlc3RDbWRHZXRSZlRlbXBTZW5zb3I7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgYkRhdGFWYWxpZDsKKyAgICBrYWxfdWludDMyICB1NFRvdGFsQml0czsKKyAgICBrYWxfdWludDMyICB1NEVycm9yQml0czsKK31VTDFEX1JGX05TRlRfQkVUX0JJVF9DTlRfRk9SX0JFUl9DTkZfVDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgIG9rOworICAgIGthbF91aW50OCAgIG51bV9mcmVxOworICAgIGthbF9pbnQxNiAgIGRsX2ZyZXFbIEZERF9NQVhfRlJFUV9MSVNUIF07CisgICAga2FsX2ludDMyICAgcnNzaVsgRkREX01BWF9GUkVRX0xJU1QgXTsKK30gVVJmVGVzdFJlc3VsdFJTU0k7CisKKy8vIFI4IGJvdGggcnggcGF0aCBSU1NJIHJlc3VsdAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgIG9rOworICAga2FsX3VpbnQ4ICAgbnVtX2ZyZXE7CisgICBrYWxfaW50MTYgICBkbF9mcmVxWyBGRERfTUFYX0ZSRVFfTElTVCBdOworICAga2FsX2ludDMyICAgcnNzaVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKyAgIGthbF9pbnQzMiAgIHJzc2lfcnhkWyBGRERfTUFYX0ZSRVFfTElTVCBdOworfSBVUmZUZXN0UmVzdWx0UlNTSVJ4RDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgIG9rOworICAga2FsX2ludDMyICAgTlNGVF9SU1NJOworICAga2FsX2ludDMyICAgTlNGVF9SU1NJX1JYRDsKKyAgIGthbF9pbnQzMiAgIGNtZF9sb2NhdGlvbjsKK31VUmZUZXN0UmVzdWx0TlNGVFJTU0k7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgb2s7CisgICAga2FsX3VpbnQ4ICAgbnVtX2ZyZXE7CisgICAga2FsX2ludDE2ICAgZGxfZnJlcVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKyAgICBrYWxfaW50MzIgICBpbmJhbmRfcG93WyBGRERfTUFYX0ZSRVFfTElTVCBdOworfSBVUmZUZXN0UmVzdWx0UnhHYWluU3dlZXA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiAgcHNjOyAgICAgICAgLyogUHJpbWFyeSBzY3JhbWJsaW5nIGNvZGUgKi8KKyAgICBrYWxfaW50MzIgICB0bTsgICAgICAgICAvKiBDZWxsIGZyYW1lIGJvdW5kYXJ5IG9mZnNldCB0byBMU1QgKi8KKyAgICBrYWxfaW50MTYgICBvZmY7ICAgICAgICAvKiBDZWxsIGZyYW1lIG51bWJlciBvZmZzZXQgdG8gTFNUICovCisgICAga2FsX2Jvb2wgICAgc3R0ZDsgICAgICAgLyogVHJ1ZSBmb3IgU1RURCB1c2VkLiAqLworICAgIGthbF91aW50OCAgIHNhbXBsZV9udW07CisgICAga2FsX2ludDE2ICAgcnNjcF9zdW07CisgICAga2FsX2ludDE2ICAgZnJlcV9lcnJvcjsKK30gVVJmVGVzdF9jcGljaF9yZXN1bHRfVDsKKworI2RlZmluZSBNQVhfTlVNX01FQVNfQ0VMTCAzMgorCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgICBvazsKKyAgICBrYWxfdWludDggICAgICAgbnVtX2NlbGw7CisgICAgVVJmVGVzdF9jcGljaF9yZXN1bHRfVCAgY3BpY2hfcmVzdWx0WyBNQVhfTlVNX01FQVNfQ0VMTCBdOworfSBVUmZUZXN0UmVzdWx0UlNDUDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICAgICAgb2s7CisgICAga2FsX3VpbnQ4ICAgICAgIG51bV9jZWxsOworICAgIFVSZlRlc3RfY3BpY2hfcmVzdWx0X1QgIGNwaWNoX3Jlc3VsdFsgTUFYX05VTV9NRUFTX0NFTEwgXTsKK30gVVRTVGVzdFJlc3VsdFJTQ1BWM2xwOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgIG9rOworICAgIGthbF91aW50MTYgICAgIHBzYzsKKyAgICBrYWxfaW50MzIgICAgICB0bTsKKyAgICBrYWxfYm9vbCAgICAgICBzdHRkOworICAgIGthbF91aW50OCAgICAgIHJzY3Bfc3VtOworICAgIGthbF9pbnQxNiAgICAgIGZyZXFfZXJyb3I7CisKK31VUmZUZXN0UmVzdWx0QUZDOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgIG9rOworICAgIGthbF91aW50MTYgICAgIHBzYzsKKyAgICBrYWxfaW50MzIgICAgICB0bTsKKyAgICBrYWxfYm9vbCAgICAgICBzdHRkOworICAgIGthbF91aW50OCAgICAgIHJzY3Bfc3VtOworICAgIGthbF9pbnQxNiAgICAgIGZyZXFfZXJyb3I7Cit9VVRTVGVzdFJlc3VsdEFGQ1YzbHA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgICAgb2s7CisgICAga2FsX3VpbnQxNiAgICAgcHNjOworICAgIGthbF9pbnQzMiAgICAgIHRtOworICAgIGthbF9ib29sICAgICAgIHN0dGQ7CisgICAga2FsX3VpbnQ4ICAgICAgcnNjcF9zdW07CisgICAga2FsX2ludDMyICAgICAgZnJlcV9lcnJvcjsKK31VUmZUZXN0UmVzdWx0QUZDX0V4OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgIG9rOworICAgIGthbF91aW50MzIgIGJlcjsgICAgLyogU3BlYyByZXF1aXJlbWVudD0xMF4tMy4gV2Ugd2lsbCBjb3VudCAxMF41IGZyYW1lcygxMDAgdGltZXMgc3BlYyByZXF1aXJlbWVudCkgZm9yIEJFUiBjYWxjdWxhdGlvbi4gT25seSBjb3VudCBmb3IgdGhlIG9ubHkgVFJDaCBmb3IgRFBEQ2guICovCit9IFVSZlRlc3RSZXN1bHRSeERQQ2g7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQzMiBtX3U0UmZpZDsKK31VUmZUZXN0UmVzdWx0UkZJRDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggbV91MVJlc3VsdDsKKworfVVSZlRlc3RSZXN1bHRQd3JEdFN0ZXA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiBtX3UyUmVzdWx0OworCit9VVJmVGVzdFJlc3VsdFB3ckR0RGFjOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCBtX3UxUmVzdWx0OworCit9VVJmVGVzdFJlc3VsdFB3ckR0RGVmYXVsdFRocjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICAgIG9rOworICAgIGthbF9pbnQ4ICAgICAgbV9pMUN1ckdhaW5UYWJsZVN0YXRlOworCit9VVJmVGVzdFJlc3VsdFJlcGxhY2VHYWluVGFibGU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDMyICAgICAgY2FwYWJpbGl0eTsKKyAgIGthbF91aW50MzIgICAgICBiYW5kX3N1cHBvcnQ7CisgICBrYWxfdWludDMyICAgICAgcnhkX2JhbmRfc3VwcG9ydDsgICAKKyAgIGthbF91aW50MzIgICAgICBwYWRyaWZ0X2JhbmRfc3VwcG9ydDsKKyAgIGthbF91aW50MzIgICAgICB3Y2RtYV9kcGRfYmFuZF9zdXBwb3J0OworfUZUX1VNVFNfTXNDYXBhYmlsaXR5RXg7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICBvazsKKyAgICBrYWxfdWludDggIGxpbmtfc3RhdHVzOworfUZUX1VNVFNfTlNGVExpbmtTdGF0dXNSZXBvcnQ7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIGthbF9ib29sICAgIG9rOyAgICAvKjwhIG9rIGluZGljYXRvciAqLworICAgIGthbF91aW50MzIgIHN1bTsgICAvKjwhIHRoZSBzdW0gb2YgbWVhc3VyZV9jb3VudCB0aW1lcyBvZiB0ZW1wIHNlbnNvciByZXN1bHQgKi8KK30gVVJmVGVzdFJlc3VsdEdldFJmVGVtcFNlbnNvcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgIG9rOworICAgIGthbF91aW50OCAgbGlua19zdGF0dXM7Cit9IFVSZk5zZnRMaXN0TW9kZUNuZjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2IHJmX2JhbmRfaWR4OworICAgIGthbF91aW50MTYgcG93ZXJfbGV2ZWxfbnVtOworICAgIGthbF91aW50MTYgY29kZV93b3JkX251bTsKK30gVVJmVGVzdENtZFNldE1JUElDb2RlV29yZDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggIHN0YXR1czsKKyAgICBrYWxfdWludDE2IHBvd2VyX2xldmVsX251bTsKKyAgICBrYWxfdWludDE2IGNvZGVfd29yZF9udW07Cit9IFVSZlRlc3RSZXN1bHRHZXRNSVBJQ29kZVdvcmQ7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2ludDE2IHN0YXR1czsKKyAgICBrYWxfaW50MTYgdGFkY19kYWM7CisgICAga2FsX2ludDE2IHRlbXBlcmF0dXJlOworICAgIGthbF9pbnQxNiB0ZW1wX2lkeDsKK30gVVJmVGVzdFJlc3VsdFJmVGVtcGVyYXR1cmVJbmZvOworCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICBrYWxfdWludDMyICAgICAgcmVzdWx0OyAgICAgICAgIC8vIDE6IHN1cHBvcnQgMDogbm90IHN1cHBvcnQKKyAgICBrYWxfdWludDMyICAgICAgcXVlcnlfb3BfY29kZTsgIC8vIHF1ZXJ5IG9wIGNvZGUKK31VUmZDaGVja0lmRnVuY0V4aXN0OworCit0eXBlZGVmICBlbnVtCit7CisgICBDTkZfU1VDQ0VTUyA9IDAsCisgICBDTkZfR0VORVJBTF9GQUlMID0gMSwKKyAgIENORl9OVlJBTV9SRUFEX0ZBSUwgPSAyLAorICAgQ05GX0ZSRVFfSU5WQUxJRCA9IDMsCisgICBDTkZfQ01EX0lOVkFMSUQgPSA0LAorICAgQ05GX05WUkFNX1NFVF9GQUlMID0gNSwKKyAgIENORl9UWF9EQVRBX0NIRUNLX0ZBSUwgPSA2LAorICAgQ05GX1RYX1NUUlVDVFVSRV9FUlJPUiA9IDcsCisgICBDTkZfUlhfU1RSVUNUVVJFX0VSUk9SID0gOCwKKyAgIENORl9UWF9WR0FfRlJFUV9DSEVDS19GQUlMPTksCisgICBDTkZfVFhfUFdSX0RUX0ZSRVFfQ0hFQ0tfRkFJTD0xMCwKKyAgIENORl9HRVRfUlhUWF9QRUVSX0JVRl9PVkVSRkxPVz0xMSwgICAgIC8vYWZ0ZXIgNjI5MworICAgQ05GX0FERFJFQ09SRF9GQUlMPTEyLCAgICAgICAgICAgICAgICAgLy9hZnRlciA2MjkzCisgICBDTkZfR0VUX1JYVFhfUEVFUl9CVUZfWkVSTz0xMyAgICAgICAgICAvL2FmdGVyIDYyOTUKK30gIE5WUkFNX0FDQ0VTU19SRVNVTFRfTVNHOworCisvKlRYL1JYIGNhbGlicmF0aW9uIGRhdGEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgb2s7CisgICBrYWxfdWludDggICBlcnJvcl9jaGVjazsgICAgICAgICAvL2ZvciBjYWxpYnJhdGlvbiBkYXRhIGNoZWNraW5nCisgICBrYWxfdWludDggICB2ZXJzaW9uX251bWJlcjsKK30gVVJmVGVzdFJlc3VsdENhbERhdGFQcm9jZXNzOyAgICAgIC8vYWZ0ZXIgNjI5MiBnZXQvc2V0ICBjYWxpYnJhdGlvbiBkYXRhIChjb25maXJtIDogbG9jYWwgcGFyYW1ldGVyKQorLyo5NSBnZXQvc2V0IGNvbW1hbmQgb3B0aW1pemF0aW9uIENuZi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICBvazsKKyAgIE5WUkFNX0FDQ0VTU19SRVNVTFRfTVNHICAgZXJyb3JfY2hlY2s7ICAgICAgICAgIC8vZm9yIGNhbGlicmF0aW9uIGRhdGEgY2hlY2tpbmcKKyAgIGthbF91aW50OCAgIHJ4bV9yZXN1bHRfbnVtOyAgICAgICAgICAgICAgICAgICAgIC8vdGhlIG51bWJlciBvZiBiYW5kcyB0byBTRVQKKyAgIGthbF91aW50OCAgIHJ4ZF9yZXN1bHRfbnVtOworICAga2FsX3VpbnQ4ICAgdHhfcmVzdWx0X251bTsKKyAgIE5WUkFNX0FDQ0VTU19SRVNVTFRfTVNHICByeG1fcmVzdWx0WzhdOyAgICAgICAgIC8vcmVzdWx0IHN0YXR1cyBvZiBTRVQgY29tbWFuZCBmb3IgZWFjaCBiYW5kCisgICBOVlJBTV9BQ0NFU1NfUkVTVUxUX01TRyAgcnhkX3Jlc3VsdFs4XTsKKyAgIE5WUkFNX0FDQ0VTU19SRVNVTFRfTVNHICB0eF9yZXN1bHRbOF07Cit9IFVSZlRlc3RDbWRfU2V0UnhUeENhbERhdGFfQ25mUGFyYW1fVjU7ICAgICAgICAgICAvL0xvY2FsIHBhcmFtZXRlciBvZiBjb25maXJtIGFmdGVyIDYyOTUgc2V0IFJ4L1R4IGNhbCBkYXRhIGNvbW1hbmQKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgIG9rOworICAgTlZSQU1fQUNDRVNTX1JFU1VMVF9NU0cgICBlcnJvcl9jaGVjazsgICAgICAgICAgLy9mb3IgY2FsaWJyYXRpb24gZGF0YSBjaGVja2luZworICAga2FsX3VpbnQ4ICAgcnhtX2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgbnVtYmVyIG9mIGJhbmRzIHRvIEdFVAorICAga2FsX3VpbnQ4ICAgcnhkX2NvdW50OworICAga2FsX3VpbnQ4ICAgdHhfY291bnQ7CisgICBrYWxfdWludDggICBwYWRkaW5nOworICAga2FsX3VpbnQxNiAgcnhtX29mZnNldDsgICAgICAgICAgICAgICAgICAgICAgICAgLy9vZmZzZXQgb2YgZGF0YSBpbiBwZWVyIGJ1ZmZlcgorICAga2FsX3VpbnQxNiAgcnhkX29mZnNldDsKKyAgIGthbF91aW50MTYgIHR4X29mZnNldDsKK30gVVJmVGVzdENtZF9HZXRSeFR4Q2FsRGF0YV9DbmZQYXJhbV9WNTsgICAgICAgICAgIC8vTG9jYWwgcGFyYW1ldGVyIG9mIGNvbmZpcm0gIGFmdGVyIDYyOTUgZ2V0IFJ4L1R4IGNhbCBkYXRhIGNvbW1hbmQgCisvLy8qOTMgZ2V0L3NldCBjb21tYW5kIG9wdGltaXphdGlvbiBDbmYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvL3R5cGVkZWYgc3RydWN0CisvL3sKKy8vICAga2FsX2Jvb2wgICAgb2s7CisvLyAgIE5WUkFNX0FDQ0VTU19SRVNVTFRfTVNHICAgZXJyb3JfY2hlY2s7ICAgICAgICAgIC8vZm9yIGNhbGlicmF0aW9uIGRhdGEgY2hlY2tpbmcKKy8vICAga2FsX3VpbnQ4ICAgcnhtX3Jlc3VsdF9udW07ICAgICAgICAgICAgICAgICAgICAgLy90aGUgbnVtYmVyIG9mIGJhbmRzIHRvIFNFVAorLy8gICBrYWxfdWludDggICByeGRfcmVzdWx0X251bTsKKy8vICAga2FsX3VpbnQ4ICAgdHhfcmVzdWx0X251bTsKKy8vICAgTlZSQU1fQUNDRVNTX1JFU1VMVF9NU0cgIHJ4bV9yZXN1bHRbNV07ICAgICAgICAgLy9yZXN1bHQgc3RhdHVzIG9mIFNFVCBjb21tYW5kIGZvciBlYWNoIGJhbmQKKy8vICAgTlZSQU1fQUNDRVNTX1JFU1VMVF9NU0cgIHJ4ZF9yZXN1bHRbNV07CisvLyAgIE5WUkFNX0FDQ0VTU19SRVNVTFRfTVNHICB0eF9yZXN1bHRbNV07CisvL30gVVJmVGVzdENtZF9TZXRSeFR4Q2FsRGF0YV9DbmZQYXJhbV9WMzsgICAgICAgICAgIC8vTG9jYWwgcGFyYW1ldGVyIG9mIGNvbmZpcm0gYWZ0ZXIgNjI5MyBzZXQgUngvVHggY2FsIGRhdGEgY29tbWFuZAorLy8KKy8vdHlwZWRlZiBzdHJ1Y3QKKy8veworLy8gICBrYWxfYm9vbCAgICBvazsKKy8vICAgTlZSQU1fQUNDRVNTX1JFU1VMVF9NU0cgICBlcnJvcl9jaGVjazsgICAgICAgICAgLy9mb3IgY2FsaWJyYXRpb24gZGF0YSBjaGVja2luZworLy8gICBrYWxfdWludDggICByeG1fY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoZSBudW1iZXIgb2YgYmFuZHMgdG8gR0VUCisvLyAgIGthbF91aW50OCAgIHJ4ZF9jb3VudDsKKy8vICAga2FsX3VpbnQ4ICAgdHhfY291bnQ7CisvLyAgIGthbF91aW50OCAgIHBhZGRpbmc7CisvLyAgIGthbF91aW50MTYgIHJ4bV9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vb2Zmc2V0IG9mIGRhdGEgaW4gcGVlciBidWZmZXIKKy8vICAga2FsX3VpbnQxNiAgcnhkX29mZnNldDsKKy8vICAga2FsX3VpbnQxNiAgdHhfb2Zmc2V0OworLy99IFVSZlRlc3RDbWRfR2V0UnhUeENhbERhdGFfQ25mUGFyYW1fVjM7ICAgICAgICAgICAvL0xvY2FsIHBhcmFtZXRlciBvZiBjb25maXJtICBhZnRlciA2MjkzIGdldCBSeC9UeCBjYWwgZGF0YSBjb21tYW5kCisvLy8qOTMgZ2V0L3NldCBjb21tYW5kIG9wdGltaXphdGlvbiBDbmYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgdmVyc2lvbl9udW1iZXI7CisgICBrYWxfYm9vbCAgICBpc191cGxhdGVfdG9fTlZSQU07ICAvL3RvIG1lbW9yeSBvciBOVlJBTQorfSBVUmZUZXN0Q21kU2V0Q2FsRGF0YSA7ICAgICAgICAgICAgLy9hZnRlciA2MjkyIGdldC9zZXQgIGNhbGlicmF0aW9uIGRhdGEgKGNvbW1hbmQgOiBsb2NhbCBwYXJhbWV0ZXIpCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICB2ZXJzaW9uX251bWJlcjsgCit9IFVSZlRlc3RDbWRHZXRDYWxEYXRhIDsgICAgICAvL2FmdGVyIDYyOTIgZ2V0L3NldCAgY2FsaWJyYXRpb24gZGF0YSAoY29tbWFuZCA6IGxvY2FsIHBhcmFtZXRlcikKKy8qOTUgZ2V0L3NldCBjb21tYW5kIG9wdGltaXphdGlvbiBSZXEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgcnhtX2JhbmRfbnVtOyAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgbnVtYmVyIG9mIGJhbmRzIHRvIEdFVAorICAga2FsX3VpbnQ4ICAgcnhkX2JhbmRfbnVtOworICAga2FsX3VpbnQ4ICAgdHhfYmFuZF9udW07CisgICBrYWxfdWludDggICByeG1fYmFuZF9pbmRleFs4XTsgICAgICAgICAgICAgICAgICAvL0JhbmQgaW5kZXggCisgICBrYWxfdWludDggICByeGRfYmFuZF9pbmRleFs4XTsKKyAgIGthbF91aW50OCAgIHR4X2JhbmRfaW5kZXhbOF07Cit9IFVSZlRlc3RDbWRfR2V0UnhUeENhbERhdGFfUmVxUGFyYW1fVjU7ICAgICAgICAgICAvL0xvY2FsIHBhcmFtZXRlciBvZiByZXF1ZXN0ICBhZnRlciA2Mjk1IGdldCBSeC9UeCBjYWwgZGF0YSBjb21tYW5kCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICBpc191cGxhdGVfdG9fTlZSQU07ICAgICAgICAgICAgICAgICAvL3dyaXRlIHRvIE5WUkFNIG9yIG5vdAorICAga2FsX3VpbnQ4ICAgcnhtX2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgbnVtYmVyIG9mIGJhbmRzIHRvIFNFVAorICAga2FsX3VpbnQ4ICAgcnhkX2NvdW50OworICAga2FsX3VpbnQ4ICAgdHhfY291bnQ7CisgICBrYWxfdWludDE2ICByeG1fb2Zmc2V0OworICAga2FsX3VpbnQxNiAgcnhkX29mZnNldDsKKyAgIGthbF91aW50MTYgIHR4X29mZnNldDsKK30gVVJmVGVzdENtZF9TZXRSeFR4Q2FsRGF0YV9SZXFQYXJhbV9WNTsgICAgICAgICAgIC8vTG9jYWwgcGFyYW1ldGVyIG9mIHJlcXVlc3QgIGFmdGVyIDYyOTUgc2V0IFJ4L1R4IGNhbCBkYXRhIGNvbW1hbmQKKy8vLyo5MyBnZXQvc2V0IGNvbW1hbmQgb3B0aW1pemF0aW9uIFJlcS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8vdHlwZWRlZiBzdHJ1Y3QKKy8veworLy8gICBrYWxfdWludDggICByeG1fYmFuZF9udW07ICAgICAgICAgICAgICAgICAgICAgICAvL3RoZSBudW1iZXIgb2YgYmFuZHMgdG8gR0VUCisvLyAgIGthbF91aW50OCAgIHJ4ZF9iYW5kX251bTsKKy8vICAga2FsX3VpbnQ4ICAgdHhfYmFuZF9udW07CisvLyAgIGthbF91aW50OCAgIHJ4bV9iYW5kX2luZGV4WzVdOyAgICAgICAgICAgICAgICAgIC8vQmFuZCBpbmRleCAKKy8vICAga2FsX3VpbnQ4ICAgcnhkX2JhbmRfaW5kZXhbNV07CisvLyAgIGthbF91aW50OCAgIHR4X2JhbmRfaW5kZXhbNV07CisvL30gVVJmVGVzdENtZF9HZXRSeFR4Q2FsRGF0YV9SZXFQYXJhbV9WMzsgICAgICAgICAgIC8vTG9jYWwgcGFyYW1ldGVyIG9mIHJlcXVlc3QgIGFmdGVyIDYyOTMgZ2V0IFJ4L1R4IGNhbCBkYXRhIGNvbW1hbmQKKy8vCisvL3R5cGVkZWYgc3RydWN0CisvL3sKKy8vICAga2FsX2Jvb2wgICAgaXNfdXBsYXRlX3RvX05WUkFNOyAgICAgICAgICAgICAgICAgLy93cml0ZSB0byBOVlJBTSBvciBub3QKKy8vICAga2FsX3VpbnQ4ICAgcnhtX2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgbnVtYmVyIG9mIGJhbmRzIHRvIFNFVAorLy8gICBrYWxfdWludDggICByeGRfY291bnQ7CisvLyAgIGthbF91aW50OCAgIHR4X2NvdW50OworLy8gICBrYWxfdWludDE2ICByeG1fb2Zmc2V0OworLy8gICBrYWxfdWludDE2ICByeGRfb2Zmc2V0OworLy8gICBrYWxfdWludDE2ICB0eF9vZmZzZXQ7CisvL30gVVJmVGVzdENtZF9TZXRSeFR4Q2FsRGF0YV9SZXFQYXJhbV9WMzsgICAgICAgICAgIC8vTG9jYWwgcGFyYW1ldGVyIG9mIHJlcXVlc3QgIGFmdGVyIDYyOTMgc2V0IFJ4L1R4IGNhbCBkYXRhIGNvbW1hbmQKKy8vLyo5MyBnZXQvc2V0IGNvbW1hbmQgb3B0aW1pemF0aW9uIFJlcS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qVFgvUlggY2FsaWJyYXRpb24gZGF0YTwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLypSWCBjYWxpYnJhdGlvbiBkYXRhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4qLwordHlwZWRlZiAgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICB1YXJmY247CisgICBrYWxfaW50OCAgICBwYXRoX2xvc3NfSFBNW1VMMVRTVF9MTkFfTU9ERV9OVU1CRVJfRVhUXTsKKyAgIGthbF9pbnQ4ICAgIHBhdGhfbG9zc19MUE1bVUwxVFNUX0xOQV9NT0RFX05VTUJFUl9FWFRdOworfSBVTDFEX1JGX0xOQV9QQVRITE9TUzsgICAgICAgLy9hZnRlciA2MjkyIExOQSBwYXRobG9zcyBmb3JtYXQKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgIGJhbmQ7CisgICBrYWxfdWludDggICAgICAgICAgICAgICByeGFudHBhdGg7ICAvLyAxOiBtYWluIHBhdGggICwgIDIgOiBkaXZlcnNpdHkgcGF0aAorICAga2FsX2ludDggICAgICAgICAgICAgICAgdGVtcGVyX29mZnNldFtDQUxfVEVNUF9TRUNUSU9OXTsKKyAgIFVMMURfUkZfTE5BX1BBVEhMT1NTICAgIGxvc3Nfb2ZfdWFyZmNuW0NBTF9VQVJGQ05fU0VDVElPTl07Cit9IFVSZlRlc3RQYXRobG9zc0l0ZW07ICAgICAgIC8vYWZ0ZXIgNjI5MiBnZXQvc2V0IFJYIHBhdGhsb3NzICAoY29uZmlybS9jb21tYW5kIDogcGVlciBidWZmZXIpCisvKlJYIGNhbGlicmF0aW9uIGRhdGE8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKlJYIGNhbGlicmF0aW9uIGRhdGEtLS0tLS0tLS0tNjI5My0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+Ki8KKyNkZWZpbmUgVVRTVF9OVlJBTV9TSVpFX1YzIDcKKwordHlwZWRlZiAgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICB1YXJmY247CisgICBrYWxfaW50MTYgICAgcGF0aF9sb3NzX0hQTVtVVFNUX05WUkFNX1NJWkVfVjNdOworICAga2FsX2ludDE2ICAgIHBhdGhfbG9zc19MUE1bVVRTVF9OVlJBTV9TSVpFX1YzXTsKK30gVVRTVF9MTkFfUEFUSExPU1M7ICAgICAgIC8vYWZ0ZXIgNjI5MyBMTkEgcGF0aGxvc3MgZm9ybWF0CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICAgICAgICAgICAgICBiYW5kOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgcnhhbnRwYXRoOyAgLy8gMTogbWFpbiBwYXRoICAsICAyIDogZGl2ZXJzaXR5IHBhdGgKKyAgIGthbF9pbnQ4ICAgICAgICAgICAgICAgIHRlbXBlcl9vZmZzZXRbQ0FMX1RFTVBfU0VDVElPTl07CisgICBVVFNUX0xOQV9QQVRITE9TUyAgICBsb3NzX29mX3VhcmZjbltDQUxfVUFSRkNOX1NFQ1RJT05dOworfSBVVFNUUGF0aGxvc3NWMzsgICAgICAgLy9hZnRlciA2MjkzIGdldC9zZXQgUlggcGF0aGxvc3MgIChjb25maXJtL2NvbW1hbmQgOiBwZWVyIGJ1ZmZlcikKKworLypUWCBjYWxpYnJhdGlvbiBkYXRhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4qLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgIHN0YXJ0OworICAga2FsX3VpbnQxNiAgZW5kOworfSBVTDFEX3NIWVNURVJFU0lTREFUQTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgIGxldmVsXzA7CisgICBrYWxfdWludDE2ICBsZXZlbF8xOworfSBVTDFEX3NEQzJEQzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgIG1heF91YXJmY247CisgICBrYWxfaW50MTYgICBwd3Jfb2Zmc2V0X2RCOworICAga2FsX2ludDE2ICAgcHdyX29mZnNldF90eGRhYzsKK30gVUwxRF9zQVJGQ05fU0VDVElPTjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgIGRjMmRjX2xldmVsOworICAga2FsX3VpbnQxNiAgdmJpYXNfZGFjOworICAga2FsX3VpbnQ4ICAgdm0xOworICAga2FsX3VpbnQ4ICAgdm0yOworfSBVTDFEX3NQQURBVEE7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICBwYV9tb2RlOworICAga2FsX2ludDggICAgcHJmOworICAga2FsX3VpbnQ4ICAgZGMyZGNfbHZsOworICAga2FsX3VpbnQ4ICAgdm0xOworICAga2FsX3VpbnQ4ICAgdm0yOworICAga2FsX3VpbnQxNiAgdmJpYXNfZGFjOworICAga2FsX3VpbnQxNiAgcGFfZ2FpbjsKK30gVUwxRF9zUE1VTEVWSEFORExFOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgICAgICAgICAgb2N0bGV2X251bV9zZWN0aW9uOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgcmVzZXJ2ZWRfYnl0ZTsKKyAgIGthbF91aW50MzIgICAgICAgICAgIHBhX3BoYXNlX2NvbXBlbnNhdGlvblszXTsKKyAgIFVMMURfc1BNVUxFVkhBTkRMRSAgIHBtdV9sZXZlbF9oYW5kbGVbOF07Ly84CisgICBrYWxfdWludDE2ICAgICAgICAgICBwYV9nYWluX2cxMmE7CisgICBrYWxfdWludDE2ICAgICAgICAgICBwYV9nYWluX2cxMmI7Cit9VUwxRF9zUEFPQ1RMVkxTRVRUSU5HOworCit0eXBlZGVmIHN0cnVjdAoreworICAgVUwxRF9zUEFEQVRBICAgICAgICAgcGFfZGF0YTsKKyAgIGthbF91aW50MTYgICAgICAgICAgIHZnYV9kYWNbTlVNQkVSX09GX1ZHQV9EQUNdOworICAgVUwxRF9zQVJGQ05fU0VDVElPTiAgdmdhX2NvbXBfYnlfc3ViYmFuZFtDQUxfVUFSRkNOX1NFQ1RJT05dOworICAga2FsX2ludDE2ICAgICAgICAgICAgdmdhX2NvbXBfYnlfdGVtcGVyYXR1cmVbOF1bMl07Cit9IFVMMURfc1RYUE9XRVJEQVRBOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgICAgICAgICAgcHdyX2R0X3RocjsKKyAgIGthbF91aW50OCAgICAgICAgICAgIHB3cl9kdF9zZWN0aW9uOworICAga2FsX3VpbnQxNiAgICAgICAgICAgcHdyX2R0X2RhY1tDQUxfUFdSX0RFVEVDVE9SX1NFQ1RJT05dOworICAga2FsX2ludDE2ICAgICAgICAgICAgcHdyX2R0X3ZhbHVlW0NBTF9QV1JfREVURUNUT1JfU0VDVElPTl07CisgICBVTDFEX3NBUkZDTl9TRUNUSU9OICBwd3JfZHRfY29tcF9ieV9zdWJiYW5kW0NBTF9VQVJGQ05fU0VDVElPTl07CisgICBrYWxfaW50MTYgICAgICAgICAgICBwd3JfZHRfY29tcF9ieV90ZW1wZXJhdHVyZVs4XVsyXTsKK30gVUwxRF9zUFdURFREQVRBOworCit0eXBlZGVmIHN0cnVjdAoreworICAgVUwxRF9zREMyREMgICAgICAgICAgICAgcGFfZGMyZGM7CisgICBVTDFEX3NUWFBPV0VSREFUQSAgICAgICBwb3dlcl9kYWNbM107CisgICBVTDFEX3NIWVNURVJFU0lTREFUQSAgICB0eF9odnN0ZXJlc2lzWzJdOworICAgVUwxRF9zUFdURFREQVRBICAgICAgICAgcHdyX2R0X2RhdGE7Cit9IFVMMURfc1JBTVBEQVRBOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgYmFuZDsKKyAgIFVMMURfc1JBTVBEQVRBICAgICAgICAgIHR4ZGFjRGF0YTsKKyAgIFVMMURfc1BBT0NUTFZMU0VUVElORyAgIHR4UEFPQ1RMZXZlbERhdGE7Cit9IFVSZlRlc3RUWERhVGFJdGVtOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogV0NETUEgRFBEIGNvbW1vbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgZW51bQoreworICAgVVJGX1RFU1RfV0NETUFfRFBEXzkxID0gMCwKKyAgIFVSRl9URVNUX1dDRE1BX0RQRF85MiA9IDEsCisgICBVUkZfVEVTVF9XQ0RNQV9EUERfOTMgPSAyLAorICAgVVJGX1RFU1RfV0NETUFfRFBEXzk1ID0gMworfVVSZlRlc3RfV2NkbWFfRHBkX0dlbmVyYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNTVJGX1RFU1RfQ01EX1NUQVJUX0RQRF9GQUNfQ0FMX1YzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtCit7CisgICBVUkZfVEVTVF9TVEFSVF9EUERfSU5WQUxJRCAgICAgICAgICAgICAgID0gMCwKKyAgIFVSRl9URVNUX1NUQVJUX0RQRF9PSyAgICAgICAgICAgICAgICAgICAgPSAxLAorICAgVVJGX1RFU1RfU1RBUlRfRFBEX1BFRVJfU0laRV9NSVNNQVRDSCAgICA9IDIsCisgICBVUkZfVEVTVF9TVEFSVF9EUERfRVhDRUVEX1RUR19MSU1JVF9JTklUID0gMywKKyAgIFVSRl9URVNUX1NUQVJUX0RQRF9FWENFRURfVFRHX0xJTUlUICAgICAgPSA0LAorICAgVVJGX1RFU1RfU1RBUlRfRFBEX05FR0FUSVZFX1BBX0dBSU4gICAgICA9IDUsCisgICBVUkZfVEVTVF9TVEFSVF9EUERfTEFSR0VfUEFfR0FJTl9ESUZGICAgID0gNiAgIAorCit9VVJmVGVzdF9TdGFydERwZEZhY0NhbF9TdGF0dXM7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2IG51bV9vZl9iYW5kOworICAga2FsX3VpbnQxNiBjYWxfYmFuZFtNQVhfU1VQUE9SVEVEX0JBTkRfSU5ERVhdOworCit9VVJmVGVzdENtZF9TdGFydERwZF9SZXFJbmZvOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICBzdGF0dXM7IC8qIFVSZlRlc3RfU3RhcnREcGRQYUFuZERwZEZhY0NhbF9TdGF0dXMgKi8KKyAgIGthbF91aW50MTYgY3Vycl9iYW5kX2lkeDsgICAgCisgICBrYWxfdWludDMyIGN1cnJfc3ViYmFuZF9pZHg7CisgICBrYWxfdWludDMyIGN1cnJfZ2Fpbl9pZHg7ICAgCisgICBrYWxfaW50MTYgIGN1cnJfcGFfZ2FpbjsKKyAgIAorfVVSZlRlc3RDbWRfU3RhcnREcGRfQ25mSW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgYmFuZF9pZHg7CisgICBrYWxfdWludDE2IGFwdF9yZWZfY2hhbm5lbDsKKyAgIGthbF9pbnQxNiAgdHBjX3dhbnRlZF9wX29mZnNldDsKKyAgIAorfVVSZlRlc3RfQXB0UmVmQ2hhbm5lbF9PbmVCYW5kOworCisvKiBzdHJ1Y3QgZm9yIEdQIHRvb2wgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBVUmZUZXN0X0FwdFJlZkNoYW5uZWxfT25lQmFuZCB3Y2RtYV9hcHRfY2hhbm5lbF9pbmZvW01BWF9TVVBQT1JURURfQkFORF9JTkRFWF07CisKK31VUmZUZXN0Q21kX1N0YXJ0RHBkUGFBbmREcGRGYWNDYWxfUmVxUGR1OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTU1SRl9URVNUX0NNRF9TRVRfRFBEX0ZBQ19SRVNVTFRfVjMgYW5kIE1NUkZfVEVTVF9DTURfR0VUX0RQRF9GQUNfUkVTVUxUX1YzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtCit7CisgICBVUkZfVEVTVF9TRVRfRFBEX0lOVkFMSUQgICAgICAgICAgICA9IDAsCisgICBVUkZfVEVTVF9TRVRfRFBEX09LICAgICAgICAgICAgICAgICA9IDEsCisgICBVUkZfVEVTVF9TRVRfRFBEX1BFRVJfU0laRV9NSVNNQVRDSCA9IDIsCisgICBVUkZfVEVTVF9TRVRfRFBEX0lOVkFMSURfQkFORCAgICAgICA9IDMKKyAgIAorfVVSZlRlc3RfU2V0RHBkRmFjQ2FsX1N0YXR1czsKKwordHlwZWRlZiBlbnVtCit7CisgICBVUkZfVEVTVF9HRVRfRFBEX0lOVkFMSUQgICAgICAgICAgICA9IDAsCisgICBVUkZfVEVTVF9HRVRfRFBEX09LICAgICAgICAgICAgICAgICA9IDEsCisgICBVUkZfVEVTVF9HRVRfRFBEX0lOVkFMSURfQkFORCAgICAgICA9IDIgICAKKyAgIAorfVVSZlRlc3RfR2V0RHBkRmFjQ2FsX1N0YXR1czsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIC8qIFRvb2wgY2FuIHNldCBzZXZlcmFsIGJhbmQgaW4gb25lIHNldCBjb21tYW5kICovCisgICBrYWxfdWludDE2IG51bV9vZl9iYW5kOworCit9VVJmVGVzdENtZF9TZXREcGRBbGxfUmVxSW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgbnVtX29mX2JhbmQ7CisgICBrYWxfdWludDggIHN0YXR1czsgLyogVVJmVGVzdF9TZXREcGRGYWNDYWxfU3RhdHVzICovCisKK31VUmZUZXN0Q21kX1NldERwZEFsbF9DbmZJbmZvOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiBudW1fb2ZfYmFuZDsKKworfVVSZlRlc3RDbWRfU2V0RHBkUGFydGlhbF9SZXFJbmZvOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiBudW1fb2ZfYmFuZDsKKyAgIGthbF91aW50OCAgc3RhdHVzOyAvKiBVUmZUZXN0X1NldERwZFBhQW5kRHBkRmFjQ2FsX1N0YXR1cyAqLworCit9VVJmVGVzdENtZF9TZXREcGRQYXJ0aWFsX0NuZkluZm87CisKK3R5cGVkZWYgc3RydWN0Cit7ICAgCisgICBrYWxfdWludDE2ICAgICAgICAgICBiYW5kX2lkeDsKKyAgIGthbF91aW50OCAgICAgICAgICAgIGRwZF9jYWxfZG9uZTsKKyAgIGthbF9pbnQxNiAgICAgICAgICAgIGRwZF90cltDQUxfVUFSRkNOX1NFQ1RJT05dOworCisgICAvKiByYW1wICovICAgCisgICBrYWxfaW50MTYgICAgICAgICAgICB2Z2FfY29tcF9zdWJiYW5kW1VMMURfRFBEX01BWF9QQV9NT0RFX05VTV1bQ0FMX1VBUkZDTl9TRUNUSU9OXTsKKyAgIGthbF9pbnQxNiAgICAgICAgICAgIHZnYV9jb21wX3RlbXBlcmF0dXJlW1VMMURfRFBEX01BWF9QQV9NT0RFX05VTV1bVUwxX0RQRF9NQVhfUEFfTEVWRUxfTlVNXTsKKyAgIFVMMURfc0hZU1RFUkVTSVNEQVRBIHR4X2h5c3RlcmVzaXNbVUwxRF9EUERfTUFYX1BBX0hZU1RfTlVNXTsKKworICAgLyogcGFvY3QgKi8KKyAgIGthbF91aW50OCAgICAgICAgICAgIG9jdGxldl9udW1fc2VjdGlvbjsKKyAgIGthbF91aW50MzIgICAgICAgICAgIHBhX3BoYXNlX2NvbXBlbnNhdGlvbltVTDFEX0RQRF9NQVhfUEFfTU9ERV9OVU1dOworICAgVUwxRF9zUE1VTEVWSEFORExFICAgcG11X2xldmVsX2hhbmRsZVtVTDFfRFBEX01BWF9QQV9MRVZFTF9OVU1dOworCit9VVJmVGVzdF9TZXRHZXREcGRfVHBjUGVlcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgbHV0W1VMMV9EUERfTUFYX0FNX0xVVF9HQUlOX05VTV1bTU1EUERfTUFYX0FNX0xVVF9QV1JfTlVNXTsKKworfVVSZlRlc3RfRFBEQU1MdXRTdWJCYW5kOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2ludDggIGx1dFtVTDFfRFBEX01BWF9QTV9MVVRfR0FJTl9OVU1dW01NRFBEX01BWF9QTV9MVVRfUFdSX05VTV07CisKK31VUmZUZXN0X0RQRFBNTHV0U3ViQmFuZDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9pbnQxNiAgICAgICAgICAgICAgIGRwZEltcGxpY2l0QXJyYXlbVUwxX0RQRF9NQVhfSU1QTElDSVRfTlVNXTsgLyogRm9yIHRoZSBwYXJhbWV0ZXJzIHdob3NlIG5hbWUgd2lsbCBub3QgYmUgc2hvd24gaW4gY2FsIGZpbGUgKi8JCisgICBVUmZUZXN0X0RQREFNTHV0U3ViQmFuZCBhbV9sdXRfc3ViYmFuZFtDQUxfVUFSRkNOX1NFQ1RJT05dOworICAgVVJmVGVzdF9EUERQTUx1dFN1YkJhbmQgcG1fbHV0X3N1YmJhbmRbQ0FMX1VBUkZDTl9TRUNUSU9OXTsKKworfVVSZlRlc3RfU2V0R2V0RHBkX0RwZFBlZXI7CisKK3R5cGVkZWYgc3RydWN0Cit7ICAgCisgICBVUmZUZXN0X1NldEdldERwZF9UcGNQZWVyIGRwZHRwY19wZWVyOworICAgVVJmVGVzdF9TZXRHZXREcGRfRHBkUGVlciBkcGRfcGVlcjsKKworfVVSZlRlc3RDbWRfU2V0RHBkRmFjQ2FsQWxsX09uZUJhbmQsIFVSZlRlc3RDbWRfR2V0RHBkRmFjQ2FsQWxsX09uZUJhbmQ7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBVUmZUZXN0X1NldEdldERwZF9UcGNQZWVyIGRwZHRwY19wZWVyOworCit9VVJmVGVzdENtZF9TZXREcGRGYWNDYWxQYXJ0aWFsX09uZUJhbmQ7CisKK3R5cGVkZWYgc3RydWN0Cit7ICAgICAgICAgICAgIAorICAga2FsX3VpbnQxNiBudW1fb2ZfYmFuZDsKKyAgIGthbF91aW50MTYgYmFuZF9pZHhbTUFYX1NVUFBPUlRFRF9CQU5EX0lOREVYXTsKKyAgICAgICAgICAgICAKK31VUmZUZXN0Q21kX0dldERwZEFsbF9SZXFJbmZvOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICBnZXRfc3RhdHVzOyAvKiBVUmZUZXN0X0dldERwZFBhQW5kRHBkRmFjQ2FsX1N0YXR1cyAqLworICAga2FsX3VpbnQxNiBudW1fb2ZfYmFuZDsKKworfVVSZlRlc3RDbWRfR2V0RHBkQWxsX0NuZkluZm87CisKKy8qIHN0cnVjdCBmb3IgR1AgdG9vbCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFVSZlRlc3RDbWRfR2V0RHBkRmFjQ2FsQWxsX09uZUJhbmQgZ2V0X3BlZXJbTUFYX1NVUFBPUlRFRF9CQU5EX0lOREVYXTsKKworfVVSZlRlc3RDbWRfR2V0RHBkRmFjQ2FsQWxsX0NuZlBkdTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sgIAorICAgVVJmVGVzdENtZF9TZXREcGRGYWNDYWxBbGxfT25lQmFuZCBzZXRfYWxsX3BlZXJbTUFYX1NVUFBPUlRFRF9CQU5EX0lOREVYXTsKKyAgIAorfVVSZlRlc3RDbWRfU2V0RHBkRmFjQ2FsQWxsX1JlcVBkdTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFVSZlRlc3RDbWRfU2V0RHBkRmFjQ2FsUGFydGlhbF9PbmVCYW5kIHNldF9wYXJ0aWFsX3BlZXJbTUFYX1NVUFBPUlRFRF9CQU5EX0lOREVYXTsKKworfVVSZlRlc3RDbWRfU2V0RHBkRmFjQ2FsUGFydGlhbF9SZXFQZHU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNTVJGX1RFU1RfQ01EX1NFVF9EUERfUEFUSF9ERUxBWV9TRUFSQ0hfVjMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0KK3sKKyAgIFVSRl9URVNUX1NFVF9EUERfREVMQVlfSU5WQUxJRCAgICAgICAgICAgID0gMCwKKyAgIFVSRl9URVNUX1NFVF9EUERfREVMQVlfVkFMSUQgICAgICAgICAgICAgID0gMSwKKyAgIFVSRl9URVNUX1NFVF9EUERfREVMQVlfUEVFUl9TSVpFX01JU01BVENIID0gMgorICAgCit9VVJmVGVzdF9TZXREcGRQYXRoRGVsYXlTZWFyY2hWM19TdGF0dXM7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAvKiBUb29sIGNhbiBzZXQgc2V2ZXJhbCBiYW5kIGluIG9uZSBzZXQgY29tbWFuZCAqLworICAga2FsX3VpbnQxNiBiYW5kX251bTsKKworfVVSZlRlc3RDbWRfU2V0RHBkUGF0aERlbGF5U2VhcmNoVjNfUmVxSW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICByZl9iYW5kOworICAga2FsX3VpbnQxNiAgIHN1YmJhbmRfZnJlcVtDQUxfVUFSRkNOX1NFQ1RJT05dOworICAga2FsX2ludDE2ICAgIGRwZF90cltDQUxfVUFSRkNOX1NFQ1RJT05dOworCit9VVJmVGVzdF9TZXREcGRQYXRoRGVsYXlTZWFyY2hWM19SZXFQZWVyX09uZUJhbmQ7CisKKy8qIHN0cnVjdCBmb3IgR1AgdG9vbCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFVSZlRlc3RfU2V0RHBkUGF0aERlbGF5U2VhcmNoVjNfUmVxUGVlcl9PbmVCYW5kIGRwZF9vbmVfYmFuZFtNQVhfU1VQUE9SVEVEX0JBTkRfSU5ERVhdOworCit9VVJmVGVzdENtZF9TZXREcGRQYXRoRGVsYXlTZWFyY2hWM19SZXFQZHU7CisKKy8qIENvbmZpcm0gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2IGJhbmRfbnVtOworICAga2FsX3VpbnQxNiBzdGF0dXM7CisKK31VUmZUZXN0Q21kX1NldERwZFBhdGhEZWxheVNlYXJjaFYzX0NuZkluZm87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNTVJGX1RFU1RfQ01EX1NUQVJUX0RQRF9QQVRIX0RFTEFZX1NFQVJDSF9WMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgZW51bQoreworICAgVVJGX1RFU1RfU1RBUlRfRFBEX0RFTEFZX0lOVkFMSUQgICAgICAgPSAwLAorICAgVVJGX1RFU1RfU1RBUlRfRFBEX0RFTEFZX1ZBTElEICAgICAgICAgPSAxLAorICAgVVJGX1RFU1RfU1RBUlRfRFBEX0RFTEFZX1RJTUVPVVQgICAgICAgPSAyLAorICAgVVJGX1RFU1RfU1RBUlRfRFBEX0RFTEFZX1NFQVJDSF9GQUlMRUQgPSAzCit9VVJmVGVzdF9TdGFydERwZFBhdGhEZWxheVNlYXJjaFYzX1N0YXR1czsKKworLyogUmVxdWVzdCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgdGVzdF90aW1lczsKKyAgIGthbF91aW50MTYgc2VhcmNoX2JhbmRbTUFYX1NVUFBPUlRFRF9CQU5EX0lOREVYXTsKK31VUmZUZXN0Q21kX1N0YXJ0RHBkUGF0aERlbGF5U2VhcmNoVjNfUmVxSW5mbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1NUkZfVEVTVF9DTURfR0VUX0RQRF9QQVRIX0RFTEFZX1NFQVJDSF9WMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKKy8qIFJlcXVlc3QgKi8KK3R5cGVkZWYgc3RydWN0Cit7ICAgICAgICAgICAgIAorICAga2FsX3VpbnQxNiAgICAgICAgYmFuZF9udW07CisgICBrYWxfdWludDE2ICAgICAgICByZl9iYW5kX2luZm9bTUFYX1NVUFBPUlRFRF9CQU5EX0lOREVYXTsKKyAgIAorfVVSZlRlc3RDbWRfR2V0RHBkUGF0aERlbGF5U2VhcmNoVjNfUmVxSW5mbzsKKworCisvKiBDb25maXJtICovCisKK3R5cGVkZWYgZW51bQoreworICAgVVJGX1RFU1RfR0VUX0RQRF9ERUxBWV9JTlZBTElEID0gMCwKKyAgIFVSRl9URVNUX0dFVF9EUERfREVMQVlfVkFMSUQgICA9IDEgICAKKyAgIAorfVVSZlRlc3RfR2V0RHBkUGF0aERlbGF5U2VhcmNoVjNfU3RhdHVzOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiBiYW5kX251bTsKKyAgIGthbF91aW50MTYgZ2V0X3N0YXR1czsgLyogVVJmVGVzdF9HZXREcGRQYXRoRGVsYXlTZWFyY2hWM19TdGF0dXMgKi8KKworfVVSZlRlc3RDbWRfR2V0RHBkUGF0aERlbGF5U2VhcmNoVjNfQ25mSW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICByZl9iYW5kOworICAga2FsX2ludDE2ICAgIGRwZF90cltDQUxfVUFSRkNOX1NFQ1RJT05dOworCit9VVJmVGVzdF9HZXREcGRQYXRoRGVsYXlTZWFyY2hWM19DbmZQZWVyX09uZUJhbmQ7CisKKy8qIHN0cnVjdCBmb3IgR1AgdG9vbCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFVSZlRlc3RfR2V0RHBkUGF0aERlbGF5U2VhcmNoVjNfQ25mUGVlcl9PbmVCYW5kIGRwZF9kZWxheV9vbmVfYmFuZFtNQVhfU1VQUE9SVEVEX0JBTkRfSU5ERVhdOworCit9VVJmVGVzdENtZF9HZXREcGRQYXRoRGVsYXlTZWFyY2hWM19DbmZQZHU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNTVJGX1RFU1RfQ01EX1NFVF9EUERfRkFDX1JFU1VMVF9WMyBhbmQgTU1SRl9URVNUX0NNRF9HRVRfRFBEX0ZBQ19SRVNVTFRfVjMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSZXVxZXN0ICovCit0eXBlZGVmIGVudW0KK3sKKyAgIFVSRl9URVNUX1RSQURfQ0FMX0VYRV9JTlZBTElEID0gMCwKKyAgIFVSRl9URVNUX1RSQURfQ0FMX0VYRV9TVEFSVCAgID0gMSwKKyAgIFVSRl9URVNUX1RSQURfQ0FMX0VYRV9FTkQgICAgID0gMgorICAgCit9VVJmVGVzdF9UcmFkQ2FsX0V4ZV9TdGF0dXM7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDMyIGV4ZV9zdGF0dXM7IC8qIFVSZlRlc3RfVHJhZENhbF9FeGVfU3RhdHVzICovCisgICAKK31VUmZUZXN0Q21kX1RyYWRDYWxfUmVxSW5mbzsKKworLyogQ29uZmlybSAqLwordHlwZWRlZiBlbnVtCit7CisgICBVUkZfVEVTVF9UUkFEX0NBTF9DTURfSU5WQUxJRCA9IDAsCisgICBVUkZfVEVTVF9UUkFEX0NBTF9DTURfT0sgICAgICA9IDEKKyAgIAorfVVSZlRlc3RfVHJhZENhbF9DbWRfU3RhdHVzOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQzMiBjbWRfc3RhdHVzOyAvKiBVUmZUZXN0X1RyYWRDYWxfQ21kX1N0YXR1cyAqLworICAgCit9VVJmVGVzdENtZF9UcmFkQ2FsX0NuZkluZm87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKlRYIGNhbGlicmF0aW9uIGRhdGE8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgIGVudW0KK3sKKyAgIFNFVFVQX0ZBSUxfR0VORVJBTCA9IDAsCisgICBTRVRVUF9GQUlMX1RDTV9NSVNNQVRDSCA9IDEsCisgICBTRVRVUF9GQUlMX1RERF9USU1FUl9TVElMTF9SVU5OSU5HID0gMiwKK30gIFVCSU5fTU9ERV9TRVRVUF9GQUlMX01TRzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICBvazsKKyAgICBrYWxfaW50OCAgICAgICAgICAgICAgICBzZXR1cF9yZXN1bHQ7Cit9IFVSZlRlc3RSZXN1bHRVYmluTW9kZVNldHVwOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICBOZXcgRkhDIENvbW1hbmQgd2hlbiBpbnRyb2R1Y2UgZUxOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgIFVSRl9URVNUX0NNRF9GSENfRUxOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICBub19sb29wX2N0cmw7CisgICBrYWxfdWludDE2ICBhZmNfZGFjOworICAga2FsX2Jvb2wgICAgcHdyX2RldDsKKyAgIGthbF91aW50OCAgIHBvd2VyX2N0cmxfbW9kZTsKKyAgIGthbF91aW50OCAgIHZtMVsxMF1bM107CisgICBrYWxfdWludDggICB2bTJbMTBdWzNdOworICAga2FsX3VpbnQxNiAgZGMyZGNfZGFjWzEwXVszXTsKKyAgIGthbF91aW50MTYgIHZiaWFzX2RhY1sxMF1bM107CisgICBrYWxfdWludDggICB0ZW1wZXJhdHVyZTsKKyAgIGthbF9ib29sICAgIGh3QUdDOworICAga2FsX3VpbnQ4ICAgc3RlcF9kdXJhdGlvbjsKKyAgIGthbF91aW50OCAgIGZyZXFfY291bnQ7CisgICBrYWxfdWludDggICBwd3JfY291bnQ7CisgICBrYWxfdWludDggICBmcmVxX3N0YXJ0X2lkeDsKKyAgIGthbF91aW50OCAgIHB3cl9zdGFydF9pZHg7CisgICBrYWxfdWludDggICBwYV9nYWluX3N0YXJ0X2lkeDsKKyAgIGthbF91aW50OCAgIHBkX2dhaW5fc3RhcnRfaWR4OworICAga2FsX3VpbnQ4ICAgbG5hX2dhaW5fc3RhcnRfaWR4OworICAga2FsX3VpbnQ4ICAgZGxfYmFuZFs0MF07CisgICBrYWxfdWludDggICB1bF9iYW5kWzQwXTsKKyAgIGthbF91aW50MTYgIGRsX2ZyZXFbNDBdOworICAga2FsX3VpbnQxNiAgdWxfZnJlcVs0MF07CisgICBrYWxfdWludDggICBwZF9nYWluWzQwXTsKKyAgIGthbF91aW50OCAgIHBhX21vZGVbNDBdOworICAga2FsX3VpbnQxNiAgdmdhX2RhY190cGNfaWR4WzQwXTsKKyAgIGthbF91aW50MTYgIHBhX2dhaW5bNDBdOworICAga2FsX3VpbnQ4ICAgcGFfc2VjdGlvbls0MF07CisgICBrYWxfdWludDE2ICByeF9sbmFfZ2Fpbls0MF07CisgICBrYWxfdWludDE2ICByeGRfbG5hX2dhaW5bNDBdOworICAga2FsX3VpbnQ4ICAgZml4X3BnYV9nYWluWzQwXTsKKyAgIGthbF91aW50OCAgIGlzX2xwbVs0MF07Cit9VVJmVGVzdENtZEZIQ2VMTkFQQjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICBvazsKK30gVVJmVGVzdFJlc3VsdEZIQ2VMTkFMUDsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgTmV3IFJTU0kgQ29tbWFuZCB3aGVuIGludHJvZHVjZSBlTE5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgIFVSRl9URVNUX0NNRF9HRVRfUlNTSV9FTE5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgIG51bV9mcmVxOworICAga2FsX3VpbnQxNiAgZGxfZnJlcVszNl07CisgICBrYWxfdWludDggICB0ZW1wZXJhdHVyZTsKKyAgIGthbF9ib29sICAgIGh3QUdDOworICAga2FsX3VpbnQ4ICAgbW9kZTsKKyAgIGthbF9pbnQxNiAgIHJ4X2dhaW47CisgICBrYWxfdWludDggICByeF9MTkFtb2RlOworICAga2FsX3VpbnQxNiAgcnhfcGdhOworICAga2FsX2ludDE2ICAgcnhkX2dhaW47CisgICBrYWxfdWludDggICByeGRfTE5BbW9kZTsKKyAgIGthbF91aW50MTYgIHJ4ZF9wZ2E7CisgICBrYWxfdWludDggICBhbnRlbm5hX3BhdGg7CisgICBrYWxfYm9vbCAgICBpc19jYWw7CisgICBrYWxfdWludDggICBscG1fbW9kZTsKK31VUmZUZXN0Q21kUlNTSWVMTkFQQjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICBvazsKK30gVVJmVGVzdFJlc3VsdFJTU0llTE5BTFA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICBudW1fZnJlcTsKKyAgIGthbF91aW50MTYgIGRsX2ZyZXFbMzZdOworICAga2FsX2ludDMyICAgcnhfcnNzaVszNl07CisgICBrYWxfaW50MzIgICByeGRfcnNzaVszNl07CisgICBrYWxfdWludDggICByeF9MTkFtb2RlWzM2XTsKKyAgIGthbF91aW50OCAgIHJ4ZF9MTkFtb2RlWzM2XTsKK31VUmZUZXN0UmVzdWx0UlNTSWVMTkFQQjsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgIFRYIFNVUFBPUlQgQ29tbWFuZCBGSVggUkYgUEdBIEdBSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgIFVSRl9URVNUX0NNRF9UWF9EUENIX0ZJWF9QR0FfR0FJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0KK3sKKyAgIFVMMVRTVF9OT19GSVhfUEdBX0dBSU4gPSAwLAorICAgVUwxVFNUX0ZJWF9QR0FfR0FJTl8xMkEgPSAxLAorICAgVUwxVFNUX0ZJWF9QR0FfR0FJTl8xMkIgPSAyCit9VUwxVFNUX0ZJWF9QR0FfR0FJTl9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgVUwxVFNUX0ZJWF9QR0FfR0FJTl9UICAgdWwxdHN0X2ZpeF9wZ2FfZ2FpbjsKKy8qICAgIAorICAgICAgICAgMCA6IG5vIG5lZWQgZml4CisgICAgICAgICAxIDogZml4IFBHQSAxMkEKKyAgICAgICAgIDIgOiBmaXggUEdBIDEyQgorICovCit9VVJmVGVzdENtZERQQ0hUWEZJWFBHQVBCOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgICAgICAgICAgIG9rOworfVVSZlRlc3RSZXN1bHREUENIVFhGSVhQR0FMUDsKKy8vLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS02MjkzIEdldCBGSEMgSW5mb3JtYXRpb24gZnJvbSBUU1QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLy8jZGVmaW5lIFVMMVRTVF9IUE1fUE9JTlRfVjMgNworLy8jZGVmaW5lIFVMMVRTVF9MUE1fUE9JTlRfVjMgNAorLy8jZGVmaW5lIFVMMVRTVF9XQ0RNQV9CQU5EX1NVUFBPUlQgNQorLy8KKy8vdHlwZWRlZiBzdHJ1Y3QKKy8veworLy8gICBrYWxfdWludDggY2FsaWJyYXRpb25fYmFuZF9udW1iZXI7CisvLyAgIGthbF91aW50OCBjYWxpYnJhdGlvbl9iYW5kW1VMMVRTVF9XQ0RNQV9CQU5EX1NVUFBPUlRdOyAgICAgICAgIC8vIGJhbmQgMSA6IGJhbmQgaW5kZXggPSAwCisvL30gVVRTVFJlcUdldENhbEluZm9WM2xwOyAgLy8gcmVxdWVzdCBsb2NhbCBwYXJhbWV0ZXIKKy8vCisvL3R5cGVkZWYgZW51bQorLy97CisvLyAgIFVUU1RfRUxOQV9PRkY9MCwKKy8vICAgVVRTVF9FTE5BX0FMV0FZU19PTiwKKy8vICAgVVRTVF9FTE5BX0FMV0FZU19PTl8yTkRfU0FXLAorLy8gICBVVFNUX0VMTkFfQllQQVNTLAorLy8gICBVVFNUX0VMTkFfQllQQVNTXzJORF9TQVcKKy8vfVVUU1RfRUxOQV9FOworLy8KKy8vCisvL3R5cGVkZWYgc3RydWN0CisvL3sKKy8vICAga2FsX3VpbnQ4ICAgYmFuZDsKKy8vICAga2FsX3VpbnQ4ICAgcnhfZWxuYV9tb2RlOworLy8gICBrYWxfdWludDggICByeGRfZWxuYV9tb2RlOworLy8gICBrYWxfdWludDggICBjYWxfcG9pbnRfaHBtOworLy8gICBrYWxfdWludDggICBjYWxfcG9pbnRfbHBtOworLy8gICBrYWxfdWludDggICByeF9jYWxfc2VxdWVuY3lbVUwxVFNUX0hQTV9QT0lOVF9WMytVTDFUU1RfTFBNX1BPSU5UX1YzXTsKKy8vICAga2FsX3VpbnQ4ICAgcnhfZWxuYV9ieXBhc3NbVUwxVFNUX0hQTV9QT0lOVF9WMytVTDFUU1RfTFBNX1BPSU5UX1YzXTsKKy8vICAga2FsX3VpbnQ4ICAgcnhkX2VsbmFfYnlwYXNzW1VMMVRTVF9IUE1fUE9JTlRfVjMrVUwxVFNUX0xQTV9QT0lOVF9WM107CisvLyAgIGthbF9pbnQxNiAgIHJ4X2NhbF9kbF9wb3dlcl9taW5bVUwxVFNUX0hQTV9QT0lOVF9WMytVTDFUU1RfTFBNX1BPSU5UX1YzXTsgIC8vcy41CisvLyAgIGthbF9pbnQxNiAgIHJ4X2NhbF9kbF9wb3dlcl9tYXhbVUwxVFNUX0hQTV9QT0lOVF9WMytVTDFUU1RfTFBNX1BPSU5UX1YzXTsgIC8vcy41CisvLyAgIGthbF9pbnQxNiAgIHJ4X2NhbF9kbF9wb3dlcltVTDFUU1RfSFBNX1BPSU5UX1YzK1VMMVRTVF9MUE1fUE9JTlRfVjNdOyAgICAgIC8vcy41CisvL31VVFNUQ25mR2V0Q2FsSW5mb1YzcGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2JhbmQgdW5pdCA6IGR5bmFtaWMgc2l6ZQorLy90eXBlZGVmIHN0cnVjdAorLy97CisvLyAgIGthbF91aW50OCBzdXBwb3J0X2JhbmRfbnVtYmVyOworLy99VVRTVENuZkdldENhbEluZm9WM2xwOyAvLyBjb25mb3JtIGxvY2FsIHBhcmFtZXRlcgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTYyOTUgR2V0IEZIQyBJbmZvcm1hdGlvbiBmcm9tIFRTVC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFVMMVRTVF9IUE1fUE9JTlRfVjUgNworI2RlZmluZSBVTDFUU1RfTFBNX1BPSU5UX1Y1IDcKKyNkZWZpbmUgVUwxVFNUX1dDRE1BX0JBTkRfU1VQUE9SVF9WNSA4CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggY2FsaWJyYXRpb25fYmFuZF9udW1iZXI7CisgICBrYWxfdWludDggY2FsaWJyYXRpb25fYmFuZFtVTDFUU1RfV0NETUFfQkFORF9TVVBQT1JUX1Y1XTsgICAgICAgICAvLyBiYW5kIDEgOiBiYW5kIGluZGV4ID0gMAorfSBVVFNUUmVxR2V0Q2FsSW5mb1Y1bHA7ICAvLyByZXF1ZXN0IGxvY2FsIHBhcmFtZXRlcgorCisvLzE4LzEzLjVkQgordHlwZWRlZiBlbnVtCit7CisgICBVVFNUX0VMTkFfT0ZGPTAsCisgICBVVFNUX0VMTkFfQllQQVNTX0xPV19UWF9JU08sCisgICBVVFNUX0VMTkFfQllQQVNTX0hJR0hfVFhfSVNPLAorICAgVVRTVF9FTE5BX0FMV0FZU19PTl9MT1dfVFhfSVNPLAorICAgVVRTVF9FTE5BX0FMV0FZU19PTl9ISUdIX1RYX0lTTywKKyAgIFVUU1RfRUxOQV9CWVBBU1NfTE9XX1RYX0lTT19SX01BVENISU5HCit9VVRTVF9FTE5BX0U7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICBiYW5kOworICAga2FsX3VpbnQ4ICAgcnhfZWxuYV9tb2RlOworICAga2FsX3VpbnQ4ICAgcnhkX2VsbmFfbW9kZTsKKyAgIGthbF91aW50OCAgIGNhbF9wb2ludF9ocG07CisgICBrYWxfdWludDggICBjYWxfcG9pbnRfbHBtOworICAga2FsX3VpbnQ4ICAgcnhfY2FsX3NlcXVlbmN5W1VMMVRTVF9IUE1fUE9JTlRfVjUrVUwxVFNUX0xQTV9QT0lOVF9WNV07CisgICBrYWxfdWludDggICByeF9lbG5hX2J5cGFzc1tVTDFUU1RfSFBNX1BPSU5UX1Y1K1VMMVRTVF9MUE1fUE9JTlRfVjVdOworICAga2FsX3VpbnQ4ICAgcnhkX2VsbmFfYnlwYXNzW1VMMVRTVF9IUE1fUE9JTlRfVjUrVUwxVFNUX0xQTV9QT0lOVF9WNV07CisgICBrYWxfaW50MTYgICByeF9jYWxfZGxfcG93ZXJfbWluW1VMMVRTVF9IUE1fUE9JTlRfVjUrVUwxVFNUX0xQTV9QT0lOVF9WNV07ICAvL3MuNQorICAga2FsX2ludDE2ICAgcnhfY2FsX2RsX3Bvd2VyX21heFtVTDFUU1RfSFBNX1BPSU5UX1Y1K1VMMVRTVF9MUE1fUE9JTlRfVjVdOyAgLy9zLjUKKyAgIGthbF9pbnQxNiAgIHJ4X2NhbF9kbF9wb3dlcltVTDFUU1RfSFBNX1BPSU5UX1Y1K1VMMVRTVF9MUE1fUE9JTlRfVjVdOyAgICAgIC8vcy41CisgICBrYWxfdWludDggICByeF9sbmFfbW9kZVtVTDFUU1RfSFBNX1BPSU5UX1Y1K1VMMVRTVF9MUE1fUE9JTlRfVjVdOworICAga2FsX3VpbnQ4ICAgcnhkX2xuYV9tb2RlW1VMMVRTVF9IUE1fUE9JTlRfVjUrVUwxVFNUX0xQTV9QT0lOVF9WNV07CisgICBrYWxfdWludDggICByeF9sb2NhdGlvbl9pZHhbVUwxVFNUX0hQTV9QT0lOVF9WNStVTDFUU1RfTFBNX1BPSU5UX1Y1XTsKKyAgIGthbF91aW50OCAgIHJ4ZF9sb2NhdGlvbl9pZHhbVUwxVFNUX0hQTV9QT0lOVF9WNStVTDFUU1RfTFBNX1BPSU5UX1Y1XTsKKyAgIGthbF91aW50OCAgIHJ4X2dhaW5fdGFibGU7ICAgICAgIC8vMDoxOGRCICAxOjEzLjVkQgorICAga2FsX3VpbnQ4ICAgcnhkX2dhaW5fdGFibGU7ICAgICAgLy8wOjE4ZEIgIDE6MTMuNWRCCit9VVRTVENuZkdldENhbEluZm9WNXBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iYW5kIHVuaXQgOiBkeW5hbWljIHNpemUKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggc3VwcG9ydF9iYW5kX251bWJlcjsKK31VVFNUQ25mR2V0Q2FsSW5mb1Y1bHA7IC8vIGNvbmZvcm0gbG9jYWwgcGFyYW1ldGVyCisKKy8vLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS02MjkzIFNUQVJUIEZIQy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvLyNkZWZpbmUgVUwxVFNUX0ZIQ19GUkVRVUVOQ1lfTlVNQkVSICAxNQorLy8KKy8vdHlwZWRlZiBzdHJ1Y3QKKy8veworLy8gICBrYWxfdWludDggICBvazsKKy8vICAga2FsX3VpbnQ4ICAgZXJyb3JfY29kZTsKKy8vfVVUU1RDbmZGSENlTE5BVjNscDsKKy8vCisvL3R5cGVkZWYgc3RydWN0CisvL3sKKy8vICAga2FsX3VpbnQ4ICAgY2FsX2JhbmRfbnVtYmVyOworLy8gICBrYWxfdWludDggICBjYWxfYmFuZFtVTDFUU1RfV0NETUFfQkFORF9TVVBQT1JUXTsKKy8vICAga2FsX3VpbnQ4ICAgYW50ZW5uYV9zZXR0aW5nOworLy8gICBrYWxfdWludDggICBzdGVwX2R1cmF0aW9uOworLy99VVRTVFJlcUZIQ2VMTkFWM2xwOworLy8KKy8vdHlwZWRlZiBzdHJ1Y3QKKy8veworLy8vKmNvbW1vbiovCisvLyAgIGthbF91aW50OCAgIGJhbmQ7CisvLyAgIGthbF91aW50OCAgIGZyZXFfY291bnQ7CisvLyAgIGthbF91aW50OCAgIHB3cl9jb3VudDsKKy8vICAga2FsX3VpbnQ4ICAgaHBtX2NhbF9wb2ludDsKKy8vICAga2FsX3VpbnQ4ICAgbHBtX2NhbF9wb2ludDsKKy8vLypSWCovCisvLyAgIGthbF91aW50OCAgIHJ4X2VsbmFfbW9kZTsKKy8vICAga2FsX3VpbnQ4ICAgcnhkX2VsbmFfbW9kZTsKKy8vICAga2FsX3VpbnQ4ICAgaXNfbHBtW1VMMVRTVF9IUE1fUE9JTlRfVjMrVUwxVFNUX0xQTV9QT0lOVF9WMysyXTsKKy8vICAga2FsX3VpbnQ4ICAgcnhfZWxuYV9ieXBhc3NbVUwxVFNUX0hQTV9QT0lOVF9WMytVTDFUU1RfTFBNX1BPSU5UX1YzKzJdOworLy8gICBrYWxfdWludDggICByeGRfZWxuYV9ieXBhc3NbVUwxVFNUX0hQTV9QT0lOVF9WMytVTDFUU1RfTFBNX1BPSU5UX1YzKzJdOworLy8gICBrYWxfdWludDggICByeF9jYWxfc2VxdWVuY3lbVUwxVFNUX0hQTV9QT0lOVF9WMytVTDFUU1RfTFBNX1BPSU5UX1YzKzJdOworLy8vKlRYKi8KKy8vICAga2FsX3VpbnQ4ICAgZml4X3BnYV9nYWluW1VMMVRTVF9IUE1fUE9JTlRfVjMrVUwxVFNUX0xQTV9QT0lOVF9WMysyXTsKKy8vICAga2FsX3VpbnQ4ICAgcGFfbW9kZVtVTDFUU1RfSFBNX1BPSU5UX1YzK1VMMVRTVF9MUE1fUE9JTlRfVjMrMl07CisvLyAgIGthbF91aW50OCAgIHZnYV9kYWNfdHBjX2lkeFtVTDFUU1RfSFBNX1BPSU5UX1YzK1VMMVRTVF9MUE1fUE9JTlRfVjMrMl07CisvLyAgIGthbF91aW50OCAgIHBhX3NlY3Rpb25bVUwxVFNUX0hQTV9QT0lOVF9WMytVTDFUU1RfTFBNX1BPSU5UX1YzKzJdOworLy8gICBrYWxfdWludDE2ICBwYV9nYWluW1VMMVRTVF9IUE1fUE9JTlRfVjMrVUwxVFNUX0xQTV9QT0lOVF9WMysyXTsKKy8vLypSWCovCisvLyAgIGthbF9pbnQxNiAgcnhfY2FsX2RsX3Bvd2VyW1VMMVRTVF9IUE1fUE9JTlRfVjMrVUwxVFNUX0xQTV9QT0lOVF9WMysyXTsKKy8vLypVQVJGQ04qLworLy8gICBrYWxfdWludDE2ICBkbF91YXJmY25bVUwxVFNUX0ZIQ19GUkVRVUVOQ1lfTlVNQkVSXTsKKy8vICAga2FsX3VpbnQxNiAgdWxfdWFyZmNuW1VMMVRTVF9GSENfRlJFUVVFTkNZX05VTUJFUl07CisvLy8qSW5pdGlhbCBmaWxlIGRhdGEqLworLy8gICBVUmZUZXN0VFhEYVRhSXRlbSAgICB0eF9jYWxfZGF0YV9pbmZvOworLy8gICBVVFNUUGF0aGxvc3NWMyAgICAgICByeF9jYWxfZGF0YV9pbmZvOworLy8gICBVVFNUUGF0aGxvc3NWMyAgICAgICByeGRfY2FsX2RhdGFfaW5mbzsKKy8vfVVUU1RSZXFGSENlTE5BVjNwYjsgICAgLy9iYW5kIHVuaXQgIGl0IGRlcGVuZHMgb24gbG9jYWwgcGFyYW1ldGVyIGNhbCBiYW5kIG51bWJlciBleHBlbmQgdG8gYXJyYXkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS02Mjk1IFNUQVJUIEZIQy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFVMMVRTVF9GSENfRlJFUVVFTkNZX05VTUJFUiAgMTUKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgIG9rOworICAga2FsX3VpbnQ4ICAgZXJyb3JfY29kZTsKK31VVFNUQ25mRkhDVjVscDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgIGNhbF9iYW5kX251bWJlcjsKKyAgIGthbF91aW50OCAgIGNhbF9iYW5kW1VMMVRTVF9XQ0RNQV9CQU5EX1NVUFBPUlRfVjVdOworICAga2FsX3VpbnQ4ICAgYW50ZW5uYV9zZXR0aW5nOworICAga2FsX3VpbnQ4ICAgc3RlcF9kdXJhdGlvbjsKK31VVFNUUmVxRkhDVjVscDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKy8qY29tbW9uKi8KKyAgIGthbF91aW50OCAgIGJhbmQ7CisgICBrYWxfdWludDggICBmcmVxX2NvdW50OworICAga2FsX3VpbnQ4ICAgcHdyX2NvdW50OworICAga2FsX3VpbnQ4ICAgaHBtX2NhbF9wb2ludDsKKyAgIGthbF91aW50OCAgIGxwbV9jYWxfcG9pbnQ7CisvKlJYKi8KKyAgIGthbF91aW50OCAgIHJ4X2VsbmFfbW9kZTsKKyAgIGthbF91aW50OCAgIHJ4ZF9lbG5hX21vZGU7CisgICBrYWxfdWludDggICBpc19scG1bVUwxVFNUX0hQTV9QT0lOVF9WNStVTDFUU1RfTFBNX1BPSU5UX1Y1XTsKKyAgIGthbF91aW50OCAgIHJ4X2VsbmFfYnlwYXNzW1VMMVRTVF9IUE1fUE9JTlRfVjUrVUwxVFNUX0xQTV9QT0lOVF9WNV07CisgICBrYWxfdWludDggICByeGRfZWxuYV9ieXBhc3NbVUwxVFNUX0hQTV9QT0lOVF9WNStVTDFUU1RfTFBNX1BPSU5UX1Y1XTsKKyAgIGthbF91aW50OCAgIHJ4X2NhbF9zZXF1ZW5jeVtVTDFUU1RfSFBNX1BPSU5UX1Y1K1VMMVRTVF9MUE1fUE9JTlRfVjVdOworLypUWCovCisgICAvL2thbF91aW50OCAgIGZpeF9wZ2FfZ2FpbltVTDFUU1RfSFBNX1BPSU5UX1Y1K1VMMVRTVF9MUE1fUE9JTlRfVjVdOworICAga2FsX3VpbnQ4ICAgcGFfbW9kZVtVTDFUU1RfSFBNX1BPSU5UX1Y1K1VMMVRTVF9MUE1fUE9JTlRfVjVdOworICAga2FsX3VpbnQ4ICAgdmdhX2RhY190cGNfaWR4W1VMMVRTVF9IUE1fUE9JTlRfVjUrVUwxVFNUX0xQTV9QT0lOVF9WNV07CisgICBrYWxfdWludDggICBwYV9zZWN0aW9uW1VMMVRTVF9IUE1fUE9JTlRfVjUrVUwxVFNUX0xQTV9QT0lOVF9WNV07CisgICBrYWxfdWludDE2ICBwYV9nYWluW1VMMVRTVF9IUE1fUE9JTlRfVjUrVUwxVFNUX0xQTV9QT0lOVF9WNV07CisvKlJYKi8KKyAgIGthbF9pbnQxNiAgcnhfY2FsX2RsX3Bvd2VyW1VMMVRTVF9IUE1fUE9JTlRfVjUrVUwxVFNUX0xQTV9QT0lOVF9WNV07CisvKlVBUkZDTiovCisgICBrYWxfdWludDE2ICBkbF91YXJmY25bVUwxVFNUX0ZIQ19GUkVRVUVOQ1lfTlVNQkVSXTsKKyAgIGthbF91aW50MTYgIHVsX3VhcmZjbltVTDFUU1RfRkhDX0ZSRVFVRU5DWV9OVU1CRVJdOworICAga2FsX3VpbnQ4ICAgcnhfZ2Fpbl90YWJsZTsgICAgICAgLy8wOjE4ZEIgIDE6MTMuNWRCCisgICBrYWxfdWludDggICByeGRfZ2Fpbl90YWJsZTsgICAgICAvLzA6MThkQiAgMToxMy41ZEIKKy8qSW5pdGlhbCBmaWxlIGRhdGEqLworICAgVVJmVGVzdFRYRGFUYUl0ZW0gICAgdHhfY2FsX2RhdGFfaW5mbzsKKyAgIFVUU1RQYXRobG9zc1YzICAgICAgIHJ4X2NhbF9kYXRhX2luZm87CisgICBVVFNUUGF0aGxvc3NWMyAgICAgICByeGRfY2FsX2RhdGFfaW5mbzsKK31VVFNUUmVxRkhDVjVwYjsgICAgLy9iYW5kIHVuaXQgIGl0IGRlcGVuZHMgb24gbG9jYWwgcGFyYW1ldGVyIGNhbCBiYW5kIG51bWJlciBleHBlbmQgdG8gYXJyYXkKKworLy8vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTYyOTMgR0VUIEZIQyBSRVNVTFQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8vdHlwZWRlZiBzdHJ1Y3QKKy8veworLy8gICBrYWxfdWludDE2ICAgICB1bF91YXJmY247CisvLyAgIGthbF9pbnQxNiAgICAgIHBkX3ZhbHVlX2g7CisvLyAgIGthbF9pbnQxNiAgICAgIHBkX3ZhbHVlX207CisvLyAgIGthbF9pbnQxNiAgICAgIHBkX3ZhbHVlX2w7CisvL30gVUwxVFNUX0ZIQ19QRF9SRVNVTFRfSU5GTyA7CisvLworLy90eXBlZGVmIHN0cnVjdAorLy97CisvLyAgIGthbF91aW50MTYgIGRsX3VhcmZjbjsKKy8vICAga2FsX2ludDE2ICAgaHBtX3Jzc2lbVUwxVFNUX0hQTV9QT0lOVF9WM107CisvLyAgIGthbF9pbnQxNiAgIGxwbV9yc3NpW1VMMVRTVF9MUE1fUE9JTlRfVjNdOworLy99IFVMMVRTVF9GSENfUEFUSExPU1NfUkVTVUxUX0lORk8gOworLy8KKy8vdHlwZWRlZiBzdHJ1Y3QKKy8veworLy8gICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICBiYW5kOworLy8gICBVTDFUU1RfRkhDX1BEX1JFU1VMVF9JTkZPICAgICAgICBwZF9yZXN1bHRbVUwxVFNUX0ZIQ19GUkVRVUVOQ1lfTlVNQkVSXTsKKy8vICAgVUwxVFNUX0ZIQ19QQVRITE9TU19SRVNVTFRfSU5GTyAgcnhfcnNzaV9yZXN1bHRbVUwxVFNUX0ZIQ19GUkVRVUVOQ1lfTlVNQkVSXTsKKy8vICAgVUwxVFNUX0ZIQ19QQVRITE9TU19SRVNVTFRfSU5GTyAgcnhkX3Jzc2lfcmVzdWx0W1VMMVRTVF9GSENfRlJFUVVFTkNZX05VTUJFUl07CisvL30gVVRTVENuZkdldEZIQ1Jlc3VsdFYzcGIgOyAgICAgLy9iYW5kIHVuaXQKKy8vCisvL3R5cGVkZWYgc3RydWN0CisvL3sKKy8vICAga2FsX2Jvb2wgICAgb2s7CisvLyAgIGthbF91aW50OCAgIGJhbmRfbnVtYmVyOyAgICAgIC8vIGluZGljYXRlIGhvdyBtYW55IGJhbmQncyByZXBvcnQgaW4gcGVlciBidWZmZXIKKy8vfSBVVFNUQ25mR2V0RkhDUmVzdWx0VjNscDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS02Mjk1IEdFVCBGSEMgUkVTVUxULS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgICAgdWxfdWFyZmNuOworICAga2FsX2ludDE2ICAgICAgcGRfdmFsdWVfaDsKKyAgIGthbF9pbnQxNiAgICAgIHBkX3ZhbHVlX207CisgICBrYWxfaW50MTYgICAgICBwZF92YWx1ZV9sOworfSBVTDFUU1RfRkhDX1BEX1JFU1VMVF9JTkZPIDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgIGRsX3VhcmZjbjsKKyAgIGthbF9pbnQxNiAgIGhwbV9yc3NpW1VMMVRTVF9IUE1fUE9JTlRfVjVdOworICAga2FsX2ludDE2ICAgbHBtX3Jzc2lbVUwxVFNUX0xQTV9QT0lOVF9WNV07Cit9IFVMMVRTVF9GSENfUEFUSExPU1NfUkVTVUxUX0lORk8gOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgYmFuZDsKKyAgIFVMMVRTVF9GSENfUERfUkVTVUxUX0lORk8gICAgICAgIHBkX3Jlc3VsdFtVTDFUU1RfRkhDX0ZSRVFVRU5DWV9OVU1CRVJdOworICAgVUwxVFNUX0ZIQ19QQVRITE9TU19SRVNVTFRfSU5GTyAgcnhfcnNzaV9yZXN1bHRbVUwxVFNUX0ZIQ19GUkVRVUVOQ1lfTlVNQkVSXTsKKyAgIFVMMVRTVF9GSENfUEFUSExPU1NfUkVTVUxUX0lORk8gIHJ4ZF9yc3NpX3Jlc3VsdFtVTDFUU1RfRkhDX0ZSRVFVRU5DWV9OVU1CRVJdOworfSBVVFNUQ25mR2V0RkhDUmVzdWx0VjVwYiA7ICAgICAvL2JhbmQgdW5pdAorCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgb2s7CisgICBrYWxfdWludDggICBiYW5kX251bWJlcjsgICAgICAvLyBpbmRpY2F0ZSBob3cgbWFueSBiYW5kJ3MgcmVwb3J0IGluIHBlZXIgYnVmZmVyCit9IFVUU1RDbmZHZXRGSENSZXN1bHRWNWxwOworLypmb3IgOTMtOTUgY28tZmlsZSAsICJHZW4iOnN0YW5kIGZvciBhbnkgZ2VuZXJhdGlvbiovCit0eXBlZGVmIFVUU1RDbmZHZXRGSENSZXN1bHRWNXBiIFVUU1RDbmZHZXRGSENSZXN1bHRHZW5wYjsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS02Mjk1IEdFVCBSU1NJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgIGh3QUdDOworICAga2FsX2Jvb2wgICAgcnhfZWxuYV9ieXBhc3M7CisgICBrYWxfYm9vbCAgICByeGRfZWxuYV9ieXBhc3M7CisgICBrYWxfYm9vbCAgICBjb250aV9yc3NpOworICAga2FsX3VpbnQ4ICAgcnhfZWxuYV9tb2RlOworICAga2FsX3VpbnQ4ICAgcnhkX2VsbmFfbW9kZTsKKyAgIGthbF91aW50OCAgIHRlbXBlcmF0dXJlOworICAga2FsX3VpbnQ4ICAgYW50ZW5uYV9wYXRoOworICAga2FsX3VpbnQ4ICAgbHBtX21vZGU7CisgICBrYWxfdWludDE2ICB1YXJmY247CisgICBrYWxfdWludDE2ICByeF9yZl9nYWluOworICAga2FsX3VpbnQxNiAgcnhkX3JmX2dhaW47CisgICBrYWxfdWludDE2ICByeF9kaWdpdGFsX2dhaW47CisgICBrYWxfdWludDE2ICByeGRfZGlnaXRhbF9nYWluOworICAga2FsX3VpbnQ4ICAgcnhfZ2Fpbl90YWJsZTsKKyAgIGthbF91aW50OCAgIHJ4ZF9nYWluX3RhYmxlOworfSBVVFNUUmVxR2V0UlNTSVY1bHA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICBvazsKKyAgIGthbF91aW50OCAgIHJ4X2VsbmFfYnlwYXNzOworICAga2FsX3VpbnQ4ICAgcnhkX2VsbmFfYnlwYXNzOworICAga2FsX3VpbnQ4ICAgcnhfbG5hX21vZGU7CisgICBrYWxfdWludDggICByeGRfbG5hX21vZGU7CisgICBrYWxfdWludDE2ICB1YXJmY247CisgICBrYWxfaW50MTYgICByeF9yc3NpOworICAga2FsX2ludDE2ICAgcnhkX3Jzc2k7CisgICBrYWxfdWludDE2ICByeF91c2VkX2dhaW47CisgICBrYWxfdWludDE2ICByeGRfdXNlZF9nYWluOworfSBVVFNUQ25mR2V0UlNTSVY1bHA7CisvKmZvciA5My05NSBjby1maWxlICwgIkdlbiI6c3RhbmQgZm9yIGFueSBnZW5lcmF0aW9uKi8KK3R5cGVkZWYgVVRTVENuZkdldFJTU0lWNWxwIFVUU1RDbmZHZXRSU1NJR2VubHA7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNjI5NSBwb3dlciB0byBnYWluLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgIHJ4X2VsbmFfYnlwYXNzOworICAga2FsX2Jvb2wgICAgcnhkX2VsbmFfYnlwYXNzOworICAga2FsX3VpbnQ4ICAgYW50ZW5uYV9wYXRoOworICAga2FsX3VpbnQ4ICAgbHBtX21vZGU7CisgICBrYWxfdWludDggICByeF9lbG5hX21vZGU7CisgICBrYWxfdWludDggICByeGRfZWxuYV9tb2RlOworICAga2FsX3VpbnQ4ICAgcnhfY2FsX3NlcXVlbmN5OworICAga2FsX2ludDE2ICAgcnhfZGxfcG93ZXI7CisgICBrYWxfdWludDggICByeF9nYWluX3RhYmxlOworICAga2FsX3VpbnQ4ICAgcnhkX2dhaW5fdGFibGU7Cit9IFVUU1RSZXFQd3J0b0dhaW5WNWxwOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgb2s7CisgICBrYWxfdWludDE2ICByeF9kaWdpdGFsX2dhaW47CisgICBrYWxfdWludDE2ICByeGRfZGlnaXRhbF9nYWluOworICAga2FsX3VpbnQxNiAgcnhfcmZfZ2FpbjsKKyAgIGthbF91aW50MTYgIHJ4ZF9yZl9nYWluOworfVVUU1RDbmZQd3J0b0dhaW5WNWxwOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNjI5NSBsbmEgdG8gZ2Fpbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICByeF9lbG5hX2J5cGFzczsKKyAgIGthbF9ib29sICAgIHJ4ZF9lbG5hX2J5cGFzczsKKyAgIGthbF91aW50OCAgIGJhbmQ7CisgICBrYWxfdWludDggICBhbnRlbm5hX3BhdGg7CisgICBrYWxfdWludDggICBscG1fbW9kZTsKKyAgIGthbF91aW50OCAgIHJ4X2xuYV9tb2RlOworICAga2FsX3VpbnQ4ICAgcnhkX2xuYV9tb2RlOworICAga2FsX3VpbnQ4ICAgcnhfZWxuYV9tb2RlOworICAga2FsX3VpbnQ4ICAgcnhkX2VsbmFfbW9kZTsKKyAgIGthbF91aW50OCAgIHJ4X2dhaW5fdGFibGU7CisgICBrYWxfdWludDggICByeGRfZ2Fpbl90YWJsZTsKK30gVVRTVFJlcUxuYXRvR2FpblY1bHA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICBvazsKKyAgIGthbF91aW50MTYgIHJ4X2RpZ2l0YWxfZ2FpbjsKKyAgIGthbF91aW50MTYgIHJ4ZF9kaWdpdGFsX2dhaW47CisgICBrYWxfdWludDE2ICByeF9yZl9nYWluOworICAga2FsX3VpbnQxNiAgcnhkX3JmX2dhaW47CisgICBrYWxfaW50MTYgICBkbF9wb3dlcjsKK31VVFNUQ25mTG5hdG9HYWluVjVscDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS02MjkzIEFURSB0b29sIFQtcHV0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLy90cmlnZ2VyIElRIGR1bXAKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgZW5hYmxlX2lxX2R1bXA7ICAgICAgICAgICAgICAvL2VuYWJsZSBvciBkaXNhYmxlIElRIGR1bXAgbW9kZS4KKyAgIGthbF91aW50MTYgICBhbnRfaWR4OyAgICAgICAgICAgICAgICAgLy8wPVJYIG1haW4gYW50ZW5uYSwgMT1SWCBkaXZlcnNpdHkgYW50ZW5uYS4KK31VVFNUUmVxVHJpZ2dlcklxRHVtcE1vZGVWM2xwOyAgLy8gcmVxdWVzdCBsb2NhbCBwYXJhbWV0ZXIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICBkdW1wX3N0YXR1czsgICAgICAgICAgICAgLy8xPWVuYWJsZSBJUSBkdW1wIG1vZGUgc3VjY2Vzc2Z1bGx5Cit9VVRTVENuZlRyaWdnZXJJcUR1bXBNb2RlVjNscDsgLy8gY29uZm9ybSBsb2NhbCBwYXJhbWV0ZXIKKworLy9nZXQgSVEgZHVtcCByZXN1bHQKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgaXNfZGF0YV9yZWFkeTsgICAgICAgICAgIC8vMT1JUSByYXcgZGF0YSBpcyByZWFkeQorICAga2FsX3VpbnQxNiAgIGRhdGFfc2VjdGlvbl9sZW5ndGg7ICAgICAvL2xlbmd0aCBvZiBJUSByYXcgZGF0YSBpbiBjb3JyZXNwb25kaW5nIHBlZXIgYnVmZmVyCit9VVRTVENuZkdldElxRHVtcFJlc3VsdFYzbHA7IC8vIGNvbmZpcm0gbG9jYWwgcGFyYW1ldGVyCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfaW50MTYgICBpX2RhdGE7CisgICBrYWxfaW50MTYgICBxX2RhdGE7Cit9VVRTVENuZkdldElxRHVtcFJlc3VsdFYzcGI7Ly8gY29uZmlybSBwZWVyIGJ1ZmZlciA6UkZFUSB1bml0IAorLy9zZXQgUkZFUQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICByZmVxX3NldF9udW07IC8vbnVtYmVyIG9mIHN1YmJhbmQgUkZFUSB0byB1cGRhdGUKK31VVFNUUmVxU2V0UmZlcVN1YmJhbmRWM2xwOyAgIC8vIHJlcXVlc3QgbG9jYWwgcGFyYW1ldGVyCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgIGJhbmQ7ICAgICAgICAgICAgICAgICAgIC8vVU1UUyBiYW5kCisgICBrYWxfdWludDE2ICAgIHN1YmJhbmRfaWR4OyAgICAgICAgICAgIC8vd2hpY2ggc3ViLWJhbmQgdGhhdCB1c2VyIHdhbnQgdG8gZmlsbAorICAga2FsX3VpbnQxNiAgICBtYXhfdWFyZmNuOyAgICAgICAgICAgICAvL21heCB1YXJmY24gb2YgdGhpcyBzdWJiYW5kCisgICBrYWxfdWludDggICAgIGFudF9pZHg7ICAgICAgICAgICAgICAgIC8vd2hpY2ggYW50ZW5uYSBzaG91bGQgYmUgd3JpdGUgaW4gdGhpcyBjb21tYW5kLiAwOiBSWCBNYWluLCAxOlJYIERpdgorICAga2FsX2Jvb2wgICAgICByZmVxX2VuYWJsZTsgICAgICAgICAgICAvL1JGRVEgZW5hYmxlIG9yIG5vdC4gCisgICBrYWxfaW50MTYgICAgIHJmZXFfY29lZl9yZWFsWzddOyAgICAgIC8vUkZFUSByZWFsIHBhcnQgY29lZmZpY2llbnQuIDcgdGFwcy4KKyAgIGthbF9pbnQxNiAgICAgcmZlcV9jb2VmX2ltYWdbN107ICAgICAgLy9SRkVRIGltYWdlIHBhcnQgY29lZmZpY2llbnQuIDcgdGFwcy4gCQorfVVUU1RSZXFTZXRSZmVxU3ViYmFuZFYzcGI7ICAvLyByZXF1ZXN0IHBlZXIgYnVmZmVyIDogc3ViYmFuZCB1bml0CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgaXNfcmZlcV9zZXQ7ICAgICAgICAgICAgIC8vMT1SRkVRIGlzIHNldCB0byBOVlJBTSBzdWNjZXNzZnVsbHkKK31VVFNUQ25mU2V0UmZlcVN1YmJhbmRWM2xwOyAvLyBjb25maXJtIGxvY2FsIHBhcmFtZXRlcgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTYyOTUgZ2V0L3NldCBOU0ZUIFRYIFBPV0VSIG9mZnNldC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCBiYW5kOworfVVUU1RSZXFHZXRUWHBvd2VyT2Zmc2V0VjVscDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCBiYW5kOworICAga2FsX2ludDE2IG9mZnNldDsKK31VVFNUQ25mR2V0VFhwb3dlck9mZnNldFY1bHA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCB1cGRhdGVudnJhbTsKKyAgIGthbF91aW50OCBiYW5kOworICAga2FsX3VpbnQxNiB1bF91YXJmY247CisgICBrYWxfaW50MTYgb2Zmc2V0OworfVVUU1RSZXFTZXRUWHBvd2VyT2Zmc2V0VjVscDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sIG9rOworfVVUU1RDbmZTZXRUWHBvd2VyT2Zmc2V0VjVscDsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBVUmZUZXN0Q21kVHlwZSAgIHVyZl90ZXN0X2NtZF90eXBlOworICAgdm9pZCAgICAgICAgICAgKCpoYW5kbGVyKSggaWxtX3N0cnVjdCogKTsKK31VTDFUU1RfUkZfVEVTVF9IQU5ETEVSX1Q7CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICpcCit8KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVfUkVTRVRfQklUX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqfAorXCogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQzMiAgbWVhbmluZ2xlc3M7Cit9IFVSRlRlc3RDbWRSZXNldEJFUlJlc3VsdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sIG9rOworICAga2FsX3VpbnQzMiAgdTRUb3RhbEJpdHM7CisgICBrYWxfdWludDMyICB1NEVycm9yQml0czsKK30gVVJGVGVzdFJlc3VsdFJlc2V0QkVSUmVzdWx0OworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiB1bmlvbgoreworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91MVJmQmFuZDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdTFQd3JDdHJsTW9kZTsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdTFUYWJsZVR5cGU7ICAgICAgICAgICAgICAgIC8vIDE6IHNwZWNpYWwgdGFibGUgZm9yIGNhbGlicmF0aW9uLCAyOiBub3JtYWwgdGFibGUKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdTFJTFBDU3RlcDsKKyAgIGthbF91aW50MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdTJUeFBjbEluZGV4OworICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmZfYmFuZF9pZHg7CisvKiBQQSBkcmlmdCBjb21wZW5zYXRpb24gKi8KKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX1BhRHJpZnQ7ICAgICAgICAgICAgICAgICAgIC8qUjg8IFxicmllZiB0aGUgcGFyYW1ldGVyIHRvIFVMMSBmb3IgUEEgZHJpZnQgY29tcGVuc2F0aW9uIHNldHRpbmcgKDE6IHR1cm4gb24sIDA6IHR1cm4gb2ZmKSAqLworLyogUjggUkYgdG9vbCAqLworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfNW1oejsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX21haW47CisgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3JCU0lEYXRhOworICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yQlNJQWRkcjsKKy8qIERDWE8gZGV2ZWxvcG1lbnQgKi8KKyAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdTRDYXBJZDsKKy8qIFdNIFN3aXRjaCAqLworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWJpbl9mZGRfbW9kZV9pbml0OyAgICAgICAgICAgLy8gIDEgOiBVQklOIG1vZGUgSW5pdCAzRyBGREQgLCAgICAgIDAgOiBVQklOIG1vZGUgZGUtaW5pdCAzRyBGREQKKyAgIFVSZlRlc3RDbWRBRkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmYzsKKyAgIFVSZlRlc3RDbWRSU0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzY3A7CisgICBVUmZUZXN0Q21kVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeV9vcF9jb2RlOworICAgVVJmVGVzdENtZFR4RFBDaCAgICAgICAgICAgICAgICAgICAgICAgICAgdHhkcGNoOworICAgVVJmVGVzdENtZFJ4RFBDaCAgICAgICAgICAgICAgICAgICAgICAgICAgcnhkcGNoOworICAgVVJmVGVzdENtZFR4QWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgdHhhY2Nlc3M7CisgICBVUkZUZXN0Q21kUmVsb2FkTlZSQU0gICAgICAgICAgICAgICAgICAgICByZWxvYWQ7CisgICBVUmZUZXN0Q21kU2V0TUlQSUNvZGVXb3JkICAgICAgICAgICAgICAgICBzZXRfbWlwaV9jd19wYXJhbTsKKyAgIFVSZlRlc3RDbWRHZXRSZlRlbXBTZW5zb3IgICAgICAgICAgICAgICAgIHJmVGVtcGVyYXR1cmU7CisgICBVTDFEX1JGX1RYX1BBX0FQQ19SRVFfVCAgICAgICAgICAgICAgICAgICBtX3JUeFBhQXBjOworICAgVUwxRF9SRl9HRVRfUFdSX1RIUl9SRVFfVCAgICAgICAgICAgICAgICAgbV9yR2V0UHdyVGhyOworICAga2FsX2ludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pNEljc0NlbGxQb3dlcjsgICAgICAgICAgICAgLyoqPCBcYnJpZWYgcGFzcyBjZWxsIHBvd2VyIHRvIFVMMSB0byBjaG9vc2UgdGhlIGJlc3QgaW5pdGlhbCBnYWluIGZvciBJQ1MgKi8KKyAgIFVSRlRlc3RDbWRSZXNldEJFUlJlc3VsdCAgICAgICAgICAgICAgICAgIHJlc2V0QkVSUmVzdWx0OworICAgVVJmVGVzdENtZFNldENhbERhdGEgICAgICAgICAgICAgICAgICAgICAgc2V0X2NhbF9kYXRhX2NvbW1hbmRfbHA7ICAgICAgLy9hZnRlciA2MjkyCisgICBVUmZUZXN0Q21kR2V0Q2FsRGF0YSAgICAgICAgICAgICAgICAgICAgICBnZXRfY2FsX2RhdGFfY29tbWFuZF9scDsgICAgICAvL2FmdGVyIDYyOTIKKyAgIC8vVVRTVFJlcUdldENhbEluZm9WM2xwICAgICAgICAgICAgICAgICAgICAgZ2V0X2NhbF9pbmZvX3YzX2xwOyAgICAgICAgICAgLy82MjkzIGdldCBGSEMgaW5mb21hdGlvbiBmcm9tIFJGRCAmIEZFQworICAgLy9VVFNUUmVxRkhDZUxOQVYzbHAgICAgICAgICAgICAgICAgICAgICAgICBmaGNfY29udHJvbF92M19scDsgICAgICAgICAgICAvLzYyOTMgRkhDIGZsb3cgY29udHJvbCBpbmZvbWF0aW9uCisgICAvL1VUU1RSZXFHZXRSU1NJVjNscCAgICAgICAgICAgICAgICAgICAgICAgIGdldF9yc3NpX3YzX2xwOyAgICAgICAgICAgICAgIC8vNjI5MyBSRiB0b29sIFJTU0kKKyAgIC8vVVRTVFJlcVB3cnRvR2FpblYzbHAgICAgICAgICAgICAgICAgICAgICAgcHdyX3RvX2dhaW5fdjNfbHA7ICAgICAgICAgICAgLy82MjkzIFRyYWRrLCBOU0ZUCisgICAvL1VUU1RSZXFMbmF0b0dhaW5WM2xwICAgICAgICAgICAgICAgICAgICAgIGxuYV90b19nYWluX3YzX2xwOyAgICAgICAgICAgIC8vNjI5MyBSRiB0b29sIGdldCBSU1NJIGNhbGN1bGF0b3IKKyAgIC8vVVJmVGVzdENtZF9TZXRSeFR4Q2FsRGF0YV9SZXFQYXJhbV9WMyAgICAgc2V0X1J4VHhfY2FsX2RhdGFfY29tbWFuZF9scDsgIC8vYWZ0ZXI2MjkzCisgICAvL1VSZlRlc3RDbWRfR2V0UnhUeENhbERhdGFfUmVxUGFyYW1fVjMgICAgIGdldF9SeFR4X2NhbF9kYXRhX2NvbW1hbmRfbHA7ICAvL2FmdGVyNjI5MworICAgVVRTVENtZFJTQ1BWM2xwICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNjcF92M19scDsKKyAgIFVUU1RDbWRBRkNWM2xwICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmY192M19scDsKKyAgIC8vVVRTVENtZExQQ2FsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdhX3R5cGVfdjNfbHA7CisgICBVVFNUUmVxR2V0Q2FsSW5mb1Y1bHAgICAgICAgICAgICAgICAgICAgICBnZXRfY2FsX2luZm9fdjVfbHA7ICAgICAgICAgICAvLzYyOTUgZ2V0IEZIQyBpbmZvbWF0aW9uIGZyb20gUkZEICYgRkVDCisgICBVVFNUUmVxRkhDVjVscCAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaGNfY29udHJvbF92NV9scDsgICAgICAgICAgICAvLzYyOTUgRkhDIGZsb3cgY29udHJvbCBpbmZvbWF0aW9uCisgICBVUmZUZXN0Q21kX0dldFJ4VHhDYWxEYXRhX1JlcVBhcmFtX1Y1ICAgICBnZXRfUnhUeF9jYWxfZGF0YV9jb21tYW5kX3Y1X2xwOyAgLy9hZnRlcjYyOTUKKyAgIFVSZlRlc3RDbWRfU2V0UnhUeENhbERhdGFfUmVxUGFyYW1fVjUgICAgIHNldF9SeFR4X2NhbF9kYXRhX2NvbW1hbmRfdjVfbHA7ICAvL2FmdGVyNjI5NQorICAgVVRTVFJlcUdldFJTU0lWNWxwICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3Jzc2lfdjVfbHA7ICAgICAgICAgICAgICAgLy82Mjk1IFJGIHRvb2wgUlNTSQorICAgVVRTVFJlcVB3cnRvR2FpblY1bHAgICAgICAgICAgICAgICAgICAgICAgcHdyX3RvX2dhaW5fdjVfbHA7ICAgICAgICAgICAgLy82Mjk1IFRyYWRrLCBOU0ZUCisgICBVVFNUUmVxTG5hdG9HYWluVjVscCAgICAgICAgICAgICAgICAgICAgICBsbmFfdG9fZ2Fpbl92NV9scDsgICAgICAgICAgICAvLzYyOTUgUkYgdG9vbCBnZXQgUlNTSSBjYWxjdWxhdG9yCisgICBVVFNUUmVxVHJpZ2dlcklxRHVtcE1vZGVWM2xwICAgICAgICAgICAgICB0cmlnZ2VyX2lxX2R1bXBfdjNfbHA7ICAgIC8vVHJpZ2dlciBJUSBkdW1wCisgICBVVFNUUmVxU2V0UmZlcVN1YmJhbmRWM2xwICAgICAgICAgICAgICAgICBzZXRfcmZlcV9zdWJiYW5kX3YzX2xwOyAgIC8vU2V0IFJGRVEgc3ViYmFuZCByZXN1bHQKKyAgIFVUU1RSZXFHZXRUWHBvd2VyT2Zmc2V0VjVscCAgICAgICAgICAgICAgIGdldF90eF9wb3dlcl9vZmZzZXRfdjVfbHA7ICAgIC8vNjI5NSBnZXQgVFggcG93ZXIgb2Zmc2V0IGluIE5TRlQKKyAgIFVUU1RSZXFTZXRUWHBvd2VyT2Zmc2V0VjVscCAgICAgICAgICAgICAgIHNldF90eF9wb3dlcl9vZmZzZXRfdjVfbHA7ICAgIC8vNjI5NSBzZXQgVFggcG93ZXIgb2Zmc2V0IGluIE5TRlQKK31VUmZUZXN0Q21kUGFyYW07CisKK3R5cGVkZWYgdW5pb24KK3sKKyAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnZyYW1BY2Nlc3NSZXN1bHQ7CisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TG5hTW9kZTsKKyAgIGthbF9pbnQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdTJQd3JEZXRSZXN1bHQ7CisgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBic2lfZGF0YTsKKyAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdTRNYXhDYXBJZDsKKyAgIEZUX1VNVFNfTXNDYXBhYmlsaXR5RXggICAgICAgICAgICAgICAgICAgIG1fclRhcmdldENhcGFiaWxpdHk7CisgICBGVF9VTVRTX05TRlRMaW5rU3RhdHVzUmVwb3J0ICAgICAgICAgICAgICBtX3JOU0ZUTGlua1N0YXR1c1JlcG9ydDsKKyAgIFVSZk5zZnRMaXN0TW9kZUNuZiAgICAgICAgICAgICAgICAgICAgICAgIG1fck5TRlRMaXN0TW9kZUxpbmtTdGF0dXNSZXBvcnQ7CisgICBVTDFEX1JGX05TRlRfQkVUX0JJVF9DTlRfRk9SX0JFUl9DTkZfVCAgICBtX3JOU0ZUQkVSUmVzdWx0OworICAgVVJmVGVzdFJlc3VsdEFGQyAgICAgICAgICAgICAgICAgICAgICAgICAgYWZjOworICAgVVJmVGVzdFJlc3VsdFJGSUQgICAgICAgICAgICAgICAgICAgICAgICAgcmZpZDsKKyAgIFVSZkNoZWNrSWZGdW5jRXhpc3QgICAgICAgICAgICAgICAgICAgICAgIENoZWNrSWZGdW5jRXhpc3Q7CisgICBVUmZUZXN0UmVzdWx0QUZDX0V4ICAgICAgICAgICAgICAgICAgICAgICBhZmNfZXg7CisgICBVUmZUZXN0UmVzdWx0UnhEUENoICAgICAgICAgICAgICAgICAgICAgICByeF9kcGNoOworICAgVVJmVGVzdFJlc3VsdFB3ckR0RGFjICAgICAgICAgICAgICAgICAgICAgcHdyX2R0X2RhYzsKKyAgIFVSZlRlc3RSZXN1bHRQd3JEdFN0ZXAgICAgICAgICAgICAgICAgICAgIHB3cl9kdF9zdGVwOworICAgVVJmVGVzdFJlc3VsdEdldFJmVGVtcFNlbnNvciAgICAgICAgICAgICAgcmZUZW1wZXJhdHVyZTsKKyAgIFVSZlRlc3RSZXN1bHRHZXRNSVBJQ29kZVdvcmQgICAgICAgICAgICAgIGdldF9taXBpX2N3X3BhcmFtOworICAgVVJmVGVzdFJlc3VsdFB3ckR0RGVmYXVsdFRociAgICAgICAgICAgICAgcHdyX2R0X2RlZmF1bHRfdGhyOworICAgVVJmVGVzdFJlc3VsdFJlcGxhY2VHYWluVGFibGUgICAgICAgICAgICAgcmVwbGFjZV9nYWluX3RhYmxlOworICAgVVJmVGVzdFJlc3VsdFJmVGVtcGVyYXR1cmVJbmZvICAgICAgICAgICAgcmZUZW1wZXJhdHVyZUluZm87CisgICBVUmZUZXN0UmVzdWx0VWJpbk1vZGVTZXR1cCAgICAgICAgICAgICAgICB1YmluX21vZGVfc2V0dXBfcmVzdWx0OworICAgVVJmVGVzdFJlc3VsdE5TRlRSU1NJICAgICAgICAgICAgICAgICAgICAgZnRfcnB0X25zZnRfcnNzaTsgICAgICAgICAgICAgICAgICAgLypmb3IgZ2V0dGluZyBSU1NJIHZhbHVlIGR1cmluZyBOU0ZUKi8KKyAgIFVSRlRlc3RSZXN1bHRSZXNldEJFUlJlc3VsdCAgICAgICAgICAgICAgIHJlc2V0QkVSUmVzdWx0OworICAgVVJmVGVzdFJlc3VsdENhbERhdGFQcm9jZXNzICAgICAgICAgICAgICAgY2FsX2RhdGFfcHJvY2Vzc19yZXN1bHRfbHA7ICAgICAgICAgLy9hZnRlciA2MjkyCisgICBVUmZUZXN0UmVzdWx0RFBDSFRYRklYUEdBTFAgICAgICAgICAgICAgICBkcGNoX3R4X2ZpeF9wZ2FfZ2Fpbl9scDsKKyAgIFVSZlRlc3RSZXN1bHRGSENlTE5BTFAgICAgICAgICAgICAgICAgICAgIGZoY19lbG5hX3Jlc3VsdF9scDsKKyAgIFVSZlRlc3RSZXN1bHRSU1NJZUxOQUxQICAgICAgICAgICAgICAgICAgIHJzc2lfZWxuYTsKKyAgIC8vVVRTVENuZkdldENhbEluZm9WM2xwICAgICAgICAgICAgICAgICAgICAgY25mX2dldF9jYWxfaW5mb192M19scDsgICAgICAgICAgLy82MjkzIGdldCBjYWxpYnJhdGlvbiBpbmZvcm1hdGlvbgorICAgLy9VVFNUQ25mRkhDZUxOQVYzbHAgICAgICAgICAgICAgICAgICAgICAgICBjbmZfZmhjX2NvbnRyb2xfdjNfbHA7ICAgICAgICAgICAvLzYyOTMgRkhDIGZsb3cgY29udHJvbCBpbmZvbWF0aW9uCisgICAvL1VUU1RDbmZHZXRGSENSZXN1bHRWM2xwICAgICAgICAgICAgICAgICAgIGNuZl9maGNfcmVwb3J0X3YzX2xwOyAgICAgICAgICAgIC8vNjI5MyBmaGMgcmVwb3J0CisgICAvL1VUU1RDbmZHZXRSU1NJVjNscCAgICAgICAgICAgICAgICAgICAgICAgIGNuZl9nZXRfcnNzaV92M19scDsgICAgICAgICAgICAgIC8vNjI5MyBSRiB0b29sIFJTU0kKKyAgIC8vVVRTVENuZlB3cnRvR2FpblYzbHAgICAgICAgICAgICAgICAgICAgICAgY25mX3B3cl90b19nYWluX3YzX2xwOyAgICAgICAgICAgLy82MjkzIFRyYWRrLCBOU0ZUCisgICAvL1VUU1RDbmZMbmF0b0dhaW5WM2xwICAgICAgICAgICAgICAgICAgICAgIGNuZl9sbmFfdG9fZ2Fpbl92M19scDsgICAgICAgICAgIC8vNjI5MyBSRiB0b29sIGdldCBSU1NJIGNhbGN1bGF0b3IKKyAgIC8vVVJmVGVzdENtZF9TZXRSeFR4Q2FsRGF0YV9DbmZQYXJhbV9WMyAgICAgc2V0X1J4VHhfY2FsX2RhdGFfcHJvY2Vzc19yZXN1bHRfbHA7IC8vYWZ0ZXIgNjI5MworICAgLy9VUmZUZXN0Q21kX0dldFJ4VHhDYWxEYXRhX0NuZlBhcmFtX1YzICAgICBnZXRfUnhUeF9jYWxfZGF0YV9wcm9jZXNzX3Jlc3VsdF9scDsgLy9hZnRlciA2MjkzCisgICAvL1VUU1RSZXN1bHRMUENhbCAgICAgICAgICAgICAgICAgICAgICAgICAgIGNuZl9wZ2FfdHlwZV92M19scDsKKyAgIFVUU1RDbmZHZXRDYWxJbmZvVjVscCAgICAgICAgICAgICAgICAgICAgIGNuZl9nZXRfY2FsX2luZm9fdjVfbHA7ICAgICAgICAgIC8vNjI5NSBnZXQgY2FsaWJyYXRpb24gaW5mb3JtYXRpb24KKyAgIFVUU1RDbmZGSENWNWxwICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNuZl9maGNfY29udHJvbF92NV9scDsgICAgICAgICAgIC8vNjI5NSBGSEMgZmxvdyBjb250cm9sIGluZm9tYXRpb24KKyAgIFVUU1RDbmZHZXRGSENSZXN1bHRWNWxwICAgICAgICAgICAgICAgICAgIGNuZl9maGNfcmVwb3J0X3Y1X2xwOyAgICAgICAgICAgIC8vNjI5NSBmaGMgcmVwb3J0CisgICBVUmZUZXN0Q21kX0dldFJ4VHhDYWxEYXRhX0NuZlBhcmFtX1Y1ICAgICBnZXRfUnhUeF9jYWxfZGF0YV9wcm9jZXNzX3Jlc3VsdF92NV9scDsgLy82Mjk1IGdldCBkYXRhCisgICBVUmZUZXN0Q21kX1NldFJ4VHhDYWxEYXRhX0NuZlBhcmFtX1Y1ICAgICBzZXRfUnhUeF9jYWxfZGF0YV9wcm9jZXNzX3Jlc3VsdF92NV9scDsgLy82Mjk1IHNldCBkYXRhCisgICBVVFNUQ25mR2V0UlNTSVY1bHAgICAgICAgICAgICAgICAgICAgICAgICBjbmZfZ2V0X3Jzc2lfdjVfbHA7ICAgICAgICAgICAgICAvLzYyOTUgUkYgdG9vbCBSU1NJCisgICBVVFNUQ25mUHdydG9HYWluVjVscCAgICAgICAgICAgICAgICAgICAgICBjbmZfcHdyX3RvX2dhaW5fdjVfbHA7ICAgICAgICAgICAvLzYyOTUgVHJhZGssIE5TRlQKKyAgIFVUU1RDbmZMbmF0b0dhaW5WNWxwICAgICAgICAgICAgICAgICAgICAgIGNuZl9sbmFfdG9fZ2Fpbl92NV9scDsgICAgICAgICAgIC8vNjI5NSBSRiB0b29sIGdldCBSU1NJIGNhbGN1bGF0b3IKKyAgIFVUU1RDbmZUcmlnZ2VySXFEdW1wTW9kZVYzbHAgICAgICAgICAgICAgIGNuZl90cmlnZ2VyX2lxX2R1bXBfdjNfbHA7ICAgICAvL1RyaWdnZXIgSVEgZHVtcAorICAgVVRTVENuZkdldElxRHVtcFJlc3VsdFYzbHAgICAgICAgICAgICAgICAgY25mX2dldF9pcV9kYXRhX3YzX2xwOyAgICAgICAgIC8vR2V0IElRIGR1bXAgcmVzdWx0CisgICBVVFNUQ25mU2V0UmZlcVN1YmJhbmRWM2xwICAgICAgICAgICAgICAgICBjbmZfc2V0X3JmZXFfc3ViYmFuZF92M19scDsgICAgLy9TZXQgUkZFUSBzdWJiYW5kIHJlc3VsdAorICAgVVRTVENuZkdldFRYcG93ZXJPZmZzZXRWNWxwICAgICAgICAgICAgICAgY25mX2dldF90eF9wb3dlcl9vZmZzZXRfdjVfbHA7ICAgLy82Mjk1IGdldCBUWCBwb3dlciBvZmZzZXQgaW4gTlNGVAorICAgVVRTVENuZlNldFRYcG93ZXJPZmZzZXRWNWxwICAgICAgICAgICAgICAgY25mX3NldF90eF9wb3dlcl9vZmZzZXRfdjVfbHA7ICAgLy82Mjk1IHNldCBUWCBwb3dlciBvZmZzZXQgaW4gTlNGVAorfSBVUmZUZXN0UmVzdWx0UGFyYW07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRfSERSCisgICAgVVJmVGVzdENtZFR5cGUgICAgIHR5cGU7CisgICAgVVJmVGVzdENtZFBhcmFtICAgIHBhcmFtOworfSBmdF91cmZfdGVzdF9yZXFfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVF9IRFIKKyAgICBVUmZUZXN0Q21kVHlwZSAgICAgdHlwZTsKKyAgICBVUmZUZXN0UmVzdWx0UGFyYW0gcGFyYW07Cit9IGZ0X3VyZl90ZXN0X2NuZl9UOworCit0eXBlZGVmIGZ0X3VyZl90ZXN0X3JlcV9UIGZ0X3RvX3VsMXRzdF9zdHJ1Y3Q7Cit0eXBlZGVmIGZ0X3VyZl90ZXN0X2NuZl9UIHVsMXRzdF90b19mdF9zdHJ1Y3Q7CisKK3R5cGVkZWYgZnRfdXJmX3Rlc3RfcmVxX1QgZnRfdXJmX3Rlc3RfcmVxX2lkX3N0cnVjdDsKK3R5cGVkZWYgZnRfdXJmX3Rlc3RfY25mX1QgZnRfdXJmX3Rlc3RfY25mX2lkX3N0cnVjdDsKKworI2VuZGlmICAvLyAjaWYgZGVmaW5lZChfX1VNVFNfUkFUX18pICYmIGRlZmluZWQoX19NVEtfVUwxX0ZERF9fKQorCisjZW5kaWYgLy8gI2lmbmRlZiBfX0ZUX01TR19VTDFSRl9IX18KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZ191bDFyZl9nZW45Ny5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRfbXNnX3VsMXJmX2dlbjk3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQwY2FhMAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZ191bDFyZl9nZW45Ny5oCkBAIC0wLDAgKzEsMjUyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBNb2RpZmljYXRpb24gTm90aWNlOgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgTWVkaWFUZWsgSW5jLiBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDAxCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgZnRfbXNnX3VsMXJmLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIE1lc3NhZ2VzIGRlZmluaXRpb24gb2YgVUwxIFJGIGNhdGVnb3J5IG9mIEZUIExpYnJhcnkKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19GVF9NU0dfVUwxUkZfSF9fCisjZGVmaW5lIF9fRlRfTVNHX1VMMVJGX0hfXworI2luY2x1ZGUgImZ0X21zZ19jb21tb24uaCIKKyNpbmNsdWRlICJ1bDFkX3JmX3B1YmxpYy5oIgorCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisKKworI2RlZmluZSBVTDFUU1RfTE5BX01PREVfTlVNQkVSX0VYVCA2CisKKyNkZWZpbmUgVUwxX0RQRF9GREJfTlVNICAgICAgICAgICAgICAgICAgICAoQ0FMX1VBUkZDTl9TRUNUSU9OICogVUwxX0RQRF9NQVhfUEFfTEVWRUxfTlVNKSAvKiByZWZlciB0byBmX2RiIGluIFVfc0RQRF9DT01NT05fQ0FMICovCisjZGVmaW5lIFVMMV9EUERfTUFYX1BUQVJfVEhfTlVNICAgICAgICAgICAgKENBTF9VQVJGQ05fU0VDVElPTiAqIFVMMV9EUERfTUFYX1BBX0xFVkVMX05VTSkgLyogcmVmZXIgdG8gcGFfaWR4X3RoIGluIFVfc0RQRF9DT01NT05fQ0FMICovCisjZGVmaW5lIFVMMV9EUERfTUFYX0lNUExJQ0lUX1JTVl9OVU0gICAgICAgMAorI2RlZmluZSBVTDFfRFBEX01BWF9JTVBMSUNJVF9OVU0gICAgICAgICAgIChVTDFfRFBEX0ZEQl9OVU0gKyBVTDFfRFBEX01BWF9QVEFSX1RIX05VTSArIFVMMV9EUERfTUFYX0lNUExJQ0lUX1JTVl9OVU0pCisjZGVmaW5lIFVMMV9EUERfTUFYX1NFVF9BTExfREFUQV9OVU0gICAgICAgKDcpICAvKiBmbG9vcihNTVJGX01BWF9UT09MX1BFRVJfU0laRV9QRVJfQ01EIC8gc2l6ZW9mKFVSZlRlc3RDbWRfU2V0RHBkUGFBbmREcGRGYWNDYWxBbGxfT25lQmFuZCkpICovCisjZGVmaW5lIFVMMV9EUERfTUFYX0dFVF9BTExfREFUQV9OVU0gICAgICAgKFVMMV9EUERfTUFYX1NFVF9BTExfREFUQV9OVU0pCisjZGVmaW5lIFVMMV9EUERfTUFYX1NFVF9QQVJUSUFMX0RBVEFfTlVNICAgKDIzOSkgLyogZmxvb3IoTU1SRl9NQVhfVE9PTF9QRUVSX1NJWkVfUEVSX0NNRCAvIHNpemVvZihVUmZUZXN0Q21kX1NldERwZFBhQW5kRHBkRmFjQ2FsUGFydGlhbF9PbmVCYW5kKSkgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogIE1lc3NhZ2Ugc3RydWN0dXJlcyBkZWZpbmVkIGZvciBVTDEgVFNUIEludGVyZmFjZQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKF9fVU1UU19SQVRfXykgJiYgZGVmaW5lZChfX01US19VTDFfRkREX18pCisKKy8vdHlwZTE6IGNvbW11bmljYXRlIHdpdGggdWwxdHN0IG1vZHVsZSwgYW5kIHNlbmQgdGhlIGNvbmZpcm0gd2l0aG91dCB3YWl0aW5nIQorLy90eXBlMjogY29tbXVuaWNhdGUgd2l0aCB1MWx0c3QgbW9kdWxlLCBhbmQgd2FpdCB0aGVpciBjb25maXJtLCB0aGVuIHNlbmQgYmFjayB0byBQQworLy90eXBlMzogaW52b2tlIFVMMUQncyBBUEksIHRoZW4gc2VuZCBjb25maXJtIHRvIFBDIHNpZGUuCisvL3R5cGU0OiBubyBvcGVyYXRpb24sIG9ubHkgZ2V0IEZUIHRhc2sncyBjdXJyZW50IHN0YXR1cywgYW5kIHJlcGx5IHRvIFBDIHNpZGUKKwordHlwZWRlZiBlbnVtCit7CisgICBVUkZfVEVTVF9DTURfVFhBQ0NFU1MgPSAwLAorICAgVVJGX1RFU1RfQ01EX1NUT1AgPSAxLAorICAgVVJGX1RFU1RfQ01EX1RYX0RQQ0ggPSAyLAorICAgVVJGX1RFU1RfQ01EX1JYX0RQQ0ggPSAzLAorICAgVVJGX1RFU1RfQ01EX1JTU0kgPSA0LAorICAgVVJGX1RFU1RfQ01EX1JTQ1AgPSA1LAorICAgVVJGX1RFU1RfQ01EX0FGQyA9IDYsCisgICBVUkZfVEVTVF9DTURfVFhfUEFBUEMgPSA3LAorICAgVVJGX1RFU1RfQ01EX0dFVF9SRklEID0gOCwKKyAgIFVSRl9URVNUX0NNRF9DT05GSUdfSFdUUEMgPSA5LAorICAgVVJGX1RFU1RfQ01EX0dFVF9QV1JfRFRfU1RFUCA9IDEwLAorICAgVVJGX1RFU1RfQ01EX0dFVF9QV1JfRFRfREFDID0gMTEsCisgICBVUkZfVEVTVF9DTURfR0VUX1BXUl9EVF9ERUZBVUxUX1RIUiA9IDEyLAorICAgVVJGX1RFU1RfQ01EX1NFVF9JTU1FRElBVEVfQlNJID0gMTMsCisgICBVUkZfVEVTVF9DTURfR0VUX0lNTUVESUFURV9CU0kgPSAxNCwKKyAgIFVSRl9URVNUX0NNRF9DT05USU5VT1VTX1JYID0gMTUsCisgICBVUkZfVEVTVF9DTURfU1RBUlRfRkhDID0gMTYsCisgICBVUkZfVEVTVF9DTURfU0VUX1RYREFDX0RBVEEgPSAxNywKKyAgIFVSRl9URVNUX0NNRF9HRVRfUFdSX0RFVF9NRUFTVVJFX1JFUyA9IDE4LAorICAgVVJGX1RFU1RfQ01EX1NFVF9QV1JfQ1RSTF9NT0RFID0gMTksCisgICBVUkZfVEVTVF9DTURfUkVQTEFDRV9HQUlOX1RBQkxFX0ZPUl9DQUwgPSAyMCwKKyAgIFVSRl9URVNUX0NNRF9TVEFSVF9GSENfTk9fV0FJVCA9IDIxLAorICAgVVJGX1RFU1RfQ01EX0dFVF9GSENfUkVTVUxUID0gMjIsCisgICBVUkZfVEVTVF9DTURfUVVFUllfVEFSR0VUX0NBUEFCSUxJVFkgPSAyMywKKyAgIFVSRl9URVNUX0NNRF9TVEFSVF9OU0ZUID0gMjQsCisgICBVUkZfVEVTVF9DTURfR0VUX0JJVF9DT1VOVF9GT1JfU0lOR0xFX0VOREVEX0JFUiA9IDI1LAorICAgVVJGX1RFU1RfQ01EX05TRlRfU0VUX0lMUENfU1RFUCA9IDI2LAorICAgVVJGX1RFU1RfQ01EX1NUQVJUX05TRlRfRVggPSAyNywKKyAgIFVSRl9URVNUX0NNRF9TRVRfUEFfT0NUX0xFVkVMX0RBVEEgPSAyOCwKKyAgIFVSRl9URVNUX0NNRF9TVEFSVF9IU0RQQV9OU0ZUID0gMjksCisgICBVUkZfVEVTVF9DTURfU1RBUlRfSFNVUEFfTlNGVCA9IDMwLAorICAgVVJGX1RFU1RfQ01EX1NUQVJUX0ZIQ19FWCA9IDMxLAorICAgVVJGX1RFU1RfQ01EX0dFVF9GSENfRVhfUkVTVUxUID0gMzIsCisgICBVUkZfVEVTVF9DTURfR0VUX0NVUlJFTlRfTE5BX01PREUgPSAzMywKKyAgIFVSRl9URVNUX0NNRF9TRVRfQ0FQSUQgPSAzNCwKKyAgIFVSRl9URVNUX0NNRF9HRVRfTUFYX0NBUElEID0gMzUsCisgICBVUkZfVEVTVF9DTURfQUZDX0VYID0gMzYsCisgICBVUkZfVEVTVF9DTURfUlNTSV9SWEQgPSAzNywKKyAgIFVSRl9URVNUX0NNRF9HRVRfQ1VSUkVOVF9SWERfTE5BX01PREUgPSAzOCwKKyAgIFVSRl9URVNUX0NNRF9TRVRfUlhfQkFORFdJRFRIID0gMzksCisgICBVUkZfVEVTVF9DTURfU0VUX1JYX0FOVEVOTkEgPSA0MCwKKyAgIFVSRl9URVNUX0NNRF9TRVRfVFhfUEFfRFJJRlRfQ09NUEVOU0FUSU9OID0gNDEsCisgICBVUkZfVEVTVF9DTURfU0VUX0lDU19DRUxMX1BPV0VSID0gNDIsCisgICBVUkZfVEVTVF9DTURfR0VUX1JGX1RFTVBfQlNJID0gNDMsCisgICBVUkZfVEVTVF9DTURfR0VUX1JGX0NBUEFCSUxJVFkgPSA0NCwKKyAgIFVSRl9URVNUX0NNRF9TVEFSVF9OU0ZUX0xJU1RfTU9ERSAgPSA0NSwKKyAgIFVSRl9URVNUX0NNRF9TRVRfUkZfTUlQSV9DT0RFV09SRCA9IDQ2LAorICAgVVJGX1RFU1RfQ01EX0dFVF9SRl9NSVBJX0NPREVXT1JEID0gNDcsCisgICBVUkZfVEVTVF9DTURfR0VUX1RFTVBFUkFUVVJFX0lORk8gPSA0OCwKKyAgIFVSRl9URVNUX0NNRF9SWF9HQUlOX1NXRUVQID0gNDksCisgICBVUkZfVEVTVF9DTURfUkVMT0FEX05WUkFNID0gNTAsCisgICBVUkZfVEVTVF9DTURfQ0hFQ0tfSUZfRlVOQ19FWElTVCA9IDUxLAorICAgVVJGX1RFU1RfQ01EX1VCSU5fTU9ERV9TRVRVUCA9IDUyLAorICAgVVJGX1RFU1RfQ01EX1NFVF9SWF9QQVRIX0xPU1MgPSA1MywKKyAgIFVSRl9URVNUX0NNRF9HRVRfUlhfUEFUSF9MT1NTID0gNTQsCisgICBVUkZfVEVTVF9DTURfUlNTSV9MUE0gPSA1NSwKKyAgIFVSRl9URVNUX0NNRF9SU1NJX1JYRF9MUE0gPSA1NiwKKyAgIFVSRl9URVNUX0NNRF9DT05USU5VT1VTX1JYX0xQTSA9IDU3LAorICAgVVJGX1RFU1RfQ01EX05TRlRfR0VUX1JTU0kgPSA1OCwKKyAgIFVSRl9URVNUX0NNRF9TRVRfUlhfQ0FMSUJSQVRJT05fREFUQSA9IDU5LAorICAgVVJGX1RFU1RfQ01EX0dFVF9SWF9DQUxJQlJBVElPTl9EQVRBID0gNjAsCisgICBVUkZfVEVTVF9DTURfU0VUX1RYX0NBTElCUkFUSU9OX0RBVEEgPSA2MSwKKyAgIFVSRl9URVNUX0NNRF9HRVRfVFhfQ0FMSUJSQVRJT05fREFUQSA9IDYyLAorICAgVVJGX1RFU1RfQ01EX05TRlRfUkVTRVRfQkVSX1JFU1VMVCA9IDY2LAorICAgVVJGX1RFU1RfQ01EX0ZIQ19FTE5BID0gNjcsCisgICBVUkZfVEVTVF9DTURfR0VUX1JTU0lfRUxOQSA9IDY4LAorICAgVVJGX1RFU1RfQ01EX0dFVF9DT05USU5VT1VTX1JTU0lfRUxOQSA9IDY5LAorICAgVVJGX1RFU1RfQ01EX1RYX0RQQ0hfRklYX1BHQV9HQUlOID0gNzAsCisgICBVUkZfVEVTVF9DTURfR0VUX0NBTElCUkFUSU9OX0lORk9fVjMgPSA3MSwKKyAgIFVSRl9URVNUX0NNRF9TVEFSVF9GSENfVjMgPSA3MiwKKyAgIFVSRl9URVNUX0NNRF9HRVRfRkhDX1JFU1VMVF9WMyA9IDczLAorICAgVVJGX1RFU1RfQ01EX0dFVF9SU1NJX1YzID0gNzQsCisgICBVUkZfVEVTVF9DTURfR0FJTl9TRUxFQ1RfUFdSX1YzID0gNzUsCisgICBVUkZfVEVTVF9DTURfR0FJTl9TRUxFQ1RfTE5BX1YzID0gNzYsCisgICBVUkZfVEVTVF9DTURfR0VUX1JYVFhfQ0FMSUJSQVRJT05fREFUQV9WMyA9IDc3LCAgICAgICAgICAvL2FmdGVyIDYyOTMKKyAgIFVSRl9URVNUX0NNRF9TRVRfUlhUWF9DQUxJQlJBVElPTl9EQVRBX1YzID0gNzgsICAgICAgICAgIC8vYWZ0ZXIgNjI5MworICAgVVJGX1RFU1RfQ01EX1JTQ1BfVjMgPSA3OSwKKyAgIFVSRl9URVNUX0NNRF9BRkNfVjMgPSA4MCwKKyAgIFVSRl9URVNUX0NNRF9BRkNfQ0FQSURfVjMgPSA4MSwKKyAgIFVSRl9URVNUX0NNRF9MT1dfUE9XRVJfQ0FMX1YzID0gODIsCisgICBVUkZfVEVTVF9DTURfR0VUX0NBTElCUkFUSU9OX0lORk9fVjUgPSA4MywgICAgICAgICAgICAgICAvL2FmdGVyIDYyOTUKKyAgIFVSRl9URVNUX0NNRF9TVEFSVF9GSENfVjUgPSA4NCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYWZ0ZXIgNjI5NQorICAgVVJGX1RFU1RfQ01EX0dFVF9GSENfUkVTVUxUX1Y1ID0gODUsICAgICAgICAgICAgICAgICAgICAgLy9hZnRlciA2Mjk1CisgICBVUkZfVEVTVF9DTURfR0VUX1JYVFhfQ0FMSUJSQVRJT05fREFUQV9WNSA9IDg2LCAgICAgICAgICAvL2FmdGVyIDYyOTUKKyAgIFVSRl9URVNUX0NNRF9TRVRfUlhUWF9DQUxJQlJBVElPTl9EQVRBX1Y1ID0gODcsICAgICAgICAgIC8vYWZ0ZXIgNjI5NQorICAgVVJGX1RFU1RfQ01EX1RSSUdHRVJfSVFfRFVNUF9NT0RFX1YzID0gODgsICAgICAgICAgICAgICAgLy9zdXBwb3J0IDYyOTMgQXV0byBJUSBkdW1wCisgICBVUkZfVEVTVF9DTURfR0VUX0lRX0RVTVBfUkVTVUxUX1YzID0gODksICAgICAgICAgICAgICAgICAvL3N1cHBvcnQgNjI5MyBBdXRvIElRIGR1bXAKKyAgIFVSRl9URVNUX0NNRF9TRVRfUkZFUV9TVUJCQU5EX1JFU1VMVF9WMyA9IDkwLCAgICAgICAgICAgIC8vc3VwcG9ydCA2MjkzIEF1dG8gSVEgZHVtcAorICAgVVJGX1RFU1RfQ01EX0dFVF9SU1NJX1Y1ID0gOTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9hZnRlciA2Mjk1CisgICBVUkZfVEVTVF9DTURfR0FJTl9TRUxFQ1RfUFdSX1Y1ID0gOTIsICAgICAgICAgICAgICAgICAgICAvL2FmdGVyIDYyOTUKKyAgIFVSRl9URVNUX0NNRF9HQUlOX1NFTEVDVF9MTkFfVjUgPSA5MywgICAgICAgICAgICAgICAgICAgIC8vYWZ0ZXIgNjI5NQorICAgVVJGX1RFU1RfQ01EX0dFVF9UWF9QT1dFUl9PRkZTRVRfVjUgPTk0LCAgICAgICAgICAgICAgICAgLy9hZnRlciA2Mjk1CisgICBVUkZfVEVTVF9DTURfU0VUX1RYX1BPV0VSX09GRlNFVF9WNSA9OTUsICAgICAgICAgICAgICAgICAvL2FmdGVyIDYyOTUKKyAgIFVSRl9URVNUX0NNRF9HRVRfQ0FMSUJSQVRJT05fSU5GT19WNyA9IDk2LCAgICAgICAgICAgICAgIC8vNjI5NworICAgVVJGX1RFU1RfQ01EX0ZIQ19WNyA9IDk3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy82Mjk3CisgICAvL1VSRl9URVNUX0NNRF9HRVRfRkhDX1JFU1VMVF9WNyA9IDk4LCAgICAgICAgICAgICAgICAgICAgIC8vNjI5NworICAgVVJGX1RFU1RfQ01EX0dFVF9SU1NJX1Y3ID0gOTgsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy82Mjk3CisgICBVUkZfVEVTVF9DTURfR0FJTl9TRUxFQ1RfUFdSX1Y3ID0gOTksICAgICAgICAgICAgICAgICAgICAvLzYyOTcKKyAgIFVSRl9URVNUX0NNRF9HQUlOX1NFTEVDVF9MTkFfVjcgPSAxMDAsICAgICAgICAgICAgICAgICAgIC8vNjI5NworICAgVVJGX1RFU1RfQ01EX0dFVF9SWFRYX0NBTElCUkFUSU9OX0RBVEFfVjcgPSAxMDEsICAgICAgICAgLy82Mjk3CisgICBVUkZfVEVTVF9DTURfU0VUX1JYVFhfQ0FMSUJSQVRJT05fREFUQV9WNyA9IDEwMiwgICAgICAgICAvLzYyOTcKKyAgIFVSRl9URVNUX0NNRF9UWF9QT1dFUl9BREpVU1RfVjcgPSAxMDMsICAgICAgICAgICAgICAgICAgIC8vNjI5NworICAgVVJGX1RFU1RfQ01EX1RYX0RQQ0hfVjcgPSAxMDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy82Mjk3CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgVVJGX1RFU1RfQ01EX0dQX1RPT0xfQ09NTUFORF9TVEFSVCwKKyAgIFVSRl9URVNUX0NNRF9FTkQsCisgICBVUkZfVEVTVF9DTURfTUFYICAgICAgICAgICAgICAgICAgICAgPSAweDdGRkZGRkZGCit9IFVSZlRlc3RDbWRUeXBlOwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2ICB1bF91YXJmY247ICAgICAgLyogVUwgdWFyZmNuIHJhbmdlOj8/Pz9SZWFkIGZyb20gTlZSQU0/PyAoOTYxMiB+IDk4ODgpICovCisgICAga2FsX3VpbnQxNiAgZGxfcHNjOyAgICAgICAgIC8qIDB+NTExLiAqLworICAgIGthbF91aW50MTYgIHNpZ25hdHVyZTsgICAgICAvKiAwfjE1LCBmb3Igc2luZ2xlIHNpZ25hdHVyZSBkZWNpc2lvbi4gKi8KKyAgICBrYWxfdWludDggICBwYV9tb2RlOyAgICAgICAgLyogMDogSGlnaCAxOiBNaWRkbGUgMjogTG93ICovCisgICAga2FsX2ludDggICAgaW5pdF9wb3dlcjsgICAgIC8qIEFzc3VtZSBjcGljaF9yc2NwPTAsIHVsX2ludGVyZmVyZW5jZT0wLiAqLworICAgIGthbF91aW50OCAgIHBvd2VyX3N0ZXA7ICAgICAvKiBQcmVhbWJsZSBwb3dlciByYW1waW5nIHN0ZXAuIDEgfiA4ZEIgKi8KKyAgICBrYWxfdWludDggICBtYXhfcmV0cmFuczsgICAgLyogMX42NC4gKi8KKyAgICBrYWxfdWludDE2ICBkbF91YXJmY247CisgICAga2FsX3VpbnQ4ICAgYXNjOworfSBVUmZUZXN0Q21kVHhBY2Nlc3M7CisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisjaWYgMCAvLyBubyB1c2UgCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKyNkZWZpbmUgRkREX01BWF9GUkVRX0xJU1QgMzYKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgbnVtX2ZyZXE7CisgICAga2FsX3VpbnQxNiAgZGxfZnJlcVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKyAgICBrYWxfdWludDggICB0ZW1wZXJhdHVyZTsKKworICAgIC8qIEJlbG93IGZvciBSRl9TZXRCQlJ4UGFyYW1zLiAqLworICAgIGthbF9ib29sICAgIGh3QUdDOworICAgIGthbF91aW50OCAgIG1vZGU7ICAgICAgIC8qIDA6IG1vZGUwLCAxOiBtb2RlMS4gKi8KKyAgICBrYWxfaW50MTYgICBnYWluOyAgICAgICAvKiBtb2RlMC4gKi8KKyAgICBrYWxfdWludDggICBMTkFtb2RlOyAgICAvKiBtb2RlMS4gMDogTE5BIGxvdywgMTogTE5BIG1pZCwgMjogTE5BIGhpZ2guICovCisgICAga2FsX3VpbnQxNiAgcGdhOyAgICAgICAgLyogbW9kZTEuICovCit9IFVSZlRlc3RDbWRSU1NJOworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICBwc2Nhbl9iZWZvcmVfY2VsbF9zZWFyY2g7ICAgLyogVHJ1ZSBpZiBVTDFUU1QgbmVlZHMgcG93ZXIgc2NhbiBiZWZvcmUgY2VsbCBzZWFyY2gvUlNDUC4gKi8KKyAgICBrYWxfdWludDE2ICBkbF9mcmVxOyAgICAvKiBTcGVjaWZpYyBkbF9mcmVxIHRvIGRvIGNlbGwgc2VhcmNoLiBWYWxpZCBpZiBwc2Nhbl9iZWZvcmVfY2VsbF9zZWFyY2g9Ri4gKi8KKyAgICBrYWxfdWludDggICBzYW1wbGVfbnVtX3Blcl9jZWxsOworICAgIGthbF9ib29sICAgIHJlYWRfc2ZuOyAgIC8qIFRydWUgaWYgd2UgbmVlZCB0byBkbyBTRk4gbWVhc3VyZW1lbnQgZm9yIHRoZSBmb3VuZCBjZWxsLiAqLworCisgICAgLyogQmVsb3cgZm9yIFJGX1NldEJCUnhQYXJhbXMuICovCisgICAga2FsX2Jvb2wgICAgaHdBR0M7CisgICAga2FsX3VpbnQ4ICAgbW9kZTsgICAgICAgLyogMDogbW9kZTAsIDE6IG1vZGUxLiAqLworICAgIGthbF9pbnQxNiAgIGdhaW47ICAgICAgIC8qIG1vZGUwLiAqLworICAgIGthbF91aW50OCAgIExOQW1vZGU7ICAgIC8qIG1vZGUxLiAwOiBMTkEgbG93LCAxOiBMTkEgbWlkLCAyOiBMTkEgaGlnaC4gKi8KKyAgICBrYWxfdWludDE2ICBwZ2E7ICAgICAgICAvKiBtb2RlMS4gKi8KK30gVVJmVGVzdENtZFJTQ1A7IC8vb2xkCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiAgZGxfZnJlcTsgICAgLyogU3BlY2lmaWMgZGxfZnJlcSB0byBkbyBjZWxsIHNlYXJjaC4gVmFsaWQgaWYgcHNjYW5fYmVmb3JlX2NlbGxfc2VhcmNoPUYuICovCit9IFVUU1RDbWRSU0NQVjNscDsgLy9uZXcKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9pbnQxNiAgICBkbF9mcmVxOyAgICAgLyogU3BlY2lmaWMgZGxfZnJlcSB0byBkbyBjZWxsIHNlYXJjaC4gVmFsaWQgaWYgcHNjYW5fYmVmb3JlX2NlbGxfc2VhcmNoPUYuICovCisgICAga2FsX3VpbnQxNiAgICBhZmNfZGFjOworICAgIC8qIEJlbG93IGZvciBSRl9TZXRCQlJ4UGFyYW1zLiAqLworICAgIGthbF9ib29sICAgICBod0FHQzsKKyAgICBrYWxfdWludDggICAgbW9kZTsgICAgICAgIC8qIDA6IG1vZGUwLCAxOiBtb2RlMS4gKi8KKyAgICBrYWxfaW50MTYgICAgZ2FpbjsgICAgICAgIC8qIG1vZGUwLiAqLworICAgIGthbF91aW50OCAgICBMTkFtb2RlOyAgICAgLyogbW9kZTEuIDA6IExOQSBsb3csIDE6IExOQSBtaWQsIDI6IExOQSBoaWdoLiAqLworICAgIGthbF91aW50MTYgICBwZ2E7ICAgICAgICAgLyogbW9kZTEuICovCit9IFVSZlRlc3RDbWRBRkM7IC8vb2xkCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2ludDE2ICAgIGRsX2ZyZXE7ICAgICAvKiBTcGVjaWZpYyBkbF9mcmVxIHRvIGRvIGNlbGwgc2VhcmNoLiBWYWxpZCBpZiBwc2Nhbl9iZWZvcmVfY2VsbF9zZWFyY2g9Ri4gKi8KKyAgICBrYWxfdWludDE2ICAgIGFmY19kYWM7Cit9IFVUU1RDbWRBRkNWM2xwOyAvL25ldworCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0Cit7CisKKyAgIGthbF9ib29sICAgICAgYl9hZmNfZGFjX3ZhbGlkOworICAga2FsX3VpbnQxNiAgICB1Ml9hZmNfZGFjOworICAga2FsX3VpbnQ4ICAgICB1MV9sb29wYmFja1R5cGU7CisgICBrYWxfdWludDggICAgIHUxX2ZyYW1lX3NoaWZ0OworICAga2FsX3VpbnQ4ICAgICB1MV9ybWNfdHlwZTsKKyAgIGthbF91aW50OCAgICAgdTFfY3RmY1s0XTsKKyAgIGthbF91aW50OCAgICAgdTFfYml0X3BhdHRlcm47CisKKyAgIGthbF9pbnQxNiAgICAgaTJfZGxfZnJlcTsKKyAgIGthbF9pbnQxNiAgICAgaTJfZGxfcHNjOworICAga2FsX2ludDE2ICAgICBpMl9kbF9vdnNmOworCisgICBrYWxfaW50MTYgICAgIGkyX3VsX2ZyZXE7CisgICBrYWxfdWludDE2ICAgIHUyX3VsX3RmY2k7CisgICBrYWxfdWludDMyICAgIHU0X3VsX3NjX2NvZGU7CisgICBrYWxfYm9vbCAgICAgIGJfaXFfcHdyX3ZhbGlkOworICAga2FsX3VpbnQ4ICAgICB1MV9kcGNjaF9wd3I7CisgICBrYWxfdWludDggICAgIHUxX2RwZGNoX3B3cjsKKworfVVMMURfUkZfTlNGVF9SRVFfVDsKKy8qKgorICogTlNGVCBMaXN0IE1vZGUgY29tbWFuZCBwYXJhbWV0ZXIKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgIGFmY19kYWNfdmFsaWQ7CisgICBrYWxfdWludDE2ICBhZmNfZGFjOworICAga2FsX3VpbnQ4ICAgbG9vcGJhY2tUeXBlOworICAga2FsX3VpbnQ4ICAgZnJhbWVfc2hpZnQ7CisgICBrYWxfdWludDggICBybWNfdHlwZTsKKyAgIGthbF91aW50OCAgIGN0ZmNbNF07CisgICBrYWxfdWludDggICBiaXRfcGF0dGVybjsKKy8qIERMIHBhcmFtZXRlcnMgKi8KKyAgIGthbF9pbnQxNiAgIGRsX2ZyZXFbNTBdOworICAga2FsX2ludDE2ICAgZGxfcHNjOworICAga2FsX2ludDE2ICAgZGxfb3ZzZjsKKy8qIFVMIHBhcmFtZXRlcnMgKi8KKyAgIGthbF9pbnQxNiAgIHVsX2ZyZXFbNTBdOworICAga2FsX3VpbnQxNiAgdWxfdGZjaTsKKyAgIGthbF91aW50MzIgIHVsX3NjX2NvZGU7CisgICBrYWxfYm9vbCAgICBpcV9wd3JfdmFsaWQ7CisgICBrYWxfdWludDggICBkcGNjaF9wd3I7CisgICBrYWxfdWludDggICBkcGRjaF9wd3I7CisvKiBjb21tb24gcGFyYW1ldGVycyAqLworICAga2FsX3VpbnQ4ICAgdmFsaWRfZnJlcTsKKyAgIGthbF91aW50MTYgIHRlc3RfaXRlbVs1MF07CisvKiB0aGUgdGltZSBzZXR0aW5ncywgdW5pdCA9IGZyYW1lICovCisgICBrYWxfdWludDE2ICBmdWxsX3Rlc3RfdGltZTsKKyAgIGthbF91aW50OCAgIHJlYWR5X3RpbWU7CisgICBrYWxfdWludDggICBzeW5jX3RpbWU7CisgICBrYWxfdWludDggICByZXRyaWFsOyAgIAorICAga2FsX3VpbnQxNiAgdGVzdF90aW1lOworICAga2FsX3VpbnQxNiAgcnhfcnNzaV9zdGFydF90aW1lWzNdOworICAga2FsX3VpbnQ4ICAgcnhfcnNzaV9kdXJhdGlvblszXTsKKyAgIGthbF91aW50MTYgIHJ4X2Jlcl9zdGFydF90aW1lOworICAga2FsX3VpbnQ4ICAgcnhfYmVyX2R1cmF0aW9uOworICAga2FsX3VpbnQxNiAgSUxQQ19BQkNfdGltZTsKKyAgIGthbF91aW50MTYgIElMUENfRUZfdGltZTsKKyAgIGthbF91aW50MTYgIElMUENfR0hfdGltZTsKKyAgIGthbF91aW50MTYgIHRyYW5zaXRpb25fdGltZTsKK30gVVJmTnNmdExpc3RNb2RlUmVxOworLyoqCisgKiBIU1BBIGNvbW1hbmQgcGFyYW1ldGVyCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICAgIGJfYWZjX2RhY192YWxpZDsKKyAgIGthbF91aW50MTYgICAgdTJfYWZjX2RhYzsKKyAgIGthbF91aW50OCAgICAgdTFfbG9vcGJhY2tUeXBlOworICAga2FsX3VpbnQ4ICAgICB1MV9mcmFtZV9zaGlmdDsKKyAgIGthbF91aW50OCAgICAgdTFfcm1jX3R5cGU7CisgICBrYWxfdWludDggICAgIHUxX2N0ZmNbNF07CisgICBrYWxfdWludDggICAgIHUxX2JpdF9wYXR0ZXJuOworCisgICBrYWxfaW50MTYgICAgIGkyX2RsX2ZyZXE7CisgICBrYWxfaW50MTYgICAgIGkyX2RsX3BzYzsKKyAgIGthbF9pbnQxNiAgICAgaTJfZGxfb3ZzZjsKKworICAga2FsX2ludDE2ICAgICBpMl91bF9mcmVxOworICAga2FsX3VpbnQxNiAgICB1Ml91bF90ZmNpOworICAga2FsX3VpbnQzMiAgICB1NF91bF9zY19jb2RlOworICAga2FsX2Jvb2wgICAgICBiX2lxX3B3cl92YWxpZDsKKyAgIGthbF91aW50OCAgICAgdTFfZHBjY2hfcHdyOworICAga2FsX3VpbnQ4ICAgICB1MV9kcGRjaF9wd3I7CisgICBrYWxfdWludDggICAgIHN1YlRlc3Q7Cit9VVJmVGVzdENtZEhzcGFOc2Z0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgbWVhc3VyZV9jb3VudDsKK30gVVJmVGVzdENtZEdldFJmVGVtcFNlbnNvcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICBiRGF0YVZhbGlkOworICAgIGthbF91aW50MzIgIHU0VG90YWxCaXRzOworICAgIGthbF91aW50MzIgIHU0RXJyb3JCaXRzOworfVVMMURfUkZfTlNGVF9CRVRfQklUX0NOVF9GT1JfQkVSX0NORl9UOworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgb2s7CisgICAga2FsX3VpbnQ4ICAgbnVtX2ZyZXE7CisgICAga2FsX2ludDE2ICAgZGxfZnJlcVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKyAgICBrYWxfaW50MzIgICByc3NpWyBGRERfTUFYX0ZSRVFfTElTVCBdOworfSBVUmZUZXN0UmVzdWx0UlNTSTsKKworLy8gUjggYm90aCByeCBwYXRoIFJTU0kgcmVzdWx0Cit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgb2s7CisgICBrYWxfdWludDggICBudW1fZnJlcTsKKyAgIGthbF9pbnQxNiAgIGRsX2ZyZXFbIEZERF9NQVhfRlJFUV9MSVNUIF07CisgICBrYWxfaW50MzIgICByc3NpWyBGRERfTUFYX0ZSRVFfTElTVCBdOworICAga2FsX2ludDMyICAgcnNzaV9yeGRbIEZERF9NQVhfRlJFUV9MSVNUIF07Cit9IFVSZlRlc3RSZXN1bHRSU1NJUnhEOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgb2s7CisgICBrYWxfaW50MzIgICBOU0ZUX1JTU0k7CisgICBrYWxfaW50MzIgICBOU0ZUX1JTU0lfUlhEOworICAga2FsX2ludDMyICAgY21kX2xvY2F0aW9uOworfVVSZlRlc3RSZXN1bHROU0ZUUlNTSTsKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiAgcHNjOyAgICAgICAgLyogUHJpbWFyeSBzY3JhbWJsaW5nIGNvZGUgKi8KKyAgICBrYWxfaW50MzIgICB0bTsgICAgICAgICAvKiBDZWxsIGZyYW1lIGJvdW5kYXJ5IG9mZnNldCB0byBMU1QgKi8KKyAgICBrYWxfaW50MTYgICBvZmY7ICAgICAgICAvKiBDZWxsIGZyYW1lIG51bWJlciBvZmZzZXQgdG8gTFNUICovCisgICAga2FsX2Jvb2wgICAgc3R0ZDsgICAgICAgLyogVHJ1ZSBmb3IgU1RURCB1c2VkLiAqLworICAgIGthbF91aW50OCAgIHNhbXBsZV9udW07CisgICAga2FsX2ludDE2ICAgcnNjcF9zdW07CisgICAga2FsX2ludDE2ICAgZnJlcV9lcnJvcjsKK30gVVJmVGVzdF9jcGljaF9yZXN1bHRfVDsKKworI2RlZmluZSBVTDFfTUFYX05VTV9NRUFTX0NFTEwgMzIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICAgICAgb2s7CisgICAga2FsX3VpbnQ4ICAgICAgIG51bV9jZWxsOworICAgIFVSZlRlc3RfY3BpY2hfcmVzdWx0X1QgIGNwaWNoX3Jlc3VsdFsgVUwxX01BWF9OVU1fTUVBU19DRUxMIF07Cit9IFVSZlRlc3RSZXN1bHRSU0NQOyAvL29sZAorCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgICBvazsKKyAgICBrYWxfdWludDggICAgICAgbnVtX2NlbGw7CisgICAgVVJmVGVzdF9jcGljaF9yZXN1bHRfVCAgY3BpY2hfcmVzdWx0WyBVTDFfTUFYX05VTV9NRUFTX0NFTEwgXTsKK30gVVRTVGVzdFJlc3VsdFJTQ1BWM2xwOyAvL25ldworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgIG9rOworICAgIGthbF91aW50MTYgICAgIHBzYzsKKyAgICBrYWxfaW50MzIgICAgICB0bTsKKyAgICBrYWxfYm9vbCAgICAgICBzdHRkOworICAgIGthbF91aW50OCAgICAgIHJzY3Bfc3VtOworICAgIGthbF9pbnQxNiAgICAgIGZyZXFfZXJyb3I7CisKK31VUmZUZXN0UmVzdWx0QUZDOyAvL29sZAorCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgIG9rOworICAgIGthbF91aW50MTYgICAgIHBzYzsKKyAgICBrYWxfaW50MzIgICAgICB0bTsKKyAgICBrYWxfYm9vbCAgICAgICBzdHRkOworICAgIGthbF91aW50OCAgICAgIHJzY3Bfc3VtOworICAgIGthbF9pbnQxNiAgICAgIGZyZXFfZXJyb3I7Cit9VVRTVGVzdFJlc3VsdEFGQ1YzbHA7IC8vbmV3CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgICAgb2s7CisgICAga2FsX3VpbnQxNiAgICAgcHNjOworICAgIGthbF9pbnQzMiAgICAgIHRtOworICAgIGthbF9ib29sICAgICAgIHN0dGQ7CisgICAga2FsX3VpbnQ4ICAgICAgcnNjcF9zdW07CisgICAga2FsX2ludDMyICAgICAgZnJlcV9lcnJvcjsKK31VUmZUZXN0UmVzdWx0QUZDX0V4OyAvL29sZAorI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyIG1fdTRSZmlkOworfVVSZlRlc3RSZXN1bHRSRklEOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCBtX3UxUmVzdWx0OworCit9VVJmVGVzdFJlc3VsdFB3ckR0U3RlcDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2IG1fdTJSZXN1bHQ7CisKK31VUmZUZXN0UmVzdWx0UHdyRHREYWM7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IG1fdTFSZXN1bHQ7CisKK31VUmZUZXN0UmVzdWx0UHdyRHREZWZhdWx0VGhyOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgb2s7CisgICAga2FsX2ludDggICAgICBtX2kxQ3VyR2FpblRhYmxlU3RhdGU7CisKK31VUmZUZXN0UmVzdWx0UmVwbGFjZUdhaW5UYWJsZTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MzIgICAgICBjYXBhYmlsaXR5OworICAga2FsX3VpbnQzMiAgICAgIGJhbmRfc3VwcG9ydDsKKyAgIGthbF91aW50MzIgICAgICByeGRfYmFuZF9zdXBwb3J0OyAgIAorICAga2FsX3VpbnQzMiAgICAgIHBhZHJpZnRfYmFuZF9zdXBwb3J0OworICAga2FsX3VpbnQzMiAgICAgIHdjZG1hX2RwZF9iYW5kX3N1cHBvcnQ7Cit9RlRfVU1UU19Nc0NhcGFiaWxpdHlFeDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgIG9rOworICAgIGthbF91aW50OCAgbGlua19zdGF0dXM7Cit9RlRfVU1UU19OU0ZUTGlua1N0YXR1c1JlcG9ydDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAga2FsX2Jvb2wgICAgb2s7ICAgIC8qPCEgb2sgaW5kaWNhdG9yICovCisgICAga2FsX3VpbnQzMiAgc3VtOyAgIC8qPCEgdGhlIHN1bSBvZiBtZWFzdXJlX2NvdW50IHRpbWVzIG9mIHRlbXAgc2Vuc29yIHJlc3VsdCAqLworfSBVUmZUZXN0UmVzdWx0R2V0UmZUZW1wU2Vuc29yOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgb2s7CisgICAga2FsX3VpbnQ4ICBsaW5rX3N0YXR1czsKK30gVVJmTnNmdExpc3RNb2RlQ25mOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgcmZfYmFuZF9pZHg7CisgICAga2FsX3VpbnQxNiBwb3dlcl9sZXZlbF9udW07CisgICAga2FsX3VpbnQxNiBjb2RlX3dvcmRfbnVtOworfSBVUmZUZXN0Q21kU2V0TUlQSUNvZGVXb3JkOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgc3RhdHVzOworICAgIGthbF91aW50MTYgcG93ZXJfbGV2ZWxfbnVtOworICAgIGthbF91aW50MTYgY29kZV93b3JkX251bTsKK30gVVJmVGVzdFJlc3VsdEdldE1JUElDb2RlV29yZDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfaW50MTYgc3RhdHVzOworICAgIGthbF9pbnQxNiB0YWRjX2RhYzsKKyAgICBrYWxfaW50MTYgdGVtcGVyYXR1cmU7CisgICAga2FsX2ludDE2IHRlbXBfaWR4OworfSBVUmZUZXN0UmVzdWx0UmZUZW1wZXJhdHVyZUluZm87CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIGthbF91aW50MzIgICAgICByZXN1bHQ7ICAgICAgICAgLy8gMTogc3VwcG9ydCAwOiBub3Qgc3VwcG9ydAorICAgIGthbF91aW50MzIgICAgICBxdWVyeV9vcF9jb2RlOyAgLy8gcXVlcnkgb3AgY29kZQorfVVSZkNoZWNrSWZGdW5jRXhpc3Q7CisKK3R5cGVkZWYgIGVudW0KK3sKKyAgIENORl9TVUNDRVNTID0gMCwKKyAgIENORl9HRU5FUkFMX0ZBSUwgPSAxLAorICAgQ05GX05WUkFNX1JFQURfRkFJTCA9IDIsCisgICBDTkZfRlJFUV9JTlZBTElEID0gMywKKyAgIENORl9DTURfSU5WQUxJRCA9IDQsCisgICBDTkZfTlZSQU1fU0VUX0ZBSUwgPSA1LAorICAgQ05GX1RYX0RBVEFfQ0hFQ0tfRkFJTCA9IDYsCisgICBDTkZfVFhfU1RSVUNUVVJFX0VSUk9SID0gNywKKyAgIENORl9SWF9TVFJVQ1RVUkVfRVJST1IgPSA4LAorICAgQ05GX1RYX1ZHQV9GUkVRX0NIRUNLX0ZBSUw9OSwKKyAgIENORl9UWF9QV1JfRFRfRlJFUV9DSEVDS19GQUlMPTEwLAorICAgQ05GX0dFVF9SWFRYX1BFRVJfQlVGX09WRVJGTE9XPTExLCAgICAgLy9hZnRlciA2MjkzCisgICBDTkZfQUREUkVDT1JEX0ZBSUw9MTIsICAgICAgICAgICAgICAgICAvL2FmdGVyIDYyOTMKKyAgIENORl9HRVRfUlhUWF9QRUVSX0JVRl9aRVJPPTEzICAgICAgICAgIC8vYWZ0ZXIgNjI5NQorfSAgTlZSQU1fQUNDRVNTX1JFU1VMVF9NU0c7CisKKy8qVFgvUlggY2FsaWJyYXRpb24gZGF0YS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+Ki8KKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKy8qOTcgZ2V0L3NldCBjb21tYW5kIG9wdGltaXphdGlvbiBSZXEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgcnhtX2JhbmRfbnVtOyAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgbnVtYmVyIG9mIGJhbmRzIHRvIEdFVAorICAga2FsX3VpbnQ4ICAgcnhkX2JhbmRfbnVtOworICAga2FsX3VpbnQ4ICAgdHhfYmFuZF9udW07CisgICBrYWxfdWludDggICByeG1fYmFuZF9pbmRleFs4XTsgICAgICAgICAgICAgICAgICAvL0JhbmQgaW5kZXggCisgICBrYWxfdWludDggICByeGRfYmFuZF9pbmRleFs4XTsKKyAgIGthbF91aW50OCAgIHR4X2JhbmRfaW5kZXhbOF07Cit9VVRTVFJlcUdldFJ4VHhDYWxEYXRhVjdscDsKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICBpc191cGxhdGVfdG9fTlZSQU07ICAgICAgICAgICAgICAgICAvL3dyaXRlIHRvIE5WUkFNIG9yIG5vdAorICAga2FsX3VpbnQ4ICAgcnhtX2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgbnVtYmVyIG9mIGJhbmRzIHRvIFNFVAorICAga2FsX3VpbnQ4ICAgcnhkX2NvdW50OworICAga2FsX3VpbnQ4ICAgdHhfY291bnQ7CisgICBrYWxfdWludDE2ICByeG1fb2Zmc2V0OworICAga2FsX3VpbnQxNiAgcnhkX29mZnNldDsKKyAgIGthbF91aW50MTYgIHR4X29mZnNldDsKK31VVFNUUmVxU2V0UnhUeENhbERhdGFWN2xwOyAgICAgICAgICAgLy9Mb2NhbCBwYXJhbWV0ZXIgb2YgcmVxdWVzdCAgYWZ0ZXIgNjI5NSBzZXQgUngvVHggY2FsIGRhdGEgY29tbWFuZAorCisvKjk3IGdldC9zZXQgY29tbWFuZCBvcHRpbWl6YXRpb24gQ25mLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgIG9rOworICAgTlZSQU1fQUNDRVNTX1JFU1VMVF9NU0cgICBlcnJvcl9jaGVjazsgICAgICAgICAgLy9mb3IgY2FsaWJyYXRpb24gZGF0YSBjaGVja2luZworICAga2FsX3VpbnQ4ICAgcnhtX2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgbnVtYmVyIG9mIGJhbmRzIHRvIEdFVAorICAga2FsX3VpbnQ4ICAgcnhkX2NvdW50OworICAga2FsX3VpbnQ4ICAgdHhfY291bnQ7CisgICBrYWxfdWludDggICBwYWRkaW5nOworICAga2FsX3VpbnQxNiAgcnhtX29mZnNldDsgICAgICAgICAgICAgICAgICAgICAgICAgLy9vZmZzZXQgb2YgZGF0YSBpbiBwZWVyIGJ1ZmZlcgorICAga2FsX3VpbnQxNiAgcnhkX29mZnNldDsKKyAgIGthbF91aW50MTYgIHR4X29mZnNldDsKK31VVFNUQ25mR2V0UnhUeENhbERhdGFWN2xwOyAgICAgICAgIC8vTG9jYWwgcGFyYW1ldGVyIG9mIGNvbmZpcm0gIGFmdGVyIDYyOTcgZ2V0IFJ4L1R4IGNhbCBkYXRhIGNvbW1hbmQgCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgb2s7CisgICBOVlJBTV9BQ0NFU1NfUkVTVUxUX01TRyAgIGVycm9yX2NoZWNrOyAgICAgICAgICAvL2ZvciBjYWxpYnJhdGlvbiBkYXRhIGNoZWNraW5nCisgICBrYWxfdWludDggICByeG1fcmVzdWx0X251bTsgICAgICAgICAgICAgICAgICAgICAvL3RoZSBudW1iZXIgb2YgYmFuZHMgdG8gU0VUCisgICBrYWxfdWludDggICByeGRfcmVzdWx0X251bTsKKyAgIGthbF91aW50OCAgIHR4X3Jlc3VsdF9udW07CisgICBOVlJBTV9BQ0NFU1NfUkVTVUxUX01TRyAgcnhtX3Jlc3VsdFs4XTsgICAgICAgICAvL3Jlc3VsdCBzdGF0dXMgb2YgU0VUIGNvbW1hbmQgZm9yIGVhY2ggYmFuZAorICAgTlZSQU1fQUNDRVNTX1JFU1VMVF9NU0cgIHJ4ZF9yZXN1bHRbOF07CisgICBOVlJBTV9BQ0NFU1NfUkVTVUxUX01TRyAgdHhfcmVzdWx0WzhdOworfVVUU1RDbmZTZXRSeFR4Q2FsRGF0YVY3bHA7ICAgICAgICAgICAvL0xvY2FsIHBhcmFtZXRlciBvZiBjb25maXJtIGFmdGVyIDYyOTcgc2V0IFJ4L1R4IGNhbCBkYXRhIGNvbW1hbmQKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorLypUWC9SWCBjYWxpYnJhdGlvbiBkYXRhPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKlJYIGNhbGlicmF0aW9uIGRhdGEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiovCisjZGVmaW5lIFVUU1RfTlZSQU1fU0laRV9WNyA4CisKK3R5cGVkZWYgIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgIHVhcmZjbjsKKyAgIGthbF9pbnQxNiAgICBwYXRoX2xvc3NfSFBNW1VUU1RfTlZSQU1fU0laRV9WN107CisgICBrYWxfaW50MTYgICAgcGF0aF9sb3NzX0xQTVtVVFNUX05WUkFNX1NJWkVfVjddOworICAga2FsX2ludDE2ICAgIHBhdGhfbG9zc19US01bVVRTVF9OVlJBTV9TSVpFX1Y3XTsKK31VVFNUX0xOQV9QQVRITE9TUzsgICAgICAgLy9hZnRlciA2Mjk3IExOQSBwYXRobG9zcyBmb3JtYXQKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgIGJhbmQ7CisgICBrYWxfdWludDggICAgICAgICAgICAgICByeGFudHBhdGg7ICAvLyAxOiBtYWluIHBhdGggICwgIDIgOiBkaXZlcnNpdHkgcGF0aAorICAga2FsX2ludDE2ICAgICAgICAgICAgICAgdGVtcGVyX29mZnNldFtDQUxfVEVNUF9TRUNUSU9OXTsKKyAgIFVUU1RfTE5BX1BBVEhMT1NTICAgICAgIGxvc3Nfb2ZfdWFyZmNuW0NBTF9VQVJGQ05fU0VDVElPTl07Cit9IFVUU1RQYXRobG9zc1Y3OyAgICAgICAvL2FmdGVyIDYyOTcgZ2V0L3NldCBSWCBwYXRobG9zcyAgKGNvbmZpcm0vY29tbWFuZCA6IHBlZXIgYnVmZmVyKQorCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2ludDE2ICAgICAgICAgICAgICAgdGVtcGVyX29mZnNldFtDQUxfVEVNUF9TRUNUSU9OXTsKK31VVFNUVGVtcGVyb2Zmc2V0Vjc7CisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisvKlJYIGNhbGlicmF0aW9uIGRhdGEtLS0tLS0tLS0tNjI5My0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+Ki8KKyNkZWZpbmUgVVRTVF9OVlJBTV9TSVpFX1YzIDcKKworLy90eXBlZGVmICBzdHJ1Y3QKKy8veworLy8gICBrYWxfdWludDE2ICB1YXJmY247CisvLyAgIGthbF9pbnQxNiAgICBwYXRoX2xvc3NfSFBNW1VUU1RfTlZSQU1fU0laRV9WM107CisvLyAgIGthbF9pbnQxNiAgICBwYXRoX2xvc3NfTFBNW1VUU1RfTlZSQU1fU0laRV9WM107CisvL30gVVRTVF9MTkFfUEFUSExPU1M7ICAgICAgIC8vYWZ0ZXIgNjI5MyBMTkEgcGF0aGxvc3MgZm9ybWF0CisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisvKlRYIGNhbGlicmF0aW9uIGRhdGEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgc3RhcnQ7CisgICBrYWxfdWludDE2ICBlbmQ7Cit9IFVMMURfc0hZU1RFUkVTSVNEQVRBOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgbGV2ZWxfMDsKKyAgIGthbF91aW50MTYgIGxldmVsXzE7Cit9IFVMMURfc0RDMkRDOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgbWF4X3VhcmZjbjsKKyAgIGthbF9pbnQxNiAgIHB3cl9vZmZzZXRfZEI7CisgICBrYWxfaW50MTYgICBwd3Jfb2Zmc2V0X3R4ZGFjOworfSBVTDFEX3NBUkZDTl9TRUNUSU9OOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgZGMyZGNfbGV2ZWw7CisgICBrYWxfdWludDE2ICB2Ymlhc19kYWM7CisgICBrYWxfdWludDggICB2bTE7CisgICBrYWxfdWludDggICB2bTI7Cit9IFVMMURfc1BBREFUQTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgIHBhX21vZGU7CisgICBrYWxfaW50OCAgICBwcmY7CisgICBrYWxfdWludDggICBkYzJkY19sdmw7CisgICBrYWxfdWludDggICB2bTE7CisgICBrYWxfdWludDggICB2bTI7CisgICBrYWxfdWludDE2ICB2Ymlhc19kYWM7CisgICBrYWxfdWludDE2ICBwYV9nYWluOworfSBVTDFEX3NQTVVMRVZIQU5ETEU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICAgICAgICAgICBvY3RsZXZfbnVtX3NlY3Rpb247CisgICBrYWxfdWludDggICAgICAgICAgICByZXNlcnZlZF9ieXRlOworICAga2FsX3VpbnQzMiAgICAgICAgICAgcGFfcGhhc2VfY29tcGVuc2F0aW9uWzNdOworICAgVUwxRF9zUE1VTEVWSEFORExFICAgcG11X2xldmVsX2hhbmRsZVs4XTsvLzgKKyAgIGthbF91aW50MTYgICAgICAgICAgIHBhX2dhaW5fZzEyYTsKKyAgIGthbF91aW50MTYgICAgICAgICAgIHBhX2dhaW5fZzEyYjsKK31VTDFEX3NQQU9DVExWTFNFVFRJTkc7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBVTDFEX3NQQURBVEEgICAgICAgICBwYV9kYXRhOworICAga2FsX3VpbnQxNiAgICAgICAgICAgdmdhX2RhY1tOVU1CRVJfT0ZfVkdBX0RBQ107CisgICBVTDFEX3NBUkZDTl9TRUNUSU9OICB2Z2FfY29tcF9ieV9zdWJiYW5kW0NBTF9VQVJGQ05fU0VDVElPTl07CisgICBrYWxfaW50MTYgICAgICAgICAgICB2Z2FfY29tcF9ieV90ZW1wZXJhdHVyZVs4XVsyXTsKK30gVUwxRF9zVFhQT1dFUkRBVEE7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICAgICAgICAgICBwd3JfZHRfdGhyOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgcHdyX2R0X3NlY3Rpb247CisgICBrYWxfdWludDE2ICAgICAgICAgICBwd3JfZHRfZGFjW0NBTF9QV1JfREVURUNUT1JfU0VDVElPTl07CisgICBrYWxfaW50MTYgICAgICAgICAgICBwd3JfZHRfdmFsdWVbQ0FMX1BXUl9ERVRFQ1RPUl9TRUNUSU9OXTsKKyAgIFVMMURfc0FSRkNOX1NFQ1RJT04gIHB3cl9kdF9jb21wX2J5X3N1YmJhbmRbQ0FMX1VBUkZDTl9TRUNUSU9OXTsKKyAgIGthbF9pbnQxNiAgICAgICAgICAgIHB3cl9kdF9jb21wX2J5X3RlbXBlcmF0dXJlWzhdWzJdOworfSBVTDFEX3NQV1REVERBVEE7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBVTDFEX3NEQzJEQyAgICAgICAgICAgICBwYV9kYzJkYzsKKyAgIFVMMURfc1RYUE9XRVJEQVRBICAgICAgIHBvd2VyX2RhY1szXTsKKyAgIFVMMURfc0hZU1RFUkVTSVNEQVRBICAgIHR4X2h2c3RlcmVzaXNbMl07CisgICBVTDFEX3NQV1REVERBVEEgICAgICAgICBwd3JfZHRfZGF0YTsKK30gVUwxRF9zUkFNUERBVEE7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICAgICAgICAgICAgICBiYW5kOworICAgVUwxRF9zUkFNUERBVEEgICAgICAgICAgdHhkYWNEYXRhOworICAgVUwxRF9zUEFPQ1RMVkxTRVRUSU5HICAgdHhQQU9DVExldmVsRGF0YTsKK30gVVJmVGVzdFRYRGFUYUl0ZW07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBXQ0RNQSBEUEQgY29tbW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtCit7CisgICBVUkZfVEVTVF9XQ0RNQV9EUERfOTEgPSAwLAorICAgVVJGX1RFU1RfV0NETUFfRFBEXzkyID0gMSwKKyAgIFVSRl9URVNUX1dDRE1BX0RQRF85MyA9IDIsCisgICBVUkZfVEVTVF9XQ0RNQV9EUERfOTUgPSAzCit9VVJmVGVzdF9XY2RtYV9EcGRfR2VuZXJhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1NUkZfVEVTVF9DTURfU1RBUlRfRFBEX0ZBQ19DQUxfVjMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0KK3sKKyAgIFVSRl9URVNUX1NUQVJUX0RQRF9JTlZBTElEICAgICAgICAgICAgICAgPSAwLAorICAgVVJGX1RFU1RfU1RBUlRfRFBEX09LICAgICAgICAgICAgICAgICAgICA9IDEsCisgICBVUkZfVEVTVF9TVEFSVF9EUERfUEVFUl9TSVpFX01JU01BVENIICAgID0gMiwKKyAgIFVSRl9URVNUX1NUQVJUX0RQRF9FWENFRURfVFRHX0xJTUlUX0lOSVQgPSAzLAorICAgVVJGX1RFU1RfU1RBUlRfRFBEX0VYQ0VFRF9UVEdfTElNSVQgICAgICA9IDQsCisgICBVUkZfVEVTVF9TVEFSVF9EUERfTkVHQVRJVkVfUEFfR0FJTiAgICAgID0gNSwKKyAgIFVSRl9URVNUX1NUQVJUX0RQRF9MQVJHRV9QQV9HQUlOX0RJRkYgICAgPSA2ICAgCisKK31VUmZUZXN0X1N0YXJ0RHBkRmFjQ2FsX1N0YXR1czsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgbnVtX29mX2JhbmQ7CisgICBrYWxfdWludDE2IGNhbF9iYW5kW01BWF9TVVBQT1JURURfQkFORF9JTkRFWF07CisKK31VUmZUZXN0Q21kX1N0YXJ0RHBkX1JlcUluZm87CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggIHN0YXR1czsgLyogVVJmVGVzdF9TdGFydERwZFBhQW5kRHBkRmFjQ2FsX1N0YXR1cyAqLworICAga2FsX3VpbnQxNiBjdXJyX2JhbmRfaWR4OyAgICAKKyAgIGthbF91aW50MzIgY3Vycl9zdWJiYW5kX2lkeDsKKyAgIGthbF91aW50MzIgY3Vycl9nYWluX2lkeDsgICAKKyAgIGthbF9pbnQxNiAgY3Vycl9wYV9nYWluOworICAgCit9VVJmVGVzdENtZF9TdGFydERwZF9DbmZJbmZvOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiBiYW5kX2lkeDsKKyAgIGthbF91aW50MTYgYXB0X3JlZl9jaGFubmVsOworICAga2FsX2ludDE2ICB0cGNfd2FudGVkX3Bfb2Zmc2V0OworICAgCit9VVJmVGVzdF9BcHRSZWZDaGFubmVsX09uZUJhbmQ7CisKKy8qIHN0cnVjdCBmb3IgR1AgdG9vbCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFVSZlRlc3RfQXB0UmVmQ2hhbm5lbF9PbmVCYW5kIHdjZG1hX2FwdF9jaGFubmVsX2luZm9bTUFYX1NVUFBPUlRFRF9CQU5EX0lOREVYXTsKKworfVVSZlRlc3RDbWRfU3RhcnREcGRQYUFuZERwZEZhY0NhbF9SZXFQZHU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNTVJGX1RFU1RfQ01EX1NFVF9EUERfRkFDX1JFU1VMVF9WMyBhbmQgTU1SRl9URVNUX0NNRF9HRVRfRFBEX0ZBQ19SRVNVTFRfVjMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0KK3sKKyAgIFVSRl9URVNUX1NFVF9EUERfSU5WQUxJRCAgICAgICAgICAgID0gMCwKKyAgIFVSRl9URVNUX1NFVF9EUERfT0sgICAgICAgICAgICAgICAgID0gMSwKKyAgIFVSRl9URVNUX1NFVF9EUERfUEVFUl9TSVpFX01JU01BVENIID0gMiwKKyAgIFVSRl9URVNUX1NFVF9EUERfSU5WQUxJRF9CQU5EICAgICAgID0gMworICAgCit9VVJmVGVzdF9TZXREcGRGYWNDYWxfU3RhdHVzOworCit0eXBlZGVmIGVudW0KK3sKKyAgIFVSRl9URVNUX0dFVF9EUERfSU5WQUxJRCAgICAgICAgICAgID0gMCwKKyAgIFVSRl9URVNUX0dFVF9EUERfT0sgICAgICAgICAgICAgICAgID0gMSwKKyAgIFVSRl9URVNUX0dFVF9EUERfSU5WQUxJRF9CQU5EICAgICAgID0gMiAgIAorICAgCit9VVJmVGVzdF9HZXREcGRGYWNDYWxfU3RhdHVzOworCit0eXBlZGVmIHN0cnVjdAoreworICAgLyogVG9vbCBjYW4gc2V0IHNldmVyYWwgYmFuZCBpbiBvbmUgc2V0IGNvbW1hbmQgKi8KKyAgIGthbF91aW50MTYgbnVtX29mX2JhbmQ7CisKK31VUmZUZXN0Q21kX1NldERwZEFsbF9SZXFJbmZvOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiBudW1fb2ZfYmFuZDsKKyAgIGthbF91aW50OCAgc3RhdHVzOyAvKiBVUmZUZXN0X1NldERwZEZhY0NhbF9TdGF0dXMgKi8KKworfVVSZlRlc3RDbWRfU2V0RHBkQWxsX0NuZkluZm87CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2IG51bV9vZl9iYW5kOworCit9VVJmVGVzdENtZF9TZXREcGRQYXJ0aWFsX1JlcUluZm87CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2IG51bV9vZl9iYW5kOworICAga2FsX3VpbnQ4ICBzdGF0dXM7IC8qIFVSZlRlc3RfU2V0RHBkUGFBbmREcGRGYWNDYWxfU3RhdHVzICovCisKK31VUmZUZXN0Q21kX1NldERwZFBhcnRpYWxfQ25mSW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sgICAKKyAgIGthbF91aW50MTYgICAgICAgICAgIGJhbmRfaWR4OworICAga2FsX3VpbnQ4ICAgICAgICAgICAgZHBkX2NhbF9kb25lOworICAga2FsX2ludDE2ICAgICAgICAgICAgZHBkX3RyW0NBTF9VQVJGQ05fU0VDVElPTl07CisKKyAgIC8qIHJhbXAgKi8gICAKKyAgIGthbF9pbnQxNiAgICAgICAgICAgIHZnYV9jb21wX3N1YmJhbmRbVUwxRF9EUERfTUFYX1BBX01PREVfTlVNXVtDQUxfVUFSRkNOX1NFQ1RJT05dOworICAga2FsX2ludDE2ICAgICAgICAgICAgdmdhX2NvbXBfdGVtcGVyYXR1cmVbVUwxRF9EUERfTUFYX1BBX01PREVfTlVNXVtVTDFfRFBEX01BWF9QQV9MRVZFTF9OVU1dOworICAgVUwxRF9zSFlTVEVSRVNJU0RBVEEgdHhfaHlzdGVyZXNpc1tVTDFEX0RQRF9NQVhfUEFfSFlTVF9OVU1dOworCisgICAvKiBwYW9jdCAqLworICAga2FsX3VpbnQ4ICAgICAgICAgICAgb2N0bGV2X251bV9zZWN0aW9uOworICAga2FsX3VpbnQzMiAgICAgICAgICAgcGFfcGhhc2VfY29tcGVuc2F0aW9uW1VMMURfRFBEX01BWF9QQV9NT0RFX05VTV07CisgICBVTDFEX3NQTVVMRVZIQU5ETEUgICBwbXVfbGV2ZWxfaGFuZGxlW1VMMV9EUERfTUFYX1BBX0xFVkVMX05VTV07CisKK31VUmZUZXN0X1NldEdldERwZF9UcGNQZWVyOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICBsdXRbVUwxX0RQRF9NQVhfQU1fTFVUX0dBSU5fTlVNXVtNTURQRF9NQVhfQU1fTFVUX1BXUl9OVU1dOworCit9VVJmVGVzdF9EUERBTUx1dFN1YkJhbmQ7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfaW50OCAgbHV0W1VMMV9EUERfTUFYX1BNX0xVVF9HQUlOX05VTV1bTU1EUERfTUFYX1BNX0xVVF9QV1JfTlVNXTsKKworfVVSZlRlc3RfRFBEUE1MdXRTdWJCYW5kOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2ludDE2ICAgICAgICAgICAgICAgZHBkSW1wbGljaXRBcnJheVtVTDFfRFBEX01BWF9JTVBMSUNJVF9OVU1dOyAvKiBGb3IgdGhlIHBhcmFtZXRlcnMgd2hvc2UgbmFtZSB3aWxsIG5vdCBiZSBzaG93biBpbiBjYWwgZmlsZSAqLwkKKyAgIFVSZlRlc3RfRFBEQU1MdXRTdWJCYW5kIGFtX2x1dF9zdWJiYW5kW0NBTF9VQVJGQ05fU0VDVElPTl07CisgICBVUmZUZXN0X0RQRFBNTHV0U3ViQmFuZCBwbV9sdXRfc3ViYmFuZFtDQUxfVUFSRkNOX1NFQ1RJT05dOworCit9VVJmVGVzdF9TZXRHZXREcGRfRHBkUGVlcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sgICAKKyAgIFVSZlRlc3RfU2V0R2V0RHBkX1RwY1BlZXIgZHBkdHBjX3BlZXI7CisgICBVUmZUZXN0X1NldEdldERwZF9EcGRQZWVyIGRwZF9wZWVyOworCit9VVJmVGVzdENtZF9TZXREcGRGYWNDYWxBbGxfT25lQmFuZCwgVVJmVGVzdENtZF9HZXREcGRGYWNDYWxBbGxfT25lQmFuZDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFVSZlRlc3RfU2V0R2V0RHBkX1RwY1BlZXIgZHBkdHBjX3BlZXI7CisKK31VUmZUZXN0Q21kX1NldERwZEZhY0NhbFBhcnRpYWxfT25lQmFuZDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sgICAgICAgICAgICAgCisgICBrYWxfdWludDE2IG51bV9vZl9iYW5kOworICAga2FsX3VpbnQxNiBiYW5kX2lkeFtNQVhfU1VQUE9SVEVEX0JBTkRfSU5ERVhdOworICAgICAgICAgICAgIAorfVVSZlRlc3RDbWRfR2V0RHBkQWxsX1JlcUluZm87CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggIGdldF9zdGF0dXM7IC8qIFVSZlRlc3RfR2V0RHBkUGFBbmREcGRGYWNDYWxfU3RhdHVzICovCisgICBrYWxfdWludDE2IG51bV9vZl9iYW5kOworCit9VVJmVGVzdENtZF9HZXREcGRBbGxfQ25mSW5mbzsKKworLyogc3RydWN0IGZvciBHUCB0b29sICovCit0eXBlZGVmIHN0cnVjdAoreworICAgVVJmVGVzdENtZF9HZXREcGRGYWNDYWxBbGxfT25lQmFuZCBnZXRfcGVlcltNQVhfU1VQUE9SVEVEX0JBTkRfSU5ERVhdOworCit9VVJmVGVzdENtZF9HZXREcGRGYWNDYWxBbGxfQ25mUGR1OworCit0eXBlZGVmIHN0cnVjdAoreyAgCisgICBVUmZUZXN0Q21kX1NldERwZEZhY0NhbEFsbF9PbmVCYW5kIHNldF9hbGxfcGVlcltNQVhfU1VQUE9SVEVEX0JBTkRfSU5ERVhdOworICAgCit9VVJmVGVzdENtZF9TZXREcGRGYWNDYWxBbGxfUmVxUGR1OworCit0eXBlZGVmIHN0cnVjdAoreworICAgVVJmVGVzdENtZF9TZXREcGRGYWNDYWxQYXJ0aWFsX09uZUJhbmQgc2V0X3BhcnRpYWxfcGVlcltNQVhfU1VQUE9SVEVEX0JBTkRfSU5ERVhdOworCit9VVJmVGVzdENtZF9TZXREcGRGYWNDYWxQYXJ0aWFsX1JlcVBkdTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1NUkZfVEVTVF9DTURfU0VUX0RQRF9QQVRIX0RFTEFZX1NFQVJDSF9WMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgZW51bQoreworICAgVVJGX1RFU1RfU0VUX0RQRF9ERUxBWV9JTlZBTElEICAgICAgICAgICAgPSAwLAorICAgVVJGX1RFU1RfU0VUX0RQRF9ERUxBWV9WQUxJRCAgICAgICAgICAgICAgPSAxLAorICAgVVJGX1RFU1RfU0VUX0RQRF9ERUxBWV9QRUVSX1NJWkVfTUlTTUFUQ0ggPSAyCisgICAKK31VUmZUZXN0X1NldERwZFBhdGhEZWxheVNlYXJjaFYzX1N0YXR1czsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIC8qIFRvb2wgY2FuIHNldCBzZXZlcmFsIGJhbmQgaW4gb25lIHNldCBjb21tYW5kICovCisgICBrYWxfdWludDE2IGJhbmRfbnVtOworCit9VVJmVGVzdENtZF9TZXREcGRQYXRoRGVsYXlTZWFyY2hWM19SZXFJbmZvOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgIHJmX2JhbmQ7CisgICBrYWxfdWludDE2ICAgc3ViYmFuZF9mcmVxW0NBTF9VQVJGQ05fU0VDVElPTl07CisgICBrYWxfaW50MTYgICAgZHBkX3RyW0NBTF9VQVJGQ05fU0VDVElPTl07CisKK31VUmZUZXN0X1NldERwZFBhdGhEZWxheVNlYXJjaFYzX1JlcVBlZXJfT25lQmFuZDsKKworLyogc3RydWN0IGZvciBHUCB0b29sICovCit0eXBlZGVmIHN0cnVjdAoreworICAgVVJmVGVzdF9TZXREcGRQYXRoRGVsYXlTZWFyY2hWM19SZXFQZWVyX09uZUJhbmQgZHBkX29uZV9iYW5kW01BWF9TVVBQT1JURURfQkFORF9JTkRFWF07CisKK31VUmZUZXN0Q21kX1NldERwZFBhdGhEZWxheVNlYXJjaFYzX1JlcVBkdTsKKworLyogQ29uZmlybSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgYmFuZF9udW07CisgICBrYWxfdWludDE2IHN0YXR1czsKKworfVVSZlRlc3RDbWRfU2V0RHBkUGF0aERlbGF5U2VhcmNoVjNfQ25mSW5mbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1NUkZfVEVTVF9DTURfU1RBUlRfRFBEX1BBVEhfREVMQVlfU0VBUkNIX1YzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtCit7CisgICBVUkZfVEVTVF9TVEFSVF9EUERfREVMQVlfSU5WQUxJRCAgICAgICA9IDAsCisgICBVUkZfVEVTVF9TVEFSVF9EUERfREVMQVlfVkFMSUQgICAgICAgICA9IDEsCisgICBVUkZfVEVTVF9TVEFSVF9EUERfREVMQVlfVElNRU9VVCAgICAgICA9IDIsCisgICBVUkZfVEVTVF9TVEFSVF9EUERfREVMQVlfU0VBUkNIX0ZBSUxFRCA9IDMKK31VUmZUZXN0X1N0YXJ0RHBkUGF0aERlbGF5U2VhcmNoVjNfU3RhdHVzOworCisvKiBSZXF1ZXN0ICovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiB0ZXN0X3RpbWVzOworICAga2FsX3VpbnQxNiBzZWFyY2hfYmFuZFtNQVhfU1VQUE9SVEVEX0JBTkRfSU5ERVhdOworfVVSZlRlc3RDbWRfU3RhcnREcGRQYXRoRGVsYXlTZWFyY2hWM19SZXFJbmZvOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTU1SRl9URVNUX0NNRF9HRVRfRFBEX1BBVEhfREVMQVlfU0VBUkNIX1YzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorLyogUmVxdWVzdCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sgICAgICAgICAgICAgCisgICBrYWxfdWludDE2ICAgICAgICBiYW5kX251bTsKKyAgIGthbF91aW50MTYgICAgICAgIHJmX2JhbmRfaW5mb1tNQVhfU1VQUE9SVEVEX0JBTkRfSU5ERVhdOworICAgCit9VVJmVGVzdENtZF9HZXREcGRQYXRoRGVsYXlTZWFyY2hWM19SZXFJbmZvOworCisKKy8qIENvbmZpcm0gKi8KKwordHlwZWRlZiBlbnVtCit7CisgICBVUkZfVEVTVF9HRVRfRFBEX0RFTEFZX0lOVkFMSUQgPSAwLAorICAgVVJGX1RFU1RfR0VUX0RQRF9ERUxBWV9WQUxJRCAgID0gMSAgIAorICAgCit9VVJmVGVzdF9HZXREcGRQYXRoRGVsYXlTZWFyY2hWM19TdGF0dXM7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2IGJhbmRfbnVtOworICAga2FsX3VpbnQxNiBnZXRfc3RhdHVzOyAvKiBVUmZUZXN0X0dldERwZFBhdGhEZWxheVNlYXJjaFYzX1N0YXR1cyAqLworCit9VVJmVGVzdENtZF9HZXREcGRQYXRoRGVsYXlTZWFyY2hWM19DbmZJbmZvOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgIHJmX2JhbmQ7CisgICBrYWxfaW50MTYgICAgZHBkX3RyW0NBTF9VQVJGQ05fU0VDVElPTl07CisKK31VUmZUZXN0X0dldERwZFBhdGhEZWxheVNlYXJjaFYzX0NuZlBlZXJfT25lQmFuZDsKKworLyogc3RydWN0IGZvciBHUCB0b29sICovCit0eXBlZGVmIHN0cnVjdAoreworICAgVVJmVGVzdF9HZXREcGRQYXRoRGVsYXlTZWFyY2hWM19DbmZQZWVyX09uZUJhbmQgZHBkX2RlbGF5X29uZV9iYW5kW01BWF9TVVBQT1JURURfQkFORF9JTkRFWF07CisKK31VUmZUZXN0Q21kX0dldERwZFBhdGhEZWxheVNlYXJjaFYzX0NuZlBkdTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1NUkZfVEVTVF9DTURfU0VUX0RQRF9GQUNfUkVTVUxUX1YzIGFuZCBNTVJGX1RFU1RfQ01EX0dFVF9EUERfRkFDX1JFU1VMVF9WMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJldXFlc3QgKi8KK3R5cGVkZWYgZW51bQoreworICAgVVJGX1RFU1RfVFJBRF9DQUxfRVhFX0lOVkFMSUQgPSAwLAorICAgVVJGX1RFU1RfVFJBRF9DQUxfRVhFX1NUQVJUICAgPSAxLAorICAgVVJGX1RFU1RfVFJBRF9DQUxfRVhFX0VORCAgICAgPSAyCisgICAKK31VUmZUZXN0X1RyYWRDYWxfRXhlX1N0YXR1czsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MzIgZXhlX3N0YXR1czsgLyogVVJmVGVzdF9UcmFkQ2FsX0V4ZV9TdGF0dXMgKi8KKyAgIAorfVVSZlRlc3RDbWRfVHJhZENhbF9SZXFJbmZvOworCisvKiBDb25maXJtICovCit0eXBlZGVmIGVudW0KK3sKKyAgIFVSRl9URVNUX1RSQURfQ0FMX0NNRF9JTlZBTElEID0gMCwKKyAgIFVSRl9URVNUX1RSQURfQ0FMX0NNRF9PSyAgICAgID0gMQorICAgCit9VVJmVGVzdF9UcmFkQ2FsX0NtZF9TdGF0dXM7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDMyIGNtZF9zdGF0dXM7IC8qIFVSZlRlc3RfVHJhZENhbF9DbWRfU3RhdHVzICovCisgICAKK31VUmZUZXN0Q21kX1RyYWRDYWxfQ25mSW5mbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qVFggY2FsaWJyYXRpb24gZGF0YTwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordHlwZWRlZiAgZW51bQoreworICAgU0VUVVBfRkFJTF9HRU5FUkFMID0gMCwKKyAgIFNFVFVQX0ZBSUxfVENNX01JU01BVENIID0gMSwKKyAgIFNFVFVQX0ZBSUxfVEREX1RJTUVSX1NUSUxMX1JVTk5JTkcgPSAyLAorfSAgVUJJTl9NT0RFX1NFVFVQX0ZBSUxfTVNHOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgICAgICAgICAgIG9rOworICAgIGthbF9pbnQ4ICAgICAgICAgICAgICAgIHNldHVwX3Jlc3VsdDsKK30gVVJmVGVzdFJlc3VsdFViaW5Nb2RlU2V0dXA7CisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTYyOTcgR2V0IEZIQyBJbmZvcm1hdGlvbiBmcm9tIFRTVC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFVMMVRTVF9XQ0RNQV9CQU5EX1NVUFBPUlRfVjcgOAorI2RlZmluZSBVTDFUU1RfSFBNX1BPSU5UX1Y3IDgKKyNkZWZpbmUgVUwxVFNUX0xQTV9QT0lOVF9WNyA1CisjZGVmaW5lIFVMMVRTVF9US01fUE9JTlRfVjcgMQorCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4IGNhbGlicmF0aW9uX2JhbmRfbnVtYmVyOworICAga2FsX3VpbnQ4IGNhbGlicmF0aW9uX2JhbmRbVUwxVFNUX1dDRE1BX0JBTkRfU1VQUE9SVF9WN107ICAgICAgICAgLy8gYmFuZCAxIDogYmFuZCBpbmRleCA9IDAKK31VVFNUUmVxR2V0Q2FsSW5mb1Y3bHA7ICAvLyByZXF1ZXN0IGxvY2FsIHBhcmFtZXRlcgorCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4IHN1cHBvcnRfYmFuZF9udW1iZXI7Cit9VVRTVENuZkdldENhbEluZm9WN2xwOyAvLyBjb25mb3JtIGxvY2FsIHBhcmFtZXRlcgorCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgYmFuZDsKKyAgIGthbF91aW50OCAgIGNhbF9wb2ludF9ocG07CisgICBrYWxfdWludDggICBjYWxfcG9pbnRfbHBtOworICAga2FsX3VpbnQ4ICAgY2FsX3BvaW50X3RrbTsKKyAgIGthbF91aW50OCAgIHJ4X2NhbF9zZXF1ZW5jeVtVTDFUU1RfSFBNX1BPSU5UX1Y3K1VMMVRTVF9MUE1fUE9JTlRfVjcrVUwxVFNUX1RLTV9QT0lOVF9WN107CisgICBrYWxfaW50MTYgICByeF9jYWxfZGxfcG93ZXJfbWluW1VMMVRTVF9IUE1fUE9JTlRfVjcrVUwxVFNUX0xQTV9QT0lOVF9WNytVTDFUU1RfVEtNX1BPSU5UX1Y3XTsgIC8vcy41CisgICBrYWxfaW50MTYgICByeF9jYWxfZGxfcG93ZXJfbWF4W1VMMVRTVF9IUE1fUE9JTlRfVjcrVUwxVFNUX0xQTV9QT0lOVF9WNytVTDFUU1RfVEtNX1BPSU5UX1Y3XTsgIC8vcy41CisgICBrYWxfaW50MTYgICByeF9jYWxfZGxfcG93ZXJbVUwxVFNUX0hQTV9QT0lOVF9WNytVTDFUU1RfTFBNX1BPSU5UX1Y3K1VMMVRTVF9US01fUE9JTlRfVjddOyAgICAgIC8vcy41CisgICBrYWxfdWludDggICByeF9sbmFfbW9kZVtVTDFUU1RfSFBNX1BPSU5UX1Y3K1VMMVRTVF9MUE1fUE9JTlRfVjcrVUwxVFNUX1RLTV9QT0lOVF9WN107CisgICBrYWxfdWludDggICByeF9sb2NhdGlvbl9pZHhbVUwxVFNUX0hQTV9QT0lOVF9WNytVTDFUU1RfTFBNX1BPSU5UX1Y3K1VMMVRTVF9US01fUE9JTlRfVjddOworICAga2FsX2Jvb2wgICAgcnhsb3NzX3VzYWdlWzNdW1VMMVRTVF9IUE1fUE9JTlRfVjddOworfVVUU1RDbmZHZXRDYWxJbmZvVjdwYjsgCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTYyOTcgU1RBUlQgRkhDLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVUwxVFNUX0ZIQ19GUkVRVUVOQ1lfTlVNQkVSICAxNQorCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgY2FsX2JhbmRfbnVtYmVyOworICAga2FsX3VpbnQ4ICAgY2FsX2JhbmRbVUwxVFNUX1dDRE1BX0JBTkRfU1VQUE9SVF9WN107CisgICBrYWxfdWludDggICBhbnRlbm5hX3NldHRpbmc7CisgICBrYWxfdWludDggICBzdGVwX2R1cmF0aW9uOworfVVUU1RSZXFGSENWN2xwOworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QKK3sKKy8qY29tbW9uKi8KKyAgIGthbF91aW50OCAgIGJhbmQ7CisgICBrYWxfdWludDggICBmcmVxX2NvdW50OworICAga2FsX3VpbnQ4ICAgcHdyX2NvdW50OworICAga2FsX3VpbnQ4ICAgaHBtX2NhbF9wb2ludDsKKyAgIGthbF91aW50OCAgIGxwbV9jYWxfcG9pbnQ7CisgICBrYWxfdWludDggICB0a21fY2FsX3BvaW50OworLypSWCovCisgICBrYWxfdWludDggICBwd3JfbW9kZVtVTDFUU1RfSFBNX1BPSU5UX1Y3K1VMMVRTVF9MUE1fUE9JTlRfVjcrVUwxVFNUX1RLTV9QT0lOVF9WN107IC8vMDpIUE0gMTpMUE0gMjpUS00KKyAgIGthbF91aW50OCAgIHJ4X2NhbF9zZXF1ZW5jeVtVTDFUU1RfSFBNX1BPSU5UX1Y3K1VMMVRTVF9MUE1fUE9JTlRfVjcrVUwxVFNUX1RLTV9QT0lOVF9WN107CisvKlRYKi8KKyAgIGthbF91aW50OCAgIHBhX21vZGVbVUwxVFNUX0hQTV9QT0lOVF9WNytVTDFUU1RfTFBNX1BPSU5UX1Y3K1VMMVRTVF9US01fUE9JTlRfVjddOworICAga2FsX3VpbnQ4ICAgdmdhX2RhY190cGNfaWR4W1VMMVRTVF9IUE1fUE9JTlRfVjcrVUwxVFNUX0xQTV9QT0lOVF9WNytVTDFUU1RfVEtNX1BPSU5UX1Y3XTsKKyAgIGthbF91aW50OCAgIHBhX3NlY3Rpb25bVUwxVFNUX0hQTV9QT0lOVF9WNytVTDFUU1RfTFBNX1BPSU5UX1Y3K1VMMVRTVF9US01fUE9JTlRfVjddOworICAga2FsX3VpbnQxNiAgcGFfZ2FpbltVTDFUU1RfSFBNX1BPSU5UX1Y3K1VMMVRTVF9MUE1fUE9JTlRfVjcrVUwxVFNUX1RLTV9QT0lOVF9WN107CisvKlJYKi8KKyAgIGthbF9pbnQxNiAgIHJ4X2NhbF9kbF9wb3dlcltVTDFUU1RfSFBNX1BPSU5UX1Y3K1VMMVRTVF9MUE1fUE9JTlRfVjcrVUwxVFNUX1RLTV9QT0lOVF9WN107CisvKlVBUkZDTiovCisgICBrYWxfdWludDE2ICBkbF91YXJmY25bVUwxVFNUX0ZIQ19GUkVRVUVOQ1lfTlVNQkVSXTsKKyAgIGthbF91aW50MTYgIHVsX3VhcmZjbltVTDFUU1RfRkhDX0ZSRVFVRU5DWV9OVU1CRVJdOworLypJbml0aWFsIGZpbGUgZGF0YSovCisgICBVUmZUZXN0VFhEYVRhSXRlbSAgICAgIHR4X2NhbF9kYXRhX2luZm87CisgICBVVFNUVGVtcGVyb2Zmc2V0VjcgICAgIHJ4X3RlbXBlcm9mZnNldF9pbmZvOworICAgVVRTVFRlbXBlcm9mZnNldFY3ICAgICByeGRfdGVtcGVyb2Zmc2V0X2luZm87Cit9VVRTVFJlcUZIQ1Y3cGI7ICAgIC8vYmFuZCB1bml0ICBpdCBkZXBlbmRzIG9uIGxvY2FsIHBhcmFtZXRlciBjYWwgYmFuZCBudW1iZXIgZXhwZW5kIHRvIGFycmF5CisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTYyOTcgR0VUIEZIQyBSRVNVTFQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgICB1bF91YXJmY247CisgICBrYWxfaW50MTYgICAgICBwZF92YWx1ZV9oOworICAga2FsX2ludDE2ICAgICAgcGRfdmFsdWVfbTsKKyAgIGthbF9pbnQxNiAgICAgIHBkX3ZhbHVlX2w7Cit9IFVMMVRTVF9GSENfUERfUkVTVUxUX0lORk8gOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgZGxfdWFyZmNuOworICAga2FsX2ludDE2ICAgaHBtX3Jzc2lbVUwxVFNUX0hQTV9QT0lOVF9WN107CisgICBrYWxfaW50MTYgICBscG1fcnNzaVtVTDFUU1RfTFBNX1BPSU5UX1Y3XTsKKyAgIGthbF9pbnQxNiAgIHRrbV9yc3NpW1VMMVRTVF9US01fUE9JTlRfVjddOworfSBVTDFUU1RfRkhDX1BBVEhMT1NTX1JFU1VMVF9JTkZPIDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgIGJhbmQ7CisgICBVTDFUU1RfRkhDX1BEX1JFU1VMVF9JTkZPICAgICAgICBwZF9yZXN1bHRbVUwxVFNUX0ZIQ19GUkVRVUVOQ1lfTlVNQkVSXTsKKyAgIFVMMVRTVF9GSENfUEFUSExPU1NfUkVTVUxUX0lORk8gIHJ4X3Jzc2lfcmVzdWx0W1VMMVRTVF9GSENfRlJFUVVFTkNZX05VTUJFUl07CisgICBVTDFUU1RfRkhDX1BBVEhMT1NTX1JFU1VMVF9JTkZPICByeGRfcnNzaV9yZXN1bHRbVUwxVFNUX0ZIQ19GUkVRVUVOQ1lfTlVNQkVSXTsKK30gVVRTVENuZkZIQ1Jlc3VsdFY3cGIgOyAgICAgLy9iYW5kIHVuaXQKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgIG9rOworICAga2FsX3VpbnQ4ICAgZXJyb3JfY29kZTsKKyAgIGthbF91aW50OCAgIGJhbmRfbnVtYmVyOyAgICAgIC8vIGluZGljYXRlIGhvdyBtYW55IGJhbmQncyByZXBvcnQgaW4gcGVlciBidWZmZXIKK30gVVRTVENuZkZIQ1Jlc3VsdFY3bHA7CisvKmZvciA5My05NSBjby1maWxlICwgIkdlbiI6c3RhbmQgZm9yIGFueSBnZW5lcmF0aW9uLSBhZGQgaW4gYXBpIHJlYWR5Ki8KK3R5cGVkZWYgVVRTVENuZkZIQ1Jlc3VsdFY3cGIgVVRTVENuZkdldEZIQ1Jlc3VsdEdlbnBiOworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTYyOTcgR0VUIFJTU0ktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgaHdBR0M7CisgICBrYWxfYm9vbCAgICBjb250aV9yc3NpOworICAga2FsX3VpbnQ4ICAgdGVtcGVyYXR1cmU7CisgICBrYWxfdWludDggICBhbnRlbm5hX3BhdGg7CisgICBrYWxfdWludDggICBwb3dlcl9tb2RlOyAvLzA6SFBNIDE6TFBNIDI6dGFsa2luZyBtb2RlCisgICBrYWxfdWludDE2ICB1YXJmY247CisgICBrYWxfdWludDE2ICByeF9yZl9nYWluOworICAga2FsX3VpbnQxNiAgcnhkX3JmX2dhaW47CisgICBrYWxfdWludDE2ICByeF9kaWdpdGFsX2dhaW47CisgICBrYWxfdWludDE2ICByeGRfZGlnaXRhbF9nYWluOworfSBVVFNUUmVxR2V0UlNTSVY3bHA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICBvazsKKyAgIGthbF91aW50OCAgIHJ4X2xuYV9tb2RlOworICAga2FsX3VpbnQ4ICAgcnhkX2xuYV9tb2RlOworICAga2FsX3VpbnQxNiAgdWFyZmNuOworICAga2FsX2ludDE2ICAgcnhfcnNzaTsKKyAgIGthbF9pbnQxNiAgIHJ4ZF9yc3NpOworICAga2FsX3VpbnQxNiAgcnhfdXNlZF9nYWluOworICAga2FsX3VpbnQxNiAgcnhkX3VzZWRfZ2FpbjsKK30gVVRTVENuZkdldFJTU0lWN2xwOworLypmb3IgOTMtOTUgY28tZmlsZSAsICJHZW4iOnN0YW5kIGZvciBhbnkgZ2VuZXJhdGlvbi1hZGQgaW4gQVBJIHJlYWR5Ki8KK3R5cGVkZWYgVVRTVENuZkdldFJTU0lWN2xwIFVUU1RDbmZHZXRSU1NJR2VubHA7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNjI5NyBwb3dlciB0byBnYWluLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgIGFudGVubmFfcGF0aDsKKyAgIGthbF91aW50OCAgIHBvd2VyX21vZGU7IC8vMDpIUE0gMTpMUE0gMjp0YWxraW5nIG1vZGUKKyAgIGthbF91aW50OCAgIHJ4X2NhbF9zZXF1ZW5jeTsKKyAgIGthbF9pbnQxNiAgIHJ4X2RsX3Bvd2VyOworfSBVVFNUUmVxUHdydG9HYWluVjdscDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgIG9rOworICAga2FsX3VpbnQxNiAgcnhfZGlnaXRhbF9nYWluOworICAga2FsX3VpbnQxNiAgcnhkX2RpZ2l0YWxfZ2FpbjsKKyAgIGthbF91aW50MTYgIHJ4X3JmX2dhaW47CisgICBrYWxfdWludDE2ICByeGRfcmZfZ2FpbjsKK31VVFNUQ25mUHdydG9HYWluVjdscDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTYyOTcgbG5hIHRvIGdhaW4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgYmFuZDsKKyAgIGthbF91aW50OCAgIGFudGVubmFfcGF0aDsKKyAgIGthbF91aW50OCAgIHBvd2VyX21vZGU7IC8vMDpIUE0gMTpMUE0gMjp0YWxraW5nIG1vZGUKKyAgIGthbF91aW50OCAgIHJ4X2xuYV9tb2RlOworICAga2FsX3VpbnQ4ICAgcnhkX2xuYV9tb2RlOworfSBVVFNUUmVxTG5hdG9HYWluVjdscDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgIG9rOworICAga2FsX3VpbnQxNiAgcnhfZGlnaXRhbF9nYWluOworICAga2FsX3VpbnQxNiAgcnhkX2RpZ2l0YWxfZ2FpbjsKKyAgIGthbF91aW50MTYgIHJ4X3JmX2dhaW47CisgICBrYWxfdWludDE2ICByeGRfcmZfZ2FpbjsKKyAgIGthbF9pbnQxNiAgIGRsX3Bvd2VyOworfVVUU1RDbmZMbmF0b0dhaW5WN2xwOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNjI5NyBUWCBwb3dlciBhZGp1c3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2ludDggYWRqdXN0X3B3cjsKK31VVFNUUmVxVHhQd3JBZGp1c3RWN2xwOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgb2s7CisgICBrYWxfaW50MTYgY3VycmVudF9wb3dlcjsKK31VVFNUQ25mVHhQd3JBZGp1c3RWN2xwOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTYyOTcgRFBDSCBUWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiAgdWxfZnJlcTsKKyAgICBrYWxfaW50MTYgICBwc2M7ICAgICAgICAvKiAwfjUxMS4gKi8KKyAgICBrYWxfdWludDMyICBzY19jb2RlOyAgICAvKiBTY3JhbWJsaW5nIGNvZGUgIy4gMCB+IDE2Nzc3MjE1ICovCisgICAga2FsX3VpbnQ4ICAgcG93ZXJfY3RybF9tb2RlOworICAgIGthbF91aW50OCAgIHBhX21vZGU7CisgICAga2FsX2ludDE2ICAgcHJmOworICAgIGthbF91aW50MTYgIGFmY19kYWM7CisgICAga2FsX3VpbnQ4ICAgZHBjY2hfcHdyOworICAgIGthbF91aW50OCAgIGRwZGNoX3B3cjsKKworICAgIC8qIEJlbG93IGZvciBVTDFEX1JGX01ldGFfU2V0VHhJbmZvLiAqLworICAgIGthbF9ib29sICAgIG5vX2xvb3BfY3RybDsKKworICAgIC8qIEJlbG93IGZvciBzZXRQYUFwY0RhYy4gKi8KKyAgICBrYWxfdWludDggICByZl9iYW5kOworICAgIGthbF91aW50OCAgIHZtMTsKKyAgICBrYWxfdWludDggICB2bTI7CisgICAga2FsX3VpbnQxNiAgZGMyZGNfZGFjOworICAgIGthbF91aW50MTYgIHZiaWFzX2RhYzsKKyAgICBrYWxfYm9vbCAgICBwd3JfZGV0OworICAgIGthbF91aW50MTYgIGFwY19kYWM7CisgICAga2FsX2Jvb2wgICAgcGFfb2N0bGV2X2N0cmxfdXNlZDsKK31VVFNUUmVxVHhEUENoVjdscDsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTYyOTMgQVRFIHRvb2wgVC1wdXQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvL3RyaWdnZXIgSVEgZHVtcAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICBlbmFibGVfaXFfZHVtcDsgICAgICAgICAgICAgIC8vZW5hYmxlIG9yIGRpc2FibGUgSVEgZHVtcCBtb2RlLgorICAga2FsX3VpbnQxNiAgIGFudF9pZHg7ICAgICAgICAgICAgICAgICAvLzA9UlggbWFpbiBhbnRlbm5hLCAxPVJYIGRpdmVyc2l0eSBhbnRlbm5hLgorfVVUU1RSZXFUcmlnZ2VySXFEdW1wTW9kZVYzbHA7ICAvLyByZXF1ZXN0IGxvY2FsIHBhcmFtZXRlcgorCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgIGR1bXBfc3RhdHVzOyAgICAgICAgICAgICAvLzE9ZW5hYmxlIElRIGR1bXAgbW9kZSBzdWNjZXNzZnVsbHkKK31VVFNUQ25mVHJpZ2dlcklxRHVtcE1vZGVWM2xwOyAvLyBjb25mb3JtIGxvY2FsIHBhcmFtZXRlcgorCisvL2dldCBJUSBkdW1wIHJlc3VsdAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICBpc19kYXRhX3JlYWR5OyAgICAgICAgICAgLy8xPUlRIHJhdyBkYXRhIGlzIHJlYWR5CisgICBrYWxfdWludDE2ICAgZGF0YV9zZWN0aW9uX2xlbmd0aDsgICAgIC8vbGVuZ3RoIG9mIElRIHJhdyBkYXRhIGluIGNvcnJlc3BvbmRpbmcgcGVlciBidWZmZXIKK31VVFNUQ25mR2V0SXFEdW1wUmVzdWx0VjNscDsgLy8gY29uZmlybSBsb2NhbCBwYXJhbWV0ZXIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9pbnQxNiAgIGlfZGF0YTsKKyAgIGthbF9pbnQxNiAgIHFfZGF0YTsKK31VVFNUQ25mR2V0SXFEdW1wUmVzdWx0VjNwYjsvLyBjb25maXJtIHBlZXIgYnVmZmVyIDpSRkVRIHVuaXQgCisvL3NldCBSRkVRCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgIHJmZXFfc2V0X251bTsgLy9udW1iZXIgb2Ygc3ViYmFuZCBSRkVRIHRvIHVwZGF0ZQorfVVUU1RSZXFTZXRSZmVxU3ViYmFuZFYzbHA7ICAgLy8gcmVxdWVzdCBsb2NhbCBwYXJhbWV0ZXIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICAgYmFuZDsgICAgICAgICAgICAgICAgICAgLy9VTVRTIGJhbmQKKyAgIGthbF91aW50MTYgICAgc3ViYmFuZF9pZHg7ICAgICAgICAgICAgLy93aGljaCBzdWItYmFuZCB0aGF0IHVzZXIgd2FudCB0byBmaWxsCisgICBrYWxfdWludDE2ICAgIG1heF91YXJmY247ICAgICAgICAgICAgIC8vbWF4IHVhcmZjbiBvZiB0aGlzIHN1YmJhbmQKKyAgIGthbF91aW50OCAgICAgYW50X2lkeDsgICAgICAgICAgICAgICAgLy93aGljaCBhbnRlbm5hIHNob3VsZCBiZSB3cml0ZSBpbiB0aGlzIGNvbW1hbmQuIDA6IFJYIE1haW4sIDE6UlggRGl2CisgICBrYWxfYm9vbCAgICAgIHJmZXFfZW5hYmxlOyAgICAgICAgICAgIC8vUkZFUSBlbmFibGUgb3Igbm90LiAKKyAgIGthbF9pbnQxNiAgICAgcmZlcV9jb2VmX3JlYWxbN107ICAgICAgLy9SRkVRIHJlYWwgcGFydCBjb2VmZmljaWVudC4gNyB0YXBzLgorICAga2FsX2ludDE2ICAgICByZmVxX2NvZWZfaW1hZ1s3XTsgICAgICAvL1JGRVEgaW1hZ2UgcGFydCBjb2VmZmljaWVudC4gNyB0YXBzLiAJCit9VVRTVFJlcVNldFJmZXFTdWJiYW5kVjNwYjsgIC8vIHJlcXVlc3QgcGVlciBidWZmZXIgOiBzdWJiYW5kIHVuaXQKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICBpc19yZmVxX3NldDsgICAgICAgICAgICAgLy8xPVJGRVEgaXMgc2V0IHRvIE5WUkFNIHN1Y2Nlc3NmdWxseQorfVVUU1RDbmZTZXRSZmVxU3ViYmFuZFYzbHA7IC8vIGNvbmZpcm0gbG9jYWwgcGFyYW1ldGVyCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNjI5NSBnZXQvc2V0IE5TRlQgVFggUE9XRVIgb2Zmc2V0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4IGJhbmQ7Cit9VVRTVFJlcUdldFRYcG93ZXJPZmZzZXRWNWxwOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4IGJhbmQ7CisgICBrYWxfaW50MTYgb2Zmc2V0OworfVVUU1RDbmZHZXRUWHBvd2VyT2Zmc2V0VjVscDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sIHVwZGF0ZW52cmFtOworICAga2FsX3VpbnQ4IGJhbmQ7CisgICBrYWxfdWludDE2IHVsX3VhcmZjbjsKKyAgIGthbF9pbnQxNiBvZmZzZXQ7Cit9VVRTVFJlcVNldFRYcG93ZXJPZmZzZXRWNWxwOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgb2s7Cit9VVRTVENuZlNldFRYcG93ZXJPZmZzZXRWNWxwOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFVSZlRlc3RDbWRUeXBlICAgdXJmX3Rlc3RfY21kX3R5cGU7CisgICB2b2lkICAgICAgICAgICAoKmhhbmRsZXIpKCBpbG1fc3RydWN0KiApOworfVVMMVRTVF9SRl9URVNUX0hBTkRMRVJfVDsKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKlwKK3wqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVV9SRVNFVF9CSVRfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp8CitcKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDMyICBtZWFuaW5nbGVzczsKK30gVVJGVGVzdENtZFJlc2V0QkVSUmVzdWx0OworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgb2s7CisgICBrYWxfdWludDMyICB1NFRvdGFsQml0czsKKyAgIGthbF91aW50MzIgIHU0RXJyb3JCaXRzOworfSBVUkZUZXN0UmVzdWx0UmVzZXRCRVJSZXN1bHQ7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHVuaW9uCit7CisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3UxUmZCYW5kOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91MVB3ckN0cmxNb2RlOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91MVRhYmxlVHlwZTsgICAgICAgICAgICAgICAgLy8gMTogc3BlY2lhbCB0YWJsZSBmb3IgY2FsaWJyYXRpb24sIDI6IG5vcm1hbCB0YWJsZQorICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91MUlMUENTdGVwOworICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91MlR4UGNsSW5kZXg7CisgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZl9iYW5kX2lkeDsKKy8qIFBBIGRyaWZ0IGNvbXBlbnNhdGlvbiAqLworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfUGFEcmlmdDsgICAgICAgICAgICAgICAgICAgLypSODwgXGJyaWVmIHRoZSBwYXJhbWV0ZXIgdG8gVUwxIGZvciBQQSBkcmlmdCBjb21wZW5zYXRpb24gc2V0dGluZyAoMTogdHVybiBvbiwgMDogdHVybiBvZmYpICovCisvKiBSOCBSRiB0b29sICovCisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc181bWh6OworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbWFpbjsKKyAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fckJTSURhdGE7CisgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3JCU0lBZGRyOworLyogRENYTyBkZXZlbG9wbWVudCAqLworICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91NENhcElkOworLyogV00gU3dpdGNoICovCisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YmluX2ZkZF9tb2RlX2luaXQ7ICAgICAgICAgICAvLyAgMSA6IFVCSU4gbW9kZSBJbml0IDNHIEZERCAsICAgICAgMCA6IFVCSU4gbW9kZSBkZS1pbml0IDNHIEZERAorICAgVVJmVGVzdENtZEFGQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZjOworICAgVVJmVGVzdENtZFJTQ1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNjcDsKKyAgIFVSZlRlc3RDbWRUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5X29wX2NvZGU7CisgICAvL1VSZlRlc3RDbWRUeERQQ2ggICAgICAgICAgICAgICAgICAgICAgICAgIHR4ZHBjaDsKKyAgIFVSZlRlc3RDbWRUeEFjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgIHR4YWNjZXNzOworICAgVVJmVGVzdENtZFNldE1JUElDb2RlV29yZCAgICAgICAgICAgICAgICAgc2V0X21pcGlfY3dfcGFyYW07CisgICBVUmZUZXN0Q21kR2V0UmZUZW1wU2Vuc29yICAgICAgICAgICAgICAgICByZlRlbXBlcmF0dXJlOworICAga2FsX2ludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pNEljc0NlbGxQb3dlcjsgICAgICAgICAgICAgLyoqPCBcYnJpZWYgcGFzcyBjZWxsIHBvd2VyIHRvIFVMMSB0byBjaG9vc2UgdGhlIGJlc3QgaW5pdGlhbCBnYWluIGZvciBJQ1MgKi8KKyAgIFVSRlRlc3RDbWRSZXNldEJFUlJlc3VsdCAgICAgICAgICAgICAgICAgIHJlc2V0QkVSUmVzdWx0OworICAgVVRTVENtZFJTQ1BWM2xwICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNjcF92M19scDsKKyAgIFVUU1RDbWRBRkNWM2xwICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmY192M19scDsKKyAgIC8vVVRTVFJlcUdldENhbEluZm9WNWxwICAgICAgICAgICAgICAgICAgICAgZ2V0X2NhbF9pbmZvX3Y1X2xwOyAgICAgICAgICAgLy82Mjk1IGdldCBGSEMgaW5mb21hdGlvbiBmcm9tIFJGRCAmIEZFQworICAgLy9VVFNUUmVxRkhDVjVscCAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaGNfY29udHJvbF92NV9scDsgICAgICAgICAgICAvLzYyOTUgRkhDIGZsb3cgY29udHJvbCBpbmZvbWF0aW9uCisgICAvL1VSZlRlc3RDbWRfR2V0UnhUeENhbERhdGFfUmVxUGFyYW1fVjUgICAgIGdldF9SeFR4X2NhbF9kYXRhX2NvbW1hbmRfdjVfbHA7ICAvL2FmdGVyNjI5NQorICAgLy9VUmZUZXN0Q21kX1NldFJ4VHhDYWxEYXRhX1JlcVBhcmFtX1Y1ICAgICBzZXRfUnhUeF9jYWxfZGF0YV9jb21tYW5kX3Y1X2xwOyAgLy9hZnRlcjYyOTUKKyAgIC8vVVRTVFJlcUdldFJTU0lWNWxwICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3Jzc2lfdjVfbHA7ICAgICAgICAgICAgICAgLy82Mjk1IFJGIHRvb2wgUlNTSQorICAgLy9VVFNUUmVxUHdydG9HYWluVjVscCAgICAgICAgICAgICAgICAgICAgICBwd3JfdG9fZ2Fpbl92NV9scDsgICAgICAgICAgICAvLzYyOTUgVHJhZGssIE5TRlQKKyAgIC8vVVRTVFJlcUxuYXRvR2FpblY1bHAgICAgICAgICAgICAgICAgICAgICAgbG5hX3RvX2dhaW5fdjVfbHA7ICAgICAgICAgICAgLy82Mjk1IFJGIHRvb2wgZ2V0IFJTU0kgY2FsY3VsYXRvcgorICAgVVRTVFJlcVRyaWdnZXJJcUR1bXBNb2RlVjNscCAgICAgICAgICAgICAgdHJpZ2dlcl9pcV9kdW1wX3YzX2xwOyAgICAvL1RyaWdnZXIgSVEgZHVtcAorICAgVVRTVFJlcVNldFJmZXFTdWJiYW5kVjNscCAgICAgICAgICAgICAgICAgc2V0X3JmZXFfc3ViYmFuZF92M19scDsgICAvL1NldCBSRkVRIHN1YmJhbmQgcmVzdWx0CisgICBVVFNUUmVxR2V0VFhwb3dlck9mZnNldFY1bHAgICAgICAgICAgICAgICBnZXRfdHhfcG93ZXJfb2Zmc2V0X3Y1X2xwOyAgICAvLzYyOTUgZ2V0IFRYIHBvd2VyIG9mZnNldCBpbiBOU0ZUCisgICBVVFNUUmVxU2V0VFhwb3dlck9mZnNldFY1bHAgICAgICAgICAgICAgICBzZXRfdHhfcG93ZXJfb2Zmc2V0X3Y1X2xwOyAgICAvLzYyOTUgc2V0IFRYIHBvd2VyIG9mZnNldCBpbiBOU0ZUCisgICBVVFNUUmVxR2V0Q2FsSW5mb1Y3bHAgICAgICAgICAgICAgICAgICAgICBnZXRfY2FsX2luZm9fdjdfbHA7CisgICBVVFNUUmVxRkhDVjdscCAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaGNfY29udHJvbF92N19scDsKKyAgIFVUU1RSZXFHZXRSeFR4Q2FsRGF0YVY3bHAgICAgICAgICAgICAgICAgIGdldF9SeFR4X2NhbF9kYXRhX3Y3X2xwOworICAgVVRTVFJlcVNldFJ4VHhDYWxEYXRhVjdscCAgICAgICAgICAgICAgICAgc2V0X1J4VHhfY2FsX2RhdGFfdjdfbHA7CisgICBVVFNUUmVxR2V0UlNTSVY3bHAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfcnNzaV92N19scDsKKyAgIFVUU1RSZXFQd3J0b0dhaW5WN2xwICAgICAgICAgICAgICAgICAgICAgIHB3cl90b19nYWluX3Y3X2xwOworICAgVVRTVFJlcUxuYXRvR2FpblY3bHAgICAgICAgICAgICAgICAgICAgICAgbG5hX3RvX2dhaW5fdjdfbHA7CisgICBVVFNUUmVxVHhQd3JBZGp1c3RWN2xwICAgICAgICAgICAgICAgICAgICB0eF9wd3JfYWRqdXN0X3Y3X2xwOworICAgVVRTVFJlcVR4RFBDaFY3bHAgICAgICAgICAgICAgICAgICAgICAgICAgdHhkcGNoX3Y3X2xwOworfVVSZlRlc3RDbWRQYXJhbTsKKwordHlwZWRlZiB1bmlvbgoreworICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2s7CisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudnJhbUFjY2Vzc1Jlc3VsdDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMbmFNb2RlOworICAga2FsX2ludDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91MlB3ckRldFJlc3VsdDsKKyAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJzaV9kYXRhOworICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91NE1heENhcElkOworICAgRlRfVU1UU19Nc0NhcGFiaWxpdHlFeCAgICAgICAgICAgICAgICAgICAgbV9yVGFyZ2V0Q2FwYWJpbGl0eTsKKyAgIEZUX1VNVFNfTlNGVExpbmtTdGF0dXNSZXBvcnQgICAgICAgICAgICAgIG1fck5TRlRMaW5rU3RhdHVzUmVwb3J0OworICAgVVJmTnNmdExpc3RNb2RlQ25mICAgICAgICAgICAgICAgICAgICAgICAgbV9yTlNGVExpc3RNb2RlTGlua1N0YXR1c1JlcG9ydDsKKyAgIFVMMURfUkZfTlNGVF9CRVRfQklUX0NOVF9GT1JfQkVSX0NORl9UICAgIG1fck5TRlRCRVJSZXN1bHQ7CisgICBVUmZUZXN0UmVzdWx0QUZDICAgICAgICAgICAgICAgICAgICAgICAgICBhZmM7CisgICBVUmZUZXN0UmVzdWx0UkZJRCAgICAgICAgICAgICAgICAgICAgICAgICByZmlkOworICAgVVJmQ2hlY2tJZkZ1bmNFeGlzdCAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tJZkZ1bmNFeGlzdDsKKyAgIFVSZlRlc3RSZXN1bHRBRkNfRXggICAgICAgICAgICAgICAgICAgICAgIGFmY19leDsKKyAgIFVSZlRlc3RSZXN1bHRQd3JEdERhYyAgICAgICAgICAgICAgICAgICAgIHB3cl9kdF9kYWM7CisgICBVUmZUZXN0UmVzdWx0UHdyRHRTdGVwICAgICAgICAgICAgICAgICAgICBwd3JfZHRfc3RlcDsKKyAgIFVSZlRlc3RSZXN1bHRHZXRSZlRlbXBTZW5zb3IgICAgICAgICAgICAgIHJmVGVtcGVyYXR1cmU7CisgICBVUmZUZXN0UmVzdWx0R2V0TUlQSUNvZGVXb3JkICAgICAgICAgICAgICBnZXRfbWlwaV9jd19wYXJhbTsKKyAgIFVSZlRlc3RSZXN1bHRQd3JEdERlZmF1bHRUaHIgICAgICAgICAgICAgIHB3cl9kdF9kZWZhdWx0X3RocjsKKyAgIFVSZlRlc3RSZXN1bHRSZXBsYWNlR2FpblRhYmxlICAgICAgICAgICAgIHJlcGxhY2VfZ2Fpbl90YWJsZTsKKyAgIFVSZlRlc3RSZXN1bHRSZlRlbXBlcmF0dXJlSW5mbyAgICAgICAgICAgIHJmVGVtcGVyYXR1cmVJbmZvOworICAgVVJmVGVzdFJlc3VsdFViaW5Nb2RlU2V0dXAgICAgICAgICAgICAgICAgdWJpbl9tb2RlX3NldHVwX3Jlc3VsdDsKKyAgIFVSZlRlc3RSZXN1bHROU0ZUUlNTSSAgICAgICAgICAgICAgICAgICAgIGZ0X3JwdF9uc2Z0X3Jzc2k7ICAgICAgICAgICAgICAgICAgIC8qZm9yIGdldHRpbmcgUlNTSSB2YWx1ZSBkdXJpbmcgTlNGVCovCisgICBVUkZUZXN0UmVzdWx0UmVzZXRCRVJSZXN1bHQgICAgICAgICAgICAgICByZXNldEJFUlJlc3VsdDsKKyAgIC8vVVRTVENuZkdldENhbEluZm9WNWxwICAgICAgICAgICAgICAgICAgICAgY25mX2dldF9jYWxfaW5mb192NV9scDsgICAgICAgICAgLy82Mjk1IGdldCBjYWxpYnJhdGlvbiBpbmZvcm1hdGlvbgorICAgLy9VVFNUQ25mRkhDVjVscCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbmZfZmhjX2NvbnRyb2xfdjVfbHA7ICAgICAgICAgICAvLzYyOTUgRkhDIGZsb3cgY29udHJvbCBpbmZvbWF0aW9uCisgICAvL1VUU1RDbmZHZXRGSENSZXN1bHRWNWxwICAgICAgICAgICAgICAgICAgIGNuZl9maGNfcmVwb3J0X3Y1X2xwOyAgICAgICAgICAgIC8vNjI5NSBmaGMgcmVwb3J0CisgICAvL1VSZlRlc3RDbWRfR2V0UnhUeENhbERhdGFfQ25mUGFyYW1fVjUgICAgIGdldF9SeFR4X2NhbF9kYXRhX3Byb2Nlc3NfcmVzdWx0X3Y1X2xwOyAvLzYyOTUgZ2V0IGRhdGEKKyAgIC8vVVJmVGVzdENtZF9TZXRSeFR4Q2FsRGF0YV9DbmZQYXJhbV9WNSAgICAgc2V0X1J4VHhfY2FsX2RhdGFfcHJvY2Vzc19yZXN1bHRfdjVfbHA7IC8vNjI5NSBzZXQgZGF0YQorICAgLy9VVFNUQ25mR2V0UlNTSVY1bHAgICAgICAgICAgICAgICAgICAgICAgICBjbmZfZ2V0X3Jzc2lfdjVfbHA7ICAgICAgICAgICAgICAvLzYyOTUgUkYgdG9vbCBSU1NJCisgICAvL1VUU1RDbmZQd3J0b0dhaW5WNWxwICAgICAgICAgICAgICAgICAgICAgIGNuZl9wd3JfdG9fZ2Fpbl92NV9scDsgICAgICAgICAgIC8vNjI5NSBUcmFkaywgTlNGVAorICAgLy9VVFNUQ25mTG5hdG9HYWluVjVscCAgICAgICAgICAgICAgICAgICAgICBjbmZfbG5hX3RvX2dhaW5fdjVfbHA7ICAgICAgICAgICAvLzYyOTUgUkYgdG9vbCBnZXQgUlNTSSBjYWxjdWxhdG9yCisgICBVVFNUQ25mVHJpZ2dlcklxRHVtcE1vZGVWM2xwICAgICAgICAgICAgICBjbmZfdHJpZ2dlcl9pcV9kdW1wX3YzX2xwOyAgICAgLy9UcmlnZ2VyIElRIGR1bXAKKyAgIFVUU1RDbmZHZXRJcUR1bXBSZXN1bHRWM2xwICAgICAgICAgICAgICAgIGNuZl9nZXRfaXFfZGF0YV92M19scDsgICAgICAgICAvL0dldCBJUSBkdW1wIHJlc3VsdAorICAgVVRTVENuZlNldFJmZXFTdWJiYW5kVjNscCAgICAgICAgICAgICAgICAgY25mX3NldF9yZmVxX3N1YmJhbmRfdjNfbHA7ICAgIC8vU2V0IFJGRVEgc3ViYmFuZCByZXN1bHQKKyAgIFVUU1RDbmZHZXRUWHBvd2VyT2Zmc2V0VjVscCAgICAgICAgICAgICAgIGNuZl9nZXRfdHhfcG93ZXJfb2Zmc2V0X3Y1X2xwOyAgIC8vNjI5NSBnZXQgVFggcG93ZXIgb2Zmc2V0IGluIE5TRlQKKyAgIFVUU1RDbmZTZXRUWHBvd2VyT2Zmc2V0VjVscCAgICAgICAgICAgICAgIGNuZl9zZXRfdHhfcG93ZXJfb2Zmc2V0X3Y1X2xwOyAgIC8vNjI5NSBzZXQgVFggcG93ZXIgb2Zmc2V0IGluIE5TRlQKKyAgIFVUU1RDbmZHZXRDYWxJbmZvVjdscCAgICAgICAgICAgICAgICAgICAgIGNuZl9nZXRfY2FsX2luZm9fdjdfbHA7CisgICAvL1VUU1RDbmZGSENWN2xwICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNuZl9maGNfY29udHJvbF92N19scDsKKyAgIFVUU1RDbmZGSENSZXN1bHRWN2xwICAgICAgICAgICAgICAgICAgICAgIGNuZl9maGNfcmVwb3J0X3Y3X2xwOworICAgVVRTVENuZkdldFJ4VHhDYWxEYXRhVjdscCAgICAgICAgICAgICAgICAgY25mX2dldF9SeFR4X2NhbF9kYXRhX3Y3X2xwOworICAgVVRTVENuZlNldFJ4VHhDYWxEYXRhVjdscCAgICAgICAgICAgICAgICAgY25mX3NldF9SeFR4X2NhbF9kYXRhX3Y3X2xwOworICAgVVRTVENuZkdldFJTU0lWN2xwICAgICAgICAgICAgICAgICAgICAgICAgY25mX2dldF9yc3NpX3Y3X2xwOworICAgVVRTVENuZlB3cnRvR2FpblY3bHAgICAgICAgICAgICAgICAgICAgICAgY25mX3B3cl90b19nYWluX3Y3X2xwOworICAgVVRTVENuZkxuYXRvR2FpblY3bHAgICAgICAgICAgICAgICAgICAgICAgY25mX2xuYV90b19nYWluX3Y3X2xwOworICAgVVRTVENuZlR4UHdyQWRqdXN0VjdscCAgICAgICAgICAgICAgICAgICAgY25mX3R4X3B3cl9hZGp1c3RfdjdfbHA7Cit9IFVSZlRlc3RSZXN1bHRQYXJhbTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVF9IRFIKKyAgICBVUmZUZXN0Q21kVHlwZSAgICAgdHlwZTsKKyAgICBVUmZUZXN0Q21kUGFyYW0gICAgcGFyYW07Cit9IGZ0X3VyZl90ZXN0X3JlcV9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUX0hEUgorICAgIFVSZlRlc3RDbWRUeXBlICAgICB0eXBlOworICAgIFVSZlRlc3RSZXN1bHRQYXJhbSBwYXJhbTsKK30gZnRfdXJmX3Rlc3RfY25mX1Q7CisKK3R5cGVkZWYgZnRfdXJmX3Rlc3RfcmVxX1QgZnRfdG9fdWwxdHN0X3N0cnVjdDsKK3R5cGVkZWYgZnRfdXJmX3Rlc3RfY25mX1QgdWwxdHN0X3RvX2Z0X3N0cnVjdDsKKwordHlwZWRlZiBmdF91cmZfdGVzdF9yZXFfVCBmdF91cmZfdGVzdF9yZXFfaWRfc3RydWN0OwordHlwZWRlZiBmdF91cmZfdGVzdF9jbmZfVCBmdF91cmZfdGVzdF9jbmZfaWRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQzMiAgcGFyYW1fbm90X3VzZWQ7Cit9VVRTVF9wYl9udWxsX3N0cnVjdDsKKworI2VuZGlmICAvLyAjaWYgZGVmaW5lZChfX1VNVFNfUkFUX18pICYmIGRlZmluZWQoX19NVEtfVUwxX0ZERF9fKQorCisjZW5kaWYgLy8gI2lmbmRlZiBfX0ZUX01TR19VTDFSRl9IX18KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0X21zZ191dGlsLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdF9tc2dfdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOWNhNzgKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdF9tc2dfdXRpbC5oCkBAIC0wLDAgKzEsMjUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBNb2RpZmljYXRpb24gTm90aWNlOgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgTWVkaWFUZWsgSW5jLiBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDAxCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgZnRfbXNnX3V0aWwuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgTWVzc2FnZXMgZGVmaW5pdGlvbiBvZiBVVElMIGNhdGVnb3J5IG9mIEZUIExpYnJhcnkKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0ZUX01TR19VVElMX0hfXworI2RlZmluZSBfX0ZUX01TR19VVElMX0hfXworI2luY2x1ZGUgImZ0X21zZ19jb21tb24uaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogIE1lc3NhZ2Ugc3RydWN0dXJlcyBkZWZpbmVkIGZvciB1dGlsaXR5IGNvbW1hbmQgCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIGVudW0geworRlRfVVRJTENNRF9DSEVDS19JRl9GVU5DX0VYSVNUID0gMAorICAgICxGVF9VVElMQ01EX0NIRUNLX0lGX0lTUF9TVVBQT1JUCisgICAgLEZUX1VUSUxDTURfUVVFUllfQlRfTU9EVUxFX0lECisgICAgLEZUX1VUSUxDTURfRU5BQkxFX1dBVENIRE9HX1RJTUVSCisgICAgLEZUX1VUSUxDTURfQ0hFQ0tfSUZfQUNPVVNUSUMxNl9TVVBQT1JUCisgICAgLEZUX1VUSUxDTURfQ0hFQ0tfSUZfQVVESU9QQVJBTTQ1X1NVUFBPUlQKKyAgICAsRlRfVVRJTENNRF9DSEVDS19JRl9MT1dfQ09TVF9TSU5HTEVfQkFOS19GTEFTSAorICAgICxGVF9VVElMQ01EX1FVRVJZX1BNSUNfSUQKKyAgICAsRlRfVVRJTENNRF9CVF9QT1dFUl9PTgorICAgICxGVF9VVElMQ01EX0xFRF9MSUdIVF9MRVZFTAorICAgICxGVF9VVElMQ01EX1ZJQlJBVE9SX09OT0ZGCisgICAgLEZUX1VUSUxDTURfUVVFUllfTE9DQUxfVElNRQorICAgICxGVF9VVElMQ01EX0NIRUNLX0lGX1dJRklfQUxDX1NVUFBPUlQKKyAgICAsRlRfVVRJTENNRF9SRl9JVENfUENMCisgICAgLEZUX1VUSUxDTURfQ0hFQ0tfSUZfRFJDX1NVUFBPUlQKKyAgICAsRlRfVVRJTENNRF9DSEVDS19JRl9CVF9QT1dFUk9OCisgICAgLEZUX1VUSUxDTURfTUFJTl9TVUJfTENEX0xJR0hUX0xFVkVMCisgICAgLEZUX1VUSUxDTURfQ0hFQ0tfSUZfVUxDX0ZBVF9TVVBQT1JUCisgICAgLEZUX1VUSUxDTURfQ0hFQ0tfSUZfU01BUlRfUEhPTkVfTU9ERU1fU1VQUE9SVAorICAgICxGVF9VVElMQ01EX0NIRUNLX1RBUkdFVF9NRVRBX1JFUVVJUkVEX1ZFUlMKKyAgICAsRlRfVVRJTENNRF9TRVRfVEFSR0VUX0NIRUNLX1BBUkFTCisgICAgLy8tLS0tLS0tLS0tLS0tLSBjaGVjayBpZiB0YXJnZXQgbmVlZCB0byBwZXJmb3JtIE5WUkFNIHJlYWQvd3JpdGUgc2VjdXJpdHkgY2hlY2sKKyAgICAsRlRfVVRJTENNRF9DSEVDS19JRl9UQVJHRVRfTlZfU0VDX09OCisgICAgLEZUX1VUSUxDTURfUkVCT09UX1RPX05PUk1BTF9NT0RFIC8vIHJlYm9vdCB0YXJnZXQgdG8gbm9ybWFsIG1vZGUKKyAgICAsRlRfVVRJTENNRF9RVUVSWV9CVF9XSUZJX1NJTkdMRV9BTlRFTk5BX0NBUAorICAgICxGVF9VVElMQ01EX1NFVF9BTlRFTk5BX1BBVEhfVE9fQlQKKyAgICAsRlRfVVRJTENNRF9TRVRfQU5URU5OQV9QQVRIX1RPX1dJRkkKKyAgICAsRlRfVVRJTENNRF9RVUVSWV9UQVJHRVRfT1BUSU9OX0lORk8KKyAgICAsRlRfVVRJTENNRF9RVUVSWV9MSU1JVEVEX1NUQVRFCisgICAgLEZUX1VUSUxDTURfUVVFUllfVlBBX1ZPTFRBR0VfTElTVAorICAgICxGVF9VVElMQ01EX1FVRVJZX0RSSVZFX0FWQUlMQUJMRV9GT1JfRklMRV9TSVpFCisgICAgLEZUX1VUSUxDTURfUVVFUllfTUFYX0NUUkxfQlVGRkVSX1NJWkUKKyAgICAsRlRfVVRJTENNRF9RVUVSWV9BRENfTU9EVUxFX1NVUFBPUlQKKyAgICAsRlRfVVRJTENNRF9RVUVSWV9SVENfTU9EVUxFX1NVUFBPUlQKKyAgICAsRlRfVVRJTENNRF9RVUVSWV9NRVRBX01PREVfVFJBQ0UKKyAgICAsRlRfVVRJTENNRF9FTkFCTEVfTUVUQV9NT0RFX1RSQUNFCisgICAgLEZUX1VUSUxDTURfUVVFUllfTU9ERU1fTU9ERQorICAgICxGVF9VVElMQ01EX0VORAorfSBGdFV0aWxDbWRUeXBlOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQzMiAgICAgICAgcXVlcnlfZnRfbXNnX2lkOworICAgIGthbF91aW50MzIgICAgICAgIHF1ZXJ5X29wX2NvZGU7Cit9IEZ0VXRpbENoZWNrSWZGdW5jRXhpc3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggICAgICAgIGxlZF9saWdodF9sZXZlbDsKK30gRnRMRURMZXZlbDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCAgICAgICAgbGNkX3R5cGU7CisgICAga2FsX3VpbnQ4ICAgICAgICBsY2RfbGlnaHRfbGV2ZWw7Cit9IEZ0TENETGV2ZWw7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggICAgICAgIG9ub2ZmOworfSBGdFZpYnJhdG9yT25PZmY7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDE2ICAgICAgICBpbnRlcnZhbDsKK30gRnRXYXRjaERvZzsKKworCit0eXBlZGVmIGVudW0gCit7CisgICAgTUVUQV9WRVJTSU9OX1VTRVJfREVGSU5FCisgICAsTUVUQV9WRVJTSU9OX01FVEFfRExMX1VUSUxfVkVSCisgICAsTUVUQV9WRVJTSU9OX1RZUEVfRU5ECit9TUVUQV9WRVJTSU9OX1RZUEU7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIE1FVEFfVkVSU0lPTl9UWVBFICAgbV9lVmVyVHlwZTsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgIGJfQXNzZXJ0V2hlblZlckNoZWNrRmFpbDsgIAorICAgIGthbF91aW50MzIgICAgICAgICAgbV91NE1haW5WZXJzaW9uOyAgCisgICAga2FsX3VpbnQzMiAgICAgICAgICBtX3U0TWlub3JWZXJzaW9uOyAKKyAgICBrYWxfdWludDMyICAgICAgICAgIG1fdTRCdWlsZE51bTsgICAgIAorfU1FVEFfVVRJTF9DSEVDS19UQVJHRVRfVkVSX1JFUV9UOworCisKK3R5cGVkZWYgc3RydWN0IAoreyAKKyAgICBrYWxfYm9vbCAgICBtX2JDaGVja1Bhc3M7CisgICAga2FsX3VpbnQzMiAgbV91NFRhcmdldE1haW5WZXJzaW9uOyAgCisgICAga2FsX3VpbnQzMiAgbV91NFRhcmdldE1pbm9yVmVyc2lvbjsKKyAgICBrYWxfdWludDMyICBtX3U0VGFyZ2V0QnVpbGROdW07ICAgCit9TUVUQV9VVElMX0NIRUNLX1RBUkdFVF9WRVJfQ05GX1Q7ICAvLyBzdG9yZSBpbiBwZWVyIGJ1ZmZlciAgZm9yIGJhY2t3YXJkIGNvbXBhaWJpbGl0eQorCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICBrYWxfYm9vbCAgIGJfVGFyZ2V0QXNzZXJ0Q2hlY2tGbGFnOworICAgIGthbF9ib29sICAgYl9TZXRDdXJSZWN2TXNnVGltZXM7CisgICAga2FsX3VpbnQ4ICBtX3UxQ3VyUmVjdk1zZ1RpbWVzOyAgCit9TUVUQV9VVElMX1NFVF9BU1NFUlRfQ0hFQ0tfUEFSQXNfUkVRX1Q7CisKKwordHlwZWRlZiB1bmlvbiB7CisgICAgRnRVdGlsQ2hlY2tJZkZ1bmNFeGlzdCAgICAgICAgICAgICAgICAgIENoZWNrSWZGdW5jRXhpc3Q7CisgICAgRnRXYXRjaERvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhdGNoRG9nOworICAgIEZ0TEVETGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRURMZXZlbDsKKyAgICBGdExDRExldmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTENETGV2ZWw7CisgICAgRnRWaWJyYXRvck9uT2ZmICAgICAgICAgICAgICAgICAgICAgICAgIFZpYnJPbk9mZjsKKyAgICBNRVRBX1VUSUxfQ0hFQ0tfVEFSR0VUX1ZFUl9SRVFfVCAgICAgICAgbV9yQ2hlY2tNZXRhVmVyUmVxOworICAgIE1FVEFfVVRJTF9TRVRfQVNTRVJUX0NIRUNLX1BBUkFzX1JFUV9UICBtX3JTZXRQd3JPZmZQYXJhc1JlcTsKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXk7ICAgICAgICAvLyBleHRlbmQgYWxpZ25tZW50IHRvIDQgYnl0ZXMKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkRmlsZVNpemU7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlX21vZGU7Cit9IEZ0VXRpbENtZFJlcV9VOworCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICBrYWxfdWludDggICAgICAgIHJ0Y19zZWM7ICAgIC8qIHNlY29uZHMgYWZ0ZXIgdGhlIG1pbnV0ZSAgIC0gWzAsNTldICAqLworICAgIGthbF91aW50OCAgICAgICAgcnRjX21pbjsgICAgLyogbWludXRlcyBhZnRlciB0aGUgaG91ciAgICAgLSBbMCw1OV0gICovCisgICAga2FsX3VpbnQ4ICAgICAgICBydGNfaG91cjsgICAvKiBob3VycyBhZnRlciB0aGUgbWlkbmlnaHQgICAtIFswLDIzXSAgKi8KKyAgICBrYWxfdWludDggICAgICAgIHJ0Y19kYXk7ICAgIC8qIGRheSBvZiB0aGUgbW9udGggICAgICAgICAgIC0gWzEsMzFdICAqLworICAgIGthbF91aW50OCAgICAgICAgcnRjX21vbjsgICAgLyogbW9udGhzICAgICAgICAgICAgICAgICAgICAgICAgLSBbMSwxMl0gKi8KKyAgICBrYWxfdWludDggICAgICAgIHJ0Y193ZGF5OyAgIC8qIGRheXMgaW4gYSB3ZWVrICAgICAgICAgICAgICAgLSBbMSw3XSAqLworICAgIGthbF91aW50OCAgICAgICAgcnRjX3llYXI7ICAgLyogeWVhcnMgICAgICAgICAgICAgICAgICAgICAgLSBbMCwxMjddICovCit9IEZ0UnRjOworCisjZGVmaW5lIE1FVEFfTElQVE9OX09QVElPTl9PTiAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTUVUQV9UQzAxX09QVElPTl9PTiAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBNRVRBX0FTVF9URF9PUFRJT05fT04gICAweDAwMDAwMDA0Cit0eXBlZGVmIHVuaW9uIHsKKyAgICBGdFV0aWxDaGVja0lmRnVuY0V4aXN0ICBDaGVja0lmRnVuY0V4aXN0OworICAgIGthbF91aW50OCAgICAgICAgICAgICAgIGJ0X21vZHVsZV9pZDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICBwbWljX2lkOworICAgIEZ0UnRjICAgICAgICAgICAgICAgICAgIHJ0YzsKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICByZl9wY2w7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgbV9iTlZTZWNPbjsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICBtX2JCVFdpRmlTaW5nbGVBbnRlbm5hOworICAgIGthbF91aW50MzIgICAgICAgICAgICAgIG1fdTRUYXJnZXRPcHRpb25JbmZvOworICAgIGthbF91aW50MzIgICAgICAgICAgICAgIGR1bW15Oy8vIGV4dGVuZCBhbGlnbm1lbnQgdG8gNCBieXRlcworICAgIGthbF91aW50MzIgICAgICAgICAgICAgIG1fdTRMaW1pdGVkU3RhdGVJbmRpY2F0b3I7CisgICAga2FsX2ludDE2ICAgICAgICAgICAgICAgZHJpdmVMZXR0ZXI7CisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgbWF4Q29udHJvbEJ1ZmZlclNpemU7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgbW9kdWxlX3N1cHBvcnQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgdHJhY2VfbW9kZTsgCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgbW9kZW1fbW9kZTsJCit9IEZ0VXRpbENtZENuZl9VOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8vLyBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGxpc3QKKyAgICBrYWxfdWludDMyIHZhbGlkTnVtYmVyOworICAgIC8vLyB2b2x0YWdlIGxpc3QgKHVuaXQ6IG1pY3JvIHZvbHQgMTBeLTYpCisgICAga2FsX3VpbnQzMiB2b2x0YWdlTGlzdFsyNTVdOworICAgIC8vLyByZWdpc3RlciB2YWx1ZSBvZiBlYWNoIHZvbHRhZ2VMaXN0CisgICAga2FsX3VpbnQzMiByZWdpc3RlclZhbHVlWzI1NV07Cit9RnRVdGlsQ21kQ25mVnBhVm9sdGFnZUxpc3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBGVF9IRFIKKyAgICBGdFV0aWxDbWRUeXBlICAgdHlwZTsKKyAgICBGdFV0aWxDbWRSZXFfVSAgY21kOworfSBGVF9VVElMSVRZX0NPTU1BTkRfUkVROworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgRlRfSERSCisgICAgRnRVdGlsQ21kVHlwZSAgIHR5cGU7CisgICAgRnRVdGlsQ21kQ25mX1UgIHJlc3VsdDsKKyAgICBrYWxfdWludDMyICAgICAgc3RhdHVzOworfSBGVF9VVElMSVRZX0NPTU1BTkRfQ05GOworCisjZW5kaWYgLy8gI2lmbmRlZiBfX0ZUX01TR19VVElMX0hfXwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRfcHVibGljLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdF9wdWJsaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzBlZmFiCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRfcHVibGljLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIE1vZGlmaWNhdGlvbiBOb3RpY2U6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBNZWRpYVRlayBJbmMuIGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDEKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBmdF9wdWJsaWMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNVEs2MjA4CisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgRlQgcHVibGljIHN0dWZmCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAJCQkJSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgRlRfUFVCTElDX0gKKyNkZWZpbmUgRlRfUFVCTElDX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaWZkZWYJX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorCisvKiBGVCBldmVudCBncm91cCBiaXQgbWFwICovCisjZGVmaW5lIEZUX1VMMV9VUERBVEVfUlVOVElNRV9FVkVOVCAgICAgMHgwMDAwMDAwMSAvLyBmaXJzdCBiaXQKKworCQorI2lmZGVmCV9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0YV9tc2cuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0YV9tc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzdkMzVmCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvZnRhX21zZy5oCkBAIC0wLDAgKzEsMTAzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBNb2RpZmljYXRpb24gTm90aWNlOgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgTWVkaWFUZWsgSW5jLiBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDAxCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgZnRfbXNnX2NvbW1vbi5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBGVEEgbWVzc2FnZSBkZWZpbml0aW9ucyBmb3IgTUVUQSBjb21tbnVpY2F0aW9uCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAJCQkJSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0ZUQV9NU0dfSF8KKyNkZWZpbmUgX0ZUQV9NU0dfSF8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiBtc2dfbGVuOworICAgIGthbF91aW50OCAgbV91MUR1bW15OworfWZ0YV9iYXNpY19yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworCSAga2FsX3VpbnQ4ICByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiBtc2dfbGVuOworICAgIGthbF91aW50OCAgbV91MUR1bW15OworICAgIGthbF91aW50OCAgc3RhdHVzOworfWZ0YV9iYXNpY19jbmZfc3RydWN0OworI2VuZGlmIC8vIF9GVEFfTVNHX0hfCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdGNfbXNnLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9mdGNfbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyY2I1ZQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2Z0Y19tc2cuaApAQCAtMCwwICsxLDEwOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgTW9kaWZpY2F0aW9uIE5vdGljZToKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IE1lZGlhVGVrIEluYy4gYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGZ0Y19tc2cuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgRlRDIG1lc3NhZ2UgZGVmaW5pdGlvbnMgZm9yIE1FVEEgY29tbW51aWNhdGlvbgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9GVENfTVNHX0hfCisjZGVmaW5lIF9GVENfTVNHX0hfCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4ICBtX3UxRHVtbXk7Cit9IGZ0Y19iYXNpY19yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4ICBtX3UxRHVtbXk7CisgICAga2FsX3VpbnQ4ICBzdGF0dXM7Cit9IGZ0Y19iYXNpY19jbmZfc3RydWN0OworI2VuZGlmIC8vIF9GVF9NU0dfSF8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2wxdHN0X25zZnRfbG1fcHVibGljLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9sMXRzdF9uc2Z0X2xtX3B1YmxpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZmEyMDcKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9sMXRzdF9uc2Z0X2xtX3B1YmxpYy5oCkBAIC0wLDAgKzEsOSBAQAorI2lmIChkZWZpbmVkIF9fTUQ5M19fKQorI2luY2x1ZGUgImwxdHN0X25zZnRfbG1fcHVibGljX2dlbjkzLmgiCisjZWxpZiAoZGVmaW5lZCBfX01EOTVfXykKKyNpbmNsdWRlICJsMXRzdF9uc2Z0X2xtX3B1YmxpY19nZW45NS5oIgorI2VsaWYgKGRlZmluZWQgX19NRDk3X18pfHwoZGVmaW5lZCBfX01EOTdQX18pCisjaW5jbHVkZSAibDF0c3RfbnNmdF9sbV9wdWJsaWNfZ2VuOTcuaCIKKyNlbHNlCisjZXJyb3IgIltFUlJPUl0gSW52YWxpZCBNRCBnZW5lcmF0aW9uIgorI2VuZGlmCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9sMXRzdF9uc2Z0X2xtX3B1YmxpY19nZW45My5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvbDF0c3RfbnNmdF9sbV9wdWJsaWNfZ2VuOTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDM0ODRlCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvbDF0c3RfbnNmdF9sbV9wdWJsaWNfZ2VuOTMuaApAQCAtMCwwICsxLDI1OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGwxdHN0X25zZnRfbG1fcHVibGljLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9MWSBTb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIE5TRlQgbGlzdCBtb2RlIHB1YmxpYyBkZWZpbml0aW9uLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0wxVFNUX05TRlRfTE1fUFVCTElDX0hfXworI2RlZmluZSBfX0wxVFNUX05TRlRfTE1fUFVCTElDX0hfXworCisjaW5jbHVkZSAibDFfdHlwZXNfcHVibGljLmgiCisKKy8qID09PT09PT09PT0gKlwKK3wqIERlZmluaXRpb24gKnwKK1wqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBNQVhfVFNFVF9OVU1fSU5fQ0hNRUFTICA4CisKK3R5cGVkZWYgZW51bQoreworICAgTlNGVF9MTV9NQ1NfVFlQRV9HTVNLID0gMCwKKyAgIE5TRlRfTE1fTUNTX1RZUEVfRVBTSyA9IDEsCisgICBOU0ZUX0xNX01DU19UWVBFX01BWCAgPSAweEZGRkYKK30gTnNmdExpc3RNb2RUeXBlOworCit0eXBlZGVmIGVudW0KK3sKKyAgIE5TRlRfTE1fQ01EX05VTEwgICAgPSAwLAorICAgTlNGVF9MTV9DTURfU1lOQyAgICA9IDEsCisgICBOU0ZUX0xNX0NNRF9UUklHR0VSID0gMiwKKyAgIE5TRlRfTE1fQ01EX0NITUVBUyAgPSAzLAorICAgTlNGVF9MTV9DTURfU1RPUCAgICA9IDQsCisgICBOU0ZUX0xNX0NNRF9FTkQgICAgID0gMHhGRkZGCit9IE5zZnRMaXN0Q21kVHlwZTsKKwordHlwZWRlZiBlbnVtCit7CisgICBOU0ZUX0xNX0VYRUNVVElPTl9OVUxMICAgID0gMCwKKyAgIE5TRlRfTE1fRVhFQ1VUSU9OX0lOSVQgICAgPSAxLAorICAgTlNGVF9MTV9FWEVDVVRJT05fU1RBUlQgICA9IDIsCisgICBOU0ZUX0xNX0VYRUNVVElPTl9ET05FICAgID0gMywKKyAgIE5TRlRfTE1fRVhFQ1VUSU9OX0ZBSUwgICAgPSA0LAorICAgTlNGVF9MTV9FWEVDVVRJT05fU1RBX01BWCA9IDB4RkZGRgorfSBOc2Z0TGlzdENtZFN0YXR1czsKKwordHlwZWRlZiBrYWxfaW50MTYgICAgTnNmdExpc3RQb3dlcjsgICAgLy8gaW4gdW5pdCBvZiAxLzggZEJtCit0eXBlZGVmIGthbF9pbnQxNiAgICBOc2Z0TGlzdFBDTDsgICAgICAvLyBpbiB1bml0IG9mIFBDTAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICpcCit8KiBEZWZpbml0aW9uIG9mIENvbW1hbmQncyBTdHJ1Y3R1cmUgKnwKK1wqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogU3RydWN0dXJlIGZvciBTeW5jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjaWYgZGVmaW5lZChfXzJHX1JYX0RJVkVSU0lUWV9QQVRIX1NVUFBPUlRfXykKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgICAgICBjb21tYW5kX2lkOworICAgRnJlcXVlbmN5QmFuZCAgICAgUkZfYmFuZDsKKyAgIEFSRkNOICAgICAgICAgICAgIEFSRkNOOworICAgTnNmdExpc3RNb2RUeXBlICAgUlRYX3R5cGVzOyAvL1JYRCB1c2UgVENoLCBzbyBTeW5jIG5lZWQga25vdyBNb2QgdHlwZQorICAgTnNmdExpc3RQb3dlciAgICAgc3luY19wb3dlcjsgIC8vIGluIHVuaXQgb2YgMS84IGRCbQorICAgVGltZVNsb3QgICAgICAgICAgc3luY19zbG90X29mZnNldDsKK30gTnNmdExpc3RDbWRfU3luY190OworI2Vsc2UKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgICAgICBjb21tYW5kX2lkOworICAgRnJlcXVlbmN5QmFuZCAgICAgUkZfYmFuZDsKKyAgIEFSRkNOICAgICAgICAgICAgIEFSRkNOOworICAgTnNmdExpc3RQb3dlciAgICAgc3luY19wb3dlcjsgIC8vIGluIHVuaXQgb2YgMS84IGRCbQorICAgVGltZVNsb3QgICAgICAgICAgc3luY19zbG90X29mZnNldDsKK30gTnNmdExpc3RDbWRfU3luY190OworI2VuZGlmCisvKiBTdHJ1Y3R1cmUgZm9yIFRyaWdnZXItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgICAgICBjb21tYW5kX2lkOworICAgRnJlcXVlbmN5QmFuZCAgICAgUkZfYmFuZDsKKyAgIEFSRkNOICAgICAgICAgICAgIEFSRkNOOworICAgVFNDICAgICAgICAgICAgICAgVFNDOworICAgTnNmdExpc3RNb2RUeXBlICAgUlRYX3R5cGVzOworICAgTnNmdExpc3RQQ0wgICAgICAgVFhfcG93ZXI7ICAgIC8vIGluIGZvcm1hdCBvZiBQQ0wKK30gTnNmdExpc3RDbWRfVHJpZ2dlcl90OworCisvKiBTdHJ1Y3R1cmUgZm9yIENoYW5uZWwgbWVhc3VyZW1lbnQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgICAgICBjb21tYW5kX2lkOworICAgRnJlcXVlbmN5QmFuZCAgICAgUkZfYmFuZDsKKyAgIEFSRkNOICAgICAgICAgICAgIEFSRkNOOworICAgVFNDICAgICAgICAgICAgICAgVFNDOworICAgTnNmdExpc3RNb2RUeXBlICAgUlRYX3R5cGVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdNU0svRVBTSworICAgTnNmdExpc3RQQ0wgICAgICAgVFhfcG93ZXJbTUFYX1RTRVRfTlVNX0lOX0NITUVBU107ICAgICAgIC8vIGluIGZvcm1hdCBvZiBQQ0wKKyAgIE5zZnRMaXN0UG93ZXIgICAgIFJYX3Bvd2VyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiB1bml0IG9mIDEvOCBkQm0KKyAgIGthbF91aW50MTYgICAgICAgIHJlcGVhdF9jb3VudFtNQVhfVFNFVF9OVU1fSU5fQ0hNRUFTXTsgICAvLyBpbiB1bml0IG9mIHJhZGlvIGJsb2NrCit9IE5zZnRMaXN0Q21kX0NoTWVhc190OworCisvKiBTdHJ1Y3R1cmUgZm9yIHN0b3AgTE0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgICAgICBjb21tYW5kX2lkOworfSBOc2Z0TGlzdENtZF9TdG9wX3Q7CisKKy8qIFN0cnVjdHVyZSBmb3IgY29tbWFuZCB1bmlvbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordHlwZWRlZiB1bmlvbgoreworICAgTnNmdExpc3RDbWRfU3luY190ICAgICAgc3luYzsKKyAgIE5zZnRMaXN0Q21kX1RyaWdnZXJfdCAgIHRyaWdnZXI7CisgICBOc2Z0TGlzdENtZF9DaE1lYXNfdCAgICB0ZXN0OworICAgTnNmdExpc3RDbWRfU3RvcF90ICAgICAgc3RvcDsKK30gTnNmdExpc3RDbWRfdDsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICpcCit8KiBEZWZpbml0aW9uIG9mIFJlb3J0J3MgU3RydWN0dXJlICp8CitcKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgICAgICBjb21tYW5kX2lkOworICAgTnNmdExpc3RDbWRUeXBlICAgdHlwZTsKKyAgIE5zZnRMaXN0Q21kU3RhdHVzIHN0YXR1czsgICAgICAvLyBOU0ZUIExNIHNwZWNpZmljIGVycm9yIGNvZGUKK30gTnNmdExpc3RScHRfQ29tX3Q7CisKKy8qIFN0cnVjdHVyZSBmb3IgU3luYy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIE5zZnRMaXN0UnB0X0NvbV90IGNvbW1vbjsKKyAgIHVpbnQxNiAgICAgICAgICAgIHJldHJ5X2NvdW50czsKKyAgIGthbF9pbnQxNiAgICAgICAgIG5ld19hZmNfZGFjOworICAga2FsX2ludDMyICAgICAgICAgZGV0ZWN0ZWRfZm9lOworfSBOc2Z0TGlzdFJwdF9TeW5jX3Q7CisKKy8qIFN0cnVjdHVyZSBmb3IgVHJpZ2dlci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIE5zZnRMaXN0UnB0X0NvbV90IGNvbW1vbjsKK30gTnNmdExpc3RScHRfVHJpZ2dlcl90OworCisvKiBTdHJ1Y3R1cmUgZm9yIENoYW5uZWwgbWVhc3VyZW1lbnQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZiBkZWZpbmVkKF9fMkdfUlhfRElWRVJTSVRZX1BBVEhfU1VQUE9SVF9fKQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIE5zZnRMaXN0UnB0X0NvbV90IGNvbW1vbjsKKyAgIGthbF91aW50MTYgICAgICAgIFJYX2xldmVsW0dTTV9SRl9NQVhfUlhfQU5UX05VTV07ICAgIC8vIGluIHVuaXQgb2YgMS84IGRCbQorICAga2FsX3VpbnQzMiAgICAgICAgQkVSX3N1bTsKKyAgIGthbF91aW50MzIgICAgICAgIEJFUl9mcmFtZV9jb3VudDsKK30gTnNmdExpc3RScHRfQ2hNZWFzX3Q7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIE5zZnRMaXN0UnB0X0NvbV90IGNvbW1vbjsKKyAgIGthbF91aW50MTYgICAgICAgIFJYX2xldmVsOyAgICAvLyBpbiB1bml0IG9mIDEvOCBkQm0KKyAgIGthbF91aW50MzIgICAgICAgIEJFUl9zdW07CisgICBrYWxfdWludDMyICAgICAgICBCRVJfZnJhbWVfY291bnQ7Cit9IE5zZnRMaXN0UnB0X0NoTWVhc190OworI2VuZGlmCisKKy8qIFN0cnVjdHVyZSBmb3Igc3RvcCBMTS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordHlwZWRlZiBOc2Z0TGlzdFJwdF9UcmlnZ2VyX3QgTnNmdExpc3RScHRfU3RvcF90OworCisvKiBTdHJ1Y3R1cmUgZm9yIHJlcG9ydCB1bmlvbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgIE5zZnRMaXN0UnB0X0NvbV90ICAgICAgIGNvbW1vbjsKKyAgIE5zZnRMaXN0UnB0X1N5bmNfdCAgICAgIHN5bmM7CisgICBOc2Z0TGlzdFJwdF9UcmlnZ2VyX3QgICB0cmlnZ2VyOworICAgTnNmdExpc3RScHRfQ2hNZWFzX3QgICAgdGVzdDsKKyAgIE5zZnRMaXN0UnB0X1N0b3BfdCAgICAgIHN0b3A7Cit9IE5zZnRMaXN0UnB0X3Q7CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqXAorfCogTlNGVCBMaXN0IE1vZGUgQVBJIFByb3RvdHlwZSAqfAorXCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiBOU0ZUIExpc3QgTW9kZSBtZXNzYWdlIGhhbmRsZXIgZm9yIEZULS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3ZvaWQgTDFUU1RfTnNmdExpc3RfbWVzc2FnZV9oYW5kbGVyKHZvaWQqIGlsbVB0cik7CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyoqCisgKiBQYXJhbWV0ZXIgZm9yIE1TR19JRF9NQUxfVE9fR1NNX0xNX1JFUS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBOc2Z0TGlzdENtZFR5cGUgY29tbWFuZFR5cGU7CisgICAgTnNmdExpc3RDbWRfdCAgIGNvbW1hbmRCdWZmZXI7Cit9IG5zZnRfbG1fcmVxX3N0cnVjdDsKKworLyoqCisgKiBQYXJhbWV0ZXIgZm9yIE1TR19JRF9HU01fTE1fVE9fTUFMX1JGX1dBSVRfSU5ECisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQzMiAgICAgICAgIHJlcG9ydENvdW50OworICAgIE5zZnRMaXN0UnB0X3QgICAgICBvdXRwdXRQYXJhbWV0ZXI7Cit9IE5zZnRMaXN0X1JQVF9RX0VOVFJZX1Q7CisKKyNlbmRpZiAgLyogX0wxVFNUX05TRlRfTE1fUFVCTElDX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2wxdHN0X25zZnRfbG1fcHVibGljX2dlbjk1LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9sMXRzdF9uc2Z0X2xtX3B1YmxpY19nZW45NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzQ4NGUKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9sMXRzdF9uc2Z0X2xtX3B1YmxpY19nZW45NS5oCkBAIC0wLDAgKzEsMjU5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgbDF0c3RfbnNmdF9sbV9wdWJsaWMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNT0xZIFNvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgTlNGVCBsaXN0IG1vZGUgcHVibGljIGRlZmluaXRpb24uCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fTDFUU1RfTlNGVF9MTV9QVUJMSUNfSF9fCisjZGVmaW5lIF9fTDFUU1RfTlNGVF9MTV9QVUJMSUNfSF9fCisKKyNpbmNsdWRlICJsMV90eXBlc19wdWJsaWMuaCIKKworLyogPT09PT09PT09PSAqXAorfCogRGVmaW5pdGlvbiAqfAorXCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIE1BWF9UU0VUX05VTV9JTl9DSE1FQVMgIDgKKwordHlwZWRlZiBlbnVtCit7CisgICBOU0ZUX0xNX01DU19UWVBFX0dNU0sgPSAwLAorICAgTlNGVF9MTV9NQ1NfVFlQRV9FUFNLID0gMSwKKyAgIE5TRlRfTE1fTUNTX1RZUEVfTUFYICA9IDB4RkZGRgorfSBOc2Z0TGlzdE1vZFR5cGU7CisKK3R5cGVkZWYgZW51bQoreworICAgTlNGVF9MTV9DTURfTlVMTCAgICA9IDAsCisgICBOU0ZUX0xNX0NNRF9TWU5DICAgID0gMSwKKyAgIE5TRlRfTE1fQ01EX1RSSUdHRVIgPSAyLAorICAgTlNGVF9MTV9DTURfQ0hNRUFTICA9IDMsCisgICBOU0ZUX0xNX0NNRF9TVE9QICAgID0gNCwKKyAgIE5TRlRfTE1fQ01EX0VORCAgICAgPSAweEZGRkYKK30gTnNmdExpc3RDbWRUeXBlOworCit0eXBlZGVmIGVudW0KK3sKKyAgIE5TRlRfTE1fRVhFQ1VUSU9OX05VTEwgICAgPSAwLAorICAgTlNGVF9MTV9FWEVDVVRJT05fSU5JVCAgICA9IDEsCisgICBOU0ZUX0xNX0VYRUNVVElPTl9TVEFSVCAgID0gMiwKKyAgIE5TRlRfTE1fRVhFQ1VUSU9OX0RPTkUgICAgPSAzLAorICAgTlNGVF9MTV9FWEVDVVRJT05fRkFJTCAgICA9IDQsCisgICBOU0ZUX0xNX0VYRUNVVElPTl9TVEFfTUFYID0gMHhGRkZGCit9IE5zZnRMaXN0Q21kU3RhdHVzOworCit0eXBlZGVmIGthbF9pbnQxNiAgICBOc2Z0TGlzdFBvd2VyOyAgICAvLyBpbiB1bml0IG9mIDEvOCBkQm0KK3R5cGVkZWYga2FsX2ludDE2ICAgIE5zZnRMaXN0UENMOyAgICAgIC8vIGluIHVuaXQgb2YgUENMCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKlwKK3wqIERlZmluaXRpb24gb2YgQ29tbWFuZCdzIFN0cnVjdHVyZSAqfAorXCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiBTdHJ1Y3R1cmUgZm9yIFN5bmMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZiBkZWZpbmVkKF9fMkdfUlhfRElWRVJTSVRZX1BBVEhfU1VQUE9SVF9fKQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICAgICAgIGNvbW1hbmRfaWQ7CisgICBGcmVxdWVuY3lCYW5kICAgICBSRl9iYW5kOworICAgQVJGQ04gICAgICAgICAgICAgQVJGQ047CisgICBOc2Z0TGlzdE1vZFR5cGUgICBSVFhfdHlwZXM7IC8vUlhEIHVzZSBUQ2gsIHNvIFN5bmMgbmVlZCBrbm93IE1vZCB0eXBlCisgICBOc2Z0TGlzdFBvd2VyICAgICBzeW5jX3Bvd2VyOyAgLy8gaW4gdW5pdCBvZiAxLzggZEJtCisgICBUaW1lU2xvdCAgICAgICAgICBzeW5jX3Nsb3Rfb2Zmc2V0OworfSBOc2Z0TGlzdENtZF9TeW5jX3Q7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICAgICAgIGNvbW1hbmRfaWQ7CisgICBGcmVxdWVuY3lCYW5kICAgICBSRl9iYW5kOworICAgQVJGQ04gICAgICAgICAgICAgQVJGQ047CisgICBOc2Z0TGlzdFBvd2VyICAgICBzeW5jX3Bvd2VyOyAgLy8gaW4gdW5pdCBvZiAxLzggZEJtCisgICBUaW1lU2xvdCAgICAgICAgICBzeW5jX3Nsb3Rfb2Zmc2V0OworfSBOc2Z0TGlzdENtZF9TeW5jX3Q7CisjZW5kaWYKKy8qIFN0cnVjdHVyZSBmb3IgVHJpZ2dlci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICAgICAgIGNvbW1hbmRfaWQ7CisgICBGcmVxdWVuY3lCYW5kICAgICBSRl9iYW5kOworICAgQVJGQ04gICAgICAgICAgICAgQVJGQ047CisgICBUU0MgICAgICAgICAgICAgICBUU0M7CisgICBOc2Z0TGlzdE1vZFR5cGUgICBSVFhfdHlwZXM7CisgICBOc2Z0TGlzdFBDTCAgICAgICBUWF9wb3dlcjsgICAgLy8gaW4gZm9ybWF0IG9mIFBDTAorfSBOc2Z0TGlzdENtZF9UcmlnZ2VyX3Q7CisKKy8qIFN0cnVjdHVyZSBmb3IgQ2hhbm5lbCBtZWFzdXJlbWVudC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICAgICAgIGNvbW1hbmRfaWQ7CisgICBGcmVxdWVuY3lCYW5kICAgICBSRl9iYW5kOworICAgQVJGQ04gICAgICAgICAgICAgQVJGQ047CisgICBUU0MgICAgICAgICAgICAgICBUU0M7CisgICBOc2Z0TGlzdE1vZFR5cGUgICBSVFhfdHlwZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR01TSy9FUFNLCisgICBOc2Z0TGlzdFBDTCAgICAgICBUWF9wb3dlcltNQVhfVFNFVF9OVU1fSU5fQ0hNRUFTXTsgICAgICAgLy8gaW4gZm9ybWF0IG9mIFBDTAorICAgTnNmdExpc3RQb3dlciAgICAgUlhfcG93ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHVuaXQgb2YgMS84IGRCbQorICAga2FsX3VpbnQxNiAgICAgICAgcmVwZWF0X2NvdW50W01BWF9UU0VUX05VTV9JTl9DSE1FQVNdOyAgIC8vIGluIHVuaXQgb2YgcmFkaW8gYmxvY2sKK30gTnNmdExpc3RDbWRfQ2hNZWFzX3Q7CisKKy8qIFN0cnVjdHVyZSBmb3Igc3RvcCBMTS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICAgICAgIGNvbW1hbmRfaWQ7Cit9IE5zZnRMaXN0Q21kX1N0b3BfdDsKKworLyogU3RydWN0dXJlIGZvciBjb21tYW5kIHVuaW9uLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit0eXBlZGVmIHVuaW9uCit7CisgICBOc2Z0TGlzdENtZF9TeW5jX3QgICAgICBzeW5jOworICAgTnNmdExpc3RDbWRfVHJpZ2dlcl90ICAgdHJpZ2dlcjsKKyAgIE5zZnRMaXN0Q21kX0NoTWVhc190ICAgIHRlc3Q7CisgICBOc2Z0TGlzdENtZF9TdG9wX3QgICAgICBzdG9wOworfSBOc2Z0TGlzdENtZF90OworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKlwKK3wqIERlZmluaXRpb24gb2YgUmVvcnQncyBTdHJ1Y3R1cmUgKnwKK1wqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICAgICAgIGNvbW1hbmRfaWQ7CisgICBOc2Z0TGlzdENtZFR5cGUgICB0eXBlOworICAgTnNmdExpc3RDbWRTdGF0dXMgc3RhdHVzOyAgICAgIC8vIE5TRlQgTE0gc3BlY2lmaWMgZXJyb3IgY29kZQorfSBOc2Z0TGlzdFJwdF9Db21fdDsKKworLyogU3RydWN0dXJlIGZvciBTeW5jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit0eXBlZGVmIHN0cnVjdAoreworICAgTnNmdExpc3RScHRfQ29tX3QgY29tbW9uOworICAgdWludDE2ICAgICAgICAgICAgcmV0cnlfY291bnRzOworICAga2FsX2ludDE2ICAgICAgICAgbmV3X2FmY19kYWM7CisgICBrYWxfaW50MzIgICAgICAgICBkZXRlY3RlZF9mb2U7Cit9IE5zZnRMaXN0UnB0X1N5bmNfdDsKKworLyogU3RydWN0dXJlIGZvciBUcmlnZ2VyLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit0eXBlZGVmIHN0cnVjdAoreworICAgTnNmdExpc3RScHRfQ29tX3QgY29tbW9uOworfSBOc2Z0TGlzdFJwdF9UcmlnZ2VyX3Q7CisKKy8qIFN0cnVjdHVyZSBmb3IgQ2hhbm5lbCBtZWFzdXJlbWVudC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2lmIGRlZmluZWQoX18yR19SWF9ESVZFUlNJVFlfUEFUSF9TVVBQT1JUX18pCit0eXBlZGVmIHN0cnVjdAoreworICAgTnNmdExpc3RScHRfQ29tX3QgY29tbW9uOworICAga2FsX3VpbnQxNiAgICAgICAgUlhfbGV2ZWxbR1NNX1JGX01BWF9SWF9BTlRfTlVNXTsgICAgLy8gaW4gdW5pdCBvZiAxLzggZEJtCisgICBrYWxfdWludDMyICAgICAgICBCRVJfc3VtOworICAga2FsX3VpbnQzMiAgICAgICAgQkVSX2ZyYW1lX2NvdW50OworfSBOc2Z0TGlzdFJwdF9DaE1lYXNfdDsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdAoreworICAgTnNmdExpc3RScHRfQ29tX3QgY29tbW9uOworICAga2FsX3VpbnQxNiAgICAgICAgUlhfbGV2ZWw7ICAgIC8vIGluIHVuaXQgb2YgMS84IGRCbQorICAga2FsX3VpbnQzMiAgICAgICAgQkVSX3N1bTsKKyAgIGthbF91aW50MzIgICAgICAgIEJFUl9mcmFtZV9jb3VudDsKK30gTnNmdExpc3RScHRfQ2hNZWFzX3Q7CisjZW5kaWYKKworLyogU3RydWN0dXJlIGZvciBzdG9wIExNLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit0eXBlZGVmIE5zZnRMaXN0UnB0X1RyaWdnZXJfdCBOc2Z0TGlzdFJwdF9TdG9wX3Q7CisKKy8qIFN0cnVjdHVyZSBmb3IgcmVwb3J0IHVuaW9uLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordHlwZWRlZiB1bmlvbgoreworICAgTnNmdExpc3RScHRfQ29tX3QgICAgICAgY29tbW9uOworICAgTnNmdExpc3RScHRfU3luY190ICAgICAgc3luYzsKKyAgIE5zZnRMaXN0UnB0X1RyaWdnZXJfdCAgIHRyaWdnZXI7CisgICBOc2Z0TGlzdFJwdF9DaE1lYXNfdCAgICB0ZXN0OworICAgTnNmdExpc3RScHRfU3RvcF90ICAgICAgc3RvcDsKK30gTnNmdExpc3RScHRfdDsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09ICpcCit8KiBOU0ZUIExpc3QgTW9kZSBBUEkgUHJvdG90eXBlICp8CitcKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIE5TRlQgTGlzdCBNb2RlIG1lc3NhZ2UgaGFuZGxlciBmb3IgRlQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordm9pZCBMMVRTVF9Oc2Z0TGlzdF9tZXNzYWdlX2hhbmRsZXIodm9pZCogaWxtUHRyKTsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKioKKyAqIFBhcmFtZXRlciBmb3IgTVNHX0lEX01BTF9UT19HU01fTE1fUkVRLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIE5zZnRMaXN0Q21kVHlwZSBjb21tYW5kVHlwZTsKKyAgICBOc2Z0TGlzdENtZF90ICAgY29tbWFuZEJ1ZmZlcjsKK30gbnNmdF9sbV9yZXFfc3RydWN0OworCisvKioKKyAqIFBhcmFtZXRlciBmb3IgTVNHX0lEX0dTTV9MTV9UT19NQUxfUkZfV0FJVF9JTkQKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyICAgICAgICAgcmVwb3J0Q291bnQ7CisgICAgTnNmdExpc3RScHRfdCAgICAgIG91dHB1dFBhcmFtZXRlcjsKK30gTnNmdExpc3RfUlBUX1FfRU5UUllfVDsKKworI2VuZGlmICAvKiBfTDFUU1RfTlNGVF9MTV9QVUJMSUNfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvbDF0c3RfbnNmdF9sbV9wdWJsaWNfZ2VuOTcuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2wxdHN0X25zZnRfbG1fcHVibGljX2dlbjk3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU3NDVkMgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2wxdHN0X25zZnRfbG1fcHVibGljX2dlbjk3LmgKQEAgLTAsMCArMSwyNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBsMXRzdF9uc2Z0X2xtX3B1YmxpYy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTFkgU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBOU0ZUIGxpc3QgbW9kZSBwdWJsaWMgZGVmaW5pdGlvbi4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19MMVRTVF9OU0ZUX0xNX1BVQkxJQ19IX18KKyNkZWZpbmUgX19MMVRTVF9OU0ZUX0xNX1BVQkxJQ19IX18KKworI2luY2x1ZGUgImwxX3R5cGVzX3B1YmxpYy5oIgorCisvKiA9PT09PT09PT09ICpcCit8KiBEZWZpbml0aW9uICp8CitcKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgTUFYX1RTRVRfTlVNX0lOX0NITUVBUyAgOAorCit0eXBlZGVmIGVudW0KK3sKKyAgIE5TRlRfTE1fTUNTX1RZUEVfR01TSyA9IDAsCisgICBOU0ZUX0xNX01DU19UWVBFX0VQU0sgPSAxLAorICAgTlNGVF9MTV9NQ1NfVFlQRV9NQVggID0gMHhGRkZGCit9IE5zZnRMaXN0TW9kVHlwZTsKKwordHlwZWRlZiBlbnVtCit7CisgICBOU0ZUX0xNX0NNRF9OVUxMICAgID0gMCwKKyAgIE5TRlRfTE1fQ01EX1NZTkMgICAgPSAxLAorICAgTlNGVF9MTV9DTURfVFJJR0dFUiA9IDIsCisgICBOU0ZUX0xNX0NNRF9DSE1FQVMgID0gMywKKyAgIE5TRlRfTE1fQ01EX1NUT1AgICAgPSA0LAorICAgTlNGVF9MTV9DTURfRU5EICAgICA9IDB4RkZGRgorfSBOc2Z0TGlzdENtZFR5cGU7CisKK3R5cGVkZWYgZW51bQoreworICAgTlNGVF9MTV9FWEVDVVRJT05fTlVMTCAgICA9IDAsCisgICBOU0ZUX0xNX0VYRUNVVElPTl9JTklUICAgID0gMSwKKyAgIE5TRlRfTE1fRVhFQ1VUSU9OX1NUQVJUICAgPSAyLAorICAgTlNGVF9MTV9FWEVDVVRJT05fRE9ORSAgICA9IDMsCisgICBOU0ZUX0xNX0VYRUNVVElPTl9GQUlMICAgID0gNCwKKyAgIE5TRlRfTE1fRVhFQ1VUSU9OX1NUQV9NQVggPSAweEZGRkYKK30gTnNmdExpc3RDbWRTdGF0dXM7CisKK3R5cGVkZWYga2FsX2ludDE2ICAgIE5zZnRMaXN0UG93ZXI7ICAgIC8vIGluIHVuaXQgb2YgMS84IGRCbQordHlwZWRlZiBrYWxfaW50MTYgICAgTnNmdExpc3RQQ0w7ICAgICAgLy8gaW4gdW5pdCBvZiBQQ0wKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqXAorfCogRGVmaW5pdGlvbiBvZiBDb21tYW5kJ3MgU3RydWN0dXJlICp8CitcKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIFN0cnVjdHVyZSBmb3IgU3luYy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2lmIGRlZmluZWQoX18yR19SWF9ESVZFUlNJVFlfUEFUSF9TVVBQT1JUX18pCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgICAgICAgY29tbWFuZF9pZDsKKyAgIEZyZXF1ZW5jeUJhbmQgICAgIFJGX2JhbmQ7CisgICBBUkZDTiAgICAgICAgICAgICBBUkZDTjsKKyAgIE5zZnRMaXN0TW9kVHlwZSAgIFJUWF90eXBlczsgLy9SWEQgdXNlIFRDaCwgc28gU3luYyBuZWVkIGtub3cgTW9kIHR5cGUKKyAgIE5zZnRMaXN0UG93ZXIgICAgIHN5bmNfcG93ZXI7ICAvLyBpbiB1bml0IG9mIDEvOCBkQm0KKyAgIFRpbWVTbG90ICAgICAgICAgIHN5bmNfc2xvdF9vZmZzZXQ7Cit9IE5zZnRMaXN0Q21kX1N5bmNfdDsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgICAgICAgY29tbWFuZF9pZDsKKyAgIEZyZXF1ZW5jeUJhbmQgICAgIFJGX2JhbmQ7CisgICBBUkZDTiAgICAgICAgICAgICBBUkZDTjsKKyAgIE5zZnRMaXN0UG93ZXIgICAgIHN5bmNfcG93ZXI7ICAvLyBpbiB1bml0IG9mIDEvOCBkQm0KKyAgIFRpbWVTbG90ICAgICAgICAgIHN5bmNfc2xvdF9vZmZzZXQ7Cit9IE5zZnRMaXN0Q21kX1N5bmNfdDsKKyNlbmRpZgorLyogU3RydWN0dXJlIGZvciBUcmlnZ2VyLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgICAgICAgY29tbWFuZF9pZDsKKyAgIEZyZXF1ZW5jeUJhbmQgICAgIFJGX2JhbmQ7CisgICBBUkZDTiAgICAgICAgICAgICBBUkZDTjsKKyAgIFRTQyAgICAgICAgICAgICAgIFRTQzsKKyAgIE5zZnRMaXN0TW9kVHlwZSAgIFJUWF90eXBlczsKKyAgIE5zZnRMaXN0UENMICAgICAgIFRYX3Bvd2VyOyAgICAvLyBpbiBmb3JtYXQgb2YgUENMCit9IE5zZnRMaXN0Q21kX1RyaWdnZXJfdDsKKworLyogU3RydWN0dXJlIGZvciBDaGFubmVsIG1lYXN1cmVtZW50LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgICAgICAgY29tbWFuZF9pZDsKKyAgIEZyZXF1ZW5jeUJhbmQgICAgIFJGX2JhbmQ7CisgICBBUkZDTiAgICAgICAgICAgICBBUkZDTjsKKyAgIFRTQyAgICAgICAgICAgICAgIFRTQzsKKyAgIE5zZnRMaXN0TW9kVHlwZSAgIFJUWF90eXBlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHTVNLL0VQU0sKKyAgIE5zZnRMaXN0UENMICAgICAgIFRYX3Bvd2VyW01BWF9UU0VUX05VTV9JTl9DSE1FQVNdOyAgICAgICAvLyBpbiBmb3JtYXQgb2YgUENMCisgICBOc2Z0TGlzdFBvd2VyICAgICBSWF9wb3dlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gdW5pdCBvZiAxLzggZEJtCisgICBrYWxfdWludDE2ICAgICAgICByZXBlYXRfY291bnRbTUFYX1RTRVRfTlVNX0lOX0NITUVBU107ICAgLy8gaW4gdW5pdCBvZiByYWRpbyBibG9jaworfSBOc2Z0TGlzdENtZF9DaE1lYXNfdDsKKworLyogU3RydWN0dXJlIGZvciBzdG9wIExNLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgICAgICAgY29tbWFuZF9pZDsKK30gTnNmdExpc3RDbWRfU3RvcF90OworCisvKiBTdHJ1Y3R1cmUgZm9yIGNvbW1hbmQgdW5pb24tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgIE5zZnRMaXN0Q21kX1N5bmNfdCAgICAgIHN5bmM7CisgICBOc2Z0TGlzdENtZF9UcmlnZ2VyX3QgICB0cmlnZ2VyOworICAgTnNmdExpc3RDbWRfQ2hNZWFzX3QgICAgdGVzdDsKKyAgIE5zZnRMaXN0Q21kX1N0b3BfdCAgICAgIHN0b3A7Cit9IE5zZnRMaXN0Q21kX3Q7CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqXAorfCogRGVmaW5pdGlvbiBvZiBSZW9ydCdzIFN0cnVjdHVyZSAqfAorXCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgICAgICAgY29tbWFuZF9pZDsKKyAgIE5zZnRMaXN0Q21kVHlwZSAgIHR5cGU7CisgICBOc2Z0TGlzdENtZFN0YXR1cyBzdGF0dXM7ICAgICAgLy8gTlNGVCBMTSBzcGVjaWZpYyBlcnJvciBjb2RlCit9IE5zZnRMaXN0UnB0X0NvbV90OworCisvKiBTdHJ1Y3R1cmUgZm9yIFN5bmMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBOc2Z0TGlzdFJwdF9Db21fdCBjb21tb247CisgICB1aW50MTYgICAgICAgICAgICByZXRyeV9jb3VudHM7CisjaWYgSVNfQUZDX0NBUEFCSUxJVFlfRU5IQU5DRU1FTlRfU1VQUE9SVAorICAga2FsX3VpbnQxNiAgICAgICAgbmV3X2FmY19kYWM7CisjZWxzZQorICAga2FsX2ludDE2ICAgICAgICAgbmV3X2FmY19kYWM7CisjZW5kaWYKKyAgIGthbF9pbnQzMiAgICAgICAgIGRldGVjdGVkX2ZvZTsKK30gTnNmdExpc3RScHRfU3luY190OworCisvKiBTdHJ1Y3R1cmUgZm9yIFRyaWdnZXItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBOc2Z0TGlzdFJwdF9Db21fdCBjb21tb247Cit9IE5zZnRMaXN0UnB0X1RyaWdnZXJfdDsKKworLyogU3RydWN0dXJlIGZvciBDaGFubmVsIG1lYXN1cmVtZW50LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjaWYgZGVmaW5lZChfXzJHX1JYX0RJVkVSU0lUWV9QQVRIX1NVUFBPUlRfXykKK3R5cGVkZWYgc3RydWN0Cit7CisgICBOc2Z0TGlzdFJwdF9Db21fdCBjb21tb247CisgICBrYWxfdWludDE2ICAgICAgICBSWF9sZXZlbFtHU01fUkZfTUFYX1JYX0FOVF9OVU1dOyAgICAvLyBpbiB1bml0IG9mIDEvOCBkQm0KKyAgIGthbF91aW50MzIgICAgICAgIEJFUl9zdW07CisgICBrYWxfdWludDMyICAgICAgICBCRVJfZnJhbWVfY291bnQ7Cit9IE5zZnRMaXN0UnB0X0NoTWVhc190OworI2Vsc2UKK3R5cGVkZWYgc3RydWN0Cit7CisgICBOc2Z0TGlzdFJwdF9Db21fdCBjb21tb247CisgICBrYWxfdWludDE2ICAgICAgICBSWF9sZXZlbDsgICAgLy8gaW4gdW5pdCBvZiAxLzggZEJtCisgICBrYWxfdWludDMyICAgICAgICBCRVJfc3VtOworICAga2FsX3VpbnQzMiAgICAgICAgQkVSX2ZyYW1lX2NvdW50OworfSBOc2Z0TGlzdFJwdF9DaE1lYXNfdDsKKyNlbmRpZgorCisvKiBTdHJ1Y3R1cmUgZm9yIHN0b3AgTE0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3R5cGVkZWYgTnNmdExpc3RScHRfVHJpZ2dlcl90IE5zZnRMaXN0UnB0X1N0b3BfdDsKKworLyogU3RydWN0dXJlIGZvciByZXBvcnQgdW5pb24tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit0eXBlZGVmIHVuaW9uCit7CisgICBOc2Z0TGlzdFJwdF9Db21fdCAgICAgICBjb21tb247CisgICBOc2Z0TGlzdFJwdF9TeW5jX3QgICAgICBzeW5jOworICAgTnNmdExpc3RScHRfVHJpZ2dlcl90ICAgdHJpZ2dlcjsKKyAgIE5zZnRMaXN0UnB0X0NoTWVhc190ICAgIHRlc3Q7CisgICBOc2Z0TGlzdFJwdF9TdG9wX3QgICAgICBzdG9wOworfSBOc2Z0TGlzdFJwdF90OworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKlwKK3wqIE5TRlQgTGlzdCBNb2RlIEFQSSBQcm90b3R5cGUgKnwKK1wqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogTlNGVCBMaXN0IE1vZGUgbWVzc2FnZSBoYW5kbGVyIGZvciBGVC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit2b2lkIEwxVFNUX05zZnRMaXN0X21lc3NhZ2VfaGFuZGxlcih2b2lkKiBpbG1QdHIpOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qKgorICogUGFyYW1ldGVyIGZvciBNU0dfSURfTUFMX1RPX0dTTV9MTV9SRVEuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTnNmdExpc3RDbWRUeXBlIGNvbW1hbmRUeXBlOworICAgIE5zZnRMaXN0Q21kX3QgICBjb21tYW5kQnVmZmVyOworfSBuc2Z0X2xtX3JlcV9zdHJ1Y3Q7CisKKy8qKgorICogUGFyYW1ldGVyIGZvciBNU0dfSURfR1NNX0xNX1RPX01BTF9SRl9XQUlUX0lORAorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MzIgICAgICAgICByZXBvcnRDb3VudDsKKyAgICBOc2Z0TGlzdFJwdF90ICAgICAgb3V0cHV0UGFyYW1ldGVyOworfSBOc2Z0TGlzdF9SUFRfUV9FTlRSWV9UOworCisjZW5kaWYgIC8qIF9MMVRTVF9OU0ZUX0xNX1BVQkxJQ19IICovCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9sMXRzdF9wdWJsaWMuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL2wxdHN0X3B1YmxpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYjNmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9sMXRzdF9wdWJsaWMuaApAQCAtMCwwICsxLDkgQEAKKyNpZiAoZGVmaW5lZCBfX01EOTNfXykKKyNpbmNsdWRlICJsMXRzdF9wdWJsaWNfZ2VuOTMuaCIKKyNlbGlmIChkZWZpbmVkIF9fTUQ5NV9fKQorI2luY2x1ZGUgImwxdHN0X3B1YmxpY19nZW45NS5oIgorI2VsaWYgKGRlZmluZWQgX19NRDk3X18pfHwoZGVmaW5lZCBfX01EOTdQX18pCisjaW5jbHVkZSAibDF0c3RfcHVibGljX2dlbjk3LmgiCisjZWxzZQorI2Vycm9yICJbRVJST1JdIEludmFsaWQgTUQgZ2VuZXJhdGlvbiIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvbDF0c3RfcHVibGljX2dlbjkzLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9sMXRzdF9wdWJsaWNfZ2VuOTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTIwMDI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvbDF0c3RfcHVibGljX2dlbjkzLmgKQEAgLTAsMCArMSw3ODQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIE1vZGlmaWNhdGlvbiBOb3RpY2U6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBNZWRpYVRlayBJbmMuIGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDEKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBsMXRzdF9wdWJsaWMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNVEs2MjA4CisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgTDEgdGVzdCBtb2RlIHB1YmxpYyBpbnRlcmZhY2UKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibDFfdHlwZXNfcHVibGljLmgiCisjaW5jbHVkZSAibDFfb3B0aW9uLmgiCisjaW5jbHVkZSAibXBoX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJsMV9rYWwuaCIKKworI2lmIE1EX0RSVl9JU19OU0ZUX0xJU1RfTU9ERV9TVVBQT1JUCisjaW5jbHVkZSAibDF0c3RfbnNmdF9sbV9wdWJsaWMuaCIKKyNlbmRpZgorCisjaWZuZGVmIGwxdHN0X3B1YmxpY19oCisjZGVmaW5lIGwxdHN0X3B1YmxpY19oCisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfR1NNICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNU19DQVBBQklMSVRZX0dQUlMgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTVNfQ0FQQUJJTElUWV9FREdFX1JYICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfRURHRV84UFNLX1RYICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBNU19DQVBBQklMSVRZXzhQTSAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTVNfQ0FQQUJJTElUWV9GSEMgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfTEMgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBNU19DQVBBQklMSVRZX05TRlQgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgTVNfQ0FQQUJJTElUWV9UQ1ZDWE8gICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfVFhQQ19DTF9HTVNLICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBNU19DQVBBQklMSVRZX1RYUENfT0wgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgTVNfQ0FQQUJJTElUWV9UWFBDX0NMX1RFTVAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfVFhQQ19DTF9FUFNLICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBNU19DQVBBQklMSVRZX0xOQU1PREUgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgTVNfQ0FQQUJJTElUWV9UWFBDX0FVWF9URU1QX0FEQyAweDAwMDA0MDAwCisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfVFhQQ19CU0lfVEVNUF9BREMgMHgwMDAwODAwMAorCisjZGVmaW5lIE1TX0JBTkRfU1VQUE9SVF9HU000MDAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNU19CQU5EX1NVUFBPUlRfR1NNODUwICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTVNfQkFORF9TVVBQT1JUX0dTTTkwMCAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1TX0JBTkRfU1VQUE9SVF9EQ1MxODAwICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBNU19CQU5EX1NVUFBPUlRfUENTMTkwMCAgICAgICAgIDB4MDAwMDAwMTAKKworI2RlZmluZSBDQUxfUlhfTE5BX01PREVfSElHSCAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBDQUxfUlhfTE5BX01PREVfTUlEICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBDQUxfUlhfTE5BX01PREVfTE9XICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBDQUxfUlhfTE5BX01PREVfU0VTTCAgICAgICAgICAgIDB4MDAwOCAgLy8gZm9yIHNpbmdsZS1lbmQgc2F3LWxlc3MKKyNkZWZpbmUgQ0FMX1JYX0xOQV9XX0NPRUYgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgQ0FMX1JYX0VMTkFfSElHSF9TRU5TSVRJVklUWSAgICAweDAwMjAgIC8vIGVsbmErRzYgZm9yIHNlbnNpdGl2aXR5CisjZGVmaW5lIENBTF9SWF9FTE5BX0JZUEFTU19MT1dfTUFYUElOICAgMHgwMDQwICAvLyBlbG5hIGJ5cGFzcytHMSBmb3IgTWF4IFBpbgorCisKKworI2RlZmluZSBDQUxfVFhQQ19PTCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBDQUxfVFhQQ19DTF9HTVNLICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBDQUxfVFhQQ19DTF9FUFNLICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBDQUxfVFhQQ19DTF9URU1QICAgICAgICAgICAgICAgIDB4MDAwOAorCisjZGVmaW5lIE5WUkFNX0dFVF9TRVRfUlhfUEFUSExPU1MgICAgICAgMHgwMDAxICAvL2ZvciBSRl9URVNUX0NNRF9HRVRfUlhfUEFUSF9MT1NTICYgUkZfVEVTVF9DTURfU0VUX1JYX1BBVEhfTE9TUyAgJiAgU0VUL0dFVCBQQVRITE9TUyBWMyBmb3IgOTMKKworCit0eXBlZGVmIGVudW0KK3sKKyAgIEFGQ18yX1NFQworICAsQUZDXzMzX1NFQworfSBBZmNDYWxUeXBlOworCit0eXBlZGVmIGVudW0KK3sKKyAgIEFGQ19EQUNfUkFOR0VfMTAyMworICAsQUZDX0RBQ19SQU5HRV84MTkxCit9IEFmY0NhbERhY1JhbmdlOworCit0eXBlZGVmIGVudW0KK3sKKyAgIEJhbmQ0MDAgID0gMHgwCisgICxCYW5kODUwICA9IDB4MQorICAsQmFuZDkwMCAgPSAweDIKKyAgLEJhbmQxODAwID0gMHg0CisgICxCYW5kMTkwMCA9IDB4OCAKK30gQmFuZEJpdE1hcDsKKwordHlwZWRlZiBlbnVtCit7CisgICBURU1QX1JBTkdFX00xMF82NQorICAsVEVNUF9SQU5HRV9NMTBfOTAKK30gVGVtcFJhbmdlVmVyc2lvbjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKy8vIGJvb2wgICAgICAgICAgICAgIG9rOworICAgdWludDMyICAgICAgICAgICAgY2FwYWJpbGl0eTsKKyAgIHVpbnQzMiAgICAgICAgICAgIGJhbmRfc3VwcG9ydDsKK30gTXNDYXBhYmlsaXR5RXg7CisKKy8vIE1TIENhcGFiaWxpdHkKK3R5cGVkZWYgIHN0cnVjdAoreworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9nc20gICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9ncHJzICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9lZGdlX3J4ICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9lcHNrX3R4ICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF84cG0gICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9maGMgICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9uc2Z0ICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgYmFuZF9nc200MDAgICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgYmFuZF9nc204NTAgICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgYmFuZF9nc205MDAgICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgYmFuZF9kY3MxODAwICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgYmFuZF9wY3MxOTAwICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgcHNfZXBza190eF9kaXNhYmxlIDoxOyAgIC8qIFNldCBhcyBiaXQtMSB3aGVuIF9fRVBTS19UWF9TV19TV0lUQ0hfT0ZGX18gaXMgZGVmaW5lZC4gKi8KKyAgIHVuc2lnbmVkIHNob3J0ICAgIHJlc2VydmVkMCAgICAgICAgICA6MzsKK30gTXNDYXBhYmlsaXR5OworCisvLyBGYWN0b3J5IE1vZGUgQ2FsaWJyYXRpb24gSXRlbQordHlwZWRlZiAgc3RydWN0Cit7CisgICB1bnNpZ25lZCBzaG9ydCAgICBpc19jYXBhYmxlICAgICAgOjE7CisgICB1bnNpZ25lZCBzaG9ydCAgICBpc19tYW5kYXRvcnkgICAgOjE7CisgICB1bnNpZ25lZCBzaG9ydCAgICBwYXJhbWV0ZXJzICAgICAgOjE0OworfSBGYWNNb2RDYWxJdG07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBGYWNNb2RDYWxJdG0gICAgICBjYXBfaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAwCisgICBGYWNNb2RDYWxJdG0gICAgICBhZmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAxCisgICBGYWNNb2RDYWxJdG0gICAgICByeF9wYXRobG9zczsgICAgICAgICAgICAgICAgICAgICAgIC8vICAyCisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9wY2w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAzCisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9zdWJiYW5kOyAgICAgICAgICAgICAgICAgICAgICAgIC8vICA0CisgICBGYWNNb2RDYWxJdG0gICAgICB0cnhfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgIC8vICA1CisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9pcTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICA2CisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9mYl9kYWM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICA3CisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9zbG9wZV9za2V3OyAgICAgICAgICAgICAgICAgICAgIC8vICA4CisgICBGYWNNb2RDYWxJdG0gICAgICB3X2NvZWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICA5CisgICBGYWNNb2RDYWxJdG0gICAgICB0eHBjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEwCisgICBGYWNNb2RDYWxJdG0gICAgICB0ZW1wX2FkYzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDExCisgICBGYWNNb2RDYWxJdG0gICAgICByZW1vdmVfMzJrX3hvOyAgICAgICAgICAgICAgICAgICAgIC8vIDEyCisgICBGYWNNb2RDYWxJdG0gICAgICBjb19jcnlzdGFsOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEzCisgICBGYWNNb2RDYWxJdG0gICAgICBoaWdoX2xuYV9zcDsgICAgICAgICAgICAgICAgICAgICAgIC8vIDE0CisgICBGYWNNb2RDYWxJdG0gICAgICBtaWRfbG5hX3NwOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE1CisgICBGYWNNb2RDYWxJdG0gICAgICBsb3dfbG5hX3NwOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE2CisgICBGYWNNb2RDYWxJdG0gICAgICBiYXRfdGVtcF9jb21wOyAgICAgICAgICAgICAgICAgICAgIC8vIDE3CisgICBGYWNNb2RDYWxJdG0gICAgICBkdHNfZ2Fpbl9jbWI7ICAgICAgICAgICAgICAgICAgICAgIC8vIDE4CisgICBGYWNNb2RDYWxJdG0gICAgICB1dHNfYmFuZF9jbWI7ICAgICAgICAgICAgICAgICAgICAgIC8vIDE5CisgICBGYWNNb2RDYWxJdG0gICAgICBjb190ZW1wX2FkYzsgICAgICAgICAgICAgICAgICAgICAgIC8vIDIwCisgICBGYWNNb2RDYWxJdG0gICAgICBhZGp1c3RhYmxlX2xuYV9tb2RlX3BhdGhsb3NzOyAgICAgIC8vIDIxCisgICBGYWNNb2RDYWxJdG0gICAgICBnYWluX3JmX2NhbDsgICAgICAgICAgICAgICAgICAgICAgIC8vIDIyCisgICBGYWNNb2RDYWxJdG0gICAgICBieXBhc3NfY2hlY2tfZml4YWZjX252cmFtOyAgICAgICAgIC8vIDIzCisgICBGYWNNb2RDYWxJdG0gICAgICBtdWx0aV9yYXRfdGFkY19iaXRtYXA7ICAgICAgICAgICAgIC8vIDI0CisgICBGYWNNb2RDYWxJdG0gICAgICBtdWx0aV9yYXRfYWZjX2JpdG1hcDsgICAgICAgICAgICAgIC8vIDI1CisgICBGYWNNb2RDYWxJdG0gICAgICBhZGp1c3RhYmxlX2xuYV9tb2RlX3BhdGhsb3NzX3YyOyAgIC8vIDI2CisgICBGYWNNb2RDYWxJdG0gICAgICB0ZW1wZXJhdHVyZV9pbmZvOyAgICAgICAgICAgICAgICAgIC8vIDI3CisgICBGYWNNb2RDYWxJdG0gICAgICBkdF9jb2V4aXN0ZW5jZV9pbmZvOyAgICAgICAgICAgICAgIC8vIDI4CisgICBGYWNNb2RDYWxJdG0gICAgICB0aGVybWFsX3NlbnNvcl90eXBlOyAgICAgICAgICAgICAgIC8vIDI5CisgICBGYWNNb2RDYWxJdG0gICAgICBuc2Z0X2xpc3Rtb2RlOyAgICAgICAgICAgICAgICAgICAgIC8vIDMwCisgICBGYWNNb2RDYWxJdG0gICAgICB3b3JsZG1vZGVfaWRfaW5mbzsgICAgICAgICAgICAgICAgIC8vIDMxCisgICBGYWNNb2RDYWxJdG0gICAgICBjcnlzdGFsX29uX3BtaWNfZW5hYmxlOyAgICAgICAgICAgIC8vIDMyCisgICBGYWNNb2RDYWxJdG0gICAgICBsb3dfcGNsX3N1YmJhbmRfY2FsOyAgICAgICAgICAgICAgIC8vIDMzCisgICBGYWNNb2RDYWxJdG0gICAgICBmaGNfZHRzX2V4dHJhX2ZiX2VuYWJsZTsgICAgICAgICAgIC8vIDM0CisgICBGYWNNb2RDYWxJdG0gICAgICBzYXdsZXNzX2xuYV9zcDsgICAgICAgICAgICAgICAgICAgIC8vIDM1CisgICBGYWNNb2RDYWxJdG0gICAgICBudnJhbV9hY2Nlc3NfaW50ZXJmYWNlOyAgICAgICAgICAgIC8vIDM2CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX3N1cHBvcnRfYmFuZF9iaXRtYXA7ICAgICAgICAgIC8vIDM3CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2hpZ2hfc3A7ICAgICAgICAgICAgICAgICAgICAgIC8vIDM4CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX21pZF9zcDsgICAgICAgICAgICAgICAgICAgICAgIC8vIDM5CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2xvd19zcDsgICAgICAgICAgICAgICAgICAgICAgIC8vIDQwCisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX3dfY29lZl9zcDsgICAgICAgICAgICAgICAgICAgIC8vIDQxCisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX21pZF9zYXdsZXNzX3NwOyAgICAgICAgICAgICAgIC8vIDQyCisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2hpZ2hfc2Vuc2l0aXZpdHlfc3A7ICAgICAgICAgIC8vIDQzCisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2J5cGFzc19sb3dfbWF4cGluX3NwOyAgICAgICAgIC8vIDQ0CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2J5cGFzc19nYWluX3RocmVzaG9sZDsgICAgICAgIC8vIDQ1CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2J5cGFzc19zdXBwb3J0X2JhbmRfYml0bWFwOyAgIC8vIDQ2CisgICBGYWNNb2RDYWxJdG0gICAgICBzaW53YXZlX2FmY19nZXRfdGVtcF9mcmVxOyAgICAgICAgIC8vIDQ3CisgICBGYWNNb2RDYWxJdG0gICAgICB3Y29lZl9zZXRnZXRfY21kX3N1cHBvcnQ7ICAgICAgICAgIC8vIDQ4CisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9zZXRnZXRfY21kX3N1cHBvcnQ7ICAgICAgICAgICAgIC8vIDQ5CisgICBGYWNNb2RDYWxJdG0gICAgICBuc2Z0X2FkanVzdF90cG9fc3VwcG9ydDsgICAgICAgICAgIC8vIDUwCisgICBGYWNNb2RDYWxJdG0gICAgICByeGRfdjVfY21kX3N1cHBvcnQ7ICAgICAgICAgICAgICAgIC8vIDUxCisgICBGYWNNb2RDYWxJdG0gICAgICByeGRfc3VwcG9ydF9iYW5kX2JpdG1hcDsgICAgICAgICAgIC8vIDUyCit9IEZhY01vZENhbDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIHVpbnQxNiAgICAgICAgICAgIGNhcF9pdG1fb2Zmc2V0OworICAgdWludDE2ICAgICAgICAgICAgZm1jX2l0bV9vZmZzZXQ7CisgICBNc0NhcGFiaWxpdHkgICAgICBjYXBfaXRtOworICAgRmFjTW9kQ2FsICAgICAgICAgZm1jX2l0bTsKK30gTXNDYXBhYmlsaXR5RXhWMjsKKworI2lmIE1EX0RSVl9JU19GSENfU1VQUE9SVAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIEZyZXF1ZW5jeUJhbmQgICAgIGJhbmQ7CisgICBBUkZDTiAgICAgICAgICAgICBhcmZjbjsKKyAgIGludDE2ICAgICAgICAgICAgIGRhY192YWx1ZVszM107CisgICBHYWluICAgICAgICAgICAgICBnYWluOworICAgaW50MTYgICAgICAgICAgICAgcmVwZWF0X2NudDsgLy8gcmVwZXRpdGl2ZSB0ZXN0IGNvdW50cyAoZnJhbWVzKSBmb3IgZWFjaCBBRkMgREFDIHZhbHVlCisgICBib29sICAgICAgICAgICAgICBjYXBpZF9jYWw7ICAvLyBjYXBpZCBjYWxpYnJhdGlvbiBjdHJsCisgICBib29sICAgICAgICAgICAgICBsaW5lYXJfY2FsOyAvLyAzMyBzdGFnZXMgY2FsaWJyYXRpb24gY3RybAorICAgaW50MzIgICAgICAgICAgICAgY2FwaWRfbWluOyAgLy8gbWluIHZhbHVlIGZvciBjYXBpZCByYW5nZQorICAgaW50MzIgICAgICAgICAgICAgY2FwaWRfbWF4OyAgLy8gbWF4IHZhbHVlIGZvciBjYXBpZCByYW5nZQorfSBEU1NBZmM7IAorCit0eXBlZGVmIGVudW0KK3sKKyAgIEdTTV9MTkFfTlVMTCwgIC8vRm9yIG9sZCBDTUQsIHRvb2wgd2lsbCBub3Qgc2V0IGdzbV9sbmFfbW9kZQorICAgR1NNX0xOQV9ISUdILAorICAgR1NNX0xOQV9NSUQsCisgICBHU01fTE5BX0xPVywKKyAgIEdTTV9MTkFfV19DT0VGLAorICAgR1NNX0xOQV9TQVdMRVNTX01JRCwKKyAgIEdTTV9FTE5BX0hJR0hfU0VOU0lUSVZJVFksICAvL0ZvciBTZW5zaXRpdml0eSwgZWxuYStHNgorICAgR1NNX0VMTkFfQllQQVNTX0xPV19NQVhQSU4gIC8vRm9yIE1heCBQaW4sIGVsbmEgYnlwYXNzK0cxCit9TE5BX0NhbF9UeXBlOworCisvKkdlbiA5NSBSWEQqLwordHlwZWRlZiBlbnVtCit7CisgICBHU01fUlhfQ0FMX1NFUV9WNV9OVUxMID0gMCwKKyAgIEdTTV9SWF9DQUxfU0VRX1Y1X1VUUkFfSElHSCA9IDEsCisgICBHU01fUlhfQ0FMX1NFUV9WNV9ISUdIID0gMiwKKyAgIEdTTV9SWF9DQUxfU0VRX1Y1X01JRCA9IDMsCisgICBHU01fUlhfQ0FMX1NFUV9WNV9NSURfU0FXTEVTUyA9IDQsCisgICBHU01fUlhfQ0FMX1NFUV9WNV9MT1cgPSA1LAorICAgR1NNX1JYX0NBTF9TRVFfVjVfQllQQVNTX0xPVyA9IDYsCisgICBHU01fUlhfQ0FMX1NFUV9WNV9XQ09FRiA9IDcKK30gTE5BQ2FsU2VxVjVfRTsgICAvL0xOQV9DYWxfVHlwZSAgR2VuOTUgICAvL011c3QgdGhlIHNhbWUgYXMgUmZUZXN0UnhDYWxTZXFWNV9FCisKKyNpZiBkZWZpbmVkKF9fMkdfUlhfRElWRVJTSVRZX1BBVEhfU1VQUE9SVF9fKQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIEZyZXF1ZW5jeUJhbmQgICAgIGJhbmQ7CisgICBBUkZDTiAgICAgICAgICAgICAgICAgICAgYXJmY247CisgICAgIC8vR2FpbiAgICAgICAgICAgICAgICAgICAgICAgIGdhaW5bNl07IAorICAga2FsX2ludDE2ICAgICAgICAgICAgICAgICByZXBlYXRfY250OyAKKyAgIGthbF9pbnQxNiAgICAgICAgICAgIGRsX2NlbGxfcG93ZXI7ICAvL2l0IGlzIERMIFBvd2VyIGZvciBlYWNoIGZyYW1lICAgLy8gMS84ZEJtCisgICBMTkFDYWxTZXFWNV9FICAgICAgIGdzbV9sbmFfbW9kZSBbR1NNX1JGX01BWF9SWF9BTlRfTlVNXTsKK30gRFNTUEw7ICAgIC8vRFNTUExfTXVsdGlBbnQ7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIEZyZXF1ZW5jeUJhbmQgICAgIGJhbmQ7CisgICBBUkZDTiAgICAgICAgICAgICBhcmZjbjsKKyAgIEdhaW4gICAgICAgICAgICAgIGdhaW5bNl07ICAgICAgIC8vIGdhaW4gZm9yIHJ4IHNsb3QgMC8xLzIvMy80LzUKKyAgIGludDE2ICAgICAgICAgICAgIHJlcGVhdF9jbnQ7ICAgIC8vIHJlcGV0aXRpdmUgdGVzdCBjb3VudHMgKGZyYW1lcykgZm9yIGVhY2ggQVJGQ04gdmFsdWUKKyAgIExOQV9DYWxfVHlwZSAgICAgIGdzbV9sbmFfbW9kZTsgIC8vMChOdWxsKSAxKGhpZ2gpIDIobWlkKSAzKGxvdykgNCh3LWNvZWYpIDUoc2F3bGVzcyBtaWQpIDYoZWxuYStHNikgNyhlbG5hIGJ5cGFzcytHMSkKK30gRFNTUEw7IAorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBib29sICAgICAgICAgICAgICBhZmNfY2FsOworICAgYm9vbCAgICAgICAgICAgICAgcGxfY2FsOworICAgaW50OCAgICAgICAgICAgICAgc3luY19zYl9udW07ICAvLyB0aGUgU0IgZnJhbWUgbnVtYmVycyBuZWVkZWQgZm9yIHN5bmMgcHJvY2VzcyBiZWZvcmUgcGF0aCBsb3NzIGNhbGlicmF0aW9uCisgICB1aW50MTYgICAgICAgICAgICBzdGVwX2NudDsgICAgIC8vaW50OCAtPiB1aW50MTYgdG8gbWF0Y2ggc2l6ZSA1MTIKKyAgIGludDE2ICAgICAgICAgICAgIHBvd2VyOyAgICAgICAgLy8gdGhlIHBvd2VyIGxldmVsIGV4cGVjdGVkIHRvIG1lYXN1cmUgZnJvbSB0ZXN0IHNldAorICAgRFNTQWZjICAgICAgICAgICAgQWZjRFNTOworICAgRFNTUEwgICAgICAgICAgICAgUGF0aExvc3NEU1NbTDFfTUFYX0RUU19TVEVQX0NOVC0yXTsKKyAgIGludDE2ICAgICAgICAgICAgIGxwbV9zYl9udW07ICAgLy8gdGhlIFNCIGZyYW1lIG51bWJlcnMgZm9yIERDWE8gTFBNIGNhbGlicmF0aW9uCisjaWYgZGVmaW5lZChfXzJHX1JYX0RJVkVSU0lUWV9QQVRIX1NVUFBPUlRfXykKKyAgIHVpbnQ4ICAgICAgICAgICAgIEFudGVubmE7ICAgLy8gR1NNX0FudERpbWVuc2lvbgorI2VuZGlmCit9IERUU1BhcmFtOworLyoKK3R5cGVkZWYgc3RydWN0Cit7CisgICBBZmNQYXJhbXMgICAgICAgICphZmNfcGFyYW1zOworICAgUmVwb3J0ICAgICAgICAgICAqcmVwb3J0OworfSBEVFNNUGFyYW1zOworKi8KK3R5cGVkZWYgc3RydWN0Cit7CisvLyBEVFNNUGFyYW1zICAgICAgICBwYXJhbXM7CisgICBpbnR4ICAgICAgICAgICAgICBwYXRoX2xvc3NfY250OworICAgaW50eCAgICAgICAgICAgICAgZnJlcV9vZmZzZXQ7CisgICBpbnR4ICAgICAgICAgICAgICBjYXBpZF9mcmVxX29mZnNldF9taW47CisgICBpbnR4ICAgICAgICAgICAgICBjYXBpZF9mcmVxX29mZnNldFtGSENfTUFYX0NBUElEX1NFQVJDSF9OVU1dOworICAgaW50MzIgICAgICAgICAgICAgY2FwaWRfc2VhcmNoX29yZGVyW0ZIQ19NQVhfQ0FQSURfU0VBUkNIX05VTV07CisgICBpbnQzMiAgICAgICAgICAgICBjYXBpZDsKKyAgIGludDMyICAgICAgICAgICAgIGNhcGlkX2hpZ2g7CisgICBpbnQzMiAgICAgICAgICAgICBjYXBpZF9sb3c7ICAgCisgICBpbnQzMiAgICAgICAgICAgICBjYXBpZF9iZXN0OworICAgaW50MTYgICAgICAgICAgICAgYWZjX2RhYzsKKyAgIGludDE2ICAgICAgICAgICAgIGFyZmNuOworICAgaW50MTYgICAgICAgICAgICAgY2FwaWRfY250OworICAgaW50MTYgICAgICAgICAgICAgcmVwZWF0X2luZGV4OworICAgaW50OCAgICAgICAgICAgICAgc3RhdGU7CisgICBpbnQ4ICAgICAgICAgICAgICBjYXBpZF9pbmRleDsKKyAgIGludDggICAgICAgICAgICAgIGNhcGlkX29rYXlfY250OworICAgaW50OCAgICAgICAgICAgICAgYWZjX2RhY19pbmRleDsKKyAgIGludDggICAgICAgICAgICAgIHNiX29rYXlfY250OworICAgdWludDggICAgICAgICAgICAgc2JfZmFpbF9jbnQ7CisgICB1aW50OCAgICAgICAgICAgICBmYl9mYWlsX2NudDsKKyAgIGJvb2wgICAgICAgICAgICAgIHBsX3N0YXJ0ZWQ7CisgICBib29sICAgICAgICAgICAgICByc3RfZHRzX2lkeF9hdF9wbF9jYWxfc3RhcnRlZDsKKyAgIGJvb2wgICAgICAgICAgICAgIHByZV9jYXBpZF9jYWxfb2tbRkhDX1BSRV9DQVBJRF9TRUFSQ0hfTlVNXTsKK30gc0RUU007CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBGcmVxdWVuY3lCYW5kICAgICBiYW5kOworICAgQVJGQ04gICAgICAgICAgICAgYXJmY247CisgICBpbnQ4ICAgICAgICAgICAgICB0aW1lc2xvdF9wZXJfZnJhbWU7CisgICBpbnQ4ICAgICAgICAgICAgICBhcGNfZGFjX3BjbF9zZWw7ICAgICAgLy8gMjogZ2FpbiBzdGVwIGluZGV4LCAxOiBhcGNfZGFjLCAwOiBhcGNfcGNsCisgICBpbnQxNiAgICAgICAgICAgICBhcGNfZGFjX3BjbF92YWx1ZVs0XTsKKy8vIHVpbnQ4ICAgICAgICAgICAgIHBhX3ZiaWFzX3ZhbDsKKyAgIHVpbnQ4ICAgICAgICAgICAgIHBhX3ZiaWFzX3ZhbFs0XTsKKyAgIHVpbnQ4ICAgICAgICAgICAgIGlzX2xvd19wY2xbNF07CisgICBDb2RpbmdTY2hlbWUgICAgICBjc1s0XTsKKyAgIGludDMyICAgICAgICAgICAgIHJlcGVhdF9jbnQ7CisgICBpbnQxNiAgICAgICAgICAgICBhZmNfZGFjX3ZhbHVlOworICAgaW50OCAgICAgICAgICAgICAgdHNjOworICAgQVBDVHhQYXR0ZXJuICAgICAgcGF0dGVybjsKKyAgIHVpbnQxNiAgICAgICAgICAgIHBhdHRlcm5fZGF0YTsKK30gVVNTQXBjOworCit0eXBlZGVmIHN0cnVjdAoreworICAgdWludDE2ICAgICAgICAgICAgc3RlcF9jbnQ7ICAvL2ludDggLT4gdWludDE2IHRvIG1hdGNoIHNpemUgNTEyCisgICBpbnQxNiAgICAgICAgICAgICBoaWdoX2FwY19kY29mZnNldFtGcmVxdWVuY3lCYW5kQ291bnRdOworICAgVVNTQXBjICAgICAgICAgICAgQXBjVVNTW0wxX01BWF9VVFNfU1RFUF9DTlRdOyAgIAorfSBVVFNQYXJhbTsKKyNlbmRpZgorLyogRnVuY3Rpb25zIHByb3ZpZGVkIGJ5IGwxdHN0X2NmZy5jICovCit2b2lkIEwxVFNUX0luaXQodm9pZCk7Cit2b2lkIEwxVFNUX1N0b3Aodm9pZCk7Cit2b2lkIEwxVFNUX1NlbGVjdEZyZXF1ZW5jeUJhbmQxOTAwKCBib29sIHNlbGVjdGVkICk7Cit2b2lkIEwxVFNUX1NldEJCVFhDZmcoIGNvbnN0IHNCQlRYQ2ZnICpwYXJhbSApOwordm9pZCBMMVRTVF9HZXRCQlRYQ2ZnKCBzQkJUWENmZyAqcGFyYW0gKTsKK2ludHggTDFUU1RfR2V0QkJUWFZlcih2b2lkKTsKK2ludCAgTDFUU1RfR2V0Q3J5c3RhbENhcFJhbmdlKHZvaWQpOwordWludDMyIEwxVFNUX0dldEJhbmRTdXBwb3J0KHZvaWQpOwordWludDE2IEwxVFNUX0dldF9FUFNLX1RYX1N1cHBvcnQodm9pZCk7Cit1aW50MTYgTDFUU1RfR2V0X1RDVkNYT19TdXBwb3J0KHZvaWQpOwordm9pZCBHTDFUU1RfRGlzcGF0Y2hNZXNzYWdlKGlsbV9zdHJ1Y3QgKmlsbV9wdHIpOwordm9pZCBMMVRTVF9SRl9TZXRSYW1wQXBjTGV2ZWwoIGludCByZl9iYW5kLCBpbnQgcG93ZXJfbGV2ZWwsIGludCBhcGNfZGFjICk7Citib29sIEwxVFNUX0NoZWNrQXZhaWxhYmxlQmFuZHMoIEZyZXF1ZW5jeUJhbmQgYmFuZCApOworYm9vbCBMMVRTVF9DaGVja0F2YWlsYWJsZUFSRkNOcyggQVJGQ04gYXJmY24gKTsKK3ZvaWQgTDFUU1RfTXNDYXBhYmlsaXR5KCBNc0NhcGFiaWxpdHlFeCAqbXNDYXBhYmlsaXR5RXggKTsKK3ZvaWQgTDFUU1RfTXNDYXBhYmlsaXR5VjIoIE1zQ2FwYWJpbGl0eUV4VjIgKm1zX2NhcCApOwordm9pZCBMMVRTVF9UWFBDX0NMX0dldEFsbEFEQyggdm9pZCAqYnVmZiwgaW50OCBpc19FUFNLICk7Cit2b2lkIEwxVFNUX1RYUENfQ0xfR2V0QWxsVEVNUCggdm9pZCAqYnVmZiwgaW50OCBpc19FUFNLICk7Cit2b2lkIEwxVFNUX1RYUENfQ0xfR2V0U3ViYmFuZCggaW50IHJmX2JhbmQsIHZvaWQgKmJ1ZmYsIGludDggaXNfRVBTSyApOwordWludDE2IEwxVFNUX1RYUENfQ0xfR2V0T25lQURDKCBpbnQgcmZfYmFuZCwgaW50IHBvd2VyX2xldmVsLCBpbnQ4IGlzX0VQU0sgKTsKK3VpbnQxNiBMMVRTVF9UWFBDX0dldFRlbXBlcmF0dXJlKCB2b2lkICk7CisjaWYgTURfRFJWX0lTX0ZIQ19TVVBQT1JUCit2b2lkIEwxVFNUX1N0YXJ0RFRTQ2FsKCBEVFNQYXJhbSAqZHRzRGF0YSApOwordm9pZCBMMVRTVF9TdGFydFVUU0NhbCggVVRTUGFyYW0gKnV0c0RhdGEgKTsKK3NEVFNNKiBMMVRTVF9GSENMb2codm9pZCk7CisjZW5kaWYKKworI2lmIE1EX0RSVl9JU19OU0ZUX1NVUFBPUlQKKyAgICNpZiBkZWZpbmVkKF9fMkdfUlhfRElWRVJTSVRZX1BBVEhfU1VQUE9SVF9fKQorICAgdm9pZCBMMVRTVF9TdGFydE5TRlRQcm9jKCBGcmVxdWVuY3lCYW5kIGJhbmQsIEFSRkNOIEJDaF9hcmZjbiwgQVJGQ04gVENoX2FyZmNuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3dlciBCQ2hfZGxfcG93ZXIsIFBvd2VyIFRDaF9kbF9wb3dlciwgVFNDIHRzYywgVGltZVNsb3QgVENoX3Nsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyIHR4UG93ZXJMZXYsIGJvb2wgSVNfRVBTS19UWCwgQ29kaW5nU2NoZW1lIGVwc2tfY3MgKTsKKyAgIHZvaWQgTDFUU1RfTlNGVFByb2NfQ2hhbmdlQ2hhbm5lbCggRnJlcXVlbmN5QmFuZCBiYW5kLCBBUkZDTiBCQ2hfYXJmY24sIEFSRkNOIFRDaF9hcmZjbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG93ZXIgQkNoX2RsX3Bvd2VyLCBQb3dlciBUQ2hfZGxfcG93ZXIsIFRTQyB0c2MsIFRpbWVTbG90IFRDaF9zbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3dlciB0eFBvd2VyTGV2LCBib29sIElTX0VQU0tfVFgsIENvZGluZ1NjaGVtZSBlcHNrX2NzICk7CisgICAjZWxzZQorICAgdm9pZCBMMVRTVF9TdGFydE5TRlRQcm9jKCBGcmVxdWVuY3lCYW5kIGJhbmQsIEFSRkNOIEJDaF9hcmZjbiwgQVJGQ04gVENoX2FyZmNuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FpbiBCQ2hfZ2FpbiwgR2FpbiBUQ2hfZ2FpbiwgVFNDIHRzYywgVGltZVNsb3QgVENoX3Nsb3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3dlciB0eFBvd2VyTGV2LCBib29sIElTX0VQU0tfVFgsIENvZGluZ1NjaGVtZSBlcHNrX2NzKTsKKyAgIHZvaWQgTDFUU1RfTlNGVFByb2NfQ2hhbmdlQ2hhbm5lbCAoIEZyZXF1ZW5jeUJhbmQgYmFuZCwgQVJGQ04gQkNoX2FyZmNuLCBBUkZDTiBUQ2hfYXJmY24sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FpbiBCQ2hfZ2FpbiwgR2FpbiBUQ2hfZ2FpbiwgVFNDIHRzYywgVGltZVNsb3QgVENoX3Nsb3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG93ZXIgdHhQb3dlckxldiwgYm9vbCBJU19FUFNLX1RYLCBDb2RpbmdTY2hlbWUgZXBza19jcyk7CisgICAjZW5kaWYgLy8jaWYgZGVmaW5lZChfXzJHX1JYX0RJVkVSU0lUWV9QQVRIX1NVUFBPUlRfXykgCit2b2lkIEwxVFNUX05TRlRQcm9jX0NoYW5nZVBvd2VyKCBQb3dlciB0eFBvd2VyTGV2KTsKK3ZvaWQgTDFUU1RfU3RvcE5TRlRQcm9jKCB2b2lkICk7Cit2b2lkIEwxVFNUX1N0b3BOU0ZUX1JlY292ZXJUb01ldGFTdGF0ZSggdm9pZCApOwordm9pZCBMMVRTVF9TZXR1cFNpbmdsZUVuZEJFUkRhdGEoIHVpbnQzMiB0c3RfY250ICk7Cit2b2lkIEwxVFNUX1JlcG9ydFNpbmdsZUVuZEJFUkRvbmUoIHVpbnQzMiogc2VCRVJfU1VNLCB1aW50MzIqIGN1cnJfY250ICk7Cit2b2lkIEwxVFNUX1NldHVwUlhMRVZEYXRhKCB2b2lkICk7CisgICAjaWYgZGVmaW5lZChfXzJHX1JYX0RJVkVSU0lUWV9QQVRIX1NVUFBPUlRfXykKKyAgIHZvaWQgTDFUU1RfUmVwb3J0UlhMRVYoIHVpbnQxNiBSWExFVltdICk7CisgICAjZWxzZQorICAgdm9pZCBMMVRTVF9SZXBvcnRSWExFViggdWludDE2ICpSWExFViApOworICAgI2VuZGlmCit2b2lkIEwxVFNUX1JlcG9ydFJYUXVhbCggdWludDE2IEJFUl9QRVJNSUxMQUdFLCB1aW50OCAqUlhRdWFsICk7CisjZW5kaWYgLy8jaWYgTURfRFJWX0lTX05TRlRfU1VQUE9SVAorCisvKiBGdW5jdGlvbnMgcHJvdmlkZWQgYnkgbDF0c3RfcG0uYyAqLworI2lmIGRlZmluZWQoX18yR19SWF9ESVZFUlNJVFlfUEFUSF9TVVBQT1JUX18pCit2b2lkIEwxVFNUX1Bvd2VyU2NhbiggQVJGQ04gIGFyZmNuLCBpbnQ4IHNhbXBsZU5vUGVyRnJhbWUsIEdhaW4gZ2FpbiwgR2FpbiBnYWluX3J4ZCwgaW50MTYgZnJhbWVzLCBGcmVxdWVuY3lCYW5kIGJhbmQgKTsKKyNlbHNlCit2b2lkIEwxVFNUX1Bvd2VyU2NhbihBUkZDTiBhcmZjbiwgaW50OCBzYW1wbGVOb1BlckZyYW1lLCBHYWluIGdhaW4sIGludDE2IGZyYW1lcyk7CisjZW5kaWYKKworI2lmIE1EX0RSVl9JU19XX0NBTkNFTExBVElPTl9TVVBQT1JUCisgICAjaWYgZGVmaW5lZChfXzJHX1JYX0RJVkVSU0lUWV9QQVRIX1NVUFBPUlRfXykKKyAgIHZvaWQgTDFUU1RfSVJfUG93ZXJTY2FuKCBBUkZDTiAgYXJmY24sIGludDggc2FtcGxlTm9QZXJGcmFtZSwgR2FpbiBnYWluLCBHYWluIGdhaW5fcnhkLCBpbnQxNiBmcmFtZXMsIGludDggaWZfZmxhZywgRnJlcXVlbmN5QmFuZCBiYW5kICk7CisgICAjZWxzZQorICAgdm9pZCBMMVRTVF9JUl9Qb3dlclNjYW4oIEFSRkNOICBhcmZjbiwgaW50OCBzYW1wbGVOb1BlckZyYW1lLCBHYWluIGdhaW4sIGludDE2IGZyYW1lcywgaW50OCBpZl9mbGFnICk7CisgICAjZW5kaWYKKyNlbmRpZgorCisvKiBGdW5jdGlvbnMgcHJvdmlkZWQgYnkgbDF0c3RfZmNiLmMgKi8KK3ZvaWQgTDFUU1RfRkNCQ29udHJvbChBUkZDTiBhcmZjbiwgaW50MTYgZGFjVmFsdWUsIEdhaW4gZ2Fpbik7CitpbnR4IEwxVFNUX0ZDQkdldEZyZXFPZmZzZXQodm9pZCk7CisKKy8qIEZ1bmN0aW9ucyBwcm92aWRlZCBieSBsMXRzdF9uYnR4LmMgKi8KK3ZvaWQgTDFUU1RfTm9ybWFsQnVyc3RUeChBUkZDTiAgYXJmY24sIEJTSUMgYnNpYywgaW50OCBiaXRtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyIHR4UG93ZXJMZXYsIGludDE2IGZyYW1lcywgaW50MTYgZGFjVmFsdWUsIEFQQ1R4UGF0dGVybiBwYXR0ZXJuKTsKKworLyogRnVuY3Rpb25zIHByb3ZpZGVkIGJ5IGwxdHN0X2NvbnQuYyAqLwordm9pZCBMMVRTVF9Db250aW51b3VzVHgoQVJGQ04gYXJmY24sIENvbnRUeFBhdHRlcm4gcGF0dGVybix1aW50MTYgcGF0dGVybkRhdGEsIGJvb2wgb25PZmYsIHVpbnQxNiBtb2R0eXBlLCBQb3dlciBQb3dlckxldik7CisjaWYgZGVmaW5lZChfXzJHX1JYX0RJVkVSU0lUWV9QQVRIX1NVUFBPUlRfXykKK3ZvaWQgTDFUU1RfQ29udGludW91c1J4KCBGcmVxdWVuY3lCYW5kIGJhbmQsIEFSRkNOIGFyZmNuLCBHYWluIGdhaW4sIEdhaW4gZ2Fpbl9yeGQsIGJvb2wgb25PZmYgKTsKKyNlbHNlCit2b2lkIEwxVFNUX0NvbnRpbnVvdXNSeChBUkZDTiBhcmZjbiwgR2FpbiBnYWluLCBib29sIG9uT2ZmKTsKKyNlbmRpZgorCisvKiBGdW5jdGlvbnMgcHJvdmlkZWQgYnkgbDF0c3RfcGR0Y2guYyAqLworI2lmIChNRF9EUlZfSVNfR1BSUyB8fCBNRF9EUlZfSVNfTVVMVElTTE9UX1RYX1NVUFBPUlQpCit2b2lkIEwxVFNUX011bHRpU2xvdFR4KCBBUkZDTiAgYXJmY24sIEJTSUMgYnNpYywgaW50OCB0aW1lU2xvdG1hc2ssIFBvd2VyIHBvd2VyTGV2WzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgQ29kaW5nU2NoZW1lIGNzWzRdLCBUaW1pbmdBZHZhbmNlIHRhLCBpbnQzMiBmcmFtZXMsIGludDE2IGRhY1ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0VncHJzLCBBUENUeFBhdHRlcm4gcGF0dGVybiwgdWludDE2IHBhdHRlcm5EYXRhICk7CisjZW5kaWYKKworI2lmIE1EX0RSVl9JU19UWF9HQUlOX1JGX0NBTElCUkFUSU9OX1NVUFBPUlQKK3ZvaWQgTDFUU1RfVHhHYWluUkZTZXR0aW5nKEFSRkNOICBhcmZjbiwgQlNJQyBic2ljLCBDb2RpbmdTY2hlbWUgY3MsIFRpbWluZ0FkdmFuY2UgdGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgZnJhbWVzLCBpbnQxNiBkYWNWYWx1ZSwgYm9vbCBpc0VncHJzLCBBUENUeFBhdHRlcm4gcGF0dGVybiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTYgcGF0dGVybkRhdGEsICB1aW50MTYgcGFHYWluLCB1aW50MTYgcGFWYmlhcywgdWludDE2IHJmR2FpbkluZGV4ICk7Cit1aW50OCBMMVRTVF9RdWVyeV9HcmZfTnVtYmVyKCB2b2lkICk7CitpbnQxNiogTDFUU1RfUXVlcnlfQmFzZWJhbmRfUG93ZXIoIHZvaWQgKTsKKyNlbmRpZgorCisvKiBGdW5jdGlvbnMgcHJvdmlkZWQgYnkgbDF0c3RfYWZjLmMgKi8KK3ZvaWQgTDFUU1RfU2V0QWZjRGFjVmFsdWUoIGludDE2IGRhY1ZhbHVlICk7Cit1aW50MTYgTDFUU1RfR2V0QWZjRGFjVmFsdWVBdFRSWE9mZnNldENhbGlicmF0aW9uKHZvaWQpOwordm9pZCBMMVRTVF9TZXRBRmNEYXRhKCBpbnQxNiBjYWxpYnJhdGVkX2RhY19kZWZhdWx0LCBpbnR4IGNhbGlicmF0ZWRfaW50X3Nsb3BlICk7Cit2b2lkIEwxVFNUX1NldERjeG9Qb3dlck1vZGUoa2FsX3VpbnQ4IG1vZGUpOworCisjaWYgTURfRFJWX0lTX0VQU0tfVFhfU1VQUE9SVAordm9pZCBMMVRTVF9SRl9TZXRSYW1wQXBjTGV2ZWxFUFNLKCBpbnQgcmZfYmFuZCwgaW50IHBvd2VyX2xldmVsLCBpbnQgYXBjX2RhYyApOworI2VuZGlmCisKK3R5cGVkZWYgdm9pZCAoKkNhbGlicmFIYW5kbGVyQ2FsbGJhY2spKGthbF9pbnQzMiB1NFJlc3VsdCk7Citib29sIEwxVFNUX0JlZ2luMzJLQ2FsaWJyYXRpb24oIENhbGlicmFIYW5kbGVyQ2FsbGJhY2sgY2IgKTsKK3ZvaWQgTDFUU1RfR2V0MzJLQ2FsaWJyYXRpb25SZXN1bHQoIGthbF91aW50MzIgZm1SZXN1bHQgKTsKKwordm9pZCBMMVRTVF9VcGRhdGVDYWxpYnJhdGlvbkRhdGEoIGthbF91aW50MzIgY2FsX2xpZCApOwordWludDE2IEwxVFNUX1F1ZXJ5X0wxRF9Nb2RlKCB2b2lkICk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvbDF0c3RfcHVibGljX2dlbjk1LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9sMXRzdF9wdWJsaWNfZ2VuOTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjc0NWY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvbDF0c3RfcHVibGljX2dlbjk1LmgKQEAgLTAsMCArMSw3OTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIE1vZGlmaWNhdGlvbiBOb3RpY2U6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBNZWRpYVRlayBJbmMuIGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDEKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBsMXRzdF9wdWJsaWMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNVEs2MjA4CisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgTDEgdGVzdCBtb2RlIHB1YmxpYyBpbnRlcmZhY2UKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibDFfdHlwZXNfcHVibGljLmgiCisjaW5jbHVkZSAibDFfb3B0aW9uLmgiCisjaW5jbHVkZSAibXBoX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJsMV9rYWwuaCIKKworI2lmIE1EX0RSVl9JU19OU0ZUX0xJU1RfTU9ERV9TVVBQT1JUCisjaW5jbHVkZSAibDF0c3RfbnNmdF9sbV9wdWJsaWMuaCIKKyNlbmRpZgorCisjaWZuZGVmIGwxdHN0X3B1YmxpY19oCisjZGVmaW5lIGwxdHN0X3B1YmxpY19oCisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfR1NNICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNU19DQVBBQklMSVRZX0dQUlMgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTVNfQ0FQQUJJTElUWV9FREdFX1JYICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfRURHRV84UFNLX1RYICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBNU19DQVBBQklMSVRZXzhQTSAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTVNfQ0FQQUJJTElUWV9GSEMgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfTEMgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBNU19DQVBBQklMSVRZX05TRlQgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgTVNfQ0FQQUJJTElUWV9UQ1ZDWE8gICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfVFhQQ19DTF9HTVNLICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBNU19DQVBBQklMSVRZX1RYUENfT0wgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgTVNfQ0FQQUJJTElUWV9UWFBDX0NMX1RFTVAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfVFhQQ19DTF9FUFNLICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBNU19DQVBBQklMSVRZX0xOQU1PREUgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgTVNfQ0FQQUJJTElUWV9UWFBDX0FVWF9URU1QX0FEQyAweDAwMDA0MDAwCisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfVFhQQ19CU0lfVEVNUF9BREMgMHgwMDAwODAwMAorCisjZGVmaW5lIE1TX0JBTkRfU1VQUE9SVF9HU000MDAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNU19CQU5EX1NVUFBPUlRfR1NNODUwICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTVNfQkFORF9TVVBQT1JUX0dTTTkwMCAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1TX0JBTkRfU1VQUE9SVF9EQ1MxODAwICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBNU19CQU5EX1NVUFBPUlRfUENTMTkwMCAgICAgICAgIDB4MDAwMDAwMTAKKworI2RlZmluZSBDQUxfUlhfTE5BX01PREVfSElHSCAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBDQUxfUlhfTE5BX01PREVfTUlEICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBDQUxfUlhfTE5BX01PREVfTE9XICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBDQUxfUlhfTE5BX01PREVfU0VTTCAgICAgICAgICAgIDB4MDAwOCAgLy8gZm9yIHNpbmdsZS1lbmQgc2F3LWxlc3MKKyNkZWZpbmUgQ0FMX1JYX0xOQV9XX0NPRUYgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgQ0FMX1JYX0VMTkFfSElHSF9TRU5TSVRJVklUWSAgICAweDAwMjAgIC8vIGVsbmErRzYgZm9yIHNlbnNpdGl2aXR5CisjZGVmaW5lIENBTF9SWF9FTE5BX0JZUEFTU19MT1dfTUFYUElOICAgMHgwMDQwICAvLyBlbG5hIGJ5cGFzcytHMSBmb3IgTWF4IFBpbgorCisKKworI2RlZmluZSBDQUxfVFhQQ19PTCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBDQUxfVFhQQ19DTF9HTVNLICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBDQUxfVFhQQ19DTF9FUFNLICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBDQUxfVFhQQ19DTF9URU1QICAgICAgICAgICAgICAgIDB4MDAwOAorCisjZGVmaW5lIE5WUkFNX0dFVF9TRVRfUlhfUEFUSExPU1MgICAgICAgMHgwMDAxICAvL2ZvciBSRl9URVNUX0NNRF9HRVRfUlhfUEFUSF9MT1NTICYgUkZfVEVTVF9DTURfU0VUX1JYX1BBVEhfTE9TUyAgJiAgU0VUL0dFVCBQQVRITE9TUyBWMyBmb3IgOTMKKworCit0eXBlZGVmIGVudW0KK3sKKyAgIEFGQ18yX1NFQworICAsQUZDXzMzX1NFQworfSBBZmNDYWxUeXBlOworCit0eXBlZGVmIGVudW0KK3sKKyAgIEFGQ19EQUNfUkFOR0VfMTAyMworICAsQUZDX0RBQ19SQU5HRV84MTkxCit9IEFmY0NhbERhY1JhbmdlOworCit0eXBlZGVmIGVudW0KK3sKKyAgIEJhbmQ0MDAgID0gMHgwCisgICxCYW5kODUwICA9IDB4MQorICAsQmFuZDkwMCAgPSAweDIKKyAgLEJhbmQxODAwID0gMHg0CisgICxCYW5kMTkwMCA9IDB4OCAKK30gQmFuZEJpdE1hcDsKKwordHlwZWRlZiBlbnVtCit7CisgICBURU1QX1JBTkdFX00xMF82NQorICAsVEVNUF9SQU5HRV9NMTBfOTAKK30gVGVtcFJhbmdlVmVyc2lvbjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKy8vIGJvb2wgICAgICAgICAgICAgIG9rOworICAgdWludDMyICAgICAgICAgICAgY2FwYWJpbGl0eTsKKyAgIHVpbnQzMiAgICAgICAgICAgIGJhbmRfc3VwcG9ydDsKK30gTXNDYXBhYmlsaXR5RXg7CisKKy8vIE1TIENhcGFiaWxpdHkKK3R5cGVkZWYgIHN0cnVjdAoreworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9nc20gICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9ncHJzICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9lZGdlX3J4ICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9lcHNrX3R4ICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF84cG0gICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9maGMgICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9uc2Z0ICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgYmFuZF9nc200MDAgICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgYmFuZF9nc204NTAgICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgYmFuZF9nc205MDAgICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgYmFuZF9kY3MxODAwICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgYmFuZF9wY3MxOTAwICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgcHNfZXBza190eF9kaXNhYmxlIDoxOyAgIC8qIFNldCBhcyBiaXQtMSB3aGVuIF9fRVBTS19UWF9TV19TV0lUQ0hfT0ZGX18gaXMgZGVmaW5lZC4gKi8KKyAgIHVuc2lnbmVkIHNob3J0ICAgIHJlc2VydmVkMCAgICAgICAgICA6MzsKK30gTXNDYXBhYmlsaXR5OworCisvLyBGYWN0b3J5IE1vZGUgQ2FsaWJyYXRpb24gSXRlbQordHlwZWRlZiAgc3RydWN0Cit7CisgICB1bnNpZ25lZCBzaG9ydCAgICBpc19jYXBhYmxlICAgICAgOjE7CisgICB1bnNpZ25lZCBzaG9ydCAgICBpc19tYW5kYXRvcnkgICAgOjE7CisgICB1bnNpZ25lZCBzaG9ydCAgICBwYXJhbWV0ZXJzICAgICAgOjE0OworfSBGYWNNb2RDYWxJdG07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBGYWNNb2RDYWxJdG0gICAgICBjYXBfaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAwCisgICBGYWNNb2RDYWxJdG0gICAgICBhZmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAxCisgICBGYWNNb2RDYWxJdG0gICAgICByeF9wYXRobG9zczsgICAgICAgICAgICAgICAgICAgICAgIC8vICAyCisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9wY2w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAzCisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9zdWJiYW5kOyAgICAgICAgICAgICAgICAgICAgICAgIC8vICA0CisgICBGYWNNb2RDYWxJdG0gICAgICB0cnhfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgIC8vICA1CisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9pcTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICA2CisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9mYl9kYWM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICA3CisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9zbG9wZV9za2V3OyAgICAgICAgICAgICAgICAgICAgIC8vICA4CisgICBGYWNNb2RDYWxJdG0gICAgICB3X2NvZWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICA5CisgICBGYWNNb2RDYWxJdG0gICAgICB0eHBjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEwCisgICBGYWNNb2RDYWxJdG0gICAgICB0ZW1wX2FkYzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDExCisgICBGYWNNb2RDYWxJdG0gICAgICByZW1vdmVfMzJrX3hvOyAgICAgICAgICAgICAgICAgICAgIC8vIDEyCisgICBGYWNNb2RDYWxJdG0gICAgICBjb19jcnlzdGFsOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEzCisgICBGYWNNb2RDYWxJdG0gICAgICBoaWdoX2xuYV9zcDsgICAgICAgICAgICAgICAgICAgICAgIC8vIDE0CisgICBGYWNNb2RDYWxJdG0gICAgICBtaWRfbG5hX3NwOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE1CisgICBGYWNNb2RDYWxJdG0gICAgICBsb3dfbG5hX3NwOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE2CisgICBGYWNNb2RDYWxJdG0gICAgICBiYXRfdGVtcF9jb21wOyAgICAgICAgICAgICAgICAgICAgIC8vIDE3CisgICBGYWNNb2RDYWxJdG0gICAgICBkdHNfZ2Fpbl9jbWI7ICAgICAgICAgICAgICAgICAgICAgIC8vIDE4CisgICBGYWNNb2RDYWxJdG0gICAgICB1dHNfYmFuZF9jbWI7ICAgICAgICAgICAgICAgICAgICAgIC8vIDE5CisgICBGYWNNb2RDYWxJdG0gICAgICBjb190ZW1wX2FkYzsgICAgICAgICAgICAgICAgICAgICAgIC8vIDIwCisgICBGYWNNb2RDYWxJdG0gICAgICBhZGp1c3RhYmxlX2xuYV9tb2RlX3BhdGhsb3NzOyAgICAgIC8vIDIxCisgICBGYWNNb2RDYWxJdG0gICAgICBnYWluX3JmX2NhbDsgICAgICAgICAgICAgICAgICAgICAgIC8vIDIyCisgICBGYWNNb2RDYWxJdG0gICAgICBieXBhc3NfY2hlY2tfZml4YWZjX252cmFtOyAgICAgICAgIC8vIDIzCisgICBGYWNNb2RDYWxJdG0gICAgICBtdWx0aV9yYXRfdGFkY19iaXRtYXA7ICAgICAgICAgICAgIC8vIDI0CisgICBGYWNNb2RDYWxJdG0gICAgICBtdWx0aV9yYXRfYWZjX2JpdG1hcDsgICAgICAgICAgICAgIC8vIDI1CisgICBGYWNNb2RDYWxJdG0gICAgICBhZGp1c3RhYmxlX2xuYV9tb2RlX3BhdGhsb3NzX3YyOyAgIC8vIDI2CisgICBGYWNNb2RDYWxJdG0gICAgICB0ZW1wZXJhdHVyZV9pbmZvOyAgICAgICAgICAgICAgICAgIC8vIDI3CisgICBGYWNNb2RDYWxJdG0gICAgICBkdF9jb2V4aXN0ZW5jZV9pbmZvOyAgICAgICAgICAgICAgIC8vIDI4CisgICBGYWNNb2RDYWxJdG0gICAgICB0aGVybWFsX3NlbnNvcl90eXBlOyAgICAgICAgICAgICAgIC8vIDI5CisgICBGYWNNb2RDYWxJdG0gICAgICBuc2Z0X2xpc3Rtb2RlOyAgICAgICAgICAgICAgICAgICAgIC8vIDMwCisgICBGYWNNb2RDYWxJdG0gICAgICB3b3JsZG1vZGVfaWRfaW5mbzsgICAgICAgICAgICAgICAgIC8vIDMxCisgICBGYWNNb2RDYWxJdG0gICAgICBjcnlzdGFsX29uX3BtaWNfZW5hYmxlOyAgICAgICAgICAgIC8vIDMyCisgICBGYWNNb2RDYWxJdG0gICAgICBsb3dfcGNsX3N1YmJhbmRfY2FsOyAgICAgICAgICAgICAgIC8vIDMzCisgICBGYWNNb2RDYWxJdG0gICAgICBmaGNfZHRzX2V4dHJhX2ZiX2VuYWJsZTsgICAgICAgICAgIC8vIDM0CisgICBGYWNNb2RDYWxJdG0gICAgICBzYXdsZXNzX2xuYV9zcDsgICAgICAgICAgICAgICAgICAgIC8vIDM1CisgICBGYWNNb2RDYWxJdG0gICAgICBudnJhbV9hY2Nlc3NfaW50ZXJmYWNlOyAgICAgICAgICAgIC8vIDM2CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX3N1cHBvcnRfYmFuZF9iaXRtYXA7ICAgICAgICAgIC8vIDM3CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2hpZ2hfc3A7ICAgICAgICAgICAgICAgICAgICAgIC8vIDM4CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX21pZF9zcDsgICAgICAgICAgICAgICAgICAgICAgIC8vIDM5CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2xvd19zcDsgICAgICAgICAgICAgICAgICAgICAgIC8vIDQwCisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX3dfY29lZl9zcDsgICAgICAgICAgICAgICAgICAgIC8vIDQxCisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX21pZF9zYXdsZXNzX3NwOyAgICAgICAgICAgICAgIC8vIDQyCisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2hpZ2hfc2Vuc2l0aXZpdHlfc3A7ICAgICAgICAgIC8vIDQzCisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2J5cGFzc19sb3dfbWF4cGluX3NwOyAgICAgICAgIC8vIDQ0CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2J5cGFzc19nYWluX3RocmVzaG9sZDsgICAgICAgIC8vIDQ1CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2J5cGFzc19zdXBwb3J0X2JhbmRfYml0bWFwOyAgIC8vIDQ2CisgICBGYWNNb2RDYWxJdG0gICAgICBzaW53YXZlX2FmY19nZXRfdGVtcF9mcmVxOyAgICAgICAgIC8vIDQ3CisgICBGYWNNb2RDYWxJdG0gICAgICB3Y29lZl9zZXRnZXRfY21kX3N1cHBvcnQ7ICAgICAgICAgIC8vIDQ4CisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9zZXRnZXRfY21kX3N1cHBvcnQ7ICAgICAgICAgICAgIC8vIDQ5CisgICBGYWNNb2RDYWxJdG0gICAgICBuc2Z0X2FkanVzdF90cG9fc3VwcG9ydDsgICAgICAgICAgIC8vIDUwCisgICBGYWNNb2RDYWxJdG0gICAgICByeGRfdjVfY21kX3N1cHBvcnQ7ICAgICAgICAgICAgICAgIC8vIDUxCisgICBGYWNNb2RDYWxJdG0gICAgICByeGRfc3VwcG9ydF9iYW5kX2JpdG1hcDsgICAgICAgICAgIC8vIDUyCisgICBGYWNNb2RDYWxJdG0gICAgICBtbG5hX3R5cGVfdjc7ICAgICAgICAgICAgICAgICAgICAgIC8vIDUzCisgICBGYWNNb2RDYWxJdG0gICAgICByeGxldl9wcmVjaXNpb25fZXh0ZW5kOyAgICAgICAgICAgIC8vIDU0Cit9IEZhY01vZENhbDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIHVpbnQxNiAgICAgICAgICAgIGNhcF9pdG1fb2Zmc2V0OworICAgdWludDE2ICAgICAgICAgICAgZm1jX2l0bV9vZmZzZXQ7CisgICBNc0NhcGFiaWxpdHkgICAgICBjYXBfaXRtOworICAgRmFjTW9kQ2FsICAgICAgICAgZm1jX2l0bTsKK30gTXNDYXBhYmlsaXR5RXhWMjsKKworI2lmIE1EX0RSVl9JU19GSENfU1VQUE9SVAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIEZyZXF1ZW5jeUJhbmQgICAgIGJhbmQ7CisgICBBUkZDTiAgICAgICAgICAgICBhcmZjbjsKKyAgIGludDE2ICAgICAgICAgICAgIGRhY192YWx1ZVszM107CisgICBHYWluICAgICAgICAgICAgICBnYWluOworICAgaW50MTYgICAgICAgICAgICAgcmVwZWF0X2NudDsgLy8gcmVwZXRpdGl2ZSB0ZXN0IGNvdW50cyAoZnJhbWVzKSBmb3IgZWFjaCBBRkMgREFDIHZhbHVlCisgICBib29sICAgICAgICAgICAgICBjYXBpZF9jYWw7ICAvLyBjYXBpZCBjYWxpYnJhdGlvbiBjdHJsCisgICBib29sICAgICAgICAgICAgICBsaW5lYXJfY2FsOyAvLyAzMyBzdGFnZXMgY2FsaWJyYXRpb24gY3RybAorICAgaW50MzIgICAgICAgICAgICAgY2FwaWRfbWluOyAgLy8gbWluIHZhbHVlIGZvciBjYXBpZCByYW5nZQorICAgaW50MzIgICAgICAgICAgICAgY2FwaWRfbWF4OyAgLy8gbWF4IHZhbHVlIGZvciBjYXBpZCByYW5nZQorfSBEU1NBZmM7IAorCit0eXBlZGVmIGVudW0KK3sKKyAgIEdTTV9MTkFfTlVMTCwgIC8vRm9yIG9sZCBDTUQsIHRvb2wgd2lsbCBub3Qgc2V0IGdzbV9sbmFfbW9kZQorICAgR1NNX0xOQV9ISUdILAorICAgR1NNX0xOQV9NSUQsCisgICBHU01fTE5BX0xPVywKKyAgIEdTTV9MTkFfV19DT0VGLAorICAgR1NNX0xOQV9TQVdMRVNTX01JRCwKKyAgIEdTTV9FTE5BX0hJR0hfU0VOU0lUSVZJVFksICAvL0ZvciBTZW5zaXRpdml0eSwgZWxuYStHNgorICAgR1NNX0VMTkFfQllQQVNTX0xPV19NQVhQSU4gIC8vRm9yIE1heCBQaW4sIGVsbmEgYnlwYXNzK0cxCit9TE5BX0NhbF9UeXBlOworCisvKkdlbiA5NSBSWEQqLwordHlwZWRlZiBlbnVtCit7CisgICBHU01fUlhfQ0FMX1NFUV9WNV9OVUxMID0gMCwKKyAgIEdTTV9SWF9DQUxfU0VRX1Y1X1VUUkFfSElHSCA9IDEsCisgICBHU01fUlhfQ0FMX1NFUV9WNV9ISUdIID0gMiwKKyAgIEdTTV9SWF9DQUxfU0VRX1Y1X01JRCA9IDMsCisgICBHU01fUlhfQ0FMX1NFUV9WNV9NSURfU0FXTEVTUyA9IDQsCisgICBHU01fUlhfQ0FMX1NFUV9WNV9MT1cgPSA1LAorICAgR1NNX1JYX0NBTF9TRVFfVjVfQllQQVNTX0xPVyA9IDYsCisgICBHU01fUlhfQ0FMX1NFUV9WNV9XQ09FRiA9IDcKK30gTE5BQ2FsU2VxVjVfRTsgICAvL0xOQV9DYWxfVHlwZSAgR2VuOTUgICAvL011c3QgdGhlIHNhbWUgYXMgUmZUZXN0UnhDYWxTZXFWNV9FCisKKyNpZiBkZWZpbmVkKF9fMkdfUlhfRElWRVJTSVRZX1BBVEhfU1VQUE9SVF9fKQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIEZyZXF1ZW5jeUJhbmQgICAgIGJhbmQ7CisgICBBUkZDTiAgICAgICAgICAgICAgICAgICAgYXJmY247CisgICAgIC8vR2FpbiAgICAgICAgICAgICAgICAgICAgICAgIGdhaW5bNl07IAorICAga2FsX2ludDE2ICAgICAgICAgICAgICAgICByZXBlYXRfY250OyAKKyAgIGthbF9pbnQxNiAgICAgICAgICAgIGRsX2NlbGxfcG93ZXI7ICAvL2l0IGlzIERMIFBvd2VyIGZvciBlYWNoIGZyYW1lICAgLy8gMS84ZEJtCisgICBMTkFDYWxTZXFWNV9FICAgICAgIGdzbV9sbmFfbW9kZSBbR1NNX1JGX01BWF9SWF9BTlRfTlVNXTsKK30gRFNTUEw7ICAgIC8vRFNTUExfTXVsdGlBbnQ7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIEZyZXF1ZW5jeUJhbmQgICAgIGJhbmQ7CisgICBBUkZDTiAgICAgICAgICAgICBhcmZjbjsKKyAgIEdhaW4gICAgICAgICAgICAgIGdhaW5bNl07ICAgICAgIC8vIGdhaW4gZm9yIHJ4IHNsb3QgMC8xLzIvMy80LzUKKyAgIGludDE2ICAgICAgICAgICAgIHJlcGVhdF9jbnQ7ICAgIC8vIHJlcGV0aXRpdmUgdGVzdCBjb3VudHMgKGZyYW1lcykgZm9yIGVhY2ggQVJGQ04gdmFsdWUKKyAgIExOQV9DYWxfVHlwZSAgICAgIGdzbV9sbmFfbW9kZTsgIC8vMChOdWxsKSAxKGhpZ2gpIDIobWlkKSAzKGxvdykgNCh3LWNvZWYpIDUoc2F3bGVzcyBtaWQpIDYoZWxuYStHNikgNyhlbG5hIGJ5cGFzcytHMSkKK30gRFNTUEw7IAorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBib29sICAgICAgICAgICAgICBhZmNfY2FsOworICAgYm9vbCAgICAgICAgICAgICAgcGxfY2FsOworICAgaW50OCAgICAgICAgICAgICAgc3luY19zYl9udW07ICAvLyB0aGUgU0IgZnJhbWUgbnVtYmVycyBuZWVkZWQgZm9yIHN5bmMgcHJvY2VzcyBiZWZvcmUgcGF0aCBsb3NzIGNhbGlicmF0aW9uCisgICB1aW50MTYgICAgICAgICAgICBzdGVwX2NudDsgICAgIC8vaW50OCAtPiB1aW50MTYgdG8gbWF0Y2ggc2l6ZSA1MTIKKyAgIGludDE2ICAgICAgICAgICAgIHBvd2VyOyAgICAgICAgLy8gdGhlIHBvd2VyIGxldmVsIGV4cGVjdGVkIHRvIG1lYXN1cmUgZnJvbSB0ZXN0IHNldAorICAgRFNTQWZjICAgICAgICAgICAgQWZjRFNTOworICAgRFNTUEwgICAgICAgICAgICAgUGF0aExvc3NEU1NbTDFfTUFYX0RUU19TVEVQX0NOVC0yXTsKKyAgIGludDE2ICAgICAgICAgICAgIGxwbV9zYl9udW07ICAgLy8gdGhlIFNCIGZyYW1lIG51bWJlcnMgZm9yIERDWE8gTFBNIGNhbGlicmF0aW9uCisjaWYgZGVmaW5lZChfXzJHX1JYX0RJVkVSU0lUWV9QQVRIX1NVUFBPUlRfXykKKyAgIHVpbnQ4ICAgICAgICAgICAgIEFudGVubmE7ICAgLy8gR1NNX0FudERpbWVuc2lvbgorI2VuZGlmCit9IERUU1BhcmFtOworLyoKK3R5cGVkZWYgc3RydWN0Cit7CisgICBBZmNQYXJhbXMgICAgICAgICphZmNfcGFyYW1zOworICAgUmVwb3J0ICAgICAgICAgICAqcmVwb3J0OworfSBEVFNNUGFyYW1zOworKi8KK3R5cGVkZWYgc3RydWN0Cit7CisvLyBEVFNNUGFyYW1zICAgICAgICBwYXJhbXM7CisgICBpbnR4ICAgICAgICAgICAgICBwYXRoX2xvc3NfY250OworICAgaW50eCAgICAgICAgICAgICAgZnJlcV9vZmZzZXQ7CisgICBpbnR4ICAgICAgICAgICAgICBjYXBpZF9mcmVxX29mZnNldF9taW47CisgICBpbnR4ICAgICAgICAgICAgICBjYXBpZF9mcmVxX29mZnNldFtGSENfTUFYX0NBUElEX1NFQVJDSF9OVU1dOworICAgaW50MzIgICAgICAgICAgICAgY2FwaWRfc2VhcmNoX29yZGVyW0ZIQ19NQVhfQ0FQSURfU0VBUkNIX05VTV07CisgICBpbnQzMiAgICAgICAgICAgICBjYXBpZDsKKyAgIGludDMyICAgICAgICAgICAgIGNhcGlkX2hpZ2g7CisgICBpbnQzMiAgICAgICAgICAgICBjYXBpZF9sb3c7ICAgCisgICBpbnQzMiAgICAgICAgICAgICBjYXBpZF9iZXN0OworICAgaW50MTYgICAgICAgICAgICAgYWZjX2RhYzsKKyAgIGludDE2ICAgICAgICAgICAgIGFyZmNuOworICAgaW50MTYgICAgICAgICAgICAgY2FwaWRfY250OworICAgaW50MTYgICAgICAgICAgICAgcmVwZWF0X2luZGV4OworICAgaW50OCAgICAgICAgICAgICAgc3RhdGU7CisgICBpbnQ4ICAgICAgICAgICAgICBjYXBpZF9pbmRleDsKKyAgIGludDggICAgICAgICAgICAgIGNhcGlkX29rYXlfY250OworICAgaW50OCAgICAgICAgICAgICAgYWZjX2RhY19pbmRleDsKKyAgIGludDggICAgICAgICAgICAgIHNiX29rYXlfY250OworICAgdWludDggICAgICAgICAgICAgc2JfZmFpbF9jbnQ7CisgICB1aW50OCAgICAgICAgICAgICBmYl9mYWlsX2NudDsKKyAgIGJvb2wgICAgICAgICAgICAgIHBsX3N0YXJ0ZWQ7CisgICBib29sICAgICAgICAgICAgICByc3RfZHRzX2lkeF9hdF9wbF9jYWxfc3RhcnRlZDsKKyAgIGJvb2wgICAgICAgICAgICAgIHByZV9jYXBpZF9jYWxfb2tbRkhDX1BSRV9DQVBJRF9TRUFSQ0hfTlVNXTsKK30gc0RUU007CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBGcmVxdWVuY3lCYW5kICAgICBiYW5kOworICAgQVJGQ04gICAgICAgICAgICAgYXJmY247CisgICBpbnQ4ICAgICAgICAgICAgICB0aW1lc2xvdF9wZXJfZnJhbWU7CisgICBpbnQ4ICAgICAgICAgICAgICBhcGNfZGFjX3BjbF9zZWw7ICAgICAgLy8gMjogZ2FpbiBzdGVwIGluZGV4LCAxOiBhcGNfZGFjLCAwOiBhcGNfcGNsCisgICBpbnQxNiAgICAgICAgICAgICBhcGNfZGFjX3BjbF92YWx1ZVs0XTsKKy8vIHVpbnQ4ICAgICAgICAgICAgIHBhX3ZiaWFzX3ZhbDsKKyAgIHVpbnQ4ICAgICAgICAgICAgIHBhX3ZiaWFzX3ZhbFs0XTsKKyAgIHVpbnQ4ICAgICAgICAgICAgIGlzX2xvd19wY2xbNF07CisgICBDb2RpbmdTY2hlbWUgICAgICBjc1s0XTsKKyAgIGludDMyICAgICAgICAgICAgIHJlcGVhdF9jbnQ7CisgICBpbnQxNiAgICAgICAgICAgICBhZmNfZGFjX3ZhbHVlOworICAgaW50OCAgICAgICAgICAgICAgdHNjOworICAgQVBDVHhQYXR0ZXJuICAgICAgcGF0dGVybjsKKyAgIHVpbnQxNiAgICAgICAgICAgIHBhdHRlcm5fZGF0YTsKK30gVVNTQXBjOworCit0eXBlZGVmIHN0cnVjdAoreworICAgdWludDE2ICAgICAgICAgICAgc3RlcF9jbnQ7ICAvL2ludDggLT4gdWludDE2IHRvIG1hdGNoIHNpemUgNTEyCisgICBpbnQxNiAgICAgICAgICAgICBoaWdoX2FwY19kY29mZnNldFtGcmVxdWVuY3lCYW5kQ291bnRdOworICAgVVNTQXBjICAgICAgICAgICAgQXBjVVNTW0wxX01BWF9VVFNfU1RFUF9DTlRdOyAgIAorfSBVVFNQYXJhbTsKKyNlbmRpZgorLyogRnVuY3Rpb25zIHByb3ZpZGVkIGJ5IGwxdHN0X2NmZy5jICovCit2b2lkIEwxVFNUX0luaXQodm9pZCk7Cit2b2lkIEwxVFNUX1N0b3Aodm9pZCk7Cit2b2lkIEwxVFNUX1NlbGVjdEZyZXF1ZW5jeUJhbmQxOTAwKCBib29sIHNlbGVjdGVkICk7Cit2b2lkIEwxVFNUX1NldEJCVFhDZmcoIGNvbnN0IHNCQlRYQ2ZnICpwYXJhbSApOwordm9pZCBMMVRTVF9HZXRCQlRYQ2ZnKCBzQkJUWENmZyAqcGFyYW0gKTsKK2ludHggTDFUU1RfR2V0QkJUWFZlcih2b2lkKTsKK2ludCAgTDFUU1RfR2V0Q3J5c3RhbENhcFJhbmdlKHZvaWQpOwordWludDMyIEwxVFNUX0dldEJhbmRTdXBwb3J0KHZvaWQpOwordWludDE2IEwxVFNUX0dldF9FUFNLX1RYX1N1cHBvcnQodm9pZCk7Cit1aW50MTYgTDFUU1RfR2V0X1RDVkNYT19TdXBwb3J0KHZvaWQpOwordm9pZCBHTDFUU1RfRGlzcGF0Y2hNZXNzYWdlKGlsbV9zdHJ1Y3QgKmlsbV9wdHIpOwordm9pZCBMMVRTVF9SRl9TZXRSYW1wQXBjTGV2ZWwoIGludCByZl9iYW5kLCBpbnQgcG93ZXJfbGV2ZWwsIGludCBhcGNfZGFjICk7Citib29sIEwxVFNUX0NoZWNrQXZhaWxhYmxlQmFuZHMoIEZyZXF1ZW5jeUJhbmQgYmFuZCApOworYm9vbCBMMVRTVF9DaGVja0F2YWlsYWJsZUFSRkNOcyggQVJGQ04gYXJmY24gKTsKKyNpZiBkZWZpbmVkKF9fQVRFUkZUWF9FUlJPUl9IQU5ETEVfRU5IQU5DRV9fKQorYm9vbCBMMVRTVF9DaGVja0JhbmRBUkZDTmlzTWF0Y2goIHVpbnQ4IGJhbmQsIEFSRkNOIGFyZmNuICk7CisjZW5kaWYgIC8vX19BVEVSRlRYX0VSUk9SX0hBTkRMRV9FTkhBTkNFX18KK3ZvaWQgTDFUU1RfTXNDYXBhYmlsaXR5KCBNc0NhcGFiaWxpdHlFeCAqbXNDYXBhYmlsaXR5RXggKTsKK3ZvaWQgTDFUU1RfTXNDYXBhYmlsaXR5VjIoIE1zQ2FwYWJpbGl0eUV4VjIgKm1zX2NhcCApOwordm9pZCBMMVRTVF9UWFBDX0NMX0dldEFsbEFEQyggdm9pZCAqYnVmZiwgaW50OCBpc19FUFNLICk7Cit2b2lkIEwxVFNUX1RYUENfQ0xfR2V0QWxsVEVNUCggdm9pZCAqYnVmZiwgaW50OCBpc19FUFNLICk7Cit2b2lkIEwxVFNUX1RYUENfQ0xfR2V0U3ViYmFuZCggaW50IHJmX2JhbmQsIHZvaWQgKmJ1ZmYsIGludDggaXNfRVBTSyApOwordWludDE2IEwxVFNUX1RYUENfQ0xfR2V0T25lQURDKCBpbnQgcmZfYmFuZCwgaW50IHBvd2VyX2xldmVsLCBpbnQ4IGlzX0VQU0sgKTsKK3VpbnQxNiBMMVRTVF9UWFBDX0dldFRlbXBlcmF0dXJlKCB2b2lkICk7CisjaWYgTURfRFJWX0lTX0ZIQ19TVVBQT1JUCit2b2lkIEwxVFNUX1N0YXJ0RFRTQ2FsKCBEVFNQYXJhbSAqZHRzRGF0YSApOwordm9pZCBMMVRTVF9TdGFydFVUU0NhbCggVVRTUGFyYW0gKnV0c0RhdGEgKTsKK3NEVFNNKiBMMVRTVF9GSENMb2codm9pZCk7CisjZW5kaWYKKworI2lmIE1EX0RSVl9JU19OU0ZUX1NVUFBPUlQKKyAgICNpZiBkZWZpbmVkKF9fMkdfUlhfRElWRVJTSVRZX1BBVEhfU1VQUE9SVF9fKQorICAgdm9pZCBMMVRTVF9TdGFydE5TRlRQcm9jKCBGcmVxdWVuY3lCYW5kIGJhbmQsIEFSRkNOIEJDaF9hcmZjbiwgQVJGQ04gVENoX2FyZmNuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3dlciBCQ2hfZGxfcG93ZXIsIFBvd2VyIFRDaF9kbF9wb3dlciwgVFNDIHRzYywgVGltZVNsb3QgVENoX3Nsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyIHR4UG93ZXJMZXYsIGJvb2wgSVNfRVBTS19UWCwgQ29kaW5nU2NoZW1lIGVwc2tfY3MgKTsKKyAgIHZvaWQgTDFUU1RfTlNGVFByb2NfQ2hhbmdlQ2hhbm5lbCggRnJlcXVlbmN5QmFuZCBiYW5kLCBBUkZDTiBCQ2hfYXJmY24sIEFSRkNOIFRDaF9hcmZjbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG93ZXIgQkNoX2RsX3Bvd2VyLCBQb3dlciBUQ2hfZGxfcG93ZXIsIFRTQyB0c2MsIFRpbWVTbG90IFRDaF9zbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3dlciB0eFBvd2VyTGV2LCBib29sIElTX0VQU0tfVFgsIENvZGluZ1NjaGVtZSBlcHNrX2NzICk7CisgICAjZWxzZQorICAgdm9pZCBMMVRTVF9TdGFydE5TRlRQcm9jKCBGcmVxdWVuY3lCYW5kIGJhbmQsIEFSRkNOIEJDaF9hcmZjbiwgQVJGQ04gVENoX2FyZmNuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FpbiBCQ2hfZ2FpbiwgR2FpbiBUQ2hfZ2FpbiwgVFNDIHRzYywgVGltZVNsb3QgVENoX3Nsb3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3dlciB0eFBvd2VyTGV2LCBib29sIElTX0VQU0tfVFgsIENvZGluZ1NjaGVtZSBlcHNrX2NzKTsKKyAgIHZvaWQgTDFUU1RfTlNGVFByb2NfQ2hhbmdlQ2hhbm5lbCAoIEZyZXF1ZW5jeUJhbmQgYmFuZCwgQVJGQ04gQkNoX2FyZmNuLCBBUkZDTiBUQ2hfYXJmY24sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FpbiBCQ2hfZ2FpbiwgR2FpbiBUQ2hfZ2FpbiwgVFNDIHRzYywgVGltZVNsb3QgVENoX3Nsb3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG93ZXIgdHhQb3dlckxldiwgYm9vbCBJU19FUFNLX1RYLCBDb2RpbmdTY2hlbWUgZXBza19jcyk7CisgICAjZW5kaWYgLy8jaWYgZGVmaW5lZChfXzJHX1JYX0RJVkVSU0lUWV9QQVRIX1NVUFBPUlRfXykgCit2b2lkIEwxVFNUX05TRlRQcm9jX0NoYW5nZVBvd2VyKCBQb3dlciB0eFBvd2VyTGV2KTsKK3ZvaWQgTDFUU1RfU3RvcE5TRlRQcm9jKCB2b2lkICk7Cit2b2lkIEwxVFNUX1N0b3BOU0ZUX1JlY292ZXJUb01ldGFTdGF0ZSggdm9pZCApOwordm9pZCBMMVRTVF9TZXR1cFNpbmdsZUVuZEJFUkRhdGEoIHVpbnQzMiB0c3RfY250ICk7Cit2b2lkIEwxVFNUX1JlcG9ydFNpbmdsZUVuZEJFUkRvbmUoIHVpbnQzMiogc2VCRVJfU1VNLCB1aW50MzIqIGN1cnJfY250ICk7Cit2b2lkIEwxVFNUX1NldHVwUlhMRVZEYXRhKCB2b2lkICk7CisgICAjaWYgZGVmaW5lZChfXzJHX1JYX0RJVkVSU0lUWV9QQVRIX1NVUFBPUlRfXykKKyAgIHZvaWQgTDFUU1RfUmVwb3J0UlhMRVYoIHVpbnQxNiBSWExFVltdICk7CisgICAjZWxzZQorICAgdm9pZCBMMVRTVF9SZXBvcnRSWExFViggdWludDE2ICpSWExFViApOworICAgI2VuZGlmCit2b2lkIEwxVFNUX1JlcG9ydFJYUXVhbCggdWludDE2IEJFUl9QRVJNSUxMQUdFLCB1aW50OCAqUlhRdWFsICk7CisjZW5kaWYgLy8jaWYgTURfRFJWX0lTX05TRlRfU1VQUE9SVAorCisvKiBGdW5jdGlvbnMgcHJvdmlkZWQgYnkgbDF0c3RfcG0uYyAqLworI2lmIGRlZmluZWQoX18yR19SWF9ESVZFUlNJVFlfUEFUSF9TVVBQT1JUX18pCit2b2lkIEwxVFNUX1Bvd2VyU2NhbiggQVJGQ04gIGFyZmNuLCBpbnQ4IHNhbXBsZU5vUGVyRnJhbWUsIEdhaW4gZ2FpbiwgR2FpbiBnYWluX3J4ZCwgaW50MTYgZnJhbWVzLCBGcmVxdWVuY3lCYW5kIGJhbmQgKTsKKyNlbHNlCit2b2lkIEwxVFNUX1Bvd2VyU2NhbihBUkZDTiBhcmZjbiwgaW50OCBzYW1wbGVOb1BlckZyYW1lLCBHYWluIGdhaW4sIGludDE2IGZyYW1lcyk7CisjZW5kaWYKKworI2lmIE1EX0RSVl9JU19XX0NBTkNFTExBVElPTl9TVVBQT1JUCisgICAjaWYgZGVmaW5lZChfXzJHX1JYX0RJVkVSU0lUWV9QQVRIX1NVUFBPUlRfXykKKyAgIHZvaWQgTDFUU1RfSVJfUG93ZXJTY2FuKCBBUkZDTiAgYXJmY24sIGludDggc2FtcGxlTm9QZXJGcmFtZSwgR2FpbiBnYWluLCBHYWluIGdhaW5fcnhkLCBpbnQxNiBmcmFtZXMsIGludDggaWZfZmxhZywgRnJlcXVlbmN5QmFuZCBiYW5kICk7CisgICAjZWxzZQorICAgdm9pZCBMMVRTVF9JUl9Qb3dlclNjYW4oIEFSRkNOICBhcmZjbiwgaW50OCBzYW1wbGVOb1BlckZyYW1lLCBHYWluIGdhaW4sIGludDE2IGZyYW1lcywgaW50OCBpZl9mbGFnICk7CisgICAjZW5kaWYKKyNlbmRpZgorCisvKiBGdW5jdGlvbnMgcHJvdmlkZWQgYnkgbDF0c3RfZmNiLmMgKi8KK3ZvaWQgTDFUU1RfRkNCQ29udHJvbChBUkZDTiBhcmZjbiwgaW50MTYgZGFjVmFsdWUsIEdhaW4gZ2Fpbik7CitpbnR4IEwxVFNUX0ZDQkdldEZyZXFPZmZzZXQodm9pZCk7CisKKy8qIEZ1bmN0aW9ucyBwcm92aWRlZCBieSBsMXRzdF9uYnR4LmMgKi8KK3ZvaWQgTDFUU1RfTm9ybWFsQnVyc3RUeChBUkZDTiAgYXJmY24sIEJTSUMgYnNpYywgaW50OCBiaXRtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyIHR4UG93ZXJMZXYsIGludDE2IGZyYW1lcywgaW50MTYgZGFjVmFsdWUsIEFQQ1R4UGF0dGVybiBwYXR0ZXJuKTsKKworLyogRnVuY3Rpb25zIHByb3ZpZGVkIGJ5IGwxdHN0X2NvbnQuYyAqLwordm9pZCBMMVRTVF9Db250aW51b3VzVHgoQVJGQ04gYXJmY24sIENvbnRUeFBhdHRlcm4gcGF0dGVybix1aW50MTYgcGF0dGVybkRhdGEsIGJvb2wgb25PZmYsIHVpbnQxNiBtb2R0eXBlLCBQb3dlciBQb3dlckxldik7CisjaWYgZGVmaW5lZChfXzJHX1JYX0RJVkVSU0lUWV9QQVRIX1NVUFBPUlRfXykKK3ZvaWQgTDFUU1RfQ29udGludW91c1J4KCBGcmVxdWVuY3lCYW5kIGJhbmQsIEFSRkNOIGFyZmNuLCBHYWluIGdhaW4sIEdhaW4gZ2Fpbl9yeGQsIGJvb2wgb25PZmYgKTsKKyNlbHNlCit2b2lkIEwxVFNUX0NvbnRpbnVvdXNSeChBUkZDTiBhcmZjbiwgR2FpbiBnYWluLCBib29sIG9uT2ZmKTsKKyNlbmRpZgorCisvKiBGdW5jdGlvbnMgcHJvdmlkZWQgYnkgbDF0c3RfcGR0Y2guYyAqLworI2lmIChNRF9EUlZfSVNfR1BSUyB8fCBNRF9EUlZfSVNfTVVMVElTTE9UX1RYX1NVUFBPUlQpCit2b2lkIEwxVFNUX011bHRpU2xvdFR4KCBBUkZDTiAgYXJmY24sIEJTSUMgYnNpYywgaW50OCB0aW1lU2xvdG1hc2ssIFBvd2VyIHBvd2VyTGV2WzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgQ29kaW5nU2NoZW1lIGNzWzRdLCBUaW1pbmdBZHZhbmNlIHRhLCBpbnQzMiBmcmFtZXMsIGludDE2IGRhY1ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0VncHJzLCBBUENUeFBhdHRlcm4gcGF0dGVybiwgdWludDE2IHBhdHRlcm5EYXRhICk7CisjZW5kaWYKKworI2lmIE1EX0RSVl9JU19UWF9HQUlOX1JGX0NBTElCUkFUSU9OX1NVUFBPUlQKK3ZvaWQgTDFUU1RfVHhHYWluUkZTZXR0aW5nKEFSRkNOICBhcmZjbiwgQlNJQyBic2ljLCBDb2RpbmdTY2hlbWUgY3MsIFRpbWluZ0FkdmFuY2UgdGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgZnJhbWVzLCBpbnQxNiBkYWNWYWx1ZSwgYm9vbCBpc0VncHJzLCBBUENUeFBhdHRlcm4gcGF0dGVybiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTYgcGF0dGVybkRhdGEsICB1aW50MTYgcGFHYWluLCB1aW50MTYgcGFWYmlhcywgdWludDE2IHJmR2FpbkluZGV4ICk7Cit1aW50OCBMMVRTVF9RdWVyeV9HcmZfTnVtYmVyKCB2b2lkICk7CitpbnQxNiogTDFUU1RfUXVlcnlfQmFzZWJhbmRfUG93ZXIoIHZvaWQgKTsKKyNlbmRpZgorCisvKiBGdW5jdGlvbnMgcHJvdmlkZWQgYnkgbDF0c3RfYWZjLmMgKi8KK3ZvaWQgTDFUU1RfU2V0QWZjRGFjVmFsdWUoIGludDE2IGRhY1ZhbHVlICk7Cit1aW50MTYgTDFUU1RfR2V0QWZjRGFjVmFsdWVBdFRSWE9mZnNldENhbGlicmF0aW9uKHZvaWQpOwordm9pZCBMMVRTVF9TZXRBRmNEYXRhKCBpbnQxNiBjYWxpYnJhdGVkX2RhY19kZWZhdWx0LCBpbnR4IGNhbGlicmF0ZWRfaW50X3Nsb3BlICk7Cit2b2lkIEwxVFNUX1NldERjeG9Qb3dlck1vZGUoa2FsX3VpbnQ4IG1vZGUpOworCisjaWYgTURfRFJWX0lTX0VQU0tfVFhfU1VQUE9SVAordm9pZCBMMVRTVF9SRl9TZXRSYW1wQXBjTGV2ZWxFUFNLKCBpbnQgcmZfYmFuZCwgaW50IHBvd2VyX2xldmVsLCBpbnQgYXBjX2RhYyApOworI2VuZGlmCisKK3R5cGVkZWYgdm9pZCAoKkNhbGlicmFIYW5kbGVyQ2FsbGJhY2spKGthbF9pbnQzMiB1NFJlc3VsdCk7Citib29sIEwxVFNUX0JlZ2luMzJLQ2FsaWJyYXRpb24oIENhbGlicmFIYW5kbGVyQ2FsbGJhY2sgY2IgKTsKK3ZvaWQgTDFUU1RfR2V0MzJLQ2FsaWJyYXRpb25SZXN1bHQoIGthbF91aW50MzIgZm1SZXN1bHQgKTsKKwordm9pZCBMMVRTVF9VcGRhdGVDYWxpYnJhdGlvbkRhdGEoIGthbF91aW50MzIgY2FsX2xpZCApOwordWludDE2IEwxVFNUX1F1ZXJ5X0wxRF9Nb2RlKCB2b2lkICk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvbDF0c3RfcHVibGljX2dlbjk3LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS9sMXRzdF9wdWJsaWNfZ2VuOTcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDhhNDUyCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvbDF0c3RfcHVibGljX2dlbjk3LmgKQEAgLTAsMCArMSw4NjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIE1vZGlmaWNhdGlvbiBOb3RpY2U6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBNZWRpYVRlayBJbmMuIGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDEKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBsMXRzdF9wdWJsaWMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNVEs2MjA4CisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgTDEgdGVzdCBtb2RlIHB1YmxpYyBpbnRlcmZhY2UKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibDFfdHlwZXNfcHVibGljLmgiCisjaW5jbHVkZSAibDFfb3B0aW9uLmgiCisjaW5jbHVkZSAibXBoX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJsMV9rYWwuaCIKKworI2lmIE1EX0RSVl9JU19OU0ZUX0xJU1RfTU9ERV9TVVBQT1JUCisjaW5jbHVkZSAibDF0c3RfbnNmdF9sbV9wdWJsaWMuaCIKKyNlbmRpZgorCisjaWZuZGVmIGwxdHN0X3B1YmxpY19oCisjZGVmaW5lIGwxdHN0X3B1YmxpY19oCisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfR1NNICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNU19DQVBBQklMSVRZX0dQUlMgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTVNfQ0FQQUJJTElUWV9FREdFX1JYICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfRURHRV84UFNLX1RYICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBNU19DQVBBQklMSVRZXzhQTSAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTVNfQ0FQQUJJTElUWV9GSEMgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfTEMgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBNU19DQVBBQklMSVRZX05TRlQgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgTVNfQ0FQQUJJTElUWV9UQ1ZDWE8gICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfVFhQQ19DTF9HTVNLICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBNU19DQVBBQklMSVRZX1RYUENfT0wgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgTVNfQ0FQQUJJTElUWV9UWFBDX0NMX1RFTVAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfVFhQQ19DTF9FUFNLICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBNU19DQVBBQklMSVRZX0xOQU1PREUgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgTVNfQ0FQQUJJTElUWV9UWFBDX0FVWF9URU1QX0FEQyAweDAwMDA0MDAwCisjZGVmaW5lIE1TX0NBUEFCSUxJVFlfVFhQQ19CU0lfVEVNUF9BREMgMHgwMDAwODAwMAorCisjZGVmaW5lIE1TX0JBTkRfU1VQUE9SVF9HU000MDAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNU19CQU5EX1NVUFBPUlRfR1NNODUwICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTVNfQkFORF9TVVBQT1JUX0dTTTkwMCAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1TX0JBTkRfU1VQUE9SVF9EQ1MxODAwICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBNU19CQU5EX1NVUFBPUlRfUENTMTkwMCAgICAgICAgIDB4MDAwMDAwMTAKKworI2RlZmluZSBDQUxfUlhfTE5BX01PREVfSElHSCAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBDQUxfUlhfTE5BX01PREVfTUlEICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBDQUxfUlhfTE5BX01PREVfTE9XICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBDQUxfUlhfTE5BX01PREVfU0VTTCAgICAgICAgICAgIDB4MDAwOCAgLy8gZm9yIHNpbmdsZS1lbmQgc2F3LWxlc3MKKyNkZWZpbmUgQ0FMX1JYX0xOQV9XX0NPRUYgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgQ0FMX1JYX0VMTkFfSElHSF9TRU5TSVRJVklUWSAgICAweDAwMjAgIC8vIGVsbmErRzYgZm9yIHNlbnNpdGl2aXR5CisjZGVmaW5lIENBTF9SWF9FTE5BX0JZUEFTU19MT1dfTUFYUElOICAgMHgwMDQwICAvLyBlbG5hIGJ5cGFzcytHMSBmb3IgTWF4IFBpbgorCisKKworI2RlZmluZSBDQUxfVFhQQ19PTCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBDQUxfVFhQQ19DTF9HTVNLICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBDQUxfVFhQQ19DTF9FUFNLICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBDQUxfVFhQQ19DTF9URU1QICAgICAgICAgICAgICAgIDB4MDAwOAorCisjZGVmaW5lIE5WUkFNX0dFVF9TRVRfUlhfUEFUSExPU1MgICAgICAgMHgwMDAxICAvL2ZvciBSRl9URVNUX0NNRF9HRVRfUlhfUEFUSF9MT1NTICYgUkZfVEVTVF9DTURfU0VUX1JYX1BBVEhfTE9TUyAgJiAgU0VUL0dFVCBQQVRITE9TUyBWMyBmb3IgOTMKKworCit0eXBlZGVmIGVudW0KK3sKKyAgIEFGQ18yX1NFQworICAsQUZDXzMzX1NFQworfSBBZmNDYWxUeXBlOworCit0eXBlZGVmIGVudW0KK3sKKyAgIEFGQ19EQUNfUkFOR0VfMTAyMworICAsQUZDX0RBQ19SQU5HRV84MTkxCit9IEFmY0NhbERhY1JhbmdlOworCit0eXBlZGVmIGVudW0KK3sKKyAgIEJhbmQ0MDAgID0gMHgwCisgICxCYW5kODUwICA9IDB4MQorICAsQmFuZDkwMCAgPSAweDIKKyAgLEJhbmQxODAwID0gMHg0CisgICxCYW5kMTkwMCA9IDB4OCAKK30gQmFuZEJpdE1hcDsKKwordHlwZWRlZiBlbnVtCit7CisgICBURU1QX1JBTkdFX00xMF82NQorICAsVEVNUF9SQU5HRV9NMTBfOTAKK30gVGVtcFJhbmdlVmVyc2lvbjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKy8vIGJvb2wgICAgICAgICAgICAgIG9rOworICAgdWludDMyICAgICAgICAgICAgY2FwYWJpbGl0eTsKKyAgIHVpbnQzMiAgICAgICAgICAgIGJhbmRfc3VwcG9ydDsKK30gTXNDYXBhYmlsaXR5RXg7CisKKy8vIE1TIENhcGFiaWxpdHkKK3R5cGVkZWYgIHN0cnVjdAoreworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9nc20gICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9ncHJzICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9lZGdlX3J4ICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9lcHNrX3R4ICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF84cG0gICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9maGMgICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgc3VwcG9ydF9uc2Z0ICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgYmFuZF9nc200MDAgICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgYmFuZF9nc204NTAgICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgYmFuZF9nc205MDAgICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgYmFuZF9kY3MxODAwICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgYmFuZF9wY3MxOTAwICAgICAgIDoxOworICAgdW5zaWduZWQgc2hvcnQgICAgcHNfZXBza190eF9kaXNhYmxlIDoxOyAgIC8qIFNldCBhcyBiaXQtMSB3aGVuIF9fRVBTS19UWF9TV19TV0lUQ0hfT0ZGX18gaXMgZGVmaW5lZC4gKi8KKyAgIHVuc2lnbmVkIHNob3J0ICAgIHJlc2VydmVkMCAgICAgICAgICA6MzsKK30gTXNDYXBhYmlsaXR5OworCisvLyBGYWN0b3J5IE1vZGUgQ2FsaWJyYXRpb24gSXRlbQordHlwZWRlZiAgc3RydWN0Cit7CisgICB1bnNpZ25lZCBzaG9ydCAgICBpc19jYXBhYmxlICAgICAgOjE7CisgICB1bnNpZ25lZCBzaG9ydCAgICBpc19tYW5kYXRvcnkgICAgOjE7CisgICB1bnNpZ25lZCBzaG9ydCAgICBwYXJhbWV0ZXJzICAgICAgOjE0OworfSBGYWNNb2RDYWxJdG07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBGYWNNb2RDYWxJdG0gICAgICBjYXBfaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAwCisgICBGYWNNb2RDYWxJdG0gICAgICBhZmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAxCisgICBGYWNNb2RDYWxJdG0gICAgICByeF9wYXRobG9zczsgICAgICAgICAgICAgICAgICAgICAgIC8vICAyCisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9wY2w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAzCisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9zdWJiYW5kOyAgICAgICAgICAgICAgICAgICAgICAgIC8vICA0CisgICBGYWNNb2RDYWxJdG0gICAgICB0cnhfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgIC8vICA1CisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9pcTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICA2CisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9mYl9kYWM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICA3CisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9zbG9wZV9za2V3OyAgICAgICAgICAgICAgICAgICAgIC8vICA4CisgICBGYWNNb2RDYWxJdG0gICAgICB3X2NvZWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICA5CisgICBGYWNNb2RDYWxJdG0gICAgICB0eHBjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEwCisgICBGYWNNb2RDYWxJdG0gICAgICB0ZW1wX2FkYzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDExCisgICBGYWNNb2RDYWxJdG0gICAgICByZW1vdmVfMzJrX3hvOyAgICAgICAgICAgICAgICAgICAgIC8vIDEyCisgICBGYWNNb2RDYWxJdG0gICAgICBjb19jcnlzdGFsOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEzCisgICBGYWNNb2RDYWxJdG0gICAgICBoaWdoX2xuYV9zcDsgICAgICAgICAgICAgICAgICAgICAgIC8vIDE0CisgICBGYWNNb2RDYWxJdG0gICAgICBtaWRfbG5hX3NwOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE1CisgICBGYWNNb2RDYWxJdG0gICAgICBsb3dfbG5hX3NwOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE2CisgICBGYWNNb2RDYWxJdG0gICAgICBiYXRfdGVtcF9jb21wOyAgICAgICAgICAgICAgICAgICAgIC8vIDE3CisgICBGYWNNb2RDYWxJdG0gICAgICBkdHNfZ2Fpbl9jbWI7ICAgICAgICAgICAgICAgICAgICAgIC8vIDE4CisgICBGYWNNb2RDYWxJdG0gICAgICB1dHNfYmFuZF9jbWI7ICAgICAgICAgICAgICAgICAgICAgIC8vIDE5CisgICBGYWNNb2RDYWxJdG0gICAgICBjb190ZW1wX2FkYzsgICAgICAgICAgICAgICAgICAgICAgIC8vIDIwCisgICBGYWNNb2RDYWxJdG0gICAgICBhZGp1c3RhYmxlX2xuYV9tb2RlX3BhdGhsb3NzOyAgICAgIC8vIDIxCisgICBGYWNNb2RDYWxJdG0gICAgICBnYWluX3JmX2NhbDsgICAgICAgICAgICAgICAgICAgICAgIC8vIDIyCisgICBGYWNNb2RDYWxJdG0gICAgICBieXBhc3NfY2hlY2tfZml4YWZjX252cmFtOyAgICAgICAgIC8vIDIzCisgICBGYWNNb2RDYWxJdG0gICAgICBtdWx0aV9yYXRfdGFkY19iaXRtYXA7ICAgICAgICAgICAgIC8vIDI0CisgICBGYWNNb2RDYWxJdG0gICAgICBtdWx0aV9yYXRfYWZjX2JpdG1hcDsgICAgICAgICAgICAgIC8vIDI1CisgICBGYWNNb2RDYWxJdG0gICAgICBhZGp1c3RhYmxlX2xuYV9tb2RlX3BhdGhsb3NzX3YyOyAgIC8vIDI2CisgICBGYWNNb2RDYWxJdG0gICAgICB0ZW1wZXJhdHVyZV9pbmZvOyAgICAgICAgICAgICAgICAgIC8vIDI3CisgICBGYWNNb2RDYWxJdG0gICAgICBkdF9jb2V4aXN0ZW5jZV9pbmZvOyAgICAgICAgICAgICAgIC8vIDI4CisgICBGYWNNb2RDYWxJdG0gICAgICB0aGVybWFsX3NlbnNvcl90eXBlOyAgICAgICAgICAgICAgIC8vIDI5CisgICBGYWNNb2RDYWxJdG0gICAgICBuc2Z0X2xpc3Rtb2RlOyAgICAgICAgICAgICAgICAgICAgIC8vIDMwCisgICBGYWNNb2RDYWxJdG0gICAgICB3b3JsZG1vZGVfaWRfaW5mbzsgICAgICAgICAgICAgICAgIC8vIDMxCisgICBGYWNNb2RDYWxJdG0gICAgICBjcnlzdGFsX29uX3BtaWNfZW5hYmxlOyAgICAgICAgICAgIC8vIDMyCisgICBGYWNNb2RDYWxJdG0gICAgICBsb3dfcGNsX3N1YmJhbmRfY2FsOyAgICAgICAgICAgICAgIC8vIDMzCisgICBGYWNNb2RDYWxJdG0gICAgICBmaGNfZHRzX2V4dHJhX2ZiX2VuYWJsZTsgICAgICAgICAgIC8vIDM0CisgICBGYWNNb2RDYWxJdG0gICAgICBzYXdsZXNzX2xuYV9zcDsgICAgICAgICAgICAgICAgICAgIC8vIDM1CisgICBGYWNNb2RDYWxJdG0gICAgICBudnJhbV9hY2Nlc3NfaW50ZXJmYWNlOyAgICAgICAgICAgIC8vIDM2CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX3N1cHBvcnRfYmFuZF9iaXRtYXA7ICAgICAgICAgIC8vIDM3CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2hpZ2hfc3A7ICAgICAgICAgICAgICAgICAgICAgIC8vIDM4CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX21pZF9zcDsgICAgICAgICAgICAgICAgICAgICAgIC8vIDM5CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2xvd19zcDsgICAgICAgICAgICAgICAgICAgICAgIC8vIDQwCisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX3dfY29lZl9zcDsgICAgICAgICAgICAgICAgICAgIC8vIDQxCisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX21pZF9zYXdsZXNzX3NwOyAgICAgICAgICAgICAgIC8vIDQyCisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2hpZ2hfc2Vuc2l0aXZpdHlfc3A7ICAgICAgICAgIC8vIDQzCisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2J5cGFzc19sb3dfbWF4cGluX3NwOyAgICAgICAgIC8vIDQ0CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2J5cGFzc19nYWluX3RocmVzaG9sZDsgICAgICAgIC8vIDQ1CisgICBGYWNNb2RDYWxJdG0gICAgICBlbG5hX2J5cGFzc19zdXBwb3J0X2JhbmRfYml0bWFwOyAgIC8vIDQ2CisgICBGYWNNb2RDYWxJdG0gICAgICBzaW53YXZlX2FmY19nZXRfdGVtcF9mcmVxOyAgICAgICAgIC8vIDQ3CisgICBGYWNNb2RDYWxJdG0gICAgICB3Y29lZl9zZXRnZXRfY21kX3N1cHBvcnQ7ICAgICAgICAgIC8vIDQ4CisgICBGYWNNb2RDYWxJdG0gICAgICB0eF9zZXRnZXRfY21kX3N1cHBvcnQ7ICAgICAgICAgICAgIC8vIDQ5CisgICBGYWNNb2RDYWxJdG0gICAgICBuc2Z0X2FkanVzdF90cG9fc3VwcG9ydDsgICAgICAgICAgIC8vIDUwCisgICBGYWNNb2RDYWxJdG0gICAgICByeGRfdjVfY21kX3N1cHBvcnQ7ICAgICAgICAgICAgICAgIC8vIDUxCisgICBGYWNNb2RDYWxJdG0gICAgICByeGRfc3VwcG9ydF9iYW5kX2JpdG1hcDsgICAgICAgICAgIC8vIDUyCisgICBGYWNNb2RDYWxJdG0gICAgICBtbG5hX3R5cGVfdjc7ICAgICAgICAgICAgICAgICAgICAgIC8vIDUzCisgICBGYWNNb2RDYWxJdG0gICAgICByeGxldl9wcmVjaXNpb25fZXh0ZW5kOyAgICAgICAgICAgIC8vIDU0CisgICBGYWNNb2RDYWxJdG0gICAgICB0ZWxlbWF0aWNzX3ZvbHRfdGVtcF9lbmhhbmNlOyAgICAgIC8vIDU1Cit9IEZhY01vZENhbDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIHVpbnQxNiAgICAgICAgICAgIGNhcF9pdG1fb2Zmc2V0OworICAgdWludDE2ICAgICAgICAgICAgZm1jX2l0bV9vZmZzZXQ7CisgICBNc0NhcGFiaWxpdHkgICAgICBjYXBfaXRtOworICAgRmFjTW9kQ2FsICAgICAgICAgZm1jX2l0bTsKK30gTXNDYXBhYmlsaXR5RXhWMjsKKworI2lmIE1EX0RSVl9JU19GSENfU1VQUE9SVAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIEZyZXF1ZW5jeUJhbmQgICAgIGJhbmQ7CisgICBBUkZDTiAgICAgICAgICAgICBhcmZjbjsKKyAgICNpZiBJU19BRkNfQ0FQQUJJTElUWV9FTkhBTkNFTUVOVF9TVVBQT1JUCisgICB1aW50MTYgICAgICAgICAgICBkYWNfdmFsdWVbMzNdOyAvL01vZGlmeSBmcm9tIGludDE2IHRvIHVpbnQxNgorICAgI2Vsc2UKKyAgIGludDE2ICAgICAgICAgICAgIGRhY192YWx1ZVszM107CisgICAjZW5kaWYKKyAgIEdhaW4gICAgICAgICAgICAgIGdhaW47CisgICBpbnQxNiAgICAgICAgICAgICByZXBlYXRfY250OyAvLyByZXBldGl0aXZlIHRlc3QgY291bnRzIChmcmFtZXMpIGZvciBlYWNoIEFGQyBEQUMgdmFsdWUKKyAgIGJvb2wgICAgICAgICAgICAgIGNhcGlkX2NhbDsgIC8vIGNhcGlkIGNhbGlicmF0aW9uIGN0cmwKKyAgIGJvb2wgICAgICAgICAgICAgIGxpbmVhcl9jYWw7IC8vIDMzIHN0YWdlcyBjYWxpYnJhdGlvbiBjdHJsCisgICBpbnQzMiAgICAgICAgICAgICBjYXBpZF9taW47ICAvLyBtaW4gdmFsdWUgZm9yIGNhcGlkIHJhbmdlCisgICBpbnQzMiAgICAgICAgICAgICBjYXBpZF9tYXg7ICAvLyBtYXggdmFsdWUgZm9yIGNhcGlkIHJhbmdlCit9IERTU0FmYzsgCisKK3R5cGVkZWYgZW51bQoreworICAgR1NNX0xOQV9OVUxMLCAgLy9Gb3Igb2xkIENNRCwgdG9vbCB3aWxsIG5vdCBzZXQgZ3NtX2xuYV9tb2RlCisgICBHU01fTE5BX0hJR0gsCisgICBHU01fTE5BX01JRCwKKyAgIEdTTV9MTkFfTE9XLAorICAgR1NNX0xOQV9XX0NPRUYsCisgICBHU01fTE5BX1NBV0xFU1NfTUlELAorICAgR1NNX0VMTkFfSElHSF9TRU5TSVRJVklUWSwgIC8vRm9yIFNlbnNpdGl2aXR5LCBlbG5hK0c2CisgICBHU01fRUxOQV9CWVBBU1NfTE9XX01BWFBJTiAgLy9Gb3IgTWF4IFBpbiwgZWxuYSBieXBhc3MrRzEKK31MTkFfQ2FsX1R5cGU7CisKKy8qR2VuIDk1IFJYRCovCit0eXBlZGVmIGVudW0KK3sKKyAgIEdTTV9SWF9DQUxfU0VRX1Y1X05VTEwgPSAwLAorICAgR1NNX1JYX0NBTF9TRVFfVjVfVVRSQV9ISUdIID0gMSwKKyAgIEdTTV9SWF9DQUxfU0VRX1Y1X0hJR0ggPSAyLAorICAgR1NNX1JYX0NBTF9TRVFfVjVfTUlEID0gMywKKyAgIEdTTV9SWF9DQUxfU0VRX1Y1X01JRF9TQVdMRVNTID0gNCwKKyAgIEdTTV9SWF9DQUxfU0VRX1Y1X0xPVyA9IDUsCisgICBHU01fUlhfQ0FMX1NFUV9WNV9CWVBBU1NfTE9XID0gNiwKKyAgIEdTTV9SWF9DQUxfU0VRX1Y1X1dDT0VGID0gNworfSBMTkFDYWxTZXFWNV9FOyAgIC8vTE5BX0NhbF9UeXBlICBHZW45NSAgIC8vTXVzdCB0aGUgc2FtZSBhcyBSZlRlc3RSeENhbFNlcVY1X0UKKworI2lmIGRlZmluZWQoX18yR19SWF9ESVZFUlNJVFlfUEFUSF9TVVBQT1JUX18pCit0eXBlZGVmIHN0cnVjdAoreworICAgRnJlcXVlbmN5QmFuZCAgICAgYmFuZDsKKyAgIEFSRkNOICAgICAgICAgICAgICAgICAgICBhcmZjbjsKKyAgICAgLy9HYWluICAgICAgICAgICAgICAgICAgICAgICAgZ2Fpbls2XTsgCisgICBrYWxfaW50MTYgICAgICAgICAgICAgICAgIHJlcGVhdF9jbnQ7IAorICAga2FsX2ludDE2ICAgICAgICAgICAgZGxfY2VsbF9wb3dlcjsgIC8vaXQgaXMgREwgUG93ZXIgZm9yIGVhY2ggZnJhbWUgICAvLyAxLzhkQm0KKyAgIExOQUNhbFNlcVY1X0UgICAgICAgZ3NtX2xuYV9tb2RlIFtHU01fUkZfTUFYX1JYX0FOVF9OVU1dOworfSBEU1NQTDsgICAgLy9EU1NQTF9NdWx0aUFudDsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdAoreworICAgRnJlcXVlbmN5QmFuZCAgICAgYmFuZDsKKyAgIEFSRkNOICAgICAgICAgICAgIGFyZmNuOworICAgR2FpbiAgICAgICAgICAgICAgZ2Fpbls2XTsgICAgICAgLy8gZ2FpbiBmb3Igcnggc2xvdCAwLzEvMi8zLzQvNQorICAgaW50MTYgICAgICAgICAgICAgcmVwZWF0X2NudDsgICAgLy8gcmVwZXRpdGl2ZSB0ZXN0IGNvdW50cyAoZnJhbWVzKSBmb3IgZWFjaCBBUkZDTiB2YWx1ZQorICAgTE5BX0NhbF9UeXBlICAgICAgZ3NtX2xuYV9tb2RlOyAgLy8wKE51bGwpIDEoaGlnaCkgMihtaWQpIDMobG93KSA0KHctY29lZikgNShzYXdsZXNzIG1pZCkgNihlbG5hK0c2KSA3KGVsbmEgYnlwYXNzK0cxKQorfSBEU1NQTDsgCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGJvb2wgICAgICAgICAgICAgIGFmY19jYWw7CisgICBib29sICAgICAgICAgICAgICBwbF9jYWw7CisgICBpbnQ4ICAgICAgICAgICAgICBzeW5jX3NiX251bTsgIC8vIHRoZSBTQiBmcmFtZSBudW1iZXJzIG5lZWRlZCBmb3Igc3luYyBwcm9jZXNzIGJlZm9yZSBwYXRoIGxvc3MgY2FsaWJyYXRpb24KKyAgIHVpbnQxNiAgICAgICAgICAgIHN0ZXBfY250OyAgICAgLy9pbnQ4IC0+IHVpbnQxNiB0byBtYXRjaCBzaXplIDUxMgorICAgaW50MTYgICAgICAgICAgICAgcG93ZXI7ICAgICAgICAvLyB0aGUgcG93ZXIgbGV2ZWwgZXhwZWN0ZWQgdG8gbWVhc3VyZSBmcm9tIHRlc3Qgc2V0CisgICBEU1NBZmMgICAgICAgICAgICBBZmNEU1M7CisgICBEU1NQTCAgICAgICAgICAgICBQYXRoTG9zc0RTU1tMMV9NQVhfRFRTX1NURVBfQ05ULTJdOworICAgaW50MTYgICAgICAgICAgICAgbHBtX3NiX251bTsgICAvLyB0aGUgU0IgZnJhbWUgbnVtYmVycyBmb3IgRENYTyBMUE0gY2FsaWJyYXRpb24KKyNpZiBkZWZpbmVkKF9fMkdfUlhfRElWRVJTSVRZX1BBVEhfU1VQUE9SVF9fKQorICAgdWludDggICAgICAgICAgICAgQW50ZW5uYTsgICAvLyBHU01fQW50RGltZW5zaW9uCisjZW5kaWYKK30gRFRTUGFyYW07CisvKgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIEFmY1BhcmFtcyAgICAgICAgKmFmY19wYXJhbXM7CisgICBSZXBvcnQgICAgICAgICAgICpyZXBvcnQ7Cit9IERUU01QYXJhbXM7CisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKy8vIERUU01QYXJhbXMgICAgICAgIHBhcmFtczsKKyAgIGludHggICAgICAgICAgICAgIHBhdGhfbG9zc19jbnQ7CisgICBpbnR4ICAgICAgICAgICAgICBmcmVxX29mZnNldDsKKyAgIGludHggICAgICAgICAgICAgIGNhcGlkX2ZyZXFfb2Zmc2V0X21pbjsKKyAgIGludHggICAgICAgICAgICAgIGNhcGlkX2ZyZXFfb2Zmc2V0W0ZIQ19NQVhfQ0FQSURfU0VBUkNIX05VTV07CisgICBpbnQzMiAgICAgICAgICAgICBjYXBpZF9zZWFyY2hfb3JkZXJbRkhDX01BWF9DQVBJRF9TRUFSQ0hfTlVNXTsKKyAgIGludDMyICAgICAgICAgICAgIGNhcGlkOworICAgaW50MzIgICAgICAgICAgICAgY2FwaWRfaGlnaDsKKyAgIGludDMyICAgICAgICAgICAgIGNhcGlkX2xvdzsgICAKKyAgIGludDMyICAgICAgICAgICAgIGNhcGlkX2Jlc3Q7CisgICAjaWYgSVNfQUZDX0NBUEFCSUxJVFlfRU5IQU5DRU1FTlRfU1VQUE9SVAorICAgdWludDE2ICAgICAgICAgICAgYWZjX2RhYzsgLy9Nb2RpZnkgZnJvbSBpbnQxNiB0byB1aW50MTYKKyAgICNlbHNlCisgICBpbnQxNiAgICAgICAgICAgICBhZmNfZGFjOworICAgI2VuZGlmCisgICBpbnQxNiAgICAgICAgICAgICBhcmZjbjsKKyAgIGludDE2ICAgICAgICAgICAgIGNhcGlkX2NudDsKKyAgIGludDE2ICAgICAgICAgICAgIHJlcGVhdF9pbmRleDsKKyAgIGludDggICAgICAgICAgICAgIHN0YXRlOworICAgaW50OCAgICAgICAgICAgICAgY2FwaWRfaW5kZXg7CisgICBpbnQ4ICAgICAgICAgICAgICBjYXBpZF9va2F5X2NudDsKKyAgIGludDggICAgICAgICAgICAgIGFmY19kYWNfaW5kZXg7CisgICBpbnQ4ICAgICAgICAgICAgICBzYl9va2F5X2NudDsKKyAgIHVpbnQ4ICAgICAgICAgICAgIHNiX2ZhaWxfY250OworICAgdWludDggICAgICAgICAgICAgZmJfZmFpbF9jbnQ7CisgICBib29sICAgICAgICAgICAgICBwbF9zdGFydGVkOworICAgYm9vbCAgICAgICAgICAgICAgcnN0X2R0c19pZHhfYXRfcGxfY2FsX3N0YXJ0ZWQ7CisgICBib29sICAgICAgICAgICAgICBwcmVfY2FwaWRfY2FsX29rW0ZIQ19QUkVfQ0FQSURfU0VBUkNIX05VTV07Cit9IHNEVFNNOworCit0eXBlZGVmIHN0cnVjdAoreworICAgRnJlcXVlbmN5QmFuZCAgICAgYmFuZDsKKyAgIEFSRkNOICAgICAgICAgICAgIGFyZmNuOworICAgaW50OCAgICAgICAgICAgICAgdGltZXNsb3RfcGVyX2ZyYW1lOworICAgaW50OCAgICAgICAgICAgICAgYXBjX2RhY19wY2xfc2VsOyAgICAgIC8vIDI6IGdhaW4gc3RlcCBpbmRleCwgMTogYXBjX2RhYywgMDogYXBjX3BjbAorICAgaW50MTYgICAgICAgICAgICAgYXBjX2RhY19wY2xfdmFsdWVbNF07CisvLyB1aW50OCAgICAgICAgICAgICBwYV92Ymlhc192YWw7CisgICB1aW50OCAgICAgICAgICAgICBwYV92Ymlhc192YWxbNF07CisgICB1aW50OCAgICAgICAgICAgICBpc19sb3dfcGNsWzRdOworICAgQ29kaW5nU2NoZW1lICAgICAgY3NbNF07CisgICBpbnQzMiAgICAgICAgICAgICByZXBlYXRfY250OworICAgI2lmIElTX0FGQ19DQVBBQklMSVRZX0VOSEFOQ0VNRU5UX1NVUFBPUlQKKyAgIHVpbnQxNiAgICAgICAgICAgIGFmY19kYWNfdmFsdWU7CisgICAjZWxzZQorICAgaW50MTYgICAgICAgICAgICAgYWZjX2RhY192YWx1ZTsKKyAgICNlbmRpZgorICAgaW50OCAgICAgICAgICAgICAgdHNjOworICAgQVBDVHhQYXR0ZXJuICAgICAgcGF0dGVybjsKKyAgIHVpbnQxNiAgICAgICAgICAgIHBhdHRlcm5fZGF0YTsKK30gVVNTQXBjOworCit0eXBlZGVmIHN0cnVjdAoreworICAgdWludDE2ICAgICAgICAgICAgc3RlcF9jbnQ7ICAvL2ludDggLT4gdWludDE2IHRvIG1hdGNoIHNpemUgNTEyCisgICBpbnQxNiAgICAgICAgICAgICBoaWdoX2FwY19kY29mZnNldFtGcmVxdWVuY3lCYW5kQ291bnRdOworICAgVVNTQXBjICAgICAgICAgICAgQXBjVVNTW0wxX01BWF9VVFNfU1RFUF9DTlRdOyAgIAorfSBVVFNQYXJhbTsKKyNlbmRpZgorLyogRnVuY3Rpb25zIHByb3ZpZGVkIGJ5IGwxdHN0X2NmZy5jICovCit2b2lkIEwxVFNUX0luaXQodm9pZCk7Cit2b2lkIEwxVFNUX1N0b3Aodm9pZCk7Cit2b2lkIEwxVFNUX1NlbGVjdEZyZXF1ZW5jeUJhbmQxOTAwKCBib29sIHNlbGVjdGVkICk7Cit2b2lkIEwxVFNUX1NldEJCVFhDZmcoIGNvbnN0IHNCQlRYQ2ZnICpwYXJhbSApOwordm9pZCBMMVRTVF9HZXRCQlRYQ2ZnKCBzQkJUWENmZyAqcGFyYW0gKTsKK2ludHggTDFUU1RfR2V0QkJUWFZlcih2b2lkKTsKK2ludCAgTDFUU1RfR2V0Q3J5c3RhbENhcFJhbmdlKHZvaWQpOwordWludDMyIEwxVFNUX0dldEJhbmRTdXBwb3J0KHZvaWQpOwordWludDE2IEwxVFNUX0dldF9FUFNLX1RYX1N1cHBvcnQodm9pZCk7Cit1aW50MTYgTDFUU1RfR2V0X1RDVkNYT19TdXBwb3J0KHZvaWQpOwordm9pZCBHTDFUU1RfRGlzcGF0Y2hNZXNzYWdlKGlsbV9zdHJ1Y3QgKmlsbV9wdHIpOwordm9pZCBMMVRTVF9SRl9TZXRSYW1wQXBjTGV2ZWwoIGludCByZl9iYW5kLCBpbnQgcG93ZXJfbGV2ZWwsIGludCBhcGNfZGFjICk7Citib29sIEwxVFNUX0NoZWNrQXZhaWxhYmxlQmFuZHMoIEZyZXF1ZW5jeUJhbmQgYmFuZCApOworYm9vbCBMMVRTVF9DaGVja0F2YWlsYWJsZUFSRkNOcyggQVJGQ04gYXJmY24gKTsKKyNpZiBkZWZpbmVkKF9fQVRFUkZUWF9FUlJPUl9IQU5ETEVfRU5IQU5DRV9fKQorYm9vbCBMMVRTVF9DaGVja0JhbmRBUkZDTmlzTWF0Y2goIHVpbnQ4IGJhbmQsIEFSRkNOIGFyZmNuICk7CisjZW5kaWYgIC8vX19BVEVSRlRYX0VSUk9SX0hBTkRMRV9FTkhBTkNFX18KK3ZvaWQgTDFUU1RfTXNDYXBhYmlsaXR5KCBNc0NhcGFiaWxpdHlFeCAqbXNDYXBhYmlsaXR5RXggKTsKK3ZvaWQgTDFUU1RfTXNDYXBhYmlsaXR5VjIoIE1zQ2FwYWJpbGl0eUV4VjIgKm1zX2NhcCApOwordm9pZCBMMVRTVF9UWFBDX0NMX0dldEFsbEFEQyggdm9pZCAqYnVmZiwgaW50OCBpc19FUFNLICk7Cit2b2lkIEwxVFNUX1RYUENfQ0xfR2V0QWxsVEVNUCggdm9pZCAqYnVmZiwgaW50OCBpc19FUFNLICk7Cit2b2lkIEwxVFNUX1RYUENfQ0xfR2V0U3ViYmFuZCggaW50IHJmX2JhbmQsIHZvaWQgKmJ1ZmYsIGludDggaXNfRVBTSyApOwordWludDE2IEwxVFNUX1RYUENfQ0xfR2V0T25lQURDKCBpbnQgcmZfYmFuZCwgaW50IHBvd2VyX2xldmVsLCBpbnQ4IGlzX0VQU0sgKTsKK3VpbnQxNiBMMVRTVF9UWFBDX0dldFRlbXBlcmF0dXJlKCB2b2lkICk7CisjaWYgTURfRFJWX0lTX0ZIQ19TVVBQT1JUCit2b2lkIEwxVFNUX1N0YXJ0RFRTQ2FsKCBEVFNQYXJhbSAqZHRzRGF0YSApOwordm9pZCBMMVRTVF9TdGFydFVUU0NhbCggVVRTUGFyYW0gKnV0c0RhdGEgKTsKK3NEVFNNKiBMMVRTVF9GSENMb2codm9pZCk7CisjZW5kaWYKKworI2lmIE1EX0RSVl9JU19OU0ZUX1NVUFBPUlQKKyAgICNpZiBkZWZpbmVkKF9fMkdfUlhfRElWRVJTSVRZX1BBVEhfU1VQUE9SVF9fKQorICAgdm9pZCBMMVRTVF9TdGFydE5TRlRQcm9jKCBGcmVxdWVuY3lCYW5kIGJhbmQsIEFSRkNOIEJDaF9hcmZjbiwgQVJGQ04gVENoX2FyZmNuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3dlciBCQ2hfZGxfcG93ZXIsIFBvd2VyIFRDaF9kbF9wb3dlciwgVFNDIHRzYywgVGltZVNsb3QgVENoX3Nsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyIHR4UG93ZXJMZXYsIGJvb2wgSVNfRVBTS19UWCwgQ29kaW5nU2NoZW1lIGVwc2tfY3MgKTsKKyAgIHZvaWQgTDFUU1RfTlNGVFByb2NfQ2hhbmdlQ2hhbm5lbCggRnJlcXVlbmN5QmFuZCBiYW5kLCBBUkZDTiBCQ2hfYXJmY24sIEFSRkNOIFRDaF9hcmZjbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG93ZXIgQkNoX2RsX3Bvd2VyLCBQb3dlciBUQ2hfZGxfcG93ZXIsIFRTQyB0c2MsIFRpbWVTbG90IFRDaF9zbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3dlciB0eFBvd2VyTGV2LCBib29sIElTX0VQU0tfVFgsIENvZGluZ1NjaGVtZSBlcHNrX2NzICk7CisgICAjZWxzZQorICAgdm9pZCBMMVRTVF9TdGFydE5TRlRQcm9jKCBGcmVxdWVuY3lCYW5kIGJhbmQsIEFSRkNOIEJDaF9hcmZjbiwgQVJGQ04gVENoX2FyZmNuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FpbiBCQ2hfZ2FpbiwgR2FpbiBUQ2hfZ2FpbiwgVFNDIHRzYywgVGltZVNsb3QgVENoX3Nsb3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3dlciB0eFBvd2VyTGV2LCBib29sIElTX0VQU0tfVFgsIENvZGluZ1NjaGVtZSBlcHNrX2NzKTsKKyAgIHZvaWQgTDFUU1RfTlNGVFByb2NfQ2hhbmdlQ2hhbm5lbCAoIEZyZXF1ZW5jeUJhbmQgYmFuZCwgQVJGQ04gQkNoX2FyZmNuLCBBUkZDTiBUQ2hfYXJmY24sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FpbiBCQ2hfZ2FpbiwgR2FpbiBUQ2hfZ2FpbiwgVFNDIHRzYywgVGltZVNsb3QgVENoX3Nsb3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG93ZXIgdHhQb3dlckxldiwgYm9vbCBJU19FUFNLX1RYLCBDb2RpbmdTY2hlbWUgZXBza19jcyk7CisgICAjZW5kaWYgLy8jaWYgZGVmaW5lZChfXzJHX1JYX0RJVkVSU0lUWV9QQVRIX1NVUFBPUlRfXykgCit2b2lkIEwxVFNUX05TRlRQcm9jX0NoYW5nZVBvd2VyKCBQb3dlciB0eFBvd2VyTGV2KTsKK3ZvaWQgTDFUU1RfU3RvcE5TRlRQcm9jKCB2b2lkICk7Cit2b2lkIEwxVFNUX1N0b3BOU0ZUX1JlY292ZXJUb01ldGFTdGF0ZSggdm9pZCApOwordm9pZCBMMVRTVF9TZXR1cFNpbmdsZUVuZEJFUkRhdGEoIHVpbnQzMiB0c3RfY250ICk7Cit2b2lkIEwxVFNUX1JlcG9ydFNpbmdsZUVuZEJFUkRvbmUoIHVpbnQzMiogc2VCRVJfU1VNLCB1aW50MzIqIGN1cnJfY250ICk7Cit2b2lkIEwxVFNUX1NldHVwUlhMRVZEYXRhKCB2b2lkICk7CisgICAjaWYgZGVmaW5lZChfXzJHX1JYX0RJVkVSU0lUWV9QQVRIX1NVUFBPUlRfXykKKyAgIHZvaWQgTDFUU1RfUmVwb3J0UlhMRVYoIHVpbnQxNiBSWExFVltdICk7CisgICAjZWxzZQorICAgdm9pZCBMMVRTVF9SZXBvcnRSWExFViggdWludDE2ICpSWExFViApOworICAgI2VuZGlmCit2b2lkIEwxVFNUX1JlcG9ydFJYUXVhbCggdWludDE2IEJFUl9QRVJNSUxMQUdFLCB1aW50OCAqUlhRdWFsICk7CisjZW5kaWYgLy8jaWYgTURfRFJWX0lTX05TRlRfU1VQUE9SVAorCisvKiBGdW5jdGlvbnMgcHJvdmlkZWQgYnkgbDF0c3RfcG0uYyAqLworI2lmIGRlZmluZWQoX18yR19SWF9ESVZFUlNJVFlfUEFUSF9TVVBQT1JUX18pCit2b2lkIEwxVFNUX1Bvd2VyU2NhbiggQVJGQ04gIGFyZmNuLCBpbnQ4IHNhbXBsZU5vUGVyRnJhbWUsIEdhaW4gZ2FpbiwgR2FpbiBnYWluX3J4ZCwgaW50MTYgZnJhbWVzLCBGcmVxdWVuY3lCYW5kIGJhbmQgKTsKKyNlbHNlCit2b2lkIEwxVFNUX1Bvd2VyU2NhbihBUkZDTiBhcmZjbiwgaW50OCBzYW1wbGVOb1BlckZyYW1lLCBHYWluIGdhaW4sIGludDE2IGZyYW1lcyk7CisjZW5kaWYKKworI2lmIE1EX0RSVl9JU19XX0NBTkNFTExBVElPTl9TVVBQT1JUCisgICAjaWYgZGVmaW5lZChfXzJHX1JYX0RJVkVSU0lUWV9QQVRIX1NVUFBPUlRfXykKKyAgIHZvaWQgTDFUU1RfSVJfUG93ZXJTY2FuKCBBUkZDTiAgYXJmY24sIGludDggc2FtcGxlTm9QZXJGcmFtZSwgR2FpbiBnYWluLCBHYWluIGdhaW5fcnhkLCBpbnQxNiBmcmFtZXMsIGludDggaWZfZmxhZywgRnJlcXVlbmN5QmFuZCBiYW5kICk7CisgICAjZWxzZQorICAgdm9pZCBMMVRTVF9JUl9Qb3dlclNjYW4oIEFSRkNOICBhcmZjbiwgaW50OCBzYW1wbGVOb1BlckZyYW1lLCBHYWluIGdhaW4sIGludDE2IGZyYW1lcywgaW50OCBpZl9mbGFnICk7CisgICAjZW5kaWYKKyNlbmRpZgorCisvKiBGdW5jdGlvbnMgcHJvdmlkZWQgYnkgbDF0c3RfZmNiLmMgKi8KKyNpZiBJU19BRkNfQ0FQQUJJTElUWV9FTkhBTkNFTUVOVF9TVVBQT1JUCit2b2lkIEwxVFNUX0ZDQkNvbnRyb2woQVJGQ04gYXJmY24sIHVpbnQxNiBkYWNWYWx1ZSwgR2FpbiBnYWluKTsKKyNlbHNlCit2b2lkIEwxVFNUX0ZDQkNvbnRyb2woQVJGQ04gYXJmY24sIGludDE2IGRhY1ZhbHVlLCBHYWluIGdhaW4pOworI2VuZGlmCitpbnR4IEwxVFNUX0ZDQkdldEZyZXFPZmZzZXQodm9pZCk7CisKKy8qIEZ1bmN0aW9ucyBwcm92aWRlZCBieSBsMXRzdF9uYnR4LmMgKi8KKyNpZiBJU19BRkNfQ0FQQUJJTElUWV9FTkhBTkNFTUVOVF9TVVBQT1JUCit2b2lkIEwxVFNUX05vcm1hbEJ1cnN0VHgoQVJGQ04gIGFyZmNuLCBCU0lDIGJzaWMsIGludDggYml0bWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICBQb3dlciB0eFBvd2VyTGV2LCBpbnQxNiBmcmFtZXMsIHVpbnQxNiBkYWNWYWx1ZSwgQVBDVHhQYXR0ZXJuIHBhdHRlcm4pOworI2Vsc2UKK3ZvaWQgTDFUU1RfTm9ybWFsQnVyc3RUeChBUkZDTiAgYXJmY24sIEJTSUMgYnNpYywgaW50OCBiaXRtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyIHR4UG93ZXJMZXYsIGludDE2IGZyYW1lcywgaW50MTYgZGFjVmFsdWUsIEFQQ1R4UGF0dGVybiBwYXR0ZXJuKTsKKyNlbmRpZgorCisvKiBGdW5jdGlvbnMgcHJvdmlkZWQgYnkgbDF0c3RfY29udC5jICovCit2b2lkIEwxVFNUX0NvbnRpbnVvdXNUeChBUkZDTiBhcmZjbiwgQ29udFR4UGF0dGVybiBwYXR0ZXJuLHVpbnQxNiBwYXR0ZXJuRGF0YSwgYm9vbCBvbk9mZiwgdWludDE2IG1vZHR5cGUsIFBvd2VyIFBvd2VyTGV2KTsKKyNpZiBkZWZpbmVkKF9fMkdfUlhfRElWRVJTSVRZX1BBVEhfU1VQUE9SVF9fKQordm9pZCBMMVRTVF9Db250aW51b3VzUngoIEZyZXF1ZW5jeUJhbmQgYmFuZCwgQVJGQ04gYXJmY24sIEdhaW4gZ2FpbiwgR2FpbiBnYWluX3J4ZCwgYm9vbCBvbk9mZiApOworI2Vsc2UKK3ZvaWQgTDFUU1RfQ29udGludW91c1J4KEFSRkNOIGFyZmNuLCBHYWluIGdhaW4sIGJvb2wgb25PZmYpOworI2VuZGlmCisKKy8qIEZ1bmN0aW9ucyBwcm92aWRlZCBieSBsMXRzdF9wZHRjaC5jICovCisjaWYgKE1EX0RSVl9JU19HUFJTIHx8IE1EX0RSVl9JU19NVUxUSVNMT1RfVFhfU1VQUE9SVCkKKyAgICNpZiBJU19BRkNfQ0FQQUJJTElUWV9FTkhBTkNFTUVOVF9TVVBQT1JUCit2b2lkIEwxVFNUX011bHRpU2xvdFR4KCBBUkZDTiAgYXJmY24sIEJTSUMgYnNpYywgaW50OCB0aW1lU2xvdG1hc2ssIFBvd2VyIHBvd2VyTGV2WzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgQ29kaW5nU2NoZW1lIGNzWzRdLCBUaW1pbmdBZHZhbmNlIHRhLCBpbnQzMiBmcmFtZXMsIHVpbnQxNiBkYWNWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNFZ3BycywgQVBDVHhQYXR0ZXJuIHBhdHRlcm4sIHVpbnQxNiBwYXR0ZXJuRGF0YSApOworICAgI2Vsc2UKK3ZvaWQgTDFUU1RfTXVsdGlTbG90VHgoIEFSRkNOICBhcmZjbiwgQlNJQyBic2ljLCBpbnQ4IHRpbWVTbG90bWFzaywgUG93ZXIgcG93ZXJMZXZbNF0sCisgICAgICAgICAgICAgICAgICAgICAgICBDb2RpbmdTY2hlbWUgY3NbNF0sIFRpbWluZ0FkdmFuY2UgdGEsIGludDMyIGZyYW1lcywgaW50MTYgZGFjVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzRWdwcnMsIEFQQ1R4UGF0dGVybiBwYXR0ZXJuLCB1aW50MTYgcGF0dGVybkRhdGEgKTsKKyAgICNlbmRpZgorI2VuZGlmCisKKyNpZiBNRF9EUlZfSVNfVFhfR0FJTl9SRl9DQUxJQlJBVElPTl9TVVBQT1JUCisgICAjaWYgSVNfQUZDX0NBUEFCSUxJVFlfRU5IQU5DRU1FTlRfU1VQUE9SVAorLy92b2lkIEwxVFNUX1R4R2FpblJGU2V0dGluZyhBUkZDTiAgYXJmY24sIEJTSUMgYnNpYywgQ29kaW5nU2NoZW1lIGNzLCBUaW1pbmdBZHZhbmNlIHRhLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMiBmcmFtZXMsIHVpbnQxNiBkYWNWYWx1ZSwgYm9vbCBpc0VncHJzLCBBUENUeFBhdHRlcm4gcGF0dGVybiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2IHBhdHRlcm5EYXRhLCAgdWludDE2IHBhR2FpbiwgdWludDE2IHBhVmJpYXMsIHVpbnQxNiByZkdhaW5JbmRleCApOworICAgI2Vsc2UKK3ZvaWQgTDFUU1RfVHhHYWluUkZTZXR0aW5nKEFSRkNOICBhcmZjbiwgQlNJQyBic2ljLCBDb2RpbmdTY2hlbWUgY3MsIFRpbWluZ0FkdmFuY2UgdGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgZnJhbWVzLCBpbnQxNiBkYWNWYWx1ZSwgYm9vbCBpc0VncHJzLCBBUENUeFBhdHRlcm4gcGF0dGVybiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTYgcGF0dGVybkRhdGEsICB1aW50MTYgcGFHYWluLCB1aW50MTYgcGFWYmlhcywgdWludDE2IHJmR2FpbkluZGV4ICk7CisgICAjZW5kaWYKK3VpbnQ4IEwxVFNUX1F1ZXJ5X0dyZl9OdW1iZXIoIHZvaWQgKTsKK2ludDE2KiBMMVRTVF9RdWVyeV9CYXNlYmFuZF9Qb3dlciggdm9pZCApOworI2VuZGlmCisKKy8qIEZ1bmN0aW9ucyBwcm92aWRlZCBieSBsMXRzdF9hZmMuYyAqLworI2lmIElTX0FGQ19DQVBBQklMSVRZX0VOSEFOQ0VNRU5UX1NVUFBPUlQKK3ZvaWQgTDFUU1RfU2V0QWZjRGFjVmFsdWUoIHVpbnQxNiBkYWNWYWx1ZSApOworI2Vsc2UKK3ZvaWQgTDFUU1RfU2V0QWZjRGFjVmFsdWUoIGludDE2IGRhY1ZhbHVlICk7CisjZW5kaWYKK3VpbnQxNiBMMVRTVF9HZXRBZmNEYWNWYWx1ZUF0VFJYT2Zmc2V0Q2FsaWJyYXRpb24odm9pZCk7Cit2b2lkIEwxVFNUX1NldEFGY0RhdGEoIGludDE2IGNhbGlicmF0ZWRfZGFjX2RlZmF1bHQsIGludHggY2FsaWJyYXRlZF9pbnRfc2xvcGUgKTsKK3ZvaWQgTDFUU1RfU2V0RGN4b1Bvd2VyTW9kZShrYWxfdWludDggbW9kZSk7CisKKyNpZiBNRF9EUlZfSVNfRVBTS19UWF9TVVBQT1JUCit2b2lkIEwxVFNUX1JGX1NldFJhbXBBcGNMZXZlbEVQU0soIGludCByZl9iYW5kLCBpbnQgcG93ZXJfbGV2ZWwsIGludCBhcGNfZGFjICk7CisjZW5kaWYKKwordHlwZWRlZiB2b2lkICgqQ2FsaWJyYUhhbmRsZXJDYWxsYmFjaykoa2FsX2ludDMyIHU0UmVzdWx0KTsKK2Jvb2wgTDFUU1RfQmVnaW4zMktDYWxpYnJhdGlvbiggQ2FsaWJyYUhhbmRsZXJDYWxsYmFjayBjYiApOwordm9pZCBMMVRTVF9HZXQzMktDYWxpYnJhdGlvblJlc3VsdCgga2FsX3VpbnQzMiBmbVJlc3VsdCApOworCit2b2lkIEwxVFNUX1VwZGF0ZUNhbGlicmF0aW9uRGF0YSgga2FsX3VpbnQzMiBjYWxfbGlkICk7Cit1aW50MTYgTDFUU1RfUXVlcnlfTDFEX01vZGUoIHZvaWQgKTsKKworLy9Gb3IgZml4IHhsMXNpbSBidWlsZCB3YXJuaW5nCit2b2lkIEwxU01fQmVnaW5NZXRhTW9kZTMyS0NhbGlicmF0aW9uKCB2b2lkICk7Cit2b2lkIEwxRF9TaW5XYXZlX0RldGVjdGlvbiggYm9vbCBpc19zaW5fd2F2ZSApOworLy92b2lkIEwxRF9DYWxpYnJhdGVHYWluTWlzbWF0Y2goIHZvaWQgKTsKKyNpZiBJU19BRkNfQ0FQQUJJTElUWV9FTkhBTkNFTUVOVF9TVVBQT1JUICAgLy91aW50MTYgZGFjVmFsdWUKK3Vuc2lnbmVkIGxvbmcgTDFUU1RfTXVsdGlTbG90VHhfd2l0aF9BVVhBRENSZWFkKCBBUkZDTiAgYXJmY24sIEJTSUMgYnNpYywgaW50OCB0aW1lU2xvdG1hc2ssIFBvd2VyIHBvd2VyTGV2WzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RpbmdTY2hlbWUgY3NbNF0sIFRpbWluZ0FkdmFuY2UgdGEsIGludDMyIGZyYW1lcywgdWludDE2IGRhY1ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzRWdwcnMsIEFQQ1R4UGF0dGVybiBwYXR0ZXJuLCB1aW50MTYgcGF0dGVybkRhdGEgKTsKKworI2Vsc2UKK3Vuc2lnbmVkIGxvbmcgTDFUU1RfTXVsdGlTbG90VHhfd2l0aF9BVVhBRENSZWFkKCBBUkZDTiAgYXJmY24sIEJTSUMgYnNpYywgaW50OCB0aW1lU2xvdG1hc2ssIFBvd2VyIHBvd2VyTGV2WzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RpbmdTY2hlbWUgY3NbNF0sIFRpbWluZ0FkdmFuY2UgdGEsIGludDMyIGZyYW1lcywgaW50MTYgZGFjVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNFZ3BycywgQVBDVHhQYXR0ZXJuIHBhdHRlcm4sIHVpbnQxNiBwYXR0ZXJuRGF0YSApOworI2VuZGlmCisjaWZkZWYgTVRLX1NMRUVQX0VOQUJMRQordm9pZCBMMVNNX1dha2VVcCggdm9pZCApOworI2VuZGlmCisKKwordm9pZCBMMVRTVF9SZUluaXRBRkNEYXRhKCB2b2lkICk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvdWwxdHN0X21zZy5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvdWwxdHN0X21zZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MGY0YzYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS91bDF0c3RfbXNnLmgKQEAgLTAsMCArMSw5IEBACisjaWYgKGRlZmluZWQgX19NRDkzX18pCisjaW5jbHVkZSAidWwxdHN0X21zZ19nZW45My5oIgorI2VsaWYgKGRlZmluZWQgX19NRDk1X18pCisjaW5jbHVkZSAidWwxdHN0X21zZ19nZW45NS5oIgorI2VsaWYgKGRlZmluZWQgX19NRDk3X18pIHx8IChkZWZpbmVkIF9fTUQ5N1BfXykKKyNpbmNsdWRlICJ1bDF0c3RfbXNnX2dlbjk3LmgiCisjZWxzZQorI2Vycm9yICJbRVJST1JdIEludmFsaWQgTUQgZ2VuZXJhdGlvbiIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvdWwxdHN0X21zZ19nZW45My5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvdWwxdHN0X21zZ19nZW45My5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ODg2MDYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS91bDF0c3RfbXNnX2dlbjkzLmgKQEAgLTAsMCArMSw5NzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBNb2RpZmljYXRpb24gTm90aWNlOgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgTWVkaWFUZWsgSW5jLiBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiB1bDF0c3RfbXNnLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTVQ2MjY4IFByb2plY3QKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICB1bDF0c3RfbXNnLmgKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCisjaWZuZGVmIFVMMVRTVF9NU0dfSAorI2RlZmluZSBVTDFUU1RfTVNHX0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisvLyNpbmNsdWRlICJudnJhbV9kYXRhX2l0ZW1zLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisKKyNpbmNsdWRlICJmdF9tc2dfdWwxcmYuaCIKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8vI2lmZGVmIE1UNjI2OFQKK3R5cGVkZWYgZW51bQoreworICAgVUwxVFNUX0NNRF9UWEFDQ0VTUyA9IDAgICAKKyAgICxVTDFUU1RfQ01EX1RYX0RQQ0gKKyAgICxVTDFUU1RfQ01EX1JYX0RQQ0gKKyAgICxVTDFUU1RfQ01EX1JTU0kKKyAgICxVTDFUU1RfQ01EX1JTU0lfUlhEICAvKio8IFxicmVpZiBSOCBnZXQgYm90aCByeCBwYXRoIFJTU0kgKi8KKyAgICxVTDFUU1RfQ01EX1JTU0lfQ09OVAorICAgLFVMMVRTVF9DTURfUlNDUAorICAgLFVMMVRTVF9DTURfQUZDICAgICAgLy9hbnRob255IDA1MTQKKyAgICxVTDFUU1RfQ01EX01RQyAgICAgIC8vMjAwODExMTQgY29uZ28sIGFkZCBtc2cgZm9yIG1vYmlsZSBxdWljayBjYWxpcmF0aW9uCisgICAsVUwxVFNUX0NNRF9OU0ZUIAorICAgLFVMMVRTVF9DTURfSFNEUEFfTlNGVAorICAgLFVMMVRTVF9DTURfSFNVUEFfTlNGVAorICAgLFVMMVRTVF9DTURfU1RPUCAKKyAgICxVTDFUU1RfQ01EX01RQ19PQ1RMRVYKKyAgICxVTDFUU1RfQ01EX01RQ19FWFQgIC8vcnhkLCBndmdhYmIwCisgICAsVUwxVFNUX0NNRF9BRkNfRVhUICAvL0FkZCBtc2cgZm9yIERDWE8gdG8gZG8gbXVsdGktYmluIGRldGVjdGlvbiAoaWNzX21vZGU9Q0ZFX01PREUxKQorICAgLFVMMVRTVF9DTURfUkVMT0FEX05WUkFNCisgICAsVUwxVFNUX0NNRF9BTlRfTU9ERSAgICAgLyoqPCBcYnJpZWYgUjggc2V0IHJ4IHBhdGg6IDA6bm9uZSAxOm1haW4gMjpkaXZlcnNpdHk6IDM6IGJvdGggKi8KKyAgICxVTDFUU1RfQ01EX1BBX0RSSUZUX1NXSVRDSCAgLy8gUEEgZHJpZnQgY29tcGVuc2F0aW9uIHN3aXRjaCBtZXNzYWdlCisgICAsVUwxVFNUX0NNRF9SWF9DRUxMX1BPV0VSICAgIC8vIGNvbmZpZ3VyZSB0aGUgUnggY2VsbCBwb3dlciBiZWZvcmUgY2VsbCBzZWFyY2gKKyAgICxVTDFUU1RfQ01EX0dFVF9SRl9URU1QIC8qMjAqLyAgICAgIC8vIEdldCB0aGUgUkYgVGVtcGVyYXR1cmUgc2Vuc29yIHJlYWRpbmcgKHBhcmFtZXRlcjpVTDFUU1RDbWRHZXRSZlRlbXBTZW5zb3IpCisgICAsVUwxVFNUX0NNRF9HRVRfUkZfQ0FQQUJJTElUWSAvKjIxKi8gIC8vIEdldCB0aGUgUkYgY2FwYWJpbGl0eSAobm8gcGFyYW1ldGVyKQorICAgLFVMMVRTVF9DTURfR0VUX01JUElfUEFfQ1dfTlVNQkVSIC8qMjIqLyAgIAorICAgLFVMMVRTVF9DTURfTElTVF9NT0RFCS8vZm9yIGxpc3QgbW9kZQorICAgLFVMMVRTVF9DTURfR0VUX1JGX01JUElfQ09ERVdPUkQgLyoyNCovCisgICAsVUwxVFNUX0NNRF9TRVRfUkZfTUlQSV9DT0RFV09SRCAvKjI1Ki8KKyAgICxVTDFUU1RfQ01EX0dFVF9SRl9URU1QX0lORk8gLyoyNiovCisgICAsVUwxVFNUX0NNRF9SWF9HQUlOX1NXRUVQIC8qIDI3ICovCisgICAsVUwxVFNUX0NNRF9FTkQKK30gVUwxVFNUQ21kVHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2CSB1bF91YXJmY247CQkvKiBVTCB1YXJmY24gcmFuZ2U6Pz8/P1JlYWQgZnJvbSBOVlJBTT8/ICg5NjEyIH4gOTg4OCkgKi8JCisgICAga2FsX3VpbnQxNiAgZGxfdWFyZmNuOworICAgIGthbF91aW50MTYJIGRsX3BzYzsJCSAgIC8qIDB+NTExLiAqLworICAgIGthbF91aW50OCAgIHNpZ25hdHVyZTsJICAgLyogMH4xNSwgZm9yIHNpbmdsZSBzaWduYXR1cmUgZGVjaXNpb24uICovCisgICAga2FsX3VpbnQ4ICAgcGFfbW9kZTsJICAgLyogMDogaGlnaCAxOiBtaWRkbGUgMjogbG93ICovCisgICAga2FsX2ludDggICAgaW5pdF9wb3dlcjsJLyogQXNzdW1lIGNwaWNoX3JzY3A9MCwgdWxfaW50ZXJmZXJlbmNlPTAuICovCisgICAga2FsX3VpbnQ4ICAgcG93ZXJfc3RlcDsgICAvKiBQcmVhbWJsZSBwb3dlciByYW1waW5nIHN0ZXAuIDEgfiA4ZEIgKi8JCisgICAga2FsX3VpbnQ4ICAgbWF4X3JldHJhbnM7CS8qIDF+NjQgKi8KKyAgICBrYWxfdWludDggICBhc2M7ICAgICAgICAgIC8qIDB+NyAqLworfSBVTDFUU1RDbWRUeEFjY2VzczsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIC8va2FsX2ludDE2CWRsX2ZyZXE7CisgICBrYWxfaW50MTYJdWxfZnJlcTsKKyAgIGthbF9pbnQxNglwc2M7CQkgICAgICAgIC8qIDB+NTExLiAqLworICAga2FsX3VpbnQzMglzY19jb2RlOyAgICAgICAgIC8qIFNjcmFtYmxpbmcgY29kZSAjLiAwIH4gMTY3NzcyMTUgKi8KKyAgIGthbF91aW50OCAgIHBvd2VyX2N0cmxfbW9kZTsKKyAgIGthbF91aW50OCAJcGFfbW9kZTsKKyAgIGthbF91aW50MTYgCWlkeDsKKyAgIGthbF91aW50MTYJYWZjX2RhYzsKKyAgIGthbF91aW50OAlkcGNjaF9wd3I7CisgICBrYWxfdWludDgJZHBkY2hfcHdyOworCQorICAgLyogQmVsb3cgZm9yIFVMMURfUkZfTWV0YV9TZXRUeEluZm8uICovCisgICAvKiBCZWxvdyBmb3Igc2V0UGFBcGNEYWMuICovCQorICAga2FsX3VpbnQ4IAlyZl9iYW5kOworICAga2FsX3VpbnQ4ICAgdm0xOworICAga2FsX3VpbnQ4ICAgdm0yOworICAga2FsX3VpbnQxNiAgZGMyZGNfZGFjOworICAga2FsX3VpbnQxNiAgdmJpYXNfZGFjOworICAga2FsX2Jvb2wgICAgcHdyX2RldDsKKyAgIGthbF91aW50MTYgCWFwY19kYWM7CisgICBrYWxfdWludDE2ICBwYV9kYWM7CQkKK30gVUwxVFNUQ21kVHhEUENoOwkvL0FudGhvbnkKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlrYWxfaW50MTYJZGxfZnJlcTsKKwlrYWxfaW50MTYJcHNjOwkvKiAwfjUxMS4gKi8KKwlrYWxfdWludDgJc3NjOwkvKiAwfjE1LiAqLworCWthbF9pbnQxNglvdnNmOwkvKiAwfnNmLTEuICovCisJa2FsX3VpbnQxNglhZmNfZGFjOworCQorCS8qIEJlbG93IGZvciBSRl9TZXRCQlJ4UGFyYW1zLiAqLworCWthbF9ib29sIAlod0FHQzsKKwlrYWxfdWludDgJbW9kZTsJCS8qIDA6IG1vZGUwLCAxOiBtb2RlMS4gKi8KKwlrYWxfaW50MTYJZ2FpbjsJCS8qIG1vZGUwLiAqLworCWthbF91aW50OAlMTkFtb2RlOwkvKiBtb2RlMS4gMDogTE5BIGxvdywgMTogTE5BIG1pZCwgMjogTE5BIGhpZ2guICovCisJa2FsX3VpbnQxNglwZ2E7CQkvKiBtb2RlMS4gKi8KK30gVUwxVFNUQ21kUnhEUENoOworCisvL2ZvciBsaXN0IG1vZGUKKyNkZWZpbmUgTUFYX0xNX1ZBTElEX0ZSRVEgNTAKK3R5cGVkZWYgc3RydWN0Cit7CisgICAvKiBjb21tb24gcGFyYW1ldGVycyAqLworICAga2FsX2Jvb2wgICBhZmNfZGFjX3ZhbGlkOworICAga2FsX3VpbnQxNglhZmNfZGFjOworICAga2FsX3VpbnQ4ICBsb29wYmFja1R5cGU7Ly8wOiBubyBsb29wYmFjaywgMTogbG9vcGJhY2sgdHlwZSAxLCAyOiBsb29wYmFjayB0eXBlIDIKKyAgIGthbF91aW50OCAgZnJhbWVfc2hpZnQ7Ly9kZWZhdWx0PTAsIGRlcGVuZHMgb24gVGVzdCBNYWNoaW5lCisgICBrYWxfdWludDggIHJtY190eXBlOy8vMTogMTIuMmssIDI6IDY0aywgMzogMTQ0aywgNDogMzg0aworICAga2FsX3VpbnQ4ICBjdGZjWzRdOy8vODk2MD0wLDEsMiwzOyBjbXUyMDA9MCwyLDEsMworICAga2FsX3VpbnQ4ICBiaXRfcGF0dGVybjsvLzA6IHNpbmdsZSBlbmRlZCBiZXIgZGlzYWJsZSwgMTogYWxsIG9uZSwgMjogYWxsIHplcm8KKyAgIC8qIERMIHBhcmFtZXRlcnMgKi8KKyAgIGthbF9pbnQxNglkbF9mcmVxW01BWF9MTV9WQUxJRF9GUkVRXTsKKyAgIGthbF9pbnQxNglkbF9wc2M7LyogMH41MTEuICovCisgICBrYWxfaW50MTYJZGxfb3ZzZjsvL1JNQzEyLjJrOiA8MTI4LCBidXQgdGVzdCBzZXQgbm90IGFsbG93IGFsbCBvdnNmLAorCSAgICAgICAgICAgICAgICAgLy9STUMxMi4yayBkZWZhdWx0IG92c2Y9OQorICAgLyogVUwgcGFyYW1ldGVycyAqLworICAga2FsX2ludDE2CXVsX2ZyZXFbTUFYX0xNX1ZBTElEX0ZSRVFdOworICAga2FsX3VpbnQxNgl1bF90ZmNpOworICAga2FsX3VpbnQzMgl1bF9zY19jb2RlOwkvKiBTY3JhbWJsaW5nIGNvZGUgIy4gMCB+IDE2Nzc3MjE1ICovCisgICBrYWxfYm9vbCAgIGlxX3B3cl92YWxpZDsvL3ZhbGlkIGRwY2NoLCBkcGRjaCBwb3dlcgorICAga2FsX3VpbnQ4CWRwY2NoX3B3cjsvL2RlZmF1bHQgOCwgZGVwZW5kcyBvbiB0ZXN0aW5nIHJlcXVpcmVtZW50CisgICBrYWxfdWludDgJZHBkY2hfcHdyOy8vZGVmYXVsdCAxNSwgZGVwZW5kcyBvbiB0ZXN0aW5nIHJlcXVpcmVtZW50CisKKyAgIC8qIGNvbW1vbiBwYXJhbWV0ZXJzICovCisgICBrYWxfdWludDgJdmFsaWRfZnJlcTsgLy92YWxpZCBjb3VudCBvZiBkbC91bCBmcmVxLgorICAga2FsX3VpbnQxNiAgIHRlc3RfaXRlbVtNQVhfTE1fVkFMSURfRlJFUV07IC8vYml0MDpyZXNlcnZlZC4gYml0MTpzaW5nbGUgZW5kIEJFUi4gYml0MjpSU1NJIG1lYXN1cmUuIGJpdDM6cmVzZXJ2ZWQuIGJpdDQ6cmVzZXJ2ZWQuIGJpdDU6SUxQQ19BQkMuIGJpdDY6SUxQQ19FRi4gYml0NzpJTFBDX0dILgkKKyAgIC8qIHRoZSB0aW1lIHNldHRpbmdzLCB1bml0ID0gZnJhbWUgKi8KKyAgIGthbF91aW50MTYgICBmdWxsX3Rlc3RfdGltZTsvL3RoZSB0b3RhbCB0aW1lIG9mIG9uZSBmcmVxLgorICAga2FsX3VpbnQ4ICAgIHJlYWR5X3RpbWU7IC8vIGZvciBmaXJzdCBzeW5jIGFmdGVyIFRYIHRyYW5zbWl0CisgICBrYWxfdWludDgJc3luY190aW1lOyAvL3RoZSB0aW1lIG9mIHN5bmMsIGZyb20gY3Nfc3RhcnQgdG8gTEJLIGlzIDI2IGZyYW1lCisgICBrYWxfdWludDggICAgcmV0cmlhbDsgLy9qdXN0IGZvciBmaXJzdCBzeW5jCisgICBrYWxfdWludDE2CXRlc3RfdGltZTsgLy90aGUgdGltZSBvZiB0ZXN0IGZvciBtYXgmbWluIFRYIHBvd2VyIHRlc3RzCisgICBrYWxfdWludDE2ICAgcnhfcnNzaV9zdGFydF90aW1lWzNdOyAvL1JTU0kgc3RhcnQgdGltZSBmb3IgMyBMTkEgbW9kZQorICAga2FsX3VpbnQ4ICAgIHJ4X3Jzc2lfZHVyYXRpb25bM107CisgICBrYWxfdWludDE2ICAgcnhfYmVyX3N0YXJ0X3RpbWU7IC8vQkVSIHN0YXJ0IHRpbWUKKyAgIGthbF91aW50OCAgICByeF9iZXJfZHVyYXRpb247CisgICBrYWxfdWludDE2CUlMUENfQUJDX3RpbWU7IC8vdGhlIHRpbWUgb2YgSUxQQyBBQkMKKyAgIGthbF91aW50MTYJSUxQQ19FRl90aW1lOyAvL3RoZSB0aW1lIG9mIElMUEMgRUYKKyAgIGthbF91aW50MTYJSUxQQ19HSF90aW1lOyAvL3RoZSB0aW1lIG9mIElMUEMgR0gKKyAgIGthbF91aW50MTYJdHJhbnNpdGlvbl90aW1lOyAvL3RoZSBsaW1pdGF0aW9uIG9mIFVFIHN0YXRlIG1hY2hpbmUgaXMgNCBmcmFtZSBhdCBsZWFzdAorfSBVTDFUU1RDbWRMSVNUTU9ERTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIC8qIGNvbW1vbiBwYXJhbWV0ZXJzICovCisgICBrYWxfYm9vbCAgIGFmY19kYWNfdmFsaWQ7CisgICBrYWxfdWludDE2CWFmY19kYWM7CisgICBrYWxfdWludDggIGxvb3BiYWNrVHlwZTsvLzA6IG5vIGxvb3BiYWNrLCAxOiBsb29wYmFjayB0eXBlIDEsIDI6IGxvb3BiYWNrIHR5cGUgMgorICAga2FsX3VpbnQ4ICBmcmFtZV9zaGlmdDsvL2RlZmF1bHQ9MCwgZGVwZW5kcyBvbiBUZXN0IE1hY2hpbmUKKyAgIGthbF91aW50OCAgcm1jX3R5cGU7Ly8xOiAxMi4yaywgMjogNjRrLCAzOiAxNDRrLCA0OiAzODRrCisgICBrYWxfdWludDggIGN0ZmNbNF07Ly84OTYwPTAsMSwyLDM7IGNtdTIwMD0wLDIsMSwzCisgICBrYWxfdWludDggIGJpdF9wYXR0ZXJuOy8vMDogc2luZ2xlIGVuZGVkIGJlciBkaXNhYmxlLCAxOiBhbGwgb25lLCAyOiBhbGwgemVybworICAgLyogREwgcGFyYW1ldGVycyAqLworICAga2FsX2ludDE2CWRsX2ZyZXE7CisJIGthbF9pbnQxNglkbF9wc2M7LyogMH41MTEuICovCisJIGthbF9pbnQxNglkbF9vdnNmOy8vUk1DMTIuMms6IDwxMjgsIGJ1dCB0ZXN0IHNldCBub3QgYWxsb3cgYWxsIG92c2YsCisJICAgICAgICAgICAgICAgICAvL1JNQzEyLjJrIGRlZmF1bHQgb3ZzZj05CisJIC8qIFVMIHBhcmFtZXRlcnMgKi8KKyAgIGthbF9pbnQxNgl1bF9mcmVxOworICAga2FsX3VpbnQxNgl1bF90ZmNpOworCSBrYWxfdWludDMyCXVsX3NjX2NvZGU7CS8qIFNjcmFtYmxpbmcgY29kZSAjLiAwIH4gMTY3NzcyMTUgKi8KKwkga2FsX2Jvb2wgICBpcV9wd3JfdmFsaWQ7Ly92YWxpZCBkcGNjaCwgZHBkY2ggcG93ZXIKKwkga2FsX3VpbnQ4CWRwY2NoX3B3cjsvL2RlZmF1bHQgOCwgZGVwZW5kcyBvbiB0ZXN0aW5nIHJlcXVpcmVtZW50CisJIGthbF91aW50OAlkcGRjaF9wd3I7Ly9kZWZhdWx0IDE1LCBkZXBlbmRzIG9uIHRlc3RpbmcgcmVxdWlyZW1lbnQKKworCSBrYWxfdWludDggICBzdWJ0ZXN0OyAvLyBmb3IgRFBBL1VQQSB1c2UKK30gVUwxVFNUQ21kTlNGVDsKKworI2RlZmluZSBGRERfTUFYX0ZSRVFfTElTVCAzNgordHlwZWRlZiBzdHJ1Y3QKK3sKKwlrYWxfdWludDgJbnVtX2ZyZXE7CisJa2FsX2ludDE2CWRsX2ZyZXFbIEZERF9NQVhfRlJFUV9MSVNUIF07CisJa2FsX2ludDE2CXNjY19kbF9mcmVxWyBGRERfTUFYX0ZSRVFfTElTVCBdOworCWthbF9pbnQxNiAgIHNldHRpbmdzOyAgICAvLyAgUENDICBTUlgvTE5BIFNldHRpbmdzCisJa2FsX3VpbnQ4ICAgc3J4Y2ZnOworCWthbF91aW50OAl2Y29jZmc7CisJa2FsX3VpbnQ4ICAgbG5hcG9ydDsKKwlrYWxfdWludDggICB0ZW1wZXJhdHVyZTsKKwkKKwkvKiBCZWxvdyBmb3IgUkZfU2V0QkJSeFBhcmFtcy4gKi8KKwlrYWxfYm9vbCAJaHdBR0M7CisJa2FsX3VpbnQ4CW1vZGU7CQkvKiAwOiBtb2RlMCwgMTogbW9kZTEuICovCisJa2FsX2ludDE2CWdhaW5bMl07CQkvKiBtb2RlMC4gKi8KKwlrYWxfdWludDgJTE5BbW9kZVsyXTsJLyogbW9kZTEuIDA6IExOQSBsb3csIDE6IExOQSBtaWQsIDI6IExOQSBoaWdoLiAqLworCWthbF91aW50MTYJcGdhWzJdOwkJLyogbW9kZTEuICovCisgICBrYWxfdWludDggICBscG1fbW9kZTsgICAvKiAwOiBub3JtYWwgTE5BIGdhaW4gbW9kZSAsIDE6IGxvdyBwb3dlciBMTkEgZ2FpbiBtb2RlLiAqLworCQorCWthbF9ib29sIHJzc2lfY29udGludWU7Cit9IFVMMVRTVENtZFJTU0k7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJa2FsX2Jvb2wJcHNjYW5fYmVmb3JlX2NlbGxfc2VhcmNoOwkvKiBUcnVlIGlmIFVMMVRTVCBuZWVkcyBwb3dlciBzY2FuIGJlZm9yZSBjZWxsIHNlYXJjaC9SU0NQLiAqLworCWthbF9pbnQxNglkbF9mcmVxOwkvKiBTcGVjaWZpYyBkbF9mcmVxIHRvIGRvIGNlbGwgc2VhcmNoLiBWYWxpZCBpZiBwc2Nhbl9iZWZvcmVfY2VsbF9zZWFyY2g9Ri4gKi8KKwlrYWxfdWludDgJc2FtcGxlX251bV9wZXJfY2VsbDsKKwlrYWxfYm9vbAlyZWFkX3NmbjsJLyogVHJ1ZSBpZiB3ZSBuZWVkIHRvIGRvIFNGTiBtZWFzdXJlbWVudCBmb3IgdGhlIGZvdW5kIGNlbGwuICovCisJCisJLyogQmVsb3cgZm9yIFJGX1NldEJCUnhQYXJhbXMuICovCisJa2FsX2Jvb2wgCWh3QUdDOworCWthbF91aW50OAltb2RlOwkJLyogMDogbW9kZTAsIDE6IG1vZGUxLiAqLworCWthbF9pbnQxNglnYWluOwkJLyogbW9kZTAuICovCisJa2FsX3VpbnQ4CUxOQW1vZGU7CS8qIG1vZGUxLiAwOiBMTkEgbG93LCAxOiBMTkEgbWlkLCAyOiBMTkEgaGlnaC4gKi8KKwlrYWxfdWludDE2CXBnYTsJCS8qIG1vZGUxLiAqLworfSBVTDFUU1RDbWRSU0NQOworCit0eXBlZGVmIHN0cnVjdAoreworLy8ga2FsX2Jvb2wJcHNjYW5fYmVmb3JlX2NlbGxfc2VhcmNoOyAgICAgIC8qIFRydWUgaWYgVUwxVFNUIG5lZWRzIHBvd2VyIHNjYW4gYmVmb3JlIGNlbGwgc2VhcmNoL1JTQ1AuICovCisgICBrYWxfaW50MTYJZGxfZnJlcTsJICAgICAgICAgICAgICAgLyogU3BlY2lmaWMgZGxfZnJlcSB0byBkbyBjZWxsIHNlYXJjaC4gVmFsaWQgaWYgcHNjYW5fYmVmb3JlX2NlbGxfc2VhcmNoPUYuICovCisvLyBrYWxfdWludDgJc2FtcGxlX251bV9wZXJfY2VsbDsKKy8vIGthbF9ib29sCXJlYWRfc2ZuOyAgICAgICAgICAgICAgICAgICAgICAvKiBUcnVlIGlmIHdlIG5lZWQgdG8gZG8gU0ZOIG1lYXN1cmVtZW50IGZvciB0aGUgZm91bmQgY2VsbC4gKi8KKwkKKyAgIGthbF9pbnQxNiAgIGFmY19kYWM7CisKKyAgIC8qIEJlbG93IGZvciBSRl9TZXRCQlJ4UGFyYW1zLiAqLworICAga2FsX2Jvb2wgCWh3QUdDOworICAga2FsX3VpbnQ4CW1vZGU7CQkgICAgICAgICAgICAgICAvKiAwOiBtb2RlMCwgMTogbW9kZTEuICovCisgICBrYWxfaW50MTYJZ2FpbjsJCSAgICAgICAgICAgICAgIC8qIG1vZGUwLiAqLworICAga2FsX3VpbnQ4CUxOQW1vZGU7CSAgICAgICAgICAgICAgIC8qIG1vZGUxLiAwOiBMTkEgbG93LCAxOiBMTkEgbWlkLCAyOiBMTkEgaGlnaC4gKi8KKyAgIGthbF91aW50MTYJcGdhOyAgICAgICAgICAgICAgICAJICAgLyogbW9kZTEuICovCit9IFVMMVRTVENtZEFGQzsKKworLy8yMDA4MTExNSBjb25nbywgYWRkIE1RQyBjbWQKKyNkZWZpbmUgTUFYX01RQ19GUkVRX0NPVU5UIDE1ICAgIC8vIDYyOTMgbmVlZCAxNCBmcmVxdWVuY3kKKyNkZWZpbmUgTUFYX01RQ19QV1JfQ09VTlQgIDE1ICAgIC8vIDYyOTMgbmVlZCAxMyBwb2ludAorI2RlZmluZSBNQVhfQ0FMX0JBTkQgICAgICAgMTAgICAgLy8gNjI5MyBuZWVkIDUgIGJhbmQKKyNkZWZpbmUgTUFYX01RQ19SU1NJX0NPVU5UIDIwMCAgIC8vIDYyOTMgbmVlZCAxNSoxND0xOTUgcG9pbnQKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKy8qIFR4IHBhcnQgc2V0dGluZ3MgKi8KKworLyogQmVsb3cgZm9yIFVMMURfUkZfTWV0YV9TZXRUeEluZm8uICovCisgICBrYWxfYm9vbCAgICBub19sb29wX2N0cmw7CisgICBrYWxfdWludDE2ICBhZmNfZGFjOworLyogQmVsb3cgZm9yIHNldFBhQXBjRGFjLiAqLworLy9mb3IgMyBQQSBtb2RlLCAwOkgsIDE6TSwgMjpMCisvL0FkZCBUeCBiYW5kCisgICBrYWxfYm9vbCAgICBwd3JfZGV0Oy8vMCBvZmYvbWFudWFsIG1vZGUsIDEgb24vYXV0byBtb2RlCisvL2thbF91aW50MTYgcHdyX2RldF90aHJlc2hvbGQ7CisgICBrYWxfdWludDggICBwb3dlcl9jdHJsX21vZGU7Ly8xOiBIVy0+TzMsIDI6IFNXLT41OUQsIFNtYXJ0aQorLy8gICBrYWxfdWludDggICB2bTFbTUFYX0NBTF9CQU5EXVszXTsgICAgICAvL1BBIHBhcmFtCisvLyAgIGthbF91aW50OCAgIHZtMltNQVhfQ0FMX0JBTkRdWzNdOyAgICAgIC8vUEEgcGFyYW0KKy8vICAga2FsX3VpbnQxNiAgZGMyZGNfZGFjW01BWF9DQUxfQkFORF1bM107Ly9QQSBwYXJhbQorLy8gICBrYWxfdWludDE2ICB2Ymlhc19kYWNbTUFYX0NBTF9CQU5EXVszXTsvL1BBIHBhcmFtCisvLyAgIGthbF9ib29sICAgIGluaXRfdHhfb25vZmY7ICAgICAgICAgICAgIC8vMDpvZmYsIDE6b24KKy8vICAga2FsX2Jvb2wgICAgcmVhZHlfdHhfb25vZmY7ICAgICAgICAgICAgLy8wOm9mZiwgMTpvbgorLy8gICBrYWxfdWludDggICBpbml0X3BhX21vZGU7CisvLyAgIGthbF91aW50OCAgIHJlYWR5X3BhX21vZGU7CisvLyAgIGthbF91aW50MTYgIGluaXRfcGFfZ2FpbjsKKy8vICAga2FsX3VpbnQxNiAgcmVhZHlfcGFfZ2FpbjsKKy8vICAga2FsX3VpbnQxNiAgaW5pdF92Z2FfZGFjX3RwY19pZHg7CisvLyAgIGthbF91aW50MTYgIHJlYWR5X3ZnYV9kYWNfdHBjX2lkeDsKKworLyogUnggcGFydCBzZXR0aW5ncyAqLworCisvKiBCZWxvdyBmb3IgUkZfU2V0QkJSeFBhcmFtcy4gKi8KKy8vIEZvciBoaWdoIGdhaW4gY2FsLiBAIGhpZ2ggcG93ZXI6IHJlcGxhY2UgZ2FpbiB0YWJsZQorICAga2FsX3VpbnQ4ICAgdGVtcGVyYXR1cmU7CisvLyAgIGthbF9ib29sICAgIGh3QUdDOyAgICAgICAgIC8vMDpTVyBnYWluIG1vZGUsIDE6SFcgQUdDLiBBR0MgbXVzdCBvbiBmb3IgUlNTSSBtZWFzdXJlLiBIVyBsaW1pdAorLy8gICBrYWxfaW50MTYgICBnYWluX2luaXQ7ICAgICAvKiBmb3IgSFcgbW9kZSAqLworCisvKiBNb2JpbGUgUXVpY2sgQ2FsaWJyYXRpb24gc2V0dGluZ3MgKi8KKworLyogZ2VuZXJhbCBzZXR0aW5ncyAqLworLy8gICBrYWxfYm9vbCAgICBpbml0X2NvbmRpdGlvbjsgICAgIC8vMDogbWF4X3B3ciwgMTptaW5fcHdyCisgICBrYWxfdWludDggICBzdGVwX2R1cmF0aW9uOyAgICAgIC8vaW4gc2xvdAorLy8gICBrYWxfdWludDggICByZWFkeV9kdXJhdGlvbjsgICAgIC8vaW4gc2xvdAorICAga2FsX3VpbnQ4ICAgcmV0dW5lX2R1cmF0aW9uOyAgICAvL2luIHNsb3QKKy8vICAga2FsX3VpbnQ4ICAgZ2Fpbl9zdGFibGVfdGltZTsgICAvL2luIHNsb3QKKy8vICAga2FsX3VpbnQxNiAgbWF4X3ZnYV9kYWM7CisvLyAgIGthbF91aW50MTYgIG1pbl92Z2FfZGFjOworLy8gICBrYWxfdWludDE2ICBqdW1wX3ZnYV9kYWM7CisKKy8qIGZyZXEtcHdyIHRhYmxlICovCisgICBrYWxfdWludDggICBmcmVxX2NvdW50OworICAga2FsX3VpbnQ4ICAgcHdyX2NvdW50OworICAga2FsX3VpbnQ4ICAgZnJlcV9zdGFydF9pZHg7CisgICBrYWxfdWludDggICBwd3Jfc3RhcnRfaWR4OworICAga2FsX3VpbnQ4ICAgaHBtX2NhbF9wb2ludDsKKyAgIGthbF91aW50OCAgIGxwbV9jYWxfcG9pbnQ7CisgICAKKy8vICAga2FsX3VpbnQ4ICAgb2RkX3JlY29yZDsgICAgICAgIC8qZm9yIEFucml0c3U4ODIwLCBvbmx5IG9kZCBzdGVwICgxLDMsNS4uLnN0YXJ0IGZyb20gMSkgaXMgZm9yIG1lYXN1cmVtZW50LiAgKi8KKworLy8gICBrYWxfdWludDggICBwYV9nYWluX3N0YXJ0X2lkeDsgLy8gZm9yIE8zIFRQQworLy8gICBrYWxfdWludDggICBwZF9nYWluX3N0YXJ0X2lkeDsgLy8gZm9yIE8zIFRQQworCisgICBrYWxfdWludDggICBkbF9iYW5kOyAvLzE6YmFuZDEsIDI6YmFuZDIsIDM6YmFuZDMsIDU6YmFuZDUKKyAgIGthbF91aW50OCAgIHVsX2JhbmQ7IC8vMTpiYW5kMSwgMjpiYW5kMiwgMzpiYW5kMywgNTpiYW5kNQorICAga2FsX3VpbnQxNiAgZGxfZnJlcVtNQVhfTVFDX0ZSRVFfQ09VTlRdOyAvL2luIHVhcmZjbgorICAga2FsX3VpbnQxNiAgdWxfZnJlcVtNQVhfTVFDX0ZSRVFfQ09VTlRdOyAvL2luIHVhcmZjbgorICAga2FsX3VpbnQ4ICAgcGFfbW9kZVtNQVhfTVFDX1BXUl9DT1VOVF07CisgICBrYWxfdWludDE2ICB2Z2FfZGFjX3RwY19pZHhbTUFYX01RQ19QV1JfQ09VTlRdOy8vcG93ZXJfY3RybF9tb2RlPUhXLCB0cGNfaWR4LiBWaWNlIHZlcnNhLgorCisgICBrYWxfdWludDE2ICBwYV9nYWluW01BWF9NUUNfUFdSX0NPVU5UXTsgLy8gZm9yIE8zIFRQQworICAga2FsX3VpbnQ4ICAgcGRfZ2FpbltNQVhfTVFDX0ZSRVFfQ09VTlRdOyAvLyBmb3IgTzMgVFBDCisgICBrYWxfdWludDggICBwYV9zZWN0aW9uW01BWF9NUUNfUFdSX0NPVU5UXTsKKworICAga2FsX3VpbnQxNiAgcnhfbG5hX2dhaW5bTUFYX01RQ19QV1JfQ09VTlRdOyAgICAgLyogUFJYIHRvdGFsIFJGIGdhaW4gLjUgYWZ0ZXIgNjI5MyovCisgICBrYWxfdWludDE2ICByeGRfbG5hX2dhaW5bTUFYX01RQ19QV1JfQ09VTlRdOyAgICAvKiBEUlggdG90YWwgUkYgZ2FpbiAuNSBhZnRlciA2MjkzKi8KKworICAga2FsX3VpbnQ4ICAgZml4X3BnYV9nYWluW01BWF9NUUNfUFdSX0NPVU5UXTsgICAgLyogZml4IHBnYSBnYWluIGZvciBBUEMgY2FsaWJyYXRpb24gKi8KKyAgIGthbF91aW50OCAgIGZpeF9scG1bTUFYX01RQ19QV1JfQ09VTlRdOyAgICAgICAgIC8qIGZpeCBMUE0gZm9yIEFHQyBjYWxpYnJhdGlvbiAqLworICAga2FsX3VpbnQ4ICAgcnhfZWxuYV9ieXBhc3NbTUFYX01RQ19QV1JfQ09VTlRdOworICAga2FsX3VpbnQ4ICAgcnhkX2VsbmFfYnlwYXNzW01BWF9NUUNfUFdSX0NPVU5UXTsKKyAgIGthbF91aW50OCAgIHJ4X2VsbmFfbW9kZTsKKyAgIGthbF91aW50OCAgIHJ4ZF9lbG5hX21vZGU7CisKKyAgIGthbF91aW50OCAgIHJ4X2NhbF9zZXF1ZW5jeVtNQVhfTVFDX1BXUl9DT1VOVF07CisgICBrYWxfaW50MTYgICByeF9jYWxfZGxfcG93ZXJbTUFYX01RQ19QV1JfQ09VTlRdOworLy8gICBrYWxfdWludDggICBsbmFfZ2Fpbl9zdGFydF9pZHg7CisvLyAgIGthbF91aW50OCAgIGNhbF9udW07CisvLyAgIGthbF91aW50OCAgIHJvdXRlX3NldHRpbmdbM107Cit9IFVMMVRTVENtZE1RQzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MzIgICAgICAgICAgbGlkOyAgICAgIC8vIHRoZSBsaWQgaXMgbmVlZGVkIHRvIHVwZGF0ZSBydW4tdGltZSB2YWx1ZQorICAga2FsX3VpbnQzMiAgICAgICAgICBlZ19wdHI7ICAgLy8gdGhlIGV2ZW50IGdyb3VwIHBvaW50ZXIgdXNlZCB0byBub3RpZnkgcnVudC10aW1lIHVwZGF0ZSBmaW5pc2gKK30gVUwxVFNUQ21kUmVsb2FkTlZSQU07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiBtZWFzdXJlX2NvdW50OyAgICAvKjwhIHNwZWNpZnkgdGhlIG1lYXN1cmVtZW50IGNvdW50IFVMMUQgd2lsbCBkbyB0aGUgbWVhc3VyZW1lbnQgbWVhc3VyZV9jb3VudCB0aW1lcyAqLworfSBVTDFUU1RDbWRHZXRSZlRlbXBTZW5zb3I7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIGthbF91aW50MTYgcmZfYmFuZF9pZHg7CisgICAga2FsX3VpbnQxNiBwb3dlcl9sZXZlbF9udW07CisgICAga2FsX3VpbnQxNiBjb2RlX3dvcmRfbnVtOworfQorVUwxVFNUQ21kU2V0TWlwaUNvZGVXb3JkOworCisKK3R5cGVkZWYgdW5pb24KK3sKKyAgIFVMMVRTVENtZFR4QWNjZXNzICAgdHhhY2Nlc3M7CisgICBVTDFUU1RDbWRUeERQQ2ggICAgIHR4ZHBjaDsJLy9BbnRob255CisgICBVTDFUU1RDbWRSeERQQ2ggICAgIHJ4ZHBjaDsKKyAgIFVMMVRTVENtZFJTU0kgICAgICAgcnNzaTsKKyAgIFVMMVRTVENtZFJTQ1AgICAgICAgcnNjcDsJCisgICBVTDFUU1RDbWRBRkMgICAgICAgIGFmYzsgICAgLy9hbnRob255IDA1MTQKKyAgIFVMMVRTVENtZE1RQwkgICAgICAgbXFjOwkKKyAgIFVMMVRTVENtZE5TRlQgICAgICAgbnNmdDsKKyAgIFVMMVRTVENtZExJU1RNT0RFICAgbGlzdG1vZGU7IC8vZm9yIGxpc3QgbW9kZQorICAgVUwxVFNUQ21kUmVsb2FkTlZSQU0gcmVsb2FkOworICAgVUwxVFNUQ21kR2V0UmZUZW1wU2Vuc29yIHJmVGVtcGVyYXR1cmU7ICAvKjwhIFVMMVRTVF9DTURfR0VUX1JGX1RFTVAgKi8KKyAgIGthbF91aW50OCAgICAgICAgICAgaXNfUGFEcmlmdDsgICAvLyBQQSBkcmZpdCBjb21wZW5zYXRpb24gc3dpdGNoIG1lc3NhZ2UKKyAgIGthbF91aW50OCAgICAgICAgICAgcnhkTW9kZTsgICAgICAvKio8IFxicmllZiBSOCBzZXQgcnggcGF0aDogMDpub25lIDE6bWFpbiAyOmRpdmVyc2l0eTogMzogYm90aCAqLworICAga2FsX2ludDMyICAgICAgICAgICByeF9jZWxsX3Bvd2VyOy8vIGNvbmZpZ3VyZSB0aGUgUnggY2VsbCBwb3dlciBiZWZvcmUgY2VsbCBzZWFyY2guIHVpbnRzOnFkYm0KKyAgIGthbF91aW50OCAgICAgICAgICAgbWlwaV9yZl9iYW5kOworICAga2FsX3VpbnQ4ICAgICAgICAgICBmZGRfbW9kZV9zZXR1cDsgICAvLyAgMSA6IFVCSU4gbW9kZSBJbml0IDNHIEZERCAsICAgICAgMCA6IFVCSU4gbW9kZSBkZS1pbml0IDNHIEZERCAgICAgICAKKyAgIFVMMVRTVENtZFNldE1pcGlDb2RlV29yZCBzZXRNaXBpUGFDd1BhcmFtOworfSBVTDFUU1RDbWRQYXJhbTsKKworI2RlZmluZSAgSVNfTUVUQV9DQV9TVVBQT1JUIDAKKworI2RlZmluZSAgSVNfQVJYX0xQTV9TVVBQT1JUIDEKKworLy8gRm9yIENBIGVudW0gCisKK3R5cGVkZWYgZW51bQoreworCVZDT19TUlhfU0VMX0lOVkFMSUQgPSAwLAorCVZDT19TUlhfU0VMX1NSWAkJPSAxLAkKKwlWQ09fU1JYX1NFTF9WQ08gICAgID0gMiwKK30gVUwxVFNUVmNvU3J4U2VsOworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgICAgICAgdmNvX2NmZzsKKwlrYWxfdWludDggICAgICAgICBzcnhfY2ZnOworCWthbF91aW50OAkJICBsbmFfcG9ydDsKKwlrYWxfdWludDgJCSAgbG5hX2dyb3VwOworfSBVTDFUU1RWY29TcnhMbmFDZmc7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgICAgICAgCWJhbmQ7CisJa2FsX3VpbnQ4ICAgICAgICAgCXBhZGRpbmdbM107CisJVUwxVFNUVmNvU3J4TG5hQ2ZnCWNmZ1szXTsKK30gVUwxVFNUU2V0dGluZ0J5QmFuZDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggICAgICAgICBiYW5kOworCWthbF91aW50OAkJICBjbHM7CisJa2FsX3VpbnQ4CQkgIHZjb19jZmc7CisJa2FsX3VpbnQ4IAkJICBzcnhfY2ZnOwkKKwlrYWxfdWludDgJICAJICBsbmFfcG9ydDsKKwlrYWxfdWludDggICAgICAgICBsbmFfZ3JvdXA7Cit9IFVMMVRTVENhUm91dGVEZXM7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJVUwxVFNUQ2FSb3V0ZURlcyAgICAgIGNmZ1syXTsKK30gVUwxVFNUQ2FDb21iaW5lRGVzOworCit0eXBlZGVmIHN0cnVjdAoreworCWthbF91aW50OCAgICAgICAgICBiYW5kOworCWthbF91aW50OCAgICAgICAgICBjbHM7Cit9IFVMMVRTVEJhbmRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgICAgICAgICAgY2NfbnVtOworICAga2FsX3VpbnQ4ICAgICAgICAgICB1c2VkX2JhbmQ7CisgICBVTDFUU1RCYW5kQ2xhc3MJICAgY2Nfc2V0dGluZ1syXTsKK30gVUwxVFNUUnhVc2FnZURlczsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgICAgICAgICAgc2NlbmFyaW87CisJa2FsX3VpbnQ4CQkJY2Nfcnhfcm91dGVfaWR4WzJdOworCWthbF91aW50OCAgICAgICAgICAgY2NfdHhfcm91dGVfaWR4OworCit9IFVMMVRTVFVzYWdlTWFwVGFibGU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICAgICAgICAgYmFuZDsKKyAgIGthbF91aW50OCAgICAgICAgICBpbmRleFszXTsKK30gVUwxVFNUU3VwcG9ydENhQ29tYlRibElkeDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgICAgICAgICBiYW5kOworICAga2FsX3VpbnQ4ICAgICAgICAgIHJvdXRlX2lkeDsKKyAgIGthbF91aW50OCAgICAgICAgICB1c2dfc3RhcnRfaWR4OworICAga2FsX3VpbnQ4ICAgICAgICAgIHVzZ19zdG9wX2lkeDsKK30gVUwxVFNUVXNhZ2VFbG07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBVTDFUU1RVc2FnZUVsbSAgICBzYjsKKyAgIFVMMVRTVFVzYWdlRWxtICAgIGNhWzJdOworfSBVTDFUU1RTdXBwb3J0UnhVc2FnZUJ5QmFuZDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICAgICAgICB0Ymxfb2Zmc2V0OworICAga2FsX3VpbnQxNiAgICAgICAgIHRibF9zaXplOworfSBVTDFUU1RWYXJUYmxJbmZvOworCit0eXBlZGVmIHN0cnVjdAoreworCWthbF91aW50MzIgCQkJCQkJCXN1cHBvcnRfcm91dGVfYml0bWFwOworCWthbF91aW50MzIgCQkJCQkJCXVtdHNfdmNvX3NyeF9zZWw7CisJVUwxVFNUU2V0dGluZ0J5QmFuZCAgICAgICAgICAgICAgICAgc3VwcG9ydF92Y29fc3J4X2xuYV9jZmdbNV07CisJVUwxVFNUVmFyVGJsSW5mbyAgICAgICAgICAgICAgICAgICAgY2FfY29tYl90YmxfaW5mbzsKKwlVTDFUU1RTdXBwb3J0Q2FDb21iVGJsSWR4IAkJCXN1cHBvcnRfY2FfdGJsX2lkeFs1XTsKKwlVTDFUU1RWYXJUYmxJbmZvCQkJCQlyeF91c2FnZV90YmxfaW5mbzsKKwlVTDFUU1RTdXBwb3J0UnhVc2FnZUJ5QmFuZCAJCQlzdXBwb3J0X3J4X3VzZV9ieV9iYW5kWzVdOworfSBVTDFUU1RDYUNvbmZpZzsKKworCisKKy8vUmVzdWx0Cit0eXBlZGVmIHN0cnVjdAoreworCWthbF9ib29sCW9rOworCWthbF91aW50OAludW1fZnJlcTsKKwlrYWxfaW50MTYJZGxfZnJlcVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKwlrYWxfaW50MzIJcnNzaVsgRkREX01BWF9GUkVRX0xJU1QgXTsJCisJa2FsX2ludDE2CXNjY19kbF9mcmVxWyBGRERfTUFYX0ZSRVFfTElTVCBdOworCWthbF9pbnQzMglzY2NfcnNzaVsgRkREX01BWF9GUkVRX0xJU1QgXTsKK30gVUwxVFNUUmVzdWx0UlNTSTsKKworLy8gUjggZ2V0IGJvdGggcnggcGF0aCBSU1NJIHJlc3VsdAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgIG9rOworICAga2FsX3VpbnQ4ICAgbnVtX2ZyZXE7CisgICBrYWxfaW50MTYgICBkbF9mcmVxWyBGRERfTUFYX0ZSRVFfTElTVCBdOworICAga2FsX2ludDMyICAgcnNzaVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKyAgIGthbF9pbnQzMiAgIHJzc2lfcnhkWyBGRERfTUFYX0ZSRVFfTElTVCBdOworICAga2FsX2ludDE2ICAgc2NjX2RsX2ZyZXFbIEZERF9NQVhfRlJFUV9MSVNUIF07CisgICBrYWxfaW50MzIgICBzY2NfcnNzaVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKyAgIGthbF9pbnQzMiAgIHNjY19yc3NpX3J4ZFsgRkREX01BWF9GUkVRX0xJU1QgXTsKKworICAga2FsX3VpbnQ4ICAgcnhfTE5BbW9kZVtGRERfTUFYX0ZSRVFfTElTVF07CisgICBrYWxfdWludDggICByeGRfTE5BbW9kZVtGRERfTUFYX0ZSRVFfTElTVF07Cit9IFVMMVRTVFJlc3VsdFJTU0lSeEQ7CisKK3R5cGVkZWYgc3RydWN0Cit7CQorCWthbF91aW50MTYJcHNjOwkJLyogUHJpbWFyeSBzY3JhbWJsaW5nIGNvZGUgKi8KKwlrYWxfaW50MzIJdG07CQkvKiBDZWxsIGZyYW1lIGJvdW5kYXJ5IG9mZnNldCB0byBMU1QgKi8KKwlrYWxfaW50MTYJb2ZmOwkJLyogQ2VsbCBmcmFtZSBudW1iZXIgb2Zmc2V0IHRvIExTVCAqLwkKKwlrYWxfYm9vbAlzdHRkOyAJCS8qIFRydWUgZm9yIFNUVEQgdXNlZC4gKi8KKwlrYWxfdWludDgJc2FtcGxlX251bTsKKwlrYWxfaW50MTYJcnNjcF9zdW07ICAgLy9rYWxfdWludDgJcnNjcF9zdW07CisJa2FsX2ludDE2IGZyZXFfZXJyb3I7CS8vYW50aG9ueSAwNTE0CQorfSBVTDFUU1RfY3BpY2hfcmVzdWx0X1Q7CisKKyNkZWZpbmUgTUFYX05VTV9NRUFTX0NFTEwgMzIKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgb2s7CisJa2FsX3VpbnQ4ICAgICAgICAgICAgICAgbnVtX2NlbGw7CisJVUwxVFNUX2NwaWNoX3Jlc3VsdF9UICAgY3BpY2hfcmVzdWx0WyBNQVhfTlVNX01FQVNfQ0VMTCBdOwkKK30gVUwxVFNUUmVzdWx0UlNDUDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICAgb2s7CisgICAga2FsX3VpbnQxNiAgIHBzYzsgICAgICAgLyogUHJpbWFyeSBzY3JhbWJsaW5nIGNvZGUgKi8KKyAgICBrYWxfaW50MzIgICAgdG07CQkgICAgLyogQ2VsbCBmcmFtZSBib3VuZGFyeSBvZmZzZXQgdG8gTFNUICovCisgICAga2FsX2Jvb2wgICAgIHN0dGQ7ICAgICAgLyogVHJ1ZSBmb3IgU1RURCB1c2VkLiAqLworICAgIGthbF91aW50OCAgICByc2NwX3N1bTsKKyAgICBrYWxfaW50MTYgICAgZnJlcV9lcnJvcjsKK30gVUwxVFNUUmVzdWx0QUZDOworICAgCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICBvazsKKyAgICBrYWxfdWludDE2ICAgcHNjOwkJICAgIC8qIFByaW1hcnkgc2NyYW1ibGluZyBjb2RlICovCisgICAga2FsX2ludDMyICAgIHRtOwkJICAgIC8qIENlbGwgZnJhbWUgYm91bmRhcnkgb2Zmc2V0IHRvIExTVCAqLworICAgIGthbF9ib29sICAgICBzdHRkOyAJICAgICAgICAvKiBUcnVlIGZvciBTVFREIHVzZWQuICovCisgICAga2FsX3VpbnQ4ICAgIHJzY3Bfc3VtOworICAgIGthbF9pbnQzMiAgICBmcmVxX2Vycm9yOworfSBVTDFUU1RSZXN1bHRBRkNfRVhUOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgICBvazsKKyAgIGthbF91aW50MzIgICAgYmVyOwkgICAgICAvKiBTcGVjIHJlcXVpcmVtZW50PTEwXi0zLiBXZSB3aWxsIGNvdW50IDEwXjUgZnJhbWVzKDEwMCB0aW1lcyBzcGVjIHJlcXVpcmVtZW50KSBmb3IgQkVSIGNhbGN1bGF0aW9uLiBPbmx5IGNvdW50IGZvciB0aGUgb25seSBUUkNoIGZvciBEUERDaC4gKi8KK30gVUwxVFNUUmVzdWx0UnhEUENoOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgIG9rOworICAgIGthbF91aW50OCAgIGxpbmtfc3RhdHVzOworfSBVTDFUU1RSZXN1bHROU0ZUOworCisvLyNkZWZpbmUgTUFYX01RQ19SU1NJX0NPVU5UIDQwMAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgb2s7CisgICAvKiBmcmVxLXB3ciB0YWJsZSAqLworICAga2FsX3VpbnQ4ICBmcmVxX2NvdW50OworICAga2FsX3VpbnQ4ICBwd3JfY291bnQ7CisgICBrYWxfdWludDggIGZyZXFfc3RhcnRfaWR4OworICAga2FsX3VpbnQ4ICBwd3Jfc3RhcnRfaWR4OworICAga2FsX3VpbnQ4ICByeF9sbmFfbW9kZVtNQVhfTVFDX1JTU0lfQ09VTlRdOyAvLyAwOiBoaWdoLCAxOiBtaWRkbGUsIDI6IGxvdworICAga2FsX2ludDE2ICByc3NpW01BWF9NUUNfUlNTSV9DT1VOVF07CQorICAga2FsX3VpbnQ4ICByeGRfbG5hX21vZGVbTUFYX01RQ19SU1NJX0NPVU5UXTsgLy8gMDogaGlnaCwgMTogbWlkZGxlLCAyOiBsb3cKKyAgIGthbF9pbnQxNiAgcnNzaV9yeGRbTUFYX01RQ19SU1NJX0NPVU5UXTsKKyAgIGthbF91aW50MTYgcHdyX2RldF92YWx1ZVtNQVhfTVFDX0ZSRVFfQ09VTlRdWzNdOworICAga2FsX2ludDE2ICBtcWNfdHhfZ3ZnYWJiMF9yZXBvcnRbTUFYX01RQ19SU1NJX0NPVU5UXTsKKyAgIC8qICB7cGRfbWVhcy1QQV9oaWdoLCBwZF9tZWFzLVBBX21pZCwgcGRfbWVhcy1QQV9sb3d9LCAvL2ZyZXEtMQorICAgICogIHtwZF9tZWFzLVBBX2hpZ2gsIHBkX21lYXMtUEFfbWlkLCBwZF9tZWFzLVBBX2xvd30sIC8vZnJlcS0yCisgICAgKiAgLi4uCisgICAgKiAge3BkX21lYXMtUEFfaGlnaCwgcGRfbWVhcy1QQV9taWQsIHBkX21lYXMtUEFfbG93fSwgLy9mcmVxLWZyZXFfY291bnQKKyAgICAqLworfSBVTDFUU1RSZXN1bHRNUUNPY3RMZXY7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgIG9rOworICAgLyogZnJlcS1wd3IgdGFibGUgKi8KKyAgIGthbF91aW50OCAgZnJlcV9jb3VudDsKKyAgIGthbF91aW50OCAgcHdyX2NvdW50OworICAga2FsX3VpbnQ4ICBmcmVxX3N0YXJ0X2lkeDsKKyAgIGthbF91aW50OCAgcHdyX3N0YXJ0X2lkeDsKKyAgIGthbF9pbnQxNiAgcnNzaVtNQVhfTVFDX1JTU0lfQ09VTlRdOwkKKyAgIGthbF91aW50MTYgcHdyX2RldF92YWx1ZVtNQVhfTVFDX0ZSRVFfQ09VTlRdOworICAgLyogIHtSU1NJLTEsIFJTU0ktMiwgLi4uICwgUlNTSS1wd3Jjb3VudH0sIC8vZnJlcS0xCisgICAgKiAge1JTU0ktMSwgUlNTSS0yLCAuLi4gLCBSU1NJLXB3cmNvdW50fSwgLy9mcmVxLTIKKyAgICAqICAuLi4KKyAgICAqICB7UlNTSS0xLCBSU1NJLTIsIC4uLiAsIFJTU0ktcHdyY291bnR9LCAvL2ZyZXEtZnJlcV9jb3VudAorICAgICogIFNhbWUgZm9yIHBvd2VyIGRldGVjdG9yLgorICAgICovCit9IFVMMVRTVFJlc3VsdE1RQzsKKworLy9mb3IgbGlzdCBtb2RlCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4IHN0YXR1czsKKyAgIGthbF91aW50OCBjdXJyZW50X2lkeDsKKyAgIGthbF9pbnQxNiAgdG90YWxfYml0c1tNQVhfTE1fVkFMSURfRlJFUV1bMl07CQkvLzA6cmVhbCBiZXIgdGVzdC4gMTpkZWJ1ZyBiZWZvcmUgYmVyIHRlc3QKKyAgIGthbF9pbnQxNiAgZXJyb3JfYml0c1tNQVhfTE1fVkFMSURfRlJFUV1bMl07CisgICBrYWxfaW50MTYgIHJzc2lbTUFYX0xNX1ZBTElEX0ZSRVFdWzNdOwkJCS8vUlNTSSBhdCAzIExOQSBtb2RlCisgICBrYWxfaW50MTYgIHJzc2lfcnhkW01BWF9MTV9WQUxJRF9GUkVRXVszXTsJCS8vUlNTSSBSWEQgYXQgMyBMTkEgbW9kZSAKKyAgIGthbF9pbnQ4ICBsbmFtb2RlWzNdOworfSBVTDFUU1RSZXN1bHRMaXN0TW9kZTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICBvazsgICAgLyo8ISBvayBpbmRpY2F0b3IgKi8KKyAgICBrYWxfdWludDMyICBzdW07ICAgLyo8ISB0aGUgc3VtIG9mIG1lYXN1cmVfY291bnQgdGltZXMgb2YgdGVtcCBzZW5zb3IgcmVzdWx0ICovCit9IFVMMVRTVFJlc3VsdEdldFJmVGVtcFNlbnNvcjsKKworLyogRE8gTk9UIE1vZGlmeSB0aGUgZGVmaW5pdGlvbiBvZiBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gKi8KK3R5cGVkZWYgIHN0cnVjdAoreworICAgIGthbF91aW50MzIgaXNfY2FwYWJsZToxOyAgICAgIC8qPCEgdGhlIGluZGljYXRvciB0byBpbmRpY2F0ZSBpZiB0aGlzIGl0ZW0gaXMgc3VwcG9ydGVkIGJ5IFNXIG9yIEhXICovCisgICAga2FsX3VpbnQzMiBpc19tYW5kYXRvcnk6MTsgICAgLyo8ISB0aGUgaW5kaWNhdG9yIHRvIGluZGljYXRlIGlmIHRoaXMgaXRlbSBpcyBtYW5kYXRvcnkgdG8gYmUgY2FsaWJyYXRlZCAqLworICAgIGthbF91aW50MzIgcGFyYW1ldGVyczozMDsgICAgIC8qPCEgcGFyYW1ldGVyIHRvIGJlIGNhcnJpZWQgdG8gdG9vbCBzaWRlICovCit9IFVMMVRTVENhbGlicmF0aW9uSXRlbTsKKworLyogRE8gTk9UIE1vZGlmeSB0aGUgbWVtYmVyIG9yZGVyIG9mIFVMMVRTVENhbGlicmF0aW9uSXRlbVNldCwgSXRlbXMgbXVzdCBiZSBhZGRlZCB0byB0aGUgZW5kICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSB0YWRjX2NhbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qWyAwXSBUQURDIGNhbGlicmF0aW9uIGNhcGFiaWxpdHkgKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSBtdWx0aV9yYXRfdGFkY19iaXRtYXA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qWyAxXSBiaXQgbWFwIG9mIG11bHRpLXJhdCBUQURDIGNhbGlicmF0aW9uICovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gbXVsdGlfcmF0X2FmY19iaXRtYXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKlsgMl0gYml0IG1hcCBvZiBtdWx0aS1yYXQgQUZDIGNhbGlicmF0aW9uICovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gbWlwaV9wYV9sZXZlbF9hbmRfY3dfbnVtOyAgICAgICAgICAgICAgICAgICAgICAvKlsgM10gTnVtYmVyIG9mIE1JUEkgUEEgQ1cgKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSB0ZW1wZXJhdHVyZV9pbmZvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qWyA0XSAgKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSBsaXN0X21vZGVfc3VwcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qWyA1XSBUYXJnZXQgc3VwcG9ydCBsaXN0IG1vZGUgQVBJOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpICovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gdGhlcm1hbF9zZW5zb3JfdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlsgNl0gVGFyZ2V0IHN1cHBvcnQgdGVtcCBzZW5zb3IgdHlwZTsgaXNfY2FwYWJsZSAoMDogbm90IHN1cHBvcnRlZCwgMTogc3VwcG9ydGVkKSBwYXJhbWV0ZXIgKDA6IGludGVybmFsLCAxOiBleHRlcm5hbCkgKi8gCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gdWJpbl9tb2RlX3N3aXRjaF9zdXBwb3J0OyAgICAgICAgICAgICAgICAgICAgICAvKlsgN10gICovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gbnZyYW1fYWNjZXNzX2ludGVyZmFjZTsgICAgICAgICAgICAgICAgICAgICAgICAvKlsgOF0gVGFyZ2V0IHN1cHBvcnQgbnZyYW0gYWNjZXNzIEFQSSBieSB1bDF0c3QgOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpICovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gcnhfZ2Fpbl9scG1fc3VwcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlsgOV0gVGFyZ2V0IHN1cHBvcnQgUlggbG93IHBvd2VyIGdhaW4gbW9kZSA7IGlzX2NhcGFibGUgKDA6IG5vdCBzdXBwb3J0ZWQsIDE6IHN1cHBvcnRlZCkgKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSBuc2Z0X2dldF9SU1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qWzEwXSBUYXJnZXQgc3VwcG9ydCBnZXQgUlNTSSBkdXJpbmcgTlNGVCBmbG93IDsgaXNfY2FwYWJsZSAoMDogbm90IHN1cHBvcnRlZCwgMTogc3VwcG9ydGVkKSovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gcHJmX3NlbGVjdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlsxMV0gVGFyZ2V0IHN1cHBvcnQgcHJmIHNlbGVjdCBtb2RpZnkgOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSBuc2Z0X3Jlc2V0X2Jlcl9yZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qWzEyXSBUYXJnZXQgc3VwcG9ydCBOU0ZUIHJlc2V0IEJFUiByZXN1bHQgOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSBlbG5hX2FkZGl0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qWzEzXSBUYXJnZXQgUFJYIHN1cHBvcnQgZUxOQSBhZGRpdGlvbiA7IGlzX2NhcGFibGUgKDA6IG5vdCBzdXBwb3J0ZWQsIDE6IHN1cHBvcnRlZCkqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIGFwY19leHRlbmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypbMTRdIFRhcmdldCBzdXBwb3J0IEFQQyBjYWxpYnJhdGlvbiBleHRlbmQgOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSBlbG5hX2FkZGl0aW9uX2RpdmVyc2l0eV9wYXRoOyAgICAgICAgICAgICAgICAgIC8qWzE1XSBUYXJnZXQgRFJYIHN1cHBvcnQgZUxOQSBhZGRpdGlvbiA7IGlzX2NhcGFibGUgKDA6IG5vdCBzdXBwb3J0ZWQsIDE6IHN1cHBvcnRlZCkqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIGNhbmNlbF9wb2xsaW5nX2FjdGlvbl93aGVuX2dldF9maGNfcmVzdWx0OyAgICAgLypbMTZdIFRhcmdldCByZW1vdmUgcG9sbGluZyBhY3Rpb24gd2hlbiBnZXQgRkhDIHJlc3VsdCA7IGlzX2NhcGFibGUgKDA6IG5vdCBzdXBwb3J0ZWQsIDE6IHN1cHBvcnRlZCkqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIHdjZG1hX21kX2NhbF9nZW5lcmF0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLypbMTddIFRhcmdldCByZW1vdmUgcG9sbGluZyBhY3Rpb24gd2hlbiBnZXQgRkhDIHJlc3VsdCA7IGlzX2NhcGFibGUgKDA6IG5vdCBzdXBwb3J0ZWQsIDE6IHN1cHBvcnRlZCkqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIHdjZG1hX2RwZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypbMThdIFRhcmdldCBzdXBwb3J0IFdDRE1BIERQRCA7IGlzX2NhcGFibGUgKDA6IG5vdCBzdXBwb3J0ZWQsIDE6IHN1cHBvcnRlZCkqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIHdjZG1hX2lxX2R1bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypbMTldIFRhcmdldCBzdXBwb3J0IFdDRE1BIEF1dG8gSVEgZHVtcCovCit9IFVMMVRTVENhbGlicmF0aW9uSXRlbVNldDsKKworLyogRE8gTk9UIE1vZGlmeSB0aGUgbWVtYmVyIG9yZGVyIG9mIFVMMVRTVENhbGlicmF0aW9uSXRlbVNldCwgSXRlbXMgbXVzdCBiZSBhZGRlZCB0byB0aGUgZW5kICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyIG1pcGlfcGFfYmFuZF9zdXBwb3J0OyAvKjwhIGJhbmQgc3VwcG9ydCBiaXQgbWFwIG9mIE1JUEkgUEEgKi8KKwlrYWxfdWludDMyIHVlX2NhcGFiaWxpdHlfZXh0MTsgICAvKjwhIDB4MDAwMDAwMDEgOiBzdXBwb3J0IFJYIGdhaW4gc3dlZXAgKi8KK30gVUwxVFNUQ2FwYWJpbGl0eUl0ZW1TZXQ7CisKKy8vKHRoaXMgcGFydCBpcyBwdXQgaW50byBwZWVyIGJ1ZmZlcikKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQzMiBjYXBhYmlsaXR5X2l0ZW1fb2Zmc2V0OyAvKiE8IHRoZSBvZmZzZXQgdmFsdWUgb2YgdGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgVUwxVFNUQ2FwYWJpbGl0eUl0ZW1TZXQgaW4gVUwxVFNUUmZDYXBhYmlsaXR5ICovCisgICAga2FsX3VpbnQzMiBjYWxpYnJhdGlvbl9pdGVtX29mZnNldDsgLyohPCB0aGUgb2Zmc2V0IHZhbHVlIG9mIHRoZSBzdGFydGluZyBhZGRyZXNzIG9mIFVMMVRTVENhbGlicmF0aW9uSXRlbVNldCBpbiBVTDFUU1RSZkNhcGFiaWxpdHkgKi8KKyAgICBVTDFUU1RDYXBhYmlsaXR5SXRlbVNldCBjYXBhYmlsaXR5SXRlbXM7CisgICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtU2V0IGNhbGlicmF0aW9uSXRlbXM7Cit9IFVMMVRTVFJlc3VsdEdldFJmQ2FwYWJpbGl0eTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICBvazsgICAgICAvKjwhIG9rIGluZGljYXRvciAqLworICAgIGthbF91aW50MzIgIGN3TnVtOyAgIC8qPCEgdGhlIE51bWJlciBvZiBNSVBJIFBBIENXdCAqLworfSBVTDFUU1RSZXN1bHRHZXRNaXBpQ3dOdW07CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIGthbF91aW50OCAgc3RhdHVzOworICAgIGthbF91aW50MTYgcG93ZXJfbGV2ZWxfbnVtOworICAgIGthbF91aW50MTYgY29kZV93b3JkX251bTsKK30KK1VMMVRTVFJlc3VsdEdldE1pcGlDb2RlV29yZDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sIG9rOworfQorVUwxVFNUUmVzdWx0U2V0TWlwaUNvZGVXb3JkOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2ludDE2IHN0YXR1czsKKyAgIGthbF9pbnQxNiB0YWRjX2RhYzsKKyAgIGthbF9pbnQxNiB0ZW1wZXJhdHVyZTsKKyAgIGthbF9pbnQxNiB0ZW1wX2lkeDsKK30KK1VMMVRTVFJlc3VsdFRlbXBlcmF0dXJlSW5mbzsKKwordHlwZWRlZiB1bmlvbgoreworICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgb2s7CisgICBVTDFUU1RSZXN1bHRSU1NJICAgICAgICByc3NpOworICAgVUwxVFNUUmVzdWx0UlNTSVJ4RCAgICAgcnNzaV9yeGQ7IC8qKjwgXGJyZWlmIFI4IGdldCBib3RoIHJ4IHBhdGggUlNTSSAqLworICAgVUwxVFNUUmVzdWx0UlNDUCAgICAgICAgcnNjcDsKKyAgIFVMMVRTVFJlc3VsdFJ4RFBDaCAgICAgIHJ4X2RwY2g7ICAgCisgICBVTDFUU1RSZXN1bHRBRkMgICAgICAgICBhZmM7CisgICBVTDFUU1RSZXN1bHRBRkNfRVhUICAgICBhZmNfZXh0OworICAgVUwxVFNUUmVzdWx0TlNGVCAgICAgICAgbnNmdDsKKyAgIFVMMVRTVFJlc3VsdE1RQyAgICAgICAgIG1xYzsKKyAgIFVMMVRTVFJlc3VsdE1RQ09jdExldiAgIG1xY19vY3RsZXY7CisgICBVTDFUU1RSZXN1bHRHZXRSZlRlbXBTZW5zb3IgcmZUZW1wZXJhdHVyZTsKKyAgIFVMMVRTVFJlc3VsdEdldE1pcGlDd051bSAgICBtaXBpUGFDd051bTsKKyAgIFVMMVRTVFJlc3VsdEdldE1pcGlDb2RlV29yZCBtaXBpUGFHZXRDd0RhdGE7CisgICBVTDFUU1RSZXN1bHRTZXRNaXBpQ29kZVdvcmQgbWlwaVBhU2V0Q3dEYXRhOworICAgVUwxVFNUUmVzdWx0VGVtcGVyYXR1cmVJbmZvIHRlbXBlcmF0dXJlX2luZm87Cit9IFVMMVRTVFJlc3VsdFBhcmFtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgLy9rYWxfdWludDggICAgICAgcmVmX2NvdW50OyAvLyBwYXJ0IG9mIExPQ0FMX1BBUkFfSERSCisgICAvL2thbF91aW50MTYgICAgICBtc2dfbGVuOyAgIC8vIHBhcnQgb2YgTE9DQUxfUEFSQV9IRFIKKyAgIExPQ0FMX1BBUkFfSERSCisgICBVTDFUU1RDbWRUeXBlICAgdHlwZTsKKyAgIFVMMVRTVENtZFBhcmFtICBwYXJhbTsKK30gZnRfdWwxdHN0X3JlcV9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgLy9rYWxfdWludDggICAgICAgICByZWZfY291bnQ7IC8vIHBhcnQgb2YgTE9DQUxfUEFSQV9IRFIKKyAgIC8va2FsX3VpbnQxNiAgICAgICAgbXNnX2xlbjsgICAvLyBwYXJ0IG9mIExPQ0FMX1BBUkFfSERSCisgICBMT0NBTF9QQVJBX0hEUgorICAgVUwxVFNUQ21kVHlwZSAgICAgdHlwZTsKKyAgIFVMMVRTVFJlc3VsdFBhcmFtIHBhcmFtOworfSB1bDF0c3RfZnRfY25mX1Q7CisKKy8vI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL3VsMXRzdF9tc2dfZ2VuOTUuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL3VsMXRzdF9tc2dfZ2VuOTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzc2YmZiCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvdWwxdHN0X21zZ19nZW45NS5oCkBAIC0wLDAgKzEsOTk3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgTW9kaWZpY2F0aW9uIE5vdGljZToKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IE1lZGlhVGVrIEluYy4gYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogdWwxdHN0X21zZy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1UNjI2OCBQcm9qZWN0CisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgdWwxdHN0X21zZy5oCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKKyNpZm5kZWYgVUwxVFNUX01TR19ICisjZGVmaW5lIFVMMVRTVF9NU0dfSAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKy8vI2luY2x1ZGUgIm52cmFtX2RhdGFfaXRlbXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKworI2luY2x1ZGUgImZ0X21zZ191bDFyZi5oIgorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLy8jaWZkZWYgTVQ2MjY4VAordHlwZWRlZiBlbnVtCit7CisgICBVTDFUU1RfQ01EX1RYQUNDRVNTID0gMCAgIAorICAgLFVMMVRTVF9DTURfVFhfRFBDSAorICAgLFVMMVRTVF9DTURfUlhfRFBDSAorICAgLFVMMVRTVF9DTURfUlNTSQorICAgLFVMMVRTVF9DTURfUlNTSV9SWEQgIC8qKjwgXGJyZWlmIFI4IGdldCBib3RoIHJ4IHBhdGggUlNTSSAqLworICAgLFVMMVRTVF9DTURfUlNTSV9DT05UCisgICAsVUwxVFNUX0NNRF9SU0NQCisgICAsVUwxVFNUX0NNRF9BRkMgICAgICAvL2FudGhvbnkgMDUxNAorICAgLFVMMVRTVF9DTURfTVFDICAgICAgLy8yMDA4MTExNCBjb25nbywgYWRkIG1zZyBmb3IgbW9iaWxlIHF1aWNrIGNhbGlyYXRpb24KKyAgICxVTDFUU1RfQ01EX05TRlQgCisgICAsVUwxVFNUX0NNRF9IU0RQQV9OU0ZUCisgICAsVUwxVFNUX0NNRF9IU1VQQV9OU0ZUCisgICAsVUwxVFNUX0NNRF9TVE9QIAorICAgLFVMMVRTVF9DTURfTVFDX09DVExFVgorICAgLFVMMVRTVF9DTURfTVFDX0VYVCAgLy9yeGQsIGd2Z2FiYjAKKyAgICxVTDFUU1RfQ01EX0FGQ19FWFQgIC8vQWRkIG1zZyBmb3IgRENYTyB0byBkbyBtdWx0aS1iaW4gZGV0ZWN0aW9uIChpY3NfbW9kZT1DRkVfTU9ERTEpCisgICAsVUwxVFNUX0NNRF9SRUxPQURfTlZSQU0KKyAgICxVTDFUU1RfQ01EX0FOVF9NT0RFICAgICAvKio8IFxicmllZiBSOCBzZXQgcnggcGF0aDogMDpub25lIDE6bWFpbiAyOmRpdmVyc2l0eTogMzogYm90aCAqLworICAgLFVMMVRTVF9DTURfUEFfRFJJRlRfU1dJVENIICAvLyBQQSBkcmlmdCBjb21wZW5zYXRpb24gc3dpdGNoIG1lc3NhZ2UKKyAgICxVTDFUU1RfQ01EX1JYX0NFTExfUE9XRVIgICAgLy8gY29uZmlndXJlIHRoZSBSeCBjZWxsIHBvd2VyIGJlZm9yZSBjZWxsIHNlYXJjaAorICAgLFVMMVRTVF9DTURfR0VUX1JGX1RFTVAgLyoyMCovICAgICAgLy8gR2V0IHRoZSBSRiBUZW1wZXJhdHVyZSBzZW5zb3IgcmVhZGluZyAocGFyYW1ldGVyOlVMMVRTVENtZEdldFJmVGVtcFNlbnNvcikKKyAgICxVTDFUU1RfQ01EX0dFVF9SRl9DQVBBQklMSVRZIC8qMjEqLyAgLy8gR2V0IHRoZSBSRiBjYXBhYmlsaXR5IChubyBwYXJhbWV0ZXIpCisgICAsVUwxVFNUX0NNRF9HRVRfTUlQSV9QQV9DV19OVU1CRVIgLyoyMiovICAgCisgICAsVUwxVFNUX0NNRF9MSVNUX01PREUJLy9mb3IgbGlzdCBtb2RlCisgICAsVUwxVFNUX0NNRF9HRVRfUkZfTUlQSV9DT0RFV09SRCAvKjI0Ki8KKyAgICxVTDFUU1RfQ01EX1NFVF9SRl9NSVBJX0NPREVXT1JEIC8qMjUqLworICAgLFVMMVRTVF9DTURfR0VUX1JGX1RFTVBfSU5GTyAvKjI2Ki8KKyAgICxVTDFUU1RfQ01EX1JYX0dBSU5fU1dFRVAgLyogMjcgKi8KKyAgICxVTDFUU1RfQ01EX0VORAorfSBVTDFUU1RDbWRUeXBlOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYJIHVsX3VhcmZjbjsJCS8qIFVMIHVhcmZjbiByYW5nZTo/Pz8/UmVhZCBmcm9tIE5WUkFNPz8gKDk2MTIgfiA5ODg4KSAqLwkKKyAgICBrYWxfdWludDE2ICBkbF91YXJmY247CisgICAga2FsX3VpbnQxNgkgZGxfcHNjOwkJICAgLyogMH41MTEuICovCisgICAga2FsX3VpbnQ4ICAgc2lnbmF0dXJlOwkgICAvKiAwfjE1LCBmb3Igc2luZ2xlIHNpZ25hdHVyZSBkZWNpc2lvbi4gKi8KKyAgICBrYWxfdWludDggICBwYV9tb2RlOwkgICAvKiAwOiBoaWdoIDE6IG1pZGRsZSAyOiBsb3cgKi8KKyAgICBrYWxfaW50OCAgICBpbml0X3Bvd2VyOwkvKiBBc3N1bWUgY3BpY2hfcnNjcD0wLCB1bF9pbnRlcmZlcmVuY2U9MC4gKi8KKyAgICBrYWxfdWludDggICBwb3dlcl9zdGVwOyAgIC8qIFByZWFtYmxlIHBvd2VyIHJhbXBpbmcgc3RlcC4gMSB+IDhkQiAqLwkKKyAgICBrYWxfdWludDggICBtYXhfcmV0cmFuczsJLyogMX42NCAqLworICAgIGthbF91aW50OCAgIGFzYzsgICAgICAgICAgLyogMH43ICovCit9IFVMMVRTVENtZFR4QWNjZXNzOworCit0eXBlZGVmIHN0cnVjdAoreworICAgLy9rYWxfaW50MTYJZGxfZnJlcTsKKyAgIGthbF9pbnQxNgl1bF9mcmVxOworICAga2FsX2ludDE2CXBzYzsJCSAgICAgICAgLyogMH41MTEuICovCisgICBrYWxfdWludDMyCXNjX2NvZGU7ICAgICAgICAgLyogU2NyYW1ibGluZyBjb2RlICMuIDAgfiAxNjc3NzIxNSAqLworICAga2FsX3VpbnQ4ICAgcG93ZXJfY3RybF9tb2RlOworICAga2FsX3VpbnQ4IAlwYV9tb2RlOworICAga2FsX3VpbnQxNiAJaWR4OworICAga2FsX3VpbnQxNglhZmNfZGFjOworICAga2FsX3VpbnQ4CWRwY2NoX3B3cjsKKyAgIGthbF91aW50OAlkcGRjaF9wd3I7CisJCisgICAvKiBCZWxvdyBmb3IgVUwxRF9SRl9NZXRhX1NldFR4SW5mby4gKi8KKyAgIC8qIEJlbG93IGZvciBzZXRQYUFwY0RhYy4gKi8JCisgICBrYWxfdWludDggCXJmX2JhbmQ7CisgICBrYWxfdWludDggICB2bTE7CisgICBrYWxfdWludDggICB2bTI7CisgICBrYWxfdWludDE2ICBkYzJkY19kYWM7CisgICBrYWxfdWludDE2ICB2Ymlhc19kYWM7CisgICBrYWxfYm9vbCAgICBwd3JfZGV0OworICAga2FsX3VpbnQxNiAJYXBjX2RhYzsKKyAgIGthbF91aW50MTYgIHBhX2RhYzsJCQorfSBVTDFUU1RDbWRUeERQQ2g7CS8vQW50aG9ueQorCit0eXBlZGVmIHN0cnVjdAoreworCWthbF9pbnQxNglkbF9mcmVxOworCWthbF9pbnQxNglwc2M7CS8qIDB+NTExLiAqLworCWthbF91aW50OAlzc2M7CS8qIDB+MTUuICovCisJa2FsX2ludDE2CW92c2Y7CS8qIDB+c2YtMS4gKi8KKwlrYWxfdWludDE2CWFmY19kYWM7CisJCisJLyogQmVsb3cgZm9yIFJGX1NldEJCUnhQYXJhbXMuICovCisJa2FsX2Jvb2wgCWh3QUdDOworCWthbF91aW50OAltb2RlOwkJLyogMDogbW9kZTAsIDE6IG1vZGUxLiAqLworCWthbF9pbnQxNglnYWluOwkJLyogbW9kZTAuICovCisJa2FsX3VpbnQ4CUxOQW1vZGU7CS8qIG1vZGUxLiAwOiBMTkEgbG93LCAxOiBMTkEgbWlkLCAyOiBMTkEgaGlnaC4gKi8KKwlrYWxfdWludDE2CXBnYTsJCS8qIG1vZGUxLiAqLworfSBVTDFUU1RDbWRSeERQQ2g7CisKKy8vZm9yIGxpc3QgbW9kZQorI2RlZmluZSBNQVhfTE1fVkFMSURfRlJFUSA1MAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIC8qIGNvbW1vbiBwYXJhbWV0ZXJzICovCisgICBrYWxfYm9vbCAgIGFmY19kYWNfdmFsaWQ7CisgICBrYWxfdWludDE2CWFmY19kYWM7CisgICBrYWxfdWludDggIGxvb3BiYWNrVHlwZTsvLzA6IG5vIGxvb3BiYWNrLCAxOiBsb29wYmFjayB0eXBlIDEsIDI6IGxvb3BiYWNrIHR5cGUgMgorICAga2FsX3VpbnQ4ICBmcmFtZV9zaGlmdDsvL2RlZmF1bHQ9MCwgZGVwZW5kcyBvbiBUZXN0IE1hY2hpbmUKKyAgIGthbF91aW50OCAgcm1jX3R5cGU7Ly8xOiAxMi4yaywgMjogNjRrLCAzOiAxNDRrLCA0OiAzODRrCisgICBrYWxfdWludDggIGN0ZmNbNF07Ly84OTYwPTAsMSwyLDM7IGNtdTIwMD0wLDIsMSwzCisgICBrYWxfdWludDggIGJpdF9wYXR0ZXJuOy8vMDogc2luZ2xlIGVuZGVkIGJlciBkaXNhYmxlLCAxOiBhbGwgb25lLCAyOiBhbGwgemVybworICAgLyogREwgcGFyYW1ldGVycyAqLworICAga2FsX2ludDE2CWRsX2ZyZXFbTUFYX0xNX1ZBTElEX0ZSRVFdOworICAga2FsX2ludDE2CWRsX3BzYzsvKiAwfjUxMS4gKi8KKyAgIGthbF9pbnQxNglkbF9vdnNmOy8vUk1DMTIuMms6IDwxMjgsIGJ1dCB0ZXN0IHNldCBub3QgYWxsb3cgYWxsIG92c2YsCisJICAgICAgICAgICAgICAgICAvL1JNQzEyLjJrIGRlZmF1bHQgb3ZzZj05CisgICAvKiBVTCBwYXJhbWV0ZXJzICovCisgICBrYWxfaW50MTYJdWxfZnJlcVtNQVhfTE1fVkFMSURfRlJFUV07CisgICBrYWxfdWludDE2CXVsX3RmY2k7CisgICBrYWxfdWludDMyCXVsX3NjX2NvZGU7CS8qIFNjcmFtYmxpbmcgY29kZSAjLiAwIH4gMTY3NzcyMTUgKi8KKyAgIGthbF9ib29sICAgaXFfcHdyX3ZhbGlkOy8vdmFsaWQgZHBjY2gsIGRwZGNoIHBvd2VyCisgICBrYWxfdWludDgJZHBjY2hfcHdyOy8vZGVmYXVsdCA4LCBkZXBlbmRzIG9uIHRlc3RpbmcgcmVxdWlyZW1lbnQKKyAgIGthbF91aW50OAlkcGRjaF9wd3I7Ly9kZWZhdWx0IDE1LCBkZXBlbmRzIG9uIHRlc3RpbmcgcmVxdWlyZW1lbnQKKworICAgLyogY29tbW9uIHBhcmFtZXRlcnMgKi8KKyAgIGthbF91aW50OAl2YWxpZF9mcmVxOyAvL3ZhbGlkIGNvdW50IG9mIGRsL3VsIGZyZXEuCisgICBrYWxfdWludDE2ICAgdGVzdF9pdGVtW01BWF9MTV9WQUxJRF9GUkVRXTsgLy9iaXQwOnJlc2VydmVkLiBiaXQxOnNpbmdsZSBlbmQgQkVSLiBiaXQyOlJTU0kgbWVhc3VyZS4gYml0MzpyZXNlcnZlZC4gYml0NDpyZXNlcnZlZC4gYml0NTpJTFBDX0FCQy4gYml0NjpJTFBDX0VGLiBiaXQ3OklMUENfR0guCQorICAgLyogdGhlIHRpbWUgc2V0dGluZ3MsIHVuaXQgPSBmcmFtZSAqLworICAga2FsX3VpbnQxNiAgIGZ1bGxfdGVzdF90aW1lOy8vdGhlIHRvdGFsIHRpbWUgb2Ygb25lIGZyZXEuCisgICBrYWxfdWludDggICAgcmVhZHlfdGltZTsgLy8gZm9yIGZpcnN0IHN5bmMgYWZ0ZXIgVFggdHJhbnNtaXQKKyAgIGthbF91aW50OAlzeW5jX3RpbWU7IC8vdGhlIHRpbWUgb2Ygc3luYywgZnJvbSBjc19zdGFydCB0byBMQksgaXMgMjYgZnJhbWUKKyAgIGthbF91aW50OCAgICByZXRyaWFsOyAvL2p1c3QgZm9yIGZpcnN0IHN5bmMKKyAgIGthbF91aW50MTYJdGVzdF90aW1lOyAvL3RoZSB0aW1lIG9mIHRlc3QgZm9yIG1heCZtaW4gVFggcG93ZXIgdGVzdHMKKyAgIGthbF91aW50MTYgICByeF9yc3NpX3N0YXJ0X3RpbWVbM107IC8vUlNTSSBzdGFydCB0aW1lIGZvciAzIExOQSBtb2RlCisgICBrYWxfdWludDggICAgcnhfcnNzaV9kdXJhdGlvblszXTsKKyAgIGthbF91aW50MTYgICByeF9iZXJfc3RhcnRfdGltZTsgLy9CRVIgc3RhcnQgdGltZQorICAga2FsX3VpbnQ4ICAgIHJ4X2Jlcl9kdXJhdGlvbjsKKyAgIGthbF91aW50MTYJSUxQQ19BQkNfdGltZTsgLy90aGUgdGltZSBvZiBJTFBDIEFCQworICAga2FsX3VpbnQxNglJTFBDX0VGX3RpbWU7IC8vdGhlIHRpbWUgb2YgSUxQQyBFRgorICAga2FsX3VpbnQxNglJTFBDX0dIX3RpbWU7IC8vdGhlIHRpbWUgb2YgSUxQQyBHSAorICAga2FsX3VpbnQxNgl0cmFuc2l0aW9uX3RpbWU7IC8vdGhlIGxpbWl0YXRpb24gb2YgVUUgc3RhdGUgbWFjaGluZSBpcyA0IGZyYW1lIGF0IGxlYXN0Cit9IFVMMVRTVENtZExJU1RNT0RFOworCit0eXBlZGVmIHN0cnVjdAoreworICAgLyogY29tbW9uIHBhcmFtZXRlcnMgKi8KKyAgIGthbF9ib29sICAgYWZjX2RhY192YWxpZDsKKyAgIGthbF91aW50MTYJYWZjX2RhYzsKKyAgIGthbF91aW50OCAgbG9vcGJhY2tUeXBlOy8vMDogbm8gbG9vcGJhY2ssIDE6IGxvb3BiYWNrIHR5cGUgMSwgMjogbG9vcGJhY2sgdHlwZSAyCisgICBrYWxfdWludDggIGZyYW1lX3NoaWZ0Oy8vZGVmYXVsdD0wLCBkZXBlbmRzIG9uIFRlc3QgTWFjaGluZQorICAga2FsX3VpbnQ4ICBybWNfdHlwZTsvLzE6IDEyLjJrLCAyOiA2NGssIDM6IDE0NGssIDQ6IDM4NGsKKyAgIGthbF91aW50OCAgY3RmY1s0XTsvLzg5NjA9MCwxLDIsMzsgY211MjAwPTAsMiwxLDMKKyAgIGthbF91aW50OCAgYml0X3BhdHRlcm47Ly8wOiBzaW5nbGUgZW5kZWQgYmVyIGRpc2FibGUsIDE6IGFsbCBvbmUsIDI6IGFsbCB6ZXJvCisgICAvKiBETCBwYXJhbWV0ZXJzICovCisgICBrYWxfaW50MTYJZGxfZnJlcTsKKwkga2FsX2ludDE2CWRsX3BzYzsvKiAwfjUxMS4gKi8KKwkga2FsX2ludDE2CWRsX292c2Y7Ly9STUMxMi4yazogPDEyOCwgYnV0IHRlc3Qgc2V0IG5vdCBhbGxvdyBhbGwgb3ZzZiwKKwkgICAgICAgICAgICAgICAgIC8vUk1DMTIuMmsgZGVmYXVsdCBvdnNmPTkKKwkgLyogVUwgcGFyYW1ldGVycyAqLworICAga2FsX2ludDE2CXVsX2ZyZXE7CisgICBrYWxfdWludDE2CXVsX3RmY2k7CisJIGthbF91aW50MzIJdWxfc2NfY29kZTsJLyogU2NyYW1ibGluZyBjb2RlICMuIDAgfiAxNjc3NzIxNSAqLworCSBrYWxfYm9vbCAgIGlxX3B3cl92YWxpZDsvL3ZhbGlkIGRwY2NoLCBkcGRjaCBwb3dlcgorCSBrYWxfdWludDgJZHBjY2hfcHdyOy8vZGVmYXVsdCA4LCBkZXBlbmRzIG9uIHRlc3RpbmcgcmVxdWlyZW1lbnQKKwkga2FsX3VpbnQ4CWRwZGNoX3B3cjsvL2RlZmF1bHQgMTUsIGRlcGVuZHMgb24gdGVzdGluZyByZXF1aXJlbWVudAorCisJIGthbF91aW50OCAgIHN1YnRlc3Q7IC8vIGZvciBEUEEvVVBBIHVzZQorfSBVTDFUU1RDbWROU0ZUOworCisjZGVmaW5lIEZERF9NQVhfRlJFUV9MSVNUIDM2Cit0eXBlZGVmIHN0cnVjdAoreworCWthbF91aW50OAludW1fZnJlcTsKKwlrYWxfaW50MTYJZGxfZnJlcVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKwlrYWxfaW50MTYJc2NjX2RsX2ZyZXFbIEZERF9NQVhfRlJFUV9MSVNUIF07CisJa2FsX2ludDE2ICAgc2V0dGluZ3M7ICAgIC8vICBQQ0MgIFNSWC9MTkEgU2V0dGluZ3MKKwlrYWxfdWludDggICBzcnhjZmc7CisJa2FsX3VpbnQ4CXZjb2NmZzsKKwlrYWxfdWludDggICBsbmFwb3J0OworCWthbF91aW50OCAgIHRlbXBlcmF0dXJlOworCQorCS8qIEJlbG93IGZvciBSRl9TZXRCQlJ4UGFyYW1zLiAqLworCWthbF9ib29sIAlod0FHQzsKKwlrYWxfdWludDgJbW9kZTsJCS8qIDA6IG1vZGUwLCAxOiBtb2RlMS4gKi8KKwlrYWxfaW50MTYJZ2FpblsyXTsJCS8qIG1vZGUwLiAqLworCWthbF91aW50OAlMTkFtb2RlWzJdOwkvKiBtb2RlMS4gMDogTE5BIGxvdywgMTogTE5BIG1pZCwgMjogTE5BIGhpZ2guICovCisJa2FsX3VpbnQxNglwZ2FbMl07CQkvKiBtb2RlMS4gKi8KKyAgIGthbF91aW50OCAgIGxwbV9tb2RlOyAgIC8qIDA6IG5vcm1hbCBMTkEgZ2FpbiBtb2RlICwgMTogbG93IHBvd2VyIExOQSBnYWluIG1vZGUuICovCisJCisJa2FsX2Jvb2wgcnNzaV9jb250aW51ZTsKK30gVUwxVFNUQ21kUlNTSTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlrYWxfYm9vbAlwc2Nhbl9iZWZvcmVfY2VsbF9zZWFyY2g7CS8qIFRydWUgaWYgVUwxVFNUIG5lZWRzIHBvd2VyIHNjYW4gYmVmb3JlIGNlbGwgc2VhcmNoL1JTQ1AuICovCisJa2FsX2ludDE2CWRsX2ZyZXE7CS8qIFNwZWNpZmljIGRsX2ZyZXEgdG8gZG8gY2VsbCBzZWFyY2guIFZhbGlkIGlmIHBzY2FuX2JlZm9yZV9jZWxsX3NlYXJjaD1GLiAqLworCWthbF91aW50OAlzYW1wbGVfbnVtX3Blcl9jZWxsOworCWthbF9ib29sCXJlYWRfc2ZuOwkvKiBUcnVlIGlmIHdlIG5lZWQgdG8gZG8gU0ZOIG1lYXN1cmVtZW50IGZvciB0aGUgZm91bmQgY2VsbC4gKi8KKwkKKwkvKiBCZWxvdyBmb3IgUkZfU2V0QkJSeFBhcmFtcy4gKi8KKwlrYWxfYm9vbCAJaHdBR0M7CisJa2FsX3VpbnQ4CW1vZGU7CQkvKiAwOiBtb2RlMCwgMTogbW9kZTEuICovCisJa2FsX2ludDE2CWdhaW47CQkvKiBtb2RlMC4gKi8KKwlrYWxfdWludDgJTE5BbW9kZTsJLyogbW9kZTEuIDA6IExOQSBsb3csIDE6IExOQSBtaWQsIDI6IExOQSBoaWdoLiAqLworCWthbF91aW50MTYJcGdhOwkJLyogbW9kZTEuICovCit9IFVMMVRTVENtZFJTQ1A7CisKK3R5cGVkZWYgc3RydWN0Cit7CisvLyBrYWxfYm9vbAlwc2Nhbl9iZWZvcmVfY2VsbF9zZWFyY2g7ICAgICAgLyogVHJ1ZSBpZiBVTDFUU1QgbmVlZHMgcG93ZXIgc2NhbiBiZWZvcmUgY2VsbCBzZWFyY2gvUlNDUC4gKi8KKyAgIGthbF9pbnQxNglkbF9mcmVxOwkgICAgICAgICAgICAgICAvKiBTcGVjaWZpYyBkbF9mcmVxIHRvIGRvIGNlbGwgc2VhcmNoLiBWYWxpZCBpZiBwc2Nhbl9iZWZvcmVfY2VsbF9zZWFyY2g9Ri4gKi8KKy8vIGthbF91aW50OAlzYW1wbGVfbnVtX3Blcl9jZWxsOworLy8ga2FsX2Jvb2wJcmVhZF9zZm47ICAgICAgICAgICAgICAgICAgICAgIC8qIFRydWUgaWYgd2UgbmVlZCB0byBkbyBTRk4gbWVhc3VyZW1lbnQgZm9yIHRoZSBmb3VuZCBjZWxsLiAqLworCQorICAga2FsX2ludDE2ICAgYWZjX2RhYzsKKworICAgLyogQmVsb3cgZm9yIFJGX1NldEJCUnhQYXJhbXMuICovCisgICBrYWxfYm9vbCAJaHdBR0M7CisgICBrYWxfdWludDgJbW9kZTsJCSAgICAgICAgICAgICAgIC8qIDA6IG1vZGUwLCAxOiBtb2RlMS4gKi8KKyAgIGthbF9pbnQxNglnYWluOwkJICAgICAgICAgICAgICAgLyogbW9kZTAuICovCisgICBrYWxfdWludDgJTE5BbW9kZTsJICAgICAgICAgICAgICAgLyogbW9kZTEuIDA6IExOQSBsb3csIDE6IExOQSBtaWQsIDI6IExOQSBoaWdoLiAqLworICAga2FsX3VpbnQxNglwZ2E7ICAgICAgICAgICAgICAgIAkgICAvKiBtb2RlMS4gKi8KK30gVUwxVFNUQ21kQUZDOworCisvLzIwMDgxMTE1IGNvbmdvLCBhZGQgTVFDIGNtZAorI2RlZmluZSBNQVhfTVFDX0ZSRVFfQ09VTlQgMTUgICAgLy8gNjI5MyBuZWVkIDE0IGZyZXF1ZW5jeQorI2RlZmluZSBNQVhfTVFDX1BXUl9DT1VOVCAgMTUgICAgLy8gNjI5MyBuZWVkIDEzIHBvaW50CisjZGVmaW5lIE1BWF9DQUxfQkFORCAgICAgICAxMCAgICAvLyA2MjkzIG5lZWQgNSAgYmFuZAorI2RlZmluZSBNQVhfTVFDX1JTU0lfQ09VTlQgMjAwICAgLy8gNjI5MyBuZWVkIDE1KjE0PTE5NSBwb2ludAorCit0eXBlZGVmIHN0cnVjdAoreworLyogVHggcGFydCBzZXR0aW5ncyAqLworCisvKiBCZWxvdyBmb3IgVUwxRF9SRl9NZXRhX1NldFR4SW5mby4gKi8KKyAgIGthbF9ib29sICAgIG5vX2xvb3BfY3RybDsKKyAgIGthbF91aW50MTYgIGFmY19kYWM7CisvKiBCZWxvdyBmb3Igc2V0UGFBcGNEYWMuICovCisvL2ZvciAzIFBBIG1vZGUsIDA6SCwgMTpNLCAyOkwKKy8vQWRkIFR4IGJhbmQKKyAgIGthbF9ib29sICAgIHB3cl9kZXQ7Ly8wIG9mZi9tYW51YWwgbW9kZSwgMSBvbi9hdXRvIG1vZGUKKy8va2FsX3VpbnQxNiBwd3JfZGV0X3RocmVzaG9sZDsKKyAgIGthbF91aW50OCAgIHBvd2VyX2N0cmxfbW9kZTsvLzE6IEhXLT5PMywgMjogU1ctPjU5RCwgU21hcnRpCisvLyAgIGthbF91aW50OCAgIHZtMVtNQVhfQ0FMX0JBTkRdWzNdOyAgICAgIC8vUEEgcGFyYW0KKy8vICAga2FsX3VpbnQ4ICAgdm0yW01BWF9DQUxfQkFORF1bM107ICAgICAgLy9QQSBwYXJhbQorLy8gICBrYWxfdWludDE2ICBkYzJkY19kYWNbTUFYX0NBTF9CQU5EXVszXTsvL1BBIHBhcmFtCisvLyAgIGthbF91aW50MTYgIHZiaWFzX2RhY1tNQVhfQ0FMX0JBTkRdWzNdOy8vUEEgcGFyYW0KKy8vICAga2FsX2Jvb2wgICAgaW5pdF90eF9vbm9mZjsgICAgICAgICAgICAgLy8wOm9mZiwgMTpvbgorLy8gICBrYWxfYm9vbCAgICByZWFkeV90eF9vbm9mZjsgICAgICAgICAgICAvLzA6b2ZmLCAxOm9uCisvLyAgIGthbF91aW50OCAgIGluaXRfcGFfbW9kZTsKKy8vICAga2FsX3VpbnQ4ICAgcmVhZHlfcGFfbW9kZTsKKy8vICAga2FsX3VpbnQxNiAgaW5pdF9wYV9nYWluOworLy8gICBrYWxfdWludDE2ICByZWFkeV9wYV9nYWluOworLy8gICBrYWxfdWludDE2ICBpbml0X3ZnYV9kYWNfdHBjX2lkeDsKKy8vICAga2FsX3VpbnQxNiAgcmVhZHlfdmdhX2RhY190cGNfaWR4OworCisvKiBSeCBwYXJ0IHNldHRpbmdzICovCisKKy8qIEJlbG93IGZvciBSRl9TZXRCQlJ4UGFyYW1zLiAqLworLy8gRm9yIGhpZ2ggZ2FpbiBjYWwuIEAgaGlnaCBwb3dlcjogcmVwbGFjZSBnYWluIHRhYmxlCisgICBrYWxfdWludDggICB0ZW1wZXJhdHVyZTsKKy8vICAga2FsX2Jvb2wgICAgaHdBR0M7ICAgICAgICAgLy8wOlNXIGdhaW4gbW9kZSwgMTpIVyBBR0MuIEFHQyBtdXN0IG9uIGZvciBSU1NJIG1lYXN1cmUuIEhXIGxpbWl0CisvLyAgIGthbF9pbnQxNiAgIGdhaW5faW5pdDsgICAgIC8qIGZvciBIVyBtb2RlICovCisKKy8qIE1vYmlsZSBRdWljayBDYWxpYnJhdGlvbiBzZXR0aW5ncyAqLworCisvKiBnZW5lcmFsIHNldHRpbmdzICovCisvLyAgIGthbF9ib29sICAgIGluaXRfY29uZGl0aW9uOyAgICAgLy8wOiBtYXhfcHdyLCAxOm1pbl9wd3IKKyAgIGthbF91aW50OCAgIHN0ZXBfZHVyYXRpb247ICAgICAgLy9pbiBzbG90CisvLyAgIGthbF91aW50OCAgIHJlYWR5X2R1cmF0aW9uOyAgICAgLy9pbiBzbG90CisgICBrYWxfdWludDggICByZXR1bmVfZHVyYXRpb247ICAgIC8vaW4gc2xvdAorLy8gICBrYWxfdWludDggICBnYWluX3N0YWJsZV90aW1lOyAgIC8vaW4gc2xvdAorLy8gICBrYWxfdWludDE2ICBtYXhfdmdhX2RhYzsKKy8vICAga2FsX3VpbnQxNiAgbWluX3ZnYV9kYWM7CisvLyAgIGthbF91aW50MTYgIGp1bXBfdmdhX2RhYzsKKworLyogZnJlcS1wd3IgdGFibGUgKi8KKyAgIGthbF91aW50OCAgIGZyZXFfY291bnQ7CisgICBrYWxfdWludDggICBwd3JfY291bnQ7CisgICBrYWxfdWludDggICBmcmVxX3N0YXJ0X2lkeDsKKyAgIGthbF91aW50OCAgIHB3cl9zdGFydF9pZHg7CisgICBrYWxfdWludDggICBocG1fY2FsX3BvaW50OworICAga2FsX3VpbnQ4ICAgbHBtX2NhbF9wb2ludDsKKyAgIAorLy8gICBrYWxfdWludDggICBvZGRfcmVjb3JkOyAgICAgICAgLypmb3IgQW5yaXRzdTg4MjAsIG9ubHkgb2RkIHN0ZXAgKDEsMyw1Li4uc3RhcnQgZnJvbSAxKSBpcyBmb3IgbWVhc3VyZW1lbnQuICAqLworCisvLyAgIGthbF91aW50OCAgIHBhX2dhaW5fc3RhcnRfaWR4OyAvLyBmb3IgTzMgVFBDCisvLyAgIGthbF91aW50OCAgIHBkX2dhaW5fc3RhcnRfaWR4OyAvLyBmb3IgTzMgVFBDCisKKyAgIGthbF91aW50OCAgIGRsX2JhbmQ7IC8vMTpiYW5kMSwgMjpiYW5kMiwgMzpiYW5kMywgNTpiYW5kNQorICAga2FsX3VpbnQ4ICAgdWxfYmFuZDsgLy8xOmJhbmQxLCAyOmJhbmQyLCAzOmJhbmQzLCA1OmJhbmQ1CisgICBrYWxfdWludDE2ICBkbF9mcmVxW01BWF9NUUNfRlJFUV9DT1VOVF07IC8vaW4gdWFyZmNuCisgICBrYWxfdWludDE2ICB1bF9mcmVxW01BWF9NUUNfRlJFUV9DT1VOVF07IC8vaW4gdWFyZmNuCisgICBrYWxfdWludDggICBwYV9tb2RlW01BWF9NUUNfUFdSX0NPVU5UXTsKKyAgIGthbF91aW50MTYgIHZnYV9kYWNfdHBjX2lkeFtNQVhfTVFDX1BXUl9DT1VOVF07Ly9wb3dlcl9jdHJsX21vZGU9SFcsIHRwY19pZHguIFZpY2UgdmVyc2EuCisKKyAgIGthbF91aW50MTYgIHBhX2dhaW5bTUFYX01RQ19QV1JfQ09VTlRdOyAvLyBmb3IgTzMgVFBDCisgICBrYWxfdWludDggICBwZF9nYWluW01BWF9NUUNfRlJFUV9DT1VOVF07IC8vIGZvciBPMyBUUEMKKyAgIGthbF91aW50OCAgIHBhX3NlY3Rpb25bTUFYX01RQ19QV1JfQ09VTlRdOworCisgICBrYWxfdWludDE2ICByeF9sbmFfZ2FpbltNQVhfTVFDX1BXUl9DT1VOVF07ICAgICAvKiBQUlggdG90YWwgUkYgZ2FpbiAuNSBhZnRlciA2MjkzKi8KKyAgIGthbF91aW50MTYgIHJ4ZF9sbmFfZ2FpbltNQVhfTVFDX1BXUl9DT1VOVF07ICAgIC8qIERSWCB0b3RhbCBSRiBnYWluIC41IGFmdGVyIDYyOTMqLworCisgICBrYWxfdWludDggICBmaXhfcGdhX2dhaW5bTUFYX01RQ19QV1JfQ09VTlRdOyAgICAvKiBmaXggcGdhIGdhaW4gZm9yIEFQQyBjYWxpYnJhdGlvbiAqLworICAga2FsX3VpbnQ4ICAgZml4X2xwbVtNQVhfTVFDX1BXUl9DT1VOVF07ICAgICAgICAgLyogZml4IExQTSBmb3IgQUdDIGNhbGlicmF0aW9uICovCisgICBrYWxfdWludDggICByeF9lbG5hX2J5cGFzc1tNQVhfTVFDX1BXUl9DT1VOVF07CisgICBrYWxfdWludDggICByeGRfZWxuYV9ieXBhc3NbTUFYX01RQ19QV1JfQ09VTlRdOworICAga2FsX3VpbnQ4ICAgcnhfZWxuYV9tb2RlOworICAga2FsX3VpbnQ4ICAgcnhkX2VsbmFfbW9kZTsKKworICAga2FsX3VpbnQ4ICAgcnhfY2FsX3NlcXVlbmN5W01BWF9NUUNfUFdSX0NPVU5UXTsKKyAgIGthbF9pbnQxNiAgIHJ4X2NhbF9kbF9wb3dlcltNQVhfTVFDX1BXUl9DT1VOVF07CisgICBrYWxfdWludDggICByeF9nYWluX3RhYmxlOyAgICAgICAvLzA6MThkQiAgMToxMy41ZEIKKyAgIGthbF91aW50OCAgIHJ4ZF9nYWluX3RhYmxlOyAgICAgIC8vMDoxOGRCICAxOjEzLjVkQgorLy8gICBrYWxfdWludDggICBsbmFfZ2Fpbl9zdGFydF9pZHg7CisvLyAgIGthbF91aW50OCAgIGNhbF9udW07CisvLyAgIGthbF91aW50OCAgIHJvdXRlX3NldHRpbmdbM107Cit9IFVMMVRTVENtZE1RQzsKKworI2lmZGVmIF9fUkZfU0NBTl9GT1JfREVTRU5TRV9URVNUX18KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICBzcmNfaWQ7CisgICBrYWxfdWludDggICBiYW5kOworICAga2FsX3VpbnQxNiAgZGxfdWFyZmNuOworICAga2FsX3VpbnQxNiAgdWxfdWFyZmNuOworICAga2FsX2Jvb2wgICAgdHhfb25fZmxhZzsKKyAgIGthbF9pbnQ4ICAgIHR4X3Bvd2VyOworICAga2FsX3VpbnQ4ICAgcmVwZWF0X3RpbWVzOworfVVMMVRTVEVNTVFDOworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDMyICAgICAgICAgIGxpZDsgICAgICAvLyB0aGUgbGlkIGlzIG5lZWRlZCB0byB1cGRhdGUgcnVuLXRpbWUgdmFsdWUKKyAgIGthbF91aW50MzIgICAgICAgICAgZWdfcHRyOyAgIC8vIHRoZSBldmVudCBncm91cCBwb2ludGVyIHVzZWQgdG8gbm90aWZ5IHJ1bnQtdGltZSB1cGRhdGUgZmluaXNoCit9IFVMMVRTVENtZFJlbG9hZE5WUkFNOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgbWVhc3VyZV9jb3VudDsgICAgLyo8ISBzcGVjaWZ5IHRoZSBtZWFzdXJlbWVudCBjb3VudCBVTDFEIHdpbGwgZG8gdGhlIG1lYXN1cmVtZW50IG1lYXN1cmVfY291bnQgdGltZXMgKi8KK30gVUwxVFNUQ21kR2V0UmZUZW1wU2Vuc29yOworCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICBrYWxfdWludDE2IHJmX2JhbmRfaWR4OworICAgIGthbF91aW50MTYgcG93ZXJfbGV2ZWxfbnVtOworICAgIGthbF91aW50MTYgY29kZV93b3JkX251bTsKK30KK1VMMVRTVENtZFNldE1pcGlDb2RlV29yZDsKKworCit0eXBlZGVmIHVuaW9uCit7CisgICBVTDFUU1RDbWRUeEFjY2VzcyAgIHR4YWNjZXNzOworICAgVUwxVFNUQ21kVHhEUENoICAgICB0eGRwY2g7CS8vQW50aG9ueQorICAgVUwxVFNUQ21kUnhEUENoICAgICByeGRwY2g7CisgICBVTDFUU1RDbWRSU1NJICAgICAgIHJzc2k7CisgICBVTDFUU1RDbWRSU0NQICAgICAgIHJzY3A7CQorICAgVUwxVFNUQ21kQUZDICAgICAgICBhZmM7ICAgIC8vYW50aG9ueSAwNTE0CisgICBVTDFUU1RDbWRNUUMJICAgICAgIG1xYzsJCisgICBVTDFUU1RDbWROU0ZUICAgICAgIG5zZnQ7CisgICBVTDFUU1RDbWRMSVNUTU9ERSAgIGxpc3Rtb2RlOyAvL2ZvciBsaXN0IG1vZGUKKyAgIFVMMVRTVENtZFJlbG9hZE5WUkFNIHJlbG9hZDsKKyAgIFVMMVRTVENtZEdldFJmVGVtcFNlbnNvciByZlRlbXBlcmF0dXJlOyAgLyo8ISBVTDFUU1RfQ01EX0dFVF9SRl9URU1QICovCisgICBrYWxfdWludDggICAgICAgICAgIGlzX1BhRHJpZnQ7ICAgLy8gUEEgZHJmaXQgY29tcGVuc2F0aW9uIHN3aXRjaCBtZXNzYWdlCisgICBrYWxfdWludDggICAgICAgICAgIHJ4ZE1vZGU7ICAgICAgLyoqPCBcYnJpZWYgUjggc2V0IHJ4IHBhdGg6IDA6bm9uZSAxOm1haW4gMjpkaXZlcnNpdHk6IDM6IGJvdGggKi8KKyAgIGthbF9pbnQzMiAgICAgICAgICAgcnhfY2VsbF9wb3dlcjsvLyBjb25maWd1cmUgdGhlIFJ4IGNlbGwgcG93ZXIgYmVmb3JlIGNlbGwgc2VhcmNoLiB1aW50czpxZGJtCisgICBrYWxfdWludDggICAgICAgICAgIG1pcGlfcmZfYmFuZDsKKyAgIGthbF91aW50OCAgICAgICAgICAgZmRkX21vZGVfc2V0dXA7ICAgLy8gIDEgOiBVQklOIG1vZGUgSW5pdCAzRyBGREQgLCAgICAgIDAgOiBVQklOIG1vZGUgZGUtaW5pdCAzRyBGREQgICAgICAgCisgICBVTDFUU1RDbWRTZXRNaXBpQ29kZVdvcmQgc2V0TWlwaVBhQ3dQYXJhbTsKK30gVUwxVFNUQ21kUGFyYW07CisKKyNkZWZpbmUgIElTX01FVEFfQ0FfU1VQUE9SVCAwCisKKyNkZWZpbmUgIElTX0FSWF9MUE1fU1VQUE9SVCAxCisKKy8vIEZvciBDQSBlbnVtIAorCit0eXBlZGVmIGVudW0KK3sKKwlWQ09fU1JYX1NFTF9JTlZBTElEID0gMCwKKwlWQ09fU1JYX1NFTF9TUlgJCT0gMSwJCisJVkNPX1NSWF9TRUxfVkNPICAgICA9IDIsCit9IFVMMVRTVFZjb1NyeFNlbDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgICAgICAgIHZjb19jZmc7CisJa2FsX3VpbnQ4ICAgICAgICAgc3J4X2NmZzsKKwlrYWxfdWludDgJCSAgbG5hX3BvcnQ7CisJa2FsX3VpbnQ4CQkgIGxuYV9ncm91cDsKK30gVUwxVFNUVmNvU3J4TG5hQ2ZnOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgICAgICAgIAliYW5kOworCWthbF91aW50OCAgICAgICAgIAlwYWRkaW5nWzNdOworCVVMMVRTVFZjb1NyeExuYUNmZwljZmdbM107Cit9IFVMMVRTVFNldHRpbmdCeUJhbmQ7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgICAgICAgYmFuZDsKKwlrYWxfdWludDgJCSAgY2xzOworCWthbF91aW50OAkJICB2Y29fY2ZnOworCWthbF91aW50OCAJCSAgc3J4X2NmZzsJCisJa2FsX3VpbnQ4CSAgCSAgbG5hX3BvcnQ7CisJa2FsX3VpbnQ4ICAgICAgICAgbG5hX2dyb3VwOworfSBVTDFUU1RDYVJvdXRlRGVzOworCit0eXBlZGVmIHN0cnVjdAoreworCVVMMVRTVENhUm91dGVEZXMgICAgICBjZmdbMl07Cit9IFVMMVRTVENhQ29tYmluZURlczsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlrYWxfdWludDggICAgICAgICAgYmFuZDsKKwlrYWxfdWludDggICAgICAgICAgY2xzOworfSBVTDFUU1RCYW5kQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICAgICAgICAgIGNjX251bTsKKyAgIGthbF91aW50OCAgICAgICAgICAgdXNlZF9iYW5kOworICAgVUwxVFNUQmFuZENsYXNzCSAgIGNjX3NldHRpbmdbMl07Cit9IFVMMVRTVFJ4VXNhZ2VEZXM7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2ICAgICAgICAgIHNjZW5hcmlvOworCWthbF91aW50OAkJCWNjX3J4X3JvdXRlX2lkeFsyXTsKKwlrYWxfdWludDggICAgICAgICAgIGNjX3R4X3JvdXRlX2lkeDsKKworfSBVTDFUU1RVc2FnZU1hcFRhYmxlOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgICAgICAgIGJhbmQ7CisgICBrYWxfdWludDggICAgICAgICAgaW5kZXhbM107Cit9IFVMMVRTVFN1cHBvcnRDYUNvbWJUYmxJZHg7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICAgICAgICAgYmFuZDsKKyAgIGthbF91aW50OCAgICAgICAgICByb3V0ZV9pZHg7CisgICBrYWxfdWludDggICAgICAgICAgdXNnX3N0YXJ0X2lkeDsKKyAgIGthbF91aW50OCAgICAgICAgICB1c2dfc3RvcF9pZHg7Cit9IFVMMVRTVFVzYWdlRWxtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgVUwxVFNUVXNhZ2VFbG0gICAgc2I7CisgICBVTDFUU1RVc2FnZUVsbSAgICBjYVsyXTsKK30gVUwxVFNUU3VwcG9ydFJ4VXNhZ2VCeUJhbmQ7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgICAgICAgdGJsX29mZnNldDsKKyAgIGthbF91aW50MTYgICAgICAgICB0Ymxfc2l6ZTsKK30gVUwxVFNUVmFyVGJsSW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlrYWxfdWludDMyIAkJCQkJCQlzdXBwb3J0X3JvdXRlX2JpdG1hcDsKKwlrYWxfdWludDMyIAkJCQkJCQl1bXRzX3Zjb19zcnhfc2VsOworCVVMMVRTVFNldHRpbmdCeUJhbmQgICAgICAgICAgICAgICAgIHN1cHBvcnRfdmNvX3NyeF9sbmFfY2ZnWzVdOworCVVMMVRTVFZhclRibEluZm8gICAgICAgICAgICAgICAgICAgIGNhX2NvbWJfdGJsX2luZm87CisJVUwxVFNUU3VwcG9ydENhQ29tYlRibElkeCAJCQlzdXBwb3J0X2NhX3RibF9pZHhbNV07CisJVUwxVFNUVmFyVGJsSW5mbwkJCQkJcnhfdXNhZ2VfdGJsX2luZm87CisJVUwxVFNUU3VwcG9ydFJ4VXNhZ2VCeUJhbmQgCQkJc3VwcG9ydF9yeF91c2VfYnlfYmFuZFs1XTsKK30gVUwxVFNUQ2FDb25maWc7CisKKworCisvL1Jlc3VsdAordHlwZWRlZiBzdHJ1Y3QKK3sKKwlrYWxfYm9vbAlvazsKKwlrYWxfdWludDgJbnVtX2ZyZXE7CisJa2FsX2ludDE2CWRsX2ZyZXFbIEZERF9NQVhfRlJFUV9MSVNUIF07CisJa2FsX2ludDMyCXJzc2lbIEZERF9NQVhfRlJFUV9MSVNUIF07CQorCWthbF9pbnQxNglzY2NfZGxfZnJlcVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKwlrYWxfaW50MzIJc2NjX3Jzc2lbIEZERF9NQVhfRlJFUV9MSVNUIF07Cit9IFVMMVRTVFJlc3VsdFJTU0k7CisKKy8vIFI4IGdldCBib3RoIHJ4IHBhdGggUlNTSSByZXN1bHQKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgICBvazsKKyAgIGthbF91aW50OCAgIG51bV9mcmVxOworICAga2FsX2ludDE2ICAgZGxfZnJlcVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKyAgIGthbF9pbnQzMiAgIHJzc2lbIEZERF9NQVhfRlJFUV9MSVNUIF07CisgICBrYWxfaW50MzIgICByc3NpX3J4ZFsgRkREX01BWF9GUkVRX0xJU1QgXTsKKyAgIGthbF9pbnQxNiAgIHNjY19kbF9mcmVxWyBGRERfTUFYX0ZSRVFfTElTVCBdOworICAga2FsX2ludDMyICAgc2NjX3Jzc2lbIEZERF9NQVhfRlJFUV9MSVNUIF07CisgICBrYWxfaW50MzIgICBzY2NfcnNzaV9yeGRbIEZERF9NQVhfRlJFUV9MSVNUIF07CisKKyAgIGthbF91aW50OCAgIHJ4X0xOQW1vZGVbRkREX01BWF9GUkVRX0xJU1RdOworICAga2FsX3VpbnQ4ICAgcnhkX0xOQW1vZGVbRkREX01BWF9GUkVRX0xJU1RdOworfSBVTDFUU1RSZXN1bHRSU1NJUnhEOworCit0eXBlZGVmIHN0cnVjdAorewkKKwlrYWxfdWludDE2CXBzYzsJCS8qIFByaW1hcnkgc2NyYW1ibGluZyBjb2RlICovCisJa2FsX2ludDMyCXRtOwkJLyogQ2VsbCBmcmFtZSBib3VuZGFyeSBvZmZzZXQgdG8gTFNUICovCisJa2FsX2ludDE2CW9mZjsJCS8qIENlbGwgZnJhbWUgbnVtYmVyIG9mZnNldCB0byBMU1QgKi8JCisJa2FsX2Jvb2wJc3R0ZDsgCQkvKiBUcnVlIGZvciBTVFREIHVzZWQuICovCisJa2FsX3VpbnQ4CXNhbXBsZV9udW07CisJa2FsX2ludDE2CXJzY3Bfc3VtOyAgIC8va2FsX3VpbnQ4CXJzY3Bfc3VtOworCWthbF9pbnQxNiBmcmVxX2Vycm9yOwkvL2FudGhvbnkgMDUxNAkKK30gVUwxVFNUX2NwaWNoX3Jlc3VsdF9UOworCisjZGVmaW5lIFVMMV9NQVhfTlVNX01FQVNfQ0VMTCAzMgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICBvazsKKwlrYWxfdWludDggICAgICAgICAgICAgICBudW1fY2VsbDsKKwlVTDFUU1RfY3BpY2hfcmVzdWx0X1QgICBjcGljaF9yZXN1bHRbIFVMMV9NQVhfTlVNX01FQVNfQ0VMTCBdOwkKK30gVUwxVFNUUmVzdWx0UlNDUDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICAgb2s7CisgICAga2FsX3VpbnQxNiAgIHBzYzsgICAgICAgLyogUHJpbWFyeSBzY3JhbWJsaW5nIGNvZGUgKi8KKyAgICBrYWxfaW50MzIgICAgdG07CQkgICAgLyogQ2VsbCBmcmFtZSBib3VuZGFyeSBvZmZzZXQgdG8gTFNUICovCisgICAga2FsX2Jvb2wgICAgIHN0dGQ7ICAgICAgLyogVHJ1ZSBmb3IgU1RURCB1c2VkLiAqLworICAgIGthbF91aW50OCAgICByc2NwX3N1bTsKKyAgICBrYWxfaW50MTYgICAgZnJlcV9lcnJvcjsKK30gVUwxVFNUUmVzdWx0QUZDOworICAgCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICBvazsKKyAgICBrYWxfdWludDE2ICAgcHNjOwkJICAgIC8qIFByaW1hcnkgc2NyYW1ibGluZyBjb2RlICovCisgICAga2FsX2ludDMyICAgIHRtOwkJICAgIC8qIENlbGwgZnJhbWUgYm91bmRhcnkgb2Zmc2V0IHRvIExTVCAqLworICAgIGthbF9ib29sICAgICBzdHRkOyAJICAgICAgICAvKiBUcnVlIGZvciBTVFREIHVzZWQuICovCisgICAga2FsX3VpbnQ4ICAgIHJzY3Bfc3VtOworICAgIGthbF9pbnQzMiAgICBmcmVxX2Vycm9yOworfSBVTDFUU1RSZXN1bHRBRkNfRVhUOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgICBvazsKKyAgIGthbF91aW50MzIgICAgYmVyOwkgICAgICAvKiBTcGVjIHJlcXVpcmVtZW50PTEwXi0zLiBXZSB3aWxsIGNvdW50IDEwXjUgZnJhbWVzKDEwMCB0aW1lcyBzcGVjIHJlcXVpcmVtZW50KSBmb3IgQkVSIGNhbGN1bGF0aW9uLiBPbmx5IGNvdW50IGZvciB0aGUgb25seSBUUkNoIGZvciBEUERDaC4gKi8KK30gVUwxVFNUUmVzdWx0UnhEUENoOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgIG9rOworICAgIGthbF91aW50OCAgIGxpbmtfc3RhdHVzOworfSBVTDFUU1RSZXN1bHROU0ZUOworCisvLyNkZWZpbmUgTUFYX01RQ19SU1NJX0NPVU5UIDQwMAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgb2s7CisgICAvKiBmcmVxLXB3ciB0YWJsZSAqLworICAga2FsX3VpbnQ4ICBmcmVxX2NvdW50OworICAga2FsX3VpbnQ4ICBwd3JfY291bnQ7CisgICBrYWxfdWludDggIGZyZXFfc3RhcnRfaWR4OworICAga2FsX3VpbnQ4ICBwd3Jfc3RhcnRfaWR4OworICAga2FsX3VpbnQ4ICByeF9sbmFfbW9kZVtNQVhfTVFDX1JTU0lfQ09VTlRdOyAvLyAwOiBoaWdoLCAxOiBtaWRkbGUsIDI6IGxvdworICAga2FsX2ludDE2ICByc3NpW01BWF9NUUNfUlNTSV9DT1VOVF07CQorICAga2FsX3VpbnQ4ICByeGRfbG5hX21vZGVbTUFYX01RQ19SU1NJX0NPVU5UXTsgLy8gMDogaGlnaCwgMTogbWlkZGxlLCAyOiBsb3cKKyAgIGthbF9pbnQxNiAgcnNzaV9yeGRbTUFYX01RQ19SU1NJX0NPVU5UXTsKKyAgIGthbF91aW50MTYgcHdyX2RldF92YWx1ZVtNQVhfTVFDX0ZSRVFfQ09VTlRdWzNdOworICAga2FsX2ludDE2ICBtcWNfdHhfZ3ZnYWJiMF9yZXBvcnRbTUFYX01RQ19SU1NJX0NPVU5UXTsKKyAgIC8qICB7cGRfbWVhcy1QQV9oaWdoLCBwZF9tZWFzLVBBX21pZCwgcGRfbWVhcy1QQV9sb3d9LCAvL2ZyZXEtMQorICAgICogIHtwZF9tZWFzLVBBX2hpZ2gsIHBkX21lYXMtUEFfbWlkLCBwZF9tZWFzLVBBX2xvd30sIC8vZnJlcS0yCisgICAgKiAgLi4uCisgICAgKiAge3BkX21lYXMtUEFfaGlnaCwgcGRfbWVhcy1QQV9taWQsIHBkX21lYXMtUEFfbG93fSwgLy9mcmVxLWZyZXFfY291bnQKKyAgICAqLworfSBVTDFUU1RSZXN1bHRNUUNPY3RMZXY7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgIG9rOworICAgLyogZnJlcS1wd3IgdGFibGUgKi8KKyAgIGthbF91aW50OCAgZnJlcV9jb3VudDsKKyAgIGthbF91aW50OCAgcHdyX2NvdW50OworICAga2FsX3VpbnQ4ICBmcmVxX3N0YXJ0X2lkeDsKKyAgIGthbF91aW50OCAgcHdyX3N0YXJ0X2lkeDsKKyAgIGthbF9pbnQxNiAgcnNzaVtNQVhfTVFDX1JTU0lfQ09VTlRdOwkKKyAgIGthbF91aW50MTYgcHdyX2RldF92YWx1ZVtNQVhfTVFDX0ZSRVFfQ09VTlRdOworICAgLyogIHtSU1NJLTEsIFJTU0ktMiwgLi4uICwgUlNTSS1wd3Jjb3VudH0sIC8vZnJlcS0xCisgICAgKiAge1JTU0ktMSwgUlNTSS0yLCAuLi4gLCBSU1NJLXB3cmNvdW50fSwgLy9mcmVxLTIKKyAgICAqICAuLi4KKyAgICAqICB7UlNTSS0xLCBSU1NJLTIsIC4uLiAsIFJTU0ktcHdyY291bnR9LCAvL2ZyZXEtZnJlcV9jb3VudAorICAgICogIFNhbWUgZm9yIHBvd2VyIGRldGVjdG9yLgorICAgICovCit9IFVMMVRTVFJlc3VsdE1RQzsKKworLy9mb3IgbGlzdCBtb2RlCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4IHN0YXR1czsKKyAgIGthbF91aW50OCBjdXJyZW50X2lkeDsKKyAgIGthbF9pbnQxNiAgdG90YWxfYml0c1tNQVhfTE1fVkFMSURfRlJFUV1bMl07CQkvLzA6cmVhbCBiZXIgdGVzdC4gMTpkZWJ1ZyBiZWZvcmUgYmVyIHRlc3QKKyAgIGthbF9pbnQxNiAgZXJyb3JfYml0c1tNQVhfTE1fVkFMSURfRlJFUV1bMl07CisgICBrYWxfaW50MTYgIHJzc2lbTUFYX0xNX1ZBTElEX0ZSRVFdWzNdOwkJCS8vUlNTSSBhdCAzIExOQSBtb2RlCisgICBrYWxfaW50MTYgIHJzc2lfcnhkW01BWF9MTV9WQUxJRF9GUkVRXVszXTsJCS8vUlNTSSBSWEQgYXQgMyBMTkEgbW9kZSAKKyAgIGthbF9pbnQ4ICBsbmFtb2RlWzNdOworfSBVTDFUU1RSZXN1bHRMaXN0TW9kZTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICBvazsgICAgLyo8ISBvayBpbmRpY2F0b3IgKi8KKyAgICBrYWxfdWludDMyICBzdW07ICAgLyo8ISB0aGUgc3VtIG9mIG1lYXN1cmVfY291bnQgdGltZXMgb2YgdGVtcCBzZW5zb3IgcmVzdWx0ICovCit9IFVMMVRTVFJlc3VsdEdldFJmVGVtcFNlbnNvcjsKKworLyogRE8gTk9UIE1vZGlmeSB0aGUgZGVmaW5pdGlvbiBvZiBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gKi8KK3R5cGVkZWYgIHN0cnVjdAoreworICAgIGthbF91aW50MzIgaXNfY2FwYWJsZToxOyAgICAgIC8qPCEgdGhlIGluZGljYXRvciB0byBpbmRpY2F0ZSBpZiB0aGlzIGl0ZW0gaXMgc3VwcG9ydGVkIGJ5IFNXIG9yIEhXICovCisgICAga2FsX3VpbnQzMiBpc19tYW5kYXRvcnk6MTsgICAgLyo8ISB0aGUgaW5kaWNhdG9yIHRvIGluZGljYXRlIGlmIHRoaXMgaXRlbSBpcyBtYW5kYXRvcnkgdG8gYmUgY2FsaWJyYXRlZCAqLworICAgIGthbF91aW50MzIgcGFyYW1ldGVyczozMDsgICAgIC8qPCEgcGFyYW1ldGVyIHRvIGJlIGNhcnJpZWQgdG8gdG9vbCBzaWRlICovCit9IFVMMVRTVENhbGlicmF0aW9uSXRlbTsKKworLyogRE8gTk9UIE1vZGlmeSB0aGUgbWVtYmVyIG9yZGVyIG9mIFVMMVRTVENhbGlicmF0aW9uSXRlbVNldCwgSXRlbXMgbXVzdCBiZSBhZGRlZCB0byB0aGUgZW5kICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSB0YWRjX2NhbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qWyAwXSBUQURDIGNhbGlicmF0aW9uIGNhcGFiaWxpdHkgKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSBtdWx0aV9yYXRfdGFkY19iaXRtYXA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qWyAxXSBiaXQgbWFwIG9mIG11bHRpLXJhdCBUQURDIGNhbGlicmF0aW9uICovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gbXVsdGlfcmF0X2FmY19iaXRtYXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKlsgMl0gYml0IG1hcCBvZiBtdWx0aS1yYXQgQUZDIGNhbGlicmF0aW9uICovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gbWlwaV9wYV9sZXZlbF9hbmRfY3dfbnVtOyAgICAgICAgICAgICAgICAgICAgICAvKlsgM10gTnVtYmVyIG9mIE1JUEkgUEEgQ1cgKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSB0ZW1wZXJhdHVyZV9pbmZvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qWyA0XSAgKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSBsaXN0X21vZGVfc3VwcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qWyA1XSBUYXJnZXQgc3VwcG9ydCBsaXN0IG1vZGUgQVBJOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpICovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gdGhlcm1hbF9zZW5zb3JfdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlsgNl0gVGFyZ2V0IHN1cHBvcnQgdGVtcCBzZW5zb3IgdHlwZTsgaXNfY2FwYWJsZSAoMDogbm90IHN1cHBvcnRlZCwgMTogc3VwcG9ydGVkKSBwYXJhbWV0ZXIgKDA6IGludGVybmFsLCAxOiBleHRlcm5hbCkgKi8gCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gdWJpbl9tb2RlX3N3aXRjaF9zdXBwb3J0OyAgICAgICAgICAgICAgICAgICAgICAvKlsgN10gICovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gbnZyYW1fYWNjZXNzX2ludGVyZmFjZTsgICAgICAgICAgICAgICAgICAgICAgICAvKlsgOF0gVGFyZ2V0IHN1cHBvcnQgbnZyYW0gYWNjZXNzIEFQSSBieSB1bDF0c3QgOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpICovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gcnhfZ2Fpbl9scG1fc3VwcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlsgOV0gVGFyZ2V0IHN1cHBvcnQgUlggbG93IHBvd2VyIGdhaW4gbW9kZSA7IGlzX2NhcGFibGUgKDA6IG5vdCBzdXBwb3J0ZWQsIDE6IHN1cHBvcnRlZCkgKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSBuc2Z0X2dldF9SU1NJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qWzEwXSBUYXJnZXQgc3VwcG9ydCBnZXQgUlNTSSBkdXJpbmcgTlNGVCBmbG93IDsgaXNfY2FwYWJsZSAoMDogbm90IHN1cHBvcnRlZCwgMTogc3VwcG9ydGVkKSovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gcHJmX3NlbGVjdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlsxMV0gVGFyZ2V0IHN1cHBvcnQgcHJmIHNlbGVjdCBtb2RpZnkgOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSBuc2Z0X3Jlc2V0X2Jlcl9yZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qWzEyXSBUYXJnZXQgc3VwcG9ydCBOU0ZUIHJlc2V0IEJFUiByZXN1bHQgOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSBlbG5hX2FkZGl0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qWzEzXSBUYXJnZXQgUFJYIHN1cHBvcnQgZUxOQSBhZGRpdGlvbiA7IGlzX2NhcGFibGUgKDA6IG5vdCBzdXBwb3J0ZWQsIDE6IHN1cHBvcnRlZCkqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIGFwY19leHRlbmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypbMTRdIFRhcmdldCBzdXBwb3J0IEFQQyBjYWxpYnJhdGlvbiBleHRlbmQgOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSBlbG5hX2FkZGl0aW9uX2RpdmVyc2l0eV9wYXRoOyAgICAgICAgICAgICAgICAgIC8qWzE1XSBUYXJnZXQgRFJYIHN1cHBvcnQgZUxOQSBhZGRpdGlvbiA7IGlzX2NhcGFibGUgKDA6IG5vdCBzdXBwb3J0ZWQsIDE6IHN1cHBvcnRlZCkqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIGNhbmNlbF9wb2xsaW5nX2FjdGlvbl93aGVuX2dldF9maGNfcmVzdWx0OyAgICAgLypbMTZdIFRhcmdldCByZW1vdmUgcG9sbGluZyBhY3Rpb24gd2hlbiBnZXQgRkhDIHJlc3VsdCA7IGlzX2NhcGFibGUgKDA6IG5vdCBzdXBwb3J0ZWQsIDE6IHN1cHBvcnRlZCkqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIHdjZG1hX21kX2NhbF9nZW5lcmF0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLypbMTddIFRhcmdldCByZW1vdmUgcG9sbGluZyBhY3Rpb24gd2hlbiBnZXQgRkhDIHJlc3VsdCA7IGlzX2NhcGFibGUgKDA6IG5vdCBzdXBwb3J0ZWQsIDE6IHN1cHBvcnRlZCkqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIHdjZG1hX2RwZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypbMThdIFRhcmdldCBzdXBwb3J0IFdDRE1BIERQRCA7IGlzX2NhcGFibGUgKDA6IG5vdCBzdXBwb3J0ZWQsIDE6IHN1cHBvcnRlZCkqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIHdjZG1hX2lxX2R1bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypbMTldIFRhcmdldCBzdXBwb3J0IFdDRE1BIEF1dG8gSVEgZHVtcCovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gd2NkbWFfYWZjX3JzY3BfZ2VuZXJhdGlvbjsgICAgICAgICAgICAgICAgICAgICAvKlsyMF0gVGFyZ2V0IHN1cHBvcnQgV0NETUEgTmV3IEFGQ19SU0NQIGludGVyZmFjZSovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gd2NkbWFfbnNmdF90eF9wb3dlcl9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKlsyMV0gVGFyZ2V0IHN1cHBvcnQgV0NETUEgTlNGVCBTZXQvR2V0IFR4IHBvd2VyIG9mZnNldCA7IGlzX2NhcGFibGUgKDA6IG5vdCBzdXBwb3J0ZWQsIDE6IHN1cHBvcnRlZCkqLworfSBVTDFUU1RDYWxpYnJhdGlvbkl0ZW1TZXQ7CisKKy8qIERPIE5PVCBNb2RpZnkgdGhlIG1lbWJlciBvcmRlciBvZiBVTDFUU1RDYWxpYnJhdGlvbkl0ZW1TZXQsIEl0ZW1zIG11c3QgYmUgYWRkZWQgdG8gdGhlIGVuZCAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQzMiBtaXBpX3BhX2JhbmRfc3VwcG9ydDsgLyo8ISBiYW5kIHN1cHBvcnQgYml0IG1hcCBvZiBNSVBJIFBBICovCisJa2FsX3VpbnQzMiB1ZV9jYXBhYmlsaXR5X2V4dDE7ICAgLyo8ISAweDAwMDAwMDAxIDogc3VwcG9ydCBSWCBnYWluIHN3ZWVwICovCit9IFVMMVRTVENhcGFiaWxpdHlJdGVtU2V0OworCisvLyh0aGlzIHBhcnQgaXMgcHV0IGludG8gcGVlciBidWZmZXIpCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MzIgY2FwYWJpbGl0eV9pdGVtX29mZnNldDsgLyohPCB0aGUgb2Zmc2V0IHZhbHVlIG9mIHRoZSBzdGFydGluZyBhZGRyZXNzIG9mIFVMMVRTVENhcGFiaWxpdHlJdGVtU2V0IGluIFVMMVRTVFJmQ2FwYWJpbGl0eSAqLworICAgIGthbF91aW50MzIgY2FsaWJyYXRpb25faXRlbV9vZmZzZXQ7IC8qITwgdGhlIG9mZnNldCB2YWx1ZSBvZiB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiBVTDFUU1RDYWxpYnJhdGlvbkl0ZW1TZXQgaW4gVUwxVFNUUmZDYXBhYmlsaXR5ICovCisgICAgVUwxVFNUQ2FwYWJpbGl0eUl0ZW1TZXQgY2FwYWJpbGl0eUl0ZW1zOworICAgIFVMMVRTVENhbGlicmF0aW9uSXRlbVNldCBjYWxpYnJhdGlvbkl0ZW1zOworfSBVTDFUU1RSZXN1bHRHZXRSZkNhcGFiaWxpdHk7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgb2s7ICAgICAgLyo8ISBvayBpbmRpY2F0b3IgKi8KKyAgICBrYWxfdWludDMyICBjd051bTsgICAvKjwhIHRoZSBOdW1iZXIgb2YgTUlQSSBQQSBDV3QgKi8KK30gVUwxVFNUUmVzdWx0R2V0TWlwaUN3TnVtOworCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICBrYWxfdWludDggIHN0YXR1czsKKyAgICBrYWxfdWludDE2IHBvd2VyX2xldmVsX251bTsKKyAgICBrYWxfdWludDE2IGNvZGVfd29yZF9udW07Cit9CitVTDFUU1RSZXN1bHRHZXRNaXBpQ29kZVdvcmQ7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCBvazsKK30KK1VMMVRTVFJlc3VsdFNldE1pcGlDb2RlV29yZDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9pbnQxNiBzdGF0dXM7CisgICBrYWxfaW50MTYgdGFkY19kYWM7CisgICBrYWxfaW50MTYgdGVtcGVyYXR1cmU7CisgICBrYWxfaW50MTYgdGVtcF9pZHg7Cit9CitVTDFUU1RSZXN1bHRUZW1wZXJhdHVyZUluZm87CisKK3R5cGVkZWYgdW5pb24KK3sKKyAgIGthbF9ib29sICAgICAgICAgICAgICAgIG9rOworICAgVUwxVFNUUmVzdWx0UlNTSSAgICAgICAgcnNzaTsKKyAgIFVMMVRTVFJlc3VsdFJTU0lSeEQgICAgIHJzc2lfcnhkOyAvKio8IFxicmVpZiBSOCBnZXQgYm90aCByeCBwYXRoIFJTU0kgKi8KKyAgIFVMMVRTVFJlc3VsdFJTQ1AgICAgICAgIHJzY3A7CisgICBVTDFUU1RSZXN1bHRSeERQQ2ggICAgICByeF9kcGNoOyAgIAorICAgVUwxVFNUUmVzdWx0QUZDICAgICAgICAgYWZjOworICAgVUwxVFNUUmVzdWx0QUZDX0VYVCAgICAgYWZjX2V4dDsKKyAgIFVMMVRTVFJlc3VsdE5TRlQgICAgICAgIG5zZnQ7CisgICBVTDFUU1RSZXN1bHRNUUMgICAgICAgICBtcWM7CisgICBVTDFUU1RSZXN1bHRNUUNPY3RMZXYgICBtcWNfb2N0bGV2OworICAgVUwxVFNUUmVzdWx0R2V0UmZUZW1wU2Vuc29yIHJmVGVtcGVyYXR1cmU7CisgICBVTDFUU1RSZXN1bHRHZXRNaXBpQ3dOdW0gICAgbWlwaVBhQ3dOdW07CisgICBVTDFUU1RSZXN1bHRHZXRNaXBpQ29kZVdvcmQgbWlwaVBhR2V0Q3dEYXRhOworICAgVUwxVFNUUmVzdWx0U2V0TWlwaUNvZGVXb3JkIG1pcGlQYVNldEN3RGF0YTsKKyAgIFVMMVRTVFJlc3VsdFRlbXBlcmF0dXJlSW5mbyB0ZW1wZXJhdHVyZV9pbmZvOworfSBVTDFUU1RSZXN1bHRQYXJhbTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIC8va2FsX3VpbnQ4ICAgICAgIHJlZl9jb3VudDsgLy8gcGFydCBvZiBMT0NBTF9QQVJBX0hEUgorICAgLy9rYWxfdWludDE2ICAgICAgbXNnX2xlbjsgICAvLyBwYXJ0IG9mIExPQ0FMX1BBUkFfSERSCisgICBMT0NBTF9QQVJBX0hEUgorICAgVUwxVFNUQ21kVHlwZSAgIHR5cGU7CisgICBVTDFUU1RDbWRQYXJhbSAgcGFyYW07Cit9IGZ0X3VsMXRzdF9yZXFfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIC8va2FsX3VpbnQ4ICAgICAgICAgcmVmX2NvdW50OyAvLyBwYXJ0IG9mIExPQ0FMX1BBUkFfSERSCisgICAvL2thbF91aW50MTYgICAgICAgIG1zZ19sZW47ICAgLy8gcGFydCBvZiBMT0NBTF9QQVJBX0hEUgorICAgTE9DQUxfUEFSQV9IRFIKKyAgIFVMMVRTVENtZFR5cGUgICAgIHR5cGU7CisgICBVTDFUU1RSZXN1bHRQYXJhbSBwYXJhbTsKK30gdWwxdHN0X2Z0X2NuZl9UOworCisvLyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS91bDF0c3RfbXNnX2dlbjk3LmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS91bDF0c3RfbXNnX2dlbjk3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAxZDNlZQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL3VsMXRzdF9tc2dfZ2VuOTcuaApAQCAtMCwwICsxLDEwMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBNb2RpZmljYXRpb24gTm90aWNlOgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgTWVkaWFUZWsgSW5jLiBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiB1bDF0c3RfbXNnLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTVQ2MjY4IFByb2plY3QKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICB1bDF0c3RfbXNnLmgKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKKyNpZm5kZWYgVUwxVFNUX01TR19ICisjZGVmaW5lIFVMMVRTVF9NU0dfSAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKy8vI2luY2x1ZGUgIm52cmFtX2RhdGFfaXRlbXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKworI2luY2x1ZGUgImZ0X21zZ191bDFyZi5oIgorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLy8jaWZkZWYgTVQ2MjY4VAordHlwZWRlZiBlbnVtCit7CisgICBVTDFUU1RfQ01EX1RYQUNDRVNTID0gMCAgIAorICAgLFVMMVRTVF9DTURfVFhfRFBDSAorICAgLFVMMVRTVF9DTURfUlhfRFBDSAorICAgLFVMMVRTVF9DTURfUlNTSQorICAgLFVMMVRTVF9DTURfUlNTSV9SWEQgIC8qKjwgXGJyZWlmIFI4IGdldCBib3RoIHJ4IHBhdGggUlNTSSAqLworICAgLFVMMVRTVF9DTURfUlNTSV9DT05UCisgICAsVUwxVFNUX0NNRF9SU0NQCisgICAsVUwxVFNUX0NNRF9BRkMgICAgICAvL2FudGhvbnkgMDUxNAorICAgLFVMMVRTVF9DTURfTVFDICAgICAgLy8yMDA4MTExNCBjb25nbywgYWRkIG1zZyBmb3IgbW9iaWxlIHF1aWNrIGNhbGlyYXRpb24KKyAgICxVTDFUU1RfQ01EX05TRlQgCisgICAsVUwxVFNUX0NNRF9IU0RQQV9OU0ZUCisgICAsVUwxVFNUX0NNRF9IU1VQQV9OU0ZUCisgICAsVUwxVFNUX0NNRF9TVE9QIAorICAgLFVMMVRTVF9DTURfTVFDX09DVExFVgorICAgLFVMMVRTVF9DTURfTVFDX0VYVCAgLy9yeGQsIGd2Z2FiYjAKKyAgICxVTDFUU1RfQ01EX0FGQ19FWFQgIC8vQWRkIG1zZyBmb3IgRENYTyB0byBkbyBtdWx0aS1iaW4gZGV0ZWN0aW9uIChpY3NfbW9kZT1DRkVfTU9ERTEpCisgICAsVUwxVFNUX0NNRF9SRUxPQURfTlZSQU0KKyAgICxVTDFUU1RfQ01EX0FOVF9NT0RFICAgICAvKio8IFxicmllZiBSOCBzZXQgcnggcGF0aDogMDpub25lIDE6bWFpbiAyOmRpdmVyc2l0eTogMzogYm90aCAqLworICAgLFVMMVRTVF9DTURfUEFfRFJJRlRfU1dJVENIICAvLyBQQSBkcmlmdCBjb21wZW5zYXRpb24gc3dpdGNoIG1lc3NhZ2UKKyAgICxVTDFUU1RfQ01EX1JYX0NFTExfUE9XRVIgICAgLy8gY29uZmlndXJlIHRoZSBSeCBjZWxsIHBvd2VyIGJlZm9yZSBjZWxsIHNlYXJjaAorICAgLFVMMVRTVF9DTURfR0VUX1JGX1RFTVAgLyoyMCovICAgICAgLy8gR2V0IHRoZSBSRiBUZW1wZXJhdHVyZSBzZW5zb3IgcmVhZGluZyAocGFyYW1ldGVyOlVMMVRTVENtZEdldFJmVGVtcFNlbnNvcikKKyAgICxVTDFUU1RfQ01EX0dFVF9SRl9DQVBBQklMSVRZIC8qMjEqLyAgLy8gR2V0IHRoZSBSRiBjYXBhYmlsaXR5IChubyBwYXJhbWV0ZXIpCisgICAsVUwxVFNUX0NNRF9HRVRfTUlQSV9QQV9DV19OVU1CRVIgLyoyMiovICAgCisgICAsVUwxVFNUX0NNRF9MSVNUX01PREUJLy9mb3IgbGlzdCBtb2RlCisgICAsVUwxVFNUX0NNRF9HRVRfUkZfTUlQSV9DT0RFV09SRCAvKjI0Ki8KKyAgICxVTDFUU1RfQ01EX1NFVF9SRl9NSVBJX0NPREVXT1JEIC8qMjUqLworICAgLFVMMVRTVF9DTURfR0VUX1JGX1RFTVBfSU5GTyAvKjI2Ki8KKyAgICxVTDFUU1RfQ01EX1JYX0dBSU5fU1dFRVAgLyogMjcgKi8KKyAgICxVTDFUU1RfQ01EX0VORAorfSBVTDFUU1RDbWRUeXBlOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYJIHVsX3VhcmZjbjsJCS8qIFVMIHVhcmZjbiByYW5nZTo/Pz8/UmVhZCBmcm9tIE5WUkFNPz8gKDk2MTIgfiA5ODg4KSAqLwkKKyAgICBrYWxfdWludDE2ICBkbF91YXJmY247CisgICAga2FsX3VpbnQxNgkgZGxfcHNjOwkJICAgLyogMH41MTEuICovCisgICAga2FsX3VpbnQ4ICAgc2lnbmF0dXJlOwkgICAvKiAwfjE1LCBmb3Igc2luZ2xlIHNpZ25hdHVyZSBkZWNpc2lvbi4gKi8KKyAgICBrYWxfdWludDggICBwYV9tb2RlOwkgICAvKiAwOiBoaWdoIDE6IG1pZGRsZSAyOiBsb3cgKi8KKyAgICBrYWxfaW50OCAgICBpbml0X3Bvd2VyOwkvKiBBc3N1bWUgY3BpY2hfcnNjcD0wLCB1bF9pbnRlcmZlcmVuY2U9MC4gKi8KKyAgICBrYWxfdWludDggICBwb3dlcl9zdGVwOyAgIC8qIFByZWFtYmxlIHBvd2VyIHJhbXBpbmcgc3RlcC4gMSB+IDhkQiAqLwkKKyAgICBrYWxfdWludDggICBtYXhfcmV0cmFuczsJLyogMX42NCAqLworICAgIGthbF91aW50OCAgIGFzYzsgICAgICAgICAgLyogMH43ICovCit9IFVMMVRTVENtZFR4QWNjZXNzOworCit0eXBlZGVmIHN0cnVjdAoreworICAgLy9rYWxfaW50MTYJZGxfZnJlcTsKKyAgIGthbF9pbnQxNgl1bF9mcmVxOworICAga2FsX2ludDE2CXBzYzsJCSAgICAgICAgLyogMH41MTEuICovCisgICBrYWxfdWludDMyCXNjX2NvZGU7ICAgICAgICAgLyogU2NyYW1ibGluZyBjb2RlICMuIDAgfiAxNjc3NzIxNSAqLworICAga2FsX3VpbnQ4ICAgcG93ZXJfY3RybF9tb2RlOworICAga2FsX3VpbnQ4IAlwYV9tb2RlOworICAga2FsX3VpbnQxNiAJaWR4OworICAga2FsX3VpbnQxNglhZmNfZGFjOworICAga2FsX3VpbnQ4CWRwY2NoX3B3cjsKKyAgIGthbF91aW50OAlkcGRjaF9wd3I7CisJCisgICAvKiBCZWxvdyBmb3IgVUwxRF9SRl9NZXRhX1NldFR4SW5mby4gKi8KKyAgIC8qIEJlbG93IGZvciBzZXRQYUFwY0RhYy4gKi8JCisgICBrYWxfdWludDggCXJmX2JhbmQ7CisgICBrYWxfdWludDggICB2bTE7CisgICBrYWxfdWludDggICB2bTI7CisgICBrYWxfdWludDE2ICBkYzJkY19kYWM7CisgICBrYWxfdWludDE2ICB2Ymlhc19kYWM7CisgICBrYWxfYm9vbCAgICBwd3JfZGV0OworICAga2FsX3VpbnQxNiAJYXBjX2RhYzsKKyAgIGthbF91aW50MTYgIHBhX2RhYzsJCQorfSBVTDFUU1RDbWRUeERQQ2g7CS8vQW50aG9ueQorCit0eXBlZGVmIHN0cnVjdAoreworCWthbF9pbnQxNglkbF9mcmVxOworCWthbF9pbnQxNglwc2M7CS8qIDB+NTExLiAqLworCWthbF91aW50OAlzc2M7CS8qIDB+MTUuICovCisJa2FsX2ludDE2CW92c2Y7CS8qIDB+c2YtMS4gKi8KKwlrYWxfdWludDE2CWFmY19kYWM7CisJCisJLyogQmVsb3cgZm9yIFJGX1NldEJCUnhQYXJhbXMuICovCisJa2FsX2Jvb2wgCWh3QUdDOworCWthbF91aW50OAltb2RlOwkJLyogMDogbW9kZTAsIDE6IG1vZGUxLiAqLworCWthbF9pbnQxNglnYWluOwkJLyogbW9kZTAuICovCisJa2FsX3VpbnQ4CUxOQW1vZGU7CS8qIG1vZGUxLiAwOiBMTkEgbG93LCAxOiBMTkEgbWlkLCAyOiBMTkEgaGlnaC4gKi8KKwlrYWxfdWludDE2CXBnYTsJCS8qIG1vZGUxLiAqLworfSBVTDFUU1RDbWRSeERQQ2g7CisKKy8vZm9yIGxpc3QgbW9kZQorI2RlZmluZSBNQVhfTE1fVkFMSURfRlJFUSA1MAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIC8qIGNvbW1vbiBwYXJhbWV0ZXJzICovCisgICBrYWxfYm9vbCAgIGFmY19kYWNfdmFsaWQ7CisgICBrYWxfdWludDE2CWFmY19kYWM7CisgICBrYWxfdWludDggIGxvb3BiYWNrVHlwZTsvLzA6IG5vIGxvb3BiYWNrLCAxOiBsb29wYmFjayB0eXBlIDEsIDI6IGxvb3BiYWNrIHR5cGUgMgorICAga2FsX3VpbnQ4ICBmcmFtZV9zaGlmdDsvL2RlZmF1bHQ9MCwgZGVwZW5kcyBvbiBUZXN0IE1hY2hpbmUKKyAgIGthbF91aW50OCAgcm1jX3R5cGU7Ly8xOiAxMi4yaywgMjogNjRrLCAzOiAxNDRrLCA0OiAzODRrCisgICBrYWxfdWludDggIGN0ZmNbNF07Ly84OTYwPTAsMSwyLDM7IGNtdTIwMD0wLDIsMSwzCisgICBrYWxfdWludDggIGJpdF9wYXR0ZXJuOy8vMDogc2luZ2xlIGVuZGVkIGJlciBkaXNhYmxlLCAxOiBhbGwgb25lLCAyOiBhbGwgemVybworICAgLyogREwgcGFyYW1ldGVycyAqLworICAga2FsX2ludDE2CWRsX2ZyZXFbTUFYX0xNX1ZBTElEX0ZSRVFdOworICAga2FsX2ludDE2CWRsX3BzYzsvKiAwfjUxMS4gKi8KKyAgIGthbF9pbnQxNglkbF9vdnNmOy8vUk1DMTIuMms6IDwxMjgsIGJ1dCB0ZXN0IHNldCBub3QgYWxsb3cgYWxsIG92c2YsCisJICAgICAgICAgICAgICAgICAvL1JNQzEyLjJrIGRlZmF1bHQgb3ZzZj05CisgICAvKiBVTCBwYXJhbWV0ZXJzICovCisgICBrYWxfaW50MTYJdWxfZnJlcVtNQVhfTE1fVkFMSURfRlJFUV07CisgICBrYWxfdWludDE2CXVsX3RmY2k7CisgICBrYWxfdWludDMyCXVsX3NjX2NvZGU7CS8qIFNjcmFtYmxpbmcgY29kZSAjLiAwIH4gMTY3NzcyMTUgKi8KKyAgIGthbF9ib29sICAgaXFfcHdyX3ZhbGlkOy8vdmFsaWQgZHBjY2gsIGRwZGNoIHBvd2VyCisgICBrYWxfdWludDgJZHBjY2hfcHdyOy8vZGVmYXVsdCA4LCBkZXBlbmRzIG9uIHRlc3RpbmcgcmVxdWlyZW1lbnQKKyAgIGthbF91aW50OAlkcGRjaF9wd3I7Ly9kZWZhdWx0IDE1LCBkZXBlbmRzIG9uIHRlc3RpbmcgcmVxdWlyZW1lbnQKKworICAgLyogY29tbW9uIHBhcmFtZXRlcnMgKi8KKyAgIGthbF91aW50OAl2YWxpZF9mcmVxOyAvL3ZhbGlkIGNvdW50IG9mIGRsL3VsIGZyZXEuCisgICBrYWxfdWludDE2ICAgdGVzdF9pdGVtW01BWF9MTV9WQUxJRF9GUkVRXTsgLy9iaXQwOnJlc2VydmVkLiBiaXQxOnNpbmdsZSBlbmQgQkVSLiBiaXQyOlJTU0kgbWVhc3VyZS4gYml0MzpyZXNlcnZlZC4gYml0NDpyZXNlcnZlZC4gYml0NTpJTFBDX0FCQy4gYml0NjpJTFBDX0VGLiBiaXQ3OklMUENfR0guCQorICAgLyogdGhlIHRpbWUgc2V0dGluZ3MsIHVuaXQgPSBmcmFtZSAqLworICAga2FsX3VpbnQxNiAgIGZ1bGxfdGVzdF90aW1lOy8vdGhlIHRvdGFsIHRpbWUgb2Ygb25lIGZyZXEuCisgICBrYWxfdWludDggICAgcmVhZHlfdGltZTsgLy8gZm9yIGZpcnN0IHN5bmMgYWZ0ZXIgVFggdHJhbnNtaXQKKyAgIGthbF91aW50OAlzeW5jX3RpbWU7IC8vdGhlIHRpbWUgb2Ygc3luYywgZnJvbSBjc19zdGFydCB0byBMQksgaXMgMjYgZnJhbWUKKyAgIGthbF91aW50OCAgICByZXRyaWFsOyAvL2p1c3QgZm9yIGZpcnN0IHN5bmMKKyAgIGthbF91aW50MTYJdGVzdF90aW1lOyAvL3RoZSB0aW1lIG9mIHRlc3QgZm9yIG1heCZtaW4gVFggcG93ZXIgdGVzdHMKKyAgIGthbF91aW50MTYgICByeF9yc3NpX3N0YXJ0X3RpbWVbM107IC8vUlNTSSBzdGFydCB0aW1lIGZvciAzIExOQSBtb2RlCisgICBrYWxfdWludDggICAgcnhfcnNzaV9kdXJhdGlvblszXTsKKyAgIGthbF91aW50MTYgICByeF9iZXJfc3RhcnRfdGltZTsgLy9CRVIgc3RhcnQgdGltZQorICAga2FsX3VpbnQ4ICAgIHJ4X2Jlcl9kdXJhdGlvbjsKKyAgIGthbF91aW50MTYJSUxQQ19BQkNfdGltZTsgLy90aGUgdGltZSBvZiBJTFBDIEFCQworICAga2FsX3VpbnQxNglJTFBDX0VGX3RpbWU7IC8vdGhlIHRpbWUgb2YgSUxQQyBFRgorICAga2FsX3VpbnQxNglJTFBDX0dIX3RpbWU7IC8vdGhlIHRpbWUgb2YgSUxQQyBHSAorICAga2FsX3VpbnQxNgl0cmFuc2l0aW9uX3RpbWU7IC8vdGhlIGxpbWl0YXRpb24gb2YgVUUgc3RhdGUgbWFjaGluZSBpcyA0IGZyYW1lIGF0IGxlYXN0Cit9IFVMMVRTVENtZExJU1RNT0RFOworCit0eXBlZGVmIHN0cnVjdAoreworICAgLyogY29tbW9uIHBhcmFtZXRlcnMgKi8KKyAgIGthbF9ib29sICAgYWZjX2RhY192YWxpZDsKKyAgIGthbF91aW50MTYJYWZjX2RhYzsKKyAgIGthbF91aW50OCAgbG9vcGJhY2tUeXBlOy8vMDogbm8gbG9vcGJhY2ssIDE6IGxvb3BiYWNrIHR5cGUgMSwgMjogbG9vcGJhY2sgdHlwZSAyCisgICBrYWxfdWludDggIGZyYW1lX3NoaWZ0Oy8vZGVmYXVsdD0wLCBkZXBlbmRzIG9uIFRlc3QgTWFjaGluZQorICAga2FsX3VpbnQ4ICBybWNfdHlwZTsvLzE6IDEyLjJrLCAyOiA2NGssIDM6IDE0NGssIDQ6IDM4NGsKKyAgIGthbF91aW50OCAgY3RmY1s0XTsvLzg5NjA9MCwxLDIsMzsgY211MjAwPTAsMiwxLDMKKyAgIGthbF91aW50OCAgYml0X3BhdHRlcm47Ly8wOiBzaW5nbGUgZW5kZWQgYmVyIGRpc2FibGUsIDE6IGFsbCBvbmUsIDI6IGFsbCB6ZXJvCisgICAvKiBETCBwYXJhbWV0ZXJzICovCisgICBrYWxfaW50MTYJZGxfZnJlcTsKKwkga2FsX2ludDE2CWRsX3BzYzsvKiAwfjUxMS4gKi8KKwkga2FsX2ludDE2CWRsX292c2Y7Ly9STUMxMi4yazogPDEyOCwgYnV0IHRlc3Qgc2V0IG5vdCBhbGxvdyBhbGwgb3ZzZiwKKwkgICAgICAgICAgICAgICAgIC8vUk1DMTIuMmsgZGVmYXVsdCBvdnNmPTkKKwkgLyogVUwgcGFyYW1ldGVycyAqLworICAga2FsX2ludDE2CXVsX2ZyZXE7CisgICBrYWxfdWludDE2CXVsX3RmY2k7CisJIGthbF91aW50MzIJdWxfc2NfY29kZTsJLyogU2NyYW1ibGluZyBjb2RlICMuIDAgfiAxNjc3NzIxNSAqLworCSBrYWxfYm9vbCAgIGlxX3B3cl92YWxpZDsvL3ZhbGlkIGRwY2NoLCBkcGRjaCBwb3dlcgorCSBrYWxfdWludDgJZHBjY2hfcHdyOy8vZGVmYXVsdCA4LCBkZXBlbmRzIG9uIHRlc3RpbmcgcmVxdWlyZW1lbnQKKwkga2FsX3VpbnQ4CWRwZGNoX3B3cjsvL2RlZmF1bHQgMTUsIGRlcGVuZHMgb24gdGVzdGluZyByZXF1aXJlbWVudAorCisJIGthbF91aW50OCAgIHN1YnRlc3Q7IC8vIGZvciBEUEEvVVBBIHVzZQorfSBVTDFUU1RDbWROU0ZUOworCisjZGVmaW5lIEZERF9NQVhfRlJFUV9MSVNUIDM2Cit0eXBlZGVmIHN0cnVjdAoreworCWthbF91aW50OAludW1fZnJlcTsKKwlrYWxfaW50MTYJZGxfZnJlcVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKwlrYWxfaW50MTYJc2NjX2RsX2ZyZXFbIEZERF9NQVhfRlJFUV9MSVNUIF07CisJa2FsX2ludDE2ICAgc2V0dGluZ3M7ICAgIC8vICBQQ0MgIFNSWC9MTkEgU2V0dGluZ3MKKwlrYWxfdWludDggICBzcnhjZmc7CisJa2FsX3VpbnQ4CXZjb2NmZzsKKwlrYWxfdWludDggICBsbmFwb3J0OworCWthbF91aW50OCAgIHRlbXBlcmF0dXJlOworCQorCS8qIEJlbG93IGZvciBSRl9TZXRCQlJ4UGFyYW1zLiAqLworCWthbF9ib29sIAlod0FHQzsKKwlrYWxfdWludDgJbW9kZTsJCS8qIDA6IG1vZGUwLCAxOiBtb2RlMS4gKi8KKwlrYWxfaW50MTYJZ2FpblsyXTsJCS8qIG1vZGUwLiAqLworCWthbF91aW50OAlMTkFtb2RlWzJdOwkvKiBtb2RlMS4gMDogTE5BIGxvdywgMTogTE5BIG1pZCwgMjogTE5BIGhpZ2guICovCisJa2FsX3VpbnQxNglwZ2FbMl07CQkvKiBtb2RlMS4gKi8KKyAgIGthbF91aW50OCAgIGxwbV9tb2RlOyAgIC8qIDA6IG5vcm1hbCBMTkEgZ2FpbiBtb2RlICwgMTogbG93IHBvd2VyIExOQSBnYWluIG1vZGUuICovCisJCisJa2FsX2Jvb2wgcnNzaV9jb250aW51ZTsKK30gVUwxVFNUQ21kUlNTSTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlrYWxfYm9vbAlwc2Nhbl9iZWZvcmVfY2VsbF9zZWFyY2g7CS8qIFRydWUgaWYgVUwxVFNUIG5lZWRzIHBvd2VyIHNjYW4gYmVmb3JlIGNlbGwgc2VhcmNoL1JTQ1AuICovCisJa2FsX2ludDE2CWRsX2ZyZXE7CS8qIFNwZWNpZmljIGRsX2ZyZXEgdG8gZG8gY2VsbCBzZWFyY2guIFZhbGlkIGlmIHBzY2FuX2JlZm9yZV9jZWxsX3NlYXJjaD1GLiAqLworCWthbF91aW50OAlzYW1wbGVfbnVtX3Blcl9jZWxsOworCWthbF9ib29sCXJlYWRfc2ZuOwkvKiBUcnVlIGlmIHdlIG5lZWQgdG8gZG8gU0ZOIG1lYXN1cmVtZW50IGZvciB0aGUgZm91bmQgY2VsbC4gKi8KKwkKKwkvKiBCZWxvdyBmb3IgUkZfU2V0QkJSeFBhcmFtcy4gKi8KKwlrYWxfYm9vbCAJaHdBR0M7CisJa2FsX3VpbnQ4CW1vZGU7CQkvKiAwOiBtb2RlMCwgMTogbW9kZTEuICovCisJa2FsX2ludDE2CWdhaW47CQkvKiBtb2RlMC4gKi8KKwlrYWxfdWludDgJTE5BbW9kZTsJLyogbW9kZTEuIDA6IExOQSBsb3csIDE6IExOQSBtaWQsIDI6IExOQSBoaWdoLiAqLworCWthbF91aW50MTYJcGdhOwkJLyogbW9kZTEuICovCit9IFVMMVRTVENtZFJTQ1A7CisKK3R5cGVkZWYgc3RydWN0Cit7CisvLyBrYWxfYm9vbAlwc2Nhbl9iZWZvcmVfY2VsbF9zZWFyY2g7ICAgICAgLyogVHJ1ZSBpZiBVTDFUU1QgbmVlZHMgcG93ZXIgc2NhbiBiZWZvcmUgY2VsbCBzZWFyY2gvUlNDUC4gKi8KKyAgIGthbF9pbnQxNglkbF9mcmVxOwkgICAgICAgICAgICAgICAvKiBTcGVjaWZpYyBkbF9mcmVxIHRvIGRvIGNlbGwgc2VhcmNoLiBWYWxpZCBpZiBwc2Nhbl9iZWZvcmVfY2VsbF9zZWFyY2g9Ri4gKi8KKy8vIGthbF91aW50OAlzYW1wbGVfbnVtX3Blcl9jZWxsOworLy8ga2FsX2Jvb2wJcmVhZF9zZm47ICAgICAgICAgICAgICAgICAgICAgIC8qIFRydWUgaWYgd2UgbmVlZCB0byBkbyBTRk4gbWVhc3VyZW1lbnQgZm9yIHRoZSBmb3VuZCBjZWxsLiAqLworCQorICAga2FsX2ludDE2ICAgYWZjX2RhYzsKKworICAgLyogQmVsb3cgZm9yIFJGX1NldEJCUnhQYXJhbXMuICovCisgICBrYWxfYm9vbCAJaHdBR0M7CisgICBrYWxfdWludDgJbW9kZTsJCSAgICAgICAgICAgICAgIC8qIDA6IG1vZGUwLCAxOiBtb2RlMS4gKi8KKyAgIGthbF9pbnQxNglnYWluOwkJICAgICAgICAgICAgICAgLyogbW9kZTAuICovCisgICBrYWxfdWludDgJTE5BbW9kZTsJICAgICAgICAgICAgICAgLyogbW9kZTEuIDA6IExOQSBsb3csIDE6IExOQSBtaWQsIDI6IExOQSBoaWdoLiAqLworICAga2FsX3VpbnQxNglwZ2E7ICAgICAgICAgICAgICAgIAkgICAvKiBtb2RlMS4gKi8KK30gVUwxVFNUQ21kQUZDOworCisvLzIwMDgxMTE1IGNvbmdvLCBhZGQgTVFDIGNtZAorI2RlZmluZSBNQVhfTVFDX0ZSRVFfQ09VTlQgMTUgICAgLy8gNjI5NyBuZWVkIDE0IGZyZXF1ZW5jeQorI2RlZmluZSBNQVhfTVFDX1BXUl9DT1VOVCAgMTUgICAgLy8gNjI5NyBuZWVkIDE0IHBvaW50CisjZGVmaW5lIE1BWF9DQUxfQkFORCAgICAgICAxMCAgICAvLyA2Mjk3IG5lZWQgOCAgYmFuZAorI2RlZmluZSBNQVhfTVFDX1JTU0lfQ09VTlQgMjAwICAgLy8gNjI5NyBuZWVkIDE1KjE0PTE5NSBwb2ludAorCit0eXBlZGVmIHN0cnVjdAoreworLyogVHggcGFydCBzZXR0aW5ncyAqLworCisvKiBCZWxvdyBmb3IgVUwxRF9SRl9NZXRhX1NldFR4SW5mby4gKi8KKyAgIGthbF9ib29sICAgIG5vX2xvb3BfY3RybDsKKyAgIGthbF91aW50MTYgIGFmY19kYWM7CisvKiBCZWxvdyBmb3Igc2V0UGFBcGNEYWMuICovCisvL2ZvciAzIFBBIG1vZGUsIDA6SCwgMTpNLCAyOkwKKy8vQWRkIFR4IGJhbmQKKyAgIGthbF9ib29sICAgIHB3cl9kZXQ7Ly8wIG9mZi9tYW51YWwgbW9kZSwgMSBvbi9hdXRvIG1vZGUKKy8va2FsX3VpbnQxNiBwd3JfZGV0X3RocmVzaG9sZDsKKyAgIGthbF91aW50OCAgIHBvd2VyX2N0cmxfbW9kZTsvLzE6IEhXLT5PMywgMjogU1ctPjU5RCwgU21hcnRpCisvLyAgIGthbF91aW50OCAgIHZtMVtNQVhfQ0FMX0JBTkRdWzNdOyAgICAgIC8vUEEgcGFyYW0KKy8vICAga2FsX3VpbnQ4ICAgdm0yW01BWF9DQUxfQkFORF1bM107ICAgICAgLy9QQSBwYXJhbQorLy8gICBrYWxfdWludDE2ICBkYzJkY19kYWNbTUFYX0NBTF9CQU5EXVszXTsvL1BBIHBhcmFtCisvLyAgIGthbF91aW50MTYgIHZiaWFzX2RhY1tNQVhfQ0FMX0JBTkRdWzNdOy8vUEEgcGFyYW0KKy8vICAga2FsX2Jvb2wgICAgaW5pdF90eF9vbm9mZjsgICAgICAgICAgICAgLy8wOm9mZiwgMTpvbgorLy8gICBrYWxfYm9vbCAgICByZWFkeV90eF9vbm9mZjsgICAgICAgICAgICAvLzA6b2ZmLCAxOm9uCisvLyAgIGthbF91aW50OCAgIGluaXRfcGFfbW9kZTsKKy8vICAga2FsX3VpbnQ4ICAgcmVhZHlfcGFfbW9kZTsKKy8vICAga2FsX3VpbnQxNiAgaW5pdF9wYV9nYWluOworLy8gICBrYWxfdWludDE2ICByZWFkeV9wYV9nYWluOworLy8gICBrYWxfdWludDE2ICBpbml0X3ZnYV9kYWNfdHBjX2lkeDsKKy8vICAga2FsX3VpbnQxNiAgcmVhZHlfdmdhX2RhY190cGNfaWR4OworCisvKiBSeCBwYXJ0IHNldHRpbmdzICovCisKKy8qIEJlbG93IGZvciBSRl9TZXRCQlJ4UGFyYW1zLiAqLworLy8gRm9yIGhpZ2ggZ2FpbiBjYWwuIEAgaGlnaCBwb3dlcjogcmVwbGFjZSBnYWluIHRhYmxlCisgICBrYWxfdWludDggICB0ZW1wZXJhdHVyZTsKKy8vICAga2FsX2Jvb2wgICAgaHdBR0M7ICAgICAgICAgLy8wOlNXIGdhaW4gbW9kZSwgMTpIVyBBR0MuIEFHQyBtdXN0IG9uIGZvciBSU1NJIG1lYXN1cmUuIEhXIGxpbWl0CisvLyAgIGthbF9pbnQxNiAgIGdhaW5faW5pdDsgICAgIC8qIGZvciBIVyBtb2RlICovCisKKy8qIE1vYmlsZSBRdWljayBDYWxpYnJhdGlvbiBzZXR0aW5ncyAqLworCisvKiBnZW5lcmFsIHNldHRpbmdzICovCisvLyAgIGthbF9ib29sICAgIGluaXRfY29uZGl0aW9uOyAgICAgLy8wOiBtYXhfcHdyLCAxOm1pbl9wd3IKKyAgIGthbF91aW50OCAgIHN0ZXBfZHVyYXRpb247ICAgICAgLy9pbiBzbG90CisvLyAgIGthbF91aW50OCAgIHJlYWR5X2R1cmF0aW9uOyAgICAgLy9pbiBzbG90CisgICBrYWxfdWludDggICByZXR1bmVfZHVyYXRpb247ICAgIC8vaW4gc2xvdAorLy8gICBrYWxfdWludDggICBnYWluX3N0YWJsZV90aW1lOyAgIC8vaW4gc2xvdAorLy8gICBrYWxfdWludDE2ICBtYXhfdmdhX2RhYzsKKy8vICAga2FsX3VpbnQxNiAgbWluX3ZnYV9kYWM7CisvLyAgIGthbF91aW50MTYgIGp1bXBfdmdhX2RhYzsKKworLyogZnJlcS1wd3IgdGFibGUgKi8KKyAgIGthbF91aW50OCAgIGZyZXFfY291bnQ7CisgICBrYWxfdWludDggICBwd3JfY291bnQ7CisgICBrYWxfdWludDggICBmcmVxX3N0YXJ0X2lkeDsKKyAgIGthbF91aW50OCAgIHB3cl9zdGFydF9pZHg7CisgICBrYWxfdWludDggICBocG1fY2FsX3BvaW50OworICAga2FsX3VpbnQ4ICAgbHBtX2NhbF9wb2ludDsKKyAgIGthbF91aW50OCAgIHRrbV9jYWxfcG9pbnQ7CisvLyAgIGthbF91aW50OCAgIG9kZF9yZWNvcmQ7ICAgICAgICAvKmZvciBBbnJpdHN1ODgyMCwgb25seSBvZGQgc3RlcCAoMSwzLDUuLi5zdGFydCBmcm9tIDEpIGlzIGZvciBtZWFzdXJlbWVudC4gICovCisKKy8vICAga2FsX3VpbnQ4ICAgcGFfZ2Fpbl9zdGFydF9pZHg7IC8vIGZvciBPMyBUUEMKKy8vICAga2FsX3VpbnQ4ICAgcGRfZ2Fpbl9zdGFydF9pZHg7IC8vIGZvciBPMyBUUEMKKworICAga2FsX3VpbnQ4ICAgZGxfYmFuZDsgLy8xOmJhbmQxLCAyOmJhbmQyLCAzOmJhbmQzLCA1OmJhbmQ1CisgICBrYWxfdWludDggICB1bF9iYW5kOyAvLzE6YmFuZDEsIDI6YmFuZDIsIDM6YmFuZDMsIDU6YmFuZDUKKyAgIGthbF91aW50MTYgIGRsX2ZyZXFbTUFYX01RQ19GUkVRX0NPVU5UXTsgLy9pbiB1YXJmY24KKyAgIGthbF91aW50MTYgIHVsX2ZyZXFbTUFYX01RQ19GUkVRX0NPVU5UXTsgLy9pbiB1YXJmY24KKyAgIGthbF91aW50OCAgIHBhX21vZGVbTUFYX01RQ19QV1JfQ09VTlRdOworICAga2FsX3VpbnQxNiAgdmdhX2RhY190cGNfaWR4W01BWF9NUUNfUFdSX0NPVU5UXTsvL3Bvd2VyX2N0cmxfbW9kZT1IVywgdHBjX2lkeC4gVmljZSB2ZXJzYS4KKworICAga2FsX3VpbnQxNiAgcGFfZ2FpbltNQVhfTVFDX1BXUl9DT1VOVF07IC8vIGZvciBPMyBUUEMKKyAgIGthbF91aW50OCAgIHBkX2dhaW5bTUFYX01RQ19GUkVRX0NPVU5UXTsgLy8gZm9yIE8zIFRQQworICAga2FsX3VpbnQ4ICAgcGFfc2VjdGlvbltNQVhfTVFDX1BXUl9DT1VOVF07CisKKyAgIGthbF91aW50MTYgIHJ4X2xuYV9nYWluW01BWF9NUUNfUFdSX0NPVU5UXTsgICAgIC8qIFBSWCB0b3RhbCBSRiBnYWluIC41IGFmdGVyIDYyOTMqLworICAga2FsX3VpbnQxNiAgcnhkX2xuYV9nYWluW01BWF9NUUNfUFdSX0NPVU5UXTsgICAgLyogRFJYIHRvdGFsIFJGIGdhaW4gLjUgYWZ0ZXIgNjI5MyovCisKKyAgIGthbF91aW50OCAgIGZpeF9wZ2FfZ2FpbltNQVhfTVFDX1BXUl9DT1VOVF07ICAgIC8qIGZpeCBwZ2EgZ2FpbiBmb3IgQVBDIGNhbGlicmF0aW9uICovCisgICBrYWxfdWludDggICBwd3JfbW9kZVtNQVhfTVFDX1BXUl9DT1VOVF07ICAgICAgICAgLyogcHdyIG1vZGUgZm9yIEFHQyBjYWxpYnJhdGlvbiAqLworICAga2FsX3VpbnQ4ICAgcnhfZWxuYV9ieXBhc3NbTUFYX01RQ19QV1JfQ09VTlRdOworICAga2FsX3VpbnQ4ICAgcnhkX2VsbmFfYnlwYXNzW01BWF9NUUNfUFdSX0NPVU5UXTsKKyAgIGthbF91aW50OCAgIHJ4X2VsbmFfbW9kZTsKKyAgIGthbF91aW50OCAgIHJ4ZF9lbG5hX21vZGU7CisKKyAgIGthbF91aW50OCAgIHJ4X2NhbF9zZXF1ZW5jeVtNQVhfTVFDX1BXUl9DT1VOVF07CisgICBrYWxfaW50MTYgICByeF9jYWxfZGxfcG93ZXJbTUFYX01RQ19QV1JfQ09VTlRdOworICAga2FsX3VpbnQ4ICAgcnhfZ2Fpbl90YWJsZTsgICAgICAgLy8wOjE4ZEIgIDE6MTMuNWRCCisgICBrYWxfdWludDggICByeGRfZ2Fpbl90YWJsZTsgICAgICAvLzA6MThkQiAgMToxMy41ZEIKKy8vICAga2FsX3VpbnQ4ICAgbG5hX2dhaW5fc3RhcnRfaWR4OworLy8gICBrYWxfdWludDggICBjYWxfbnVtOworLy8gICBrYWxfdWludDggICByb3V0ZV9zZXR0aW5nWzNdOworfSBVTDFUU1RDbWRNUUM7CisKKyNpZmRlZiBfX1JGX1NDQU5fRk9SX0RFU0VOU0VfVEVTVF9fCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgc3JjX2lkOworICAga2FsX3VpbnQ4ICAgYmFuZDsKKyAgIGthbF91aW50MTYgIGRsX3VhcmZjbjsKKyAgIGthbF91aW50MTYgIHVsX3VhcmZjbjsKKyAgIGthbF9ib29sICAgIHR4X29uX2ZsYWc7CisgICBrYWxfaW50OCAgICB0eF9wb3dlcjsKKyAgIGthbF91aW50OCAgIHJlcGVhdF90aW1lczsKK31VTDFUU1RFTU1RQzsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQzMiAgICAgICAgICBsaWQ7ICAgICAgLy8gdGhlIGxpZCBpcyBuZWVkZWQgdG8gdXBkYXRlIHJ1bi10aW1lIHZhbHVlCisgICBrYWxfdWludDMyICAgICAgICAgIGVnX3B0cjsgICAvLyB0aGUgZXZlbnQgZ3JvdXAgcG9pbnRlciB1c2VkIHRvIG5vdGlmeSBydW50LXRpbWUgdXBkYXRlIGZpbmlzaAorfSBVTDFUU1RDbWRSZWxvYWROVlJBTTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2IG1lYXN1cmVfY291bnQ7ICAgIC8qPCEgc3BlY2lmeSB0aGUgbWVhc3VyZW1lbnQgY291bnQgVUwxRCB3aWxsIGRvIHRoZSBtZWFzdXJlbWVudCBtZWFzdXJlX2NvdW50IHRpbWVzICovCit9IFVMMVRTVENtZEdldFJmVGVtcFNlbnNvcjsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAga2FsX3VpbnQxNiByZl9iYW5kX2lkeDsKKyAgICBrYWxfdWludDE2IHBvd2VyX2xldmVsX251bTsKKyAgICBrYWxfdWludDE2IGNvZGVfd29yZF9udW07Cit9CitVTDFUU1RDbWRTZXRNaXBpQ29kZVdvcmQ7CisKKwordHlwZWRlZiB1bmlvbgoreworICAgVUwxVFNUQ21kVHhBY2Nlc3MgICB0eGFjY2VzczsKKyAgIFVMMVRTVENtZFR4RFBDaCAgICAgdHhkcGNoOwkvL0FudGhvbnkKKyAgIFVMMVRTVENtZFJ4RFBDaCAgICAgcnhkcGNoOworICAgVUwxVFNUQ21kUlNTSSAgICAgICByc3NpOworICAgVUwxVFNUQ21kUlNDUCAgICAgICByc2NwOwkKKyAgIFVMMVRTVENtZEFGQyAgICAgICAgYWZjOyAgICAvL2FudGhvbnkgMDUxNAorICAgVUwxVFNUQ21kTVFDCSAgICAgICBtcWM7CQorICAgVUwxVFNUQ21kTlNGVCAgICAgICBuc2Z0OworICAgVUwxVFNUQ21kTElTVE1PREUgICBsaXN0bW9kZTsgLy9mb3IgbGlzdCBtb2RlCisgICBVTDFUU1RDbWRSZWxvYWROVlJBTSByZWxvYWQ7CisgICBVTDFUU1RDbWRHZXRSZlRlbXBTZW5zb3IgcmZUZW1wZXJhdHVyZTsgIC8qPCEgVUwxVFNUX0NNRF9HRVRfUkZfVEVNUCAqLworICAga2FsX3VpbnQ4ICAgICAgICAgICBpc19QYURyaWZ0OyAgIC8vIFBBIGRyZml0IGNvbXBlbnNhdGlvbiBzd2l0Y2ggbWVzc2FnZQorICAga2FsX3VpbnQ4ICAgICAgICAgICByeGRNb2RlOyAgICAgIC8qKjwgXGJyaWVmIFI4IHNldCByeCBwYXRoOiAwOm5vbmUgMTptYWluIDI6ZGl2ZXJzaXR5OiAzOiBib3RoICovCisgICBrYWxfaW50MzIgICAgICAgICAgIHJ4X2NlbGxfcG93ZXI7Ly8gY29uZmlndXJlIHRoZSBSeCBjZWxsIHBvd2VyIGJlZm9yZSBjZWxsIHNlYXJjaC4gdWludHM6cWRibQorICAga2FsX3VpbnQ4ICAgICAgICAgICBtaXBpX3JmX2JhbmQ7CisgICBrYWxfdWludDggICAgICAgICAgIGZkZF9tb2RlX3NldHVwOyAgIC8vICAxIDogVUJJTiBtb2RlIEluaXQgM0cgRkREICwgICAgICAwIDogVUJJTiBtb2RlIGRlLWluaXQgM0cgRkREICAgICAgIAorICAgVUwxVFNUQ21kU2V0TWlwaUNvZGVXb3JkIHNldE1pcGlQYUN3UGFyYW07Cit9IFVMMVRTVENtZFBhcmFtOworCisjZGVmaW5lICBJU19NRVRBX0NBX1NVUFBPUlQgMAorCisjZGVmaW5lICBJU19BUlhfTFBNX1NVUFBPUlQgMQorCisvLyBGb3IgQ0EgZW51bSAKKwordHlwZWRlZiBlbnVtCit7CisJVkNPX1NSWF9TRUxfSU5WQUxJRCA9IDAsCisJVkNPX1NSWF9TRUxfU1JYCQk9IDEsCQorCVZDT19TUlhfU0VMX1ZDTyAgICAgPSAyLAorfSBVTDFUU1RWY29TcnhTZWw7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggICAgICAgICB2Y29fY2ZnOworCWthbF91aW50OCAgICAgICAgIHNyeF9jZmc7CisJa2FsX3VpbnQ4CQkgIGxuYV9wb3J0OworCWthbF91aW50OAkJICBsbmFfZ3JvdXA7Cit9IFVMMVRTVFZjb1NyeExuYUNmZzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggICAgICAgICAJYmFuZDsKKwlrYWxfdWludDggICAgICAgICAJcGFkZGluZ1szXTsKKwlVTDFUU1RWY29TcnhMbmFDZmcJY2ZnWzNdOworfSBVTDFUU1RTZXR0aW5nQnlCYW5kOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgICAgICAgIGJhbmQ7CisJa2FsX3VpbnQ4CQkgIGNsczsKKwlrYWxfdWludDgJCSAgdmNvX2NmZzsKKwlrYWxfdWludDggCQkgIHNyeF9jZmc7CQorCWthbF91aW50OAkgIAkgIGxuYV9wb3J0OworCWthbF91aW50OCAgICAgICAgIGxuYV9ncm91cDsKK30gVUwxVFNUQ2FSb3V0ZURlczsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlVTDFUU1RDYVJvdXRlRGVzICAgICAgY2ZnWzJdOworfSBVTDFUU1RDYUNvbWJpbmVEZXM7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJa2FsX3VpbnQ4ICAgICAgICAgIGJhbmQ7CisJa2FsX3VpbnQ4ICAgICAgICAgIGNsczsKK30gVUwxVFNUQmFuZENsYXNzOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgICAgICAgICBjY19udW07CisgICBrYWxfdWludDggICAgICAgICAgIHVzZWRfYmFuZDsKKyAgIFVMMVRTVEJhbmRDbGFzcwkgICBjY19zZXR0aW5nWzJdOworfSBVTDFUU1RSeFVzYWdlRGVzOworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiAgICAgICAgICBzY2VuYXJpbzsKKwlrYWxfdWludDgJCQljY19yeF9yb3V0ZV9pZHhbMl07CisJa2FsX3VpbnQ4ICAgICAgICAgICBjY190eF9yb3V0ZV9pZHg7CisKK30gVUwxVFNUVXNhZ2VNYXBUYWJsZTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgICAgICAgICBiYW5kOworICAga2FsX3VpbnQ4ICAgICAgICAgIGluZGV4WzNdOworfSBVTDFUU1RTdXBwb3J0Q2FDb21iVGJsSWR4OworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgICAgICAgIGJhbmQ7CisgICBrYWxfdWludDggICAgICAgICAgcm91dGVfaWR4OworICAga2FsX3VpbnQ4ICAgICAgICAgIHVzZ19zdGFydF9pZHg7CisgICBrYWxfdWludDggICAgICAgICAgdXNnX3N0b3BfaWR4OworfSBVTDFUU1RVc2FnZUVsbTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIFVMMVRTVFVzYWdlRWxtICAgIHNiOworICAgVUwxVFNUVXNhZ2VFbG0gICAgY2FbMl07Cit9IFVMMVRTVFN1cHBvcnRSeFVzYWdlQnlCYW5kOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgICAgICAgIHRibF9vZmZzZXQ7CisgICBrYWxfdWludDE2ICAgICAgICAgdGJsX3NpemU7Cit9IFVMMVRTVFZhclRibEluZm87CisKK3R5cGVkZWYgc3RydWN0Cit7CisJa2FsX3VpbnQzMiAJCQkJCQkJc3VwcG9ydF9yb3V0ZV9iaXRtYXA7CisJa2FsX3VpbnQzMiAJCQkJCQkJdW10c192Y29fc3J4X3NlbDsKKwlVTDFUU1RTZXR0aW5nQnlCYW5kICAgICAgICAgICAgICAgICBzdXBwb3J0X3Zjb19zcnhfbG5hX2NmZ1s1XTsKKwlVTDFUU1RWYXJUYmxJbmZvICAgICAgICAgICAgICAgICAgICBjYV9jb21iX3RibF9pbmZvOworCVVMMVRTVFN1cHBvcnRDYUNvbWJUYmxJZHggCQkJc3VwcG9ydF9jYV90YmxfaWR4WzVdOworCVVMMVRTVFZhclRibEluZm8JCQkJCXJ4X3VzYWdlX3RibF9pbmZvOworCVVMMVRTVFN1cHBvcnRSeFVzYWdlQnlCYW5kIAkJCXN1cHBvcnRfcnhfdXNlX2J5X2JhbmRbNV07Cit9IFVMMVRTVENhQ29uZmlnOworCisKKworLy9SZXN1bHQKK3R5cGVkZWYgc3RydWN0Cit7CisJa2FsX2Jvb2wJb2s7CisJa2FsX3VpbnQ4CW51bV9mcmVxOworCWthbF9pbnQxNglkbF9mcmVxWyBGRERfTUFYX0ZSRVFfTElTVCBdOworCWthbF9pbnQzMglyc3NpWyBGRERfTUFYX0ZSRVFfTElTVCBdOwkKKwlrYWxfaW50MTYJc2NjX2RsX2ZyZXFbIEZERF9NQVhfRlJFUV9MSVNUIF07CisJa2FsX2ludDMyCXNjY19yc3NpWyBGRERfTUFYX0ZSRVFfTElTVCBdOworfSBVTDFUU1RSZXN1bHRSU1NJOworCisvLyBSOCBnZXQgYm90aCByeCBwYXRoIFJTU0kgcmVzdWx0Cit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgb2s7CisgICBrYWxfdWludDggICBudW1fZnJlcTsKKyAgIGthbF9pbnQxNiAgIGRsX2ZyZXFbIEZERF9NQVhfRlJFUV9MSVNUIF07CisgICBrYWxfaW50MzIgICByc3NpWyBGRERfTUFYX0ZSRVFfTElTVCBdOworICAga2FsX2ludDMyICAgcnNzaV9yeGRbIEZERF9NQVhfRlJFUV9MSVNUIF07CisgICBrYWxfaW50MTYgICBzY2NfZGxfZnJlcVsgRkREX01BWF9GUkVRX0xJU1QgXTsKKyAgIGthbF9pbnQzMiAgIHNjY19yc3NpWyBGRERfTUFYX0ZSRVFfTElTVCBdOworICAga2FsX2ludDMyICAgc2NjX3Jzc2lfcnhkWyBGRERfTUFYX0ZSRVFfTElTVCBdOworCisgICBrYWxfdWludDggICByeF9MTkFtb2RlW0ZERF9NQVhfRlJFUV9MSVNUXTsKKyAgIGthbF91aW50OCAgIHJ4ZF9MTkFtb2RlW0ZERF9NQVhfRlJFUV9MSVNUXTsKK30gVUwxVFNUUmVzdWx0UlNTSVJ4RDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sJCisJa2FsX3VpbnQxNglwc2M7CQkvKiBQcmltYXJ5IHNjcmFtYmxpbmcgY29kZSAqLworCWthbF9pbnQzMgl0bTsJCS8qIENlbGwgZnJhbWUgYm91bmRhcnkgb2Zmc2V0IHRvIExTVCAqLworCWthbF9pbnQxNglvZmY7CQkvKiBDZWxsIGZyYW1lIG51bWJlciBvZmZzZXQgdG8gTFNUICovCQorCWthbF9ib29sCXN0dGQ7IAkJLyogVHJ1ZSBmb3IgU1RURCB1c2VkLiAqLworCWthbF91aW50OAlzYW1wbGVfbnVtOworCWthbF9pbnQxNglyc2NwX3N1bTsgICAvL2thbF91aW50OAlyc2NwX3N1bTsKKwlrYWxfaW50MTYgZnJlcV9lcnJvcjsJLy9hbnRob255IDA1MTQJCit9IFVMMVRTVF9jcGljaF9yZXN1bHRfVDsKKworI2RlZmluZSBVTDFfTUFYX05VTV9NRUFTX0NFTEwgMzIKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgb2s7CisJa2FsX3VpbnQ4ICAgICAgICAgICAgICAgbnVtX2NlbGw7CisJVUwxVFNUX2NwaWNoX3Jlc3VsdF9UICAgY3BpY2hfcmVzdWx0WyBVTDFfTUFYX05VTV9NRUFTX0NFTEwgXTsJCit9IFVMMVRTVFJlc3VsdFJTQ1A7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgIG9rOworICAgIGthbF91aW50MTYgICBwc2M7ICAgICAgIC8qIFByaW1hcnkgc2NyYW1ibGluZyBjb2RlICovCisgICAga2FsX2ludDMyICAgIHRtOwkJICAgIC8qIENlbGwgZnJhbWUgYm91bmRhcnkgb2Zmc2V0IHRvIExTVCAqLworICAgIGthbF9ib29sICAgICBzdHRkOyAgICAgIC8qIFRydWUgZm9yIFNUVEQgdXNlZC4gKi8KKyAgICBrYWxfdWludDggICAgcnNjcF9zdW07CisgICAga2FsX2ludDE2ICAgIGZyZXFfZXJyb3I7Cit9IFVMMVRTVFJlc3VsdEFGQzsKKyAgIAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICAgb2s7CisgICAga2FsX3VpbnQxNiAgIHBzYzsJCSAgICAvKiBQcmltYXJ5IHNjcmFtYmxpbmcgY29kZSAqLworICAgIGthbF9pbnQzMiAgICB0bTsJCSAgICAvKiBDZWxsIGZyYW1lIGJvdW5kYXJ5IG9mZnNldCB0byBMU1QgKi8KKyAgICBrYWxfYm9vbCAgICAgc3R0ZDsgCSAgICAgICAgLyogVHJ1ZSBmb3IgU1RURCB1c2VkLiAqLworICAgIGthbF91aW50OCAgICByc2NwX3N1bTsKKyAgICBrYWxfaW50MzIgICAgZnJlcV9lcnJvcjsKK30gVUwxVFNUUmVzdWx0QUZDX0VYVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9ib29sICAgICAgb2s7CisgICBrYWxfdWludDMyICAgIGJlcjsJICAgICAgLyogU3BlYyByZXF1aXJlbWVudD0xMF4tMy4gV2Ugd2lsbCBjb3VudCAxMF41IGZyYW1lcygxMDAgdGltZXMgc3BlYyByZXF1aXJlbWVudCkgZm9yIEJFUiBjYWxjdWxhdGlvbi4gT25seSBjb3VudCBmb3IgdGhlIG9ubHkgVFJDaCBmb3IgRFBEQ2guICovCit9IFVMMVRTVFJlc3VsdFJ4RFBDaDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgICBvazsKKyAgICBrYWxfdWludDggICBsaW5rX3N0YXR1czsKK30gVUwxVFNUUmVzdWx0TlNGVDsKKworLy8jZGVmaW5lIE1BWF9NUUNfUlNTSV9DT1VOVCA0MDAKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCAgIG9rOworICAgLyogZnJlcS1wd3IgdGFibGUgKi8KKyAgIGthbF91aW50OCAgZnJlcV9jb3VudDsKKyAgIGthbF91aW50OCAgcHdyX2NvdW50OworICAga2FsX3VpbnQ4ICBmcmVxX3N0YXJ0X2lkeDsKKyAgIGthbF91aW50OCAgcHdyX3N0YXJ0X2lkeDsKKyAgIGthbF91aW50OCAgcnhfbG5hX21vZGVbTUFYX01RQ19SU1NJX0NPVU5UXTsgLy8gMDogaGlnaCwgMTogbWlkZGxlLCAyOiBsb3cKKyAgIGthbF9pbnQxNiAgcnNzaVtNQVhfTVFDX1JTU0lfQ09VTlRdOwkKKyAgIGthbF91aW50OCAgcnhkX2xuYV9tb2RlW01BWF9NUUNfUlNTSV9DT1VOVF07IC8vIDA6IGhpZ2gsIDE6IG1pZGRsZSwgMjogbG93CisgICBrYWxfaW50MTYgIHJzc2lfcnhkW01BWF9NUUNfUlNTSV9DT1VOVF07CisgICBrYWxfdWludDE2IHB3cl9kZXRfdmFsdWVbTUFYX01RQ19GUkVRX0NPVU5UXVszXTsKKyAgIGthbF9pbnQxNiAgbXFjX3R4X2d2Z2FiYjBfcmVwb3J0W01BWF9NUUNfUlNTSV9DT1VOVF07CisgICAvKiAge3BkX21lYXMtUEFfaGlnaCwgcGRfbWVhcy1QQV9taWQsIHBkX21lYXMtUEFfbG93fSwgLy9mcmVxLTEKKyAgICAqICB7cGRfbWVhcy1QQV9oaWdoLCBwZF9tZWFzLVBBX21pZCwgcGRfbWVhcy1QQV9sb3d9LCAvL2ZyZXEtMgorICAgICogIC4uLgorICAgICogIHtwZF9tZWFzLVBBX2hpZ2gsIHBkX21lYXMtUEFfbWlkLCBwZF9tZWFzLVBBX2xvd30sIC8vZnJlcS1mcmVxX2NvdW50CisgICAgKi8KK30gVUwxVFNUUmVzdWx0TVFDT2N0TGV2OworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICBvazsKKyAgIC8qIGZyZXEtcHdyIHRhYmxlICovCisgICBrYWxfdWludDggIGZyZXFfY291bnQ7CisgICBrYWxfdWludDggIHB3cl9jb3VudDsKKyAgIGthbF91aW50OCAgZnJlcV9zdGFydF9pZHg7CisgICBrYWxfdWludDggIHB3cl9zdGFydF9pZHg7CisgICBrYWxfaW50MTYgIHJzc2lbTUFYX01RQ19SU1NJX0NPVU5UXTsJCisgICBrYWxfdWludDE2IHB3cl9kZXRfdmFsdWVbTUFYX01RQ19GUkVRX0NPVU5UXTsKKyAgIC8qICB7UlNTSS0xLCBSU1NJLTIsIC4uLiAsIFJTU0ktcHdyY291bnR9LCAvL2ZyZXEtMQorICAgICogIHtSU1NJLTEsIFJTU0ktMiwgLi4uICwgUlNTSS1wd3Jjb3VudH0sIC8vZnJlcS0yCisgICAgKiAgLi4uCisgICAgKiAge1JTU0ktMSwgUlNTSS0yLCAuLi4gLCBSU1NJLXB3cmNvdW50fSwgLy9mcmVxLWZyZXFfY291bnQKKyAgICAqICBTYW1lIGZvciBwb3dlciBkZXRlY3Rvci4KKyAgICAqLworfSBVTDFUU1RSZXN1bHRNUUM7CisKKy8vZm9yIGxpc3QgbW9kZQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCBzdGF0dXM7CisgICBrYWxfdWludDggY3VycmVudF9pZHg7CisgICBrYWxfaW50MTYgIHRvdGFsX2JpdHNbTUFYX0xNX1ZBTElEX0ZSRVFdWzJdOwkJLy8wOnJlYWwgYmVyIHRlc3QuIDE6ZGVidWcgYmVmb3JlIGJlciB0ZXN0CisgICBrYWxfaW50MTYgIGVycm9yX2JpdHNbTUFYX0xNX1ZBTElEX0ZSRVFdWzJdOworICAga2FsX2ludDE2ICByc3NpW01BWF9MTV9WQUxJRF9GUkVRXVszXTsJCQkvL1JTU0kgYXQgMyBMTkEgbW9kZQorICAga2FsX2ludDE2ICByc3NpX3J4ZFtNQVhfTE1fVkFMSURfRlJFUV1bM107CQkvL1JTU0kgUlhEIGF0IDMgTE5BIG1vZGUgCisgICBrYWxfaW50OCAgbG5hbW9kZVszXTsKK30gVUwxVFNUUmVzdWx0TGlzdE1vZGU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgb2s7ICAgIC8qPCEgb2sgaW5kaWNhdG9yICovCisgICAga2FsX3VpbnQzMiAgc3VtOyAgIC8qPCEgdGhlIHN1bSBvZiBtZWFzdXJlX2NvdW50IHRpbWVzIG9mIHRlbXAgc2Vuc29yIHJlc3VsdCAqLworfSBVTDFUU1RSZXN1bHRHZXRSZlRlbXBTZW5zb3I7CisKKy8qIERPIE5PVCBNb2RpZnkgdGhlIGRlZmluaXRpb24gb2YgVUwxVFNUQ2FsaWJyYXRpb25JdGVtICovCit0eXBlZGVmICBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyIGlzX2NhcGFibGU6MTsgICAgICAvKjwhIHRoZSBpbmRpY2F0b3IgdG8gaW5kaWNhdGUgaWYgdGhpcyBpdGVtIGlzIHN1cHBvcnRlZCBieSBTVyBvciBIVyAqLworICAgIGthbF91aW50MzIgaXNfbWFuZGF0b3J5OjE7ICAgIC8qPCEgdGhlIGluZGljYXRvciB0byBpbmRpY2F0ZSBpZiB0aGlzIGl0ZW0gaXMgbWFuZGF0b3J5IHRvIGJlIGNhbGlicmF0ZWQgKi8KKyAgICBrYWxfdWludDMyIHBhcmFtZXRlcnM6MzA7ICAgICAvKjwhIHBhcmFtZXRlciB0byBiZSBjYXJyaWVkIHRvIHRvb2wgc2lkZSAqLworfSBVTDFUU1RDYWxpYnJhdGlvbkl0ZW07CisKKy8qIERPIE5PVCBNb2RpZnkgdGhlIG1lbWJlciBvcmRlciBvZiBVTDFUU1RDYWxpYnJhdGlvbkl0ZW1TZXQsIEl0ZW1zIG11c3QgYmUgYWRkZWQgdG8gdGhlIGVuZCAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gdGFkY19jYWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlsgMF0gVEFEQyBjYWxpYnJhdGlvbiBjYXBhYmlsaXR5ICovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gbXVsdGlfcmF0X3RhZGNfYml0bWFwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKlsgMV0gYml0IG1hcCBvZiBtdWx0aS1yYXQgVEFEQyBjYWxpYnJhdGlvbiAqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIG11bHRpX3JhdF9hZmNfYml0bWFwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLypbIDJdIGJpdCBtYXAgb2YgbXVsdGktcmF0IEFGQyBjYWxpYnJhdGlvbiAqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIG1pcGlfcGFfbGV2ZWxfYW5kX2N3X251bTsgICAgICAgICAgICAgICAgICAgICAgLypbIDNdIE51bWJlciBvZiBNSVBJIFBBIENXICovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gdGVtcGVyYXR1cmVfaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlsgNF0gICovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gbGlzdF9tb2RlX3N1cHBvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlsgNV0gVGFyZ2V0IHN1cHBvcnQgbGlzdCBtb2RlIEFQSTsgaXNfY2FwYWJsZSAoMDogbm90IHN1cHBvcnRlZCwgMTogc3VwcG9ydGVkKSAqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIHRoZXJtYWxfc2Vuc29yX3R5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLypbIDZdIFRhcmdldCBzdXBwb3J0IHRlbXAgc2Vuc29yIHR5cGU7IGlzX2NhcGFibGUgKDA6IG5vdCBzdXBwb3J0ZWQsIDE6IHN1cHBvcnRlZCkgcGFyYW1ldGVyICgwOiBpbnRlcm5hbCwgMTogZXh0ZXJuYWwpICovIAorICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIHViaW5fbW9kZV9zd2l0Y2hfc3VwcG9ydDsgICAgICAgICAgICAgICAgICAgICAgLypbIDddICAqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIG52cmFtX2FjY2Vzc19pbnRlcmZhY2U7ICAgICAgICAgICAgICAgICAgICAgICAgLypbIDhdIFRhcmdldCBzdXBwb3J0IG52cmFtIGFjY2VzcyBBUEkgYnkgdWwxdHN0IDsgaXNfY2FwYWJsZSAoMDogbm90IHN1cHBvcnRlZCwgMTogc3VwcG9ydGVkKSAqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIHJ4X2dhaW5fbHBtX3N1cHBvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLypbIDldIFRhcmdldCBzdXBwb3J0IFJYIGxvdyBwb3dlciBnYWluIG1vZGUgOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpICovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gbnNmdF9nZXRfUlNTSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlsxMF0gVGFyZ2V0IHN1cHBvcnQgZ2V0IFJTU0kgZHVyaW5nIE5TRlQgZmxvdyA7IGlzX2NhcGFibGUgKDA6IG5vdCBzdXBwb3J0ZWQsIDE6IHN1cHBvcnRlZCkqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIHByZl9zZWxlY3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypbMTFdIFRhcmdldCBzdXBwb3J0IHByZiBzZWxlY3QgbW9kaWZ5IDsgaXNfY2FwYWJsZSAoMDogbm90IHN1cHBvcnRlZCwgMTogc3VwcG9ydGVkKSovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gbnNmdF9yZXNldF9iZXJfcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKlsxMl0gVGFyZ2V0IHN1cHBvcnQgTlNGVCByZXNldCBCRVIgcmVzdWx0IDsgaXNfY2FwYWJsZSAoMDogbm90IHN1cHBvcnRlZCwgMTogc3VwcG9ydGVkKSovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gZWxuYV9hZGRpdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlsxM10gVGFyZ2V0IFBSWCBzdXBwb3J0IGVMTkEgYWRkaXRpb24gOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSBhcGNfZXh0ZW5kOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qWzE0XSBUYXJnZXQgc3VwcG9ydCBBUEMgY2FsaWJyYXRpb24gZXh0ZW5kIDsgaXNfY2FwYWJsZSAoMDogbm90IHN1cHBvcnRlZCwgMTogc3VwcG9ydGVkKSovCisgICBVTDFUU1RDYWxpYnJhdGlvbkl0ZW0gZWxuYV9hZGRpdGlvbl9kaXZlcnNpdHlfcGF0aDsgICAgICAgICAgICAgICAgICAvKlsxNV0gVGFyZ2V0IERSWCBzdXBwb3J0IGVMTkEgYWRkaXRpb24gOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSBjYW5jZWxfcG9sbGluZ19hY3Rpb25fd2hlbl9nZXRfZmhjX3Jlc3VsdDsgICAgIC8qWzE2XSBUYXJnZXQgcmVtb3ZlIHBvbGxpbmcgYWN0aW9uIHdoZW4gZ2V0IEZIQyByZXN1bHQgOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSB3Y2RtYV9tZF9jYWxfZ2VuZXJhdGlvbjsgICAgICAgICAgICAgICAgICAgICAgIC8qWzE3XSBUYXJnZXQgcmVtb3ZlIHBvbGxpbmcgYWN0aW9uIHdoZW4gZ2V0IEZIQyByZXN1bHQgOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSB3Y2RtYV9kcGQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qWzE4XSBUYXJnZXQgc3VwcG9ydCBXQ0RNQSBEUEQgOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSB3Y2RtYV9pcV9kdW1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qWzE5XSBUYXJnZXQgc3VwcG9ydCBXQ0RNQSBBdXRvIElRIGR1bXAqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIHdjZG1hX2FmY19yc2NwX2dlbmVyYXRpb247ICAgICAgICAgICAgICAgICAgICAgLypbMjBdIFRhcmdldCBzdXBwb3J0IFdDRE1BIE5ldyBBRkNfUlNDUCBpbnRlcmZhY2UqLworICAgVUwxVFNUQ2FsaWJyYXRpb25JdGVtIHdjZG1hX25zZnRfdHhfcG93ZXJfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgLypbMjFdIFRhcmdldCBzdXBwb3J0IFdDRE1BIE5TRlQgU2V0L0dldCBUeCBwb3dlciBvZmZzZXQgOyBpc19jYXBhYmxlICgwOiBub3Qgc3VwcG9ydGVkLCAxOiBzdXBwb3J0ZWQpKi8KKyAgIFVMMVRTVENhbGlicmF0aW9uSXRlbSB3Y2RtYV90eF9kcGNoX2FkanVzdDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qWzIyXSBUYXJnZXQgc3VwcG9ydCBXQ0RNQSBUWCBEUENIIFBvd2VyIGFkanVzdCA7IGlzX2NhcGFibGUgKDA6IG5vdCBzdXBwb3J0ZWQsIDE6IHN1cHBvcnRlZCkqLworfSBVTDFUU1RDYWxpYnJhdGlvbkl0ZW1TZXQ7CisKKy8qIERPIE5PVCBNb2RpZnkgdGhlIG1lbWJlciBvcmRlciBvZiBVTDFUU1RDYWxpYnJhdGlvbkl0ZW1TZXQsIEl0ZW1zIG11c3QgYmUgYWRkZWQgdG8gdGhlIGVuZCAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQzMiBtaXBpX3BhX2JhbmRfc3VwcG9ydDsgLyo8ISBiYW5kIHN1cHBvcnQgYml0IG1hcCBvZiBNSVBJIFBBICovCisJa2FsX3VpbnQzMiB1ZV9jYXBhYmlsaXR5X2V4dDE7ICAgLyo8ISAweDAwMDAwMDAxIDogc3VwcG9ydCBSWCBnYWluIHN3ZWVwICovCit9IFVMMVRTVENhcGFiaWxpdHlJdGVtU2V0OworCisvLyh0aGlzIHBhcnQgaXMgcHV0IGludG8gcGVlciBidWZmZXIpCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MzIgY2FwYWJpbGl0eV9pdGVtX29mZnNldDsgLyohPCB0aGUgb2Zmc2V0IHZhbHVlIG9mIHRoZSBzdGFydGluZyBhZGRyZXNzIG9mIFVMMVRTVENhcGFiaWxpdHlJdGVtU2V0IGluIFVMMVRTVFJmQ2FwYWJpbGl0eSAqLworICAgIGthbF91aW50MzIgY2FsaWJyYXRpb25faXRlbV9vZmZzZXQ7IC8qITwgdGhlIG9mZnNldCB2YWx1ZSBvZiB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiBVTDFUU1RDYWxpYnJhdGlvbkl0ZW1TZXQgaW4gVUwxVFNUUmZDYXBhYmlsaXR5ICovCisgICAgVUwxVFNUQ2FwYWJpbGl0eUl0ZW1TZXQgY2FwYWJpbGl0eUl0ZW1zOworICAgIFVMMVRTVENhbGlicmF0aW9uSXRlbVNldCBjYWxpYnJhdGlvbkl0ZW1zOworfSBVTDFUU1RSZXN1bHRHZXRSZkNhcGFiaWxpdHk7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICAgb2s7ICAgICAgLyo8ISBvayBpbmRpY2F0b3IgKi8KKyAgICBrYWxfdWludDMyICBjd051bTsgICAvKjwhIHRoZSBOdW1iZXIgb2YgTUlQSSBQQSBDV3QgKi8KK30gVUwxVFNUUmVzdWx0R2V0TWlwaUN3TnVtOworCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICBrYWxfdWludDggIHN0YXR1czsKKyAgICBrYWxfdWludDE2IHBvd2VyX2xldmVsX251bTsKKyAgICBrYWxfdWludDE2IGNvZGVfd29yZF9udW07Cit9CitVTDFUU1RSZXN1bHRHZXRNaXBpQ29kZVdvcmQ7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCBvazsKK30KK1VMMVRTVFJlc3VsdFNldE1pcGlDb2RlV29yZDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9pbnQxNiBzdGF0dXM7CisgICBrYWxfaW50MTYgdGFkY19kYWM7CisgICBrYWxfaW50MTYgdGVtcGVyYXR1cmU7CisgICBrYWxfaW50MTYgdGVtcF9pZHg7Cit9CitVTDFUU1RSZXN1bHRUZW1wZXJhdHVyZUluZm87CisKK3R5cGVkZWYgdW5pb24KK3sKKyAgIGthbF9ib29sICAgICAgICAgICAgICAgIG9rOworICAgVUwxVFNUUmVzdWx0UlNTSSAgICAgICAgcnNzaTsKKyAgIFVMMVRTVFJlc3VsdFJTU0lSeEQgICAgIHJzc2lfcnhkOyAvKio8IFxicmVpZiBSOCBnZXQgYm90aCByeCBwYXRoIFJTU0kgKi8KKyAgIFVMMVRTVFJlc3VsdFJTQ1AgICAgICAgIHJzY3A7CisgICBVTDFUU1RSZXN1bHRSeERQQ2ggICAgICByeF9kcGNoOyAgIAorICAgVUwxVFNUUmVzdWx0QUZDICAgICAgICAgYWZjOworICAgVUwxVFNUUmVzdWx0QUZDX0VYVCAgICAgYWZjX2V4dDsKKyAgIFVMMVRTVFJlc3VsdE5TRlQgICAgICAgIG5zZnQ7CisgICBVTDFUU1RSZXN1bHRNUUMgICAgICAgICBtcWM7CisgICBVTDFUU1RSZXN1bHRNUUNPY3RMZXYgICBtcWNfb2N0bGV2OworICAgVUwxVFNUUmVzdWx0R2V0UmZUZW1wU2Vuc29yIHJmVGVtcGVyYXR1cmU7CisgICBVTDFUU1RSZXN1bHRHZXRNaXBpQ3dOdW0gICAgbWlwaVBhQ3dOdW07CisgICBVTDFUU1RSZXN1bHRHZXRNaXBpQ29kZVdvcmQgbWlwaVBhR2V0Q3dEYXRhOworICAgVUwxVFNUUmVzdWx0U2V0TWlwaUNvZGVXb3JkIG1pcGlQYVNldEN3RGF0YTsKKyAgIFVMMVRTVFJlc3VsdFRlbXBlcmF0dXJlSW5mbyB0ZW1wZXJhdHVyZV9pbmZvOworfSBVTDFUU1RSZXN1bHRQYXJhbTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIC8va2FsX3VpbnQ4ICAgICAgIHJlZl9jb3VudDsgLy8gcGFydCBvZiBMT0NBTF9QQVJBX0hEUgorICAgLy9rYWxfdWludDE2ICAgICAgbXNnX2xlbjsgICAvLyBwYXJ0IG9mIExPQ0FMX1BBUkFfSERSCisgICBMT0NBTF9QQVJBX0hEUgorICAgVUwxVFNUQ21kVHlwZSAgIHR5cGU7CisgICBVTDFUU1RDbWRQYXJhbSAgcGFyYW07Cit9IGZ0X3VsMXRzdF9yZXFfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIC8va2FsX3VpbnQ4ICAgICAgICAgcmVmX2NvdW50OyAvLyBwYXJ0IG9mIExPQ0FMX1BBUkFfSERSCisgICAvL2thbF91aW50MTYgICAgICAgIG1zZ19sZW47ICAgLy8gcGFydCBvZiBMT0NBTF9QQVJBX0hEUgorICAgTE9DQUxfUEFSQV9IRFIKKyAgIFVMMVRTVENtZFR5cGUgICAgIHR5cGU7CisgICBVTDFUU1RSZXN1bHRQYXJhbSBwYXJhbTsKK30gdWwxdHN0X2Z0X2NuZl9UOworCisvLyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS91bDF0c3RfcHVibGljLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS91bDF0c3RfcHVibGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhjMjI1MgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL3VsMXRzdF9wdWJsaWMuaApAQCAtMCwwICsxLDkgQEAKKyNpZiAoZGVmaW5lZCBfX01EOTNfXykKKyNpbmNsdWRlICJ1bDF0c3RfcHVibGljX2dlbjkzLmgiCisjZWxpZiAoZGVmaW5lZCBfX01EOTVfXykKKyNpbmNsdWRlICJ1bDF0c3RfcHVibGljX2dlbjk1LmgiCisjZWxpZiAoZGVmaW5lZCBfX01EOTdfXykgfHwgKGRlZmluZWQgX19NRDk3UF9fKQorI2luY2x1ZGUgInVsMXRzdF9wdWJsaWNfZ2VuOTcuaCIKKyNlbHNlCisjZXJyb3IgIltFUlJPUl0gSW52YWxpZCBNRCBnZW5lcmF0aW9uIgorI2VuZGlmCmRpZmYgLS1naXQgYS9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS91bDF0c3RfcHVibGljX2dlbjkzLmggYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS91bDF0c3RfcHVibGljX2dlbjkzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwZmIxYQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL3VsMXRzdF9wdWJsaWNfZ2VuOTMuaApAQCAtMCwwICsxLDE0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIE1vZGlmaWNhdGlvbiBOb3RpY2U6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBNZWRpYVRlayBJbmMuIGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqIHVsMXRzdF9wdWJsaWMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNVDYyNjggUHJvamVjdAorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIHVsMXRzdF9wdWJsaWMuaAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKKyAKKyNpZm5kZWYgdWwxdHN0X3B1YmxpY19oCisjZGVmaW5lIHVsMXRzdF9wdWJsaWNfaAorCisjaWZkZWYgX19NVEtfVEFSR0VUX18KKyNpbmNsdWRlICJ1bDF0c3RfbXNnLmgiCisjZW5kaWYKKy8vI2luY2x1ZGUgInVsMV9kZWYuaCIKKy8vI2luY2x1ZGUgInVsMV9zdHJ1Y3QuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8vI2lmZGVmIE1UNjI2OFQKKyNpZmRlZiBfX01US19UQVJHRVRfXwordm9pZCBVTDFUU1RfSW5pdGlhbGl6YXRpb24oa2FsX2Jvb2wgZnJvbV9ub3JtYWxfdGFzayk7CisjZWxzZQordm9pZCBVTDFUU1RfSW5pdGlhbGl6YXRpb24oa2FsX2Jvb2wgZnJvbV9ub3JtYWxfdGFzayk7CisjZW5kaWYKKwordm9pZCBVTDFUU1RfSW5pdCh2b2lkKTsKK1VMMVRTVENtZFR5cGUgVUwxVFNUX0dldF9FeGVjdXRlQ21kKCB2b2lkICk7CisKK3ZvaWQgVUwxVFNUX0luaXRfZnJvbV9ub3JtYWwodm9pZCk7Cit2b2lkIFVMMVRTVF9EaXNwYXRjaE1lc3NhZ2UoaWxtX3N0cnVjdCogcHRyTXNnLCBrYWxfYm9vbCBmcm9tX25vcm1hbCk7Cit2b2lkIFVMMVRTVF9TdG9wKHZvaWQpOworCit2b2lkIFVMMVRTVF9TdGFydF9VTERDSCggLyprYWxfaW50MTYgZGxfZnJlcSwqLyBrYWxfaW50MTYgdWxfZnJlcSwga2FsX2ludDE2IHBzYywga2FsX3VpbnQzMiBzY19jb2RlLCBrYWxfdWludDggcG93ZXJfY3RybF9tb2RlLCAKKwlrYWxfdWludDggcGFfbW9kZSwga2FsX3VpbnQxNiBpZHgsIGthbF91aW50MTYgYWZjX2RhYywga2FsX3VpbnQ4IGRwY2NoX3B3ciwga2FsX3VpbnQ4IGRwZGNoX3B3ciwgCisJa2FsX3VpbnQ4IHJmX2JhbmQsIGthbF91aW50OCB2bTEsIGthbF91aW50OCB2bTIsIGthbF91aW50MTYgZGMyZGNfZGFjLCBrYWxfdWludDE2IHZiaWFzX2RhYywga2FsX3VpbnQxNiBhcGNfZGFjLCBrYWxfYm9vbCBwd3JfZGV0ICk7CisJCitrYWxfYm9vbCBVTDFUU1RfTlNGVF9TZXRJTFBDX1N0ZXAoa2FsX3VpbnQ4IHN0ZXApOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL3VsMXRzdF9wdWJsaWNfZ2VuOTUuaCBiL21jdS9pbnRlcmZhY2UvbWlkZGxld2FyZS9tZXRhL3VsMXRzdF9wdWJsaWNfZ2VuOTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzBmYjFhCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvdWwxdHN0X3B1YmxpY19nZW45NS5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgTW9kaWZpY2F0aW9uIE5vdGljZToKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IE1lZGlhVGVrIEluYy4gYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogdWwxdHN0X3B1YmxpYy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1UNjI2OCBQcm9qZWN0CisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgdWwxdHN0X3B1YmxpYy5oCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorIAorI2lmbmRlZiB1bDF0c3RfcHVibGljX2gKKyNkZWZpbmUgdWwxdHN0X3B1YmxpY19oCisKKyNpZmRlZiBfX01US19UQVJHRVRfXworI2luY2x1ZGUgInVsMXRzdF9tc2cuaCIKKyNlbmRpZgorLy8jaW5jbHVkZSAidWwxX2RlZi5oIgorLy8jaW5jbHVkZSAidWwxX3N0cnVjdC5oIgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLy8jaWZkZWYgTVQ2MjY4VAorI2lmZGVmIF9fTVRLX1RBUkdFVF9fCit2b2lkIFVMMVRTVF9Jbml0aWFsaXphdGlvbihrYWxfYm9vbCBmcm9tX25vcm1hbF90YXNrKTsKKyNlbHNlCit2b2lkIFVMMVRTVF9Jbml0aWFsaXphdGlvbihrYWxfYm9vbCBmcm9tX25vcm1hbF90YXNrKTsKKyNlbmRpZgorCit2b2lkIFVMMVRTVF9Jbml0KHZvaWQpOworVUwxVFNUQ21kVHlwZSBVTDFUU1RfR2V0X0V4ZWN1dGVDbWQoIHZvaWQgKTsKKwordm9pZCBVTDFUU1RfSW5pdF9mcm9tX25vcm1hbCh2b2lkKTsKK3ZvaWQgVUwxVFNUX0Rpc3BhdGNoTWVzc2FnZShpbG1fc3RydWN0KiBwdHJNc2csIGthbF9ib29sIGZyb21fbm9ybWFsKTsKK3ZvaWQgVUwxVFNUX1N0b3Aodm9pZCk7CisKK3ZvaWQgVUwxVFNUX1N0YXJ0X1VMRENIKCAvKmthbF9pbnQxNiBkbF9mcmVxLCovIGthbF9pbnQxNiB1bF9mcmVxLCBrYWxfaW50MTYgcHNjLCBrYWxfdWludDMyIHNjX2NvZGUsIGthbF91aW50OCBwb3dlcl9jdHJsX21vZGUsIAorCWthbF91aW50OCBwYV9tb2RlLCBrYWxfdWludDE2IGlkeCwga2FsX3VpbnQxNiBhZmNfZGFjLCBrYWxfdWludDggZHBjY2hfcHdyLCBrYWxfdWludDggZHBkY2hfcHdyLCAKKwlrYWxfdWludDggcmZfYmFuZCwga2FsX3VpbnQ4IHZtMSwga2FsX3VpbnQ4IHZtMiwga2FsX3VpbnQxNiBkYzJkY19kYWMsIGthbF91aW50MTYgdmJpYXNfZGFjLCBrYWxfdWludDE2IGFwY19kYWMsIGthbF9ib29sIHB3cl9kZXQgKTsKKwkKK2thbF9ib29sIFVMMVRTVF9OU0ZUX1NldElMUENfU3RlcChrYWxfdWludDggc3RlcCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvdWwxdHN0X3B1YmxpY19nZW45Ny5oIGIvbWN1L2ludGVyZmFjZS9taWRkbGV3YXJlL21ldGEvdWwxdHN0X3B1YmxpY19nZW45Ny5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNzRjNGMKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvaW50ZXJmYWNlL21pZGRsZXdhcmUvbWV0YS91bDF0c3RfcHVibGljX2dlbjk3LmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBNb2RpZmljYXRpb24gTm90aWNlOgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgTWVkaWFUZWsgSW5jLiBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiB1bDF0c3RfcHVibGljLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTVQ2MjY4IFByb2plY3QKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICB1bDF0c3RfcHVibGljLmgKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorIAorI2lmbmRlZiB1bDF0c3RfcHVibGljX2gKKyNkZWZpbmUgdWwxdHN0X3B1YmxpY19oCisKKy8vI2lmZGVmIF9fTVRLX1RBUkdFVF9fCisjaW5jbHVkZSAidWwxdHN0X21zZy5oIgorLy8jZW5kaWYKKy8vI2luY2x1ZGUgInVsMV9kZWYuaCIKKy8vI2luY2x1ZGUgInVsMV9zdHJ1Y3QuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8vI2lmZGVmIE1UNjI2OFQKKyNpZmRlZiBfX01US19UQVJHRVRfXwordm9pZCBVTDFUU1RfSW5pdGlhbGl6YXRpb24oa2FsX2Jvb2wgZnJvbV9ub3JtYWxfdGFzayk7CisjZWxzZQordm9pZCBVTDFUU1RfSW5pdGlhbGl6YXRpb24oa2FsX2Jvb2wgZnJvbV9ub3JtYWxfdGFzayk7CisjZW5kaWYKKwordm9pZCBVTDFUU1RfSW5pdCh2b2lkKTsKK1VMMVRTVENtZFR5cGUgVUwxVFNUX0dldF9FeGVjdXRlQ21kKCB2b2lkICk7CisKK3ZvaWQgVUwxVFNUX0luaXRfZnJvbV9ub3JtYWwodm9pZCk7Cit2b2lkIFVMMVRTVF9EaXNwYXRjaE1lc3NhZ2UoaWxtX3N0cnVjdCogcHRyTXNnLCBrYWxfYm9vbCBmcm9tX25vcm1hbCk7Cit2b2lkIFVMMVRTVF9TdG9wKHZvaWQpOworCit2b2lkIFVMMVRTVF9TdGFydF9VTERDSCggLyprYWxfaW50MTYgZGxfZnJlcSwqLyBrYWxfaW50MTYgdWxfZnJlcSwga2FsX2ludDE2IHBzYywga2FsX3VpbnQzMiBzY19jb2RlLCBrYWxfdWludDggcG93ZXJfY3RybF9tb2RlLCAKKwlrYWxfdWludDggcGFfbW9kZSwga2FsX2ludDE2IHByZiwga2FsX3VpbnQxNiBhZmNfZGFjLCBrYWxfdWludDggZHBjY2hfcHdyLCBrYWxfdWludDggZHBkY2hfcHdyLCAKKwlrYWxfdWludDggcmZfYmFuZCwga2FsX3VpbnQ4IHZtMSwga2FsX3VpbnQ4IHZtMiwga2FsX3VpbnQxNiBkYzJkY19kYWMsIGthbF91aW50MTYgdmJpYXNfZGFjLCBrYWxfdWludDE2IGFwY19kYWMsIGthbF9ib29sIHB3cl9kZXQgKTsKKwkKK2thbF9ib29sIFVMMVRTVF9OU0ZUX1NldElMUENfU3RlcChrYWxfdWludDggc3RlcCk7CisKKyNlbmRpZgo=