From: Narihiro Nakamura Date: 2010-05-28T05:15:09+09:00 Subject: [ruby-dev:41443] Re: [Feature #3203] LazySweepGC patch --e0cb4e88788fe51b3d0487990bc3 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit nariです。 make test-rubyspec、check、benchmarkが通るようなりました。 また、make、make benchmark、test-all、test-rubyspecの実行速度も調べてみ ました。極端に遅くなったものはなさそうです。そもそもプログラム実行時間 が早くなるたぐいの修正ではないので、目立ってに遅くなければOKだろうと思っ ています。 make test-all trunk : 183.42s lazy_sweep : 196.92s make test-rubyspec trunk : 104.484065s lazy_sweep : 106.389376s make trunk : 229.13s lazy_sweep : 228.63s make bechmark minimum results in each 5 measurements. name trunk lazy_sweep app_answer 0.149 0.152 app_erb 1.027 1.090 app_factorial 0.495 0.500 app_fib 1.683 1.838 app_mandelbrot 0.460 0.506 app_pentomino 45.964 46.075 app_raise 1.364 1.403 app_strconcat 0.868 0.901 app_tak 2.334 2.447 app_tarai 1.857 1.840 app_uri 2.043 2.086 io_file_create 0.681 0.678 io_file_read 0.930 0.881 io_file_write 0.326 0.329 loop_for 3.810 6.067 loop_generator 1.984 1.988 loop_times 3.343 3.450 loop_whileloop 1.558 2.283 loop_whileloop2 0.322 0.477 so_ackermann 2.085 2.009 so_array 4.263 4.331 so_binary_trees 1.004 0.998 so_concatenate 0.956 0.970 so_count_words 0.424 0.439 so_exception 2.768 2.839 so_fannkuch 42.900 43.804 so_fasta 5.927 5.611 so_k_nucleotide 3.812 3.824 so_lists 0.854 0.876 so_mandelbrot 13.081 13.742 so_matrix 0.997 1.014 so_meteor_contest 14.278 14.269 so_nbody 9.369 10.590 so_nested_loop 3.067 3.061 so_nsieve 7.446 6.849 so_nsieve_bits 8.297 8.183 so_object 2.272 2.238 so_partial_sums 12.288 12.358 so_pidigits 3.317 3.311 so_random 0.808 0.850 so_reverse_complement 3.596 3.420 so_sieve 0.211 0.264 so_spectralnorm 11.595 8.725 vm1_block* 4.135 4.208 vm1_const* 2.050 2.176 vm1_ensure* 0.326 1.420 vm1_ivar* 2.275 2.938 vm1_ivar_set* 2.280 2.827 vm1_length* 1.588 2.262 vm1_neq* 1.184 1.194 vm1_not* 0.987 1.457 vm1_rescue* 0.422 0.336 vm1_simplereturn* 2.753 2.958 vm1_swap* 0.784 1.144 vm2_array* 1.802 1.917 vm2_case* 0.467 0.328 vm2_eval* 44.158 48.817 vm2_method* 4.541 4.400 vm2_mutex* 3.076 3.464 vm2_poly_method* 6.382 6.475 vm2_poly_method_ov* 0.881 0.856 vm2_proc* 1.595 1.432 vm2_regexp* 3.122 3.466 vm2_send* 1.030 0.910 vm2_super* 1.317 1.074 vm2_unif1* 0.904 0.579 vm2_zsuper* 1.277 1.357 vm3_gc 1.784 1.758 vm3_thread_create_join 5.890 6.038 vm3_thread_mutex 6.216 3.074 r28028に対するパッチを添付しておきます。 # githubでforkして開発しています。 # http://github.com/authorNari/ruby --e0cb4e88788fe51b3d0487990bc3 Content-Type: text/x-patch; charset=US-ASCII; name="gc_simple_lazy_sweep_r28028.diff" Content-Disposition: attachment; filename="gc_simple_lazy_sweep_r28028.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g9q041f70 ZGlmZiAtLWdpdCBhL2NsYXNzLmMgYi9jbGFzcy5jCmluZGV4IGM1ODZmN2EuLjVjZTQ1MGYgMTAw NjQ0Ci0tLSBhL2NsYXNzLmMKKysrIGIvY2xhc3MuYwpAQCAtMjAyLDcgKzIwMiw3IEBAIHJiX3Np bmdsZXRvbl9jbGFzc19jbG9uZShWQUxVRSBvYmopCiAgICAgZWxzZSB7CiAJc3RydWN0IGNsb25l X21ldGhvZF9kYXRhIGRhdGE7CiAJLyogY29weSBzaW5nbGV0b24odW5uYW1lZCkgY2xhc3MgKi8K LQlWQUxVRSBjbG9uZSA9IGNsYXNzX2FsbG9jKFJCQVNJQyhrbGFzcyktPmZsYWdzLCAwKTsKKwlW QUxVRSBjbG9uZSA9IGNsYXNzX2FsbG9jKChSQkFTSUMoa2xhc3MpLT5mbGFncyAmIH4oRkxfTUFS SykpLCAwKTsKIAogCWlmIChCVUlMVElOX1RZUEUob2JqKSA9PSBUX0NMQVNTKSB7CiAJICAgIFJC QVNJQyhjbG9uZSktPmtsYXNzID0gKFZBTFVFKWNsb25lOwpkaWZmIC0tZ2l0IGEvZ2MuYyBiL2dj LmMKaW5kZXggY2Y2NzdhYi4uNjY5YmRkMSAxMDA2NDQKLS0tIGEvZ2MuYworKysgYi9nYy5jCkBA IC0xMDAsNiArMTAwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgZ2NfcHJvZmlsZV9yZWNvcmQgewogICAg IHNpemVfdCBoZWFwX3RvdGFsX3NpemU7CiAKICAgICBpbnQgaGF2ZV9maW5hbGl6ZTsKKyAgICBp bnQgaXNfbWFya2VkOwogCiAgICAgc2l6ZV90IGFsbG9jYXRlX2luY3JlYXNlOwogICAgIHNpemVf dCBhbGxvY2F0ZV9saW1pdDsKQEAgLTE2MCwyMCArMTYxLDIzIEBAIGdldHJ1c2FnZV90aW1lKHZv aWQpCiAJfVwKICAgICB9IHdoaWxlKDApCiAKLSNkZWZpbmUgR0NfUFJPRl9USU1FUl9TVE9QIGRv IHtcCisjZGVmaW5lIEdDX1BST0ZfVElNRVJfU1RPUChtYXJrZWQpIGRvIHtcCiAJaWYgKG9ianNw YWNlLT5wcm9maWxlLnJ1bikge1wKIAkgICAgZ2NfdGltZSA9IGdldHJ1c2FnZV90aW1lKCkgLSBn Y190aW1lO1wKIAkgICAgaWYgKGdjX3RpbWUgPCAwKSBnY190aW1lID0gMDtcCiAJICAgIG9ianNw YWNlLT5wcm9maWxlLnJlY29yZFtjb3VudF0uZ2NfdGltZSA9IGdjX3RpbWU7XAorCSAgICBvYmpz cGFjZS0+cHJvZmlsZS5yZWNvcmRbY291bnRdLmlzX21hcmtlZCA9IG1hcmtlZDtcCisgICAgICAg ICAgICBHQ19QUk9GX1NFVF9IRUFQX0lORk8ob2Jqc3BhY2UtPnByb2ZpbGUucmVjb3JkW2NvdW50 XSk7XAogCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5jb3VudCsrO1wKIAl9XAogICAgIH0gd2hpbGUo MCkKIAogI2lmIEdDX1BST0ZJTEVfTU9SRV9ERVRBSUwKLSNkZWZpbmUgSU5JVF9HQ19QUk9GX1BB UkFNUyBkb3VibGUgZ2NfdGltZSA9IDAsIG1hcmtfdGltZSA9IDAsIHN3ZWVwX3RpbWUgPSAwO1wK LSAgICBzaXplX3QgY291bnQgPSBvYmpzcGFjZS0+cHJvZmlsZS5jb3VudAorI2RlZmluZSBJTklU X0dDX1BST0ZfUEFSQU1TIGRvdWJsZSBnY190aW1lID0gMCwgc3dlZXBfdGltZSA9IDA7XAorICAg IHNpemVfdCBjb3VudCA9IG9ianNwYWNlLT5wcm9maWxlLmNvdW50LCB0b3RhbCA9IDAsIGxpdmUg PSAwCiAKLSNkZWZpbmUgR0NfUFJPRl9NQVJLX1RJTUVSX1NUQVJUIGRvIHtcCisjZGVmaW5lIEdD X1BST0ZfTUFSS19USU1FUl9TVEFSVCBkb3VibGUgbWFya190aW1lID0gMDtcCisgICAgZG8ge1wK IAlpZiAob2Jqc3BhY2UtPnByb2ZpbGUucnVuKSB7XAogCSAgICBtYXJrX3RpbWUgPSBnZXRydXNh Z2VfdGltZSgpO1wKIAl9XApAQCAtMTgzLDcgKzE4Nyw3IEBAIGdldHJ1c2FnZV90aW1lKHZvaWQp CiAJaWYgKG9ianNwYWNlLT5wcm9maWxlLnJ1bikge1wKIAkgICAgbWFya190aW1lID0gZ2V0cnVz YWdlX3RpbWUoKSAtIG1hcmtfdGltZTtcCiAJICAgIGlmIChtYXJrX3RpbWUgPCAwKSBtYXJrX3Rp bWUgPSAwO1wKLQkgICAgb2Jqc3BhY2UtPnByb2ZpbGUucmVjb3JkW2NvdW50XS5nY19tYXJrX3Rp bWUgPSBtYXJrX3RpbWU7XAorCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRbb2Jqc3BhY2Ut PnByb2ZpbGUuY291bnRdLmdjX21hcmtfdGltZSA9IG1hcmtfdGltZTtcCiAJfVwKICAgICB9IHdo aWxlKDApCiAKQEAgLTIwNywzNCArMjExLDM2IEBAIGdldHJ1c2FnZV90aW1lKHZvaWQpCiAJICAg IHJlY29yZC0+YWxsb2NhdGVfbGltaXQgPSBtYWxsb2NfbGltaXQ7IFwKIAl9XAogICAgIH0gd2hp bGUoMCkKLSNkZWZpbmUgR0NfUFJPRl9TRVRfSEVBUF9JTkZPIGRvIHtcCi0JaWYgKG9ianNwYWNl LT5wcm9maWxlLnJ1bikge1wKLQkgICAgZ2NfcHJvZmlsZV9yZWNvcmQgKnJlY29yZCA9ICZvYmpz cGFjZS0+cHJvZmlsZS5yZWNvcmRbb2Jqc3BhY2UtPnByb2ZpbGUuY291bnRdO1wKLQkgICAgcmVj b3JkLT5oZWFwX3VzZV9zbG90cyA9IGhlYXBzX3VzZWQ7XAotCSAgICByZWNvcmQtPmhlYXBfbGl2 ZV9vYmplY3RzID0gbGl2ZTtcCi0JICAgIHJlY29yZC0+aGVhcF9mcmVlX29iamVjdHMgPSBmcmVl ZDsgXAotCSAgICByZWNvcmQtPmhlYXBfdG90YWxfb2JqZWN0cyA9IGhlYXBzX3VzZWQgKiBIRUFQ X09CSl9MSU1JVDtcCi0JICAgIHJlY29yZC0+aGF2ZV9maW5hbGl6ZSA9IGZpbmFsX2xpc3QgPyBR dHJ1ZSA6IFFmYWxzZTtcCi0JICAgIHJlY29yZC0+aGVhcF91c2Vfc2l6ZSA9IGxpdmUgKiBzaXpl b2YoUlZBTFVFKTsgXAotCSAgICByZWNvcmQtPmhlYXBfdG90YWxfc2l6ZSA9IGhlYXBzX3VzZWQg KiAoSEVBUF9PQkpfTElNSVQgKiBzaXplb2YoUlZBTFVFKSk7XAotCX1cCisjZGVmaW5lIEdDX1BS T0ZfU0VUX0hFQVBfSU5GTyhyZWNvcmQpIGRvIHtcCisgICAgICAgIGxpdmUgPSBvYmpzcGFjZS0+ aGVhcC5saXZlX251bTtcCisgICAgICAgIHRvdGFsID0gaGVhcHNfdXNlZCAqIEhFQVBfT0JKX0xJ TUlUO1wKKyAgICAgICAgcmVjb3JkLmhlYXBfdXNlX3Nsb3RzID0gaGVhcHNfdXNlZDtcCisgICAg ICAgIHJlY29yZC5oZWFwX2xpdmVfb2JqZWN0cyA9IGxpdmU7XAorICAgICAgICByZWNvcmQuaGVh cF9mcmVlX29iamVjdHMgPSB0b3RhbCAtIGxpdmU7XAorICAgICAgICByZWNvcmQuaGVhcF90b3Rh bF9vYmplY3RzID0gdG90YWw7XAorICAgICAgICByZWNvcmQuaGF2ZV9maW5hbGl6ZSA9IGRlZmVy cmVkX2ZpbmFsX2xpc3QgPyBRdHJ1ZSA6IFFmYWxzZTtcCisgICAgICAgIHJlY29yZC5oZWFwX3Vz ZV9zaXplID0gbGl2ZSAqIHNpemVvZihSVkFMVUUpO1wKKyAgICAgICAgcmVjb3JkLmhlYXBfdG90 YWxfc2l6ZSA9IHRvdGFsICogc2l6ZW9mKFJWQUxVRSk7XAogICAgIH0gd2hpbGUoMCkKKyNkZWZp bmUgR0NfUFJPRl9JTkNfTElWRV9OVU0gb2Jqc3BhY2UtPmhlYXAubGl2ZV9udW0rKworI2RlZmlu ZSBHQ19QUk9GX0RFQ19MSVZFX05VTSBvYmpzcGFjZS0+aGVhcC5saXZlX251bS0tCiAjZWxzZQog I2RlZmluZSBJTklUX0dDX1BST0ZfUEFSQU1TIGRvdWJsZSBnY190aW1lID0gMDtcCi0gICAgc2l6 ZV90IGNvdW50ID0gb2Jqc3BhY2UtPnByb2ZpbGUuY291bnQKKyAgICBzaXplX3QgY291bnQgPSBv YmpzcGFjZS0+cHJvZmlsZS5jb3VudCwgdG90YWwgPSAwLCBsaXZlID0gMAogI2RlZmluZSBHQ19Q Uk9GX01BUktfVElNRVJfU1RBUlQKICNkZWZpbmUgR0NfUFJPRl9NQVJLX1RJTUVSX1NUT1AKICNk ZWZpbmUgR0NfUFJPRl9TV0VFUF9USU1FUl9TVEFSVAogI2RlZmluZSBHQ19QUk9GX1NXRUVQX1RJ TUVSX1NUT1AKICNkZWZpbmUgR0NfUFJPRl9TRVRfTUFMTE9DX0lORk8KLSNkZWZpbmUgR0NfUFJP Rl9TRVRfSEVBUF9JTkZPIGRvIHtcCi0JaWYgKG9ianNwYWNlLT5wcm9maWxlLnJ1bikge1wKLQkg ICAgZ2NfcHJvZmlsZV9yZWNvcmQgKnJlY29yZCA9ICZvYmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRb b2Jqc3BhY2UtPnByb2ZpbGUuY291bnRdO1wKLQkgICAgcmVjb3JkLT5oZWFwX3RvdGFsX29iamVj dHMgPSBoZWFwc191c2VkICogSEVBUF9PQkpfTElNSVQ7XAotCSAgICByZWNvcmQtPmhlYXBfdXNl X3NpemUgPSBsaXZlICogc2l6ZW9mKFJWQUxVRSk7IFwKLQkgICAgcmVjb3JkLT5oZWFwX3RvdGFs X3NpemUgPSBoZWFwc191c2VkICogSEVBUF9TSVpFO1wKLQl9XAorI2RlZmluZSBHQ19QUk9GX1NF VF9IRUFQX0lORk8ocmVjb3JkKSBkbyB7XAorICAgICAgICBsaXZlID0gb2Jqc3BhY2UtPmhlYXAu bGl2ZV9udW07XAorICAgICAgICB0b3RhbCA9IGhlYXBzX3VzZWQgKiBIRUFQX09CSl9MSU1JVDtc CisgICAgICAgIHJlY29yZC5oZWFwX3RvdGFsX29iamVjdHMgPSB0b3RhbDtcCisgICAgICAgIHJl Y29yZC5oZWFwX3VzZV9zaXplID0gbGl2ZSAqIHNpemVvZihSVkFMVUUpO1wKKyAgICAgICAgcmVj b3JkLmhlYXBfdG90YWxfc2l6ZSA9IHRvdGFsICogc2l6ZW9mKFJWQUxVRSk7XAogICAgIH0gd2hp bGUoMCkKKyNkZWZpbmUgR0NfUFJPRl9JTkNfTElWRV9OVU0KKyNkZWZpbmUgR0NfUFJPRl9ERUNf TElWRV9OVU0KICNlbmRpZgogCiAKQEAgLTI4MCw2ICsyODYsMTQgQEAgc3RydWN0IGhlYXBzX3Ns b3QgewogICAgIHZvaWQgKm1lbWJhc2U7CiAgICAgUlZBTFVFICpzbG90OwogICAgIHNpemVfdCBs aW1pdDsKKyAgICBzdHJ1Y3QgaGVhcHNfc2xvdCAqbmV4dDsKKyAgICBzdHJ1Y3QgaGVhcHNfc2xv dCAqcHJldjsKK307CisKK3N0cnVjdCBzb3J0ZWRfaGVhcHNfc2xvdCB7CisgICAgUlZBTFVFICpz dGFydDsKKyAgICBSVkFMVUUgKmVuZDsKKyAgICBzdHJ1Y3QgaGVhcHNfc2xvdCAqc2xvdDsKIH07 CiAKICNkZWZpbmUgSEVBUF9NSU5fU0xPVFMgMTAwMDAKQEAgLTMwNCwxMSArMzE4LDE2IEBAIHR5 cGVkZWYgc3RydWN0IHJiX29ianNwYWNlIHsKICAgICBzdHJ1Y3QgewogCXNpemVfdCBpbmNyZW1l bnQ7CiAJc3RydWN0IGhlYXBzX3Nsb3QgKnB0cjsKKwlzdHJ1Y3QgaGVhcHNfc2xvdCAqc3dlZXBf c2xvdHM7CisJc3RydWN0IHNvcnRlZF9oZWFwc19zbG90ICpzb3J0ZWQ7CiAJc2l6ZV90IGxlbmd0 aDsKIAlzaXplX3QgdXNlZDsKIAlSVkFMVUUgKmZyZWVsaXN0OwogCVJWQUxVRSAqcmFuZ2VbMl07 CiAJUlZBTFVFICpmcmVlZDsKKwlzaXplX3QgbGl2ZV9udW07CisJc2l6ZV90IGZyZWVfbnVtOwor CXNpemVfdCBkb19oZWFwX2ZyZWU7CiAgICAgfSBoZWFwOwogICAgIHN0cnVjdCB7CiAJaW50IGRv bnRfZ2M7CkBAIC0zNDUsNyArMzY0LDYgQEAgaW50ICpydWJ5X2luaXRpYWxfZ2Nfc3RyZXNzX3B0 ciA9ICZyYl9vYmpzcGFjZS5nY19zdHJlc3M7CiAjZW5kaWYKICNkZWZpbmUgbWFsbG9jX2xpbWl0 CQlvYmpzcGFjZS0+bWFsbG9jX3BhcmFtcy5saW1pdAogI2RlZmluZSBtYWxsb2NfaW5jcmVhc2Ug CW9ianNwYWNlLT5tYWxsb2NfcGFyYW1zLmluY3JlYXNlCi0jZGVmaW5lIGhlYXBfc2xvdHMJCW9i anNwYWNlLT5oZWFwLnNsb3RzCiAjZGVmaW5lIGhlYXBzCQkJb2Jqc3BhY2UtPmhlYXAucHRyCiAj ZGVmaW5lIGhlYXBzX2xlbmd0aAkJb2Jqc3BhY2UtPmhlYXAubGVuZ3RoCiAjZGVmaW5lIGhlYXBz X3VzZWQJCW9ianNwYWNlLT5oZWFwLnVzZWQKQEAgLTM5NSwxMiArNDEzLDEzIEBAIHJiX29ianNw YWNlX2ZyZWUocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCiAJICAgIGZyZWUobGlzdCk7CiAJfQog ICAgIH0KLSAgICBpZiAoaGVhcHMpIHsKKyAgICBpZiAob2Jqc3BhY2UtPmhlYXAuc29ydGVkKSB7 CiAJc2l6ZV90IGk7CiAJZm9yIChpID0gMDsgaSA8IGhlYXBzX3VzZWQ7ICsraSkgewotCSAgICBm cmVlKGhlYXBzW2ldLm1lbWJhc2UpOworCSAgICBmcmVlKG9ianNwYWNlLT5oZWFwLnNvcnRlZFtp XS5zbG90LT5tZW1iYXNlKTsKKwkgICAgZnJlZShvYmpzcGFjZS0+aGVhcC5zb3J0ZWRbaV0uc2xv dCk7CiAJfQotCWZyZWUoaGVhcHMpOworCWZyZWUob2Jqc3BhY2UtPmhlYXAuc29ydGVkKTsKIAlo ZWFwc191c2VkID0gMDsKIAloZWFwcyA9IDA7CiAgICAgfQpAQCAtNDMzLDYgKzQ1Miw3IEBAIGlu dCBydWJ5X2Rpc2FibGVfZ2Nfc3RyZXNzID0gMDsKIAogc3RhdGljIHZvaWQgcnVuX2ZpbmFsKHJi X29ianNwYWNlX3QgKm9ianNwYWNlLCBWQUxVRSBvYmopOwogc3RhdGljIGludCBnYXJiYWdlX2Nv bGxlY3QocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpOworc3RhdGljIGludCBnY19sYXp5X3N3ZWVw KHJiX29ianNwYWNlX3QgKm9ianNwYWNlKTsKIAogdm9pZAogcmJfZ2xvYmFsX3ZhcmlhYmxlKFZB TFVFICp2YXIpCkBAIC04NzEsMTkgKzg5MSwxOSBAQCByYl9nY191bnJlZ2lzdGVyX2FkZHJlc3Mo VkFMVUUgKmFkZHIpCiAKIAogc3RhdGljIHZvaWQKLWFsbG9jYXRlX2hlYXBzKHJiX29ianNwYWNl X3QgKm9ianNwYWNlLCBzaXplX3QgbmV4dF9oZWFwc19sZW5ndGgpCithbGxvY2F0ZV9zb3J0ZWRf aGVhcHMocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIHNpemVfdCBuZXh0X2hlYXBzX2xlbmd0aCkK IHsKLSAgICBzdHJ1Y3QgaGVhcHNfc2xvdCAqcDsKLSAgICBzaXplX3Qgc2l6ZTsKKyAgICBzdHJ1 Y3Qgc29ydGVkX2hlYXBzX3Nsb3QgKnA7CisgICAgc2l6ZV90IHNpemUsIGk7CiAKLSAgICBzaXpl ID0gbmV4dF9oZWFwc19sZW5ndGgqc2l6ZW9mKHN0cnVjdCBoZWFwc19zbG90KTsKKyAgICBzaXpl ID0gbmV4dF9oZWFwc19sZW5ndGgqc2l6ZW9mKHN0cnVjdCBzb3J0ZWRfaGVhcHNfc2xvdCk7CiAK ICAgICBpZiAoaGVhcHNfdXNlZCA+IDApIHsKLQlwID0gKHN0cnVjdCBoZWFwc19zbG90ICopcmVh bGxvYyhoZWFwcywgc2l6ZSk7Ci0JaWYgKHApIGhlYXBzID0gcDsKKwlwID0gKHN0cnVjdCBzb3J0 ZWRfaGVhcHNfc2xvdCAqKXJlYWxsb2Mob2Jqc3BhY2UtPmhlYXAuc29ydGVkLCBzaXplKTsKKwlp ZiAocCkgb2Jqc3BhY2UtPmhlYXAuc29ydGVkID0gcDsKICAgICB9CiAgICAgZWxzZSB7Ci0JcCA9 IGhlYXBzID0gKHN0cnVjdCBoZWFwc19zbG90ICopbWFsbG9jKHNpemUpOworCXAgPSBvYmpzcGFj ZS0+aGVhcC5zb3J0ZWQgPSAoc3RydWN0IHNvcnRlZF9oZWFwc19zbG90ICopbWFsbG9jKHNpemUp OwogICAgIH0KIAogICAgIGlmIChwID09IDApIHsKQEAgLTg5NywxNyArOTE3LDI0IEBAIHN0YXRp YyB2b2lkCiBhc3NpZ25faGVhcF9zbG90KHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQogewogICAg IFJWQUxVRSAqcCwgKnBlbmQsICptZW1iYXNlOworICAgIHN0cnVjdCBoZWFwc19zbG90ICpzbG90 OwogICAgIHNpemVfdCBoaSwgbG8sIG1pZDsKICAgICBzaXplX3Qgb2JqczsKIAogICAgIG9ianMg PSBIRUFQX09CSl9MSU1JVDsKICAgICBwID0gKFJWQUxVRSopbWFsbG9jKEhFQVBfU0laRSk7Cisg ICAgc2xvdCA9IChzdHJ1Y3QgaGVhcHNfc2xvdCAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IGhlYXBz X3Nsb3QpKTsKKyAgICBNRU1aRVJPKCh2b2lkKilzbG90LCBzdHJ1Y3QgaGVhcHNfc2xvdCwgMSk7 CiAKLSAgICBpZiAocCA9PSAwKSB7CisgICAgaWYgKHAgPT0gMCB8fCBzbG90ID09IDApIHsKIAlk dXJpbmdfZ2MgPSAwOwogCXJiX21lbWVycm9yKCk7CiAgICAgfQogCisgICAgc2xvdC0+bmV4dCA9 IGhlYXBzOworICAgIGlmIChoZWFwcykgaGVhcHMtPnByZXYgPSBzbG90OworICAgIGhlYXBzID0g c2xvdDsKKwogICAgIG1lbWJhc2UgPSBwOwogICAgIGlmICgoVkFMVUUpcCAlIHNpemVvZihSVkFM VUUpICE9IDApIHsKIAlwID0gKFJWQUxVRSopKChWQUxVRSlwICsgc2l6ZW9mKFJWQUxVRSkgLSAo KFZBTFVFKXAgJSBzaXplb2YoUlZBTFVFKSkpOwpAQCAtOTIxLDcgKzk0OCw3IEBAIGFzc2lnbl9o ZWFwX3Nsb3QocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCiAgICAgd2hpbGUgKGxvIDwgaGkpIHsK IAlyZWdpc3RlciBSVkFMVUUgKm1pZF9tZW1iYXNlOwogCW1pZCA9IChsbyArIGhpKSAvIDI7Ci0J bWlkX21lbWJhc2UgPSBoZWFwc1ttaWRdLm1lbWJhc2U7CisJbWlkX21lbWJhc2UgPSBvYmpzcGFj ZS0+aGVhcC5zb3J0ZWRbbWlkXS5zbG90LT5tZW1iYXNlOwogCWlmIChtaWRfbWVtYmFzZSA8IG1l bWJhc2UpIHsKIAkgICAgbG8gPSBtaWQgKyAxOwogCX0KQEAgLTkzMywxMSArOTYwLDE0IEBAIGFz c2lnbl9oZWFwX3Nsb3QocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCiAJfQogICAgIH0KICAgICBp ZiAoaGkgPCBoZWFwc191c2VkKSB7Ci0JTUVNTU9WRSgmaGVhcHNbaGkrMV0sICZoZWFwc1toaV0s IHN0cnVjdCBoZWFwc19zbG90LCBoZWFwc191c2VkIC0gaGkpOwotICAgIH0KLSAgICBoZWFwc1to aV0ubWVtYmFzZSA9IG1lbWJhc2U7Ci0gICAgaGVhcHNbaGldLnNsb3QgPSBwOwotICAgIGhlYXBz W2hpXS5saW1pdCA9IG9ianM7CisJTUVNTU9WRSgmb2Jqc3BhY2UtPmhlYXAuc29ydGVkW2hpKzFd LCAmb2Jqc3BhY2UtPmhlYXAuc29ydGVkW2hpXSwgc3RydWN0IHNvcnRlZF9oZWFwc19zbG90LCBo ZWFwc191c2VkIC0gaGkpOworICAgIH0KKyAgICBvYmpzcGFjZS0+aGVhcC5zb3J0ZWRbaGldLnNs b3QgPSBzbG90OworICAgIG9ianNwYWNlLT5oZWFwLnNvcnRlZFtoaV0uc3RhcnQgPSBwOworICAg IG9ianNwYWNlLT5oZWFwLnNvcnRlZFtoaV0uZW5kID0gKHAgKyBvYmpzKTsKKyAgICBoZWFwcy0+ bWVtYmFzZSA9IG1lbWJhc2U7CisgICAgaGVhcHMtPnNsb3QgPSBwOworICAgIGhlYXBzLT5saW1p dCA9IG9ianM7CiAgICAgcGVuZCA9IHAgKyBvYmpzOwogICAgIGlmIChsb21lbSA9PSAwIHx8IGxv bWVtID4gcCkgbG9tZW0gPSBwOwogICAgIGlmIChoaW1lbSA8IHBlbmQpIGhpbWVtID0gcGVuZDsK QEAgLTk2Myw3ICs5OTMsNyBAQCBpbml0X2hlYXAocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCiAg ICAgfQogCiAgICAgaWYgKChoZWFwc191c2VkICsgYWRkKSA+IGhlYXBzX2xlbmd0aCkgewotICAg ICAgICBhbGxvY2F0ZV9oZWFwcyhvYmpzcGFjZSwgaGVhcHNfdXNlZCArIGFkZCk7CisgICAgICAg IGFsbG9jYXRlX3NvcnRlZF9oZWFwcyhvYmpzcGFjZSwgaGVhcHNfdXNlZCArIGFkZCk7CiAgICAg fQogCiAgICAgZm9yIChpID0gMDsgaSA8IGFkZDsgaSsrKSB7CkBAIC05ODYsNyArMTAxNiw3IEBA IHNldF9oZWFwc19pbmNyZW1lbnQocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCiAgICAgaGVhcHNf aW5jID0gbmV4dF9oZWFwc19sZW5ndGggLSBoZWFwc191c2VkOwogCiAgICAgaWYgKG5leHRfaGVh cHNfbGVuZ3RoID4gaGVhcHNfbGVuZ3RoKSB7Ci0JYWxsb2NhdGVfaGVhcHMob2Jqc3BhY2UsIG5l eHRfaGVhcHNfbGVuZ3RoKTsKKwlhbGxvY2F0ZV9zb3J0ZWRfaGVhcHMob2Jqc3BhY2UsIG5leHRf aGVhcHNfbGVuZ3RoKTsKICAgICB9CiB9CiAKQEAgLTEwMDksNyArMTAzOSw3IEBAIHJiX25ld29i al9mcm9tX2hlYXAocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCiAgICAgVkFMVUUgb2JqOwogCiAg ICAgaWYgKChydWJ5X2djX3N0cmVzcyAmJiAhcnVieV9kaXNhYmxlX2djX3N0cmVzcykgfHwgIWZy ZWVsaXN0KSB7Ci0JaWYgKCFoZWFwc19pbmNyZW1lbnQob2Jqc3BhY2UpICYmICFnYXJiYWdlX2Nv bGxlY3Qob2Jqc3BhY2UpKSB7CisJaWYgKCFnY19sYXp5X3N3ZWVwKG9ianNwYWNlKSkgewogCSAg ICBkdXJpbmdfZ2MgPSAwOwogCSAgICByYl9tZW1lcnJvcigpOwogCX0KQEAgLTEwMjMsNiArMTA1 Myw3IEBAIHJiX25ld29ial9mcm9tX2hlYXAocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCiAgICAg UkFOWShvYmopLT5maWxlID0gcmJfc291cmNlZmlsZSgpOwogICAgIFJBTlkob2JqKS0+bGluZSA9 IHJiX3NvdXJjZWxpbmUoKTsKICNlbmRpZgorICAgIEdDX1BST0ZfSU5DX0xJVkVfTlVNOwogCiAg ICAgcmV0dXJuIG9iajsKIH0KQEAgLTEyNTAsNyArMTI4MSw3IEBAIGdjX21hcmtfYWxsKHJiX29i anNwYWNlX3QgKm9ianNwYWNlKQogCiAgICAgaW5pdF9tYXJrX3N0YWNrKG9ianNwYWNlKTsKICAg ICBmb3IgKGkgPSAwOyBpIDwgaGVhcHNfdXNlZDsgaSsrKSB7Ci0JcCA9IGhlYXBzW2ldLnNsb3Q7 IHBlbmQgPSBwICsgaGVhcHNbaV0ubGltaXQ7CisJcCA9IG9ianNwYWNlLT5oZWFwLnNvcnRlZFtp XS5zdGFydDsgcGVuZCA9IG9ianNwYWNlLT5oZWFwLnNvcnRlZFtpXS5lbmQ7CiAJd2hpbGUgKHAg PCBwZW5kKSB7CiAJICAgIGlmICgocC0+YXMuYmFzaWMuZmxhZ3MgJiBGTF9NQVJLKSAmJgogCQko cC0+YXMuYmFzaWMuZmxhZ3MgIT0gRkxfTUFSSykpIHsKQEAgLTEyODEsNyArMTMxMiw3IEBAIHN0 YXRpYyBpbmxpbmUgaW50CiBpc19wb2ludGVyX3RvX2hlYXAocmJfb2Jqc3BhY2VfdCAqb2Jqc3Bh Y2UsIHZvaWQgKnB0cikKIHsKICAgICByZWdpc3RlciBSVkFMVUUgKnAgPSBSQU5ZKHB0cik7Ci0g ICAgcmVnaXN0ZXIgc3RydWN0IGhlYXBzX3Nsb3QgKmhlYXA7CisgICAgcmVnaXN0ZXIgc3RydWN0 IHNvcnRlZF9oZWFwc19zbG90ICpoZWFwOwogICAgIHJlZ2lzdGVyIHNpemVfdCBoaSwgbG8sIG1p ZDsKIAogICAgIGlmIChwIDwgbG9tZW0gfHwgcCA+IGhpbWVtKSByZXR1cm4gRkFMU0U7CkBAIC0x MjkyLDkgKzEzMjMsOSBAQCBpc19wb2ludGVyX3RvX2hlYXAocmJfb2Jqc3BhY2VfdCAqb2Jqc3Bh Y2UsIHZvaWQgKnB0cikKICAgICBoaSA9IGhlYXBzX3VzZWQ7CiAgICAgd2hpbGUgKGxvIDwgaGkp IHsKIAltaWQgPSAobG8gKyBoaSkgLyAyOwotCWhlYXAgPSAmaGVhcHNbbWlkXTsKLQlpZiAoaGVh cC0+c2xvdCA8PSBwKSB7Ci0JICAgIGlmIChwIDwgaGVhcC0+c2xvdCArIGhlYXAtPmxpbWl0KQor CWhlYXAgPSAmb2Jqc3BhY2UtPmhlYXAuc29ydGVkW21pZF07CisJaWYgKGhlYXAtPnN0YXJ0IDw9 IHApIHsKKwkgICAgaWYgKHAgPCBoZWFwLT5lbmQpCiAJCXJldHVybiBUUlVFOwogCSAgICBsbyA9 IG1pZCArIDE7CiAJfQpAQCAtMTQ5Niw2ICsxNTI3LDcgQEAgZ2NfbWFyayhyYl9vYmpzcGFjZV90 ICpvYmpzcGFjZSwgVkFMVUUgcHRyLCBpbnQgbGV2KQogICAgIGlmIChvYmotPmFzLmJhc2ljLmZs YWdzID09IDApIHJldHVybjsgICAgICAgLyogZnJlZSBjZWxsICovCiAgICAgaWYgKG9iai0+YXMu YmFzaWMuZmxhZ3MgJiBGTF9NQVJLKSByZXR1cm47ICAvKiBhbHJlYWR5IG1hcmtlZCAqLwogICAg IG9iai0+YXMuYmFzaWMuZmxhZ3MgfD0gRkxfTUFSSzsKKyAgICBvYmpzcGFjZS0+aGVhcC5saXZl X251bSsrOwogCiAgICAgaWYgKGxldiA+IEdDX0xFVkVMX01BWCB8fCAobGV2ID09IDAgJiYgc3Rh Y2tfY2hlY2soKSkpIHsKIAlpZiAoIW1hcmtfc3RhY2tfb3ZlcmZsb3cpIHsKQEAgLTE1MzEsNiAr MTU2Myw3IEBAIGdjX21hcmtfY2hpbGRyZW4ocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIFZBTFVF IHB0ciwgaW50IGxldikKICAgICBpZiAob2JqLT5hcy5iYXNpYy5mbGFncyA9PSAwKSByZXR1cm47 ICAgICAgIC8qIGZyZWUgY2VsbCAqLwogICAgIGlmIChvYmotPmFzLmJhc2ljLmZsYWdzICYgRkxf TUFSSykgcmV0dXJuOyAgLyogYWxyZWFkeSBtYXJrZWQgKi8KICAgICBvYmotPmFzLmJhc2ljLmZs YWdzIHw9IEZMX01BUks7CisgICAgb2Jqc3BhY2UtPmhlYXAubGl2ZV9udW0rKzsKIAogICBtYXJr aW5nOgogICAgIGlmIChGTF9URVNUKG9iaiwgRkxfRVhJVkFSKSkgewpAQCAtMTgwNSw3ICsxODM4 LDEzIEBAIGZpbmFsaXplX2xpc3QocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIFJWQUxVRSAqcCkK IAlSVkFMVUUgKnRtcCA9IHAtPmFzLmZyZWUubmV4dDsKIAlydW5fZmluYWwob2Jqc3BhY2UsIChW QUxVRSlwKTsKIAlpZiAoIUZMX1RFU1QocCwgRkxfU0lOR0xFVE9OKSkgeyAvKiBub3QgZnJlZWlu ZyBwYWdlICovCi0JICAgIGFkZF9mcmVlbGlzdChvYmpzcGFjZSwgcCk7CisgICAgICAgICAgICBp ZiAob2Jqc3BhY2UtPmhlYXAuc3dlZXBfc2xvdHMpIHsKKyAgICAgICAgICAgICAgICBwLT5hcy5m cmVlLmZsYWdzID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAg ICAgICAgICAgIEdDX1BST0ZfREVDX0xJVkVfTlVNOworICAgICAgICAgICAgICAgIGFkZF9mcmVl bGlzdChvYmpzcGFjZSwgcCk7CisgICAgICAgICAgICB9CiAJfQogCWVsc2UgewogCSAgICBzdHJ1 Y3QgaGVhcHNfc2xvdCAqc2xvdCA9IChzdHJ1Y3QgaGVhcHNfc2xvdCAqKShWQUxVRSlSREFUQShw KS0+ZG1hcms7CkBAIC0xODIyLDE4ICsxODYxLDI3IEBAIGZyZWVfdW51c2VkX2hlYXBzKHJiX29i anNwYWNlX3QgKm9ianNwYWNlKQogICAgIFJWQUxVRSAqbGFzdCA9IDA7CiAKICAgICBmb3IgKGkg PSBqID0gMTsgaiA8IGhlYXBzX3VzZWQ7IGkrKykgewotCWlmIChoZWFwc1tpXS5saW1pdCA9PSAw KSB7CisJaWYgKG9ianNwYWNlLT5oZWFwLnNvcnRlZFtpXS5zbG90LT5saW1pdCA9PSAwKSB7CiAJ ICAgIGlmICghbGFzdCkgewotCQlsYXN0ID0gaGVhcHNbaV0ubWVtYmFzZTsKKwkJbGFzdCA9IG9i anNwYWNlLT5oZWFwLnNvcnRlZFtpXS5zbG90LT5tZW1iYXNlOwogCSAgICB9CiAJICAgIGVsc2Ug ewotCQlmcmVlKGhlYXBzW2ldLm1lbWJhc2UpOworCQlmcmVlKG9ianNwYWNlLT5oZWFwLnNvcnRl ZFtpXS5zbG90LT5tZW1iYXNlKTsKIAkgICAgfQorICAgICAgICAgICAgaWYgKG9ianNwYWNlLT5o ZWFwLnNvcnRlZFtpXS5zbG90LT5wcmV2KQorICAgICAgICAgICAgICAgIG9ianNwYWNlLT5oZWFw LnNvcnRlZFtpXS5zbG90LT5wcmV2LT5uZXh0ID0gb2Jqc3BhY2UtPmhlYXAuc29ydGVkW2ldLnNs b3QtPm5leHQ7CisgICAgICAgICAgICBpZiAob2Jqc3BhY2UtPmhlYXAuc29ydGVkW2ldLnNsb3Qt Pm5leHQpCisgICAgICAgICAgICAgICAgb2Jqc3BhY2UtPmhlYXAuc29ydGVkW2ldLnNsb3QtPm5l eHQtPnByZXYgPSBvYmpzcGFjZS0+aGVhcC5zb3J0ZWRbaV0uc2xvdC0+cHJldjsKKyAgICAgICAg ICAgIGlmIChoZWFwcyA9PSBvYmpzcGFjZS0+aGVhcC5zb3J0ZWRbaV0uc2xvdCkKKyAgICAgICAg ICAgICAgICBoZWFwcyA9IG9ianNwYWNlLT5oZWFwLnNvcnRlZFtpXS5zbG90LT5uZXh0OworICAg ICAgICAgICAgaWYgKG9ianNwYWNlLT5oZWFwLnN3ZWVwX3Nsb3RzID09IG9ianNwYWNlLT5oZWFw LnNvcnRlZFtpXS5zbG90KQorICAgICAgICAgICAgICAgIG9ianNwYWNlLT5oZWFwLnN3ZWVwX3Ns b3RzID0gb2Jqc3BhY2UtPmhlYXAuc29ydGVkW2ldLnNsb3QtPm5leHQ7CisgICAgICAgICAgICBm cmVlKG9ianNwYWNlLT5oZWFwLnNvcnRlZFtpXS5zbG90KTsKIAkgICAgaGVhcHNfdXNlZC0tOwog CX0KIAllbHNlIHsKIAkgICAgaWYgKGkgIT0gaikgewotCQloZWFwc1tqXSA9IGhlYXBzW2ldOwor CQlvYmpzcGFjZS0+aGVhcC5zb3J0ZWRbal0gPSBvYmpzcGFjZS0+aGVhcC5zb3J0ZWRbaV07CiAJ ICAgIH0KIAkgICAgaisrOwogCX0KQEAgLTE4NTAsMTA0ICsxODk4LDIwNSBAQCBmcmVlX3VudXNl ZF9oZWFwcyhyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSkKIH0KIAogc3RhdGljIHZvaWQKLWdjX3N3 ZWVwKHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQorc2xvdF9zd2VlcChyYl9vYmpzcGFjZV90ICpv YmpzcGFjZSwgc3RydWN0IGhlYXBzX3Nsb3QgKnN3ZWVwX3Nsb3QpCiB7Ci0gICAgUlZBTFVFICpw LCAqcGVuZCwgKmZpbmFsX2xpc3Q7Ci0gICAgc2l6ZV90IGZyZWVkID0gMDsKLSAgICBzaXplX3Qg aTsKLSAgICBzaXplX3QgbGl2ZSA9IDAsIGZyZWVfbWluID0gMCwgZG9faGVhcF9mcmVlID0gMDsK LQotICAgIGRvX2hlYXBfZnJlZSA9IChzaXplX3QpKChoZWFwc191c2VkICogSEVBUF9PQkpfTElN SVQpICogMC42NSk7Ci0gICAgZnJlZV9taW4gPSAoc2l6ZV90KSgoaGVhcHNfdXNlZCAqIEhFQVBf T0JKX0xJTUlUKSAgKiAwLjIpOworICAgIHNpemVfdCBmcmVlX251bSA9IDAsIGZpbmFsX251bSA9 IDA7CisgICAgUlZBTFVFICpwLCAqcGVuZDsKKyAgICBSVkFMVUUgKmZyZWUgPSBmcmVlbGlzdCwg KmZpbmFsID0gZGVmZXJyZWRfZmluYWxfbGlzdDsKKyAgICBpbnQgZGVmZXJyZWQ7CiAKLSAgICBp ZiAoZnJlZV9taW4gPCBGUkVFX01JTikgewotCWRvX2hlYXBfZnJlZSA9IGhlYXBzX3VzZWQgKiBI RUFQX09CSl9MSU1JVDsKLSAgICAgICAgZnJlZV9taW4gPSBGUkVFX01JTjsKKyAgICBwID0gc3dl ZXBfc2xvdC0+c2xvdDsgcGVuZCA9IHAgKyBzd2VlcF9zbG90LT5saW1pdDsKKyAgICB3aGlsZSAo cCA8IHBlbmQpIHsKKyAgICAgICAgaWYgKCEocC0+YXMuYmFzaWMuZmxhZ3MgJiBGTF9NQVJLKSkg eworICAgICAgICAgICAgaWYgKHAtPmFzLmJhc2ljLmZsYWdzICYmCisgICAgICAgICAgICAgICAg KChkZWZlcnJlZCA9IG9ial9mcmVlKG9ianNwYWNlLCAoVkFMVUUpcCkpIHx8CisgICAgICAgICAg ICAgICAgICgoRkxfVEVTVChwLCBGTF9GSU5BTElaRSkpICYmIG5lZWRfY2FsbF9maW5hbCkpKSB7 CisgICAgICAgICAgICAgICAgaWYgKCFkZWZlcnJlZCkgeworICAgICAgICAgICAgICAgICAgICBw LT5hcy5mcmVlLmZsYWdzID0gVF9aT01CSUU7CisgICAgICAgICAgICAgICAgICAgIFJEQVRBKHAp LT5kZnJlZSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHAtPmFzLmZy ZWUuZmxhZ3MgfD0gRkxfTUFSSzsKKyAgICAgICAgICAgICAgICBwLT5hcy5mcmVlLm5leHQgPSBk ZWZlcnJlZF9maW5hbF9saXN0OworICAgICAgICAgICAgICAgIGRlZmVycmVkX2ZpbmFsX2xpc3Qg PSBwOworICAgICAgICAgICAgICAgIGZpbmFsX251bSsrOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYWRkX2ZyZWVsaXN0KG9ianNwYWNlLCBwKTsK KyAgICAgICAgICAgICAgICBmcmVlX251bSsrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGVsc2UgaWYgKEJVSUxUSU5fVFlQRShwKSA9PSBUX1pPTUJJRSkgeworICAgICAgICAg ICAgLyogb2JqZWN0cyB0byBiZSBmaW5hbGl6ZWQgKi8KKyAgICAgICAgICAgIC8qIGRvIG5vdGhp bmcgcmVtYWluIG1hcmtlZCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg ICAgUkJBU0lDKHApLT5mbGFncyAmPSB+RkxfTUFSSzsKKyAgICAgICAgfQorICAgICAgICBwKys7 CiAgICAgfQorICAgIGlmIChmaW5hbF9udW0gKyBmcmVlX251bSA9PSBzd2VlcF9zbG90LT5saW1p dCAmJgorICAgICAgICBvYmpzcGFjZS0+aGVhcC5mcmVlX251bSA+IG9ianNwYWNlLT5oZWFwLmRv X2hlYXBfZnJlZSkgeworICAgICAgICBSVkFMVUUgKnBwOwogCi0gICAgZnJlZWxpc3QgPSAwOwot ICAgIGZpbmFsX2xpc3QgPSBkZWZlcnJlZF9maW5hbF9saXN0OwotICAgIGRlZmVycmVkX2ZpbmFs X2xpc3QgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPCBoZWFwc191c2VkOyBpKyspIHsKLQlzaXpl X3QgZnJlZV9udW0gPSAwLCBmaW5hbF9udW0gPSAwOwotCVJWQUxVRSAqZnJlZSA9IGZyZWVsaXN0 OwotCVJWQUxVRSAqZmluYWwgPSBmaW5hbF9saXN0OwotCWludCBkZWZlcnJlZDsKKyAgICAgICAg Zm9yIChwcCA9IGRlZmVycmVkX2ZpbmFsX2xpc3Q7IHBwICE9IGZpbmFsOyBwcCA9IHBwLT5hcy5m cmVlLm5leHQpIHsKKyAgICAgICAgICAgIFJEQVRBKHBwKS0+ZG1hcmsgPSAodm9pZCAoKikoKSko VkFMVUUpc3dlZXBfc2xvdDsKKyAgICAgICAgICAgIHBwLT5hcy5mcmVlLmZsYWdzIHw9IEZMX1NJ TkdMRVRPTjsgLyogZnJlZWluZyBwYWdlIG1hcmsgKi8KKyAgICAgICAgfQorICAgICAgICBzd2Vl cF9zbG90LT5saW1pdCA9IGZpbmFsX251bTsKKyAgICAgICAgZnJlZWxpc3QgPSBmcmVlOwkvKiBj YW5jZWwgdGhpcyBwYWdlIGZyb20gZnJlZWxpc3QgKi8KKyAgICB9CisgICAgZWxzZSB7CisgICAg ICAgIG9ianNwYWNlLT5oZWFwLmZyZWVfbnVtICs9IGZyZWVfbnVtOworICAgIH0KK30KIAotCXAg PSBoZWFwc1tpXS5zbG90OyBwZW5kID0gcCArIGhlYXBzW2ldLmxpbWl0OwotCXdoaWxlIChwIDwg cGVuZCkgewotCSAgICBpZiAoIShwLT5hcy5iYXNpYy5mbGFncyAmIEZMX01BUkspKSB7Ci0JCWlm IChwLT5hcy5iYXNpYy5mbGFncyAmJgotCQkgICAgKChkZWZlcnJlZCA9IG9ial9mcmVlKG9ianNw YWNlLCAoVkFMVUUpcCkpIHx8Ci0JCSAgICAgKChGTF9URVNUKHAsIEZMX0ZJTkFMSVpFKSkgJiYg bmVlZF9jYWxsX2ZpbmFsKSkpIHsKLQkJICAgIGlmICghZGVmZXJyZWQpIHsKLQkJCXAtPmFzLmZy ZWUuZmxhZ3MgPSBUX1pPTUJJRTsKLQkJCVJEQVRBKHApLT5kZnJlZSA9IDA7Ci0JCSAgICB9Ci0J CSAgICBwLT5hcy5mcmVlLmZsYWdzIHw9IEZMX01BUks7Ci0JCSAgICBwLT5hcy5mcmVlLm5leHQg PSBmaW5hbF9saXN0OwotCQkgICAgZmluYWxfbGlzdCA9IHA7Ci0JCSAgICBmaW5hbF9udW0rKzsK LQkJfQotCQllbHNlIHsKLQkJICAgIGFkZF9mcmVlbGlzdChvYmpzcGFjZSwgcCk7Ci0JCSAgICBm cmVlX251bSsrOwotCQl9Ci0JICAgIH0KLQkgICAgZWxzZSBpZiAoQlVJTFRJTl9UWVBFKHApID09 IFRfWk9NQklFKSB7Ci0JCS8qIG9iamVjdHMgdG8gYmUgZmluYWxpemVkICovCi0JCS8qIGRvIG5v dGhpbmcgcmVtYWluIG1hcmtlZCAqLwotCSAgICB9Ci0JICAgIGVsc2UgewotCQlSQkFTSUMocCkt PmZsYWdzICY9IH5GTF9NQVJLOwotCQlsaXZlKys7Ci0JICAgIH0KLQkgICAgcCsrOworc3RhdGlj IGludAorcmVhZHlfdG9fZ2MocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCit7CisgICAgaWYgKGRv bnRfZ2MgfHwgZHVyaW5nX2djKSB7CisJaWYgKCFmcmVlbGlzdCkgeworICAgICAgICAgICAgaWYg KCFoZWFwc19pbmNyZW1lbnQob2Jqc3BhY2UpKSB7CisgICAgICAgICAgICAgICAgc2V0X2hlYXBz X2luY3JlbWVudChvYmpzcGFjZSk7CisgICAgICAgICAgICAgICAgaGVhcHNfaW5jcmVtZW50KG9i anNwYWNlKTsKKyAgICAgICAgICAgIH0KIAl9Ci0JaWYgKGZpbmFsX251bSArIGZyZWVfbnVtID09 IGhlYXBzW2ldLmxpbWl0ICYmIGZyZWVkID4gZG9faGVhcF9mcmVlKSB7Ci0JICAgIFJWQUxVRSAq cHA7Ci0KLQkgICAgZm9yIChwcCA9IGZpbmFsX2xpc3Q7IHBwICE9IGZpbmFsOyBwcCA9IHBwLT5h cy5mcmVlLm5leHQpIHsKLQkJUkRBVEEocHApLT5kbWFyayA9ICh2b2lkICgqKV8oKHZvaWQgKikp KShWQUxVRSkmaGVhcHNbaV07Ci0JCXBwLT5hcy5mcmVlLmZsYWdzIHw9IEZMX1NJTkdMRVRPTjsg LyogZnJlZWluZyBwYWdlIG1hcmsgKi8KLQkgICAgfQotCSAgICBoZWFwc1tpXS5saW1pdCA9IGZp bmFsX251bTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQogCi0J ICAgIGZyZWVsaXN0ID0gZnJlZTsJLyogY2FuY2VsIHRoaXMgcGFnZSBmcm9tIGZyZWVsaXN0ICov Ci0JfQotCWVsc2UgewotCSAgICBmcmVlZCArPSBmcmVlX251bTsKLQl9CitzdGF0aWMgdm9pZAor YmVmb3JlX2djX3N3ZWVwKHJiX29ianNwYWNlX3QgKm9ianNwYWNlLCBzaXplX3QgKmZyZWVfbWlu KQoreworICAgIHNpemVfdCBpID0gMDsKKyAgICBzdHJ1Y3QgaGVhcHNfc2xvdCAqZmluZF9zbG90 LCAqc2xvdDsKKyAgICBmcmVlbGlzdCA9IDA7CisgICAgb2Jqc3BhY2UtPmhlYXAuZG9faGVhcF9m cmVlID0gKHNpemVfdCkoKGhlYXBzX3VzZWQgKiBIRUFQX09CSl9MSU1JVCkgKiAwLjY1KTsKKyAg ICAqZnJlZV9taW4gPSAoc2l6ZV90KSgoaGVhcHNfdXNlZCAqIEhFQVBfT0JKX0xJTUlUKSAgKiAw LjIpOworICAgIGlmICgqZnJlZV9taW4gPCBGUkVFX01JTikgeworCW9ianNwYWNlLT5oZWFwLmRv X2hlYXBfZnJlZSA9IGhlYXBzX3VzZWQgKiBIRUFQX09CSl9MSU1JVDsKKyAgICAgICAgKmZyZWVf bWluID0gRlJFRV9NSU47CiAgICAgfQorICAgIG9ianNwYWNlLT5oZWFwLnN3ZWVwX3Nsb3RzID0g aGVhcHM7CisgICAgb2Jqc3BhY2UtPmhlYXAuZnJlZV9udW0gPSAwOworfQorCitzdGF0aWMgdm9p ZAorYWZ0ZXJfZ2Nfc3dlZXAocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCit7CisgICAgcmJfdGhy ZWFkX3QgKnRoID0gR0VUX1RIUkVBRCgpOwogICAgIEdDX1BST0ZfU0VUX01BTExPQ19JTkZPOwor CiAgICAgaWYgKG1hbGxvY19pbmNyZWFzZSA+IG1hbGxvY19saW1pdCkgewotCW1hbGxvY19saW1p dCArPSAoc2l6ZV90KSgobWFsbG9jX2luY3JlYXNlIC0gbWFsbG9jX2xpbWl0KSAqIChkb3VibGUp bGl2ZSAvIChsaXZlICsgZnJlZWQpKTsKKwltYWxsb2NfbGltaXQgKz0gKHNpemVfdCkoKG1hbGxv Y19pbmNyZWFzZSAtIG1hbGxvY19saW1pdCkgKiAoZG91YmxlKW9ianNwYWNlLT5oZWFwLmxpdmVf bnVtIC8gKGhlYXBzX3VzZWQgKiBIRUFQX09CSl9MSU1JVCkpOwogCWlmIChtYWxsb2NfbGltaXQg PCBHQ19NQUxMT0NfTElNSVQpIG1hbGxvY19saW1pdCA9IEdDX01BTExPQ19MSU1JVDsKICAgICB9 CiAgICAgbWFsbG9jX2luY3JlYXNlID0gMDsKLSAgICBpZiAoZnJlZWQgPCBmcmVlX21pbikgewot ICAgICAgICBzZXRfaGVhcHNfaW5jcmVtZW50KG9ianNwYWNlKTsKLSAgICAgICAgaGVhcHNfaW5j cmVtZW50KG9ianNwYWNlKTsKLSAgICB9Ci0gICAgZHVyaW5nX2djID0gMDsKIAotICAgIC8qIGNs ZWFyIGZpbmFsaXphdGlvbiBsaXN0ICovCi0gICAgaWYgKGZpbmFsX2xpc3QpIHsKLQlHQ19QUk9G X1NFVF9IRUFQX0lORk87Ci0JZGVmZXJyZWRfZmluYWxfbGlzdCA9IGZpbmFsX2xpc3Q7CisgICAg aWYgKGRlZmVycmVkX2ZpbmFsX2xpc3QpIHsKKyAgICAgICAgLyogY2xlYXIgZmluYWxpemF0aW9u IGxpc3QgKi8KIAlSVUJZX1ZNX1NFVF9GSU5BTElaRVJfSU5URVJSVVBUKEdFVF9USFJFQUQoKSk7 CiAgICAgfQogICAgIGVsc2V7CiAJZnJlZV91bnVzZWRfaGVhcHMob2Jqc3BhY2UpOwotCUdDX1BS T0ZfU0VUX0hFQVBfSU5GTzsKICAgICB9CisKKyAgICAvKiBzd2VlcCB1bmxpbmtlZCBtZXRob2Qg ZW50cmllcyAqLworICAgIGlmICh0aC0+dm0tPnVubGlua2VkX21ldGhvZF9lbnRyeV9saXN0KSB7 CisJcmJfc3dlZXBfbWV0aG9kX2VudHJ5KHRoLT52bSk7CisgICAgfQorfQorCitzdGF0aWMgaW50 CitsYXp5X3N3ZWVwKHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQoreworICAgIGhlYXBzX2luY3Jl bWVudChvYmpzcGFjZSk7CisgICAgd2hpbGUgKG9ianNwYWNlLT5oZWFwLnN3ZWVwX3Nsb3RzKSB7 CisgICAgICAgIHNsb3Rfc3dlZXAob2Jqc3BhY2UsIG9ianNwYWNlLT5oZWFwLnN3ZWVwX3Nsb3Rz KTsKKyAgICAgICAgb2Jqc3BhY2UtPmhlYXAuc3dlZXBfc2xvdHMgPSBvYmpzcGFjZS0+aGVhcC5z d2VlcF9zbG90cy0+bmV4dDsKKyAgICAgICAgaWYgKGZyZWVsaXN0KSB7CisgICAgICAgICAgICBk dXJpbmdfZ2MgPSAwOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9 CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBnY19tYXJrcyhyYl9vYmpzcGFj ZV90ICpvYmpzcGFjZSk7CisKK3N0YXRpYyBpbnQKK2djX2xhenlfc3dlZXAocmJfb2Jqc3BhY2Vf dCAqb2Jqc3BhY2UpCit7CisgICAgc2l6ZV90IGZyZWVfbWluOworICAgIGludCByZXM7CisKKyAg ICBJTklUX0dDX1BST0ZfUEFSQU1TOworCisgICAgaWYgKCFyZWFkeV90b19nYyhvYmpzcGFjZSkp IHJldHVybiBUUlVFOworCisgICAgZHVyaW5nX2djKys7CisgICAgR0NfUFJPRl9USU1FUl9TVEFS VDsKKyAgICBHQ19QUk9GX1NXRUVQX1RJTUVSX1NUQVJUOworCisgICAgaWYgKHJlcyA9IGxhenlf c3dlZXAob2Jqc3BhY2UpKSB7CisgICAgICAgIEdDX1BST0ZfU1dFRVBfVElNRVJfU1RPUDsKKyAg ICAgICAgR0NfUFJPRl9TRVRfTUFMTE9DX0lORk87CisgICAgICAgIEdDX1BST0ZfVElNRVJfU1RP UChRZmFsc2UpOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIGFmdGVyX2djX3N3 ZWVwKG9ianNwYWNlKTsKKworICAgIGdjX21hcmtzKG9ianNwYWNlKTsKKworICAgIGJlZm9yZV9n Y19zd2VlcChvYmpzcGFjZSwgJmZyZWVfbWluKTsKKyAgICBpZiAoZnJlZV9taW4gPiAoaGVhcHNf dXNlZCAqIEhFQVBfT0JKX0xJTUlUIC0gb2Jqc3BhY2UtPmhlYXAubGl2ZV9udW0pKSB7CisJc2V0 X2hlYXBzX2luY3JlbWVudChvYmpzcGFjZSk7CisgICAgfQorCisgICAgR0NfUFJPRl9TV0VFUF9U SU1FUl9TVEFSVDsKKyAgICByZXMgPSBsYXp5X3N3ZWVwKG9ianNwYWNlKTsKKyAgICBHQ19QUk9G X1NXRUVQX1RJTUVSX1NUT1A7CisKKyAgICBHQ19QUk9GX1RJTUVSX1NUT1AoUXRydWUpOworICAg IHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCitnY19zd2VlcChyYl9vYmpzcGFjZV90ICpv YmpzcGFjZSkKK3sKKyAgICBSVkFMVUUgKnAsICpwZW5kOworICAgIHNpemVfdCBpOworICAgIHNp emVfdCBmcmVlX21pbiA9IDA7CisKKyAgICBiZWZvcmVfZ2Nfc3dlZXAob2Jqc3BhY2UsICZmcmVl X21pbik7CisKKyAgICB3aGlsZSAob2Jqc3BhY2UtPmhlYXAuc3dlZXBfc2xvdHMpIHsKKwlzbG90 X3N3ZWVwKG9ianNwYWNlLCBvYmpzcGFjZS0+aGVhcC5zd2VlcF9zbG90cyk7CisgICAgICAgIG9i anNwYWNlLT5oZWFwLnN3ZWVwX3Nsb3RzID0gb2Jqc3BhY2UtPmhlYXAuc3dlZXBfc2xvdHMtPm5l eHQ7CisgICAgfQorCisgICAgaWYgKG9ianNwYWNlLT5oZWFwLmZyZWVfbnVtIDwgZnJlZV9taW4p IHsKKyAgICAgICAgc2V0X2hlYXBzX2luY3JlbWVudChvYmpzcGFjZSk7CisgICAgICAgIGhlYXBz X2luY3JlbWVudChvYmpzcGFjZSk7CisgICAgfQorCisgICAgYWZ0ZXJfZ2Nfc3dlZXAob2Jqc3Bh Y2UpOworCisgICAgZHVyaW5nX2djID0gMDsKIH0KIAogdm9pZAogcmJfZ2NfZm9yY2VfcmVjeWNs ZShWQUxVRSBwKQogewogICAgIHJiX29ianNwYWNlX3QgKm9ianNwYWNlID0gJnJiX29ianNwYWNl OwotICAgIGFkZF9mcmVlbGlzdChvYmpzcGFjZSwgKFJWQUxVRSAqKXApOworICAgIEdDX1BST0Zf REVDX0xJVkVfTlVNOworICAgIGlmIChSQkFTSUMocCktPmZsYWdzICYgRkxfTUFSSykgeworICAg ICAgICBSQU5ZKHApLT5hcy5mcmVlLmZsYWdzID0gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAg ICAgIGFkZF9mcmVlbGlzdChvYmpzcGFjZSwgKFJWQUxVRSAqKXApOworICAgIH0KIH0KIAogc3Rh dGljIGlubGluZSB2b2lkCkBAIC0yMTMzLDMzICsyMjgyLDUyIEBAIG1hcmtfY3VycmVudF9tYWNo aW5lX2NvbnRleHQocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIHJiX3RocmVhZF90ICp0aCkKIAog dm9pZCByYl9nY19tYXJrX2VuY29kaW5ncyh2b2lkKTsKIAotc3RhdGljIGludAotZ2FyYmFnZV9j b2xsZWN0KHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQorc3RhdGljIHZvaWQKK2djX21hcmtfYWxs X2NsZWFyKHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQoreworICAgIHN0cnVjdCBoZWFwc19zbG90 ICpzY2FuOworICAgIFJWQUxVRSAqcCwgKnBlbmQ7CisKKyAgICBpZiAob2Jqc3BhY2UtPmhlYXAu c3dlZXBfc2xvdHMpIHsKKyAgICAgICAgd2hpbGUgKG9ianNwYWNlLT5oZWFwLnN3ZWVwX3Nsb3Rz KSB7CisgICAgICAgICAgICBzY2FuID0gb2Jqc3BhY2UtPmhlYXAuc3dlZXBfc2xvdHM7CisgICAg ICAgICAgICBwID0gc2Nhbi0+c2xvdDsgcGVuZCA9IHAgKyBzY2FuLT5saW1pdDsKKyAgICAgICAg ICAgIHdoaWxlIChwIDwgcGVuZCkgeworICAgICAgICAgICAgICAgIGlmICghKFJCQVNJQyhwKS0+ ZmxhZ3MgJiBGTF9NQVJLKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocC0+YXMuYmFzaWMu ZmxhZ3MgJiYgIUZMX1RFU1QocCwgRkxfRklOQUxJWkUpKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBvYmpfZnJlZShvYmpzcGFjZSwgKFZBTFVFKXApOworICAgICAgICAgICAgICAgICAgICAg ICAgVkFMR1JJTkRfTUFLRV9NRU1fVU5ERUZJTkVEKCh2b2lkKilwLCBzaXplb2YoUlZBTFVFKSk7 CisgICAgICAgICAgICAgICAgICAgICAgICBwLT5hcy5mcmVlLmZsYWdzID0gMDsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlm IChSQkFTSUMocCktPmZsYWdzICE9IEZMX01BUkspIHsKKyAgICAgICAgICAgICAgICAgICAgcC0+ YXMuYmFzaWMuZmxhZ3MgJj0gfkZMX01BUks7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIHArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9ianNwYWNlLT5oZWFwLnN3 ZWVwX3Nsb3RzID0gb2Jqc3BhY2UtPmhlYXAuc3dlZXBfc2xvdHMtPm5leHQ7CisgICAgICAgIH0K KyAgICAgICAgcCA9IGRlZmVycmVkX2ZpbmFsX2xpc3Q7CisgICAgICAgIHdoaWxlKHApIHsKKyAg ICAgICAgICAgIHAtPmFzLmZyZWUuZmxhZ3MgfD0gRkxfTUFSSzsKKyAgICAgICAgICAgIHAgPSBw LT5hcy5mcmVlLm5leHQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitnY19t YXJrcyhyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSkKIHsKICAgICBzdHJ1Y3QgZ2NfbGlzdCAqbGlz dDsKICAgICByYl90aHJlYWRfdCAqdGggPSBHRVRfVEhSRUFEKCk7Ci0gICAgSU5JVF9HQ19QUk9G X1BBUkFNUzsKKyAgICBHQ19QUk9GX01BUktfVElNRVJfU1RBUlQ7CiAKLSAgICBpZiAoR0NfTk9U SUZZKSBwcmludGYoInN0YXJ0IGdhcmJhZ2VfY29sbGVjdCgpXG4iKTsKKyAgICBvYmpzcGFjZS0+ aGVhcC5saXZlX251bSA9IDA7CisgICAgb2Jqc3BhY2UtPmNvdW50Kys7CiAKLSAgICBpZiAoIWhl YXBzKSB7Ci0JcmV0dXJuIEZBTFNFOwotICAgIH0KIAotICAgIGlmIChkb250X2djIHx8IGR1cmlu Z19nYykgewotCWlmICghZnJlZWxpc3QpIHsKLSAgICAgICAgICAgIGlmICghaGVhcHNfaW5jcmVt ZW50KG9ianNwYWNlKSkgewotICAgICAgICAgICAgICAgIHNldF9oZWFwc19pbmNyZW1lbnQob2Jq c3BhY2UpOwotICAgICAgICAgICAgICAgIGhlYXBzX2luY3JlbWVudChvYmpzcGFjZSk7Ci0gICAg ICAgICAgICB9Ci0JfQotCXJldHVybiBUUlVFOwotICAgIH0KLSAgICBkdXJpbmdfZ2MrKzsKLSAg ICBvYmpzcGFjZS0+Y291bnQrKzsKKyAgICBnY19tYXJrX2FsbF9jbGVhcihvYmpzcGFjZSk7CiAK LSAgICBHQ19QUk9GX1RJTUVSX1NUQVJUOwotICAgIEdDX1BST0ZfTUFSS19USU1FUl9TVEFSVDsK ICAgICBTRVRfU1RBQ0tfRU5EOwogCiAgICAgaW5pdF9tYXJrX3N0YWNrKG9ianNwYWNlKTsKQEAg LTIyMDAsMTcgKzIzNjgsMzIgQEAgZ2FyYmFnZV9jb2xsZWN0KHJiX29ianNwYWNlX3QgKm9ianNw YWNlKQogCX0KICAgICB9CiAgICAgR0NfUFJPRl9NQVJLX1RJTUVSX1NUT1A7Cit9CisKK3N0YXRp YyBpbnQKK2dhcmJhZ2VfY29sbGVjdChyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSkKK3sKKyAgICBJ TklUX0dDX1BST0ZfUEFSQU1TOworCisgICAgaWYgKEdDX05PVElGWSkgcHJpbnRmKCJzdGFydCBn YXJiYWdlX2NvbGxlY3QoKVxuIik7CisKKyAgICBpZiAoIWhlYXBzKSB7CisJcmV0dXJuIEZBTFNF OworICAgIH0KKyAgICBpZiAoIXJlYWR5X3RvX2djKG9ianNwYWNlKSkgeworICAgICAgICByZXR1 cm4gVFJVRTsKKyAgICB9CisKKyAgICBHQ19QUk9GX1RJTUVSX1NUQVJUOworCisgICAgZHVyaW5n X2djKys7CisgICAgZ2NfbWFya3Mob2Jqc3BhY2UpOwogCiAgICAgR0NfUFJPRl9TV0VFUF9USU1F Ul9TVEFSVDsKICAgICBnY19zd2VlcChvYmpzcGFjZSk7CiAgICAgR0NfUFJPRl9TV0VFUF9USU1F Ul9TVE9QOwogCi0gICAgLyogc3dlZXAgdW5saW5rZWQgbWV0aG9kIGVudHJpZXMgKi8KLSAgICBp ZiAodGgtPnZtLT51bmxpbmtlZF9tZXRob2RfZW50cnlfbGlzdCkgewotCXJiX3N3ZWVwX21ldGhv ZF9lbnRyeSh0aC0+dm0pOwotICAgIH0KLQotICAgIEdDX1BST0ZfVElNRVJfU1RPUDsKKyAgICBH Q19QUk9GX1RJTUVSX1NUT1AoUXRydWUpOwogICAgIGlmIChHQ19OT1RJRlkpIHByaW50ZigiZW5k IGdhcmJhZ2VfY29sbGVjdCgpXG4iKTsKICAgICByZXR1cm4gVFJVRTsKIH0KQEAgLTIzNDYsMTYg KzI1MjksMTYgQEAgcmJfb2Jqc3BhY2VfZWFjaF9vYmplY3RzKGludCAoKmNhbGxiYWNrKSh2b2lk ICp2c3RhcnQsIHZvaWQgKnZlbmQsCiAKICAgICBpID0gMDsKICAgICB3aGlsZSAoaSA8IGhlYXBz X3VzZWQpIHsKLQl3aGlsZSAoMCA8IGkgJiYgKHVpbnRwdHJfdCltZW1iYXNlIDwgKHVpbnRwdHJf dCloZWFwc1tpLTFdLm1lbWJhc2UpCisJd2hpbGUgKDAgPCBpICYmICh1aW50cHRyX3QpbWVtYmFz ZSA8ICh1aW50cHRyX3Qpb2Jqc3BhY2UtPmhlYXAuc29ydGVkW2ktMV0uc2xvdC0+bWVtYmFzZSkK IAkgIGktLTsKLQl3aGlsZSAoaSA8IGhlYXBzX3VzZWQgJiYgKHVpbnRwdHJfdCloZWFwc1tpXS5t ZW1iYXNlIDw9ICh1aW50cHRyX3QpbWVtYmFzZSApCisJd2hpbGUgKGkgPCBoZWFwc191c2VkICYm ICh1aW50cHRyX3Qpb2Jqc3BhY2UtPmhlYXAuc29ydGVkW2ldLnNsb3QtPm1lbWJhc2UgPD0gKHVp bnRwdHJfdCltZW1iYXNlICkKIAkgIGkrKzsKIAlpZiAoaGVhcHNfdXNlZCA8PSBpKQogCSAgYnJl YWs7Ci0JbWVtYmFzZSA9IGhlYXBzW2ldLm1lbWJhc2U7CisJbWVtYmFzZSA9IG9ianNwYWNlLT5o ZWFwLnNvcnRlZFtpXS5zbG90LT5tZW1iYXNlOwogCi0JcHN0YXJ0ID0gaGVhcHNbaV0uc2xvdDsK LQlwZW5kID0gcHN0YXJ0ICsgaGVhcHNbaV0ubGltaXQ7CisJcHN0YXJ0ID0gb2Jqc3BhY2UtPmhl YXAuc29ydGVkW2ldLnNsb3QtPnNsb3Q7CisJcGVuZCA9IHBzdGFydCArIG9ianNwYWNlLT5oZWFw LnNvcnRlZFtpXS5zbG90LT5saW1pdDsKIAogCWZvciAoOyBwc3RhcnQgIT0gcGVuZDsgcHN0YXJ0 KyspIHsKIAkgICAgaWYgKHBzdGFydC0+YXMuYmFzaWMuZmxhZ3MpIHsKQEAgLTI3MDUsNyArMjg4 OCw3IEBAIHJiX29ianNwYWNlX2NhbGxfZmluYWxpemVyKHJiX29ianNwYWNlX3QgKm9ianNwYWNl KQogICAgIGR1cmluZ19nYysrOwogICAgIC8qIHJ1biBkYXRhIG9iamVjdCdzIGZpbmFsaXplcnMg Ki8KICAgICBmb3IgKGkgPSAwOyBpIDwgaGVhcHNfdXNlZDsgaSsrKSB7Ci0JcCA9IGhlYXBzW2ld LnNsb3Q7IHBlbmQgPSBwICsgaGVhcHNbaV0ubGltaXQ7CisJcCA9IG9ianNwYWNlLT5oZWFwLnNv cnRlZFtpXS5zdGFydDsgcGVuZCA9IG9ianNwYWNlLT5oZWFwLnNvcnRlZFtpXS5lbmQ7CiAJd2hp bGUgKHAgPCBwZW5kKSB7CiAJICAgIGlmIChCVUlMVElOX1RZUEUocCkgPT0gVF9EQVRBICYmCiAJ CURBVEFfUFRSKHApICYmIFJBTlkocCktPmFzLmRhdGEuZGZyZWUgJiYKQEAgLTI5MTcsNyArMzEw MCw3IEBAIGNvdW50X29iamVjdHMoaW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBvcykKICAg ICBmb3IgKGkgPSAwOyBpIDwgaGVhcHNfdXNlZDsgaSsrKSB7CiAgICAgICAgIFJWQUxVRSAqcCwg KnBlbmQ7CiAKLSAgICAgICAgcCA9IGhlYXBzW2ldLnNsb3Q7IHBlbmQgPSBwICsgaGVhcHNbaV0u bGltaXQ7CisgICAgICAgIHAgPSBvYmpzcGFjZS0+aGVhcC5zb3J0ZWRbaV0uc3RhcnQ7IHBlbmQg PSBvYmpzcGFjZS0+aGVhcC5zb3J0ZWRbaV0uZW5kOwogICAgICAgICBmb3IgKDtwIDwgcGVuZDsg cCsrKSB7CiAgICAgICAgICAgICBpZiAocC0+YXMuYmFzaWMuZmxhZ3MpIHsKICAgICAgICAgICAg ICAgICBjb3VudHNbQlVJTFRJTl9UWVBFKHApXSsrOwpAQCAtMjkyNiw3ICszMTA5LDcgQEAgY291 bnRfb2JqZWN0cyhpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIG9zKQogICAgICAgICAgICAg ICAgIGZyZWVkKys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgdG90YWwgKz0g aGVhcHNbaV0ubGltaXQ7CisgICAgICAgIHRvdGFsICs9IG9ianNwYWNlLT5oZWFwLnNvcnRlZFtp XS5zbG90LT5saW1pdDsKICAgICB9CiAKICAgICBpZiAoaGFzaCA9PSBRbmlsKSB7CkBAIC0zMDQ0 LDYgKzMyMjcsNyBAQCBnY19wcm9maWxlX3JlY29yZF9nZXQodm9pZCkKICAgICAgICAgcmJfaGFz aF9hc2V0KHByb2YsIElEMlNZTShyYl9pbnRlcm4oIkhFQVBfVVNFX1NJWkUiKSksIHJiX3VpbnQy aW51bShvYmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRbaV0uaGVhcF91c2Vfc2l6ZSkpOwogICAgICAg ICByYl9oYXNoX2FzZXQocHJvZiwgSUQyU1lNKHJiX2ludGVybigiSEVBUF9UT1RBTF9TSVpFIikp LCByYl91aW50MmludW0ob2Jqc3BhY2UtPnByb2ZpbGUucmVjb3JkW2ldLmhlYXBfdG90YWxfc2l6 ZSkpOwogICAgICAgICByYl9oYXNoX2FzZXQocHJvZiwgSUQyU1lNKHJiX2ludGVybigiSEVBUF9U T1RBTF9PQkpFQ1RTIikpLCByYl91aW50MmludW0ob2Jqc3BhY2UtPnByb2ZpbGUucmVjb3JkW2ld LmhlYXBfdG90YWxfb2JqZWN0cykpOworICAgICAgICByYl9oYXNoX2FzZXQocHJvZiwgSUQyU1lN KHJiX2ludGVybigiR0NfSVNfTUFSS0VEIikpLCBvYmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRbaV0u aXNfbWFya2VkKTsKICNpZiBHQ19QUk9GSUxFX01PUkVfREVUQUlMCiAgICAgICAgIHJiX2hhc2hf YXNldChwcm9mLCBJRDJTWU0ocmJfaW50ZXJuKCJHQ19NQVJLX1RJTUUiKSksIERCTDJOVU0ob2Jq c3BhY2UtPnByb2ZpbGUucmVjb3JkW2ldLmdjX21hcmtfdGltZSkpOwogICAgICAgICByYl9oYXNo X2FzZXQocHJvZiwgSUQyU1lNKHJiX2ludGVybigiR0NfU1dFRVBfVElNRSIpKSwgREJMMk5VTShv YmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRbaV0uZ2Nfc3dlZXBfdGltZSkpOwpAQCAtMzA3OCwyOSAr MzI2MiwzNyBAQCBnY19wcm9maWxlX3Jlc3VsdCh2b2lkKQogICAgIHJiX29ianNwYWNlX3QgKm9i anNwYWNlID0gJnJiX29ianNwYWNlOwogICAgIFZBTFVFIHJlY29yZDsKICAgICBWQUxVRSByZXN1 bHQ7Ci0gICAgaW50IGk7CisgICAgaW50IGksIGluZGV4OwogCiAgICAgcmVjb3JkID0gZ2NfcHJv ZmlsZV9yZWNvcmRfZ2V0KCk7CiAgICAgaWYgKG9ianNwYWNlLT5wcm9maWxlLnJ1biAmJiBvYmpz cGFjZS0+cHJvZmlsZS5jb3VudCkgewogCXJlc3VsdCA9IHJiX3NwcmludGYoIkdDICVkIGludm9r ZXMuXG4iLCBOVU0ySU5UKGdjX2NvdW50KDApKSk7CisgICAgICAgIGluZGV4ID0gMDsKIAlyYl9z dHJfY2F0MihyZXN1bHQsICJJbmRleCAgICBJbnZva2UgVGltZShzZWMpICAgICAgIFVzZSBTaXpl KGJ5dGUpICAgICBUb3RhbCBTaXplKGJ5dGUpICAgICAgICAgVG90YWwgT2JqZWN0ICAgICAgICAg ICAgICAgICAgICBHQyBUaW1lKG1zKVxuIik7CiAJZm9yIChpID0gMDsgaSA8IChpbnQpUkFSUkFZ X0xFTihyZWNvcmQpOyBpKyspIHsKIAkgICAgVkFMVUUgciA9IFJBUlJBWV9QVFIocmVjb3JkKVtp XTsKKyNpZiAhR0NfUFJPRklMRV9NT1JFX0RFVEFJTAorICAgICAgICAgICAgaWYgKHJiX2hhc2hf YXJlZihyLCBJRDJTWU0ocmJfaW50ZXJuKCJHQ19JU19NQVJLRUQiKSkpKSB7CisjZW5kaWYKIAkg ICAgcmJfc3RyX2NhdGYocmVzdWx0LCAiJTVkICUxOS4zZiAlMjBkICUyMGQgJTIwZCAlMzAuMjBm XG4iLAotCQkJaSsxLCBOVU0yREJMKHJiX2hhc2hfYXJlZihyLCBJRDJTWU0ocmJfaW50ZXJuKCJH Q19JTlZPS0VfVElNRSIpKSkpLAorCQkJaW5kZXgrKywgTlVNMkRCTChyYl9oYXNoX2FyZWYociwg SUQyU1lNKHJiX2ludGVybigiR0NfSU5WT0tFX1RJTUUiKSkpKSwKIAkJCU5VTTJJTlQocmJfaGFz aF9hcmVmKHIsIElEMlNZTShyYl9pbnRlcm4oIkhFQVBfVVNFX1NJWkUiKSkpKSwKIAkJCU5VTTJJ TlQocmJfaGFzaF9hcmVmKHIsIElEMlNZTShyYl9pbnRlcm4oIkhFQVBfVE9UQUxfU0laRSIpKSkp LAogCQkJTlVNMklOVChyYl9oYXNoX2FyZWYociwgSUQyU1lNKHJiX2ludGVybigiSEVBUF9UT1RB TF9PQkpFQ1RTIikpKSksCiAJCQlOVU0yREJMKHJiX2hhc2hfYXJlZihyLCBJRDJTWU0ocmJfaW50 ZXJuKCJHQ19USU1FIikpKSkqMTAwMCk7CisjaWYgIUdDX1BST0ZJTEVfTU9SRV9ERVRBSUwKKyAg ICAgICAgICAgIH0KKyNlbmRpZgogCX0KICNpZiBHQ19QUk9GSUxFX01PUkVfREVUQUlMCiAJcmJf c3RyX2NhdDIocmVzdWx0LCAiXG5cbiIpOwogCXJiX3N0cl9jYXQyKHJlc3VsdCwgIk1vcmUgZGV0 YWlsLlxuIik7CiAJcmJfc3RyX2NhdDIocmVzdWx0LCAiSW5kZXggQWxsb2NhdGUgSW5jcmVhc2Ug ICAgQWxsb2NhdGUgTGltaXQgIFVzZSBTbG90ICBIYXZlIEZpbmFsaXplICAgICAgICAgICAgIE1h cmsgVGltZShtcykgICAgICAgICAgICBTd2VlcCBUaW1lKG1zKVxuIik7CisgICAgICAgIGluZGV4 ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgKGludClSQVJSQVlfTEVOKHJlY29yZCk7IGkrKykgewog CSAgICBWQUxVRSByID0gUkFSUkFZX1BUUihyZWNvcmQpW2ldOwogCSAgICByYl9zdHJfY2F0Zihy ZXN1bHQsICIlNWQgJTE3ZCAlMTdkICU5ZCAlMTRzICUyNS4yMGYgJTI1LjIwZlxuIiwKLQkJCWkr MSwgTlVNMklOVChyYl9oYXNoX2FyZWYociwgSUQyU1lNKHJiX2ludGVybigiQUxMT0NBVEVfSU5D UkVBU0UiKSkpKSwKKwkJCWluZGV4KyssIE5VTTJJTlQocmJfaGFzaF9hcmVmKHIsIElEMlNZTShy Yl9pbnRlcm4oIkFMTE9DQVRFX0lOQ1JFQVNFIikpKSksCiAJCQlOVU0ySU5UKHJiX2hhc2hfYXJl ZihyLCBJRDJTWU0ocmJfaW50ZXJuKCJBTExPQ0FURV9MSU1JVCIpKSkpLAogCQkJTlVNMklOVChy Yl9oYXNoX2FyZWYociwgSUQyU1lNKHJiX2ludGVybigiSEVBUF9VU0VfU0xPVFMiKSkpKSwKIAkJ CXJiX2hhc2hfYXJlZihyLCBJRDJTWU0ocmJfaW50ZXJuKCJIQVZFX0ZJTkFMSVpFIikpKT8gInRy dWUiIDogImZhbHNlIiwKQEAgLTMxNjIsNiArMzM1NCw3IEBAIGdjX3Byb2ZpbGVfdG90YWxfdGlt ZShWQUxVRSBzZWxmKQogICAgIHJldHVybiBEQkwyTlVNKHRpbWUpOwogfQogCisKIC8qCiAgKiAg VGhlIDxjb2RlPkdDPC9jb2RlPiBtb2R1bGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIFJ1Ynkn cyBtYXJrIGFuZAogICogIHN3ZWVwIGdhcmJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20uIFNvbWUg b2YgdGhlIHVuZGVybHlpbmcgbWV0aG9kcwpkaWZmIC0tZ2l0IGEvb2JqZWN0LmMgYi9vYmplY3Qu YwppbmRleCBhN2YwNWExLi44MDhhZDI5IDEwMDY0NAotLS0gYS9vYmplY3QuYworKysgYi9vYmpl Y3QuYwpAQCAtMjY0LDcgKzI2NCw3IEBAIHJiX29ial9jbG9uZShWQUxVRSBvYmopCiAgICAgfQog ICAgIGNsb25lID0gcmJfb2JqX2FsbG9jKHJiX29ial9jbGFzcyhvYmopKTsKICAgICBSQkFTSUMo Y2xvbmUpLT5rbGFzcyA9IHJiX3NpbmdsZXRvbl9jbGFzc19jbG9uZShvYmopOwotICAgIFJCQVNJ QyhjbG9uZSktPmZsYWdzID0gKFJCQVNJQyhvYmopLT5mbGFncyB8IEZMX1RFU1QoY2xvbmUsIEZM X1RBSU5UKSB8IEZMX1RFU1QoY2xvbmUsIEZMX1VOVFJVU1RFRCkpICYgfihGTF9GUkVFWkV8Rkxf RklOQUxJWkUpOworICAgIFJCQVNJQyhjbG9uZSktPmZsYWdzID0gKFJCQVNJQyhvYmopLT5mbGFn cyB8IEZMX1RFU1QoY2xvbmUsIEZMX1RBSU5UKSB8IEZMX1RFU1QoY2xvbmUsIEZMX1VOVFJVU1RF RCkpICYgfihGTF9GUkVFWkV8RkxfRklOQUxJWkV8RkxfTUFSSyk7CiAgICAgaW5pdF9jb3B5KGNs b25lLCBvYmopOwogICAgIHJiX2Z1bmNhbGwoY2xvbmUsIGlkX2luaXRfY2xvbmUsIDEsIG9iaik7 CiAgICAgUkJBU0lDKGNsb25lKS0+ZmxhZ3MgfD0gUkJBU0lDKG9iaiktPmZsYWdzICYgRkxfRlJF RVpFOwo= --e0cb4e88788fe51b3d0487990bc3--