patch for the checkpointing paper

看板DFBSD_submit作者時間21年前 (2005/03/09 02:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/3 (看更多)
--0-860233166-1110292844=:35430 Content-Type: text/plain; charset=us-ascii Content-Id: Content-Disposition: inline Hello, The patch (containing 3 diffs and some modified files because I lost the original) is attached herewith. I can provide example programs if required.Basically, the code to checkpoint is written as :- if (tsetjmp() < 0) perror("tsetjmp"); .... tlongjmp(1); /* or any retval returned by tsetjmp() */ There are some ancillary functions that help in moving back and forth between states and/or determine last signal delivered. cache() is used to copyin and copyout a block of memory not exceeding 4 KB. Note that all variables not cached are lost after a longjmp(). None of this code will be checked into the dragonfly src tree by me. If someone wants to get this code into any src tree, pl. feel free to do so -as permitted by the BSD license. thanks -kamal ------------------------------------------------------------ Kamal R. Prasad UNIX systems consultant kamalp@acm.org In theory, there is no difference between theory and practice. In practice, there is:-). ------------------------------------------------------------ __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --0-860233166-1110292844=:35430 Content-Type: application/x-tar; name="MYPATCH.TAR" Content-Transfer-Encoding: base64 Content-Description: MYPATCH.TAR Content-Disposition: attachment; filename="MYPATCH.TAR" Y2hlY2twb2ludC5oLmRpZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAADAxMDA2NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDAxMzE2 ADEwMjEzMjQyNjIwADAxMzA3NgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd2hlZWwAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAzMywzOGMzMywzNAo8ICNkZWZpbmUgQ0tQVF9T RVRKTVAgICAgMHgzCjwgI2RlZmluZSBDS1BUX0xPTkdKTVAgICAweDQKPCAj ZGVmaW5lIENLUFRfQ1VSUiAgICAgIDB4NQo8ICNkZWZpbmUgQ0tQVF9QUkVW ICAgICAgMHg2CjwgI2RlZmluZSBDS1BUX1NJR1RZUEUgICAweDcKPCAjZGVm aW5lIENLUFRfQ09VTlQgICAgIDB4OAotLS0KPiAjZGVmaW5lIENLUFRfRlJF RVpFUElEIDB4MwkvKiBub3QgeWV0IHN1cHBvcnRlZCAqLwo+ICNkZWZpbmUg Q0tQVF9USEFXQklOICAgMHg0CS8qIG5vdCB5ZXQgc3VwcG9ydGVkICovCjQw LDQxZDM1CjwgI2RlZmluZSBJTiAgMAo8ICNkZWZpbmUgT1VUIDEKNjAsNjVk NTMKPCAjZGVmaW5lIHRzZXRqbXAoKSBzeXNfY2hlY2twb2ludChDS1BUX1NF VEpNUCwgMCwgLTEsIDApCjwgI2RlZmluZSB0bG9uZ2ptcCh4KSBzeXNfY2hl Y2twb2ludChDS1BUX0xPTkdKTVAsIHgsIC0xLCAwKQo8ICNkZWZpbmUgY2hr cHRfY3VycnN0YXRlKCkgc3lzX2NoZWNrcG9pbnQoQ0tQVF9DVVJSLCAwLCAt MSwgMCkKPCAjZGVmaW5lIGNoa3B0X3ByZXZzdGF0ZSgpIHN5c19jaGVja3Bv aW50KENLUFRfUFJFViwgMCwgLTEsIDApCjwgI2RlZmluZSBjaGtwdF9jb3Vu dCgpIHN5c19jaGVja3BvaW50KENLUFRfQ09VTlQsIDAsIC0xLCAwKQo8ICNk ZWZpbmUgY2hrcHRfc2lnbmFsKCkgc3lzX2NoZWNrcG9pbnQoQ0tQVF9TSUdU WVBFLCAwLCAtMSwgMCkKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAa2Vybl9jaGVja3BvaW50LmMuZGlmZgAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAw MDA0NzM3ADEwMjEzMjQyNDYyADAxNDEyNgAgMAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAg AHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd2hlZWwAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxNDdkMTQ2CjwgI2lmIDAKMTUxZDE0 OQo8ICNlbmRpZgoyNTcsMjU4YzI1NQo8IAlpZiAocC0+aXNfc2V0am1wID09 ICcwJykKPCAJewotLS0KPiAKMjYyYzI1OQo8IAl9Ci0tLQo+IAo2ODYsNzEx ZDY4Mgo8IGNhY2hlKHN0cnVjdCBjYWNoZV9hcmdzICp1YXApCjwgewo8IAlp bnQgZXJyb3IgPSAwOwo8IAlzdHJ1Y3QgcHJvYyAqcCA9IGN1cnRocmVhZC0+ dGRfcHJvYzsKPCAKPCAJc3dpdGNoICh1YXAtPmRpcikgewo8IAljYXNlIElO Ogo8IAkJaWYgKChwLT5jYWNoZSkgJiYgKHAtPmNhY2hlc2l6ZSA8IHVhcC0+ bGVuKSAmJiAodWFwLT5sZW4gPD0gNDA5NikpIAo8IAkJCWZyZWUocC0+Y2Fj aGUsIE1fVEVNUCk7CjwgCQlpZiAocC0+Y2FjaGUgPT0gTlVMTCkgewo8IAkJ CXByaW50ZigiaW5pdGlhbGl6aW5nIHByb2Nlc3MgY2FjaGUuLlxuIik7Cjwg CQkJcC0+Y2FjaGVzaXplID0gKHVhcC0+bGVuIDw9IDQwOTYpP3VhcC0+bGVu OjQwOTY7CjwgCQkJcC0+Y2FjaGUgPSBtYWxsb2MocC0+Y2FjaGVzaXplLCBN X1RFTVAsIE1fWkVSTyB8IE1fV0FJVE9LKTsKPCAJCX0KPCAJZXJyb3I9CWNv cHlpbih1YXAtPmFkZHIsIHAtPmNhY2hlLCAodWFwLT5sZW4gPD0gcC0+Y2Fj aGVzaXplKT91YXAtPmxlbjpwLT5jYWNoZXNpemUpOwo8IAlicmVhazsKPCAJ Y2FzZSBPVVQ6CjwgCWVycm9yPQljb3B5b3V0KHAtPmNhY2hlLCB1YXAtPmFk ZHIsICh1YXAtPmxlbiA8PSBwLT5jYWNoZXNpemUpP3VhcC0+bGVuOnAtPmNh Y2hlc2l6ZSk7CjwgCWJyZWFrOwo8IAlkZWZhdWx0Ogo8IAkgICAgICAgIGVy cm9yID0gRU9QTk9UU1VQUDsKPCAJfQo8IAlyZXR1cm4gZXJyb3I7CjwgfQo8 IAo8IGludCAKNzE0LDcxNmQ2ODQKPCAJY2hhciogYnVmOwo8IAlzdHJ1Y3Qg bmxvb2t1cGRhdGEgbmQ7CjwgCWludCByZXNwdDsKNzU1LDgxMGQ3MjIKPCAJ Y2FzZSBDS1BUX1NFVEpNUDoKPCAJCXAtPmNoa3B0Kys7CjwgCQlidWYgPSBt YWxsb2MoTUFYUEFUSExFTiArIDEsIE1fVEVNUCwgTV9OT1dBSVQpOwo8IAkJ aWYgKGJ1ZiA9PSBOVUxMKSB7CjwgCQkJcC0+Y2hrcHQtLTsKPCAJCQlyZXR1 cm4gKEVOT01FTSk7CjwgCQl9CjwgCQlzcHJpbnRmKGJ1ZiwgIi90bXAvJXMu JWQuJWQiLCBwLT5wX2NvbW0sIHAtPnBfcGlkLCBwLT5jaGtwdCk7CjwgCQll cnJvciA9IG5sb29rdXBfaW5pdCgmbmQsIGJ1ZiwgVUlPX1NZU1NQQUNFLCAw KTsKPCAJCWlmIChlcnJvciA9PSAwKQo8IAkJCWVycm9yID0ga2Vybl91bmxp bmsoJm5kKTsKPCAJCW5sb29rdXBfZG9uZSgmbmQpOwo8IAkJZXJyb3IgPSBm cF9vcGVuKGJ1ZiwgT19ST09UQ1JFRCB8IE9fV1JPTkxZfE9fQ1JFQVR8T19U UlVOQ3xPX05PRk9MTE9XLCAwNjAwLCAmZnApOwo8IAkJaWYgKGVycm9yID09 IDApIHsKPCAJCQlwLT5pc19zZXRqbXAgPSAnMSc7CjwgCQkJZXJyb3IgPSBj a3B0X2ZyZWV6ZV9wcm9jKHAsIGZwKTsKPCAJCQlwLT5pc19zZXRqbXAgPSAn MCc7CjwgCQkJZnBfY2xvc2UoZnApOwo8IAkJfSBlbHNlIAo8IAkJCXByaW50 ZigiY2hlY2twb2ludCBmYWlsZWQgd2l0aCBvcGVuIC0gZXJyb3I6ICVkXG4i LCBlcnJvcik7CjwgCQlmcmVlKGJ1ZiwgTV9URU1QKTsKPCAJCXVhcC0+c3lz bXNnX3Jlc3VsdCA9IHAtPmNoa3B0Owo8IAlicmVhazsKPCAJY2FzZSBDS1BU X0xPTkdKTVA6CjwgCQlyZXNwdCA9IHVhcC0+ZmQ7IC8qIHJlc3RvcmUgcHQg aXMgcGFzc2VkIHVzaW5nIGZkIGFyZ3VtZW50ICovCjwgCQlidWYgPSBtYWxs b2MoTUFYUEFUSExFTiArIDEsIE1fVEVNUCwgTV9XQUlUT0spOwo8IAkJaWYg KGJ1ZiA9PSBOVUxMKSAKPCAJCQlyZXR1cm4gKEVOT01FTSk7CjwgCQlpZiAo cmVzcHQgPT0gMCkKPCAJCQlyZXNwdCA9IHAtPmNoa3B0OyAvKiB1c2UgdGhl IGxhc3Qgc2F2ZWQgY2hlY2twb2ludCAqLwo8IAkJc3ByaW50ZihidWYsICIv dG1wLyVzLiVkLiVkIiwgcC0+cF9jb21tLCBwLT5wX3BpZCwgcmVzcHQpOwo8 IAkJaWYgKGVycm9yICE9IDApCjwgCQkJcmV0dXJuIEVCQURGOwo8IAkJZXJy b3IgPSBmcF9vcGVuKGJ1ZiwgT19SRE9OTFksIDA2MDAsICZmcCk7CjwgCQlp ZiAoZXJyb3IgPT0gMCkgewo8IAkJCXAtPmlzX3NldGptcCA9ICcxJzsKPCAJ CQlja3B0X3RoYXdfcHJvYyhwLCBmcCk7CjwgCQkJcC0+aXNfc2V0am1wID0g JzAnOwo8IAkJCWZwX2Nsb3NlKGZwKTsKPCAJCQl9CjwgCQllbHNlIAo8IAkJ CXByaW50ZigiY2Fubm90IGFjY2VzcyBkYXRhLCBlcnIgPSAlZFxuIiwgZXJy b3IpOwo8IAkJZnJlZShidWYsIE1fVEVNUCk7CjwgCWJyZWFrOwo8IAljYXNl IENLUFRfQ1VSUjoKPCAJCXVhcC0+c3lzbXNnX3Jlc3VsdCA9IHAtPmN1cnI7 CjwgCWJyZWFrOwo8IAljYXNlIENLUFRfUFJFVjoKPCAJCXVhcC0+c3lzbXNn X3Jlc3VsdCA9IHAtPnByZXY7CjwgCWJyZWFrOwo8IAljYXNlIENLUFRfU0lH VFlQRToKPCAJCXVhcC0+c3lzbXNnX3Jlc3VsdCA9IHAtPmNoa3B0X3NpZzsK PCAJYnJlYWs7CjwgCWNhc2UgQ0tQVF9DT1VOVDoKPCAJCXVhcC0+c3lzbXNn X3Jlc3VsdCA9IHAtPmNoa3B0Owo8IAlicmVhazsKAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAa2Vybl9mb3JrLmMuZGlmZgAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAwMDAwMAAw MDAwMDAwADAwMDAwMDAwMjc0ADEwMjEzMjQyNDYyADAxMjczMAAgMAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA d2hlZWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyOTEsMjk3ZDI5 MAo8IAluZXdwcm9jLT5jaGtwdCA9IDA7CjwgCW5ld3Byb2MtPmN1cnIgPSAw Owo8IAluZXdwcm9jLT5wcmV2ID0gMDsKPCAJbmV3cHJvYy0+Y2FjaGVzaXpl ID0gMDsKPCAJbmV3cHJvYy0+Y2hrcHRfc2lnID0gMDsKPCAJbmV3cHJvYy0+ Y2FjaGUgPSBOVUxMOwo8IAluZXdwcm9jLT5pc19zZXRqbXAgPSAnMCc7CgAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAHN5c2NhbGxzLm1hc3RlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAwMTAwNjQ0ADAwMDAwMDAAMDAwMDAwMAAwMDAw MDA2NjcwMwAxMDIxMzI0MjEzNwAwMTI3NTcAIDAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIg IAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHdoZWVsAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICREcmFnb25GbHk6IHNyYy9zeXMv a2Vybi9zeXNjYWxscy5tYXN0ZXIsdiAxLjIwIDIwMDUvMDIvMjEgMjE6NTE6 NDggZGlsbG9uIEV4cCAkCgo7IEAoIylzeXNjYWxscy5tYXN0ZXIJOC4yIChC ZXJrZWxleSkgMS8xMy85NAo7ICRGcmVlQlNEOiBzcmMvc3lzL2tlcm4vc3lz Y2FsbHMubWFzdGVyLHYgMS43Mi4yLjEwIDIwMDIvMDcvMTIgMDg6MjI6NDYg YWxmcmVkIEV4cCAkCjsKOyBTeXN0ZW0gY2FsbCBuYW1lL251bWJlciBtYXN0 ZXIgZmlsZS4KOyBQcm9jZXNzZWQgdG8gY3JlYXRlZCBpbml0X3N5c2VudC5j LCBzeXNjYWxscy5jIGFuZCBzeXNjYWxsLmguCgo7IENvbHVtbnM6IG51bWJl ciBbTVBTQUZFXSB0eXBlIG5hcmdzIG5hbWVzcGMgbmFtZSBhbHR7bmFtZSx0 YWcscnR5cH0vY29tbWVudHMKOwludW1iZXIJc3lzdGVtIGNhbGwgbnVtYmVy LCBtdXN0IGJlIGluIG9yZGVyCjsgICBNUFNBRkUJb3B0aW9uYWwgZmllbGQs IHNwZWNpZmllcyB0aGF0IHN5c2NhbGwgZG9lcyBub3Qgd2FudCB0aGUKOwkJ QkdMIGdyYWJiZWQgYXV0b21hdGljYWxseSAoaXQgaXMgU01QIHNhZmUpLgo7 CXR5cGUJb25lIG9mIFNURCwgT0JTT0wsIFVOSU1QTCwgQ09NUEFULCBDUFRf Tk9BLCBMSUJDT01QQVQsCjsJCU5PREVGLCBOT0FSR1MsIE5PUFJPVE8sIE5P SU1QTAo7CW5hbWVzcGMgb25lIG9mIFBPU0lYLCBCU0QsIE5PSElERQo7CW5h bWUJcHN1ZWRvLXByb3RvdHlwZSBvZiBzeXNjYWxsIHJvdXRpbmUKOwkJSWYg b25lIG9mIHRoZSBmb2xsb3dpbmcgYWx0cyBpcyBkaWZmZXJlbnQsIHRoZW4g YWxsIGFwcGVhcjoKOwlhbHRuYW1lCW5hbWUgb2Ygc3lzdGVtIGNhbGwgaWYg ZGlmZmVyZW50CjsJYWx0dGFnCW5hbWUgb2YgYXJncyBzdHJ1Y3QgdGFnIGlm IGRpZmZlcmVudCBmcm9tIFtvXWBuYW1lJyJfYXJncyIKOwlhbHRydHlwCXJl dHVybiB0eXBlIGlmIG5vdCBpbnQgKGJvZ3VzIC0gc3lzY2FsbHMgYWx3YXlz IHJldHVybiBpbnQpCjsJCWZvciBVTklNUEwvT0JTT0wsIG5hbWUgY29udGlu dWVzIHdpdGggY29tbWVudHMKCjsgdHlwZXM6CjsJU1RECWFsd2F5cyBpbmNs dWRlZAo7CUNPTVBBVAlpbmNsdWRlZCBvbiBDT01QQVQgI2lmZGVmCjsJTElC Q09NUEFUIGluY2x1ZGVkIG9uIENPTVBBVCAjaWZkZWYsIGFuZCBwbGFjZWQg aW4gc3lzY2FsbC5oCjsJT0JTT0wJb2Jzb2xldGUsIG5vdCBpbmNsdWRlZCBp biBzeXN0ZW0sIG9ubHkgc3BlY2lmaWVzIG5hbWUKOwlVTklNUEwJbm90IGlt cGxlbWVudGVkLCBwbGFjZWhvbGRlciBvbmx5Cgo7ICNpZmRlZidzLCBldGMu IG1heSBiZSBpbmNsdWRlZCwgYW5kIGFyZSBjb3BpZWQgdG8gdGhlIG91dHB1 dCBmaWxlcy4KCiNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KI2luY2x1ZGUgPHN5 cy9zeXNlbnQuaD4KI2luY2x1ZGUgPHN5cy9zeXNwcm90by5oPgoKOyBSZXNl cnZlZC91bmltcGxlbWVudGVkIHN5c3RlbSBjYWxscyBpbiB0aGUgcmFuZ2Ug MC0xNTAgaW5jbHVzaXZlCjsgYXJlIHJlc2VydmVkIGZvciB1c2UgaW4gZnV0 dXJlIEJlcmtlbGV5IHJlbGVhc2VzLgo7IEFkZGl0aW9uYWwgc3lzdGVtIGNh bGxzIGltcGxlbWVudGVkIGluIHZlbmRvciBhbmQgb3RoZXIKOyByZWRpc3Ry aWJ1dGlvbnMgc2hvdWxkIGJlIHBsYWNlZCBpbiB0aGUgcmVzZXJ2ZWQgcmFu Z2UgYXQgdGhlIGVuZAo7IG9mIHRoZSBjdXJyZW50IGNhbGxzLgoKMAlTVEQJ Tk9ISURFCXsgaW50IG5vc3lzKHZvaWQpOyB9IHN5c2NhbGwgbm9zeXNfYXJn cyBpbnQKMQlTVEQJTk9ISURFCXsgdm9pZCBzeXNfZXhpdChpbnQgcnZhbCk7 IH0gZXhpdCBzeXNfZXhpdF9hcmdzIHZvaWQKMglTVEQJUE9TSVgJeyBpbnQg Zm9yayh2b2lkKTsgfQozCVNURAlQT1NJWAl7IHNzaXplX3QgcmVhZChpbnQg ZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IG5ieXRlKTsgfQo0CVNURAlQT1NJWAl7 IHNzaXplX3Qgd3JpdGUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVf dCBuYnl0ZSk7IH0KNQlTVEQJUE9TSVgJeyBpbnQgb3BlbihjaGFyICpwYXRo LCBpbnQgZmxhZ3MsIGludCBtb2RlKTsgfQo7IFhYWCBzaG91bGQgYmUJCXsg aW50IG9wZW4oY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzLCAuLi4pOyB9 CjsgYnV0IHdlJ3JlIG5vdCByZWFkeSBmb3IgYGNvbnN0JyBvciB2YXJhcmdz Lgo7IFhYWCBtYW4gcGFnZSBzYXlzIGBtb2RlX3QgbW9kZScuCjYJU1RECVBP U0lYCXsgaW50IGNsb3NlKGludCBmZCk7IH0KNwlTVEQJQlNECXsgaW50IHdh aXQ0KGludCBwaWQsIGludCAqc3RhdHVzLCBpbnQgb3B0aW9ucywgXAoJCQkg ICAgc3RydWN0IHJ1c2FnZSAqcnVzYWdlKTsgfSB3YWl0NCB3YWl0X2FyZ3Mg aW50CjgJQ09NUEFUCUJTRAl7IGludCBjcmVhdChjaGFyICpwYXRoLCBpbnQg bW9kZSk7IH0KOQlTVEQJUE9TSVgJeyBpbnQgbGluayhjaGFyICpwYXRoLCBj aGFyICpsaW5rKTsgfQoxMAlTVEQJUE9TSVgJeyBpbnQgdW5saW5rKGNoYXIg KnBhdGgpOyB9CjExCU9CU09MCU5PSElERQlleGVjdgoxMglTVEQJUE9TSVgJ eyBpbnQgY2hkaXIoY2hhciAqcGF0aCk7IH0KMTMJU1RECUJTRAl7IGludCBm Y2hkaXIoaW50IGZkKTsgfQoxNAlTVEQJUE9TSVgJeyBpbnQgbWtub2QoY2hh ciAqcGF0aCwgaW50IG1vZGUsIGludCBkZXYpOyB9CjE1CVNURAlQT1NJWAl7 IGludCBjaG1vZChjaGFyICpwYXRoLCBpbnQgbW9kZSk7IH0KMTYJU1RECVBP U0lYCXsgaW50IGNob3duKGNoYXIgKnBhdGgsIGludCB1aWQsIGludCBnaWQp OyB9CjE3CVNURAlCU0QJeyBpbnQgb2JyZWFrKGNoYXIgKm5zaXplKTsgfSBi cmVhayBvYnJlYWtfYXJncyBpbnQKMTgJU1RECUJTRAl7IGludCBnZXRmc3N0 YXQoc3RydWN0IHN0YXRmcyAqYnVmLCBsb25nIGJ1ZnNpemUsIFwKCQkJICAg IGludCBmbGFncyk7IH0KMTkJQ09NUEFUCVBPU0lYCXsgbG9uZyBsc2Vlayhp bnQgZmQsIGxvbmcgb2Zmc2V0LCBpbnQgd2hlbmNlKTsgfQoyMAlTVEQJUE9T SVgJeyBwaWRfdCBnZXRwaWQodm9pZCk7IH0KMjEJU1RECUJTRAl7IGludCBt b3VudChjaGFyICp0eXBlLCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MsIFwKCQkJ ICAgIGNhZGRyX3QgZGF0YSk7IH0KOyBYWFggYHBhdGgnIHNob3VsZCBoYXZl IHR5cGUgYGNvbnN0IGNoYXIgKicgYnV0IHdlJ3JlIG5vdCByZWFkeSBmb3Ig dGhhdC4KMjIJU1RECUJTRAl7IGludCB1bm1vdW50KGNoYXIgKnBhdGgsIGlu dCBmbGFncyk7IH0KMjMJU1RECVBPU0lYCXsgaW50IHNldHVpZCh1aWRfdCB1 aWQpOyB9CjI0CU1QU0FGRQlTVEQJUE9TSVgJeyB1aWRfdCBnZXR1aWQodm9p ZCk7IH0KMjUJTVBTQUZFCVNURAlQT1NJWAl7IHVpZF90IGdldGV1aWQodm9p ZCk7IH0KMjYJU1RECUJTRAl7IGludCBwdHJhY2UoaW50IHJlcSwgcGlkX3Qg cGlkLCBjYWRkcl90IGFkZHIsIFwKCQkJICAgIGludCBkYXRhKTsgfQoyNwlT VEQJQlNECXsgaW50IHJlY3Ztc2coaW50IHMsIHN0cnVjdCBtc2doZHIgKm1z ZywgaW50IGZsYWdzKTsgfQoyOAlTVEQJQlNECXsgaW50IHNlbmRtc2coaW50 IHMsIGNhZGRyX3QgbXNnLCBpbnQgZmxhZ3MpOyB9CjI5CVNURAlCU0QJeyBp bnQgcmVjdmZyb20oaW50IHMsIGNhZGRyX3QgYnVmLCBzaXplX3QgbGVuLCBc CgkJCSAgICBpbnQgZmxhZ3MsIGNhZGRyX3QgZnJvbSwgaW50ICpmcm9tbGVu YWRkcik7IH0KMzAJU1RECUJTRAl7IGludCBhY2NlcHQoaW50IHMsIGNhZGRy X3QgbmFtZSwgaW50ICphbmFtZWxlbik7IH0KMzEJU1RECUJTRAl7IGludCBn ZXRwZWVybmFtZShpbnQgZmRlcywgY2FkZHJfdCBhc2EsIGludCAqYWxlbik7 IH0KMzIJU1RECUJTRAl7IGludCBnZXRzb2NrbmFtZShpbnQgZmRlcywgY2Fk ZHJfdCBhc2EsIGludCAqYWxlbik7IH0KMzMJU1RECVBPU0lYCXsgaW50IGFj Y2VzcyhjaGFyICpwYXRoLCBpbnQgZmxhZ3MpOyB9CjM0CVNURAlCU0QJeyBp bnQgY2hmbGFncyhjaGFyICpwYXRoLCBpbnQgZmxhZ3MpOyB9CjM1CVNURAlC U0QJeyBpbnQgZmNoZmxhZ3MoaW50IGZkLCBpbnQgZmxhZ3MpOyB9CjM2CVNU RAlCU0QJeyBpbnQgc3luYyh2b2lkKTsgfQozNwlTVEQJUE9TSVgJeyBpbnQg a2lsbChpbnQgcGlkLCBpbnQgc2lnbnVtKTsgfQozOAlDT01QQVQJUE9TSVgJ eyBpbnQgc3RhdChjaGFyICpwYXRoLCBzdHJ1Y3Qgb3N0YXQgKnViKTsgfQoz OQlTVEQJUE9TSVgJeyBwaWRfdCBnZXRwcGlkKHZvaWQpOyB9CjQwCUNPTVBB VAlQT1NJWAl7IGludCBsc3RhdChjaGFyICpwYXRoLCBzdHJ1Y3Qgb3N0YXQg KnViKTsgfQo0MQlTVEQJUE9TSVgJeyBpbnQgZHVwKHVfaW50IGZkKTsgfQo0 MglTVEQJUE9TSVgJeyBpbnQgcGlwZSh2b2lkKTsgfQo0MwlTVEQJUE9TSVgJ eyBnaWRfdCBnZXRlZ2lkKHZvaWQpOyB9CjQ0CVNURAlCU0QJeyBpbnQgcHJv ZmlsKGNhZGRyX3Qgc2FtcGxlcywgc2l6ZV90IHNpemUsIFwKCQkJICAgIHNp emVfdCBvZmZzZXQsIHVfaW50IHNjYWxlKTsgfQo0NQlTVEQJQlNECXsgaW50 IGt0cmFjZShjb25zdCBjaGFyICpmbmFtZSwgaW50IG9wcywgaW50IGZhY3Ms IFwKCQkJICAgIGludCBwaWQpOyB9CjQ2CU9CU09MCU5PSElERQlmcmVlYnNk M19zaWdhY3Rpb24KNDcJTVBTQUZFCVNURAlQT1NJWAl7IGdpZF90IGdldGdp ZCh2b2lkKTsgfQo0OAlPQlNPTAlOT0hJREUJZnJlZWJzZDNfc2lncHJvY21h c2sKOyBYWFggbm90ZSBub25zdGFuZGFyZCAoYm9ndXMpIGNhbGxpbmcgY29u dmVudGlvbiAtIHRoZSBsaWJjIHN0dWIgcGFzc2VzCjsgdXMgdGhlIG1hc2ss IG5vdCBhIHBvaW50ZXIgdG8gaXQsIGFuZCB3ZSByZXR1cm4gdGhlIG9sZCBt YXNrIGFzIHRoZQo7IChpbnQpIHJldHVybiB2YWx1ZS4KNDkJU1RECUJTRAl7 IGludCBnZXRsb2dpbihjaGFyICpuYW1lYnVmLCB1X2ludCBuYW1lbGVuKTsg fQo1MAlTVEQJQlNECXsgaW50IHNldGxvZ2luKGNoYXIgKm5hbWVidWYpOyB9 CjUxCVNURAlCU0QJeyBpbnQgYWNjdChjaGFyICpwYXRoKTsgfQo1MglPQlNP TAlOT0hJREUJZnJlZWJzZDNfc2lncGVuZGluZwo1MwlTVEQJQlNECXsgaW50 IHNpZ2FsdHN0YWNrKHN0YWNrX3QgKnNzLCBzdGFja190ICpvc3MpOyB9CjU0 CVNURAlQT1NJWAl7IGludCBpb2N0bChpbnQgZmQsIHVfbG9uZyBjb20sIGNh ZGRyX3QgZGF0YSk7IH0KNTUJU1RECUJTRAl7IGludCByZWJvb3QoaW50IG9w dCk7IH0KNTYJU1RECVBPU0lYCXsgaW50IHJldm9rZShjaGFyICpwYXRoKTsg fQo1NwlTVEQJUE9TSVgJeyBpbnQgc3ltbGluayhjaGFyICpwYXRoLCBjaGFy ICpsaW5rKTsgfQo1OAlTVEQJUE9TSVgJeyBpbnQgcmVhZGxpbmsoY2hhciAq cGF0aCwgY2hhciAqYnVmLCBpbnQgY291bnQpOyB9CjU5CVNURAlQT1NJWAl7 IGludCBleGVjdmUoY2hhciAqZm5hbWUsIGNoYXIgKiphcmd2LCBjaGFyICoq ZW52dik7IH0KNjAJTVBTQUZFCVNURAlQT1NJWAl7IGludCB1bWFzayhpbnQg bmV3bWFzayk7IH0gdW1hc2sgdW1hc2tfYXJncyBpbnQKNjEJU1RECUJTRAl7 IGludCBjaHJvb3QoY2hhciAqcGF0aCk7IH0KNjIJQ09NUEFUCVBPU0lYCXsg aW50IGZzdGF0KGludCBmZCwgc3RydWN0IG9zdGF0ICpzYik7IH0KNjMJQ09N UEFUCUJTRAl7IGludCBnZXRrZXJuaW5mbyhpbnQgb3AsIGNoYXIgKndoZXJl LCBzaXplX3QgKnNpemUsIFwKCQkJICAgIGludCBhcmcpOyB9IGdldGtlcm5p bmZvIGdldGtlcm5pbmZvX2FyZ3MgaW50CjY0CUNPTVBBVAlCU0QJeyBpbnQg Z2V0cGFnZXNpemUodm9pZCk7IH0gXAoJCQkgICAgZ2V0cGFnZXNpemUgZ2V0 cGFnZXNpemVfYXJncyBpbnQKNjUJU1RECUJTRAl7IGludCBtc3luYyh2b2lk ICphZGRyLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOyB9CjY2CVNURAlCU0QJ eyBpbnQgdmZvcmsodm9pZCk7IH0KNjcJT0JTT0wJTk9ISURFCXZyZWFkCjY4 CU9CU09MCU5PSElERQl2d3JpdGUKNjkJU1RECUJTRAl7IGludCBzYnJrKGlu dCBpbmNyKTsgfQo3MAlTVEQJQlNECXsgaW50IHNzdGsoaW50IGluY3IpOyB9 CjcxCUNPTVBBVAlCU0QJeyBpbnQgbW1hcCh2b2lkICphZGRyLCBpbnQgbGVu LCBpbnQgcHJvdCwgXAoJCQkgICAgaW50IGZsYWdzLCBpbnQgZmQsIGxvbmcg cG9zKTsgfQo3MglTVEQJQlNECXsgaW50IG92YWR2aXNlKGludCBhbm9tKTsg fSB2YWR2aXNlIG92YWR2aXNlX2FyZ3MgaW50CjczCVNURAlCU0QJeyBpbnQg bXVubWFwKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pOyB9Cjc0CVNURAlCU0QJ eyBpbnQgbXByb3RlY3QoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbiwg aW50IHByb3QpOyB9Cjc1CVNURAlCU0QJeyBpbnQgbWFkdmlzZSh2b2lkICph ZGRyLCBzaXplX3QgbGVuLCBpbnQgYmVoYXYpOyB9Cjc2CU9CU09MCU5PSElE RQl2aGFuZ3VwCjc3CU9CU09MCU5PSElERQl2bGltaXQKNzgJU1RECUJTRAl7 IGludCBtaW5jb3JlKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIFwK CQkJICAgIGNoYXIgKnZlYyk7IH0KNzkJU1RECVBPU0lYCXsgaW50IGdldGdy b3Vwcyh1X2ludCBnaWRzZXRzaXplLCBnaWRfdCAqZ2lkc2V0KTsgfQo4MAlT VEQJUE9TSVgJeyBpbnQgc2V0Z3JvdXBzKHVfaW50IGdpZHNldHNpemUsIGdp ZF90ICpnaWRzZXQpOyB9CjgxCU1QU0FGRQlTVEQJUE9TSVgJeyBpbnQgZ2V0 cGdycCh2b2lkKTsgfQo4MglTVEQJUE9TSVgJeyBpbnQgc2V0cGdpZChpbnQg cGlkLCBpbnQgcGdpZCk7IH0KODMJU1RECUJTRAl7IGludCBzZXRpdGltZXIo dV9pbnQgd2hpY2gsIHN0cnVjdCBpdGltZXJ2YWwgKml0diwgXAoJCQkgICAg c3RydWN0IGl0aW1lcnZhbCAqb2l0dik7IH0KODQJQ09NUEFUCUJTRAl7IGlu dCB3YWl0KHZvaWQpOyB9Cjg1CVNURAlCU0QJeyBpbnQgc3dhcG9uKGNoYXIg Km5hbWUpOyB9Cjg2CVNURAlCU0QJeyBpbnQgZ2V0aXRpbWVyKHVfaW50IHdo aWNoLCBzdHJ1Y3QgaXRpbWVydmFsICppdHYpOyB9Cjg3CUNPTVBBVAlCU0QJ eyBpbnQgZ2V0aG9zdG5hbWUoY2hhciAqaG9zdG5hbWUsIHVfaW50IGxlbik7 IH0gXAoJCQkgICAgZ2V0aG9zdG5hbWUgZ2V0aG9zdG5hbWVfYXJncyBpbnQK ODgJQ09NUEFUCUJTRAl7IGludCBzZXRob3N0bmFtZShjaGFyICpob3N0bmFt ZSwgdV9pbnQgbGVuKTsgfSBcCgkJCSAgICBzZXRob3N0bmFtZSBzZXRob3N0 bmFtZV9hcmdzIGludAo4OQlTVEQJQlNECXsgaW50IGdldGR0YWJsZXNpemUo dm9pZCk7IH0KOTAJU1RECVBPU0lYCXsgaW50IGR1cDIodV9pbnQgZnJvbSwg dV9pbnQgdG8pOyB9CjkxCVVOSU1QTAlCU0QJZ2V0ZG9wdAo5MglTVEQJUE9T SVgJeyBpbnQgZmNudGwoaW50IGZkLCBpbnQgY21kLCBsb25nIGFyZyk7IH0K OyBYWFggc2hvdWxkIGJlCQl7IGludCBmY250bChpbnQgZmQsIGludCBjbWQs IC4uLik7IH0KOyBidXQgd2UncmUgbm90IHJlYWR5IGZvciB2YXJhcmdzLgo7 IFhYWCBtYW4gcGFnZSBzYXlzIGBpbnQgYXJnJyB0b28uCjkzCVNURAlCU0QJ eyBpbnQgc2VsZWN0KGludCBuZCwgZmRfc2V0ICppbiwgZmRfc2V0ICpvdSwg XAoJCQkgICAgZmRfc2V0ICpleCwgc3RydWN0IHRpbWV2YWwgKnR2KTsgfQo5 NAlVTklNUEwJQlNECXNldGRvcHQKOTUJU1RECVBPU0lYCXsgaW50IGZzeW5j KGludCBmZCk7IH0KOTYJU1RECUJTRAl7IGludCBzZXRwcmlvcml0eShpbnQg d2hpY2gsIGludCB3aG8sIGludCBwcmlvKTsgfQo5NwlTVEQJQlNECXsgaW50 IHNvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKTsg fQo5OAlTVEQJQlNECXsgaW50IGNvbm5lY3QoaW50IHMsIGNhZGRyX3QgbmFt ZSwgaW50IG5hbWVsZW4pOyB9Cjk5CUNQVF9OT0EJQlNECXsgaW50IGFjY2Vw dChpbnQgcywgY2FkZHJfdCBuYW1lLCBpbnQgKmFuYW1lbGVuKTsgfSBcCgkJ CSAgICBhY2NlcHQgYWNjZXB0X2FyZ3MgaW50CjEwMAlTVEQJQlNECXsgaW50 IGdldHByaW9yaXR5KGludCB3aGljaCwgaW50IHdobyk7IH0KMTAxCUNPTVBB VAlCU0QJeyBpbnQgc2VuZChpbnQgcywgY2FkZHJfdCBidWYsIGludCBsZW4s IGludCBmbGFncyk7IH0KMTAyCUNPTVBBVAlCU0QJeyBpbnQgcmVjdihpbnQg cywgY2FkZHJfdCBidWYsIGludCBsZW4sIGludCBmbGFncyk7IH0KMTAzCU9C U09MCU5PSElERQlmcmVlYnNkM19zaWdyZXR1cm4KMTA0CVNURAlCU0QJeyBp bnQgYmluZChpbnQgcywgY2FkZHJfdCBuYW1lLCBpbnQgbmFtZWxlbik7IH0K MTA1CVNURAlCU0QJeyBpbnQgc2V0c29ja29wdChpbnQgcywgaW50IGxldmVs LCBpbnQgbmFtZSwgXAoJCQkgICAgY2FkZHJfdCB2YWwsIGludCB2YWxzaXpl KTsgfQoxMDYJU1RECUJTRAl7IGludCBsaXN0ZW4oaW50IHMsIGludCBiYWNr bG9nKTsgfQoxMDcJT0JTT0wJTk9ISURFCXZ0aW1lcwoxMDgJQ09NUEFUCUJT RAl7IGludCBzaWd2ZWMoaW50IHNpZ251bSwgc3RydWN0IHNpZ3ZlYyAqbnN2 LCBcCgkJCSAgICBzdHJ1Y3Qgc2lndmVjICpvc3YpOyB9CjEwOQlDT01QQVQJ QlNECXsgaW50IHNpZ2Jsb2NrKGludCBtYXNrKTsgfQoxMTAJQ09NUEFUCUJT RAl7IGludCBzaWdzZXRtYXNrKGludCBtYXNrKTsgfQoxMTEJT0JTT0wJTk9I SURFCWZyZWVic2QzX3NpZ3N1c3BlbmQKOyBYWFggbm90ZSBub25zdGFuZGFy ZCAoYm9ndXMpIGNhbGxpbmcgY29udmVudGlvbiAtIHRoZSBsaWJjIHN0dWIg cGFzc2VzCjsgdXMgdGhlIG1hc2ssIG5vdCBhIHBvaW50ZXIgdG8gaXQuCjEx MglDT01QQVQJQlNECXsgaW50IHNpZ3N0YWNrKHN0cnVjdCBzaWdzdGFjayAq bnNzLCBcCgkJCSAgICBzdHJ1Y3Qgc2lnc3RhY2sgKm9zcyk7IH0KMTEzCUNP TVBBVAlCU0QJeyBpbnQgcmVjdm1zZyhpbnQgcywgc3RydWN0IG9tc2doZHIg Km1zZywgaW50IGZsYWdzKTsgfQoxMTQJQ09NUEFUCUJTRAl7IGludCBzZW5k bXNnKGludCBzLCBjYWRkcl90IG1zZywgaW50IGZsYWdzKTsgfQoxMTUJT0JT T0wJTk9ISURFCXZ0cmFjZQoxMTYJTVBTQUZFCVNURAlCU0QJeyBpbnQgZ2V0 dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0cCwgXAoJCQkgICAgc3RydWN0 IHRpbWV6b25lICp0enApOyB9CjExNwlTVEQJQlNECXsgaW50IGdldHJ1c2Fn ZShpbnQgd2hvLCBzdHJ1Y3QgcnVzYWdlICpydXNhZ2UpOyB9CjExOAlTVEQJ QlNECXsgaW50IGdldHNvY2tvcHQoaW50IHMsIGludCBsZXZlbCwgaW50IG5h bWUsIFwKCQkJICAgIGNhZGRyX3QgdmFsLCBpbnQgKmF2YWxzaXplKTsgfQox MTkJVU5JTVBMCU5PSElERQlyZXN1YmEgKEJTRC9PUyAyLngpCjEyMAlTVEQJ QlNECXsgaW50IHJlYWR2KGludCBmZCwgc3RydWN0IGlvdmVjICppb3ZwLCB1 X2ludCBpb3ZjbnQpOyB9CjEyMQlTVEQJQlNECXsgaW50IHdyaXRldihpbnQg ZmQsIHN0cnVjdCBpb3ZlYyAqaW92cCwgXAoJCQkgICAgdV9pbnQgaW92Y250 KTsgfQoxMjIJU1RECUJTRAl7IGludCBzZXR0aW1lb2ZkYXkoc3RydWN0IHRp bWV2YWwgKnR2LCBcCgkJCSAgICBzdHJ1Y3QgdGltZXpvbmUgKnR6cCk7IH0K MTIzCVNURAlCU0QJeyBpbnQgZmNob3duKGludCBmZCwgaW50IHVpZCwgaW50 IGdpZCk7IH0KMTI0CVNURAlCU0QJeyBpbnQgZmNobW9kKGludCBmZCwgaW50 IG1vZGUpOyB9CjEyNQlDUFRfTk9BCUJTRAl7IGludCByZWN2ZnJvbShpbnQg cywgY2FkZHJfdCBidWYsIHNpemVfdCBsZW4sIFwKCQkJICAgIGludCBmbGFn cywgY2FkZHJfdCBmcm9tLCBpbnQgKmZyb21sZW5hZGRyKTsgfSBcCgkJCSAg ICByZWN2ZnJvbSByZWN2ZnJvbV9hcmdzIGludAoxMjYJU1RECUJTRAl7IGlu dCBzZXRyZXVpZChpbnQgcnVpZCwgaW50IGV1aWQpOyB9CjEyNwlTVEQJQlNE CXsgaW50IHNldHJlZ2lkKGludCByZ2lkLCBpbnQgZWdpZCk7IH0KMTI4CVNU RAlQT1NJWAl7IGludCByZW5hbWUoY2hhciAqZnJvbSwgY2hhciAqdG8pOyB9 CjEyOQlDT01QQVQJQlNECXsgaW50IHRydW5jYXRlKGNoYXIgKnBhdGgsIGxv bmcgbGVuZ3RoKTsgfQoxMzAJQ09NUEFUCUJTRAl7IGludCBmdHJ1bmNhdGUo aW50IGZkLCBsb25nIGxlbmd0aCk7IH0KMTMxCVNURAlCU0QJeyBpbnQgZmxv Y2soaW50IGZkLCBpbnQgaG93KTsgfQoxMzIJU1RECVBPU0lYCXsgaW50IG1r ZmlmbyhjaGFyICpwYXRoLCBpbnQgbW9kZSk7IH0KMTMzCVNURAlCU0QJeyBp bnQgc2VuZHRvKGludCBzLCBjYWRkcl90IGJ1Ziwgc2l6ZV90IGxlbiwgXAoJ CQkgICAgaW50IGZsYWdzLCBjYWRkcl90IHRvLCBpbnQgdG9sZW4pOyB9CjEz NAlTVEQJQlNECXsgaW50IHNodXRkb3duKGludCBzLCBpbnQgaG93KTsgfQox MzUJU1RECUJTRAl7IGludCBzb2NrZXRwYWlyKGludCBkb21haW4sIGludCB0 eXBlLCBpbnQgcHJvdG9jb2wsIFwKCQkJICAgIGludCAqcnN2KTsgfQoxMzYJ U1RECVBPU0lYCXsgaW50IG1rZGlyKGNoYXIgKnBhdGgsIGludCBtb2RlKTsg fQoxMzcJU1RECVBPU0lYCXsgaW50IHJtZGlyKGNoYXIgKnBhdGgpOyB9CjEz OAlTVEQJQlNECXsgaW50IHV0aW1lcyhjaGFyICpwYXRoLCBzdHJ1Y3QgdGlt ZXZhbCAqdHB0cik7IH0KMTM5CU9CU09MCU5PSElERQk0LjIgc2lncmV0dXJu CjE0MAlTVEQJQlNECXsgaW50IGFkanRpbWUoc3RydWN0IHRpbWV2YWwgKmRl bHRhLCBcCgkJCSAgICBzdHJ1Y3QgdGltZXZhbCAqb2xkZGVsdGEpOyB9CjE0 MQlDT01QQVQJQlNECXsgaW50IGdldHBlZXJuYW1lKGludCBmZGVzLCBjYWRk cl90IGFzYSwgaW50ICphbGVuKTsgfQoxNDIJQ09NUEFUCUJTRAl7IGxvbmcg Z2V0aG9zdGlkKHZvaWQpOyB9CjE0MwlDT01QQVQJQlNECXsgaW50IHNldGhv c3RpZChsb25nIGhvc3RpZCk7IH0KMTQ0CUNPTVBBVAlCU0QJeyBpbnQgZ2V0 cmxpbWl0KHVfaW50IHdoaWNoLCBzdHJ1Y3Qgb3JsaW1pdCAqcmxwKTsgfQox NDUJQ09NUEFUCUJTRAl7IGludCBzZXRybGltaXQodV9pbnQgd2hpY2gsIHN0 cnVjdCBvcmxpbWl0ICpybHApOyB9CjE0NglDT01QQVQJQlNECXsgaW50IGtp bGxwZyhpbnQgcGdpZCwgaW50IHNpZ251bSk7IH0KMTQ3CVNURAlQT1NJWAl7 IGludCBzZXRzaWQodm9pZCk7IH0KMTQ4CVNURAlCU0QJeyBpbnQgcXVvdGFj dGwoY2hhciAqcGF0aCwgaW50IGNtZCwgaW50IHVpZCwgXAoJCQkgICAgY2Fk ZHJfdCBhcmcpOyB9CjE0OQlDT01QQVQJQlNECXsgaW50IHF1b3RhKHZvaWQp OyB9CjE1MAlDUFRfTk9BCUJTRAl7IGludCBnZXRzb2NrbmFtZShpbnQgZmRl YywgY2FkZHJfdCBhc2EsIGludCAqYWxlbik7IH1cCgkJCSAgICBnZXRzb2Nr bmFtZSBnZXRzb2NrbmFtZV9hcmdzIGludAoKOyBTeXNjYWxscyAxNTEtMTgw IGluY2x1c2l2ZSBhcmUgcmVzZXJ2ZWQgZm9yIHZlbmRvci1zcGVjaWZpYwo7 IHN5c3RlbSBjYWxscy4gIChUaGlzIGluY2x1ZGVzIHZhcmlvdXMgY2FsbHMg YWRkZWQgZm9yIGNvbXBhdGliaXR5Cjsgd2l0aCBvdGhlciBVbml4IHZhcmlh bnRzLikKOyBTb21lIG9mIHRoZXNlIGNhbGxzIGFyZSBub3cgc3VwcG9ydGVk IGJ5IEJTRC4uLgoxNTEJVU5JTVBMCU5PSElERQlzZW1fbG9jayAoQlNEL09T IDIueCkKMTUyCVVOSU1QTAlOT0hJREUJc2VtX3dha2V1cCAoQlNEL09TIDIu eCkKMTUzCVVOSU1QTAlOT0hJREUJYXN5bmNkYWVtb24gKEJTRC9PUyAyLngp CjE1NAlVTklNUEwJTk9ISURFCW5vc3lzCjsgMTU1IGlzIGluaXRpYWxpemVk IGJ5IHRoZSBORlMgY29kZSwgaWYgcHJlc2VudC4KMTU1CU5PSU1QTAlCU0QJ eyBpbnQgbmZzc3ZjKGludCBmbGFnLCBjYWRkcl90IGFyZ3ApOyB9CjE1NglD T01QQVQJQlNECXsgaW50IGdldGRpcmVudHJpZXMoaW50IGZkLCBjaGFyICpi dWYsIHVfaW50IGNvdW50LCBcCgkJCSAgICBsb25nICpiYXNlcCk7IH0KMTU3 CVNURAlCU0QJeyBpbnQgc3RhdGZzKGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0 ZnMgKmJ1Zik7IH0KMTU4CVNURAlCU0QJeyBpbnQgZnN0YXRmcyhpbnQgZmQs IHN0cnVjdCBzdGF0ZnMgKmJ1Zik7IH0KMTU5CVVOSU1QTAlOT0hJREUJbm9z eXMKMTYwCVVOSU1QTAlOT0hJREUJbm9zeXMKOyAxNjEgaXMgaW5pdGlhbGl6 ZWQgYnkgdGhlIE5GUyBjb2RlLCBpZiBwcmVzZW50LgoxNjEJU1RECUJTRAl7 IGludCBnZXRmaChjaGFyICpmbmFtZSwgc3RydWN0IGZoYW5kbGUgKmZocCk7 IH0KMTYyCVNURAlCU0QJeyBpbnQgZ2V0ZG9tYWlubmFtZShjaGFyICpkb21h aW5uYW1lLCBpbnQgbGVuKTsgfQoxNjMJU1RECUJTRAl7IGludCBzZXRkb21h aW5uYW1lKGNoYXIgKmRvbWFpbm5hbWUsIGludCBsZW4pOyB9CjE2NAlTVEQJ QlNECXsgaW50IHVuYW1lKHN0cnVjdCB1dHNuYW1lICpuYW1lKTsgfQoxNjUJ U1RECUJTRAl7IGludCBzeXNhcmNoKGludCBvcCwgY2hhciAqcGFybXMpOyB9 CjE2NglTVEQJQlNECXsgaW50IHJ0cHJpbyhpbnQgZnVuY3Rpb24sIHBpZF90 IHBpZCwgXAoJCQkgICAgc3RydWN0IHJ0cHJpbyAqcnRwKTsgfQoxNjcJVU5J TVBMCU5PSElERQlub3N5cwoxNjgJVU5JTVBMCU5PSElERQlub3N5cwoxNjkJ U1RECUJTRAl7IGludCBzZW1zeXMoaW50IHdoaWNoLCBpbnQgYTIsIGludCBh MywgaW50IGE0LCBcCgkJCSAgICBpbnQgYTUpOyB9CjsgWFhYIHNob3VsZCBi ZQkJeyBpbnQgc2Vtc3lzKGludCB3aGljaCwgLi4uKTsgfQoxNzAJU1RECUJT RAl7IGludCBtc2dzeXMoaW50IHdoaWNoLCBpbnQgYTIsIGludCBhMywgaW50 IGE0LCBcCgkJCSAgICBpbnQgYTUsIGludCBhNik7IH0KOyBYWFggc2hvdWxk IGJlCQl7IGludCBtc2dzeXMoaW50IHdoaWNoLCAuLi4pOyB9CjE3MQlTVEQJ QlNECXsgaW50IHNobXN5cyhpbnQgd2hpY2gsIGludCBhMiwgaW50IGEzLCBp bnQgYTQpOyB9CjsgWFhYIHNob3VsZCBiZQkJeyBpbnQgc2htc3lzKGludCB3 aGljaCwgLi4uKTsgfQoxNzIJVU5JTVBMCU5PSElERQlub3N5cwoxNzMJU1RE CVBPU0lYCXsgc3NpemVfdCBwcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6 ZV90IG5ieXRlLCBcCgkJCSAgICBpbnQgcGFkLCBvZmZfdCBvZmZzZXQpOyB9 CjE3NAlTVEQJUE9TSVgJeyBzc2l6ZV90IHB3cml0ZShpbnQgZmQsIGNvbnN0 IHZvaWQgKmJ1ZiwgXAoJCQkgICAgc2l6ZV90IG5ieXRlLCBpbnQgcGFkLCBv ZmZfdCBvZmZzZXQpOyB9CjE3NQlVTklNUEwJTk9ISURFCW5vc3lzCjE3NglT VEQJQlNECXsgaW50IG50cF9hZGp0aW1lKHN0cnVjdCB0aW1leCAqdHApOyB9 CjE3NwlVTklNUEwJTk9ISURFCXNmb3JrIChCU0QvT1MgMi54KQoxNzgJVU5J TVBMCU5PSElERQlnZXRkZXNjcmlwdG9yIChCU0QvT1MgMi54KQoxNzkJVU5J TVBMCU5PSElERQlzZXRkZXNjcmlwdG9yIChCU0QvT1MgMi54KQoxODAJVU5J TVBMCU5PSElERQlub3N5cwoKOyBTeXNjYWxscyAxODEtMTk5IGFyZSB1c2Vk IGJ5L3Jlc2VydmVkIGZvciBCU0QKMTgxCVNURAlQT1NJWAl7IGludCBzZXRn aWQoZ2lkX3QgZ2lkKTsgfQoxODIJU1RECUJTRAl7IGludCBzZXRlZ2lkKGdp ZF90IGVnaWQpOyB9CjE4MwlTVEQJQlNECXsgaW50IHNldGV1aWQodWlkX3Qg ZXVpZCk7IH0KMTg0CVVOSU1QTAlCU0QJbGZzX2JtYXB2CjE4NQlVTklNUEwJ QlNECWxmc19tYXJrdgoxODYJVU5JTVBMCUJTRAlsZnNfc2VnY2xlYW4KMTg3 CVVOSU1QTAlCU0QJbGZzX3NlZ3dhaXQKMTg4CVNURAlQT1NJWAl7IGludCBz dGF0KGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICp1Yik7IH0KMTg5CVNURAlQ T1NJWAl7IGludCBmc3RhdChpbnQgZmQsIHN0cnVjdCBzdGF0ICpzYik7IH0K MTkwCVNURAlQT1NJWAl7IGludCBsc3RhdChjaGFyICpwYXRoLCBzdHJ1Y3Qg c3RhdCAqdWIpOyB9CjE5MQlTVEQJUE9TSVgJeyBpbnQgcGF0aGNvbmYoY2hh ciAqcGF0aCwgaW50IG5hbWUpOyB9CjE5MglTVEQJUE9TSVgJeyBpbnQgZnBh dGhjb25mKGludCBmZCwgaW50IG5hbWUpOyB9CjE5MwlVTklNUEwJTk9ISURF CW5vc3lzCjE5NAlTVEQJQlNECXsgaW50IGdldHJsaW1pdCh1X2ludCB3aGlj aCwgXAoJCQkgICAgc3RydWN0IHJsaW1pdCAqcmxwKTsgfSBcCgkJCSAgICBn ZXRybGltaXQgX19nZXRybGltaXRfYXJncyBpbnQKMTk1CVNURAlCU0QJeyBp bnQgc2V0cmxpbWl0KHVfaW50IHdoaWNoLCBcCgkJCSAgICBzdHJ1Y3Qgcmxp bWl0ICpybHApOyB9IFwKCQkJICAgIHNldHJsaW1pdCBfX3NldHJsaW1pdF9h cmdzIGludAoxOTYJU1RECUJTRAl7IGludCBnZXRkaXJlbnRyaWVzKGludCBm ZCwgY2hhciAqYnVmLCB1X2ludCBjb3VudCwgXAoJCQkgICAgbG9uZyAqYmFz ZXApOyB9CjE5NwlTVEQJQlNECXsgY2FkZHJfdCBtbWFwKGNhZGRyX3QgYWRk ciwgc2l6ZV90IGxlbiwgaW50IHByb3QsIFwKCQkJICAgIGludCBmbGFncywg aW50IGZkLCBpbnQgcGFkLCBvZmZfdCBwb3MpOyB9CjE5OAlTVEQJTk9ISURF CXsgaW50IG5vc3lzKHZvaWQpOyB9IF9fc3lzY2FsbCBfX3N5c2NhbGxfYXJn cyBpbnQKMTk5CVNURAlQT1NJWAl7IG9mZl90IGxzZWVrKGludCBmZCwgaW50 IHBhZCwgb2ZmX3Qgb2Zmc2V0LCBcCgkJCSAgICBpbnQgd2hlbmNlKTsgfQoy MDAJU1RECUJTRAl7IGludCB0cnVuY2F0ZShjaGFyICpwYXRoLCBpbnQgcGFk LCBvZmZfdCBsZW5ndGgpOyB9CjIwMQlTVEQJQlNECXsgaW50IGZ0cnVuY2F0 ZShpbnQgZmQsIGludCBwYWQsIG9mZl90IGxlbmd0aCk7IH0KMjAyCVNURAlC U0QJeyBpbnQgX19zeXNjdGwoaW50ICpuYW1lLCB1X2ludCBuYW1lbGVuLCB2 b2lkICpvbGQsIFwKCQkJICAgIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3 LCBzaXplX3QgbmV3bGVuKTsgfSBcCgkJCSAgICBfX3N5c2N0bCBzeXNjdGxf YXJncyBpbnQKOyBwcm9wZXJseSwgX19zeXNjdGwgc2hvdWxkIGJlIGEgTk9I SURFLCBidXQgbWFraW5nIGFuIGV4Y2VwdGlvbgo7IGhlcmUgYWxsb3dzIHRv IGF2b2lkIG9uZSBpbiBsaWJjL3N5cy9NYWtlZmlsZS5pbmMuCjIwMwlTVEQJ QlNECXsgaW50IG1sb2NrKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4p OyB9CjIwNAlTVEQJQlNECXsgaW50IG11bmxvY2soY29uc3Qgdm9pZCAqYWRk ciwgc2l6ZV90IGxlbik7IH0KMjA1CVNURAlCU0QJeyBpbnQgdW5kZWxldGUo Y2hhciAqcGF0aCk7IH0KMjA2CVNURAlCU0QJeyBpbnQgZnV0aW1lcyhpbnQg ZmQsIHN0cnVjdCB0aW1ldmFsICp0cHRyKTsgfQoyMDcJU1RECUJTRAl7IGlu dCBnZXRwZ2lkKHBpZF90IHBpZCk7IH0KMjA4CVVOSU1QTAlOT0hJREUJbmV3 cmVib290IChOZXRCU0QpCjIwOQlTVEQJQlNECXsgaW50IHBvbGwoc3RydWN0 IHBvbGxmZCAqZmRzLCB1X2ludCBuZmRzLCBcCgkJCSAgICBpbnQgdGltZW91 dCk7IH0KCjsKOyBUaGUgZm9sbG93aW5nIGFyZSByZXNlcnZlZCBmb3IgbG9h ZGFibGUgc3lzY2FsbHMKOwo7IDIxMCBpcyB1c2VkIGJ5IHRoZSBDaGVja3Bv aW50IE1vZHVsZQoyMTAJTk9ERUYJTk9ISURFCWxrbW5vc3lzIGxrbW5vc3lz IG5vc3lzX2FyZ3MgaW50CjIxMQlOT0RFRglOT0hJREUJbGttbm9zeXMgbGtt bm9zeXMgbm9zeXNfYXJncyBpbnQKMjEyCU5PREVGCU5PSElERQlsa21ub3N5 cyBsa21ub3N5cyBub3N5c19hcmdzIGludAoyMTMJTk9ERUYJTk9ISURFCWxr bW5vc3lzIGxrbW5vc3lzIG5vc3lzX2FyZ3MgaW50CjIxNAlOT0RFRglOT0hJ REUJbGttbm9zeXMgbGttbm9zeXMgbm9zeXNfYXJncyBpbnQKMjE1CU5PREVG CU5PSElERQlsa21ub3N5cyBsa21ub3N5cyBub3N5c19hcmdzIGludAoyMTYJ Tk9ERUYJTk9ISURFCWxrbW5vc3lzIGxrbW5vc3lzIG5vc3lzX2FyZ3MgaW50 CjIxNwlOT0RFRglOT0hJREUJbGttbm9zeXMgbGttbm9zeXMgbm9zeXNfYXJn cyBpbnQKMjE4CU5PREVGCU5PSElERQlsa21ub3N5cyBsa21ub3N5cyBub3N5 c19hcmdzIGludAoyMTkJTk9ERUYJTk9ISURFCWxrbW5vc3lzIGxrbW5vc3lz IG5vc3lzX2FyZ3MgaW50Cgo7CjsgVGhlIGZvbGxvd2luZyB3ZXJlIGludHJv ZHVjZWQgd2l0aCBOZXRCU0QvNC40TGl0ZS0yCjsKMjIwCVNURAlCU0QJeyBp bnQgX19zZW1jdGwoaW50IHNlbWlkLCBpbnQgc2VtbnVtLCBpbnQgY21kLCBc CgkJCSAgICB1bmlvbiBzZW11biAqYXJnKTsgfQoyMjEJU1RECUJTRAl7IGlu dCBzZW1nZXQoa2V5X3Qga2V5LCBpbnQgbnNlbXMsIGludCBzZW1mbGcpOyB9 CjIyMglTVEQJQlNECXsgaW50IHNlbW9wKGludCBzZW1pZCwgc3RydWN0IHNl bWJ1ZiAqc29wcywgXAoJCQkgICAgdV9pbnQgbnNvcHMpOyB9CjIyMwlVTklN UEwJTk9ISURFCXNlbWNvbmZpZwoyMjQJU1RECUJTRAl7IGludCBtc2djdGwo aW50IG1zcWlkLCBpbnQgY21kLCBcCgkJCSAgICBzdHJ1Y3QgbXNxaWRfZHMg KmJ1Zik7IH0KMjI1CVNURAlCU0QJeyBpbnQgbXNnZ2V0KGtleV90IGtleSwg aW50IG1zZ2ZsZyk7IH0KMjI2CVNURAlCU0QJeyBpbnQgbXNnc25kKGludCBt c3FpZCwgdm9pZCAqbXNncCwgc2l6ZV90IG1zZ3N6LCBcCgkJCSAgICBpbnQg bXNnZmxnKTsgfQoyMjcJU1RECUJTRAl7IGludCBtc2dyY3YoaW50IG1zcWlk LCB2b2lkICptc2dwLCBzaXplX3QgbXNnc3osIFwKCQkJICAgIGxvbmcgbXNn dHlwLCBpbnQgbXNnZmxnKTsgfQoyMjgJU1RECUJTRAl7IGludCBzaG1hdChp bnQgc2htaWQsIHZvaWQgKnNobWFkZHIsIGludCBzaG1mbGcpOyB9CjIyOQlT VEQJQlNECXsgaW50IHNobWN0bChpbnQgc2htaWQsIGludCBjbWQsIFwKCQkJ ICAgIHN0cnVjdCBzaG1pZF9kcyAqYnVmKTsgfQoyMzAJU1RECUJTRAl7IGlu dCBzaG1kdCh2b2lkICpzaG1hZGRyKTsgfQoyMzEJU1RECUJTRAl7IGludCBz aG1nZXQoa2V5X3Qga2V5LCBpbnQgc2l6ZSwgaW50IHNobWZsZyk7IH0KOwoy MzIJU1RECVBPU0lYCXsgaW50IGNsb2NrX2dldHRpbWUoY2xvY2tpZF90IGNs b2NrX2lkLCBcCgkJCSAgICBzdHJ1Y3QgdGltZXNwZWMgKnRwKTsgfQoyMzMJ U1RECVBPU0lYCXsgaW50IGNsb2NrX3NldHRpbWUoY2xvY2tpZF90IGNsb2Nr X2lkLCBcCgkJCSAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRwKTsgfQoy MzQJU1RECVBPU0lYCXsgaW50IGNsb2NrX2dldHJlcyhjbG9ja2lkX3QgY2xv Y2tfaWQsIFwKCQkJICAgIHN0cnVjdCB0aW1lc3BlYyAqdHApOyB9CjIzNQlV TklNUEwJTk9ISURFCXRpbWVyX2NyZWF0ZQoyMzYJVU5JTVBMCU5PSElERQl0 aW1lcl9kZWxldGUKMjM3CVVOSU1QTAlOT0hJREUJdGltZXJfc2V0dGltZQoy MzgJVU5JTVBMCU5PSElERQl0aW1lcl9nZXR0aW1lCjIzOQlVTklNUEwJTk9I SURFCXRpbWVyX2dldG92ZXJydW4KMjQwCVNURAlQT1NJWAl7IGludCBuYW5v c2xlZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICpycXRwLCBcCgkJCSAgICBz dHJ1Y3QgdGltZXNwZWMgKnJtdHApOyB9CjI0MQlVTklNUEwJTk9ISURFCW5v c3lzCjI0MglVTklNUEwJTk9ISURFCW5vc3lzCjI0MwlVTklNUEwJTk9ISURF CW5vc3lzCjI0NAlVTklNUEwJTk9ISURFCW5vc3lzCjI0NQlVTklNUEwJTk9I SURFCW5vc3lzCjI0NglVTklNUEwJTk9ISURFCW5vc3lzCjI0NwlVTklNUEwJ Tk9ISURFCW5vc3lzCjI0OAlVTklNUEwJTk9ISURFCW5vc3lzCjI0OQlVTklN UEwJTk9ISURFCW5vc3lzCjsgc3lzY2FsbCBudW1iZXJzIGluaXRpYWxseSB1 c2VkIGluIE9wZW5CU0QKMjUwCVNURAlCU0QJeyBpbnQgbWluaGVyaXQodm9p ZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IGluaGVyaXQpOyB9CjI1MQlTVEQJ QlNECXsgaW50IHJmb3JrKGludCBmbGFncyk7IH0KMjUyCVNURAlCU0QJeyBp bnQgb3BlbmJzZF9wb2xsKHN0cnVjdCBwb2xsZmQgKmZkcywgdV9pbnQgbmZk cywgXAoJCQkgICAgaW50IHRpbWVvdXQpOyB9CjI1MwlTVEQJQlNECXsgaW50 IGlzc2V0dWdpZCh2b2lkKTsgfQoyNTQJU1RECUJTRAl7IGludCBsY2hvd24o Y2hhciAqcGF0aCwgaW50IHVpZCwgaW50IGdpZCk7IH0KMjU1CVVOSU1QTAlO T0hJREUJbm9zeXMKMjU2CVVOSU1QTAlOT0hJREUJbm9zeXMKMjU3CVVOSU1Q TAlOT0hJREUJbm9zeXMKMjU4CVVOSU1QTAlOT0hJREUJbm9zeXMKMjU5CVVO SU1QTAlOT0hJREUJbm9zeXMKMjYwCVVOSU1QTAlOT0hJREUJbm9zeXMKMjYx CVVOSU1QTAlOT0hJREUJbm9zeXMKMjYyCVVOSU1QTAlOT0hJREUJbm9zeXMK MjYzCVVOSU1QTAlOT0hJREUJbm9zeXMKMjY0CVVOSU1QTAlOT0hJREUJbm9z eXMKMjY1CVVOSU1QTAlOT0hJREUJbm9zeXMKMjY2CVVOSU1QTAlOT0hJREUJ bm9zeXMKMjY3CVVOSU1QTAlOT0hJREUJbm9zeXMKMjY4CVVOSU1QTAlOT0hJ REUJbm9zeXMKMjY5CVVOSU1QTAlOT0hJREUJbm9zeXMKMjcwCVVOSU1QTAlO T0hJREUJbm9zeXMKMjcxCVVOSU1QTAlOT0hJREUJbm9zeXMKMjcyCVNURAlC U0QJeyBpbnQgZ2V0ZGVudHMoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBj b3VudCk7IH0KMjczCVVOSU1QTAlOT0hJREUJbm9zeXMKMjc0CVNURAlCU0QJ eyBpbnQgbGNobW9kKGNoYXIgKnBhdGgsIG1vZGVfdCBtb2RlKTsgfQoyNzUJ Tk9QUk9UTyBCU0QJeyBpbnQgbGNob3duKGNoYXIgKnBhdGgsIHVpZF90IHVp ZCwgZ2lkX3QgZ2lkKTsgfSBuZXRic2RfbGNob3duIGxjaG93bl9hcmdzIGlu dAoyNzYJU1RECUJTRAl7IGludCBsdXRpbWVzKGNoYXIgKnBhdGgsIHN0cnVj dCB0aW1ldmFsICp0cHRyKTsgfQoyNzcJTk9QUk9UTwlCU0QJeyBpbnQgbXN5 bmModm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsgfSBuZXRi c2RfbXN5bmMgbXN5bmNfYXJncyBpbnQKMjc4CVNURAlCU0QJeyBpbnQgbnN0 YXQoY2hhciAqcGF0aCwgc3RydWN0IG5zdGF0ICp1Yik7IH0KMjc5CVNURAlC U0QJeyBpbnQgbmZzdGF0KGludCBmZCwgc3RydWN0IG5zdGF0ICpzYik7IH0K MjgwCVNURAlCU0QJeyBpbnQgbmxzdGF0KGNoYXIgKnBhdGgsIHN0cnVjdCBu c3RhdCAqdWIpOyB9CjI4MQlVTklNUEwJTk9ISURFCW5vc3lzCjI4MglVTklN UEwJTk9ISURFCW5vc3lzCjI4MwlVTklNUEwJTk9ISURFCW5vc3lzCjI4NAlV TklNUEwJTk9ISURFCW5vc3lzCjI4NQlVTklNUEwJTk9ISURFCW5vc3lzCjI4 NglVTklNUEwJTk9ISURFCW5vc3lzCjI4NwlVTklNUEwJTk9ISURFCW5vc3lz CjI4OAlVTklNUEwJTk9ISURFCW5vc3lzCjI4OQlVTklNUEwJTk9ISURFCW5v c3lzCjI5MAlVTklNUEwJTk9ISURFCW5vc3lzCjI5MQlVTklNUEwJTk9ISURF CW5vc3lzCjI5MglVTklNUEwJTk9ISURFCW5vc3lzCjI5MwlVTklNUEwJTk9I SURFCW5vc3lzCjI5NAlVTklNUEwJTk9ISURFCW5vc3lzCjI5NQlVTklNUEwJ Tk9ISURFCW5vc3lzCjI5NglVTklNUEwJTk9ISURFCW5vc3lzCjsgWFhYIDI5 NyBpcyAzMDAgaW4gTmV0QlNEIAoyOTcJU1RECUJTRAl7IGludCBmaHN0YXRm cyhjb25zdCBzdHJ1Y3QgZmhhbmRsZSAqdV9maHAsIHN0cnVjdCBzdGF0ZnMg KmJ1Zik7IH0KMjk4CVNURAlCU0QJeyBpbnQgZmhvcGVuKGNvbnN0IHN0cnVj dCBmaGFuZGxlICp1X2ZocCwgaW50IGZsYWdzKTsgfQoyOTkJU1RECUJTRCAJ eyBpbnQgZmhzdGF0KGNvbnN0IHN0cnVjdCBmaGFuZGxlICp1X2ZocCwgc3Ry dWN0IHN0YXQgKnNiKTsgfQo7IHN5c2NhbGwgbnVtYmVycyBmb3IgRnJlZUJT RAozMDAJU1RECUJTRAl7IGludCBtb2RuZXh0KGludCBtb2RpZCk7IH0KMzAx CVNURAlCU0QJeyBpbnQgbW9kc3RhdChpbnQgbW9kaWQsIHN0cnVjdCBtb2R1 bGVfc3RhdCogc3RhdCk7IH0KMzAyCVNURAlCU0QJeyBpbnQgbW9kZm5leHQo aW50IG1vZGlkKTsgfQozMDMJU1RECUJTRAl7IGludCBtb2RmaW5kKGNvbnN0 IGNoYXIgKm5hbWUpOyB9CjMwNAlTVEQJQlNECXsgaW50IGtsZGxvYWQoY29u c3QgY2hhciAqZmlsZSk7IH0KMzA1CVNURAlCU0QJeyBpbnQga2xkdW5sb2Fk KGludCBmaWxlaWQpOyB9CjMwNglTVEQJQlNECXsgaW50IGtsZGZpbmQoY29u c3QgY2hhciAqZmlsZSk7IH0KMzA3CVNURAlCU0QJeyBpbnQga2xkbmV4dChp bnQgZmlsZWlkKTsgfQozMDgJU1RECUJTRAl7IGludCBrbGRzdGF0KGludCBm aWxlaWQsIHN0cnVjdCBrbGRfZmlsZV9zdGF0KiBzdGF0KTsgfQozMDkJU1RE CUJTRAl7IGludCBrbGRmaXJzdG1vZChpbnQgZmlsZWlkKTsgfQozMTAJU1RE CUJTRAl7IGludCBnZXRzaWQocGlkX3QgcGlkKTsgfQozMTEJU1RECUJTRAl7 IGludCBzZXRyZXN1aWQodWlkX3QgcnVpZCwgdWlkX3QgZXVpZCwgdWlkX3Qg c3VpZCk7IH0KMzEyCVNURAlCU0QJeyBpbnQgc2V0cmVzZ2lkKGdpZF90IHJn aWQsIGdpZF90IGVnaWQsIGdpZF90IHNnaWQpOyB9CjMxMwlPQlNPTAlOT0hJ REUJc2lnbmFub3NsZWVwCjMxNCAgICAgU1REICAgICBCU0QgICAgIHsgaW50 IGFpb19yZXR1cm4oc3RydWN0IGFpb2NiICphaW9jYnApOyB9CjMxNSAgICAg U1REICAgICBCU0QgICAgIHsgaW50IGFpb19zdXNwZW5kKHN0cnVjdCBhaW9j YiAqIGNvbnN0ICogYWlvY2JwLCBpbnQgbmVudCwgY29uc3Qgc3RydWN0IHRp bWVzcGVjICp0aW1lb3V0KTsgfQozMTYgICAgIFNURCAgICAgQlNEICAgICB7 IGludCBhaW9fY2FuY2VsKGludCBmZCwgc3RydWN0IGFpb2NiICphaW9jYnAp OyB9CjMxNyAgICAgU1REICAgICBCU0QgICAgIHsgaW50IGFpb19lcnJvcihz dHJ1Y3QgYWlvY2IgKmFpb2NicCk7IH0KMzE4ICAgICBTVEQgICAgIEJTRCAg ICAgeyBpbnQgYWlvX3JlYWQoc3RydWN0IGFpb2NiICphaW9jYnApOyB9CjMx OSAgICAgU1REICAgICBCU0QgICAgIHsgaW50IGFpb193cml0ZShzdHJ1Y3Qg YWlvY2IgKmFpb2NicCk7IH0KMzIwICAgICBTVEQgICAgIEJTRCAgICAgeyBp bnQgbGlvX2xpc3RpbyhpbnQgbW9kZSwgc3RydWN0IGFpb2NiICogY29uc3Qg KmFjYl9saXN0LCBpbnQgbmVudCwgc3RydWN0IHNpZ2V2ZW50ICpzaWcpOyB9 CjMyMSAgICAgU1REICAgICBCU0QgICAgIHsgaW50IHlpZWxkKHZvaWQpOyB9 CjMyMiAgICAgU1REICAgICBCU0QgICAgIHsgaW50IHRocl9zbGVlcChjb25z dCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVvdXQpOyB9CjMyMyAgICAgU1REICAg ICBCU0QgICAgIHsgaW50IHRocl93YWtldXAocGlkX3QgcGlkKTsgfQozMjQg ICAgIFNURCAgICAgQlNEICAgICB7IGludCBtbG9ja2FsbChpbnQgaG93KTsg fQozMjUgICAgIFNURCAgICAgQlNEICAgICB7IGludCBtdW5sb2NrYWxsKHZv aWQpOyB9CjMyNiAgICAgU1REICAgICBCU0QgICAgIHsgaW50IF9fZ2V0Y3dk KHVfY2hhciAqYnVmLCB1X2ludCBidWZsZW4pOyB9CgozMjcgICAgIFNURCAg ICAgUE9TSVggICB7IGludCBzY2hlZF9zZXRwYXJhbSAocGlkX3QgcGlkLCBj b25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsgfQozMjggICAgIFNU RCAgICAgUE9TSVggICB7IGludCBzY2hlZF9nZXRwYXJhbSAocGlkX3QgcGlk LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsgfQoKMzI5ICAgICBTVEQg ICAgIFBPU0lYICAgeyBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyIChwaWRfdCBw aWQsIGludCBwb2xpY3ksIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFy YW0pOyB9CjMzMCAgICAgU1REICAgICBQT1NJWCAgIHsgaW50IHNjaGVkX2dl dHNjaGVkdWxlciAocGlkX3QgcGlkKTsgfQoKMzMxICAgICBTVEQgICAgIFBP U0lYICAgeyBpbnQgc2NoZWRfeWllbGQgKHZvaWQpOyB9CjMzMiAgICAgU1RE ICAgICBQT1NJWCAgIHsgaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXggKGlu dCBwb2xpY3kpOyB9CjMzMyAgICAgU1REICAgICBQT1NJWCAgIHsgaW50IHNj aGVkX2dldF9wcmlvcml0eV9taW4gKGludCBwb2xpY3kpOyB9CjMzNCAgICAg U1REICAgICBQT1NJWCAgIHsgaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAo cGlkX3QgcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKmludGVydmFsKTsgfQozMzUJ U1RECUJTRAl7IGludCB1dHJhY2UoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90 IGxlbik7IH0KMzM2CU9CU09MCU5PSElERQlmcmVlYnNkNF9zZW5kZmlsZQoz MzcJU1RECUJTRAl7IGludCBrbGRzeW0oaW50IGZpbGVpZCwgaW50IGNtZCwg dm9pZCAqZGF0YSk7IH0KMzM4CVNURAlCU0QJeyBpbnQgamFpbChzdHJ1Y3Qg amFpbCAqamFpbCk7IH0KMzM5CVVOSU1QTAlCU0QJcGlvY3RsCjM0MAlNUFNB RkUJU1RECVBPU0lYCXsgaW50IHNpZ3Byb2NtYXNrKGludCBob3csIGNvbnN0 IHNpZ3NldF90ICpzZXQsIFwKCQkJICAgIHNpZ3NldF90ICpvc2V0KTsgfQoz NDEJU1RECVBPU0lYCXsgaW50IHNpZ3N1c3BlbmQoY29uc3Qgc2lnc2V0X3Qg KnNpZ21hc2spOyB9CjM0MglTVEQJUE9TSVgJeyBpbnQgc2lnYWN0aW9uKGlu dCBzaWcsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gKmFjdCwgXAoJCQkgICAg c3RydWN0IHNpZ2FjdGlvbiAqb2FjdCk7IH0KMzQzCVNURAlQT1NJWAl7IGlu dCBzaWdwZW5kaW5nKHNpZ3NldF90ICpzZXQpOyB9CjM0NAlTVEQJQlNECXsg aW50IHNpZ3JldHVybih1Y29udGV4dF90ICpzaWdjbnR4cCk7IH0KMzQ1CVNU RAlQT1NJWAl7IGludCBzaWd0aW1lZHdhaXQoY29uc3Qgc2lnc2V0X3QgKnNl dCxcCgkJCSAgICAgc2lnaW5mb190ICppbmZvLCBjb25zdCBzdHJ1Y3QgdGlt ZXNwZWMgKnRpbWVvdXQpOyB9CjM0NglTVEQJUE9TSVgJeyBpbnQgc2lnd2Fp dGluZm8oY29uc3Qgc2lnc2V0X3QgKnNldCxcCgkJCSAgICAgc2lnaW5mb190 ICppbmZvKTsgfQozNDcJU1RECUJTRAl7IGludCBfX2FjbF9nZXRfZmlsZShj b25zdCBjaGFyICpwYXRoLCBcCgkJCSAgICBhY2xfdHlwZV90IHR5cGUsIHN0 cnVjdCBhY2wgKmFjbHApOyB9CjM0OAlTVEQJQlNECXsgaW50IF9fYWNsX3Nl dF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIFwKCQkJICAgIGFjbF90eXBlX3Qg dHlwZSwgc3RydWN0IGFjbCAqYWNscCk7IH0KMzQ5CVNURAlCU0QJeyBpbnQg X19hY2xfZ2V0X2ZkKGludCBmaWxlZGVzLCBhY2xfdHlwZV90IHR5cGUsIFwK CQkJICAgIHN0cnVjdCBhY2wgKmFjbHApOyB9CjM1MAlTVEQJQlNECXsgaW50 IF9fYWNsX3NldF9mZChpbnQgZmlsZWRlcywgYWNsX3R5cGVfdCB0eXBlLCBc CgkJCSAgICBzdHJ1Y3QgYWNsICphY2xwKTsgfQozNTEJU1RECUJTRAl7IGlu dCBfX2FjbF9kZWxldGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBcCgkJCSAg ICBhY2xfdHlwZV90IHR5cGUpOyB9CjM1MglTVEQJQlNECXsgaW50IF9fYWNs X2RlbGV0ZV9mZChpbnQgZmlsZWRlcywgYWNsX3R5cGVfdCB0eXBlKTsgfQoz NTMJU1RECUJTRAl7IGludCBfX2FjbF9hY2xjaGVja19maWxlKGNvbnN0IGNo YXIgKnBhdGgsIFwKCQkJICAgIGFjbF90eXBlX3QgdHlwZSwgc3RydWN0IGFj bCAqYWNscCk7IH0KMzU0CVNURAlCU0QJeyBpbnQgX19hY2xfYWNsY2hlY2tf ZmQoaW50IGZpbGVkZXMsIGFjbF90eXBlX3QgdHlwZSwgXAoJCQkgICAgc3Ry dWN0IGFjbCAqYWNscCk7IH0KMzU1CVNURAlCU0QJeyBpbnQgZXh0YXR0cmN0 bChjb25zdCBjaGFyICpwYXRoLCBpbnQgY21kLCBcCgkJCSAgICBjb25zdCBj aGFyICphdHRybmFtZSwgY2hhciAqYXJnKTsgfQozNTYJU1RECUJTRAl7IGlu dCBleHRhdHRyX3NldF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIFwKCQkJICAg IGNvbnN0IGNoYXIgKmF0dHJuYW1lLCBzdHJ1Y3QgaW92ZWMgKmlvdnAsIFwK CQkJICAgIHVuc2lnbmVkIGlvdmNudCk7IH0KMzU3CVNURAlCU0QJeyBpbnQg ZXh0YXR0cl9nZXRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBcCgkJCSAgICBj b25zdCBjaGFyICphdHRybmFtZSwgc3RydWN0IGlvdmVjICppb3ZwLCBcCgkJ CSAgICB1bnNpZ25lZCBpb3ZjbnQpOyB9CjM1OAlTVEQJQlNECXsgaW50IGV4 dGF0dHJfZGVsZXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgXAoJCQkgICAg Y29uc3QgY2hhciAqYXR0cm5hbWUpOyB9CjM1OQlTVEQJQlNECXsgaW50IGFp b193YWl0Y29tcGxldGUoc3RydWN0IGFpb2NiICoqYWlvY2JwLCBzdHJ1Y3Qg dGltZXNwZWMgKnRpbWVvdXQpOyB9CjM2MAlTVEQJQlNECXsgaW50IGdldHJl c3VpZCh1aWRfdCAqcnVpZCwgdWlkX3QgKmV1aWQsIHVpZF90ICpzdWlkKTsg fQozNjEJU1RECUJTRAl7IGludCBnZXRyZXNnaWQoZ2lkX3QgKnJnaWQsIGdp ZF90ICplZ2lkLCBnaWRfdCAqc2dpZCk7IH0KMzYyCVNURAlCU0QJeyBpbnQg a3F1ZXVlKHZvaWQpOyB9CjM2MwlTVEQJQlNECXsgaW50IGtldmVudChpbnQg ZmQsIFwKCQkJICAgIGNvbnN0IHN0cnVjdCBrZXZlbnQgKmNoYW5nZWxpc3Qs IGludCBuY2hhbmdlcywgXAoJCQkgICAgc3RydWN0IGtldmVudCAqZXZlbnRs aXN0LCBpbnQgbmV2ZW50cywgXAoJCQkgICAgY29uc3Qgc3RydWN0IHRpbWVz cGVjICp0aW1lb3V0KTsgfQoKOyAzNjQtMzkyIHVzZWQgYnkgRnJlZUJTRC1j dXJyZW50CjM2NAlVTklNUEwJTk9ISURFCW5vc3lzCjM2NQlVTklNUEwJTk9I SURFCW5vc3lzCjM2NglVTklNUEwJTk9ISURFCW5vc3lzCjM2NwlVTklNUEwJ Tk9ISURFCW5vc3lzCjM2OAlVTklNUEwJTk9ISURFCW5vc3lzCjM2OQlVTklN UEwJTk9ISURFCW5vc3lzCjM3MAlVTklNUEwJTk9ISURFCW5vc3lzCjM3MQlV TklNUEwJTk9ISURFCW5vc3lzCjM3MglVTklNUEwJTk9ISURFCW5vc3lzCjM3 MwlVTklNUEwJTk9ISURFCW5vc3lzCjM3NAlVTklNUEwJTk9ISURFCW5vc3lz CjM3NQlVTklNUEwJTk9ISURFCW5vc3lzCjM3NglVTklNUEwJTk9ISURFCW5v c3lzCjM3NwlVTklNUEwJTk9ISURFCW5vc3lzCjM3OAlVTklNUEwJTk9ISURF CW5vc3lzCjM3OQlVTklNUEwJTk9ISURFCW5vc3lzCjM4MAlVTklNUEwJTk9I SURFCW5vc3lzCjM4MQlVTklNUEwJTk9ISURFCW5vc3lzCjM4MglVTklNUEwJ Tk9ISURFCW5vc3lzCjM4MwlVTklNUEwJTk9ISURFCW5vc3lzCjM4NAlVTklN UEwJTk9ISURFCW5vc3lzCjM4NQlVTklNUEwJTk9ISURFCW5vc3lzCjM4NglV TklNUEwJTk9ISURFCW5vc3lzCjM4NwlVTklNUEwJTk9ISURFCW5vc3lzCjM4 OAlVTklNUEwJTk9ISURFCW5vc3lzCjM4OQlVTklNUEwJTk9ISURFCW5vc3lz CjM5MAlVTklNUEwJTk9ISURFCW5vc3lzCjM5MQlVTklNUEwJTk9ISURFCW5v c3lzCjM5MglVTklNUEwJTk9ISURFCW5vc3lzCjM5MwlTVEQJQlNECXsgaW50 IHNlbmRmaWxlKGludCBmZCwgaW50IHMsIG9mZl90IG9mZnNldCwgc2l6ZV90 IG5ieXRlcywgXAoJCQkJc3RydWN0IHNmX2hkdHIgKmhkdHIsIG9mZl90ICpz Ynl0ZXMsIGludCBmbGFncyk7IH0KOyAzOTQtNDM5IHVzZWQgYnkgRnJlZUJT RC1jdXJyZW50CjM5NAlVTklNUEwJTk9ISURFCW5vc3lzCjM5NQlVTklNUEwJ Tk9ISURFCW5vc3lzCjM5NglVTklNUEwJTk9ISURFCW5vc3lzCjM5NwlVTklN UEwJTk9ISURFCW5vc3lzCjM5OAlVTklNUEwJTk9ISURFCW5vc3lzCjM5OQlV TklNUEwJTk9ISURFCW5vc3lzCjQwMAlVTklNUEwJTk9ISURFCW5vc3lzCjQw MQlVTklNUEwJTk9ISURFCW5vc3lzCjQwMglVTklNUEwJTk9ISURFCW5vc3lz CjQwMwlVTklNUEwJTk9ISURFCW5vc3lzCjQwNAlVTklNUEwJTk9ISURFCW5v c3lzCjQwNQlVTklNUEwJTk9ISURFCW5vc3lzCjQwNglVTklNUEwJTk9ISURF CW5vc3lzCjQwNwlVTklNUEwJTk9ISURFCW5vc3lzCjQwOAlVTklNUEwJTk9I SURFCW5vc3lzCjQwOQlVTklNUEwJTk9ISURFCW5vc3lzCjQxMAlVTklNUEwJ Tk9ISURFCW5vc3lzCjQxMQlVTklNUEwJTk9ISURFCW5vc3lzCjQxMglVTklN UEwJTk9ISURFCW5vc3lzCjQxMwlVTklNUEwJTk9ISURFCW5vc3lzCjQxNAlV TklNUEwJTk9ISURFCW5vc3lzCjQxNQlVTklNUEwJTk9ISURFCW5vc3lzCjQx NglVTklNUEwJTk9ISURFCW5vc3lzCjQxNwlVTklNUEwJTk9ISURFCW5vc3lz CjQxOAlVTklNUEwJTk9ISURFCW5vc3lzCjQxOQlVTklNUEwJTk9ISURFCW5v c3lzCjQyMAlVTklNUEwJTk9ISURFCW5vc3lzCjQyMQlVTklNUEwJTk9ISURF CW5vc3lzCjQyMglVTklNUEwJTk9ISURFCW5vc3lzCjQyMwlVTklNUEwJTk9I SURFCW5vc3lzCjQyNAlVTklNUEwJTk9ISURFCW5vc3lzCjQyNQlVTklNUEwJ Tk9ISURFCW5vc3lzCjQyNglVTklNUEwJTk9ISURFCW5vc3lzCjQyNwlVTklN UEwJTk9ISURFCW5vc3lzCjQyOAlVTklNUEwJTk9ISURFCW5vc3lzCjQyOQlV TklNUEwJTk9ISURFCW5vc3lzCjQzMAlVTklNUEwJTk9ISURFCW5vc3lzCjQz MQlVTklNUEwJTk9ISURFCW5vc3lzCjQzMglVTklNUEwJTk9ISURFCW5vc3lz CjQzMwlVTklNUEwJTk9ISURFCW5vc3lzCjQzNAlVTklNUEwJTk9ISURFCW5v c3lzCjQzNQlVTklNUEwJTk9ISURFCW5vc3lzCjQzNglVTklNUEwJTk9ISURF CW5vc3lzCjQzNwlVTklNUEwJTk9ISURFCW5vc3lzCjQzOAlVTklNUEwJTk9I SURFCW5vc3lzCjQzOQlVTklNUEwJTk9ISURFCW5vc3lzCjsgNDQwLTQ0OSBy ZXNlcnZlZCBmb3IgRnJlZUJTRC01LnggZ3Jvd3RoCjQ0MAlVTklNUEwJTk9I SURFCW5vc3lzCjQ0MQlVTklNUEwJTk9ISURFCW5vc3lzCjQ0MglVTklNUEwJ Tk9ISURFCW5vc3lzCjQ0MwlVTklNUEwJTk9ISURFCW5vc3lzCjQ0NAlVTklN UEwJTk9ISURFCW5vc3lzCjQ0NQlVTklNUEwJTk9ISURFCW5vc3lzCjQ0NglV TklNUEwJTk9ISURFCW5vc3lzCjQ0NwlVTklNUEwJTk9ISURFCW5vc3lzCjQ0 OAlVTklNUEwJTk9ISURFCW5vc3lzCjQ0OQlVTklNUEwJTk9ISURFCW5vc3lz CjsgNDUwIERyYWdvbkZseSBzeXN0ZW0gY2FsbHMKNDUwCVNURAlCU0QJeyBp bnQgdmFyc3ltX3NldChpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKm5hbWUsIGNv bnN0IGNoYXIgKmRhdGEpOyB9CjQ1MQlTVEQJQlNECXsgaW50IHZhcnN5bV9n ZXQoaW50IG1hc2ssIGNvbnN0IGNoYXIgKndpbGQsIGNoYXIgKmJ1ZiwgaW50 IGJ1ZnNpemUpOyB9CjQ1MglTVEQJQlNECXsgaW50IHZhcnN5bV9saXN0KGlu dCBsZXZlbCwgY2hhciAqYnVmLCBpbnQgbWF4c2l6ZSwgaW50ICptYXJrZXIp OyB9CjQ1MwlTVEQJQlNECXsgaW50IHVwY19yZWdpc3RlcihzdHJ1Y3QgdXBj YWxsICp1cGMsIHZvaWQgKmN0eGZ1bmMsIHZvaWQgKmZ1bmMsIHZvaWQgKmRh dGEpOyB9CjQ1NAlTVEQJQlNECXsgaW50IHVwY19jb250cm9sKGludCBjbWQs IGludCB1cGNpZCwgdm9pZCAqZGF0YSk7IH0KNDU1CVNURAlCU0QJeyBpbnQg Y2Fwc19zeXNfc2VydmljZShjb25zdCBjaGFyICpuYW1lLCB1aWRfdCB1aWQs IGdpZF90IGdpZCwgaW50IHVwY2lkLCBpbnQgZmxhZ3MpOyB9CjQ1NglTVEQJ QlNECXsgaW50IGNhcHNfc3lzX2NsaWVudChjb25zdCBjaGFyICpuYW1lLCB1 aWRfdCB1aWQsIGdpZF90IGdpZCwgaW50IHVwY2lkLCBpbnQgZmxhZ3MpOyB9 CjQ1NwlTVEQJQlNECXsgaW50IGNhcHNfc3lzX2Nsb3NlKGludCBwb3J0aWQp OyB9CjQ1OAlTVEQJQlNECXsgb2ZmX3QgY2Fwc19zeXNfcHV0KGludCBwb3J0 aWQsIHZvaWQgKm1zZywgaW50IG1zZ3NpemUpOyB9CjQ1OQlTVEQJQlNECXsg aW50IGNhcHNfc3lzX3JlcGx5KGludCBwb3J0aWQsIHZvaWQgKm1zZywgaW50 IG1zZ3NpemUsIG9mZl90IG1zZ2NpZCk7IH0KNDYwCVNURAlCU0QJeyBpbnQg Y2Fwc19zeXNfZ2V0KGludCBwb3J0aWQsIHZvaWQgKm1zZywgaW50IG1heHNp emUsIHN0cnVjdCBjYXBzX21zZ2lkICptc2dpZCwgc3RydWN0IGNhcHNfY3Jl ZCAqY2NyKTsgfQo0NjEJU1RECUJTRAl7IGludCBjYXBzX3N5c193YWl0KGlu dCBwb3J0aWQsIHZvaWQgKm1zZywgaW50IG1heHNpemUsIHN0cnVjdCBjYXBz X21zZ2lkICptc2dpZCwgc3RydWN0IGNhcHNfY3JlZCAqY2NyKTsgfQo0NjIJ U1RECUJTRAl7IGludCBjYXBzX3N5c19hYm9ydChpbnQgcG9ydGlkLCBvZmZf dCBtc2djaWQsIGludCBmbGFncyk7IH0KNDYzCVNURAlCU0QJeyBvZmZfdCBj YXBzX3N5c19nZXRnZW4oaW50IHBvcnRpZCk7IH0KNDY0CVNURAlCU0QJeyBp bnQgY2Fwc19zeXNfc2V0Z2VuKGludCBwb3J0aWQsIG9mZl90IGdlbik7IH0K NDY1CVNURAlCU0QJeyBpbnQgZXhlY19zeXNfcmVnaXN0ZXIodm9pZCAqZW50 cnkpOyB9CjQ2NglTVEQJQlNECXsgaW50IGV4ZWNfc3lzX3VucmVnaXN0ZXIo aW50IGlkKTsgfQo0NjcJU1RECUJTRAl7IGludCBzeXNfY2hlY2twb2ludChp bnQgdHlwZSwgaW50IGZkLCBwaWRfdCBwaWQsIGludCByZXR2YWwpOyB9CjQ2 OAlTVEQJQlNECXsgaW50IG1vdW50Y3RsKGNvbnN0IGNoYXIgKnBhdGgsIGlu dCBvcCwgaW50IGZkLCBjb25zdCB2b2lkICpjdGwsIGludCBjdGxsZW4sIHZv aWQgKmJ1ZiwgaW50IGJ1Zmxlbik7IH0KNDY5CVNURAlCU0QJeyBpbnQgdW10 eF9zbGVlcCh2b2xhdGlsZSBjb25zdCBpbnQgKnB0ciwgaW50IHZhbHVlLCBp bnQgdGltZW91dCk7IH0KNDcwCVNURAlCU0QJeyBpbnQgdW10eF93YWtldXAo dm9sYXRpbGUgY29uc3QgaW50ICpwdHIsIGludCBjb3VudCk7IH0KNDcxCVNU RAlCU0QJeyBpbnQgamFpbF9hdHRhY2goaW50IGppZCk7IH0KNDcyCVNURAlC U0QJeyBpbnQgc3lzX3NldF90bHNfYXJlYShpbnQgd2hpY2gsIHN0cnVjdCB0 bHNfaW5mbyAqaW5mbywgaW50IGluZm9zaXplKTsgfQo0NzMJU1RECUJTRAl7 IGludCBzeXNfZ2V0X3Rsc19hcmVhKGludCB3aGljaCwgc3RydWN0IHRsc19p bmZvICppbmZvLCBpbnQgaW5mb3NpemUpOyB9CjQ3NAlTVEQJQlNECXsgaW50 IGNhY2hlKGludCBkaXIsIGNhZGRyX3QgYWRkciwgaW50IGxlbik7IH0KCgAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAABrZXJuX3NpZy5jAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDY0NAAwMDAwMDAwADAwMDAw MDAAMDAwMDAxMjUyNzcAMTAyMTMyNDIxMjAAMDExNjQ0ACAwAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3aGVl bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8qCiAqIENvcHlyaWdo dCAoYykgMTk4MiwgMTk4NiwgMTk4OSwgMTk5MSwgMTk5MwogKglUaGUgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmll cywgSW5jLgogKiBBbGwgb3Igc29tZSBwb3J0aW9ucyBvZiB0aGlzIGZpbGUg YXJlIGRlcml2ZWQgZnJvbSBtYXRlcmlhbCBsaWNlbnNlZAogKiB0byB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9u ZSBhbmQgVGVsZWdyYXBoCiAqIENvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0 b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoCiAq IHRoZSBwZXJtaXNzaW9uIG9mIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywg SW5jLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMg c29mdHdhcmUKICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ2VtZW50OgogKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCiAqCUNhbGlmb3Ju aWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgogKiA0LiBOZWl0 aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMg b2YgaXRzIGNvbnRyaWJ1dG9ycwogKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUKICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECiAq IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRQogKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKICogREFNQUdFUyAo SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMKICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CiAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCiAqIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KSBBUklTSU5HIElOIEFOWSBXQVkKICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRgogKiBTVUNIIERBTUFHRS4KICoKICoJQCgjKWtlcm5fc2lnLmMJOC43 IChCZXJrZWxleSkgNC8xOC85NAogKiAkRnJlZUJTRDogc3JjL3N5cy9rZXJu L2tlcm5fc2lnLmMsdiAxLjcyLjIuMTcgMjAwMy8wNS8xNiAxNjozNDozNCBv YnJpZW4gRXhwICQKICogJERyYWdvbkZseTogc3JjL3N5cy9rZXJuL2tlcm5f c2lnLmMsdiAxLjM2IDIwMDUvMDMvMDIgMDY6MTc6MTcgZGF2aWR4dSBFeHAg JAogKi8KCiNpbmNsdWRlICJvcHRfa3RyYWNlLmgiCgojaW5jbHVkZSA8c3lz L3BhcmFtLmg+CiNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KI2luY2x1ZGUgPHN5 cy9rZXJuZWwuaD4KI2luY2x1ZGUgPHN5cy9zeXNwcm90by5oPgojaW5jbHVk ZSA8c3lzL3NpZ25hbHZhci5oPgojaW5jbHVkZSA8c3lzL3Jlc291cmNldmFy Lmg+CiNpbmNsdWRlIDxzeXMvdm5vZGUuaD4KI2luY2x1ZGUgPHN5cy9ldmVu dC5oPgojaW5jbHVkZSA8c3lzL3Byb2MuaD4KI2luY2x1ZGUgPHN5cy9ubG9v a3VwLmg+CiNpbmNsdWRlIDxzeXMvcGlvY3RsLmg+CiNpbmNsdWRlIDxzeXMv c3lzdG0uaD4KI2luY2x1ZGUgPHN5cy9hY2N0Lmg+CiNpbmNsdWRlIDxzeXMv ZmNudGwuaD4KI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiNpbmNsdWRlIDxzeXMv a3RyYWNlLmg+CiNpbmNsdWRlIDxzeXMvc3lzbG9nLmg+CiNpbmNsdWRlIDxz eXMvc3RhdC5oPgojaW5jbHVkZSA8c3lzL3N5c2VudC5oPgojaW5jbHVkZSA8 c3lzL3N5c2N0bC5oPgojaW5jbHVkZSA8c3lzL21hbGxvYy5oPgojaW5jbHVk ZSA8c3lzL3VuaXN0ZC5oPgojaW5jbHVkZSA8c3lzL2tlcm5fc3lzY2FsbC5o PgoKCiNpbmNsdWRlIDxtYWNoaW5lL2lwbC5oPgojaW5jbHVkZSA8bWFjaGlu ZS9jcHUuaD4KI2luY2x1ZGUgPG1hY2hpbmUvc21wLmg+CgpzdGF0aWMgaW50 CWNvcmVkdW1wKHN0cnVjdCBwcm9jICopOwpzdGF0aWMgY2hhcgkqZXhwYW5k X25hbWUoY29uc3QgY2hhciAqLCB1aWRfdCwgcGlkX3QpOwpzdGF0aWMgaW50 CWtpbGxwZyhpbnQgc2lnLCBpbnQgcGdpZCwgaW50IGFsbCk7CnN0YXRpYyBp bnQJc2lnX2ZmcyhzaWdzZXRfdCAqc2V0KTsKc3RhdGljIGludAlzaWdwcm9w KGludCBzaWcpOwpzdGF0aWMgdm9pZAlzdG9wKHN0cnVjdCBwcm9jICopOwoj aWZkZWYgU01QCnN0YXRpYyB2b2lkCXNpZ25vdGlmeV9yZW1vdGUodm9pZCAq YXJnKTsKI2VuZGlmCnN0YXRpYyBpbnQJa2Vybl9zaWd0aW1lZHdhaXQoc2ln c2V0X3Qgc2V0LCBzaWdpbmZvX3QgKmluZm8sCgkJICAgIHN0cnVjdCB0aW1l c3BlYyAqdGltZW91dCk7CgpzdGF0aWMgaW50CWZpbHRfc2lnYXR0YWNoKHN0 cnVjdCBrbm90ZSAqa24pOwpzdGF0aWMgdm9pZAlmaWx0X3NpZ2RldGFjaChz dHJ1Y3Qga25vdGUgKmtuKTsKc3RhdGljIGludAlmaWx0X3NpZ25hbChzdHJ1 Y3Qga25vdGUgKmtuLCBsb25nIGhpbnQpOwoKc3RydWN0IGZpbHRlcm9wcyBz aWdfZmlsdG9wcyA9Cgl7IDAsIGZpbHRfc2lnYXR0YWNoLCBmaWx0X3NpZ2Rl dGFjaCwgZmlsdF9zaWduYWwgfTsKCnN0YXRpYyBpbnQJa2Vybl9sb2dzaWdl eGl0ID0gMTsKU1lTQ1RMX0lOVChfa2VybiwgS0VSTl9MT0dTSUdFWElULCBs b2dzaWdleGl0LCBDVExGTEFHX1JXLCAKICAgICZrZXJuX2xvZ3NpZ2V4aXQs IDAsIAogICAgIkxvZyBwcm9jZXNzZXMgcXVpdHRpbmcgb24gYWJub3JtYWwg c2lnbmFscyB0byBzeXNsb2coMykiKTsKCi8qCiAqIENhbiBwcm9jZXNzIHAs IHdpdGggcGNyZWQgcGMsIHNlbmQgdGhlIHNpZ25hbCBzaWcgdG8gcHJvY2Vz cyBxPwogKi8KI2RlZmluZSBDQU5TSUdOQUwocSwgc2lnKSBcCgkoIXBfdHJl c3Bhc3MoY3VycHJvYy0+cF91Y3JlZCwgKHEpLT5wX3VjcmVkKSB8fCBcCgko KHNpZykgPT0gU0lHQ09OVCAmJiAocSktPnBfc2Vzc2lvbiA9PSBjdXJwcm9j LT5wX3Nlc3Npb24pKQoKLyoKICogUG9saWN5IC0tIENhbiByZWFsIHVpZCBy dWlkIHdpdGggdWNyZWQgdWMgc2VuZCBhIHNpZ25hbCB0byBwcm9jZXNzIHE/ CiAqLwojZGVmaW5lIENBTlNJR0lPKHJ1aWQsIHVjLCBxKSBcCgkoKHVjKS0+ Y3JfdWlkID09IDAgfHwgXAoJICAgIChydWlkKSA9PSAocSktPnBfdWNyZWQt PmNyX3J1aWQgfHwgXAoJICAgICh1YyktPmNyX3VpZCA9PSAocSktPnBfdWNy ZWQtPmNyX3J1aWQgfHwgXAoJICAgIChydWlkKSA9PSAocSktPnBfdWNyZWQt PmNyX3VpZCB8fCBcCgkgICAgKHVjKS0+Y3JfdWlkID09IChxKS0+cF91Y3Jl ZC0+Y3JfdWlkKQoKaW50IHN1Z2lkX2NvcmVkdW1wOwpTWVNDVExfSU5UKF9r ZXJuLCBPSURfQVVUTywgc3VnaWRfY29yZWR1bXAsIENUTEZMQUdfUlcsIAoJ JnN1Z2lkX2NvcmVkdW1wLCAwLCAiRW5hYmxlIGNvcmVkdW1waW5nIHNldCB1 c2VyL2dyb3VwIElEIHByb2Nlc3NlcyIpOwoKc3RhdGljIGludAlkb19jb3Jl ZHVtcCA9IDE7ClNZU0NUTF9JTlQoX2tlcm4sIE9JRF9BVVRPLCBjb3JlZHVt cCwgQ1RMRkxBR19SVywKCSZkb19jb3JlZHVtcCwgMCwgIkVuYWJsZS9EaXNh YmxlIGNvcmVkdW1wcyIpOwoKLyoKICogU2lnbmFsIHByb3BlcnRpZXMgYW5k IGFjdGlvbnMuCiAqIFRoZSBhcnJheSBiZWxvdyBjYXRlZ29yaXplcyB0aGUg c2lnbmFscyBhbmQgdGhlaXIgZGVmYXVsdCBhY3Rpb25zCiAqIGFjY29yZGlu ZyB0byB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CiAqLwojZGVmaW5lCVNB X0tJTEwJCTB4MDEJCS8qIHRlcm1pbmF0ZXMgcHJvY2VzcyBieSBkZWZhdWx0 ICovCiNkZWZpbmUJU0FfQ09SRQkJMHgwMgkJLyogZGl0dG8gYW5kIGNvcmVk dW1wcyAqLwojZGVmaW5lCVNBX1NUT1AJCTB4MDQJCS8qIHN1c3BlbmQgcHJv Y2VzcyAqLwojZGVmaW5lCVNBX1RUWVNUT1AJMHgwOAkJLyogZGl0dG8sIGZy b20gdHR5ICovCiNkZWZpbmUJU0FfSUdOT1JFCTB4MTAJCS8qIGlnbm9yZSBi eSBkZWZhdWx0ICovCiNkZWZpbmUJU0FfQ09OVAkJMHgyMAkJLyogY29udGlu dWUgaWYgc3VzcGVuZGVkICovCiNkZWZpbmUJU0FfQ0FOVE1BU0sJMHg0MAkJ Lyogbm9uLW1hc2thYmxlLCBjYXRjaGFibGUgKi8KI2RlZmluZSBTQV9DS1BU ICAgICAgICAgMHg4MCAgICAgICAgICAgIC8qIGNoZWNrcG9pbnQgcHJvY2Vz cyAqLwoKCnN0YXRpYyBpbnQgc2lncHJvcHRibFtOU0lHXSA9IHsKICAgICAg ICBTQV9LSUxMLCAgICAgICAgICAgICAgICAvKiBTSUdIVVAgKi8KICAgICAg ICBTQV9LSUxMLCAgICAgICAgICAgICAgICAvKiBTSUdJTlQgKi8KICAgICAg ICBTQV9LSUxMfFNBX0NPUkUsICAgICAgICAvKiBTSUdRVUlUICovCiAgICAg ICAgU0FfS0lMTHxTQV9DT1JFLCAgICAgICAgLyogU0lHSUxMICovCiAgICAg ICAgU0FfS0lMTHxTQV9DT1JFLCAgICAgICAgLyogU0lHVFJBUCAqLwogICAg ICAgIFNBX0tJTEx8U0FfQ09SRSwgICAgICAgIC8qIFNJR0FCUlQgKi8KICAg ICAgICBTQV9LSUxMfFNBX0NPUkUsICAgICAgICAvKiBTSUdFTVQgKi8KICAg ICAgICBTQV9LSUxMfFNBX0NPUkUsICAgICAgICAvKiBTSUdGUEUgKi8KICAg ICAgICBTQV9LSUxMLCAgICAgICAgICAgICAgICAvKiBTSUdLSUxMICovCiAg ICAgICAgU0FfS0lMTHxTQV9DT1JFLCAgICAgICAgLyogU0lHQlVTICovCiAg ICAgICAgU0FfS0lMTHxTQV9DT1JFLCAgICAgICAgLyogU0lHU0VHViAqLwog ICAgICAgIFNBX0tJTEx8U0FfQ09SRSwgICAgICAgIC8qIFNJR1NZUyAqLwog ICAgICAgIFNBX0tJTEwsICAgICAgICAgICAgICAgIC8qIFNJR1BJUEUgKi8K ICAgICAgICBTQV9LSUxMLCAgICAgICAgICAgICAgICAvKiBTSUdBTFJNICov CiAgICAgICAgU0FfS0lMTCwgICAgICAgICAgICAgICAgLyogU0lHVEVSTSAq LwogICAgICAgIFNBX0lHTk9SRSwgICAgICAgICAgICAgIC8qIFNJR1VSRyAq LwogICAgICAgIFNBX1NUT1AsICAgICAgICAgICAgICAgIC8qIFNJR1NUT1Ag Ki8KICAgICAgICBTQV9TVE9QfFNBX1RUWVNUT1AsICAgICAvKiBTSUdUU1RQ ICovCiAgICAgICAgU0FfSUdOT1JFfFNBX0NPTlQsICAgICAgLyogU0lHQ09O VCAqLwogICAgICAgIFNBX0lHTk9SRSwgICAgICAgICAgICAgIC8qIFNJR0NI TEQgKi8KICAgICAgICBTQV9TVE9QfFNBX1RUWVNUT1AsICAgICAvKiBTSUdU VElOICovCiAgICAgICAgU0FfU1RPUHxTQV9UVFlTVE9QLCAgICAgLyogU0lH VFRPVSAqLwogICAgICAgIFNBX0lHTk9SRSwgICAgICAgICAgICAgIC8qIFNJ R0lPICovCiAgICAgICAgU0FfS0lMTCwgICAgICAgICAgICAgICAgLyogU0lH WENQVSAqLwogICAgICAgIFNBX0tJTEwsICAgICAgICAgICAgICAgIC8qIFNJ R1hGU1ogKi8KICAgICAgICBTQV9LSUxMLCAgICAgICAgICAgICAgICAvKiBT SUdWVEFMUk0gKi8KICAgICAgICBTQV9LSUxMLCAgICAgICAgICAgICAgICAv KiBTSUdQUk9GICovCiAgICAgICAgU0FfSUdOT1JFLCAgICAgICAgICAgICAg LyogU0lHV0lOQ0ggICovCiAgICAgICAgU0FfSUdOT1JFLCAgICAgICAgICAg ICAgLyogU0lHSU5GTyAqLwogICAgICAgIFNBX0tJTEwsICAgICAgICAgICAg ICAgIC8qIFNJR1VTUjEgKi8KICAgICAgICBTQV9LSUxMLCAgICAgICAgICAg ICAgICAvKiBTSUdVU1IyICovCglTQV9JR05PUkUsICAgICAgICAgICAgICAv KiBTSUdUSFIgKi8KCVNBX0NLUFQsICAgICAgICAgICAgICAgIC8qIFNJR0NL UFQgKi8gCglTQV9LSUxMfFNBX0NLUFQsICAgICAgICAvKiBTSUdDS1BURVhJ VCAqLyAgCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglT QV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUs CglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05P UkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9J R05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglT QV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUs CglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05P UkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9J R05PUkUsCgp9OwoKc3RhdGljIF9faW5saW5lIGludApzaWdwcm9wKGludCBz aWcpCnsKCglpZiAoc2lnID4gMCAmJiBzaWcgPCBOU0lHKQoJCXJldHVybiAo c2lncHJvcHRibFtfU0lHX0lEWChzaWcpXSk7CglyZXR1cm4gKDApOwp9Cgpz dGF0aWMgX19pbmxpbmUgaW50CnNpZ19mZnMoc2lnc2V0X3QgKnNldCkKewoJ aW50IGk7CgoJZm9yIChpID0gMDsgaSA8IF9TSUdfV09SRFM7IGkrKykKCQlp ZiAoc2V0LT5fX2JpdHNbaV0pCgkJCXJldHVybiAoZmZzKHNldC0+X19iaXRz W2ldKSArIChpICogMzIpKTsKCXJldHVybiAoMCk7Cn0KCmludAprZXJuX3Np Z2FjdGlvbihpbnQgc2lnLCBzdHJ1Y3Qgc2lnYWN0aW9uICphY3QsIHN0cnVj dCBzaWdhY3Rpb24gKm9hY3QpCnsKCXN0cnVjdCB0aHJlYWQgKnRkID0gY3Vy dGhyZWFkOwoJc3RydWN0IHByb2MgKnAgPSB0ZC0+dGRfcHJvYzsKCXN0cnVj dCBzaWdhY3RzICpwcyA9IHAtPnBfc2lnYWN0czsKCglpZiAoc2lnIDw9IDAg fHwgc2lnID4gX1NJR19NQVhTSUcpCgkJcmV0dXJuIChFSU5WQUwpOwoKCWlm IChvYWN0KSB7CgkJb2FjdC0+c2FfaGFuZGxlciA9IHBzLT5wc19zaWdhY3Rb X1NJR19JRFgoc2lnKV07CgkJb2FjdC0+c2FfbWFzayA9IHBzLT5wc19jYXRj aG1hc2tbX1NJR19JRFgoc2lnKV07CgkJb2FjdC0+c2FfZmxhZ3MgPSAwOwoJ CWlmIChTSUdJU01FTUJFUihwcy0+cHNfc2lnb25zdGFjaywgc2lnKSkKCQkJ b2FjdC0+c2FfZmxhZ3MgfD0gU0FfT05TVEFDSzsKCQlpZiAoIVNJR0lTTUVN QkVSKHBzLT5wc19zaWdpbnRyLCBzaWcpKQoJCQlvYWN0LT5zYV9mbGFncyB8 PSBTQV9SRVNUQVJUOwoJCWlmIChTSUdJU01FTUJFUihwcy0+cHNfc2lncmVz ZXQsIHNpZykpCgkJCW9hY3QtPnNhX2ZsYWdzIHw9IFNBX1JFU0VUSEFORDsK CQlpZiAoU0lHSVNNRU1CRVIocHMtPnBzX3NpZ25vZGVmZXIsIHNpZykpCgkJ CW9hY3QtPnNhX2ZsYWdzIHw9IFNBX05PREVGRVI7CgkJaWYgKFNJR0lTTUVN QkVSKHBzLT5wc19zaWdpbmZvLCBzaWcpKQoJCQlvYWN0LT5zYV9mbGFncyB8 PSBTQV9TSUdJTkZPOwoJCWlmIChzaWcgPT0gU0lHQ0hMRCAmJiBwLT5wX3By b2NzaWctPnBzX2ZsYWcgJiBQU19OT0NMRFNUT1ApCgkJCW9hY3QtPnNhX2Zs YWdzIHw9IFNBX05PQ0xEU1RPUDsKCQlpZiAoc2lnID09IFNJR0NITEQgJiYg cC0+cF9wcm9jc2lnLT5wc19mbGFnICYgUFNfTk9DTERXQUlUKQoJCQlvYWN0 LT5zYV9mbGFncyB8PSBTQV9OT0NMRFdBSVQ7Cgl9CglpZiAoYWN0KSB7CgkJ aWYgKChzaWcgPT0gU0lHS0lMTCB8fCBzaWcgPT0gU0lHU1RPUCkgJiYKCQkg ICAgYWN0LT5zYV9oYW5kbGVyICE9IFNJR19ERkwpCgkJCXJldHVybiAoRUlO VkFMKTsKCgkJLyoKCQkgKiBDaGFuZ2Ugc2V0dGluZyBhdG9taWNhbGx5LgoJ CSAqLwoJCXNwbGhpZ2goKTsKCgkJcHMtPnBzX2NhdGNobWFza1tfU0lHX0lE WChzaWcpXSA9IGFjdC0+c2FfbWFzazsKCQlTSUdfQ0FOVE1BU0socHMtPnBz X2NhdGNobWFza1tfU0lHX0lEWChzaWcpXSk7CgkJaWYgKGFjdC0+c2FfZmxh Z3MgJiBTQV9TSUdJTkZPKSB7CgkJCXBzLT5wc19zaWdhY3RbX1NJR19JRFgo c2lnKV0gPQoJCQkgICAgKF9fc2lnaGFuZGxlcl90ICopYWN0LT5zYV9zaWdh Y3Rpb247CgkJCVNJR0FERFNFVChwcy0+cHNfc2lnaW5mbywgc2lnKTsKCQl9 IGVsc2UgewoJCQlwcy0+cHNfc2lnYWN0W19TSUdfSURYKHNpZyldID0gYWN0 LT5zYV9oYW5kbGVyOwoJCQlTSUdERUxTRVQocHMtPnBzX3NpZ2luZm8sIHNp Zyk7CgkJfQoJCWlmICghKGFjdC0+c2FfZmxhZ3MgJiBTQV9SRVNUQVJUKSkK CQkJU0lHQUREU0VUKHBzLT5wc19zaWdpbnRyLCBzaWcpOwoJCWVsc2UKCQkJ U0lHREVMU0VUKHBzLT5wc19zaWdpbnRyLCBzaWcpOwoJCWlmIChhY3QtPnNh X2ZsYWdzICYgU0FfT05TVEFDSykKCQkJU0lHQUREU0VUKHBzLT5wc19zaWdv bnN0YWNrLCBzaWcpOwoJCWVsc2UKCQkJU0lHREVMU0VUKHBzLT5wc19zaWdv bnN0YWNrLCBzaWcpOwoJCWlmIChhY3QtPnNhX2ZsYWdzICYgU0FfUkVTRVRI QU5EKQoJCQlTSUdBRERTRVQocHMtPnBzX3NpZ3Jlc2V0LCBzaWcpOwoJCWVs c2UKCQkJU0lHREVMU0VUKHBzLT5wc19zaWdyZXNldCwgc2lnKTsKCQlpZiAo YWN0LT5zYV9mbGFncyAmIFNBX05PREVGRVIpCgkJCVNJR0FERFNFVChwcy0+ cHNfc2lnbm9kZWZlciwgc2lnKTsKCQllbHNlCgkJCVNJR0RFTFNFVChwcy0+ cHNfc2lnbm9kZWZlciwgc2lnKTsKCQlpZiAoc2lnID09IFNJR0NITEQpIHsK CQkJaWYgKGFjdC0+c2FfZmxhZ3MgJiBTQV9OT0NMRFNUT1ApCgkJCQlwLT5w X3Byb2NzaWctPnBzX2ZsYWcgfD0gUFNfTk9DTERTVE9QOwoJCQllbHNlCgkJ CQlwLT5wX3Byb2NzaWctPnBzX2ZsYWcgJj0gflBTX05PQ0xEU1RPUDsKCQkJ aWYgKGFjdC0+c2FfZmxhZ3MgJiBTQV9OT0NMRFdBSVQpIHsKCQkJCS8qCgkJ CQkgKiBQYXJhbm9pYTogc2luY2UgU0FfTk9DTERXQUlUIGlzIGltcGxlbWVu dGVkCgkJCQkgKiBieSByZXBhcmVudGluZyB0aGUgZHlpbmcgY2hpbGQgdG8g UElEIDEgKGFuZAoJCQkJICogdHJ1c3QgaXQgdG8gcmVhcCB0aGUgem9tYmll KSwgUElEIDEgaXRzZWxmCgkJCQkgKiBpcyBmb3JiaWRkZW4gdG8gc2V0IFNB X05PQ0xEV0FJVC4KCQkJCSAqLwoJCQkJaWYgKHAtPnBfcGlkID09IDEpCgkJ CQkJcC0+cF9wcm9jc2lnLT5wc19mbGFnICY9IH5QU19OT0NMRFdBSVQ7CgkJ CQllbHNlCgkJCQkJcC0+cF9wcm9jc2lnLT5wc19mbGFnIHw9IFBTX05PQ0xE V0FJVDsKCQkJfSBlbHNlIHsKCQkJCXAtPnBfcHJvY3NpZy0+cHNfZmxhZyAm PSB+UFNfTk9DTERXQUlUOwoJCQl9CgkJfQoJCS8qCgkJICogU2V0IGJpdCBp biBwX3NpZ2lnbm9yZSBmb3Igc2lnbmFscyB0aGF0IGFyZSBzZXQgdG8gU0lH X0lHTiwKCQkgKiBhbmQgZm9yIHNpZ25hbHMgc2V0IHRvIFNJR19ERkwgd2hl cmUgdGhlIGRlZmF1bHQgaXMgdG8KCQkgKiBpZ25vcmUuIEhvd2V2ZXIsIGRv bid0IHB1dCBTSUdDT05UIGluIHBfc2lnaWdub3JlLCBhcyB3ZQoJCSAqIGhh dmUgdG8gcmVzdGFydCB0aGUgcHJvY2Vzcy4KCQkgKi8KCQlpZiAocHMtPnBz X3NpZ2FjdFtfU0lHX0lEWChzaWcpXSA9PSBTSUdfSUdOIHx8CgkJICAgIChz aWdwcm9wKHNpZykgJiBTQV9JR05PUkUgJiYKCQkgICAgIHBzLT5wc19zaWdh Y3RbX1NJR19JRFgoc2lnKV0gPT0gU0lHX0RGTCkpIHsKCQkJLyogbmV2ZXIg dG8gYmUgc2VlbiBhZ2FpbiAqLwoJCQlTSUdERUxTRVQocC0+cF9zaWdsaXN0 LCBzaWcpOwoJCQlpZiAoc2lnICE9IFNJR0NPTlQpCgkJCQkvKiBlYXNpZXIg aW4gcHNpZ25hbCAqLwoJCQkJU0lHQUREU0VUKHAtPnBfc2lnaWdub3JlLCBz aWcpOwoJCQlTSUdERUxTRVQocC0+cF9zaWdjYXRjaCwgc2lnKTsKCQl9IGVs c2UgewoJCQlTSUdERUxTRVQocC0+cF9zaWdpZ25vcmUsIHNpZyk7CgkJCWlm IChwcy0+cHNfc2lnYWN0W19TSUdfSURYKHNpZyldID09IFNJR19ERkwpCgkJ CQlTSUdERUxTRVQocC0+cF9zaWdjYXRjaCwgc2lnKTsKCQkJZWxzZQoJCQkJ U0lHQUREU0VUKHAtPnBfc2lnY2F0Y2gsIHNpZyk7CgkJfQoKCQlzcGwwKCk7 Cgl9CglyZXR1cm4gKDApOwp9CgppbnQKc2lnYWN0aW9uKHN0cnVjdCBzaWdh Y3Rpb25fYXJncyAqdWFwKQp7CglzdHJ1Y3Qgc2lnYWN0aW9uIGFjdCwgb2Fj dDsKCXN0cnVjdCBzaWdhY3Rpb24gKmFjdHAsICpvYWN0cDsKCWludCBlcnJv cjsKCglhY3RwID0gKHVhcC0+YWN0ICE9IE5VTEwpID8gJmFjdCA6IE5VTEw7 CglvYWN0cCA9ICh1YXAtPm9hY3QgIT0gTlVMTCkgPyAmb2FjdCA6IE5VTEw7 CglpZiAoYWN0cCkgewoJCWVycm9yID0gY29weWluKHVhcC0+YWN0LCBhY3Rw LCBzaXplb2YoYWN0KSk7CgkJaWYgKGVycm9yKQoJCQlyZXR1cm4gKGVycm9y KTsKCX0KCWVycm9yID0ga2Vybl9zaWdhY3Rpb24odWFwLT5zaWcsIGFjdHAs IG9hY3RwKTsKCWlmIChvYWN0cCAmJiAhZXJyb3IpIHsKCQllcnJvciA9IGNv cHlvdXQob2FjdHAsIHVhcC0+b2FjdCwgc2l6ZW9mKG9hY3QpKTsKCX0KCXJl dHVybiAoZXJyb3IpOwp9CgovKgogKiBJbml0aWFsaXplIHNpZ25hbCBzdGF0 ZSBmb3IgcHJvY2VzcyAwOwogKiBzZXQgdG8gaWdub3JlIHNpZ25hbHMgdGhh dCBhcmUgaWdub3JlZCBieSBkZWZhdWx0LgogKi8Kdm9pZApzaWdpbml0KHN0 cnVjdCBwcm9jICpwKQp7CglpbnQgaTsKCglmb3IgKGkgPSAxOyBpIDw9IE5T SUc7IGkrKykKCQlpZiAoc2lncHJvcChpKSAmIFNBX0lHTk9SRSAmJiBpICE9 IFNJR0NPTlQpCgkJCVNJR0FERFNFVChwLT5wX3NpZ2lnbm9yZSwgaSk7Cn0K Ci8qCiAqIFJlc2V0IHNpZ25hbHMgZm9yIGFuIGV4ZWMgb2YgdGhlIHNwZWNp ZmllZCBwcm9jZXNzLgogKi8Kdm9pZApleGVjc2lncyhzdHJ1Y3QgcHJvYyAq cCkKewoJc3RydWN0IHNpZ2FjdHMgKnBzID0gcC0+cF9zaWdhY3RzOwoJaW50 IHNpZzsKCgkvKgoJICogUmVzZXQgY2F1Z2h0IHNpZ25hbHMuICBIZWxkIHNp Z25hbHMgcmVtYWluIGhlbGQKCSAqIHRocm91Z2ggcF9zaWdtYXNrICh1bmxl c3MgdGhleSB3ZXJlIGNhdWdodCwKCSAqIGFuZCBhcmUgbm93IGlnbm9yZWQg YnkgZGVmYXVsdCkuCgkgKi8KCXdoaWxlIChTSUdOT1RFTVBUWShwLT5wX3Np Z2NhdGNoKSkgewoJCXNpZyA9IHNpZ19mZnMoJnAtPnBfc2lnY2F0Y2gpOwoJ CVNJR0RFTFNFVChwLT5wX3NpZ2NhdGNoLCBzaWcpOwoJCWlmIChzaWdwcm9w KHNpZykgJiBTQV9JR05PUkUpIHsKCQkJaWYgKHNpZyAhPSBTSUdDT05UKQoJ CQkJU0lHQUREU0VUKHAtPnBfc2lnaWdub3JlLCBzaWcpOwoJCQlTSUdERUxT RVQocC0+cF9zaWdsaXN0LCBzaWcpOwoJCX0KCQlwcy0+cHNfc2lnYWN0W19T SUdfSURYKHNpZyldID0gU0lHX0RGTDsKCX0KCS8qCgkgKiBSZXNldCBzdGFj ayBzdGF0ZSB0byB0aGUgdXNlciBzdGFjay4KCSAqIENsZWFyIHNldCBvZiBz aWduYWxzIGNhdWdodCBvbiB0aGUgc2lnbmFsIHN0YWNrLgoJICovCglwLT5w X3NpZ3N0ay5zc19mbGFncyA9IFNTX0RJU0FCTEU7CglwLT5wX3NpZ3N0ay5z c19zaXplID0gMDsKCXAtPnBfc2lnc3RrLnNzX3NwID0gMDsKCXAtPnBfZmxh ZyAmPSB+UF9BTFRTVEFDSzsKCS8qCgkgKiBSZXNldCBubyB6b21iaWVzIGlm IGNoaWxkIGRpZXMgZmxhZyBhcyBTb2xhcmlzIGRvZXMuCgkgKi8KCXAtPnBf cHJvY3NpZy0+cHNfZmxhZyAmPSB+UFNfTk9DTERXQUlUOwp9CgovKgogKiBr ZXJuX3NpZ3Byb2NtYXNrKCkgLSBNUCBTQUZFIE9OTFkgSUYgcCA9PSBjdXJw cm9jCiAqCiAqCU1hbmlwdWxhdGUgc2lnbmFsIG1hc2suICBUaGlzIHJvdXRp bmUgaXMgTVAgU0FGRSAqT05MWSogaWYKICoJcCA9PSBjdXJwcm9jLiAgQWxz byByZW1lbWJlciB0aGF0IGluIG9yZGVyIHRvIHJlbWFpbiBNUCBTQUZFCiAq CW5vIHNwbCooKSBjYWxscyBtYXkgYmUgbWFkZS4KICovCmludAprZXJuX3Np Z3Byb2NtYXNrKGludCBob3csIHNpZ3NldF90ICpzZXQsIHNpZ3NldF90ICpv c2V0KQp7CglzdHJ1Y3QgdGhyZWFkICp0ZCA9IGN1cnRocmVhZDsKCXN0cnVj dCBwcm9jICpwID0gdGQtPnRkX3Byb2M7CglpbnQgZXJyb3I7CgoJaWYgKG9z ZXQgIT0gTlVMTCkKCQkqb3NldCA9IHAtPnBfc2lnbWFzazsKCgllcnJvciA9 IDA7CglpZiAoc2V0ICE9IE5VTEwpIHsKCQlzd2l0Y2ggKGhvdykgewoJCWNh c2UgU0lHX0JMT0NLOgoJCQlTSUdfQ0FOVE1BU0soKnNldCk7CgkJCVNJR1NF VE9SKHAtPnBfc2lnbWFzaywgKnNldCk7CgkJCWJyZWFrOwoJCWNhc2UgU0lH X1VOQkxPQ0s6CgkJCVNJR1NFVE5BTkQocC0+cF9zaWdtYXNrLCAqc2V0KTsK CQkJYnJlYWs7CgkJY2FzZSBTSUdfU0VUTUFTSzoKCQkJU0lHX0NBTlRNQVNL KCpzZXQpOwoJCQlwLT5wX3NpZ21hc2sgPSAqc2V0OwoJCQlicmVhazsKCQlk ZWZhdWx0OgoJCQllcnJvciA9IEVJTlZBTDsKCQkJYnJlYWs7CgkJfQoJfQoJ cmV0dXJuIChlcnJvcik7Cn0KCi8qCiAqIHNpZ3Byb2NtYXNrKCkgLSBNUCBT QUZFCiAqLwppbnQKc2lncHJvY21hc2soc3RydWN0IHNpZ3Byb2NtYXNrX2Fy Z3MgKnVhcCkKewoJc2lnc2V0X3Qgc2V0LCBvc2V0OwoJc2lnc2V0X3QgKnNl dHAsICpvc2V0cDsKCWludCBlcnJvcjsKCglzZXRwID0gKHVhcC0+c2V0ICE9 IE5VTEwpID8gJnNldCA6IE5VTEw7Cglvc2V0cCA9ICh1YXAtPm9zZXQgIT0g TlVMTCkgPyAmb3NldCA6IE5VTEw7CglpZiAoc2V0cCkgewoJCWVycm9yID0g Y29weWluKHVhcC0+c2V0LCBzZXRwLCBzaXplb2Yoc2V0KSk7CgkJaWYgKGVy cm9yKQoJCQlyZXR1cm4gKGVycm9yKTsKCX0KCWVycm9yID0ga2Vybl9zaWdw cm9jbWFzayh1YXAtPmhvdywgc2V0cCwgb3NldHApOwoJaWYgKG9zZXRwICYm ICFlcnJvcikgewoJCWVycm9yID0gY29weW91dChvc2V0cCwgdWFwLT5vc2V0 LCBzaXplb2Yob3NldCkpOwoJfQoJcmV0dXJuIChlcnJvcik7Cn0KCmludApr ZXJuX3NpZ3BlbmRpbmcoc3RydWN0IF9fc2lnc2V0ICpzZXQpCnsKCXN0cnVj dCB0aHJlYWQgKnRkID0gY3VydGhyZWFkOwoJc3RydWN0IHByb2MgKnAgPSB0 ZC0+dGRfcHJvYzsKCgkqc2V0ID0gcC0+cF9zaWdsaXN0OwoKCXJldHVybiAo MCk7Cn0KCmludApzaWdwZW5kaW5nKHN0cnVjdCBzaWdwZW5kaW5nX2FyZ3Mg KnVhcCkKewoJc2lnc2V0X3Qgc2V0OwoJaW50IGVycm9yOwoKCWVycm9yID0g a2Vybl9zaWdwZW5kaW5nKCZzZXQpOwoKCWlmIChlcnJvciA9PSAwKQoJCWVy cm9yID0gY29weW91dCgmc2V0LCB1YXAtPnNldCwgc2l6ZW9mKHNldCkpOwoJ cmV0dXJuIChlcnJvcik7Cn0KCi8qCiAqIFN1c3BlbmQgcHJvY2VzcyB1bnRp bCBzaWduYWwsIHByb3ZpZGluZyBtYXNrIHRvIGJlIHNldAogKiBpbiB0aGUg bWVhbnRpbWUuCiAqLwppbnQKa2Vybl9zaWdzdXNwZW5kKHN0cnVjdCBfX3Np Z3NldCAqc2V0KQp7CglzdHJ1Y3QgdGhyZWFkICp0ZCA9IGN1cnRocmVhZDsK CXN0cnVjdCBwcm9jICpwID0gdGQtPnRkX3Byb2M7CglzdHJ1Y3Qgc2lnYWN0 cyAqcHMgPSBwLT5wX3NpZ2FjdHM7CgoJLyoKCSAqIFdoZW4gcmV0dXJuaW5n IGZyb20gc2lnc3VzcGVuZCwgd2Ugd2FudAoJICogdGhlIG9sZCBtYXNrIHRv IGJlIHJlc3RvcmVkIGFmdGVyIHRoZQoJICogc2lnbmFsIGhhbmRsZXIgaGFz IGZpbmlzaGVkLiAgVGh1cywgd2UKCSAqIHNhdmUgaXQgaGVyZSBhbmQgbWFy ayB0aGUgc2lnYWN0cyBzdHJ1Y3R1cmUKCSAqIHRvIGluZGljYXRlIHRoaXMu CgkgKi8KCXAtPnBfb2xkc2lnbWFzayA9IHAtPnBfc2lnbWFzazsKCXAtPnBf ZmxhZyB8PSBQX09MRE1BU0s7CgoJU0lHX0NBTlRNQVNLKCpzZXQpOwoJcC0+ cF9zaWdtYXNrID0gKnNldDsKCXdoaWxlICh0c2xlZXAocHMsIFBDQVRDSCwg InBhdXNlIiwgMCkgPT0gMCkKCQkvKiB2b2lkICovOwoJLyogYWx3YXlzIHJl dHVybiBFSU5UUiByYXRoZXIgdGhhbiBFUkVTVEFSVC4uLiAqLwoJcmV0dXJu IChFSU5UUik7Cn0KCi8qCiAqIE5vdGUgbm9uc3RhbmRhcmQgY2FsbGluZyBj b252ZW50aW9uOiBsaWJjIHN0dWIgcGFzc2VzIG1hc2ssIG5vdAogKiBwb2lu dGVyLCB0byBzYXZlIGEgY29weWluLgogKi8KaW50CnNpZ3N1c3BlbmQoc3Ry dWN0IHNpZ3N1c3BlbmRfYXJncyAqdWFwKQp7CglzaWdzZXRfdCBtYXNrOwoJ aW50IGVycm9yOwoKCWVycm9yID0gY29weWluKHVhcC0+c2lnbWFzaywgJm1h c2ssIHNpemVvZihtYXNrKSk7CglpZiAoZXJyb3IpCgkJcmV0dXJuIChlcnJv cik7CgoJZXJyb3IgPSBrZXJuX3NpZ3N1c3BlbmQoJm1hc2spOwoKCXJldHVy biAoZXJyb3IpOwp9CgppbnQKa2Vybl9zaWdhbHRzdGFjayhzdHJ1Y3Qgc2ln YWx0c3RhY2sgKnNzLCBzdHJ1Y3Qgc2lnYWx0c3RhY2sgKm9zcykKewoJc3Ry dWN0IHRocmVhZCAqdGQgPSBjdXJ0aHJlYWQ7CglzdHJ1Y3QgcHJvYyAqcCA9 IHRkLT50ZF9wcm9jOwoKCWlmICgocC0+cF9mbGFnICYgUF9BTFRTVEFDSykg PT0gMCkKCQlwLT5wX3NpZ3N0ay5zc19mbGFncyB8PSBTU19ESVNBQkxFOwoK CWlmIChvc3MpCgkJKm9zcyA9IHAtPnBfc2lnc3RrOwoKCWlmIChzcykgewoJ CWlmIChzcy0+c3NfZmxhZ3MgJiBTU19ESVNBQkxFKSB7CgkJCWlmIChwLT5w X3NpZ3N0ay5zc19mbGFncyAmIFNTX09OU1RBQ0spCgkJCQlyZXR1cm4gKEVJ TlZBTCk7CgkJCXAtPnBfZmxhZyAmPSB+UF9BTFRTVEFDSzsKCQkJcC0+cF9z aWdzdGsuc3NfZmxhZ3MgPSBzcy0+c3NfZmxhZ3M7CgkJfSBlbHNlIHsKCQkJ aWYgKHNzLT5zc19zaXplIDwgcC0+cF9zeXNlbnQtPnN2X21pbnNpZ3N0a3N6 KQoJCQkJcmV0dXJuIChFTk9NRU0pOwoJCQlwLT5wX2ZsYWcgfD0gUF9BTFRT VEFDSzsKCQkJcC0+cF9zaWdzdGsgPSAqc3M7CgkJfQoJfQoKCXJldHVybiAo MCk7Cn0KCmludApzaWdhbHRzdGFjayhzdHJ1Y3Qgc2lnYWx0c3RhY2tfYXJn cyAqdWFwKQp7CglzdGFja190IHNzLCBvc3M7CglpbnQgZXJyb3I7CgoJaWYg KHVhcC0+c3MpIHsKCQllcnJvciA9IGNvcHlpbih1YXAtPnNzLCAmc3MsIHNp emVvZihzcykpOwoJCWlmIChlcnJvcikKCQkJcmV0dXJuIChlcnJvcik7Cgl9 CgoJZXJyb3IgPSBrZXJuX3NpZ2FsdHN0YWNrKHVhcC0+c3MgPyAmc3MgOiBO VUxMLAoJICAgIHVhcC0+b3NzID8gJm9zcyA6IE5VTEwpOwoKCWlmIChlcnJv ciA9PSAwICYmIHVhcC0+b3NzKQoJCWVycm9yID0gY29weW91dCgmb3NzLCB1 YXAtPm9zcywgc2l6ZW9mKCp1YXAtPm9zcykpOwoJcmV0dXJuIChlcnJvcik7 Cn0KCi8qCiAqIENvbW1vbiBjb2RlIGZvciBraWxsIHByb2Nlc3MgZ3JvdXAv YnJvYWRjYXN0IGtpbGwuCiAqIGNwIGlzIGNhbGxpbmcgcHJvY2Vzcy4KICov CnN0YXRpYyBpbnQKa2lsbHBnKGludCBzaWcsIGludCBwZ2lkLCBpbnQgYWxs KQp7CglzdHJ1Y3QgcHJvYyAqY3AgPSBjdXJwcm9jOwoJc3RydWN0IHByb2Mg KnA7CglzdHJ1Y3QgcGdycCAqcGdycDsKCWludCBuZm91bmQgPSAwOwoKCWlm IChhbGwpIHsKCQkvKgoJCSAqIGJyb2FkY2FzdAoJCSAqLwoJCUZPUkVBQ0hf UFJPQ19JTl9TWVNURU0ocCkgewoJCQlpZiAocC0+cF9waWQgPD0gMSB8fCBw LT5wX2ZsYWcgJiBQX1NZU1RFTSB8fAoJCQkgICAgcCA9PSBjcCB8fCAhQ0FO U0lHTkFMKHAsIHNpZykpCgkJCQljb250aW51ZTsKCQkJbmZvdW5kKys7CgkJ CWlmIChzaWcpCgkJCQlwc2lnbmFsKHAsIHNpZyk7CgkJfQoJfSBlbHNlIHsK CQlpZiAocGdpZCA9PSAwKSB7CgkJCS8qCgkJCSAqIHplcm8gcGdpZCBtZWFu cyBzZW5kIHRvIG15IHByb2Nlc3MgZ3JvdXAuCgkJCSAqLwoJCQlwZ3JwID0g Y3AtPnBfcGdycDsKCQl9IGVsc2UgewoJCQlwZ3JwID0gcGdmaW5kKHBnaWQp OwoJCQlpZiAocGdycCA9PSBOVUxMKQoJCQkJcmV0dXJuIChFU1JDSCk7CgkJ fQoJCUxJU1RfRk9SRUFDSChwLCAmcGdycC0+cGdfbWVtYmVycywgcF9wZ2xp c3QpIHsKCQkJaWYgKHAtPnBfcGlkIDw9IDEgfHwgcC0+cF9mbGFnICYgUF9T WVNURU0gfHwKCQkJICAgIHAtPnBfc3RhdCA9PSBTWk9NQiB8fAoJCQkgICAg IUNBTlNJR05BTChwLCBzaWcpKQoJCQkJY29udGludWU7CgkJCW5mb3VuZCsr OwoJCQlpZiAoc2lnKQoJCQkJcHNpZ25hbChwLCBzaWcpOwoJCX0KCX0KCXJl dHVybiAobmZvdW5kID8gMCA6IEVTUkNIKTsKfQoKaW50Cmtlcm5fa2lsbChp bnQgc2lnLCBpbnQgcGlkKQp7CglzdHJ1Y3QgdGhyZWFkICp0ZCA9IGN1cnRo cmVhZDsKCXN0cnVjdCBwcm9jICpwID0gdGQtPnRkX3Byb2M7CgoJaWYgKCh1 X2ludClzaWcgPiBfU0lHX01BWFNJRykKCQlyZXR1cm4gKEVJTlZBTCk7Cglp ZiAocGlkID4gMCkgewoJCS8qIGtpbGwgc2luZ2xlIHByb2Nlc3MgKi8KCQlp ZiAoKHAgPSBwZmluZChwaWQpKSA9PSBOVUxMKQoJCQlyZXR1cm4gKEVTUkNI KTsKCQlpZiAoIUNBTlNJR05BTChwLCBzaWcpKQoJCQlyZXR1cm4gKEVQRVJN KTsKCQlpZiAoc2lnKQoJCQlwc2lnbmFsKHAsIHNpZyk7CgkJcmV0dXJuICgw KTsKCX0KCXN3aXRjaCAocGlkKSB7CgljYXNlIC0xOgkJLyogYnJvYWRjYXN0 IHNpZ25hbCAqLwoJCXJldHVybiAoa2lsbHBnKHNpZywgMCwgMSkpOwoJY2Fz ZSAwOgkJCS8qIHNpZ25hbCBvd24gcHJvY2VzcyBncm91cCAqLwoJCXJldHVy biAoa2lsbHBnKHNpZywgMCwgMCkpOwoJZGVmYXVsdDoJCS8qIG5lZ2F0aXZl IGV4cGxpY2l0IHByb2Nlc3MgZ3JvdXAgKi8KCQlyZXR1cm4gKGtpbGxwZyhz aWcsIC1waWQsIDApKTsKCX0KCS8qIE5PVFJFQUNIRUQgKi8KfQoKaW50Cmtp bGwoc3RydWN0IGtpbGxfYXJncyAqdWFwKQp7CglpbnQgZXJyb3I7CgoJZXJy b3IgPSBrZXJuX2tpbGwodWFwLT5zaWdudW0sIHVhcC0+cGlkKTsKCglyZXR1 cm4gKGVycm9yKTsKfQoKLyoKICogU2VuZCBhIHNpZ25hbCB0byBhIHByb2Nl c3MgZ3JvdXAuCiAqLwp2b2lkCmdzaWduYWwoaW50IHBnaWQsIGludCBzaWcp CnsKCXN0cnVjdCBwZ3JwICpwZ3JwOwoKCWlmIChwZ2lkICYmIChwZ3JwID0g cGdmaW5kKHBnaWQpKSkKCQlwZ3NpZ25hbChwZ3JwLCBzaWcsIDApOwp9Cgov KgogKiBTZW5kIGEgc2lnbmFsIHRvIGEgcHJvY2VzcyBncm91cC4gIElmIGNo ZWNrdHR5IGlzIDEsCiAqIGxpbWl0IHRvIG1lbWJlcnMgd2hpY2ggaGF2ZSBh IGNvbnRyb2xsaW5nIHRlcm1pbmFsLgogKi8Kdm9pZApwZ3NpZ25hbChzdHJ1 Y3QgcGdycCAqcGdycCwgaW50IHNpZywgaW50IGNoZWNrY3R0eSkKewoJc3Ry dWN0IHByb2MgKnA7CgoJaWYgKHBncnApCgkJTElTVF9GT1JFQUNIKHAsICZw Z3JwLT5wZ19tZW1iZXJzLCBwX3BnbGlzdCkKCQkJaWYgKGNoZWNrY3R0eSA9 PSAwIHx8IHAtPnBfZmxhZyAmIFBfQ09OVFJPTFQpCgkJCQlwc2lnbmFsKHAs IHNpZyk7Cn0KCi8qCiAqIFNlbmQgYSBzaWduYWwgY2F1c2VkIGJ5IGEgdHJh cCB0byB0aGUgY3VycmVudCBwcm9jZXNzLgogKiBJZiBpdCB3aWxsIGJlIGNh dWdodCBpbW1lZGlhdGVseSwgZGVsaXZlciBpdCB3aXRoIGNvcnJlY3QgY29k ZS4KICogT3RoZXJ3aXNlLCBwb3N0IGl0IG5vcm1hbGx5LgogKi8Kdm9pZAp0 cmFwc2lnbmFsKHN0cnVjdCBwcm9jICpwLCBpbnQgc2lnLCB1X2xvbmcgY29k ZSkKewoJc3RydWN0IHNpZ2FjdHMgKnBzID0gcC0+cF9zaWdhY3RzOwoKCWlm ICgocC0+cF9mbGFnICYgUF9UUkFDRUQpID09IDAgJiYgU0lHSVNNRU1CRVIo cC0+cF9zaWdjYXRjaCwgc2lnKSAmJgoJICAgICFTSUdJU01FTUJFUihwLT5w X3NpZ21hc2ssIHNpZykpIHsKCQlwLT5wX3N0YXRzLT5wX3J1LnJ1X25zaWdu YWxzKys7CgkJaWYgKHAtPmNoa3B0KQoJCQlwLT5jaGtwdF9zaWcgPSBzaWc7 CiNpZmRlZiBLVFJBQ0UKCQlpZiAoS1RSUE9JTlQocC0+cF90aHJlYWQsIEtU Ul9QU0lHKSkKCQkJa3RycHNpZyhwLT5wX3RyYWNlcCwgc2lnLCBwcy0+cHNf c2lnYWN0W19TSUdfSURYKHNpZyldLAoJCQkJJnAtPnBfc2lnbWFzaywgY29k ZSk7CiNlbmRpZgoJCSgqcC0+cF9zeXNlbnQtPnN2X3NlbmRzaWcpKHBzLT5w c19zaWdhY3RbX1NJR19JRFgoc2lnKV0sIHNpZywKCQkJCQkJJnAtPnBfc2ln bWFzaywgY29kZSk7CgkJU0lHU0VUT1IocC0+cF9zaWdtYXNrLCBwcy0+cHNf Y2F0Y2htYXNrW19TSUdfSURYKHNpZyldKTsKCQlpZiAoIVNJR0lTTUVNQkVS KHBzLT5wc19zaWdub2RlZmVyLCBzaWcpKQoJCQlTSUdBRERTRVQocC0+cF9z aWdtYXNrLCBzaWcpOwoJCWlmIChTSUdJU01FTUJFUihwcy0+cHNfc2lncmVz ZXQsIHNpZykpIHsKCQkJLyoKCQkJICogU2VlIGtlcm5fc2lnYWN0aW9uKCkg Zm9yIG9yaWdpbiBvZiB0aGlzIGNvZGUuCgkJCSAqLwoJCQlTSUdERUxTRVQo cC0+cF9zaWdjYXRjaCwgc2lnKTsKCQkJaWYgKHNpZyAhPSBTSUdDT05UICYm CgkJCSAgICBzaWdwcm9wKHNpZykgJiBTQV9JR05PUkUpCgkJCQlTSUdBRERT RVQocC0+cF9zaWdpZ25vcmUsIHNpZyk7CgkJCXBzLT5wc19zaWdhY3RbX1NJ R19JRFgoc2lnKV0gPSBTSUdfREZMOwoJCX0KCX0gZWxzZSB7CgkJcC0+cF9j b2RlID0gY29kZTsJLyogWFhYIGZvciBjb3JlIGR1bXAvZGVidWdnZXIgKi8K CQlwLT5wX3NpZyA9IHNpZzsJCS8qIFhYWCB0byB2ZXJpZnkgY29kZSAqLwoJ CXBzaWduYWwocCwgc2lnKTsKCX0KfQoKLyoKICogU2VuZCB0aGUgc2lnbmFs IHRvIHRoZSBwcm9jZXNzLiAgSWYgdGhlIHNpZ25hbCBoYXMgYW4gYWN0aW9u LCB0aGUgYWN0aW9uCiAqIGlzIHVzdWFsbHkgcGVyZm9ybWVkIGJ5IHRoZSB0 YXJnZXQgcHJvY2VzcyByYXRoZXIgdGhhbiB0aGUgY2FsbGVyOyB3ZSBhZGQK ICogdGhlIHNpZ25hbCB0byB0aGUgc2V0IG9mIHBlbmRpbmcgc2lnbmFscyBm b3IgdGhlIHByb2Nlc3MuCiAqCiAqIEV4Y2VwdGlvbnM6CiAqICAgbyBXaGVu IGEgc3RvcCBzaWduYWwgaXMgc2VudCB0byBhIHNsZWVwaW5nIHByb2Nlc3Mg dGhhdCB0YWtlcyB0aGUKICogICAgIGRlZmF1bHQgYWN0aW9uLCB0aGUgcHJv Y2VzcyBpcyBzdG9wcGVkIHdpdGhvdXQgYXdha2VuaW5nIGl0LgogKiAgIG8g U0lHQ09OVCByZXN0YXJ0cyBzdG9wcGVkIHByb2Nlc3NlcyAob3IgcHV0cyB0 aGVtIGJhY2sgdG8gc2xlZXApCiAqICAgICByZWdhcmRsZXNzIG9mIHRoZSBz aWduYWwgYWN0aW9uIChlZywgYmxvY2tlZCBvciBpZ25vcmVkKS4KICoKICog T3RoZXIgaWdub3JlZCBzaWduYWxzIGFyZSBkaXNjYXJkZWQgaW1tZWRpYXRl bHkuCiAqLwoKLyoKICogdGVtcG9yYXJ5IGhhY2sgdG8gYWxsb3cgY2hlY2tw b2ludCBjb2RlIHRvIGNvbnRpbnVlIHRvCiAqIGJlIGluIGEgbW9kdWxlIGZv ciB0aGUgbW9tZW50CiAqLwoKdm9pZApwc2lnbmFsKHN0cnVjdCBwcm9jICpw LCBpbnQgc2lnKQp7CglpbnQgcywgcHJvcDsKCXNpZ190IGFjdGlvbjsKCglp ZiAoc2lnID4gX1NJR19NQVhTSUcgfHwgc2lnIDw9IDApIHsKCQlwcmludGYo InBzaWduYWw6IHNpZ25hbCAlZFxuIiwgc2lnKTsKCQlwYW5pYygicHNpZ25h bCBzaWduYWwgbnVtYmVyIik7Cgl9CgoJcyA9IHNwbGhpZ2goKTsKCUtOT1RF KCZwLT5wX2tsaXN0LCBOT1RFX1NJR05BTCB8IHNpZyk7CglzcGx4KHMpOwoK CXByb3AgPSBzaWdwcm9wKHNpZyk7CgoJLyoKCSAqIElmIHByb2MgaXMgdHJh Y2VkLCBhbHdheXMgZ2l2ZSBwYXJlbnQgYSBjaGFuY2U7CgkgKiBpZiBzaWdu YWwgZXZlbnQgaXMgdHJhY2tlZCBieSBwcm9jZnMsIGdpdmUgKnRoYXQqCgkg KiBhIGNoYW5jZSwgYXMgd2VsbC4KCSAqLwoJaWYgKChwLT5wX2ZsYWcgJiBQ X1RSQUNFRCkgfHwgKHAtPnBfc3RvcHMgJiBTX1NJRykpIHsKCQlhY3Rpb24g PSBTSUdfREZMOwoJfSBlbHNlIHsKCQkvKgoJCSAqIElmIHRoZSBzaWduYWwg aXMgYmVpbmcgaWdub3JlZCwKCQkgKiB0aGVuIHdlIGZvcmdldCBhYm91dCBp dCBpbW1lZGlhdGVseS4KCQkgKiAoTm90ZTogd2UgZG9uJ3Qgc2V0IFNJR0NP TlQgaW4gcF9zaWdpZ25vcmUsCgkJICogYW5kIGlmIGl0IGlzIHNldCB0byBT SUdfSUdOLAoJCSAqIGFjdGlvbiB3aWxsIGJlIFNJR19ERkwgaGVyZS4pCgkJ ICovCgkJaWYgKFNJR0lTTUVNQkVSKHAtPnBfc2lnaWdub3JlLCBzaWcpIHx8 IChwLT5wX2ZsYWcgJiBQX1dFWElUKSkKCQkJcmV0dXJuOwoJCWlmIChTSUdJ U01FTUJFUihwLT5wX3NpZ21hc2ssIHNpZykpCgkJCWFjdGlvbiA9IFNJR19I T0xEOwoJCWVsc2UgaWYgKFNJR0lTTUVNQkVSKHAtPnBfc2lnY2F0Y2gsIHNp ZykpCgkJCWFjdGlvbiA9IFNJR19DQVRDSDsKCQllbHNlCgkJCWFjdGlvbiA9 IFNJR19ERkw7Cgl9CgoJaWYgKHAtPnBfbmljZSA+IE5aRVJPICYmIGFjdGlv biA9PSBTSUdfREZMICYmIChwcm9wICYgU0FfS0lMTCkgJiYKCSAgICAocC0+ cF9mbGFnICYgUF9UUkFDRUQpID09IDApIHsKCQlwLT5wX25pY2UgPSBOWkVS TzsKCX0KCglpZiAocHJvcCAmIFNBX0NPTlQpCgkJU0lHX1NUT1BTSUdNQVNL KHAtPnBfc2lnbGlzdCk7CgkKCglpZiAocHJvcCAmIFNBX1NUT1ApIHsKCQkv KgoJCSAqIElmIHNlbmRpbmcgYSB0dHkgc3RvcCBzaWduYWwgdG8gYSBtZW1i ZXIgb2YgYW4gb3JwaGFuZWQKCQkgKiBwcm9jZXNzIGdyb3VwLCBkaXNjYXJk IHRoZSBzaWduYWwgaGVyZSBpZiB0aGUgYWN0aW9uCgkJICogaXMgZGVmYXVs dDsgZG9uJ3Qgc3RvcCB0aGUgcHJvY2VzcyBiZWxvdyBpZiBzbGVlcGluZywK CQkgKiBhbmQgZG9uJ3QgY2xlYXIgYW55IHBlbmRpbmcgU0lHQ09OVC4KCQkg Ki8KCQlpZiAocHJvcCAmIFNBX1RUWVNUT1AgJiYgcC0+cF9wZ3JwLT5wZ19q b2JjID09IDAgJiYKCQkgICAgYWN0aW9uID09IFNJR19ERkwpIHsKCQkgICAg ICAgIHJldHVybjsKCQl9CgkJU0lHX0NPTlRTSUdNQVNLKHAtPnBfc2lnbGlz dCk7Cgl9CglTSUdBRERTRVQocC0+cF9zaWdsaXN0LCBzaWcpOwoKCS8qCgkg KiBEZWZlciBmdXJ0aGVyIHByb2Nlc3NpbmcgZm9yIHNpZ25hbHMgd2hpY2gg YXJlIGhlbGQsCgkgKiBleGNlcHQgdGhhdCBzdG9wcGVkIHByb2Nlc3NlcyBt dXN0IGJlIGNvbnRpbnVlZCBieSBTSUdDT05ULgoJICovCglpZiAoYWN0aW9u ID09IFNJR19IT0xEICYmICghKHByb3AgJiBTQV9DT05UKSB8fCBwLT5wX3N0 YXQgIT0gU1NUT1ApKQoJCXJldHVybjsKCXMgPSBzcGxoaWdoKCk7Cglzd2l0 Y2ggKHAtPnBfc3RhdCkgewoJY2FzZSBTU0xFRVA6CgkJLyoKCQkgKiBJZiBw cm9jZXNzIGlzIHNsZWVwaW5nIHVuaW50ZXJydXB0aWJseQoJCSAqIHdlIGNh bid0IGludGVycnVwdCB0aGUgc2xlZXAuLi4gdGhlIHNpZ25hbCB3aWxsCgkJ ICogYmUgbm90aWNlZCB3aGVuIHRoZSBwcm9jZXNzIHJldHVybnMgdGhyb3Vn aAoJCSAqIHRyYXAoKSBvciBzeXNjYWxsKCkuCgkJICovCgkJaWYgKChwLT5w X2ZsYWcgJiBQX1NJTlRSKSA9PSAwKQoJCQlnb3RvIG91dDsKCQkvKgoJCSAq IFByb2Nlc3MgaXMgc2xlZXBpbmcgYW5kIHRyYWNlZC4uLiBtYWtlIGl0IHJ1 bm5hYmxlCgkJICogc28gaXQgY2FuIGRpc2NvdmVyIHRoZSBzaWduYWwgaW4g aXNzaWduYWwoKSBhbmQgc3RvcAoJCSAqIGZvciB0aGUgcGFyZW50LgoJCSAq LwoJCWlmIChwLT5wX2ZsYWcgJiBQX1RSQUNFRCkKCQkJZ290byBydW47CgkJ LyoKCQkgKiBJZiBTSUdDT05UIGlzIGRlZmF1bHQgKG9yIGlnbm9yZWQpIGFu ZCBwcm9jZXNzIGlzCgkJICogYXNsZWVwLCB3ZSBhcmUgZmluaXNoZWQ7IHRo ZSBwcm9jZXNzIHNob3VsZCBub3QKCQkgKiBiZSBhd2FrZW5lZC4KCQkgKi8K CQlpZiAoKHByb3AgJiBTQV9DT05UKSAmJiBhY3Rpb24gPT0gU0lHX0RGTCkg ewoJCQlTSUdERUxTRVQocC0+cF9zaWdsaXN0LCBzaWcpOwoJCQlnb3RvIG91 dDsKCQl9CgkJLyoKCQkgKiBXaGVuIGEgc2xlZXBpbmcgcHJvY2VzcyByZWNl aXZlcyBhIHN0b3AKCQkgKiBzaWduYWwsIHByb2Nlc3MgaW1tZWRpYXRlbHkg aWYgcG9zc2libGUuCgkJICogQWxsIG90aGVyIChjYXVnaHQgb3IgZGVmYXVs dCkgc2lnbmFscwoJCSAqIGNhdXNlIHRoZSBwcm9jZXNzIHRvIHJ1bi4KCQkg Ki8KCQlpZiAocHJvcCAmIFNBX1NUT1ApIHsKCQkJaWYgKGFjdGlvbiAhPSBT SUdfREZMKQoJCQkJZ290byBydW47CgkJCS8qCgkJCSAqIElmIGEgY2hpbGQg aG9sZGluZyBwYXJlbnQgYmxvY2tlZCwKCQkJICogc3RvcHBpbmcgY291bGQg Y2F1c2UgZGVhZGxvY2suCgkJCSAqLwoJCQlpZiAocC0+cF9mbGFnICYgUF9Q UFdBSVQpCgkJCQlnb3RvIG91dDsKCQkJU0lHREVMU0VUKHAtPnBfc2lnbGlz dCwgc2lnKTsKCQkJcC0+cF94c3RhdCA9IHNpZzsKCQkJaWYgKChwLT5wX3Bw dHItPnBfcHJvY3NpZy0+cHNfZmxhZyAmIFBTX05PQ0xEU1RPUCkgPT0gMCkK CQkJCXBzaWduYWwocC0+cF9wcHRyLCBTSUdDSExEKTsKCQkJc3RvcChwKTsK CQkJZ290byBvdXQ7CgkJfSBlbHNlIHsKCQkJZ290byBydW47CgkJfQoJCS8q Tk9UUkVBQ0hFRCovCgljYXNlIFNTVE9QOgoJCS8qCgkJICogSWYgdHJhY2Vk IHByb2Nlc3MgaXMgYWxyZWFkeSBzdG9wcGVkLAoJCSAqIHRoZW4gbm8gZnVy dGhlciBhY3Rpb24gaXMgbmVjZXNzYXJ5LgoJCSAqLwoJCWlmIChwLT5wX2Zs YWcgJiBQX1RSQUNFRCkKCQkJZ290byBvdXQ7CgoJCS8qCgkJICogS2lsbCBz aWduYWwgYWx3YXlzIHNldHMgcHJvY2Vzc2VzIHJ1bm5pbmcuCgkJICovCgkJ aWYgKHNpZyA9PSBTSUdLSUxMKQoJCQlnb3RvIHJ1bjsKCgkJaWYgKHByb3Ag JiBTQV9DT05UKSB7CgkJCS8qCgkJCSAqIElmIFNJR0NPTlQgaXMgZGVmYXVs dCAob3IgaWdub3JlZCksIHdlIGNvbnRpbnVlIHRoZQoJCQkgKiBwcm9jZXNz IGJ1dCBkb24ndCBsZWF2ZSB0aGUgc2lnbmFsIGluIHBfc2lnbGlzdCwgYXMK CQkJICogaXQgaGFzIG5vIGZ1cnRoZXIgYWN0aW9uLiAgSWYgU0lHQ09OVCBp cyBoZWxkLCB3ZQoJCQkgKiBjb250aW51ZSB0aGUgcHJvY2VzcyBhbmQgbGVh dmUgdGhlIHNpZ25hbCBpbgoJCQkgKiBwX3NpZ2xpc3QuICBJZiB0aGUgcHJv Y2VzcyBjYXRjaGVzIFNJR0NPTlQsIGxldCBpdAoJCQkgKiBoYW5kbGUgdGhl IHNpZ25hbCBpdHNlbGYuICBJZiBpdCBpc24ndCB3YWl0aW5nIG9uCgkJCSAq IGFuIGV2ZW50LCB0aGVuIGl0IGdvZXMgYmFjayB0byBydW4gc3RhdGUuCgkJ CSAqIE90aGVyd2lzZSwgcHJvY2VzcyBnb2VzIGJhY2sgdG8gc2xlZXAgc3Rh dGUuCgkJCSAqLwoJCQlpZiAoYWN0aW9uID09IFNJR19ERkwpCgkJCQlTSUdE RUxTRVQocC0+cF9zaWdsaXN0LCBzaWcpOwoJCQlpZiAoYWN0aW9uID09IFNJ R19DQVRDSCkKCQkJCWdvdG8gcnVuOwoJCQlpZiAocC0+cF93Y2hhbiA9PSAw KQoJCQkJZ290byBydW47CgkJCWNscnJ1bm5hYmxlKHAsIFNTTEVFUCk7CgkJ CWdvdG8gb3V0OwoJCX0KCgkJaWYgKHByb3AgJiBTQV9TVE9QKSB7CgkJCS8q CgkJCSAqIEFscmVhZHkgc3RvcHBlZCwgZG9uJ3QgbmVlZCB0byBzdG9wIGFn YWluLgoJCQkgKiAoSWYgd2UgZGlkIHRoZSBzaGVsbCBjb3VsZCBnZXQgY29u ZnVzZWQuKQoJCQkgKi8KCQkJU0lHREVMU0VUKHAtPnBfc2lnbGlzdCwgc2ln KTsKCQkJZ290byBvdXQ7CgkJfQoKCQkvKgoJCSAqIElmIHByb2Nlc3MgaXMg c2xlZXBpbmcgaW50ZXJydXB0aWJseSwgdGhlbiBzaW11bGF0ZSBhCgkJICog d2FrZXVwIHNvIHRoYXQgd2hlbiBpdCBpcyBjb250aW51ZWQsIGl0IHdpbGwg YmUgbWFkZQoJCSAqIHJ1bm5hYmxlIGFuZCBjYW4gbG9vayBhdCB0aGUgc2ln bmFsLiAgQnV0IGRvbid0IG1ha2UKCQkgKiB0aGUgcHJvY2VzcyBydW5uYWJs ZSwgbGVhdmUgaXQgc3RvcHBlZC4KCQkgKi8KCQlpZiAocC0+cF93Y2hhbiAm JiAocC0+cF9mbGFnICYgUF9TSU5UUikpCgkJCXVuc2xlZXAocC0+cF90aHJl YWQpOwoJCWdvdG8gb3V0OwoJZGVmYXVsdDoKCQkvKgoJCSAqIFNSVU4sIFNJ REwsIFNaT01CIGRvIG5vdGhpbmcgd2l0aCB0aGUgc2lnbmFsLAoJCSAqIG90 aGVyIHRoYW4ga2lja2luZyBvdXJzZWx2ZXMgaWYgd2UgYXJlIHJ1bm5pbmcu CgkJICogSXQgd2lsbCBlaXRoZXIgbmV2ZXIgYmUgbm90aWNlZCwgb3Igbm90 aWNlZCB2ZXJ5IHNvb24uCgkJICoKCQkgKiBOb3RlIHRoYXQgcF90aHJlYWQg bWF5IGJlIE5VTEwgb3IgbWF5IG5vdCBiZSBjb21wbGV0ZWx5CgkJICogaW5p dGlhbGl6ZWQgaWYgdGhlIHByb2Nlc3MgaXMgaW4gdGhlIFNJREwgb3IgU1pP TUIgc3RhdGUuCgkJICoKCQkgKiBGb3IgU01QIHdlIG1heSBoYXZlIHRvIGZv cndhcmQgdGhlIHJlcXVlc3QgdG8gYW5vdGhlciBjcHUuCgkJICogWVlZIHRo ZSBNUCBsb2NrIHByZXZlbnRzIHRoZSB0YXJnZXQgcHJvY2VzcyBmcm9tIG1v dmluZwoJCSAqIHRvIGFub3RoZXIgY3B1LCBzZWUga2Vybi9rZXJuX3N3aXRj aC5jCgkJICoKCQkgKiBJZiB0aGUgdGFyZ2V0IHRocmVhZCBpcyB3YWl0aW5n IG9uIGl0cyBtZXNzYWdlIHBvcnQsCgkJICogd2FrZXVwIHRoZSB0YXJnZXQg dGhyZWFkIHNvIGl0IGNhbiBjaGVjayAob3IgaWdub3JlKQoJCSAqIHRoZSBu ZXcgc2lnbmFsLiAgWVlZIG5lZWRzIGNsZWFudXAuCgkJICovCiNpZmRlZiBT TVAKCQlpZiAocCA9PSBsd2t0X3ByZWVtcHRlZF9wcm9jKCkpIHsKCQkJc2ln bm90aWZ5KCk7CgkJfSBlbHNlIGlmIChwLT5wX3N0YXQgPT0gU1JVTikgewoJ CQlzdHJ1Y3QgdGhyZWFkICp0ZCA9IHAtPnBfdGhyZWFkOwoKCQkJS0FTU0VS VCh0ZCAhPSBOVUxMLCAKCQkJICAgICgicGlkICVkIE5VTEwgcF90aHJlYWQg c3RhdCAlZCBmbGFncyAlMDh4IiwKCQkJICAgIHAtPnBfcGlkLCBwLT5wX3N0 YXQsIHAtPnBfZmxhZykpOwoKCQkJaWYgKHRkLT50ZF9nZCAhPSBteWNwdSkK CQkJCWx3a3Rfc2VuZF9pcGlxKHRkLT50ZF9nZCwgc2lnbm90aWZ5X3JlbW90 ZSwgcCk7CgkJCWVsc2UgaWYgKHRkLT50ZF9tc2dwb3J0Lm1wX2ZsYWdzICYg TVNHUE9SVEZfV0FJVElORykKCQkJCWx3a3Rfc2NoZWR1bGUodGQpOwoJCX0K I2Vsc2UKCQlpZiAocCA9PSBsd2t0X3ByZWVtcHRlZF9wcm9jKCkpIHsKCQkJ c2lnbm90aWZ5KCk7CgkJfSBlbHNlIGlmIChwLT5wX3N0YXQgPT0gU1JVTikg ewoJCQlzdHJ1Y3QgdGhyZWFkICp0ZCA9IHAtPnBfdGhyZWFkOwoKCQkJS0FT U0VSVCh0ZCAhPSBOVUxMLCAKCQkJICAgICgicGlkICVkIE5VTEwgcF90aHJl YWQgc3RhdCAlZCBmbGFncyAlMDh4IiwKCQkJICAgIHAtPnBfcGlkLCBwLT5w X3N0YXQsIHAtPnBfZmxhZykpOwoKCQkJaWYgKHRkLT50ZF9tc2dwb3J0Lm1w X2ZsYWdzICYgTVNHUE9SVEZfV0FJVElORykKCQkJCWx3a3Rfc2NoZWR1bGUo dGQpOwoJCX0KI2VuZGlmCgkJZ290byBvdXQ7Cgl9CgkvKk5PVFJFQUNIRUQq LwpydW46CglzZXRydW5uYWJsZShwKTsKb3V0OgoJc3BseChzKTsKfQoKI2lm ZGVmIFNNUAoKLyoKICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdmlhIGFu IElQSS4gIFdlIHdpbGwgYmUgaW4gYSBjcml0aWNhbCBzZWN0aW9uIGJ1dAog KiB0aGUgTVAgbG9jayB3aWxsIE5PVCBiZSBoZWxkLiAgQWxzbyBub3RlIHRo YXQgYnkgdGhlIHRpbWUgdGhlIGlwaSBtZXNzYWdlCiAqIGdldHMgdG8gdXMg dGhlIHByb2Nlc3MgJ3AnIChhcmcpIG1heSBubyBsb25nZXIgYmUgc2NoZWR1 bGVkIG9yIGV2ZW4gdmFsaWQuCiAqLwpzdGF0aWMgdm9pZApzaWdub3RpZnlf cmVtb3RlKHZvaWQgKmFyZykKewoJc3RydWN0IHByb2MgKnAgPSBhcmc7CgoJ aWYgKHAgPT0gbHdrdF9wcmVlbXB0ZWRfcHJvYygpKSB7CgkJc2lnbm90aWZ5 KCk7Cgl9IGVsc2UgewoJCXN0cnVjdCB0aHJlYWQgKnRkID0gcC0+cF90aHJl YWQ7CgkJaWYgKHRkLT50ZF9tc2dwb3J0Lm1wX2ZsYWdzICYgTVNHUE9SVEZf V0FJVElORykKCQkJbHdrdF9zY2hlZHVsZSh0ZCk7Cgl9Cn0KCiNlbmRpZgoK c3RhdGljIGludAprZXJuX3NpZ3RpbWVkd2FpdChzaWdzZXRfdCB3YWl0c2V0 LCBzaWdpbmZvX3QgKmluZm8sIHN0cnVjdCB0aW1lc3BlYyAqdGltZW91dCkK ewoJc2lnc2V0X3Qgc2F2ZWRtYXNrLCBzZXQ7CglzdHJ1Y3QgcHJvYyAqcCA9 IGN1cnByb2M7CglpbnQgZXJyb3IsIHNpZywgaHosIHRpbWV2YWxpZCA9IDA7 CglzdHJ1Y3QgdGltZXNwZWMgcnRzLCBldHMsIHRzOwoJc3RydWN0IHRpbWV2 YWwgdHY7CgoJZXJyb3IgPSAwOwoJc2lnID0gMDsKCVNJR19DQU5UTUFTSyh3 YWl0c2V0KTsKCXNhdmVkbWFzayA9IHAtPnBfc2lnbWFzazsKCglpZiAodGlt ZW91dCkgewoJCWlmICh0aW1lb3V0LT50dl9zZWMgPj0gMCAmJiB0aW1lb3V0 LT50dl9uc2VjID49IDAgJiYKCQkgICAgdGltZW91dC0+dHZfbnNlYyA8IDEw MDAwMDAwMDApIHsKCQkJdGltZXZhbGlkID0gMTsKCQkJZ2V0bmFub3VwdGlt ZSgmcnRzKTsKCQkgCWV0cyA9IHJ0czsKCQkJdGltZXNwZWNhZGQoJmV0cywg dGltZW91dCk7CgkJfQoJfQoKCWZvciAoOzspIHsKCQlzZXQgPSBwLT5wX3Np Z2xpc3Q7CgkJU0lHU0VUQU5EKHNldCwgd2FpdHNldCk7CgkJaWYgKChzaWcg PSBzaWdfZmZzKCZzZXQpKSAhPSAwKSB7CgkJCVNJR0ZJTExTRVQocC0+cF9z aWdtYXNrKTsKCQkJU0lHREVMU0VUKHAtPnBfc2lnbWFzaywgc2lnKTsKCQkJ U0lHX0NBTlRNQVNLKHAtPnBfc2lnbWFzayk7CgkJCXNpZyA9IGlzc2lnbmFs KHApOwoJCQkvKgoJCQkgKiBJdCBtYXkgYmUgYSBTVE9QIHNpZ25hbCwgaW4g dGhlIGNhc2UsIGlzc2lnbmFsCgkJCSAqIHJldHVybnMgMCwgYmVjYXVzZSB3 ZSBtYXkgc3RvcCB0aGVyZSwgYW5kIG5ldwoJCQkgKiBzaWduYWwgY2FuIGNv bWUgaW4sIHdlIHNob3VsZCByZXN0YXJ0IGlmIHdlIGdvdAoJCQkgKiBub3Ro aW5nLgoJCQkgKi8KCQkJaWYgKHNpZyA9PSAwKQoJCQkJY29udGludWU7CgkJ CWVsc2UKCQkJCWJyZWFrOwoJCX0KCgkJLyoKCQkgKiBQcmV2aW91cyBjaGVj a2luZyBnb3Qgbm90aGluZywgYW5kIHdlIHJldHJpZWQgYnV0IHN0aWxsCgkJ ICogZ290IG5vdGhpbmcsIHdlIHNob3VsZCByZXR1cm4gdGhlIGVycm9yIHN0 YXR1cy4KCQkgKi8KCQlpZiAoZXJyb3IpCgkJCWJyZWFrOwoKCQkvKgoJCSAq IFBPU0lYIHNheXMgdGhpcyBtdXN0IGJlIGNoZWNrZWQgYWZ0ZXIgbG9va2lu ZyBmb3IgcGVuZGluZwoJCSAqIHNpZ25hbHMuCgkJICovCgkJaWYgKHRpbWVv dXQpIHsKCQkJaWYgKCF0aW1ldmFsaWQpIHsKCQkJCWVycm9yID0gRUlOVkFM OwoJCQkJYnJlYWs7CgkJCX0KCQkJZ2V0bmFub3VwdGltZSgmcnRzKTsKCQkJ aWYgKHRpbWVzcGVjY21wKCZydHMsICZldHMsID49KSkgewoJCQkJZXJyb3Ig PSBFQUdBSU47CgkJCQlicmVhazsKCQkJfQoJCQl0cyA9IGV0czsKCQkJdGlt ZXNwZWNzdWIoJnRzLCAmcnRzKTsKCQkJVElNRVNQRUNfVE9fVElNRVZBTCgm dHYsICZ0cyk7CgkJCWh6ID0gdHZ0b2h6X2hpZ2goJnR2KTsKCQl9IGVsc2UK CQkJaHogPSAwOwoKCQlwLT5wX3NpZ21hc2sgPSBzYXZlZG1hc2s7CgkJU0lH U0VUTkFORChwLT5wX3NpZ21hc2ssIHdhaXRzZXQpOwoJCWVycm9yID0gdHNs ZWVwKCZwLT5wX3NpZ2FjdHMsIFBDQVRDSCwgInNpZ3d0IiwgaHopOwoJCWlm ICh0aW1lb3V0KSB7CgkJCWlmIChlcnJvciA9PSBFUkVTVEFSVCkgewoJCQkJ LyogY2FuIG5vdCByZXN0YXJ0IGEgdGltZW91dCB3YWl0LiAqLwoJCQkJZXJy b3IgPSBFSU5UUjsKCQkJfSBlbHNlIGlmIChlcnJvciA9PSBFQUdBSU4pIHsK CQkJCS8qIHdpbGwgY2FsY3VsYXRlIHRpbWVvdXQgYnkgb3Vyc2VsZi4gKi8K CQkJCWVycm9yID0gMDsKCQkJfQoJCX0KCQkvKiBSZXRyeSAuLi4gKi8KCX0K CglwLT5wX3NpZ21hc2sgPSBzYXZlZG1hc2s7CglpZiAoc2lnKSB7CgkJZXJy b3IgPSAwOwoJCWJ6ZXJvKGluZm8sIHNpemVvZigqaW5mbykpOwoJCWluZm8t PnNpX3NpZ25vID0gc2lnOwoJCVNJR0RFTFNFVChwLT5wX3NpZ2xpc3QsIHNp Zyk7CS8qIHRha2UgdGhlIHNpZ25hbCEgKi8KCX0KCXJldHVybiAoZXJyb3Ip Owp9CgppbnQKc2lndGltZWR3YWl0KHN0cnVjdCBzaWd0aW1lZHdhaXRfYXJn cyAqdWFwKQp7CglzdHJ1Y3QgdGltZXNwZWMgdHM7CglzdHJ1Y3QgdGltZXNw ZWMgKnRpbWVvdXQ7CglzaWdzZXRfdCBzZXQ7CglzaWdpbmZvX3QgaW5mbzsK CWludCBlcnJvcjsKCglpZiAodWFwLT50aW1lb3V0KSB7CgkJZXJyb3IgPSBj b3B5aW4odWFwLT50aW1lb3V0LCAmdHMsIHNpemVvZih0cykpOwoJCWlmIChl cnJvcikKCQkJcmV0dXJuIChlcnJvcik7CgkJdGltZW91dCA9ICZ0czsKCX0g ZWxzZSB7CgkJdGltZW91dCA9IE5VTEw7Cgl9CgllcnJvciA9IGNvcHlpbih1 YXAtPnNldCwgJnNldCwgc2l6ZW9mKHNldCkpOwoJaWYgKGVycm9yKQoJCXJl dHVybiAoZXJyb3IpOwoJZXJyb3IgPSBrZXJuX3NpZ3RpbWVkd2FpdChzZXQs ICZpbmZvLCB0aW1lb3V0KTsKCWlmIChlcnJvcikKCQlyZXR1cm4gKGVycm9y KTsKIAlpZiAodWFwLT5pbmZvKQoJCWVycm9yID0gY29weW91dCgmaW5mbywg dWFwLT5pbmZvLCBzaXplb2YoaW5mbykpOwoJLyogUmVwb3N0IGlmIHdlIGdv dCBhbiBlcnJvci4gKi8KCWlmIChlcnJvcikKCQlwc2lnbmFsKGN1cnByb2Ms IGluZm8uc2lfc2lnbm8pOwoJZWxzZQoJCXVhcC0+c3lzbXNnX3Jlc3VsdCA9 IGluZm8uc2lfc2lnbm87CglyZXR1cm4gKGVycm9yKTsKfQoKaW50CnNpZ3dh aXRpbmZvKHN0cnVjdCBzaWd3YWl0aW5mb19hcmdzICp1YXApCnsKCXNpZ2lu Zm9fdCBpbmZvOwoJc2lnc2V0X3Qgc2V0OwoJaW50IGVycm9yOwoKCWVycm9y ID0gY29weWluKHVhcC0+c2V0LCAmc2V0LCBzaXplb2Yoc2V0KSk7CglpZiAo ZXJyb3IpCgkJcmV0dXJuIChlcnJvcik7CgllcnJvciA9IGtlcm5fc2lndGlt ZWR3YWl0KHNldCwgJmluZm8sIE5VTEwpOwoJaWYgKGVycm9yKQoJCXJldHVy biAoZXJyb3IpOwoJaWYgKHVhcC0+aW5mbykKCQllcnJvciA9IGNvcHlvdXQo JmluZm8sIHVhcC0+aW5mbywgc2l6ZW9mKGluZm8pKTsKCS8qIFJlcG9zdCBp ZiB3ZSBnb3QgYW4gZXJyb3IuICovCglpZiAoZXJyb3IpCgkJcHNpZ25hbChj dXJwcm9jLCBpbmZvLnNpX3NpZ25vKTsKCWVsc2UKCQl1YXAtPnN5c21zZ19y ZXN1bHQgPSBpbmZvLnNpX3NpZ25vOwoJcmV0dXJuIChlcnJvcik7Cn0KCi8q CiAqIElmIHRoZSBjdXJyZW50IHByb2Nlc3MgaGFzIHJlY2VpdmVkIGEgc2ln bmFsIHRoYXQgd291bGQgaW50ZXJydXB0IGEKICogc3lzdGVtIGNhbGwsIHJl dHVybiBFSU5UUiBvciBFUkVTVEFSVCBhcyBhcHByb3ByaWF0ZS4KICovCmlu dAppc2NhdWdodChzdHJ1Y3QgcHJvYyAqcCkKewoJaW50IHNpZzsKCglpZiAo cCkgewoJCWlmICgoc2lnID0gQ1VSU0lHKHApKSAhPSAwKSB7CgkJCWlmIChT SUdJU01FTUJFUihwLT5wX3NpZ2FjdHMtPnBzX3NpZ2ludHIsIHNpZykpCgkJ CQlyZXR1cm4gKEVJTlRSKTsgICAgICAgICAgICAgICAgICAgICAgICAKCQkJ cmV0dXJuIChFUkVTVEFSVCk7ICAgICAKCQl9ICAgICAgICAgICAgICAgICAg ICAgICAgIAoJfQoJcmV0dXJuKEVXT1VMREJMT0NLKTsKfQoKLyoKICogSWYg dGhlIGN1cnJlbnQgcHJvY2VzcyBoYXMgcmVjZWl2ZWQgYSBzaWduYWwgKHNo b3VsZCBiZSBjYXVnaHQgb3IgY2F1c2UKICogdGVybWluYXRpb24sIHNob3Vs ZCBpbnRlcnJ1cHQgY3VycmVudCBzeXNjYWxsKSwgcmV0dXJuIHRoZSBzaWdu YWwgbnVtYmVyLgogKiBTdG9wIHNpZ25hbHMgd2l0aCBkZWZhdWx0IGFjdGlv biBhcmUgcHJvY2Vzc2VkIGltbWVkaWF0ZWx5LCB0aGVuIGNsZWFyZWQ7CiAq IHRoZXkgYXJlbid0IHJldHVybmVkLiAgVGhpcyBpcyBjaGVja2VkIGFmdGVy IGVhY2ggZW50cnkgdG8gdGhlIHN5c3RlbSBmb3IKICogYSBzeXNjYWxsIG9y IHRyYXAgKHRob3VnaCB0aGlzIGNhbiB1c3VhbGx5IGJlIGRvbmUgd2l0aG91 dCBjYWxsaW5nIGlzc2lnbmFsCiAqIGJ5IGNoZWNraW5nIHRoZSBwZW5kaW5n IHNpZ25hbCBtYXNrcyBpbiB0aGUgQ1VSU0lHIG1hY3JvLikgVGhlIG5vcm1h bCBjYWxsCiAqIHNlcXVlbmNlIGlzCiAqCiAqCXdoaWxlIChzaWcgPSBDVVJT SUcoY3VycHJvYykpCiAqCQlwb3N0c2lnKHNpZyk7CiAqLwppbnQKaXNzaWdu YWwoc3RydWN0IHByb2MgKnApCnsKCXNpZ3NldF90IG1hc2s7CglpbnQgc2ln LCBwcm9wOwoKCWZvciAoOzspIHsKCQlpbnQgdHJhY2VkID0gKHAtPnBfZmxh ZyAmIFBfVFJBQ0VEKSB8fCAocC0+cF9zdG9wcyAmIFNfU0lHKTsKCgkJbWFz ayA9IHAtPnBfc2lnbGlzdDsKCQlTSUdTRVROQU5EKG1hc2ssIHAtPnBfc2ln bWFzayk7CgkJaWYgKHAtPnBfZmxhZyAmIFBfUFBXQUlUKQoJCQlTSUdfU1RP UFNJR01BU0sobWFzayk7CgkJaWYgKCFTSUdOT1RFTVBUWShtYXNrKSkJIAkv KiBubyBzaWduYWwgdG8gc2VuZCAqLwoJCQlyZXR1cm4gKDApOwoJCXNpZyA9 IHNpZ19mZnMoJm1hc2spOwoKCQlTVE9QRVZFTlQocCwgU19TSUcsIHNpZyk7 CgoJCS8qCgkJICogV2Ugc2hvdWxkIHNlZSBwZW5kaW5nIGJ1dCBpZ25vcmVk IHNpZ25hbHMKCQkgKiBvbmx5IGlmIFBfVFJBQ0VEIHdhcyBvbiB3aGVuIHRo ZXkgd2VyZSBwb3N0ZWQuCgkJICovCgkJaWYgKFNJR0lTTUVNQkVSKHAtPnBf c2lnaWdub3JlLCBzaWcpICYmICh0cmFjZWQgPT0gMCkpIHsKCQkJU0lHREVM U0VUKHAtPnBfc2lnbGlzdCwgc2lnKTsKCQkJY29udGludWU7CgkJfQoJCWlm IChwLT5wX2ZsYWcgJiBQX1RSQUNFRCAmJiAocC0+cF9mbGFnICYgUF9QUFdB SVQpID09IDApIHsKCQkJLyoKCQkJICogSWYgdHJhY2VkLCBhbHdheXMgc3Rv cCwgYW5kIHN0YXkKCQkJICogc3RvcHBlZCB1bnRpbCByZWxlYXNlZCBieSB0 aGUgcGFyZW50LgoJCQkgKi8KCQkJcC0+cF94c3RhdCA9IHNpZzsKCQkJcHNp Z25hbChwLT5wX3BwdHIsIFNJR0NITEQpOwoJCQlkbyB7CgkJCQlzdG9wKHAp OwoJCQkJbWlfc3dpdGNoKHApOwoJCQl9IHdoaWxlICghdHJhY2VfcmVxKHAp ICYmIHAtPnBfZmxhZyAmIFBfVFJBQ0VEKTsKCgkJCS8qCgkJCSAqIElmIHBh cmVudCB3YW50cyB1cyB0byB0YWtlIHRoZSBzaWduYWwsCgkJCSAqIHRoZW4g aXQgd2lsbCBsZWF2ZSBpdCBpbiBwLT5wX3hzdGF0OwoJCQkgKiBvdGhlcndp c2Ugd2UganVzdCBsb29rIGZvciBzaWduYWxzIGFnYWluLgoJCQkgKi8KCQkJ U0lHREVMU0VUKHAtPnBfc2lnbGlzdCwgc2lnKTsJLyogY2xlYXIgb2xkIHNp Z25hbCAqLwoJCQlzaWcgPSBwLT5wX3hzdGF0OwoJCQlpZiAoc2lnID09IDAp CgkJCQljb250aW51ZTsKCgkJCS8qCgkJCSAqIFB1dCB0aGUgbmV3IHNpZ25h bCBpbnRvIHBfc2lnbGlzdC4gIElmIHRoZQoJCQkgKiBzaWduYWwgaXMgYmVp bmcgbWFza2VkLCBsb29rIGZvciBvdGhlciBzaWduYWxzLgoJCQkgKi8KCQkJ U0lHQUREU0VUKHAtPnBfc2lnbGlzdCwgc2lnKTsKCQkJaWYgKFNJR0lTTUVN QkVSKHAtPnBfc2lnbWFzaywgc2lnKSkKCQkJCWNvbnRpbnVlOwoKCQkJLyoK CQkJICogSWYgdGhlIHRyYWNlZCBiaXQgZ290IHR1cm5lZCBvZmYsIGdvIGJh Y2sgdXAKCQkJICogdG8gdGhlIHRvcCB0byByZXNjYW4gc2lnbmFscy4gIFRo aXMgZW5zdXJlcwoJCQkgKiB0aGF0IHBfc2lnKiBhbmQgcHNfc2lnYWN0IGFy ZSBjb25zaXN0ZW50LgoJCQkgKi8KCQkJaWYgKChwLT5wX2ZsYWcgJiBQX1RS QUNFRCkgPT0gMCkKCQkJCWNvbnRpbnVlOwoJCX0KCgkJcHJvcCA9IHNpZ3By b3Aoc2lnKTsKCgkJLyoKCQkgKiBEZWNpZGUgd2hldGhlciB0aGUgc2lnbmFs IHNob3VsZCBiZSByZXR1cm5lZC4KCQkgKiBSZXR1cm4gdGhlIHNpZ25hbCdz IG51bWJlciwgb3IgZmFsbCB0aHJvdWdoCgkJICogdG8gY2xlYXIgaXQgZnJv bSB0aGUgcGVuZGluZyBtYXNrLgoJCSAqLwoJCXN3aXRjaCAoKGludCkoaW50 cHRyX3QpcC0+cF9zaWdhY3RzLT5wc19zaWdhY3RbX1NJR19JRFgoc2lnKV0p IHsKCgkJY2FzZSAoaW50KVNJR19ERkw6CgkJCS8qCgkJCSAqIERvbid0IHRh a2UgZGVmYXVsdCBhY3Rpb25zIG9uIHN5c3RlbSBwcm9jZXNzZXMuCgkJCSAq LwoJCQlpZiAocC0+cF9waWQgPD0gMSkgewojaWZkZWYgRElBR05PU1RJQwoJ CQkJLyoKCQkJCSAqIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBpZ25vcmUg U0lHU0VHVgoJCQkJICogaW4gaW5pdD8gWFhYCgkJCQkgKi8KCQkJCXByaW50 ZigiUHJvY2VzcyAocGlkICVsdSkgZ290IHNpZ25hbCAlZFxuIiwKCQkJCQko dV9sb25nKXAtPnBfcGlkLCBzaWcpOwojZW5kaWYKCQkJCWJyZWFrOwkJLyog PT0gaWdub3JlICovCgkJCX0KCgkJCS8qCgkJCSAqIEhhbmRsZSB0aGUgaW4t a2VybmVsIGNoZWNrcG9pbnQgYWN0aW9uCgkJCSAqLwoJCQlpZiAocHJvcCAm IFNBX0NLUFQpIHsKCQkJCWNoZWNrcG9pbnRfc2lnbmFsX2hhbmRsZXIocCk7 CgkJCQlicmVhazsKCQkJfQoKCQkJLyoKCQkJICogSWYgdGhlcmUgaXMgYSBw ZW5kaW5nIHN0b3Agc2lnbmFsIHRvIHByb2Nlc3MKCQkJICogd2l0aCBkZWZh dWx0IGFjdGlvbiwgc3RvcCBoZXJlLAoJCQkgKiB0aGVuIGNsZWFyIHRoZSBz aWduYWwuICBIb3dldmVyLAoJCQkgKiBpZiBwcm9jZXNzIGlzIG1lbWJlciBv ZiBhbiBvcnBoYW5lZAoJCQkgKiBwcm9jZXNzIGdyb3VwLCBpZ25vcmUgdHR5 IHN0b3Agc2lnbmFscy4KCQkJICovCgkJCWlmIChwcm9wICYgU0FfU1RPUCkg ewoJCQkJaWYgKHAtPnBfZmxhZyAmIFBfVFJBQ0VEIHx8CgkJICAgIAkJICAg IChwLT5wX3BncnAtPnBnX2pvYmMgPT0gMCAmJgoJCQkJICAgIHByb3AgJiBT QV9UVFlTVE9QKSkKCQkJCQlicmVhazsJLyogPT0gaWdub3JlICovCgkJCQlw LT5wX3hzdGF0ID0gc2lnOwoJCQkJc3RvcChwKTsKCQkJCWlmICgocC0+cF9w cHRyLT5wX3Byb2NzaWctPnBzX2ZsYWcgJiBQU19OT0NMRFNUT1ApID09IDAp CgkJCQkJcHNpZ25hbChwLT5wX3BwdHIsIFNJR0NITEQpOwoJCQkJbWlfc3dp dGNoKHApOwoJCQkJYnJlYWs7CgkJCX0gZWxzZSBpZiAocHJvcCAmIFNBX0lH Tk9SRSkgewoJCQkJLyoKCQkJCSAqIEV4Y2VwdCBmb3IgU0lHQ09OVCwgc2hv dWxkbid0IGdldCBoZXJlLgoJCQkJICogRGVmYXVsdCBhY3Rpb24gaXMgdG8g aWdub3JlOyBkcm9wIGl0LgoJCQkJICovCgkJCQlicmVhazsJCS8qID09IGln bm9yZSAqLwoJCQl9IGVsc2UgewoJCQkJcmV0dXJuIChzaWcpOwoJCQl9CgoJ CQkvKk5PVFJFQUNIRUQqLwoKCQljYXNlIChpbnQpU0lHX0lHTjoKCQkJLyoK CQkJICogTWFza2luZyBhYm92ZSBzaG91bGQgcHJldmVudCB1cyBldmVyIHRy eWluZwoJCQkgKiB0byB0YWtlIGFjdGlvbiBvbiBhbiBpZ25vcmVkIHNpZ25h bCBvdGhlcgoJCQkgKiB0aGFuIFNJR0NPTlQsIHVubGVzcyBwcm9jZXNzIGlz IHRyYWNlZC4KCQkJICovCgkJCWlmICgocHJvcCAmIFNBX0NPTlQpID09IDAg JiYKCQkJICAgIChwLT5wX2ZsYWcgJiBQX1RSQUNFRCkgPT0gMCkKCQkJCXBy aW50ZigiaXNzaWduYWxcbiIpOwoJCQlicmVhazsJCS8qID09IGlnbm9yZSAq LwoKCQlkZWZhdWx0OgoJCQkvKgoJCQkgKiBUaGlzIHNpZ25hbCBoYXMgYW4g YWN0aW9uLCBsZXQKCQkJICogcG9zdHNpZygpIHByb2Nlc3MgaXQuCgkJCSAq LwoJCQlyZXR1cm4gKHNpZyk7CgkJfQoJCVNJR0RFTFNFVChwLT5wX3NpZ2xp c3QsIHNpZyk7CQkvKiB0YWtlIHRoZSBzaWduYWwhICovCgl9CgkvKiBOT1RS RUFDSEVEICovCn0KCi8qCiAqIFB1dCB0aGUgYXJndW1lbnQgcHJvY2VzcyBp bnRvIHRoZSBzdG9wcGVkIHN0YXRlIGFuZCBub3RpZnkgdGhlIHBhcmVudAog KiB2aWEgd2FrZXVwLiAgU2lnbmFscyBhcmUgaGFuZGxlZCBlbHNld2hlcmUu ICBUaGUgcHJvY2VzcyBtdXN0IG5vdCBiZQogKiBvbiB0aGUgcnVuIHF1ZXVl LgogKi8Kdm9pZApzdG9wKHN0cnVjdCBwcm9jICpwKQp7CglwLT5wX3N0YXQg PSBTU1RPUDsKCXAtPnBfZmxhZyAmPSB+UF9XQUlURUQ7Cgl3YWtldXAoKGNh ZGRyX3QpcC0+cF9wcHRyKTsKfQoKLyoKICogVGFrZSB0aGUgYWN0aW9uIGZv ciB0aGUgc3BlY2lmaWVkIHNpZ25hbAogKiBmcm9tIHRoZSBjdXJyZW50IHNl dCBvZiBwZW5kaW5nIHNpZ25hbHMuCiAqLwp2b2lkCnBvc3RzaWcoaW50IHNp ZykKewoJc3RydWN0IHByb2MgKnAgPSBjdXJwcm9jOwoJc3RydWN0IHNpZ2Fj dHMgKnBzID0gcC0+cF9zaWdhY3RzOwoJc2lnX3QgYWN0aW9uOwoJc2lnc2V0 X3QgcmV0dXJubWFzazsKCWludCBjb2RlOwoKCUtBU1NFUlQoc2lnICE9IDAs ICgicG9zdHNpZyIpKTsKCglTSUdERUxTRVQocC0+cF9zaWdsaXN0LCBzaWcp OwoJYWN0aW9uID0gcHMtPnBzX3NpZ2FjdFtfU0lHX0lEWChzaWcpXTsKI2lm ZGVmIEtUUkFDRQoJaWYgKEtUUlBPSU5UKHAtPnBfdGhyZWFkLCBLVFJfUFNJ RykpCgkJa3RycHNpZyhwLT5wX3RyYWNlcCwgc2lnLCBhY3Rpb24sIHAtPnBf ZmxhZyAmIFBfT0xETUFTSyA/CgkJICAgICZwLT5wX29sZHNpZ21hc2sgOiAm cC0+cF9zaWdtYXNrLCAwKTsKI2VuZGlmCglTVE9QRVZFTlQocCwgU19TSUcs IHNpZyk7CgoJaWYgKGFjdGlvbiA9PSBTSUdfREZMKSB7CgkJLyoKCQkgKiBE ZWZhdWx0IGFjdGlvbiwgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdG8ga2lsbAoJ CSAqIHRoZSBwcm9jZXNzLiAgKE90aGVyIGNhc2VzIHdlcmUgaWdub3JlZCBh Ym92ZS4pCgkJICovCgkJc2lnZXhpdChwLCBzaWcpOwoJCS8qIE5PVFJFQUNI RUQgKi8KCX0gZWxzZSB7CgkJLyoKCQkgKiBJZiB3ZSBnZXQgaGVyZSwgdGhl IHNpZ25hbCBtdXN0IGJlIGNhdWdodC4KCQkgKi8KCQlLQVNTRVJUKGFjdGlv biAhPSBTSUdfSUdOICYmICFTSUdJU01FTUJFUihwLT5wX3NpZ21hc2ssIHNp ZyksCgkJICAgICgicG9zdHNpZyBhY3Rpb24iKSk7CgkJLyoKCQkgKiBTZXQg dGhlIG5ldyBtYXNrIHZhbHVlIGFuZCBhbHNvIGRlZmVyIGZ1cnRoZXIKCQkg KiBvY2N1cnJlbmNlcyBvZiB0aGlzIHNpZ25hbC4KCQkgKgoJCSAqIFNwZWNp YWwgY2FzZTogdXNlciBoYXMgZG9uZSBhIHNpZ3N1c3BlbmQuICBIZXJlIHRo ZQoJCSAqIGN1cnJlbnQgbWFzayBpcyBub3Qgb2YgaW50ZXJlc3QsIGJ1dCBy YXRoZXIgdGhlCgkJICogbWFzayBmcm9tIGJlZm9yZSB0aGUgc2lnc3VzcGVu ZCBpcyB3aGF0IHdlIHdhbnQKCQkgKiByZXN0b3JlZCBhZnRlciB0aGUgc2ln bmFsIHByb2Nlc3NpbmcgaXMgY29tcGxldGVkLgoJCSAqLwoJCXNwbGhpZ2go KTsKCQlpZiAocC0+cF9mbGFnICYgUF9PTERNQVNLKSB7CgkJCXJldHVybm1h c2sgPSBwLT5wX29sZHNpZ21hc2s7CgkJCXAtPnBfZmxhZyAmPSB+UF9PTERN QVNLOwoJCX0gZWxzZSB7CgkJCXJldHVybm1hc2sgPSBwLT5wX3NpZ21hc2s7 CgkJfQoKCQlTSUdTRVRPUihwLT5wX3NpZ21hc2ssIHBzLT5wc19jYXRjaG1h c2tbX1NJR19JRFgoc2lnKV0pOwoJCWlmICghU0lHSVNNRU1CRVIocHMtPnBz X3NpZ25vZGVmZXIsIHNpZykpCgkJCVNJR0FERFNFVChwLT5wX3NpZ21hc2ss IHNpZyk7CgoJCWlmIChTSUdJU01FTUJFUihwcy0+cHNfc2lncmVzZXQsIHNp ZykpIHsKCQkJLyoKCQkJICogU2VlIGtlcm5fc2lnYWN0aW9uKCkgZm9yIG9y aWdpbiBvZiB0aGlzIGNvZGUuCgkJCSAqLwoJCQlTSUdERUxTRVQocC0+cF9z aWdjYXRjaCwgc2lnKTsKCQkJaWYgKHNpZyAhPSBTSUdDT05UICYmCgkJCSAg ICBzaWdwcm9wKHNpZykgJiBTQV9JR05PUkUpCgkJCQlTSUdBRERTRVQocC0+ cF9zaWdpZ25vcmUsIHNpZyk7CgkJCXBzLT5wc19zaWdhY3RbX1NJR19JRFgo c2lnKV0gPSBTSUdfREZMOwoJCX0KCQlzcGwwKCk7CgkJcC0+cF9zdGF0cy0+ cF9ydS5ydV9uc2lnbmFscysrOwoJCWlmIChwLT5wX3NpZyAhPSBzaWcpIHsK CQkJY29kZSA9IDA7CgkJfSBlbHNlIHsKCQkJY29kZSA9IHAtPnBfY29kZTsK CQkJcC0+cF9jb2RlID0gMDsKCQkJcC0+cF9zaWcgPSAwOwoJCX0KCQlpZiAo cC0+Y2hrcHQpCgkJCXAtPmNoa3B0X3NpZyA9IHNpZzsKCQkoKnAtPnBfc3lz ZW50LT5zdl9zZW5kc2lnKShhY3Rpb24sIHNpZywgJnJldHVybm1hc2ssIGNv ZGUpOwoJfQp9CgovKgogKiBLaWxsIHRoZSBjdXJyZW50IHByb2Nlc3MgZm9y IHN0YXRlZCByZWFzb24uCiAqLwp2b2lkCmtpbGxwcm9jKHN0cnVjdCBwcm9j ICpwLCBjaGFyICp3aHkpCnsKCWxvZyhMT0dfRVJSLCAicGlkICVkICglcyks IHVpZCAlZCwgd2FzIGtpbGxlZDogJXNcbiIsIHAtPnBfcGlkLCBwLT5wX2Nv bW0sCgkJcC0+cF91Y3JlZCA/IHAtPnBfdWNyZWQtPmNyX3VpZCA6IC0xLCB3 aHkpOwoJcHNpZ25hbChwLCBTSUdLSUxMKTsKfQoKLyoKICogRm9yY2UgdGhl IGN1cnJlbnQgcHJvY2VzcyB0byBleGl0IHdpdGggdGhlIHNwZWNpZmllZCBz aWduYWwsIGR1bXBpbmcgY29yZQogKiBpZiBhcHByb3ByaWF0ZS4gIFdlIGJ5 cGFzcyB0aGUgbm9ybWFsIHRlc3RzIGZvciBtYXNrZWQgYW5kIGNhdWdodCBz aWduYWxzLAogKiBhbGxvd2luZyB1bnJlY292ZXJhYmxlIGZhaWx1cmVzIHRv IHRlcm1pbmF0ZSB0aGUgcHJvY2VzcyB3aXRob3V0IGNoYW5naW5nCiAqIHNp Z25hbCBzdGF0ZS4gIE1hcmsgdGhlIGFjY291bnRpbmcgcmVjb3JkIHdpdGgg dGhlIHNpZ25hbCB0ZXJtaW5hdGlvbi4KICogSWYgZHVtcGluZyBjb3JlLCBz YXZlIHRoZSBzaWduYWwgbnVtYmVyIGZvciB0aGUgZGVidWdnZXIuICBDYWxs cyBleGl0IGFuZAogKiBkb2VzIG5vdCByZXR1cm4uCiAqLwp2b2lkCnNpZ2V4 aXQoc3RydWN0IHByb2MgKnAsIGludCBzaWcpCnsKCXAtPnBfYWNmbGFnIHw9 IEFYU0lHOwoJaWYgKHNpZ3Byb3Aoc2lnKSAmIFNBX0NPUkUpIHsKCQlwLT5w X3NpZyA9IHNpZzsKCQkvKgoJCSAqIExvZyBzaWduYWxzIHdoaWNoIHdvdWxk IGNhdXNlIGNvcmUgZHVtcHMKCQkgKiAoTG9nIGFzIExPR19JTkZPIHRvIGFw cGVhc2UgdGhvc2Ugd2hvIGRvbid0IHdhbnQKCQkgKiB0aGVzZSBtZXNzYWdl cy4pCgkJICogWFhYIDogVG9kbywgYXMgd2VsbCBhcyBldWlkLCB3cml0ZSBv dXQgcnVpZCB0b28KCQkgKi8KCQlpZiAoY29yZWR1bXAocCkgPT0gMCkKCQkJ c2lnIHw9IFdDT1JFRkxBRzsKCQlpZiAoa2Vybl9sb2dzaWdleGl0KQoJCQls b2coTE9HX0lORk8sCgkJCSAgICAicGlkICVkICglcyksIHVpZCAlZDogZXhp dGVkIG9uIHNpZ25hbCAlZCVzXG4iLAoJCQkgICAgcC0+cF9waWQsIHAtPnBf Y29tbSwKCQkJICAgIHAtPnBfdWNyZWQgPyBwLT5wX3VjcmVkLT5jcl91aWQg OiAtMSwKCQkJICAgIHNpZyAmfiBXQ09SRUZMQUcsCgkJCSAgICBzaWcgJiBX Q09SRUZMQUcgPyAiIChjb3JlIGR1bXBlZCkiIDogIiIpOwoJfQoJZXhpdDEo V19FWElUQ09ERSgwLCBzaWcpKTsKCS8qIE5PVFJFQUNIRUQgKi8KfQoKc3Rh dGljIGNoYXIgY29yZWZpbGVuYW1lW01BWFBBVEhMRU4rMV0gPSB7IiVOLmNv cmUifTsKU1lTQ1RMX1NUUklORyhfa2VybiwgT0lEX0FVVE8sIGNvcmVmaWxl LCBDVExGTEFHX1JXLCBjb3JlZmlsZW5hbWUsCgkgICAgICBzaXplb2YoY29y ZWZpbGVuYW1lKSwgInByb2Nlc3MgY29yZWZpbGUgbmFtZSBmb3JtYXQgc3Ry aW5nIik7CgovKgogKiBleHBhbmRfbmFtZShuYW1lLCB1aWQsIHBpZCkKICog RXhwYW5kIHRoZSBuYW1lIGRlc2NyaWJlZCBpbiBjb3JlZmlsZW5hbWUsIHVz aW5nIG5hbWUsIHVpZCwgYW5kIHBpZC4KICogY29yZWZpbGVuYW1lIGlzIGEg cHJpbnRmLWxpa2Ugc3RyaW5nLCB3aXRoIHRocmVlIGZvcm1hdCBzcGVjaWZp ZXJzOgogKgklTgluYW1lIG9mIHByb2Nlc3MgKCJuYW1lIikKICoJJVAJcHJv Y2VzcyBpZCAocGlkKQogKgklVQl1c2VyIGlkICh1aWQpCiAqIEZvciBleGFt cGxlLCAiJU4uY29yZSIgaXMgdGhlIGRlZmF1bHQ7IHRoZXkgY2FuIGJlIGRp c2FibGVkIGNvbXBsZXRlbHkKICogYnkgdXNpbmcgIi9kZXYvbnVsbCIsIG9y IGFsbCBjb3JlIGZpbGVzIGNhbiBiZSBzdG9yZWQgaW4gIi9jb3Jlcy8lVS8l Ti0lUCIuCiAqIFRoaXMgaXMgY29udHJvbGxlZCBieSB0aGUgc3lzY3RsIHZh cmlhYmxlIGtlcm4uY29yZWZpbGUgKHNlZSBhYm92ZSkuCiAqLwoKc3RhdGlj IGNoYXIgKgpleHBhbmRfbmFtZShjb25zdCBjaGFyICpuYW1lLCB1aWRfdCB1 aWQsIHBpZF90IHBpZCkKewoJY2hhciAqdGVtcDsKCWNoYXIgYnVmWzExXTsJ CS8qIEJ1ZmZlciBmb3IgcGlkL3VpZCAtLSBtYXggNEIgKi8KCWludCBpLCBu OwoJY2hhciAqZm9ybWF0ID0gY29yZWZpbGVuYW1lOwoJc2l6ZV90IG5hbWVs ZW47CgoJdGVtcCA9IG1hbGxvYyhNQVhQQVRITEVOICsgMSwgTV9URU1QLCBN X05PV0FJVCk7CglpZiAodGVtcCA9PSBOVUxMKQoJCXJldHVybiBOVUxMOwoJ bmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKCWZvciAoaSA9IDAsIG4gPSAwOyBu IDwgTUFYUEFUSExFTiAmJiBmb3JtYXRbaV07IGkrKykgewoJCWludCBsOwoJ CXN3aXRjaCAoZm9ybWF0W2ldKSB7CgkJY2FzZSAnJSc6CS8qIEZvcm1hdCBj aGFyYWN0ZXIgKi8KCQkJaSsrOwoJCQlzd2l0Y2ggKGZvcm1hdFtpXSkgewoJ CQljYXNlICclJzoKCQkJCXRlbXBbbisrXSA9ICclJzsKCQkJCWJyZWFrOwoJ CQljYXNlICdOJzoJLyogcHJvY2VzcyBuYW1lICovCgkJCQlpZiAoKG4gKyBu YW1lbGVuKSA+IE1BWFBBVEhMRU4pIHsKCQkJCQlsb2coTE9HX0VSUiwgInBp ZCAlZCAoJXMpLCB1aWQgKCV1KTogIFBhdGggYCVzJXMnIGlzIHRvbyBsb25n XG4iLAoJCQkJCSAgICBwaWQsIG5hbWUsIHVpZCwgdGVtcCwgbmFtZSk7CgkJ CQkJZnJlZSh0ZW1wLCBNX1RFTVApOwoJCQkJCXJldHVybiBOVUxMOwoJCQkJ fQoJCQkJbWVtY3B5KHRlbXArbiwgbmFtZSwgbmFtZWxlbik7CgkJCQluICs9 IG5hbWVsZW47CgkJCQlicmVhazsKCQkJY2FzZSAnUCc6CS8qIHByb2Nlc3Mg aWQgKi8KCQkJCWwgPSBzcHJpbnRmKGJ1ZiwgIiV1IiwgcGlkKTsKCQkJCWlm ICgobiArIGwpID4gTUFYUEFUSExFTikgewoJCQkJCWxvZyhMT0dfRVJSLCAi cGlkICVkICglcyksIHVpZCAoJXUpOiAgUGF0aCBgJXMlcycgaXMgdG9vIGxv bmdcbiIsCgkJCQkJICAgIHBpZCwgbmFtZSwgdWlkLCB0ZW1wLCBuYW1lKTsK CQkJCQlmcmVlKHRlbXAsIE1fVEVNUCk7CgkJCQkJcmV0dXJuIE5VTEw7CgkJ CQl9CgkJCQltZW1jcHkodGVtcCtuLCBidWYsIGwpOwoJCQkJbiArPSBsOwoJ CQkJYnJlYWs7CgkJCWNhc2UgJ1UnOgkvKiB1c2VyIGlkICovCgkJCQlsID0g c3ByaW50ZihidWYsICIldSIsIHVpZCk7CgkJCQlpZiAoKG4gKyBsKSA+IE1B WFBBVEhMRU4pIHsKCQkJCQlsb2coTE9HX0VSUiwgInBpZCAlZCAoJXMpLCB1 aWQgKCV1KTogIFBhdGggYCVzJXMnIGlzIHRvbyBsb25nXG4iLAoJCQkJCSAg ICBwaWQsIG5hbWUsIHVpZCwgdGVtcCwgbmFtZSk7CgkJCQkJZnJlZSh0ZW1w LCBNX1RFTVApOwoJCQkJCXJldHVybiBOVUxMOwoJCQkJfQoJCQkJbWVtY3B5 KHRlbXArbiwgYnVmLCBsKTsKCQkJCW4gKz0gbDsKCQkJCWJyZWFrOwoJCQlk
QUlUIGlzIHNldDsgd2Ugd2lsbCB3YWtldXAgdGhlIHBhcmVudCBiZWxvdy4K CSAqLwoJcC0+cF9mbGFnICY9IH4oUF9UUkFDRUQgfCBQX1BQV0FJVCk7Cglw LT5wX2ZsYWcgfD0gUF9XRVhJVDsKCVNJR0VNUFRZU0VUKHAtPnBfc2lnbGlz dCk7CglpZiAodGltZXZhbGlzc2V0KCZwLT5wX3JlYWx0aW1lci5pdF92YWx1 ZSkpCgkJY2FsbG91dF9zdG9wKCZwLT5wX2l0aGFuZGxlKTsKCgkvKgoJICog UmVzZXQgYW55IHNpZ2lvIHN0cnVjdHVyZXMgcG9pbnRpbmcgdG8gdXMgYXMg YSByZXN1bHQgb2YKCSAqIEZfU0VUT1dOIHdpdGggb3VyIHBpZC4KCSAqLwoJ ZnVuc2V0b3dubHN0KCZwLT5wX3NpZ2lvbHN0KTsKCgkvKgoJICogQ2xvc2Ug b3BlbiBmaWxlcyBhbmQgcmVsZWFzZSBvcGVuLWZpbGUgdGFibGUuCgkgKiBU aGlzIG1heSBibG9jayEKCSAqLwoJZmRmcmVlKHApOwoJcC0+cF9mZCA9IE5V TEw7CgoJaWYocC0+cF9sZWFkZXItPnBfcGVlcnMpIHsKCQlxID0gcC0+cF9s ZWFkZXI7CgkJd2hpbGUocS0+cF9wZWVycyAhPSBwKQoJCQlxID0gcS0+cF9w ZWVyczsKCQlxLT5wX3BlZXJzID0gcC0+cF9wZWVyczsKCQl3YWtldXAoKGNh ZGRyX3QpcC0+cF9sZWFkZXIpOwoJfQoKCS8qCgkgKiBYWFggU2h1dGRvd24g U1lTViBzZW1hcGhvcmVzCgkgKi8KCXNlbWV4aXQocCk7CgoJS0tBU1NFUlQo cC0+cF9udW1wb3NpeGxvY2tzID09IDApOwoKCS8qIFRoZSBuZXh0IHR3byBj aHVua3Mgc2hvdWxkIHByb2JhYmx5IGJlIG1vdmVkIHRvIHZtc3BhY2VfZXhp dC4gKi8KCXZtID0gcC0+cF92bXNwYWNlOwoKCS8qCgkgKiBSZWxlYXNlIHVw Y2FsbHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcHJvY2VzcwoJICovCglpZiAo dm0tPnZtX3VwY2FsbHMpCgkJdXBjX3JlbGVhc2Uodm0sIHApOwoKCS8qCgkg KiBSZWxlYXNlIHVzZXIgcG9ydGlvbiBvZiBhZGRyZXNzIHNwYWNlLgoJICog VGhpcyByZWxlYXNlcyByZWZlcmVuY2VzIHRvIHZub2RlcywKCSAqIHdoaWNo IGNvdWxkIGNhdXNlIEkvTyBpZiB0aGUgZmlsZSBoYXMgYmVlbiB1bmxpbmtl ZC4KCSAqIE5lZWQgdG8gZG8gdGhpcyBlYXJseSBlbm91Z2ggdGhhdCB3ZSBj YW4gc3RpbGwgc2xlZXAuCgkgKiBDYW4ndCBmcmVlIHRoZSBlbnRpcmUgdm1z cGFjZSBhcyB0aGUga2VybmVsIHN0YWNrCgkgKiBtYXkgYmUgbWFwcGVkIHdp dGhpbiB0aGF0IHNwYWNlIGFsc28uCgkgKgoJICogUHJvY2Vzc2VzIHNoYXJp bmcgdGhlIHNhbWUgdm1zcGFjZSBtYXkgZXhpdCBpbiBvbmUgb3JkZXIsIGFu ZAoJICogZ2V0IGNsZWFuZWQgdXAgYnkgdm1zcGFjZV9leGl0KCkgaW4gYSBk aWZmZXJlbnQgb3JkZXIuICBUaGUKCSAqIGxhc3QgZXhpdGluZyBwcm9jZXNz IHRvIHJlYWNoIHRoaXMgcG9pbnQgcmVsZWFzZXMgYXMgbXVjaCBvZgoJICog dGhlIGVudmlyb25tZW50IGFzIGl0IGNhbiwgYW5kIHRoZSBsYXN0IHByb2Nl c3MgY2xlYW5lZCB1cAoJICogYnkgdm1zcGFjZV9leGl0KCkgKHdoaWNoIGRl Y3JlbWVudHMgZXhpdGluZ2NudCkgY2xlYW5zIHVwIHRoZQoJICogcmVtYWlu ZGVyLgoJICovCgkrK3ZtLT52bV9leGl0aW5nY250OwoJaWYgKC0tdm0tPnZt X3JlZmNudCA9PSAwKSB7CgkJc2htZXhpdCh2bSk7CgkJcG1hcF9yZW1vdmVf cGFnZXModm1zcGFjZV9wbWFwKHZtKSwgVk1fTUlOX0FERFJFU1MsCgkJICAg IFZNX01BWFVTRVJfQUREUkVTUyk7CgkJKHZvaWQpIHZtX21hcF9yZW1vdmUo JnZtLT52bV9tYXAsIFZNX01JTl9BRERSRVNTLAoJCSAgICBWTV9NQVhVU0VS X0FERFJFU1MpOwoJfQoKCWlmIChTRVNTX0xFQURFUihwKSkgewoJCXN0cnVj dCBzZXNzaW9uICpzcCA9IHAtPnBfc2Vzc2lvbjsKCQlzdHJ1Y3Qgdm5vZGUg KnZwOwoKCQlpZiAoc3AtPnNfdHR5dnApIHsKCQkJLyoKCQkJICogV2UgYXJl IHRoZSBjb250cm9sbGluZyBwcm9jZXNzLiAgU2lnbmFsIHRoZSAKCQkJICog Zm9yZWdyb3VuZCBwcm9jZXNzIGdyb3VwLCBkcmFpbiB0aGUgY29udHJvbGxp bmcKCQkJICogdGVybWluYWwsIGFuZCByZXZva2UgYWNjZXNzIHRvIHRoZSBj b250cm9sbGluZwoJCQkgKiB0ZXJtaW5hbC4KCQkJICoKCQkJICogTk9URTog d2hpbGUgd2FpdGluZyBmb3IgdGhlIHByb2Nlc3MgZ3JvdXAgdG8gZXhpdAoJ CQkgKiBpdCBpcyBwb3NzaWJsZSB0aGF0IG9uZSBvZiB0aGUgcHJvY2Vzc2Vz IGluIHRoZQoJCQkgKiBncm91cCB3aWxsIHJldm9rZSB0aGUgdHR5LCBzbyB3 ZSBoYXZlIHRvIHJlY2hlY2suCgkJCSAqLwoJCQlpZiAoc3AtPnNfdHR5cCAm JiAoc3AtPnNfdHR5cC0+dF9zZXNzaW9uID09IHNwKSkgewoJCQkJaWYgKHNw LT5zX3R0eXAtPnRfcGdycCkKCQkJCQlwZ3NpZ25hbChzcC0+c190dHlwLT50 X3BncnAsIFNJR0hVUCwgMSk7CgkJCQkodm9pZCkgdHR5d2FpdChzcC0+c190 dHlwKTsKCQkJCS8qCgkJCQkgKiBUaGUgdHR5IGNvdWxkIGhhdmUgYmVlbiBy ZXZva2VkCgkJCQkgKiBpZiB3ZSBibG9ja2VkLgoJCQkJICovCgkJCQlpZiAo KHZwID0gc3AtPnNfdHR5dnApICE9IE5VTEwpIHsKCQkJCQl0dHljbG9zZXNl c3Npb24oc3AsIDApOwoJCQkJCWlmICh2eF9sb2NrKHZwKSA9PSAwKSB7CgkJ CQkJCVZPUF9SRVZPS0UodnAsIFJFVk9LRUFMTCk7CgkJCQkJCXZ4X3VubG9j ayh2cCk7CgkJCQkJfQoJCQkJCXZyZWxlKHZwKTsJLyogc190dHl2cCByZWYg Ki8KCQkJCX0KCQkJfQoJCQkvKgoJCQkgKiBSZWxlYXNlIHRoZSB0dHkuICBJ ZiBzb21lb25lIGhhcyBpdCBvcGVuIHZpYQoJCQkgKiAvZGV2L3R0eSB0aGVu IGNsb3NlIGl0IChzaW5jZSB0aGV5IG5vIGxvbmdlciBjYW4KCQkJICogb25j ZSB3ZSd2ZSBOVUxMJ2QgaXQgb3V0KS4KCQkJICovCgkJCWlmIChzcC0+c190 dHl2cCkKCQkJCXR0eWNsb3Nlc2Vzc2lvbihzcCwgMSk7CgkJCS8qCgkJCSAq IHNfdHR5cCBpcyBub3QgemVybydkOyB3ZSB1c2UgdGhpcyB0byBpbmRpY2F0 ZQoJCQkgKiB0aGF0IHRoZSBzZXNzaW9uIG9uY2UgaGFkIGEgY29udHJvbGxp bmcgdGVybWluYWwuCgkJCSAqIChmb3IgbG9nZ2luZyBhbmQgaW5mb3JtYXRp b25hbCBwdXJwb3NlcykKCQkJICovCgkJfQoJCXNwLT5zX2xlYWRlciA9IE5V TEw7Cgl9CglmaXhqb2JjKHAsIHAtPnBfcGdycCwgMCk7Cgkodm9pZClhY2N0 X3Byb2Nlc3MocCk7CiNpZmRlZiBLVFJBQ0UKCS8qCgkgKiByZWxlYXNlIHRy YWNlIGZpbGUKCSAqLwoJcC0+cF90cmFjZWZsYWcgPSAwOwkvKiBkb24ndCB0 cmFjZSB0aGUgdnJlbGUoKSAqLwoJaWYgKCh2dG1wID0gcC0+cF90cmFjZXAp ICE9IE5VTEwpIHsKCQlwLT5wX3RyYWNlcCA9IE5VTEw7CgkJdnJlbGUodnRt cCk7Cgl9CiNlbmRpZgoJLyoKCSAqIFJlbGVhc2UgcmVmZXJlbmNlIHRvIHRl eHQgdm5vZGUKCSAqLwoJaWYgKCh2dG1wID0gcC0+cF90ZXh0dnApICE9IE5V TEwpIHsKCQlwLT5wX3RleHR2cCA9IE5VTEw7CgkJdnJlbGUodnRtcCk7Cgl9 CgoJLyoKCSAqIE9uY2Ugd2Ugc2V0IFNaT01CIHRoZSBwcm9jZXNzIGNhbiBn ZXQgcmVhcGVkLiAgVGhlIHdhaXQxIGNvZGUKCSAqIHdpbGwgYWxzbyB3YWl0 IGZvciBUREZfUlVOTklORyB0byBiZSBjbGVhcmVkIGluIHRoZSB0aHJlYWQn cyBmbGFncywKCSAqIGluZGljYXRpbmcgdGhhdCBpdCBoYXMgYmVlbiBjb21w bGV0ZWx5IHN3aXRjaGVkIG91dC4KCSAqLwoKCS8qCgkgKiBSZW1vdmUgcHJv YyBmcm9tIGFsbHByb2MgcXVldWUgYW5kIHBpZGhhc2ggY2hhaW4uCgkgKiBQ bGFjZSBvbnRvIHpvbWJwcm9jLiAgVW5saW5rIGZyb20gcGFyZW50J3MgY2hp bGQgbGlzdC4KCSAqLwoJTElTVF9SRU1PVkUocCwgcF9saXN0KTsKCUxJU1Rf SU5TRVJUX0hFQUQoJnpvbWJwcm9jLCBwLCBwX2xpc3QpOwoJcC0+cF9zdGF0 ID0gU1pPTUI7CgoJTElTVF9SRU1PVkUocCwgcF9oYXNoKTsKCglxID0gTElT VF9GSVJTVCgmcC0+cF9jaGlsZHJlbik7CglpZiAocSkJCS8qIG9ubHkgbmVl ZCB0aGlzIGlmIGFueSBjaGlsZCBpcyBTX1pPTUIgKi8KCQl3YWtldXAoKGNh ZGRyX3QpIGluaXRwcm9jKTsKCWZvciAoOyBxICE9IDA7IHEgPSBucSkgewoJ CW5xID0gTElTVF9ORVhUKHEsIHBfc2libGluZyk7CgkJTElTVF9SRU1PVkUo cSwgcF9zaWJsaW5nKTsKCQlMSVNUX0lOU0VSVF9IRUFEKCZpbml0cHJvYy0+ cF9jaGlsZHJlbiwgcSwgcF9zaWJsaW5nKTsKCQlxLT5wX3BwdHIgPSBpbml0 cHJvYzsKCQlxLT5wX3NpZ3BhcmVudCA9IFNJR0NITEQ7CgkJLyoKCQkgKiBU cmFjZWQgcHJvY2Vzc2VzIGFyZSBraWxsZWQKCQkgKiBzaW5jZSB0aGVpciBl eGlzdGVuY2UgbWVhbnMgc29tZW9uZSBpcyBzY3Jld2luZyB1cC4KCQkgKi8K CQlpZiAocS0+cF9mbGFnICYgUF9UUkFDRUQpIHsKCQkJcS0+cF9mbGFnICY9 IH5QX1RSQUNFRDsKCQkJcHNpZ25hbChxLCBTSUdLSUxMKTsKCQl9Cgl9CgoJ LyoKCSAqIFNhdmUgZXhpdCBzdGF0dXMgYW5kIGZpbmFsIHJ1c2FnZSBpbmZv LCBhZGRpbmcgaW4gY2hpbGQgcnVzYWdlCgkgKiBpbmZvIGFuZCBzZWxmIHRp bWVzLgoJICovCglwLT5wX3hzdGF0ID0gcnY7CgkqcC0+cF9ydSA9IHAtPnBf c3RhdHMtPnBfcnU7CgljYWxjcnUocCwgJnAtPnBfcnUtPnJ1X3V0aW1lLCAm cC0+cF9ydS0+cnVfc3RpbWUsIE5VTEwpOwoJcnVhZGQocC0+cF9ydSwgJnAt PnBfc3RhdHMtPnBfY3J1KTsKCgkvKgoJICogbm90aWZ5IGludGVyZXN0ZWQg cGFydGllcyBvZiBvdXIgZGVtaXNlLgoJICovCglLTk9URSgmcC0+cF9rbGlz dCwgTk9URV9FWElUKTsKCgkvKgoJICogTm90aWZ5IHBhcmVudCB0aGF0IHdl J3JlIGdvbmUuICBJZiBwYXJlbnQgaGFzIHRoZSBQU19OT0NMRFdBSVQKCSAq IGZsYWcgc2V0LCBub3RpZnkgcHJvY2VzcyAxIGluc3RlYWQgKGFuZCBob3Bl IGl0IHdpbGwgaGFuZGxlCgkgKiB0aGlzIHNpdHVhdGlvbikuCgkgKi8KCWlm IChwLT5wX3BwdHItPnBfcHJvY3NpZy0+cHNfZmxhZyAmIFBTX05PQ0xEV0FJ VCkgewoJCXN0cnVjdCBwcm9jICpwcCA9IHAtPnBfcHB0cjsKCQlwcm9jX3Jl cGFyZW50KHAsIGluaXRwcm9jKTsKCQkvKgoJCSAqIElmIHRoaXMgd2FzIHRo ZSBsYXN0IGNoaWxkIG9mIG91ciBwYXJlbnQsIG5vdGlmeQoJCSAqIHBhcmVu dCwgc28gaW4gY2FzZSBoZSB3YXMgd2FpdCgyKWluZywgaGUgd2lsbAoJCSAq IGNvbnRpbnVlLgoJCSAqLwoJCWlmIChMSVNUX0VNUFRZKCZwcC0+cF9jaGls ZHJlbikpCgkJCXdha2V1cCgoY2FkZHJfdClwcCk7Cgl9CgoJaWYgKHAtPnBf c2lncGFyZW50ICYmIHAtPnBfcHB0ciAhPSBpbml0cHJvYykgewoJICAgICAg ICBwc2lnbmFsKHAtPnBfcHB0ciwgcC0+cF9zaWdwYXJlbnQpOwoJfSBlbHNl IHsKCSAgICAgICAgcHNpZ25hbChwLT5wX3BwdHIsIFNJR0NITEQpOwoJfQoK CXdha2V1cCgoY2FkZHJfdClwLT5wX3BwdHIpOwojaWYgZGVmaW5lZCh0YWhv ZSkKCS8qIG1vdmUgdGhpcyB0byBjcHVfZXhpdCAqLwoJcC0+cF90aHJlYWQt PnRkX3BjYi0+cGNiX3NhdmVhY2MuZmFkZHIgPSAoZmxvYXQgKilOVUxMOwoj ZW5kaWYKCS8qCgkgKiBjcHVfZXhpdCBpcyByZXNwb25zaWJsZSBmb3IgY2xl YXJpbmcgY3VycHJvYywgc2luY2UKCSAqIGl0IGlzIGhlYXZpbHkgaW50ZWdy YXRlZCB3aXRoIHRoZSB0aHJlYWQvc3dpdGNoaW5nIHNlcXVlbmNlLgoJICoK CSAqIE90aGVyIHN1YnN0cnVjdHVyZXMgYXJlIGZyZWVkIGZyb20gd2FpdCgp LgoJICovCglpZiAoLS1wLT5wX2xpbWl0LT5wX3JlZmNudCA9PSAwKSB7CgkJ RlJFRShwLT5wX2xpbWl0LCBNX1NVQlBST0MpOwoJCXAtPnBfbGltaXQgPSBO VUxMOwoJfQoKCS8qCgkgKiBSZWxlYXNlIHRoZSBjdXJyZW50IHVzZXIgcHJv Y2VzcyBkZXNpZ25hdGlvbiBvbiB0aGUgcHJvY2VzcyBzbwoJICogdGhlIHVz ZXJsYW5kIHNjaGVkdWxlciBjYW4gd29yayBpbiBzb21lb25lIGVsc2UuCgkg Ki8KCXJlbGVhc2VfY3VycHJvYyhwKTsKCgkvKgoJICogRmluYWxseSwgY2Fs bCBtYWNoaW5lLWRlcGVuZGVudCBjb2RlIHRvIHJlbGVhc2UgdGhlIHJlbWFp bmluZwoJICogcmVzb3VyY2VzIGluY2x1ZGluZyBhZGRyZXNzIHNwYWNlLCB0 aGUga2VybmVsIHN0YWNrIGFuZCBwY2IuCgkgKiBUaGUgYWRkcmVzcyBzcGFj ZSBpcyByZWxlYXNlZCBieSAidm1zcGFjZV9mcmVlKHAtPnBfdm1zcGFjZSki OwoJICogVGhpcyBpcyBtYWNoaW5lLWRlcGVuZGVudCwgYXMgd2UgbWF5IGhh dmUgdG8gY2hhbmdlIHN0YWNrcwoJICogb3IgZW5zdXJlIHRoYXQgdGhlIGN1 cnJlbnQgb25lIGlzbid0IHJlYWxsb2NhdGVkIGJlZm9yZSB3ZQoJICogZmlu aXNoLiAgY3B1X2V4aXQgd2lsbCBlbmQgd2l0aCBhIGNhbGwgdG8gY3B1X3N3 aXRjaCgpLCBmaW5pc2hpbmcKCSAqIG91ciBleGVjdXRpb24gKHB1biBpbnRl bmRlZCkuCgkgKi8KCWNwdV9wcm9jX2V4aXQoKTsKfQoKaW50CndhaXQ0KHN0 cnVjdCB3YWl0X2FyZ3MgKnVhcCkKewoJc3RydWN0IHJ1c2FnZSBydXNhZ2U7 CglpbnQgZXJyb3IsIHN0YXR1czsKCgllcnJvciA9IGtlcm5fd2FpdCh1YXAt PnBpZCwgdWFwLT5zdGF0dXMgPyAmc3RhdHVzIDogTlVMTCwKCSAgICB1YXAt Pm9wdGlvbnMsIHVhcC0+cnVzYWdlID8gJnJ1c2FnZSA6IE5VTEwsICZ1YXAt PnN5c21zZ19mZHNbMF0pOwoKCWlmIChlcnJvciA9PSAwICYmIHVhcC0+c3Rh dHVzKQoJCWVycm9yID0gY29weW91dCgmc3RhdHVzLCB1YXAtPnN0YXR1cywg c2l6ZW9mKCp1YXAtPnN0YXR1cykpOwoJaWYgKGVycm9yID09IDAgJiYgdWFw LT5ydXNhZ2UpCgkJZXJyb3IgPSBjb3B5b3V0KCZydXNhZ2UsIHVhcC0+cnVz YWdlLCBzaXplb2YoKnVhcC0+cnVzYWdlKSk7CglyZXR1cm4gKGVycm9yKTsK fQoKLyoKICogd2FpdDEoKQogKgogKiB3YWl0X2FyZ3MoaW50IHBpZCwgaW50 ICpzdGF0dXMsIGludCBvcHRpb25zLCBzdHJ1Y3QgcnVzYWdlICpydXNhZ2Up CiAqLwppbnQKa2Vybl93YWl0KHBpZF90IHBpZCwgaW50ICpzdGF0dXMsIGlu dCBvcHRpb25zLCBzdHJ1Y3QgcnVzYWdlICpydXNhZ2UsIGludCAqcmVzKQp7 CglzdHJ1Y3QgdGhyZWFkICp0ZCA9IGN1cnRocmVhZDsKCXN0cnVjdCBwcm9j ICpxID0gdGQtPnRkX3Byb2M7CglzdHJ1Y3QgcHJvYyAqcCwgKnQ7CglpbnQg bmZvdW5kLCBlcnJvcjsKCglpZiAocGlkID09IDApCgkJcGlkID0gLXEtPnBf cGdpZDsKCWlmIChvcHRpb25zICZ+IChXVU5UUkFDRUR8V05PSEFOR3xXTElO VVhDTE9ORSkpCgkJcmV0dXJuIChFSU5WQUwpOwpsb29wOgoJbmZvdW5kID0g MDsKCUxJU1RfRk9SRUFDSChwLCAmcS0+cF9jaGlsZHJlbiwgcF9zaWJsaW5n KSB7CgkJaWYgKHBpZCAhPSBXQUlUX0FOWSAmJgoJCSAgICBwLT5wX3BpZCAh PSBwaWQgJiYgcC0+cF9wZ2lkICE9IC1waWQpCgkJCWNvbnRpbnVlOwoKCQkv KiBUaGlzIHNwZWNpYWwgY2FzZSBoYW5kbGVzIGEga3RocmVhZCBzcGF3bmVk IGJ5IGxpbnV4X2Nsb25lIAoJCSAqIChzZWUgbGludXhfbWlzYy5jKS4gIFRo ZSBsaW51eF93YWl0NCBhbmQgbGludXhfd2FpdHBpZCBmdW5jdGlvbnMKCQkg KiBuZWVkIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB3YWl0 aW5nIG9uIGEgcHJvY2VzcyBhbmQKCQkgKiB3YWl0aW5nIG9uIGEgdGhyZWFk LiAgSXQgaXMgYSB0aHJlYWQgaWYgcF9zaWdwYXJlbnQgaXMgbm90IFNJR0NI TEQsCgkJICogYW5kIHRoZSBXTElOVVhDTE9ORSBvcHRpb24gc2lnbmlmaWVz IHdlIHdhbnQgdG8gd2FpdCBmb3IgdGhyZWFkcwoJCSAqIGFuZCBub3QgcHJv Y2Vzc2VzLgoJCSAqLwoJCWlmICgocC0+cF9zaWdwYXJlbnQgIT0gU0lHQ0hM RCkgXiAoKG9wdGlvbnMgJiBXTElOVVhDTE9ORSkgIT0gMCkpCgkJCWNvbnRp bnVlOwoKCQluZm91bmQrKzsKCQlpZiAocC0+cF9zdGF0ID09IFNaT01CKSB7 CgkJCS8qCgkJCSAqIFRoZSBwcm9jZXNzJ3MgdGhyZWFkIG1heSBzdGlsbCBi ZSBpbiB0aGUgbWlkZGxlCgkJCSAqIG9mIHN3aXRjaGluZyBhd2F5LCB3ZSBj YW4ndCByaXAgaXRzIHN0YWNrIG91dCBmcm9tCgkJCSAqIHVuZGVyIGl0IHVu dGlsIFRERl9SVU5OSU5HIGNsZWFycyEKCQkJICoKCQkJICogWVlZIG5vIHdh a2V1cCBvY2N1cnMgc28gd2UgZGVwZW5kIG9uIHRoZSB0aW1lb3V0LgoJCQkg Ki8KCQkJaWYgKChwLT5wX3RocmVhZC0+dGRfZmxhZ3MgJiBUREZfUlVOTklO RykgIT0gMCkgewoJCQkJdHNsZWVwKHAtPnBfdGhyZWFkLCAwLCAicmVhcCIs IDEpOwoJCQkJZ290byBsb29wOwoJCQl9CgoJCQkvKgoJCQkgKiBPdGhlciBr ZXJuZWwgdGhyZWFkcyBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiAKCQkJICog YWNjZXNzaW5nIHRoZSBwcm9jLiAgRm9yIGV4YW1wbGUsIGtlcm4va2Vybl9w cm9jLmMKCQkJICogY291bGQgYmUgYmxvY2tlZCB3cml0aW5nIHByb2MgZGF0 YSB0byBhIHN5c2N0bC4KCQkJICogQXQgdGhlIG1vbWVudCwgaWYgdGhpcyBv Y2N1cnMsIHdlIGFyZSBub3Qgd29rZW4KCQkJICogdXAgYW5kIHJlbHkgb24g YSBvbmUtc2Vjb25kIHJldHJ5LgoJCQkgKi8KCQkJaWYgKHAtPnBfbG9jaykg ewoJCQkJd2hpbGUgKHAtPnBfbG9jaykKCQkJCQl0c2xlZXAocCwgMCwgInJl YXAyIiwgaHopOwoJCQl9CgkJCWx3a3Rfd2FpdF9mcmVlKHAtPnBfdGhyZWFk KTsKCgkJCS8qCgkJCSAqIENoYXJnZSB0aGUgcGFyZW50IGZvciB0aGUgY2hp bGQncyBjaGFuZ2UgaW4KCQkJICogZXN0aW1hdGVkIGNwdSBhcyBvZiB3aGVu IHRoZSBjaGlsZCBleGl0cyB0bwoJCQkgKiBhY2NvdW50IGZvciBiYXRjaCBz Y3JpcHRzLCBsYXJnZSBtYWtlJ3MsIGV0Yy4KCQkJICovCgkJCWlmIChxLT5w X3BpZCAhPSAxKSB7CgkJCSAgICBpZiAocC0+cF9lc3RjcHUgPiBwLT5wX2Vz dGNwdV9mb3JrKSB7CgkJCQlxLT5wX2VzdGNwdSA9IEVTVENQVUxJTShxLT5w X2VzdGNwdSArCgkJCQkJCXAtPnBfZXN0Y3B1IC0gcC0+cF9lc3RjcHVfZm9y ayk7CgkJCSAgICB9CgkJCX0KCgkJCS8qIFRha2UgY2FyZSBvZiBvdXIgcmV0 dXJuIHZhbHVlcy4gKi8KCQkJKnJlcyA9IHAtPnBfcGlkOwoJCQlpZiAoc3Rh dHVzKQoJCQkJKnN0YXR1cyA9IHAtPnBfeHN0YXQ7CgkJCWlmIChydXNhZ2Up CgkJCQkqcnVzYWdlID0gKnAtPnBfcnU7CgkJCS8qCgkJCSAqIElmIHdlIGdv dCB0aGUgY2hpbGQgdmlhIGEgcHRyYWNlICdhdHRhY2gnLAoJCQkgKiB3ZSBu ZWVkIHRvIGdpdmUgaXQgYmFjayB0byB0aGUgb2xkIHBhcmVudC4KCQkJICov CgkJCWlmIChwLT5wX29wcGlkICYmICh0ID0gcGZpbmQocC0+cF9vcHBpZCkp KSB7CgkJCQlwLT5wX29wcGlkID0gMDsKCQkJCXByb2NfcmVwYXJlbnQocCwg dCk7CgkJCQlwc2lnbmFsKHQsIFNJR0NITEQpOwoJCQkJd2FrZXVwKChjYWRk cl90KXQpOwoJCQkJcmV0dXJuICgwKTsKCQkJfQoJCQlwLT5wX3hzdGF0ID0g MDsKCQkJcnVhZGQoJnEtPnBfc3RhdHMtPnBfY3J1LCBwLT5wX3J1KTsKCQkJ RlJFRShwLT5wX3J1LCBNX1pPTUJJRSk7CgkJCXAtPnBfcnUgPSBOVUxMOwoK CQkJLyoKCQkJICogRGVjcmVtZW50IHRoZSBjb3VudCBvZiBwcm9jcyBydW5u aW5nIHdpdGggdGhpcyB1aWQuCgkJCSAqLwoJCQljaGdwcm9jY250KHAtPnBf dWNyZWQtPmNyX3J1aWRpbmZvLCAtMSwgMCk7CgoJCQkvKgoJCQkgKiBGcmVl IHVwIGNyZWRlbnRpYWxzLgoJCQkgKi8KCQkJY3JmcmVlKHAtPnBfdWNyZWQp OwoJCQlwLT5wX3VjcmVkID0gTlVMTDsKCgkJCS8qCgkJCSAqIFJlbW92ZSB1 bnVzZWQgYXJndW1lbnRzCgkJCSAqLwoJCQlpZiAocC0+cF9hcmdzICYmIC0t cC0+cF9hcmdzLT5hcl9yZWYgPT0gMCkKCQkJCUZSRUUocC0+cF9hcmdzLCBN X1BBUkdTKTsKCgkJCS8qCgkJCSAqIEZpbmFsbHkgZmluaXNoZWQgd2l0aCBv bGQgcHJvYyBlbnRyeS4KCQkJICogVW5saW5rIGl0IGZyb20gaXRzIHByb2Nl c3MgZ3JvdXAgYW5kIGZyZWUgaXQuCgkJCSAqLwoJCQlsZWF2ZXBncnAocCk7 CgkJCUxJU1RfUkVNT1ZFKHAsIHBfbGlzdCk7CS8qIG9mZiB6b21icHJvYyAq LwoJCQlMSVNUX1JFTU9WRShwLCBwX3NpYmxpbmcpOwoKCQkJaWYgKC0tcC0+ cF9wcm9jc2lnLT5wc19yZWZjbnQgPT0gMCkgewoJCQkJaWYgKHAtPnBfc2ln YWN0cyAhPSAmcC0+cF9hZGRyLT51X3NpZ2FjdHMpCgkJCQkJRlJFRShwLT5w X3NpZ2FjdHMsIE1fU1VCUFJPQyk7CgkJCSAgICAgICAgRlJFRShwLT5wX3By b2NzaWcsIE1fU1VCUFJPQyk7CgkJCQlwLT5wX3Byb2NzaWcgPSBOVUxMOwoJ CQl9CgoJCQl2bV93YWl0cHJvYyhwKTsKCQkJemZyZWUocHJvY196b25lLCBw KTsKCQkJbnByb2NzLS07CgkJCXJldHVybiAoMCk7CgkJfQoJCWlmIChwLT5w X3N0YXQgPT0gU1NUT1AgJiYgKHAtPnBfZmxhZyAmIFBfV0FJVEVEKSA9PSAw ICYmCgkJICAgIChwLT5wX2ZsYWcgJiBQX1RSQUNFRCB8fCBvcHRpb25zICYg V1VOVFJBQ0VEKSkgewoJCQlwLT5wX2ZsYWcgfD0gUF9XQUlURUQ7CgoJCQkq cmVzID0gcC0+cF9waWQ7CgkJCWlmIChzdGF0dXMpCgkJCQkqc3RhdHVzID0g V19TVE9QQ09ERShwLT5wX3hzdGF0KTsKCQkJLyogWmVybyBydXNhZ2Ugc28g d2UgZ2V0IHNvbWV0aGluZyBjb25zaXN0ZW50LiAqLwoJCQlpZiAocnVzYWdl KQoJCQkJYnplcm8ocnVzYWdlLCBzaXplb2YocnVzYWdlKSk7CgkJCXJldHVy biAoMCk7CgkJfQoJfQoJaWYgKG5mb3VuZCA9PSAwKQoJCXJldHVybiAoRUNI SUxEKTsKCWlmIChvcHRpb25zICYgV05PSEFORykgewoJCSpyZXMgPSAwOwoJ CXJldHVybiAoMCk7Cgl9CgllcnJvciA9IHRzbGVlcCgoY2FkZHJfdClxLCBQ Q0FUQ0gsICJ3YWl0IiwgMCk7CglpZiAoZXJyb3IpCgkJcmV0dXJuIChlcnJv cik7Cglnb3RvIGxvb3A7Cn0KCi8qCiAqIG1ha2UgcHJvY2VzcyAncGFyZW50 JyB0aGUgbmV3IHBhcmVudCBvZiBwcm9jZXNzICdjaGlsZCcuCiAqLwp2b2lk CnByb2NfcmVwYXJlbnQoY2hpbGQsIHBhcmVudCkKCXN0cnVjdCBwcm9jICpj aGlsZDsKCXN0cnVjdCBwcm9jICpwYXJlbnQ7CnsKCglpZiAoY2hpbGQtPnBf cHB0ciA9PSBwYXJlbnQpCgkJcmV0dXJuOwoKCUxJU1RfUkVNT1ZFKGNoaWxk LCBwX3NpYmxpbmcpOwoJTElTVF9JTlNFUlRfSEVBRCgmcGFyZW50LT5wX2No aWxkcmVuLCBjaGlsZCwgcF9zaWJsaW5nKTsKCWNoaWxkLT5wX3BwdHIgPSBw YXJlbnQ7Cn0KCi8qCiAqIFRoZSBuZXh0IHR3byBmdW5jdGlvbnMgYXJlIHRv IGhhbmRsZSBhZGRpbmcvZGVsZXRpbmcgaXRlbXMgb24gdGhlCiAqIGV4aXQg Y2FsbG91dCBsaXN0CiAqIAogKiBhdF9leGl0KCk6CiAqIFRha2UgdGhlIGFy Z3VtZW50cyBnaXZlbiBhbmQgcHV0IHRoZW0gb250byB0aGUgZXhpdCBjYWxs b3V0IGxpc3QsCiAqIEhvd2V2ZXIgZmlyc3QgbWFrZSBzdXJlIHRoYXQgaXQn cyBub3QgYWxyZWFkeSB0aGVyZS4KICogcmV0dXJucyAwIG9uIHN1Y2Nlc3Mu CiAqLwoKaW50CmF0X2V4aXQoZnVuY3Rpb24pCglleGl0bGlzdF9mbiBmdW5j dGlvbjsKewoJc3RydWN0IGV4aXRsaXN0ICplcDsKCiNpZmRlZiBJTlZBUklB TlRTCgkvKiBCZSBub2lzeSBpZiB0aGUgcHJvZ3JhbW1lciBoYXMgbG9zdCB0 cmFjayBvZiB0aGluZ3MgKi8KCWlmIChybV9hdF9leGl0KGZ1bmN0aW9uKSkg CgkJcHJpbnRmKCJXQVJOSU5HOiBleGl0IGNhbGxvdXQgZW50cnkgKCVwKSBh bHJlYWR5IHByZXNlbnRcbiIsCgkJICAgIGZ1bmN0aW9uKTsKI2VuZGlmCgll cCA9IG1hbGxvYyhzaXplb2YoKmVwKSwgTV9BVEVYSVQsIE1fTk9XQUlUKTsK CWlmIChlcCA9PSBOVUxMKQoJCXJldHVybiAoRU5PTUVNKTsKCWVwLT5mdW5j dGlvbiA9IGZ1bmN0aW9uOwoJVEFJTFFfSU5TRVJUX1RBSUwoJmV4aXRfbGlz dCwgZXAsIG5leHQpOwoJcmV0dXJuICgwKTsKfQoKLyoKICogU2NhbiB0aGUg ZXhpdCBjYWxsb3V0IGxpc3QgZm9yIHRoZSBnaXZlbiBpdGVtIGFuZCByZW1v dmUgaXQuCiAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyByZW1vdmVk ICgwIG9yIDEpCiAqLwppbnQKcm1fYXRfZXhpdChmdW5jdGlvbikKCWV4aXRs aXN0X2ZuIGZ1bmN0aW9uOwp7CglzdHJ1Y3QgZXhpdGxpc3QgKmVwOwoKCVRB SUxRX0ZPUkVBQ0goZXAsICZleGl0X2xpc3QsIG5leHQpIHsKCQlpZiAoZXAt PmZ1bmN0aW9uID09IGZ1bmN0aW9uKSB7CgkJCVRBSUxRX1JFTU9WRSgmZXhp dF9saXN0LCBlcCwgbmV4dCk7CgkJCWZyZWUoZXAsIE1fQVRFWElUKTsKCQkJ cmV0dXJuKDEpOwoJCX0KCX0JCglyZXR1cm4gKDApOwp9Cgp2b2lkIGNoZWNr X3NpZ2FjdHMgKHZvaWQpCnsKCXN0cnVjdCBwcm9jICpwID0gY3VycHJvYzsK CXN0cnVjdCBzaWdhY3RzICpwc3M7CglpbnQgczsKCglpZiAocC0+cF9wcm9j c2lnLT5wc19yZWZjbnQgPT0gMSAmJgoJICAgIHAtPnBfc2lnYWN0cyAhPSAm cC0+cF9hZGRyLT51X3NpZ2FjdHMpIHsKCQlwc3MgPSBwLT5wX3NpZ2FjdHM7 CgkJcyA9IHNwbGhpZ2goKTsKCQlwLT5wX2FkZHItPnVfc2lnYWN0cyA9ICpw c3M7CgkJcC0+cF9zaWdhY3RzID0gJnAtPnBfYWRkci0+dV9zaWdhY3RzOwoJ CXNwbHgocyk7CgkJRlJFRShwc3MsIE1fU1VCUFJPQyk7Cgl9Cn0KCgAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAHByb2MuaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAwMTAwNjQ0ADAwMDAwMDAAMDAwMDAwMAAwMDAw MDA0Mjc1MgAxMDIxMzI0MjUyMwAwMTEwMTYAIDAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIg IAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHdoZWVsAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyotCiAqIENvcHlyaWdodCAoYykg MTk4NiwgMTk4OSwgMTk5MSwgMTk5MwogKglUaGUgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgogKiBB bGwgb3Igc29tZSBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQg ZnJvbSBtYXRlcmlhbCBsaWNlbnNlZAogKiB0byB0aGUgVW5pdmVyc2l0eSBv ZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdy YXBoCiAqIENvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4g YW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoCiAqIHRoZSBwZXJtaXNz aW9uIG9mIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgogKgogKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAgICBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgogKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKICog ICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50 OgogKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBVbml2ZXJzaXR5IG9mCiAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5 IGFuZCBpdHMgY29udHJpYnV0b3JzLgogKiA0LiBOZWl0aGVyIHRoZSBuYW1l IG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy aWJ1dG9ycwogKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKICogICAg d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAq CiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMg QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECiAqIEFOWSBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQogKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RQogKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBS RUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKICogRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwKICogREFNQUdFUyAoSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMKICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCiAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwgU1RSSUNUCiAqIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO IEFOWSBXQVkKICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogKiBTVUNI IERBTUFHRS4KICoKICoJQCgjKXByb2MuaAk4LjE1IChCZXJrZWxleSkgNS8x OS85NQogKiAkRnJlZUJTRDogc3JjL3N5cy9zeXMvcHJvYy5oLHYgMS45OS4y LjkgMjAwMy8wNi8wNiAyMDoyMTozMiB0ZWdnZSBFeHAgJAogKiAkRHJhZ29u Rmx5OiBzcmMvc3lzL3N5cy9wcm9jLmgsdiAxLjU2IDIwMDQvMDkvMTcgMDE6 Mjk6NDUgam9lcmcgRXhwICQKICovCgojaWZuZGVmIF9TWVNfUFJPQ19IXwoj ZGVmaW5lCV9TWVNfUFJPQ19IXwoKI2lmICFkZWZpbmVkKF9LRVJORUwpICYm ICFkZWZpbmVkKF9LRVJORUxfU1RSVUNUVVJFUykKI2Vycm9yICJVc2VybGFu ZCBtdXN0IGluY2x1ZGUgc3lzL3VzZXIuaCBpbnN0ZWFkIG9mIHN5cy9wcm9j LmgiCiNlbmRpZgoKI2luY2x1ZGUgPHN5cy9jYWxsb3V0Lmg+CQkvKiBGb3Ig c3RydWN0IGNhbGxvdXRfaGFuZGxlLiAqLwojaW5jbHVkZSA8c3lzL2ZpbGVk ZXNjLmg+CiNpbmNsdWRlIDxzeXMvcXVldWUuaD4KI2luY2x1ZGUgPHN5cy9y dHByaW8uaD4JCQkvKiBGb3Igc3RydWN0IHJ0cHJpby4gKi8KI2luY2x1ZGUg PHN5cy9zaWduYWwuaD4KI2lmbmRlZiBfS0VSTkVMCiNpbmNsdWRlIDxzeXMv dGltZS5oPgkJCS8qIEZvciBzdHJ1Y3RzIGl0aW1lcnZhbCwgdGltZXZhbC4g Ki8KI2VuZGlmCiNpbmNsdWRlIDxzeXMvdWNyZWQuaD4KI2luY2x1ZGUgPHN5 cy9ldmVudC5oPgkJCS8qIEZvciBzdHJ1Y3Qga2xpc3QgKi8KI2luY2x1ZGUg PHN5cy90aHJlYWQuaD4KI2luY2x1ZGUgPHN5cy92YXJzeW0uaD4KI2luY2x1 ZGUgPHN5cy91cGNhbGwuaD4KI2lmZGVmIF9LRVJORUwKI2luY2x1ZGUgPHN5 cy9nbG9iYWxkYXRhLmg+CiNlbmRpZgojaW5jbHVkZSA8bWFjaGluZS9wcm9j Lmg+CQkvKiBNYWNoaW5lLWRlcGVuZGVudCBwcm9jIHN1YnN0cnVjdC4gKi8K Ci8qCiAqIE9uZSBzdHJ1Y3R1cmUgYWxsb2NhdGVkIHBlciBzZXNzaW9uLgog Ki8Kc3RydWN0CXNlc3Npb24gewoJaW50CXNfY291bnQ7CQkvKiBSZWYgY250 OyBwZ3JwcyBpbiBzZXNzaW9uLiAqLwoJc3RydWN0CXByb2MgKnNfbGVhZGVy OwkJLyogU2Vzc2lvbiBsZWFkZXIuICovCglzdHJ1Y3QJdm5vZGUgKnNfdHR5 dnA7CQkvKiBWbm9kZSBvZiBjb250cm9sbGluZyB0ZXJtaW5hbC4gKi8KCXN0 cnVjdAl0dHkgKnNfdHR5cDsJCS8qIENvbnRyb2xsaW5nIHRlcm1pbmFsLiAq LwoJcGlkX3QJc19zaWQ7CQkJLyogU2Vzc2lvbiBJRCAqLwoJY2hhcglzX2xv Z2luW3JvdW5kdXAoTUFYTE9HTkFNRSwgc2l6ZW9mKGxvbmcpKV07CS8qIFNl dGxvZ2luKCkgbmFtZS4gKi8KfTsKCi8qCiAqIE9uZSBzdHJ1Y3R1cmUgYWxs b2NhdGVkIHBlciBwcm9jZXNzIGdyb3VwLgogKi8Kc3RydWN0CXBncnAgewoJ TElTVF9FTlRSWShwZ3JwKSBwZ19oYXNoOwkvKiBIYXNoIGNoYWluLiAqLwoJ TElTVF9IRUFEKCwgcHJvYykgcGdfbWVtYmVyczsJLyogUG9pbnRlciB0byBw Z3JwIG1lbWJlcnMuICovCglzdHJ1Y3QJc2Vzc2lvbiAqcGdfc2Vzc2lvbjsJ LyogUG9pbnRlciB0byBzZXNzaW9uLiAqLwoJc3RydWN0ICBzaWdpb2xzdCBw Z19zaWdpb2xzdDsJLyogTGlzdCBvZiBzaWdpbyBzb3VyY2VzLiAqLwoJcGlk X3QJcGdfaWQ7CQkJLyogUGdycCBpZC4gKi8KCWludAlwZ19qb2JjOwkvKiAj IHByb2NzIHF1YWxpZnlpbmcgcGdycCBmb3Igam9iIGNvbnRyb2wgKi8KfTsK CnN0cnVjdAlwcm9jc2lnIHsKCXNpZ3NldF90IHBzX3NpZ2lnbm9yZTsJLyog U2lnbmFscyBiZWluZyBpZ25vcmVkLiAqLwoJc2lnc2V0X3QgcHNfc2lnY2F0 Y2g7CS8qIFNpZ25hbHMgYmVpbmcgY2F1Z2h0IGJ5IHVzZXIuICovCglpbnQg ICAgICBwc19mbGFnOwoJc3RydWN0CSBzaWdhY3RzICpwc19zaWdhY3RzOwoJ aW50CSBwc19yZWZjbnQ7Cn07CgojZGVmaW5lCVBTX05PQ0xEV0FJVAkweDAw MDEJLyogTm8gem9tYmllcyBpZiBjaGlsZCBkaWVzICovCiNkZWZpbmUJUFNf Tk9DTERTVE9QCTB4MDAwMgkvKiBObyBTSUdDSExEIHdoZW4gY2hpbGRyZW4g c3RvcC4gKi8KCi8qCiAqIHBhcmdzLCB1c2VkIHRvIGhvbGQgYSBjb3B5IG9m IHRoZSBjb21tYW5kIGxpbmUsIGlmIGl0IGhhZCBhIHNhbmUKICogbGVuZ3Ro CiAqLwpzdHJ1Y3QJcGFyZ3MgewoJdV9pbnQJYXJfcmVmOwkJLyogUmVmZXJl bmNlIGNvdW50ICovCgl1X2ludAlhcl9sZW5ndGg7CS8qIExlbmd0aCAqLwoJ dV9jaGFyCWFyX2FyZ3NbMF07CS8qIEFyZ3VtZW50cyAqLwp9OwoKLyoKICog RGVzY3JpcHRpb24gb2YgYSBwcm9jZXNzLgogKgogKiBUaGlzIHN0cnVjdHVy ZSBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIG1hbmFnZSBh IHRocmVhZCBvZgogKiBjb250cm9sLCBrbm93biBpbiBVTipYIGFzIGEgcHJv Y2VzczsgaXQgaGFzIHJlZmVyZW5jZXMgdG8gc3Vic3RydWN0dXJlcwogKiBj b250YWluaW5nIGRlc2NyaXB0aW9ucyBvZiB0aGluZ3MgdGhhdCB0aGUgcHJv Y2VzcyB1c2VzLCBidXQgbWF5IHNoYXJlCiAqIHdpdGggcmVsYXRlZCBwcm9j ZXNzZXMuICBUaGUgcHJvY2VzcyBzdHJ1Y3R1cmUgYW5kIHRoZSBzdWJzdHJ1 Y3R1cmVzCiAqIGFyZSBhbHdheXMgYWRkcmVzc2FibGUgZXhjZXB0IGZvciB0 aG9zZSBtYXJrZWQgIihQUk9DIE9OTFkpIiBiZWxvdywKICogd2hpY2ggbWln aHQgYmUgYWRkcmVzc2FibGUgb25seSBvbiBhIHByb2Nlc3NvciBvbiB3aGlj aCB0aGUgcHJvY2VzcwogKiBpcyBydW5uaW5nLgogKgogKiBOT1RFISAgVGhl IHByb2Nlc3Mgc3RhcnQgdGltZSBpcyBzdG9yZWQgaW4gdGhlIHRocmVhZCBz dHJ1Y3R1cmUgYXNzb2NpYXRlZAogKiB3aXRoIHRoZSBwcm9jZXNzLiAgSWYg dGhlIHByb2Nlc3MgaXMgYSBab21iaWUsIHRoZW4gdGhpcyBmaWVsZCB3aWxs IGJlCiAqIGluYWNjZXNzaWJsZSBkdWUgdG8gdGhlIHRocmVhZCBzdHJ1Y3R1 cmUgYmVpbmcgZnJlZSdkIGluIGtlcm5fd2FpdDEoKS4KICovCgpzdHJ1Y3Qg amFpbDsKc3RydWN0IHNjaGVkOwoKc3RydWN0CXByb2MgewoJVEFJTFFfRU5U UlkocHJvYykgcF9wcm9jcTsJLyogcnVuL3NsZWVwIHF1ZXVlLiAqLwoJTElT VF9FTlRSWShwcm9jKSBwX2xpc3Q7CS8qIExpc3Qgb2YgYWxsIHByb2Nlc3Nl cy4gKi8KCgkvKiBzdWJzdHJ1Y3R1cmVzOiAqLwoJc3RydWN0CXVjcmVkICpw X3VjcmVkOwkJLyogUHJvY2VzcyBvd25lcidzIGlkZW50aXR5LiAqLwoJc3Ry dWN0CWZpbGVkZXNjICpwX2ZkOwkJLyogUHRyIHRvIG9wZW4gZmlsZXMgc3Ry dWN0dXJlLiAqLwoJc3RydWN0IGZpbGVkZXNjX3RvX2xlYWRlciAqcF9mZHRv bDsgLyogUHRyIHRvIHRyYWNraW5nIG5vZGUgKi8KCXN0cnVjdAlwc3RhdHMg KnBfc3RhdHM7CS8qIEFjY291bnRpbmcvc3RhdGlzdGljcyAoUFJPQyBPTkxZ KS4gKi8KCXN0cnVjdAlwbGltaXQgKnBfbGltaXQ7CS8qIFByb2Nlc3MgbGlt aXRzLiAqLwojaWYgMAoJc3RydWN0CXZtX29iamVjdCAqcF91cGFnZXNfb2Jq Oy8qIFVwYWdlcyBvYmplY3QgKi8KI2Vsc2UKCXZvaWQJCSpwX2R1bW15MTsK I2VuZGlmCglzdHJ1Y3QJcHJvY3NpZyAqcF9wcm9jc2lnOwojZGVmaW5lIHBf c2lnYWN0cwlwX3Byb2NzaWctPnBzX3NpZ2FjdHMKI2RlZmluZSBwX3NpZ2ln bm9yZQlwX3Byb2NzaWctPnBzX3NpZ2lnbm9yZQojZGVmaW5lIHBfc2lnY2F0 Y2gJcF9wcm9jc2lnLT5wc19zaWdjYXRjaAojZGVmaW5lCXBfcmxpbWl0CXBf bGltaXQtPnBsX3JsaW1pdAoKCWludAlwX2ZsYWc7CQkJLyogUF8qIGZsYWdz LiAqLwoJY2hhcglwX3N0YXQ7CQkJLyogUyogcHJvY2VzcyBzdGF0dXMuICov CgljaGFyCXBfcGFkMVszXTsKCglwaWRfdAlwX3BpZDsJCQkvKiBQcm9jZXNz IGlkZW50aWZpZXIuICovCglMSVNUX0VOVFJZKHByb2MpIHBfaGFzaDsJLyog SGFzaCBjaGFpbi4gKi8KCUxJU1RfRU5UUlkocHJvYykgcF9wZ2xpc3Q7CS8q IExpc3Qgb2YgcHJvY2Vzc2VzIGluIHBncnAuICovCglzdHJ1Y3QJcHJvYyAq cF9wcHRyOwkgCS8qIFBvaW50ZXIgdG8gcGFyZW50IHByb2Nlc3MuICovCglM SVNUX0VOVFJZKHByb2MpIHBfc2libGluZzsJLyogTGlzdCBvZiBzaWJsaW5n IHByb2Nlc3Nlcy4gKi8KCUxJU1RfSEVBRCgsIHByb2MpIHBfY2hpbGRyZW47 CS8qIFBvaW50ZXIgdG8gbGlzdCBvZiBjaGlsZHJlbi4gKi8KCXN0cnVjdCBj YWxsb3V0IHBfaXRoYW5kbGU7IC8qIGZvciBzY2hlZHVsaW5nIHBfcmVhbHRp bWVyICovCglzdHJ1Y3QJdmFyc3ltc2V0IHBfdmFyc3ltc2V0OwoKLyogVGhl IGZvbGxvd2luZyBmaWVsZHMgYXJlIGFsbCB6ZXJvZWQgdXBvbiBjcmVhdGlv biBpbiBmb3JrLiAqLwojZGVmaW5lCXBfc3RhcnR6ZXJvCXBfb3BwaWQKCglw aWRfdAlwX29wcGlkOwkgLyogU2F2ZSBwYXJlbnQgcGlkIGR1cmluZyBwdHJh Y2UuIFhYWCAqLwoJaW50CXBfZHVwZmQ7CSAvKiBTaWRld2F5cyByZXR1cm4g dmFsdWUgZnJvbSBmZG9wZW4uIFhYWCAqLwoKCXN0cnVjdAl2bXNwYWNlICpw X3Ztc3BhY2U7CS8qIEFkZHJlc3Mgc3BhY2UuICovCgoJLyogc2NoZWR1bGlu ZyAqLwoJdV9pbnQJcF9lc3RjcHU7CSAvKiBUaW1lIGF2ZXJhZ2VkIHZhbHVl IG9mIHBfY3B0aWNrcy4gKi8KCXVfaW50CXBfZXN0Y3B1X2Zvcms7CSAvKiBl c3RjcHUgYXMgb2YgZm9yaywgdXNlZCBpbiBiYXRjaCBkZXRlY3QgKi8KCWlu dAlwX2NwdGlja3M7CSAvKiBUaWNrcyBvZiBjcHUgdGltZS4gKi8KCWZpeHB0 X3QJcF9wY3RjcHU7CSAvKiAlY3B1IGZvciB0aGlzIHByb2Nlc3MgZHVyaW5n IHBfc3d0aW1lICovCgl1X2ludAlwX3N3dGltZTsJIC8qIFRpbWUgc3dhcHBl ZCBpbiBvciBvdXQuICovCgl1X2ludAlwX3NscHRpbWU7CSAvKiBUaW1lIHNp bmNlIGxhc3QgYmxvY2tlZC4gKi8KCglzdHJ1Y3QJaXRpbWVydmFsIHBfcmVh bHRpbWVyOwkvKiBBbGFybSB0aW1lci4gKi8KCglpbnQJcF90cmFjZWZsYWc7 CQkvKiBLZXJuZWwgdHJhY2UgcG9pbnRzLiAqLwoJc3RydWN0CXZub2RlICpw X3RyYWNlcDsJLyogVHJhY2UgdG8gdm5vZGUuICovCgoJc2lnc2V0X3QgcF9z aWdsaXN0OwkJLyogU2lnbmFscyBhcnJpdmVkIGJ1dCBub3QgZGVsaXZlcmVk LiAqLwoKCXN0cnVjdAl2bm9kZSAqcF90ZXh0dnA7CS8qIFZub2RlIG9mIGV4 ZWN1dGFibGUuICovCgoJY2hhcglwX2xvY2s7CQkJLyogUHJvY2VzcyBsb2Nr IChwcmV2ZW50IHN3YXApIGNvdW50LiAqLwoJc2hvcnQJcF9wcmlvcml0eTsJ CS8qIG92ZXJhbGwgcHJpb3JpdHkgKGxvd2VyPT1iZXR0ZXIpICovCgljaGFy CXBfcnFpbmRleDsJCS8qIFJ1biBxdWV1ZSBpbmRleCAqLwoKCXVuc2lnbmVk IGludAlwX3N0b3BzOwkvKiBwcm9jZnMgZXZlbnQgYml0bWFzayAqLwoJdW5z aWduZWQgaW50CXBfc3R5cGU7CS8qIHByb2NmcyBzdG9wIGV2ZW50IHR5cGUg Ki8KCWNoYXIJcF9zdGVwOwkJCS8qIHByb2NmcyBzdG9wICpvbmNlKiBmbGFn ICovCgl1bnNpZ25lZCBjaGFyCXBfcGZzZmxhZ3M7CS8qIHByb2NmcyBmbGFn cyAqLwoJY2hhcglwX3BhZDNbMl07CQkvKiBwYWRkaW5nIGZvciBhbGlnbm1l bnQgKi8KCXN0cnVjdAlzaWdpb2xzdCBwX3NpZ2lvbHN0OwkvKiBsaXN0IG9m IHNpZ2lvIHNvdXJjZXMgKi8KCWludAlwX3NpZ3BhcmVudDsJCS8qIHNpZ25h bCB0byBwYXJlbnQgb24gZXhpdCAqLwoJc2lnc2V0X3QgcF9vbGRzaWdtYXNr OwkJLyogc2F2ZWQgbWFzayBmcm9tIGJlZm9yZSBzaWdwYXVzZSAqLwoJaW50 CXBfc2lnOwkJCS8qIGZvciBjb3JlIGR1bXAvZGVidWdnZXIgWFhYICovCiAg ICAgICAgdV9sb25nCXBfY29kZTsJICAJICAgICAgICAvKiBmb3IgY29yZSBk dW1wL2RlYnVnZ2VyIFhYWCAqLwoJc3RydWN0CWtsaXN0IHBfa2xpc3Q7CQkv KiBrbm90ZXMgYXR0YWNoZWQgdG8gdGhpcyBwcm9jZXNzICovCgovKiBFbmQg YXJlYSB0aGF0IGlzIHplcm9lZCBvbiBjcmVhdGlvbi4gKi8KI2RlZmluZQlw X2VuZHplcm8JcF9zdGFydGNvcHkKCi8qIFRoZSBmb2xsb3dpbmcgZmllbGRz IGFyZSBhbGwgY29waWVkIHVwb24gY3JlYXRpb24gaW4gZm9yay4gKi8KI2Rl ZmluZQlwX3N0YXJ0Y29weQlwX3NpZ21hc2sKCglzaWdzZXRfdCBwX3NpZ21h c2s7CS8qIEN1cnJlbnQgc2lnbmFsIG1hc2suICovCglzdGFja190CXBfc2ln c3RrOwkvKiBzcCAmIG9uIHN0YWNrIHN0YXRlIHZhcmlhYmxlICovCgljaGFy CXBfaW50ZXJhY3RpdmU7CS8qIGxvbmcgdGVybSBpbnRlcmFjdGl2aXR5IHBh ci0wICovCgljaGFyCXBfbmljZTsJCS8qIFByb2Nlc3MgIm5pY2UiIHZhbHVl LiAqLwoKCXN0cnVjdCAJcGdycCAqcF9wZ3JwOwkvKiBQb2ludGVyIHRvIHBy b2Nlc3MgZ3JvdXAuICovCgoJc3RydWN0IAlzeXNlbnR2ZWMgKnBfc3lzZW50 OyAvKiBTeXN0ZW0gY2FsbCBkaXNwYXRjaCBpbmZvcm1hdGlvbi4gKi8KCglz dHJ1Y3QJcnRwcmlvIHBfcnRwcmlvOwkvKiBSZWFsdGltZSBwcmlvcml0eS4g Ki8KCXN0cnVjdAlwYXJncyAqcF9hcmdzOwovKiBFbmQgYXJlYSB0aGF0IGlz IGNvcGllZCBvbiBjcmVhdGlvbi4gKi8KI2RlZmluZQlwX2VuZGNvcHkJcF9h ZGRyCglzdHJ1Y3QJdXNlciAqcF9hZGRyOwkvKiBLZXJuZWwgdmlydHVhbCBh ZGRyIG9mIHUtYXJlYSAoUFJPQyBPTkxZKS4gKi8KCXN0cnVjdAltZHByb2Mg cF9tZDsJLyogQW55IG1hY2hpbmUtZGVwZW5kZW50IGZpZWxkcy4gKi8KCgl1 X3Nob3J0CXBfeHN0YXQ7CS8qIEV4aXQgc3RhdHVzIGZvciB3YWl0OyBhbHNv IHN0b3Agc2lnbmFsLiAqLwoJdV9zaG9ydAlwX2FjZmxhZzsJLyogQWNjb3Vu dGluZyBmbGFncy4gKi8KCXN0cnVjdAlydXNhZ2UgKnBfcnU7CS8qIEV4aXQg aW5mb3JtYXRpb24uIFhYWCAqLwoKCWludAlwX250aHJlYWRzOwkvKiBudW1i ZXIgb2YgdGhyZWFkcyAob25seSBpbiBsZWFkZXIpICovCgl2b2lkCSpwX2Fp b2luZm87CS8qIEFTWU5DIEkvTyBpbmZvICovCglpbnQJcF93YWtldXA7CS8q IHRocmVhZCBpZCAqLwoJc3RydWN0IHByb2MgKnBfcGVlcnM7CQoJc3RydWN0 IHByb2MgKnBfbGVhZGVyOwoJdm9pZAkqcF9lbXVsZGF0YTsJLyogcHJvY2Vz cy1zcGVjaWZpYyBlbXVsYXRvciBzdGF0ZSBkYXRhICovCglzdHJ1Y3QgdGhy ZWFkICpwX3RocmVhZDsgLyogdGVtcG9yYXJpbHkgZW1iZWQgdGhyZWFkIHN0 cnVjdCBpbiBwcm9jICovCglzdHJ1Y3QgdXBjYWxsICpwX3VwY2FsbDsgLyog VVNFUkxBTkQgUE9JTlRFUiEgcmVnaXN0ZXJlZCB1cGNhbGwgKi8KCXN0cnVj dCBzY2hlZCAqcF9zY2hlZDsJLyogd29yay1pbi1wcm9ncmVzcyAvIFBldGVy IEthZGF1ICovCglpbnQJcF9udW1wb3NpeGxvY2tzOyAvKiBudW1iZXIgb2Yg UE9TSVggbG9ja3MgKi8KCVRBSUxRX0hFQUQoLCBzeXNtc2cpIHBfc3lzbXNn cTsgLyogUmVjb3JkZWQgYXN5bmNoIHN5c3RlbSBjYWxscyAqLwoJaW50IHBf bnVtX3N5c21zZzsJCS8qIEhvdyBtYW55IHN5c21zZydzIHRoaXMgcHJvYyBo YXMgcnVubmluZyAqLwoKCS8qIFRoZXNlIGZpZWxkcyBhcmUgcmVxdWlyZWQg dG8gc3VwcG9ydCBwcm9jZXNzIGxldmVsIGNoZWNrcG9pbnRpbmcgKi8KCglp bnQgY2hrcHQ7CQkvKiBpbmRleCBpbmRpY2F0aW5nIG51bWJlciBvZiBjaGVj a3BvaW50cyAqLwoJY2hhciBpc19zZXRqbXA7CQkvKiBkaXN0aW5ndWlzaCBi ZXR3ZWVuIHNldGptcCBhbmQgZnJlZXplICovCglpbnQgY2hrcHRfc2lnOwkJ Lyogc2lnbmFsIHRoYXQgbGlrZWx5IGNhdXNlZCBhIHJlY292ZXJ5ICovCglp bnQgcHJldiwgY3VycjsJCS8qIHBhc3QgYW5kIGN1cnJlbnQgY2hlY2twb2lu dCBzdGF0ZSAqLwoJY2FkZHJfdCBjYWNoZTsJCS8qIGNhY2hlIHB0ciAqLwoJ aW50IGNhY2hlc2l6ZTsJCS8qIGxlbmd0aCBvZiBjYWNoZSAqLwp9OwoKI2lm IGRlZmluZWQoX0tFUk5FTCkKI2RlZmluZSBwX3djaGFuCQlwX3RocmVhZC0+ dGRfd2NoYW4KI2RlZmluZSBwX3dtZXNnCQlwX3RocmVhZC0+dGRfd21lc2cK I2RlZmluZQlwX2NvbW0JCXBfdGhyZWFkLT50ZF9jb21tCiNkZWZpbmUJcF9z ZXNzaW9uCXBfcGdycC0+cGdfc2Vzc2lvbgojZGVmaW5lCXBfcGdpZAkJcF9w Z3JwLT5wZ19pZAojZW5kaWYKCi8qIFN0YXR1cyB2YWx1ZXMuICovCiNkZWZp bmUJU0lETAkxCQkvKiBQcm9jZXNzIGJlaW5nIGNyZWF0ZWQgYnkgZm9yay4g Ki8KI2RlZmluZQlTUlVOCTIJCS8qIEN1cnJlbnRseSBydW5uYWJsZS4gKi8K I2RlZmluZQlTU0xFRVAJMwkJLyogU2xlZXBpbmcgb24gYW4gYWRkcmVzcy4g Ki8KI2RlZmluZQlTU1RPUAk0CQkvKiBQcm9jZXNzIGRlYnVnZ2luZyBvciBz dXNwZW5zaW9uLiAqLwojZGVmaW5lCVNaT01CCTUJCS8qIEF3YWl0aW5nIGNv bGxlY3Rpb24gYnkgcGFyZW50LiAqLwojZGVmaW5lIFNUSFJFQUQJNgkJLyog U3ludGhlc2l6ZWQgZm9yIGVwcm9jIG9ubHkgKi8KCi8qIFRoZXNlIGZsYWdz IGFyZSBrZXB0IGluIHBfZmxhZ3MuICovCiNkZWZpbmUJUF9BRFZMT0NLCTB4 MDAwMDEJLyogUHJvY2VzcyBtYXkgaG9sZCBhIFBPU0lYIGFkdmlzb3J5IGxv Y2suICovCiNkZWZpbmUJUF9DT05UUk9MVAkweDAwMDAyCS8qIEhhcyBhIGNv bnRyb2xsaW5nIHRlcm1pbmFsLiAqLwojZGVmaW5lCVBfSU5NRU0JCTB4MDAw MDQJLyogTG9hZGVkIGludG8gbWVtb3J5LiAqLwojZGVmaW5lCVBfUFBXQUlU CTB4MDAwMTAJLyogUGFyZW50IGlzIHdhaXRpbmcgZm9yIGNoaWxkIHRvIGV4 ZWMvZXhpdC4gKi8KI2RlZmluZQlQX1BST0ZJTAkweDAwMDIwCS8qIEhhcyBz dGFydGVkIHByb2ZpbGluZy4gKi8KI2RlZmluZSBQX1NFTEVDVAkweDAwMDQw IC8qIFNlbGVjdGluZzsgd2FrZXVwL3dhaXRpbmcgZGFuZ2VyLiAqLwojZGVm aW5lCVBfU0lOVFIJCTB4MDAwODAJLyogU2xlZXAgaXMgaW50ZXJydXB0aWJs ZS4gKi8KI2RlZmluZQlQX1NVR0lECQkweDAwMTAwCS8qIEhhZCBzZXQgaWQg cHJpdmlsZWdlcyBzaW5jZSBsYXN0IGV4ZWMuICovCiNkZWZpbmUJUF9TWVNU RU0JMHgwMDIwMAkvKiBTeXN0ZW0gcHJvYzogbm8gc2lncywgc3RhdHMgb3Ig c3dhcHBpbmcuICovCiNkZWZpbmUJUF9VTlVTRUQwMDQwMAkweDAwNDAwCiNk ZWZpbmUJUF9UUkFDRUQJMHgwMDgwMAkvKiBEZWJ1Z2dlZCBwcm9jZXNzIGJl aW5nIHRyYWNlZC4gKi8KI2RlZmluZQlQX1dBSVRFRAkweDAxMDAwCS8qIERl YnVnZ2luZyBwcm9jZXNzIGhhcyB3YWl0ZWQgZm9yIGNoaWxkLiAqLwojZGVm aW5lCVBfV0VYSVQJCTB4MDIwMDAJLyogV29ya2luZyBvbiBleGl0aW5nLiAq LwojZGVmaW5lCVBfRVhFQwkJMHgwNDAwMAkvKiBQcm9jZXNzIGNhbGxlZCBl eGVjLiAqLwoKLyogU2hvdWxkIHByb2JhYmx5IGJlIGNoYW5nZWQgaW50byBh IGhvbGQgY291bnQuICovCi8qIHdhcwlQX05PU1dBUAkweDA4MDAwCXdhczog RG8gbm90IHN3YXAgdXBhZ2VzOyBwLT5wX2hvbGQgKi8KLyogd2FzCVBfUEhZ U0lPCTB4MTAwMDAJd2FzOiBEb2luZyBwaHlzaWNhbCBJL087IHVzZSBwLT5w X2hvbGQgKi8KCiNkZWZpbmUJUF9VUENBTExQRU5ECTB4MjAwMDAJLyogYW4g dXBjYWxsIGlzIHBlbmRpbmcgKi8KCiNkZWZpbmUJUF9TV0FQUElORwkweDQw MDAwCS8qIFByb2Nlc3MgaXMgYmVpbmcgc3dhcHBlZC4gKi8KI2RlZmluZQlQ X1NXQVBJTlJFUQkweDgwMDAwCS8qIFN3YXBpbiByZXF1ZXN0IGR1ZSB0byB3 YWtldXAgKi8KCi8qIE1hcmtlZCBhIGtlcm5lbCB0aHJlYWQgKi8KI2RlZmlu ZQlQX09OUlVOUQkweDEwMDAwMCAvKiBvbiBhIHVzZXIgc2NoZWR1bGluZyBy dW4gcXVldWUgKi8KI2RlZmluZQlQX0tUSFJFQURQCTB4MjAwMDAwIC8qIFBy b2Nlc3MgaXMgcmVhbGx5IGEga2VybmVsIHRocmVhZCAqLwojZGVmaW5lIFBf VU5VU0VENDAwMDAwCTB4NDAwMDAwCiNkZWZpbmUJUF9ERUFETEtUUkVBVCAg IDB4ODAwMDAwIC8qIGxvY2sgYXF1aXNpdGlvbiAtIGRlYWRsb2NrIHRyZWF0 bWVudCAqLwoKI2RlZmluZQlQX0pBSUxFRAkweDEwMDAwMDAgLyogUHJvY2Vz cyBpcyBpbiBqYWlsICovCiNkZWZpbmUJUF9PTERNQVNLCTB4MjAwMDAwMCAv KiBuZWVkIHRvIHJlc3RvcmUgbWFzayBiZWZvcmUgcGF1c2UgKi8KI2RlZmlu ZQlQX0FMVFNUQUNLCTB4NDAwMDAwMCAvKiBoYXZlIGFsdGVybmF0ZSBzaWdu YWwgc3RhY2sgKi8KI2RlZmluZQlQX0lORVhFQwkweDgwMDAwMDAgLyogUHJv Y2VzcyBpcyBpbiBleGVjdmUoKS4gKi8KI2RlZmluZSBQX1BBU1NJVkVfQUNR CTB4MTAwMDAwMDAgLyogUGFzc2l2ZSBhY3F1aXJlIGNwdSAoc2VlIGtlcm5f c3dpdGNoKSAqLwojZGVmaW5lCVBfVVBDQUxMV0FJVAkweDIwMDAwMDAwIC8q IFdhaXQgZm9yIHVwY2FsbCBvciBzaWduYWwgKi8KCiNpZmRlZiBfS0VSTkVM CgojaWZkZWYgTUFMTE9DX0RFQ0xBUkUKTUFMTE9DX0RFQ0xBUkUoTV9TRVNT SU9OKTsKTUFMTE9DX0RFQ0xBUkUoTV9TVUJQUk9DKTsKTUFMTE9DX0RFQ0xB UkUoTV9aT01CSUUpOwpNQUxMT0NfREVDTEFSRShNX1BBUkdTKTsKI2VuZGlm CgovKiBmbGFncyBmb3Igc3VzZXJfeHh4KCkgKi8KI2RlZmluZSBQUklTT05f Uk9PVAkweDEKI2RlZmluZQlOVUxMX0NSRURfT0tBWQkweDIKCi8qIEhhbmR5 IG1hY3JvIHRvIGRldGVybWluZSBpZiBwMSBjYW4gbWFuZ2xlIHAyICovCgoj ZGVmaW5lIFBSSVNPTl9DSEVDSyhjcjEsIGNyMikgXAoJKCghKGNyMSktPmNy X3ByaXNvbikgfHwgKGNyMSktPmNyX3ByaXNvbiA9PSAoY3IyKS0+Y3JfcHJp c29uKQoKLyoKICogSGFuZHkgbWFjcm8gZm9yIExJU1RzLgogKi8KI2RlZmlu ZSBGT1JFQUNIX1BST0NfSU5fU1lTVEVNKHApCUxJU1RfRk9SRUFDSCgocCks ICZhbGxwcm9jLCBwX2xpc3QpCgovKgogKiBXZSB1c2UgcHJvY2VzcyBJRHMg PD0gUElEX01BWDsgUElEX01BWCArIDEgbXVzdCBhbHNvIGZpdCBpbiBhIHBp ZF90LAogKiBhcyBpdCBpcyB1c2VkIHRvIHJlcHJlc2VudCAibm8gcHJvY2Vz cyBncm91cCIuCiAqLwojZGVmaW5lCVBJRF9NQVgJCTk5OTk5CiNkZWZpbmUJ Tk9fUElECQkxMDAwMDAKCiNkZWZpbmUgU0VTU19MRUFERVIocCkJKChwKS0+ cF9zZXNzaW9uLT5zX2xlYWRlciA9PSAocCkpCgovKgogKiBTVE9QRVZFTlQK ICovCmV4dGVybiB2b2lkIHN0b3BldmVudChzdHJ1Y3QgcHJvYyosIHVuc2ln bmVkIGludCwgdW5zaWduZWQgaW50KTsKI2RlZmluZQlTVE9QRVZFTlQocCxl LHYpCQkJXAoJZG8gewkJCQkJXAoJCWlmICgocCktPnBfc3RvcHMgJiAoZSkp IHsJXAoJCQlzdG9wZXZlbnQocCxlLHYpOwlcCgkJfQkJCQlcCgl9IHdoaWxl ICgwKQoKLyogaG9sZCBwcm9jZXNzIFUtYXJlYSBpbiBtZW1vcnksIG5vcm1h bGx5IGZvciBwdHJhY2UvcHJvY2ZzIHdvcmsgKi8KI2RlZmluZSBQSE9MRChw KSB7CQkJCQkJCVwKCWlmICgocCktPnBfbG9jaysrID09IDAgJiYgKChwKS0+ cF9mbGFnICYgUF9JTk1FTSkgPT0gMCkJXAoJCWZhdWx0aW4ocCk7CQkJCQkJ XAp9CiNkZWZpbmUgUFJFTEUocCkJKC0tKHApLT5wX2xvY2spCgojZGVmaW5l CVBJREhBU0gocGlkKQkoJnBpZGhhc2h0YmxbKHBpZCkgJiBwaWRoYXNoXSkK ZXh0ZXJuIExJU1RfSEVBRChwaWRoYXNoaGVhZCwgcHJvYykgKnBpZGhhc2h0 Ymw7CmV4dGVybiB1X2xvbmcgcGlkaGFzaDsKCiNkZWZpbmUJUEdSUEhBU0go cGdpZCkJKCZwZ3JwaGFzaHRibFsocGdpZCkgJiBwZ3JwaGFzaF0pCmV4dGVy biBMSVNUX0hFQUQocGdycGhhc2hoZWFkLCBwZ3JwKSAqcGdycGhhc2h0Ymw7 CmV4dGVybiB1X2xvbmcgcGdycGhhc2g7CgojaWYgMCAKI2lmbmRlZiBTRVRf Q1VSUFJPQwojZGVmaW5lIFNFVF9DVVJQUk9DKHApCShjdXJwcm9jID0gKHAp KQojZW5kaWYKI2VuZGlmCgpleHRlcm4gc3RydWN0IHByb2MgcHJvYzA7CQkv KiBQcm9jZXNzIHNsb3QgZm9yIHN3YXBwZXIuICovCmV4dGVybiBzdHJ1Y3Qg dGhyZWFkIHRocmVhZDA7CQkvKiBUaHJlYWQgc2xvdCBmb3Igc3dhcHBlci4g Ki8KZXh0ZXJuIGludCBob2d0aWNrczsJCQkvKiBMaW1pdCBvbiBrZXJuZWwg Y3B1IGhvZ3MuICovCmV4dGVybiBpbnQgbnByb2NzLCBtYXhwcm9jOwkJLyog Q3VycmVudCBhbmQgbWF4IG51bWJlciBvZiBwcm9jcy4gKi8KZXh0ZXJuIGlu dCBtYXhwcm9jcGVydWlkOwkJLyogTWF4IHByb2NzIHBlciB1aWQuICovCmV4 dGVybiBpbnQgc2NoZWRfcXVhbnR1bTsJCS8qIFNjaGVkdWxpbmcgcXVhbnR1 bSBpbiB0aWNrcyAqLwoKTElTVF9IRUFEKHByb2NsaXN0LCBwcm9jKTsKZXh0 ZXJuIHN0cnVjdCBwcm9jbGlzdCBhbGxwcm9jOwkJLyogTGlzdCBvZiBhbGwg cHJvY2Vzc2VzLiAqLwpleHRlcm4gc3RydWN0IHByb2NsaXN0IHpvbWJwcm9j OwkvKiBMaXN0IG9mIHpvbWJpZSBwcm9jZXNzZXMuICovCmV4dGVybiBzdHJ1 Y3QgcHJvYyAqaW5pdHByb2M7CQkvKiBQcm9jZXNzIHNsb3QgZm9yIGluaXQg Ki8KZXh0ZXJuIHN0cnVjdCB0aHJlYWQgKnBhZ2V0aHJlYWQsICp1cGRhdGV0 aHJlYWQ7CgojZGVmaW5lCU5RUwkzMgkJCS8qIDMyIHJ1biBxdWV1ZXMuICov ClRBSUxRX0hFQUQocnEsIHByb2MpOwoKLyoKICogU2NoZWR1bGVyIGVzdGNw dSBtYWNyb3MuCiAqCiAqIHBfcHJpb3JpdHkgPSBOSUNFX0FESlVTVChwLT5w X25pY2UgLSBQUklPX01JTikgKwogKgkJCXAtPnBfZXN0Y3B1IC8gRVNUQ1BV UkFNUDsKICoKICogTklDRV9XRUlHSFQgZGV0ZXJtaW5lcyB0aGUgcF9lc3Rj cHUgb3ZlcmxhcCBiZXR3ZWVuIG5pY2UgbGV2ZWxzLiAgIEl0CiAqIGNhbm5v dCBleGNlZWQgMy4wLiAgQSB2YWx1ZSBvZiAyLjAgZ2l2ZXMgdXMgYSBuaWNl IHNtYWxsIG92ZXJsYXAgYmV0d2VlbgogKiBuaWNlIC0yMCBhbmQgbmljZSAr MC4gIEEgdmFsdWUgb2YgMy4wIHJlZHVjZXMgdGhlIG92ZXJsYXAgd2hpbGUg YSB2YWx1ZQogKiBvZiAxLjAgaW5jcmVhc2VzIHRoZSBvdmVybGFwLgogKgog KiBFU1RDUFVSQU1QIGRldGVybWluZXMgaG93IHNsb3dseSBlc3RjcHUgZWZm ZWN0cyB0aGUgcHJvY2VzcyBwcmlvcml0eS4KICogSGlnaGVyIG51bWJlcnMg cmVzdWx0IGluIHNsb3dlciByYW1wLXVwIHRpbWVzIGJlY2F1c2UgZXN0Y3B1 IGlzIGluY3JlbWVudGVkCiAqIG9uY2UgcGVyIHNjaGVkdWxlciB0aWNrIGFu ZCBtYXhlcyBvdXQgYXQgRVNUQ1BVTElNLgogKgogKiBFU1RDUFVMSU0gPSAo MTI3IC0gMiAqIDQwKSAqIDggPSAzNzYKICoKICogTk9URTogRVNUQ1BVVkZS RVEgaXMgdGhlICd2aXJ0dWFsJyBlc3RjcHUgYWNjdW11bGF0aW9uIGZyZXF1 ZW5jeSwgd2hlcmVhcwogKiBFU1RDUFVGUkVRIGlzIHRoZSBhY3R1YWwgaW50 ZXJydXB0IHJhdGUuICBUaGUgcmF0aW8gaXMgdXNlZCB0byBzY2FsZQogKiBi b3RoIHRoZSByYW1wLXVwIGFuZCB0aGUgZGVjYXkgY2FsY3VsYXRpb25zIGlu IGtlcm5fc3luY2guYy4gIAogKi8KCiNkZWZpbmUgRVNUQ1BVUkFNUAk4CQkJ LyogaGlnaGVyIGVxdWFscyBzbG93ZXIgKi8KI2RlZmluZSBOSUNFX0FESlVT VCh2YWx1ZSkJKCgodW5zaWduZWQgaW50KShOSUNFX1dFSUdIVCAqIDEyOCkg KiAodmFsdWUpKSAvIDEyOCkKI2RlZmluZSBFU1RDUFVNQVgJKChNQVhQUkkg LSBOSUNFX0FESlVTVChQUklPX01BWCAtIFBSSU9fTUlOKSkgKiBFU1RDUFVS QU1QKQojZGVmaW5lIEVTVENQVUxJTSh2KQltaW4oKHYpLCBFU1RDUFVNQVgp CiNkZWZpbmUgRVNUQ1BVRlJFUQkyMAkJCS8qIGVzdGNwdSB1cGRhdGUgZnJl cXVlbmN5ICovCiNkZWZpbmUgRVNUQ1BVVkZSRVEJNDAJCQkvKiB2aXJ0dWFs IGZyZXEgY29udHJvbHMgcmFtcCovCiNkZWZpbmUJTklDRV9XRUlHSFQJMi4w CQkJLyogcHJpb3JpdGllcyBwZXIgbmljZSBsZXZlbCAqLwojZGVmaW5lCVBQ UQkJKChNQVhQUkkgKyAxKSAvIE5RUykJLyogcHJpb3JpdGllcyBwZXIgcXVl dWUgKi8KCmV4dGVybgl1X2xvbmcgcHNfYXJnX2NhY2hlX2xpbWl0OwpleHRl cm4JaW50IHBzX2FyZ3NvcGVuOwpleHRlcm4JaW50IHBzX3Nob3dhbGxwcm9j czsKCnN0cnVjdCBwcm9jICpwZmluZCAocGlkX3QpOwkvKiBGaW5kIHByb2Nl c3MgYnkgaWQuICovCnN0cnVjdCBwZ3JwICpwZ2ZpbmQgKHBpZF90KTsJLyog RmluZCBwcm9jZXNzIGdyb3VwIGJ5IGlkLiAqLwpzdHJ1Y3QgcHJvYyAqenBm aW5kIChwaWRfdCk7CS8qIEZpbmQgem9tYmllIHByb2Nlc3MgYnkgaWQuICov CgpzdHJ1Y3Qgdm1fem9uZTsKc3RydWN0IGdsb2JhbGRhdGE7CmV4dGVybiBz dHJ1Y3Qgdm1fem9uZSAqcHJvY196b25lOwoKaW50CWVudGVycGdycCAoc3Ry dWN0IHByb2MgKnAsIHBpZF90IHBnaWQsIGludCBta3Nlc3MpOwp2b2lkCWZp eGpvYmMgKHN0cnVjdCBwcm9jICpwLCBzdHJ1Y3QgcGdycCAqcGdycCwgaW50 IGVudGVyaW5nKTsKaW50CWluZmVyaW9yIChzdHJ1Y3QgcHJvYyAqcCk7Cmlu dAlsZWF2ZXBncnAgKHN0cnVjdCBwcm9jICpwKTsKdm9pZAlzZXNzX2hvbGQo c3RydWN0IHNlc3Npb24gKnNwKTsKdm9pZAlzZXNzX3JlbGUoc3RydWN0IHNl c3Npb24gKnNwKTsKdm9pZAltaV9zd2l0Y2ggKHN0cnVjdCBwcm9jICpwKTsK dm9pZAlwcm9jaW5pdCAodm9pZCk7CnZvaWQJcmVsc2N1cnByb2Moc3RydWN0 IHByb2MgKmN1cnApOwppbnQJcF90cmVzcGFzcyAoc3RydWN0IHVjcmVkICpj cjEsIHN0cnVjdCB1Y3JlZCAqY3IyKTsKdm9pZAlyZXNldHByaW9yaXR5IChz dHJ1Y3QgcHJvYyAqKTsKaW50CXJvdW5kcm9iaW5faW50ZXJ2YWwgKHZvaWQp Owp2b2lkCXJlc2NoZWRfY3B1cyh1X2ludDMyX3QgbWFzayk7CnZvaWQJc2No ZWR1bGVyY2xvY2sgKHZvaWQgKmR1bW15KTsKdm9pZAlzZXRydW5uYWJsZSAo c3RydWN0IHByb2MgKik7CnZvaWQJY2xycnVubmFibGUgKHN0cnVjdCBwcm9j ICosIGludCBzdGF0KTsKdm9pZAlzZXRydW5xdWV1ZSAoc3RydWN0IHByb2Mg Kik7CnZvaWQJc2xlZXBpbml0ICh2b2lkKTsKaW50CXN1c2VyIChzdHJ1Y3Qg dGhyZWFkICp0ZCk7CmludAlzdXNlcl9wcm9jIChzdHJ1Y3QgcHJvYyAqcCk7 CmludAlzdXNlcl9jcmVkIChzdHJ1Y3QgdWNyZWQgKmNyZWQsIGludCBmbGFn KTsKdm9pZAlyZW1ydW5xdWV1ZSAoc3RydWN0IHByb2MgKik7CnZvaWQJcmVs ZWFzZV9jdXJwcm9jIChzdHJ1Y3QgcHJvYyAqY3VycCk7CnZvaWQJYWNxdWly ZV9jdXJwcm9jIChzdHJ1Y3QgcHJvYyAqY3VycCk7CnZvaWQJc2VsZWN0X2N1 cnByb2Moc3RydWN0IGdsb2JhbGRhdGEgKik7CnZvaWQJY3B1X2hlYXZ5X3N3 aXRjaCAoc3RydWN0IHRocmVhZCAqKTsKdm9pZAljcHVfbHdrdF9zd2l0Y2gg KHN0cnVjdCB0aHJlYWQgKik7CnZvaWQJdW5zbGVlcCAoc3RydWN0IHRocmVh ZCAqKTsKCnZvaWQJY3B1X3Byb2NfZXhpdCAodm9pZCkgX19kZWFkMjsKdm9p ZAljcHVfdGhyZWFkX2V4aXQgKHZvaWQpIF9fZGVhZDI7CnZvaWQJZXhpdDEg KGludCkgX19kZWFkMjsKdm9pZAljcHVfZm9yayAoc3RydWN0IHByb2MgKiwg c3RydWN0IHByb2MgKiwgaW50KTsKdm9pZAljcHVfc2V0X2ZvcmtfaGFuZGxl ciAoc3RydWN0IHByb2MgKiwgdm9pZCAoKikodm9pZCAqKSwgdm9pZCAqKTsK dm9pZAljcHVfc2V0X3RocmVhZF9oYW5kbGVyKHN0cnVjdCB0aHJlYWQgKnRk LCB2b2lkICgqcmV0ZnVuYykodm9pZCksIHZvaWQgKmZ1bmMsIHZvaWQgKmFy Zyk7CmludAlmb3JrMSAoc3RydWN0IHByb2MgKiwgaW50LCBzdHJ1Y3QgcHJv YyAqKik7CnZvaWQJc3RhcnRfZm9ya2VkX3Byb2MgKHN0cnVjdCBwcm9jICos IHN0cnVjdCBwcm9jICopOwppbnQJdHJhY2VfcmVxIChzdHJ1Y3QgcHJvYyAq KTsKdm9pZAljcHVfcHJvY193YWl0IChzdHJ1Y3QgcHJvYyAqKTsKdm9pZAlj cHVfdGhyZWFkX3dhaXQgKHN0cnVjdCB0aHJlYWQgKik7CmludAljcHVfY29y ZWR1bXAgKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IHZub2RlICosIHN0cnVj dCB1Y3JlZCAqKTsKdm9pZAlzZXRzdWdpZCAodm9pZCk7CnZvaWQJZmF1bHRp biAoc3RydWN0IHByb2MgKnApOwoKdV9pbnQzMl90CXByb2NydW5uYWJsZSAo dm9pZCk7CgojZW5kaWYJLyogX0tFUk5FTCAqLwoKI2VuZGlmCS8qICFfU1lT X1BST0NfSF8gKi8KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA --0-860233166-1110292844=:35430--
因文章內容過長,因此無法取得中間部份內容。您可以登入 https://term.ptt.cc/ 查看完整內容。
文章代碼(AID): #12BUYF00 (DFBSD_submit)
文章代碼(AID): #12BUYF00 (DFBSD_submit)