Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qAqUd-000707-FL for pgsql-hackers@arkaria.postgresql.org; Sun, 18 Jun 2023 11:22:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1qAqUb-00057h-PQ for pgsql-hackers@arkaria.postgresql.org; Sun, 18 Jun 2023 11:22:49 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qAqUb-00050v-3i for pgsql-hackers@lists.postgresql.org; Sun, 18 Jun 2023 11:22:49 +0000 Received: from meesny.iki.fi ([2001:67c:2b0:1c1::201]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qAqUV-003EAY-0J for pgsql-hackers@postgresql.org; Sun, 18 Jun 2023 11:22:48 +0000 Received: from [192.168.10.13] (31-22-251.netrun.cytanet.com.cy [31.153.22.251]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by meesny.iki.fi (Postfix) with ESMTPSA id 4QkVqd72cZzyV2 for ; Sun, 18 Jun 2023 14:22:37 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1687087359; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=av7TPMZqBXW6fAv41EgHMtwGABkGch5KVRoEJATGLxo=; b=BpvU9uGRHDWZAiSkaaK7V/rasIDi9+ED5I3j4+VgxOvNXUctEGiBKEAYqGfolAKVuf40va 38WV2Fg/Pn2woR7r8DEpUTKlcSm+h7dVdbWwAgDJrkeU8F3ceZgD+qufAxnWTFwY4isDLp 4Le83VDLdIQSn4HbZLeEfiLmZ0PN1Io= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1687087359; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=av7TPMZqBXW6fAv41EgHMtwGABkGch5KVRoEJATGLxo=; b=UpqIRIzFubM5kRcgqFRJEbmny2blkKbgmYDYgKzGReWdbQxwoG0QcC7zffbGnUv35v2Adn +B18IZAzq/xLZKwE5IXtKrFZ1fPgK7qRoxY6v6y9fofx0ryUtsCavXcdunInMsH7cd67Nv BKdRnmx+WcqXEnGmfpEXKELloJu5Sws= ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Seal: i=1; s=meesny; d=iki.fi; t=1687087359; a=rsa-sha256; cv=none; b=DKFlfuKm82ChS/PB+d0OGAlAOLpPHFIHus2GFtpdmce185nPXmFJ36+hPkY4nVzNsH3tcZ Fo27L7OEZwvKpA7xWH9hYHCDaHjSJfpucsgcE5suN4CsRPqYROfIe1F7bggGiYPy8fsCU+ 39pcEp93yxtWzOni+nnUpqh/KHHL0Mk= Content-Type: multipart/mixed; boundary="------------kg1n0gXnIqDHZBpf1kTdCJqe" Message-ID: <7a59b073-5b5b-151e-7ed3-8b01ff7ce9ef@iki.fi> Date: Sun, 18 Jun 2023 14:22:33 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Content-Language: en-US From: Heikki Linnakangas Subject: Refactoring backend fork+exec code To: pgsql-hackers List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------kg1n0gXnIqDHZBpf1kTdCJqe Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit I started to look at the code in postmaster.c related to launching child processes. I tried to reduce the difference between EXEC_BACKEND and !EXEC_BACKEND code paths, and put the code that needs to differ behind a better abstraction. I started doing this to help with implementing multi-threading, but it doesn't introduce anything thread-related yet and I think this improves readability anyway. This is still work-inprogress, especially the last, big, patch in the patch set. Mainly, I need to clean up the comments in the new launch_backend.c file. But the other patches are in pretty good shape, and if you ignore launch_backend.c, you can see the effect on the other source files. With these patches, there is a new function for launching a postmaster child process: pid_t postmaster_child_launch(PostmasterChildType child_type, char *startup_data, size_t startup_data_len, ClientSocket *client_sock); This function hides the differences between EXEC_BACKEND and !EXEC_BACKEND cases. In 'startup_data', the caller can pass a blob of data to the child process, with different meaning for different kinds of child processes. For a backend process, for example, it's used to pass the CAC_state, which indicates whether the backend accepts the connection or just sends "too many clients" error. And for background workers, it's used to pass the BackgroundWorker struct. The startup data is passed to the child process in the ClientSocket is a new struct holds a socket FD, and the local and remote address info. Before this patch set, postmaster initializes the Port structs but only fills in those fields in it. With this patch set, we have a new ClientSocket struct just for those fields, which makes it more clear which fields are initialized where. I haven't done much testing yet, and no testing at all on Windows, so that's probably still broken. -- Heikki Linnakangas Neon (https://neon.tech) --------------kg1n0gXnIqDHZBpf1kTdCJqe Content-Type: text/x-patch; charset=UTF-8; name="0001-Allocate-Backend-structs-in-PostmasterContext.patch" Content-Disposition: attachment; filename="0001-Allocate-Backend-structs-in-PostmasterContext.patch" Content-Transfer-Encoding: base64 RnJvbSA4OWNiZjkzYzM0OTBkMzhlN2FkZDE0OWZkMTY4ZjRmN2E3ZWI2NzBlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFN1biwgMTggSnVuIDIwMjMgMTA6NDE6MjkgKzAzMDAK U3ViamVjdDogW1BBVENIIDEvOV0gQWxsb2NhdGUgQmFja2VuZCBzdHJ1Y3RzIGluIFBvc3Rt YXN0ZXJDb250ZXh0LgoKVGhlIGNoaWxkIHByb2Nlc3NlcyBkb24ndCBuZWVkIHRoZW0uIEJ5 IGFsbG9jYXRpbmcgdGhlbSBpbgpQb3N0bWFzdGVyQ29udGV4dCwgdGhlIG1lbW9yeSBnZXRz IGZyZWUnZCBhbmQgaXMgbWFkZSBhdmFpbGFibGUgZm9yCm90aGVyIHN0dWZmIGluIHRoZSBj aGlsZCBwcm9jZXNzZXMuCi0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5j ICAgfCAxMSArKysrKysrKy0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVy LmMgfCAyNCArKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTkg aW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dv cmtlci5jCmluZGV4IDBkZDIyYjIzNTExLi4wN2FjNjhmNTBiYyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvYmd3b3JrZXIuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2Uv c2htZW0uaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5jbHVkZSAidXRpbHMv YXNjaWkuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxz L3BzX3N0YXR1cy5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVvdXQuaCIKIApAQCAtMzQ0LDcg KzM0NSw5IEBAIEJhY2tncm91bmRXb3JrZXJTdGF0ZUNoYW5nZShib29sIGFsbG93X25ld193 b3JrZXJzKQogCQkvKgogCQkgKiBDb3B5IHRoZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHRo ZSByZWdpc3RlcmVkIHdvcmtlcnMgbGlzdC4KIAkJICovCi0JCXJ3ID0gbWFsbG9jKHNpemVv ZihSZWdpc3RlcmVkQmdXb3JrZXIpKTsKKwkJcncgPSBNZW1vcnlDb250ZXh0QWxsb2NFeHRl bmRlZChQb3N0bWFzdGVyQ29udGV4dCwKKwkJCQkJCQkJCQlzaXplb2YoUmVnaXN0ZXJlZEJn V29ya2VyKSwKKwkJCQkJCQkJCQlNQ1hUX0FMTE9DX05PX09PTSk7CiAJCWlmIChydyA9PSBO VUxMKQogCQl7CiAJCQllcmVwb3J0KExPRywKQEAgLTQ1Miw3ICs0NTUsNyBAQCBGb3JnZXRC YWNrZ3JvdW5kV29ya2VyKHNsaXN0X211dGFibGVfaXRlciAqY3VyKQogCQkJCQkJCSBydy0+ cndfd29ya2VyLmJnd19uYW1lKSkpOwogCiAJc2xpc3RfZGVsZXRlX2N1cnJlbnQoY3VyKTsK LQlmcmVlKHJ3KTsKKwlwZnJlZShydyk7CiB9CiAKIC8qCkBAIC05MjYsNyArOTI5LDkgQEAg UmVnaXN0ZXJCYWNrZ3JvdW5kV29ya2VyKEJhY2tncm91bmRXb3JrZXIgKndvcmtlcikKIAkv KgogCSAqIENvcHkgdGhlIHJlZ2lzdHJhdGlvbiBkYXRhIGludG8gdGhlIHJlZ2lzdGVyZWQg d29ya2VycyBsaXN0LgogCSAqLwotCXJ3ID0gbWFsbG9jKHNpemVvZihSZWdpc3RlcmVkQmdX b3JrZXIpKTsKKwlydyA9IE1lbW9yeUNvbnRleHRBbGxvY0V4dGVuZGVkKFBvc3RtYXN0ZXJD b250ZXh0LAorCQkJCQkJCQkJc2l6ZW9mKFJlZ2lzdGVyZWRCZ1dvcmtlciksCisJCQkJCQkJ CQlNQ1hUX0FMTE9DX05PX09PTSk7CiAJaWYgKHJ3ID09IE5VTEwpCiAJewogCQllcmVwb3J0 KExPRywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5j IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXggNGM0OTM5M2Zj NWEuLmVlOWUyNGU0ZTc0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bv c3RtYXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwpA QCAtMzM1Nyw3ICszMzU3LDcgQEAgQ2xlYW51cEJhY2tncm91bmRXb3JrZXIoaW50IHBpZCwK IAkJICovCiAJCWlmIChydy0+cndfYmFja2VuZC0+Ymd3b3JrZXJfbm90aWZ5KQogCQkJQmFj a2dyb3VuZFdvcmtlclN0b3BOb3RpZmljYXRpb25zKHJ3LT5yd19waWQpOwotCQlmcmVlKHJ3 LT5yd19iYWNrZW5kKTsKKwkJcGZyZWUocnctPnJ3X2JhY2tlbmQpOwogCQlydy0+cndfYmFj a2VuZCA9IE5VTEw7CiAJCXJ3LT5yd19waWQgPSAwOwogCQlydy0+cndfY2hpbGRfc2xvdCA9 IDA7CkBAIC0zNDUwLDcgKzM0NTAsNyBAQCBDbGVhbnVwQmFja2VuZChpbnQgcGlkLAogCQkJ CUJhY2tncm91bmRXb3JrZXJTdG9wTm90aWZpY2F0aW9ucyhicC0+cGlkKTsKIAkJCX0KIAkJ CWRsaXN0X2RlbGV0ZShpdGVyLmN1cik7Ci0JCQlmcmVlKGJwKTsKKwkJCXBmcmVlKGJwKTsK IAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMzUwNiw3ICszNTA2LDcgQEAgSGFuZGxlQ2hpbGRD cmFzaChpbnQgcGlkLCBpbnQgZXhpdHN0YXR1cywgY29uc3QgY2hhciAqcHJvY25hbWUpCiAj aWZkZWYgRVhFQ19CQUNLRU5ECiAJCQlTaG1lbUJhY2tlbmRBcnJheVJlbW92ZShydy0+cndf YmFja2VuZCk7CiAjZW5kaWYKLQkJCWZyZWUocnctPnJ3X2JhY2tlbmQpOworCQkJcGZyZWUo cnctPnJ3X2JhY2tlbmQpOwogCQkJcnctPnJ3X2JhY2tlbmQgPSBOVUxMOwogCQkJcnctPnJ3 X3BpZCA9IDA7CiAJCQlydy0+cndfY2hpbGRfc2xvdCA9IDA7CkBAIC0zNTQzLDcgKzM1NDMs NyBAQCBIYW5kbGVDaGlsZENyYXNoKGludCBwaWQsIGludCBleGl0c3RhdHVzLCBjb25zdCBj aGFyICpwcm9jbmFtZSkKICNlbmRpZgogCQkJfQogCQkJZGxpc3RfZGVsZXRlKGl0ZXIuY3Vy KTsKLQkJCWZyZWUoYnApOworCQkJcGZyZWUoYnApOwogCQkJLyogS2VlcCBsb29waW5nIHNv IHdlIGNhbiBzaWduYWwgcmVtYWluaW5nIGJhY2tlbmRzICovCiAJCX0KIAkJZWxzZQpAQCAt NDExOSw3ICs0MTE5LDcgQEAgQmFja2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkKIAkgKiBDcmVh dGUgYmFja2VuZCBkYXRhIHN0cnVjdHVyZS4gIEJldHRlciBiZWZvcmUgdGhlIGZvcmsoKSBz byB3ZSBjYW4KIAkgKiBoYW5kbGUgZmFpbHVyZSBjbGVhbmx5LgogCSAqLwotCWJuID0gKEJh Y2tlbmQgKikgbWFsbG9jKHNpemVvZihCYWNrZW5kKSk7CisJYm4gPSAoQmFja2VuZCAqKSBw YWxsb2NfZXh0ZW5kZWQoc2l6ZW9mKEJhY2tlbmQpLCBNQ1hUX0FMTE9DX05PX09PTSk7CiAJ aWYgKCFibikKIAl7CiAJCWVyZXBvcnQoTE9HLApAQCAtNDEzNSw3ICs0MTM1LDcgQEAgQmFj a2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkKIAkgKi8KIAlpZiAoIVJhbmRvbUNhbmNlbEtleSgm TXlDYW5jZWxLZXkpKQogCXsKLQkJZnJlZShibik7CisJCXBmcmVlKGJuKTsKIAkJZXJlcG9y dChMT0csCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlRFUk5BTF9FUlJPUiksCiAJCQkJIGVy cm1zZygiY291bGQgbm90IGdlbmVyYXRlIHJhbmRvbSBjYW5jZWwga2V5IikpKTsKQEAgLTQx NjUsOCArNDE2NSw2IEBAIEJhY2tlbmRTdGFydHVwKFBvcnQgKnBvcnQpCiAJcGlkID0gZm9y a19wcm9jZXNzKCk7CiAJaWYgKHBpZCA9PSAwKQkJCQkvKiBjaGlsZCAqLwogCXsKLQkJZnJl ZShibik7Ci0KIAkJLyogRGV0YW5nbGUgZnJvbSBwb3N0bWFzdGVyICovCiAJCUluaXRQb3N0 bWFzdGVyQ2hpbGQoKTsKIApAQCAtNDE5Nyw3ICs0MTk1LDcgQEAgQmFja2VuZFN0YXJ0dXAo UG9ydCAqcG9ydCkKIAogCQlpZiAoIWJuLT5kZWFkX2VuZCkKIAkJCSh2b2lkKSBSZWxlYXNl UG9zdG1hc3RlckNoaWxkU2xvdChibi0+Y2hpbGRfc2xvdCk7Ci0JCWZyZWUoYm4pOworCQlw ZnJlZShibik7CiAJCWVycm5vID0gc2F2ZV9lcnJubzsKIAkJZXJlcG9ydChMT0csCiAJCQkJ KGVycm1zZygiY291bGQgbm90IGZvcmsgbmV3IHByb2Nlc3MgZm9yIGNvbm5lY3Rpb246ICVt IikpKTsKQEAgLTU0NjAsNyArNTQ1OCw3IEBAIFN0YXJ0QXV0b3ZhY3V1bVdvcmtlcih2b2lk KQogCQkJcmV0dXJuOwogCQl9CiAKLQkJYm4gPSAoQmFja2VuZCAqKSBtYWxsb2Moc2l6ZW9m KEJhY2tlbmQpKTsKKwkJYm4gPSAoQmFja2VuZCAqKSBwYWxsb2NfZXh0ZW5kZWQoc2l6ZW9m KEJhY2tlbmQpLCBNQ1hUX0FMTE9DX05PX09PTSk7CiAJCWlmIChibikKIAkJewogCQkJYm4t PmNhbmNlbF9rZXkgPSBNeUNhbmNlbEtleTsKQEAgLTU0ODcsNyArNTQ4NSw3IEBAIFN0YXJ0 QXV0b3ZhY3V1bVdvcmtlcih2b2lkKQogCQkJICogbG9nZ2VkIGJ5IFN0YXJ0QXV0b1ZhY1dv cmtlcgogCQkJICovCiAJCQkodm9pZCkgUmVsZWFzZVBvc3RtYXN0ZXJDaGlsZFNsb3QoYm4t PmNoaWxkX3Nsb3QpOwotCQkJZnJlZShibik7CisJCQlwZnJlZShibik7CiAJCX0KIAkJZWxz ZQogCQkJZXJlcG9ydChMT0csCkBAIC01NzMyLDcgKzU3MzAsNyBAQCBkb19zdGFydF9iZ3dv cmtlcihSZWdpc3RlcmVkQmdXb3JrZXIgKnJ3KQogCQkJLyogdW5kbyB3aGF0IGFzc2lnbl9i YWNrZW5kbGlzdF9lbnRyeSBkaWQgKi8KIAkJCVJlbGVhc2VQb3N0bWFzdGVyQ2hpbGRTbG90 KHJ3LT5yd19jaGlsZF9zbG90KTsKIAkJCXJ3LT5yd19jaGlsZF9zbG90ID0gMDsKLQkJCWZy ZWUocnctPnJ3X2JhY2tlbmQpOworCQkJcGZyZWUocnctPnJ3X2JhY2tlbmQpOwogCQkJcnct PnJ3X2JhY2tlbmQgPSBOVUxMOwogCQkJLyogbWFyayBlbnRyeSBhcyBjcmFzaGVkLCBzbyB3 ZSdsbCB0cnkgYWdhaW4gbGF0ZXIgKi8KIAkJCXJ3LT5yd19jcmFzaGVkX2F0ID0gR2V0Q3Vy cmVudFRpbWVzdGFtcCgpOwpAQCAtNTg1OCw3ICs1ODU2LDcgQEAgYXNzaWduX2JhY2tlbmRs aXN0X2VudHJ5KFJlZ2lzdGVyZWRCZ1dvcmtlciAqcncpCiAJCXJldHVybiBmYWxzZTsKIAl9 CiAKLQlibiA9IG1hbGxvYyhzaXplb2YoQmFja2VuZCkpOworCWJuID0gcGFsbG9jX2V4dGVu ZGVkKHNpemVvZihCYWNrZW5kKSwgTUNYVF9BTExPQ19OT19PT00pOwogCWlmIChibiA9PSBO VUxMKQogCXsKIAkJZXJlcG9ydChMT0csCi0tIAoyLjMwLjIKCg== --------------kg1n0gXnIqDHZBpf1kTdCJqe Content-Type: text/x-patch; charset=UTF-8; name="0002-Pass-background-worker-entry-in-the-parameter-file.patch" Content-Disposition: attachment; filename*0="0002-Pass-background-worker-entry-in-the-parameter-file.patc"; filename*1="h" Content-Transfer-Encoding: base64 RnJvbSAwYTk5YTE2NzQxOTc3ZWYyYjEwZWJlZTgxOTg2OTJlODE4ZjhiNzAwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFN1biwgMTggSnVuIDIwMjMgMTI6NDU6NTAgKzAzMDAK U3ViamVjdDogW1BBVENIIDIvOV0gUGFzcyBiYWNrZ3JvdW5kIHdvcmtlciBlbnRyeSBpbiB0 aGUgcGFyYW1ldGVyIGZpbGUKClRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gbW92ZSBJbml0 UHJvY2VzcyBsYXRlciBpbiBTdWJQb3N0bWFzdGVyTWFpbgooaW4gbmV4dCBjb21taXQpLCBh cyB3ZSBkb24ndCBuZWVkIGFuIGx3bG9jayBhbmQgaGVuY2UgYSBQR1BST0MgZW50cnkKdG8g Z2V0IHRoZSBiYWNrZ3JvdW5kIHdvcmtlciBlbnRyeSBhbnltb3JlLgotLS0KIHNyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYyAgICAgICAgICAgfCAyMSAtLS0tLS0tLS0tLS0K IHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jICAgICAgICAgfCAzNyArKysr KysrKysrKysrKy0tLS0tLS0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3b3JrZXJfaW50 ZXJuYWxzLmggfCAgNCAtLS0KIDMgZmlsZXMgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKSwg MzcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9i Z3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCmluZGV4IDA3 YWM2OGY1MGJjLi5iNzE0MDMwNmU0MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9iZ3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIu YwpAQCAtNjI4LDI3ICs2MjgsNiBAQCBSZXNldEJhY2tncm91bmRXb3JrZXJDcmFzaFRpbWVz KHZvaWQpCiAJfQogfQogCi0jaWZkZWYgRVhFQ19CQUNLRU5ECi0vKgotICogSW4gRVhFQ19C QUNLRU5EIG1vZGUsIHdvcmtlcnMgdXNlIHRoaXMgdG8gcmV0cmlldmUgdGhlaXIgZGV0YWls cyBmcm9tCi0gKiBzaGFyZWQgbWVtb3J5LgotICovCi1CYWNrZ3JvdW5kV29ya2VyICoKLUJh Y2tncm91bmRXb3JrZXJFbnRyeShpbnQgc2xvdG5vKQotewotCXN0YXRpYyBCYWNrZ3JvdW5k V29ya2VyIG15RW50cnk7Ci0JQmFja2dyb3VuZFdvcmtlclNsb3QgKnNsb3Q7Ci0KLQlBc3Nl cnQoc2xvdG5vIDwgQmFja2dyb3VuZFdvcmtlckRhdGEtPnRvdGFsX3Nsb3RzKTsKLQlzbG90 ID0gJkJhY2tncm91bmRXb3JrZXJEYXRhLT5zbG90W3Nsb3Rub107Ci0JQXNzZXJ0KHNsb3Qt PmluX3VzZSk7Ci0KLQkvKiBtdXN0IGNvcHkgdGhpcyBpbiBjYXNlIHdlIGRvbid0IGludGVu ZCB0byByZXRhaW4gc2htZW0gYWNjZXNzICovCi0JbWVtY3B5KCZteUVudHJ5LCAmc2xvdC0+ d29ya2VyLCBzaXplb2YgbXlFbnRyeSk7Ci0JcmV0dXJuICZteUVudHJ5OwotfQotI2VuZGlm Ci0KIC8qCiAgKiBDb21wbGFpbiBhYm91dCB0aGUgQmFja2dyb3VuZFdvcmtlciBkZWZpbml0 aW9uIHVzaW5nIGVycm9yIGxldmVsIGVsZXZlbC4KICAqIFJldHVybiB0cnVlIGlmIGl0IGxv b2tzIG9rLCBmYWxzZSBpZiBub3QgKHVubGVzcyBlbGV2ZWwgPj0gRVJST1IsIGluCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCmluZGV4IGVlOWUyNGU0ZTc0Li5hN2E5ZTA2 MWM1YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMK KysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKQEAgLTU0MCw2ICs1 NDAsOCBAQCB0eXBlZGVmIHN0cnVjdAogI2VuZGlmCiAJY2hhcgkJbXlfZXhlY19wYXRoW01B WFBHUEFUSF07CiAJY2hhcgkJcGtnbGliX3BhdGhbTUFYUEdQQVRIXTsKKworCUJhY2tncm91 bmRXb3JrZXIgTXlCZ3dvcmtlckVudHJ5OwogfSBCYWNrZW5kUGFyYW1ldGVyczsKIAogc3Rh dGljIHZvaWQgcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwgUG9ydCAqcG9ydCk7 CkBAIC00ODY3LDcgKzQ4NjksNyBAQCBTdWJQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCQlzdHJjbXAoYXJndlsxXSwgIi0tZm9ya2F2bGF1bmNoZXIiKSA9PSAw IHx8CiAJCXN0cmNtcChhcmd2WzFdLCAiLS1mb3JrYXZ3b3JrZXIiKSA9PSAwIHx8CiAJCXN0 cmNtcChhcmd2WzFdLCAiLS1mb3JrYXV4IikgPT0gMCB8fAotCQlzdHJuY21wKGFyZ3ZbMV0s ICItLWZvcmtiZ3dvcmtlcj0iLCAxNSkgPT0gMCkKKwkJc3RybmNtcChhcmd2WzFdLCAiLS1m b3JrYmd3b3JrZXIiLCAxNCkgPT0gMCkKIAkJUEdTaGFyZWRNZW1vcnlSZUF0dGFjaCgpOwog CWVsc2UKIAkJUEdTaGFyZWRNZW1vcnlOb1JlQXR0YWNoKCk7CkBAIC00OTk4LDEwICs1MDAw LDggQEAgU3ViUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQlB dXRvVmFjV29ya2VyTWFpbihhcmdjIC0gMiwgYXJndiArIDIpOwkvKiBkb2VzIG5vdCByZXR1 cm4gKi8KIAl9Ci0JaWYgKHN0cm5jbXAoYXJndlsxXSwgIi0tZm9ya2Jnd29ya2VyPSIsIDE1 KSA9PSAwKQorCWlmIChzdHJuY21wKGFyZ3ZbMV0sICItLWZvcmtiZ3dvcmtlciIsIDE0KSA9 PSAwKQogCXsKLQkJaW50CQkJc2htZW1fc2xvdDsKLQogCQkvKiBkbyB0aGlzIGFzIGVhcmx5 IGFzIHBvc3NpYmxlOyBpbiBwYXJ0aWN1bGFyLCBiZWZvcmUgSW5pdFByb2Nlc3MoKSAqLwog CQlJc0JhY2tncm91bmRXb3JrZXIgPSB0cnVlOwogCkBAIC01MDE0LDEwICs1MDE0LDYgQEAg U3ViUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJLyogQXR0YWNo IHByb2Nlc3MgdG8gc2hhcmVkIGRhdGEgc3RydWN0dXJlcyAqLwogCQlDcmVhdGVTaGFyZWRN ZW1vcnlBbmRTZW1hcGhvcmVzKCk7CiAKLQkJLyogRmV0Y2ggTXlCZ3dvcmtlckVudHJ5IGZy b20gc2hhcmVkIG1lbW9yeSAqLwotCQlzaG1lbV9zbG90ID0gYXRvaShhcmd2WzFdICsgMTUp OwotCQlNeUJnd29ya2VyRW50cnkgPSBCYWNrZ3JvdW5kV29ya2VyRW50cnkoc2htZW1fc2xv dCk7Ci0KIAkJU3RhcnRCYWNrZ3JvdW5kV29ya2VyKCk7CiAJfQogCWlmIChzdHJjbXAoYXJn dlsxXSwgIi0tZm9ya2xvZyIpID09IDApCkBAIC01NjYyLDEzICs1NjU4LDE0IEBAIEJhY2tn cm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscyh2b2lkKQogCiAjaWZkZWYgRVhFQ19CQUNLRU5E CiBzdGF0aWMgcGlkX3QKLWJnd29ya2VyX2ZvcmtleGVjKGludCBzaG1lbV9zbG90KQorYmd3 b3JrZXJfZm9ya2V4ZWMoQmFja2dyb3VuZFdvcmtlciAqd29ya2VyKQogewogCWNoYXIJICAg KmF2WzEwXTsKIAlpbnQJCQlhYyA9IDA7CiAJY2hhcgkJZm9ya2F2W01BWFBHUEFUSF07CisJ cGlkX3QJCXJlc3VsdDsKIAotCXNucHJpbnRmKGZvcmthdiwgTUFYUEdQQVRILCAiLS1mb3Jr Ymd3b3JrZXI9JWQiLCBzaG1lbV9zbG90KTsKKwlzbnByaW50Zihmb3JrYXYsIE1BWFBHUEFU SCwgIi0tZm9ya2Jnd29ya2VyIik7CiAKIAlhdlthYysrXSA9ICJwb3N0Z3JlcyI7CiAJYXZb YWMrK10gPSBmb3JrYXY7CkBAIC01Njc3LDcgKzU2NzQsMTEgQEAgYmd3b3JrZXJfZm9ya2V4 ZWMoaW50IHNobWVtX3Nsb3QpCiAKIAlBc3NlcnQoYWMgPCBsZW5ndGhvZihhdikpOwogCi0J cmV0dXJuIHBvc3RtYXN0ZXJfZm9ya2V4ZWMoYWMsIGF2KTsKKwlNeUJnd29ya2VyRW50cnkg PSB3b3JrZXI7CisJcmVzdWx0ID0gcG9zdG1hc3Rlcl9mb3JrZXhlYyhhYywgYXYpOworCU15 Qmd3b3JrZXJFbnRyeSA9IE5VTEw7CisKKwlyZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmCiAK QEAgLTU3MTgsNyArNTcxOSw3IEBAIGRvX3N0YXJ0X2Jnd29ya2VyKFJlZ2lzdGVyZWRCZ1dv cmtlciAqcncpCiAJCQkJCQkJIHJ3LT5yd193b3JrZXIuYmd3X25hbWUpKSk7CiAKICNpZmRl ZiBFWEVDX0JBQ0tFTkQKLQlzd2l0Y2ggKCh3b3JrZXJfcGlkID0gYmd3b3JrZXJfZm9ya2V4 ZWMocnctPnJ3X3NobWVtX3Nsb3QpKSkKKwlzd2l0Y2ggKCh3b3JrZXJfcGlkID0gYmd3b3Jr ZXJfZm9ya2V4ZWMoJnJ3LT5yd193b3JrZXIpKSkKICNlbHNlCiAJc3dpdGNoICgod29ya2Vy X3BpZCA9IGZvcmtfcHJvY2VzcygpKSkKICNlbmRpZgpAQCAtNjEyMCw2ICs2MTIxLDExIEBA IHNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBQb3J0 ICpwb3J0LAogCiAJc3RybGNweShwYXJhbS0+cGtnbGliX3BhdGgsIHBrZ2xpYl9wYXRoLCBN QVhQR1BBVEgpOwogCisJaWYgKE15Qmd3b3JrZXJFbnRyeSkKKwkJbWVtY3B5KCZwYXJhbS0+ TXlCZ3dvcmtlckVudHJ5LCBNeUJnd29ya2VyRW50cnksIHNpemVvZihCYWNrZ3JvdW5kV29y a2VyKSk7CisJZWxzZQorCQltZW1zZXQoJnBhcmFtLT5NeUJnd29ya2VyRW50cnksIDAsIHNp emVvZihCYWNrZ3JvdW5kV29ya2VyKSk7CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjM1 MCw2ICs2MzU2LDEzIEBAIHJlc3RvcmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFt ZXRlcnMgKnBhcmFtLCBQb3J0ICpwb3J0KQogCiAJc3RybGNweShwa2dsaWJfcGF0aCwgcGFy YW0tPnBrZ2xpYl9wYXRoLCBNQVhQR1BBVEgpOwogCisJaWYgKHBhcmFtLT5NeUJnd29ya2Vy RW50cnkuYmd3X25hbWVbMF0gIT0gJ1wwJykKKwl7CisJCU15Qmd3b3JrZXJFbnRyeSA9IChC YWNrZ3JvdW5kV29ya2VyICopCisJCQlNZW1vcnlDb250ZXh0QWxsb2MoVG9wTWVtb3J5Q29u dGV4dCwgc2l6ZW9mKEJhY2tncm91bmRXb3JrZXIpKTsKKwkJbWVtY3B5KE15Qmd3b3JrZXJF bnRyeSwgJnBhcmFtLT5NeUJnd29ya2VyRW50cnksIHNpemVvZihCYWNrZ3JvdW5kV29ya2Vy KSk7CisJfQorCiAJLyoKIAkgKiBXZSBuZWVkIHRvIHJlc3RvcmUgZmQuYydzIGNvdW50cyBv ZiBleHRlcm5hbGx5LW9wZW5lZCBGRHM7IHRvIGF2b2lkCiAJICogY29uZnVzaW9uLCBiZSBz dXJlIHRvIGRvIHRoaXMgYWZ0ZXIgcmVzdG9yaW5nIG1heF9zYWZlX2Zkcy4gIChOb3RlOgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMu aCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmgKaW5kZXgg NGFkNjNmZDliZDcuLjdmYTdlZTJkODc4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0 bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0 ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmgKQEAgLTU3LDggKzU3LDQgQEAgZXh0ZXJuIHZvaWQg UmVzZXRCYWNrZ3JvdW5kV29ya2VyQ3Jhc2hUaW1lcyh2b2lkKTsKIC8qIEZ1bmN0aW9uIHRv IHN0YXJ0IGEgYmFja2dyb3VuZCB3b3JrZXIsIGNhbGxlZCBmcm9tIHBvc3RtYXN0ZXIuYyAq LwogZXh0ZXJuIHZvaWQgU3RhcnRCYWNrZ3JvdW5kV29ya2VyKHZvaWQpIHBnX2F0dHJpYnV0 ZV9ub3JldHVybigpOwogCi0jaWZkZWYgRVhFQ19CQUNLRU5ECi1leHRlcm4gQmFja2dyb3Vu ZFdvcmtlciAqQmFja2dyb3VuZFdvcmtlckVudHJ5KGludCBzbG90bm8pOwotI2VuZGlmCi0K ICNlbmRpZgkJCQkJCQkvKiBCR1dPUktFUl9JTlRFUk5BTFNfSCAqLwotLSAKMi4zMC4yCgo= --------------kg1n0gXnIqDHZBpf1kTdCJqe Content-Type: text/x-patch; charset=UTF-8; name="0003-Refactor-CreateSharedMemoryAndSemaphores.patch" Content-Disposition: attachment; filename="0003-Refactor-CreateSharedMemoryAndSemaphores.patch" Content-Transfer-Encoding: base64 RnJvbSAwY2I2ZjhkNjY1OTgwZDMwYTVkMmEyOTAxMzAwMDc0NGYxNmJmODEzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFN1biwgMTggSnVuIDIwMjMgMTE6MDA6MjEgKzAzMDAK U3ViamVjdDogW1BBVENIIDMvOV0gUmVmYWN0b3IgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2Vt YXBob3Jlcy4KCk1vdmVzIEluaXRQcm9jZXNzIGNhbGxzIGEgbGl0dGxlIGxhdGVyIGluIEVY RUNfQkFDS0VORCBjYXNlLgoKRm9yIGNsYXJpdHksIGhhdmUgc2VwYXJhdGUgZnVuY3Rpb25z IGZvciAqY3JlYXRpbmcqIHRoZSBzaGFyZWQgbWVtb3J5CmFuZCBzZW1hcGhvcmVzLCBhdCBw b3N0bWFzdGVyIG9yIHNpbmdsZS11c2VyIGJhY2tlbmQgc3RhcnR1cCwgYW5kIGZvcgoqYXR0 YWNoaW5nKiB0byBleGlzdGluZyBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZXMgaW4gRVhFQ19C QUNLRU5EIGNhc2UuCgpJIGZpbmQgaXQgcHJldHR5IGNvbmZ1c2luZyBpbiBhbGwgdGhlICpT aG1lbUluaXQoKSBmdW5jdGlvbnMgdG9vLCB0aGF0CnRoZXkgYXJlIGNhbGxlZCBpbiB0d28g ZGlmZmVyZW50IGNvbnRleHRzOiBpbiBwb3N0bWFzdGVyIHdoZW4gY3JlYXRpbmcKdGhlIHNo bWVtIHN0cnVjdHMsIGFuZCBpbiB0aGUgY2hpbGQgcHJvY2VzcyBpbiBFWEVDX0JBQ0tFTkQg d2hlbgphdHRhY2hpbmcgdG8gdGhlIGFscmVhZHkgZXhpc3Rpbmcgc3RydWN0cy4gQnV0IHRo aXMgY29tbWl0IGRvZXNuJ3QKY2hhbmdlIHRoYXQuCi0tLQogc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9hdXRvdmFjdXVtLmMgfCAyMiArKysrKystLS0tLS0tCiBzcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2F1eHByb2Nlc3MuYyB8ICA4ICsrLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVy L2Jnd29ya2VyLmMgICB8IDExICsrKy0tLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9z dG1hc3Rlci5jIHwgNDggKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyAgICAgIHwgMTEgKysrKysrKwogc3JjL2JhY2tlbmQv c3RvcmFnZS9sbWdyL3Byb2MuYyAgICAgfCAgMiArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9p cGMuaCAgICAgICAgICAgfCAgMSArCiA3IGZpbGVzIGNoYW5nZWQsIDQxIGluc2VydGlvbnMo KyksIDYyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvYXV0b3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMK aW5kZXggZjkyOWI2MmU4YWQuLjcxNTdjNTQ2NmFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2F1dG92YWN1dW0uYwpAQCAtNDc2LDE0ICs0NzYsMTMgQEAgQXV0b1ZhY0xhdW5jaGVyTWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCXBxc2lnbmFsKFNJR0NITEQsIFNJR19ERkwp OwogCiAJLyoKLQkgKiBDcmVhdGUgYSBwZXItYmFja2VuZCBQR1BST0Mgc3RydWN0IGluIHNo YXJlZCBtZW1vcnksIGV4Y2VwdCBpbiB0aGUKLQkgKiBFWEVDX0JBQ0tFTkQgY2FzZSB3aGVy ZSB0aGlzIHdhcyBkb25lIGluIFN1YlBvc3RtYXN0ZXJNYWluLiBXZSBtdXN0IGRvCi0JICog dGhpcyBiZWZvcmUgd2UgY2FuIHVzZSBMV0xvY2tzIChhbmQgaW4gdGhlIEVYRUNfQkFDS0VO RCBjYXNlIHdlIGFscmVhZHkKLQkgKiBoYWQgdG8gZG8gc29tZSBzdHVmZiB3aXRoIExXTG9j a3MpLgorCSAqIENyZWF0ZSBhIHBlci1iYWNrZW5kIFBHUFJPQyBzdHJ1Y3QgaW4gc2hhcmVk IG1lbW9yeS4gV2UgbXVzdCBkbworCSAqIHRoaXMgYmVmb3JlIHdlIGNhbiB1c2UgTFdMb2Nr cy4KIAkgKi8KLSNpZm5kZWYgRVhFQ19CQUNLRU5ECiAJSW5pdFByb2Nlc3MoKTsKLSNlbmRp ZgorCisJLyogQXR0YWNoIHByb2Nlc3MgdG8gc2hhcmVkIGRhdGEgc3RydWN0dXJlcyAqLwor CUF0dGFjaFNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXMoKTsKIAogCS8qIEVhcmx5IGluaXRp YWxpemF0aW9uICovCiAJQmFzZUluaXQoKTsKQEAgLTE1NDgsMTQgKzE1NDcsMTMgQEAgQXV0 b1ZhY1dvcmtlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlwcXNpZ25hbChTSUdD SExELCBTSUdfREZMKTsKIAogCS8qCi0JICogQ3JlYXRlIGEgcGVyLWJhY2tlbmQgUEdQUk9D IHN0cnVjdCBpbiBzaGFyZWQgbWVtb3J5LCBleGNlcHQgaW4gdGhlCi0JICogRVhFQ19CQUNL RU5EIGNhc2Ugd2hlcmUgdGhpcyB3YXMgZG9uZSBpbiBTdWJQb3N0bWFzdGVyTWFpbi4gV2Ug bXVzdCBkbwotCSAqIHRoaXMgYmVmb3JlIHdlIGNhbiB1c2UgTFdMb2NrcyAoYW5kIGluIHRo ZSBFWEVDX0JBQ0tFTkQgY2FzZSB3ZSBhbHJlYWR5Ci0JICogaGFkIHRvIGRvIHNvbWUgc3R1 ZmYgd2l0aCBMV0xvY2tzKS4KKwkgKiBDcmVhdGUgYSBwZXItYmFja2VuZCBQR1BST0Mgc3Ry dWN0IGluIHNoYXJlZCBtZW1vcnkuIFdlIG11c3QgZG8KKwkgKiB0aGlzIGJlZm9yZSB3ZSBj YW4gdXNlIExXTG9ja3MuCiAJICovCi0jaWZuZGVmIEVYRUNfQkFDS0VORAogCUluaXRQcm9j ZXNzKCk7Ci0jZW5kaWYKKworCS8qIEF0dGFjaCBwcm9jZXNzIHRvIHNoYXJlZCBkYXRhIHN0 cnVjdHVyZXMgKi8KKwlBdHRhY2hTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKCk7CiAKIAkv KiBFYXJseSBpbml0aWFsaXphdGlvbiAqLwogCUJhc2VJbml0KCk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYyBiL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvYXV4cHJvY2Vzcy5jCmluZGV4IGNhZTZmZWIzNTYyLi41MzZkOWEyYjNlNCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMKKysrIGIvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMKQEAgLTk3LDEyICs5NywxMiBAQCBB dXhpbGlhcnlQcm9jZXNzTWFpbihBdXhQcm9jVHlwZSBhdXh0eXBlKQogCSAqLwogCiAJLyoK LQkgKiBDcmVhdGUgYSBQR1BST0Mgc28gd2UgY2FuIHVzZSBMV0xvY2tzLiAgSW4gdGhlIEVY RUNfQkFDS0VORCBjYXNlLCB0aGlzCi0JICogd2FzIGFscmVhZHkgZG9uZSBieSBTdWJQb3N0 bWFzdGVyTWFpbigpLgorCSAqIENyZWF0ZSBhIFBHUFJPQyBzbyB3ZSBjYW4gdXNlIExXTG9j a3MuCiAJICovCi0jaWZuZGVmIEVYRUNfQkFDS0VORAogCUluaXRBdXhpbGlhcnlQcm9jZXNz KCk7Ci0jZW5kaWYKKworCS8qIEF0dGFjaCBwcm9jZXNzIHRvIHNoYXJlZCBkYXRhIHN0cnVj dHVyZXMgKi8KKwlBdHRhY2hTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKCk7CiAKIAlCYXNl SW5pdCgpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2Vy LmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKaW5kZXggYjcxNDAzMDZl NDMuLjEzNTE5ZWEwYzQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jn d29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCkBAIC04 MTAsMTQgKzgxMCwxMyBAQCBTdGFydEJhY2tncm91bmRXb3JrZXIodm9pZCkKIAlQR19leGNl cHRpb25fc3RhY2sgPSAmbG9jYWxfc2lnam1wX2J1ZjsKIAogCS8qCi0JICogQ3JlYXRlIGEg cGVyLWJhY2tlbmQgUEdQUk9DIHN0cnVjdCBpbiBzaGFyZWQgbWVtb3J5LCBleGNlcHQgaW4g dGhlCi0JICogRVhFQ19CQUNLRU5EIGNhc2Ugd2hlcmUgdGhpcyB3YXMgZG9uZSBpbiBTdWJQ b3N0bWFzdGVyTWFpbi4gV2UgbXVzdCBkbwotCSAqIHRoaXMgYmVmb3JlIHdlIGNhbiB1c2Ug TFdMb2NrcyAoYW5kIGluIHRoZSBFWEVDX0JBQ0tFTkQgY2FzZSB3ZSBhbHJlYWR5Ci0JICog aGFkIHRvIGRvIHNvbWUgc3R1ZmYgd2l0aCBMV0xvY2tzKS4KKwkgKiBDcmVhdGUgYSBwZXIt YmFja2VuZCBQR1BST0Mgc3RydWN0IGluIHNoYXJlZCBtZW1vcnkuIFdlIG11c3QgZG8KKwkg KiB0aGlzIGJlZm9yZSB3ZSBjYW4gdXNlIExXTG9ja3MuCiAJICovCi0jaWZuZGVmIEVYRUNf QkFDS0VORAogCUluaXRQcm9jZXNzKCk7Ci0jZW5kaWYKKworCS8qIEF0dGFjaCBwcm9jZXNz IHRvIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgKi8KKwlBdHRhY2hTaGFyZWRNZW1vcnlBbmRT ZW1hcGhvcmVzKCk7CiAKIAkvKgogCSAqIEVhcmx5IGluaXRpYWxpemF0aW9uLgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCBhN2E5ZTA2MWM1Yi4uYmY5ZjBkMjcy NzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisr KyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC00MTc2LDE1ICs0 MTc2LDYgQEAgQmFja2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkKIAkJLyogUGVyZm9ybSBhZGRp dGlvbmFsIGluaXRpYWxpemF0aW9uIGFuZCBjb2xsZWN0IHN0YXJ0dXAgcGFja2V0ICovCiAJ CUJhY2tlbmRJbml0aWFsaXplKHBvcnQpOwogCi0JCS8qCi0JCSAqIENyZWF0ZSBhIHBlci1i YWNrZW5kIFBHUFJPQyBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeS4gV2UgbXVzdCBkbwotCQkg KiB0aGlzIGJlZm9yZSB3ZSBjYW4gdXNlIExXTG9ja3MuIEluIHRoZSAhRVhFQ19CQUNLRU5E IGNhc2UgKGhlcmUpCi0JCSAqIHRoaXMgY291bGQgYmUgZGVsYXllZCBhIGJpdCBmdXJ0aGVy LCBidXQgRVhFQ19CQUNLRU5EIG5lZWRzIHRvIGRvCi0JCSAqIHN0dWZmIHdpdGggTFdMb2Nr cyBiZWZvcmUgUG9zdGdyZXNNYWluKCksIHNvIHdlIGRvIGl0IGhlcmUgYXMgd2VsbAotCQkg KiBmb3Igc3ltbWV0cnkuCi0JCSAqLwotCQlJbml0UHJvY2VzcygpOwotCiAJCS8qIEFuZCBy dW4gdGhlIGJhY2tlbmQgKi8KIAkJQmFja2VuZFJ1bihwb3J0KTsKIAl9CkBAIC00NDUyLDYg KzQ0NDMsMTUgQEAgQmFja2VuZEluaXRpYWxpemUoUG9ydCAqcG9ydCkKIHN0YXRpYyB2b2lk CiBCYWNrZW5kUnVuKFBvcnQgKnBvcnQpCiB7CisJLyoKKwkgKiBDcmVhdGUgYSBwZXItYmFj a2VuZCBQR1BST0Mgc3RydWN0IGluIHNoYXJlZCBtZW1vcnkuIFdlIG11c3QgZG8KKwkgKiB0 aGlzIGJlZm9yZSB3ZSBjYW4gdXNlIExXTG9ja3MgKGluIEF0dGFjaFNoYXJlZE1lbW9yeUFu ZFNlbWFwaG9yZXMpLgorCSAqLworCUluaXRQcm9jZXNzKCk7CisKKwkvKiBBdHRhY2ggcHJv Y2VzcyB0byBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzICovCisJQXR0YWNoU2hhcmVkTWVtb3J5 QW5kU2VtYXBob3JlcygpOworCiAJLyoKIAkgKiBNYWtlIHN1cmUgd2UgYXJlbid0IGluIFBv c3RtYXN0ZXJDb250ZXh0IGFueW1vcmUuICAoV2UgY2FuJ3QgZGVsZXRlIGl0CiAJICoganVz dCB5ZXQsIHRob3VnaCwgYmVjYXVzZSBJbml0UG9zdGdyZXMgd2lsbCBuZWVkIHRoZSBIQkEg ZGF0YS4pCkBAIC00OTQ3LDEyICs0OTQ3LDYgQEAgU3ViUG9zdG1hc3Rlck1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKIAkJLyogUmVzdG9yZSBiYXNpYyBzaGFyZWQgbWVtb3J5IHBv aW50ZXJzICovCiAJCUluaXRTaG1lbUFjY2VzcyhVc2VkU2htZW1TZWdBZGRyKTsKIAotCQkv KiBOZWVkIGEgUEdQUk9DIHRvIHJ1biBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVz ICovCi0JCUluaXRQcm9jZXNzKCk7Ci0KLQkJLyogQXR0YWNoIHByb2Nlc3MgdG8gc2hhcmVk IGRhdGEgc3RydWN0dXJlcyAqLwotCQlDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVz KCk7Ci0KIAkJLyogQW5kIHJ1biB0aGUgYmFja2VuZCAqLwogCQlCYWNrZW5kUnVuKCZwb3J0 KTsJCS8qIGRvZXMgbm90IHJldHVybiAqLwogCX0KQEAgLTQ5NjUsMTIgKzQ5NTksNiBAQCBT dWJQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkvKiBSZXN0b3Jl IGJhc2ljIHNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KIAkJSW5pdFNobWVtQWNjZXNzKFVz ZWRTaG1lbVNlZ0FkZHIpOwogCi0JCS8qIE5lZWQgYSBQR1BST0MgdG8gcnVuIENyZWF0ZVNo YXJlZE1lbW9yeUFuZFNlbWFwaG9yZXMgKi8KLQkJSW5pdEF1eGlsaWFyeVByb2Nlc3MoKTsK LQotCQkvKiBBdHRhY2ggcHJvY2VzcyB0byBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzICovCi0J CUNyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXMoKTsKLQogCQlhdXh0eXBlID0gYXRv aShhcmd2WzNdKTsKIAkJQXV4aWxpYXJ5UHJvY2Vzc01haW4oYXV4dHlwZSk7CS8qIGRvZXMg bm90IHJldHVybiAqLwogCX0KQEAgLTQ5NzksMTIgKzQ5NjcsNiBAQCBTdWJQb3N0bWFzdGVy TWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkvKiBSZXN0b3JlIGJhc2ljIHNoYXJl ZCBtZW1vcnkgcG9pbnRlcnMgKi8KIAkJSW5pdFNobWVtQWNjZXNzKFVzZWRTaG1lbVNlZ0Fk ZHIpOwogCi0JCS8qIE5lZWQgYSBQR1BST0MgdG8gcnVuIENyZWF0ZVNoYXJlZE1lbW9yeUFu ZFNlbWFwaG9yZXMgKi8KLQkJSW5pdFByb2Nlc3MoKTsKLQotCQkvKiBBdHRhY2ggcHJvY2Vz cyB0byBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzICovCi0JCUNyZWF0ZVNoYXJlZE1lbW9yeUFu ZFNlbWFwaG9yZXMoKTsKLQogCQlBdXRvVmFjTGF1bmNoZXJNYWluKGFyZ2MgLSAyLCBhcmd2 ICsgMik7CS8qIGRvZXMgbm90IHJldHVybiAqLwogCX0KIAlpZiAoc3RyY21wKGFyZ3ZbMV0s ICItLWZvcmthdndvcmtlciIpID09IDApCkBAIC00OTkyLDEyICs0OTc0LDYgQEAgU3ViUG9z dG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJLyogUmVzdG9yZSBiYXNp YyBzaGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCiAJCUluaXRTaG1lbUFjY2VzcyhVc2VkU2ht ZW1TZWdBZGRyKTsKIAotCQkvKiBOZWVkIGEgUEdQUk9DIHRvIHJ1biBDcmVhdGVTaGFyZWRN ZW1vcnlBbmRTZW1hcGhvcmVzICovCi0JCUluaXRQcm9jZXNzKCk7Ci0KLQkJLyogQXR0YWNo IHByb2Nlc3MgdG8gc2hhcmVkIGRhdGEgc3RydWN0dXJlcyAqLwotCQlDcmVhdGVTaGFyZWRN ZW1vcnlBbmRTZW1hcGhvcmVzKCk7Ci0KIAkJQXV0b1ZhY1dvcmtlck1haW4oYXJnYyAtIDIs IGFyZ3YgKyAyKTsJLyogZG9lcyBub3QgcmV0dXJuICovCiAJfQogCWlmIChzdHJuY21wKGFy Z3ZbMV0sICItLWZvcmtiZ3dvcmtlciIsIDE0KSA9PSAwKQpAQCAtNTAwOCwxMiArNDk4NCw2 IEBAIFN1YlBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCS8qIFJl c3RvcmUgYmFzaWMgc2hhcmVkIG1lbW9yeSBwb2ludGVycyAqLwogCQlJbml0U2htZW1BY2Nl c3MoVXNlZFNobWVtU2VnQWRkcik7CiAKLQkJLyogTmVlZCBhIFBHUFJPQyB0byBydW4gQ3Jl YXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlcyAqLwotCQlJbml0UHJvY2VzcygpOwotCi0J CS8qIEF0dGFjaCBwcm9jZXNzIHRvIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgKi8KLQkJQ3Jl YXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlcygpOwotCiAJCVN0YXJ0QmFja2dyb3VuZFdv cmtlcigpOwogCX0KIAlpZiAoc3RyY21wKGFyZ3ZbMV0sICItLWZvcmtsb2ciKSA9PSAwKQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IDhmMWRlZDczMzhmLi5iZTZhNzc0ZTM1MSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtMTcwLDYgKzE3MCwxNyBAQCBDYWxjdWxh dGVTaG1lbVNpemUoaW50ICpudW1fc2VtYXBob3JlcykKICAqIGNoZWNrIElzVW5kZXJQb3N0 bWFzdGVyLCByYXRoZXIgdGhhbiBFWEVDX0JBQ0tFTkQsIHRvIGRldGVjdCB0aGlzIGNhc2Uu CiAgKiBUaGlzIGlzIGEgYml0IGNvZGUtd2FzdGVmdWwgYW5kIGNvdWxkIGJlIGNsZWFuZWQg dXAuKQogICovCit2b2lkCitBdHRhY2hTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQp Cit7CisJLyogSW5pdFByb2Nlc3MgbXVzdCd2ZSBiZWVuIGNhbGxlZCBhbHJlYWR5ICovCisK KwkvKiBJbml0ICFFWEVDX0JBQ0tFTkQgbW9kZSwgd2UgaW5oZXJpdGVkIGV2ZXJ5dGhpbmcg dGhyb3VnaCB0aGUgZm9yayAqLworI2lmZGVmIEVYRUNfQkFDS0VORAorCUNyZWF0ZVNoYXJl ZE1lbW9yeUFuZFNlbWFwaG9yZXMoKTsKKyNlbmRpZgorfQorCiB2b2lkCiBDcmVhdGVTaGFy ZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2Mu YwppbmRleCBkYWM5MjEyMTlmYS4uOTFmNDE1YWE3ODMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L3Byb2MuYwpAQCAtNDY4LDcgKzQ2OCw3IEBAIEluaXRQcm9jZXNzKHZvaWQpCiAgKgogICog VGhpcyBpcyBzZXBhcmF0ZSBmcm9tIEluaXRQcm9jZXNzIGJlY2F1c2Ugd2UgY2FuJ3QgYWNx dWlyZSBMV0xvY2tzIHVudGlsCiAgKiB3ZSd2ZSBjcmVhdGVkIGEgUEdQUk9DLCBidXQgaW4g dGhlIEVYRUNfQkFDS0VORCBjYXNlIFByb2NBcnJheUFkZCB3b24ndAotICogd29yayB1bnRp bCBhZnRlciB3ZSd2ZSBkb25lIENyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXMuCisg KiB3b3JrIHVudGlsIGFmdGVyIHdlJ3ZlIGRvbmUgQXR0YWNoU2hhcmVkTWVtb3J5QW5kU2Vt YXBob3Jlcy4KICAqLwogdm9pZAogSW5pdFByb2Nlc3NQaGFzZTIodm9pZCkKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvaXBjLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2lw Yy5oCmluZGV4IDg4OGMwOGIzMDY3Li5lNzU2NTZmNTI0MiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9pcGMuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2lwYy5oCkBA IC03OSw2ICs3OSw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBzaG1lbV9zdGFydHVwX2hvb2tf dHlwZSBzaG1lbV9zdGFydHVwX2hvb2s7CiAKIGV4dGVybiBTaXplIENhbGN1bGF0ZVNobWVt U2l6ZShpbnQgKm51bV9zZW1hcGhvcmVzKTsKIGV4dGVybiB2b2lkIENyZWF0ZVNoYXJlZE1l bW9yeUFuZFNlbWFwaG9yZXModm9pZCk7CitleHRlcm4gdm9pZCBBdHRhY2hTaGFyZWRNZW1v cnlBbmRTZW1hcGhvcmVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgSW5pdGlhbGl6ZVNobWVtR1VD cyh2b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIElQQ19IICovCi0tIAoyLjMwLjIKCg== --------------kg1n0gXnIqDHZBpf1kTdCJqe Content-Type: text/x-patch; charset=UTF-8; name="0004-Use-FD_CLOEXEC-on-ListenSockets.patch" Content-Disposition: attachment; filename="0004-Use-FD_CLOEXEC-on-ListenSockets.patch" Content-Transfer-Encoding: base64 RnJvbSAxZDg5ZWVjNTNjN2ZlZmE3YTRhOGMwMTFjOWYxOWUzZGY2NGRjNDM2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMTIgSnVuIDIwMjMgMTY6MzM6MjAgKzAzMDAK U3ViamVjdDogW1BBVENIIDQvOV0gVXNlIEZEX0NMT0VYRUMgb24gTGlzdGVuU29ja2V0cwoK V2Ugd2VudCB0aHJvdWdoIHNvbWUgZWZmb3J0IHRvIGNsb3NlIHRoZW0gaW4gdGhlIGNoaWxk IHByb2Nlc3MuIEJldHRlciB0bwpub3QgaGFuZCB0aGVtIGRvd24gdG8gdGhlIGNoaWxkIHBy b2Nlc3MgaW4gdGhlIGZpcnN0IHBsYWNlLgotLS0KIHNyYy9iYWNrZW5kL2xpYnBxL3BxY29t bS5jICAgICAgICAgIHwgIDYgKysrKystCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuYyB8IDE0ICsrKysrKy0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDExIGluc2Vy dGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGli cHEvcHFjb21tLmMgYi9zcmMvYmFja2VuZC9saWJwcS9wcWNvbW0uYwppbmRleCBkYTViYjVm YzVkMy4uOTA2MWRhY2NjMjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL3BxY29t bS5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL3BxY29tbS5jCkBAIC00NTgsNiArNDU4LDkg QEAgU3RyZWFtU2VydmVyUG9ydChpbnQgZmFtaWx5LCBjb25zdCBjaGFyICpob3N0TmFtZSwg dW5zaWduZWQgc2hvcnQgcG9ydE51bWJlciwKIAkJfQogCiAjaWZuZGVmIFdJTjMyCisJCS8q IERvbid0IGdpdmUgdGhlIGxpc3RlbiBzb2NrZXQgdG8gYW55IHN1YnByb2dyYW1zIHdlIGV4 ZWN1dGUuICovCisJCWlmIChmY250bChmZCwgRl9TRVRGRCwgRkRfQ0xPRVhFQykgPCAwKQor CQkJZWxvZyhGQVRBTCwgImZjbnRsKEZfU0VURkQpIGZhaWxlZCBvbiBzb2NrZXQ6ICVtIik7 CiAKIAkJLyoKIAkJICogV2l0aG91dCB0aGUgU09fUkVVU0VBRERSIGZsYWcsIGEgbmV3IHBv c3RtYXN0ZXIgY2FuJ3QgYmUgc3RhcnRlZApAQCAtODMxLDcgKzgzNCw4IEBAIFN0cmVhbUNv bm5lY3Rpb24ocGdzb2NrZXQgc2VydmVyX2ZkLCBQb3J0ICpwb3J0KQogdm9pZAogU3RyZWFt Q2xvc2UocGdzb2NrZXQgc29jaykKIHsKLQljbG9zZXNvY2tldChzb2NrKTsKKwlpZiAoY2xv c2Vzb2NrZXQoc29jaykgIT0gMCkKKwkJZWxvZyhMT0csICJjbG9zZXNvY2tldCBmYWlsZWQ6 ICVtIik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bv c3RtYXN0ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCmluZGV4 IGJmOWYwZDI3Mjc4Li4yMjg3NDRlYmVlNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9wb3N0bWFzdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0 bWFzdGVyLmMKQEAgLTQ5Nyw3ICs0OTcsNiBAQCB0eXBlZGVmIHN0cnVjdAogCVBvcnQJCXBv cnQ7CiAJSW5oZXJpdGFibGVTb2NrZXQgcG9ydHNvY2tldDsKIAljaGFyCQlEYXRhRGlyW01B WFBHUEFUSF07Ci0JcGdzb2NrZXQJTGlzdGVuU29ja2V0W01BWExJU1RFTl07CiAJaW50MzIJ CU15Q2FuY2VsS2V5OwogCWludAkJCU15UE1DaGlsZFNsb3Q7CiAjaWZuZGVmIFdJTjMyCkBA IC0yNTc1LDggKzI1NzQsNiBAQCBDb25uRnJlZShQb3J0ICpwb3J0KQogdm9pZAogQ2xvc2VQ b3N0bWFzdGVyUG9ydHMoYm9vbCBhbV9zeXNsb2dnZXIpCiB7Ci0JaW50CQkJaTsKLQogCS8q IFJlbGVhc2UgcmVzb3VyY2VzIGhlbGQgYnkgdGhlIHBvc3RtYXN0ZXIncyBXYWl0RXZlbnRT ZXQuICovCiAJaWYgKHBtX3dhaXRfc2V0KQogCXsKQEAgLTI2MDMsOCArMjYwMCwxMiBAQCBD bG9zZVBvc3RtYXN0ZXJQb3J0cyhib29sIGFtX3N5c2xvZ2dlcikKIAkvKgogCSAqIENsb3Nl IHRoZSBwb3N0bWFzdGVyJ3MgbGlzdGVuIHNvY2tldHMuICBUaGVzZSBhcmVuJ3QgdHJhY2tl ZCBieSBmZC5jLAogCSAqIHNvIHdlIGRvbid0IGNhbGwgUmVsZWFzZUV4dGVybmFsRkQoKSBo ZXJlLgorCSAqCisJICogVGhlIGxpc3RlbiBzb2NrZXRzIGFyZSBtYXJrZWQgYXMgRkRfQ0xP RVhFQywgc28gdGhpcyBpc24ndCBuZWVkZWQgaW4KKwkgKiBFWEVDX0JBQ0tFTkQgbW9kZS4K IAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTUFYTElTVEVOOyBpKyspCisjaWZuZGVmIEVYRUNf QkFDS0VORAorCWZvciAoaW50IGkgPSAwOyBpIDwgTUFYTElTVEVOOyBpKyspCiAJewogCQlp ZiAoTGlzdGVuU29ja2V0W2ldICE9IFBHSU5WQUxJRF9TT0NLRVQpCiAJCXsKQEAgLTI2MTIs NiArMjYxMyw3IEBAIENsb3NlUG9zdG1hc3RlclBvcnRzKGJvb2wgYW1fc3lzbG9nZ2VyKQog CQkJTGlzdGVuU29ja2V0W2ldID0gUEdJTlZBTElEX1NPQ0tFVDsKIAkJfQogCX0KKyNlbmRp ZgogCiAJLyoKIAkgKiBJZiB1c2luZyBzeXNsb2dnZXIsIGNsb3NlIHRoZSByZWFkIHNpZGUg b2YgdGhlIHBpcGUuICBXZSBkb24ndCBib3RoZXIKQEAgLTYwMzUsOCArNjAzNyw2IEBAIHNh dmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBQb3J0ICpw b3J0LAogCiAJc3RybGNweShwYXJhbS0+RGF0YURpciwgRGF0YURpciwgTUFYUEdQQVRIKTsK IAotCW1lbWNweSgmcGFyYW0tPkxpc3RlblNvY2tldCwgJkxpc3RlblNvY2tldCwgc2l6ZW9m KExpc3RlblNvY2tldCkpOwotCiAJcGFyYW0tPk15Q2FuY2VsS2V5ID0gTXlDYW5jZWxLZXk7 CiAJcGFyYW0tPk15UE1DaGlsZFNsb3QgPSBNeVBNQ2hpbGRTbG90OwogCkBAIC02MjczLDgg KzYyNzMsNiBAQCByZXN0b3JlX2JhY2tlbmRfdmFyaWFibGVzKEJhY2tlbmRQYXJhbWV0ZXJz ICpwYXJhbSwgUG9ydCAqcG9ydCkKIAogCVNldERhdGFEaXIocGFyYW0tPkRhdGFEaXIpOwog Ci0JbWVtY3B5KCZMaXN0ZW5Tb2NrZXQsICZwYXJhbS0+TGlzdGVuU29ja2V0LCBzaXplb2Yo TGlzdGVuU29ja2V0KSk7Ci0KIAlNeUNhbmNlbEtleSA9IHBhcmFtLT5NeUNhbmNlbEtleTsK IAlNeVBNQ2hpbGRTbG90ID0gcGFyYW0tPk15UE1DaGlsZFNsb3Q7CiAKLS0gCjIuMzAuMgoK --------------kg1n0gXnIqDHZBpf1kTdCJqe Content-Type: text/x-patch; charset=UTF-8; name="0005-Move-too-many-clients-already-et-al.-checks-from-Pro.patch" Content-Disposition: attachment; filename*0="0005-Move-too-many-clients-already-et-al.-checks-from-Pro.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyZjUxOGJlOWU5NmNmZWQxYTFhNDliNGFmOGY3Y2I0YTgzN2FhNzg0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMTIgSnVuIDIwMjMgMTg6MDc6NTQgKzAzMDAK U3ViamVjdDogW1BBVENIIDUvOV0gTW92ZSAidG9vIG1hbnkgY2xpZW50cyBhbHJlYWR5IiBl dCBhbC4gY2hlY2tzIGZyb20KIFByb2Nlc3NTdGFydHVwUGFja2V0LgoKVGhlIGNoZWNrIGlz IG5vdCBhYm91dCBwcm9jZXNzaW5nIHRoZSBzdGFydHVwIHBhY2tldCwgc28gdGhlIGNhbGxp bmcKZnVuY3Rpb24gc2VlbXMgbGlrZSBhIG1vcmUgbmF0dXJhbCBwbGFjZS4KLS0tCiBzcmMv YmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyB8IDg2ICsrKysrKysrKysrKysrLS0t LS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNDMgaW5zZXJ0aW9ucygrKSwgNDMgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFz dGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCAyMjg3 NDRlYmVlNS4uZmE2ZjJjOGUyOWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rl ci5jCkBAIC0yMzIxLDQ5ICsyMzIxLDYgQEAgcmV0cnkxOgogCSAqLwogCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIAotCS8qCi0JICogSWYgd2UncmUgZ29pbmcgdG8g cmVqZWN0IHRoZSBjb25uZWN0aW9uIGR1ZSB0byBkYXRhYmFzZSBzdGF0ZSwgc2F5IHNvCi0J ICogbm93IGluc3RlYWQgb2Ygd2FzdGluZyBjeWNsZXMgb24gYW4gYXV0aGVudGljYXRpb24g ZXhjaGFuZ2UuIChUaGlzIGFsc28KLQkgKiBhbGxvd3MgYSBwZ19waW5nIHV0aWxpdHkgdG8g YmUgd3JpdHRlbi4pCi0JICovCi0Jc3dpdGNoIChwb3J0LT5jYW5BY2NlcHRDb25uZWN0aW9u cykKLQl7Ci0JCWNhc2UgQ0FDX1NUQVJUVVA6Ci0JCQllcmVwb3J0KEZBVEFMLAotCQkJCQko ZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT05ORUNUX05PVyksCi0JCQkJCSBlcnJtc2coInRo ZSBkYXRhYmFzZSBzeXN0ZW0gaXMgc3RhcnRpbmcgdXAiKSkpOwotCQkJYnJlYWs7Ci0JCWNh c2UgQ0FDX05PVENPTlNJU1RFTlQ6Ci0JCQlpZiAoRW5hYmxlSG90U3RhbmRieSkKLQkJCQll cmVwb3J0KEZBVEFMLAotCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9DQU5OT1RfQ09OTkVDVF9O T1cpLAotCQkJCQkJIGVycm1zZygidGhlIGRhdGFiYXNlIHN5c3RlbSBpcyBub3QgeWV0IGFj Y2VwdGluZyBjb25uZWN0aW9ucyIpLAotCQkJCQkJIGVycmRldGFpbCgiQ29uc2lzdGVudCBy ZWNvdmVyeSBzdGF0ZSBoYXMgbm90IGJlZW4geWV0IHJlYWNoZWQuIikpKTsKLQkJCWVsc2UK LQkJCQllcmVwb3J0KEZBVEFMLAotCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9DQU5OT1RfQ09O TkVDVF9OT1cpLAotCQkJCQkJIGVycm1zZygidGhlIGRhdGFiYXNlIHN5c3RlbSBpcyBub3Qg YWNjZXB0aW5nIGNvbm5lY3Rpb25zIiksCi0JCQkJCQkgZXJyZGV0YWlsKCJIb3Qgc3RhbmRi eSBtb2RlIGlzIGRpc2FibGVkLiIpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBDQUNfU0hVVERP V046Ci0JCQllcmVwb3J0KEZBVEFMLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0NBTk5PVF9D T05ORUNUX05PVyksCi0JCQkJCSBlcnJtc2coInRoZSBkYXRhYmFzZSBzeXN0ZW0gaXMgc2h1 dHRpbmcgZG93biIpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBDQUNfUkVDT1ZFUlk6Ci0JCQll cmVwb3J0KEZBVEFMLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT05ORUNUX05P VyksCi0JCQkJCSBlcnJtc2coInRoZSBkYXRhYmFzZSBzeXN0ZW0gaXMgaW4gcmVjb3Zlcnkg bW9kZSIpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBDQUNfVE9PTUFOWToKLQkJCWVyZXBvcnQo RkFUQUwsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfVE9PX01BTllfQ09OTkVDVElPTlMpLAot CQkJCQkgZXJybXNnKCJzb3JyeSwgdG9vIG1hbnkgY2xpZW50cyBhbHJlYWR5IikpKTsKLQkJ CWJyZWFrOwotCQljYXNlIENBQ19PSzoKLQkJCWJyZWFrOwotCX0KLQogCXJldHVybiBTVEFU VVNfT0s7CiB9CiAKQEAgLTQzOTEsNiArNDM0OCw0OSBAQCBCYWNrZW5kSW5pdGlhbGl6ZShQ b3J0ICpwb3J0KQogCSAqLwogCXN0YXR1cyA9IFByb2Nlc3NTdGFydHVwUGFja2V0KHBvcnQs IGZhbHNlLCBmYWxzZSk7CiAKKwkvKgorCSAqIElmIHdlJ3JlIGdvaW5nIHRvIHJlamVjdCB0 aGUgY29ubmVjdGlvbiBkdWUgdG8gZGF0YWJhc2Ugc3RhdGUsIHNheSBzbworCSAqIG5vdyBp bnN0ZWFkIG9mIHdhc3RpbmcgY3ljbGVzIG9uIGFuIGF1dGhlbnRpY2F0aW9uIGV4Y2hhbmdl LiAoVGhpcyBhbHNvCisJICogYWxsb3dzIGEgcGdfcGluZyB1dGlsaXR5IHRvIGJlIHdyaXR0 ZW4uKQorCSAqLworCXN3aXRjaCAocG9ydC0+Y2FuQWNjZXB0Q29ubmVjdGlvbnMpCisJewor CQljYXNlIENBQ19TVEFSVFVQOgorCQkJZXJlcG9ydChGQVRBTCwKKwkJCQkJKGVycmNvZGUo RVJSQ09ERV9DQU5OT1RfQ09OTkVDVF9OT1cpLAorCQkJCQkgZXJybXNnKCJ0aGUgZGF0YWJh c2Ugc3lzdGVtIGlzIHN0YXJ0aW5nIHVwIikpKTsKKwkJCWJyZWFrOworCQljYXNlIENBQ19O T1RDT05TSVNURU5UOgorCQkJaWYgKEVuYWJsZUhvdFN0YW5kYnkpCisJCQkJZXJlcG9ydChG QVRBTCwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfQ0FOTk9UX0NPTk5FQ1RfTk9XKSwKKwkJ CQkJCSBlcnJtc2coInRoZSBkYXRhYmFzZSBzeXN0ZW0gaXMgbm90IHlldCBhY2NlcHRpbmcg Y29ubmVjdGlvbnMiKSwKKwkJCQkJCSBlcnJkZXRhaWwoIkNvbnNpc3RlbnQgcmVjb3Zlcnkg c3RhdGUgaGFzIG5vdCBiZWVuIHlldCByZWFjaGVkLiIpKSk7CisJCQllbHNlCisJCQkJZXJl cG9ydChGQVRBTCwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfQ0FOTk9UX0NPTk5FQ1RfTk9X KSwKKwkJCQkJCSBlcnJtc2coInRoZSBkYXRhYmFzZSBzeXN0ZW0gaXMgbm90IGFjY2VwdGlu ZyBjb25uZWN0aW9ucyIpLAorCQkJCQkJIGVycmRldGFpbCgiSG90IHN0YW5kYnkgbW9kZSBp cyBkaXNhYmxlZC4iKSkpOworCQkJYnJlYWs7CisJCWNhc2UgQ0FDX1NIVVRET1dOOgorCQkJ ZXJlcG9ydChGQVRBTCwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9DQU5OT1RfQ09OTkVDVF9O T1cpLAorCQkJCQkgZXJybXNnKCJ0aGUgZGF0YWJhc2Ugc3lzdGVtIGlzIHNodXR0aW5nIGRv d24iKSkpOworCQkJYnJlYWs7CisJCWNhc2UgQ0FDX1JFQ09WRVJZOgorCQkJZXJlcG9ydChG QVRBTCwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9DQU5OT1RfQ09OTkVDVF9OT1cpLAorCQkJ CQkgZXJybXNnKCJ0aGUgZGF0YWJhc2Ugc3lzdGVtIGlzIGluIHJlY292ZXJ5IG1vZGUiKSkp OworCQkJYnJlYWs7CisJCWNhc2UgQ0FDX1RPT01BTlk6CisJCQllcmVwb3J0KEZBVEFMLAor CQkJCQkoZXJyY29kZShFUlJDT0RFX1RPT19NQU5ZX0NPTk5FQ1RJT05TKSwKKwkJCQkJIGVy cm1zZygic29ycnksIHRvbyBtYW55IGNsaWVudHMgYWxyZWFkeSIpKSk7CisJCQlicmVhazsK KwkJY2FzZSBDQUNfT0s6CisJCQlicmVhazsKKwl9CisKIAkvKgogCSAqIERpc2FibGUgdGhl IHRpbWVvdXQsIGFuZCBwcmV2ZW50IFNJR1RFUk0gYWdhaW4uCiAJICovCi0tIAoyLjMwLjIK Cg== --------------kg1n0gXnIqDHZBpf1kTdCJqe Content-Type: text/x-patch; charset=UTF-8; name="0006-Pass-CAC-as-argument-to-backend-process.patch" Content-Disposition: attachment; filename="0006-Pass-CAC-as-argument-to-backend-process.patch" Content-Transfer-Encoding: base64 RnJvbSBjMjViNjdjMDQ1MDE4YTJiZjA1ZTZmZjUzODE5ZDI2ZTU2MWZjODNmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFN1biwgMTggSnVuIDIwMjMgMTQ6MTE6MTYgKzAzMDAK U3ViamVjdDogW1BBVENIIDYvOV0gUGFzcyBDQUMgYXMgYXJndW1lbnQgdG8gYmFja2VuZCBw cm9jZXNzLgoKV2UgdXNlZCB0byBzbXVnZ2xlIGl0IHRvIHRoZSBjaGlsZCBwcm9jZXNzIGlu IHRoZSBQb3J0IHN0cnVjdCwgYnV0IGl0IHNlZW1zCmJldHRlciB0byBwYXNzIGl0IGRvd24g YXMgYSBzZXBhcmF0ZSBhcmd1bWVudC4KLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bv c3RtYXN0ZXIuYyB8IDQzICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCiBzcmMvaW5j bHVkZS9saWJwcS9saWJwcS1iZS5oICAgICAgICB8IDEyIC0tLS0tLS0tCiAyIGZpbGVzIGNo YW5nZWQsIDMxIGluc2VydGlvbnMoKyksIDI0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXggZmE2ZjJjOGUyOWMuLjNjZTlkNzZhODUwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYworKysgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwpAQCAtNDE3LDcgKzQxNywxOCBA QCBzdGF0aWMgdm9pZCBIYW5kbGVDaGlsZENyYXNoKGludCBwaWQsIGludCBleGl0c3RhdHVz LCBjb25zdCBjaGFyICpwcm9jbmFtZSk7CiBzdGF0aWMgdm9pZCBMb2dDaGlsZEV4aXQoaW50 IGxldiwgY29uc3QgY2hhciAqcHJvY25hbWUsCiAJCQkJCQkgaW50IHBpZCwgaW50IGV4aXRz dGF0dXMpOwogc3RhdGljIHZvaWQgUG9zdG1hc3RlclN0YXRlTWFjaGluZSh2b2lkKTsKLXN0 YXRpYyB2b2lkIEJhY2tlbmRJbml0aWFsaXplKFBvcnQgKnBvcnQpOworCit0eXBlZGVmIGVu dW0gQ0FDX3N0YXRlCit7CisJQ0FDX09LLAorCUNBQ19TVEFSVFVQLAorCUNBQ19TSFVURE9X TiwKKwlDQUNfUkVDT1ZFUlksCisJQ0FDX05PVENPTlNJU1RFTlQsCisJQ0FDX1RPT01BTlkK K30gQ0FDX3N0YXRlOworCitzdGF0aWMgdm9pZCBCYWNrZW5kSW5pdGlhbGl6ZShQb3J0ICpw b3J0LCBDQUNfc3RhdGUgY2FjKTsKIHN0YXRpYyB2b2lkIEJhY2tlbmRSdW4oUG9ydCAqcG9y dCkgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CiBzdGF0aWMgdm9pZCBFeGl0UG9zdG1hc3Rl cihpbnQgc3RhdHVzKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKIHN0YXRpYyBpbnQJU2Vy dmVyTG9vcCh2b2lkKTsKQEAgLTQ3NCw3ICs0ODUsNyBAQCB0eXBlZGVmIHN0cnVjdAogfSB3 aW4zMl9kZWFkY2hpbGRfd2FpdGluZm87CiAjZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KIAot c3RhdGljIHBpZF90IGJhY2tlbmRfZm9ya2V4ZWMoUG9ydCAqcG9ydCk7CitzdGF0aWMgcGlk X3QgYmFja2VuZF9mb3JrZXhlYyhQb3J0ICpwb3J0LCBDQUNfc3RhdGUgY2FjKTsKIHN0YXRp YyBwaWRfdCBpbnRlcm5hbF9mb3JrZXhlYyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBQb3J0 ICpwb3J0KTsKIAogLyogVHlwZSBmb3IgYSBzb2NrZXQgdGhhdCBjYW4gYmUgaW5oZXJpdGVk IHRvIGEgY2xpZW50IHByb2Nlc3MgKi8KQEAgLTQwNzUsNiArNDA4Niw3IEBAIEJhY2tlbmRT dGFydHVwKFBvcnQgKnBvcnQpCiB7CiAJQmFja2VuZCAgICAqYm47CQkJCS8qIGZvciBiYWNr ZW5kIGNsZWFudXAgKi8KIAlwaWRfdAkJcGlkOworCUNBQ19zdGF0ZQljYWM7CiAKIAkvKgog CSAqIENyZWF0ZSBiYWNrZW5kIGRhdGEgc3RydWN0dXJlLiAgQmV0dGVyIGJlZm9yZSB0aGUg Zm9yaygpIHNvIHdlIGNhbgpAQCAtNDEwNiw4ICs0MTE4LDggQEAgQmFja2VuZFN0YXJ0dXAo UG9ydCAqcG9ydCkKIAlibi0+Y2FuY2VsX2tleSA9IE15Q2FuY2VsS2V5OwogCiAJLyogUGFz cyBkb3duIGNhbkFjY2VwdENvbm5lY3Rpb25zIHN0YXRlICovCi0JcG9ydC0+Y2FuQWNjZXB0 Q29ubmVjdGlvbnMgPSBjYW5BY2NlcHRDb25uZWN0aW9ucyhCQUNLRU5EX1RZUEVfTk9STUFM KTsKLQlibi0+ZGVhZF9lbmQgPSAocG9ydC0+Y2FuQWNjZXB0Q29ubmVjdGlvbnMgIT0gQ0FD X09LKTsKKwljYWMgPSBjYW5BY2NlcHRDb25uZWN0aW9ucyhCQUNLRU5EX1RZUEVfTk9STUFM KTsKKwlibi0+ZGVhZF9lbmQgPSAoY2FjICE9IENBQ19PSyk7CiAKIAkvKgogCSAqIFVubGVz cyBpdCdzIGEgZGVhZF9lbmQgY2hpbGQsIGFzc2lnbiBpdCBhIGNoaWxkIHNsb3QgbnVtYmVy CkBAIC00MTIxLDcgKzQxMzMsNyBAQCBCYWNrZW5kU3RhcnR1cChQb3J0ICpwb3J0KQogCWJu LT5iZ3dvcmtlcl9ub3RpZnkgPSBmYWxzZTsKIAogI2lmZGVmIEVYRUNfQkFDS0VORAotCXBp ZCA9IGJhY2tlbmRfZm9ya2V4ZWMocG9ydCk7CisJcGlkID0gYmFja2VuZF9mb3JrZXhlYyhw b3J0LCBjYWMpOwogI2Vsc2UJCQkJCQkJLyogIUVYRUNfQkFDS0VORCAqLwogCXBpZCA9IGZv cmtfcHJvY2VzcygpOwogCWlmIChwaWQgPT0gMCkJCQkJLyogY2hpbGQgKi8KQEAgLTQxMzMs NyArNDE0NSw3IEBAIEJhY2tlbmRTdGFydHVwKFBvcnQgKnBvcnQpCiAJCUNsb3NlUG9zdG1h c3RlclBvcnRzKGZhbHNlKTsKIAogCQkvKiBQZXJmb3JtIGFkZGl0aW9uYWwgaW5pdGlhbGl6 YXRpb24gYW5kIGNvbGxlY3Qgc3RhcnR1cCBwYWNrZXQgKi8KLQkJQmFja2VuZEluaXRpYWxp emUocG9ydCk7CisJCUJhY2tlbmRJbml0aWFsaXplKHBvcnQsIGNhYyk7CiAKIAkJLyogQW5k IHJ1biB0aGUgYmFja2VuZCAqLwogCQlCYWNrZW5kUnVuKHBvcnQpOwpAQCAtNDIyMCw3ICs0 MjMyLDcgQEAgcmVwb3J0X2ZvcmtfZmFpbHVyZV90b19jbGllbnQoUG9ydCAqcG9ydCwgaW50 IGVycm51bSkKICAqIGJ1dCBoYXZlIG5vdCB5ZXQgc2V0IHVwIG1vc3Qgb2Ygb3VyIGxvY2Fs IHBvaW50ZXJzIHRvIHNobWVtIHN0cnVjdHVyZXMuCiAgKi8KIHN0YXRpYyB2b2lkCi1CYWNr ZW5kSW5pdGlhbGl6ZShQb3J0ICpwb3J0KQorQmFja2VuZEluaXRpYWxpemUoUG9ydCAqcG9y dCwgQ0FDX3N0YXRlIGNhYykKIHsKIAlpbnQJCQlzdGF0dXM7CiAJaW50CQkJcmV0OwpAQCAt NDM1Myw3ICs0MzY1LDcgQEAgQmFja2VuZEluaXRpYWxpemUoUG9ydCAqcG9ydCkKIAkgKiBu b3cgaW5zdGVhZCBvZiB3YXN0aW5nIGN5Y2xlcyBvbiBhbiBhdXRoZW50aWNhdGlvbiBleGNo YW5nZS4gKFRoaXMgYWxzbwogCSAqIGFsbG93cyBhIHBnX3BpbmcgdXRpbGl0eSB0byBiZSB3 cml0dGVuLikKIAkgKi8KLQlzd2l0Y2ggKHBvcnQtPmNhbkFjY2VwdENvbm5lY3Rpb25zKQor CXN3aXRjaCAoY2FjKQogCXsKIAkJY2FzZSBDQUNfU1RBUlRVUDoKIAkJCWVyZXBvcnQoRkFU QUwsCkBAIC00NDk4LDE1ICs0NTEwLDE5IEBAIHBvc3RtYXN0ZXJfZm9ya2V4ZWMoaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKICAqIHJldHVybnMgdGhlIHBpZCBvZiB0aGUgZm9yay9leGVj J2QgcHJvY2Vzcywgb3IgLTEgb24gZmFpbHVyZQogICovCiBzdGF0aWMgcGlkX3QKLWJhY2tl bmRfZm9ya2V4ZWMoUG9ydCAqcG9ydCkKK2JhY2tlbmRfZm9ya2V4ZWMoUG9ydCAqcG9ydCwg Q0FDX3N0YXRlIGNhYykKIHsKLQljaGFyCSAgICphdls0XTsKKwljaGFyCSAgICphdls1XTsK IAlpbnQJCQlhYyA9IDA7CisJY2hhcgkJY2FjYnVmWzEwXTsKIAogCWF2W2FjKytdID0gInBv c3RncmVzIjsKIAlhdlthYysrXSA9ICItLWZvcmtiYWNrZW5kIjsKIAlhdlthYysrXSA9IE5V TEw7CQkJLyogZmlsbGVkIGluIGJ5IGludGVybmFsX2ZvcmtleGVjICovCiAKKwlzbnByaW50 ZihjYWNidWYsIHNpemVvZihjYWNidWYpLCAiJWQiLCAoaW50KSBjYWMpOworCWF2W2FjKytd ID0gY2FjYnVmOworCiAJYXZbYWNdID0gTlVMTDsKIAlBc3NlcnQoYWMgPCBsZW5ndGhvZihh dikpOwogCkBAIC00OTEwLDcgKzQ5MjYsMTAgQEAgU3ViUG9zdG1hc3Rlck1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKIAkvKiBSdW4gYmFja2VuZCBvciBhcHByb3ByaWF0ZSBjaGls ZCAqLwogCWlmIChzdHJjbXAoYXJndlsxXSwgIi0tZm9ya2JhY2tlbmQiKSA9PSAwKQogCXsK LQkJQXNzZXJ0KGFyZ2MgPT0gMyk7CQkvKiBzaG91bGRuJ3QgYmUgYW55IG1vcmUgYXJncyAq LworCQlDQUNfc3RhdGUJY2FjOworCisJCUFzc2VydChhcmdjID09IDQpOworCQljYWMgPSAo Q0FDX3N0YXRlKSBhdG9pKGFyZ3ZbM10pOwogCiAJCS8qCiAJCSAqIE5lZWQgdG8gcmVpbml0 aWFsaXplIHRoZSBTU0wgbGlicmFyeSBpbiB0aGUgYmFja2VuZCwgc2luY2UgdGhlCkBAIC00 OTQ0LDcgKzQ5NjMsNyBAQCBTdWJQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCQkgKiBQR1BST0Mgc2xvdHMsIHdlIGhhdmUgYWxyZWFkeSBpbml0aWFsaXplZCBs aWJwcSBhbmQgYXJlIGFibGUgdG8KIAkJICogcmVwb3J0IHRoZSBlcnJvciB0byB0aGUgY2xp ZW50LgogCQkgKi8KLQkJQmFja2VuZEluaXRpYWxpemUoJnBvcnQpOworCQlCYWNrZW5kSW5p dGlhbGl6ZSgmcG9ydCwgY2FjKTsKIAogCQkvKiBSZXN0b3JlIGJhc2ljIHNoYXJlZCBtZW1v cnkgcG9pbnRlcnMgKi8KIAkJSW5pdFNobWVtQWNjZXNzKFVzZWRTaG1lbVNlZ0FkZHIpOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvbGlicHEtYmUuaCBiL3NyYy9pbmNsdWRl L2xpYnBxL2xpYnBxLWJlLmgKaW5kZXggM2IyY2U5OTA4ZjguLjYyNWNhYTg1M2EwIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9saWJwcS9saWJwcS1iZS5oCisrKyBiL3NyYy9pbmNsdWRl L2xpYnBxL2xpYnBxLWJlLmgKQEAgLTU4LDE3ICs1OCw2IEBAIHR5cGVkZWYgc3RydWN0CiAj aW5jbHVkZSAibGlicHEvcHFjb21tLmgiCiAKIAotdHlwZWRlZiBlbnVtIENBQ19zdGF0ZQot ewotCUNBQ19PSywKLQlDQUNfU1RBUlRVUCwKLQlDQUNfU0hVVERPV04sCi0JQ0FDX1JFQ09W RVJZLAotCUNBQ19OT1RDT05TSVNURU5ULAotCUNBQ19UT09NQU5ZCi19IENBQ19zdGF0ZTsK LQotCiAvKgogICogR1NTQVBJIHNwZWNpZmljIHN0YXRlIGluZm9ybWF0aW9uCiAgKi8KQEAg LTE1Niw3ICsxNDUsNiBAQCB0eXBlZGVmIHN0cnVjdCBQb3J0CiAJaW50CQkJcmVtb3RlX2hv c3RuYW1lX3Jlc29sdjsgLyogc2VlIGFib3ZlICovCiAJaW50CQkJcmVtb3RlX2hvc3RuYW1l X2VycmNvZGU7CS8qIHNlZSBhYm92ZSAqLwogCWNoYXIJICAgKnJlbW90ZV9wb3J0OwkvKiB0 ZXh0IHJlcCBvZiByZW1vdGUgcG9ydCAqLwotCUNBQ19zdGF0ZQljYW5BY2NlcHRDb25uZWN0 aW9uczsJLyogcG9zdG1hc3RlciBjb25uZWN0aW9uIHN0YXR1cyAqLwogCiAJLyoKIAkgKiBJ bmZvcm1hdGlvbiB0aGF0IG5lZWRzIHRvIGJlIHNhdmVkIGZyb20gdGhlIHN0YXJ0dXAgcGFj a2V0IGFuZCBwYXNzZWQKLS0gCjIuMzAuMgoK --------------kg1n0gXnIqDHZBpf1kTdCJqe Content-Type: text/x-patch; charset=UTF-8; name="0007-Remove-ConnCreate-and-ConnFree-and-allocate-Port-in-.patch" Content-Disposition: attachment; filename*0="0007-Remove-ConnCreate-and-ConnFree-and-allocate-Port-in-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA2NThjYmE1Y2RiMmU1YzQ1ZmFmZjg0NTY2OTA2ZDJmY2FhOGEzNjc0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMTIgSnVuIDIwMjMgMTg6MDM6MDMgKzAzMDAK U3ViamVjdDogW1BBVENIIDcvOV0gUmVtb3ZlIENvbm5DcmVhdGUgYW5kIENvbm5GcmVlLCBh bmQgYWxsb2NhdGUgUG9ydCBpbgogc3RhY2suCgpCeSBhbGxvY2F0aW5nIFBvcnQgaW4gc3Rh Y2ssIHdlIGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIG91dC1vZi1tZW1vcnkKZXJyb3JzLCB3 aGljaCBtYWtlcyB0aGUgY29kZSBhIGxpdHRsZSBsZXNzIHZlcmJvc2UuCi0tLQogc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgfCA2OCArKysrKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDU4IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rl ci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXggM2NlOWQ3 NmE4NTAuLjg3MzFiNTBlNGEyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L3Bvc3RtYXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIu YwpAQCAtMzk4LDggKzM5OCw2IEBAIHN0YXRpYyB2b2lkIENsb3NlU2VydmVyUG9ydHMoaW50 IHN0YXR1cywgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIHVubGlua19leHRlcm5hbF9waWRf ZmlsZShpbnQgc3RhdHVzLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgZ2V0SW5zdGFsbGF0 aW9uUGF0aHMoY29uc3QgY2hhciAqYXJndjApOwogc3RhdGljIHZvaWQgY2hlY2tDb250cm9s RmlsZSh2b2lkKTsKLXN0YXRpYyBQb3J0ICpDb25uQ3JlYXRlKGludCBzZXJ2ZXJGZCk7Ci1z dGF0aWMgdm9pZCBDb25uRnJlZShQb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIGhhbmRsZV9w bV9wbXNpZ25hbF9zaWduYWwoU0lHTkFMX0FSR1MpOwogc3RhdGljIHZvaWQgaGFuZGxlX3Bt X2NoaWxkX2V4aXRfc2lnbmFsKFNJR05BTF9BUkdTKTsKIHN0YXRpYyB2b2lkIGhhbmRsZV9w bV9yZWxvYWRfcmVxdWVzdF9zaWduYWwoU0lHTkFMX0FSR1MpOwpAQCAtMTc4MywyMCArMTc4 MSwxOCBAQCBTZXJ2ZXJMb29wKHZvaWQpCiAKIAkJCWlmIChldmVudHNbaV0uZXZlbnRzICYg V0xfU09DS0VUX0FDQ0VQVCkKIAkJCXsKLQkJCQlQb3J0CSAgICpwb3J0OworCQkJCVBvcnQJ ICAgcG9ydDsKIAotCQkJCXBvcnQgPSBDb25uQ3JlYXRlKGV2ZW50c1tpXS5mZCk7Ci0JCQkJ aWYgKHBvcnQpCi0JCQkJewotCQkJCQlCYWNrZW5kU3RhcnR1cChwb3J0KTsKKwkJCQltZW1z ZXQoJnBvcnQsIDAsIHNpemVvZihwb3J0KSk7CisJCQkJaWYgKFN0cmVhbUNvbm5lY3Rpb24o ZXZlbnRzW2ldLmZkLCAmcG9ydCkgPT0gU1RBVFVTX09LKQorCQkJCQlCYWNrZW5kU3RhcnR1 cCgmcG9ydCk7CiAKLQkJCQkJLyoKLQkJCQkJICogV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIG9w ZW4gc29ja2V0IG9yIHBvcnQgc3RydWN0dXJlIGluCi0JCQkJCSAqIHRoaXMgcHJvY2Vzcwot CQkJCQkgKi8KLQkJCQkJU3RyZWFtQ2xvc2UocG9ydC0+c29jayk7Ci0JCQkJCUNvbm5GcmVl KHBvcnQpOwotCQkJCX0KKwkJCQkvKgorCQkJCSAqIFdlIG5vIGxvbmdlciBuZWVkIHRoZSBv cGVuIHNvY2tldCBvciBwb3J0IHN0cnVjdHVyZSBpbiB0aGlzCisJCQkJICogcHJvY2Vzcwor CQkJCSAqLworCQkJCWlmIChwb3J0LnNvY2sgIT0gUEdJTlZBTElEX1NPQ0tFVCkKKwkJCQkJ U3RyZWFtQ2xvc2UocG9ydC5zb2NrKTsKIAkJCX0KIAkJfQogCkBAIC0yNDg1LDUwICsyNDgx LDYgQEAgY2FuQWNjZXB0Q29ubmVjdGlvbnMoaW50IGJhY2tlbmRfdHlwZSkKIAlyZXR1cm4g cmVzdWx0OwogfQogCi0KLS8qCi0gKiBDb25uQ3JlYXRlIC0tIGNyZWF0ZSBhIGxvY2FsIGNv bm5lY3Rpb24gZGF0YSBzdHJ1Y3R1cmUKLSAqCi0gKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVy ZSwgb3RoZXIgdGhhbiBvdXQtb2YtbWVtb3J5IHdoaWNoIGlzIGZhdGFsLgotICovCi1zdGF0 aWMgUG9ydCAqCi1Db25uQ3JlYXRlKGludCBzZXJ2ZXJGZCkKLXsKLQlQb3J0CSAgICpwb3J0 OwotCi0JaWYgKCEocG9ydCA9IChQb3J0ICopIGNhbGxvYygxLCBzaXplb2YoUG9ydCkpKSkK LQl7Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9S WSksCi0JCQkJIGVycm1zZygib3V0IG9mIG1lbW9yeSIpKSk7Ci0JCUV4aXRQb3N0bWFzdGVy KDEpOwotCX0KLQotCWlmIChTdHJlYW1Db25uZWN0aW9uKHNlcnZlckZkLCBwb3J0KSAhPSBT VEFUVVNfT0spCi0JewotCQlpZiAocG9ydC0+c29jayAhPSBQR0lOVkFMSURfU09DS0VUKQot CQkJU3RyZWFtQ2xvc2UocG9ydC0+c29jayk7Ci0JCUNvbm5GcmVlKHBvcnQpOwotCQlyZXR1 cm4gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gcG9ydDsKLX0KLQotCi0vKgotICogQ29ubkZyZWUg LS0gZnJlZSBhIGxvY2FsIGNvbm5lY3Rpb24gZGF0YSBzdHJ1Y3R1cmUKLSAqCi0gKiBDYWxs ZXIgaGFzIGFscmVhZHkgY2xvc2VkIHRoZSBzb2NrZXQgaWYgYW55LCBzbyB0aGVyZSdzIG5v dCBtdWNoCi0gKiB0byBkbyBoZXJlLgotICovCi1zdGF0aWMgdm9pZAotQ29ubkZyZWUoUG9y dCAqcG9ydCkKLXsKLQlmcmVlKHBvcnQpOwotfQotCi0KIC8qCiAgKiBDbG9zZVBvc3RtYXN0 ZXJQb3J0cyAtLSBjbG9zZSBhbGwgdGhlIHBvc3RtYXN0ZXIncyBvcGVuIHNvY2tldHMKICAq Ci0tIAoyLjMwLjIKCg== --------------kg1n0gXnIqDHZBpf1kTdCJqe Content-Type: text/x-patch; charset=UTF-8; name="0008-Introduce-ClientSocket-rename-some-funcs.patch" Content-Disposition: attachment; filename="0008-Introduce-ClientSocket-rename-some-funcs.patch" Content-Transfer-Encoding: base64 RnJvbSA2NTM4NGI5YTZjZmIzYjliNTg5MDQxNTI2MjE2ZTBmNjRkNjRiZWE1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFN1biwgMTggSnVuIDIwMjMgMTM6NTY6NDQgKzAzMDAK U3ViamVjdDogW1BBVENIIDgvOV0gSW50cm9kdWNlIENsaWVudFNvY2tldCwgcmVuYW1lIHNv bWUgZnVuY3MKCi0gTW92ZSBtb3JlIG9mIHRoZSB3b3JrIG9uIGEgY2xpZW50IHNvY2tldCB0 byB0aGUgY2hpbGQgcHJvY2Vzcy4KCi0gUmVkdWNlIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0 IG5lZWRzIHRvIGJlIHBhc3NlZCBmcm9tIHBvc3RtYXN0ZXIgdG8KICBjaGlsZC4gKFVzZWQg dG8gcGFzcyBhIGZ1bGwgUG9ydCBzdHJ1Y3QsIGFsdGhvdWdoIG1vc3Qgb2YgdGhlIGZpZWxk cyB3ZXJlCiAgZW1wdHkuIE5vdyB3ZSBwYXNzIHRoZSBtdWNoIHNsaW1tZXIgQ2xpZW50U29j a2V0LikKLS0tCiBzcmMvYmFja2VuZC9saWJwcS9wcWNvbW0uYyAgICAgICAgICB8ICA5MyAr KysrKysrKysrLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0u YyB8ICAgOCArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jICAgfCAgIDQg Ky0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jIHwgMTM5ICsrKysrKysr KysrKysrKy0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmggICAg ICAgIHwgIDE5ICsrLS0KIHNyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLmggICAgICAgICAgIHwg ICA2ICstCiA2IGZpbGVzIGNoYW5nZWQsIDE0NyBpbnNlcnRpb25zKCspLCAxMjIgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvcHFjb21tLmMgYi9zcmMv YmFja2VuZC9saWJwcS9wcWNvbW0uYwppbmRleCA5MDYxZGFjY2MyOS4uZTI3ODljYjRhNGYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL3BxY29tbS5jCisrKyBiL3NyYy9iYWNr ZW5kL2xpYnBxL3BxY29tbS5jCkBAIC0yOSw5ICsyOSw5IEBACiAgKiBJTlRFUkZBQ0UgUk9V VElORVMKICAqCiAgKiBzZXR1cC90ZWFyZG93bjoKLSAqCQlTdHJlYW1TZXJ2ZXJQb3J0CS0g T3BlbiBwb3N0bWFzdGVyJ3Mgc2VydmVyIHBvcnQKLSAqCQlTdHJlYW1Db25uZWN0aW9uCS0g Q3JlYXRlIG5ldyBjb25uZWN0aW9uIHdpdGggY2xpZW50Ci0gKgkJU3RyZWFtQ2xvc2UJCQkt IENsb3NlIGEgY2xpZW50L2JhY2tlbmQgY29ubmVjdGlvbgorICoJCUxpc3RlblNlcnZlclBv cnQJLSBPcGVuIHBvc3RtYXN0ZXIncyBzZXJ2ZXIgcG9ydAorICoJCUFjY2VwdENsaWVudENv bm5lY3Rpb24gLSBDcmVhdGUgbmV3IGNvbm5lY3Rpb24gd2l0aCBjbGllbnQKKyAqCQlTdHJl YW1Db25uZWN0aW9uCS0gSW5pdGlhbGl6ZSBhIGNsaWVudCBjb25uZWN0aW9uCiAgKgkJVG91 Y2hTb2NrZXRGaWxlcwktIFByb3RlY3Qgc29ja2V0IGZpbGVzIGFnYWluc3QgL3RtcCBjbGVh bmVycwogICoJCXBxX2luaXQJCQktIGluaXRpYWxpemUgbGlicHEgYXQgYmFja2VuZCBzdGFy dHVwCiAgKgkJc29ja2V0X2NvbW1fcmVzZXQJLSByZXNldCBsaWJwcSBkdXJpbmcgZXJyb3Ig cmVjb3ZlcnkKQEAgLTMwNCw3ICszMDQsNyBAQCBzb2NrZXRfY2xvc2UoaW50IGNvZGUsIERh dHVtIGFyZykKIAogCiAvKgotICogU3RyZWFtU2VydmVyUG9ydCAtLSBvcGVuIGEgImxpc3Rl bmluZyIgcG9ydCB0byBhY2NlcHQgY29ubmVjdGlvbnMuCisgKiBMaXN0ZW5TZXJ2ZXJQb3J0 IC0tIG9wZW4gYSAibGlzdGVuaW5nIiBwb3J0IHRvIGFjY2VwdCBjb25uZWN0aW9ucy4KICAq CiAgKiBmYW1pbHkgc2hvdWxkIGJlIEFGX1VOSVggb3IgQUZfVU5TUEVDOyBwb3J0TnVtYmVy IGlzIHRoZSBwb3J0IG51bWJlci4KICAqIEZvciBBRl9VTklYIHBvcnRzLCBob3N0TmFtZSBz aG91bGQgYmUgTlVMTCBhbmQgdW5peFNvY2tldERpciBtdXN0IGJlCkBAIC0zMTgsNyArMzE4 LDcgQEAgc29ja2V0X2Nsb3NlKGludCBjb2RlLCBEYXR1bSBhcmcpCiAgKi8KIAogaW50Ci1T dHJlYW1TZXJ2ZXJQb3J0KGludCBmYW1pbHksIGNvbnN0IGNoYXIgKmhvc3ROYW1lLCB1bnNp Z25lZCBzaG9ydCBwb3J0TnVtYmVyLAorTGlzdGVuU2VydmVyUG9ydChpbnQgZmFtaWx5LCBj b25zdCBjaGFyICpob3N0TmFtZSwgdW5zaWduZWQgc2hvcnQgcG9ydE51bWJlciwKIAkJCQkg Y29uc3QgY2hhciAqdW5peFNvY2tldERpciwKIAkJCQkgcGdzb2NrZXQgTGlzdGVuU29ja2V0 W10sIGludCBNYXhMaXN0ZW4pCiB7CkBAIC02ODksOCArNjg5LDkgQEAgU2V0dXBfQUZfVU5J WChjb25zdCBjaGFyICpzb2NrX3BhdGgpCiAKIAogLyoKLSAqIFN0cmVhbUNvbm5lY3Rpb24g LS0gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gd2l0aCBjbGllbnQgdXNpbmcKLSAqCQlzZXJ2 ZXIgcG9ydC4gIFNldCBwb3J0LT5zb2NrIHRvIHRoZSBGRCBvZiB0aGUgbmV3IGNvbm5lY3Rp b24uCisgKiBBY2NlcHRDbGllbnRDb25uZWN0aW9uIC0tIGFjY2VwdCBhIG5ldyBjb25uZWN0 aW9uIHdpdGggY2xpZW50IHVzaW5nCisgKgkJc2VydmVyIHBvcnQuICBGaWxscyAqY2xpZW50 X3NvY2sgd2l0aCB0aGUgRkQgYW5kIGVuZHBvaW50IGluZm8KKyAqCQlvZiB0aGUgbmV3IGNv bm5lY3Rpb24uCiAgKgogICogQVNTVU1FOiB0aGF0IHRoaXMgZG9lc24ndCBuZWVkIHRvIGJl IG5vbi1ibG9ja2luZyBiZWNhdXNlCiAgKgkJdGhlIFBvc3RtYXN0ZXIgd2FpdHMgZm9yIHRo ZSBzb2NrZXQgdG8gYmUgcmVhZHkgdG8gYWNjZXB0KCkuCkBAIC02OTgsMTMgKzY5OSwxMyBA QCBTZXR1cF9BRl9VTklYKGNvbnN0IGNoYXIgKnNvY2tfcGF0aCkKICAqIFJFVFVSTlM6IFNU QVRVU19PSyBvciBTVEFUVVNfRVJST1IKICAqLwogaW50Ci1TdHJlYW1Db25uZWN0aW9uKHBn c29ja2V0IHNlcnZlcl9mZCwgUG9ydCAqcG9ydCkKK0FjY2VwdENsaWVudENvbm5lY3Rpb24o cGdzb2NrZXQgc2VydmVyX2ZkLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKQogewogCS8q IGFjY2VwdCBjb25uZWN0aW9uIGFuZCBmaWxsIGluIHRoZSBjbGllbnQgKHJlbW90ZSkgYWRk cmVzcyAqLwotCXBvcnQtPnJhZGRyLnNhbGVuID0gc2l6ZW9mKHBvcnQtPnJhZGRyLmFkZHIp OwotCWlmICgocG9ydC0+c29jayA9IGFjY2VwdChzZXJ2ZXJfZmQsCi0JCQkJCQkJIChzdHJ1 Y3Qgc29ja2FkZHIgKikgJnBvcnQtPnJhZGRyLmFkZHIsCi0JCQkJCQkJICZwb3J0LT5yYWRk ci5zYWxlbikpID09IFBHSU5WQUxJRF9TT0NLRVQpCisJY2xpZW50X3NvY2stPnJhZGRyLnNh bGVuID0gc2l6ZW9mKGNsaWVudF9zb2NrLT5yYWRkci5hZGRyKTsKKwlpZiAoKGNsaWVudF9z b2NrLT5zb2NrID0gYWNjZXB0KHNlcnZlcl9mZCwKKwkJCQkJCQkJCShzdHJ1Y3Qgc29ja2Fk ZHIgKikgJmNsaWVudF9zb2NrLT5yYWRkci5hZGRyLAorCQkJCQkJCQkJJmNsaWVudF9zb2Nr LT5yYWRkci5zYWxlbikpID09IFBHSU5WQUxJRF9TT0NLRVQpCiAJewogCQllcmVwb3J0KExP RywKIAkJCQkoZXJyY29kZV9mb3Jfc29ja2V0X2FjY2VzcygpLApAQCAtNzIyLDEwICs3MjMs MTAgQEAgU3RyZWFtQ29ubmVjdGlvbihwZ3NvY2tldCBzZXJ2ZXJfZmQsIFBvcnQgKnBvcnQp CiAJfQogCiAJLyogZmlsbCBpbiB0aGUgc2VydmVyIChsb2NhbCkgYWRkcmVzcyAqLwotCXBv cnQtPmxhZGRyLnNhbGVuID0gc2l6ZW9mKHBvcnQtPmxhZGRyLmFkZHIpOwotCWlmIChnZXRz b2NrbmFtZShwb3J0LT5zb2NrLAotCQkJCQkoc3RydWN0IHNvY2thZGRyICopICZwb3J0LT5s YWRkci5hZGRyLAotCQkJCQkmcG9ydC0+bGFkZHIuc2FsZW4pIDwgMCkKKwljbGllbnRfc29j ay0+bGFkZHIuc2FsZW4gPSBzaXplb2YoY2xpZW50X3NvY2stPmxhZGRyLmFkZHIpOworCWlm IChnZXRzb2NrbmFtZShjbGllbnRfc29jay0+c29jaywKKwkJCQkJKHN0cnVjdCBzb2NrYWRk ciAqKSAmY2xpZW50X3NvY2stPmxhZGRyLmFkZHIsCisJCQkJCSZjbGllbnRfc29jay0+bGFk ZHIuc2FsZW4pIDwgMCkKIAl7CiAJCWVyZXBvcnQoTE9HLAogCQkJCShlcnJtc2coIiVzKCkg ZmFpbGVkOiAlbSIsICJnZXRzb2NrbmFtZSIpKSk7CkBAIC03MzMsNyArNzM0LDcgQEAgU3Ry ZWFtQ29ubmVjdGlvbihwZ3NvY2tldCBzZXJ2ZXJfZmQsIFBvcnQgKnBvcnQpCiAJfQogCiAJ Lyogc2VsZWN0IE5PREVMQVkgYW5kIEtFRVBBTElWRSBvcHRpb25zIGlmIGl0J3MgYSBUQ1Ag Y29ubmVjdGlvbiAqLwotCWlmIChwb3J0LT5sYWRkci5hZGRyLnNzX2ZhbWlseSAhPSBBRl9V TklYKQorCWlmIChjbGllbnRfc29jay0+bGFkZHIuYWRkci5zc19mYW1pbHkgIT0gQUZfVU5J WCkKIAl7CiAJCWludAkJCW9uOwogI2lmZGVmIFdJTjMyCkBAIC03NDQsNyArNzQ1LDcgQEAg U3RyZWFtQ29ubmVjdGlvbihwZ3NvY2tldCBzZXJ2ZXJfZmQsIFBvcnQgKnBvcnQpCiAKICNp ZmRlZglUQ1BfTk9ERUxBWQogCQlvbiA9IDE7Ci0JCWlmIChzZXRzb2Nrb3B0KHBvcnQtPnNv Y2ssIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwKKwkJaWYgKHNldHNvY2tvcHQoY2xpZW50 X3NvY2stPnNvY2ssIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwKIAkJCQkJICAgKGNoYXIg KikgJm9uLCBzaXplb2Yob24pKSA8IDApCiAJCXsKIAkJCWVyZXBvcnQoTE9HLApAQCAtNzUz LDcgKzc1NCw3IEBAIFN0cmVhbUNvbm5lY3Rpb24ocGdzb2NrZXQgc2VydmVyX2ZkLCBQb3J0 ICpwb3J0KQogCQl9CiAjZW5kaWYKIAkJb24gPSAxOwotCQlpZiAoc2V0c29ja29wdChwb3J0 LT5zb2NrLCBTT0xfU09DS0VULCBTT19LRUVQQUxJVkUsCisJCWlmIChzZXRzb2Nrb3B0KGNs aWVudF9zb2NrLT5zb2NrLCBTT0xfU09DS0VULCBTT19LRUVQQUxJVkUsCiAJCQkJCSAgIChj aGFyICopICZvbiwgc2l6ZW9mKG9uKSkgPCAwKQogCQl7CiAJCQllcmVwb3J0KExPRywKQEAg LTc4NSw3ICs3ODYsNyBAQCBTdHJlYW1Db25uZWN0aW9uKHBnc29ja2V0IHNlcnZlcl9mZCwg UG9ydCAqcG9ydCkKIAkJICogaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGli cmFyeS9iYjczNjU0OSUyOHY9dnMuODUlMjkuYXNweAogCQkgKi8KIAkJb3B0bGVuID0gc2l6 ZW9mKG9sZG9wdCk7Ci0JCWlmIChnZXRzb2Nrb3B0KHBvcnQtPnNvY2ssIFNPTF9TT0NLRVQs IFNPX1NOREJVRiwgKGNoYXIgKikgJm9sZG9wdCwKKwkJaWYgKGdldHNvY2tvcHQoY2xpZW50 X3NvY2stPnNvY2ssIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgKGNoYXIgKikgJm9sZG9wdCwK IAkJCQkJICAgJm9wdGxlbikgPCAwKQogCQl7CiAJCQllcmVwb3J0KExPRywKQEAgLTc5NSw3 ICs3OTYsNyBAQCBTdHJlYW1Db25uZWN0aW9uKHBnc29ja2V0IHNlcnZlcl9mZCwgUG9ydCAq cG9ydCkKIAkJbmV3b3B0ID0gUFFfU0VORF9CVUZGRVJfU0laRSAqIDQ7CiAJCWlmIChvbGRv cHQgPCBuZXdvcHQpCiAJCXsKLQkJCWlmIChzZXRzb2Nrb3B0KHBvcnQtPnNvY2ssIFNPTF9T T0NLRVQsIFNPX1NOREJVRiwgKGNoYXIgKikgJm5ld29wdCwKKwkJCWlmIChzZXRzb2Nrb3B0 KGNsaWVudF9zb2NrLT5zb2NrLCBTT0xfU09DS0VULCBTT19TTkRCVUYsIChjaGFyICopICZu ZXdvcHQsCiAJCQkJCQkgICBzaXplb2YobmV3b3B0KSkgPCAwKQogCQkJewogCQkJCWVyZXBv cnQoTE9HLApAQCAtODA0LDEzICs4MDUsMzQgQEAgU3RyZWFtQ29ubmVjdGlvbihwZ3NvY2tl dCBzZXJ2ZXJfZmQsIFBvcnQgKnBvcnQpCiAJCQl9CiAJCX0KICNlbmRpZgorCX0KKwlyZXR1 cm4gU1RBVFVTX09LOworfQorCisvKgorICogU3RyZWFtQ29ubmVjdGlvbiAtLSBjcmVhdGUg YSBuZXcgY29ubmVjdGlvbiBmcm9tIHRoZSBnaXZlbiBzb2NrZXQuCisgKgorICogVGhpcyBy dW5zIGluIHRoZSBiYWNrZW5kIHByb2Nlc3MuCisgKi8KK1BvcnQgKgorU3RyZWFtQ29ubmVj dGlvbihDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKQoreworCVBvcnQJICAgKnBvcnQ7CisK Kwlwb3J0ID0gcGFsbG9jMChzaXplb2YoUG9ydCkpOworCXBvcnQtPnNvY2sgPSBjbGllbnRf c29jay0+c29jazsKKwlwb3J0LT5sYWRkciA9IGNsaWVudF9zb2NrLT5sYWRkcjsKKwlwb3J0 LT5yYWRkciA9IGNsaWVudF9zb2NrLT5yYWRkcjsKIAorCS8qIEFwcGx5IHRoZSBjdXJyZW50 IGtlZXBhbGl2ZSBwYXJhbWV0ZXJzIGlmIGl0J3MgYSBUQ1AgY29ubmVjdGlvbiAqLworCWlm IChwb3J0LT5sYWRkci5hZGRyLnNzX2ZhbWlseSAhPSBBRl9VTklYKQorCXsKIAkJLyoKLQkJ ICogQWxzbyBhcHBseSB0aGUgY3VycmVudCBrZWVwYWxpdmUgcGFyYW1ldGVycy4gIElmIHdl IGZhaWwgdG8gc2V0IGEKLQkJICogcGFyYW1ldGVyLCBkb24ndCBlcnJvciBvdXQsIGJlY2F1 c2UgdGhlc2UgYXJlbid0IHVuaXZlcnNhbGx5Ci0JCSAqIHN1cHBvcnRlZC4gIChOb3RlOiB5 b3UgbWlnaHQgdGhpbmsgd2UgbmVlZCB0byByZXNldCB0aGUgR1VDCi0JCSAqIHZhcmlhYmxl cyB0byAwIGluIHN1Y2ggYSBjYXNlLCBidXQgaXQncyBub3QgbmVjZXNzYXJ5IGJlY2F1c2Ug dGhlCi0JCSAqIHNob3cgaG9va3MgZm9yIHRoZXNlIHZhcmlhYmxlcyByZXBvcnQgdGhlIHRy dXRoIGFueXdheS4pCisJCSAqIElmIHdlIGZhaWwgdG8gc2V0IGEgcGFyYW1ldGVyLCBkb24n dCBlcnJvciBvdXQsIGJlY2F1c2UgdGhlc2UKKwkJICogYXJlbid0IHVuaXZlcnNhbGx5IHN1 cHBvcnRlZC4gIChOb3RlOiB5b3UgbWlnaHQgdGhpbmsgd2UgbmVlZCB0bworCQkgKiByZXNl dCB0aGUgR1VDIHZhcmlhYmxlcyB0byAwIGluIHN1Y2ggYSBjYXNlLCBidXQgaXQncyBub3Qg bmVjZXNzYXJ5CisJCSAqIGJlY2F1c2UgdGhlIHNob3cgaG9va3MgZm9yIHRoZXNlIHZhcmlh YmxlcyByZXBvcnQgdGhlIHRydXRoCisJCSAqIGFueXdheS4pCiAJCSAqLwogCQkodm9pZCkg cHFfc2V0a2VlcGFsaXZlc2lkbGUodGNwX2tlZXBhbGl2ZXNfaWRsZSwgcG9ydCk7CiAJCSh2 b2lkKSBwcV9zZXRrZWVwYWxpdmVzaW50ZXJ2YWwodGNwX2tlZXBhbGl2ZXNfaW50ZXJ2YWws IHBvcnQpOwpAQCAtODE4LDI0ICs4NDAsNyBAQCBTdHJlYW1Db25uZWN0aW9uKHBnc29ja2V0 IHNlcnZlcl9mZCwgUG9ydCAqcG9ydCkKIAkJKHZvaWQpIHBxX3NldHRjcHVzZXJ0aW1lb3V0 KHRjcF91c2VyX3RpbWVvdXQsIHBvcnQpOwogCX0KIAotCXJldHVybiBTVEFUVVNfT0s7Ci19 Ci0KLS8qCi0gKiBTdHJlYW1DbG9zZSAtLSBjbG9zZSBhIGNsaWVudC9iYWNrZW5kIGNvbm5l Y3Rpb24KLSAqCi0gKiBOT1RFOiB0aGlzIGlzIE5PVCB1c2VkIHRvIHRlcm1pbmF0ZSBhIHNl c3Npb247IGl0IGlzIGp1c3QgdXNlZCB0byByZWxlYXNlCi0gKiB0aGUgZmlsZSBkZXNjcmlw dG9yIGluIGEgcHJvY2VzcyB0aGF0IHNob3VsZCBubyBsb25nZXIgaGF2ZSB0aGUgc29ja2V0 Ci0gKiBvcGVuLiAgKEZvciBleGFtcGxlLCB0aGUgcG9zdG1hc3RlciBjYWxscyB0aGlzIGFm dGVyIHBhc3Npbmcgb3duZXJzaGlwCi0gKiBvZiB0aGUgY29ubmVjdGlvbiB0byBhIGNoaWxk IHByb2Nlc3MuKSAgSXQgaXMgZXhwZWN0ZWQgdGhhdCBzb21lb25lIGVsc2UKLSAqIHN0aWxs IGhhcyB0aGUgc29ja2V0IG9wZW4uICBTbywgd2Ugb25seSB3YW50IHRvIGNsb3NlIHRoZSBk ZXNjcmlwdG9yLAotICogd2UgZG8gTk9UIHdhbnQgdG8gc2VuZCBhbnl0aGluZyB0byB0aGUg ZmFyIGVuZC4KLSAqLwotdm9pZAotU3RyZWFtQ2xvc2UocGdzb2NrZXQgc29jaykKLXsKLQlp ZiAoY2xvc2Vzb2NrZXQoc29jaykgIT0gMCkKLQkJZWxvZyhMT0csICJjbG9zZXNvY2tldCBm YWlsZWQ6ICVtIik7CisJcmV0dXJuIHBvcnQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvYXV0b3ZhY3V1bS5jCmluZGV4IDcxNTdjNTQ2NmFhLi4xMDQxMzc2OTUxZSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKQEAgLTQ3Niw4ICs0NzYsOCBAQCBBdXRv VmFjTGF1bmNoZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJcHFzaWduYWwoU0lH Q0hMRCwgU0lHX0RGTCk7CiAKIAkvKgotCSAqIENyZWF0ZSBhIHBlci1iYWNrZW5kIFBHUFJP QyBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeS4gV2UgbXVzdCBkbwotCSAqIHRoaXMgYmVmb3Jl IHdlIGNhbiB1c2UgTFdMb2Nrcy4KKwkgKiBDcmVhdGUgYSBwZXItYmFja2VuZCBQR1BST0Mg c3RydWN0IGluIHNoYXJlZCBtZW1vcnkuIFdlIG11c3QgZG8gdGhpcworCSAqIGJlZm9yZSB3 ZSBjYW4gdXNlIExXTG9ja3MuCiAJICovCiAJSW5pdFByb2Nlc3MoKTsKIApAQCAtMTU0Nyw4 ICsxNTQ3LDggQEAgQXV0b1ZhY1dvcmtlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK IAlwcXNpZ25hbChTSUdDSExELCBTSUdfREZMKTsKIAogCS8qCi0JICogQ3JlYXRlIGEgcGVy LWJhY2tlbmQgUEdQUk9DIHN0cnVjdCBpbiBzaGFyZWQgbWVtb3J5LiBXZSBtdXN0IGRvCi0J ICogdGhpcyBiZWZvcmUgd2UgY2FuIHVzZSBMV0xvY2tzLgorCSAqIENyZWF0ZSBhIHBlci1i YWNrZW5kIFBHUFJPQyBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeS4gV2UgbXVzdCBkbyB0aGlz CisJICogYmVmb3JlIHdlIGNhbiB1c2UgTFdMb2Nrcy4KIAkgKi8KIAlJbml0UHJvY2Vzcygp OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKaW5kZXggMTM1MTllYTBjNDUuLjRj NDQ2ZmZkMDg3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2Vy LmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCkBAIC04MTAsOCAr ODEwLDggQEAgU3RhcnRCYWNrZ3JvdW5kV29ya2VyKHZvaWQpCiAJUEdfZXhjZXB0aW9uX3N0 YWNrID0gJmxvY2FsX3NpZ2ptcF9idWY7CiAKIAkvKgotCSAqIENyZWF0ZSBhIHBlci1iYWNr ZW5kIFBHUFJPQyBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeS4gV2UgbXVzdCBkbwotCSAqIHRo aXMgYmVmb3JlIHdlIGNhbiB1c2UgTFdMb2Nrcy4KKwkgKiBDcmVhdGUgYSBwZXItYmFja2Vu ZCBQR1BST0Mgc3RydWN0IGluIHNoYXJlZCBtZW1vcnkuIFdlIG11c3QgZG8gdGhpcworCSAq IGJlZm9yZSB3ZSBjYW4gdXNlIExXTG9ja3MuCiAJICovCiAJSW5pdFByb2Nlc3MoKTsKIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCA4NzMxYjUwZTRhMi4uYjcz YmE5ODNmM2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rl ci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC00MjYs MTUgKzQyNiwxNSBAQCB0eXBlZGVmIGVudW0gQ0FDX3N0YXRlCiAJQ0FDX1RPT01BTlkKIH0g Q0FDX3N0YXRlOwogCi1zdGF0aWMgdm9pZCBCYWNrZW5kSW5pdGlhbGl6ZShQb3J0ICpwb3J0 LCBDQUNfc3RhdGUgY2FjKTsKLXN0YXRpYyB2b2lkIEJhY2tlbmRSdW4oUG9ydCAqcG9ydCkg cGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CitzdGF0aWMgdm9pZCBCYWNrZW5kSW5pdGlhbGl6 ZShDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLCBDQUNfc3RhdGUgY2FjKTsKK3N0YXRpYyB2 b2lkIEJhY2tlbmRSdW4odm9pZCkgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CiBzdGF0aWMg dm9pZCBFeGl0UG9zdG1hc3RlcihpbnQgc3RhdHVzKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4o KTsKIHN0YXRpYyBpbnQJU2VydmVyTG9vcCh2b2lkKTsKLXN0YXRpYyBpbnQJQmFja2VuZFN0 YXJ0dXAoUG9ydCAqcG9ydCk7CitzdGF0aWMgaW50CUJhY2tlbmRTdGFydHVwKENsaWVudFNv Y2tldCAqcG9ydCk7CiBzdGF0aWMgaW50CVByb2Nlc3NTdGFydHVwUGFja2V0KFBvcnQgKnBv cnQsIGJvb2wgc3NsX2RvbmUsIGJvb2wgZ3NzX2RvbmUpOwogc3RhdGljIHZvaWQgU2VuZE5l Z290aWF0ZVByb3RvY29sVmVyc2lvbihMaXN0ICp1bnJlY29nbml6ZWRfcHJvdG9jb2xfb3B0 aW9ucyk7CiBzdGF0aWMgdm9pZCBwcm9jZXNzQ2FuY2VsUmVxdWVzdChQb3J0ICpwb3J0LCB2 b2lkICpwa3QpOwotc3RhdGljIHZvaWQgcmVwb3J0X2ZvcmtfZmFpbHVyZV90b19jbGllbnQo UG9ydCAqcG9ydCwgaW50IGVycm51bSk7CitzdGF0aWMgdm9pZCByZXBvcnRfZm9ya19mYWls dXJlX3RvX2NsaWVudChDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLCBpbnQgZXJybnVtKTsK IHN0YXRpYyBDQUNfc3RhdGUgY2FuQWNjZXB0Q29ubmVjdGlvbnMoaW50IGJhY2tlbmRfdHlw ZSk7CiBzdGF0aWMgYm9vbCBSYW5kb21DYW5jZWxLZXkoaW50MzIgKmNhbmNlbF9rZXkpOwog c3RhdGljIHZvaWQgc2lnbmFsX2NoaWxkKHBpZF90IHBpZCwgaW50IHNpZ25hbCk7CkBAIC00 ODMsOCArNDgzLDggQEAgdHlwZWRlZiBzdHJ1Y3QKIH0gd2luMzJfZGVhZGNoaWxkX3dhaXRp bmZvOwogI2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCiAKLXN0YXRpYyBwaWRfdCBiYWNrZW5k X2ZvcmtleGVjKFBvcnQgKnBvcnQsIENBQ19zdGF0ZSBjYWMpOwotc3RhdGljIHBpZF90IGlu dGVybmFsX2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICphcmd2W10sIFBvcnQgKnBvcnQpOwor c3RhdGljIHBpZF90IGJhY2tlbmRfZm9ya2V4ZWMoQ2xpZW50U29ja2V0ICpjbGllbnRfc29j aywgQ0FDX3N0YXRlIGNhYyk7CitzdGF0aWMgcGlkX3QgaW50ZXJuYWxfZm9ya2V4ZWMoaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jayk7CiAKIC8q IFR5cGUgZm9yIGEgc29ja2V0IHRoYXQgY2FuIGJlIGluaGVyaXRlZCB0byBhIGNsaWVudCBw cm9jZXNzICovCiAjaWZkZWYgV0lOMzIKQEAgLTUwMyw4ICs1MDMsOCBAQCB0eXBlZGVmIGlu dCBJbmhlcml0YWJsZVNvY2tldDsKICAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKLQlQb3J0CQlw b3J0OwotCUluaGVyaXRhYmxlU29ja2V0IHBvcnRzb2NrZXQ7CisJQ2xpZW50U29ja2V0IGNs aWVudF9zb2NrOworCUluaGVyaXRhYmxlU29ja2V0IHNlcmlhbGl6ZWRfc29jazsKIAljaGFy CQlEYXRhRGlyW01BWFBHUEFUSF07CiAJaW50MzIJCU15Q2FuY2VsS2V5OwogCWludAkJCU15 UE1DaGlsZFNsb3Q7CkBAIC01NTIsMTMgKzU1MiwxMyBAQCB0eXBlZGVmIHN0cnVjdAogCUJh Y2tncm91bmRXb3JrZXIgTXlCZ3dvcmtlckVudHJ5OwogfSBCYWNrZW5kUGFyYW1ldGVyczsK IAotc3RhdGljIHZvaWQgcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwgUG9ydCAq cG9ydCk7Ci1zdGF0aWMgdm9pZCByZXN0b3JlX2JhY2tlbmRfdmFyaWFibGVzKEJhY2tlbmRQ YXJhbWV0ZXJzICpwYXJhbSwgUG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCByZWFkX2JhY2tl bmRfdmFyaWFibGVzKGNoYXIgKmlkLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKTsKK3N0 YXRpYyB2b2lkIHJlc3RvcmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMg KnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKTsKIAogI2lmbmRlZiBXSU4zMgot c3RhdGljIGJvb2wgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAq cGFyYW0sIFBvcnQgKnBvcnQpOworc3RhdGljIGJvb2wgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxl cyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2sp OwogI2Vsc2UKLXN0YXRpYyBib29sIHNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBh cmFtZXRlcnMgKnBhcmFtLCBQb3J0ICpwb3J0LAorc3RhdGljIGJvb2wgc2F2ZV9iYWNrZW5k X3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqY2xp ZW50X3NvY2ssCiAJCQkJCQkJCSAgIEhBTkRMRSBjaGlsZFByb2Nlc3MsIHBpZF90IGNoaWxk UGlkKTsKICNlbmRpZgogCkBAIC0xMjIxLDEyICsxMjIxLDEyIEBAIFBvc3RtYXN0ZXJNYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQljaGFyCSAgICpjdXJob3N0ID0gKGNoYXIg KikgbGZpcnN0KGwpOwogCiAJCQlpZiAoc3RyY21wKGN1cmhvc3QsICIqIikgPT0gMCkKLQkJ CQlzdGF0dXMgPSBTdHJlYW1TZXJ2ZXJQb3J0KEFGX1VOU1BFQywgTlVMTCwKKwkJCQlzdGF0 dXMgPSBMaXN0ZW5TZXJ2ZXJQb3J0KEFGX1VOU1BFQywgTlVMTCwKIAkJCQkJCQkJCQkgICh1 bnNpZ25lZCBzaG9ydCkgUG9zdFBvcnROdW1iZXIsCiAJCQkJCQkJCQkJICBOVUxMLAogCQkJ CQkJCQkJCSAgTGlzdGVuU29ja2V0LCBNQVhMSVNURU4pOwogCQkJZWxzZQotCQkJCXN0YXR1 cyA9IFN0cmVhbVNlcnZlclBvcnQoQUZfVU5TUEVDLCBjdXJob3N0LAorCQkJCXN0YXR1cyA9 IExpc3RlblNlcnZlclBvcnQoQUZfVU5TUEVDLCBjdXJob3N0LAogCQkJCQkJCQkJCSAgKHVu c2lnbmVkIHNob3J0KSBQb3N0UG9ydE51bWJlciwKIAkJCQkJCQkJCQkgIE5VTEwsCiAJCQkJ CQkJCQkJICBMaXN0ZW5Tb2NrZXQsIE1BWExJU1RFTik7CkBAIC0xMzE4LDcgKzEzMTgsNyBA QCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQl7CiAJCQljaGFy CSAgICpzb2NrZXRkaXIgPSAoY2hhciAqKSBsZmlyc3QobCk7CiAKLQkJCXN0YXR1cyA9IFN0 cmVhbVNlcnZlclBvcnQoQUZfVU5JWCwgTlVMTCwKKwkJCXN0YXR1cyA9IExpc3RlblNlcnZl clBvcnQoQUZfVU5JWCwgTlVMTCwKIAkJCQkJCQkJCSAgKHVuc2lnbmVkIHNob3J0KSBQb3N0 UG9ydE51bWJlciwKIAkJCQkJCQkJCSAgc29ja2V0ZGlyLAogCQkJCQkJCQkJICBMaXN0ZW5T b2NrZXQsIE1BWExJU1RFTik7CkBAIC0xNDk5LDcgKzE0OTksNyBAQCBDbG9zZVNlcnZlclBv cnRzKGludCBzdGF0dXMsIERhdHVtIGFyZykKIAl7CiAJCWlmIChMaXN0ZW5Tb2NrZXRbaV0g IT0gUEdJTlZBTElEX1NPQ0tFVCkKIAkJewotCQkJU3RyZWFtQ2xvc2UoTGlzdGVuU29ja2V0 W2ldKTsKKwkJCWNsb3Nlc29ja2V0KExpc3RlblNvY2tldFtpXSk7CiAJCQlMaXN0ZW5Tb2Nr ZXRbaV0gPSBQR0lOVkFMSURfU09DS0VUOwogCQl9CiAJfQpAQCAtMTc4MSwxOCArMTc4MSwy MCBAQCBTZXJ2ZXJMb29wKHZvaWQpCiAKIAkJCWlmIChldmVudHNbaV0uZXZlbnRzICYgV0xf U09DS0VUX0FDQ0VQVCkKIAkJCXsKLQkJCQlQb3J0CSAgIHBvcnQ7CisJCQkJQ2xpZW50U29j a2V0IHM7CiAKLQkJCQltZW1zZXQoJnBvcnQsIDAsIHNpemVvZihwb3J0KSk7Ci0JCQkJaWYg KFN0cmVhbUNvbm5lY3Rpb24oZXZlbnRzW2ldLmZkLCAmcG9ydCkgPT0gU1RBVFVTX09LKQot CQkJCQlCYWNrZW5kU3RhcnR1cCgmcG9ydCk7CisJCQkJaWYgKEFjY2VwdENsaWVudENvbm5l Y3Rpb24oZXZlbnRzW2ldLmZkLCAmcykgPT0gU1RBVFVTX09LKQorCQkJCQlCYWNrZW5kU3Rh cnR1cCgmcyk7CiAKIAkJCQkvKgogCQkJCSAqIFdlIG5vIGxvbmdlciBuZWVkIHRoZSBvcGVu IHNvY2tldCBvciBwb3J0IHN0cnVjdHVyZSBpbiB0aGlzCiAJCQkJICogcHJvY2VzcwogCQkJ CSAqLwotCQkJCWlmIChwb3J0LnNvY2sgIT0gUEdJTlZBTElEX1NPQ0tFVCkKLQkJCQkJU3Ry ZWFtQ2xvc2UocG9ydC5zb2NrKTsKKwkJCQlpZiAocy5zb2NrICE9IFBHSU5WQUxJRF9TT0NL RVQpCisJCQkJeworCQkJCQlpZiAoY2xvc2Vzb2NrZXQocy5zb2NrKSAhPSAwKQorCQkJCQkJ ZWxvZyhMT0csICJjb3VsZCBub3QgY2xvc2UgY2xpZW50IHNvY2tldDogJW0iKTsKKwkJCQl9 CiAJCQl9CiAJCX0KIApAQCAtMjUyOSw3ICsyNTMxLDggQEAgQ2xvc2VQb3N0bWFzdGVyUG9y dHMoYm9vbCBhbV9zeXNsb2dnZXIpCiAJewogCQlpZiAoTGlzdGVuU29ja2V0W2ldICE9IFBH SU5WQUxJRF9TT0NLRVQpCiAJCXsKLQkJCVN0cmVhbUNsb3NlKExpc3RlblNvY2tldFtpXSk7 CisJCQlpZiAoY2xvc2Vzb2NrZXQoTGlzdGVuU29ja2V0W2ldKSAhPSAwKQorCQkJCWVsb2co TE9HLCAiY291bGQgbm90IGNsb3NlIGxpc3RlbiBzb2NrZXQ6ICVtIik7CiAJCQlMaXN0ZW5T b2NrZXRbaV0gPSBQR0lOVkFMSURfU09DS0VUOwogCQl9CiAJfQpAQCAtNDAzNCw3ICs0MDM3 LDcgQEAgVGVybWluYXRlQ2hpbGRyZW4oaW50IHNpZ25hbCkKICAqIE5vdGU6IGlmIHlvdSBj aGFuZ2UgdGhpcyBjb2RlLCBhbHNvIGNvbnNpZGVyIFN0YXJ0QXV0b3ZhY3V1bVdvcmtlci4K ICAqLwogc3RhdGljIGludAotQmFja2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkKK0JhY2tlbmRT dGFydHVwKENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spCiB7CiAJQmFja2VuZCAgICAqYm47 CQkJCS8qIGZvciBiYWNrZW5kIGNsZWFudXAgKi8KIAlwaWRfdAkJcGlkOwpAQCAtNDA4NSw3 ICs0MDg4LDcgQEAgQmFja2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkKIAlibi0+Ymd3b3JrZXJf bm90aWZ5ID0gZmFsc2U7CiAKICNpZmRlZiBFWEVDX0JBQ0tFTkQKLQlwaWQgPSBiYWNrZW5k X2ZvcmtleGVjKHBvcnQsIGNhYyk7CisJcGlkID0gYmFja2VuZF9mb3JrZXhlYyhjbGllbnRf c29jaywgY2FjKTsKICNlbHNlCQkJCQkJCS8qICFFWEVDX0JBQ0tFTkQgKi8KIAlwaWQgPSBm b3JrX3Byb2Nlc3MoKTsKIAlpZiAocGlkID09IDApCQkJCS8qIGNoaWxkICovCkBAIC00MDk3 LDEwICs0MTAwLDEwIEBAIEJhY2tlbmRTdGFydHVwKFBvcnQgKnBvcnQpCiAJCUNsb3NlUG9z dG1hc3RlclBvcnRzKGZhbHNlKTsKIAogCQkvKiBQZXJmb3JtIGFkZGl0aW9uYWwgaW5pdGlh bGl6YXRpb24gYW5kIGNvbGxlY3Qgc3RhcnR1cCBwYWNrZXQgKi8KLQkJQmFja2VuZEluaXRp YWxpemUocG9ydCwgY2FjKTsKKwkJQmFja2VuZEluaXRpYWxpemUoY2xpZW50X3NvY2ssIGNh Yyk7CiAKIAkJLyogQW5kIHJ1biB0aGUgYmFja2VuZCAqLwotCQlCYWNrZW5kUnVuKHBvcnQp OworCQlCYWNrZW5kUnVuKCk7CiAJfQogI2VuZGlmCQkJCQkJCS8qIEVYRUNfQkFDS0VORCAq LwogCkBAIC00MTE1LDE0ICs0MTE4LDE0IEBAIEJhY2tlbmRTdGFydHVwKFBvcnQgKnBvcnQp CiAJCWVycm5vID0gc2F2ZV9lcnJubzsKIAkJZXJlcG9ydChMT0csCiAJCQkJKGVycm1zZygi Y291bGQgbm90IGZvcmsgbmV3IHByb2Nlc3MgZm9yIGNvbm5lY3Rpb246ICVtIikpKTsKLQkJ cmVwb3J0X2ZvcmtfZmFpbHVyZV90b19jbGllbnQocG9ydCwgc2F2ZV9lcnJubyk7CisJCXJl cG9ydF9mb3JrX2ZhaWx1cmVfdG9fY2xpZW50KGNsaWVudF9zb2NrLCBzYXZlX2Vycm5vKTsK IAkJcmV0dXJuIFNUQVRVU19FUlJPUjsKIAl9CiAKIAkvKiBpbiBwYXJlbnQsIHN1Y2Nlc3Nm dWwgZm9yayAqLwogCWVyZXBvcnQoREVCVUcyLAogCQkJKGVycm1zZ19pbnRlcm5hbCgiZm9y a2VkIG5ldyBiYWNrZW5kLCBwaWQ9JWQgc29ja2V0PSVkIiwKLQkJCQkJCQkgKGludCkgcGlk LCAoaW50KSBwb3J0LT5zb2NrKSkpOworCQkJCQkJCSAoaW50KSBwaWQsIChpbnQpIGNsaWVu dF9zb2NrLT5zb2NrKSkpOwogCiAJLyoKIAkgKiBFdmVyeXRoaW5nJ3MgYmVlbiBzdWNjZXNz ZnVsLCBpdCdzIHNhZmUgdG8gYWRkIHRoaXMgYmFja2VuZCB0byBvdXIgbGlzdApAQCAtNDE0 OSw3ICs0MTUyLDcgQEAgQmFja2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkKICAqIGl0J3Mgbm90 IHVwIGFuZCBydW5uaW5nLgogICovCiBzdGF0aWMgdm9pZAotcmVwb3J0X2ZvcmtfZmFpbHVy ZV90b19jbGllbnQoUG9ydCAqcG9ydCwgaW50IGVycm51bSkKK3JlcG9ydF9mb3JrX2ZhaWx1 cmVfdG9fY2xpZW50KENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIGludCBlcnJudW0pCiB7 CiAJY2hhcgkJYnVmZmVyWzEwMDBdOwogCWludAkJCXJjOwpAQCAtNDE2MCwxMyArNDE2Mywx MyBAQCByZXBvcnRfZm9ya19mYWlsdXJlX3RvX2NsaWVudChQb3J0ICpwb3J0LCBpbnQgZXJy bnVtKQogCQkJIHN0cmVycm9yKGVycm51bSkpOwogCiAJLyogU2V0IHBvcnQgdG8gbm9uLWJs b2NraW5nLiAgRG9uJ3QgZG8gc2VuZCgpIGlmIHRoaXMgZmFpbHMgKi8KLQlpZiAoIXBnX3Nl dF9ub2Jsb2NrKHBvcnQtPnNvY2spKQorCWlmICghcGdfc2V0X25vYmxvY2soY2xpZW50X3Nv Y2stPnNvY2spKQogCQlyZXR1cm47CiAKIAkvKiBXZSdsbCByZXRyeSBhZnRlciBFSU5UUiwg YnV0IGlnbm9yZSBhbGwgb3RoZXIgZmFpbHVyZXMgKi8KIAlkbwogCXsKLQkJcmMgPSBzZW5k KHBvcnQtPnNvY2ssIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikgKyAxLCAwKTsKKwkJcmMgPSBz ZW5kKGNsaWVudF9zb2NrLT5zb2NrLCBidWZmZXIsIHN0cmxlbihidWZmZXIpICsgMSwgMCk7 CiAJfSB3aGlsZSAocmMgPCAwICYmIGVycm5vID09IEVJTlRSKTsKIH0KIApAQCAtNDE4NCwx NiArNDE4NywyNCBAQCByZXBvcnRfZm9ya19mYWlsdXJlX3RvX2NsaWVudChQb3J0ICpwb3J0 LCBpbnQgZXJybnVtKQogICogYnV0IGhhdmUgbm90IHlldCBzZXQgdXAgbW9zdCBvZiBvdXIg bG9jYWwgcG9pbnRlcnMgdG8gc2htZW0gc3RydWN0dXJlcy4KICAqLwogc3RhdGljIHZvaWQK LUJhY2tlbmRJbml0aWFsaXplKFBvcnQgKnBvcnQsIENBQ19zdGF0ZSBjYWMpCitCYWNrZW5k SW5pdGlhbGl6ZShDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLCBDQUNfc3RhdGUgY2FjKQog ewogCWludAkJCXN0YXR1czsKIAlpbnQJCQlyZXQ7CisJUG9ydAkgICAqcG9ydDsKIAljaGFy CQlyZW1vdGVfaG9zdFtOSV9NQVhIT1NUXTsKIAljaGFyCQlyZW1vdGVfcG9ydFtOSV9NQVhT RVJWXTsKIAlTdHJpbmdJbmZvRGF0YSBwc19kYXRhOworCU1lbW9yeUNvbnRleHQgb2xkY29u dGV4dDsKIAotCS8qIFNhdmUgcG9ydCBldGMuIGZvciBwcyBzdGF0dXMgKi8KKwkvKgorCSAq IENyZWF0ZSBQb3J0IHN0cnVjdHVyZSBpbiBUb3BNZW1vcnlDb250ZXh0LCBzbyB0aGF0IGl0 IHN1cnZpdmVzIGludG8KKwkgKiBQb3N0Z3Jlc01haW4gZXhlY3V0aW9uLgorCSAqLworCW9s ZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CisJ cG9ydCA9IFN0cmVhbUNvbm5lY3Rpb24oY2xpZW50X3NvY2spOwogCU15UHJvY1BvcnQgPSBw b3J0OworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIAogCS8qIFRlbGwg ZmQuYyBhYm91dCB0aGUgbG9uZy1saXZlZCBGRCBhc3NvY2lhdGVkIHdpdGggdGhlIHBvcnQg Ki8KIAlSZXNlcnZlRXh0ZXJuYWxGRCgpOwpAQCAtNDI1NCw4ICs0MjY1LDkgQEAgQmFja2Vu ZEluaXRpYWxpemUoUG9ydCAqcG9ydCwgQ0FDX3N0YXRlIGNhYykKIAkgKiBTYXZlIHJlbW90 ZV9ob3N0IGFuZCByZW1vdGVfcG9ydCBpbiBwb3J0IHN0cnVjdHVyZSAoYWZ0ZXIgdGhpcywg dGhleQogCSAqIHdpbGwgYXBwZWFyIGluIGxvZ19saW5lX3ByZWZpeCBkYXRhIGZvciBsb2cg bWVzc2FnZXMpLgogCSAqLwotCXBvcnQtPnJlbW90ZV9ob3N0ID0gc3RyZHVwKHJlbW90ZV9o b3N0KTsKLQlwb3J0LT5yZW1vdGVfcG9ydCA9IHN0cmR1cChyZW1vdGVfcG9ydCk7CisJb2xk Y29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKKwlw b3J0LT5yZW1vdGVfaG9zdCA9IHBzdHJkdXAocmVtb3RlX2hvc3QpOworCXBvcnQtPnJlbW90 ZV9wb3J0ID0gcHN0cmR1cChyZW1vdGVfcG9ydCk7CiAKIAkvKiBBbmQgbm93IHdlIGNhbiBp c3N1ZSB0aGUgTG9nX2Nvbm5lY3Rpb25zIG1lc3NhZ2UsIGlmIHdhbnRlZCAqLwogCWlmIChM b2dfY29ubmVjdGlvbnMpCkBAIC00Mjg2LDcgKzQyOTgsOCBAQCBCYWNrZW5kSW5pdGlhbGl6 ZShQb3J0ICpwb3J0LCBDQUNfc3RhdGUgY2FjKQogCQlyZXQgPT0gMCAmJgogCQlzdHJzcG4o cmVtb3RlX2hvc3QsICIwMTIzNDU2Nzg5LiIpIDwgc3RybGVuKHJlbW90ZV9ob3N0KSAmJgog CQlzdHJzcG4ocmVtb3RlX2hvc3QsICIwMTIzNDU2Nzg5QUJDREVGYWJjZGVmOiIpIDwgc3Ry bGVuKHJlbW90ZV9ob3N0KSkKLQkJcG9ydC0+cmVtb3RlX2hvc3RuYW1lID0gc3RyZHVwKHJl bW90ZV9ob3N0KTsKKwkJcG9ydC0+cmVtb3RlX2hvc3RuYW1lID0gcHN0cmR1cChyZW1vdGVf aG9zdCk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogCiAJLyoKIAkg KiBSZWFkeSB0byBiZWdpbiBjbGllbnQgaW50ZXJhY3Rpb24uICBXZSB3aWxsIGdpdmUgdXAg YW5kIF9leGl0KDEpIGFmdGVyCkBAIC00NDA3LDExICs0NDIwLDExIEBAIEJhY2tlbmRJbml0 aWFsaXplKFBvcnQgKnBvcnQsIENBQ19zdGF0ZSBjYWMpCiAgKgkJRG9lc24ndCByZXR1cm4g YXQgYWxsLgogICovCiBzdGF0aWMgdm9pZAotQmFja2VuZFJ1bihQb3J0ICpwb3J0KQorQmFj a2VuZFJ1bih2b2lkKQogewogCS8qCi0JICogQ3JlYXRlIGEgcGVyLWJhY2tlbmQgUEdQUk9D IHN0cnVjdCBpbiBzaGFyZWQgbWVtb3J5LiBXZSBtdXN0IGRvCi0JICogdGhpcyBiZWZvcmUg d2UgY2FuIHVzZSBMV0xvY2tzIChpbiBBdHRhY2hTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVz KS4KKwkgKiBDcmVhdGUgYSBwZXItYmFja2VuZCBQR1BST0Mgc3RydWN0IGluIHNoYXJlZCBt ZW1vcnkuIFdlIG11c3QgZG8gdGhpcworCSAqIGJlZm9yZSB3ZSBjYW4gdXNlIExXTG9ja3Mg KGluIEF0dGFjaFNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXMpLgogCSAqLwogCUluaXRQcm9j ZXNzKCk7CiAKQEAgLTQ0MjQsNyArNDQzNyw3IEBAIEJhY2tlbmRSdW4oUG9ydCAqcG9ydCkK IAkgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CiAKLQlQ b3N0Z3Jlc01haW4ocG9ydC0+ZGF0YWJhc2VfbmFtZSwgcG9ydC0+dXNlcl9uYW1lKTsKKwlQ b3N0Z3Jlc01haW4oTXlQcm9jUG9ydC0+ZGF0YWJhc2VfbmFtZSwgTXlQcm9jUG9ydC0+dXNl cl9uYW1lKTsKIH0KIAogCkBAIC00NDQ1LDExICs0NDU4LDExIEBAIEJhY2tlbmRSdW4oUG9y dCAqcG9ydCkKIHBpZF90CiBwb3N0bWFzdGVyX2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICph cmd2W10pCiB7Ci0JUG9ydAkJcG9ydDsKKwlDbGllbnRTb2NrZXQgY2xpZW50X3NvY2s7CiAK LQkvKiBUaGlzIGVudHJ5IHBvaW50IHBhc3NlcyBkdW1teSB2YWx1ZXMgZm9yIHRoZSBQb3J0 IHZhcmlhYmxlcyAqLwotCW1lbXNldCgmcG9ydCwgMCwgc2l6ZW9mKHBvcnQpKTsKLQlyZXR1 cm4gaW50ZXJuYWxfZm9ya2V4ZWMoYXJnYywgYXJndiwgJnBvcnQpOworCS8qIFRoaXMgZW50 cnkgcG9pbnQgZG9lc24ndCBwYXNzIGEgY2xpZW50IHNvY2tldCAqLworCW1lbXNldCgmY2xp ZW50X3NvY2ssIDAsIHNpemVvZihDbGllbnRTb2NrZXQpKTsKKwlyZXR1cm4gaW50ZXJuYWxf Zm9ya2V4ZWMoYXJnYywgYXJndiwgJmNsaWVudF9zb2NrKTsKIH0KIAogLyoKQEAgLTQ0NjIs NyArNDQ3NSw3IEBAIHBvc3RtYXN0ZXJfZm9ya2V4ZWMoaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKICAqIHJldHVybnMgdGhlIHBpZCBvZiB0aGUgZm9yay9leGVjJ2QgcHJvY2Vzcywgb3Ig LTEgb24gZmFpbHVyZQogICovCiBzdGF0aWMgcGlkX3QKLWJhY2tlbmRfZm9ya2V4ZWMoUG9y dCAqcG9ydCwgQ0FDX3N0YXRlIGNhYykKK2JhY2tlbmRfZm9ya2V4ZWMoQ2xpZW50U29ja2V0 ICpjbGllbnRfc29jaywgQ0FDX3N0YXRlIGNhYykKIHsKIAljaGFyCSAgICphdls1XTsKIAlp bnQJCQlhYyA9IDA7CkBAIC00NDc4LDcgKzQ0OTEsNyBAQCBiYWNrZW5kX2ZvcmtleGVjKFBv cnQgKnBvcnQsIENBQ19zdGF0ZSBjYWMpCiAJYXZbYWNdID0gTlVMTDsKIAlBc3NlcnQoYWMg PCBsZW5ndGhvZihhdikpOwogCi0JcmV0dXJuIGludGVybmFsX2ZvcmtleGVjKGFjLCBhdiwg cG9ydCk7CisJcmV0dXJuIGludGVybmFsX2ZvcmtleGVjKGFjLCBhdiwgY2xpZW50X3NvY2sp OwogfQogCiAjaWZuZGVmIFdJTjMyCkBAIC00NDkwLDcgKzQ1MDMsNyBAQCBiYWNrZW5kX2Zv cmtleGVjKFBvcnQgKnBvcnQsIENBQ19zdGF0ZSBjYWMpCiAgKiAtIGZvcmsoKTpzLCBhbmQg dGhlbiBleGVjKCk6cyB0aGUgY2hpbGQgcHJvY2VzcwogICovCiBzdGF0aWMgcGlkX3QKLWlu dGVybmFsX2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICphcmd2W10sIFBvcnQgKnBvcnQpCitp bnRlcm5hbF9mb3JrZXhlYyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBDbGllbnRTb2NrZXQg KmNsaWVudF9zb2NrKQogewogCXN0YXRpYyB1bnNpZ25lZCBsb25nIHRtcEJhY2tlbmRGaWxl TnVtID0gMDsKIAlwaWRfdAkJcGlkOwpAQCAtNDQ5OCw3ICs0NTExLDcgQEAgaW50ZXJuYWxf Zm9ya2V4ZWMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgUG9ydCAqcG9ydCkKIAlCYWNrZW5k UGFyYW1ldGVycyBwYXJhbTsKIAlGSUxFCSAgICpmcDsKIAotCWlmICghc2F2ZV9iYWNrZW5k X3ZhcmlhYmxlcygmcGFyYW0sIHBvcnQpKQorCWlmICghc2F2ZV9iYWNrZW5kX3ZhcmlhYmxl cygmcGFyYW0sIGNsaWVudF9zb2NrKSkKIAkJcmV0dXJuIC0xOwkJCQkvKiBsb2cgbWFkZSBi eSBzYXZlX2JhY2tlbmRfdmFyaWFibGVzICovCiAKIAkvKiBDYWxjdWxhdGUgbmFtZSBmb3Ig dGVtcCBmaWxlICovCkBAIC00Nzk2LDcgKzQ4MDksNyBAQCByZXRyeToKIHZvaWQKIFN1YlBv c3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0JUG9ydAkJcG9ydDsK KwlDbGllbnRTb2NrZXQgY2xpZW50X3NvY2s7CiAKIAkvKiBJbiBFWEVDX0JBQ0tFTkQgY2Fz ZSB3ZSB3aWxsIG5vdCBoYXZlIGluaGVyaXRlZCB0aGVzZSBzZXR0aW5ncyAqLwogCUlzUG9z dG1hc3RlckVudmlyb25tZW50ID0gdHJ1ZTsKQEAgLTQ4MTAsOCArNDgyMyw4IEBAIFN1YlBv c3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWVsb2coRkFUQUwsICJp bnZhbGlkIHN1YnBvc3RtYXN0ZXIgaW52b2NhdGlvbiIpOwogCiAJLyogUmVhZCBpbiB0aGUg dmFyaWFibGVzIGZpbGUgKi8KLQltZW1zZXQoJnBvcnQsIDAsIHNpemVvZihQb3J0KSk7Ci0J cmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhhcmd2WzJdLCAmcG9ydCk7CisJbWVtc2V0KCZjbGll bnRfc29jaywgMCwgc2l6ZW9mKENsaWVudFNvY2tldCkpOworCXJlYWRfYmFja2VuZF92YXJp YWJsZXMoYXJndlsyXSwgJmNsaWVudF9zb2NrKTsKIAogCS8qIENsb3NlIHRoZSBwb3N0bWFz dGVyJ3Mgc29ja2V0cyAoYXMgc29vbiBhcyB3ZSBrbm93IHRoZW0pICovCiAJQ2xvc2VQb3N0 bWFzdGVyUG9ydHMoc3RyY21wKGFyZ3ZbMV0sICItLWZvcmtsb2ciKSA9PSAwKTsKQEAgLTQ5 MTUsMTMgKzQ5MjgsMTMgQEAgU3ViUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKIAkJICogUEdQUk9DIHNsb3RzLCB3ZSBoYXZlIGFscmVhZHkgaW5pdGlhbGl6ZWQg bGlicHEgYW5kIGFyZSBhYmxlIHRvCiAJCSAqIHJlcG9ydCB0aGUgZXJyb3IgdG8gdGhlIGNs aWVudC4KIAkJICovCi0JCUJhY2tlbmRJbml0aWFsaXplKCZwb3J0LCBjYWMpOworCQlCYWNr ZW5kSW5pdGlhbGl6ZSgmY2xpZW50X3NvY2ssIGNhYyk7CiAKIAkJLyogUmVzdG9yZSBiYXNp YyBzaGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCiAJCUluaXRTaG1lbUFjY2VzcyhVc2VkU2ht ZW1TZWdBZGRyKTsKIAogCQkvKiBBbmQgcnVuIHRoZSBiYWNrZW5kICovCi0JCUJhY2tlbmRS dW4oJnBvcnQpOwkJLyogZG9lcyBub3QgcmV0dXJuICovCisJCUJhY2tlbmRSdW4oKTsJCQkv KiBkb2VzIG5vdCByZXR1cm4gKi8KIAl9CiAJaWYgKHN0cmNtcChhcmd2WzFdLCAiLS1mb3Jr YXV4IikgPT0gMCkKIAl7CkBAIC01OTk1LDE1ICs2MDA4LDE1IEBAIHN0YXRpYyB2b2lkIHJl YWRfaW5oZXJpdGFibGVfc29ja2V0KFNPQ0tFVCAqZGVzdCwgSW5oZXJpdGFibGVTb2NrZXQg KnNyYyk7CiAvKiBTYXZlIGNyaXRpY2FsIGJhY2tlbmQgdmFyaWFibGVzIGludG8gdGhlIEJh Y2tlbmRQYXJhbWV0ZXJzIHN0cnVjdCAqLwogI2lmbmRlZiBXSU4zMgogc3RhdGljIGJvb2wK LXNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBQb3J0 ICpwb3J0KQorc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFy YW0sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spCiAjZWxzZQogc3RhdGljIGJvb2wKLXNh dmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBQb3J0ICpw b3J0LAorc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0s IENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssCiAJCQkJCSAgIEhBTkRMRSBjaGlsZFByb2Nl c3MsIHBpZF90IGNoaWxkUGlkKQogI2VuZGlmCiB7Ci0JbWVtY3B5KCZwYXJhbS0+cG9ydCwg cG9ydCwgc2l6ZW9mKFBvcnQpKTsKLQlpZiAoIXdyaXRlX2luaGVyaXRhYmxlX3NvY2tldCgm cGFyYW0tPnBvcnRzb2NrZXQsIHBvcnQtPnNvY2ssIGNoaWxkUGlkKSkKKwltZW1jcHkoJnBh cmFtLT5jbGllbnRfc29jaywgY2xpZW50X3NvY2ssIHNpemVvZihDbGllbnRTb2NrZXQpKTsK KwlpZiAoIXdyaXRlX2luaGVyaXRhYmxlX3NvY2tldCgmcGFyYW0tPnNlcmlhbGl6ZWRfc29j aywgY2xpZW50X3NvY2stPnNvY2ssIGNoaWxkUGlkKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJ c3RybGNweShwYXJhbS0+RGF0YURpciwgRGF0YURpciwgTUFYUEdQQVRIKTsKQEAgLTYxNjUs NyArNjE3OCw3IEBAIHJlYWRfaW5oZXJpdGFibGVfc29ja2V0KFNPQ0tFVCAqZGVzdCwgSW5o ZXJpdGFibGVTb2NrZXQgKnNyYykKICNlbmRpZgogCiBzdGF0aWMgdm9pZAotcmVhZF9iYWNr ZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwgUG9ydCAqcG9ydCkKK3JlYWRfYmFja2VuZF92YXJp YWJsZXMoY2hhciAqaWQsIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spCiB7CiAJQmFja2Vu ZFBhcmFtZXRlcnMgcGFyYW07CiAKQEAgLTYyMzIsMTUgKzYyNDUsMTUgQEAgcmVhZF9iYWNr ZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwgUG9ydCAqcG9ydCkKIAl9CiAjZW5kaWYKIAotCXJl c3RvcmVfYmFja2VuZF92YXJpYWJsZXMoJnBhcmFtLCBwb3J0KTsKKwlyZXN0b3JlX2JhY2tl bmRfdmFyaWFibGVzKCZwYXJhbSwgY2xpZW50X3NvY2spOwogfQogCiAvKiBSZXN0b3JlIGNy aXRpY2FsIGJhY2tlbmQgdmFyaWFibGVzIGZyb20gdGhlIEJhY2tlbmRQYXJhbWV0ZXJzIHN0 cnVjdCAqLwogc3RhdGljIHZvaWQKLXJlc3RvcmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2Vu ZFBhcmFtZXRlcnMgKnBhcmFtLCBQb3J0ICpwb3J0KQorcmVzdG9yZV9iYWNrZW5kX3Zhcmlh YmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3Nv Y2spCiB7Ci0JbWVtY3B5KHBvcnQsICZwYXJhbS0+cG9ydCwgc2l6ZW9mKFBvcnQpKTsKLQly ZWFkX2luaGVyaXRhYmxlX3NvY2tldCgmcG9ydC0+c29jaywgJnBhcmFtLT5wb3J0c29ja2V0 KTsKKwltZW1jcHkoY2xpZW50X3NvY2ssICZwYXJhbS0+Y2xpZW50X3NvY2ssIHNpemVvZihD bGllbnRTb2NrZXQpKTsKKwlyZWFkX2luaGVyaXRhYmxlX3NvY2tldCgmY2xpZW50X3NvY2st PnNvY2ssICZwYXJhbS0+c2VyaWFsaXplZF9zb2NrKTsKIAogCVNldERhdGFEaXIocGFyYW0t PkRhdGFEaXIpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWJwcS9saWJwcS1iZS5o IGIvc3JjL2luY2x1ZGUvbGlicHEvbGlicHEtYmUuaAppbmRleCA2MjVjYWE4NTNhMC4uNDE4 NjdkYzE0YWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgKKysr IGIvc3JjL2luY2x1ZGUvbGlicHEvbGlicHEtYmUuaApAQCAtMTEwLDEyICsxMTAsOSBAQCB0 eXBlZGVmIHN0cnVjdCBDbGllbnRDb25uZWN0aW9uSW5mbwogfSBDbGllbnRDb25uZWN0aW9u SW5mbzsKIAogLyoKLSAqIFRoaXMgaXMgdXNlZCBieSB0aGUgcG9zdG1hc3RlciBpbiBpdHMg Y29tbXVuaWNhdGlvbiB3aXRoIGZyb250ZW5kcy4gIEl0Ci0gKiBjb250YWlucyBhbGwgc3Rh dGUgaW5mb3JtYXRpb24gbmVlZGVkIGR1cmluZyB0aGlzIGNvbW11bmljYXRpb24gYmVmb3Jl IHRoZQotICogYmFja2VuZCBpcyBydW4uICBUaGUgUG9ydCBzdHJ1Y3R1cmUgaXMga2VwdCBp biBtYWxsb2MnZCBtZW1vcnkgYW5kIGlzCi0gKiBzdGlsbCBhdmFpbGFibGUgd2hlbiBhIGJh Y2tlbmQgaXMgcnVubmluZyAoc2VlIE15UHJvY1BvcnQpLiAgVGhlIGRhdGEKLSAqIGl0IHBv aW50cyB0byBtdXN0IGFsc28gYmUgbWFsbG9jJ2QsIG9yIGVsc2UgcGFsbG9jJ2QgaW4gVG9w TWVtb3J5Q29udGV4dCwKLSAqIHNvIHRoYXQgaXQgc3Vydml2ZXMgaW50byBQb3N0Z3Jlc01h aW4gZXhlY3V0aW9uIQorICogVGhlIFBvcnQgc3RydWN0dXJlIGhvbGRzIHN0YXRlIGluZm9y bWF0aW9uIGFib3V0IGEgY2xpZW50IGNvbm5lY3Rpb24gaW4gYQorICogYmFja2VuZCBwcm9j ZXNzLiAgSXQgaXMgYXZhaWxhYmxlIGluIHRoZSBnbG9iYWwgdmFyaWFibGUgTXlQcm9jUG9y dC4gIFRoZQorICogc3RydWN0IGFuZCBhbGwgdGhlIGRhdGEgaXQgcG9pbnRzIGFyZSBrZXB0 IGluIFRvcE1lbW9yeUNvbnRleHQuCiAgKgogICogcmVtb3RlX2hvc3RuYW1lIGlzIHNldCBp ZiB3ZSBkaWQgYSBzdWNjZXNzZnVsIHJldmVyc2UgbG9va3VwIG9mIHRoZQogICogY2xpZW50 J3MgSVAgYWRkcmVzcyBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cC4KQEAgLTIxNyw2ICsyMTQs MTYgQEAgdHlwZWRlZiBzdHJ1Y3QgUG9ydAogI2VuZGlmCiB9IFBvcnQ7CiAKKy8qCisgKiBD bGllbnRTb2NrZXQgaG9sZHMgYSBzb2NrZXQgZm9yIGFuIGFjY2VwdGVkIGNvbm5lY3Rpb24s IGFsb25nIHdpdGggdGhlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZW5kcG9pbnRzLgor ICovCit0eXBlZGVmIHN0cnVjdCBDbGllbnRTb2NrZXQgeworCXBnc29ja2V0CXNvY2s7CQkJ LyogRmlsZSBkZXNjcmlwdG9yICovCisJU29ja0FkZHIJbGFkZHI7CQkJLyogbG9jYWwgYWRk ciAocG9zdG1hc3RlcikgKi8KKwlTb2NrQWRkcglyYWRkcjsJCQkvKiByZW1vdGUgYWRkciAo Y2xpZW50KSAqLworfSBDbGllbnRTb2NrZXQ7CisKICNpZmRlZiBVU0VfU1NMCiAvKgogICoJ SGFyZGNvZGVkIERIIHBhcmFtZXRlcnMsIHVzZWQgaW4gZXBoZW1lcmFsIERIIGtleWluZy4g IChTZWUgYWxzbwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvbGlicHEuaCBiL3Ny Yy9pbmNsdWRlL2xpYnBxL2xpYnBxLmgKaW5kZXggNTBmYzc4MWY0NzEuLmZjYmNkYmUyZGJm IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9saWJwcS9saWJwcS5oCisrKyBiL3NyYy9pbmNs dWRlL2xpYnBxL2xpYnBxLmgKQEAgLTY0LDExICs2NCwxMSBAQCBleHRlcm4gUEdETExJTVBP UlQgV2FpdEV2ZW50U2V0ICpGZUJlV2FpdFNldDsKICNkZWZpbmUgRmVCZVdhaXRTZXRMYXRj aFBvcyAxCiAjZGVmaW5lIEZlQmVXYWl0U2V0TkV2ZW50cyAzCiAKLWV4dGVybiBpbnQJU3Ry ZWFtU2VydmVyUG9ydChpbnQgZmFtaWx5LCBjb25zdCBjaGFyICpob3N0TmFtZSwKK2V4dGVy biBpbnQJTGlzdGVuU2VydmVyUG9ydChpbnQgZmFtaWx5LCBjb25zdCBjaGFyICpob3N0TmFt ZSwKIAkJCQkJCQkgdW5zaWduZWQgc2hvcnQgcG9ydE51bWJlciwgY29uc3QgY2hhciAqdW5p eFNvY2tldERpciwKIAkJCQkJCQkgcGdzb2NrZXQgTGlzdGVuU29ja2V0W10sIGludCBNYXhM aXN0ZW4pOwotZXh0ZXJuIGludAlTdHJlYW1Db25uZWN0aW9uKHBnc29ja2V0IHNlcnZlcl9m ZCwgUG9ydCAqcG9ydCk7Ci1leHRlcm4gdm9pZCBTdHJlYW1DbG9zZShwZ3NvY2tldCBzb2Nr KTsKK2V4dGVybiBpbnQJQWNjZXB0Q2xpZW50Q29ubmVjdGlvbihwZ3NvY2tldCBzZXJ2ZXJf ZmQsIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spOworZXh0ZXJuIFBvcnQgKlN0cmVhbUNv bm5lY3Rpb24oQ2xpZW50U29ja2V0ICpjbGllbnRfc29jayk7CiBleHRlcm4gdm9pZCBUb3Vj aFNvY2tldEZpbGVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgUmVtb3ZlU29ja2V0RmlsZXModm9p ZCk7CiBleHRlcm4gdm9pZCBwcV9pbml0KHZvaWQpOwotLSAKMi4zMC4yCgo= --------------kg1n0gXnIqDHZBpf1kTdCJqe Content-Type: text/x-patch; charset=UTF-8; name="0009-Refactor-postmaster-child-process-launching.patch" Content-Disposition: attachment; filename="0009-Refactor-postmaster-child-process-launching.patch" Content-Transfer-Encoding: base64 RnJvbSBiMzNjZmViMjhhNTQxOTA0NWFjYjY1OWEwMTQxMGIyYjQ2M2JlYTNlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFN1biwgMTggSnVuIDIwMjMgMTM6NTk6NDggKzAzMDAK U3ViamVjdDogW1BBVENIIDkvOV0gUmVmYWN0b3IgcG9zdG1hc3RlciBjaGlsZCBwcm9jZXNz IGxhdW5jaGluZwoKLSBNb3ZlIGNvZGUgcmVsYXRlZCB0byBsYXVuY2hpbmcgYmFja2VuZCBw cm9jZXNzZXMgdG8gbmV3IHNvdXJjZSBmaWxlLAogIHByb2Nlc3Nfc3RhcnQuYwoKLSBJbnRy b2R1Y2UgbmV3IHBvc3RtYXN0ZXJfY2hpbGRfbGF1bmNoKCkgZnVuY3Rpb24gdGhhdCBkZWFs cyB3aXRoIHRoZQogIGRpZmZlcmVuY2VzIGJldHdlZW4gRVhFQ19CQUNLRU5EIGFuZCBmb3Jr IG1vZGUuCgotIFJlZmFjdG9yIHRoZSBtZWNoYW5pc20gb2YgcGFzc2luZyBpbmZvcm1hdG9u IGZyb20gdGhlIHBhcmVudCB0bwogIGNoaWxkIHByb2Nlc3MuIEluc3RlYWQgb2YgdXNpbmcg ZGlmZmVyZW50IGNvbW1hbmQtbGluZSBhcmd1bWVudHMKICB3aGVuIGxhdW5jaGluZyB0aGUg Y2hpbGQgcHJvY2VzcyBpbiBFWEVDX0JBQ0tFTkQgbW9kZSwgcGFzcyBhCiAgdmFyaWFibGUt bGVuZ3RoIGJsb2Igb2YgZGF0YSBhbG9uZyB3aXRoIGFsbCB0aGUgZ2xvYmFsCiAgdmFyaWFi bGVzLiBUaGUgY29udGVudHMgb2YgdGhhdCBibG9iIGRlcGVuZHMgb24gdGhlIGtpbmQgb2Yg Y2hpbGQKICBwcm9jZXNzIGJlaW5nIGxhdW5jaGVkLiBJbiAhRVhFQ19CQUNLRU5EIG1vZGUs IHdlIHVzZSB0aGUgc2FtZSBibG9iLAogIGJ1dCBpdCdzIHNpbXBseSBpbmhlcml0ZWQgZnJv bSB0aGUgcGFyZW50IHRvIGNoaWxkIHByb2Nlc3MuCi0tLQogc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgIDIgKy0KIHNyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvYXV0b3ZhY3V1bS5jICAgICAgICAgfCAgMTczICstLQogc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9hdXhwcm9jZXNzLmMgICAgICAgICB8ICAgNjcgKy0KIHNyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvYmd3b3JrZXIuYyAgICAgICAgICAgfCAgIDE5ICstCiBzcmMvYmFja2VuZC9w b3N0bWFzdGVyL2Jnd3JpdGVyLmMgICAgICAgICAgIHwgICAgOSArLQogc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYyAgICAgICB8ICAgIDkgKy0KIHNyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvZm9ya19wcm9jZXNzLmMgICAgICAgfCAgMTI2IC0tCiBzcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMgICAgIHwgMTMxNCArKysrKysrKysrKysr KysrCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL21lc29uLmJ1aWxkICAgICAgICAgIHwgICAg MiArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYyAgICAgICAgICAgICB8ICAg IDkgKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jICAgICAgICAgfCAx NTI2ICsrKy0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1 cC5jICAgICAgICAgICAgfCAgICA5ICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N5c2xv Z2dlci5jICAgICAgICAgIHwgIDI3NSArKy0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dh bHdyaXRlci5jICAgICAgICAgIHwgICAgOSArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9sYXVuY2hlci5jICB8ICAgIDEgLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v d2FscmVjZWl2ZXIuYyAgICAgICB8ICAgMTAgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3NobWVtLmMgICAgICAgICAgICAgfCAgICAyICsKIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYyAgICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQv Z2xvYmFscy5jICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQv bWlzY2luaXQuYyAgICAgICAgICAgfCAgMTMzIC0tCiBzcmMvaW5jbHVkZS9saWJwcS9saWJw cS1iZS5oICAgICAgICAgICAgICAgIHwgICAxMCArLQogc3JjL2luY2x1ZGUvbWlzY2FkbWlu LmggICAgICAgICAgICAgICAgICAgICB8ICAgIDEgLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rl ci9hdXRvdmFjdXVtLmggICAgICAgICB8ICAgMTIgKy0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0 ZXIvYXV4cHJvY2Vzcy5oICAgICAgICAgfCAgICA0ICstCiBzcmMvaW5jbHVkZS9wb3N0bWFz dGVyL2Jnd29ya2VyX2ludGVybmFscy5oIHwgICAgNCArLQogc3JjL2luY2x1ZGUvcG9zdG1h c3Rlci9iZ3dyaXRlci5oICAgICAgICAgICB8ICAgIDQgKy0KIHNyYy9pbmNsdWRlL3Bvc3Rt YXN0ZXIvZm9ya19wcm9jZXNzLmggICAgICAgfCAgIDE3IC0KIHNyYy9pbmNsdWRlL3Bvc3Rt YXN0ZXIvcGdhcmNoLmggICAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9wb3N0 bWFzdGVyL3Bvc3RtYXN0ZXIuaCAgICAgICAgIHwgICA0MCArLQogc3JjL2luY2x1ZGUvcG9z dG1hc3Rlci9zdGFydHVwLmggICAgICAgICAgICB8ICAgIDIgKy0KIHNyYy9pbmNsdWRlL3Bv c3RtYXN0ZXIvc3lzbG9nZ2VyLmggICAgICAgICAgfCAgICA0ICstCiBzcmMvaW5jbHVkZS9w b3N0bWFzdGVyL3dhbHdyaXRlci5oICAgICAgICAgIHwgICAgMiArLQogc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCAgICAgICB8ICAgIDIgKy0KIDMzIGZpbGVzIGNo YW5nZWQsIDE3OTkgaW5zZXJ0aW9ucygrKSwgMjAwMiBkZWxldGlvbnMoLSkKIGRlbGV0ZSBt b2RlIDEwMDY0NCBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2ZvcmtfcHJvY2Vzcy5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5j CiBkZWxldGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9mb3JrX3Byb2Nl c3MuaAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZpbGUgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL01ha2VmaWxlCmluZGV4IDA0NzQ0OGIzNGViLi5mYzg4 ZjViYWUwYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9NYWtlZmlsZQor KysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL01ha2VmaWxlCkBAIC0xOCw4ICsxOCw4IEBA IE9CSlMgPSBcCiAJYmd3b3JrZXIubyBcCiAJYmd3cml0ZXIubyBcCiAJY2hlY2twb2ludGVy Lm8gXAotCWZvcmtfcHJvY2Vzcy5vIFwKIAlpbnRlcnJ1cHQubyBcCisJbGF1bmNoX2JhY2tl bmQubyBcCiAJcGdhcmNoLm8gXAogCXBvc3RtYXN0ZXIubyBcCiAJc3RhcnR1cC5vIFwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jIGIvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKaW5kZXggMTA0MTM3Njk1MWUuLmUxMzI4 NGI0YjVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0u YworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwpAQCAtODQsNyAr ODQsNiBAQAogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgInBnc3Rh dC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgotI2luY2x1ZGUgInBv c3RtYXN0ZXIvZm9ya19wcm9jZXNzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1 cHQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCIKICNpbmNsdWRlICJz dG9yYWdlL2J1Zm1nci5oIgpAQCAtMzE1LDEzICszMTQsNiBAQCBzdGF0aWMgV29ya2VySW5m byBNeVdvcmtlckluZm8gPSBOVUxMOwogLyogUElEIG9mIGxhdW5jaGVyLCB2YWxpZCBvbmx5 IGluIHdvcmtlciB3aGlsZSBzaHV0dGluZyBkb3duICovCiBpbnQJCQlBdXRvdmFjdXVtTGF1 bmNoZXJQaWQgPSAwOwogCi0jaWZkZWYgRVhFQ19CQUNLRU5ECi1zdGF0aWMgcGlkX3QgYXZs YXVuY2hlcl9mb3JrZXhlYyh2b2lkKTsKLXN0YXRpYyBwaWRfdCBhdndvcmtlcl9mb3JrZXhl Yyh2b2lkKTsKLSNlbmRpZgotTk9OX0VYRUNfU1RBVElDIHZvaWQgQXV0b1ZhY1dvcmtlck1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7Ci1O T05fRVhFQ19TVEFUSUMgdm9pZCBBdXRvVmFjTGF1bmNoZXJNYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwotCiBzdGF0aWMgT2lkCWRvX3N0 YXJ0X3dvcmtlcih2b2lkKTsKIHN0YXRpYyB2b2lkIEhhbmRsZUF1dG9WYWNMYXVuY2hlcklu dGVycnVwdHModm9pZCk7CiBzdGF0aWMgdm9pZCBBdXRvVmFjTGF1bmNoZXJTaHV0ZG93bih2 b2lkKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKQEAgLTM2NSw4NSArMzU3LDIxIEBAIHN0 YXRpYyB2b2lkIGF2bF9zaWd1c3IyX2hhbmRsZXIoU0lHTkFMX0FSR1MpOwogICoJCQkJCSAg QVVUT1ZBQ1VVTSBMQVVOQ0hFUiBDT0RFCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZmRlZiBF WEVDX0JBQ0tFTkQKIC8qCi0gKiBmb3JrZXhlYyByb3V0aW5lIGZvciB0aGUgYXV0b3ZhY3V1 bSBsYXVuY2hlciBwcm9jZXNzLgotICoKLSAqIEZvcm1hdCB1cCB0aGUgYXJnbGlzdCwgdGhl biBmb3JrIGFuZCBleGVjLgotICovCi1zdGF0aWMgcGlkX3QKLWF2bGF1bmNoZXJfZm9ya2V4 ZWModm9pZCkKLXsKLQljaGFyCSAgICphdlsxMF07Ci0JaW50CQkJYWMgPSAwOwotCi0JYXZb YWMrK10gPSAicG9zdGdyZXMiOwotCWF2W2FjKytdID0gIi0tZm9ya2F2bGF1bmNoZXIiOwot CWF2W2FjKytdID0gTlVMTDsJCQkvKiBmaWxsZWQgaW4gYnkgcG9zdG1hc3Rlcl9mb3JrZXhl YyAqLwotCWF2W2FjXSA9IE5VTEw7Ci0KLQlBc3NlcnQoYWMgPCBsZW5ndGhvZihhdikpOwot Ci0JcmV0dXJuIHBvc3RtYXN0ZXJfZm9ya2V4ZWMoYWMsIGF2KTsKLX0KLQotLyoKLSAqIFdl IG5lZWQgdGhpcyBzZXQgZnJvbSB0aGUgb3V0c2lkZSwgYmVmb3JlIEluaXRQcm9jZXNzIGlz IGNhbGxlZAorICogTWFpbiBsb29wIGZvciB0aGUgYXV0b3ZhY3V1bSBsYXVuY2hlciBwcm9j ZXNzLgogICovCiB2b2lkCi1BdXRvdmFjdXVtTGF1bmNoZXJJQW0odm9pZCkKLXsKLQlhbV9h dXRvdmFjdXVtX2xhdW5jaGVyID0gdHJ1ZTsKLX0KLSNlbmRpZgotCi0vKgotICogTWFpbiBl bnRyeSBwb2ludCBmb3IgYXV0b3ZhY3V1bSBsYXVuY2hlciBwcm9jZXNzLCB0byBiZSBjYWxs ZWQgZnJvbSB0aGUKLSAqIHBvc3RtYXN0ZXIuCi0gKi8KLWludAotU3RhcnRBdXRvVmFjTGF1 bmNoZXIodm9pZCkKK0F1dG9WYWNMYXVuY2hlck1haW4oY2hhciAqc3RhcnR1cF9kYXRhLCBz aXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIHsKLQlwaWRfdAkJQXV0b1ZhY1BJRDsKKwlzaWdq bXBfYnVmCWxvY2FsX3NpZ2ptcF9idWY7CiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLQlzd2l0 Y2ggKChBdXRvVmFjUElEID0gYXZsYXVuY2hlcl9mb3JrZXhlYygpKSkKLSNlbHNlCi0Jc3dp dGNoICgoQXV0b1ZhY1BJRCA9IGZvcmtfcHJvY2VzcygpKSkKLSNlbmRpZgorCS8qIFJlbGVh c2UgcG9zdG1hc3RlcidzIHdvcmtpbmcgbWVtb3J5IGNvbnRleHQgKi8KKwlpZiAoUG9zdG1h c3RlckNvbnRleHQpCiAJewotCQljYXNlIC0xOgotCQkJZXJlcG9ydChMT0csCi0JCQkJCShl cnJtc2coImNvdWxkIG5vdCBmb3JrIGF1dG92YWN1dW0gbGF1bmNoZXIgcHJvY2VzczogJW0i KSkpOwotCQkJcmV0dXJuIDA7Ci0KLSNpZm5kZWYgRVhFQ19CQUNLRU5ECi0JCWNhc2UgMDoK LQkJCS8qIGluIHBvc3RtYXN0ZXIgY2hpbGQgLi4uICovCi0JCQlJbml0UG9zdG1hc3RlckNo aWxkKCk7Ci0KLQkJCS8qIENsb3NlIHRoZSBwb3N0bWFzdGVyJ3Mgc29ja2V0cyAqLwotCQkJ Q2xvc2VQb3N0bWFzdGVyUG9ydHMoZmFsc2UpOwotCi0JCQlBdXRvVmFjTGF1bmNoZXJNYWlu KDAsIE5VTEwpOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAo aW50KSBBdXRvVmFjUElEOworCQlNZW1vcnlDb250ZXh0RGVsZXRlKFBvc3RtYXN0ZXJDb250 ZXh0KTsKKwkJUG9zdG1hc3RlckNvbnRleHQgPSBOVUxMOwogCX0KIAotCS8qIHNob3VsZG4n dCBnZXQgaGVyZSAqLwotCXJldHVybiAwOwotfQotCi0vKgotICogTWFpbiBsb29wIGZvciB0 aGUgYXV0b3ZhY3V1bSBsYXVuY2hlciBwcm9jZXNzLgotICovCi1OT05fRVhFQ19TVEFUSUMg dm9pZAotQXV0b1ZhY0xhdW5jaGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewot CXNpZ2ptcF9idWYJbG9jYWxfc2lnam1wX2J1ZjsKLQogCWFtX2F1dG92YWN1dW1fbGF1bmNo ZXIgPSB0cnVlOwogCiAJTXlCYWNrZW5kVHlwZSA9IEJfQVVUT1ZBQ19MQVVOQ0hFUjsKQEAg LTQ3NSw2ICs0MDMsOSBAQCBBdXRvVmFjTGF1bmNoZXJNYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCiAJcHFzaWduYWwoU0lHRlBFLCBGbG9hdEV4Y2VwdGlvbkhhbmRsZXIpOwogCXBx c2lnbmFsKFNJR0NITEQsIFNJR19ERkwpOwogCisJLyogYXV0b3ZhY3V1bSBuZWVkcyB0aGlz IHNldCBiZWZvcmUgY2FsbGluZyBJbml0UHJvY2VzcyAqLworCWFtX2F1dG92YWN1dW1fbGF1 bmNoZXIgPSB0cnVlOworCiAJLyoKIAkgKiBDcmVhdGUgYSBwZXItYmFja2VuZCBQR1BST0Mg c3RydWN0IGluIHNoYXJlZCBtZW1vcnkuIFdlIG11c3QgZG8gdGhpcwogCSAqIGJlZm9yZSB3 ZSBjYW4gdXNlIExXTG9ja3MuCkBAIC0xNDM1LDg3ICsxMzY2LDIyIEBAIGF2bF9zaWd1c3Iy X2hhbmRsZXIoU0lHTkFMX0FSR1MpCiAgKgkJCQkJICBBVVRPVkFDVVVNIFdPUktFUiBDT0RF CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLS8qCi0gKiBmb3Jr ZXhlYyByb3V0aW5lcyBmb3IgdGhlIGF1dG92YWN1dW0gd29ya2VyLgotICoKLSAqIEZvcm1h dCB1cCB0aGUgYXJnbGlzdCwgdGhlbiBmb3JrIGFuZCBleGVjLgotICovCi1zdGF0aWMgcGlk X3QKLWF2d29ya2VyX2ZvcmtleGVjKHZvaWQpCi17Ci0JY2hhcgkgICAqYXZbMTBdOwotCWlu dAkJCWFjID0gMDsKLQotCWF2W2FjKytdID0gInBvc3RncmVzIjsKLQlhdlthYysrXSA9ICIt LWZvcmthdndvcmtlciI7Ci0JYXZbYWMrK10gPSBOVUxMOwkJCS8qIGZpbGxlZCBpbiBieSBw b3N0bWFzdGVyX2ZvcmtleGVjICovCi0JYXZbYWNdID0gTlVMTDsKLQotCUFzc2VydChhYyA8 IGxlbmd0aG9mKGF2KSk7Ci0KLQlyZXR1cm4gcG9zdG1hc3Rlcl9mb3JrZXhlYyhhYywgYXYp OwotfQotCiAvKgotICogV2UgbmVlZCB0aGlzIHNldCBmcm9tIHRoZSBvdXRzaWRlLCBiZWZv cmUgSW5pdFByb2Nlc3MgaXMgY2FsbGVkCisgKiBBdXRvVmFjV29ya2VyTWFpbgogICovCiB2 b2lkCi1BdXRvdmFjdXVtV29ya2VySUFtKHZvaWQpCitBdXRvVmFjV29ya2VyTWFpbihjaGFy ICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogewotCWFtX2F1dG92 YWN1dW1fd29ya2VyID0gdHJ1ZTsKLX0KLSNlbmRpZgotCi0vKgotICogTWFpbiBlbnRyeSBw b2ludCBmb3IgYXV0b3ZhY3V1bSB3b3JrZXIgcHJvY2Vzcy4KLSAqCi0gKiBUaGlzIGNvZGUg aXMgaGVhdmlseSBiYXNlZCBvbiBwZ2FyY2guYywgcS52LgotICovCi1pbnQKLVN0YXJ0QXV0 b1ZhY1dvcmtlcih2b2lkKQotewotCXBpZF90CQl3b3JrZXJfcGlkOworCXNpZ2ptcF9idWYJ bG9jYWxfc2lnam1wX2J1ZjsKKwlPaWQJCQlkYmlkOwogCi0jaWZkZWYgRVhFQ19CQUNLRU5E Ci0Jc3dpdGNoICgod29ya2VyX3BpZCA9IGF2d29ya2VyX2ZvcmtleGVjKCkpKQotI2Vsc2UK LQlzd2l0Y2ggKCh3b3JrZXJfcGlkID0gZm9ya19wcm9jZXNzKCkpKQotI2VuZGlmCisJLyog UmVsZWFzZSBwb3N0bWFzdGVyJ3Mgd29ya2luZyBtZW1vcnkgY29udGV4dCAqLworCWlmIChQ b3N0bWFzdGVyQ29udGV4dCkKIAl7Ci0JCWNhc2UgLTE6Ci0JCQllcmVwb3J0KExPRywKLQkJ CQkJKGVycm1zZygiY291bGQgbm90IGZvcmsgYXV0b3ZhY3V1bSB3b3JrZXIgcHJvY2Vzczog JW0iKSkpOwotCQkJcmV0dXJuIDA7Ci0KLSNpZm5kZWYgRVhFQ19CQUNLRU5ECi0JCWNhc2Ug MDoKLQkJCS8qIGluIHBvc3RtYXN0ZXIgY2hpbGQgLi4uICovCi0JCQlJbml0UG9zdG1hc3Rl ckNoaWxkKCk7Ci0KLQkJCS8qIENsb3NlIHRoZSBwb3N0bWFzdGVyJ3Mgc29ja2V0cyAqLwot CQkJQ2xvc2VQb3N0bWFzdGVyUG9ydHMoZmFsc2UpOwotCi0JCQlBdXRvVmFjV29ya2VyTWFp bigwLCBOVUxMKTsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4g KGludCkgd29ya2VyX3BpZDsKKwkJTWVtb3J5Q29udGV4dERlbGV0ZShQb3N0bWFzdGVyQ29u dGV4dCk7CisJCVBvc3RtYXN0ZXJDb250ZXh0ID0gTlVMTDsKIAl9CiAKLQkvKiBzaG91bGRu J3QgZ2V0IGhlcmUgKi8KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEF1dG9WYWNXb3JrZXJN YWluCi0gKi8KLU5PTl9FWEVDX1NUQVRJQyB2b2lkCi1BdXRvVmFjV29ya2VyTWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQotewotCXNpZ2ptcF9idWYJbG9jYWxfc2lnam1wX2J1ZjsK LQlPaWQJCQlkYmlkOwotCiAJYW1fYXV0b3ZhY3V1bV93b3JrZXIgPSB0cnVlOwogCiAJTXlC YWNrZW5kVHlwZSA9IEJfQVVUT1ZBQ19XT1JLRVI7CkBAIC0xNTQ2LDYgKzE0MTIsOSBAQCBB dXRvVmFjV29ya2VyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCXBxc2lnbmFsKFNJ R0ZQRSwgRmxvYXRFeGNlcHRpb25IYW5kbGVyKTsKIAlwcXNpZ25hbChTSUdDSExELCBTSUdf REZMKTsKIAorCS8qIGF1dG92YWN1dW0gbmVlZHMgdGhpcyBzZXQgYmVmb3JlIGNhbGxpbmcg SW5pdFByb2Nlc3MgKi8KKwlhbV9hdXRvdmFjdXVtX3dvcmtlciA9IHRydWU7CisKIAkvKgog CSAqIENyZWF0ZSBhIHBlci1iYWNrZW5kIFBHUFJPQyBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9y eS4gV2UgbXVzdCBkbyB0aGlzCiAJICogYmVmb3JlIHdlIGNhbiB1c2UgTFdMb2Nrcy4KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5jIGIvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMKaW5kZXggNTM2ZDlhMmIzZTQuLjc2ZGUz OWRmMDAzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3Mu YworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYwpAQCAtNDYsNyAr NDYsNyBAQCBBdXhQcm9jVHlwZSBNeUF1eFByb2NUeXBlID0gTm90QW5BdXhQcm9jZXNzOwkv KiBkZWNsYXJlZCBpbiBtaXNjYWRtaW4uaCAqLwogCiAKIC8qCi0gKgkgQXV4aWxpYXJ5UHJv Y2Vzc01haW4KKyAqCSBBdXhpbGlhcnlQcm9jZXNzTWFpbiBYWFgKICAqCiAgKgkgVGhlIG1h aW4gZW50cnkgcG9pbnQgZm9yIGF1eGlsaWFyeSBwcm9jZXNzZXMsIHN1Y2ggYXMgdGhlIGJn d3JpdGVyLAogICoJIHdhbHdyaXRlciwgd2FscmVjZWl2ZXIsIGJvb3RzdHJhcHBlciBhbmQg dGhlIHNoYXJlZCBtZW1vcnkgY2hlY2tlciBjb2RlLgpAQCAtNTQsMzcgKzU0LDE3IEBAIEF1 eFByb2NUeXBlIE15QXV4UHJvY1R5cGUgPSBOb3RBbkF1eFByb2Nlc3M7CS8qIGRlY2xhcmVk IGluIG1pc2NhZG1pbi5oICovCiAgKgkgVGhpcyBjb2RlIGlzIGhlcmUganVzdCBiZWNhdXNl IG9mIGhpc3RvcmljYWwgcmVhc29ucy4KICAqLwogdm9pZAotQXV4aWxpYXJ5UHJvY2Vzc01h aW4oQXV4UHJvY1R5cGUgYXV4dHlwZSkKK0F1eGlsaWFyeVByb2Nlc3NJbml0KHZvaWQpCiB7 Ci0JQXNzZXJ0KElzVW5kZXJQb3N0bWFzdGVyKTsKLQotCU15QXV4UHJvY1R5cGUgPSBhdXh0 eXBlOwotCi0Jc3dpdGNoIChNeUF1eFByb2NUeXBlKQorCS8qIFJlbGVhc2UgcG9zdG1hc3Rl cidzIHdvcmtpbmcgbWVtb3J5IGNvbnRleHQgKi8KKwlpZiAoUG9zdG1hc3RlckNvbnRleHQp CiAJewotCQljYXNlIFN0YXJ0dXBQcm9jZXNzOgotCQkJTXlCYWNrZW5kVHlwZSA9IEJfU1RB UlRVUDsKLQkJCWJyZWFrOwotCQljYXNlIEFyY2hpdmVyUHJvY2VzczoKLQkJCU15QmFja2Vu ZFR5cGUgPSBCX0FSQ0hJVkVSOwotCQkJYnJlYWs7Ci0JCWNhc2UgQmdXcml0ZXJQcm9jZXNz OgotCQkJTXlCYWNrZW5kVHlwZSA9IEJfQkdfV1JJVEVSOwotCQkJYnJlYWs7Ci0JCWNhc2Ug Q2hlY2twb2ludGVyUHJvY2VzczoKLQkJCU15QmFja2VuZFR5cGUgPSBCX0NIRUNLUE9JTlRF UjsKLQkJCWJyZWFrOwotCQljYXNlIFdhbFdyaXRlclByb2Nlc3M6Ci0JCQlNeUJhY2tlbmRU eXBlID0gQl9XQUxfV1JJVEVSOwotCQkJYnJlYWs7Ci0JCWNhc2UgV2FsUmVjZWl2ZXJQcm9j ZXNzOgotCQkJTXlCYWNrZW5kVHlwZSA9IEJfV0FMX1JFQ0VJVkVSOwotCQkJYnJlYWs7Ci0J CWRlZmF1bHQ6Ci0JCQllbG9nKFBBTklDLCAidW5yZWNvZ25pemVkIHByb2Nlc3MgdHlwZTog JWQiLCAoaW50KSBNeUF1eFByb2NUeXBlKTsKLQkJCU15QmFja2VuZFR5cGUgPSBCX0lOVkFM SUQ7CisJCU1lbW9yeUNvbnRleHREZWxldGUoUG9zdG1hc3RlckNvbnRleHQpOworCQlQb3N0 bWFzdGVyQ29udGV4dCA9IE5VTEw7CiAJfQogCisJQXNzZXJ0KElzVW5kZXJQb3N0bWFzdGVy KTsKKwogCWluaXRfcHNfZGlzcGxheShOVUxMKTsKIAogCVNldFByb2Nlc3NpbmdNb2RlKEJv b3RzdHJhcFByb2Nlc3NpbmcpOwpAQCAtMTM0LDM3ICsxMTQsNiBAQCBBdXhpbGlhcnlQcm9j ZXNzTWFpbihBdXhQcm9jVHlwZSBhdXh0eXBlKQogCWJlZm9yZV9zaG1lbV9leGl0KFNodXRk b3duQXV4aWxpYXJ5UHJvY2VzcywgMCk7CiAKIAlTZXRQcm9jZXNzaW5nTW9kZShOb3JtYWxQ cm9jZXNzaW5nKTsKLQotCXN3aXRjaCAoTXlBdXhQcm9jVHlwZSkKLQl7Ci0JCWNhc2UgU3Rh cnR1cFByb2Nlc3M6Ci0JCQlTdGFydHVwUHJvY2Vzc01haW4oKTsKLQkJCXByb2NfZXhpdCgx KTsKLQotCQljYXNlIEFyY2hpdmVyUHJvY2VzczoKLQkJCVBnQXJjaGl2ZXJNYWluKCk7Ci0J CQlwcm9jX2V4aXQoMSk7Ci0KLQkJY2FzZSBCZ1dyaXRlclByb2Nlc3M6Ci0JCQlCYWNrZ3Jv dW5kV3JpdGVyTWFpbigpOwotCQkJcHJvY19leGl0KDEpOwotCi0JCWNhc2UgQ2hlY2twb2lu dGVyUHJvY2VzczoKLQkJCUNoZWNrcG9pbnRlck1haW4oKTsKLQkJCXByb2NfZXhpdCgxKTsK LQotCQljYXNlIFdhbFdyaXRlclByb2Nlc3M6Ci0JCQlXYWxXcml0ZXJNYWluKCk7Ci0JCQlw cm9jX2V4aXQoMSk7Ci0KLQkJY2FzZSBXYWxSZWNlaXZlclByb2Nlc3M6Ci0JCQlXYWxSZWNl aXZlck1haW4oKTsKLQkJCXByb2NfZXhpdCgxKTsKLQotCQlkZWZhdWx0OgotCQkJZWxvZyhQ QU5JQywgInVucmVjb2duaXplZCBwcm9jZXNzIHR5cGU6ICVkIiwgKGludCkgTXlBdXhQcm9j VHlwZSk7Ci0JCQlwcm9jX2V4aXQoMSk7Ci0JfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9iZ3dvcmtlci5jCmluZGV4IDRjNDQ2ZmZkMDg3Li45N2Q2Mjc3N2M4YSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwpAQCAtNzE3LDIzICs3MTcsMzAgQEAgYmd3b3JrZXJf ZGllKFNJR05BTF9BUkdTKQogfQogCiAvKgotICogU3RhcnQgYSBuZXcgYmFja2dyb3VuZCB3 b3JrZXIKLSAqCi0gKiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBiYWNrZ3Jv dW5kIHdvcmtlciwgdG8gYmUgY2FsbGVkIGZyb20KLSAqIHBvc3RtYXN0ZXIuCisgKiBUaGlz IGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBiYWNrZ3JvdW5kIHdvcmtlciBwcm9jZXNz LgogICovCiB2b2lkCi1TdGFydEJhY2tncm91bmRXb3JrZXIodm9pZCkKK0JhY2tncm91bmRX b3JrZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4p CiB7CiAJc2lnam1wX2J1Zglsb2NhbF9zaWdqbXBfYnVmOwotCUJhY2tncm91bmRXb3JrZXIg KndvcmtlciA9IE15Qmd3b3JrZXJFbnRyeTsKKwlCYWNrZ3JvdW5kV29ya2VyICp3b3JrZXI7 CiAJYmd3b3JrZXJfbWFpbl90eXBlIGVudHJ5cHQ7CiAKKwkvKiBSZWxlYXNlIHBvc3RtYXN0 ZXIncyB3b3JraW5nIG1lbW9yeSBjb250ZXh0ICovCisJaWYgKFBvc3RtYXN0ZXJDb250ZXh0 KQorCXsKKwkJTWVtb3J5Q29udGV4dERlbGV0ZShQb3N0bWFzdGVyQ29udGV4dCk7CisJCVBv c3RtYXN0ZXJDb250ZXh0ID0gTlVMTDsKKwl9CisKKwlBc3NlcnQoc3RhcnR1cF9kYXRhX2xl biA9PSBzaXplb2YoQmFja2dyb3VuZFdvcmtlcikpOworCXdvcmtlciA9IChCYWNrZ3JvdW5k V29ya2VyICopIHN0YXJ0dXBfZGF0YTsKIAlpZiAod29ya2VyID09IE5VTEwpCiAJCWVsb2co RkFUQUwsICJ1bmFibGUgdG8gZmluZCBiZ3dvcmtlciBlbnRyeSIpOwogCiAJSXNCYWNrZ3Jv dW5kV29ya2VyID0gdHJ1ZTsKIAorCU15Qmd3b3JrZXJFbnRyeSA9IHdvcmtlcjsKIAlNeUJh Y2tlbmRUeXBlID0gQl9CR19XT1JLRVI7CiAJaW5pdF9wc19kaXNwbGF5KHdvcmtlci0+Ymd3 X25hbWUpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd3JpdGVy LmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd3JpdGVyLmMKaW5kZXggY2FhZDY0MmVj OTMuLjBiNmZiZWMxZGJlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jn d3JpdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dyaXRlci5jCkBAIC0z Niw2ICszNiw3IEBACiAjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVy L2F1eHByb2Nlc3MuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd3JpdGVyLmgiCiAjaW5j bHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zl9p bnRlcm5hbHMuaCIKQEAgLTg4LDEzICs4OSwxOSBAQCBzdGF0aWMgWExvZ1JlY1B0ciBsYXN0 X3NuYXBzaG90X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogICogYmFzaWMgZXhlY3V0aW9u IGVudmlyb25tZW50LCBidXQgbm90IGVuYWJsZWQgc2lnbmFscyB5ZXQuCiAgKi8KIHZvaWQK LUJhY2tncm91bmRXcml0ZXJNYWluKHZvaWQpCitCYWNrZ3JvdW5kV3JpdGVyTWFpbihjaGFy ICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogewogCXNpZ2ptcF9i dWYJbG9jYWxfc2lnam1wX2J1ZjsKIAlNZW1vcnlDb250ZXh0IGJnd3JpdGVyX2NvbnRleHQ7 CiAJYm9vbAkJcHJldl9oaWJlcm5hdGU7CiAJV3JpdGViYWNrQ29udGV4dCB3Yl9jb250ZXh0 OwogCisJQXNzZXJ0KHN0YXJ0dXBfZGF0YV9sZW4gPT0gMCk7CisKKwlNeUF1eFByb2NUeXBl ID0gQmdXcml0ZXJQcm9jZXNzOworCU15QmFja2VuZFR5cGUgPSBCX0JHX1dSSVRFUjsKKwlB dXhpbGlhcnlQcm9jZXNzSW5pdCgpOworCiAJLyoKIAkgKiBQcm9wZXJseSBhY2NlcHQgb3Ig aWdub3JlIHNpZ25hbHMgdGhhdCBtaWdodCBiZSBzZW50IHRvIHVzLgogCSAqLwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYyBiL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMKaW5kZXggYWNlOTg5M2Q5NTcuLmU2MTcw NjZjMzg1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRl ci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMKQEAgLTQy LDYgKzQyLDcgQEAKICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgogI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIv YXV4cHJvY2Vzcy5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3cml0ZXIuaCIKICNpbmNs dWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3N5 bmNyZXAuaCIKQEAgLTE3OCwxMSArMTc5LDE3IEBAIHN0YXRpYyB2b2lkIFJlcUNoZWNrcG9p bnRIYW5kbGVyKFNJR05BTF9BUkdTKTsKICAqIGJhc2ljIGV4ZWN1dGlvbiBlbnZpcm9ubWVu dCwgYnV0IG5vdCBlbmFibGVkIHNpZ25hbHMgeWV0LgogICovCiB2b2lkCi1DaGVja3BvaW50 ZXJNYWluKHZvaWQpCitDaGVja3BvaW50ZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6 ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiB7CiAJc2lnam1wX2J1Zglsb2NhbF9zaWdqbXBfYnVm OwogCU1lbW9yeUNvbnRleHQgY2hlY2twb2ludGVyX2NvbnRleHQ7CiAKKwlBc3NlcnQoc3Rh cnR1cF9kYXRhX2xlbiA9PSAwKTsKKworCU15QXV4UHJvY1R5cGUgPSBDaGVja3BvaW50ZXJQ cm9jZXNzOworCU15QmFja2VuZFR5cGUgPSBCX0NIRUNLUE9JTlRFUjsKKwlBdXhpbGlhcnlQ cm9jZXNzSW5pdCgpOworCiAJQ2hlY2twb2ludGVyU2htZW0tPmNoZWNrcG9pbnRlcl9waWQg PSBNeVByb2NQaWQ7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9mb3JrX3Byb2Nlc3MuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvZm9ya19wcm9jZXNz LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmOWMyNzY1ZDY4Li4wMDAwMDAw MDAwMAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2ZvcmtfcHJvY2Vzcy5jCisrKyAv ZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBmb3JrX3Byb2Nlc3MuYwotICoJ IEEgc2ltcGxlIHdyYXBwZXIgb24gdG9wIG9mIGZvcmsoKS4gVGhpcyBkb2VzIG5vdCBoYW5k bGUgdGhlCi0gKgkgRVhFQ19CQUNLRU5EIGNhc2U7IGl0IG1pZ2h0IGJlIGV4dGVuZGVkIHRv IGRvIHNvLCBidXQgaXQgd291bGQgYmUKLSAqCSBjb25zaWRlcmFibHkgbW9yZSBjb21wbGV4 LgotICoKLSAqIENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAotICoKLSAqIElERU5USUZJQ0FUSU9OCi0gKgkgIHNyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvZm9ya19wcm9jZXNzLmMKLSAqLwotI2luY2x1ZGUgInBvc3RncmVz LmgiCi0KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1 ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy90aW1l Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5o IgotI2luY2x1ZGUgInBvc3RtYXN0ZXIvZm9ya19wcm9jZXNzLmgiCi0KLSNpZm5kZWYgV0lO MzIKLS8qCi0gKiBXcmFwcGVyIGZvciBmb3JrKCkuIFJldHVybiB2YWx1ZXMgYXJlIHRoZSBz YW1lIGFzIHRob3NlIGZvciBmb3JrKCk6Ci0gKiAtMSBpZiB0aGUgZm9yayBmYWlsZWQsIDAg aW4gdGhlIGNoaWxkIHByb2Nlc3MsIGFuZCB0aGUgUElEIG9mIHRoZQotICogY2hpbGQgaW4g dGhlIHBhcmVudCBwcm9jZXNzLiAgU2lnbmFscyBhcmUgYmxvY2tlZCB3aGlsZSBmb3JraW5n LCBzbwotICogdGhlIGNoaWxkIG11c3QgdW5ibG9jay4KLSAqLwotcGlkX3QKLWZvcmtfcHJv Y2Vzcyh2b2lkKQotewotCXBpZF90CQlyZXN1bHQ7Ci0JY29uc3QgY2hhciAqb29tZmlsZW5h bWU7Ci0Jc2lnc2V0X3QJc2F2ZV9tYXNrOwotCi0jaWZkZWYgTElOVVhfUFJPRklMRQotCXN0 cnVjdCBpdGltZXJ2YWwgcHJvZl9pdGltZXI7Ci0jZW5kaWYKLQotCS8qCi0JICogRmx1c2gg c3RkaW8gY2hhbm5lbHMganVzdCBiZWZvcmUgZm9yaywgdG8gYXZvaWQgZG91YmxlLW91dHB1 dCBwcm9ibGVtcy4KLQkgKi8KLQlmZmx1c2goTlVMTCk7Ci0KLSNpZmRlZiBMSU5VWF9QUk9G SUxFCi0KLQkvKgotCSAqIExpbnV4J3MgZm9yaygpIHJlc2V0cyB0aGUgcHJvZmlsaW5nIHRp bWVyIGluIHRoZSBjaGlsZCBwcm9jZXNzLiBJZiB3ZQotCSAqIHdhbnQgdG8gcHJvZmlsZSBj aGlsZCBwcm9jZXNzZXMgdGhlbiB3ZSBuZWVkIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlCi0J ICogdGltZXIgc2V0dGluZy4gIFRoaXMgaXMgYSB3YXN0ZSBvZiB0aW1lIGlmIG5vdCBwcm9m aWxpbmcsIGhvd2V2ZXIsIHNvCi0JICogb25seSBkbyBpdCBpZiBjb21tYW5kZWQgYnkgc3Bl Y2lmaWMgLURMSU5VWF9QUk9GSUxFIHN3aXRjaC4KLQkgKi8KLQlnZXRpdGltZXIoSVRJTUVS X1BST0YsICZwcm9mX2l0aW1lcik7Ci0jZW5kaWYKLQotCS8qCi0JICogV2Ugc3RhcnQgcG9z dG1hc3RlciBjaGlsZHJlbiB3aXRoIHNpZ25hbHMgYmxvY2tlZC4gIFRoaXMgYWxsb3dzIHRo ZW0gdG8KLQkgKiBpbnN0YWxsIHRoZWlyIG93biBoYW5kbGVycyBiZWZvcmUgdW5ibG9ja2lu ZywgdG8gYXZvaWQgcmFjZXMgd2hlcmUgdGhleQotCSAqIG1pZ2h0IHJ1biB0aGUgcG9zdG1h c3RlcidzIGhhbmRsZXIgYW5kIG1pc3MgYW4gaW1wb3J0YW50IGNvbnRyb2wKLQkgKiBzaWdu YWwuIFdpdGggbW9yZSBhbmFseXNpcyB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGJlIHJlbGF4 ZWQuCi0JICovCi0Jc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZCbG9ja1NpZywgJnNhdmVf bWFzayk7Ci0JcmVzdWx0ID0gZm9yaygpOwotCWlmIChyZXN1bHQgPT0gMCkKLQl7Ci0JCS8q IGZvcmsgc3VjY2VlZGVkLCBpbiBjaGlsZCAqLwotI2lmZGVmIExJTlVYX1BST0ZJTEUKLQkJ c2V0aXRpbWVyKElUSU1FUl9QUk9GLCAmcHJvZl9pdGltZXIsIE5VTEwpOwotI2VuZGlmCi0K LQkJLyoKLQkJICogQnkgZGVmYXVsdCwgTGludXggdGVuZHMgdG8ga2lsbCB0aGUgcG9zdG1h c3RlciBpbiBvdXQtb2YtbWVtb3J5Ci0JCSAqIHNpdHVhdGlvbnMsIGJlY2F1c2UgaXQgYmxh bWVzIHRoZSBwb3N0bWFzdGVyIGZvciB0aGUgc3VtIG9mIGNoaWxkCi0JCSAqIHByb2Nlc3Mg c2l6ZXMgKmluY2x1ZGluZyBzaGFyZWQgbWVtb3J5Ki4gIChUaGlzIGlzIHVuYmVsaWV2YWJs eQotCQkgKiBzdHVwaWQsIGJ1dCB0aGUga2VybmVsIGhhY2tlcnMgc2VlbSB1bmludGVyZXN0 ZWQgaW4gaW1wcm92aW5nIGl0LikKLQkJICogVGhlcmVmb3JlIGl0J3Mgb2Z0ZW4gYSBnb29k IGlkZWEgdG8gcHJvdGVjdCB0aGUgcG9zdG1hc3RlciBieQotCQkgKiBzZXR0aW5nIGl0cyBP T00gc2NvcmUgYWRqdXN0bWVudCBuZWdhdGl2ZSAod2hpY2ggaGFzIHRvIGJlIGRvbmUgaW4K LQkJICogYSByb290LW93bmVkIHN0YXJ0dXAgc2NyaXB0KS4gIFNpbmNlIHRoZSBhZGp1c3Rt ZW50IGlzIGluaGVyaXRlZCBieQotCQkgKiBjaGlsZCBwcm9jZXNzZXMsIHRoaXMgd291bGQg b3JkaW5hcmlseSBtZWFuIHRoYXQgYWxsIHRoZQotCQkgKiBwb3N0bWFzdGVyJ3MgY2hpbGRy ZW4gYXJlIGVxdWFsbHkgcHJvdGVjdGVkIGFnYWluc3QgT09NIGtpbGwsIHdoaWNoCi0JCSAq IGlzIG5vdCBzdWNoIGEgZ29vZCBpZGVhLiAgU28gd2UgcHJvdmlkZSB0aGlzIGNvZGUgdG8g YWxsb3cgdGhlCi0JCSAqIGNoaWxkcmVuIHRvIGNoYW5nZSB0aGVpciBPT00gc2NvcmUgYWRq dXN0bWVudHMgYWdhaW4uICBCb3RoIHRoZQotCQkgKiBmaWxlIG5hbWUgdG8gd3JpdGUgdG8g YW5kIHRoZSB2YWx1ZSB0byB3cml0ZSBhcmUgY29udHJvbGxlZCBieQotCQkgKiBlbnZpcm9u bWVudCB2YXJpYWJsZXMsIHdoaWNoIGNhbiBiZSBzZXQgYnkgdGhlIHNhbWUgc3RhcnR1cCBz Y3JpcHQKLQkJICogdGhhdCBkaWQgdGhlIG9yaWdpbmFsIGFkanVzdG1lbnQuCi0JCSAqLwot CQlvb21maWxlbmFtZSA9IGdldGVudigiUEdfT09NX0FESlVTVF9GSUxFIik7Ci0KLQkJaWYg KG9vbWZpbGVuYW1lICE9IE5VTEwpCi0JCXsKLQkJCS8qCi0JCQkgKiBVc2Ugb3BlbigpIG5v dCBzdGRpbywgdG8gZW5zdXJlIHdlIGNvbnRyb2wgdGhlIG9wZW4gZmxhZ3MuIFNvbWUKLQkJ CSAqIExpbnV4IHNlY3VyaXR5IGVudmlyb25tZW50cyByZWplY3QgYW55dGhpbmcgYnV0IE9f V1JPTkxZLgotCQkJICovCi0JCQlpbnQJCQlmZCA9IG9wZW4ob29tZmlsZW5hbWUsIE9fV1JP TkxZLCAwKTsKLQotCQkJLyogV2UgaWdub3JlIGFsbCBlcnJvcnMgKi8KLQkJCWlmIChmZCA+ PSAwKQotCQkJewotCQkJCWNvbnN0IGNoYXIgKm9vbXZhbHVlID0gZ2V0ZW52KCJQR19PT01f QURKVVNUX1ZBTFVFIik7Ci0JCQkJaW50CQkJcmM7Ci0KLQkJCQlpZiAob29tdmFsdWUgPT0g TlVMTCkJLyogc3VwcGx5IGEgdXNlZnVsIGRlZmF1bHQgKi8KLQkJCQkJb29tdmFsdWUgPSAi MCI7Ci0KLQkJCQlyYyA9IHdyaXRlKGZkLCBvb212YWx1ZSwgc3RybGVuKG9vbXZhbHVlKSk7 Ci0JCQkJKHZvaWQpIHJjOwotCQkJCWNsb3NlKGZkKTsKLQkJCX0KLQkJfQotCi0JCS8qIGRv IHBvc3QtZm9yayBpbml0aWFsaXphdGlvbiBmb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9u ICovCi0JCXBnX3N0cm9uZ19yYW5kb21faW5pdCgpOwotCX0KLQllbHNlCi0JewotCQkvKiBp biBwYXJlbnQsIHJlc3RvcmUgc2lnbmFsIG1hc2sgKi8KLQkJc2lncHJvY21hc2soU0lHX1NF VE1BU0ssICZzYXZlX21hc2ssIE5VTEwpOwotCX0KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0K LSNlbmRpZgkJCQkJCQkvKiAhIFdJTjMyICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2xh dW5jaF9iYWNrZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmIxZmM3ODNhNTc2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9sYXVuY2hfYmFja2VuZC5jCkBAIC0wLDAgKzEsMTMxNCBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogbGF1bmNoX2JhY2tlbmQuYworICoJICBGdW5jdGlvbnMgZm9yIGxh dW5jaGluZyBiYWNrZW5kcyBhbmQgb3RoZXIgcG9zdG1hc3RlciBjaGlsZAorICoJICBwcm9j ZXNzZXMuCisgKgorICogLSBleHBsYWluIEVYRUNfQkFDS0VORCBhbmQgV2luZG93cworICog LSBwb3N0bWFzdGVyIGNhbGxzIHBvc3RtYXN0ZXJfY2hpbGRfbGF1bmNoKCkKKyAqIC0gdGhl IGNoaWxkIHByb2Nlc3Mgd2lsbCBiZSByZXN0b3JlZCB0byByb3VnaGx5IHRoZSBzYW1lIHN0 YXRlLCB3aGV0aGVyCisgKiAgIEVYRUNfQkFDS0VORCBpcyB1c2VkIG9yIG5vdDogaXQgd2ls bCBiZSBhdHRhY2hlZCB0byBzaGFyZWQgbWVtb3J5LAorICogICBhbmQgZmRzIGFuZCBvdGhl ciByZXNvdXJjZXMgdGhhdCB3ZSd2ZSBpbmhlcml0ZWQgZnJvbSBwb3N0bWFzdGVyIHRoYXQg YXJlIG5vdCBuZWVkZWQKKyAqICAgaW4gYSBjaGlsZCBwcm9jZXNzIGhhdmUgYmVlbiBjbG9z ZWQuCisgKgorICoJICBXaGVuIGEgcmVxdWVzdCBtZXNzYWdlIGlzIHJlY2VpdmVkLCB3ZSBu b3cgZm9yaygpIGltbWVkaWF0ZWx5LgorICoJICBUaGUgY2hpbGQgcHJvY2VzcyBwZXJmb3Jt cyBhdXRoZW50aWNhdGlvbiBvZiB0aGUgcmVxdWVzdCwgYW5kCisgKgkgIHRoZW4gYmVjb21l cyBhIGJhY2tlbmQgaWYgc3VjY2Vzc2Z1bC4gIFRoaXMgYWxsb3dzIHRoZSBhdXRoIGNvZGUK KyAqCSAgdG8gYmUgd3JpdHRlbiBpbiBhIHNpbXBsZSBzaW5nbGUtdGhyZWFkZWQgc3R5bGUg KGFzIG9wcG9zZWQgdG8gdGhlCisgKgkgIGNydWZ0eSAicG9vciBtYW4ncyBtdWx0aXRhc2tp bmciIGNvZGUgdGhhdCB1c2VkIHRvIGJlIG5lZWRlZCkuCisgKgkgIE1vcmUgaW1wb3J0YW50 bHksIGl0IGVuc3VyZXMgdGhhdCBibG9ja2FnZXMgaW4gbm9uLW11bHRpdGhyZWFkZWQKKyAq CSAgbGlicmFyaWVzIGxpa2UgU1NMIG9yIFBBTSBjYW5ub3QgY2F1c2UgZGVuaWFsIG9mIHNl cnZpY2UgdG8gb3RoZXIKKyAqCSAgY2xpZW50cy4KKyAqCisgKgorICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVu aXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJ ICBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1 ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHRpbWUuaD4K KyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVk ZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3Bh cmFtLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2lu Y2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKKyNp bmNsdWRlICJsaWJwcS9saWJwcS1iZS5oIgorI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgi CisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvcXVlcnlqdW1ibGUu aCIKKyNpbmNsdWRlICJwb3J0LmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVt LmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgiCisjaW5jbHVkZSAicG9z dG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2Jn d3JpdGVyLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKKyNpbmNsdWRl ICJwb3N0bWFzdGVyL3BnYXJjaC5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1hc3Rl ci5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvc3RhcnR1cC5oIgorI2luY2x1ZGUgInBvc3Rt YXN0ZXIvc3lzbG9nZ2VyLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci93YWx3cml0ZXIuaCIK KyNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgorI2luY2x1ZGUgInN0b3Jh Z2UvZmQuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgorI2luY2x1ZGUgInN0b3JhZ2Uv cGdfc2htZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Btc2lnbmFsLmgiCisjaW5jbHVkZSAi c3RvcmFnZS9wcm9jLmgiCisjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgorI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZGF0ZXRpbWUuaCIKKyNpbmNs dWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1 ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgorI2luY2x1ZGUgInV0aWxzL3RpbWVvdXQuaCIKKyNp bmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKworI2lmZGVmIEVYRUNfQkFDS0VORAorI2lu Y2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgorI2VuZGlmCisKKworLyogVHlwZSBmb3IgYSBzb2Nr ZXQgdGhhdCBjYW4gYmUgaW5oZXJpdGVkIHRvIGEgY2xpZW50IHByb2Nlc3MgKi8KKyNpZmRl ZiBXSU4zMgordHlwZWRlZiBzdHJ1Y3QKK3sKKwlTT0NLRVQJCW9yaWdzb2NrZXQ7CQkvKiBP cmlnaW5hbCBzb2NrZXQgdmFsdWUsIG9yIFBHSU5WQUxJRF9TT0NLRVQKKwkJCQkJCQkJICog aWYgbm90IGEgc29ja2V0ICovCisJV1NBUFJPVE9DT0xfSU5GTyB3c2FpbmZvOworfSBJbmhl cml0YWJsZVNvY2tldDsKKyNlbHNlCit0eXBlZGVmIGludCBJbmhlcml0YWJsZVNvY2tldDsK KyNlbmRpZgorCisjaWZkZWYgRVhFQ19CQUNLRU5ECisKKy8qCisgKiBTdHJ1Y3R1cmUgY29u dGFpbnMgYWxsIGdsb2JhbCB2YXJpYWJsZXMgcGFzc2VkIHRvIGV4ZWM6ZWQgYmFja2VuZHMK KyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwljaGFyCQlEYXRhRGlyW01BWFBHUEFUSF07CisJ aW50MzIJCU15Q2FuY2VsS2V5OworCWludAkJCU15UE1DaGlsZFNsb3Q7CisjaWZuZGVmIFdJ TjMyCisJdW5zaWduZWQgbG9uZyBVc2VkU2htZW1TZWdJRDsKKyNlbHNlCisJdm9pZAkgICAq U2htZW1Qcm90ZWN0aXZlUmVnaW9uOworCUhBTkRMRQkJVXNlZFNobWVtU2VnSUQ7CisjZW5k aWYKKwl2b2lkCSAgICpVc2VkU2htZW1TZWdBZGRyOworCXNsb2NrX3QgICAgKlNobWVtTG9j azsKKwlWYXJpYWJsZUNhY2hlIFNobWVtVmFyaWFibGVDYWNoZTsKKwlzdHJ1Y3QgYmtlbmQg KlNobWVtQmFja2VuZEFycmF5OworI2lmbmRlZiBIQVZFX1NQSU5MT0NLUworCVBHU2VtYXBo b3JlICpTcGlubG9ja1NlbWFBcnJheTsKKyNlbmRpZgorCWludAkJCU5hbWVkTFdMb2NrVHJh bmNoZVJlcXVlc3RzOworCU5hbWVkTFdMb2NrVHJhbmNoZSAqTmFtZWRMV0xvY2tUcmFuY2hl QXJyYXk7CisJTFdMb2NrUGFkZGVkICpNYWluTFdMb2NrQXJyYXk7CisJc2xvY2tfdCAgICAq UHJvY1N0cnVjdExvY2s7CisJUFJPQ19IRFIgICAqUHJvY0dsb2JhbDsKKwlQR1BST0MJICAg KkF1eGlsaWFyeVByb2NzOworCVBHUFJPQwkgICAqUHJlcGFyZWRYYWN0UHJvY3M7CisJUE1T aWduYWxEYXRhICpQTVNpZ25hbFN0YXRlOworCXBpZF90CQlQb3N0bWFzdGVyUGlkOworCVRp bWVzdGFtcFR6IFBnU3RhcnRUaW1lOworCVRpbWVzdGFtcFR6IFBnUmVsb2FkVGltZTsKKwlw Z190aW1lX3QJZmlyc3Rfc3lzbG9nZ2VyX2ZpbGVfdGltZTsKKwlib29sCQlyZWRpcmVjdGlv bl9kb25lOworCWJvb2wJCUlzQmluYXJ5VXBncmFkZTsKKwlib29sCQlxdWVyeV9pZF9lbmFi bGVkOworCWludAkJCW1heF9zYWZlX2ZkczsKKwlpbnQJCQlNYXhCYWNrZW5kczsKKyNpZmRl ZiBXSU4zMgorCUhBTkRMRQkJUG9zdG1hc3RlckhhbmRsZTsKKwlIQU5ETEUJCWluaXRpYWxf c2lnbmFsX3BpcGU7CisJSEFORExFCQlzeXNsb2dQaXBlWzJdOworI2Vsc2UKKwlpbnQJCQlw b3N0bWFzdGVyX2FsaXZlX2Zkc1syXTsKKwlpbnQJCQlzeXNsb2dQaXBlWzJdOworI2VuZGlm CisJY2hhcgkJbXlfZXhlY19wYXRoW01BWFBHUEFUSF07CisJY2hhcgkJcGtnbGliX3BhdGhb TUFYUEdQQVRIXTsKKworCS8qCisJICogVGhlc2UgYXJlIG9ubHkgdXNlZCBieSBiYWNrZW5k IHByb2Nlc3NlcywgYnV0IGl0J3MgaGVyZSBiZWNhdXNlIHBhc3NpbmcKKwkgKiBhIHNvY2tl dCBuZWVkcyBzb21lIHNwZWNpYWwgaGFuZGxpbmcgb24gV2luZG93cy4gJ2NsaWVudF9zb2Nr JyBpcyBhbgorCSAqIGV4cGxpY2l0IGFyZ3VtZW50IHRvIHBvc3RtYXN0ZXJfY2hpbGRfbGF1 bmNoLCBidXQgaXMgc3RvcmVkIGluCisJICogTXlDbGllbnRTb2NrZXQgaW4gdGhlIGNoaWxk IHByb2Nlc3MuCisJICovCisJQ2xpZW50U29ja2V0IGNsaWVudF9zb2NrOworCUluaGVyaXRh YmxlU29ja2V0IGluaF9zb2NrOworfSBCYWNrZW5kUGFyYW1ldGVyczsKKworc3RhdGljIHZv aWQgcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwgY2hhciAqKnN0YXJ0dXBfZGF0 YSwgc2l6ZV90ICpzdGFydHVwX2RhdGFfbGVuKTsKK3N0YXRpYyB2b2lkIHJlc3RvcmVfYmFj a2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtKTsKKworI2lmbmRlZiBX SU4zMgorc3RhdGljIGJvb2wgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1l dGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spOworI2Vsc2UKK3N0YXRp YyBib29sIHNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFt LCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLAorCQkJCQkJCQkgICBIQU5ETEUgY2hpbGRQ cm9jZXNzLCBwaWRfdCBjaGlsZFBpZCk7CisjZW5kaWYKKyNlbmRpZgkJCQkJCQkvKiBFWEVD X0JBQ0tFTkQgKi8KKworc3RhdGljIHZvaWQgSW5pdFBvc3RtYXN0ZXJDaGlsZChib29sIGFt X3N5c2xvZ2dlcik7CisKKworI2lmZGVmIEVYRUNfQkFDS0VORAorc3RhdGljIHBpZF90IGlu dGVybmFsX2ZvcmtleGVjKGNvbnN0IGNoYXIgKmVudHJ5X25hbWUsIGNoYXIgKnN0YXJ0dXBf ZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4sIENsaWVudFNvY2tldCAqY2xpZW50X3Nv Y2spOworI2VuZGlmCQkJCQkJCS8qIEVYRUNfQkFDS0VORCAqLworCisjaWZuZGVmIFdJTjMy CitzdGF0aWMgcGlkX3QgZm9ya19wcm9jZXNzKHZvaWQpOworI2VuZGlmCisKK3R5cGVkZWYg c3RydWN0IFBNQ2hpbGRFbnRyeQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJQ2hpbGRFbnRy eVBvaW50IGVudHJ5X2ZuOworCWJvb2wJCXNobWVtX2F0dGFjaDsKK30JCQlQTUNoaWxkRW50 cnk7CisKK2NvbnN0CQlQTUNoaWxkRW50cnkgZW50cnlfa2luZHNbXSA9IHsKKwl7ImJhY2tl bmQiLCBCYWNrZW5kTWFpbiwgdHJ1ZX0sCisKKwl7ImF1dG92YWN1dW0gbGF1bmNoZXIiLCBB dXRvVmFjTGF1bmNoZXJNYWluLCB0cnVlfSwKKwl7ImF1dG92YWN1dW0gd29ya2VyIiwgQXV0 b1ZhY1dvcmtlck1haW4sIHRydWV9LAorCXsiYmd3b3JrZXIiLCBCYWNrZ3JvdW5kV29ya2Vy TWFpbiwgdHJ1ZX0sCisJeyJzeXNsb2dnZXIiLCBTeXNMb2dnZXJNYWluLCBmYWxzZX0sCisK Kwl7InN0YXJ0dXAiLCBTdGFydHVwUHJvY2Vzc01haW4sIHRydWV9LAorCXsiYmd3cml0ZXIi LCBCYWNrZ3JvdW5kV3JpdGVyTWFpbiwgdHJ1ZX0sCisJeyJhcmNoaXZlciIsIFBnQXJjaGl2 ZXJNYWluLCB0cnVlfSwKKwl7ImNoZWNrcG9pbnRlciIsIENoZWNrcG9pbnRlck1haW4sIHRy dWV9LAorCXsid2FsX3dyaXRlciIsIFdhbFdyaXRlck1haW4sIHRydWV9LAorCXsid2FsX3Jl Y2VpdmVyIiwgV2FsUmVjZWl2ZXJNYWluLCB0cnVlfSwKK307CisKK2NvbnN0IGNoYXIgKgor UG9zdG1hc3RlckNoaWxkTmFtZShQb3N0bWFzdGVyQ2hpbGRUeXBlIGNoaWxkX3R5cGUpCit7 CisJQXNzZXJ0KGNoaWxkX3R5cGUgPj0gMCAmJiBjaGlsZF90eXBlIDwgbGVuZ3Rob2YoZW50 cnlfa2luZHMpKTsKKwlyZXR1cm4gZW50cnlfa2luZHNbY2hpbGRfdHlwZV0ubmFtZTsKK30K KworLyoKKyAqIFN0YXJ0IGEgbmV3IHBvc3RtYXN0ZXIgY2hpbGQgcHJvY2Vzcy4KKyAqCisg KiBUaGUgc3RhcnR1cF9kYXRhIG11c3QgYmUgYSBjb250aWdvdXMgYmxvY2sgdGhhdCBpcyBw YXNzZWQgdG8gdGhlIGNoaWxkCisgKiBwcm9jZXNzLgorICoKKyAqIChJbiBmb3JrIG1vZGUs IGl0J3MgaW5oZXJpdGVkIGRpcmVjdGx5IGJ5IHRoZSBjaGlsZCBwcm9jZXNzLiBJbiBmb3Jr K2V4ZWMgbW9kZSwKKyAqIGl0IGlzIHdyaXR0ZW4gdG8gYSBmaWxlIGFuZCByZWFkIGJhY2sg aW4gdGhlIGNoaWxkIHByb2Nlc3MpCisgKi8KK3BpZF90Citwb3N0bWFzdGVyX2NoaWxkX2xh dW5jaChQb3N0bWFzdGVyQ2hpbGRUeXBlIGNoaWxkX3R5cGUsIGNoYXIgKnN0YXJ0dXBfZGF0 YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2sp Cit7CisJcGlkX3QJCXBpZDsKKworCUFzc2VydChjaGlsZF90eXBlID49IDAgJiYgY2hpbGRf dHlwZSA8IGxlbmd0aG9mKGVudHJ5X2tpbmRzKSk7CisJQXNzZXJ0KElzUG9zdG1hc3RlckVu dmlyb25tZW50ICYmICFJc1VuZGVyUG9zdG1hc3Rlcik7CisKKyNpZmRlZiBFWEVDX0JBQ0tF TkQKKwlwaWQgPSBpbnRlcm5hbF9mb3JrZXhlYyhlbnRyeV9raW5kc1tjaGlsZF90eXBlXS5u YW1lLCBzdGFydHVwX2RhdGEsIHN0YXJ0dXBfZGF0YV9sZW4sIGNsaWVudF9zb2NrKTsKKwkv KiB0aGUgY2hpbGQgcHJvY2VzcyB3aWxsIGFycml2ZSBpbiBTdWJQb3N0bWFzdGVyTWFpbiAq LworI2Vsc2UJCQkJCQkJLyogIUVYRUNfQkFDS0VORCAqLworCXBpZCA9IGZvcmtfcHJvY2Vz cygpOworCWlmIChwaWQgPT0gMCkJCQkJLyogY2hpbGQgKi8KKwl7CisJCS8qIERldGFuZ2xl IGZyb20gcG9zdG1hc3RlciAqLworCQlJbml0UG9zdG1hc3RlckNoaWxkKGNoaWxkX3R5cGUg PT0gUE1DX1NZU0xPR0dFUik7CisKKwkJLyoKKwkJICogQmVmb3JlIGJsb3dpbmcgYXdheSBQ b3N0bWFzdGVyQ29udGV4dCwgc2F2ZSB0aGUgc3RhcnR1cCBkYXRhCisJCSAqLworCQlNZW1v cnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CisJCWlmIChzdGFydHVwX2Rh dGEgIT0gTlVMTCkKKwkJeworCQkJY2hhcgkgICAqY3AgPSBwYWxsb2Moc3RhcnR1cF9kYXRh X2xlbik7CisKKwkJCW1lbWNweShjcCwgc3RhcnR1cF9kYXRhLCBzdGFydHVwX2RhdGFfbGVu KTsKKwkJCXN0YXJ0dXBfZGF0YSA9IGNwOworCQl9CisKKwkJaWYgKGNsaWVudF9zb2NrKQor CQl7CisJCQlNeUNsaWVudFNvY2tldCA9IHBhbGxvYyhzaXplb2YoQ2xpZW50U29ja2V0KSk7 CisJCQltZW1jcHkoTXlDbGllbnRTb2NrZXQsIGNsaWVudF9zb2NrLCBzaXplb2YoQ2xpZW50 U29ja2V0KSk7CisJCX0KKworCQllbnRyeV9raW5kc1tjaGlsZF90eXBlXS5lbnRyeV9mbihz dGFydHVwX2RhdGEsIHN0YXJ0dXBfZGF0YV9sZW4pOworCQlBc3NlcnQoZmFsc2UpOworCX0K KyNlbmRpZgkJCQkJCQkvKiBFWEVDX0JBQ0tFTkQgKi8KKwlyZXR1cm4gcGlkOworfQorCisj aWZuZGVmIFdJTjMyCisvKgorICogV3JhcHBlciBmb3IgZm9yaygpLiBSZXR1cm4gdmFsdWVz IGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBmb3IgZm9yaygpOgorICogLTEgaWYgdGhlIGZvcmsg ZmFpbGVkLCAwIGluIHRoZSBjaGlsZCBwcm9jZXNzLCBhbmQgdGhlIFBJRCBvZiB0aGUKKyAq IGNoaWxkIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4gIFNpZ25hbHMgYXJlIGJsb2NrZWQgd2hp bGUgZm9ya2luZywgc28KKyAqIHRoZSBjaGlsZCBtdXN0IHVuYmxvY2suCisgKgorICogWFhY IGZyb20gZm9ya19wcm9jZXNzLmMgZmlsZSBoZWFkZXI6CisgKgkgQSBzaW1wbGUgd3JhcHBl ciBvbiB0b3Agb2YgZm9yaygpLiBUaGlzIGRvZXMgbm90IGhhbmRsZSB0aGUKKyAqCSBFWEVD X0JBQ0tFTkQgY2FzZTsgaXQgbWlnaHQgYmUgZXh0ZW5kZWQgdG8gZG8gc28sIGJ1dCBpdCB3 b3VsZCBiZQorICoJIGNvbnNpZGVyYWJseSBtb3JlIGNvbXBsZXguCisgKi8KK3N0YXRpYyBw aWRfdAorZm9ya19wcm9jZXNzKHZvaWQpCit7CisJcGlkX3QJCXJlc3VsdDsKKwljb25zdCBj aGFyICpvb21maWxlbmFtZTsKKwlzaWdzZXRfdAlzYXZlX21hc2s7CisKKyNpZmRlZiBMSU5V WF9QUk9GSUxFCisJc3RydWN0IGl0aW1lcnZhbCBwcm9mX2l0aW1lcjsKKyNlbmRpZgorCisJ LyoKKwkgKiBGbHVzaCBzdGRpbyBjaGFubmVscyBqdXN0IGJlZm9yZSBmb3JrLCB0byBhdm9p ZCBkb3VibGUtb3V0cHV0IHByb2JsZW1zLgorCSAqLworCWZmbHVzaChOVUxMKTsKKworI2lm ZGVmIExJTlVYX1BST0ZJTEUKKworCS8qCisJICogTGludXgncyBmb3JrKCkgcmVzZXRzIHRo ZSBwcm9maWxpbmcgdGltZXIgaW4gdGhlIGNoaWxkIHByb2Nlc3MuIElmIHdlCisJICogd2Fu dCB0byBwcm9maWxlIGNoaWxkIHByb2Nlc3NlcyB0aGVuIHdlIG5lZWQgdG8gc2F2ZSBhbmQg cmVzdG9yZSB0aGUKKwkgKiB0aW1lciBzZXR0aW5nLiAgVGhpcyBpcyBhIHdhc3RlIG9mIHRp bWUgaWYgbm90IHByb2ZpbGluZywgaG93ZXZlciwgc28KKwkgKiBvbmx5IGRvIGl0IGlmIGNv bW1hbmRlZCBieSBzcGVjaWZpYyAtRExJTlVYX1BST0ZJTEUgc3dpdGNoLgorCSAqLworCWdl dGl0aW1lcihJVElNRVJfUFJPRiwgJnByb2ZfaXRpbWVyKTsKKyNlbmRpZgorCisJLyoKKwkg KiBXZSBzdGFydCBwb3N0bWFzdGVyIGNoaWxkcmVuIHdpdGggc2lnbmFscyBibG9ja2VkLiAg VGhpcyBhbGxvd3MgdGhlbSB0bworCSAqIGluc3RhbGwgdGhlaXIgb3duIGhhbmRsZXJzIGJl Zm9yZSB1bmJsb2NraW5nLCB0byBhdm9pZCByYWNlcyB3aGVyZSB0aGV5CisJICogbWlnaHQg cnVuIHRoZSBwb3N0bWFzdGVyJ3MgaGFuZGxlciBhbmQgbWlzcyBhbiBpbXBvcnRhbnQgY29u dHJvbAorCSAqIHNpZ25hbC4gV2l0aCBtb3JlIGFuYWx5c2lzIHRoaXMgY291bGQgcG90ZW50 aWFsbHkgYmUgcmVsYXhlZC4KKwkgKi8KKwlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJkJs b2NrU2lnLCAmc2F2ZV9tYXNrKTsKKwlyZXN1bHQgPSBmb3JrKCk7CisJaWYgKHJlc3VsdCA9 PSAwKQorCXsKKwkJLyogZm9yayBzdWNjZWVkZWQsIGluIGNoaWxkICovCisjaWZkZWYgTElO VVhfUFJPRklMRQorCQlzZXRpdGltZXIoSVRJTUVSX1BST0YsICZwcm9mX2l0aW1lciwgTlVM TCk7CisjZW5kaWYKKworCQkvKgorCQkgKiBCeSBkZWZhdWx0LCBMaW51eCB0ZW5kcyB0byBr aWxsIHRoZSBwb3N0bWFzdGVyIGluIG91dC1vZi1tZW1vcnkKKwkJICogc2l0dWF0aW9ucywg YmVjYXVzZSBpdCBibGFtZXMgdGhlIHBvc3RtYXN0ZXIgZm9yIHRoZSBzdW0gb2YgY2hpbGQK KwkJICogcHJvY2VzcyBzaXplcyAqaW5jbHVkaW5nIHNoYXJlZCBtZW1vcnkqLiAgKFRoaXMg aXMgdW5iZWxpZXZhYmx5CisJCSAqIHN0dXBpZCwgYnV0IHRoZSBrZXJuZWwgaGFja2VycyBz ZWVtIHVuaW50ZXJlc3RlZCBpbiBpbXByb3ZpbmcgaXQuKQorCQkgKiBUaGVyZWZvcmUgaXQn cyBvZnRlbiBhIGdvb2QgaWRlYSB0byBwcm90ZWN0IHRoZSBwb3N0bWFzdGVyIGJ5CisJCSAq IHNldHRpbmcgaXRzIE9PTSBzY29yZSBhZGp1c3RtZW50IG5lZ2F0aXZlICh3aGljaCBoYXMg dG8gYmUgZG9uZSBpbgorCQkgKiBhIHJvb3Qtb3duZWQgc3RhcnR1cCBzY3JpcHQpLiAgU2lu Y2UgdGhlIGFkanVzdG1lbnQgaXMgaW5oZXJpdGVkIGJ5CisJCSAqIGNoaWxkIHByb2Nlc3Nl cywgdGhpcyB3b3VsZCBvcmRpbmFyaWx5IG1lYW4gdGhhdCBhbGwgdGhlCisJCSAqIHBvc3Rt YXN0ZXIncyBjaGlsZHJlbiBhcmUgZXF1YWxseSBwcm90ZWN0ZWQgYWdhaW5zdCBPT00ga2ls bCwgd2hpY2gKKwkJICogaXMgbm90IHN1Y2ggYSBnb29kIGlkZWEuICBTbyB3ZSBwcm92aWRl IHRoaXMgY29kZSB0byBhbGxvdyB0aGUKKwkJICogY2hpbGRyZW4gdG8gY2hhbmdlIHRoZWly IE9PTSBzY29yZSBhZGp1c3RtZW50cyBhZ2Fpbi4gIEJvdGggdGhlCisJCSAqIGZpbGUgbmFt ZSB0byB3cml0ZSB0byBhbmQgdGhlIHZhbHVlIHRvIHdyaXRlIGFyZSBjb250cm9sbGVkIGJ5 CisJCSAqIGVudmlyb25tZW50IHZhcmlhYmxlcywgd2hpY2ggY2FuIGJlIHNldCBieSB0aGUg c2FtZSBzdGFydHVwIHNjcmlwdAorCQkgKiB0aGF0IGRpZCB0aGUgb3JpZ2luYWwgYWRqdXN0 bWVudC4KKwkJICovCisJCW9vbWZpbGVuYW1lID0gZ2V0ZW52KCJQR19PT01fQURKVVNUX0ZJ TEUiKTsKKworCQlpZiAob29tZmlsZW5hbWUgIT0gTlVMTCkKKwkJeworCQkJLyoKKwkJCSAq IFVzZSBvcGVuKCkgbm90IHN0ZGlvLCB0byBlbnN1cmUgd2UgY29udHJvbCB0aGUgb3BlbiBm bGFncy4gU29tZQorCQkJICogTGludXggc2VjdXJpdHkgZW52aXJvbm1lbnRzIHJlamVjdCBh bnl0aGluZyBidXQgT19XUk9OTFkuCisJCQkgKi8KKwkJCWludAkJCWZkID0gb3Blbihvb21m aWxlbmFtZSwgT19XUk9OTFksIDApOworCisJCQkvKiBXZSBpZ25vcmUgYWxsIGVycm9ycyAq LworCQkJaWYgKGZkID49IDApCisJCQl7CisJCQkJY29uc3QgY2hhciAqb29tdmFsdWUgPSBn ZXRlbnYoIlBHX09PTV9BREpVU1RfVkFMVUUiKTsKKwkJCQlpbnQJCQlyYzsKKworCQkJCWlm IChvb212YWx1ZSA9PSBOVUxMKQkvKiBzdXBwbHkgYSB1c2VmdWwgZGVmYXVsdCAqLworCQkJ CQlvb212YWx1ZSA9ICIwIjsKKworCQkJCXJjID0gd3JpdGUoZmQsIG9vbXZhbHVlLCBzdHJs ZW4ob29tdmFsdWUpKTsKKwkJCQkodm9pZCkgcmM7CisJCQkJY2xvc2UoZmQpOworCQkJfQor CQl9CisKKwkJLyogZG8gcG9zdC1mb3JrIGluaXRpYWxpemF0aW9uIGZvciByYW5kb20gbnVt YmVyIGdlbmVyYXRpb24gKi8KKwkJcGdfc3Ryb25nX3JhbmRvbV9pbml0KCk7CisJfQorCWVs c2UKKwl7CisJCS8qIGluIHBhcmVudCwgcmVzdG9yZSBzaWduYWwgbWFzayAqLworCQlzaWdw cm9jbWFzayhTSUdfU0VUTUFTSywgJnNhdmVfbWFzaywgTlVMTCk7CisJfQorCisJcmV0dXJu IHJlc3VsdDsKK30KKworI2VuZGlmCQkJCQkJCS8qICFXSU4zMiAqLworCisjaWZkZWYgRVhF Q19CQUNLRU5ECisjaWZuZGVmIFdJTjMyCisKKy8qCisgKiBpbnRlcm5hbF9mb3JrZXhlYyBu b24td2luMzIgaW1wbGVtZW50YXRpb24KKyAqCisgKiAtIHdyaXRlcyBvdXQgYmFja2VuZCB2 YXJpYWJsZXMgdG8gdGhlIHBhcmFtZXRlciBmaWxlCisgKiAtIGZvcmsoKTpzLCBhbmQgdGhl biBleGVjKCk6cyB0aGUgY2hpbGQgcHJvY2VzcworICovCitzdGF0aWMgcGlkX3QKK2ludGVy bmFsX2ZvcmtleGVjKGNvbnN0IGNoYXIgKmVudHJ5X25hbWUsIGNoYXIgKnN0YXJ0dXBfZGF0 YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2sp Cit7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgdG1wQmFja2VuZEZpbGVOdW0gPSAwOworCXBp ZF90CQlwaWQ7CisJY2hhcgkJdG1wZmlsZW5hbWVbTUFYUEdQQVRIXTsKKwlCYWNrZW5kUGFy YW1ldGVycyBwYXJhbTsKKwlGSUxFCSAgICpmcDsKKwljaGFyCSAgICphcmd2WzRdOworCWNo YXIJCWZvcmthdltNQVhQR1BBVEhdOworCisJaWYgKCFzYXZlX2JhY2tlbmRfdmFyaWFibGVz KCZwYXJhbSwgY2xpZW50X3NvY2spKQorCQlyZXR1cm4gLTE7CQkJCS8qIGxvZyBtYWRlIGJ5 IHNhdmVfYmFja2VuZF92YXJpYWJsZXMgKi8KKworCS8qIENhbGN1bGF0ZSBuYW1lIGZvciB0 ZW1wIGZpbGUgKi8KKwlzbnByaW50Zih0bXBmaWxlbmFtZSwgTUFYUEdQQVRILCAiJXMvJXMu YmFja2VuZF92YXIuJWQuJWx1IiwKKwkJCSBQR19URU1QX0ZJTEVTX0RJUiwgUEdfVEVNUF9G SUxFX1BSRUZJWCwKKwkJCSBNeVByb2NQaWQsICsrdG1wQmFja2VuZEZpbGVOdW0pOworCisJ LyogT3BlbiBmaWxlICovCisJZnAgPSBBbGxvY2F0ZUZpbGUodG1wZmlsZW5hbWUsIFBHX0JJ TkFSWV9XKTsKKwlpZiAoIWZwKQorCXsKKwkJLyoKKwkJICogQXMgaW4gT3BlblRlbXBvcmFy eUZpbGVJblRhYmxlc3BhY2UsIHRyeSB0byBtYWtlIHRoZSB0ZW1wLWZpbGUKKwkJICogZGly ZWN0b3J5LCBpZ25vcmluZyBlcnJvcnMuCisJCSAqLworCQkodm9pZCkgTWFrZVBHRGlyZWN0 b3J5KFBHX1RFTVBfRklMRVNfRElSKTsKKworCQlmcCA9IEFsbG9jYXRlRmlsZSh0bXBmaWxl bmFtZSwgUEdfQklOQVJZX1cpOworCQlpZiAoIWZwKQorCQl7CisJCQllcmVwb3J0KExPRywK KwkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJCSBlcnJtc2coImNvdWxk IG5vdCBjcmVhdGUgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJCQl0bXBmaWxlbmFtZSkpKTsK KwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCWlmIChmd3JpdGUoJnBhcmFtLCBzaXplb2Yo cGFyYW0pLCAxLCBmcCkgIT0gMSkKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSB0byBm aWxlIFwiJXNcIjogJW0iLCB0bXBmaWxlbmFtZSkpKTsKKwkJRnJlZUZpbGUoZnApOworCQly ZXR1cm4gLTE7CisJfQorCisJLyogd3JpdGUgc3RhcnR1cCBkYXRhICovCisJaWYgKGZ3cml0 ZSgoY2hhciAqKSAmc3RhcnR1cF9kYXRhX2xlbiwgc2l6ZW9mKHNpemVfdCksIDEsIGZwKSAh PSAxKQorCXsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNz KCksCisJCQkJIGVycm1zZygiY291bGQgbm90IHdyaXRlIHRvIGZpbGUgXCIlc1wiOiAlbSIs IHRtcGZpbGVuYW1lKSkpOworCQlGcmVlRmlsZShmcCk7CisJCXJldHVybiAtMTsKKwl9CisJ aWYgKHN0YXJ0dXBfZGF0YV9sZW4gPiAwKQorCXsKKwkJaWYgKGZ3cml0ZShzdGFydHVwX2Rh dGEsIHN0YXJ0dXBfZGF0YV9sZW4sIDEsIGZwKSAhPSAxKQorCQl7CisJCQllcmVwb3J0KExP RywKKwkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJCSBlcnJtc2coImNv dWxkIG5vdCB3cml0ZSB0byBmaWxlIFwiJXNcIjogJW0iLCB0bXBmaWxlbmFtZSkpKTsKKwkJ CUZyZWVGaWxlKGZwKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCS8qIFJlbGVhc2Ug ZmlsZSAqLworCWlmIChGcmVlRmlsZShmcCkpCisJeworCQllcmVwb3J0KExPRywKKwkJCQko ZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qgd3Jp dGUgdG8gZmlsZSBcIiVzXCI6ICVtIiwgdG1wZmlsZW5hbWUpKSk7CisJCXJldHVybiAtMTsK Kwl9CisKKwkvKiBzZXQgdXAgYXJndiBwcm9wZXJseSAqLworCWFyZ3ZbMF0gPSAicG9zdGdy ZXMiOworCXNucHJpbnRmKGZvcmthdiwgTUFYUEdQQVRILCAiLS1mb3JrY2hpbGQ9JXMiLCBl bnRyeV9uYW1lKTsKKwlhcmd2WzFdID0gZm9ya2F2OworCS8qIEluc2VydCB0ZW1wIGZpbGUg bmFtZSBhZnRlciAtLWZvcmsgYXJndW1lbnQgKi8KKwlhcmd2WzJdID0gdG1wZmlsZW5hbWU7 CisJYXJndlszXSA9IE5VTEw7CisKKwkvKiBGaXJlIG9mZiBleGVjdiBpbiBjaGlsZCAqLwor CWlmICgocGlkID0gZm9ya19wcm9jZXNzKCkpID09IDApCisJeworCQlpZiAoZXhlY3YocG9z dGdyZXNfZXhlY19wYXRoLCBhcmd2KSA8IDApCisJCXsKKwkJCWVyZXBvcnQoTE9HLAorCQkJ CQkoZXJybXNnKCJjb3VsZCBub3QgZXhlY3V0ZSBzZXJ2ZXIgcHJvY2VzcyBcIiVzXCI6ICVt IiwKKwkJCQkJCQlwb3N0Z3Jlc19leGVjX3BhdGgpKSk7CisJCQkvKiBXZSdyZSBhbHJlYWR5 IGluIHRoZSBjaGlsZCBwcm9jZXNzIGhlcmUsIGNhbid0IHJldHVybiAqLworCQkJZXhpdCgx KTsKKwkJfQorCX0KKworCXJldHVybiBwaWQ7CQkJCQkvKiBQYXJlbnQgcmV0dXJucyBwaWQs IG9yIC0xIG9uIGZvcmsgZmFpbHVyZSAqLworfQorI2Vsc2UJCQkJCQkJLyogV0lOMzIgKi8K KworLyoKKyAqIGludGVybmFsX2ZvcmtleGVjIHdpbjMyIGltcGxlbWVudGF0aW9uCisgKgor ICogLSBzdGFydHMgYmFja2VuZCB1c2luZyBDcmVhdGVQcm9jZXNzKCksIGluIHN1c3BlbmRl ZCBzdGF0ZQorICogLSB3cml0ZXMgb3V0IGJhY2tlbmQgdmFyaWFibGVzIHRvIHRoZSBwYXJh bWV0ZXIgZmlsZQorICoJLSBkdXJpbmcgdGhpcywgZHVwbGljYXRlcyBoYW5kbGVzIGFuZCBz b2NrZXRzIHJlcXVpcmVkIGZvcgorICoJICBpbmhlcml0YW5jZSBpbnRvIHRoZSBuZXcgcHJv Y2VzcworICogLSByZXN1bWVzIGV4ZWN1dGlvbiBvZiB0aGUgbmV3IHByb2Nlc3Mgb25jZSB0 aGUgYmFja2VuZCBwYXJhbWV0ZXIKKyAqCSBmaWxlIGlzIGNvbXBsZXRlLgorICovCitzdGF0 aWMgcGlkX3QKK2ludGVybmFsX2ZvcmtleGVjKGNvbnN0IGNoYXIgKmVudHJ5X25hbWUsIGNo YXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4sIENsaWVudFNvY2tl dCAqY2xpZW50X3NvY2spCit7CisJaW50CQkJcmV0cnlfY291bnQgPSAwOworCVNUQVJUVVBJ TkZPIHNpOworCVBST0NFU1NfSU5GT1JNQVRJT04gcGk7CisJaW50CQkJaTsKKwlpbnQJCQlq OworCWNoYXIJCWNtZExpbmVbTUFYUEdQQVRIICogMl07CisJSEFORExFCQlwYXJhbUhhbmRs ZTsKKwlCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW07CisJU0VDVVJJVFlfQVRUUklCVVRFUyBz YTsKKwljaGFyCQlwYXJhbUhhbmRsZVN0clszMl07CisJd2luMzJfZGVhZGNoaWxkX3dhaXRp bmZvICpjaGlsZGluZm87CisJY2hhcgkgICAqYXJndls0XTsKKworCS8qIFJlc3VtZSBoZXJl IGlmIHdlIG5lZWQgdG8gcmV0cnkgKi8KK3JldHJ5OgorCisJLyogU2V0IHVwIHNoYXJlZCBt ZW1vcnkgZm9yIHBhcmFtZXRlciBwYXNzaW5nICovCisJWmVyb01lbW9yeSgmc2EsIHNpemVv ZihzYSkpOworCXNhLm5MZW5ndGggPSBzaXplb2Yoc2EpOworCXNhLmJJbmhlcml0SGFuZGxl ID0gVFJVRTsKKwlwYXJhbUhhbmRsZSA9IENyZWF0ZUZpbGVNYXBwaW5nKElOVkFMSURfSEFO RExFX1ZBTFVFLAorCQkJCQkJCQkJJnNhLAorCQkJCQkJCQkJUEFHRV9SRUFEV1JJVEUsCisJ CQkJCQkJCQkwLAorCQkJCQkJCQkJc2l6ZW9mKEJhY2tlbmRQYXJhbWV0ZXJzKSwKKwkJCQkJ CQkJCU5VTEwpOworCWlmIChwYXJhbUhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkK Kwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCBjcmVhdGUgYmFj a2VuZCBwYXJhbWV0ZXIgZmlsZSBtYXBwaW5nOiBlcnJvciBjb2RlICVsdSIsCisJCQkJCQlH ZXRMYXN0RXJyb3IoKSkpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXBhcmFtID0gTWFwVmll d09mRmlsZShwYXJhbUhhbmRsZSwgRklMRV9NQVBfV1JJVEUsIDAsIDAsIHNpemVvZihCYWNr ZW5kUGFyYW1ldGVycykpOworCWlmICghcGFyYW0pCisJeworCQllcmVwb3J0KExPRywKKwkJ CQkoZXJybXNnKCJjb3VsZCBub3QgbWFwIGJhY2tlbmQgcGFyYW1ldGVyIG1lbW9yeTogZXJy b3IgY29kZSAlbHUiLAorCQkJCQkJR2V0TGFzdEVycm9yKCkpKSk7CisJCUNsb3NlSGFuZGxl KHBhcmFtSGFuZGxlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIEluc2VydCB0ZW1wIGZp bGUgbmFtZSBhZnRlciAtLWZvcmsgYXJndW1lbnQgKi8KKyNpZmRlZiBfV0lONjQKKwlzcHJp bnRmKHBhcmFtSGFuZGxlU3RyLCAiJWxsdSIsIChMT05HX1BUUikgcGFyYW1IYW5kbGUpOwor I2Vsc2UKKwlzcHJpbnRmKHBhcmFtSGFuZGxlU3RyLCAiJWx1IiwgKERXT1JEKSBwYXJhbUhh bmRsZSk7CisjZW5kaWYKKworCS8qIHNldCB1cCBhcmd2IHByb3Blcmx5ICovCisJYXJndlsw XSA9ICJwb3N0Z3JlcyI7CisJc25wcmludGYoZm9ya2F2LCBNQVhQR1BBVEgsICItLWZvcmtj aGlsZD0lcyIsIGVudHJ5X25hbWUpOworCWFyZ3ZbMV0gPSBmb3JrYXY7CisJLyogSW5zZXJ0 IHRlbXAgZmlsZSBuYW1lIGFmdGVyIC0tZm9yayBhcmd1bWVudCAqLworCWFyZ3ZbMl0gPSB0 bXBmaWxlbmFtZTsKKwlhcmd2WzNdID0gTlVMTDsKKworCS8qIEZvcm1hdCB0aGUgY21kIGxp bmUgKi8KKwljbWRMaW5lW3NpemVvZihjbWRMaW5lKSAtIDFdID0gJ1wwJzsKKwljbWRMaW5l W3NpemVvZihjbWRMaW5lKSAtIDJdID0gJ1wwJzsKKwlzbnByaW50ZihjbWRMaW5lLCBzaXpl b2YoY21kTGluZSkgLSAxLCAiXCIlc1wiIiwgcG9zdGdyZXNfZXhlY19wYXRoKTsKKwlpID0g MDsKKwl3aGlsZSAoYXJndlsrK2ldICE9IE5VTEwpCisJeworCQlqID0gc3RybGVuKGNtZExp bmUpOworCQlzbnByaW50ZihjbWRMaW5lICsgaiwgc2l6ZW9mKGNtZExpbmUpIC0gMSAtIGos ICIgXCIlc1wiIiwgYXJndltpXSk7CisJfQorCWlmIChjbWRMaW5lW3NpemVvZihjbWRMaW5l KSAtIDJdICE9ICdcMCcpCisJeworCQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnKCJzdWJw cm9jZXNzIGNvbW1hbmQgbGluZSB0b28gbG9uZyIpKSk7CisJCVVubWFwVmlld09mRmlsZShw YXJhbSk7CisJCUNsb3NlSGFuZGxlKHBhcmFtSGFuZGxlKTsKKwkJcmV0dXJuIC0xOworCX0K KworCW1lbXNldCgmcGksIDAsIHNpemVvZihwaSkpOworCW1lbXNldCgmc2ksIDAsIHNpemVv ZihzaSkpOworCXNpLmNiID0gc2l6ZW9mKHNpKTsKKworCS8qCisJICogQ3JlYXRlIHRoZSBz dWJwcm9jZXNzIGluIGEgc3VzcGVuZGVkIHN0YXRlLiBUaGlzIHdpbGwgYmUgcmVzdW1lZCBs YXRlciwKKwkgKiBvbmNlIHdlIGhhdmUgd3JpdHRlbiBvdXQgdGhlIHBhcmFtZXRlciBmaWxl LgorCSAqLworCWlmICghQ3JlYXRlUHJvY2VzcyhOVUxMLCBjbWRMaW5lLCBOVUxMLCBOVUxM LCBUUlVFLCBDUkVBVEVfU1VTUEVOREVELAorCQkJCQkgICBOVUxMLCBOVUxMLCAmc2ksICZw aSkpCisJeworCQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnKCJDcmVhdGVQcm9jZXNzKCkg Y2FsbCBmYWlsZWQ6ICVtIChlcnJvciBjb2RlICVsdSkiLAorCQkJCQkJR2V0TGFzdEVycm9y KCkpKSk7CisJCVVubWFwVmlld09mRmlsZShwYXJhbSk7CisJCUNsb3NlSGFuZGxlKHBhcmFt SGFuZGxlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICghc2F2ZV9iYWNrZW5kX3Zhcmlh YmxlcyhwYXJhbSwgY2xpZW50X3NvY2ssIHBpLmhQcm9jZXNzLCBwaS5kd1Byb2Nlc3NJZCkp CisJeworCQkvKgorCQkgKiBsb2cgbWFkZSBieSBzYXZlX2JhY2tlbmRfdmFyaWFibGVzLCBi dXQgd2UgaGF2ZSB0byBjbGVhbiB1cCB0aGUKKwkJICogbWVzcyB3aXRoIHRoZSBoYWxmLXN0 YXJ0ZWQgcHJvY2VzcworCQkgKi8KKwkJaWYgKCFUZXJtaW5hdGVQcm9jZXNzKHBpLmhQcm9j ZXNzLCAyNTUpKQorCQkJZXJlcG9ydChMT0csCisJCQkJCShlcnJtc2dfaW50ZXJuYWwoImNv dWxkIG5vdCB0ZXJtaW5hdGUgdW5zdGFydGVkIHByb2Nlc3M6IGVycm9yIGNvZGUgJWx1IiwK KwkJCQkJCQkJCSBHZXRMYXN0RXJyb3IoKSkpKTsKKwkJQ2xvc2VIYW5kbGUocGkuaFByb2Nl c3MpOworCQlDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKKwkJVW5tYXBWaWV3T2ZGaWxlKHBh cmFtKTsKKwkJQ2xvc2VIYW5kbGUocGFyYW1IYW5kbGUpOworCQlyZXR1cm4gLTE7CQkJCS8q IGxvZyBtYWRlIGJ5IHNhdmVfYmFja2VuZF92YXJpYWJsZXMgKi8KKwl9CisKKwkvKiBEcm9w IHRoZSBwYXJhbWV0ZXIgc2hhcmVkIG1lbW9yeSB0aGF0IGlzIG5vdyBpbmhlcml0ZWQgdG8g dGhlIGJhY2tlbmQgKi8KKwlpZiAoIVVubWFwVmlld09mRmlsZShwYXJhbSkpCisJCWVyZXBv cnQoTE9HLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCB1bm1hcCB2aWV3IG9mIGJhY2tlbmQg cGFyYW1ldGVyIGZpbGU6IGVycm9yIGNvZGUgJWx1IiwKKwkJCQkJCUdldExhc3RFcnJvcigp KSkpOworCWlmICghQ2xvc2VIYW5kbGUocGFyYW1IYW5kbGUpKQorCQllcmVwb3J0KExPRywK KwkJCQkoZXJybXNnKCJjb3VsZCBub3QgY2xvc2UgaGFuZGxlIHRvIGJhY2tlbmQgcGFyYW1l dGVyIGZpbGU6IGVycm9yIGNvZGUgJWx1IiwKKwkJCQkJCUdldExhc3RFcnJvcigpKSkpOwor CisJLyoKKwkgKiBSZXNlcnZlIHRoZSBtZW1vcnkgcmVnaW9uIHVzZWQgYnkgb3VyIG1haW4g c2hhcmVkIG1lbW9yeSBzZWdtZW50IGJlZm9yZQorCSAqIHdlIHJlc3VtZSB0aGUgY2hpbGQg cHJvY2Vzcy4gIE5vcm1hbGx5IHRoaXMgc2hvdWxkIHN1Y2NlZWQsIGJ1dCBpZiBBU0xSCisJ ICogaXMgYWN0aXZlIHRoZW4gaXQgbWlnaHQgc29tZXRpbWVzIGZhaWwgZHVlIHRvIHRoZSBz dGFjayBvciBoZWFwIGhhdmluZworCSAqIGdvdHRlbiBtYXBwZWQgaW50byB0aGF0IHJhbmdl LiAgSW4gdGhhdCBjYXNlLCBqdXN0IHRlcm1pbmF0ZSB0aGUKKwkgKiBwcm9jZXNzIGFuZCBy ZXRyeS4KKwkgKi8KKwlpZiAoIXBnd2luMzJfUmVzZXJ2ZVNoYXJlZE1lbW9yeVJlZ2lvbihw aS5oUHJvY2VzcykpCisJeworCQkvKiBwZ3dpbjMyX1Jlc2VydmVTaGFyZWRNZW1vcnlSZWdp b24gYWxyZWFkeSBtYWRlIGEgbG9nIGVudHJ5ICovCisJCWlmICghVGVybWluYXRlUHJvY2Vz cyhwaS5oUHJvY2VzcywgMjU1KSkKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQkoZXJybXNnX2lu dGVybmFsKCJjb3VsZCBub3QgdGVybWluYXRlIHByb2Nlc3MgdGhhdCBmYWlsZWQgdG8gcmVz ZXJ2ZSBtZW1vcnk6IGVycm9yIGNvZGUgJWx1IiwKKwkJCQkJCQkJCSBHZXRMYXN0RXJyb3Io KSkpKTsKKwkJQ2xvc2VIYW5kbGUocGkuaFByb2Nlc3MpOworCQlDbG9zZUhhbmRsZShwaS5o VGhyZWFkKTsKKwkJaWYgKCsrcmV0cnlfY291bnQgPCAxMDApCisJCQlnb3RvIHJldHJ5Owor CQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnKCJnaXZpbmcgdXAgYWZ0ZXIgdG9vIG1hbnkg dHJpZXMgdG8gcmVzZXJ2ZSBzaGFyZWQgbWVtb3J5IiksCisJCQkJIGVycmhpbnQoIlRoaXMg bWlnaHQgYmUgY2F1c2VkIGJ5IEFTTFIgb3IgYW50aXZpcnVzIHNvZnR3YXJlLiIpKSk7CisJ CXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIE5vdyB0aGF0IHRoZSBiYWNrZW5kIHZhcmlh YmxlcyBhcmUgd3JpdHRlbiBvdXQsIHdlIHN0YXJ0IHRoZSBjaGlsZAorCSAqIHRocmVhZCBz byBpdCBjYW4gc3RhcnQgaW5pdGlhbGl6aW5nIHdoaWxlIHdlIHNldCB1cCB0aGUgcmVzdCBv ZiB0aGUKKwkgKiBwYXJlbnQgc3RhdGUuCisJICovCisJaWYgKFJlc3VtZVRocmVhZChwaS5o VGhyZWFkKSA9PSAtMSkKKwl7CisJCWlmICghVGVybWluYXRlUHJvY2VzcyhwaS5oUHJvY2Vz cywgMjU1KSkKKwkJeworCQkJZXJlcG9ydChMT0csCisJCQkJCShlcnJtc2dfaW50ZXJuYWwo ImNvdWxkIG5vdCB0ZXJtaW5hdGUgdW5zdGFydGFibGUgcHJvY2VzczogZXJyb3IgY29kZSAl bHUiLAorCQkJCQkJCQkJIEdldExhc3RFcnJvcigpKSkpOworCQkJQ2xvc2VIYW5kbGUocGku aFByb2Nlc3MpOworCQkJQ2xvc2VIYW5kbGUocGkuaFRocmVhZCk7CisJCQlyZXR1cm4gLTE7 CisJCX0KKwkJQ2xvc2VIYW5kbGUocGkuaFByb2Nlc3MpOworCQlDbG9zZUhhbmRsZShwaS5o VGhyZWFkKTsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycm1zZ19pbnRlcm5hbCgiY291bGQg bm90IHJlc3VtZSB0aHJlYWQgb2YgdW5zdGFydGVkIHByb2Nlc3M6IGVycm9yIGNvZGUgJWx1 IiwKKwkJCQkJCQkJIEdldExhc3RFcnJvcigpKSkpOworCQlyZXR1cm4gLTE7CisJfQorCisJ LyoKKwkgKiBRdWV1ZSBhIHdhaXRlciB0byBzaWduYWwgd2hlbiB0aGlzIGNoaWxkIGRpZXMu IFRoZSB3YWl0IHdpbGwgYmUgaGFuZGxlZAorCSAqIGF1dG9tYXRpY2FsbHkgYnkgYW4gb3Bl cmF0aW5nIHN5c3RlbSB0aHJlYWQgcG9vbC4gIFRoZSBtZW1vcnkgd2lsbCBiZQorCSAqIGZy ZWVkIGJ5IGEgbGF0ZXIgY2FsbCB0byB3YWl0cGlkKCkuCisJICovCisJY2hpbGRpbmZvID0g cGFsbG9jKHNpemVvZih3aW4zMl9kZWFkY2hpbGRfd2FpdGluZm8pKTsKKwljaGlsZGluZm8t PnByb2NIYW5kbGUgPSBwaS5oUHJvY2VzczsKKwljaGlsZGluZm8tPnByb2NJZCA9IHBpLmR3 UHJvY2Vzc0lkOworCisJaWYgKCFSZWdpc3RlcldhaXRGb3JTaW5nbGVPYmplY3QoJmNoaWxk aW5mby0+d2FpdEhhbmRsZSwKKwkJCQkJCQkJCSBwaS5oUHJvY2VzcywKKwkJCQkJCQkJCSBw Z3dpbjMyX2RlYWRjaGlsZF9jYWxsYmFjaywKKwkJCQkJCQkJCSBjaGlsZGluZm8sCisJCQkJ CQkJCQkgSU5GSU5JVEUsCisJCQkJCQkJCQkgV1RfRVhFQ1VURU9OTFlPTkNFIHwgV1RfRVhF Q1VURUlOV0FJVFRIUkVBRCkpCisJCWVyZXBvcnQoRkFUQUwsCisJCQkJKGVycm1zZ19pbnRl cm5hbCgiY291bGQgbm90IHJlZ2lzdGVyIHByb2Nlc3MgZm9yIHdhaXQ6IGVycm9yIGNvZGUg JWx1IiwKKwkJCQkJCQkJIEdldExhc3RFcnJvcigpKSkpOworCisJLyogRG9uJ3QgY2xvc2Ug cGkuaFByb2Nlc3MgaGVyZSAtIHdhaXRwaWQoKSBuZWVkcyBhY2Nlc3MgdG8gaXQgKi8KKwor CUNsb3NlSGFuZGxlKHBpLmhUaHJlYWQpOworCisJcmV0dXJuIHBpLmR3UHJvY2Vzc0lkOwor fQorI2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCisKKy8qCisgKiBTdWJQb3N0bWFzdGVyTWFp biAtLSBHZXQgdGhlIGZvcmsvZXhlYydkIHByb2Nlc3MgaW50byBhIHN0YXRlIGVxdWl2YWxl bnQKKyAqCQkJdG8gd2hhdCBpdCB3b3VsZCBiZSBpZiB3ZSdkIHNpbXBseSBmb3JrZWQgb24g VW5peCwgYW5kIHRoZW4KKyAqCQkJZGlzcGF0Y2ggdG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNl LgorICoKKyAqIFRoZSBmaXJzdCB0d28gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhcmUgZXhw ZWN0ZWQgdG8gYmUgIi0tZm9ya0ZPTyIKKyAqICh3aGVyZSBGT08gaW5kaWNhdGVzIHdoaWNo IHBvc3RtYXN0ZXIgY2hpbGQgd2UgYXJlIHRvIGJlY29tZSksIGFuZAorICogdGhlIG5hbWUg b2YgYSB2YXJpYWJsZXMgZmlsZSB0aGF0IHdlIGNhbiByZWFkIHRvIGxvYWQgZGF0YSB0aGF0 IHdvdWxkCisgKiBoYXZlIGJlZW4gaW5oZXJpdGVkIGJ5IGZvcmsoKSBvbiBVbml4LiAgUmVt YWluaW5nIGFyZ3VtZW50cyBnbyB0byB0aGUKKyAqIHN1YnByb2Nlc3MgRm9vTWFpbigpIHJv dXRpbmUuIFhYWAorICovCit2b2lkCitTdWJQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQoreworCVBvc3RtYXN0ZXJDaGlsZFR5cGUgY2hpbGRfdHlwZTsKKwljaGFy CSAgICpzdGFydHVwX2RhdGE7CisJc2l6ZV90CQlzdGFydHVwX2RhdGFfbGVuOworCisJLyog SW4gRVhFQ19CQUNLRU5EIGNhc2Ugd2Ugd2lsbCBub3QgaGF2ZSBpbmhlcml0ZWQgdGhlc2Ug c2V0dGluZ3MgKi8KKwlJc1Bvc3RtYXN0ZXJFbnZpcm9ubWVudCA9IHRydWU7CisJd2hlcmVU b1NlbmRPdXRwdXQgPSBEZXN0Tm9uZTsKKworCS8qIFNldHVwIGVzc2VudGlhbCBzdWJzeXN0 ZW1zICh0byBlbnN1cmUgZWxvZygpIGJlaGF2ZXMgc2FuZWx5KSAqLworCUluaXRpYWxpemVH VUNPcHRpb25zKCk7CisKKwkvKiBDaGVjayB3ZSBnb3QgYXBwcm9wcmlhdGUgYXJncyAqLwor CWlmIChhcmdjIDwgMykKKwkJZWxvZyhGQVRBTCwgImludmFsaWQgc3VicG9zdG1hc3RlciBp bnZvY2F0aW9uIik7CisKKwlpZiAoc3RybmNtcChhcmd2WzFdLCAiLS1mb3JrY2hpbGQ9Iiwg MTIpID09IDApCisJeworCQljaGFyCSAgICplbnRyeV9uYW1lID0gYXJndlsxXSArIDEyOwor CQlib29sCQlmb3VuZCA9IGZhbHNlOworCisJCWZvciAoaW50IGlkeCA9IDA7IGlkeCA8IGxl bmd0aG9mKGVudHJ5X2tpbmRzKTsgaWR4KyspCisJCXsKKwkJCWlmIChzdHJjbXAoZW50cnlf a2luZHNbaWR4XS5uYW1lLCBlbnRyeV9uYW1lKSA9PSAwKQorCQkJeworCQkJCWNoaWxkX3R5 cGUgPSBpZHg7CisJCQkJZm91bmQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJ CWlmICghZm91bmQpCisJCQllbG9nKEVSUk9SLCAidW5rbm93biBjaGlsZCBraW5kICVzIiwg ZW50cnlfbmFtZSk7CisJfQorCisJLyogUmVhZCBpbiB0aGUgdmFyaWFibGVzIGZpbGUgKi8K KwlyZWFkX2JhY2tlbmRfdmFyaWFibGVzKGFyZ3ZbMl0sICZzdGFydHVwX2RhdGEsICZzdGFy dHVwX2RhdGFfbGVuKTsKKworCS8qIFNldHVwIGFzIHBvc3RtYXN0ZXIgY2hpbGQgKi8KKwlJ bml0UG9zdG1hc3RlckNoaWxkKGNoaWxkX3R5cGUgPT0gUE1DX1NZU0xPR0dFUik7CisKKwkv KgorCSAqIElmIGFwcHJvcHJpYXRlLCBwaHlzaWNhbGx5IHJlLWF0dGFjaCB0byBzaGFyZWQg bWVtb3J5IHNlZ21lbnQuIFdlIHdhbnQKKwkgKiB0byBkbyB0aGlzIGJlZm9yZSBnb2luZyBh bnkgZnVydGhlciB0byBlbnN1cmUgdGhhdCB3ZSBjYW4gYXR0YWNoIGF0IHRoZQorCSAqIHNh bWUgYWRkcmVzcyB0aGUgcG9zdG1hc3RlciB1c2VkLiAgT24gdGhlIG90aGVyIGhhbmQsIGlm IHdlIGNob29zZSBub3QKKwkgKiB0byByZS1hdHRhY2gsIHdlIG1heSBoYXZlIG90aGVyIGNs ZWFudXAgdG8gZG8uCisJICoKKwkgKiBJZiB0ZXN0aW5nIEVYRUNfQkFDS0VORCBvbiBMaW51 eCwgeW91IHNob3VsZCBydW4gdGhpcyBhcyByb290IGJlZm9yZQorCSAqIHN0YXJ0aW5nIHRo ZSBwb3N0bWFzdGVyOgorCSAqCisJICogc3lzY3RsIC13IGtlcm5lbC5yYW5kb21pemVfdmFf c3BhY2U9MAorCSAqCisJICogVGhpcyBwcmV2ZW50cyB1c2luZyByYW5kb21pemVkIHN0YWNr IGFuZCBjb2RlIGFkZHJlc3NlcyB0aGF0IGNhdXNlIHRoZQorCSAqIGNoaWxkIHByb2Nlc3Mn cyBtZW1vcnkgbWFwIHRvIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBwYXJlbnQncywgbWFraW5n IGl0CisJICogc29tZXRpbWVzIGltcG9zc2libGUgdG8gYXR0YWNoIHRvIHNoYXJlZCBtZW1v cnkgYXQgdGhlIGRlc2lyZWQgYWRkcmVzcy4KKwkgKiBSZXR1cm4gdGhlIHNldHRpbmcgdG8g aXRzIG9sZCB2YWx1ZSAodXN1YWxseSAnMScgb3IgJzInKSB3aGVuIGZpbmlzaGVkLgorCSAq LworCWlmIChlbnRyeV9raW5kc1tjaGlsZF90eXBlXS5zaG1lbV9hdHRhY2gpCisJCVBHU2hh cmVkTWVtb3J5UmVBdHRhY2goKTsKKwllbHNlCisJCVBHU2hhcmVkTWVtb3J5Tm9SZUF0dGFj aCgpOworCisJLyogUmVhZCBpbiByZW1haW5pbmcgR1VDIHZhcmlhYmxlcyAqLworCXJlYWRf bm9uZGVmYXVsdF92YXJpYWJsZXMoKTsKKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgZGF0 YSBkaXJlY3RvcnkgbG9va3MgdmFsaWQsIHdoaWNoIHdpbGwgYWxzbyBjaGVjayB0aGUKKwkg KiBwcml2aWxlZ2VzIG9uIHRoZSBkYXRhIGRpcmVjdG9yeSBhbmQgdXBkYXRlIG91ciB1bWFz ayBhbmQgZmlsZS9ncm91cAorCSAqIHZhcmlhYmxlcyBmb3IgY3JlYXRpbmcgZmlsZXMgbGF0 ZXIuICBOb3RlOiB0aGlzIHNob3VsZCByZWFsbHkgYmUgZG9uZQorCSAqIGJlZm9yZSB3ZSBj cmVhdGUgYW55IGZpbGVzIG9yIGRpcmVjdG9yaWVzLgorCSAqLworCWNoZWNrRGF0YURpcigp OworCisJLyoKKwkgKiAocmUtKXJlYWQgY29udHJvbCBmaWxlLCBhcyBpdCBjb250YWlucyBj b25maWcuIFRoZSBwb3N0bWFzdGVyIHdpbGwKKwkgKiBhbHJlYWR5IGhhdmUgcmVhZCB0aGlz LCBidXQgdGhpcyBwcm9jZXNzIGRvZXNuJ3Qga25vdyBhYm91dCB0aGF0LgorCSAqLworCUxv Y2FsUHJvY2Vzc0NvbnRyb2xGaWxlKGZhbHNlKTsKKworCS8qCisJICogUmVsb2FkIGFueSBs aWJyYXJpZXMgdGhhdCB3ZXJlIHByZWxvYWRlZCBieSB0aGUgcG9zdG1hc3Rlci4gIFNpbmNl IHdlCisJICogZXhlYydkIHRoaXMgcHJvY2VzcywgdGhvc2UgbGlicmFyaWVzIGRpZG4ndCBj b21lIGFsb25nIHdpdGggdXM7IGJ1dCB3ZQorCSAqIHNob3VsZCBsb2FkIHRoZW0gaW50byBh bGwgY2hpbGQgcHJvY2Vzc2VzIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUKKwkgKiBub24t RVhFQ19CQUNLRU5EIGJlaGF2aW9yLgorCSAqLworCXByb2Nlc3Nfc2hhcmVkX3ByZWxvYWRf bGlicmFyaWVzKCk7CisKKwkvKiBSZXN0b3JlIGJhc2ljIHNoYXJlZCBtZW1vcnkgcG9pbnRl cnMgKi8KKwlpZiAoVXNlZFNobWVtU2VnQWRkciAhPSBOVUxMKQorCQlJbml0U2htZW1BY2Nl c3MoVXNlZFNobWVtU2VnQWRkcik7CisKKwkvKiBSdW4gYmFja2VuZCBvciBhcHByb3ByaWF0 ZSBjaGlsZCAqLworCWVudHJ5X2tpbmRzW2NoaWxkX3R5cGVdLmVudHJ5X2ZuKHN0YXJ0dXBf ZGF0YSwgc3RhcnR1cF9kYXRhX2xlbik7CisKKwlhYm9ydCgpOwkJCQkJLyogc2hvdWxkbid0 IGdldCBoZXJlICovCit9CisjZW5kaWYJCQkJCQkJLyogRVhFQ19CQUNLRU5EICovCisKKy8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCWNvbW1vbiBwcm9jZXNzIHN0YXJ0dXAgY29kZQorICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBiYXNpYyBlbnZpcm9ubWVudCBm b3IgYSBwb3N0bWFzdGVyIGNoaWxkCisgKgorICogU2hvdWxkIGJlIGNhbGxlZCBhcyBlYXJs eSBhcyBwb3NzaWJsZSBhZnRlciB0aGUgY2hpbGQncyBzdGFydHVwLiBIb3dldmVyLAorICog b24gRVhFQ19CQUNLRU5EIGJ1aWxkcyBpdCBkb2VzIG5lZWQgdG8gYmUgYWZ0ZXIgcmVhZF9i YWNrZW5kX3ZhcmlhYmxlcygpLgorICovCitzdGF0aWMgdm9pZAorSW5pdFBvc3RtYXN0ZXJD aGlsZChib29sIGFtX3N5c2xvZ2dlcikKK3sKKwkvKiBDbG9zZSB0aGUgcG9zdG1hc3Rlcidz IHNvY2tldHMgKGFzIHNvb24gYXMgd2Uga25vdyB0aGVtKSAqLworCUNsb3NlUG9zdG1hc3Rl clBvcnRzKGFtX3N5c2xvZ2dlcik7CisKKwlJc1VuZGVyUG9zdG1hc3RlciA9IHRydWU7CS8q IHdlIGFyZSBhIHBvc3RtYXN0ZXIgc3VicHJvY2VzcyBub3cgKi8KKworCS8qCisJICogU3Rh cnQgb3VyIHdpbjMyIHNpZ25hbCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBoYXMgdG8gYmUgZG9u ZSBhZnRlciB3ZQorCSAqIHJlYWQgdGhlIGJhY2tlbmQgdmFyaWFibGVzLCBiZWNhdXNlIHdl IG5lZWQgdG8gcGljayB1cCB0aGUgc2lnbmFsIHBpcGUKKwkgKiBmcm9tIHRoZSBwYXJlbnQg cHJvY2Vzcy4KKwkgKi8KKyNpZmRlZiBXSU4zMgorCXBnd2luMzJfc2lnbmFsX2luaXRpYWxp emUoKTsKKyNlbmRpZgorCisJLyoKKwkgKiBTZXQgcmVmZXJlbmNlIHBvaW50IGZvciBzdGFj ay1kZXB0aCBjaGVja2luZy4gIFRoaXMgbWlnaHQgc2VlbQorCSAqIHJlZHVuZGFudCBpbiAh RVhFQ19CQUNLRU5EIGJ1aWxkczsgYnV0IGl0J3Mgbm90IGJlY2F1c2UgdGhlIHBvc3RtYXN0 ZXIKKwkgKiBsYXVuY2hlcyBpdHMgY2hpbGRyZW4gZnJvbSBzaWduYWwgaGFuZGxlcnMsIHNv IHdlIG1pZ2h0IGJlIHJ1bm5pbmcgb24KKwkgKiBhbiBhbHRlcm5hdGl2ZSBzdGFjay4gWFhY IHN0aWxsIHRydWU/CisJICovCisJKHZvaWQpIHNldF9zdGFja19iYXNlKCk7CisKKwlJbml0 UHJvY2Vzc0dsb2JhbHMoKTsKKworCS8qCisJICogbWFrZSBzdXJlIHN0ZGVyciBpcyBpbiBi aW5hcnkgbW9kZSBiZWZvcmUgYW55dGhpbmcgY2FuIHBvc3NpYmx5IGJlCisJICogd3JpdHRl biB0byBpdCwgaW4gY2FzZSBpdCdzIGFjdHVhbGx5IHRoZSBzeXNsb2dnZXIgcGlwZSwgc28g dGhlIHBpcGUKKwkgKiBjaHVua2luZyBwcm90b2NvbCBpc24ndCBkaXN0dXJiZWQuIE5vbi1s b2dwaXBlIGRhdGEgZ2V0cyB0cmFuc2xhdGVkIG9uCisJICogcmVkaXJlY3Rpb24gKGUuZy4g dmlhIHBnX2N0bCAtbCkgYW55d2F5LgorCSAqLworI2lmZGVmIFdJTjMyCisJX3NldG1vZGUo ZmlsZW5vKHN0ZGVyciksIF9PX0JJTkFSWSk7CisjZW5kaWYKKworCS8qIFdlIGRvbid0IHdh bnQgdGhlIHBvc3RtYXN0ZXIncyBwcm9jX2V4aXQoKSBoYW5kbGVycyAqLworCW9uX2V4aXRf cmVzZXQoKTsKKworCS8qIEluIEVYRUNfQkFDS0VORCBjYXNlIHdlIHdpbGwgbm90IGhhdmUg aW5oZXJpdGVkIEJsb2NrU2lnIGV0YyB2YWx1ZXMgKi8KKyNpZmRlZiBFWEVDX0JBQ0tFTkQK KwlwcWluaXRtYXNrKCk7CisjZW5kaWYKKworCS8qIEluaXRpYWxpemUgcHJvY2Vzcy1sb2Nh bCBsYXRjaCBzdXBwb3J0ICovCisJSW5pdGlhbGl6ZUxhdGNoU3VwcG9ydCgpOworCUluaXRQ cm9jZXNzTG9jYWxMYXRjaCgpOworCUluaXRpYWxpemVMYXRjaFdhaXRTZXQoKTsKKworCS8q CisJICogSWYgcG9zc2libGUsIG1ha2UgdGhpcyBwcm9jZXNzIGEgZ3JvdXAgbGVhZGVyLCBz byB0aGF0IHRoZSBwb3N0bWFzdGVyCisJICogY2FuIHNpZ25hbCBhbnkgY2hpbGQgcHJvY2Vz c2VzIHRvby4gTm90IGFsbCBwcm9jZXNzZXMgd2lsbCBoYXZlCisJICogY2hpbGRyZW4sIGJ1 dCBmb3IgY29uc2lzdGVuY3kgd2UgbWFrZSBhbGwgcG9zdG1hc3RlciBjaGlsZCBwcm9jZXNz ZXMgZG8KKwkgKiB0aGlzLgorCSAqLworI2lmZGVmIEhBVkVfU0VUU0lECisJaWYgKHNldHNp ZCgpIDwgMCkKKwkJZWxvZyhGQVRBTCwgInNldHNpZCgpIGZhaWxlZDogJW0iKTsKKyNlbmRp ZgorCisJLyoKKwkgKiBFdmVyeSBwb3N0bWFzdGVyIGNoaWxkIHByb2Nlc3MgaXMgZXhwZWN0 ZWQgdG8gcmVzcG9uZCBwcm9tcHRseSB0bworCSAqIFNJR1FVSVQgYXQgYWxsIHRpbWVzLiAg VGhlcmVmb3JlIHdlIGNlbnRyYWxseSByZW1vdmUgU0lHUVVJVCBmcm9tCisJICogQmxvY2tT aWcgYW5kIGluc3RhbGwgYSBzdWl0YWJsZSBzaWduYWwgaGFuZGxlci4gIChDbGllbnQtZmFj aW5nCisJICogcHJvY2Vzc2VzIG1heSBjaG9vc2UgdG8gcmVwbGFjZSB0aGlzIGRlZmF1bHQg Y2hvaWNlIG9mIGhhbmRsZXIgd2l0aAorCSAqIHF1aWNrZGllKCkuKSAgQWxsIG90aGVyIGJs b2NrYWJsZSBzaWduYWxzIHJlbWFpbiBibG9ja2VkIGZvciBub3cuCisJICovCisJcHFzaWdu YWwoU0lHUVVJVCwgU2lnbmFsSGFuZGxlckZvckNyYXNoRXhpdCk7CisKKwlzaWdkZWxzZXQo JkJsb2NrU2lnLCBTSUdRVUlUKTsKKwlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJkJsb2Nr U2lnLCBOVUxMKTsKKworCS8qIFJlcXVlc3QgYSBzaWduYWwgaWYgdGhlIHBvc3RtYXN0ZXIg ZGllcywgaWYgcG9zc2libGUuICovCisJUG9zdG1hc3RlckRlYXRoU2lnbmFsSW5pdCgpOwor CisJLyogRG9uJ3QgZ2l2ZSB0aGUgcGlwZSB0byBzdWJwcm9ncmFtcyB0aGF0IHdlIGV4ZWN1 dGUuICovCisjaWZuZGVmIFdJTjMyCisJaWYgKGZjbnRsKHBvc3RtYXN0ZXJfYWxpdmVfZmRz W1BPU1RNQVNURVJfRkRfV0FUQ0hdLCBGX1NFVEZELCBGRF9DTE9FWEVDKSA8IDApCisJCWVy ZXBvcnQoRkFUQUwsCisJCQkJKGVycmNvZGVfZm9yX3NvY2tldF9hY2Nlc3MoKSwKKwkJCQkg ZXJybXNnX2ludGVybmFsKCJjb3VsZCBub3Qgc2V0IHBvc3RtYXN0ZXIgZGVhdGggbW9uaXRv cmluZyBwaXBlIHRvIEZEX0NMT0VYRUMgbW9kZTogJW0iKSkpOworI2VuZGlmCit9CisKKy8q CisgKiBJbml0aWFsaXplIHRoZSBiYXNpYyBlbnZpcm9ubWVudCBmb3IgYSBzdGFuZGFsb25l IHByb2Nlc3MuCisgKgorICogYXJndjAgaGFzIHRvIGJlIHN1aXRhYmxlIHRvIGZpbmQgdGhl IHByb2dyYW0ncyBleGVjdXRhYmxlLgorICovCit2b2lkCitJbml0U3RhbmRhbG9uZVByb2Nl c3MoY29uc3QgY2hhciAqYXJndjApCit7CisJQXNzZXJ0KCFJc1Bvc3RtYXN0ZXJFbnZpcm9u bWVudCk7CisKKwlNeUJhY2tlbmRUeXBlID0gQl9TVEFOREFMT05FX0JBQ0tFTkQ7CisKKwkv KgorCSAqIFN0YXJ0IG91ciB3aW4zMiBzaWduYWwgaW1wbGVtZW50YXRpb24KKwkgKi8KKyNp ZmRlZiBXSU4zMgorCXBnd2luMzJfc2lnbmFsX2luaXRpYWxpemUoKTsKKyNlbmRpZgorCisJ SW5pdFByb2Nlc3NHbG9iYWxzKCk7CisKKwkvKiBJbml0aWFsaXplIHByb2Nlc3MtbG9jYWwg bGF0Y2ggc3VwcG9ydCAqLworCUluaXRpYWxpemVMYXRjaFN1cHBvcnQoKTsKKwlJbml0UHJv Y2Vzc0xvY2FsTGF0Y2goKTsKKwlJbml0aWFsaXplTGF0Y2hXYWl0U2V0KCk7CisKKwkvKgor CSAqIEZvciBjb25zaXN0ZW5jeSB3aXRoIEluaXRQb3N0bWFzdGVyQ2hpbGQsIGluaXRpYWxp emUgc2lnbmFsIG1hc2sgaGVyZS4KKwkgKiBCdXQgd2UgZG9uJ3QgdW5ibG9jayBTSUdRVUlU IG9yIHByb3ZpZGUgYSBkZWZhdWx0IGhhbmRsZXIgZm9yIGl0LgorCSAqLworCXBxaW5pdG1h c2soKTsKKwlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJkJsb2NrU2lnLCBOVUxMKTsKKwor CS8qIENvbXB1dGUgcGF0aHMsIG5vIHBvc3RtYXN0ZXIgdG8gaW5oZXJpdCBmcm9tICovCisJ aWYgKG15X2V4ZWNfcGF0aFswXSA9PSAnXDAnKQorCXsKKwkJaWYgKGZpbmRfbXlfZXhlYyhh cmd2MCwgbXlfZXhlY19wYXRoKSA8IDApCisJCQllbG9nKEZBVEFMLCAiJXM6IGNvdWxkIG5v dCBsb2NhdGUgbXkgb3duIGV4ZWN1dGFibGUgcGF0aCIsCisJCQkJIGFyZ3YwKTsKKwl9CisK KwlpZiAocGtnbGliX3BhdGhbMF0gPT0gJ1wwJykKKwkJZ2V0X3BrZ2xpYl9wYXRoKG15X2V4 ZWNfcGF0aCwgcGtnbGliX3BhdGgpOworfQorCisKKyNpZmRlZiBFWEVDX0JBQ0tFTkQKKwor LyoKKyAqIFRoZSBmb2xsb3dpbmcgbmVlZCB0byBiZSBhdmFpbGFibGUgdG8gdGhlIHNhdmUv cmVzdG9yZV9iYWNrZW5kX3ZhcmlhYmxlcworICogZnVuY3Rpb25zLiAgVGhleSBhcmUgbWFy a2VkIE5PTl9FWEVDX1NUQVRJQyBpbiB0aGVpciBob21lIG1vZHVsZXMuCisgKi8KK2V4dGVy biBzbG9ja190ICpTaG1lbUxvY2s7CitleHRlcm4gc2xvY2tfdCAqUHJvY1N0cnVjdExvY2s7 CitleHRlcm4gUEdQUk9DICpBdXhpbGlhcnlQcm9jczsKK2V4dGVybiBQTVNpZ25hbERhdGEg KlBNU2lnbmFsU3RhdGU7CitleHRlcm4gcGdfdGltZV90IGZpcnN0X3N5c2xvZ2dlcl9maWxl X3RpbWU7CitleHRlcm4gc3RydWN0IGJrZW5kICpTaG1lbUJhY2tlbmRBcnJheTsKK2V4dGVy biBib29sIHJlZGlyZWN0aW9uX2RvbmU7CisKKyNpZm5kZWYgV0lOMzIKKyNkZWZpbmUgd3Jp dGVfaW5oZXJpdGFibGVfc29ja2V0KGRlc3QsIHNyYywgY2hpbGRwaWQpICgoKihkZXN0KSA9 IChzcmMpKSwgdHJ1ZSkKKyNkZWZpbmUgcmVhZF9pbmhlcml0YWJsZV9zb2NrZXQoZGVzdCwg c3JjKSAoKihkZXN0KSA9ICooc3JjKSkKKyNlbHNlCitzdGF0aWMgYm9vbCB3cml0ZV9kdXBs aWNhdGVkX2hhbmRsZShIQU5ETEUgKmRlc3QsIEhBTkRMRSBzcmMsIEhBTkRMRSBjaGlsZCk7 CitzdGF0aWMgYm9vbCB3cml0ZV9pbmhlcml0YWJsZV9zb2NrZXQoSW5oZXJpdGFibGVTb2Nr ZXQgKmRlc3QsIFNPQ0tFVCBzcmMsCisJCQkJCQkJCQkgcGlkX3QgY2hpbGRQaWQpOworc3Rh dGljIHZvaWQgcmVhZF9pbmhlcml0YWJsZV9zb2NrZXQoU09DS0VUICpkZXN0LCBJbmhlcml0 YWJsZVNvY2tldCAqc3JjKTsKKyNlbmRpZgorCisKKy8qIFNhdmUgY3JpdGljYWwgYmFja2Vu ZCB2YXJpYWJsZXMgaW50byB0aGUgQmFja2VuZFBhcmFtZXRlcnMgc3RydWN0ICovCisjaWZu ZGVmIFdJTjMyCitzdGF0aWMgYm9vbAorc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5k UGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spCisjZWxzZQor c3RhdGljIGJvb2wKK3NhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMg KnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLAorCQkJCQkgICBIQU5ETEUgY2hp bGRQcm9jZXNzLCBwaWRfdCBjaGlsZFBpZCkKKyNlbmRpZgoreworCWlmIChjbGllbnRfc29j aykKKwkJbWVtY3B5KCZwYXJhbS0+Y2xpZW50X3NvY2ssIGNsaWVudF9zb2NrLCBzaXplb2Yo Q2xpZW50U29ja2V0KSk7CisJZWxzZQorCQltZW1zZXQoJnBhcmFtLT5jbGllbnRfc29jaywg MCwgc2l6ZW9mKENsaWVudFNvY2tldCkpOworCWlmICghd3JpdGVfaW5oZXJpdGFibGVfc29j a2V0KCZwYXJhbS0+aW5oX3NvY2ssCisJCQkJCQkJCSAgY2xpZW50X3NvY2sgPyBjbGllbnRf c29jay0+c29jayA6IFBHSU5WQUxJRF9TT0NLRVQsCisJCQkJCQkJCSAgY2hpbGRQaWQpKQor CQlyZXR1cm4gZmFsc2U7CisKKwlzdHJsY3B5KHBhcmFtLT5EYXRhRGlyLCBEYXRhRGlyLCBN QVhQR1BBVEgpOworCisJcGFyYW0tPk15Q2FuY2VsS2V5ID0gTXlDYW5jZWxLZXk7CisJcGFy YW0tPk15UE1DaGlsZFNsb3QgPSBNeVBNQ2hpbGRTbG90OworCisjaWZkZWYgV0lOMzIKKwlw YXJhbS0+U2htZW1Qcm90ZWN0aXZlUmVnaW9uID0gU2htZW1Qcm90ZWN0aXZlUmVnaW9uOwor I2VuZGlmCisJcGFyYW0tPlVzZWRTaG1lbVNlZ0lEID0gVXNlZFNobWVtU2VnSUQ7CisJcGFy YW0tPlVzZWRTaG1lbVNlZ0FkZHIgPSBVc2VkU2htZW1TZWdBZGRyOworCisJcGFyYW0tPlNo bWVtTG9jayA9IFNobWVtTG9jazsKKwlwYXJhbS0+U2htZW1WYXJpYWJsZUNhY2hlID0gU2ht ZW1WYXJpYWJsZUNhY2hlOworCXBhcmFtLT5TaG1lbUJhY2tlbmRBcnJheSA9IFNobWVtQmFj a2VuZEFycmF5OworCisjaWZuZGVmIEhBVkVfU1BJTkxPQ0tTCisJcGFyYW0tPlNwaW5sb2Nr U2VtYUFycmF5ID0gU3BpbmxvY2tTZW1hQXJyYXk7CisjZW5kaWYKKwlwYXJhbS0+TmFtZWRM V0xvY2tUcmFuY2hlUmVxdWVzdHMgPSBOYW1lZExXTG9ja1RyYW5jaGVSZXF1ZXN0czsKKwlw YXJhbS0+TmFtZWRMV0xvY2tUcmFuY2hlQXJyYXkgPSBOYW1lZExXTG9ja1RyYW5jaGVBcnJh eTsKKwlwYXJhbS0+TWFpbkxXTG9ja0FycmF5ID0gTWFpbkxXTG9ja0FycmF5OworCXBhcmFt LT5Qcm9jU3RydWN0TG9jayA9IFByb2NTdHJ1Y3RMb2NrOworCXBhcmFtLT5Qcm9jR2xvYmFs ID0gUHJvY0dsb2JhbDsKKwlwYXJhbS0+QXV4aWxpYXJ5UHJvY3MgPSBBdXhpbGlhcnlQcm9j czsKKwlwYXJhbS0+UHJlcGFyZWRYYWN0UHJvY3MgPSBQcmVwYXJlZFhhY3RQcm9jczsKKwlw YXJhbS0+UE1TaWduYWxTdGF0ZSA9IFBNU2lnbmFsU3RhdGU7CisKKwlwYXJhbS0+UG9zdG1h c3RlclBpZCA9IFBvc3RtYXN0ZXJQaWQ7CisJcGFyYW0tPlBnU3RhcnRUaW1lID0gUGdTdGFy dFRpbWU7CisJcGFyYW0tPlBnUmVsb2FkVGltZSA9IFBnUmVsb2FkVGltZTsKKwlwYXJhbS0+ Zmlyc3Rfc3lzbG9nZ2VyX2ZpbGVfdGltZSA9IGZpcnN0X3N5c2xvZ2dlcl9maWxlX3RpbWU7 CisKKwlwYXJhbS0+cmVkaXJlY3Rpb25fZG9uZSA9IHJlZGlyZWN0aW9uX2RvbmU7CisJcGFy YW0tPklzQmluYXJ5VXBncmFkZSA9IElzQmluYXJ5VXBncmFkZTsKKwlwYXJhbS0+cXVlcnlf aWRfZW5hYmxlZCA9IHF1ZXJ5X2lkX2VuYWJsZWQ7CisJcGFyYW0tPm1heF9zYWZlX2ZkcyA9 IG1heF9zYWZlX2ZkczsKKworCXBhcmFtLT5NYXhCYWNrZW5kcyA9IE1heEJhY2tlbmRzOwor CisjaWZkZWYgV0lOMzIKKwlwYXJhbS0+UG9zdG1hc3RlckhhbmRsZSA9IFBvc3RtYXN0ZXJI YW5kbGU7CisJaWYgKCF3cml0ZV9kdXBsaWNhdGVkX2hhbmRsZSgmcGFyYW0tPmluaXRpYWxf c2lnbmFsX3BpcGUsCisJCQkJCQkJCSBwZ3dpbjMyX2NyZWF0ZV9zaWduYWxfbGlzdGVuZXIo Y2hpbGRQaWQpLAorCQkJCQkJCQkgY2hpbGRQcm9jZXNzKSkKKwkJcmV0dXJuIGZhbHNlOwor I2Vsc2UKKwltZW1jcHkoJnBhcmFtLT5wb3N0bWFzdGVyX2FsaXZlX2ZkcywgJnBvc3RtYXN0 ZXJfYWxpdmVfZmRzLAorCQkgICBzaXplb2YocG9zdG1hc3Rlcl9hbGl2ZV9mZHMpKTsKKyNl bmRpZgorCisJbWVtY3B5KCZwYXJhbS0+c3lzbG9nUGlwZSwgJnN5c2xvZ1BpcGUsIHNpemVv ZihzeXNsb2dQaXBlKSk7CisKKwlzdHJsY3B5KHBhcmFtLT5teV9leGVjX3BhdGgsIG15X2V4 ZWNfcGF0aCwgTUFYUEdQQVRIKTsKKworCXN0cmxjcHkocGFyYW0tPnBrZ2xpYl9wYXRoLCBw a2dsaWJfcGF0aCwgTUFYUEdQQVRIKTsKKworCXJldHVybiB0cnVlOworfQorCisKKyNpZmRl ZiBXSU4zMgorLyoKKyAqIER1cGxpY2F0ZSBhIGhhbmRsZSBmb3IgdXNhZ2UgaW4gYSBjaGls ZCBwcm9jZXNzLCBhbmQgd3JpdGUgdGhlIGNoaWxkCisgKiBwcm9jZXNzIGluc3RhbmNlIG9m IHRoZSBoYW5kbGUgdG8gdGhlIHBhcmFtZXRlciBmaWxlLgorICovCitzdGF0aWMgYm9vbAor d3JpdGVfZHVwbGljYXRlZF9oYW5kbGUoSEFORExFICpkZXN0LCBIQU5ETEUgc3JjLCBIQU5E TEUgY2hpbGRQcm9jZXNzKQoreworCUhBTkRMRQkJaENoaWxkID0gSU5WQUxJRF9IQU5ETEVf VkFMVUU7CisKKwlpZiAoIUR1cGxpY2F0ZUhhbmRsZShHZXRDdXJyZW50UHJvY2VzcygpLAor CQkJCQkJIHNyYywKKwkJCQkJCSBjaGlsZFByb2Nlc3MsCisJCQkJCQkgJmhDaGlsZCwKKwkJ CQkJCSAwLAorCQkJCQkJIFRSVUUsCisJCQkJCQkgRFVQTElDQVRFX0NMT1NFX1NPVVJDRSB8 IERVUExJQ0FURV9TQU1FX0FDQ0VTUykpCisJeworCQllcmVwb3J0KExPRywKKwkJCQkoZXJy bXNnX2ludGVybmFsKCJjb3VsZCBub3QgZHVwbGljYXRlIGhhbmRsZSB0byBiZSB3cml0dGVu IHRvIGJhY2tlbmQgcGFyYW1ldGVyIGZpbGU6IGVycm9yIGNvZGUgJWx1IiwKKwkJCQkJCQkJ IEdldExhc3RFcnJvcigpKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJKmRlc3QgPSBo Q2hpbGQ7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBEdXBsaWNhdGUgYSBzb2NrZXQg Zm9yIHVzYWdlIGluIGEgY2hpbGQgcHJvY2VzcywgYW5kIHdyaXRlIHRoZSByZXN1bHRpbmcK KyAqIHN0cnVjdHVyZSB0byB0aGUgcGFyYW1ldGVyIGZpbGUuCisgKiBUaGlzIGlzIHJlcXVp cmVkIGJlY2F1c2UgYSBudW1iZXIgb2YgTFNQcyAoTGF5ZXJlZCBTZXJ2aWNlIFByb3ZpZGVy cykgdmVyeQorICogY29tbW9uIG9uIFdpbmRvd3MgKGFudGl2aXJ1cywgZmlyZXdhbGxzLCBk b3dubG9hZCBtYW5hZ2VycyBldGMpIGJyZWFrCisgKiBzdHJhaWdodCBzb2NrZXQgaW5oZXJp dGFuY2UuCisgKi8KK3N0YXRpYyBib29sCit3cml0ZV9pbmhlcml0YWJsZV9zb2NrZXQoSW5o ZXJpdGFibGVTb2NrZXQgKmRlc3QsIFNPQ0tFVCBzcmMsIHBpZF90IGNoaWxkcGlkKQorewor CWRlc3QtPm9yaWdzb2NrZXQgPSBzcmM7CisJaWYgKHNyYyAhPSAwICYmIHNyYyAhPSBQR0lO VkFMSURfU09DS0VUKQorCXsKKwkJLyogQWN0dWFsIHNvY2tldCAqLworCQlpZiAoV1NBRHVw bGljYXRlU29ja2V0KHNyYywgY2hpbGRwaWQsICZkZXN0LT53c2FpbmZvKSAhPSAwKQorCQl7 CisJCQllcmVwb3J0KExPRywKKwkJCQkJKGVycm1zZygiY291bGQgbm90IGR1cGxpY2F0ZSBz b2NrZXQgJWQgZm9yIHVzZSBpbiBiYWNrZW5kOiBlcnJvciBjb2RlICVkIiwKKwkJCQkJCQko aW50KSBzcmMsIFdTQUdldExhc3RFcnJvcigpKSkpOworCQkJcmV0dXJuIGZhbHNlOworCQl9 CisJfQorCXJldHVybiB0cnVlOworfQorCisvKgorICogUmVhZCBhIGR1cGxpY2F0ZSBzb2Nr ZXQgc3RydWN0dXJlIGJhY2ssIGFuZCBnZXQgdGhlIHNvY2tldCBkZXNjcmlwdG9yLgorICov CitzdGF0aWMgdm9pZAorcmVhZF9pbmhlcml0YWJsZV9zb2NrZXQoU09DS0VUICpkZXN0LCBJ bmhlcml0YWJsZVNvY2tldCAqc3JjKQoreworCVNPQ0tFVAkJczsKKworCWlmIChzcmMtPm9y aWdzb2NrZXQgPT0gUEdJTlZBTElEX1NPQ0tFVCB8fCBzcmMtPm9yaWdzb2NrZXQgPT0gMCkK Kwl7CisJCS8qIE5vdCBhIHJlYWwgc29ja2V0ISAqLworCQkqZGVzdCA9IHNyYy0+b3JpZ3Nv Y2tldDsKKwl9CisJZWxzZQorCXsKKwkJLyogQWN0dWFsIHNvY2tldCwgc28gY3JlYXRlIGZy b20gc3RydWN0dXJlICovCisJCXMgPSBXU0FTb2NrZXQoRlJPTV9QUk9UT0NPTF9JTkZPLAor CQkJCQkgIEZST01fUFJPVE9DT0xfSU5GTywKKwkJCQkJICBGUk9NX1BST1RPQ09MX0lORk8s CisJCQkJCSAgJnNyYy0+d3NhaW5mbywKKwkJCQkJICAwLAorCQkJCQkgIDApOworCQlpZiAo cyA9PSBJTlZBTElEX1NPQ0tFVCkKKwkJeworCQkJd3JpdGVfc3RkZXJyKCJjb3VsZCBub3Qg Y3JlYXRlIGluaGVyaXRlZCBzb2NrZXQ6IGVycm9yIGNvZGUgJWRcbiIsCisJCQkJCQkgV1NB R2V0TGFzdEVycm9yKCkpOworCQkJZXhpdCgxKTsKKwkJfQorCQkqZGVzdCA9IHM7CisKKwkJ LyoKKwkJICogVG8gbWFrZSBzdXJlIHdlIGRvbid0IGdldCB0d28gcmVmZXJlbmNlcyB0byB0 aGUgc2FtZSBzb2NrZXQsIGNsb3NlCisJCSAqIHRoZSBvcmlnaW5hbCBvbmUuIChUaGlzIHdv dWxkIGhhcHBlbiB3aGVuIGluaGVyaXRhbmNlIGFjdHVhbGx5CisJCSAqIHdvcmtzLi4KKwkJ ICovCisJCWNsb3Nlc29ja2V0KHNyYy0+b3JpZ3NvY2tldCk7CisJfQorfQorI2VuZGlmCisK K3N0YXRpYyB2b2lkCityZWFkX2JhY2tlbmRfdmFyaWFibGVzKGNoYXIgKmlkLCBjaGFyICoq c3RhcnR1cF9kYXRhLCBzaXplX3QgKnN0YXJ0dXBfZGF0YV9sZW4pCit7CisJQmFja2VuZFBh cmFtZXRlcnMgcGFyYW07CisKKyNpZm5kZWYgV0lOMzIKKwkvKiBOb24td2luMzIgaW1wbGVt ZW50YXRpb24gcmVhZHMgZnJvbSBmaWxlICovCisJRklMRQkgICAqZnA7CisKKwkvKiBPcGVu IGZpbGUgKi8KKwlmcCA9IEFsbG9jYXRlRmlsZShpZCwgUEdfQklOQVJZX1IpOworCWlmICgh ZnApCisJeworCQl3cml0ZV9zdGRlcnIoImNvdWxkIG5vdCBvcGVuIGJhY2tlbmQgdmFyaWFi bGVzIGZpbGUgXCIlc1wiOiAlc1xuIiwKKwkJCQkJIGlkLCBzdHJlcnJvcihlcnJubykpOwor CQlleGl0KDEpOworCX0KKworCWlmIChmcmVhZCgmcGFyYW0sIHNpemVvZihwYXJhbSksIDEs IGZwKSAhPSAxKQorCXsKKwkJd3JpdGVfc3RkZXJyKCJjb3VsZCBub3QgcmVhZCBmcm9tIGJh Y2tlbmQgdmFyaWFibGVzIGZpbGUgXCIlc1wiOiAlc1xuIiwKKwkJCQkJIGlkLCBzdHJlcnJv cihlcnJubykpOworCQlleGl0KDEpOworCX0KKworCS8qIHJlYWQgc3RhcnR1cCBkYXRhICov CisJaWYgKGZyZWFkKChjaGFyICopIHN0YXJ0dXBfZGF0YV9sZW4sIHNpemVvZihzaXplX3Qp LCAxLCBmcCkgIT0gMSkKKwl7CisJCXdyaXRlX3N0ZGVycigiY291bGQgbm90IHJlYWQgbGVu IGZyb20gYmFja2VuZCB2YXJpYWJsZXMgZmlsZSBcIiVzXCI6ICVzXG4iLAorCQkJCQkgaWQs IHN0cmVycm9yKGVycm5vKSk7CisJCWV4aXQoMSk7CisJfQorCWlmICgqc3RhcnR1cF9kYXRh X2xlbiA+IDApCisJeworCQkqc3RhcnR1cF9kYXRhID0gcGFsbG9jKCpzdGFydHVwX2RhdGFf bGVuKTsKKwkJaWYgKGZyZWFkKCpzdGFydHVwX2RhdGEsICpzdGFydHVwX2RhdGFfbGVuLCAx LCBmcCkgIT0gMSkKKwkJeworCQkJd3JpdGVfc3RkZXJyKCJjb3VsZCBub3QgcmVhZCBzdGFy dHVwIGRhdGEgZnJvbSBiYWNrZW5kIHZhcmlhYmxlcyBmaWxlIFwiJXNcIjogJXNcbiIsCisJ CQkJCQkgaWQsIHN0cmVycm9yKGVycm5vKSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCWVs c2UKKwkJKnN0YXJ0dXBfZGF0YSA9IE5VTEw7CisKKwkvKiBSZWxlYXNlIGZpbGUgKi8KKwlG cmVlRmlsZShmcCk7CisJaWYgKHVubGluayhpZCkgIT0gMCkKKwl7CisJCXdyaXRlX3N0ZGVy cigiY291bGQgbm90IHJlbW92ZSBmaWxlIFwiJXNcIjogJXNcbiIsCisJCQkJCSBpZCwgc3Ry ZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgxKTsKKwl9CisjZWxzZQorCS8qIFdpbjMyIHZlcnNp b24gdXNlcyBtYXBwZWQgZmlsZSAqLworCUhBTkRMRQkJcGFyYW1IYW5kbGU7CisJQmFja2Vu ZFBhcmFtZXRlcnMgKnBhcmFtcDsKKworI2lmZGVmIF9XSU42NAorCXBhcmFtSGFuZGxlID0g KEhBTkRMRSkgX2F0b2k2NChpZCk7CisjZWxzZQorCXBhcmFtSGFuZGxlID0gKEhBTkRMRSkg YXRvbChpZCk7CisjZW5kaWYKKwlwYXJhbXAgPSBNYXBWaWV3T2ZGaWxlKHBhcmFtSGFuZGxl LCBGSUxFX01BUF9SRUFELCAwLCAwLCAwKTsKKwlpZiAoIXBhcmFtcCkKKwl7CisJCXdyaXRl X3N0ZGVycigiY291bGQgbm90IG1hcCB2aWV3IG9mIGJhY2tlbmQgdmFyaWFibGVzOiBlcnJv ciBjb2RlICVsdVxuIiwKKwkJCQkJIEdldExhc3RFcnJvcigpKTsKKwkJZXhpdCgxKTsKKwl9 CisKKwltZW1jcHkoJnBhcmFtLCBwYXJhbXAsIHNpemVvZihCYWNrZW5kUGFyYW1ldGVycykp OworCisJLyogWFhYOiByZWFkIHN0YXJ0dXAgZGF0YSAqLworCisJaWYgKCFVbm1hcFZpZXdP ZkZpbGUocGFyYW1wKSkKKwl7CisJCXdyaXRlX3N0ZGVycigiY291bGQgbm90IHVubWFwIHZp ZXcgb2YgYmFja2VuZCB2YXJpYWJsZXM6IGVycm9yIGNvZGUgJWx1XG4iLAorCQkJCQkgR2V0 TGFzdEVycm9yKCkpOworCQlleGl0KDEpOworCX0KKworCWlmICghQ2xvc2VIYW5kbGUocGFy YW1IYW5kbGUpKQorCXsKKwkJd3JpdGVfc3RkZXJyKCJjb3VsZCBub3QgY2xvc2UgaGFuZGxl IHRvIGJhY2tlbmQgcGFyYW1ldGVyIHZhcmlhYmxlczogZXJyb3IgY29kZSAlbHVcbiIsCisJ CQkJCSBHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoMSk7CisJfQorI2VuZGlmCisKKwlyZXN0 b3JlX2JhY2tlbmRfdmFyaWFibGVzKCZwYXJhbSk7Cit9CisKKy8qIFJlc3RvcmUgY3JpdGlj YWwgYmFja2VuZCB2YXJpYWJsZXMgZnJvbSB0aGUgQmFja2VuZFBhcmFtZXRlcnMgc3RydWN0 ICovCitzdGF0aWMgdm9pZAorcmVzdG9yZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFy YW1ldGVycyAqcGFyYW0pCit7CisJaWYgKHBhcmFtLT5jbGllbnRfc29jay5zb2NrICE9IFBH SU5WQUxJRF9TT0NLRVQpCisJeworCQlNeUNsaWVudFNvY2tldCA9IE1lbW9yeUNvbnRleHRB bGxvYyhUb3BNZW1vcnlDb250ZXh0LCBzaXplb2YoQ2xpZW50U29ja2V0KSk7CisJCW1lbWNw eShNeUNsaWVudFNvY2tldCwgJnBhcmFtLT5jbGllbnRfc29jaywgc2l6ZW9mKENsaWVudFNv Y2tldCkpOworCQlyZWFkX2luaGVyaXRhYmxlX3NvY2tldCgmTXlDbGllbnRTb2NrZXQtPnNv Y2ssICZwYXJhbS0+aW5oX3NvY2spOworCX0KKworCVNldERhdGFEaXIocGFyYW0tPkRhdGFE aXIpOworCisJTXlDYW5jZWxLZXkgPSBwYXJhbS0+TXlDYW5jZWxLZXk7CisJTXlQTUNoaWxk U2xvdCA9IHBhcmFtLT5NeVBNQ2hpbGRTbG90OworCisjaWZkZWYgV0lOMzIKKwlTaG1lbVBy b3RlY3RpdmVSZWdpb24gPSBwYXJhbS0+U2htZW1Qcm90ZWN0aXZlUmVnaW9uOworI2VuZGlm CisJVXNlZFNobWVtU2VnSUQgPSBwYXJhbS0+VXNlZFNobWVtU2VnSUQ7CisJVXNlZFNobWVt U2VnQWRkciA9IHBhcmFtLT5Vc2VkU2htZW1TZWdBZGRyOworCisJU2htZW1Mb2NrID0gcGFy YW0tPlNobWVtTG9jazsKKwlTaG1lbVZhcmlhYmxlQ2FjaGUgPSBwYXJhbS0+U2htZW1WYXJp YWJsZUNhY2hlOworCVNobWVtQmFja2VuZEFycmF5ID0gcGFyYW0tPlNobWVtQmFja2VuZEFy cmF5OworCisjaWZuZGVmIEhBVkVfU1BJTkxPQ0tTCisJU3BpbmxvY2tTZW1hQXJyYXkgPSBw YXJhbS0+U3BpbmxvY2tTZW1hQXJyYXk7CisjZW5kaWYKKwlOYW1lZExXTG9ja1RyYW5jaGVS ZXF1ZXN0cyA9IHBhcmFtLT5OYW1lZExXTG9ja1RyYW5jaGVSZXF1ZXN0czsKKwlOYW1lZExX TG9ja1RyYW5jaGVBcnJheSA9IHBhcmFtLT5OYW1lZExXTG9ja1RyYW5jaGVBcnJheTsKKwlN YWluTFdMb2NrQXJyYXkgPSBwYXJhbS0+TWFpbkxXTG9ja0FycmF5OworCVByb2NTdHJ1Y3RM b2NrID0gcGFyYW0tPlByb2NTdHJ1Y3RMb2NrOworCVByb2NHbG9iYWwgPSBwYXJhbS0+UHJv Y0dsb2JhbDsKKwlBdXhpbGlhcnlQcm9jcyA9IHBhcmFtLT5BdXhpbGlhcnlQcm9jczsKKwlQ cmVwYXJlZFhhY3RQcm9jcyA9IHBhcmFtLT5QcmVwYXJlZFhhY3RQcm9jczsKKwlQTVNpZ25h bFN0YXRlID0gcGFyYW0tPlBNU2lnbmFsU3RhdGU7CisKKwlQb3N0bWFzdGVyUGlkID0gcGFy YW0tPlBvc3RtYXN0ZXJQaWQ7CisJUGdTdGFydFRpbWUgPSBwYXJhbS0+UGdTdGFydFRpbWU7 CisJUGdSZWxvYWRUaW1lID0gcGFyYW0tPlBnUmVsb2FkVGltZTsKKwlmaXJzdF9zeXNsb2dn ZXJfZmlsZV90aW1lID0gcGFyYW0tPmZpcnN0X3N5c2xvZ2dlcl9maWxlX3RpbWU7CisKKwly ZWRpcmVjdGlvbl9kb25lID0gcGFyYW0tPnJlZGlyZWN0aW9uX2RvbmU7CisJSXNCaW5hcnlV cGdyYWRlID0gcGFyYW0tPklzQmluYXJ5VXBncmFkZTsKKwlxdWVyeV9pZF9lbmFibGVkID0g cGFyYW0tPnF1ZXJ5X2lkX2VuYWJsZWQ7CisJbWF4X3NhZmVfZmRzID0gcGFyYW0tPm1heF9z YWZlX2ZkczsKKworCU1heEJhY2tlbmRzID0gcGFyYW0tPk1heEJhY2tlbmRzOworCisjaWZk ZWYgV0lOMzIKKwlQb3N0bWFzdGVySGFuZGxlID0gcGFyYW0tPlBvc3RtYXN0ZXJIYW5kbGU7 CisJcGd3aW4zMl9pbml0aWFsX3NpZ25hbF9waXBlID0gcGFyYW0tPmluaXRpYWxfc2lnbmFs X3BpcGU7CisjZWxzZQorCW1lbWNweSgmcG9zdG1hc3Rlcl9hbGl2ZV9mZHMsICZwYXJhbS0+ cG9zdG1hc3Rlcl9hbGl2ZV9mZHMsCisJCSAgIHNpemVvZihwb3N0bWFzdGVyX2FsaXZlX2Zk cykpOworI2VuZGlmCisKKwltZW1jcHkoJnN5c2xvZ1BpcGUsICZwYXJhbS0+c3lzbG9nUGlw ZSwgc2l6ZW9mKHN5c2xvZ1BpcGUpKTsKKworCXN0cmxjcHkobXlfZXhlY19wYXRoLCBwYXJh bS0+bXlfZXhlY19wYXRoLCBNQVhQR1BBVEgpOworCisJc3RybGNweShwa2dsaWJfcGF0aCwg cGFyYW0tPnBrZ2xpYl9wYXRoLCBNQVhQR1BBVEgpOworCisJLyoKKwkgKiBXZSBuZWVkIHRv IHJlc3RvcmUgZmQuYydzIGNvdW50cyBvZiBleHRlcm5hbGx5LW9wZW5lZCBGRHM7IHRvIGF2 b2lkCisJICogY29uZnVzaW9uLCBiZSBzdXJlIHRvIGRvIHRoaXMgYWZ0ZXIgcmVzdG9yaW5n IG1heF9zYWZlX2Zkcy4gIChOb3RlOgorCSAqIEJhY2tlbmRJbml0aWFsaXplIHdpbGwgaGFu ZGxlIHRoaXMgZm9yIGNsaWVudF9zb2NrLT5zb2NrLikKKwkgKi8KKyNpZm5kZWYgV0lOMzIK KwlpZiAocG9zdG1hc3Rlcl9hbGl2ZV9mZHNbMF0gPj0gMCkKKwkJUmVzZXJ2ZUV4dGVybmFs RkQoKTsKKwlpZiAocG9zdG1hc3Rlcl9hbGl2ZV9mZHNbMV0gPj0gMCkKKwkJUmVzZXJ2ZUV4 dGVybmFsRkQoKTsKKyNlbmRpZgorfQorCisjZW5kaWYJCQkJCQkJLyogRVhFQ19CQUNLRU5E ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL21lc29uLmJ1aWxkIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9tZXNvbi5idWlsZAppbmRleCBjZGE5MjFmZDEwYi4u ODlmZjExYmViMGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbWVzb24u YnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9tZXNvbi5idWlsZApAQCAtNiw4 ICs2LDggQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnYmd3b3JrZXIuYycsCiAg ICdiZ3dyaXRlci5jJywKICAgJ2NoZWNrcG9pbnRlci5jJywKLSAgJ2ZvcmtfcHJvY2Vzcy5j JywKICAgJ2ludGVycnVwdC5jJywKKyAgJ2xhdW5jaF9iYWNrZW5kLmMnLAogICAncGdhcmNo LmMnLAogICAncG9zdG1hc3Rlci5jJywKICAgJ3N0YXJ0dXAuYycsCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9wZ2FyY2guYwppbmRleCA0NmFmMzQ5NTY0NC4uYjgyZDY2ZmFiNTIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9wZ2FyY2guYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgImxpYi9iaW5h cnloZWFwLmgiCiAjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRlICJwZ3N0 YXQuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2F1eHByb2Nlc3MuaCIKICNpbmNsdWRlICJw b3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvcGdhcmNoLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgpAQCAtMjExLDggKzIxMiwxNCBAQCBQZ0FyY2hD YW5SZXN0YXJ0KHZvaWQpCiAKIC8qIE1haW4gZW50cnkgcG9pbnQgZm9yIGFyY2hpdmVyIHBy b2Nlc3MgKi8KIHZvaWQKLVBnQXJjaGl2ZXJNYWluKHZvaWQpCitQZ0FyY2hpdmVyTWFpbihj aGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogeworCUFzc2Vy dChzdGFydHVwX2RhdGFfbGVuID09IDApOworCisJTXlBdXhQcm9jVHlwZSA9IEFyY2hpdmVy UHJvY2VzczsKKwlNeUJhY2tlbmRUeXBlID0gQl9BUkNISVZFUjsKKwlBdXhpbGlhcnlQcm9j ZXNzSW5pdCgpOworCiAJLyoKIAkgKiBJZ25vcmUgYWxsIHNpZ25hbHMgdXN1YWxseSBib3Vu ZCB0byBzb21lIGFjdGlvbiBpbiB0aGUgcG9zdG1hc3RlciwKIAkgKiBleGNlcHQgZm9yIFNJ R0hVUCwgU0lHVEVSTSwgU0lHVVNSMSwgU0lHVVNSMiwgYW5kIFNJR1FVSVQuCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCmluZGV4IGI3M2JhOTgzZjNlLi5kYzVjYWMxOTg3 OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKKysr IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKQEAgLTEwOSw3ICsxMDks NiBAQAogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgogI2luY2x1ZGUgInBv c3RtYXN0ZXIvYXV4cHJvY2Vzcy5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXJf aW50ZXJuYWxzLmgiCi0jaW5jbHVkZSAicG9zdG1hc3Rlci9mb3JrX3Byb2Nlc3MuaCIKICNp bmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIv cGdhcmNoLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9wb3N0bWFzdGVyLmgiCkBAIC0xMzEs MTAgKzEzMCw2IEBACiAjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCiAjaW5jbHVkZSAi dXRpbHMvdmFybGVuYS5oIgogCi0jaWZkZWYgRVhFQ19CQUNLRU5ECi0jaW5jbHVkZSAic3Rv cmFnZS9zcGluLmgiCi0jZW5kaWYKLQogCiAvKgogICogUG9zc2libGUgdHlwZXMgb2YgYSBi YWNrZW5kLiBCZXlvbmQgYmVpbmcgdGhlIHBvc3NpYmxlIGJrZW5kX3R5cGUgdmFsdWVzIGlu CkBAIC0xODcsNyArMTgyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgYmtlbmQKIHN0YXRpYyBkbGlz dF9oZWFkIEJhY2tlbmRMaXN0ID0gRExJU1RfU1RBVElDX0lOSVQoQmFja2VuZExpc3QpOwog CiAjaWZkZWYgRVhFQ19CQUNLRU5ECi1zdGF0aWMgQmFja2VuZCAqU2htZW1CYWNrZW5kQXJy YXk7CitCYWNrZW5kICAgICpTaG1lbUJhY2tlbmRBcnJheTsKICNlbmRpZgogCiBCYWNrZ3Jv dW5kV29ya2VyICpNeUJnd29ya2VyRW50cnkgPSBOVUxMOwpAQCAtNDEyLDcgKzQwNyw3IEBA IHN0YXRpYyB2b2lkIFN0YXJ0dXBQYWNrZXRUaW1lb3V0SGFuZGxlcih2b2lkKTsKIHN0YXRp YyB2b2lkIENsZWFudXBCYWNrZW5kKGludCBwaWQsIGludCBleGl0c3RhdHVzKTsKIHN0YXRp YyBib29sIENsZWFudXBCYWNrZ3JvdW5kV29ya2VyKGludCBwaWQsIGludCBleGl0c3RhdHVz KTsKIHN0YXRpYyB2b2lkIEhhbmRsZUNoaWxkQ3Jhc2goaW50IHBpZCwgaW50IGV4aXRzdGF0 dXMsIGNvbnN0IGNoYXIgKnByb2NuYW1lKTsKLXN0YXRpYyB2b2lkIExvZ0NoaWxkRXhpdChp bnQgbGV2LCBjb25zdCBjaGFyICpwcm9jbmFtZSwKK3N0YXRpYyB2b2lkIExvZ0NoaWxkRXhp dChpbnQgbGV2LCBjb25zdCBjaGFyICpwcm9jbmFtQmFja2VuZEluaXRpYWxpemVlLAogCQkJ CQkJIGludCBwaWQsIGludCBleGl0c3RhdHVzKTsKIHN0YXRpYyB2b2lkIFBvc3RtYXN0ZXJT dGF0ZU1hY2hpbmUodm9pZCk7CiAKQEAgLTQyNyw3ICs0MjIsNiBAQCB0eXBlZGVmIGVudW0g Q0FDX3N0YXRlCiB9IENBQ19zdGF0ZTsKIAogc3RhdGljIHZvaWQgQmFja2VuZEluaXRpYWxp emUoQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaywgQ0FDX3N0YXRlIGNhYyk7Ci1zdGF0aWMg dm9pZCBCYWNrZW5kUnVuKHZvaWQpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogc3RhdGlj IHZvaWQgRXhpdFBvc3RtYXN0ZXIoaW50IHN0YXR1cykgcGdfYXR0cmlidXRlX25vcmV0dXJu KCk7CiBzdGF0aWMgaW50CVNlcnZlckxvb3Aodm9pZCk7CiBzdGF0aWMgaW50CUJhY2tlbmRT dGFydHVwKENsaWVudFNvY2tldCAqcG9ydCk7CkBAIC00NDgsNyArNDQyLDcgQEAgc3RhdGlj IGludAlDb3VudENoaWxkcmVuKGludCB0YXJnZXQpOwogc3RhdGljIGJvb2wgYXNzaWduX2Jh Y2tlbmRsaXN0X2VudHJ5KFJlZ2lzdGVyZWRCZ1dvcmtlciAqcncpOwogc3RhdGljIHZvaWQg bWF5YmVfc3RhcnRfYmd3b3JrZXJzKHZvaWQpOwogc3RhdGljIGJvb2wgQ3JlYXRlT3B0c0Zp bGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqZnVsbHByb2duYW1lKTsKLXN0YXRp YyBwaWRfdCBTdGFydENoaWxkUHJvY2VzcyhBdXhQcm9jVHlwZSB0eXBlKTsKK3N0YXRpYyBw aWRfdCBTdGFydENoaWxkUHJvY2VzcyhQb3N0bWFzdGVyQ2hpbGRUeXBlIHR5cGUpOwogc3Rh dGljIHZvaWQgU3RhcnRBdXRvdmFjdXVtV29ya2VyKHZvaWQpOwogc3RhdGljIHZvaWQgTWF5 YmVTdGFydFdhbFJlY2VpdmVyKHZvaWQpOwogc3RhdGljIHZvaWQgSW5pdFBvc3RtYXN0ZXJE ZWF0aFdhdGNoSGFuZGxlKHZvaWQpOwpAQCAtNDgzLDk1ICs0NzcsMTkgQEAgdHlwZWRlZiBz dHJ1Y3QKIH0gd2luMzJfZGVhZGNoaWxkX3dhaXRpbmZvOwogI2VuZGlmCQkJCQkJCS8qIFdJ TjMyICovCiAKLXN0YXRpYyBwaWRfdCBiYWNrZW5kX2ZvcmtleGVjKENsaWVudFNvY2tldCAq Y2xpZW50X3NvY2ssIENBQ19zdGF0ZSBjYWMpOwotc3RhdGljIHBpZF90IGludGVybmFsX2Zv cmtleGVjKGludCBhcmdjLCBjaGFyICphcmd2W10sIENsaWVudFNvY2tldCAqY2xpZW50X3Nv Y2spOwotCi0vKiBUeXBlIGZvciBhIHNvY2tldCB0aGF0IGNhbiBiZSBpbmhlcml0ZWQgdG8g YSBjbGllbnQgcHJvY2VzcyAqLwotI2lmZGVmIFdJTjMyCi10eXBlZGVmIHN0cnVjdAotewot CVNPQ0tFVAkJb3JpZ3NvY2tldDsJCS8qIE9yaWdpbmFsIHNvY2tldCB2YWx1ZSwgb3IgUEdJ TlZBTElEX1NPQ0tFVAotCQkJCQkJCQkgKiBpZiBub3QgYSBzb2NrZXQgKi8KLQlXU0FQUk9U T0NPTF9JTkZPIHdzYWluZm87Ci19IEluaGVyaXRhYmxlU29ja2V0OwotI2Vsc2UKLXR5cGVk ZWYgaW50IEluaGVyaXRhYmxlU29ja2V0OwotI2VuZGlmCi0KLS8qCi0gKiBTdHJ1Y3R1cmUg Y29udGFpbnMgYWxsIHZhcmlhYmxlcyBwYXNzZWQgdG8gZXhlYzplZCBiYWNrZW5kcwotICov Ci10eXBlZGVmIHN0cnVjdAotewotCUNsaWVudFNvY2tldCBjbGllbnRfc29jazsKLQlJbmhl cml0YWJsZVNvY2tldCBzZXJpYWxpemVkX3NvY2s7Ci0JY2hhcgkJRGF0YURpcltNQVhQR1BB VEhdOwotCWludDMyCQlNeUNhbmNlbEtleTsKLQlpbnQJCQlNeVBNQ2hpbGRTbG90OwotI2lm bmRlZiBXSU4zMgotCXVuc2lnbmVkIGxvbmcgVXNlZFNobWVtU2VnSUQ7Ci0jZWxzZQotCXZv aWQJICAgKlNobWVtUHJvdGVjdGl2ZVJlZ2lvbjsKLQlIQU5ETEUJCVVzZWRTaG1lbVNlZ0lE OwotI2VuZGlmCi0Jdm9pZAkgICAqVXNlZFNobWVtU2VnQWRkcjsKLQlzbG9ja190ICAgICpT aG1lbUxvY2s7Ci0JVmFyaWFibGVDYWNoZSBTaG1lbVZhcmlhYmxlQ2FjaGU7Ci0JQmFja2Vu ZCAgICAqU2htZW1CYWNrZW5kQXJyYXk7Ci0jaWZuZGVmIEhBVkVfU1BJTkxPQ0tTCi0JUEdT ZW1hcGhvcmUgKlNwaW5sb2NrU2VtYUFycmF5OwotI2VuZGlmCi0JaW50CQkJTmFtZWRMV0xv Y2tUcmFuY2hlUmVxdWVzdHM7Ci0JTmFtZWRMV0xvY2tUcmFuY2hlICpOYW1lZExXTG9ja1Ry YW5jaGVBcnJheTsKLQlMV0xvY2tQYWRkZWQgKk1haW5MV0xvY2tBcnJheTsKLQlzbG9ja190 ICAgICpQcm9jU3RydWN0TG9jazsKLQlQUk9DX0hEUiAgICpQcm9jR2xvYmFsOwotCVBHUFJP QwkgICAqQXV4aWxpYXJ5UHJvY3M7Ci0JUEdQUk9DCSAgICpQcmVwYXJlZFhhY3RQcm9jczsK LQlQTVNpZ25hbERhdGEgKlBNU2lnbmFsU3RhdGU7Ci0JcGlkX3QJCVBvc3RtYXN0ZXJQaWQ7 Ci0JVGltZXN0YW1wVHogUGdTdGFydFRpbWU7Ci0JVGltZXN0YW1wVHogUGdSZWxvYWRUaW1l OwotCXBnX3RpbWVfdAlmaXJzdF9zeXNsb2dnZXJfZmlsZV90aW1lOwotCWJvb2wJCXJlZGly ZWN0aW9uX2RvbmU7Ci0JYm9vbAkJSXNCaW5hcnlVcGdyYWRlOwotCWJvb2wJCXF1ZXJ5X2lk X2VuYWJsZWQ7Ci0JaW50CQkJbWF4X3NhZmVfZmRzOwotCWludAkJCU1heEJhY2tlbmRzOwot I2lmZGVmIFdJTjMyCi0JSEFORExFCQlQb3N0bWFzdGVySGFuZGxlOwotCUhBTkRMRQkJaW5p dGlhbF9zaWduYWxfcGlwZTsKLQlIQU5ETEUJCXN5c2xvZ1BpcGVbMl07Ci0jZWxzZQotCWlu dAkJCXBvc3RtYXN0ZXJfYWxpdmVfZmRzWzJdOwotCWludAkJCXN5c2xvZ1BpcGVbMl07Ci0j ZW5kaWYKLQljaGFyCQlteV9leGVjX3BhdGhbTUFYUEdQQVRIXTsKLQljaGFyCQlwa2dsaWJf cGF0aFtNQVhQR1BBVEhdOwotCi0JQmFja2dyb3VuZFdvcmtlciBNeUJnd29ya2VyRW50cnk7 Ci19IEJhY2tlbmRQYXJhbWV0ZXJzOwotCi1zdGF0aWMgdm9pZCByZWFkX2JhY2tlbmRfdmFy aWFibGVzKGNoYXIgKmlkLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKTsKLXN0YXRpYyB2 b2lkIHJlc3RvcmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFt LCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKTsKLQotI2lmbmRlZiBXSU4zMgotc3RhdGlj IGJvb2wgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0s IENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spOwotI2Vsc2UKLXN0YXRpYyBib29sIHNhdmVf YmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2Nr ZXQgKmNsaWVudF9zb2NrLAotCQkJCQkJCQkgICBIQU5ETEUgY2hpbGRQcm9jZXNzLCBwaWRf dCBjaGlsZFBpZCk7Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgU2htZW1CYWNrZW5kQXJyYXlB ZGQoQmFja2VuZCAqYm4pOwogc3RhdGljIHZvaWQgU2htZW1CYWNrZW5kQXJyYXlSZW1vdmUo QmFja2VuZCAqYm4pOwogI2VuZGlmCQkJCQkJCS8qIEVYRUNfQkFDS0VORCAqLwogCi0jZGVm aW5lIFN0YXJ0dXBEYXRhQmFzZSgpCQlTdGFydENoaWxkUHJvY2VzcyhTdGFydHVwUHJvY2Vz cykKLSNkZWZpbmUgU3RhcnRBcmNoaXZlcigpCQkJU3RhcnRDaGlsZFByb2Nlc3MoQXJjaGl2 ZXJQcm9jZXNzKQotI2RlZmluZSBTdGFydEJhY2tncm91bmRXcml0ZXIoKSBTdGFydENoaWxk UHJvY2VzcyhCZ1dyaXRlclByb2Nlc3MpCi0jZGVmaW5lIFN0YXJ0Q2hlY2twb2ludGVyKCkJ CVN0YXJ0Q2hpbGRQcm9jZXNzKENoZWNrcG9pbnRlclByb2Nlc3MpCi0jZGVmaW5lIFN0YXJ0 V2FsV3JpdGVyKCkJCVN0YXJ0Q2hpbGRQcm9jZXNzKFdhbFdyaXRlclByb2Nlc3MpCi0jZGVm aW5lIFN0YXJ0V2FsUmVjZWl2ZXIoKQkJU3RhcnRDaGlsZFByb2Nlc3MoV2FsUmVjZWl2ZXJQ cm9jZXNzKQorI2RlZmluZSBTdGFydHVwRGF0YUJhc2UoKQkJU3RhcnRDaGlsZFByb2Nlc3Mo UE1DX1NUQVJUVVApCisjZGVmaW5lIFN0YXJ0QXJjaGl2ZXIoKQkJCVN0YXJ0Q2hpbGRQcm9j ZXNzKFBNQ19BUkNISVZFUikKKyNkZWZpbmUgU3RhcnRCYWNrZ3JvdW5kV3JpdGVyKCkgU3Rh cnRDaGlsZFByb2Nlc3MoUE1DX0JHV1JJVEVSKQorI2RlZmluZSBTdGFydENoZWNrcG9pbnRl cigpCQlTdGFydENoaWxkUHJvY2VzcyhQTUNfQ0hFQ0tQT0lOVEVSKQorI2RlZmluZSBTdGFy dFdhbFdyaXRlcigpCQlTdGFydENoaWxkUHJvY2VzcyhQTUNfV0FMX1dSSVRFUikKKyNkZWZp bmUgU3RhcnRXYWxSZWNlaXZlcigpCQlTdGFydENoaWxkUHJvY2VzcyhQTUNfV0FMX1JFQ0VJ VkVSKQorCisjZGVmaW5lIFN0YXJ0QXV0b1ZhY0xhdW5jaGVyKCkJU3RhcnRDaGlsZFByb2Nl c3MoUE1DX0FWX0xBVU5DSEVSKTsKKyNkZWZpbmUgU3RhcnRBdXRvVmFjV29ya2VyKCkJU3Rh cnRDaGlsZFByb2Nlc3MoUE1DX0FWX1dPUktFUik7CiAKIC8qIE1hY3JvcyB0byBjaGVjayBl eGl0IHN0YXR1cyBvZiBhIGNoaWxkIHByb2Nlc3MgKi8KICNkZWZpbmUgRVhJVF9TVEFUVVNf MChzdCkgICgoc3QpID09IDApCkBAIC0xMTE1LDExICsxMDMzLDExIEBAIFBvc3RtYXN0ZXJN YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkvKgogCSAqIENsZWFuIG91dCB0aGUg dGVtcCBkaXJlY3RvcnkgdXNlZCB0byB0cmFuc21pdCBwYXJhbWV0ZXJzIHRvIGNoaWxkCi0J ICogcHJvY2Vzc2VzIChzZWUgaW50ZXJuYWxfZm9ya2V4ZWMsIGJlbG93KS4gIFdlIG11c3Qg ZG8gdGhpcyBiZWZvcmUKLQkgKiBsYXVuY2hpbmcgYW55IGNoaWxkIHByb2Nlc3NlcywgZWxz ZSB3ZSBoYXZlIGEgcmFjZSBjb25kaXRpb246IHdlIGNvdWxkCi0JICogcmVtb3ZlIGEgcGFy YW1ldGVyIGZpbGUgYmVmb3JlIHRoZSBjaGlsZCBjYW4gcmVhZCBpdC4gIEl0IHNob3VsZCBi ZQotCSAqIHNhZmUgdG8gZG8gc28gbm93LCBiZWNhdXNlIHdlIHZlcmlmaWVkIGVhcmxpZXIg dGhhdCB0aGVyZSBhcmUgbm8KLQkgKiBjb25mbGljdGluZyBQb3N0Z3JlcyBwcm9jZXNzZXMg aW4gdGhpcyBkYXRhIGRpcmVjdG9yeS4KKwkgKiBwcm9jZXNzZXMgKHNlZSBpbnRlcm5hbF9m b3JrZXhlYykuICBXZSBtdXN0IGRvIHRoaXMgYmVmb3JlIGxhdW5jaGluZworCSAqIGFueSBj aGlsZCBwcm9jZXNzZXMsIGVsc2Ugd2UgaGF2ZSBhIHJhY2UgY29uZGl0aW9uOiB3ZSBjb3Vs ZCByZW1vdmUgYQorCSAqIHBhcmFtZXRlciBmaWxlIGJlZm9yZSB0aGUgY2hpbGQgY2FuIHJl YWQgaXQuICBJdCBzaG91bGQgYmUgc2FmZSB0byBkbworCSAqIHNvIG5vdywgYmVjYXVzZSB3 ZSB2ZXJpZmllZCBlYXJsaWVyIHRoYXQgdGhlcmUgYXJlIG5vIGNvbmZsaWN0aW5nCisJICog UG9zdGdyZXMgcHJvY2Vzc2VzIGluIHRoaXMgZGF0YSBkaXJlY3RvcnkuCiAJICovCiAJUmVt b3ZlUGdUZW1wRmlsZXNJbkRpcihQR19URU1QX0ZJTEVTX0RJUiwgdHJ1ZSwgZmFsc2UpOwog I2VuZGlmCkBAIC00MDI5LDYgKzM5NDcsMTEgQEAgVGVybWluYXRlQ2hpbGRyZW4oaW50IHNp Z25hbCkKIAkJc2lnbmFsX2NoaWxkKFBnQXJjaFBJRCwgc2lnbmFsKTsKIH0KIAordHlwZWRl ZiBzdHJ1Y3QgQmFja2VuZFN0YXJ0dXBJbmZvCit7CisJYm9vbAkJY2FuQWNjZXB0Q29ubmVj dGlvbnM7Cit9CQkJQmFja2VuZFN0YXJ0dXBJbmZvOworCiAvKgogICogQmFja2VuZFN0YXJ0 dXAgLS0gc3RhcnQgYmFja2VuZCBwcm9jZXNzCiAgKgpAQCAtNDA0MSw3ICszOTY0LDcgQEAg QmFja2VuZFN0YXJ0dXAoQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaykKIHsKIAlCYWNrZW5k ICAgICpibjsJCQkJLyogZm9yIGJhY2tlbmQgY2xlYW51cCAqLwogCXBpZF90CQlwaWQ7Ci0J Q0FDX3N0YXRlCWNhYzsKKwlCYWNrZW5kU3RhcnR1cEluZm8gaW5mbzsKIAogCS8qCiAJICog Q3JlYXRlIGJhY2tlbmQgZGF0YSBzdHJ1Y3R1cmUuICBCZXR0ZXIgYmVmb3JlIHRoZSBmb3Jr KCkgc28gd2UgY2FuCkBAIC00MDcwLDExICszOTkzLDkgQEAgQmFja2VuZFN0YXJ0dXAoQ2xp ZW50U29ja2V0ICpjbGllbnRfc29jaykKIAkJcmV0dXJuIFNUQVRVU19FUlJPUjsKIAl9CiAK LQlibi0+Y2FuY2VsX2tleSA9IE15Q2FuY2VsS2V5OwotCiAJLyogUGFzcyBkb3duIGNhbkFj Y2VwdENvbm5lY3Rpb25zIHN0YXRlICovCi0JY2FjID0gY2FuQWNjZXB0Q29ubmVjdGlvbnMo QkFDS0VORF9UWVBFX05PUk1BTCk7Ci0JYm4tPmRlYWRfZW5kID0gKGNhYyAhPSBDQUNfT0sp OworCWluZm8uY2FuQWNjZXB0Q29ubmVjdGlvbnMgPSBjYW5BY2NlcHRDb25uZWN0aW9ucyhC QUNLRU5EX1RZUEVfTk9STUFMKTsKKwlibi0+Y2FuY2VsX2tleSA9IE15Q2FuY2VsS2V5Owog CiAJLyoKIAkgKiBVbmxlc3MgaXQncyBhIGRlYWRfZW5kIGNoaWxkLCBhc3NpZ24gaXQgYSBj aGlsZCBzbG90IG51bWJlcgpAQCAtNDA4NywyNiArNDAwOCw3IEBAIEJhY2tlbmRTdGFydHVw KENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spCiAJLyogSGFzbid0IGFza2VkIHRvIGJlIG5v dGlmaWVkIGFib3V0IGFueSBiZ3dvcmtlcnMgeWV0ICovCiAJYm4tPmJnd29ya2VyX25vdGlm eSA9IGZhbHNlOwogCi0jaWZkZWYgRVhFQ19CQUNLRU5ECi0JcGlkID0gYmFja2VuZF9mb3Jr ZXhlYyhjbGllbnRfc29jaywgY2FjKTsKLSNlbHNlCQkJCQkJCS8qICFFWEVDX0JBQ0tFTkQg Ki8KLQlwaWQgPSBmb3JrX3Byb2Nlc3MoKTsKLQlpZiAocGlkID09IDApCQkJCS8qIGNoaWxk ICovCi0JewotCQkvKiBEZXRhbmdsZSBmcm9tIHBvc3RtYXN0ZXIgKi8KLQkJSW5pdFBvc3Rt YXN0ZXJDaGlsZCgpOwotCi0JCS8qIENsb3NlIHRoZSBwb3N0bWFzdGVyJ3Mgc29ja2V0cyAq LwotCQlDbG9zZVBvc3RtYXN0ZXJQb3J0cyhmYWxzZSk7Ci0KLQkJLyogUGVyZm9ybSBhZGRp dGlvbmFsIGluaXRpYWxpemF0aW9uIGFuZCBjb2xsZWN0IHN0YXJ0dXAgcGFja2V0ICovCi0J CUJhY2tlbmRJbml0aWFsaXplKGNsaWVudF9zb2NrLCBjYWMpOwotCi0JCS8qIEFuZCBydW4g dGhlIGJhY2tlbmQgKi8KLQkJQmFja2VuZFJ1bigpOwotCX0KLSNlbmRpZgkJCQkJCQkvKiBF WEVDX0JBQ0tFTkQgKi8KLQorCXBpZCA9IHBvc3RtYXN0ZXJfY2hpbGRfbGF1bmNoKFBNQ19C QUNLRU5ELCAoY2hhciAqKSAmaW5mbywgc2l6ZW9mKGluZm8pLCBjbGllbnRfc29jayk7CiAJ aWYgKHBpZCA8IDApCiAJewogCQkvKiBpbiBwYXJlbnQsIGZvcmsgZmFpbGVkICovCkBAIC00 MTQzLDYgKzQwNDUsNjMgQEAgQmFja2VuZFN0YXJ0dXAoQ2xpZW50U29ja2V0ICpjbGllbnRf c29jaykKIAlyZXR1cm4gU1RBVFVTX09LOwogfQogCit2b2lkCitCYWNrZW5kTWFpbihjaGFy ICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQoreworCUJhY2tlbmRT dGFydHVwSW5mbyAqaW5mbyA9IChCYWNrZW5kU3RhcnR1cEluZm8gKikgc3RhcnR1cF9kYXRh OworCisJQXNzZXJ0KHN0YXJ0dXBfZGF0YV9sZW4gPT0gc2l6ZW9mKEJhY2tlbmRTdGFydHVw SW5mbykpOworCUFzc2VydChNeUNsaWVudFNvY2tldCAhPSBOVUxMKTsKKworI2lmZGVmIEVY RUNfQkFDS0VORAorCisJLyoKKwkgKiBOZWVkIHRvIHJlaW5pdGlhbGl6ZSB0aGUgU1NMIGxp YnJhcnkgaW4gdGhlIGJhY2tlbmQsIHNpbmNlIHRoZSBjb250ZXh0CisJICogc3RydWN0dXJl cyBjb250YWluIGZ1bmN0aW9uIHBvaW50ZXJzIGFuZCBjYW5ub3QgYmUgcGFzc2VkIHRocm91 Z2ggdGhlCisJICogcGFyYW1ldGVyIGZpbGUuCisJICoKKwkgKiBJZiBmb3Igc29tZSByZWFz b24gcmVsb2FkIGZhaWxzIChtYXliZSB0aGUgdXNlciBpbnN0YWxsZWQgYnJva2VuIGtleQor CSAqIGZpbGVzKSwgc29sZGllciBvbiB3aXRob3V0IFNTTDsgdGhhdCdzIGJldHRlciB0aGFu IGFsbCBjb25uZWN0aW9ucworCSAqIGJlY29taW5nIGltcG9zc2libGUuCisJICoKKwkgKiBY WFggc2hvdWxkIHdlIGRvIHRoaXMgaW4gYWxsIGNoaWxkIHByb2Nlc3Nlcz8gIEZvciB0aGUg bW9tZW50IGl0J3MKKwkgKiBlbm91Z2ggdG8gZG8gaXQgaW4gYmFja2VuZCBjaGlsZHJlbi4K KwkgKi8KKyNpZmRlZiBVU0VfU1NMCisJaWYgKEVuYWJsZVNTTCkKKwl7CisJCWlmIChzZWN1 cmVfaW5pdGlhbGl6ZShmYWxzZSkgPT0gMCkKKwkJCUxvYWRlZFNTTCA9IHRydWU7CisJCWVs c2UKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQkoZXJybXNnKCJTU0wgY29uZmlndXJhdGlvbiBj b3VsZCBub3QgYmUgbG9hZGVkIGluIGNoaWxkIHByb2Nlc3MiKSkpOworCX0KKyNlbmRpZgor I2VuZGlmCisKKwkvKiBQZXJmb3JtIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gYW5kIGNv bGxlY3Qgc3RhcnR1cCBwYWNrZXQgKi8KKwlCYWNrZW5kSW5pdGlhbGl6ZShNeUNsaWVudFNv Y2tldCwgaW5mby0+Y2FuQWNjZXB0Q29ubmVjdGlvbnMpOworCisJLyoKKwkgKiBDcmVhdGUg YSBwZXItYmFja2VuZCBQR1BST0Mgc3RydWN0IGluIHNoYXJlZCBtZW1vcnkuIFdlIG11c3Qg ZG8gdGhpcworCSAqIGJlZm9yZSB3ZSBjYW4gdXNlIExXTG9ja3MuIEluIHRoZSAhRVhFQ19C QUNLRU5EIGNhc2UgKGhlcmUpIHRoaXMgY291bGQKKwkgKiBiZSBkZWxheWVkIGEgYml0IGZ1 cnRoZXIsIGJ1dCBFWEVDX0JBQ0tFTkQgbmVlZHMgdG8gZG8gc3R1ZmYgd2l0aAorCSAqIExX TG9ja3MgYmVmb3JlIFBvc3RncmVzTWFpbigpLCBzbyB3ZSBkbyBpdCBoZXJlIGFzIHdlbGwg Zm9yIHN5bW1ldHJ5LgorCSAqLworCUluaXRQcm9jZXNzKCk7CisKKwkvKiBBdHRhY2ggcHJv Y2VzcyB0byBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzICovCisJQXR0YWNoU2hhcmVkTWVtb3J5 QW5kU2VtYXBob3JlcygpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgYXJlbid0IGluIFBv c3RtYXN0ZXJDb250ZXh0IGFueW1vcmUuICAoV2UgY2FuJ3QgZGVsZXRlIGl0CisJICoganVz dCB5ZXQsIHRob3VnaCwgYmVjYXVzZSBJbml0UG9zdGdyZXMgd2lsbCBuZWVkIHRoZSBIQkEg ZGF0YS4pCisJICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQp OworCisJUG9zdGdyZXNNYWluKE15UHJvY1BvcnQtPmRhdGFiYXNlX25hbWUsIE15UHJvY1Bv cnQtPnVzZXJfbmFtZSk7Cit9CisKIC8qCiAgKiBUcnkgdG8gcmVwb3J0IGJhY2tlbmQgZm9y aygpIGZhaWx1cmUgdG8gY2xpZW50IGJlZm9yZSB3ZSBjbG9zZSB0aGUKICAqIGNvbm5lY3Rp b24uICBTaW5jZSB3ZSBkbyBub3QgY2FyZSB0byByaXNrIGJsb2NraW5nIHRoZSBwb3N0bWFz dGVyIG9uCkBAIC00NDE0LDczMiArNDM3MywxNjEgQEAgQmFja2VuZEluaXRpYWxpemUoQ2xp ZW50U29ja2V0ICpjbGllbnRfc29jaywgQ0FDX3N0YXRlIGNhYykKIAogCiAvKgotICogQmFj a2VuZFJ1biAtLSBzZXQgdXAgdGhlIGJhY2tlbmQncyBhcmd1bWVudCBsaXN0IGFuZCBpbnZv a2UgUG9zdGdyZXNNYWluKCkKKyAqIEV4aXRQb3N0bWFzdGVyIC0tIGNsZWFudXAKICAqCi0g KiByZXR1cm5zOgotICoJCURvZXNuJ3QgcmV0dXJuIGF0IGFsbC4KKyAqIERvIE5PVCBjYWxs IGV4aXQoKSBkaXJlY3RseSAtLS0gYWx3YXlzIGdvIHRocm91Z2ggaGVyZSEKICAqLwogc3Rh dGljIHZvaWQKLUJhY2tlbmRSdW4odm9pZCkKK0V4aXRQb3N0bWFzdGVyKGludCBzdGF0dXMp CiB7CisjaWZkZWYgSEFWRV9QVEhSRUFEX0lTX1RIUkVBREVEX05QCisKIAkvKgotCSAqIENy ZWF0ZSBhIHBlci1iYWNrZW5kIFBHUFJPQyBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeS4gV2Ug bXVzdCBkbyB0aGlzCi0JICogYmVmb3JlIHdlIGNhbiB1c2UgTFdMb2NrcyAoaW4gQXR0YWNo U2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlcykuCisJICogVGhlcmUgaXMgbm8ga25vd24gY2F1 c2UgZm9yIGEgcG9zdG1hc3RlciB0byBiZWNvbWUgbXVsdGl0aHJlYWRlZCBhZnRlcgorCSAq IHN0YXJ0dXAuICBSZWNoZWNrIHRvIGFjY291bnQgZm9yIHRoZSBwb3NzaWJpbGl0eSBvZiB1 bmtub3duIGNhdXNlcy4KKwkgKiBUaGlzIG1lc3NhZ2UgdXNlcyBMT0cgbGV2ZWwsIGJlY2F1 c2UgYW4gdW5jbGVhbiBzaHV0ZG93biBhdCB0aGlzIHBvaW50CisJICogd291bGQgdXN1YWxs eSBub3QgbG9vayBtdWNoIGRpZmZlcmVudCBmcm9tIGEgY2xlYW4gc2h1dGRvd24uCiAJICov Ci0JSW5pdFByb2Nlc3MoKTsKKwlpZiAocHRocmVhZF9pc190aHJlYWRlZF9ucCgpICE9IDAp CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5URVJOQUxfRVJST1Ip LAorCQkJCSBlcnJtc2dfaW50ZXJuYWwoInBvc3RtYXN0ZXIgYmVjYW1lIG11bHRpdGhyZWFk ZWQiKSwKKwkJCQkgZXJyZGV0YWlsKCJQbGVhc2UgcmVwb3J0IHRoaXMgdG8gPCVzPi4iLCBQ QUNLQUdFX0JVR1JFUE9SVCkpKTsKKyNlbmRpZgogCi0JLyogQXR0YWNoIHByb2Nlc3MgdG8g c2hhcmVkIGRhdGEgc3RydWN0dXJlcyAqLwotCUF0dGFjaFNoYXJlZE1lbW9yeUFuZFNlbWFw aG9yZXMoKTsKKwkvKiBzaG91bGQgY2xlYW51cCBzaGFyZWQgbWVtb3J5IGFuZCBraWxsIGFs bCBiYWNrZW5kcyAqLwogCiAJLyoKLQkgKiBNYWtlIHN1cmUgd2UgYXJlbid0IGluIFBvc3Rt YXN0ZXJDb250ZXh0IGFueW1vcmUuICAoV2UgY2FuJ3QgZGVsZXRlIGl0Ci0JICoganVzdCB5 ZXQsIHRob3VnaCwgYmVjYXVzZSBJbml0UG9zdGdyZXMgd2lsbCBuZWVkIHRoZSBIQkEgZGF0 YS4pCisJICogTm90IHN1cmUgb2YgdGhlIHNlbWFudGljcyBoZXJlLiAgV2hlbiB0aGUgUG9z dG1hc3RlciBkaWVzLCBzaG91bGQgdGhlCisJICogYmFja2VuZHMgYWxsIGJlIGtpbGxlZD8g cHJvYmFibHkgbm90LgorCSAqCisJICogTVVTVAkJLS0gdmFkaW0gMDUtMTAtMTk5OQogCSAq LwotCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKLQotCVBvc3Rn cmVzTWFpbihNeVByb2NQb3J0LT5kYXRhYmFzZV9uYW1lLCBNeVByb2NQb3J0LT51c2VyX25h bWUpOwotfQotCi0KLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLQotLyoKLSAqIHBvc3RtYXN0ZXJf Zm9ya2V4ZWMgLS0gZm9yayBhbmQgZXhlYyBhIHBvc3RtYXN0ZXIgc3VicHJvY2VzcwotICoK LSAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHNldCB1cCB0aGUgYXJndiBhcnJheSBhbHJlYWR5 LCBleGNlcHQgZm9yIGFyZ3ZbMl0KLSAqIHdoaWNoIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhl IG5hbWUgb2YgdGhlIHRlbXAgdmFyaWFibGUgZmlsZS4KLSAqCi0gKiBSZXR1cm5zIHRoZSBj aGlsZCBwcm9jZXNzIFBJRCwgb3IgLTEgb24gZm9yayBmYWlsdXJlIChhIHN1aXRhYmxlIGVy cm9yCi0gKiBtZXNzYWdlIGhhcyBiZWVuIGxvZ2dlZCBvbiBmYWlsdXJlKS4KLSAqCi0gKiBB bGwgdXNlcyBvZiB0aGlzIHJvdXRpbmUgd2lsbCBkaXNwYXRjaCB0byBTdWJQb3N0bWFzdGVy TWFpbiBpbiB0aGUKLSAqIGNoaWxkIHByb2Nlc3MuCi0gKi8KLXBpZF90Ci1wb3N0bWFzdGVy X2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JQ2xpZW50U29ja2V0IGNs aWVudF9zb2NrOwotCi0JLyogVGhpcyBlbnRyeSBwb2ludCBkb2Vzbid0IHBhc3MgYSBjbGll bnQgc29ja2V0ICovCi0JbWVtc2V0KCZjbGllbnRfc29jaywgMCwgc2l6ZW9mKENsaWVudFNv Y2tldCkpOwotCXJldHVybiBpbnRlcm5hbF9mb3JrZXhlYyhhcmdjLCBhcmd2LCAmY2xpZW50 X3NvY2spOwotfQotCi0vKgotICogYmFja2VuZF9mb3JrZXhlYyAtLSBmb3JrL2V4ZWMgb2Zm IGEgYmFja2VuZCBwcm9jZXNzCi0gKgotICogU29tZSBvcGVyYXRpbmcgc3lzdGVtcyAoV0lO MzIpIGRvbid0IGhhdmUgZm9yaygpIHNvIHdlIGhhdmUgdG8gc2ltdWxhdGUKLSAqIGl0IGJ5 IHN0b3JpbmcgcGFyYW1ldGVycyB0aGF0IG5lZWQgdG8gYmUgcGFzc2VkIHRvIHRoZSBjaGls ZCBhbmQKLSAqIHRoZW4gY3JlYXRlIGEgbmV3IGNoaWxkIHByb2Nlc3MuCi0gKgotICogcmV0 dXJucyB0aGUgcGlkIG9mIHRoZSBmb3JrL2V4ZWMnZCBwcm9jZXNzLCBvciAtMSBvbiBmYWls dXJlCi0gKi8KLXN0YXRpYyBwaWRfdAotYmFja2VuZF9mb3JrZXhlYyhDbGllbnRTb2NrZXQg KmNsaWVudF9zb2NrLCBDQUNfc3RhdGUgY2FjKQotewotCWNoYXIJICAgKmF2WzVdOwotCWlu dAkJCWFjID0gMDsKLQljaGFyCQljYWNidWZbMTBdOwogCi0JYXZbYWMrK10gPSAicG9zdGdy ZXMiOwotCWF2W2FjKytdID0gIi0tZm9ya2JhY2tlbmQiOwotCWF2W2FjKytdID0gTlVMTDsJ CQkvKiBmaWxsZWQgaW4gYnkgaW50ZXJuYWxfZm9ya2V4ZWMgKi8KLQotCXNucHJpbnRmKGNh Y2J1Ziwgc2l6ZW9mKGNhY2J1ZiksICIlZCIsIChpbnQpIGNhYyk7Ci0JYXZbYWMrK10gPSBj YWNidWY7Ci0KLQlhdlthY10gPSBOVUxMOwotCUFzc2VydChhYyA8IGxlbmd0aG9mKGF2KSk7 Ci0KLQlyZXR1cm4gaW50ZXJuYWxfZm9ya2V4ZWMoYWMsIGF2LCBjbGllbnRfc29jayk7CisJ cHJvY19leGl0KHN0YXR1cyk7CiB9CiAKLSNpZm5kZWYgV0lOMzIKLQogLyoKLSAqIGludGVy bmFsX2ZvcmtleGVjIG5vbi13aW4zMiBpbXBsZW1lbnRhdGlvbgotICoKLSAqIC0gd3JpdGVz IG91dCBiYWNrZW5kIHZhcmlhYmxlcyB0byB0aGUgcGFyYW1ldGVyIGZpbGUKLSAqIC0gZm9y aygpOnMsIGFuZCB0aGVuIGV4ZWMoKTpzIHRoZSBjaGlsZCBwcm9jZXNzCisgKiBIYW5kbGUg cG1zaWduYWwgY29uZGl0aW9ucyByZXByZXNlbnRpbmcgcmVxdWVzdHMgZnJvbSBiYWNrZW5k cywKKyAqIGFuZCBjaGVjayBmb3IgcHJvbW90ZSBhbmQgbG9ncm90YXRlIHJlcXVlc3RzIGZy b20gcGdfY3RsLgogICovCi1zdGF0aWMgcGlkX3QKLWludGVybmFsX2ZvcmtleGVjKGludCBh cmdjLCBjaGFyICphcmd2W10sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spCitzdGF0aWMg dm9pZAorcHJvY2Vzc19wbV9wbXNpZ25hbCh2b2lkKQogewotCXN0YXRpYyB1bnNpZ25lZCBs b25nIHRtcEJhY2tlbmRGaWxlTnVtID0gMDsKLQlwaWRfdAkJcGlkOwotCWNoYXIJCXRtcGZp bGVuYW1lW01BWFBHUEFUSF07Ci0JQmFja2VuZFBhcmFtZXRlcnMgcGFyYW07Ci0JRklMRQkg ICAqZnA7Ci0KLQlpZiAoIXNhdmVfYmFja2VuZF92YXJpYWJsZXMoJnBhcmFtLCBjbGllbnRf c29jaykpCi0JCXJldHVybiAtMTsJCQkJLyogbG9nIG1hZGUgYnkgc2F2ZV9iYWNrZW5kX3Zh cmlhYmxlcyAqLworCXBlbmRpbmdfcG1fcG1zaWduYWwgPSBmYWxzZTsKIAotCS8qIENhbGN1 bGF0ZSBuYW1lIGZvciB0ZW1wIGZpbGUgKi8KLQlzbnByaW50Zih0bXBmaWxlbmFtZSwgTUFY UEdQQVRILCAiJXMvJXMuYmFja2VuZF92YXIuJWQuJWx1IiwKLQkJCSBQR19URU1QX0ZJTEVT X0RJUiwgUEdfVEVNUF9GSUxFX1BSRUZJWCwKLQkJCSBNeVByb2NQaWQsICsrdG1wQmFja2Vu ZEZpbGVOdW0pOworCWVyZXBvcnQoREVCVUcyLAorCQkJKGVycm1zZ19pbnRlcm5hbCgicG9z dG1hc3RlciByZWNlaXZlZCBwbXNpZ25hbCBzaWduYWwiKSkpOwogCi0JLyogT3BlbiBmaWxl ICovCi0JZnAgPSBBbGxvY2F0ZUZpbGUodG1wZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQlp ZiAoIWZwKQorCS8qCisJICogUkVDT1ZFUllfU1RBUlRFRCBhbmQgQkVHSU5fSE9UX1NUQU5E Qlkgc2lnbmFscyBhcmUgaWdub3JlZCBpbgorCSAqIHVuZXhwZWN0ZWQgc3RhdGVzLiBJZiB0 aGUgc3RhcnR1cCBwcm9jZXNzIHF1aWNrbHkgc3RhcnRzIHVwLCBjb21wbGV0ZXMKKwkgKiBy ZWNvdmVyeSwgZXhpdHMsIHdlIG1pZ2h0IHByb2Nlc3MgdGhlIGRlYXRoIG9mIHRoZSBzdGFy dHVwIHByb2Nlc3MKKwkgKiBmaXJzdC4gV2UgZG9uJ3Qgd2FudCB0byBnbyBiYWNrIHRvIHJl Y292ZXJ5IGluIHRoYXQgY2FzZS4KKwkgKi8KKwlpZiAoQ2hlY2tQb3N0bWFzdGVyU2lnbmFs KFBNU0lHTkFMX1JFQ09WRVJZX1NUQVJURUQpICYmCisJCXBtU3RhdGUgPT0gUE1fU1RBUlRV UCAmJiBTaHV0ZG93biA9PSBOb1NodXRkb3duKQogCXsKKwkJLyogV0FMIHJlZG8gaGFzIHN0 YXJ0ZWQuIFdlJ3JlIG91dCBvZiByZWluaXRpYWxpemF0aW9uLiAqLworCQlGYXRhbEVycm9y ID0gZmFsc2U7CisJCUFib3J0U3RhcnRUaW1lID0gMDsKKwogCQkvKgotCQkgKiBBcyBpbiBP cGVuVGVtcG9yYXJ5RmlsZUluVGFibGVzcGFjZSwgdHJ5IHRvIG1ha2UgdGhlIHRlbXAtZmls ZQotCQkgKiBkaXJlY3RvcnksIGlnbm9yaW5nIGVycm9ycy4KKwkJICogU3RhcnQgdGhlIGFy Y2hpdmVyIGlmIHdlJ3JlIHJlc3BvbnNpYmxlIGZvciAocmUtKWFyY2hpdmluZyByZWNlaXZl ZAorCQkgKiBmaWxlcy4KIAkJICovCi0JCSh2b2lkKSBNYWtlUEdEaXJlY3RvcnkoUEdfVEVN UF9GSUxFU19ESVIpOworCQlBc3NlcnQoUGdBcmNoUElEID09IDApOworCQlpZiAoWExvZ0Fy Y2hpdmluZ0Fsd2F5cygpKQorCQkJUGdBcmNoUElEID0gU3RhcnRBcmNoaXZlcigpOwogCi0J CWZwID0gQWxsb2NhdGVGaWxlKHRtcGZpbGVuYW1lLCBQR19CSU5BUllfVyk7Ci0JCWlmICgh ZnApCisJCS8qCisJCSAqIElmIHdlIGFyZW4ndCBwbGFubmluZyB0byBlbnRlciBob3Qgc3Rh bmRieSBtb2RlIGxhdGVyLCB0cmVhdAorCQkgKiBSRUNPVkVSWV9TVEFSVEVEIGFzIG1lYW5p bmcgd2UncmUgb3V0IG9mIHN0YXJ0dXAsIGFuZCByZXBvcnQgc3RhdHVzCisJCSAqIGFjY29y ZGluZ2x5LgorCQkgKi8KKwkJaWYgKCFFbmFibGVIb3RTdGFuZGJ5KQogCQl7Ci0JCQllcmVw b3J0KExPRywKLQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCSBlcnJt c2coImNvdWxkIG5vdCBjcmVhdGUgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJCQl0bXBmaWxl bmFtZSkpKTsKLQkJCXJldHVybiAtMTsKKwkJCUFkZFRvRGF0YURpckxvY2tGaWxlKExPQ0tf RklMRV9MSU5FX1BNX1NUQVRVUywgUE1fU1RBVFVTX1NUQU5EQlkpOworI2lmZGVmIFVTRV9T WVNURU1ECisJCQlzZF9ub3RpZnkoMCwgIlJFQURZPTEiKTsKKyNlbmRpZgogCQl9CisKKwkJ cG1TdGF0ZSA9IFBNX1JFQ09WRVJZOwogCX0KIAotCWlmIChmd3JpdGUoJnBhcmFtLCBzaXpl b2YocGFyYW0pLCAxLCBmcCkgIT0gMSkKKwlpZiAoQ2hlY2tQb3N0bWFzdGVyU2lnbmFsKFBN U0lHTkFMX0JFR0lOX0hPVF9TVEFOREJZKSAmJgorCQlwbVN0YXRlID09IFBNX1JFQ09WRVJZ ICYmIFNodXRkb3duID09IE5vU2h1dGRvd24pCiAJewogCQllcmVwb3J0KExPRywKLQkJCQko ZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgd3Jp dGUgdG8gZmlsZSBcIiVzXCI6ICVtIiwgdG1wZmlsZW5hbWUpKSk7Ci0JCUZyZWVGaWxlKGZw KTsKLQkJcmV0dXJuIC0xOworCQkJCShlcnJtc2coImRhdGFiYXNlIHN5c3RlbSBpcyByZWFk eSB0byBhY2NlcHQgcmVhZC1vbmx5IGNvbm5lY3Rpb25zIikpKTsKKworCQkvKiBSZXBvcnQg c3RhdHVzICovCisJCUFkZFRvRGF0YURpckxvY2tGaWxlKExPQ0tfRklMRV9MSU5FX1BNX1NU QVRVUywgUE1fU1RBVFVTX1JFQURZKTsKKyNpZmRlZiBVU0VfU1lTVEVNRAorCQlzZF9ub3Rp ZnkoMCwgIlJFQURZPTEiKTsKKyNlbmRpZgorCisJCXBtU3RhdGUgPSBQTV9IT1RfU1RBTkRC WTsKKwkJY29ubnNBbGxvd2VkID0gdHJ1ZTsKKworCQkvKiBTb21lIHdvcmtlcnMgbWF5IGJl IHNjaGVkdWxlZCB0byBzdGFydCBub3cgKi8KKwkJU3RhcnRXb3JrZXJOZWVkZWQgPSB0cnVl OwogCX0KIAotCS8qIFJlbGVhc2UgZmlsZSAqLwotCWlmIChGcmVlRmlsZShmcCkpCisJLyog UHJvY2VzcyBiYWNrZ3JvdW5kIHdvcmtlciBzdGF0ZSBjaGFuZ2VzLiAqLworCWlmIChDaGVj a1Bvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfQkFDS0dST1VORF9XT1JLRVJfQ0hBTkdFKSkK IAl7Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAot CQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSB0byBmaWxlIFwiJXNcIjogJW0iLCB0bXBm aWxlbmFtZSkpKTsKLQkJcmV0dXJuIC0xOworCQkvKiBBY2NlcHQgbmV3IHdvcmtlciByZXF1 ZXN0cyBvbmx5IGlmIG5vdCBzdG9wcGluZy4gKi8KKwkJQmFja2dyb3VuZFdvcmtlclN0YXRl Q2hhbmdlKHBtU3RhdGUgPCBQTV9TVE9QX0JBQ0tFTkRTKTsKKwkJU3RhcnRXb3JrZXJOZWVk ZWQgPSB0cnVlOwogCX0KIAotCS8qIE1ha2Ugc3VyZSBjYWxsZXIgc2V0IHVwIGFyZ3YgcHJv cGVybHkgKi8KLQlBc3NlcnQoYXJnYyA+PSAzKTsKLQlBc3NlcnQoYXJndlthcmdjXSA9PSBO VUxMKTsKLQlBc3NlcnQoc3RybmNtcChhcmd2WzFdLCAiLS1mb3JrIiwgNikgPT0gMCk7Ci0J QXNzZXJ0KGFyZ3ZbMl0gPT0gTlVMTCk7Ci0KLQkvKiBJbnNlcnQgdGVtcCBmaWxlIG5hbWUg YWZ0ZXIgLS1mb3JrIGFyZ3VtZW50ICovCi0JYXJndlsyXSA9IHRtcGZpbGVuYW1lOworCWlm IChTdGFydFdvcmtlck5lZWRlZCB8fCBIYXZlQ3Jhc2hlZFdvcmtlcikKKwkJbWF5YmVfc3Rh cnRfYmd3b3JrZXJzKCk7CiAKLQkvKiBGaXJlIG9mZiBleGVjdiBpbiBjaGlsZCAqLwotCWlm ICgocGlkID0gZm9ya19wcm9jZXNzKCkpID09IDApCisJLyogVGVsbCBzeXNsb2dnZXIgdG8g cm90YXRlIGxvZ2ZpbGUgaWYgcmVxdWVzdGVkICovCisJaWYgKFN5c0xvZ2dlclBJRCAhPSAw KQogCXsKLQkJaWYgKGV4ZWN2KHBvc3RncmVzX2V4ZWNfcGF0aCwgYXJndikgPCAwKQorCQlp ZiAoQ2hlY2tMb2dyb3RhdGVTaWduYWwoKSkKIAkJewotCQkJZXJlcG9ydChMT0csCi0JCQkJ CShlcnJtc2coImNvdWxkIG5vdCBleGVjdXRlIHNlcnZlciBwcm9jZXNzIFwiJXNcIjogJW0i LAotCQkJCQkJCXBvc3RncmVzX2V4ZWNfcGF0aCkpKTsKLQkJCS8qIFdlJ3JlIGFscmVhZHkg aW4gdGhlIGNoaWxkIHByb2Nlc3MgaGVyZSwgY2FuJ3QgcmV0dXJuICovCi0JCQlleGl0KDEp OworCQkJc2lnbmFsX2NoaWxkKFN5c0xvZ2dlclBJRCwgU0lHVVNSMSk7CisJCQlSZW1vdmVM b2dyb3RhdGVTaWduYWxGaWxlcygpOworCQl9CisJCWVsc2UgaWYgKENoZWNrUG9zdG1hc3Rl clNpZ25hbChQTVNJR05BTF9ST1RBVEVfTE9HRklMRSkpCisJCXsKKwkJCXNpZ25hbF9jaGls ZChTeXNMb2dnZXJQSUQsIFNJR1VTUjEpOwogCQl9CiAJfQogCi0JcmV0dXJuIHBpZDsJCQkJ CS8qIFBhcmVudCByZXR1cm5zIHBpZCwgb3IgLTEgb24gZm9yayBmYWlsdXJlICovCi19Ci0j ZWxzZQkJCQkJCQkvKiBXSU4zMiAqLwotCi0vKgotICogaW50ZXJuYWxfZm9ya2V4ZWMgd2lu MzIgaW1wbGVtZW50YXRpb24KLSAqCi0gKiAtIHN0YXJ0cyBiYWNrZW5kIHVzaW5nIENyZWF0 ZVByb2Nlc3MoKSwgaW4gc3VzcGVuZGVkIHN0YXRlCi0gKiAtIHdyaXRlcyBvdXQgYmFja2Vu ZCB2YXJpYWJsZXMgdG8gdGhlIHBhcmFtZXRlciBmaWxlCi0gKgktIGR1cmluZyB0aGlzLCBk dXBsaWNhdGVzIGhhbmRsZXMgYW5kIHNvY2tldHMgcmVxdWlyZWQgZm9yCi0gKgkgIGluaGVy aXRhbmNlIGludG8gdGhlIG5ldyBwcm9jZXNzCi0gKiAtIHJlc3VtZXMgZXhlY3V0aW9uIG9m IHRoZSBuZXcgcHJvY2VzcyBvbmNlIHRoZSBiYWNrZW5kIHBhcmFtZXRlcgotICoJIGZpbGUg aXMgY29tcGxldGUuCi0gKi8KLXN0YXRpYyBwaWRfdAotaW50ZXJuYWxfZm9ya2V4ZWMoaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgUG9ydCAqcG9ydCkKLXsKLQlpbnQJCQlyZXRyeV9jb3Vu dCA9IDA7Ci0JU1RBUlRVUElORk8gc2k7Ci0JUFJPQ0VTU19JTkZPUk1BVElPTiBwaTsKLQlp bnQJCQlpOwotCWludAkJCWo7Ci0JY2hhcgkJY21kTGluZVtNQVhQR1BBVEggKiAyXTsKLQlI QU5ETEUJCXBhcmFtSGFuZGxlOwotCUJhY2tlbmRQYXJhbWV0ZXJzICpwYXJhbTsKLQlTRUNV UklUWV9BVFRSSUJVVEVTIHNhOwotCWNoYXIJCXBhcmFtSGFuZGxlU3RyWzMyXTsKLQl3aW4z Ml9kZWFkY2hpbGRfd2FpdGluZm8gKmNoaWxkaW5mbzsKLQotCS8qIE1ha2Ugc3VyZSBjYWxs ZXIgc2V0IHVwIGFyZ3YgcHJvcGVybHkgKi8KLQlBc3NlcnQoYXJnYyA+PSAzKTsKLQlBc3Nl cnQoYXJndlthcmdjXSA9PSBOVUxMKTsKLQlBc3NlcnQoc3RybmNtcChhcmd2WzFdLCAiLS1m b3JrIiwgNikgPT0gMCk7Ci0JQXNzZXJ0KGFyZ3ZbMl0gPT0gTlVMTCk7Ci0KLQkvKiBSZXN1 bWUgaGVyZSBpZiB3ZSBuZWVkIHRvIHJldHJ5ICovCi1yZXRyeToKLQotCS8qIFNldCB1cCBz aGFyZWQgbWVtb3J5IGZvciBwYXJhbWV0ZXIgcGFzc2luZyAqLwotCVplcm9NZW1vcnkoJnNh LCBzaXplb2Yoc2EpKTsKLQlzYS5uTGVuZ3RoID0gc2l6ZW9mKHNhKTsKLQlzYS5iSW5oZXJp dEhhbmRsZSA9IFRSVUU7Ci0JcGFyYW1IYW5kbGUgPSBDcmVhdGVGaWxlTWFwcGluZyhJTlZB TElEX0hBTkRMRV9WQUxVRSwKLQkJCQkJCQkJCSZzYSwKLQkJCQkJCQkJCVBBR0VfUkVBRFdS SVRFLAotCQkJCQkJCQkJMCwKLQkJCQkJCQkJCXNpemVvZihCYWNrZW5kUGFyYW1ldGVycyks Ci0JCQkJCQkJCQlOVUxMKTsKLQlpZiAocGFyYW1IYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVf VkFMVUUpCisJaWYgKENoZWNrUG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9TVEFSVF9BVVRP VkFDX0xBVU5DSEVSKSAmJgorCQlTaHV0ZG93biA8PSBTbWFydFNodXRkb3duICYmIHBtU3Rh dGUgPCBQTV9TVE9QX0JBQ0tFTkRTKQogCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1z ZygiY291bGQgbm90IGNyZWF0ZSBiYWNrZW5kIHBhcmFtZXRlciBmaWxlIG1hcHBpbmc6IGVy cm9yIGNvZGUgJWx1IiwKLQkJCQkJCUdldExhc3RFcnJvcigpKSkpOwotCQlyZXR1cm4gLTE7 CisJCS8qCisJCSAqIFN0YXJ0IG9uZSBpdGVyYXRpb24gb2YgdGhlIGF1dG92YWN1dW0gZGFl bW9uLCBldmVuIGlmIGF1dG92YWN1dW1pbmcKKwkJICogaXMgbm9taW5hbGx5IG5vdCBlbmFi bGVkLiAgVGhpcyBpcyBzbyB3ZSBjYW4gaGF2ZSBhbiBhY3RpdmUgZGVmZW5zZQorCQkgKiBh Z2FpbnN0IHRyYW5zYWN0aW9uIElEIHdyYXBhcm91bmQuICBXZSBzZXQgYSBmbGFnIGZvciB0 aGUgbWFpbiBsb29wCisJCSAqIHRvIGRvIGl0IHJhdGhlciB0aGFuIHRyeWluZyB0byBkbyBp dCBoZXJlIC0tLSB0aGlzIGlzIGJlY2F1c2UgdGhlCisJCSAqIGF1dG92YWMgcHJvY2VzcyBp dHNlbGYgbWF5IHNlbmQgdGhlIHNpZ25hbCwgYW5kIHdlIHdhbnQgdG8gaGFuZGxlCisJCSAq IHRoYXQgYnkgbGF1bmNoaW5nIGFub3RoZXIgaXRlcmF0aW9uIGFzIHNvb24gYXMgdGhlIGN1 cnJlbnQgb25lCisJCSAqIGNvbXBsZXRlcy4KKwkJICovCisJCXN0YXJ0X2F1dG92YWNfbGF1 bmNoZXIgPSB0cnVlOwogCX0KIAotCXBhcmFtID0gTWFwVmlld09mRmlsZShwYXJhbUhhbmRs ZSwgRklMRV9NQVBfV1JJVEUsIDAsIDAsIHNpemVvZihCYWNrZW5kUGFyYW1ldGVycykpOwot CWlmICghcGFyYW0pCisJaWYgKENoZWNrUG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9TVEFS VF9BVVRPVkFDX1dPUktFUikgJiYKKwkJU2h1dGRvd24gPD0gU21hcnRTaHV0ZG93biAmJiBw bVN0YXRlIDwgUE1fU1RPUF9CQUNLRU5EUykKIAl7Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShl cnJtc2coImNvdWxkIG5vdCBtYXAgYmFja2VuZCBwYXJhbWV0ZXIgbWVtb3J5OiBlcnJvciBj b2RlICVsdSIsCi0JCQkJCQlHZXRMYXN0RXJyb3IoKSkpKTsKLQkJQ2xvc2VIYW5kbGUocGFy YW1IYW5kbGUpOwotCQlyZXR1cm4gLTE7CisJCS8qIFRoZSBhdXRvdmFjdXVtIGxhdW5jaGVy IHdhbnRzIHVzIHRvIHN0YXJ0IGEgd29ya2VyIHByb2Nlc3MuICovCisJCVN0YXJ0QXV0b3Zh Y3V1bVdvcmtlcigpOwogCX0KIAotCS8qIEluc2VydCB0ZW1wIGZpbGUgbmFtZSBhZnRlciAt LWZvcmsgYXJndW1lbnQgKi8KLSNpZmRlZiBfV0lONjQKLQlzcHJpbnRmKHBhcmFtSGFuZGxl U3RyLCAiJWxsdSIsIChMT05HX1BUUikgcGFyYW1IYW5kbGUpOwotI2Vsc2UKLQlzcHJpbnRm KHBhcmFtSGFuZGxlU3RyLCAiJWx1IiwgKERXT1JEKSBwYXJhbUhhbmRsZSk7Ci0jZW5kaWYK LQlhcmd2WzJdID0gcGFyYW1IYW5kbGVTdHI7Ci0KLQkvKiBGb3JtYXQgdGhlIGNtZCBsaW5l ICovCi0JY21kTGluZVtzaXplb2YoY21kTGluZSkgLSAxXSA9ICdcMCc7Ci0JY21kTGluZVtz aXplb2YoY21kTGluZSkgLSAyXSA9ICdcMCc7Ci0Jc25wcmludGYoY21kTGluZSwgc2l6ZW9m KGNtZExpbmUpIC0gMSwgIlwiJXNcIiIsIHBvc3RncmVzX2V4ZWNfcGF0aCk7Ci0JaSA9IDA7 Ci0Jd2hpbGUgKGFyZ3ZbKytpXSAhPSBOVUxMKQotCXsKLQkJaiA9IHN0cmxlbihjbWRMaW5l KTsKLQkJc25wcmludGYoY21kTGluZSArIGosIHNpemVvZihjbWRMaW5lKSAtIDEgLSBqLCAi IFwiJXNcIiIsIGFyZ3ZbaV0pOwotCX0KLQlpZiAoY21kTGluZVtzaXplb2YoY21kTGluZSkg LSAyXSAhPSAnXDAnKQorCWlmIChDaGVja1Bvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfU1RB UlRfV0FMUkVDRUlWRVIpKQogCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygic3Vi cHJvY2VzcyBjb21tYW5kIGxpbmUgdG9vIGxvbmciKSkpOwotCQlVbm1hcFZpZXdPZkZpbGUo cGFyYW0pOwotCQlDbG9zZUhhbmRsZShwYXJhbUhhbmRsZSk7Ci0JCXJldHVybiAtMTsKLQl9 Ci0KLQltZW1zZXQoJnBpLCAwLCBzaXplb2YocGkpKTsKLQltZW1zZXQoJnNpLCAwLCBzaXpl b2Yoc2kpKTsKLQlzaS5jYiA9IHNpemVvZihzaSk7Ci0KLQkvKgotCSAqIENyZWF0ZSB0aGUg c3VicHJvY2VzcyBpbiBhIHN1c3BlbmRlZCBzdGF0ZS4gVGhpcyB3aWxsIGJlIHJlc3VtZWQg bGF0ZXIsCi0JICogb25jZSB3ZSBoYXZlIHdyaXR0ZW4gb3V0IHRoZSBwYXJhbWV0ZXIgZmls ZS4KLQkgKi8KLQlpZiAoIUNyZWF0ZVByb2Nlc3MoTlVMTCwgY21kTGluZSwgTlVMTCwgTlVM TCwgVFJVRSwgQ1JFQVRFX1NVU1BFTkRFRCwKLQkJCQkJICAgTlVMTCwgTlVMTCwgJnNpLCAm cGkpKQotCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygiQ3JlYXRlUHJvY2Vzcygp IGNhbGwgZmFpbGVkOiAlbSAoZXJyb3IgY29kZSAlbHUpIiwKLQkJCQkJCUdldExhc3RFcnJv cigpKSkpOwotCQlVbm1hcFZpZXdPZkZpbGUocGFyYW0pOwotCQlDbG9zZUhhbmRsZShwYXJh bUhhbmRsZSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAoIXNhdmVfYmFja2VuZF92YXJp YWJsZXMocGFyYW0sIHBvcnQsIHBpLmhQcm9jZXNzLCBwaS5kd1Byb2Nlc3NJZCkpCi0Jewot CQkvKgotCQkgKiBsb2cgbWFkZSBieSBzYXZlX2JhY2tlbmRfdmFyaWFibGVzLCBidXQgd2Ug aGF2ZSB0byBjbGVhbiB1cCB0aGUKLQkJICogbWVzcyB3aXRoIHRoZSBoYWxmLXN0YXJ0ZWQg cHJvY2VzcwotCQkgKi8KLQkJaWYgKCFUZXJtaW5hdGVQcm9jZXNzKHBpLmhQcm9jZXNzLCAy NTUpKQotCQkJZXJlcG9ydChMT0csCi0JCQkJCShlcnJtc2dfaW50ZXJuYWwoImNvdWxkIG5v dCB0ZXJtaW5hdGUgdW5zdGFydGVkIHByb2Nlc3M6IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkJ CQkJCSBHZXRMYXN0RXJyb3IoKSkpKTsKLQkJQ2xvc2VIYW5kbGUocGkuaFByb2Nlc3MpOwot CQlDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKLQkJVW5tYXBWaWV3T2ZGaWxlKHBhcmFtKTsK LQkJQ2xvc2VIYW5kbGUocGFyYW1IYW5kbGUpOwotCQlyZXR1cm4gLTE7CQkJCS8qIGxvZyBt YWRlIGJ5IHNhdmVfYmFja2VuZF92YXJpYWJsZXMgKi8KLQl9Ci0KLQkvKiBEcm9wIHRoZSBw YXJhbWV0ZXIgc2hhcmVkIG1lbW9yeSB0aGF0IGlzIG5vdyBpbmhlcml0ZWQgdG8gdGhlIGJh Y2tlbmQgKi8KLQlpZiAoIVVubWFwVmlld09mRmlsZShwYXJhbSkpCi0JCWVyZXBvcnQoTE9H LAotCQkJCShlcnJtc2coImNvdWxkIG5vdCB1bm1hcCB2aWV3IG9mIGJhY2tlbmQgcGFyYW1l dGVyIGZpbGU6IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkJCUdldExhc3RFcnJvcigpKSkpOwot CWlmICghQ2xvc2VIYW5kbGUocGFyYW1IYW5kbGUpKQotCQllcmVwb3J0KExPRywKLQkJCQko ZXJybXNnKCJjb3VsZCBub3QgY2xvc2UgaGFuZGxlIHRvIGJhY2tlbmQgcGFyYW1ldGVyIGZp bGU6IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkJCUdldExhc3RFcnJvcigpKSkpOwotCi0JLyoK LQkgKiBSZXNlcnZlIHRoZSBtZW1vcnkgcmVnaW9uIHVzZWQgYnkgb3VyIG1haW4gc2hhcmVk IG1lbW9yeSBzZWdtZW50IGJlZm9yZQotCSAqIHdlIHJlc3VtZSB0aGUgY2hpbGQgcHJvY2Vz cy4gIE5vcm1hbGx5IHRoaXMgc2hvdWxkIHN1Y2NlZWQsIGJ1dCBpZiBBU0xSCi0JICogaXMg YWN0aXZlIHRoZW4gaXQgbWlnaHQgc29tZXRpbWVzIGZhaWwgZHVlIHRvIHRoZSBzdGFjayBv ciBoZWFwIGhhdmluZwotCSAqIGdvdHRlbiBtYXBwZWQgaW50byB0aGF0IHJhbmdlLiAgSW4g dGhhdCBjYXNlLCBqdXN0IHRlcm1pbmF0ZSB0aGUKLQkgKiBwcm9jZXNzIGFuZCByZXRyeS4K LQkgKi8KLQlpZiAoIXBnd2luMzJfUmVzZXJ2ZVNoYXJlZE1lbW9yeVJlZ2lvbihwaS5oUHJv Y2VzcykpCi0JewotCQkvKiBwZ3dpbjMyX1Jlc2VydmVTaGFyZWRNZW1vcnlSZWdpb24gYWxy ZWFkeSBtYWRlIGEgbG9nIGVudHJ5ICovCi0JCWlmICghVGVybWluYXRlUHJvY2VzcyhwaS5o UHJvY2VzcywgMjU1KSkKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJybXNnX2ludGVybmFs KCJjb3VsZCBub3QgdGVybWluYXRlIHByb2Nlc3MgdGhhdCBmYWlsZWQgdG8gcmVzZXJ2ZSBt ZW1vcnk6IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkJCQkJCSBHZXRMYXN0RXJyb3IoKSkpKTsK LQkJQ2xvc2VIYW5kbGUocGkuaFByb2Nlc3MpOwotCQlDbG9zZUhhbmRsZShwaS5oVGhyZWFk KTsKLQkJaWYgKCsrcmV0cnlfY291bnQgPCAxMDApCi0JCQlnb3RvIHJldHJ5OwotCQllcmVw b3J0KExPRywKLQkJCQkoZXJybXNnKCJnaXZpbmcgdXAgYWZ0ZXIgdG9vIG1hbnkgdHJpZXMg dG8gcmVzZXJ2ZSBzaGFyZWQgbWVtb3J5IiksCi0JCQkJIGVycmhpbnQoIlRoaXMgbWlnaHQg YmUgY2F1c2VkIGJ5IEFTTFIgb3IgYW50aXZpcnVzIHNvZnR3YXJlLiIpKSk7Ci0JCXJldHVy biAtMTsKLQl9Ci0KLQkvKgotCSAqIE5vdyB0aGF0IHRoZSBiYWNrZW5kIHZhcmlhYmxlcyBh cmUgd3JpdHRlbiBvdXQsIHdlIHN0YXJ0IHRoZSBjaGlsZAotCSAqIHRocmVhZCBzbyBpdCBj YW4gc3RhcnQgaW5pdGlhbGl6aW5nIHdoaWxlIHdlIHNldCB1cCB0aGUgcmVzdCBvZiB0aGUK LQkgKiBwYXJlbnQgc3RhdGUuCi0JICovCi0JaWYgKFJlc3VtZVRocmVhZChwaS5oVGhyZWFk KSA9PSAtMSkKLQl7Ci0JCWlmICghVGVybWluYXRlUHJvY2VzcyhwaS5oUHJvY2VzcywgMjU1 KSkKLQkJewotCQkJZXJlcG9ydChMT0csCi0JCQkJCShlcnJtc2dfaW50ZXJuYWwoImNvdWxk IG5vdCB0ZXJtaW5hdGUgdW5zdGFydGFibGUgcHJvY2VzczogZXJyb3IgY29kZSAlbHUiLAot CQkJCQkJCQkJIEdldExhc3RFcnJvcigpKSkpOwotCQkJQ2xvc2VIYW5kbGUocGkuaFByb2Nl c3MpOwotCQkJQ2xvc2VIYW5kbGUocGkuaFRocmVhZCk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0K LQkJQ2xvc2VIYW5kbGUocGkuaFByb2Nlc3MpOwotCQlDbG9zZUhhbmRsZShwaS5oVGhyZWFk KTsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZ19pbnRlcm5hbCgiY291bGQgbm90IHJl c3VtZSB0aHJlYWQgb2YgdW5zdGFydGVkIHByb2Nlc3M6IGVycm9yIGNvZGUgJWx1IiwKLQkJ CQkJCQkJIEdldExhc3RFcnJvcigpKSkpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyoKLQkg KiBRdWV1ZSBhIHdhaXRlciB0byBzaWduYWwgd2hlbiB0aGlzIGNoaWxkIGRpZXMuIFRoZSB3 YWl0IHdpbGwgYmUgaGFuZGxlZAotCSAqIGF1dG9tYXRpY2FsbHkgYnkgYW4gb3BlcmF0aW5n IHN5c3RlbSB0aHJlYWQgcG9vbC4gIFRoZSBtZW1vcnkgd2lsbCBiZQotCSAqIGZyZWVkIGJ5 IGEgbGF0ZXIgY2FsbCB0byB3YWl0cGlkKCkuCi0JICovCi0JY2hpbGRpbmZvID0gcGFsbG9j KHNpemVvZih3aW4zMl9kZWFkY2hpbGRfd2FpdGluZm8pKTsKLQljaGlsZGluZm8tPnByb2NI YW5kbGUgPSBwaS5oUHJvY2VzczsKLQljaGlsZGluZm8tPnByb2NJZCA9IHBpLmR3UHJvY2Vz c0lkOwotCi0JaWYgKCFSZWdpc3RlcldhaXRGb3JTaW5nbGVPYmplY3QoJmNoaWxkaW5mby0+ d2FpdEhhbmRsZSwKLQkJCQkJCQkJCSBwaS5oUHJvY2VzcywKLQkJCQkJCQkJCSBwZ3dpbjMy X2RlYWRjaGlsZF9jYWxsYmFjaywKLQkJCQkJCQkJCSBjaGlsZGluZm8sCi0JCQkJCQkJCQkg SU5GSU5JVEUsCi0JCQkJCQkJCQkgV1RfRVhFQ1VURU9OTFlPTkNFIHwgV1RfRVhFQ1VURUlO V0FJVFRIUkVBRCkpCi0JCWVyZXBvcnQoRkFUQUwsCi0JCQkJKGVycm1zZ19pbnRlcm5hbCgi Y291bGQgbm90IHJlZ2lzdGVyIHByb2Nlc3MgZm9yIHdhaXQ6IGVycm9yIGNvZGUgJWx1IiwK LQkJCQkJCQkJIEdldExhc3RFcnJvcigpKSkpOwotCi0JLyogRG9uJ3QgY2xvc2UgcGkuaFBy b2Nlc3MgaGVyZSAtIHdhaXRwaWQoKSBuZWVkcyBhY2Nlc3MgdG8gaXQgKi8KLQotCUNsb3Nl SGFuZGxlKHBpLmhUaHJlYWQpOwotCi0JcmV0dXJuIHBpLmR3UHJvY2Vzc0lkOwotfQotI2Vu ZGlmCQkJCQkJCS8qIFdJTjMyICovCi0KLQotLyoKLSAqIFN1YlBvc3RtYXN0ZXJNYWluIC0t IEdldCB0aGUgZm9yay9leGVjJ2QgcHJvY2VzcyBpbnRvIGEgc3RhdGUgZXF1aXZhbGVudAot ICoJCQl0byB3aGF0IGl0IHdvdWxkIGJlIGlmIHdlJ2Qgc2ltcGx5IGZvcmtlZCBvbiBVbml4 LCBhbmQgdGhlbgotICoJCQlkaXNwYXRjaCB0byB0aGUgYXBwcm9wcmlhdGUgcGxhY2UuCi0g KgotICogVGhlIGZpcnN0IHR3byBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFyZSBleHBlY3Rl ZCB0byBiZSAiLS1mb3JrRk9PIgotICogKHdoZXJlIEZPTyBpbmRpY2F0ZXMgd2hpY2ggcG9z dG1hc3RlciBjaGlsZCB3ZSBhcmUgdG8gYmVjb21lKSwgYW5kCi0gKiB0aGUgbmFtZSBvZiBh IHZhcmlhYmxlcyBmaWxlIHRoYXQgd2UgY2FuIHJlYWQgdG8gbG9hZCBkYXRhIHRoYXQgd291 bGQKLSAqIGhhdmUgYmVlbiBpbmhlcml0ZWQgYnkgZm9yaygpIG9uIFVuaXguICBSZW1haW5p bmcgYXJndW1lbnRzIGdvIHRvIHRoZQotICogc3VicHJvY2VzcyBGb29NYWluKCkgcm91dGlu ZS4KLSAqLwotdm9pZAotU3ViUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKLXsKLQlDbGllbnRTb2NrZXQgY2xpZW50X3NvY2s7Ci0KLQkvKiBJbiBFWEVDX0JBQ0tF TkQgY2FzZSB3ZSB3aWxsIG5vdCBoYXZlIGluaGVyaXRlZCB0aGVzZSBzZXR0aW5ncyAqLwot CUlzUG9zdG1hc3RlckVudmlyb25tZW50ID0gdHJ1ZTsKLQl3aGVyZVRvU2VuZE91dHB1dCA9 IERlc3ROb25lOwotCi0JLyogU2V0dXAgZXNzZW50aWFsIHN1YnN5c3RlbXMgKHRvIGVuc3Vy ZSBlbG9nKCkgYmVoYXZlcyBzYW5lbHkpICovCi0JSW5pdGlhbGl6ZUdVQ09wdGlvbnMoKTsK LQotCS8qIENoZWNrIHdlIGdvdCBhcHByb3ByaWF0ZSBhcmdzICovCi0JaWYgKGFyZ2MgPCAz KQotCQllbG9nKEZBVEFMLCAiaW52YWxpZCBzdWJwb3N0bWFzdGVyIGludm9jYXRpb24iKTsK LQotCS8qIFJlYWQgaW4gdGhlIHZhcmlhYmxlcyBmaWxlICovCi0JbWVtc2V0KCZjbGllbnRf c29jaywgMCwgc2l6ZW9mKENsaWVudFNvY2tldCkpOwotCXJlYWRfYmFja2VuZF92YXJpYWJs ZXMoYXJndlsyXSwgJmNsaWVudF9zb2NrKTsKLQotCS8qIENsb3NlIHRoZSBwb3N0bWFzdGVy J3Mgc29ja2V0cyAoYXMgc29vbiBhcyB3ZSBrbm93IHRoZW0pICovCi0JQ2xvc2VQb3N0bWFz dGVyUG9ydHMoc3RyY21wKGFyZ3ZbMV0sICItLWZvcmtsb2ciKSA9PSAwKTsKLQotCS8qIFNl dHVwIGFzIHBvc3RtYXN0ZXIgY2hpbGQgKi8KLQlJbml0UG9zdG1hc3RlckNoaWxkKCk7Ci0K LQkvKgotCSAqIElmIGFwcHJvcHJpYXRlLCBwaHlzaWNhbGx5IHJlLWF0dGFjaCB0byBzaGFy ZWQgbWVtb3J5IHNlZ21lbnQuIFdlIHdhbnQKLQkgKiB0byBkbyB0aGlzIGJlZm9yZSBnb2lu ZyBhbnkgZnVydGhlciB0byBlbnN1cmUgdGhhdCB3ZSBjYW4gYXR0YWNoIGF0IHRoZQotCSAq IHNhbWUgYWRkcmVzcyB0aGUgcG9zdG1hc3RlciB1c2VkLiAgT24gdGhlIG90aGVyIGhhbmQs IGlmIHdlIGNob29zZSBub3QKLQkgKiB0byByZS1hdHRhY2gsIHdlIG1heSBoYXZlIG90aGVy IGNsZWFudXAgdG8gZG8uCi0JICoKLQkgKiBJZiB0ZXN0aW5nIEVYRUNfQkFDS0VORCBvbiBM aW51eCwgeW91IHNob3VsZCBydW4gdGhpcyBhcyByb290IGJlZm9yZQotCSAqIHN0YXJ0aW5n IHRoZSBwb3N0bWFzdGVyOgotCSAqCi0JICogc3lzY3RsIC13IGtlcm5lbC5yYW5kb21pemVf dmFfc3BhY2U9MAotCSAqCi0JICogVGhpcyBwcmV2ZW50cyB1c2luZyByYW5kb21pemVkIHN0 YWNrIGFuZCBjb2RlIGFkZHJlc3NlcyB0aGF0IGNhdXNlIHRoZQotCSAqIGNoaWxkIHByb2Nl c3MncyBtZW1vcnkgbWFwIHRvIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBwYXJlbnQncywgbWFr aW5nIGl0Ci0JICogc29tZXRpbWVzIGltcG9zc2libGUgdG8gYXR0YWNoIHRvIHNoYXJlZCBt ZW1vcnkgYXQgdGhlIGRlc2lyZWQgYWRkcmVzcy4KLQkgKiBSZXR1cm4gdGhlIHNldHRpbmcg dG8gaXRzIG9sZCB2YWx1ZSAodXN1YWxseSAnMScgb3IgJzInKSB3aGVuIGZpbmlzaGVkLgot CSAqLwotCWlmIChzdHJjbXAoYXJndlsxXSwgIi0tZm9ya2JhY2tlbmQiKSA9PSAwIHx8Ci0J CXN0cmNtcChhcmd2WzFdLCAiLS1mb3JrYXZsYXVuY2hlciIpID09IDAgfHwKLQkJc3RyY21w KGFyZ3ZbMV0sICItLWZvcmthdndvcmtlciIpID09IDAgfHwKLQkJc3RyY21wKGFyZ3ZbMV0s ICItLWZvcmthdXgiKSA9PSAwIHx8Ci0JCXN0cm5jbXAoYXJndlsxXSwgIi0tZm9ya2Jnd29y a2VyIiwgMTQpID09IDApCi0JCVBHU2hhcmVkTWVtb3J5UmVBdHRhY2goKTsKLQllbHNlCi0J CVBHU2hhcmVkTWVtb3J5Tm9SZUF0dGFjaCgpOwotCi0JLyogYXV0b3ZhY3V1bSBuZWVkcyB0 aGlzIHNldCBiZWZvcmUgY2FsbGluZyBJbml0UHJvY2VzcyAqLwotCWlmIChzdHJjbXAoYXJn dlsxXSwgIi0tZm9ya2F2bGF1bmNoZXIiKSA9PSAwKQotCQlBdXRvdmFjdXVtTGF1bmNoZXJJ QW0oKTsKLQlpZiAoc3RyY21wKGFyZ3ZbMV0sICItLWZvcmthdndvcmtlciIpID09IDApCi0J CUF1dG92YWN1dW1Xb3JrZXJJQW0oKTsKLQotCS8qIFJlYWQgaW4gcmVtYWluaW5nIEdVQyB2 YXJpYWJsZXMgKi8KLQlyZWFkX25vbmRlZmF1bHRfdmFyaWFibGVzKCk7Ci0KLQkvKgotCSAq IENoZWNrIHRoYXQgdGhlIGRhdGEgZGlyZWN0b3J5IGxvb2tzIHZhbGlkLCB3aGljaCB3aWxs IGFsc28gY2hlY2sgdGhlCi0JICogcHJpdmlsZWdlcyBvbiB0aGUgZGF0YSBkaXJlY3Rvcnkg YW5kIHVwZGF0ZSBvdXIgdW1hc2sgYW5kIGZpbGUvZ3JvdXAKLQkgKiB2YXJpYWJsZXMgZm9y IGNyZWF0aW5nIGZpbGVzIGxhdGVyLiAgTm90ZTogdGhpcyBzaG91bGQgcmVhbGx5IGJlIGRv bmUKLQkgKiBiZWZvcmUgd2UgY3JlYXRlIGFueSBmaWxlcyBvciBkaXJlY3Rvcmllcy4KLQkg Ki8KLQljaGVja0RhdGFEaXIoKTsKLQotCS8qCi0JICogKHJlLSlyZWFkIGNvbnRyb2wgZmls ZSwgYXMgaXQgY29udGFpbnMgY29uZmlnLiBUaGUgcG9zdG1hc3RlciB3aWxsCi0JICogYWxy ZWFkeSBoYXZlIHJlYWQgdGhpcywgYnV0IHRoaXMgcHJvY2VzcyBkb2Vzbid0IGtub3cgYWJv dXQgdGhhdC4KLQkgKi8KLQlMb2NhbFByb2Nlc3NDb250cm9sRmlsZShmYWxzZSk7Ci0KLQkv KgotCSAqIFJlbG9hZCBhbnkgbGlicmFyaWVzIHRoYXQgd2VyZSBwcmVsb2FkZWQgYnkgdGhl IHBvc3RtYXN0ZXIuICBTaW5jZSB3ZQotCSAqIGV4ZWMnZCB0aGlzIHByb2Nlc3MsIHRob3Nl IGxpYnJhcmllcyBkaWRuJ3QgY29tZSBhbG9uZyB3aXRoIHVzOyBidXQgd2UKLQkgKiBzaG91 bGQgbG9hZCB0aGVtIGludG8gYWxsIGNoaWxkIHByb2Nlc3NlcyB0byBiZSBjb25zaXN0ZW50 IHdpdGggdGhlCi0JICogbm9uLUVYRUNfQkFDS0VORCBiZWhhdmlvci4KLQkgKi8KLQlwcm9j ZXNzX3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllcygpOwotCi0JLyogUnVuIGJhY2tlbmQgb3Ig YXBwcm9wcmlhdGUgY2hpbGQgKi8KLQlpZiAoc3RyY21wKGFyZ3ZbMV0sICItLWZvcmtiYWNr ZW5kIikgPT0gMCkKLQl7Ci0JCUNBQ19zdGF0ZQljYWM7Ci0KLQkJQXNzZXJ0KGFyZ2MgPT0g NCk7Ci0JCWNhYyA9IChDQUNfc3RhdGUpIGF0b2koYXJndlszXSk7Ci0KLQkJLyoKLQkJICog TmVlZCB0byByZWluaXRpYWxpemUgdGhlIFNTTCBsaWJyYXJ5IGluIHRoZSBiYWNrZW5kLCBz aW5jZSB0aGUKLQkJICogY29udGV4dCBzdHJ1Y3R1cmVzIGNvbnRhaW4gZnVuY3Rpb24gcG9p bnRlcnMgYW5kIGNhbm5vdCBiZSBwYXNzZWQKLQkJICogdGhyb3VnaCB0aGUgcGFyYW1ldGVy IGZpbGUuCi0JCSAqCi0JCSAqIElmIGZvciBzb21lIHJlYXNvbiByZWxvYWQgZmFpbHMgKG1h eWJlIHRoZSB1c2VyIGluc3RhbGxlZCBicm9rZW4KLQkJICoga2V5IGZpbGVzKSwgc29sZGll ciBvbiB3aXRob3V0IFNTTDsgdGhhdCdzIGJldHRlciB0aGFuIGFsbAotCQkgKiBjb25uZWN0 aW9ucyBiZWNvbWluZyBpbXBvc3NpYmxlLgotCQkgKgotCQkgKiBYWFggc2hvdWxkIHdlIGRv IHRoaXMgaW4gYWxsIGNoaWxkIHByb2Nlc3Nlcz8gIEZvciB0aGUgbW9tZW50IGl0J3MKLQkJ ICogZW5vdWdoIHRvIGRvIGl0IGluIGJhY2tlbmQgY2hpbGRyZW4uCi0JCSAqLwotI2lmZGVm IFVTRV9TU0wKLQkJaWYgKEVuYWJsZVNTTCkKLQkJewotCQkJaWYgKHNlY3VyZV9pbml0aWFs aXplKGZhbHNlKSA9PSAwKQotCQkJCUxvYWRlZFNTTCA9IHRydWU7Ci0JCQllbHNlCi0JCQkJ ZXJlcG9ydChMT0csCi0JCQkJCQkoZXJybXNnKCJTU0wgY29uZmlndXJhdGlvbiBjb3VsZCBu b3QgYmUgbG9hZGVkIGluIGNoaWxkIHByb2Nlc3MiKSkpOwotCQl9Ci0jZW5kaWYKLQotCQkv KgotCQkgKiBQZXJmb3JtIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gYW5kIGNvbGxlY3Qg c3RhcnR1cCBwYWNrZXQuCi0JCSAqCi0JCSAqIFdlIHdhbnQgdG8gZG8gdGhpcyBiZWZvcmUg SW5pdFByb2Nlc3MoKSBmb3IgYSBjb3VwbGUgb2YgcmVhc29uczogMS4KLQkJICogc28gdGhh dCB3ZSBhcmVuJ3QgZWF0aW5nIHVwIGEgUEdQUk9DIHNsb3Qgd2hpbGUgd2FpdGluZyBvbiB0 aGUKLQkJICogY2xpZW50LiAyLiBzbyB0aGF0IGlmIEluaXRQcm9jZXNzKCkgZmFpbHMgZHVl IHRvIGJlaW5nIG91dCBvZgotCQkgKiBQR1BST0Mgc2xvdHMsIHdlIGhhdmUgYWxyZWFkeSBp bml0aWFsaXplZCBsaWJwcSBhbmQgYXJlIGFibGUgdG8KLQkJICogcmVwb3J0IHRoZSBlcnJv ciB0byB0aGUgY2xpZW50LgotCQkgKi8KLQkJQmFja2VuZEluaXRpYWxpemUoJmNsaWVudF9z b2NrLCBjYWMpOwotCi0JCS8qIFJlc3RvcmUgYmFzaWMgc2hhcmVkIG1lbW9yeSBwb2ludGVy cyAqLwotCQlJbml0U2htZW1BY2Nlc3MoVXNlZFNobWVtU2VnQWRkcik7Ci0KLQkJLyogQW5k IHJ1biB0aGUgYmFja2VuZCAqLwotCQlCYWNrZW5kUnVuKCk7CQkJLyogZG9lcyBub3QgcmV0 dXJuICovCi0JfQotCWlmIChzdHJjbXAoYXJndlsxXSwgIi0tZm9ya2F1eCIpID09IDApCi0J ewotCQlBdXhQcm9jVHlwZSBhdXh0eXBlOwotCi0JCUFzc2VydChhcmdjID09IDQpOwotCi0J CS8qIFJlc3RvcmUgYmFzaWMgc2hhcmVkIG1lbW9yeSBwb2ludGVycyAqLwotCQlJbml0U2ht ZW1BY2Nlc3MoVXNlZFNobWVtU2VnQWRkcik7Ci0KLQkJYXV4dHlwZSA9IGF0b2koYXJndlsz XSk7Ci0JCUF1eGlsaWFyeVByb2Nlc3NNYWluKGF1eHR5cGUpOwkvKiBkb2VzIG5vdCByZXR1 cm4gKi8KLQl9Ci0JaWYgKHN0cmNtcChhcmd2WzFdLCAiLS1mb3JrYXZsYXVuY2hlciIpID09 IDApCi0JewotCQkvKiBSZXN0b3JlIGJhc2ljIHNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8K LQkJSW5pdFNobWVtQWNjZXNzKFVzZWRTaG1lbVNlZ0FkZHIpOwotCi0JCUF1dG9WYWNMYXVu Y2hlck1haW4oYXJnYyAtIDIsIGFyZ3YgKyAyKTsJLyogZG9lcyBub3QgcmV0dXJuICovCi0J fQotCWlmIChzdHJjbXAoYXJndlsxXSwgIi0tZm9ya2F2d29ya2VyIikgPT0gMCkKLQl7Ci0J CS8qIFJlc3RvcmUgYmFzaWMgc2hhcmVkIG1lbW9yeSBwb2ludGVycyAqLwotCQlJbml0U2ht ZW1BY2Nlc3MoVXNlZFNobWVtU2VnQWRkcik7Ci0KLQkJQXV0b1ZhY1dvcmtlck1haW4oYXJn YyAtIDIsIGFyZ3YgKyAyKTsJLyogZG9lcyBub3QgcmV0dXJuICovCi0JfQotCWlmIChzdHJu Y21wKGFyZ3ZbMV0sICItLWZvcmtiZ3dvcmtlciIsIDE0KSA9PSAwKQotCXsKLQkJLyogZG8g dGhpcyBhcyBlYXJseSBhcyBwb3NzaWJsZTsgaW4gcGFydGljdWxhciwgYmVmb3JlIEluaXRQ cm9jZXNzKCkgKi8KLQkJSXNCYWNrZ3JvdW5kV29ya2VyID0gdHJ1ZTsKLQotCQkvKiBSZXN0 b3JlIGJhc2ljIHNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KLQkJSW5pdFNobWVtQWNjZXNz KFVzZWRTaG1lbVNlZ0FkZHIpOwotCi0JCVN0YXJ0QmFja2dyb3VuZFdvcmtlcigpOwotCX0K LQlpZiAoc3RyY21wKGFyZ3ZbMV0sICItLWZvcmtsb2ciKSA9PSAwKQotCXsKLQkJLyogRG8g bm90IHdhbnQgdG8gYXR0YWNoIHRvIHNoYXJlZCBtZW1vcnkgKi8KLQotCQlTeXNMb2dnZXJN YWluKGFyZ2MsIGFyZ3YpOwkvKiBkb2VzIG5vdCByZXR1cm4gKi8KLQl9Ci0KLQlhYm9ydCgp OwkJCQkJLyogc2hvdWxkbid0IGdldCBoZXJlICovCi19Ci0jZW5kaWYJCQkJCQkJLyogRVhF Q19CQUNLRU5EICovCi0KLQotLyoKLSAqIEV4aXRQb3N0bWFzdGVyIC0tIGNsZWFudXAKLSAq Ci0gKiBEbyBOT1QgY2FsbCBleGl0KCkgZGlyZWN0bHkgLS0tIGFsd2F5cyBnbyB0aHJvdWdo IGhlcmUhCi0gKi8KLXN0YXRpYyB2b2lkCi1FeGl0UG9zdG1hc3RlcihpbnQgc3RhdHVzKQot ewotI2lmZGVmIEhBVkVfUFRIUkVBRF9JU19USFJFQURFRF9OUAotCi0JLyoKLQkgKiBUaGVy ZSBpcyBubyBrbm93biBjYXVzZSBmb3IgYSBwb3N0bWFzdGVyIHRvIGJlY29tZSBtdWx0aXRo cmVhZGVkIGFmdGVyCi0JICogc3RhcnR1cC4gIFJlY2hlY2sgdG8gYWNjb3VudCBmb3IgdGhl IHBvc3NpYmlsaXR5IG9mIHVua25vd24gY2F1c2VzLgotCSAqIFRoaXMgbWVzc2FnZSB1c2Vz IExPRyBsZXZlbCwgYmVjYXVzZSBhbiB1bmNsZWFuIHNodXRkb3duIGF0IHRoaXMgcG9pbnQK LQkgKiB3b3VsZCB1c3VhbGx5IG5vdCBsb29rIG11Y2ggZGlmZmVyZW50IGZyb20gYSBjbGVh biBzaHV0ZG93bi4KLQkgKi8KLQlpZiAocHRocmVhZF9pc190aHJlYWRlZF9ucCgpICE9IDAp Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJjb2RlKEVSUkNPREVfSU5URVJOQUxfRVJST1Ip LAotCQkJCSBlcnJtc2dfaW50ZXJuYWwoInBvc3RtYXN0ZXIgYmVjYW1lIG11bHRpdGhyZWFk ZWQiKSwKLQkJCQkgZXJyZGV0YWlsKCJQbGVhc2UgcmVwb3J0IHRoaXMgdG8gPCVzPi4iLCBQ QUNLQUdFX0JVR1JFUE9SVCkpKTsKLSNlbmRpZgotCi0JLyogc2hvdWxkIGNsZWFudXAgc2hh cmVkIG1lbW9yeSBhbmQga2lsbCBhbGwgYmFja2VuZHMgKi8KLQotCS8qCi0JICogTm90IHN1 cmUgb2YgdGhlIHNlbWFudGljcyBoZXJlLiAgV2hlbiB0aGUgUG9zdG1hc3RlciBkaWVzLCBz aG91bGQgdGhlCi0JICogYmFja2VuZHMgYWxsIGJlIGtpbGxlZD8gcHJvYmFibHkgbm90Lgot CSAqCi0JICogTVVTVAkJLS0gdmFkaW0gMDUtMTAtMTk5OQotCSAqLwotCi0JcHJvY19leGl0 KHN0YXR1cyk7Ci19Ci0KLS8qCi0gKiBIYW5kbGUgcG1zaWduYWwgY29uZGl0aW9ucyByZXBy ZXNlbnRpbmcgcmVxdWVzdHMgZnJvbSBiYWNrZW5kcywKLSAqIGFuZCBjaGVjayBmb3IgcHJv bW90ZSBhbmQgbG9ncm90YXRlIHJlcXVlc3RzIGZyb20gcGdfY3RsLgotICovCi1zdGF0aWMg dm9pZAotcHJvY2Vzc19wbV9wbXNpZ25hbCh2b2lkKQotewotCXBlbmRpbmdfcG1fcG1zaWdu YWwgPSBmYWxzZTsKLQotCWVyZXBvcnQoREVCVUcyLAotCQkJKGVycm1zZ19pbnRlcm5hbCgi cG9zdG1hc3RlciByZWNlaXZlZCBwbXNpZ25hbCBzaWduYWwiKSkpOwotCi0JLyoKLQkgKiBS RUNPVkVSWV9TVEFSVEVEIGFuZCBCRUdJTl9IT1RfU1RBTkRCWSBzaWduYWxzIGFyZSBpZ25v cmVkIGluCi0JICogdW5leHBlY3RlZCBzdGF0ZXMuIElmIHRoZSBzdGFydHVwIHByb2Nlc3Mg cXVpY2tseSBzdGFydHMgdXAsIGNvbXBsZXRlcwotCSAqIHJlY292ZXJ5LCBleGl0cywgd2Ug bWlnaHQgcHJvY2VzcyB0aGUgZGVhdGggb2YgdGhlIHN0YXJ0dXAgcHJvY2VzcwotCSAqIGZp cnN0LiBXZSBkb24ndCB3YW50IHRvIGdvIGJhY2sgdG8gcmVjb3ZlcnkgaW4gdGhhdCBjYXNl LgotCSAqLwotCWlmIChDaGVja1Bvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfUkVDT1ZFUllf U1RBUlRFRCkgJiYKLQkJcG1TdGF0ZSA9PSBQTV9TVEFSVFVQICYmIFNodXRkb3duID09IE5v U2h1dGRvd24pCi0JewotCQkvKiBXQUwgcmVkbyBoYXMgc3RhcnRlZC4gV2UncmUgb3V0IG9m IHJlaW5pdGlhbGl6YXRpb24uICovCi0JCUZhdGFsRXJyb3IgPSBmYWxzZTsKLQkJQWJvcnRT dGFydFRpbWUgPSAwOwotCi0JCS8qCi0JCSAqIFN0YXJ0IHRoZSBhcmNoaXZlciBpZiB3ZSdy ZSByZXNwb25zaWJsZSBmb3IgKHJlLSlhcmNoaXZpbmcgcmVjZWl2ZWQKLQkJICogZmlsZXMu Ci0JCSAqLwotCQlBc3NlcnQoUGdBcmNoUElEID09IDApOwotCQlpZiAoWExvZ0FyY2hpdmlu Z0Fsd2F5cygpKQotCQkJUGdBcmNoUElEID0gU3RhcnRBcmNoaXZlcigpOwotCi0JCS8qCi0J CSAqIElmIHdlIGFyZW4ndCBwbGFubmluZyB0byBlbnRlciBob3Qgc3RhbmRieSBtb2RlIGxh dGVyLCB0cmVhdAotCQkgKiBSRUNPVkVSWV9TVEFSVEVEIGFzIG1lYW5pbmcgd2UncmUgb3V0 IG9mIHN0YXJ0dXAsIGFuZCByZXBvcnQgc3RhdHVzCi0JCSAqIGFjY29yZGluZ2x5LgotCQkg Ki8KLQkJaWYgKCFFbmFibGVIb3RTdGFuZGJ5KQotCQl7Ci0JCQlBZGRUb0RhdGFEaXJMb2Nr RmlsZShMT0NLX0ZJTEVfTElORV9QTV9TVEFUVVMsIFBNX1NUQVRVU19TVEFOREJZKTsKLSNp ZmRlZiBVU0VfU1lTVEVNRAotCQkJc2Rfbm90aWZ5KDAsICJSRUFEWT0xIik7Ci0jZW5kaWYK LQkJfQotCi0JCXBtU3RhdGUgPSBQTV9SRUNPVkVSWTsKLQl9Ci0KLQlpZiAoQ2hlY2tQb3N0 bWFzdGVyU2lnbmFsKFBNU0lHTkFMX0JFR0lOX0hPVF9TVEFOREJZKSAmJgotCQlwbVN0YXRl ID09IFBNX1JFQ09WRVJZICYmIFNodXRkb3duID09IE5vU2h1dGRvd24pCi0JewotCQllcmVw b3J0KExPRywKLQkJCQkoZXJybXNnKCJkYXRhYmFzZSBzeXN0ZW0gaXMgcmVhZHkgdG8gYWNj ZXB0IHJlYWQtb25seSBjb25uZWN0aW9ucyIpKSk7Ci0KLQkJLyogUmVwb3J0IHN0YXR1cyAq LwotCQlBZGRUb0RhdGFEaXJMb2NrRmlsZShMT0NLX0ZJTEVfTElORV9QTV9TVEFUVVMsIFBN X1NUQVRVU19SRUFEWSk7Ci0jaWZkZWYgVVNFX1NZU1RFTUQKLQkJc2Rfbm90aWZ5KDAsICJS RUFEWT0xIik7Ci0jZW5kaWYKLQotCQlwbVN0YXRlID0gUE1fSE9UX1NUQU5EQlk7Ci0JCWNv bm5zQWxsb3dlZCA9IHRydWU7Ci0KLQkJLyogU29tZSB3b3JrZXJzIG1heSBiZSBzY2hlZHVs ZWQgdG8gc3RhcnQgbm93ICovCi0JCVN0YXJ0V29ya2VyTmVlZGVkID0gdHJ1ZTsKLQl9Ci0K LQkvKiBQcm9jZXNzIGJhY2tncm91bmQgd29ya2VyIHN0YXRlIGNoYW5nZXMuICovCi0JaWYg KENoZWNrUG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9CQUNLR1JPVU5EX1dPUktFUl9DSEFO R0UpKQotCXsKLQkJLyogQWNjZXB0IG5ldyB3b3JrZXIgcmVxdWVzdHMgb25seSBpZiBub3Qg c3RvcHBpbmcuICovCi0JCUJhY2tncm91bmRXb3JrZXJTdGF0ZUNoYW5nZShwbVN0YXRlIDwg UE1fU1RPUF9CQUNLRU5EUyk7Ci0JCVN0YXJ0V29ya2VyTmVlZGVkID0gdHJ1ZTsKLQl9Ci0K LQlpZiAoU3RhcnRXb3JrZXJOZWVkZWQgfHwgSGF2ZUNyYXNoZWRXb3JrZXIpCi0JCW1heWJl X3N0YXJ0X2Jnd29ya2VycygpOwotCi0JLyogVGVsbCBzeXNsb2dnZXIgdG8gcm90YXRlIGxv Z2ZpbGUgaWYgcmVxdWVzdGVkICovCi0JaWYgKFN5c0xvZ2dlclBJRCAhPSAwKQotCXsKLQkJ aWYgKENoZWNrTG9ncm90YXRlU2lnbmFsKCkpCi0JCXsKLQkJCXNpZ25hbF9jaGlsZChTeXNM b2dnZXJQSUQsIFNJR1VTUjEpOwotCQkJUmVtb3ZlTG9ncm90YXRlU2lnbmFsRmlsZXMoKTsK LQkJfQotCQllbHNlIGlmIChDaGVja1Bvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfUk9UQVRF X0xPR0ZJTEUpKQotCQl7Ci0JCQlzaWduYWxfY2hpbGQoU3lzTG9nZ2VyUElELCBTSUdVU1Ix KTsKLQkJfQotCX0KLQotCWlmIChDaGVja1Bvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfU1RB UlRfQVVUT1ZBQ19MQVVOQ0hFUikgJiYKLQkJU2h1dGRvd24gPD0gU21hcnRTaHV0ZG93biAm JiBwbVN0YXRlIDwgUE1fU1RPUF9CQUNLRU5EUykKLQl7Ci0JCS8qCi0JCSAqIFN0YXJ0IG9u ZSBpdGVyYXRpb24gb2YgdGhlIGF1dG92YWN1dW0gZGFlbW9uLCBldmVuIGlmIGF1dG92YWN1 dW1pbmcKLQkJICogaXMgbm9taW5hbGx5IG5vdCBlbmFibGVkLiAgVGhpcyBpcyBzbyB3ZSBj YW4gaGF2ZSBhbiBhY3RpdmUgZGVmZW5zZQotCQkgKiBhZ2FpbnN0IHRyYW5zYWN0aW9uIElE IHdyYXBhcm91bmQuICBXZSBzZXQgYSBmbGFnIGZvciB0aGUgbWFpbiBsb29wCi0JCSAqIHRv IGRvIGl0IHJhdGhlciB0aGFuIHRyeWluZyB0byBkbyBpdCBoZXJlIC0tLSB0aGlzIGlzIGJl Y2F1c2UgdGhlCi0JCSAqIGF1dG92YWMgcHJvY2VzcyBpdHNlbGYgbWF5IHNlbmQgdGhlIHNp Z25hbCwgYW5kIHdlIHdhbnQgdG8gaGFuZGxlCi0JCSAqIHRoYXQgYnkgbGF1bmNoaW5nIGFu b3RoZXIgaXRlcmF0aW9uIGFzIHNvb24gYXMgdGhlIGN1cnJlbnQgb25lCi0JCSAqIGNvbXBs ZXRlcy4KLQkJICovCi0JCXN0YXJ0X2F1dG92YWNfbGF1bmNoZXIgPSB0cnVlOwotCX0KLQot CWlmIChDaGVja1Bvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfU1RBUlRfQVVUT1ZBQ19XT1JL RVIpICYmCi0JCVNodXRkb3duIDw9IFNtYXJ0U2h1dGRvd24gJiYgcG1TdGF0ZSA8IFBNX1NU T1BfQkFDS0VORFMpCi0JewotCQkvKiBUaGUgYXV0b3ZhY3V1bSBsYXVuY2hlciB3YW50cyB1 cyB0byBzdGFydCBhIHdvcmtlciBwcm9jZXNzLiAqLwotCQlTdGFydEF1dG92YWN1dW1Xb3Jr ZXIoKTsKLQl9Ci0KLQlpZiAoQ2hlY2tQb3N0bWFzdGVyU2lnbmFsKFBNU0lHTkFMX1NUQVJU X1dBTFJFQ0VJVkVSKSkKLQl7Ci0JCS8qIFN0YXJ0dXAgUHJvY2VzcyB3YW50cyB1cyB0byBz dGFydCB0aGUgd2FscmVjZWl2ZXIgcHJvY2Vzcy4gKi8KLQkJLyogU3RhcnQgaW1tZWRpYXRl bHkgaWYgcG9zc2libGUsIGVsc2UgcmVtZW1iZXIgcmVxdWVzdCBmb3IgbGF0ZXIuICovCi0J CVdhbFJlY2VpdmVyUmVxdWVzdGVkID0gdHJ1ZTsKLQkJTWF5YmVTdGFydFdhbFJlY2VpdmVy KCk7CisJCS8qIFN0YXJ0dXAgUHJvY2VzcyB3YW50cyB1cyB0byBzdGFydCB0aGUgd2FscmVj ZWl2ZXIgcHJvY2Vzcy4gKi8KKwkJLyogU3RhcnQgaW1tZWRpYXRlbHkgaWYgcG9zc2libGUs IGVsc2UgcmVtZW1iZXIgcmVxdWVzdCBmb3IgbGF0ZXIuICovCisJCVdhbFJlY2VpdmVyUmVx dWVzdGVkID0gdHJ1ZTsKKwkJTWF5YmVTdGFydFdhbFJlY2VpdmVyKCk7CiAJfQogCiAJLyoK QEAgLTUyNzYsOTMgKzQ2NjQsMjMgQEAgQ291bnRDaGlsZHJlbihpbnQgdGFyZ2V0KQogICog dG8gc3RhcnQgc3VicHJvY2Vzcy4KICAqLwogc3RhdGljIHBpZF90Ci1TdGFydENoaWxkUHJv Y2VzcyhBdXhQcm9jVHlwZSB0eXBlKQorU3RhcnRDaGlsZFByb2Nlc3MoUG9zdG1hc3RlckNo aWxkVHlwZSB0eXBlKQogewogCXBpZF90CQlwaWQ7CiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQK LQl7Ci0JCWNoYXIJICAgKmF2WzEwXTsKLQkJaW50CQkJYWMgPSAwOwotCQljaGFyCQl0eXBl YnVmWzMyXTsKLQotCQkvKgotCQkgKiBTZXQgdXAgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBm b3Igc3VicHJvY2VzcwotCQkgKi8KLQkJYXZbYWMrK10gPSAicG9zdGdyZXMiOwotCQlhdlth YysrXSA9ICItLWZvcmthdXgiOwotCQlhdlthYysrXSA9IE5VTEw7CQkvKiBmaWxsZWQgaW4g YnkgcG9zdG1hc3Rlcl9mb3JrZXhlYyAqLwotCi0JCXNucHJpbnRmKHR5cGVidWYsIHNpemVv Zih0eXBlYnVmKSwgIiVkIiwgdHlwZSk7Ci0JCWF2W2FjKytdID0gdHlwZWJ1ZjsKLQotCQlh dlthY10gPSBOVUxMOwotCQlBc3NlcnQoYWMgPCBsZW5ndGhvZihhdikpOwotCi0JCXBpZCA9 IHBvc3RtYXN0ZXJfZm9ya2V4ZWMoYWMsIGF2KTsKLQl9Ci0jZWxzZQkJCQkJCQkvKiAhRVhF Q19CQUNLRU5EICovCi0JcGlkID0gZm9ya19wcm9jZXNzKCk7Ci0KLQlpZiAocGlkID09IDAp CQkJCS8qIGNoaWxkICovCi0JewotCQlJbml0UG9zdG1hc3RlckNoaWxkKCk7Ci0KLQkJLyog Q2xvc2UgdGhlIHBvc3RtYXN0ZXIncyBzb2NrZXRzICovCi0JCUNsb3NlUG9zdG1hc3RlclBv cnRzKGZhbHNlKTsKLQotCQkvKiBSZWxlYXNlIHBvc3RtYXN0ZXIncyB3b3JraW5nIG1lbW9y eSBjb250ZXh0ICovCi0JCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0 KTsKLQkJTWVtb3J5Q29udGV4dERlbGV0ZShQb3N0bWFzdGVyQ29udGV4dCk7Ci0JCVBvc3Rt YXN0ZXJDb250ZXh0ID0gTlVMTDsKLQotCQlBdXhpbGlhcnlQcm9jZXNzTWFpbih0eXBlKTsg LyogZG9lcyBub3QgcmV0dXJuICovCi0JfQotI2VuZGlmCQkJCQkJCS8qIEVYRUNfQkFDS0VO RCAqLwotCisJcGlkID0gcG9zdG1hc3Rlcl9jaGlsZF9sYXVuY2godHlwZSwgTlVMTCwgMCwg TlVMTCk7CiAJaWYgKHBpZCA8IDApCiAJewogCQkvKiBpbiBwYXJlbnQsIGZvcmsgZmFpbGVk ICovCi0JCWludAkJCXNhdmVfZXJybm8gPSBlcnJubzsKLQotCQllcnJubyA9IHNhdmVfZXJy bm87Ci0JCXN3aXRjaCAodHlwZSkKLQkJewotCQkJY2FzZSBTdGFydHVwUHJvY2VzczoKLQkJ CQllcmVwb3J0KExPRywKLQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBmb3JrIHN0YXJ0dXAg cHJvY2VzczogJW0iKSkpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBcmNoaXZlclByb2Nlc3M6 Ci0JCQkJZXJlcG9ydChMT0csCi0JCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZm9yayBhcmNo aXZlciBwcm9jZXNzOiAlbSIpKSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEJnV3JpdGVyUHJv Y2VzczoKLQkJCQllcmVwb3J0KExPRywKLQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBmb3Jr IGJhY2tncm91bmQgd3JpdGVyIHByb2Nlc3M6ICVtIikpKTsKLQkJCQlicmVhazsKLQkJCWNh c2UgQ2hlY2twb2ludGVyUHJvY2VzczoKLQkJCQllcmVwb3J0KExPRywKLQkJCQkJCShlcnJt c2coImNvdWxkIG5vdCBmb3JrIGNoZWNrcG9pbnRlciBwcm9jZXNzOiAlbSIpKSk7Ci0JCQkJ YnJlYWs7Ci0JCQljYXNlIFdhbFdyaXRlclByb2Nlc3M6Ci0JCQkJZXJlcG9ydChMT0csCi0J CQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZm9yayBXQUwgd3JpdGVyIHByb2Nlc3M6ICVtIikp KTsKLQkJCQlicmVhazsKLQkJCWNhc2UgV2FsUmVjZWl2ZXJQcm9jZXNzOgotCQkJCWVyZXBv cnQoTE9HLAotCQkJCQkJKGVycm1zZygiY291bGQgbm90IGZvcmsgV0FMIHJlY2VpdmVyIHBy b2Nlc3M6ICVtIikpKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJZXJlcG9ydChM T0csCi0JCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZm9yayBwcm9jZXNzOiAlbSIpKSk7Ci0J CQkJYnJlYWs7Ci0JCX0KKwkJLyogWFhYOiB0cmFuc2xhdGlvbj8gKi8KKwkJZXJlcG9ydChM T0csCisJCQkJKGVycm1zZygiY291bGQgbm90IGZvcmsgJXMgcHJvY2VzczogJW0iLCBQb3N0 bWFzdGVyQ2hpbGROYW1lKHR5cGUpKSkpOwogCiAJCS8qCiAJCSAqIGZvcmsgZmFpbHVyZSBp cyBmYXRhbCBkdXJpbmcgc3RhcnR1cCwgYnV0IHRoZXJlJ3Mgbm8gbmVlZCB0byBjaG9rZQog CQkgKiBpbW1lZGlhdGVseSBpZiBzdGFydGluZyBvdGhlciBjaGlsZCB0eXBlcyBmYWlscy4K IAkJICovCi0JCWlmICh0eXBlID09IFN0YXJ0dXBQcm9jZXNzKQorCQlpZiAodHlwZSA9PSBQ TUNfU1RBUlRVUCkKIAkJCUV4aXRQb3N0bWFzdGVyKDEpOwogCQlyZXR1cm4gMDsKIAl9CkBA IC01NjEyLDMyICs0OTMwLDYgQEAgQmFja2dyb3VuZFdvcmtlclVuYmxvY2tTaWduYWxzKHZv aWQpCiAJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZVbkJsb2NrU2lnLCBOVUxMKTsKIH0K IAotI2lmZGVmIEVYRUNfQkFDS0VORAotc3RhdGljIHBpZF90Ci1iZ3dvcmtlcl9mb3JrZXhl YyhCYWNrZ3JvdW5kV29ya2VyICp3b3JrZXIpCi17Ci0JY2hhcgkgICAqYXZbMTBdOwotCWlu dAkJCWFjID0gMDsKLQljaGFyCQlmb3JrYXZbTUFYUEdQQVRIXTsKLQlwaWRfdAkJcmVzdWx0 OwotCi0Jc25wcmludGYoZm9ya2F2LCBNQVhQR1BBVEgsICItLWZvcmtiZ3dvcmtlciIpOwot Ci0JYXZbYWMrK10gPSAicG9zdGdyZXMiOwotCWF2W2FjKytdID0gZm9ya2F2OwotCWF2W2Fj KytdID0gTlVMTDsJCQkvKiBmaWxsZWQgaW4gYnkgcG9zdG1hc3Rlcl9mb3JrZXhlYyAqLwot CWF2W2FjXSA9IE5VTEw7Ci0KLQlBc3NlcnQoYWMgPCBsZW5ndGhvZihhdikpOwotCi0JTXlC Z3dvcmtlckVudHJ5ID0gd29ya2VyOwotCXJlc3VsdCA9IHBvc3RtYXN0ZXJfZm9ya2V4ZWMo YWMsIGF2KTsKLQlNeUJnd29ya2VyRW50cnkgPSBOVUxMOwotCi0JcmV0dXJuIHJlc3VsdDsK LX0KLSNlbmRpZgotCiAvKgogICogU3RhcnQgYSBuZXcgYmd3b3JrZXIuCiAgKiBTdGFydGlu ZyB0aW1lIGNvbmRpdGlvbnMgbXVzdCBoYXZlIGJlZW4gY2hlY2tlZCBhbHJlYWR5LgpAQCAt NTY3NCw2NSArNDk2NiwzMiBAQCBkb19zdGFydF9iZ3dvcmtlcihSZWdpc3RlcmVkQmdXb3Jr ZXIgKnJ3KQogCQkJKGVycm1zZ19pbnRlcm5hbCgic3RhcnRpbmcgYmFja2dyb3VuZCB3b3Jr ZXIgcHJvY2VzcyBcIiVzXCIiLAogCQkJCQkJCSBydy0+cndfd29ya2VyLmJnd19uYW1lKSkp OwogCi0jaWZkZWYgRVhFQ19CQUNLRU5ECi0Jc3dpdGNoICgod29ya2VyX3BpZCA9IGJnd29y a2VyX2ZvcmtleGVjKCZydy0+cndfd29ya2VyKSkpCi0jZWxzZQotCXN3aXRjaCAoKHdvcmtl cl9waWQgPSBmb3JrX3Byb2Nlc3MoKSkpCi0jZW5kaWYKKwl3b3JrZXJfcGlkID0gcG9zdG1h c3Rlcl9jaGlsZF9sYXVuY2goUE1DX0JHV09SS0VSLCAoY2hhciAqKSAmcnctPnJ3X3dvcmtl ciwgc2l6ZW9mKEJhY2tncm91bmRXb3JrZXIpLCBOVUxMKTsKKwlpZiAod29ya2VyX3BpZCA9 PSAtMSkKIAl7Ci0JCWNhc2UgLTE6Ci0JCQkvKiBpbiBwb3N0bWFzdGVyLCBmb3JrIGZhaWxl ZCAuLi4gKi8KLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZm9y ayB3b3JrZXIgcHJvY2VzczogJW0iKSkpOwotCQkJLyogdW5kbyB3aGF0IGFzc2lnbl9iYWNr ZW5kbGlzdF9lbnRyeSBkaWQgKi8KLQkJCVJlbGVhc2VQb3N0bWFzdGVyQ2hpbGRTbG90KHJ3 LT5yd19jaGlsZF9zbG90KTsKLQkJCXJ3LT5yd19jaGlsZF9zbG90ID0gMDsKLQkJCXBmcmVl KHJ3LT5yd19iYWNrZW5kKTsKLQkJCXJ3LT5yd19iYWNrZW5kID0gTlVMTDsKLQkJCS8qIG1h cmsgZW50cnkgYXMgY3Jhc2hlZCwgc28gd2UnbGwgdHJ5IGFnYWluIGxhdGVyICovCi0JCQly dy0+cndfY3Jhc2hlZF9hdCA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKLQkJCWJyZWFrOwot Ci0jaWZuZGVmIEVYRUNfQkFDS0VORAotCQljYXNlIDA6Ci0JCQkvKiBpbiBwb3N0bWFzdGVy IGNoaWxkIC4uLiAqLwotCQkJSW5pdFBvc3RtYXN0ZXJDaGlsZCgpOwotCi0JCQkvKiBDbG9z ZSB0aGUgcG9zdG1hc3RlcidzIHNvY2tldHMgKi8KLQkJCUNsb3NlUG9zdG1hc3RlclBvcnRz KGZhbHNlKTsKLQotCQkJLyoKLQkJCSAqIEJlZm9yZSBibG93aW5nIGF3YXkgUG9zdG1hc3Rl ckNvbnRleHQsIHNhdmUgdGhpcyBiZ3dvcmtlcidzCi0JCQkgKiBkYXRhIHdoZXJlIGl0IGNh biBmaW5kIGl0LgotCQkJICovCi0JCQlNeUJnd29ya2VyRW50cnkgPSAoQmFja2dyb3VuZFdv cmtlciAqKQotCQkJCU1lbW9yeUNvbnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LCBzaXpl b2YoQmFja2dyb3VuZFdvcmtlcikpOwotCQkJbWVtY3B5KE15Qmd3b3JrZXJFbnRyeSwgJnJ3 LT5yd193b3JrZXIsIHNpemVvZihCYWNrZ3JvdW5kV29ya2VyKSk7Ci0KLQkJCS8qIFJlbGVh c2UgcG9zdG1hc3RlcidzIHdvcmtpbmcgbWVtb3J5IGNvbnRleHQgKi8KLQkJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKLQkJCU1lbW9yeUNvbnRleHREZWxl dGUoUG9zdG1hc3RlckNvbnRleHQpOwotCQkJUG9zdG1hc3RlckNvbnRleHQgPSBOVUxMOwot Ci0JCQlTdGFydEJhY2tncm91bmRXb3JrZXIoKTsKKwkJLyogaW4gcG9zdG1hc3RlciwgZm9y ayBmYWlsZWQgLi4uICovCisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2coImNvdWxkIG5v dCBmb3JrIHdvcmtlciBwcm9jZXNzOiAlbSIpKSk7CisJCS8qIHVuZG8gd2hhdCBhc3NpZ25f YmFja2VuZGxpc3RfZW50cnkgZGlkICovCisJCVJlbGVhc2VQb3N0bWFzdGVyQ2hpbGRTbG90 KHJ3LT5yd19jaGlsZF9zbG90KTsKKwkJcnctPnJ3X2NoaWxkX3Nsb3QgPSAwOworCQlwZnJl ZShydy0+cndfYmFja2VuZCk7CisJCXJ3LT5yd19iYWNrZW5kID0gTlVMTDsKKwkJLyogbWFy ayBlbnRyeSBhcyBjcmFzaGVkLCBzbyB3ZSdsbCB0cnkgYWdhaW4gbGF0ZXIgKi8KKwkJcnct PnJ3X2NyYXNoZWRfYXQgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisJCXJldHVybiBmYWxz ZTsKKwl9CiAKLQkJCWV4aXQoMSk7CQkJLyogc2hvdWxkIG5vdCBnZXQgaGVyZSAqLwotCQkJ YnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCS8qIGluIHBvc3RtYXN0ZXIsIGZvcmsg c3VjY2Vzc2Z1bCAuLi4gKi8KLQkJCXJ3LT5yd19waWQgPSB3b3JrZXJfcGlkOwotCQkJcnct PnJ3X2JhY2tlbmQtPnBpZCA9IHJ3LT5yd19waWQ7Ci0JCQlSZXBvcnRCYWNrZ3JvdW5kV29y a2VyUElEKHJ3KTsKLQkJCS8qIGFkZCBuZXcgd29ya2VyIHRvIGxpc3RzIG9mIGJhY2tlbmRz ICovCi0JCQlkbGlzdF9wdXNoX2hlYWQoJkJhY2tlbmRMaXN0LCAmcnctPnJ3X2JhY2tlbmQt PmVsZW0pOworCS8qIGluIHBvc3RtYXN0ZXIsIGZvcmsgc3VjY2Vzc2Z1bCAuLi4gKi8KKwly dy0+cndfcGlkID0gd29ya2VyX3BpZDsKKwlydy0+cndfYmFja2VuZC0+cGlkID0gcnctPnJ3 X3BpZDsKKwlSZXBvcnRCYWNrZ3JvdW5kV29ya2VyUElEKHJ3KTsKKwkvKiBhZGQgbmV3IHdv cmtlciB0byBsaXN0cyBvZiBiYWNrZW5kcyAqLworCWRsaXN0X3B1c2hfaGVhZCgmQmFja2Vu ZExpc3QsICZydy0+cndfYmFja2VuZC0+ZWxlbSk7CiAjaWZkZWYgRVhFQ19CQUNLRU5ECi0J CQlTaG1lbUJhY2tlbmRBcnJheUFkZChydy0+cndfYmFja2VuZCk7CisJU2htZW1CYWNrZW5k QXJyYXlBZGQocnctPnJ3X2JhY2tlbmQpOwogI2VuZGlmCi0JCQlyZXR1cm4gdHJ1ZTsKLQl9 Ci0KLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC01OTg0LDM1 MSArNTI0Myw2IEBAIFBvc3RtYXN0ZXJNYXJrUElERm9yV29ya2VyTm90aWZ5KGludCBwaWQp CiAKICNpZmRlZiBFWEVDX0JBQ0tFTkQKIAotLyoKLSAqIFRoZSBmb2xsb3dpbmcgbmVlZCB0 byBiZSBhdmFpbGFibGUgdG8gdGhlIHNhdmUvcmVzdG9yZV9iYWNrZW5kX3ZhcmlhYmxlcwot ICogZnVuY3Rpb25zLiAgVGhleSBhcmUgbWFya2VkIE5PTl9FWEVDX1NUQVRJQyBpbiB0aGVp ciBob21lIG1vZHVsZXMuCi0gKi8KLWV4dGVybiBzbG9ja190ICpTaG1lbUxvY2s7Ci1leHRl cm4gc2xvY2tfdCAqUHJvY1N0cnVjdExvY2s7Ci1leHRlcm4gUEdQUk9DICpBdXhpbGlhcnlQ cm9jczsKLWV4dGVybiBQTVNpZ25hbERhdGEgKlBNU2lnbmFsU3RhdGU7Ci1leHRlcm4gcGdf dGltZV90IGZpcnN0X3N5c2xvZ2dlcl9maWxlX3RpbWU7Ci0KLSNpZm5kZWYgV0lOMzIKLSNk ZWZpbmUgd3JpdGVfaW5oZXJpdGFibGVfc29ja2V0KGRlc3QsIHNyYywgY2hpbGRwaWQpICgo KihkZXN0KSA9IChzcmMpKSwgdHJ1ZSkKLSNkZWZpbmUgcmVhZF9pbmhlcml0YWJsZV9zb2Nr ZXQoZGVzdCwgc3JjKSAoKihkZXN0KSA9ICooc3JjKSkKLSNlbHNlCi1zdGF0aWMgYm9vbCB3 cml0ZV9kdXBsaWNhdGVkX2hhbmRsZShIQU5ETEUgKmRlc3QsIEhBTkRMRSBzcmMsIEhBTkRM RSBjaGlsZCk7Ci1zdGF0aWMgYm9vbCB3cml0ZV9pbmhlcml0YWJsZV9zb2NrZXQoSW5oZXJp dGFibGVTb2NrZXQgKmRlc3QsIFNPQ0tFVCBzcmMsCi0JCQkJCQkJCQkgcGlkX3QgY2hpbGRQ aWQpOwotc3RhdGljIHZvaWQgcmVhZF9pbmhlcml0YWJsZV9zb2NrZXQoU09DS0VUICpkZXN0 LCBJbmhlcml0YWJsZVNvY2tldCAqc3JjKTsKLSNlbmRpZgotCi0KLS8qIFNhdmUgY3JpdGlj YWwgYmFja2VuZCB2YXJpYWJsZXMgaW50byB0aGUgQmFja2VuZFBhcmFtZXRlcnMgc3RydWN0 ICovCi0jaWZuZGVmIFdJTjMyCi1zdGF0aWMgYm9vbAotc2F2ZV9iYWNrZW5kX3ZhcmlhYmxl cyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2sp Ci0jZWxzZQotc3RhdGljIGJvb2wKLXNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBh cmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLAotCQkJCQkgICBI QU5ETEUgY2hpbGRQcm9jZXNzLCBwaWRfdCBjaGlsZFBpZCkKLSNlbmRpZgotewotCW1lbWNw eSgmcGFyYW0tPmNsaWVudF9zb2NrLCBjbGllbnRfc29jaywgc2l6ZW9mKENsaWVudFNvY2tl dCkpOwotCWlmICghd3JpdGVfaW5oZXJpdGFibGVfc29ja2V0KCZwYXJhbS0+c2VyaWFsaXpl ZF9zb2NrLCBjbGllbnRfc29jay0+c29jaywgY2hpbGRQaWQpKQotCQlyZXR1cm4gZmFsc2U7 Ci0KLQlzdHJsY3B5KHBhcmFtLT5EYXRhRGlyLCBEYXRhRGlyLCBNQVhQR1BBVEgpOwotCi0J cGFyYW0tPk15Q2FuY2VsS2V5ID0gTXlDYW5jZWxLZXk7Ci0JcGFyYW0tPk15UE1DaGlsZFNs b3QgPSBNeVBNQ2hpbGRTbG90OwotCi0jaWZkZWYgV0lOMzIKLQlwYXJhbS0+U2htZW1Qcm90 ZWN0aXZlUmVnaW9uID0gU2htZW1Qcm90ZWN0aXZlUmVnaW9uOwotI2VuZGlmCi0JcGFyYW0t PlVzZWRTaG1lbVNlZ0lEID0gVXNlZFNobWVtU2VnSUQ7Ci0JcGFyYW0tPlVzZWRTaG1lbVNl Z0FkZHIgPSBVc2VkU2htZW1TZWdBZGRyOwotCi0JcGFyYW0tPlNobWVtTG9jayA9IFNobWVt TG9jazsKLQlwYXJhbS0+U2htZW1WYXJpYWJsZUNhY2hlID0gU2htZW1WYXJpYWJsZUNhY2hl OwotCXBhcmFtLT5TaG1lbUJhY2tlbmRBcnJheSA9IFNobWVtQmFja2VuZEFycmF5OwotCi0j aWZuZGVmIEhBVkVfU1BJTkxPQ0tTCi0JcGFyYW0tPlNwaW5sb2NrU2VtYUFycmF5ID0gU3Bp bmxvY2tTZW1hQXJyYXk7Ci0jZW5kaWYKLQlwYXJhbS0+TmFtZWRMV0xvY2tUcmFuY2hlUmVx dWVzdHMgPSBOYW1lZExXTG9ja1RyYW5jaGVSZXF1ZXN0czsKLQlwYXJhbS0+TmFtZWRMV0xv Y2tUcmFuY2hlQXJyYXkgPSBOYW1lZExXTG9ja1RyYW5jaGVBcnJheTsKLQlwYXJhbS0+TWFp bkxXTG9ja0FycmF5ID0gTWFpbkxXTG9ja0FycmF5OwotCXBhcmFtLT5Qcm9jU3RydWN0TG9j ayA9IFByb2NTdHJ1Y3RMb2NrOwotCXBhcmFtLT5Qcm9jR2xvYmFsID0gUHJvY0dsb2JhbDsK LQlwYXJhbS0+QXV4aWxpYXJ5UHJvY3MgPSBBdXhpbGlhcnlQcm9jczsKLQlwYXJhbS0+UHJl cGFyZWRYYWN0UHJvY3MgPSBQcmVwYXJlZFhhY3RQcm9jczsKLQlwYXJhbS0+UE1TaWduYWxT dGF0ZSA9IFBNU2lnbmFsU3RhdGU7Ci0KLQlwYXJhbS0+UG9zdG1hc3RlclBpZCA9IFBvc3Rt YXN0ZXJQaWQ7Ci0JcGFyYW0tPlBnU3RhcnRUaW1lID0gUGdTdGFydFRpbWU7Ci0JcGFyYW0t PlBnUmVsb2FkVGltZSA9IFBnUmVsb2FkVGltZTsKLQlwYXJhbS0+Zmlyc3Rfc3lzbG9nZ2Vy X2ZpbGVfdGltZSA9IGZpcnN0X3N5c2xvZ2dlcl9maWxlX3RpbWU7Ci0KLQlwYXJhbS0+cmVk aXJlY3Rpb25fZG9uZSA9IHJlZGlyZWN0aW9uX2RvbmU7Ci0JcGFyYW0tPklzQmluYXJ5VXBn cmFkZSA9IElzQmluYXJ5VXBncmFkZTsKLQlwYXJhbS0+cXVlcnlfaWRfZW5hYmxlZCA9IHF1 ZXJ5X2lkX2VuYWJsZWQ7Ci0JcGFyYW0tPm1heF9zYWZlX2ZkcyA9IG1heF9zYWZlX2ZkczsK LQotCXBhcmFtLT5NYXhCYWNrZW5kcyA9IE1heEJhY2tlbmRzOwotCi0jaWZkZWYgV0lOMzIK LQlwYXJhbS0+UG9zdG1hc3RlckhhbmRsZSA9IFBvc3RtYXN0ZXJIYW5kbGU7Ci0JaWYgKCF3 cml0ZV9kdXBsaWNhdGVkX2hhbmRsZSgmcGFyYW0tPmluaXRpYWxfc2lnbmFsX3BpcGUsCi0J CQkJCQkJCSBwZ3dpbjMyX2NyZWF0ZV9zaWduYWxfbGlzdGVuZXIoY2hpbGRQaWQpLAotCQkJ CQkJCQkgY2hpbGRQcm9jZXNzKSkKLQkJcmV0dXJuIGZhbHNlOwotI2Vsc2UKLQltZW1jcHko JnBhcmFtLT5wb3N0bWFzdGVyX2FsaXZlX2ZkcywgJnBvc3RtYXN0ZXJfYWxpdmVfZmRzLAot CQkgICBzaXplb2YocG9zdG1hc3Rlcl9hbGl2ZV9mZHMpKTsKLSNlbmRpZgotCi0JbWVtY3B5 KCZwYXJhbS0+c3lzbG9nUGlwZSwgJnN5c2xvZ1BpcGUsIHNpemVvZihzeXNsb2dQaXBlKSk7 Ci0KLQlzdHJsY3B5KHBhcmFtLT5teV9leGVjX3BhdGgsIG15X2V4ZWNfcGF0aCwgTUFYUEdQ QVRIKTsKLQotCXN0cmxjcHkocGFyYW0tPnBrZ2xpYl9wYXRoLCBwa2dsaWJfcGF0aCwgTUFY UEdQQVRIKTsKLQotCWlmIChNeUJnd29ya2VyRW50cnkpCi0JCW1lbWNweSgmcGFyYW0tPk15 Qmd3b3JrZXJFbnRyeSwgTXlCZ3dvcmtlckVudHJ5LCBzaXplb2YoQmFja2dyb3VuZFdvcmtl cikpOwotCWVsc2UKLQkJbWVtc2V0KCZwYXJhbS0+TXlCZ3dvcmtlckVudHJ5LCAwLCBzaXpl b2YoQmFja2dyb3VuZFdvcmtlcikpOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLQotI2lmZGVm IFdJTjMyCi0vKgotICogRHVwbGljYXRlIGEgaGFuZGxlIGZvciB1c2FnZSBpbiBhIGNoaWxk IHByb2Nlc3MsIGFuZCB3cml0ZSB0aGUgY2hpbGQKLSAqIHByb2Nlc3MgaW5zdGFuY2Ugb2Yg dGhlIGhhbmRsZSB0byB0aGUgcGFyYW1ldGVyIGZpbGUuCi0gKi8KLXN0YXRpYyBib29sCi13 cml0ZV9kdXBsaWNhdGVkX2hhbmRsZShIQU5ETEUgKmRlc3QsIEhBTkRMRSBzcmMsIEhBTkRM RSBjaGlsZFByb2Nlc3MpCi17Ci0JSEFORExFCQloQ2hpbGQgPSBJTlZBTElEX0hBTkRMRV9W QUxVRTsKLQotCWlmICghRHVwbGljYXRlSGFuZGxlKEdldEN1cnJlbnRQcm9jZXNzKCksCi0J CQkJCQkgc3JjLAotCQkJCQkJIGNoaWxkUHJvY2VzcywKLQkJCQkJCSAmaENoaWxkLAotCQkJ CQkJIDAsCi0JCQkJCQkgVFJVRSwKLQkJCQkJCSBEVVBMSUNBVEVfQ0xPU0VfU09VUkNFIHwg RFVQTElDQVRFX1NBTUVfQUNDRVNTKSkKLQl7Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJt c2dfaW50ZXJuYWwoImNvdWxkIG5vdCBkdXBsaWNhdGUgaGFuZGxlIHRvIGJlIHdyaXR0ZW4g dG8gYmFja2VuZCBwYXJhbWV0ZXIgZmlsZTogZXJyb3IgY29kZSAlbHUiLAotCQkJCQkJCQkg R2V0TGFzdEVycm9yKCkpKSk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkqZGVzdCA9IGhD aGlsZDsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIER1cGxpY2F0ZSBhIHNvY2tldCBm b3IgdXNhZ2UgaW4gYSBjaGlsZCBwcm9jZXNzLCBhbmQgd3JpdGUgdGhlIHJlc3VsdGluZwot ICogc3RydWN0dXJlIHRvIHRoZSBwYXJhbWV0ZXIgZmlsZS4KLSAqIFRoaXMgaXMgcmVxdWly ZWQgYmVjYXVzZSBhIG51bWJlciBvZiBMU1BzIChMYXllcmVkIFNlcnZpY2UgUHJvdmlkZXJz KSB2ZXJ5Ci0gKiBjb21tb24gb24gV2luZG93cyAoYW50aXZpcnVzLCBmaXJld2FsbHMsIGRv d25sb2FkIG1hbmFnZXJzIGV0YykgYnJlYWsKLSAqIHN0cmFpZ2h0IHNvY2tldCBpbmhlcml0 YW5jZS4KLSAqLwotc3RhdGljIGJvb2wKLXdyaXRlX2luaGVyaXRhYmxlX3NvY2tldChJbmhl cml0YWJsZVNvY2tldCAqZGVzdCwgU09DS0VUIHNyYywgcGlkX3QgY2hpbGRwaWQpCi17Ci0J ZGVzdC0+b3JpZ3NvY2tldCA9IHNyYzsKLQlpZiAoc3JjICE9IDAgJiYgc3JjICE9IFBHSU5W QUxJRF9TT0NLRVQpCi0JewotCQkvKiBBY3R1YWwgc29ja2V0ICovCi0JCWlmIChXU0FEdXBs aWNhdGVTb2NrZXQoc3JjLCBjaGlsZHBpZCwgJmRlc3QtPndzYWluZm8pICE9IDApCi0JCXsK LQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZHVwbGljYXRlIHNv Y2tldCAlZCBmb3IgdXNlIGluIGJhY2tlbmQ6IGVycm9yIGNvZGUgJWQiLAotCQkJCQkJCShp bnQpIHNyYywgV1NBR2V0TGFzdEVycm9yKCkpKSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0K LQl9Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBSZWFkIGEgZHVwbGljYXRlIHNvY2tl dCBzdHJ1Y3R1cmUgYmFjaywgYW5kIGdldCB0aGUgc29ja2V0IGRlc2NyaXB0b3IuCi0gKi8K LXN0YXRpYyB2b2lkCi1yZWFkX2luaGVyaXRhYmxlX3NvY2tldChTT0NLRVQgKmRlc3QsIElu aGVyaXRhYmxlU29ja2V0ICpzcmMpCi17Ci0JU09DS0VUCQlzOwotCi0JaWYgKHNyYy0+b3Jp Z3NvY2tldCA9PSBQR0lOVkFMSURfU09DS0VUIHx8IHNyYy0+b3JpZ3NvY2tldCA9PSAwKQot CXsKLQkJLyogTm90IGEgcmVhbCBzb2NrZXQhICovCi0JCSpkZXN0ID0gc3JjLT5vcmlnc29j a2V0OwotCX0KLQllbHNlCi0JewotCQkvKiBBY3R1YWwgc29ja2V0LCBzbyBjcmVhdGUgZnJv bSBzdHJ1Y3R1cmUgKi8KLQkJcyA9IFdTQVNvY2tldChGUk9NX1BST1RPQ09MX0lORk8sCi0J CQkJCSAgRlJPTV9QUk9UT0NPTF9JTkZPLAotCQkJCQkgIEZST01fUFJPVE9DT0xfSU5GTywK LQkJCQkJICAmc3JjLT53c2FpbmZvLAotCQkJCQkgIDAsCi0JCQkJCSAgMCk7Ci0JCWlmIChz ID09IElOVkFMSURfU09DS0VUKQotCQl7Ci0JCQl3cml0ZV9zdGRlcnIoImNvdWxkIG5vdCBj cmVhdGUgaW5oZXJpdGVkIHNvY2tldDogZXJyb3IgY29kZSAlZFxuIiwKLQkJCQkJCSBXU0FH ZXRMYXN0RXJyb3IoKSk7Ci0JCQlleGl0KDEpOwotCQl9Ci0JCSpkZXN0ID0gczsKLQotCQkv KgotCQkgKiBUbyBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IHR3byByZWZlcmVuY2VzIHRvIHRo ZSBzYW1lIHNvY2tldCwgY2xvc2UKLQkJICogdGhlIG9yaWdpbmFsIG9uZS4gKFRoaXMgd291 bGQgaGFwcGVuIHdoZW4gaW5oZXJpdGFuY2UgYWN0dWFsbHkKLQkJICogd29ya3MuLgotCQkg Ki8KLQkJY2xvc2Vzb2NrZXQoc3JjLT5vcmlnc29ja2V0KTsKLQl9Ci19Ci0jZW5kaWYKLQot c3RhdGljIHZvaWQKLXJlYWRfYmFja2VuZF92YXJpYWJsZXMoY2hhciAqaWQsIENsaWVudFNv Y2tldCAqY2xpZW50X3NvY2spCi17Ci0JQmFja2VuZFBhcmFtZXRlcnMgcGFyYW07Ci0KLSNp Zm5kZWYgV0lOMzIKLQkvKiBOb24td2luMzIgaW1wbGVtZW50YXRpb24gcmVhZHMgZnJvbSBm aWxlICovCi0JRklMRQkgICAqZnA7Ci0KLQkvKiBPcGVuIGZpbGUgKi8KLQlmcCA9IEFsbG9j YXRlRmlsZShpZCwgUEdfQklOQVJZX1IpOwotCWlmICghZnApCi0JewotCQl3cml0ZV9zdGRl cnIoImNvdWxkIG5vdCBvcGVuIGJhY2tlbmQgdmFyaWFibGVzIGZpbGUgXCIlc1wiOiAlc1xu IiwKLQkJCQkJIGlkLCBzdHJlcnJvcihlcnJubykpOwotCQlleGl0KDEpOwotCX0KLQotCWlm IChmcmVhZCgmcGFyYW0sIHNpemVvZihwYXJhbSksIDEsIGZwKSAhPSAxKQotCXsKLQkJd3Jp dGVfc3RkZXJyKCJjb3VsZCBub3QgcmVhZCBmcm9tIGJhY2tlbmQgdmFyaWFibGVzIGZpbGUg XCIlc1wiOiAlc1xuIiwKLQkJCQkJIGlkLCBzdHJlcnJvcihlcnJubykpOwotCQlleGl0KDEp OwotCX0KLQotCS8qIFJlbGVhc2UgZmlsZSAqLwotCUZyZWVGaWxlKGZwKTsKLQlpZiAodW5s aW5rKGlkKSAhPSAwKQotCXsKLQkJd3JpdGVfc3RkZXJyKCJjb3VsZCBub3QgcmVtb3ZlIGZp bGUgXCIlc1wiOiAlc1xuIiwKLQkJCQkJIGlkLCBzdHJlcnJvcihlcnJubykpOwotCQlleGl0 KDEpOwotCX0KLSNlbHNlCi0JLyogV2luMzIgdmVyc2lvbiB1c2VzIG1hcHBlZCBmaWxlICov Ci0JSEFORExFCQlwYXJhbUhhbmRsZTsKLQlCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW1wOwot Ci0jaWZkZWYgX1dJTjY0Ci0JcGFyYW1IYW5kbGUgPSAoSEFORExFKSBfYXRvaTY0KGlkKTsK LSNlbHNlCi0JcGFyYW1IYW5kbGUgPSAoSEFORExFKSBhdG9sKGlkKTsKLSNlbmRpZgotCXBh cmFtcCA9IE1hcFZpZXdPZkZpbGUocGFyYW1IYW5kbGUsIEZJTEVfTUFQX1JFQUQsIDAsIDAs IDApOwotCWlmICghcGFyYW1wKQotCXsKLQkJd3JpdGVfc3RkZXJyKCJjb3VsZCBub3QgbWFw IHZpZXcgb2YgYmFja2VuZCB2YXJpYWJsZXM6IGVycm9yIGNvZGUgJWx1XG4iLAotCQkJCQkg R2V0TGFzdEVycm9yKCkpOwotCQlleGl0KDEpOwotCX0KLQotCW1lbWNweSgmcGFyYW0sIHBh cmFtcCwgc2l6ZW9mKEJhY2tlbmRQYXJhbWV0ZXJzKSk7Ci0KLQlpZiAoIVVubWFwVmlld09m RmlsZShwYXJhbXApKQotCXsKLQkJd3JpdGVfc3RkZXJyKCJjb3VsZCBub3QgdW5tYXAgdmll dyBvZiBiYWNrZW5kIHZhcmlhYmxlczogZXJyb3IgY29kZSAlbHVcbiIsCi0JCQkJCSBHZXRM YXN0RXJyb3IoKSk7Ci0JCWV4aXQoMSk7Ci0JfQotCi0JaWYgKCFDbG9zZUhhbmRsZShwYXJh bUhhbmRsZSkpCi0JewotCQl3cml0ZV9zdGRlcnIoImNvdWxkIG5vdCBjbG9zZSBoYW5kbGUg dG8gYmFja2VuZCBwYXJhbWV0ZXIgdmFyaWFibGVzOiBlcnJvciBjb2RlICVsdVxuIiwKLQkJ CQkJIEdldExhc3RFcnJvcigpKTsKLQkJZXhpdCgxKTsKLQl9Ci0jZW5kaWYKLQotCXJlc3Rv cmVfYmFja2VuZF92YXJpYWJsZXMoJnBhcmFtLCBjbGllbnRfc29jayk7Ci19Ci0KLS8qIFJl c3RvcmUgY3JpdGljYWwgYmFja2VuZCB2YXJpYWJsZXMgZnJvbSB0aGUgQmFja2VuZFBhcmFt ZXRlcnMgc3RydWN0ICovCi1zdGF0aWMgdm9pZAotcmVzdG9yZV9iYWNrZW5kX3ZhcmlhYmxl cyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2sp Ci17Ci0JbWVtY3B5KGNsaWVudF9zb2NrLCAmcGFyYW0tPmNsaWVudF9zb2NrLCBzaXplb2Yo Q2xpZW50U29ja2V0KSk7Ci0JcmVhZF9pbmhlcml0YWJsZV9zb2NrZXQoJmNsaWVudF9zb2Nr LT5zb2NrLCAmcGFyYW0tPnNlcmlhbGl6ZWRfc29jayk7Ci0KLQlTZXREYXRhRGlyKHBhcmFt LT5EYXRhRGlyKTsKLQotCU15Q2FuY2VsS2V5ID0gcGFyYW0tPk15Q2FuY2VsS2V5OwotCU15 UE1DaGlsZFNsb3QgPSBwYXJhbS0+TXlQTUNoaWxkU2xvdDsKLQotI2lmZGVmIFdJTjMyCi0J U2htZW1Qcm90ZWN0aXZlUmVnaW9uID0gcGFyYW0tPlNobWVtUHJvdGVjdGl2ZVJlZ2lvbjsK LSNlbmRpZgotCVVzZWRTaG1lbVNlZ0lEID0gcGFyYW0tPlVzZWRTaG1lbVNlZ0lEOwotCVVz ZWRTaG1lbVNlZ0FkZHIgPSBwYXJhbS0+VXNlZFNobWVtU2VnQWRkcjsKLQotCVNobWVtTG9j ayA9IHBhcmFtLT5TaG1lbUxvY2s7Ci0JU2htZW1WYXJpYWJsZUNhY2hlID0gcGFyYW0tPlNo bWVtVmFyaWFibGVDYWNoZTsKLQlTaG1lbUJhY2tlbmRBcnJheSA9IHBhcmFtLT5TaG1lbUJh Y2tlbmRBcnJheTsKLQotI2lmbmRlZiBIQVZFX1NQSU5MT0NLUwotCVNwaW5sb2NrU2VtYUFy cmF5ID0gcGFyYW0tPlNwaW5sb2NrU2VtYUFycmF5OwotI2VuZGlmCi0JTmFtZWRMV0xvY2tU cmFuY2hlUmVxdWVzdHMgPSBwYXJhbS0+TmFtZWRMV0xvY2tUcmFuY2hlUmVxdWVzdHM7Ci0J TmFtZWRMV0xvY2tUcmFuY2hlQXJyYXkgPSBwYXJhbS0+TmFtZWRMV0xvY2tUcmFuY2hlQXJy YXk7Ci0JTWFpbkxXTG9ja0FycmF5ID0gcGFyYW0tPk1haW5MV0xvY2tBcnJheTsKLQlQcm9j U3RydWN0TG9jayA9IHBhcmFtLT5Qcm9jU3RydWN0TG9jazsKLQlQcm9jR2xvYmFsID0gcGFy YW0tPlByb2NHbG9iYWw7Ci0JQXV4aWxpYXJ5UHJvY3MgPSBwYXJhbS0+QXV4aWxpYXJ5UHJv Y3M7Ci0JUHJlcGFyZWRYYWN0UHJvY3MgPSBwYXJhbS0+UHJlcGFyZWRYYWN0UHJvY3M7Ci0J UE1TaWduYWxTdGF0ZSA9IHBhcmFtLT5QTVNpZ25hbFN0YXRlOwotCi0JUG9zdG1hc3RlclBp ZCA9IHBhcmFtLT5Qb3N0bWFzdGVyUGlkOwotCVBnU3RhcnRUaW1lID0gcGFyYW0tPlBnU3Rh cnRUaW1lOwotCVBnUmVsb2FkVGltZSA9IHBhcmFtLT5QZ1JlbG9hZFRpbWU7Ci0JZmlyc3Rf c3lzbG9nZ2VyX2ZpbGVfdGltZSA9IHBhcmFtLT5maXJzdF9zeXNsb2dnZXJfZmlsZV90aW1l OwotCi0JcmVkaXJlY3Rpb25fZG9uZSA9IHBhcmFtLT5yZWRpcmVjdGlvbl9kb25lOwotCUlz QmluYXJ5VXBncmFkZSA9IHBhcmFtLT5Jc0JpbmFyeVVwZ3JhZGU7Ci0JcXVlcnlfaWRfZW5h YmxlZCA9IHBhcmFtLT5xdWVyeV9pZF9lbmFibGVkOwotCW1heF9zYWZlX2ZkcyA9IHBhcmFt LT5tYXhfc2FmZV9mZHM7Ci0KLQlNYXhCYWNrZW5kcyA9IHBhcmFtLT5NYXhCYWNrZW5kczsK LQotI2lmZGVmIFdJTjMyCi0JUG9zdG1hc3RlckhhbmRsZSA9IHBhcmFtLT5Qb3N0bWFzdGVy SGFuZGxlOwotCXBnd2luMzJfaW5pdGlhbF9zaWduYWxfcGlwZSA9IHBhcmFtLT5pbml0aWFs X3NpZ25hbF9waXBlOwotI2Vsc2UKLQltZW1jcHkoJnBvc3RtYXN0ZXJfYWxpdmVfZmRzLCAm cGFyYW0tPnBvc3RtYXN0ZXJfYWxpdmVfZmRzLAotCQkgICBzaXplb2YocG9zdG1hc3Rlcl9h bGl2ZV9mZHMpKTsKLSNlbmRpZgotCi0JbWVtY3B5KCZzeXNsb2dQaXBlLCAmcGFyYW0tPnN5 c2xvZ1BpcGUsIHNpemVvZihzeXNsb2dQaXBlKSk7Ci0KLQlzdHJsY3B5KG15X2V4ZWNfcGF0 aCwgcGFyYW0tPm15X2V4ZWNfcGF0aCwgTUFYUEdQQVRIKTsKLQotCXN0cmxjcHkocGtnbGli X3BhdGgsIHBhcmFtLT5wa2dsaWJfcGF0aCwgTUFYUEdQQVRIKTsKLQotCWlmIChwYXJhbS0+ TXlCZ3dvcmtlckVudHJ5LmJnd19uYW1lWzBdICE9ICdcMCcpCi0JewotCQlNeUJnd29ya2Vy RW50cnkgPSAoQmFja2dyb3VuZFdvcmtlciAqKQotCQkJTWVtb3J5Q29udGV4dEFsbG9jKFRv cE1lbW9yeUNvbnRleHQsIHNpemVvZihCYWNrZ3JvdW5kV29ya2VyKSk7Ci0JCW1lbWNweShN eUJnd29ya2VyRW50cnksICZwYXJhbS0+TXlCZ3dvcmtlckVudHJ5LCBzaXplb2YoQmFja2dy b3VuZFdvcmtlcikpOwotCX0KLQotCS8qCi0JICogV2UgbmVlZCB0byByZXN0b3JlIGZkLmMn cyBjb3VudHMgb2YgZXh0ZXJuYWxseS1vcGVuZWQgRkRzOyB0byBhdm9pZAotCSAqIGNvbmZ1 c2lvbiwgYmUgc3VyZSB0byBkbyB0aGlzIGFmdGVyIHJlc3RvcmluZyBtYXhfc2FmZV9mZHMu ICAoTm90ZToKLQkgKiBCYWNrZW5kSW5pdGlhbGl6ZSB3aWxsIGhhbmRsZSB0aGlzIGZvciBw b3J0LT5zb2NrLikKLQkgKi8KLSNpZm5kZWYgV0lOMzIKLQlpZiAocG9zdG1hc3Rlcl9hbGl2 ZV9mZHNbMF0gPj0gMCkKLQkJUmVzZXJ2ZUV4dGVybmFsRkQoKTsKLQlpZiAocG9zdG1hc3Rl cl9hbGl2ZV9mZHNbMV0gPj0gMCkKLQkJUmVzZXJ2ZUV4dGVybmFsRkQoKTsKLSNlbmRpZgot fQotCi0KIFNpemUKIFNobWVtQmFja2VuZEFycmF5U2l6ZSh2b2lkKQogewpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFydHVwLmMgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL3N0YXJ0dXAuYwppbmRleCBlZmMyNTgwNTM2YS4uMGRiMDg0M2FiOGUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jCisrKyBiL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAi bGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJw Z3N0YXQuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2F1eHByb2Nlc3MuaCIKICNpbmNsdWRl ICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvc3RhcnR1 cC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCkBAIC0yMjcsOCArMjI4LDE0IEBAIFN0 YXJ0dXBQcm9jRXhpdChpbnQgY29kZSwgRGF0dW0gYXJnKQogICogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiB2b2lkCi1TdGFydHVwUHJvY2Vzc01haW4odm9p ZCkKK1N0YXJ0dXBQcm9jZXNzTWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFy dHVwX2RhdGFfbGVuKQogeworCUFzc2VydChzdGFydHVwX2RhdGFfbGVuID09IDApOworCisJ TXlBdXhQcm9jVHlwZSA9IFN0YXJ0dXBQcm9jZXNzOworCU15QmFja2VuZFR5cGUgPSBCX1NU QVJUVVA7CisJQXV4aWxpYXJ5UHJvY2Vzc0luaXQoKTsKKwogCS8qIEFycmFuZ2UgdG8gY2xl YW4gdXAgYXQgc3RhcnR1cCBwcm9jZXNzIGV4aXQgKi8KIAlvbl9zaG1lbV9leGl0KFN0YXJ0 dXBQcm9jRXhpdCwgMCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv c3lzbG9nZ2VyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N5c2xvZ2dlci5jCmluZGV4 IDg1OGEyZjZiMmI5Li42YjA2MzExYzlkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9zeXNsb2dnZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N5c2xv Z2dlci5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVk ZSAicGd0aW1lLmgiCiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgotI2luY2x1ZGUg InBvc3RtYXN0ZXIvZm9ya19wcm9jZXNzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRl cnJ1cHQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCIKICNpbmNsdWRl ICJwb3N0bWFzdGVyL3N5c2xvZ2dlci5oIgpAQCAtNTAsNiArNDksNyBAQAogI2luY2x1ZGUg InN0b3JhZ2UvcGdfc2htZW0uaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5j bHVkZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNs dWRlICJ1dGlscy9wc19zdGF0dXMuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIK IApAQCAtMTM0LDEwICsxMzQsNyBAQCBzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHJv dGF0aW9uX3JlcXVlc3RlZCA9IGZhbHNlOwogI2lmZGVmIEVYRUNfQkFDS0VORAogc3RhdGlj IGludAlzeXNsb2dnZXJfZmRnZXQoRklMRSAqZmlsZSk7CiBzdGF0aWMgRklMRSAqc3lzbG9n Z2VyX2Zkb3BlbihpbnQgZmQpOwotc3RhdGljIHBpZF90IHN5c2xvZ2dlcl9mb3JrZXhlYyh2 b2lkKTsKLXN0YXRpYyB2b2lkIHN5c2xvZ2dlcl9wYXJzZUFyZ3MoaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSk7CiAjZW5kaWYKLU5PTl9FWEVDX1NUQVRJQyB2b2lkIFN5c0xvZ2dlck1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CiBzdGF0 aWMgdm9pZCBwcm9jZXNzX3BpcGVfaW5wdXQoY2hhciAqbG9nYnVmZmVyLCBpbnQgKmJ5dGVz X2luX2xvZ2J1ZmZlcik7CiBzdGF0aWMgdm9pZCBmbHVzaF9waXBlX2lucHV0KGNoYXIgKmxv Z2J1ZmZlciwgaW50ICpieXRlc19pbl9sb2didWZmZXIpOwogc3RhdGljIEZJTEUgKmxvZ2Zp bGVfb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSwKQEAgLTE1 NiwxMyArMTUzLDE4IEBAIHN0YXRpYyB2b2lkIHNldF9uZXh0X3JvdGF0aW9uX3RpbWUodm9p ZCk7CiBzdGF0aWMgdm9pZCBzaWdVc3IxSGFuZGxlcihTSUdOQUxfQVJHUyk7CiBzdGF0aWMg dm9pZCB1cGRhdGVfbWV0YWluZm9fZGF0YWZpbGUodm9pZCk7CiAKK3R5cGVkZWYgc3RydWN0 IHsKKwlpbnQgc3lzbG9nRmlsZTsKKwlpbnQgY3N2bG9nRmlsZTsKKwlpbnQganNvbmxvZ0Zp bGU7Cit9IHN5c2xvZ2dlcl9zdGFydHVwX2RhdGE7CiAKIC8qCiAgKiBNYWluIGVudHJ5IHBv aW50IGZvciBzeXNsb2dnZXIgcHJvY2VzcwogICogYXJnYy9hcmd2IHBhcmFtZXRlcnMgYXJl IHZhbGlkIG9ubHkgaW4gRVhFQ19CQUNLRU5EIGNhc2UuCiAgKi8KLU5PTl9FWEVDX1NUQVRJ QyB2b2lkCi1TeXNMb2dnZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit2b2lkCitT eXNMb2dnZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9s ZW4pCiB7CiAjaWZuZGVmIFdJTjMyCiAJY2hhcgkJbG9nYnVmZmVyW1JFQURfQlVGX1NJWkVd OwpAQCAtMTc0LDExICsxNzYsMzUgQEAgU3lzTG9nZ2VyTWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogCXBnX3RpbWVfdAlub3c7CiAJV2FpdEV2ZW50U2V0ICp3ZXM7CiAKLQlub3cg PSBNeVN0YXJ0VGltZTsKKwkvKiBSZWxlYXNlIHBvc3RtYXN0ZXIncyB3b3JraW5nIG1lbW9y eSBjb250ZXh0ICovCisJaWYgKFBvc3RtYXN0ZXJDb250ZXh0KQorCXsKKwkJTWVtb3J5Q29u dGV4dERlbGV0ZShQb3N0bWFzdGVyQ29udGV4dCk7CisJCVBvc3RtYXN0ZXJDb250ZXh0ID0g TlVMTDsKKwl9CiAKKwkvKgorCSAqIFJlLW9wZW4gdGhlIGVycm9yIG91dHB1dCBmaWxlcyB0 aGF0IHdlcmUgb3BlbmVkIGJ5IFN5c0xvZ2dlcl9TdGFydCgpLgorCSAqCisJICogV2UgZXhw ZWN0IHRoaXMgd2lsbCBhbHdheXMgc3VjY2VlZCwgd2hpY2ggaXMgdG9vIG9wdGltaXN0aWMs IGJ1dCBpZiBpdAorCSAqIGZhaWxzIHRoZXJlJ3Mgbm90IGEgbG90IHdlIGNhbiBkbyB0byBy ZXBvcnQgdGhlIHByb2JsZW0gYW55d2F5LiAgQXMKKwkgKiBjb2RlZCwgd2UnbGwganVzdCBj cmFzaCBvbiBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBhZnRlciBmYWlsdXJlLi4uCisJ ICovCiAjaWZkZWYgRVhFQ19CQUNLRU5ECi0Jc3lzbG9nZ2VyX3BhcnNlQXJncyhhcmdjLCBh cmd2KTsKLSNlbmRpZgkJCQkJCQkvKiBFWEVDX0JBQ0tFTkQgKi8KKwl7CisJCXN5c2xvZ2dl cl9zdGFydHVwX2RhdGEgKmluZm87CisKKwkJQXNzZXJ0KHN0YXJ0dXBfZGF0YV9sZW4gPT0g c2l6ZW9mKGluZm8pKTsKKwkJaW5mbyA9IChzeXNsb2dnZXJfc3RhcnR1cF9kYXRhICopIHN0 YXJ0dXBfZGF0YTsKKwkJc3lzbG9nRmlsZSA9IHN5c2xvZ2dlcl9mZG9wZW4oaW5mby0+c3lz bG9nRmlsZSk7CisJCWNzdmxvZ0ZpbGUgPSBzeXNsb2dnZXJfZmRvcGVuKGluZm8tPmNzdmxv Z0ZpbGUpOworCQlqc29ubG9nRmlsZSA9IHN5c2xvZ2dlcl9mZG9wZW4oaW5mby0+anNvbmxv Z0ZpbGUpOworCX0KKyNlbHNlCisJQXNzZXJ0KHN0YXJ0dXBfZGF0YV9sZW4gPT0gMCk7Cisj ZW5kaWYKKworCW5vdyA9IE15U3RhcnRUaW1lOwogCiAJTXlCYWNrZW5kVHlwZSA9IEJfTE9H R0VSOwogCWluaXRfcHNfZGlzcGxheShOVUxMKTsKQEAgLTU2OCw2ICs1OTQsOSBAQCBTeXNM b2dnZXJfU3RhcnQodm9pZCkKIHsKIAlwaWRfdAkJc3lzbG9nZ2VyUGlkOwogCWNoYXIJICAg KmZpbGVuYW1lOworI2lmZGVmIEVYRUNfQkFDS0VORAorCXN5c2xvZ2dlcl9zdGFydHVwX2Rh dGEgc3RhcnR1cF9kYXRhOworI2VuZGlmCQkJCQkJCS8qIEVYRUNfQkFDS0VORCAqLwogCiAJ aWYgKCFMb2dnaW5nX2NvbGxlY3RvcikKIAkJcmV0dXJuIDA7CkBAIC02NjcsMTEyICs2OTYs OTUgQEAgU3lzTG9nZ2VyX1N0YXJ0KHZvaWQpCiAJfQogCiAjaWZkZWYgRVhFQ19CQUNLRU5E Ci0Jc3dpdGNoICgoc3lzbG9nZ2VyUGlkID0gc3lzbG9nZ2VyX2ZvcmtleGVjKCkpKQorCXN0 YXJ0dXBfZGF0YS5zeXNsb2dGaWxlID0gc3lzbG9nZ2VyX2ZkZ2V0KHN5c2xvZ0ZpbGUpOwor CXN0YXJ0dXBfZGF0YS5jc3Zsb2dGaWxlID0gc3lzbG9nZ2VyX2ZkZ2V0KGNzdmxvZ0ZpbGUp OworCXN0YXJ0dXBfZGF0YS5qc29ubG9nRmlsZSA9IHN5c2xvZ2dlcl9mZGdldChqc29ubG9n RmlsZSk7CisJc3lzbG9nZ2VyUGlkID0gcG9zdG1hc3Rlcl9jaGlsZF9sYXVuY2goUE1DX1NZ U0xPR0dFUiwgKGNoYXIgKikgJnN0YXJ0dXBfZGF0YSwgc2l6ZW9mKHN0YXJ0dXBfZGF0YSks IE5VTEwpOwogI2Vsc2UKLQlzd2l0Y2ggKChzeXNsb2dnZXJQaWQgPSBmb3JrX3Byb2Nlc3Mo KSkpCi0jZW5kaWYKLQl7Ci0JCWNhc2UgLTE6Ci0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVy cm1zZygiY291bGQgbm90IGZvcmsgc3lzdGVtIGxvZ2dlcjogJW0iKSkpOwotCQkJcmV0dXJu IDA7Ci0KLSNpZm5kZWYgRVhFQ19CQUNLRU5ECi0JCWNhc2UgMDoKLQkJCS8qIGluIHBvc3Rt YXN0ZXIgY2hpbGQgLi4uICovCi0JCQlJbml0UG9zdG1hc3RlckNoaWxkKCk7Ci0KLQkJCS8q IENsb3NlIHRoZSBwb3N0bWFzdGVyJ3Mgc29ja2V0cyAqLwotCQkJQ2xvc2VQb3N0bWFzdGVy UG9ydHModHJ1ZSk7Ci0KLQkJCS8qIERyb3Agb3VyIGNvbm5lY3Rpb24gdG8gcG9zdG1hc3Rl cidzIHNoYXJlZCBtZW1vcnksIGFzIHdlbGwgKi8KLQkJCWRzbV9kZXRhY2hfYWxsKCk7Ci0J CQlQR1NoYXJlZE1lbW9yeURldGFjaCgpOworCXN5c2xvZ2dlclBpZCA9IHBvc3RtYXN0ZXJf Y2hpbGRfbGF1bmNoKFBNQ19TWVNMT0dHRVIsIE5VTEwsIDAsIE5VTEwpOworI2VuZGlmCQkJ CQkJCS8qIEVYRUNfQkFDS0VORCAqLwogCi0JCQkvKiBkbyB0aGUgd29yayAqLwotCQkJU3lz TG9nZ2VyTWFpbigwLCBOVUxMKTsKLQkJCWJyZWFrOwotI2VuZGlmCisJaWYgKHN5c2xvZ2dl clBpZCA9PSAtMSkKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2coImNvdWxkIG5v dCBmb3JrIHN5c3RlbSBsb2dnZXI6ICVtIikpKTsKKwkJcmV0dXJuIDA7CisJfQogCi0JCWRl ZmF1bHQ6Ci0JCQkvKiBzdWNjZXNzLCBpbiBwb3N0bWFzdGVyICovCisJLyogc3VjY2Vzcywg aW4gcG9zdG1hc3RlciAqLwogCi0JCQkvKiBub3cgd2UgcmVkaXJlY3Qgc3RkZXJyLCBpZiBu b3QgZG9uZSBhbHJlYWR5ICovCi0JCQlpZiAoIXJlZGlyZWN0aW9uX2RvbmUpCi0JCQl7CisJ Lyogbm93IHdlIHJlZGlyZWN0IHN0ZGVyciwgaWYgbm90IGRvbmUgYWxyZWFkeSAqLworCWlm ICghcmVkaXJlY3Rpb25fZG9uZSkKKwl7CiAjaWZkZWYgV0lOMzIKLQkJCQlpbnQJCQlmZDsK KwkJaW50CQkJZmQ7CiAjZW5kaWYKIAotCQkJCS8qCi0JCQkJICogTGVhdmUgYSBicmVhZGNy dW1iIHRyYWlsIHdoZW4gcmVkaXJlY3RpbmcsIGluIGNhc2UgdGhlIHVzZXIKLQkJCQkgKiBm b3JnZXRzIHRoYXQgcmVkaXJlY3Rpb24gaXMgYWN0aXZlIGFuZCBsb29rcyBvbmx5IGF0IHRo ZQotCQkJCSAqIG9yaWdpbmFsIHN0ZGVyciB0YXJnZXQgZmlsZS4KLQkJCQkgKi8KLQkJCQll cmVwb3J0KExPRywKLQkJCQkJCShlcnJtc2coInJlZGlyZWN0aW5nIGxvZyBvdXRwdXQgdG8g bG9nZ2luZyBjb2xsZWN0b3IgcHJvY2VzcyIpLAotCQkJCQkJIGVycmhpbnQoIkZ1dHVyZSBs b2cgb3V0cHV0IHdpbGwgYXBwZWFyIGluIGRpcmVjdG9yeSBcIiVzXCIuIiwKLQkJCQkJCQkJ IExvZ19kaXJlY3RvcnkpKSk7CisJCS8qCisJCSAqIExlYXZlIGEgYnJlYWRjcnVtYiB0cmFp bCB3aGVuIHJlZGlyZWN0aW5nLCBpbiBjYXNlIHRoZSB1c2VyCisJCSAqIGZvcmdldHMgdGhh dCByZWRpcmVjdGlvbiBpcyBhY3RpdmUgYW5kIGxvb2tzIG9ubHkgYXQgdGhlCisJCSAqIG9y aWdpbmFsIHN0ZGVyciB0YXJnZXQgZmlsZS4KKwkJICovCisJCWVyZXBvcnQoTE9HLAorCQkJ CShlcnJtc2coInJlZGlyZWN0aW5nIGxvZyBvdXRwdXQgdG8gbG9nZ2luZyBjb2xsZWN0b3Ig cHJvY2VzcyIpLAorCQkJCSBlcnJoaW50KCJGdXR1cmUgbG9nIG91dHB1dCB3aWxsIGFwcGVh ciBpbiBkaXJlY3RvcnkgXCIlc1wiLiIsCisJCQkJCQkgTG9nX2RpcmVjdG9yeSkpKTsKIAog I2lmbmRlZiBXSU4zMgotCQkJCWZmbHVzaChzdGRvdXQpOwotCQkJCWlmIChkdXAyKHN5c2xv Z1BpcGVbMV0sIFNURE9VVF9GSUxFTk8pIDwgMCkKLQkJCQkJZXJlcG9ydChGQVRBTCwKLQkJ CQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJCQkgZXJybXNnKCJjb3Vs ZCBub3QgcmVkaXJlY3Qgc3Rkb3V0OiAlbSIpKSk7Ci0JCQkJZmZsdXNoKHN0ZGVycik7Ci0J CQkJaWYgKGR1cDIoc3lzbG9nUGlwZVsxXSwgU1RERVJSX0ZJTEVOTykgPCAwKQotCQkJCQll cmVwb3J0KEZBVEFMLAotCQkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJ CQkJCSBlcnJtc2coImNvdWxkIG5vdCByZWRpcmVjdCBzdGRlcnI6ICVtIikpKTsKLQkJCQkv KiBOb3cgd2UgYXJlIGRvbmUgd2l0aCB0aGUgd3JpdGUgZW5kIG9mIHRoZSBwaXBlLiAqLwot CQkJCWNsb3NlKHN5c2xvZ1BpcGVbMV0pOwotCQkJCXN5c2xvZ1BpcGVbMV0gPSAtMTsKKwkJ ZmZsdXNoKHN0ZG91dCk7CisJCWlmIChkdXAyKHN5c2xvZ1BpcGVbMV0sIFNURE9VVF9GSUxF Tk8pIDwgMCkKKwkJCWVyZXBvcnQoRkFUQUwsCisJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2Fj Y2VzcygpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVkaXJlY3Qgc3Rkb3V0OiAlbSIp KSk7CisJCWZmbHVzaChzdGRlcnIpOworCQlpZiAoZHVwMihzeXNsb2dQaXBlWzFdLCBTVERF UlJfRklMRU5PKSA8IDApCisJCQllcmVwb3J0KEZBVEFMLAorCQkJCQkoZXJyY29kZV9mb3Jf ZmlsZV9hY2Nlc3MoKSwKKwkJCQkJIGVycm1zZygiY291bGQgbm90IHJlZGlyZWN0IHN0ZGVy cjogJW0iKSkpOworCQkvKiBOb3cgd2UgYXJlIGRvbmUgd2l0aCB0aGUgd3JpdGUgZW5kIG9m IHRoZSBwaXBlLiAqLworCQljbG9zZShzeXNsb2dQaXBlWzFdKTsKKwkJc3lzbG9nUGlwZVsx XSA9IC0xOwogI2Vsc2UKIAotCQkJCS8qCi0JCQkJICogb3BlbiB0aGUgcGlwZSBpbiBiaW5h cnkgbW9kZSBhbmQgbWFrZSBzdXJlIHN0ZGVyciBpcyBiaW5hcnkKLQkJCQkgKiBhZnRlciBp dCdzIGJlZW4gZHVwJ2VkIGludG8sIHRvIGF2b2lkIGRpc3R1cmJpbmcgdGhlIHBpcGUKLQkJ CQkgKiBjaHVua2luZyBwcm90b2NvbC4KLQkJCQkgKi8KLQkJCQlmZmx1c2goc3RkZXJyKTsK LQkJCQlmZCA9IF9vcGVuX29zZmhhbmRsZSgoaW50cHRyX3QpIHN5c2xvZ1BpcGVbMV0sCi0J CQkJCQkJCQkgX09fQVBQRU5EIHwgX09fQklOQVJZKTsKLQkJCQlpZiAoZHVwMihmZCwgU1RE RVJSX0ZJTEVOTykgPCAwKQotCQkJCQllcmVwb3J0KEZBVEFMLAotCQkJCQkJCShlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZWRpcmVj dCBzdGRlcnI6ICVtIikpKTsKLQkJCQljbG9zZShmZCk7Ci0JCQkJX3NldG1vZGUoU1RERVJS X0ZJTEVOTywgX09fQklOQVJZKTsKKwkJLyoKKwkJICogb3BlbiB0aGUgcGlwZSBpbiBiaW5h cnkgbW9kZSBhbmQgbWFrZSBzdXJlIHN0ZGVyciBpcyBiaW5hcnkKKwkJICogYWZ0ZXIgaXQn cyBiZWVuIGR1cCdlZCBpbnRvLCB0byBhdm9pZCBkaXN0dXJiaW5nIHRoZSBwaXBlCisJCSAq IGNodW5raW5nIHByb3RvY29sLgorCQkgKi8KKwkJZmZsdXNoKHN0ZGVycik7CisJCWZkID0g X29wZW5fb3NmaGFuZGxlKChpbnRwdHJfdCkgc3lzbG9nUGlwZVsxXSwKKwkJCQkJCQkgX09f QVBQRU5EIHwgX09fQklOQVJZKTsKKwkJaWYgKGR1cDIoZmQsIFNUREVSUl9GSUxFTk8pIDwg MCkKKwkJCWVyZXBvcnQoRkFUQUwsCisJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vzcygp LAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVkaXJlY3Qgc3RkZXJyOiAlbSIpKSk7CisJ CWNsb3NlKGZkKTsKKwkJX3NldG1vZGUoU1RERVJSX0ZJTEVOTywgX09fQklOQVJZKTsKIAot CQkJCS8qCi0JCQkJICogTm93IHdlIGFyZSBkb25lIHdpdGggdGhlIHdyaXRlIGVuZCBvZiB0 aGUgcGlwZS4KLQkJCQkgKiBDbG9zZUhhbmRsZSgpIG11c3Qgbm90IGJlIGNhbGxlZCBiZWNh dXNlIHRoZSBwcmVjZWRpbmcKLQkJCQkgKiBjbG9zZSgpIGNsb3NlcyB0aGUgdW5kZXJseWlu ZyBoYW5kbGUuCi0JCQkJICovCi0JCQkJc3lzbG9nUGlwZVsxXSA9IDA7CisJCS8qCisJCSAq IE5vdyB3ZSBhcmUgZG9uZSB3aXRoIHRoZSB3cml0ZSBlbmQgb2YgdGhlIHBpcGUuCisJCSAq IENsb3NlSGFuZGxlKCkgbXVzdCBub3QgYmUgY2FsbGVkIGJlY2F1c2UgdGhlIHByZWNlZGlu ZworCQkgKiBjbG9zZSgpIGNsb3NlcyB0aGUgdW5kZXJseWluZyBoYW5kbGUuCisJCSAqLwor CQlzeXNsb2dQaXBlWzFdID0gMDsKICNlbmRpZgotCQkJCXJlZGlyZWN0aW9uX2RvbmUgPSB0 cnVlOwotCQkJfQotCi0JCQkvKiBwb3N0bWFzdGVyIHdpbGwgbmV2ZXIgd3JpdGUgdGhlIGZp bGUocyk7IGNsb3NlICdlbSAqLwotCQkJZmNsb3NlKHN5c2xvZ0ZpbGUpOwotCQkJc3lzbG9n RmlsZSA9IE5VTEw7Ci0JCQlpZiAoY3N2bG9nRmlsZSAhPSBOVUxMKQotCQkJewotCQkJCWZj bG9zZShjc3Zsb2dGaWxlKTsKLQkJCQljc3Zsb2dGaWxlID0gTlVMTDsKLQkJCX0KLQkJCWlm IChqc29ubG9nRmlsZSAhPSBOVUxMKQotCQkJewotCQkJCWZjbG9zZShqc29ubG9nRmlsZSk7 Ci0JCQkJanNvbmxvZ0ZpbGUgPSBOVUxMOwotCQkJfQotCQkJcmV0dXJuIChpbnQpIHN5c2xv Z2dlclBpZDsKKwkJcmVkaXJlY3Rpb25fZG9uZSA9IHRydWU7CiAJfQogCi0JLyogd2Ugc2hv dWxkIG5ldmVyIHJlYWNoIGhlcmUgKi8KLQlyZXR1cm4gMDsKKwkvKiBwb3N0bWFzdGVyIHdp bGwgbmV2ZXIgd3JpdGUgdGhlIGZpbGUocyk7IGNsb3NlICdlbSAqLworCWZjbG9zZShzeXNs b2dGaWxlKTsKKwlzeXNsb2dGaWxlID0gTlVMTDsKKwlpZiAoY3N2bG9nRmlsZSAhPSBOVUxM KQorCXsKKwkJZmNsb3NlKGNzdmxvZ0ZpbGUpOworCQljc3Zsb2dGaWxlID0gTlVMTDsKKwl9 CisJaWYgKGpzb25sb2dGaWxlICE9IE5VTEwpCisJeworCQlmY2xvc2UoanNvbmxvZ0ZpbGUp OworCQlqc29ubG9nRmlsZSA9IE5VTEw7CisJfQorCXJldHVybiAoaW50KSBzeXNsb2dnZXJQ aWQ7CiB9CiAKIApAQCAtODMxLDY5ICs4NDMsNiBAQCBzeXNsb2dnZXJfZmRvcGVuKGludCBm ZCkKIAogCXJldHVybiBmaWxlOwogfQotCi0vKgotICogc3lzbG9nZ2VyX2ZvcmtleGVjKCkg LQotICoKLSAqIEZvcm1hdCB1cCB0aGUgYXJnbGlzdCBmb3IsIHRoZW4gZm9yayBhbmQgZXhl YywgYSBzeXNsb2dnZXIgcHJvY2VzcwotICovCi1zdGF0aWMgcGlkX3QKLXN5c2xvZ2dlcl9m b3JrZXhlYyh2b2lkKQotewotCWNoYXIJICAgKmF2WzEwXTsKLQlpbnQJCQlhYyA9IDA7Ci0J Y2hhcgkJZmlsZW5vYnVmWzMyXTsKLQljaGFyCQljc3ZmaWxlbm9idWZbMzJdOwotCWNoYXIJ CWpzb25maWxlbm9idWZbMzJdOwotCi0JYXZbYWMrK10gPSAicG9zdGdyZXMiOwotCWF2W2Fj KytdID0gIi0tZm9ya2xvZyI7Ci0JYXZbYWMrK10gPSBOVUxMOwkJCS8qIGZpbGxlZCBpbiBi eSBwb3N0bWFzdGVyX2ZvcmtleGVjICovCi0KLQkvKiBzdGF0aWMgdmFyaWFibGVzICh0aG9z ZSBub3QgcGFzc2VkIGJ5IHdyaXRlX2JhY2tlbmRfdmFyaWFibGVzKSAqLwotCXNucHJpbnRm KGZpbGVub2J1Ziwgc2l6ZW9mKGZpbGVub2J1ZiksICIlZCIsCi0JCQkgc3lzbG9nZ2VyX2Zk Z2V0KHN5c2xvZ0ZpbGUpKTsKLQlhdlthYysrXSA9IGZpbGVub2J1ZjsKLQlzbnByaW50Zihj c3ZmaWxlbm9idWYsIHNpemVvZihjc3ZmaWxlbm9idWYpLCAiJWQiLAotCQkJIHN5c2xvZ2dl cl9mZGdldChjc3Zsb2dGaWxlKSk7Ci0JYXZbYWMrK10gPSBjc3ZmaWxlbm9idWY7Ci0Jc25w cmludGYoanNvbmZpbGVub2J1Ziwgc2l6ZW9mKGpzb25maWxlbm9idWYpLCAiJWQiLAotCQkJ IHN5c2xvZ2dlcl9mZGdldChqc29ubG9nRmlsZSkpOwotCWF2W2FjKytdID0ganNvbmZpbGVu b2J1ZjsKLQotCWF2W2FjXSA9IE5VTEw7Ci0JQXNzZXJ0KGFjIDwgbGVuZ3Rob2YoYXYpKTsK LQotCXJldHVybiBwb3N0bWFzdGVyX2ZvcmtleGVjKGFjLCBhdik7Ci19Ci0KLS8qCi0gKiBz eXNsb2dnZXJfcGFyc2VBcmdzKCkgLQotICoKLSAqIEV4dHJhY3QgZGF0YSBmcm9tIHRoZSBh cmdsaXN0IGZvciBleGVjJ2VkIHN5c2xvZ2dlciBwcm9jZXNzCi0gKi8KLXN0YXRpYyB2b2lk Ci1zeXNsb2dnZXJfcGFyc2VBcmdzKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JaW50 CQkJZmQ7Ci0KLQlBc3NlcnQoYXJnYyA9PSA2KTsKLQlhcmd2ICs9IDM7Ci0KLQkvKgotCSAq IFJlLW9wZW4gdGhlIGVycm9yIG91dHB1dCBmaWxlcyB0aGF0IHdlcmUgb3BlbmVkIGJ5IFN5 c0xvZ2dlcl9TdGFydCgpLgotCSAqCi0JICogV2UgZXhwZWN0IHRoaXMgd2lsbCBhbHdheXMg c3VjY2VlZCwgd2hpY2ggaXMgdG9vIG9wdGltaXN0aWMsIGJ1dCBpZiBpdAotCSAqIGZhaWxz IHRoZXJlJ3Mgbm90IGEgbG90IHdlIGNhbiBkbyB0byByZXBvcnQgdGhlIHByb2JsZW0gYW55 d2F5LiAgQXMKLQkgKiBjb2RlZCwgd2UnbGwganVzdCBjcmFzaCBvbiBhIG51bGwgcG9pbnRl ciBkZXJlZmVyZW5jZSBhZnRlciBmYWlsdXJlLi4uCi0JICovCi0JZmQgPSBhdG9pKCphcmd2 KyspOwotCXN5c2xvZ0ZpbGUgPSBzeXNsb2dnZXJfZmRvcGVuKGZkKTsKLQlmZCA9IGF0b2ko KmFyZ3YrKyk7Ci0JY3N2bG9nRmlsZSA9IHN5c2xvZ2dlcl9mZG9wZW4oZmQpOwotCWZkID0g YXRvaSgqYXJndisrKTsKLQlqc29ubG9nRmlsZSA9IHN5c2xvZ2dlcl9mZG9wZW4oZmQpOwot fQogI2VuZGlmCQkJCQkJCS8qIEVYRUNfQkFDS0VORCAqLwogCiAKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsd3JpdGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL3dhbHdyaXRlci5jCmluZGV4IDI2NmZiYzIzMzk5Li44ODZjOGJkOGY2YSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWx3cml0ZXIuYworKysgYi9zcmMvYmFj a2VuZC9wb3N0bWFzdGVyL3dhbHdyaXRlci5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVk ZSAibGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRl ICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2F1eHByb2Nlc3MuaCIKICNpbmNs dWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvd2Fs d3JpdGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKQEAgLTg4LDEzICs4OSwx OSBAQCBzdGF0aWMgdm9pZCBIYW5kbGVXYWxXcml0ZXJJbnRlcnJ1cHRzKHZvaWQpOwogICog YmFzaWMgZXhlY3V0aW9uIGVudmlyb25tZW50LCBidXQgbm90IGVuYWJsZWQgc2lnbmFscyB5 ZXQuCiAgKi8KIHZvaWQKLVdhbFdyaXRlck1haW4odm9pZCkKK1dhbFdyaXRlck1haW4oY2hh ciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIHsKIAlzaWdqbXBf YnVmCWxvY2FsX3NpZ2ptcF9idWY7CiAJTWVtb3J5Q29udGV4dCB3YWx3cml0ZXJfY29udGV4 dDsKIAlpbnQJCQlsZWZ0X3RpbGxfaGliZXJuYXRlOwogCWJvb2wJCWhpYmVybmF0aW5nOwog CisJQXNzZXJ0KHN0YXJ0dXBfZGF0YV9sZW4gPT0gMCk7CisKKwlNeUF1eFByb2NUeXBlID0g V2FsV3JpdGVyUHJvY2VzczsKKwlNeUJhY2tlbmRUeXBlID0gQl9XQUxfV1JJVEVSOworCUF1 eGlsaWFyeVByb2Nlc3NJbml0KCk7CisKIAkvKgogCSAqIFByb3Blcmx5IGFjY2VwdCBvciBp Z25vcmUgc2lnbmFscyB0aGUgcG9zdG1hc3RlciBtaWdodCBzZW5kIHVzCiAJICoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYwppbmRleCA4N2I1NTkz ZDJkYi4uOTFmMDM3ZjA3MGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbGF1bmNoZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2xhdW5jaGVyLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4u aCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2Vy LmgiCi0jaW5jbHVkZSAicG9zdG1hc3Rlci9mb3JrX3Byb2Nlc3MuaCIKICNpbmNsdWRlICJw b3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1hc3Rl ci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oIgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmMKaW5kZXggZmVmZjcwOTQzNTEuLjAxZThj M2ZkOTM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZl ci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmMKQEAgLTY1 LDYgKzY1LDcgQEAKICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgogI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIv YXV4cHJvY2Vzcy5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlv bi93YWxzZW5kZXIuaCIKQEAgLTE4NCw3ICsxODUsNyBAQCBQcm9jZXNzV2FsUmN2SW50ZXJy dXB0cyh2b2lkKQogCiAvKiBNYWluIGVudHJ5IHBvaW50IGZvciB3YWxyZWNlaXZlciBwcm9j ZXNzICovCiB2b2lkCi1XYWxSZWNlaXZlck1haW4odm9pZCkKK1dhbFJlY2VpdmVyTWFpbihj aGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogewogCWNoYXIJ CWNvbm5pbmZvW01BWENPTk5JTkZPXTsKIAljaGFyCSAgICp0bXBfY29ubmluZm87CkBAIC0y MDAsMTAgKzIwMSwxNyBAQCBXYWxSZWNlaXZlck1haW4odm9pZCkKIAljaGFyCSAgICpzZW5k ZXJfaG9zdCA9IE5VTEw7CiAJaW50CQkJc2VuZGVyX3BvcnQgPSAwOwogCisJQXNzZXJ0KHN0 YXJ0dXBfZGF0YV9sZW4gPT0gMCk7CisKKwlNeUF1eFByb2NUeXBlID0gV2FsUmVjZWl2ZXJQ cm9jZXNzOworCU15QmFja2VuZFR5cGUgPSBCX1dBTF9SRUNFSVZFUjsKKwlBdXhpbGlhcnlQ cm9jZXNzSW5pdCgpOworCiAJLyoKIAkgKiBXYWxSY3Ygc2hvdWxkIGJlIHNldCB1cCBhbHJl YWR5IChpZiB3ZSBhcmUgYSBiYWNrZW5kLCB3ZSBpbmhlcml0IHRoaXMKIAkgKiBieSBmb3Jr KCkgb3IgRVhFQ19CQUNLRU5EIG1lY2hhbmlzbSBmcm9tIHRoZSBwb3N0bWFzdGVyKS4KIAkg Ki8KKwkvLyBGSVhNRTogY291bGQgdGhpcyBiZSBwYXNzZWQgaW4gc3RhcnR1cF9kYXRhIGlu c3RlYWQ/IFdvdWxkIGl0IGJlIGJldHRlcj8KIAlBc3NlcnQod2FscmN2ICE9IE5VTEwpOwog CiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCmluZGV4IDU0NjVmYTE5NjQ2Li5kNjVk NDYxMzQwYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYwor KysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCkBAIC0xNDQsNiArMTQ0LDgg QEAgSW5pdFNobWVtQWxsb2NhdGlvbih2b2lkKQogCS8qCiAJICogSW5pdGlhbGl6ZSBTaG1l bVZhcmlhYmxlQ2FjaGUgZm9yIHRyYW5zYWN0aW9uIG1hbmFnZXIuIChUaGlzIGRvZXNuJ3QK IAkgKiByZWFsbHkgYmVsb25nIGhlcmUsIGJ1dCBub3Qgd29ydGggbW92aW5nLikKKwkgKgor CSAqIFhYWDogd2UgcmVhbGx5IHNob3VsZCBtb3ZlIHRoaXMKIAkgKi8KIAlTaG1lbVZhcmlh YmxlQ2FjaGUgPSAoVmFyaWFibGVDYWNoZSkKIAkJU2htZW1BbGxvYyhzaXplb2YoKlNobWVt VmFyaWFibGVDYWNoZSkpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jl cy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IDAxYjZjYzFmN2QzLi42 YmM1YTQ3ODY0ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisr KyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtNDIwNCw2ICs0MjA0LDcgQEAg UG9zdGdyZXNNYWluKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqdXNlcm5hbWUp CiAJICogKk15UHJvY1BvcnQsIGJlY2F1c2UgQ29ubkNyZWF0ZSgpIGFsbG9jYXRlZCB0aGF0 IHNwYWNlIHdpdGggbWFsbG9jKCkKIAkgKiAuLi4gZWxzZSB3ZSdkIG5lZWQgdG8gY29weSB0 aGUgUG9ydCBkYXRhIGZpcnN0LiAgQWxzbywgc3Vic2lkaWFyeSBkYXRhCiAJICogc3VjaCBh cyB0aGUgdXNlcm5hbWUgaXNuJ3QgbG9zdCBlaXRoZXI7IHNlZSBQcm9jZXNzU3RhcnR1cFBh Y2tldCgpLgorCSAqIFhYWAogCSAqLwogCWlmIChQb3N0bWFzdGVyQ29udGV4dCkKIAl7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCmluZGV4IDAxMWVjMTgwMTVhLi5lN2RkZTFiNGUx ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKQEAgLTQ0LDYgKzQ0LDcgQEAgdm9s YXRpbGUgdWludDMyIENyaXRTZWN0aW9uQ291bnQgPSAwOwogaW50CQkJTXlQcm9jUGlkOwog cGdfdGltZV90CU15U3RhcnRUaW1lOwogVGltZXN0YW1wVHogTXlTdGFydFRpbWVzdGFtcDsK K3N0cnVjdCBDbGllbnRTb2NrZXQgKk15Q2xpZW50U29ja2V0Owogc3RydWN0IFBvcnQgKk15 UHJvY1BvcnQ7CiBpbnQzMgkJTXlDYW5jZWxLZXk7CiBpbnQJCQlNeVBNQ2hpbGRTbG90Owpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jCmluZGV4IGE2MDQ0MzIxMjZjLi5mYjBmMjZk MTgxNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYwpAQCAtODUsMTM5ICs4NSw2 IEBAIGJvb2wJCUlnbm9yZVN5c3RlbUluZGV4ZXMgPSBmYWxzZTsKICAqIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ICAqLwogCi0vKgotICogSW5pdGlhbGl6ZSB0aGUgYmFzaWMgZW52aXJvbm1lbnQgZm9yIGEg cG9zdG1hc3RlciBjaGlsZAotICoKLSAqIFNob3VsZCBiZSBjYWxsZWQgYXMgZWFybHkgYXMg cG9zc2libGUgYWZ0ZXIgdGhlIGNoaWxkJ3Mgc3RhcnR1cC4gSG93ZXZlciwKLSAqIG9uIEVY RUNfQkFDS0VORCBidWlsZHMgaXQgZG9lcyBuZWVkIHRvIGJlIGFmdGVyIHJlYWRfYmFja2Vu ZF92YXJpYWJsZXMoKS4KLSAqLwotdm9pZAotSW5pdFBvc3RtYXN0ZXJDaGlsZCh2b2lkKQot ewotCUlzVW5kZXJQb3N0bWFzdGVyID0gdHJ1ZTsJLyogd2UgYXJlIGEgcG9zdG1hc3RlciBz dWJwcm9jZXNzIG5vdyAqLwotCi0JLyoKLQkgKiBTdGFydCBvdXIgd2luMzIgc2lnbmFsIGlt cGxlbWVudGF0aW9uLiBUaGlzIGhhcyB0byBiZSBkb25lIGFmdGVyIHdlCi0JICogcmVhZCB0 aGUgYmFja2VuZCB2YXJpYWJsZXMsIGJlY2F1c2Ugd2UgbmVlZCB0byBwaWNrIHVwIHRoZSBz aWduYWwgcGlwZQotCSAqIGZyb20gdGhlIHBhcmVudCBwcm9jZXNzLgotCSAqLwotI2lmZGVm IFdJTjMyCi0JcGd3aW4zMl9zaWduYWxfaW5pdGlhbGl6ZSgpOwotI2VuZGlmCi0KLQkvKgot CSAqIFNldCByZWZlcmVuY2UgcG9pbnQgZm9yIHN0YWNrLWRlcHRoIGNoZWNraW5nLiAgVGhp cyBtaWdodCBzZWVtCi0JICogcmVkdW5kYW50IGluICFFWEVDX0JBQ0tFTkQgYnVpbGRzOyBi dXQgaXQncyBub3QgYmVjYXVzZSB0aGUgcG9zdG1hc3RlcgotCSAqIGxhdW5jaGVzIGl0cyBj aGlsZHJlbiBmcm9tIHNpZ25hbCBoYW5kbGVycywgc28gd2UgbWlnaHQgYmUgcnVubmluZyBv bgotCSAqIGFuIGFsdGVybmF0aXZlIHN0YWNrLgotCSAqLwotCSh2b2lkKSBzZXRfc3RhY2tf YmFzZSgpOwotCi0JSW5pdFByb2Nlc3NHbG9iYWxzKCk7Ci0KLQkvKgotCSAqIG1ha2Ugc3Vy ZSBzdGRlcnIgaXMgaW4gYmluYXJ5IG1vZGUgYmVmb3JlIGFueXRoaW5nIGNhbiBwb3NzaWJs eSBiZQotCSAqIHdyaXR0ZW4gdG8gaXQsIGluIGNhc2UgaXQncyBhY3R1YWxseSB0aGUgc3lz bG9nZ2VyIHBpcGUsIHNvIHRoZSBwaXBlCi0JICogY2h1bmtpbmcgcHJvdG9jb2wgaXNuJ3Qg ZGlzdHVyYmVkLiBOb24tbG9ncGlwZSBkYXRhIGdldHMgdHJhbnNsYXRlZCBvbgotCSAqIHJl ZGlyZWN0aW9uIChlLmcuIHZpYSBwZ19jdGwgLWwpIGFueXdheS4KLQkgKi8KLSNpZmRlZiBX SU4zMgotCV9zZXRtb2RlKGZpbGVubyhzdGRlcnIpLCBfT19CSU5BUlkpOwotI2VuZGlmCi0K LQkvKiBXZSBkb24ndCB3YW50IHRoZSBwb3N0bWFzdGVyJ3MgcHJvY19leGl0KCkgaGFuZGxl cnMgKi8KLQlvbl9leGl0X3Jlc2V0KCk7Ci0KLQkvKiBJbiBFWEVDX0JBQ0tFTkQgY2FzZSB3 ZSB3aWxsIG5vdCBoYXZlIGluaGVyaXRlZCBCbG9ja1NpZyBldGMgdmFsdWVzICovCi0jaWZk ZWYgRVhFQ19CQUNLRU5ECi0JcHFpbml0bWFzaygpOwotI2VuZGlmCi0KLQkvKiBJbml0aWFs aXplIHByb2Nlc3MtbG9jYWwgbGF0Y2ggc3VwcG9ydCAqLwotCUluaXRpYWxpemVMYXRjaFN1 cHBvcnQoKTsKLQlJbml0UHJvY2Vzc0xvY2FsTGF0Y2goKTsKLQlJbml0aWFsaXplTGF0Y2hX YWl0U2V0KCk7Ci0KLQkvKgotCSAqIElmIHBvc3NpYmxlLCBtYWtlIHRoaXMgcHJvY2VzcyBh IGdyb3VwIGxlYWRlciwgc28gdGhhdCB0aGUgcG9zdG1hc3RlcgotCSAqIGNhbiBzaWduYWwg YW55IGNoaWxkIHByb2Nlc3NlcyB0b28uIE5vdCBhbGwgcHJvY2Vzc2VzIHdpbGwgaGF2ZQot CSAqIGNoaWxkcmVuLCBidXQgZm9yIGNvbnNpc3RlbmN5IHdlIG1ha2UgYWxsIHBvc3RtYXN0 ZXIgY2hpbGQgcHJvY2Vzc2VzIGRvCi0JICogdGhpcy4KLQkgKi8KLSNpZmRlZiBIQVZFX1NF VFNJRAotCWlmIChzZXRzaWQoKSA8IDApCi0JCWVsb2coRkFUQUwsICJzZXRzaWQoKSBmYWls ZWQ6ICVtIik7Ci0jZW5kaWYKLQotCS8qCi0JICogRXZlcnkgcG9zdG1hc3RlciBjaGlsZCBw cm9jZXNzIGlzIGV4cGVjdGVkIHRvIHJlc3BvbmQgcHJvbXB0bHkgdG8KLQkgKiBTSUdRVUlU IGF0IGFsbCB0aW1lcy4gIFRoZXJlZm9yZSB3ZSBjZW50cmFsbHkgcmVtb3ZlIFNJR1FVSVQg ZnJvbQotCSAqIEJsb2NrU2lnIGFuZCBpbnN0YWxsIGEgc3VpdGFibGUgc2lnbmFsIGhhbmRs ZXIuICAoQ2xpZW50LWZhY2luZwotCSAqIHByb2Nlc3NlcyBtYXkgY2hvb3NlIHRvIHJlcGxh Y2UgdGhpcyBkZWZhdWx0IGNob2ljZSBvZiBoYW5kbGVyIHdpdGgKLQkgKiBxdWlja2RpZSgp LikgIEFsbCBvdGhlciBibG9ja2FibGUgc2lnbmFscyByZW1haW4gYmxvY2tlZCBmb3Igbm93 LgotCSAqLwotCXBxc2lnbmFsKFNJR1FVSVQsIFNpZ25hbEhhbmRsZXJGb3JDcmFzaEV4aXQp OwotCi0Jc2lnZGVsc2V0KCZCbG9ja1NpZywgU0lHUVVJVCk7Ci0Jc2lncHJvY21hc2soU0lH X1NFVE1BU0ssICZCbG9ja1NpZywgTlVMTCk7Ci0KLQkvKiBSZXF1ZXN0IGEgc2lnbmFsIGlm IHRoZSBwb3N0bWFzdGVyIGRpZXMsIGlmIHBvc3NpYmxlLiAqLwotCVBvc3RtYXN0ZXJEZWF0 aFNpZ25hbEluaXQoKTsKLQotCS8qIERvbid0IGdpdmUgdGhlIHBpcGUgdG8gc3VicHJvZ3Jh bXMgdGhhdCB3ZSBleGVjdXRlLiAqLwotI2lmbmRlZiBXSU4zMgotCWlmIChmY250bChwb3N0 bWFzdGVyX2FsaXZlX2Zkc1tQT1NUTUFTVEVSX0ZEX1dBVENIXSwgRl9TRVRGRCwgRkRfQ0xP RVhFQykgPCAwKQotCQllcmVwb3J0KEZBVEFMLAotCQkJCShlcnJjb2RlX2Zvcl9zb2NrZXRf YWNjZXNzKCksCi0JCQkJIGVycm1zZ19pbnRlcm5hbCgiY291bGQgbm90IHNldCBwb3N0bWFz dGVyIGRlYXRoIG1vbml0b3JpbmcgcGlwZSB0byBGRF9DTE9FWEVDIG1vZGU6ICVtIikpKTsK LSNlbmRpZgotfQotCi0vKgotICogSW5pdGlhbGl6ZSB0aGUgYmFzaWMgZW52aXJvbm1lbnQg Zm9yIGEgc3RhbmRhbG9uZSBwcm9jZXNzLgotICoKLSAqIGFyZ3YwIGhhcyB0byBiZSBzdWl0 YWJsZSB0byBmaW5kIHRoZSBwcm9ncmFtJ3MgZXhlY3V0YWJsZS4KLSAqLwotdm9pZAotSW5p dFN0YW5kYWxvbmVQcm9jZXNzKGNvbnN0IGNoYXIgKmFyZ3YwKQotewotCUFzc2VydCghSXNQ b3N0bWFzdGVyRW52aXJvbm1lbnQpOwotCi0JTXlCYWNrZW5kVHlwZSA9IEJfU1RBTkRBTE9O RV9CQUNLRU5EOwotCi0JLyoKLQkgKiBTdGFydCBvdXIgd2luMzIgc2lnbmFsIGltcGxlbWVu dGF0aW9uCi0JICovCi0jaWZkZWYgV0lOMzIKLQlwZ3dpbjMyX3NpZ25hbF9pbml0aWFsaXpl KCk7Ci0jZW5kaWYKLQotCUluaXRQcm9jZXNzR2xvYmFscygpOwotCi0JLyogSW5pdGlhbGl6 ZSBwcm9jZXNzLWxvY2FsIGxhdGNoIHN1cHBvcnQgKi8KLQlJbml0aWFsaXplTGF0Y2hTdXBw b3J0KCk7Ci0JSW5pdFByb2Nlc3NMb2NhbExhdGNoKCk7Ci0JSW5pdGlhbGl6ZUxhdGNoV2Fp dFNldCgpOwotCi0JLyoKLQkgKiBGb3IgY29uc2lzdGVuY3kgd2l0aCBJbml0UG9zdG1hc3Rl ckNoaWxkLCBpbml0aWFsaXplIHNpZ25hbCBtYXNrIGhlcmUuCi0JICogQnV0IHdlIGRvbid0 IHVuYmxvY2sgU0lHUVVJVCBvciBwcm92aWRlIGEgZGVmYXVsdCBoYW5kbGVyIGZvciBpdC4K LQkgKi8KLQlwcWluaXRtYXNrKCk7Ci0Jc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZCbG9j a1NpZywgTlVMTCk7Ci0KLQkvKiBDb21wdXRlIHBhdGhzLCBubyBwb3N0bWFzdGVyIHRvIGlu aGVyaXQgZnJvbSAqLwotCWlmIChteV9leGVjX3BhdGhbMF0gPT0gJ1wwJykKLQl7Ci0JCWlm IChmaW5kX215X2V4ZWMoYXJndjAsIG15X2V4ZWNfcGF0aCkgPCAwKQotCQkJZWxvZyhGQVRB TCwgIiVzOiBjb3VsZCBub3QgbG9jYXRlIG15IG93biBleGVjdXRhYmxlIHBhdGgiLAotCQkJ CSBhcmd2MCk7Ci0JfQotCi0JaWYgKHBrZ2xpYl9wYXRoWzBdID09ICdcMCcpCi0JCWdldF9w a2dsaWJfcGF0aChteV9leGVjX3BhdGgsIHBrZ2xpYl9wYXRoKTsKLX0KLQogdm9pZAogU3dp dGNoVG9TaGFyZWRMYXRjaCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGli cHEvbGlicHEtYmUuaCBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgKaW5kZXggNDE4 NjdkYzE0YWMuLjUzZjYxNzhhOGE5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9saWJwcS9s aWJwcS1iZS5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgKQEAgLTEzMiwx MCArMTMyLDExIEBAIHR5cGVkZWYgc3RydWN0IENsaWVudENvbm5lY3Rpb25JbmZvCiB0eXBl ZGVmIHN0cnVjdCBQb3J0CiB7CiAJcGdzb2NrZXQJc29jazsJCQkvKiBGaWxlIGRlc2NyaXB0 b3IgKi8KLQlib29sCQlub2Jsb2NrOwkJLyogaXMgdGhlIHNvY2tldCBpbiBub24tYmxvY2tp bmcgbW9kZT8gKi8KLQlQcm90b2NvbFZlcnNpb24gcHJvdG87CQkvKiBGRS9CRSBwcm90b2Nv bCB2ZXJzaW9uICovCiAJU29ja0FkZHIJbGFkZHI7CQkJLyogbG9jYWwgYWRkciAocG9zdG1h c3RlcikgKi8KIAlTb2NrQWRkcglyYWRkcjsJCQkvKiByZW1vdGUgYWRkciAoY2xpZW50KSAq LworCisJYm9vbAkJbm9ibG9jazsJCS8qIGlzIHRoZSBzb2NrZXQgaW4gbm9uLWJsb2NraW5n IG1vZGU/ICovCisJUHJvdG9jb2xWZXJzaW9uIHByb3RvOwkJLyogRkUvQkUgcHJvdG9jb2wg dmVyc2lvbiAqLwogCWNoYXIJICAgKnJlbW90ZV9ob3N0OwkvKiBuYW1lIChvciBpcCBhZGRy KSBvZiByZW1vdGUgaG9zdCAqLwogCWNoYXIJICAgKnJlbW90ZV9ob3N0bmFtZTsJLyogbmFt ZSAobm90IGlwIGFkZHIpIG9mIHJlbW90ZSBob3N0LCBpZgogCQkJCQkJCQkJICogYXZhaWxh YmxlICovCkBAIC0yMTgsMTEgKzIxOSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBQb3J0CiAgKiBD bGllbnRTb2NrZXQgaG9sZHMgYSBzb2NrZXQgZm9yIGFuIGFjY2VwdGVkIGNvbm5lY3Rpb24s IGFsb25nIHdpdGggdGhlCiAgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZW5kcG9pbnRzLgog ICovCi10eXBlZGVmIHN0cnVjdCBDbGllbnRTb2NrZXQgeworc3RydWN0IENsaWVudFNvY2tl dCB7CiAJcGdzb2NrZXQJc29jazsJCQkvKiBGaWxlIGRlc2NyaXB0b3IgKi8KIAlTb2NrQWRk cglsYWRkcjsJCQkvKiBsb2NhbCBhZGRyIChwb3N0bWFzdGVyKSAqLwogCVNvY2tBZGRyCXJh ZGRyOwkJCS8qIHJlbW90ZSBhZGRyIChjbGllbnQpICovCi19IENsaWVudFNvY2tldDsKK307 Cit0eXBlZGVmIHN0cnVjdCBDbGllbnRTb2NrZXQgQ2xpZW50U29ja2V0OwogCiAjaWZkZWYg VVNFX1NTTAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3Jj L2luY2x1ZGUvbWlzY2FkbWluLmgKaW5kZXggMTRiZDU3NGZjMjQuLjBiNDEyNTQ5MjBjIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9t aXNjYWRtaW4uaApAQCAtMzE3LDcgKzMxNyw2IEBAIGV4dGVybiBpbnQJdHJhY2VfcmVjb3Zl cnkoaW50IHRyYWNlX2xldmVsKTsKIGV4dGVybiBQR0RMTElNUE9SVCBjaGFyICpEYXRhYmFz ZVBhdGg7CiAKIC8qIG5vdyBpbiB1dGlscy9pbml0L21pc2Npbml0LmMgKi8KLWV4dGVybiB2 b2lkIEluaXRQb3N0bWFzdGVyQ2hpbGQodm9pZCk7CiBleHRlcm4gdm9pZCBJbml0U3RhbmRh bG9uZVByb2Nlc3MoY29uc3QgY2hhciAqYXJndjApOwogZXh0ZXJuIHZvaWQgSW5pdFByb2Nl c3NMb2NhbExhdGNoKHZvaWQpOwogZXh0ZXJuIHZvaWQgU3dpdGNoVG9TaGFyZWRMYXRjaCh2 b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5o IGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgKaW5kZXggNjVhZmQxZWEx ZTguLmI2YjMzOGE0OTcxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1 dG92YWN1dW0uaAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0uaApA QCAtNTUsMjAgKzU1LDE0IEBAIGV4dGVybiBib29sIElzQXV0b1ZhY3V1bVdvcmtlclByb2Nl c3Modm9pZCk7CiAjZGVmaW5lIElzQW55QXV0b1ZhY3V1bVByb2Nlc3MoKSBcCiAJKElzQXV0 b1ZhY3V1bUxhdW5jaGVyUHJvY2VzcygpIHx8IElzQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3Mo KSkKIAotLyogRnVuY3Rpb25zIHRvIHN0YXJ0IGF1dG92YWN1dW0gcHJvY2VzcywgY2FsbGVk IGZyb20gcG9zdG1hc3RlciAqLworLyogY2FsbGVkIGZyb20gcG9zdG1hc3RlciBhdCBzZXJ2 ZXIgc3RhcnR1cCAqLwogZXh0ZXJuIHZvaWQgYXV0b3ZhY19pbml0KHZvaWQpOwotZXh0ZXJu IGludAlTdGFydEF1dG9WYWNMYXVuY2hlcih2b2lkKTsKLWV4dGVybiBpbnQJU3RhcnRBdXRv VmFjV29ya2VyKHZvaWQpOwogCiAvKiBjYWxsZWQgZnJvbSBwb3N0bWFzdGVyIHdoZW4gYSB3 b3JrZXIgY291bGQgbm90IGJlIGZvcmtlZCAqLwogZXh0ZXJuIHZvaWQgQXV0b1ZhY1dvcmtl ckZhaWxlZCh2b2lkKTsKIAotI2lmZGVmIEVYRUNfQkFDS0VORAotZXh0ZXJuIHZvaWQgQXV0 b1ZhY0xhdW5jaGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSBwZ19hdHRyaWJ1dGVf bm9yZXR1cm4oKTsKLWV4dGVybiB2b2lkIEF1dG9WYWNXb3JrZXJNYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwotZXh0ZXJuIHZvaWQgQXV0 b3ZhY3V1bVdvcmtlcklBbSh2b2lkKTsKLWV4dGVybiB2b2lkIEF1dG92YWN1dW1MYXVuY2hl cklBbSh2b2lkKTsKLSNlbmRpZgorZXh0ZXJuIHZvaWQgQXV0b1ZhY0xhdW5jaGVyTWFpbihj aGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKSBwZ19hdHRyaWJ1 dGVfbm9yZXR1cm4oKTsKK2V4dGVybiB2b2lkIEF1dG9WYWNXb3JrZXJNYWluKGNoYXIgKnN0 YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pIHBnX2F0dHJpYnV0ZV9ub3Jl dHVybigpOwogCiBleHRlcm4gYm9vbCBBdXRvVmFjdXVtUmVxdWVzdFdvcmsoQXV0b1ZhY3V1 bVdvcmtJdGVtVHlwZSB0eXBlLAogCQkJCQkJCQkgIE9pZCByZWxhdGlvbklkLCBCbG9ja051 bWJlciBibGtubyk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1eHBy b2Nlc3MuaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5oCmluZGV4IDVj MmQ2NTI3ZmY2Li43NTM5NGNhMDE1NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9zdG1h c3Rlci9hdXhwcm9jZXNzLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXhwcm9j ZXNzLmgKQEAgLTEzLDggKzEzLDYgQEAKICNpZm5kZWYgQVVYUFJPQ0VTU19ICiAjZGVmaW5l IEFVWFBST0NFU1NfSAogCi0jaW5jbHVkZSAibWlzY2FkbWluLmgiCi0KLWV4dGVybiB2b2lk IEF1eGlsaWFyeVByb2Nlc3NNYWluKEF1eFByb2NUeXBlIGF1eHR5cGUpIHBnX2F0dHJpYnV0 ZV9ub3JldHVybigpOworZXh0ZXJuIHZvaWQgQXV4aWxpYXJ5UHJvY2Vzc0luaXQodm9pZCk7 CiAKICNlbmRpZgkJCQkJCQkvKiBBVVhQUk9DRVNTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3Bvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9w b3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oCmluZGV4IDdmYTdlZTJkODc4Li5jMjlj MzdkZjljYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlcl9p bnRlcm5hbHMuaAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVy bmFscy5oCkBAIC01NCw3ICs1NCw3IEBAIGV4dGVybiB2b2lkIEJhY2tncm91bmRXb3JrZXJT dG9wTm90aWZpY2F0aW9ucyhwaWRfdCBwaWQpOwogZXh0ZXJuIHZvaWQgRm9yZ2V0VW5zdGFy dGVkQmFja2dyb3VuZFdvcmtlcnModm9pZCk7CiBleHRlcm4gdm9pZCBSZXNldEJhY2tncm91 bmRXb3JrZXJDcmFzaFRpbWVzKHZvaWQpOwogCi0vKiBGdW5jdGlvbiB0byBzdGFydCBhIGJh Y2tncm91bmQgd29ya2VyLCBjYWxsZWQgZnJvbSBwb3N0bWFzdGVyLmMgKi8KLWV4dGVybiB2 b2lkIFN0YXJ0QmFja2dyb3VuZFdvcmtlcih2b2lkKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4o KTsKKy8qIEVudHJ5IHBvaW50IG9mIGEgYmFja2dyb3VuZCB3b3JrZXIgcHJvY2VzcywgY2Fs bGVkIGZyb20gcG9zdG1hc3Rlci5jICovCitleHRlcm4gdm9pZCBCYWNrZ3JvdW5kV29ya2Vy TWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKSBwZ19h dHRyaWJ1dGVfbm9yZXR1cm4oKTsKIAogI2VuZGlmCQkJCQkJCS8qIEJHV09SS0VSX0lOVEVS TkFMU19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd3JpdGVy LmggYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd3JpdGVyLmgKaW5kZXggYTY2NzIyODcz ZjQuLmVlNTRmYzQwMWVmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jn d3JpdGVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dyaXRlci5oCkBAIC0y Nyw4ICsyNyw4IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgQ2hlY2tQb2ludFRpbWVvdXQ7 CiBleHRlcm4gUEdETExJTVBPUlQgaW50IENoZWNrUG9pbnRXYXJuaW5nOwogZXh0ZXJuIFBH RExMSU1QT1JUIGRvdWJsZSBDaGVja1BvaW50Q29tcGxldGlvblRhcmdldDsKIAotZXh0ZXJu IHZvaWQgQmFja2dyb3VuZFdyaXRlck1haW4odm9pZCkgcGdfYXR0cmlidXRlX25vcmV0dXJu KCk7Ci1leHRlcm4gdm9pZCBDaGVja3BvaW50ZXJNYWluKHZvaWQpIHBnX2F0dHJpYnV0ZV9u b3JldHVybigpOworZXh0ZXJuIHZvaWQgQmFja2dyb3VuZFdyaXRlck1haW4oY2hhciAqc3Rh cnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikgcGdfYXR0cmlidXRlX25vcmV0 dXJuKCk7CitleHRlcm4gdm9pZCBDaGVja3BvaW50ZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0 YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwog CiBleHRlcm4gdm9pZCBSZXF1ZXN0Q2hlY2twb2ludChpbnQgZmxhZ3MpOwogZXh0ZXJuIHZv aWQgQ2hlY2twb2ludFdyaXRlRGVsYXkoaW50IGZsYWdzLCBkb3VibGUgcHJvZ3Jlc3MpOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9mb3JrX3Byb2Nlc3MuaCBiL3Ny Yy9pbmNsdWRlL3Bvc3RtYXN0ZXIvZm9ya19wcm9jZXNzLmgKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDEyZGVjYzgxMzNiLi4wMDAwMDAwMDAwMAotLS0gYS9zcmMvaW5jbHVk ZS9wb3N0bWFzdGVyL2ZvcmtfcHJvY2Vzcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAs MCBAQAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogZm9ya19wcm9jZXNzLmgKLSAq CSAgRXhwb3J0cyBmcm9tIHBvc3RtYXN0ZXIvZm9ya19wcm9jZXNzLmMuCi0gKgotICogQ29w eXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCi0gKgotICogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9mb3JrX3Byb2Nlc3MuaAotICoK LSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0jaWZuZGVmIEZPUktfUFJPQ0VTU19ICi0j ZGVmaW5lIEZPUktfUFJPQ0VTU19ICi0KLWV4dGVybiBwaWRfdCBmb3JrX3Byb2Nlc3Modm9p ZCk7Ci0KLSNlbmRpZgkJCQkJCQkvKiBGT1JLX1BST0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9wZ2FyY2guaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0 ZXIvcGdhcmNoLmgKaW5kZXggM2JkNGZhYzcxZTUuLjU3N2ZjMTRlMWQwIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3BnYXJjaC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bv c3RtYXN0ZXIvcGdhcmNoLmgKQEAgLTI5LDcgKzI5LDcgQEAKIGV4dGVybiBTaXplIFBnQXJj aFNobWVtU2l6ZSh2b2lkKTsKIGV4dGVybiB2b2lkIFBnQXJjaFNobWVtSW5pdCh2b2lkKTsK IGV4dGVybiBib29sIFBnQXJjaENhblJlc3RhcnQodm9pZCk7Ci1leHRlcm4gdm9pZCBQZ0Fy Y2hpdmVyTWFpbih2b2lkKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKK2V4dGVybiB2b2lk IFBnQXJjaGl2ZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0 YV9sZW4pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogZXh0ZXJuIHZvaWQgUGdBcmNoV2Fr ZXVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgUGdBcmNoRm9yY2VEaXJTY2FuKHZvaWQpOwogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCBiL3NyYy9p bmNsdWRlL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5oCmluZGV4IDNiMzg4OWM1OGMwLi5iYjBi MTVmY2YzMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9wb3N0bWFzdGVy LmgKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmgKQEAgLTU4LDE0 ICs1OCw0OCBAQCBleHRlcm4gaW50CU1heExpdmVQb3N0bWFzdGVyQ2hpbGRyZW4odm9pZCk7 CiAKIGV4dGVybiBib29sIFBvc3RtYXN0ZXJNYXJrUElERm9yV29ya2VyTm90aWZ5KGludCk7 CiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLWV4dGVybiBwaWRfdCBwb3N0bWFzdGVyX2Zvcmtl eGVjKGludCBhcmdjLCBjaGFyICphcmd2W10pOwotZXh0ZXJuIHZvaWQgU3ViUG9zdG1hc3Rl ck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7 CitleHRlcm4gdm9pZCBCYWNrZW5kTWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBz dGFydHVwX2RhdGFfbGVuKTsKIAorI2lmZGVmIEVYRUNfQkFDS0VORAogZXh0ZXJuIFNpemUg U2htZW1CYWNrZW5kQXJyYXlTaXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgU2htZW1CYWNrZW5k QXJyYXlBbGxvY2F0aW9uKHZvaWQpOwogI2VuZGlmCiAKKy8qIGluIHByb2Nlc3Nfc3RhcnQu YyAqLworCisvKiB0aGlzIGJldHRlciBtYXRjaCB0aGUgbGlzdCBpbiBwcm9jZXNzX3N0YXJ0 LmMgKi8KK3R5cGVkZWYgZW51bSBQb3N0bWFzdGVyQ2hpbGRUeXBlIHsKKwlQTUNfQkFDS0VO RCA9IDAsCisJUE1DX0FWX0xBVU5DSEVSLAorCVBNQ19BVl9XT1JLRVIsCisJUE1DX0JHV09S S0VSLAorCVBNQ19TWVNMT0dHRVIsCisKKwkvKgorCSAqIHNvLWNhbGxlZCAiYXV4IHByb2Nl c3NlcyIuIFRoZXNlIGFjY2VzcyBzaGFyZWQgbWVtb3J5LCBidXQgYXJlIG5vdCBhdHRhY2hl ZCB0bworCSAqIGFueSBwYXJ0aWN1bGFyIGRhdGFiYXNlLiBPbmx5IG9uZSBvZiBlYWNoIG9m IHRoZXNlIGNhbiBiZSBydW5uaW5nIGF0IGEgdGltZS4KKwkgKi8KKwlQTUNfU1RBUlRVUCwK KwlQTUNfQkdXUklURVIsCisJUE1DX0FSQ0hJVkVSLAorCVBNQ19DSEVDS1BPSU5URVIsCisJ UE1DX1dBTF9XUklURVIsCisJUE1DX1dBTF9SRUNFSVZFUiwKK30gUG9zdG1hc3RlckNoaWxk VHlwZTsKKwordHlwZWRlZiB2b2lkICgqQ2hpbGRFbnRyeVBvaW50KSAoY2hhciAqc3RhcnR1 cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbik7CisKKy8qIGRlZmluZWQgaW4gbGli cHEtYmUuaCAqLworZXh0ZXJuIHN0cnVjdCBDbGllbnRTb2NrZXQgKk15Q2xpZW50U29ja2V0 OworCitleHRlcm4gcGlkX3QgcG9zdG1hc3Rlcl9jaGlsZF9sYXVuY2goUG9zdG1hc3RlckNo aWxkVHlwZSBjaGlsZF90eXBlLCBjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVw X2RhdGFfbGVuLCBzdHJ1Y3QgQ2xpZW50U29ja2V0ICpzb2NrKTsKKworI2lmZGVmIEVYRUNf QkFDS0VORAorZXh0ZXJuIHZvaWQgU3ViUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CisjZW5kaWYKKworY29uc3QgY2hh ciAqUG9zdG1hc3RlckNoaWxkTmFtZShQb3N0bWFzdGVyQ2hpbGRUeXBlIGNoaWxkX3R5cGUp OworCiAvKgogICogTm90ZTogTUFYX0JBQ0tFTkRTIGlzIGxpbWl0ZWQgdG8gMl4xOC0xIGJl Y2F1c2UgdGhhdCdzIHRoZSB3aWR0aCByZXNlcnZlZAogICogZm9yIGJ1ZmZlciByZWZlcmVu Y2VzIGluIGJ1Zl9pbnRlcm5hbHMuaC4gIFRoaXMgbGltaXRhdGlvbiBjb3VsZCBiZSBsaWZ0 ZWQKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvc3RhcnR1cC5oIGIvc3Jj L2luY2x1ZGUvcG9zdG1hc3Rlci9zdGFydHVwLmgKaW5kZXggNmEyZTRjNDUyNmIuLmVjODg1 MDYzYWFiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3N0YXJ0dXAuaAor KysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3N0YXJ0dXAuaApAQCAtMjYsNyArMjYsNyBA QAogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBsb2dfc3RhcnR1cF9wcm9ncmVzc19pbnRlcnZh bDsKIAogZXh0ZXJuIHZvaWQgSGFuZGxlU3RhcnR1cFByb2NJbnRlcnJ1cHRzKHZvaWQpOwot ZXh0ZXJuIHZvaWQgU3RhcnR1cFByb2Nlc3NNYWluKHZvaWQpIHBnX2F0dHJpYnV0ZV9ub3Jl dHVybigpOworZXh0ZXJuIHZvaWQgU3RhcnR1cFByb2Nlc3NNYWluKGNoYXIgKnN0YXJ0dXBf ZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigp OwogZXh0ZXJuIHZvaWQgUHJlUmVzdG9yZUNvbW1hbmQodm9pZCk7CiBleHRlcm4gdm9pZCBQ b3N0UmVzdG9yZUNvbW1hbmQodm9pZCk7CiBleHRlcm4gYm9vbCBJc1Byb21vdGVTaWduYWxl ZCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvc3lzbG9nZ2Vy LmggYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3N5c2xvZ2dlci5oCmluZGV4IDM0ZGE3Nzhm MWVmLi43ZGM0MWIzMGU3YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9z eXNsb2dnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3N5c2xvZ2dlci5oCkBA IC04Niw5ICs4Niw3IEBAIGV4dGVybiBpbnQJU3lzTG9nZ2VyX1N0YXJ0KHZvaWQpOwogCiBl eHRlcm4gdm9pZCB3cml0ZV9zeXNsb2dnZXJfZmlsZShjb25zdCBjaGFyICpidWZmZXIsIGlu dCBjb3VudCwgaW50IGRlc3RpbmF0aW9uKTsKIAotI2lmZGVmIEVYRUNfQkFDS0VORAotZXh0 ZXJuIHZvaWQgU3lzTG9nZ2VyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSBwZ19hdHRy aWJ1dGVfbm9yZXR1cm4oKTsKLSNlbmRpZgorZXh0ZXJuIHZvaWQgU3lzTG9nZ2VyTWFpbihj aGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKSBwZ19hdHRyaWJ1 dGVfbm9yZXR1cm4oKTsKIAogZXh0ZXJuIGJvb2wgQ2hlY2tMb2dyb3RhdGVTaWduYWwodm9p ZCk7CiBleHRlcm4gdm9pZCBSZW1vdmVMb2dyb3RhdGVTaWduYWxGaWxlcyh2b2lkKTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvd2Fsd3JpdGVyLmggYi9zcmMvaW5j bHVkZS9wb3N0bWFzdGVyL3dhbHdyaXRlci5oCmluZGV4IDZlYmE3YWQ3OWNmLi45OWI3Y2Mw N2ZiMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93YWx3cml0ZXIuaAor KysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3dhbHdyaXRlci5oCkBAIC0xOCw2ICsxOCw2 IEBACiBleHRlcm4gUEdETExJTVBPUlQgaW50IFdhbFdyaXRlckRlbGF5OwogZXh0ZXJuIFBH RExMSU1QT1JUIGludCBXYWxXcml0ZXJGbHVzaEFmdGVyOwogCi1leHRlcm4gdm9pZCBXYWxX cml0ZXJNYWluKHZvaWQpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOworZXh0ZXJuIHZvaWQg V2FsV3JpdGVyTWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFf bGVuKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKIAogI2VuZGlmCQkJCQkJCS8qIF9XQUxX UklURVJfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVj ZWl2ZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKaW5kZXgg MjgxNjI2ZmE2ZjUuLjkyZGVhZDRkYjdiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi93YWxyZWNlaXZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dh bHJlY2VpdmVyLmgKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB3YWxyY3ZfY2xlYXJfcmVzdWx0KFdh bFJjdkV4ZWNSZXN1bHQgKndhbHJlcykKIH0KIAogLyogcHJvdG90eXBlcyBmb3IgZnVuY3Rp b25zIGluIHdhbHJlY2VpdmVyLmMgKi8KLWV4dGVybiB2b2lkIFdhbFJlY2VpdmVyTWFpbih2 b2lkKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKK2V4dGVybiB2b2lkIFdhbFJlY2VpdmVy TWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKSBwZ19h dHRyaWJ1dGVfbm9yZXR1cm4oKTsKIGV4dGVybiB2b2lkIFByb2Nlc3NXYWxSY3ZJbnRlcnJ1 cHRzKHZvaWQpOwogZXh0ZXJuIHZvaWQgV2FsUmN2Rm9yY2VSZXBseSh2b2lkKTsKIAotLSAK Mi4zMC4yCgo= --------------kg1n0gXnIqDHZBpf1kTdCJqe--