From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr0-x244.google.com (mail-wr0-x244.google.com [IPv6:2a00:1450:400c:c0c::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 115146E8A7 for ; Wed, 31 Jan 2018 12:34:51 +0000 (UTC) Received: by mail-wr0-x244.google.com with SMTP id g21so14769584wrb.13 for ; Wed, 31 Jan 2018 04:34:51 -0800 (PST) From: Tvrtko Ursulin Date: Wed, 31 Jan 2018 12:34:40 +0000 Message-Id: <20180131123441.32102-1-tvrtko.ursulin@linux.intel.com> Subject: [igt-dev] [PATCH i-g-t 1/2] lib/dummyload: Allow spin batches to be restarted List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Tvrtko Ursulin List-ID: RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClRoaXMgYWRk cyB0aGUgaWd0X3NwaW5fYmF0Y2hfcmVzdGFydCBBUEkgc28gc2FtZSBzcGluIGJhdGNoIGNhbiBi ZQpyZS11c2VkIGluIHRlc3RzIHdoaWNoIGNhcmUgYWJvdXQgbG93IHNldHVwIGNvc3QuCgpCYXRj aCB3aWxsIGJlIHJlLXN1Ym1pdGVkIGluIHRoZSBtYW5uZXIgY29tcGxldGVseSBpZGVudGljYWwg dG8gYXMKaXQgd2FzIG9yaWdpbmFsbHkgc3VibWl0dGVkLgoKU2lnbmVkLW9mZi1ieTogVHZydGtv IFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0tCiBsaWIvaWd0X2R1bW15bG9h ZC5jIHwgMTUwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0t LS0tLS0KIGxpYi9pZ3RfZHVtbXlsb2FkLmggfCAgIDkgKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAx MDYgaW5zZXJ0aW9ucygrKSwgNTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliL2lndF9k dW1teWxvYWQuYyBiL2xpYi9pZ3RfZHVtbXlsb2FkLmMKaW5kZXggMjdlYjQwMmJiNjk5Li4xMDJl ZmQxOTdlNWIgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3RfZHVtbXlsb2FkLmMKKysrIGIvbGliL2lndF9k dW1teWxvYWQuYwpAQCAtNzEsNiArNzEsMzUgQEAgZmlsbF9yZWxvYyhzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jLAogCXJlbG9jLT53cml0ZV9kb21haW4gPSB3cml0 ZV9kb21haW5zOwogfQogCitzdGF0aWMgaW50IF9faWd0X3NwaW5fYmF0Y2hfc3VibWl0KGludCBm ZCwgaWd0X3NwaW5fdCAqc3BpbikKK3sKKwlpbnQgZmVuY2VfZmQgPSAtMTsKKwl1bnNpZ25lZCBp bnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzcGluLT5uZW5naW5lOyBpKyspIHsKKwkJc3Bpbi0+ ZXhlY2J1Zi5mbGFncyAmPSB+RU5HSU5FX01BU0s7CisJCXNwaW4tPmV4ZWNidWYuZmxhZ3MgfD0g c3Bpbi0+ZW5naW5lc1tpXTsKKwkJZ2VtX2V4ZWNidWZfd3IoZmQsICZzcGluLT5leGVjYnVmKTsK KwkJaWYgKHNwaW4tPm91dF9mZW5jZV9yZXF1ZXN0ZWQpIHsKKwkJCWludCBfZmQgPSBzcGluLT5l eGVjYnVmLnJzdmQyID4+IDMyOworCisJCQlpZ3RfYXNzZXJ0KF9mZCA+PSAwKTsKKwkJCWlmIChm ZW5jZV9mZCA9PSAtMSkgeworCQkJCWZlbmNlX2ZkID0gX2ZkOworCQkJfSBlbHNlIHsKKwkJCQlp bnQgb2xkX2ZkID0gZmVuY2VfZmQ7CisKKwkJCQlmZW5jZV9mZCA9IHN5bmNfZmVuY2VfbWVyZ2Uo b2xkX2ZkLCBfZmQpOworCQkJCWNsb3NlKG9sZF9mZCk7CisJCQkJY2xvc2UoX2ZkKTsKKwkJCX0K KwkJCWlndF9hc3NlcnQoZmVuY2VfZmQgPj0gMCk7CisJCX0KKwl9CisKKwlyZXR1cm4gZmVuY2Vf ZmQ7Cit9CisKIHN0YXRpYyBpbnQgZW1pdF9yZWN1cnNpdmVfYmF0Y2goaWd0X3NwaW5fdCAqc3Bp biwKIAkJCQlpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgZW5naW5lLAogCQkJCXVpbnQz Ml90IGRlcCwgYm9vbCBvdXRfZmVuY2UpCkBAIC03OCw1MiArMTA3LDQ2IEBAIHN0YXRpYyBpbnQg ZW1pdF9yZWN1cnNpdmVfYmF0Y2goaWd0X3NwaW5fdCAqc3BpbiwKICNkZWZpbmUgU0NSQVRDSCAw CiAjZGVmaW5lIEJBVENIIDEKIAljb25zdCBpbnQgZ2VuID0gaW50ZWxfZ2VuKGludGVsX2dldF9k cm1fZGV2aWQoZmQpKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmpbMl07 Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jc1syXTsKLQlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Ci0JdW5zaWduZWQgaW50IGVuZ2lu ZXNbMTZdOwotCXVuc2lnbmVkIGludCBuZW5naW5lOwotCWludCBmZW5jZV9mZCA9IC0xOwogCXVp bnQzMl90ICpiYXRjaDsKLQlpbnQgaTsKIAotCW5lbmdpbmUgPSAwOworCXNwaW4tPm5lbmdpbmUg PSAwOwogCWlmIChlbmdpbmUgPT0gLTEpIHsKIAkJZm9yX2VhY2hfZW5naW5lKGZkLCBlbmdpbmUp CiAJCQlpZiAoZW5naW5lKQotCQkJCWVuZ2luZXNbbmVuZ2luZSsrXSA9IGVuZ2luZTsKKwkJCQlz cGluLT5lbmdpbmVzW3NwaW4tPm5lbmdpbmUrK10gPSBlbmdpbmU7CiAJfSBlbHNlIHsKIAkJZ2Vt X3JlcXVpcmVfcmluZyhmZCwgZW5naW5lKTsKLQkJZW5naW5lc1tuZW5naW5lKytdID0gZW5naW5l OworCQlzcGluLT5lbmdpbmVzW3NwaW4tPm5lbmdpbmUrK10gPSBlbmdpbmU7CiAJfQotCWlndF9y ZXF1aXJlKG5lbmdpbmUpOworCWlndF9yZXF1aXJlKHNwaW4tPm5lbmdpbmUpOwogCi0JbWVtc2V0 KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOwotCW1lbXNldChvYmosIDAsIHNpemVvZihv YmopKTsKLQltZW1zZXQocmVsb2NzLCAwLCBzaXplb2YocmVsb2NzKSk7CisJbWVtc2V0KCZzcGlu LT5leGVjYnVmLCAwLCBzaXplb2Yoc3Bpbi0+ZXhlY2J1ZikpOworCW1lbXNldChzcGluLT5vYmos IDAsIHNpemVvZihzcGluLT5vYmopKTsKKwltZW1zZXQoc3Bpbi0+cmVsb2NzLCAwLCBzaXplb2Yo c3Bpbi0+cmVsb2NzKSk7CiAKLQlvYmpbQkFUQ0hdLmhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJB VENIX1NJWkUpOwotCWJhdGNoID0gX19nZW1fbW1hcF9fd2MoZmQsIG9ialtCQVRDSF0uaGFuZGxl LAorCXNwaW4tPm9ialtCQVRDSF0uaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQkFUQ0hfU0laRSk7 CisJYmF0Y2ggPSBfX2dlbV9tbWFwX193YyhmZCwgc3Bpbi0+b2JqW0JBVENIXS5oYW5kbGUsCiAJ CQkgICAgICAgMCwgQkFUQ0hfU0laRSwgUFJPVF9XUklURSk7CiAJaWYgKCFiYXRjaCkKLQkJYmF0 Y2ggPSBfX2dlbV9tbWFwX19ndHQoZmQsIG9ialtCQVRDSF0uaGFuZGxlLAorCQliYXRjaCA9IF9f Z2VtX21tYXBfX2d0dChmZCwgc3Bpbi0+b2JqW0JBVENIXS5oYW5kbGUsCiAJCQkJICAgICAgIAlC QVRDSF9TSVpFLCBQUk9UX1dSSVRFKTsKLQlnZW1fc2V0X2RvbWFpbihmZCwgb2JqW0JBVENIXS5o YW5kbGUsCisJZ2VtX3NldF9kb21haW4oZmQsIHNwaW4tPm9ialtCQVRDSF0uaGFuZGxlLAogCQkJ STkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7Ci0JZXhlY2J1Zi5idWZm ZXJfY291bnQrKzsKKwlzcGluLT5leGVjYnVmLmJ1ZmZlcl9jb3VudCsrOwogCiAJaWYgKGRlcCkg ewogCQkvKiBkdW1teSB3cml0ZSB0byBkZXBlbmRlbmN5ICovCi0JCW9ialtTQ1JBVENIXS5oYW5k bGUgPSBkZXA7Ci0JCWZpbGxfcmVsb2MoJnJlbG9jc1tvYmpbQkFUQ0hdLnJlbG9jYXRpb25fY291 bnQrK10sCisJCXNwaW4tPm9ialtTQ1JBVENIXS5oYW5kbGUgPSBkZXA7CisJCWZpbGxfcmVsb2Mo JnNwaW4tPnJlbG9jc1tzcGluLT5vYmpbQkFUQ0hdLnJlbG9jYXRpb25fY291bnQrK10sCiAJCQkg ICBkZXAsIDEwMjAsCiAJCQkgICBJOTE1X0dFTV9ET01BSU5fUkVOREVSLAogCQkJICAgSTkxNV9H RU1fRE9NQUlOX1JFTkRFUik7Ci0JCWV4ZWNidWYuYnVmZmVyX2NvdW50Kys7CisJCXNwaW4tPmV4 ZWNidWYuYnVmZmVyX2NvdW50Kys7CiAJfQogCiAJc3Bpbi0+YmF0Y2ggPSBiYXRjaDsKLQlzcGlu LT5oYW5kbGUgPSBvYmpbQkFUQ0hdLmhhbmRsZTsKKwlzcGluLT5oYW5kbGUgPSBzcGluLT5vYmpb QkFUQ0hdLmhhbmRsZTsKKwlzcGluLT5vdXRfZmVuY2VfcmVxdWVzdGVkID0gb3V0X2ZlbmNlOwog CiAJLyogQWxsb3cgb3Vyc2VsdmVzIHRvIGJlIHByZWVtcHRlZCAqLwogCSpiYXRjaCsrID0gTUlf QVJCX0NISzsKQEAgLTE0Miw4ICsxNjUsOCBAQCBzdGF0aWMgaW50IGVtaXRfcmVjdXJzaXZlX2Jh dGNoKGlndF9zcGluX3QgKnNwaW4sCiAJYmF0Y2ggKz0gMTAwMDsKIAogCS8qIHJlY3Vyc2UgKi8K LQlmaWxsX3JlbG9jKCZyZWxvY3Nbb2JqW0JBVENIXS5yZWxvY2F0aW9uX2NvdW50XSwKLQkJICAg b2JqW0JBVENIXS5oYW5kbGUsIChiYXRjaCAtIHNwaW4tPmJhdGNoKSArIDEsCisJZmlsbF9yZWxv Yygmc3Bpbi0+cmVsb2NzW3NwaW4tPm9ialtCQVRDSF0ucmVsb2NhdGlvbl9jb3VudF0sCisJCSAg IHNwaW4tPm9ialtCQVRDSF0uaGFuZGxlLCAoYmF0Y2ggLSBzcGluLT5iYXRjaCkgKyAxLAogCQkg ICBJOTE1X0dFTV9ET01BSU5fQ09NTUFORCwgMCk7CiAJaWYgKGdlbiA+PSA4KSB7CiAJCSpiYXRj aCsrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgMSA8PCA4IHwgMTsKQEAgLTE1Nyw0MSArMTgw LDIxIEBAIHN0YXRpYyBpbnQgZW1pdF9yZWN1cnNpdmVfYmF0Y2goaWd0X3NwaW5fdCAqc3BpbiwK IAkJKmJhdGNoID0gMDsKIAkJaWYgKGdlbiA8IDQpIHsKIAkJCSpiYXRjaCB8PSAxOwotCQkJcmVs b2NzW29ialtCQVRDSF0ucmVsb2NhdGlvbl9jb3VudF0uZGVsdGEgPSAxOworCQkJc3Bpbi0+cmVs b2NzW3NwaW4tPm9ialtCQVRDSF0ucmVsb2NhdGlvbl9jb3VudF0uZGVsdGEgPSAxOwogCQl9CiAJ CWJhdGNoKys7CiAJfQotCW9ialtCQVRDSF0ucmVsb2NhdGlvbl9jb3VudCsrOwotCW9ialtCQVRD SF0ucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihyZWxvY3MpOworCXNwaW4tPm9ialtCQVRD SF0ucmVsb2NhdGlvbl9jb3VudCsrOworCXNwaW4tPm9ialtCQVRDSF0ucmVsb2NzX3B0ciA9IHRv X3VzZXJfcG9pbnRlcihzcGluLT5yZWxvY3MpOwogCi0JZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRv X3VzZXJfcG9pbnRlcihvYmogKyAoMiAtIGV4ZWNidWYuYnVmZmVyX2NvdW50KSk7Ci0JZXhlY2J1 Zi5yc3ZkMSA9IGN0eDsKKwlzcGluLT5leGVjYnVmLmJ1ZmZlcnNfcHRyID0KKwkJdG9fdXNlcl9w b2ludGVyKHNwaW4tPm9iaiArICgyIC0gc3Bpbi0+ZXhlY2J1Zi5idWZmZXJfY291bnQpKTsKKwlz cGluLT5leGVjYnVmLnJzdmQxID0gY3R4OwogCiAJaWYgKG91dF9mZW5jZSkKLQkJZXhlY2J1Zi5m bGFncyB8PSBJOTE1X0VYRUNfRkVOQ0VfT1VUOwotCi0JZm9yIChpID0gMDsgaSA8IG5lbmdpbmU7 IGkrKykgewotCQlleGVjYnVmLmZsYWdzICY9IH5FTkdJTkVfTUFTSzsKLQkJZXhlY2J1Zi5mbGFn cyB8PSBlbmdpbmVzW2ldOwotCQlnZW1fZXhlY2J1Zl93cihmZCwgJmV4ZWNidWYpOwotCQlpZiAo b3V0X2ZlbmNlKSB7Ci0JCQlpbnQgX2ZkID0gZXhlY2J1Zi5yc3ZkMiA+PiAzMjsKLQotCQkJaWd0 X2Fzc2VydChfZmQgPj0gMCk7Ci0JCQlpZiAoZmVuY2VfZmQgPT0gLTEpIHsKLQkJCQlmZW5jZV9m ZCA9IF9mZDsKLQkJCX0gZWxzZSB7Ci0JCQkJaW50IG9sZF9mZCA9IGZlbmNlX2ZkOwotCi0JCQkJ ZmVuY2VfZmQgPSBzeW5jX2ZlbmNlX21lcmdlKG9sZF9mZCwgX2ZkKTsKLQkJCQljbG9zZShvbGRf ZmQpOwotCQkJCWNsb3NlKF9mZCk7Ci0JCQl9Ci0JCQlpZ3RfYXNzZXJ0KGZlbmNlX2ZkID49IDAp OwotCQl9Ci0JfQorCQlzcGluLT5leGVjYnVmLmZsYWdzIHw9IEk5MTVfRVhFQ19GRU5DRV9PVVQ7 CiAKLQlyZXR1cm4gZmVuY2VfZmQ7CisJcmV0dXJuIF9faWd0X3NwaW5fYmF0Y2hfc3VibWl0KGZk LCBzcGluKTsKIH0KIAogc3RhdGljIGlndF9zcGluX3QgKgpAQCAtMjczLDYgKzI3Niw0NyBAQCBp Z3Rfc3Bpbl9iYXRjaF9uZXdfZmVuY2UoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGVu Z2luZSkKIAlyZXR1cm4gX19pZ3Rfc3Bpbl9iYXRjaF9uZXdfZmVuY2UoZmQsIGN0eCwgZW5naW5l KTsKIH0KIAorLyoqCisgKiBfX2lndF9zcGluX2JhdGNoX3Jlc3RhcnQ6CisgKiBAZmQ6IG9wZW4g aTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKiBAc3Bpbjogc3BpbiBiYXRjaCBzdGF0ZSBmcm9t IGlndF9zcGluX2JhdGNoX25ldygpCisgKgorICogUmVzdGFydHMgdGhlIHNwaW4gYmF0Y2ggd2hp Y2ggd2FzIHByZXZpb3VzbHkgZW5kZWQgZWl0aGVyIGV4cGxpY2l0bHkKKyAqIG9yIHZpYSB0aW1l b3V0LgorICoKKyAqIFRoaXMgdmVyc2lvbiBkb2VzIG5vdCB2ZXJpZnkgdGhhdCB0aGUgYmF0Y2gg aXMgY3VycmVudGx5IGlkbGUuCisgKgorICogUmV0dXJuczoKKyAqIE5ldyBmZW5jZSBmZCBpZiBz cGluIGJhdGNoIHdhcyBvcmlnaW5hbHkgY3JlYXRlZCBhcyByZXF1ZXN0aW5nIHRoZQorICogb3V0 cHV0IGZlbmNlLgorICovCitpbnQgX19pZ3Rfc3Bpbl9iYXRjaF9yZXN0YXJ0KGludCBmZCwgaWd0 X3NwaW5fdCAqc3BpbikKK3sKKwkqc3Bpbi0+YmF0Y2ggPSBNSV9BUkJfQ0hLOworCV9fc3luY19z eW5jaHJvbml6ZSgpOworCisJcmV0dXJuIF9faWd0X3NwaW5fYmF0Y2hfc3VibWl0KGZkLCBzcGlu KTsKK30KKworLyoqCisgKiBpZ3Rfc3Bpbl9iYXRjaF9yZXN0YXJ0OgorICogQGZkOiBvcGVuIGk5 MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgorICogQHNwaW46IHNwaW4gYmF0Y2ggc3RhdGUgZnJvbSBp Z3Rfc3Bpbl9iYXRjaF9uZXcoKQorICoKKyAqIFJlc3RhcnRzIHRoZSBzcGluIGJhdGNoIHdoaWNo IHdhcyBwcmV2aW91c2x5IGVuZGVkIGVpdGhlciBleHBsaWNpdGx5CisgKiBvciB2aWEgdGltZW91 dC4KKyAqCisgKiBSZXR1cm5zOgorICogTmV3IGZlbmNlIGZkIGlmIHNwaW4gYmF0Y2ggd2FzIG9y aWdpbmFseSBjcmVhdGVkIGFzIHJlcXVlc3RpbmcgdGhlCisgKiBvdXRwdXQgZmVuY2UuCisgKi8K K2ludCBpZ3Rfc3Bpbl9iYXRjaF9yZXN0YXJ0KGludCBmZCwgaWd0X3NwaW5fdCAqc3BpbikKK3sK KwlpZ3RfYXNzZXJ0KCFnZW1fYm9fYnVzeShmZCwgc3Bpbi0+aGFuZGxlKSk7CisKKwlyZXR1cm4g X19pZ3Rfc3Bpbl9iYXRjaF9yZXN0YXJ0KGZkLCBzcGluKTsKK30KKwogc3RhdGljIHZvaWQgbm90 aWZ5KHVuaW9uIHNpZ3ZhbCBhcmcpCiB7CiAJaWd0X3NwaW5fdCAqc3BpbiA9IGFyZy5zaXZhbF9w dHI7CmRpZmYgLS1naXQgYS9saWIvaWd0X2R1bW15bG9hZC5oIGIvbGliL2lndF9kdW1teWxvYWQu aAppbmRleCBmZmE3ZTM1MWRlYTMuLmI5ZjIwMWQ0YWZiNiAxMDA2NDQKLS0tIGEvbGliL2lndF9k dW1teWxvYWQuaAorKysgYi9saWIvaWd0X2R1bW15bG9hZC5oCkBAIC0zNiw2ICszNiwxMiBAQCB0 eXBlZGVmIHN0cnVjdCBpZ3Rfc3BpbiB7CiAJc3RydWN0IGlndF9saXN0IGxpbms7CiAJdWludDMy X3QgKmJhdGNoOwogCWludCBvdXRfZmVuY2U7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29i amVjdDIgb2JqWzJdOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxv Y3NbMl07CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOworCXVuc2ln bmVkIGludCBlbmdpbmVzWzE2XTsKKwl1bnNpZ25lZCBpbnQgbmVuZ2luZTsKKwlib29sIG91dF9m ZW5jZV9yZXF1ZXN0ZWQ7CiB9IGlndF9zcGluX3Q7CiAKIGlndF9zcGluX3QgKl9faWd0X3NwaW5f YmF0Y2hfbmV3KGludCBmZCwKQEAgLTU1LDYgKzYxLDkgQEAgaWd0X3NwaW5fdCAqaWd0X3NwaW5f YmF0Y2hfbmV3X2ZlbmNlKGludCBmZCwKIAkJCQkgICAgIHVpbnQzMl90IGN0eCwKIAkJCQkgICAg IHVuc2lnbmVkIGVuZ2luZSk7CiAKK2ludCBfX2lndF9zcGluX2JhdGNoX3Jlc3RhcnQoaW50IGZk LCBpZ3Rfc3Bpbl90ICpzcGluKTsKK2ludCBpZ3Rfc3Bpbl9iYXRjaF9yZXN0YXJ0KGludCBmZCwg aWd0X3NwaW5fdCAqc3Bpbik7CisKIHZvaWQgaWd0X3NwaW5fYmF0Y2hfc2V0X3RpbWVvdXQoaWd0 X3NwaW5fdCAqc3BpbiwgaW50NjRfdCBucyk7CiB2b2lkIGlndF9zcGluX2JhdGNoX2VuZChpZ3Rf c3Bpbl90ICpzcGluKTsKIHZvaWQgaWd0X3NwaW5fYmF0Y2hfZnJlZShpbnQgZmQsIGlndF9zcGlu X3QgKnNwaW4pOwotLSAKMi4xNC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ln dC1kZXYK